我只发现本地内存比寄存器内存慢的说法,即每线程两个类型。
共享内存应该是快的,但它比本地内存(线程的)快吗?
我想做的是一种中值过滤器,但使用给定的百分位数而不是中值。因此,我需要获取列表中的大部分内容,对它们进行排序,然后选择一个合适的。但我无法开始对共享内存列表进行排序,否则会出错。仅复制到本地内存会损失很多性能吗?
我只发现本地内存比寄存器内存慢的说法,即每线程两个类型。
共享内存应该是快的,但它比本地内存(线程的)快吗?
我想做的是一种中值过滤器,但使用给定的百分位数而不是中值。因此,我需要获取列表中的大部分内容,对它们进行排序,然后选择一个合适的。但我无法开始对共享内存列表进行排序,否则会出错。仅复制到本地内存会损失很多性能吗?
本地内存只是线程本地全局内存。它比寄存器或共享内存慢得多(在带宽和延迟方面)。它还消耗原本可用于全局内存事务的内存控制器带宽。溢出或故意使用本地内存对性能的影响可能从轻微到严重,具体取决于您使用的硬件以及本地内存的使用方式。
根据 Vasily Volkov 的研究 - 请参阅Better performance at lower occupancy ( pdf ) - 共享内存和 Fermi GPU 上的寄存器之间的有效带宽差异约为 8 倍(共享内存约为 1000 Gb/s 和 8000 Gb/s用于寄存器)。这在某种程度上与 CUDA 文档相矛盾,这意味着共享内存在速度上与寄存器相当。