在我的代码中,我使用结构体来方便地将参数传递给函数(我不使用结构体数组,而是通常使用数组的结构体)。 当我在cuda-gdb中查看内核中给一个简单结构体赋值的点时,
struct pt{
int i;
int j;
int k;
}
尽管我没有做什么复杂的事情,而且成员应该有指定的值是很明显的,但我还是遇到了问题......
要求获取栈中位置0的元素,但是栈上没有任何元素。
所以我想即使它不是一个数组,也可能存在内存对齐问题。因此我更改了头文件中的定义为:
struct __align__(16) pt{
int i;
int j;
int k;
}
但是当编译器尝试编译使用相同定义的主机代码文件时,会出现以下错误:
error: expected unqualified-id before numeric constant error: expected ‘)’ before numeric constant error: expected constructor, destructor, or type conversion before ‘;’ token
那么我是否应该为主机和设备结构定义两个不同的定义呢?
另外,我想问如何推广对齐逻辑。 我不是计算机科学家,因此编程指南中的两个示例无法帮助我把握大局。
例如,下面这两个应该如何排列? 或者,一个由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;
} ;
提前感谢任何建议或提示