2012-03-01 32 views
0

我有一個用C++編寫的實用程序,並使用MPICH2做了一些繁重的計算,我對它的性能不滿意,並且有很多改進的範圍。將支持MPICH2的代碼轉換爲OpenCL代碼

首先MPICH2只使用exes,所以我必須將我的數據寫入文件並將該文件作爲參數傳遞給該實用程序,該實用程序再次讀取所有數據並將輸出寫回文件。 如果我可以在DLL中有這個,我可以節省大量的時間來傳遞數據。另外,如果我能以某種方式在GPU上運行,這將會提升(不太確定)。

我在想,將實用程序代碼轉換爲OpenCL需要付出多少努力,或者是否有任何工具可以完成60-70%的轉換任務。

回答

2

我最好的猜測是,它將需要儘可能多的工作來將代碼轉換爲OpenCL,因爲它將將類似的串行代碼轉換爲並行代碼。我知道沒有工具可以自動將MPI代碼轉換爲OpenCL代碼。我非常有興趣從其他人那裏學習任何這類工具。

在GPU上運行MPI方面已經做了一些研究併發布了結果。我的印象是,任何這項工作仍然是研究成績,可能既不可靠也不便攜。

最後,雖然它不會幫助您使用您的GPU,但爲什麼不用您的MPI代碼糾正錯誤?我有點不清楚,但似乎其中一個問題是您的MPI代碼寫入和讀取文件是傳遞數據的一種方式。這不是MPI程序的必要特性,可以修改

+2

+1;停止使用文件I/O作爲通信媒介。而且,MPI和OpenCL是正交的;一種是通過傳達節點間的部分問題(或節點上的處理器)來加速計算,另一種是加速節點上的計算。沒有理由讓事情成爲一個或另一個。 – 2012-03-01 13:42:13

+0

我可以刪除讀取和寫入只是傳遞緩衝區地址和實用程序可以更新數據,然後我可以得到結果。但爲此,我必須將實用程序EXE轉換爲DLL,但MPICH2不能與DLL工作。 – Mohit 2012-03-01 14:04:13

+0

將其他庫(例如dll)與mpi或mpich2鏈接起來沒有任何問題,所以你不清楚你在問什麼。 – 2012-03-01 14:58:07