我能for循環做簡單的OpenMP中的表單中的我的臺式機/筆記本電腦(什麼,我確實有一個溫和的簡化...)羣集的單個節點上運行OpenMP
#include <stdlib.h>
#include <stdio.h>
#include <omp.h>
%%%% #include other libraries...
int main(void){
.
.
.
%%% declare and initialize variables.
.
.
.
#pragma omp parallel for collapse(3) shared(tf, p, Fx, Fy, Fz) private(v, i,j,k,t0)
for (i = 0; i < Nx; i++){
for (j = 0; j < Ny; j++){
for (k = 0; k < Nz; k++){
v[0] = Fx[i][j][k];
v[1] = Fy[i][j][k];
v[2] = Fz[i][j][k];
///My_fn changes v and then I put it back into Fx, Fy, Fz
My_fn(v, t0, tf, p);
Fx[i][j][k] = v[0];
Fy[i][j][k] = v[1];
Fz[i][j][k] = v[2];
}
}
}
}
如果需要,我甚至可以在我的筆記本電腦上指定n_threasds = 1,2,3或4個內核,在頂部添加omp_set_num_threads(n_threads);
,我注意到我想要的性能。但是,在使用羣集時,我會對此發表評論。
我有機會到羣集,並希望到集羣,因爲單個節點上運行的代碼具有節點多達48個內核和我的筆記本電腦只有4。當我使用羣集,編譯後,I型到終端
$export OMP_NUM_THREADS=10
$bsub -n 10 ./a.out
但程序運行不正常:I輸出到一個文件,看看它花了0秒到運行,和FX,Fy和Fz的的值是它們是什麼,當我開始他們,所以看起來循環甚至沒有運行。
編輯:管理羣集的人員解決了這個問題,並且可能對該羣集非常具體,因此我提醒人們將問題與他們的具體案例聯繫起來。
當你寫* cluster *我想* distributed-memory *。您要採取哪些步驟來確保OpenMP作業僅在羣集的一個節點上運行? –
是的,OpenMP只能在一臺計算機上運行,但在有權訪問的集羣上,有許多節點的20 - 46處理器比我的4核心筆記本電腦更好... – db1234
然後,您發送給我們完全錯誤的方向與你給我們的信息。因此,您的問題與羣集無關。我建議關閉這個問題(標題和所有內容都是完全誤導性的),並且正確地重新表達它,然後回來一個新的問題。 –