我只发现本地内存比寄存器内存慢,每个线程两种类型。
共享内存应该很快,但它比线程的本地内存更快?
我想要做的是一种中值滤波器,但具有给定的百分位数而不是中位数。因此,我需要获取列表的块,对它们进行排序,然后选择一个合适的列表。但我无法开始对共享内存列表进行排序或出现问题。只要复制到本地内存,我会失去很多性能吗?
答案 0 :(得分:24)
本地内存只是线程本地全局内存。它比寄存器或共享内存要慢得多(在带宽和延迟方面)。它还消耗了可用于全局内存事务的内存控制器带宽。溢出或故意使用本地内存对性能的影响可能是从轻微到严重,具体取决于您使用的硬件以及本地内存的使用方式。
根据瓦西里·沃尔科夫的研究 - 见Better performance at lower occupancy(pdf) - 共享存储器与费米GPU上的寄存器之间的有效带宽差异大约为8倍(约为1000 Gb / s)共享内存和8000 Gb / s的寄存器)。这有点与CUDA文档相矛盾,这意味着共享内存在速度上与寄存器相当。