1

编码:

#include <stdio.h>
#include <stdlib.h>
#include <omp.h>

int main(int argc, char** argv){

    omp_set_dynamic(0);
    omp_set_num_threads(4);

    #pragma omp paralell
    {
        printf("%d\n", omp_get_thread_num());
    }

}

输出:

0

输出不应该是 0、1、2 和 3 的某种排列吗?

4

3 回答 3

5

Writing omp_set_dynamic(0); you indicate that the runtime will not dynamically adjust the number of threads. The argument of this function should be nonzero to avail the dynamic adjustment of num. of threads. Also you misspelled parallel in the code.

于 2013-10-15T16:22:01.730 回答
1

如果您复制并粘贴您的源代码,我认为这是因为“并行”拼写错误。我刚刚发现如果未设置 -W 标志,gcc 会默默地忽略openmp pragma 的拼写错误。用 -Wall 编译给出

warning: ignoring #pragma omp paralell [-Wunknown-pragmas]
#pragma omp paralell

因此,让 gcc 打印警告是个好主意。

于 2013-10-15T16:43:44.533 回答
0

并且不要忘记编译器的启用 OpenMP 支持,对于 gcc/icc/vc++ 等主流编译器默认禁用此功能

于 2013-10-15T16:44:18.833 回答