如何从全局内存或纹理内存中获取16个字节

时间:2014-03-04 13:01:58

标签: c cuda nvidia

我还没有尝试过这个,因为我不知道如何实现这一点,并且想知道这是否可行。

我读到了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记忆。

由于

1 个答案:

答案 0 :(得分:1)

如果要在单个事务中获取16个字节,则数据必须是正确的向量类型(例如int4float4等)并且必须自然对齐< / em>的。这意味着,16字节向量类型的向量类型区域的起始必须在16字节边界上开始。如果您的第一个线程正确检索字节0-15,则第二个线程无法正确检索字节1-16(在单个事务中),因为这不会自然地对齐。下一个自然对齐的16字节时隙将是字节16-31。 int也必须对齐,因此无法在字节1处启动int,但在字节0,4,8等处启动

。 编程指南的

This section,特别是“尺寸和对齐要求”也将对其进行解释。