Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance 访问全局内存中的短/字符类型数据会降低特斯拉体系结构的性能吗?_Performance_Memory_Cuda - Fatal编程技术网

Performance 访问全局内存中的短/字符类型数据会降低特斯拉体系结构的性能吗?

Performance 访问全局内存中的短/字符类型数据会降低特斯拉体系结构的性能吗?,performance,memory,cuda,Performance,Memory,Cuda,我希望用尽可能多的数据填充全局内存,并且我知道我拥有的每个数据都是一个介于0和255之间的值。所以我想,不用使用int类型,我可以将它们的值存储在一个短字符中,甚至更好地存储在一个char中,并使用相同的类型访问和计算设备上的值 然而,这会影响特斯拉体系结构的性能吗?从全局到共享内存的拷贝是否会合并 有什么想法吗?谢谢 优化8位或16位类型的带宽利用率的最佳策略将取决于warp中内存的访问模式。如果任何给定的扭曲将以高度分散的方式读取,那么使用字节大小类型并强制每个扭曲使用32位事务大小可能是一

我希望用尽可能多的数据填充全局内存,并且我知道我拥有的每个数据都是一个介于0和255之间的值。所以我想,不用使用int类型,我可以将它们的值存储在一个短字符中,甚至更好地存储在一个char中,并使用相同的类型访问和计算设备上的值

然而,这会影响特斯拉体系结构的性能吗?从全局到共享内存的拷贝是否会合并


有什么想法吗?谢谢

优化8位或16位类型的带宽利用率的最佳策略将取决于warp中内存的访问模式。如果任何给定的扭曲将以高度分散的方式读取,那么使用字节大小类型并强制每个扭曲使用32位事务大小可能是一个优势,因为标准事务大小将浪费大量已实现的带宽。但是如果扭曲中的访问模式将访问连续或接近连续的内存段,然后,最好的策略可能是使用
uchar4
ushort2
,目标是通过使用每个线程从全局内存到共享内存阵列的合并32位读取来实现吞吐量,并让一个块中的所有线程从该阵列读取。如果每扭曲访问包含散射,则还值得评估加载纹理的性能


包含许多关于费米存储器性能优化的有用信息。我鼓励你花些时间阅读它。基准测试确实是评估给定应用程序最佳方法的唯一方法,该文档提供了一些关于如何理解给定代码的内存性能的优秀技巧。

感谢您的见解。但是,使用uchar4或ushort2类型对我来说毫无意义,因为我希望使用8位或16位类型,以便能够在全局内存中添加更多数据。我的访问不会分散,而是连续的。但如果我理解你的意思,合并只在32位读取上有效。我说的对吗?你还没有理解我的答案。使用向量类型不会改变将使用多少GPU内存来存储等效的主机数据,只会改变从全局内存获取数据的方式。对于uchar4,一个线程在一个事务中从内存中读取四个字节。它可以处理所有这四个数据字节,也可以将它们存储在共享内存中,其他线程可以在共享内存中访问它们。合并可以发生在32、64和128位类型。你说得对。我不知道uchar4可以存储四个不同的值。谢谢一旦数据进入寄存器,特斯拉体系结构在处理字节或短字节方面明显更好,除非你能接受费米的视频指令。