说我想从全局内存加载一个short数组到共享内存。我不确定这里的聚结是如何起作用的。在最佳实践指南中,它在计算能力1.0或1.1的设备上说,半经线中的第k个线程必须访问一个段中的第k个字,该段对齐到被访问元素大小的16倍。
如果我理解正确,如果我将数据分成32字节(16个短片)段,则线程ID 0,16,32 ...必须访问每个段的第一个元素?我还需要考虑64字节对齐或128字节对齐吗?我有一个gts 250,所以我想这很重要。欢迎提出建议。感谢。
答案 0 :(得分:2)
根据CUDA Programming Guide short
的G.3.2.1节,在任何情况下,不会在Compute Capability 1.0和1.1设备上合并。具体来说,它声明:
。访问的单词的大小 线程必须是4,8或16个字节
但是,您可以使用short2
,short4
甚至short8
等矢量类型来获得合并访问权限。这些类型的合并规则也在G.3.2.1节中详细说明。但是,就合并而言,short2
就像32位int
。
FWIW,具有Compute Capability 1.3或更高版本的设备可以更好地处理类型char
和short
。在1.3设备上读取char
可能会在1.0或1.1设备上提供高达约60%的峰值内存带宽,而峰值内存带宽约为10%。