我正在嘗試按照教程發現online。我正在使用Ubuntu 17,從命令行進行編譯。在CUDA中添加時返回不正確的數字
#include <stdio.h>
#include <iostream>
__global__ void add(int a, int b, int *c)
{
*c = a + b;
}
int main()
{
int a,b,c;
int *d_c;
int size = sizeof(int);
a = 2;
b = 7;
cudaMalloc((void **)&d_c,size;
add<<<1,1>>>(a,b,d_c);
cudaMemcpy(&c,d_c,size,cudaMemcpyHostToDevice);
std::cout << a << " + " << b << " = " << c << std::endl;
cudaFree(d_c);
return 0;
}
當我編譯nvcc
我收到以下錯誤:
nvcc warning : The 'compute_20', 'sm_20', and 'sm_21' architectures are deprecated, and may be removed in a future release (Use -Wno-deprecated-gpu-targets to suppress warning).
我忽略了警告,跑a.out
像往常一樣,和我得到的輸出:
2 + 7 = 1
上次我做數學,這是不正確的。我不確定我是否做得不正確,或者我所遵循的教程太舊了,或者與警告有關?任何幫助或線索都可以。我還會提到,我無法編譯nvcc
,直到我安裝了gcc-5
。我相信我已經使用我在這裏找到的these instructions正確地將它們連接在一起。
我也在這裏看過this solution。然而,我沒有找到答案特別有用,所以如果這是正確編譯,爲什麼不能正確地打印出我的終端,我將不勝感激。
任何幫助將不勝感激。
謝謝你的迴應。但是,我更新了我的代碼以使用'cudaMemcpyDeviceToHost',並且我仍然得到1的結果。讓我嘗試錯誤檢查,我在該線程上多次嘗試過一次高峯,但從未想過嘗試實現它。 – Sailanarmo
剛剛發現我的錯誤,非常感謝你讓我錯誤檢查。 GPU Assert返回,'沒有檢測到CUDA功能的設備hello.cu 29'我會繼續研究爲什麼會發生這種情況。 – Sailanarmo
你很快就實現了錯誤檢查。有時需要一段時間才能說服人們這樣做。因此,出現什麼樣的錯誤信息是:您的內核函數甚至沒有執行,因爲CUDA運行時無法找到支持CUDA的設備。確保你有最近的Nvidia卡(Fermi及以上版本,[其中之一](https://developer.nvidia.com/cuda-gpus),Compute Capability> = 2.0),[驅動程序已正確安裝] (http://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html)。分類完成後,固定代碼應該可以工作。 – Drop