可以在CUDA中进行未对齐的加载和存储吗?

可以在CUDA中进行未对齐的加载和存储吗?,cuda,nvidia,gpgpu,Cuda,Nvidia,Gpgpu,CUDA是否支持未对齐的加载和存储?是否可以从地址addr读取大小为k字节的(单个)值,以便addr%k!=0 更具体地说,将包括: unsigned* p = (unsigned*) ((char *) my_aligned_ptr + 1); *p = 0xAABBCCDD; 或 是否达到预期效果?尽管CUDA编程指南的定义有些含糊不清,但答案是否,不支持未对齐的访问,句号。代码将编译,但结果(可能)就像使用了附近对齐的地址一样。或其他未定义的 @tera在中有解决方案代码。您在现已删除的

CUDA是否支持未对齐的加载和存储?是否可以从地址addr读取大小为k字节的(单个)值,以便addr%k!=0

更具体地说,将包括:

unsigned* p = (unsigned*) ((char *) my_aligned_ptr + 1); *p = 0xAABBCCDD;

是否达到预期效果?

尽管CUDA编程指南的定义有些含糊不清,但答案是否,不支持未对齐的访问,句号。代码将编译,但结果(可能)就像使用了附近对齐的地址一样。或其他未定义的


@tera在中有解决方案代码。

您在现已删除的答案中链接的文档已经回答了这个问题。这是不可能做到的。如果您只是尝试代码,您会发现
cuda memcheck
报告未对齐错误。因此,无论您如何阅读或是否阅读文档,这都是它不起作用的更多证据。答案是否定的。指针的解引用应该发生在指针的自然对齐边界上,程序员有责任确保这一点。我假设在你的第二个例子中,你的意思是
无符号x=*q如果有人需要绕过这个限制,我给了一些类似的问题。
unsigned* q = (unsigned*) ((char *) my_aligned_ptr + 11); unsigned x = *q;