對於CUDA編程,我是初學者,但這種情況看起來並不複雜,但它不起作用。內核看起來不會執行
#include <cuda.h>
#include <cuda_runtime.h>
#include <iostream>
__global__ void add(int *t)
{
t[2] = t[0] + t[1];
}
int main(int argc, char **argv)
{
int sum_cpu[3], *sum_gpu;
sum_cpu[0] = 1;
sum_cpu[1] = 2;
sum_cpu[2] = 0;
cudaMalloc((void**)&sum_gpu, 3 * sizeof(int));
cudaMemcpy(sum_gpu, sum_cpu, 3 * sizeof(int), cudaMemcpyHostToDevice);
add<<<1, 1>>>(sum_gpu);
cudaMemcpy(sum_cpu, sum_gpu, 3 * sizeof(int), cudaMemcpyDeviceToHost);
std::cout << sum_cpu[2];
cudaFree(sum_gpu);
return 0;
}
我編譯它像這樣
nvcc main.cu
它編譯,但返回的值是0。我試圖從內核中進行打印,也不會打印,所以我認爲我沒有按」執行。你能解釋爲什麼嗎?
添加[適當的cuda錯誤檢查](http://stackoverflow.com/questions/14038589/what-is-the-canonical-way-to-check-for-errors-using-the-cuda-runtime-api )到您的代碼。你也可以嘗試用'cuda-memcheck'運行你的代碼。 – 2015-02-07 17:23:02
謝謝你的提示。在第一個cudaMalloc上檢查報告「未知錯誤」時出錯。 'cuda-memcheck'檢測到0個錯誤。 – wiktus239 2015-02-07 17:34:57
您有機器配置問題。 CUDA在該機器上無法正常工作,因爲它沒有正確安裝,或者因爲其他機器問題。您可能要仔細按照[適用於您的操作系統的入門指南](http://docs.nvidia.com/cuda/index.html#getting-started-guides)中的說明進行操作,包括驗證步驟。 – 2015-02-07 17:42:41