→ a1u1usul3: code附一下吧 10/02 12:38
→ a1u1usul3: figure1是deviceQuery,你自己跑的只是nvcc -v,就不同 10/02 12:44
原來如此
我剛剛發現我沒有deviceQuery那個檔案!?
https://imgur.com/oFQyc7u
已補上(別人上傳的) 感恩~
※ 編輯: Absolitude (140.114.253.178), 10/02/2017 13:29:11
對了
之前有遇到建立偵錯時出現"找不到或無法開啟 PDB 檔案。"的錯誤訊息
參考 https://goo.gl/uBMFdu 可以處理掉大部分的錯誤訊息,但是還是有幾個看起來跟
NVIDIA有關的dll檔無法開啟,但是實際上是有這些檔案的,有可能是這個原因嗎
https://imgur.com/TAq1mGe
※ 編輯: Absolitude (140.114.253.178), 10/02/2017 13:52:57
※ 編輯: Absolitude (140.114.253.178), 10/02/2017 13:59:42
範例檔偵錯時有這些訊息
https://imgur.com/giYOrCF
※ 編輯: Absolitude (140.114.253.178), 10/02/2017 14:36:49
→ a1u1usul3: 最新的cuda通常支援度都不太好,要不要試試cuda8 10/02 15:34
→ a1u1usul3: 我很不會用visual studio,都用linux寫cuda程式 10/02 15:34
我先試試CUDA8 噢
對LINUX不熟>"< 希望未來有機會學
謝謝~
※ 編輯: Absolitude (140.114.253.178), 10/02/2017 15:37:56
就是這個原因!!!!! 裝第八版之後範例程式檔和另一個SAMPLE檔都可以執行了!
浪費我一天..
不過那個影片的範例檔還是無法執行@@
https://imgur.com/pEINkNc
程式碼
#include <stdio.h>
#define SIZE 1024
__global__ void VectorAdd(int *a, int *b, int *c, int n)
{
int i = threadIdx.x;
c[i] = a[i] + b[i];
}
int main()
{
int *a, *b, *c;
cudaMallocManaged(&a, SIZE * sizeof(int));
cudaMallocManaged(&b, SIZE * sizeof(int));
cudaMallocManaged(&c, SIZE * sizeof(int));
for (int i = 0; i < SIZE; ++i)
{
a[i] = i;
b[i] = i;
c[i] = 0;
}
VectorAdd << <1, SIZE >> > (a, b, c, SIZE);
cudaDeviceSynchronize();
for (int i = 0; i < 10; ++i)
printf("c[%d] = %d\n", i, c[i]);
cudaFree(a);
cudaFree(b);
cudaFree(c);
return 0;
}
我看看怎麼把程式碼放到網路上
※ 編輯: Absolitude (140.114.253.20), 10/02/2017 17:34:01
→ a1u1usul3: 我用linux執行你貼的code沒問題 10/02 20:09
→ a1u1usul3: 貼code可以用codepad或類似的網站 10/02 20:13
謝謝~
→ a1u1usul3: 我加了一點error handling的code,你看看是什麼原因吧 10/02 20:24
結果是這樣..
https://imgur.com/Zz3YEIa
我稍早發現一個問題,就是預設的範例檔跟自己額外寫的程式__global__似乎不一樣
範例檔
https://imgur.com/aKOr5qV
自己的
https://imgur.com/GWZOQtW
我原本以為是vs版本不同,因為之前又裝了2013,想說他影片裡是2015,今晚重裝vs2015
第一次裝壞,裝第二次,又裝兩次nvidia toolkit從晚上八點裝到剛剛才裝好....但
global的問題還是在不知道怎麼辦,我真該學linux了,windows真的快搞死我.....
※ 編輯: Absolitude (140.114.235.65), 10/03/2017 02:00:30
如果同時把範例檔最上面的兩個INCLUDE拿掉global就會從"#define...."變成下面的
"這個宣告.....",如果在維持有define的global的情況下(不刪最上面include)執行
你的程式,結果也是operation not supported.....到底怎麼回事,快被搞瘋了..
※ 編輯: Absolitude (140.114.235.65), 10/03/2017 02:11:59
※ 編輯: Absolitude (140.114.235.65), 10/03/2017 02:13:00
好像跟"這個宣告沒有任何儲存...."無關
下載了 cuda by example的範例檔,讀取他自創的的book.h檔案也會顯示"這個宣告沒有
任何儲存....",但是可以執行,所以是我的stdio.h有問題@@
https://developer.nvidia.com/cuda-example
※ 編輯: Absolitude (140.114.235.65), 10/03/2017 03:59:39
→ a1u1usul3: In CUDA 6, Unified Memory is supported starting wit 10/03 13:44
→ a1u1usul3: h the Kepler GPU architecture (Compute Capability 3 10/03 13:44
→ a1u1usul3: .0 or higher) 10/03 13:45
→ a1u1usul3: 你的卡會不會很舊了,Capability有大於3嗎? 10/03 13:45
我的是 810M,剛剛查了一下,不知道為什麼這張表沒有,820、800都有就是跳過810,
不過沒意外的話這兩張都只有2.1,那我這張也不會超過3
https://developer.nvidia.com/cuda-gpus
GeForce 820M 2.1
GeForce 800M 2.1
請問這個計算是屬於Unified Memory嗎? (其實我完全不懂>"<),不過CUDA給VS的範例檔
目前看起來都還算能執行,之前用MATLAB也能跑gpuArray的工作
真的很謝謝你願意持續回答我的問題
※ 編輯: Absolitude (140.114.235.65), 10/03/2017 14:57:33
推 a1u1usul3: 不是每個範例都跑得起來,有些function會要新的顯卡才 10/03 15:32
→ a1u1usul3: 支援,有用到那些function的範例就會跑不起來 10/03 15:32
推 a1u1usul3: 2.1確實是有點舊了,要常常考慮是不是不被支援的問題 10/03 15:35
→ a1u1usul3: cudaManagedAlloc看起來是Unified的 10/03 15:37
原來真相是這樣,我瞭解了!! 非常感謝
※ 編輯: Absolitude (140.114.235.65), 10/03/2017 16:56:57