我使用这个for循环,我想自动并行化,它用于PI数的计数:
piece=1.0/100000;
for (t=0.0; t<1.0; t=t+piece){
x=t+piece/(float)2;
if(x<=1.0){
integral=4/(1+x*x);
sum=sum+integral;
}
}
这是区间0-1中所有值的doint部分和。然后我从它做了PI值。但这不是问题,问题是,当我使用pgcc自动并行化时,我设置了多个进程,但是当我编译程序时,我被告知“循环没有矢量化/并行化:不可数”。我已经尝试了一切,但仍然没有改变。有任何想法吗?感谢
答案 0 :(得分:3)
你的循环变量是double,尝试更改代码,使其使用整数:
for (int t = 0; t < 100000; t++) {
x=(t/100000.0)+piece/(float)2;
if(x<=1.0){
integral=4/(1+x*x);
sum=sum+integral;
}
}
答案 1 :(得分:2)
我猜这是因为你的循环计数器是float
或double
。尝试使用积分计数器。
int step;
for (step = 0; step < 100000; step++) {
// determine x from step
...
}