作者Absolitude (別再睡了起床了愛麗)
看板C_and_CPP
標題[問題] 新手 VS2015 CUDA addKernel launch fail
時間Sun Oct 1 15:31:28 2017
開發平台(Platform): (Ex: Win10, Linux, ...)
win8.1
編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出)
Visual Studio 2015
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
cuda
問題(Question):
我最近才知道有gpu運算這個東西,是cuda完全新手,想按照這個官方的影片練習
https://www.youtube.com/watch?v=2EbHSCvGFM0
所以安裝了Visual Studio 2015和NVIDIA CUDA Toolkit 9.0,用VS2015建立專案就會有
一個預設的程式(如影片),但是這個程式建立專案時會遇到一些問題
https://imgur.com/wauloBh
我用記事本把這些檔案存成UNICODE後這些錯誤訊息就不見了
https://imgur.com/o3Ic0Om
但是執行後抓不到kernel
https://imgur.com/WSbM65U
========
如果改成影片中的程式建立專案也沒問題,但是執行後直接當掉
https://imgur.com/hW9Gz0A
https://imgur.com/W07Ckas
餵入的資料(Input):
預期的正確結果(Expected Output):
錯誤結果(Wrong Output):
https://imgur.com/WSbM65U
addKernel launch failed
程式碼(Code):(請善用置底文網頁, 記得排版)
VS2015開cuda預設的程式以及影片中的範例程式,如果有需要我再貼上來~
https://github.com/wreardan/GlimmerCuda/blob/master/kernel.cu
補充說明(Supplement):
雖然用cmd執行結果跟官網範例的Figure 1 好像不太一樣(這樣有問題嗎?)
https://imgur.com/viLPYnR
https://goo.gl/TBa5Ua
但是NVIDIA CUDA Toolkit 9.0安裝應該沒有問題,因為本來MATLAB抓不到gpuDevice,安
裝之後就可以抓到,變數可以存到gpuArray也可以順利執行
想請問一下問題可能是出在哪裡? 感恩
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.114.235.65
※ 文章網址: https://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1506843115.A.56B.html
1F:→ a1u1usul3: code附一下吧 10/02 12:38
2F:→ 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
3F:→ a1u1usul3: 最新的cuda通常支援度都不太好,要不要試試cuda8 10/02 15:34
4F:→ 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
5F:→ a1u1usul3: 我用linux執行你貼的code沒問題 10/02 20:09
7F:→ a1u1usul3: 貼code可以用codepad或類似的網站 10/02 20:13
謝謝~
8F:→ 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
12F:→ a1u1usul3: In CUDA 6, Unified Memory is supported starting wit 10/03 13:44
13F:→ a1u1usul3: h the Kepler GPU architecture (Compute Capability 3 10/03 13:44
14F:→ a1u1usul3: .0 or higher) 10/03 13:45
15F:→ 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
16F:推 a1u1usul3: 不是每個範例都跑得起來,有些function會要新的顯卡才 10/03 15:32
17F:→ a1u1usul3: 支援,有用到那些function的範例就會跑不起來 10/03 15:32
18F:推 a1u1usul3: 2.1確實是有點舊了,要常常考慮是不是不被支援的問題 10/03 15:35
19F:→ a1u1usul3: cudaManagedAlloc看起來是Unified的 10/03 15:37
原來真相是這樣,我瞭解了!! 非常感謝
※ 編輯: Absolitude (140.114.235.65), 10/03/2017 16:56:57