看板 C_and_CPP 關於我們 聯絡資訊
開發平台(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
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: https://imgur.com/4uahBFp 10/02 20:13
a1u1usul3: 貼code可以用codepad或類似的網站 10/02 20:13
謝謝~
a1u1usul3: 我加了一點error handling的code,你看看是什麼原因吧 10/02 20:24
a1u1usul3: http://codepad.org/mr6zWlPE 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: memory-in-cuda-6/ or https://goo.gl/hgo566 10/03 13:44
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