我想知道是否當我調用cudaMemcpy(...)獲取GPU上的內存時,數組中的值是否被複制。我將更好地解釋:我將一個數組的值複製到另一個數組,然後調用cudaMalloc和cudaMemcpy。cudaMemcpy後數組的值
// Copying values of the arrays
for(int i = 0; i<16; i++){
array_device_1[i] = array_host_1[i];
array_device_2[i] = array_host_2[i];
}
// Memory allocation of array_device_1 and array_device_2
cudaMalloc((void**) &array_device_1, SIZE_INT*size);
cudaMalloc((void**) &array_device_2, SIZE_INT*size);
// Transfer array_device_1 and array_device_2
cudaMemcpy(array_device_1, array_host_1, SIZE_INT*size, cudaMemcpyHostToDevice);
cudaMemcpy(array_device_2, array_host_2, SIZE_INT*size, cudaMemcpyHostToDevice);
kernel<<<N, N>>>(array_device_1, array_device_2);
cudaMemcpy(array_host_1, array_device_1, SIZE_INT*size, cudaMemcpyDeviceToHost);
cudaMemcpy(array_host_2, array_device_2, SIZE_INT*size, cudaMemcpyDeviceToHost);
cudaFree(array_device_1);
cudaFree(array_device_2);
所以,當我執行所有這些說明,我使用內核裏面所有的陣列,是array_device_1裏面的價值觀和array_device_2與否?我試圖打印出內核後,我發現所有的數組都是空的!真的,我不明白我如何保持它們中的值,然後用內核函數改變它們的值。
你'//複製arrays'部分的值不作任何感。您不能從主機的數據複製到設備內存這種方式,那就是'cudaMemcpy'是有! – leftaroundabout 2012-03-29 15:51:12