我剛開始學習如何使用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