2011-02-17 193 views
2

我需要了解一些有关CUDA共享内存的内容。假设我在G80卡上为每块10个线程分配了50个块。 G80的每个SM处理器可以同时处理8个模块。假设在做了一些计算之后,共享内存已被完全占用。CUDA共享内存

当接下来的8个新块到达时共享内存中的值是什么?以前的值会驻留在那里吗?或者将先前的值复制到全局内存中,并为后面的8个块刷新共享内存?

+1

你能解释一下好吗?我不确定我是否关注你 – lurscher 2011-02-17 18:00:07

回答

5

它规定对类型修饰符:

  1. 变量在一个线程控制寄存器,只能停留在内核
  2. 变量在全局内存的线索中,仅停留在内核
  3. __device__ __shared__类型变量一个块的共享内存,只留在内核中
  4. __device__在全局内存中为网格类型变量,保持到应用程序退出
  5. 0123对于网格类型的变量,保持,直到应用程序退出

从而从这个参考文献中,回答您的问题是,如果它们驻留在设备的共享存储器中的存储器应该被刷新为下8个块。

1

对于内核块,执行顺序和SM是随机分配的。从这个意义上讲,即使旧的价值或地址保留下来,也很难保持事情的顺利进行。我怀疑甚至有办法做到这一点。块之间的通信通过片外存储器完成。与片外存储器相关的延迟是性能杀手,这使得gpu编程变得非常棘手。在费米卡中,块共享一些二级缓存,但不能改变这些缓存的行为。