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

时间:2012-11-03 03:45:13

标签: cuda nvcc

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

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

2 个答案:

答案 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";