【发布时间】:2017-12-07 09:47:25
【问题描述】:
CUDA 是否支持未对齐的加载和存储?是否可以天真地从地址 addr 中读取大小为 k 字节的(单个)值,使得 addr % k != 0?
更具体地说,将访问诸如:
unsigned* p = (unsigned*) ((char *) my_aligned_ptr + 1); *p = 0xAABBCCDD;
或
unsigned* q = (unsigned*) ((char *) my_aligned_ptr + 11); unsigned x = *q;
有预期的效果吗?
【问题讨论】:
-
您在现已删除的答案中链接的文档已经回答了这个问题。这是不可能的。如果您只是简单地尝试了您的代码,您会发现
cuda-memcheck报告了一个未对齐的错误。因此,无论您如何阅读或是否阅读文档,这都是它不起作用的更多证据。答案是不。指针的取消引用预计会发生在指针的自然对齐边界上,程序员有责任确保这种情况发生。我假设在你的第二个例子中你的意思是unsigned x = *q; -
如果有人需要解决这个限制,我给了一些example code in this answer 类似的问题。