我有一個關於並行計算的問題。我有一個用C++編寫的非常大的代碼,它在共享內存的基礎上使用OpenMP進行並行化。我想問是否有可能將這個共享內存代碼轉換爲分佈式內存代碼?OpenMP到分佈式內存代碼
如果可能,需要執行什麼步驟? 謝謝你的合作。
謝謝, 可並行化對共享內存的計算機上運行拉胡爾·辛格
我有一個關於並行計算的問題。我有一個用C++編寫的非常大的代碼,它在共享內存的基礎上使用OpenMP進行並行化。我想問是否有可能將這個共享內存代碼轉換爲分佈式內存代碼?OpenMP到分佈式內存代碼
如果可能,需要執行什麼步驟? 謝謝你的合作。
謝謝, 可並行化對共享內存的計算機上運行拉胡爾·辛格
大多數程序也可以被並行化到分佈式存儲計算機上運行。所以是的,OpenMP程序解決的問題可能在分佈式內存計算機上解決。但是,將OpenMP程序轉換爲分佈式內存程序是另一回事。建議您最好先從串行實現開始,並且將其並行化,而不是嘗試將一種並行思維模式適用於另一種並行執行模式。
因此,您尋求的第一步可能是使程序不平行。但是,正如評論員已經指出的那樣,提供比我現有的更有用的建議(並且我根本沒有提供任何非常有用的建議)是非常困難的,而不瞭解更多關於您的應用程序的信息。
共享內存和分佈式內存是並行計算中的兩種截然不同的範例,這通常意味着不同的思考策略。一些並行編程框架,如UPC或MPI,可以模擬運行在共享或分佈式機器上,儘管它最好不要這樣做,在這裏,UPC意味着用於共享內存,而MPI則意味着用於分佈式內存機器。我不確定OpenMP。
在任何一種情況下,我的建議都是先思考如何在分佈式架構中的代碼中獲得並行性,然後再使用MPI。如果您碰巧在計算科學領域工作,那麼已經有很好的書面軟件包,比如來自阿貢國家實驗室的PETSc
和來自桑迪亞國家實驗室的Trilinos
,這可能會幫助您更快地開發。
共享內存上的MPI通常是一種非常好的選擇,特別是對於在各種機器上運行的代碼。 – 2012-04-04 19:39:28
@HighPerformanceMark我同意這一點。只是與做OpenMP相比,執行MPI通常要做得更多。所以如果你只關心共享內存,OpenMp/UPC可能是更好的選擇。 – GradGuy 2012-04-04 20:42:53
沒有更多信息,沒有人能給你一個明確的答案。發佈一些相關的代碼,或解釋你的程序如何運作得更好一些。 – Bojangles 2012-04-04 16:20:55
我希望你認識到這個沒有一般的答案。將共享內存程序轉換爲分佈式應用程序是非常特殊的。 – Mysticial 2012-04-04 16:21:39
要求對此的一般答案與要求如何[用正則表達式解析HTML]相同(http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained標籤都有效)。 – Mysticial 2012-04-04 16:24:36