我还没有尝试过这个,因为我不知道如何实现这一点,并且想知道这是否可行。
我读到了int4类型,我想知道,因为我的每个线程需要在tId(数组)的1byte内存上运行然后处理接下来的15个字节,我是否可以将int或int4数组发送到全局或纹理内存,例如这个
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ...
其中Thread0将byte0提取为15,Thread1将byte1提取到字节16,因此减少了我正在进行的全局内存访问次数,因为此时我每个线程的最大读数为16记忆。
由于
答案 0 :(得分:1)
如果要在单个事务中获取16个字节,则数据必须是正确的向量类型(例如int4
,float4
等)并且必须自然对齐< / em>的。这意味着,16字节向量类型的向量类型区域的起始必须在16字节边界上开始。如果您的第一个线程正确检索字节0-15,则第二个线程无法正确检索字节1-16(在单个事务中),因为这不会自然地对齐。下一个自然对齐的16字节时隙将是字节16-31。 int
也必须对齐,因此无法在字节1处启动int
,但在字节0,4,8等处启动
This section,特别是“尺寸和对齐要求”也将对其进行解释。