我的问题是我没有使用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 = %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
有什么问题?
有人可以帮忙吗?
答案 0 :(得分:5)
您的代码适用于Ubuntu 11.04,g ++编译器版本4.5.2但是我必须更改
#pragma omp parallel private(nthreads, tid) {
到
#pragma omp parallel private(nthreads, tid)
{
成功编译。
编辑:如果修复语法不起作用,我的下一个想法是询问你用来编译代码的确切命令是什么?
答案 1 :(得分:0)
#pragma omp parallel private(nthreads, tid) {
是错误的语法,如hrandjet
所述编译指示必须以新行结束,因此{应该在下一行。
#pragma omp parallel private(nthreads, tid)
{
这适用于Windows XP。
答案 2 :(得分:0)
输出是否以
开头Thread 0 getting environment info...
如果没有,问题如上所述 - 开括号({)必须在新行上。为了进一步证明这一点,请尝试初始化
int tid = 1
并查看输出是否仍然显示。如果没有,编译器会忽略#pragma(可能是因为括号问题)。