TI中文支持网
TI专业的中文技术问题搜集分享网站

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 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

赞(0)
未经允许不得转载:TI中文支持网 » c6678运行openmp的疑问
分享到: 更多 (0)