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.

[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

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

  • 以前在使用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

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

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