我想在CUDA中声明全局设备变量的对齐方式。具体来说,我有一个字符串声明,如
__device__ char str1 = "some pre-defined string";
在普通的gcc中,我可以请求编译器对齐
__device__ char str1 __attribute__ ((aligned (4))) = "some pre-defined string";
但是,当我在nvcc上尝试此操作时,编译器会忽略这些请求。我想这样做的原因是将这些字符串复制到我的内核中的缓冲区中,并且一次复制字比一次复制字节要快得多,尽管它们要求src字符串对齐。谁能告诉我如何从nvcc编译器请求对齐?
答案 0 :(得分:5)
参见“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;
答案 1 :(得分:1)
你能检查一下是否有效吗?
__device__ char __align__(4) str1 = "some pre-defined string";