作者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/cn.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