【发布时间】:2018-05-10 12:17:37
【问题描述】:
我有一个 for 循环,它将总结两个变量,“时间”和“成功运行”,但循环运行的次数在循环内随机更改。 (我认为代码在这个问题上是不言自明的)
问题是我不断收到分段错误错误。不使用 openmp 时不会发生这种情况。
这是我尝试并行运行的循环。
rnd() 是一个函数,它返回一个介于 0 和 1 之间的随机数。
#pragma omp parallel for
for(w=1; w<=200000; w++){
tau=0;
for(i=0; i<N; i++) g[i]=1;
g[0] = 2;
N_a=N-1;
N_b=1;
b=false;
while(b== false){
tau++;
R = rnd() * (N_a + N_b*r_b);
prev=0; next=0;
chosenB = N;
for(i=0; i<N; i++){
if(g[i]==1) next = prev + 1.0;
else next = prev + r_b;
if(R>prev && R<next){
chosenB = i; break;
}
prev = next;
}
R = rnd() * N;
while(int(R)==chosenB)
R = rnd() * N;
if(g[int(R)]==1) N_a--;
else N_b--;
g[int(R)] = g[chosenB];
if(g[chosenB] == 1) N_a++;
else N_b++;
if(N_b == N){
b = true; break;
}
if(N_b == 0){
b = false; break;
}
}
if(g[0]==2 && b==true){
Time += tau;
successRuns++;
}
if(b==false) w--;
runs++;
}
//end of parallel
cout<<Time/successRuns<<endl;
cout<<successRuns/runs<<endl;
【问题讨论】:
标签: c++ parallel-processing openmp