我只发现一条注释,说本地内存比寄存器内存慢,每个线程两种类型。
共享内存应该很快,但它比线程的本地内存更快吗?
我想做的是一种中位数滤波器,但使用给定的百分位数而不是中位数。因此,我需要取出列表的块,对它们进行排序,然后选择一个合适的块。但如果我开始对共享内存列表进行排序,事情就会出错。如果只是复制到本地内存,我会失去很多性能吗?
我只发现一条注释,说本地内存比寄存器内存慢,每个线程两种类型。
共享内存应该很快,但它比线程的本地内存更快吗?
我想做的是一种中位数滤波器,但使用给定的百分位数而不是中位数。因此,我需要取出列表的块,对它们进行排序,然后选择一个合适的块。但如果我开始对共享内存列表进行排序,事情就会出错。如果只是复制到本地内存,我会失去很多性能吗?
本地内存就是线程本地的全局内存。无论是带宽还是延迟,都比寄存器或共享内存慢得多。它还会消耗本应用于全局内存事务的内存控制器带宽。溢出或故意使用本地内存的性能影响可能从轻微到严重不等,具体取决于您使用的硬件和本地内存的使用方式。
根据Vasily Volkov的研究 - 见在更低的占用率下获得更好的性能 (pdf) -- 在Fermi GPU上,共享内存和寄存器之间的有效带宽存在大约8倍的差异(共享内存约1000 Gb/s,寄存器约8000 Gb/s)。这在某种程度上与CUDA文档相矛盾,后者暗示共享内存的速度与寄存器相当。