[問題] 新手 VS2015 CUDA addKernel launch fail

看板C_and_CPP作者 (別再睡了起床了愛麗)時間6年前 (2017/10/01 15:31), 6年前編輯推噓2(2017)
留言19則, 1人參與, 最新討論串1/1
開發平台(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://www.ptt.cc/bbs/C_and_CPP/M.1506843115.A.56B.html

10/02 12:38, , 1F
code附一下吧
10/02 12:38, 1F

10/02 12:44, , 2F
figure1是deviceQuery,你自己跑的只是nvcc -v,就不同
10/02 12:44, 2F
原來如此 我剛剛發現我沒有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

10/02 15:34, , 3F
最新的cuda通常支援度都不太好,要不要試試cuda8
10/02 15:34, 3F

10/02 15:34, , 4F
我很不會用visual studio,都用linux寫cuda程式
10/02 15:34, 4F
我先試試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

10/02 20:09, , 5F
我用linux執行你貼的code沒問題
10/02 20:09, 5F

10/02 20:13, , 6F

10/02 20:13, , 7F
貼code可以用codepad或類似的網站
10/02 20:13, 7F
謝謝~

10/02 20:24, , 8F
我加了一點error handling的code,你看看是什麼原因吧
10/02 20:24, 8F

10/02 20:24, , 9F
結果是這樣.. 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

10/03 13:44, , 11F
memory-in-cuda-6/ or https://goo.gl/hgo566
10/03 13:44, 11F

10/03 13:44, , 12F
In CUDA 6, Unified Memory is supported starting wit
10/03 13:44, 12F

10/03 13:44, , 13F
h the Kepler GPU architecture (Compute Capability 3
10/03 13:44, 13F

10/03 13:45, , 14F
.0 or higher)
10/03 13:45, 14F

10/03 13:45, , 15F
你的卡會不會很舊了,Capability有大於3嗎?
10/03 13:45, 15F
我的是 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

10/03 15:32, , 16F
不是每個範例都跑得起來,有些function會要新的顯卡才
10/03 15:32, 16F

10/03 15:32, , 17F
支援,有用到那些function的範例就會跑不起來
10/03 15:32, 17F

10/03 15:35, , 18F
2.1確實是有點舊了,要常常考慮是不是不被支援的問題
10/03 15:35, 18F

10/03 15:37, , 19F
cudaManagedAlloc看起來是Unified的
10/03 15:37, 19F
原來真相是這樣,我瞭解了!! 非常感謝 ※ 編輯: Absolitude (140.114.235.65), 10/03/2017 16:56:57
文章代碼(AID): #1Pq9dhLh (C_and_CPP)