繁体   English   中英

OpenMP“未使用的变量”编译错误

[英]OpenMP 'unused variable' compiling error

我试图编写一个使用openmp进行并行化的c ++程序。 不幸的是,我收到了一个我不理解的编译错误。 我列出了g ++命令,有问题的代码行和错误消息。 如果我错过重要信息,请告诉我。

g++ -o Pogramm -Wall -fopenmp Programm.cpp

#pragma omp parallel
int id,nths,tnbr;
id=omp_get_thread_num();
nths=omp_get_num_thread();

Tree.cpp:52:7:警告:未使用的变量'id'[-Wunused-variable]

错误:在此范围内未声明'id'id = omp_get_thread_num();

有人可以告诉我为什么不声明'id'ist吗?

根据您的代码,并行区域的范围(即您定义id的范围)仅包括后续行,即您定义id的行。 因此,在外部使用id变量时,会出现未定义的变量错误。 此外,您还收到未使用的id变量警告,因为未在并行区域(可以使用该区域)中使用它。

很可能您只是忘了添加花括号来扩大将要并行化的范围,即

#pragma omp parallel
{
  int id,nths,tnbr;
  id=omp_get_thread_num();
  nths=omp_get_num_thread();
  ...
}

一个最小的工作示例是:

#include<iostream>
#include<omp.h>
using namespace std;
int main() {
#pragma omp parallel
    {
        int id,nths,tnbr;
        id=omp_get_thread_num();
        nths=omp_get_num_threads();
        cout << "id, nths: " << id << nths << endl;
    }
    return 0;
}

可以成功编译,例如使用g ++ v.8.5.5。

g++ main.cpp -fopenmp -Wall

暂无
暂无

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

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