2015-09-04 42 views
0

上我的本地集羣,我可以使用這個腳本OpenMP的超級計算機

#$ -S /bin/bash 
#$ -N name_of_project 
#$ -o output.out 
#$ -pe orte 36 
#$ -V 
#$ -cwd 

export OMP_NUM_THREADS=36 
./my_programme 

我可以用4個節點上運行跨36個內核的OpenMP的C++代碼的並行化的OpenMP我整個代碼36個核...

然而,在超級計算設施,是XSEDE的一部分:

https://portal.xsede.org/tacc-stampede

我被告知,我可以跨1個節點有16只跑的OpenMP核心。我有點困惑,所以如果我想用超過17個線程來並行化我的程序,我必須將我的程序重新編碼爲MPI程序?

我想問一下將OpenMP程序轉換爲MPI程序有多困難?謝謝。

+1

您不應該嘗試將OpenMP轉換爲MPI。 OpenMP是一種共享內存編程模型。 MPI主要是分佈式內存編程模型。從共享到分佈式數據結構需要仔細設計。 – Jeff

+0

OpenMPI是MPI的一個實現。這很令人困惑,但請嘗試區分兩者。 – Jeff

+0

但是我的代碼需要非常大的並行(500線程+是必需的)......似乎唯一可行的方法是進行轉換...... – wasabi123

回答

2

如果我想用並行有效的多於17 的線程,我必須重新編碼我的程序到一個MPI程序?

是的,您需要編寫一些MPI代碼才能利用可供您使用的節點。 OpenMP面向共享內存體系結構,您需要消息傳遞庫才能在節點之間進行通信。

並行化分佈式體系結構是不同的(因爲每個節點都有自己的共享內存,並且沒有辦法讓一個節點知道其他節點的狀態以便同步工作。你必須自己做。

我想問問,將OpenMP程序 轉換爲MPI程序有多困難?

根據您的應用程序和您編寫代碼的方式,MPI並行化可能非常簡單。你應該詳細說明你的算法,以便判斷。大線是:

  • Embarrasingly parallel problem與工作的靜載荷:每個MPI節點都有相同的工作數量和沒有或與其他節點很少互動做同樣的工作。如果你的應用程序進入這個類別,那麼並行化是直接的,可以用collective MPI routines完成。不過,您需要編寫並瞭解MPI如何工作。
  • 更復雜的並行問題/動態工作負載:您的問題需要同步,您的節點之間的一些通信和/或工作量未知,您需要一個負載平衡策略。這是什麼HPC帥哥爲生存:)

我希望你進入第一類!最後,樂趣從這裏開始,爲了有一個很好的加速,你將需要找到妥協並且玩弄東西,因爲你將會有一個混合的OpenMP/MPI並行化。