openMP没有并行线程

no parallel threads with openMP

本文关键字:线程 并行 openMP      更新时间:2023-10-16

我的问题是我无法使用openMP进行并行化。

我的系统:ubuntu 11.4英特尔(R(酷睿(TM(i5 CPU M 430@2.27GHz

编译器:g++版本:4.5.2带有标志-fopenmp

有了这段代码,我发现只有一个线程:

int nthreads, tid, procs, maxt, inpar, dynamic, nested;
// Start parallel region 
#pragma omp parallel private(nthreads, tid)   {
// Obtain thread number    
tid = omp_get_thread_num();
// Only master thread does this    
if (tid == 0) 
{
printf("Thread %d getting environment info...n", tid);
// Get environment information 
procs = omp_get_num_procs();
nthreads = omp_get_num_threads();
maxt = omp_get_max_threads();
inpar = omp_in_parallel();
dynamic = omp_get_dynamic();
nested = omp_get_nested();
// Print environment information 
printf("Number of processors = %dn", procs);
printf("Number of threads = %dn", nthreads);
printf("Max threads = %dn", maxt);
printf("In parallel? = %dn", inpar);
printf("Dynamic threads enabled? = %dn", dynamic);
printf("Nested parallelism supported? = %dn", nested);  
}
}

因为我看到以下输出:

Number of processors = 4
Number of threads = 1
Max threads = 4
In parallel? = 0
Dynamic threads enabled? = 0
Nested parallelism supported? = 0

问题出在哪里?

有人能帮忙吗?

您的代码在Ubuntu 11.04上使用g++编译器4.5.2版,但我不得不更改

#pragma omp parallel private(nthreads, tid)   {

#pragma omp parallel private(nthreads, tid)  
{

以便成功编译。

编辑:如果修复语法不起作用,我的下一个想法是问你用来编译代码的确切命令是什么?

#pragma omp parallel private(nthreads, tid)   {

是不正确的语法,如hrandjet 所指出的

杂注必须以新行结束,因此{应该在下一行。

#pragma omp parallel private(nthreads, tid)   
{

这在Windows XP上对我有效。

输出是否以开头

Thread 0 getting environment info...

如果不是,问题如上所述-开括号({(必须在新行上。要进一步证明这一点,请尝试初始化

int tid = 1

看看输出是否仍然显示。否则,编译器将忽略#pragma(可能是因为括号问题(。