我用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 parallelfor
for(i = 0; i < 10000; i++)
{
Gray[i] = 0;
}
这时候多核的效率反而比单核效率低了很多倍,加上private share等参数效果一样(效率都比单核低得多)
请问为什么会出现这种情况,试了很多次。发现在for循环内部不同的代码,有时多核效率高,有时单核效率高,请问大家怎么回事?难道openmp应用有限制
另外用schedule(static)时候,函数可以正确执行,但是在schedule(guided) schedule(dynamic) schedule(runtime)运行结果都出错,请问任务分配方式难道会对结果有影响。
Linglan Zhao:
你好,我写了#pragma omp parallel for后会编译报错,请问是怎么回事呢?我已经添加了路径,#include <omp.h>,并且enable support for openMP3.0