我尝试用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'是不是没有声明?
答案 0 :(得分:3)
根据您的代码,并行区域的范围(您定义id的范围)仅包括后续行,即您定义id的行。因此,当您在外部使用id变量时,会得到未定义的变量错误。此外,您还获得了一个未使用的id变量警告,因为您没有在并行区域(可以使用它)中使用它。
很可能你只是忘了添加花括号来扩大范围,以便完全并行化,即
private fun observeDatabase() {
viewModel.andis
.observe(this, Observer {
it?.let {
viewModel.andisList.clear()
viewModel.andisList.addAll(it)
}
})
}
最小的工作示例是:
#pragma omp parallel
{
int id,nths,tnbr;
id=omp_get_thread_num();
nths=omp_get_num_thread();
...
}
这可以成功编译,例如使用g ++ v.4.8.5
#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;
}