CUDA:不同的线程可以同时从同一个内存位置读取吗?

时间:2011-09-28 15:21:55

标签: memory cuda

我正在为NVIDIA Tesla C2050编写一个CUDA程序,其中每个线程必须以有序的方式从位置0到n-1读取一串字符。字符串大小很小,因此可以很容易地适应常量,共享或纹理内存。

我的问题是:不同的线程会同时或串行地同时访问字符串吗?这似乎会影响我的程序的运行时间。

2 个答案:

答案 0 :(得分:1)

答案是“是和否”。这取决于内存的类型。

正如@Jawad评论的那样,纹理内存是缓存的,但是我不能完全确定读取是否同时满,或者是否已经从高速缓冲存储器中序列化并读取。

另一方面,当半经线中的线程从同一位置读取时,广播常量存储器,但是当从多个位置读取时,它被串行化。这种类型的内存也被缓存。

最后,如果某些线程尝试读取相同的内存块,则共享内存被序列化,即.k.a。银行冲突 *可以在处理一个内存读取请求*时同时向多个线程广播。

并且它还取决于您的图形卡的计算能力。我建议你看一下NVIDIA CUDA C编程指南(v.3.2 - 章节附录G.,G.3计算能力1.x和G.4计算能力2.x)。

希望得到这个帮助。

答案 1 :(得分:-1)

将内存映射为纹理,驱动程序将自动缓存读取,即如果多个线程尝试从单个全局位置读取,则只有一次调用全局内存。

相关问题