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

[6678+OpenMP]OpenMP在执行并行循环时出现问题,循环次数不按预期进行!

以前在使用OpenMP对for循环进行拆分的时候都一切正常,大约有一小段时间没碰过板子,之后再写程序的时候突然就发生了奇怪的错误,完全不知道到底问题出在什么环节,出错描述如下:

int i = 0;

#pragma omp parallel for private(i)

for (i=0; i<16; i++) {printf("i=%d\n",i);

}

该代码release之后跑在仿真上,结果改循环只运行了8次!!!每个核各只执行一次,可是这个程序本该是需要执行16次的!

输出结果大致如下:

[Core 0] i=0

[Core 1] i=1

[Core 2] i=2

[Core 3] i=3

[Core 4] i=4

[Core 5] i=5

[Core 6] i=6

[Core7] i=7

尝试对循环进行修改,结果发现了其他问题,将for循环修改为dynamic调度模式,即 

int i = 0;

#pragma omp parallel for schedule(dynamic) private(i)

for (i=0; i<16; i++) {printf("i=%d\n",i);

}

程序运行时,i的值是从负的最大值开始递增,不停地执行,最后程序崩溃。

而将调度模式改为guided模式之后,可以正常输出0-15这个结果,但是,当用于具体的算法过程中时,会发现有些值会被跳过不被执行,例如循环次数位10000次,则每次执行时,中间都会有几个随机的值不被打印出来。

跪求解答,谢谢!!!

换过板子重新生成过代码,问题依旧。

Compiler version: TI v7.4.0

MCSDK: 2.1.2.5

OpenMP BIOS runtime library: 1.1.3.02

SYS/BIOS: 6.33.6.50

望指点!不甚感激!!!!!!

Marvin Wang:

以前在使用OpenMP对for循环进行拆分的时候都一切正常,大约有一小段时间没碰过板子,之后再写程序的时候突然就发生了奇怪的错误,完全不知道到底问题出在什么环节,出错描述如下:



int i = 0;#pragma omp parallel for private(i)for (i=0; i<16; i++) {printf("i=%d\n",i);}

该代码release之后跑在仿真上,结果改循环只运行了8次!!!每个核各只执行一次,可是这个程序本该是需要执行16次的!

输出结果大致如下:

[Core 0] i=0

[Core 1] i=1

[Core 2] i=2

[Core 3] i=3

[Core 4] i=4

[Core 5] i=5

[Core 6] i=6

[Core7] i=7

尝试对循环进行修改,结果发现了其他问题,将for循环修改为dynamic调度模式,即 

int i = 0;#pragma omp parallel for schedule(dynamic) private(i)for (i=0; i<16; i++) {printf("i=%d\n",i);}

程序运行时,i的值是从负的最大值开始递增,不停地执行,最后程序崩溃。

而将调度模式改为guided模式之后,可以正常输出0-15这个结果,但是,当用于具体的算法过程中时,会发现有些值会被跳过不被执行,例如循环次数位10000次,则每次执行时,中间都会有几个随机的值不被打印出来。

跪求解答,谢谢!!!

换过板子重新生成过代码,问题依旧。

Compiler version: TI v7.4.0

MCSDK: 2.1.2.5

OpenMP BIOS runtime library: 1.1.3.02

SYS/BIOS: 6.33.6.50

望指点!不甚感激!!!!!!

Linglan Zhao:

回复 Marvin Wang:

你好,我写了#pragma omp parallel for后会编译报错,请问是怎么回事呢?我已经添加了路径,#include <omp.h>,并且enable support for openMP3.0

赞(0)
未经允许不得转载:TI中文支持网 » [6678+OpenMP]OpenMP在执行并行循环时出现问题,循环次数不按预期进行!
分享到: 更多 (0)