Compute Capability 2.0 (Fermi) 发布后,我想知道是否还有共享内存的用例。也就是说,什么时候使用共享内存比让 L1 在后台执行它的魔力更好?
共享内存是否只是为了让为 CC < 2.0 设计的算法无需修改即可高效运行?
为了通过共享内存进行协作,块中的线程写入共享内存并与__syncthreads()
. 为什么不简单地写入全局内存(通过 L1),并与 同步__threadfence_block()
?后一个选项应该更容易实现,因为它不必与值的两个不同位置相关,并且它应该更快,因为没有从全局内存到共享内存的显式复制。由于数据被缓存在 L1 中,线程不必等待数据真正到达全局内存。
使用共享内存,可以保证放置在那里的值在整个块的持续时间内保持在那里。这与 L1 中的值相反,如果不经常使用它们就会被驱逐。在任何情况下,将这些很少使用的数据缓存在共享内存中比让 L1 根据算法实际具有的使用模式来管理它们更好吗?