3

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

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

4

2 回答 2

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;
于 2012-11-03T05:24:15.620 回答
1

你能检查这是否有效吗?

__device__ char __align__(4) str1 = "some pre-defined string";
于 2012-11-03T05:27:26.103 回答