OpenMP 无法使用多个线程,没有与编译相关的错误

OpenMP 无法使用多个线程,没有与编译相关的错误

我在实验室作业中使用 openMP,几周前一切都运行良好,但现在它只在一个线程上运行,我读过并猜测这是由于包之间的冲突造成的。以下是代码:

#include "omp.h"
#include <stdio.h>
int main()
{
    omp_set_num_threads(4);
    #pragma omp parallal
    {
        int id = omp_get_thread_num();
        printf("Hello (%d)", id );
        printf("World (%d)\n", id);
        return 0;
    }
}

我得到输出:

$ gcc -fopenmp hello.c
$ ./a.out
Hello (0)World (0)

我尝试重新安装gcc,但没有帮助。

答案1

您的代码中有两个错误,这就是您无法使用多线程的原因。

第一个错误是拼写错误OMP Compiler Directives。您写

#pragma omp parallal

正确的应该是,(这个词是 parallel 而不是 parallel)

#pragma omp parallel

第二个错误是无效的return 0OpenMP 结构块。正确的代码应如下所示:

#include "omp.h"
#include <stdio.h>
int main()
{
    omp_set_num_threads(4);
    #pragma omp parallel
    {
        int id = omp_get_thread_num();
        printf("Hello (%d)", id );
        printf("World (%d)\n", id );
    }
return 0;
}

汇编:

$ gcc prog.c -fopenmp
$ ./a.out
Hello (0)World (0)
Hello (2)World (2)
Hello (1)World (1)
Hello (3)World (3)

相关内容