我希望帮助找出带错误的自动并行化 - 循环未并行化:可能没有用处。我想测试这段代码的并行化,但我不知道,如何使代码对编译器有效并行化。
以下是代码:
for (i = 0; i < piece_length; i++) {
x=(i/(double)piece_length)+piece/(float)2;
// if(x<=1.0){
integral=4/(1+x*x);
sum=sum+integral;
// }
}
循环未并行化:可能没有益处
你知道如何让这个循环更加时间要求能够接受自动并行化吗?
THX
答案 0 :(得分:0)
您在sum
中累积的结果取决于计算顺序。我想pgcc必须有一种方法,你可以告诉你,你不关心重新排序可能带来的影响。但是因此它无法知道,也无法并行化。
在OpenMp中,您会添加类似
的内容#pragma omp parallel for reduction(+: sum)
在循环前面。