我有如下所示的代码片段。对“cudaMemcpyToSymbol”的两次调用基本相同(对 dev_a、dev_b 的所有操作也相同),但是当我运行代码时,它仅在第二次调用“cudaMemcpyToSymbol”时才报告“无效设备符号”错误。如果我删除它,那么代码运行没有任何问题。有谁知道可能是什么原因?谢谢。
struct aStruct {
double *a;
double *b;
};
__device__ struct aStruct as;
int main(void) {
double *dev_a, *dev_b;
HANDLE_ERROR( cudaMalloc( (void**)&dev_a, N * sizeof(double) ) );
HANDLE_ERROR( cudaMalloc( (void**)&dev_b, N * sizeof(double) ) );
...
HANDLE_ERROR( cudaMemcpyToSymbol(as.a, &dev_a, sizeof(double *)) );
HANDLE_ERROR( cudaMemcpyToSymbol(as.b, &dev_b, sizeof(double *)) );
....
}