如何在 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 中指定全局设备变量的对齐方式的主要内容,如果未能解决你的问题,请参考以下文章

c++数据对齐/成员顺序&继承

不同设备宽度的不同尺寸和视图对齐方式

结构体内存对齐

ggplot:如何根据变量类型在 geom_text 位置上设置不同的对齐方式?

上下位机软件通信时,结构体的内存对齐问题

#pragma pack 定义变量的起始存放地址对齐方式