我在实验室作业中使用 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 0
OpenMP 结构块。正确的代码应如下所示:
#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)