如何在CUDA中指定全局设备变量的对齐方式

fal*_*0nk 3 cuda nvcc

我想在CUDA中声明全局设备变量的对齐方式.具体来说,我有一个字符串声明,如 __device__ char str1 = "some pre-defined string"; 在普通的gcc中,我可以请求编译器对齐 __device__ char str1 __attribute__ ((aligned (4))) = "some pre-defined string";

但是,当我在nvcc上尝试此操作时,编译器会忽略这些请求.我想这样做的原因是将这些字符串复制到我的内核中的缓冲区中,并且一次复制字比一次复制字节要快得多,尽管它们要求src字符串对齐.任何人都可以告诉我如何从nvcc编译器请求对齐?

nju*_*ffa 6

请参见"CUDA C编程指南"的第5.3.2节"尺寸和对齐要求",可在此处找到:

对于内置类型的char,short,int,long,longlong,float,double(如float2或float4),自动满足对齐要求.

对于结构体,编译器可以使用对齐说明符__align__(8)或强制执行大小和对齐要求__align__(16).

用法示例:

struct __align__(8) { 
    float r; 
    float i;
} complex_num;
Run Code Online (Sandbox Code Playgroud)