2009-06-09 56 views
2

我想寫一個代碼轉換器,它需要一個基於OpenMP的並行程序並在羣集上運行它。將並行程序轉換爲集羣程序。從OpenMP到?

我該如何解決這個問題?我使用哪些庫?我如何爲此設置一個小羣集?

我發現在互聯網上很難找到有關集羣計算的好材料。

編輯:如果這是不可能的,那麼英特爾如何做到這一點?英特爾編譯器似乎正是我想要的。我沒有任何我想運行的具體應用程序。我想寫「轉換器/編譯器」,而不是應用程序。我知道共享內存不同於分佈式內存,但是必須有一種同步內存的方式,如果不是所有情況,那麼對於某些特定情況,即使這意味着應用程序是用自定義結構編寫的。

+0

增加了一些說明 – jetru 2009-06-10 02:17:20

回答

2

在我看來,這不是一個好主意。

OpenMP背後的基本思想是數據共享並行執行。它運行良好,訪問共享數據不需要任何費用。每個線程都可以訪問共享緩存或RAM中的變量。

羣集計算利用消息傳遞,因爲羣集中的計算機具有分佈式內存。當一個進程需要另一個進程的數據時,則應該管理通過網絡傳遞的數據。這是非常耗時的操作。因此,如果你想編寫這樣的編譯器,你應該爲OpenMP中的每個數據訪問實現數據廣播操作(例如來自MPI的MPI_Bcast)。這將完全消除並行性能。

1

這根本不可能。您必須以完全不同的方式構建您的代碼才能使其在羣集上運行(編程多臺機器的步驟與編程一臺機器不同),其中不同。

有沒有魔術精靈塵埃做到這一點。另一方面,如果你在編寫集羣的程序時,可以在一臺機器上運行它(儘管它顯然會變慢)。

3

Intel有一個OpenMP的實現,它可以與x86和64位集羣的C++和Fortran編譯器配合使用。您可以免費獲得這些編譯器的30天評估版。除此之外,Zifre大部分都是正確的。如果你關心的是可擴展性,請咬緊牙關,在另一種編程模型(MPI,CUDA,Cilk,...)中編寫你的並行程序,該程序模型是基於分佈式系統而設計的。如果您提供有關您的應用程序的更多信息,我們可能會在這方面提供更多有用的指導。

1

SCORE/SCASH和Omni OpenMP編譯器