我想用尽可能多的数据填充全局内存,并且我知道我拥有的每个数据都是0到255之间的值。所以我想我不是使用int类型而是将它们的值存储在简短,甚至更好的char,并使用相同的类型访问和计算设备上的值。
但是,这会影响特斯拉架构的性能吗?并且将从全局到共享内存的副本合并吗?
有什么想法吗?谢谢!
答案 0 :(得分:1)
优化8或16位类型带宽利用率的最佳策略取决于warp内存的访问模式。如果任何给定的warp将以高度分散的方式读取,那么使用字节大小类型并且每个warp强制32位事务大小可能是一个优点,因为标准事务大小将浪费大量实现的带宽。但是如果warp中的访问模式会打击连续或接近连续的内存段,那么最好的策略可能是使用uchar4
或ushort2
并且旨在使用合并的32位来实现吞吐量将每个线程从全局内存读取到共享内存数组,并从中读取块中的所有线程。如果每个warp访问包含分散,也可能值得评估纹理的性能。
This pdf包含许多有关Fermi内存性能优化的有用信息。我鼓励你花些时间阅读它。基准测试实际上是评估给定应用程序的最佳方法的唯一方法,该文档提供了一些关于如何理解给定代码的内存性能的优秀技巧。