2009-07-11 67 views
5

我正在用C++和Qt構建CD開膛手應用程序。我想並行化應用程序,以便可以同時編碼多個軌道。因此,我已經以這樣的方式構建了應用程序,即編碼軌道是一個「任務」,並且我正在研究一種機制來同時運行一些這些任務。當然,我可以使用線程來完成此任務,並編寫自己的任務隊列或工作管理器,但我認爲英特爾的線程構建模塊(TBB)可能是更好的工具。然而,我有幾個問題。基於Qt的CD開膛手的線程構建模塊(TBB)?

  1. 將FLAV,Ogg Vorbis或Mp3文件中的WAV文件編碼爲tbb :: task會有效嗎?本教程文檔指出,「如果線程頻繁阻塞,則在使用任務調度程序時會出現性能損失」。我不認爲我的編碼任務經常會阻塞互斥鎖,但是需要相對頻繁地訪問磁盤,因爲他們必須從磁盤讀取WAV數據才能進行編碼。本教程描述的這種磁盤活動級別是否存在問題?
  2. TBB能否與Qt合作?當使用Qt線程時,您可以在線程間透明地使用Qt的信號/插槽機制。如果我使用tbb :: tasks而不是Qt線程,情況會如此嗎?會不會有其他「陷阱」?

感謝您提供的任何見解。

回答

1

即使透明地使用其他線程機制,TBB也會運行良好,因此理論上應該沒有什麼能夠阻止您在同一個程序中使用QT的線程類。如果有什麼東西與QT線程(例如GUI)更自然地一起工作,請使用它們,並儘可能將TBB的東西隔離開來。

我沒有看到您正在充分利用TBB,因爲您目前概述了您的設計。你在最好的層面上並行化文件。正如你懷疑的那樣,由於CD是一個非常慢的設備,你可能會花更多的時間來回復多個文件中的數據,而不是實際存儲。

與TBB的真正爆發應該包括利用轉換過程中的任何數據和/或任務並行性。例如,你能否將任何字節塊從流中提取出來,並在其之前或之後獨立於流的任何部分對其應用任何變換?是否有多個可以並行化的轉換步驟?

相關問題