小编Pan*_*tis的帖子

cuda记忆对齐

在我的代码中,我使用结构以便于将争论传递给函数(我不使用结构数组,而是使用数组结构).当我在cuda-gdb中时,我会检查内核中的一个点,我将值赋给一个简单的结构

struct pt{
int i;
int j;
int k;
}
Run Code Online (Sandbox Code Playgroud)

即使我没有做一些复杂的事情,很明显成员应该有指定的价值,我得到...

当被问到堆栈的位置0时,堆栈上只有0个元素.

所以我在想,即使它不是一个数组,也许在这一点上存储器的对齐存在问题.所以我将头文件中的定义更改为

struct __align__(16) pt{
int i;
int j;
int k;
}
Run Code Online (Sandbox Code Playgroud)

但是,当编译器尝试编译使用相同定义的主机代码文件时,会出现以下错误:

错误:数字常量错误之前的预期unqualified-id:数字常量错误之前的预期')':';'之前的预期构造函数,析构函数或类型转换 代币

那么,我应该对主机和设备结构有两种不同的定义吗?

此外,我想问一下如何概括对齐的逻辑.我不是计算机科学家,因此编程指南中的两个例子并没有帮助我了解全局.

例如,如何对齐以下两个?或者,如何将6个浮子的结构对齐?还是4个整数?再次,我没有使用那些数组,但我仍然在内核或_ device _函数中使用这些结构定义了很多变量.

struct {
    int a;
    int b;
    int c;
    int d;
    float* el;    
} ;

 struct {
    int a;
    int b
    int c
    int d
    float* i;
    float* j;
    float* k;
} ;
Run Code Online (Sandbox Code Playgroud)

提前感谢您的任何建议或提示

cuda

16
推荐指数
2
解决办法
1万
查看次数

标签 统计

cuda ×1