2013-07-10 72 views
0

我想CUDA編程模型和編程一般都很新。我試圖並行化一個期望最大化算法。我正在研究具有計算能力2.0的gtx 480。起初,我認爲設備沒有理由啓動自己的線程,但當然,我很遺憾錯誤。我遇到這個pdf。CUDA動態並行的替代方案

http://docs.nvidia.com/cuda/pdf/CUDA_Dynamic_Parallelism_Programming_Guide.pdf

不幸的是,動態並行只適用於最新和最偉大的GPU,計算能力3.5。沒有深入研究太多的細節,動態平行的另一種選擇是什麼? CPU EM算法中的循環具有很多依賴性並且高度嵌套,這似乎使動態並行性成爲一種有吸引力的能力。我不確定我的問題是否有意義,所以請詢問是否需要澄清。

謝謝!

+0

在動態並行機制中,內核中有內核調用。如果你規定內核調用可以用'for'循環交換,那麼粗略地說你應該用'for'循環交換嵌套的內核調用。 – JackOLantern

+0

@RobertCrovella你們應該真的對GPU的命名做些事情。一個GT 640來作爲2.1,3.0和3.5?https://developer.nvidia.com/cuda-gpus –

+0

@RobertCrovella GT 640不再顯示爲計算3.5。也許你想收回那條評論。 –

回答

0

我在維基百科檢查了你的算法,我不確定你需要動態並行。

你做的期望一步在內核中,__syncthreads(),做到最大化步驟,並再次__syncthreads()。從這個距離看,期望看起來像是一個簡化原語,最大化是一個過濾器。

如果它不起作用,並且您需要真正的任務並行性,那麼GPU可能不是最佳選擇。雖然開普勒GPU可以在一定程度上做到這一點,但這不是這種架構設計的目的。在這種情況下,您最好使用多CPU系統,如辦公室網格,超級計算機或Xeon Phi加速器。您還應該檢查OpenMP和MPI,這些是用於任務並行編程的語言(實際上OpenMP在大多數情況下只是少數幾個編譯指示)。

+0

讓我事先說明我對期望最大化不是很熟悉。儘管如此,在我看來,除了特殊情況之外,最大化應該作爲優化問題來處理,在每個迭代步驟中計算期望值。根據您必須優化的參數數量,GPU大規模並行可用於計算要優化的功能及其衍生工具,以實現快速和準確的收斂。 – JackOLantern

+0

@Kristof,我正在使用的當前實現使用開放式MPI,但它並不像我正在開發的那樣快。 – user2529048