我認爲一個數組可以分配在gpu前。 __device__ int device_array[100];
而不使用cudaMalloc作爲長度是已知的。但是,當我運行下面的代碼顯示一些不相關的數字。我研究了一本關於cuda的流行書,其中的所有示例都使用了cudaMalloc。一個固定大小的數組可以像這樣使用,或者它必須分配給cudaMalloc?cuda固定大小的全局數組
__device__ int device_array[100];
__global__ void kernel() {
device_array[blockIdx.x] = blockIdx.x;
}
void call_kernel(int *host_array) {
kernel<<<100,1>>>();
cudaMemcpy(host_array, device_array, 100 * sizeof(int), cudaMemcpyDeviceToHost);
}
int main() {
int host_array[100];
call_kernel(host_array);
for (int i = 0; i < 100; i++)
cout << host_array[i] << endl;
}
你的代碼沒有錯誤檢查。可能是'cudaMemcpy'調用失敗,但您不知道它,因爲您沒有檢查返回狀態。一旦確認運行時發生了錯誤,問題的根源就會變得明顯。 – talonmies
更多[線索](http://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#device-variable-qualifier)。如何做錯誤檢查很好地討論[這裏](http://stackoverflow.com/questions/14038589/what-is-the-canonical-way-to-check-for-errors-using-the-cuda-runtime- API)。 –