我能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
然后,您发送给我们完全错误的方向与你给我们的信息。因此,您的问题与群集无关。我建议关闭这个问题(标题和所有内容都是完全误导性的),并且正确地重新表达它,然后回来一个新的问题。 –