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.
以前在使用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
望指点!不甚感激!!!!!!
以前在使用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
望指点!不甚感激!!!!!!