作者snow3804 (snow3804)
看板C_and_CPP
標題[問題] CUDA現在可以用A[i][j]來存取了嗎
時間Sun Jan 7 12:15:17 2018
開發平台(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://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1515298520.A.CA8.html
1F:推 schizophrena: 你看到的是CPU的code哦, 下面才是CUDA 01/07 12:43
2F:推 schizophrena: 下面有一段是有把ptr** assign到ptr*去的部份 01/07 12:55
3F:推 friends29: 為了要在Kernel裡面用[][]結果繞了一大圈 01/09 14:00
4F:→ hunandy14: 傳入的參數 可以是 int** 就可以用二維了 01/11 20:20
5F:→ sunneo: 看有沒有UVA supported 01/11 20:25
6F:→ hunandy14: 我知道問題點了,不過我覺得應該不能那樣用 01/11 20:51
7F:→ hunandy14: cudaMalloc((void**)(&dev_A), M*sizeof(int*)); 01/11 20:52
8F:→ hunandy14: 這樣行實際應該是 void*** 不過他強制cast成** 01/11 20:53
9F:→ wrt: 這種二維的存取會降低效能吧 早點習慣一維陣列是比較好嗎? 01/11 22:31
10F:→ kent12342004: 用pitch仿二維也可以 01/11 23:26
11F:→ freef1y3: 用 int (*ptr)[N] 來接 int a[M][N] 就不用 malloc 兩層 01/11 23:37
12F:→ freef1y3: 不過 CUDA 上 N 只能是常數的樣子 01/11 23:46
13F:→ snow3804: 謝謝大家提供意見 01/12 10:53
14F:→ hunandy14: cudaMalloc 指標寫在參數可能是要限制只能用一維 01/15 01:51
15F:→ hunandy14: 紋理記憶體可以用二維,不過讀的方式是用函式 01/15 01:51
16F:→ hunandy14: tex2D(rT, x, y) 不過這樣跟自己寫一轉的函式也差不多 01/15 01:53