2010-12-15 48 views
4

我想並行化一個100個節點的分佈式內存集羣中的C串行代碼。該集羣由25個刀片組成,每個刀片有四個核心,每個都由infiniband組成。在我使用PBS在不同節點之間傳播程序的幾個串行運行之前。現在我想知道:分佈式內存集羣的OpenMP或MPI或OpenMPI?

  1. 什麼是在這種情況下OpenMP或MPI或OpenMPI的最佳選擇(目前我不想嘗試混合的方法,因爲我開始學習)?
  2. 我在哪裏可以找到示例/教程?
  3. 對於一個簡單的帶有for循環的串行代碼,OpenMP/MPI/OpemMPI總是比像PBS這樣的排隊方法執行得更好嗎?

回答

13

分佈式存儲器種規則出的OpenMP其是用於共享內存計算。 MPI是一個標準,OpenMPI是該標準的實現(還有其他的如MPICH或LAM-MPI)。所以

  1. MPI和OpenMPI是一個非常可觀的實現。然而,我認爲找到這樣的沒有MPI安裝的羣集是相對不尋常的,因此更好的選擇可能是您已經擁有的MPI安裝。你當然應該向系統管理人員說明這一點。而且你不應該在不知道你在做什麼的情況下嘗試在羣集上安裝OpenMPI。

  2. 到處都是。這裏有一個good place開始。

  3. PBS是一個作業調度系統。在像你這樣的集羣上,你通常會同時安裝MPI和安裝作業調度程序,如果不是PBS,那麼最有可能的就是Grid Engine。

正如你已經發現你可以使用PBS(或Grid Engine)來分派多個串行作業到一個集羣。您也可以使用它將單個並行作業分派到集羣,以便在您請求的許多處理器上執行。然而,你的問題提出了這種可能性,但你的問題是:不好意思平行,並且MPI可能會讓你過度。谷歌周圍的斜體字在你承諾平行你的程序之前 - 除非你想享受純粹的享受,這將毫無疑問的結果。

2

OpenMP是用於共享內存計算機,我相信你不能在分佈式內存中使用它。所以你將不得不使用MPI。

良好MPI教程: https://computing.llnl.gov/tutorials/mpi/

+0

英特爾將OpenMP移植到其「Cluster OpenMP」項目中的分佈式內存中(現在已放棄)。主頁:https://software.intel.com/en-us/articles/cluster-openmp-for-intel-compilers,論文「將OpenMP擴展到羣集」:http://assets.devx.com/goparallel/19403 .pdf HPCWire:http://www.hpcwire.com/2006/05/19/openmp_on_clusters-1/和基準測試[「英特爾集羣OpenMP的最初經驗」](http://citeseerx.ist.psu.edu/viewdoc /download?doi=10.1.1.87.8887&rep=rep1&type=pdf#page=61) – osgx 2014-05-01 02:49:49