如果有一个人, 给出的地址是不对齐的, kernel将直接挂掉(而不是这里说的读取到错误的值).类似的, double必须对齐到8B的边界(地址能被8整除),而uint8_t或者char这种, 没有对齐要求...真正的float3在CUDA中是要求对齐到4B的,也就是说, CUDA自带的真正的float3只要求对齐要里面的1个元素, 这样自带的float3的任何一次访问都会被拆分成3次4B访问(因为整体不满足对齐要求...),而这个例子给出的伪float3, 性能更好,因为他要求对齐到16B的边界.每次访问只会生成1条16B的指令即可.但是需要注意, 它比自带的float3有更高的要求, 同时还浪费了隐形的最后4B(因为...然后最后一段还说了一个重要问题.就是对于看了昨天的内容的人来说,他往往会试图拼凑多个小缓冲区, 拼凑成一个大缓冲区....分配完,这里实际上是会导致一个问题的.因为cudaMalloc自带提供一个很高的返回的基地址对齐性,手册里说是对齐到256B的边界.所以实际上你的多个小缓冲区都默认对齐到足够适合你用的超级宽的要求上了.