This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

c6678运行openmp的疑问



我用openmp 的for循环调试了几个程序,发现了几个奇怪的问题。

1、第一次测试

int i;

#pragma omp parallel for

for(i = 0; i < 240000; i++)

{

Gray[i] = (Image[3 * i + 2] * 76 + Image[3 * i + 1] * 150 + Image[3 * i] * 30) >> 8;

}

Gray[]是自己定义的一个数组,Image[]也是自己定义的一个数组,作用就是把彩色图像转成灰度图(简单的看成数组间赋值即可),

这时候多核(8个核)效率比单核效率的提高了3倍多,

2、第二次测试,为了更简单在for循环内部直接给数组赋值

int i;

#pragma omp parallel for

for(i = 0; i < 10000; i++)

{

 Gray[i] = 0;

}

这时候多核的效率反而比单核效率低了很多倍,加上private share等参数效果一样(效率都比单核低得多) 

请问为什么会出现这种情况,试了很多次。发现在for循环内部不同的代码,有时多核效率高,有时单核效率高,请问大家怎么回事?难道openmp应用有限制

另外用schedule(static)时候,函数可以正确执行,但是在schedule(guided) schedule(dynamic) schedule(runtime)运行结果都出错,请问任务分配方式难道会对结果有影响。