在我的代码中,我使用结构以便于将争论传递给函数(我不使用结构数组,而是使用数组结构).当我在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 ×1