当前位置: 代码迷 >> CUDA >> 在CUDA怎么使用二位数组(*[M][N])
  详细解决方案

在CUDA怎么使用二位数组(*[M][N])

热度:934   发布时间:2016-04-29 10:45:37.0
在CUDA如何使用二位数组(**[M][N])

总有些童鞋想知道怎么在CUDA中使用二维数组([M][N]这种类型),其实这个很简单,不过你要完全弄明白,必须对指针,地址等概念非常清楚才行。写这篇博客解决下大家这个问题:

1、首先讲述一下在一般C语言中如何使用二维数组。

    代码中的arr实个二维数组变量了,你可以在for循环之后arr[i][j]的方式使用它。

 

2、告诉你如何在CUDA中使用二维数组可以类比1中的方法,不过你要清楚几点,这几点在代码之后说明。


在CUDA中使用二维数组的几点说明:

1)da是一个二维变量,一定更不可以在33行的时候把ha改成da!一定要记住显存和内存是相互独立的,主机端的程序不可以直接操作显存!必须通过CUDA 提供的API函数来操作!

2)注意在内存申请时强制类型转换(void**)(&),怎么把***的变量转成**了!!这主要是API借口决定的,最好自己显式转换格式,避免不必要的麻烦。

3)看见数据拷贝的函数了吗,类型、类型、还是类型。

4)别忘了释放内存和显存!看见没,还是类型。

5)很希望这篇博客能帮到大家,可是我真的不推荐大家在GPU上使用二维数组!真的!!为什么呢?终归是效率惹的祸!显存的访问总是慢的。二维访存,可是连续访问了两次啊。要是老这样做,不但执行效率低,而且写代码也慢。如果对内存的概念不熟悉,千万别趟这趟浑水。看懂这段代码,就当是学习一下或者理解下内存、显存与内存独立的概念和规则吧。

附上执行结果: