我在程序中有一个非常奇怪的错误。我花了很多时间在上面,但我还没有找到解决方案。我编写了简单的程序来重现我的问题。也许有人帮助我。我尝试了 cuda-memcheck &使用 CUDA 运行时 API 检查错误的规范方法是什么?但我没有收到任何错误。
细节:
nvcc 版本 - V6.0.1
gcc 版本 - 4.8.1
完整代码:
#include <stdio.h>
__constant__ unsigned long long int bigNumber = 83934243334343;
__device__ bool isFound = false;
__global__ void kernel(int *dev_number) {
unsigned long long int id = threadIdx.x + (blockIdx.x * blockDim.x);
while (id < bigNumber && isFound==false) {
if(id == 10) {
*dev_number = 4;
isFound=true;
}
id++;
}
}
int main(int argc, char *argv[]) {
int number = 0;
int *dev_number;
printf("Number: %d\n", number);
return 0;
}
编译并运行:
nvcc myprogram.cu
./myprogram
当我运行这个程序时,我没有得到任何返回值。但是当变量 - bigNumber 具有较小的值或者我不使用 cudaMalloc 和 cudaMemcpy 时它可以工作(这意味着调用 return 0)。什么连接必须为另一个具有常量 bigNumber 的变量分配内存?有什么问题?