【发布时间】:2012-09-28 12:57:28
【问题描述】:
在我的代码中,我使用结构是为了便于将参数传递给函数(我不使用结构数组,而是使用一般的数组结构)。 当我在 cuda-gdb 中并检查内核中的点时,我将值赋予一个简单的结构,例如
struct pt{
int i;
int j;
int k;
}
即使我没有做复杂的事情,而且很明显成员应该有指定的价值观,但我得到......
要求栈的位置0,栈上只有0个元素。
所以我在想,即使它不是数组,也可能此时内存的对齐存在问题。所以我把头文件中的定义改成
struct __align__(16) pt{
int i;
int j;
int k;
}
但是,当编译器尝试编译使用相同定义的主机代码文件时,会出现以下错误:
错误:预期在数字常量错误之前的 unqualified-id:预期 数字常量错误之前的“)”:预期的构造函数,析构函数, 或';'标记之前的类型转换
那么,我应该对主机和设备结构有两种不同的定义吗???
进一步我想问一下如何概括对齐的逻辑。我不是计算机科学家,因此编程指南中的两个示例无法帮助我了解全局。
比如下面两个应该怎么对齐?或者,应该如何对齐具有 6 个浮点数的结构?还是4个整数?同样,我没有使用这些数组,但我仍然在内核或_设备_函数中使用这些结构定义了很多变量。
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;
} ;
提前感谢您的任何建议或提示
【问题讨论】:
-
我认为您正在寻找这个 [stackoverflow.com/questions/6978643/cuda-and-classes][1],由@harrism 本人回答。 [1]:stackoverflow.com/questions/6978643/cuda-and-classes
标签: cuda