我只发现了一个注解,本地内存比寄存器内存慢,寄存器内存是每线程两个类型。共享内存应该很快,但它比[线程的]本地内存更快吗?我想做的是一个中值滤波器,但是用一个给定的百分位数而不是中值。因此,我需要从列表中取出块,对它们进行排序,然后选择一个合适的。但我不能开始排序共享内存列表,否则会出错。如果只复制到本地内存,我会损失很多性能吗?
ddarikpa1#
本地内存就是线程本地全局内存。它比寄存器或共享内存慢得多(在带宽和延迟方面)。它还消耗否则将可用于全局存储器事务的存储器控制器带宽。溢出或故意使用本地内存对性能的影响可能很小,也可能很严重,具体取决于您使用的硬件以及本地内存的使用方式。根据Vasily Volkov的研究-参见Better performance at lower occupancy(pdf)-Fermi GPU上共享内存和寄存器之间的有效带宽差异约为8倍(共享内存约为1000 Gb/s,寄存器约为8000 Gb/s)。这与CUDA文档有些矛盾,CUDA文档暗示共享内存的速度与寄存器相当。
1条答案
按热度按时间ddarikpa1#
本地内存就是线程本地全局内存。它比寄存器或共享内存慢得多(在带宽和延迟方面)。它还消耗否则将可用于全局存储器事务的存储器控制器带宽。溢出或故意使用本地内存对性能的影响可能很小,也可能很严重,具体取决于您使用的硬件以及本地内存的使用方式。
根据Vasily Volkov的研究-参见Better performance at lower occupancy(pdf)-Fermi GPU上共享内存和寄存器之间的有效带宽差异约为8倍(共享内存约为1000 Gb/s,寄存器约为8000 Gb/s)。这与CUDA文档有些矛盾,CUDA文档暗示共享内存的速度与寄存器相当。