[問題] CUDA現在可以用A[i][j]來存取了嗎

看板C_and_CPP作者 (snow3804)時間6年前 (2018/01/07 12:15), 編輯推噓3(3013)
留言16則, 8人參與, 6年前最新討論串1/1
開發平台(Platform): (Ex: Win10, Linux, ...) win7 編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出) Visual Studio 2017 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) CUDA9 問題(Question): 以前在CUDA都要用A[i*col+j]來表示A[i][j]的值 但我在這個網站有看到在CUDA程式中使用A[i][j] 但我執行結果印出來c矩陣都是0 請問是哪裡有問題 餵入的資料(Input): 預期的正確結果(Expected Output): 印出C=A+B的結果 錯誤結果(Wrong Output): 程式碼(Code):(請善用置底文網頁, 記得排版) http://www.cnblogs.com/jugg1024/p/4349243.html http://codepad.org/iXPPGSAD 補充說明(Supplement): -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.44.112.208 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1515298520.A.CA8.html

01/07 12:43, 6年前 , 1F
你看到的是CPU的code哦, 下面才是CUDA
01/07 12:43, 1F

01/07 12:55, 6年前 , 2F
下面有一段是有把ptr** assign到ptr*去的部份
01/07 12:55, 2F

01/09 14:00, 6年前 , 3F
為了要在Kernel裡面用[][]結果繞了一大圈
01/09 14:00, 3F

01/11 20:20, 6年前 , 4F
傳入的參數 可以是 int** 就可以用二維了
01/11 20:20, 4F

01/11 20:25, 6年前 , 5F
看有沒有UVA supported
01/11 20:25, 5F

01/11 20:51, 6年前 , 6F
我知道問題點了,不過我覺得應該不能那樣用
01/11 20:51, 6F

01/11 20:52, 6年前 , 7F
cudaMalloc((void**)(&dev_A), M*sizeof(int*));
01/11 20:52, 7F

01/11 20:53, 6年前 , 8F
這樣行實際應該是 void*** 不過他強制cast成**
01/11 20:53, 8F

01/11 22:31, 6年前 , 9F
這種二維的存取會降低效能吧 早點習慣一維陣列是比較好嗎?
01/11 22:31, 9F

01/11 23:26, 6年前 , 10F
用pitch仿二維也可以
01/11 23:26, 10F

01/11 23:37, 6年前 , 11F
用 int (*ptr)[N] 來接 int a[M][N] 就不用 malloc 兩層
01/11 23:37, 11F

01/11 23:46, 6年前 , 12F
不過 CUDA 上 N 只能是常數的樣子
01/11 23:46, 12F

01/12 10:53, 6年前 , 13F
謝謝大家提供意見
01/12 10:53, 13F

01/15 01:51, 6年前 , 14F
cudaMalloc 指標寫在參數可能是要限制只能用一維
01/15 01:51, 14F

01/15 01:51, 6年前 , 15F
紋理記憶體可以用二維,不過讀的方式是用函式
01/15 01:51, 15F

01/15 01:53, 6年前 , 16F
tex2D(rT, x, y) 不過這樣跟自己寫一轉的函式也差不多
01/15 01:53, 16F
文章代碼(AID): #1QKPxOoe (C_and_CPP)