繁体   English   中英

openMP没有并行线程

[英]no parallel threads with openMP

我的问题是我无法与openMP并行化。

我的系统:ubuntu 11.4 Intel(R)Core(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 = %d\n", procs);
printf("Number of threads = %d\n", nthreads);
printf("Max threads = %d\n", maxt);
printf("In parallel? = %d\n", inpar);
printf("Dynamic threads enabled? = %d\n", dynamic);
printf("Nested parallelism supported? = %d\n", nested);  
}
}

因为我看到以下输出:

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

问题是什么?

可以帮个忙吗?

您的代码在具有g ++编译器版本4.5.2的Ubuntu 11.04上对我有效,但是我必须更改

#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(可能是由于括号问题)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM