我刚开始学习如何使用CUDA。我想运行一些简单的示例代码:当我在仿真模式下运行CUDA:cudaMemcpy只能在仿真模式下工作
float *ah, *bh, *ad, *bd;
ah = (float *)malloc(sizeof(float)*4);
bh = (float *)malloc(sizeof(float)*4);
cudaMalloc((void **) &ad, sizeof(float)*4);
cudaMalloc((void **) &bd, sizeof(float)*4);
... initialize ah ...
/* copy array on device */
cudaMemcpy(ad,ah,sizeof(float)*N,cudaMemcpyHostToDevice);
cudaMemcpy(bd,ad,sizeof(float)*N,cudaMemcpyDeviceToDevice);
cudaMemcpy(bh,bd,sizeof(float)*N,cudaMemcpyDeviceToHost);
(NVCC -deviceemu)运行良好(和实际拷贝阵列)。 但是,当我在常规模式下运行它时,它运行没有错误,但从不复制数据。就好像cudaMemcpy行被忽略。
我在做什么错?
非常感谢你, 杰森
糟糕。这似乎是与cudaMalloc()问题。它没有在设备上分配内存。这是为什么? – Jason 2010-03-19 19:01:17
你初始化了设备吗? 使用cuda获取上次错误以打印状态 – Anycorn 2010-03-19 20:34:04
@aaa:使用运行时API(以cuda而不是cu为前缀的函数)意味着您不需要明确初始化设备,它将在第一次cuda调用时附加到第一个兼容设备。 – Tom 2010-03-20 17:24:05