如何在 CUDA 中指定全局设备变量的对齐方式
Posted
技术标签:
【中文标题】如何在 CUDA 中指定全局设备变量的对齐方式【英文标题】:How to specify alignment for global device variables in CUDA 【发布时间】:2012-11-03 03:45:13 【问题描述】:我想在 CUDA 中声明一个全局设备变量的对齐方式。具体来说,我有一个字符串声明,比如
__device__ char str1 = "some pre-defined string";
在普通 gcc 中,我可以向编译器请求对齐
__device__ char str1 __attribute__ ((aligned (4))) = "some pre-defined string";
但是,当我在 nvcc 上尝试此操作时,编译器会忽略这些请求。我想这样做的原因是将这些字符串复制到我的内核中的缓冲区中,并且一次复制单词比一次复制字节要快得多,尽管它们需要对齐 src 字符串。谁能告诉我如何向 nvcc 编译器请求对齐?
【问题讨论】:
【参考方案1】:参见《CUDA C 编程指南》第 5.3.2 节“大小和对齐要求”,可以找到here:
char、short、int、long、longlong、float、double 等内置类型自动满足对齐要求,例如 float2 或 float4。
对于结构,大小和对齐要求可以由编译器使用对齐说明符__align__(8)
或__align__(16)
强制执行。
示例用法:
struct __align__(8)
float r;
float i;
complex_num;
【讨论】:
谢谢。这样可行。我检查了 NVCC 编译器指南,寻找那里提到的东西。我也应该检查一下 C 编程指南。【参考方案2】:你能检查一下这是否有效吗?
__device__ char __align__(4) str1 = "some pre-defined string";
【讨论】:
感谢您的快速回复。这是我第一次在 *** 上寻求帮助,以后我一定会用它作为资源。以上是关于如何在 CUDA 中指定全局设备变量的对齐方式的主要内容,如果未能解决你的问题,请参考以下文章