對不起模糊的話題問題,但我正在研究一些學術視頻處理例程。這些算法是用MATLAB編寫的,雖然對於開發目的來說很好,但是它以大約60spf或大約0.0166fps的速度處理視頻。不用說,這對於演示等是不夠的,所以我的暑期工作是將例程轉換爲快速運行的例程。什麼是一個令人尷尬的並行問題的最佳解決方案?
我已經重寫了CUDA代碼中最慢的部分,這是nvidia的GPGPU解決方案。但是,也有很大一部分代碼在CPU上看起來更好,因爲它是相對串行的。問題是,我給出的機器有2個Xeon處理器,總共8個邏輯內核,通過僅爲單核編碼來限制GPU代碼似乎是一種恥辱。視頻轉換過程的功能在於每個幀不依賴於其他幀,所以我在考慮某種異步隊列/流最好。
這裏是我的問題:什麼是最好的方式來實現這種類型的並行與最佳的比例努力來提高產量?
我看過的一些解決方案是OpenMP,.net TPL和簡單的pthreads。
我只是基本接觸異步編程,所以我寧願使用庫或其他東西,而不是亂搞互斥鎖和障礙,並多次在腳下自拍。我不介意學習,因爲這是我今年夏天的目標之一,但同時,並行是硬。但是,如果速度差異實際上非常明顯,我願意將頭髮拉出幾周。 :P
在此先感謝。
如果你可以把問題分解成能上的工作沒有干擾(具有良好定義的同步點)的多個部分,然後使用應該只是糖「庫」 ......一個簡單的方法就是使用線程池,併發隊列(一個用於輸入,一個用於輸出),並且只訪問那個線程「擁有」的對象/數據(這可以放大到不可變的外部結構)。 – 2010-06-21 19:35:30