【发布时间】:2020-11-06 17:56:52
【问题描述】:
我有以下代码
int main(int argc, char** argv )
{
std::vector< std::vector< std::vector<double> > > vec {
{{1,2},{3,4}, {5,6},{7,8}},
{{9,10}, {11,12}},
{{13,14}, {15,16}, {17,18}} };
#pragma acc parallel loop
for (int k = 0; k <3; k++) {
std::vector<std::vector<double>>& vec2d = vec[k];
int L = vec2d.size();
//std::vector<int>dVec{67,51,1,0,50};
std::vector<double>dVec(L, 0.0);
for (int i = 0; i < L; i++)
{
dVec[i] = vec2d[i][1] - vec2d[i][0];
}
for (int j=0; j<2; j++) {
printf("k: %d j: %d vec0: %f, vec1: %f\n", k, j, vec2d[j][0], vec2d[j][1]);
}
}
std::cout<<"finished\n";
return 0;
}
我用pgc++ -fast -ta=tesla:cuda9.2,managed -o runEx runEx.cpp -std=c++17 && ./runEx编译
如果我注释掉#pragma acc parallel loop,那么它就可以工作。但是如果我把它留在那里,那么我会得到错误
PGCC-S-0155-Procedures called in a compute region must have acc routine information: operator delete (void *) (runEx.cpp: 425)
PGCC-S-0155-Accelerator region ignored; see -Minfo messages (runEx.cpp: 6)
PGCC/x86-64 Linux 19.10-0: compilation completed with severe errors
另外,如果我注释掉 std::vector<int>dVec 和包含它的 for 循环,那么即使使用 #pragma acc parallel loop,代码也可以工作
但是,如果我改变循环,它就变成了:
#pragma acc parallel loop
for (int k = 0; k <3; k++) {
std::vector<int>dVec{67,51,1,0,50};
}
然后我得到同样的错误
这是为什么?
【问题讨论】: