用户
 找回密码
 立即注册
发表于 2013-10-31 19:31:04
quanzhang100 发表于 2013-10-31 18:17
出现了如下问题
error C2719: “xxx”: 具有 __declspec(align('16')) 的形参将不被对齐
正在尝试解决... ...

LZ您好:

经实机验证,横扫斑竹18#给出的在定义struct时指定__align__(16)的做法,能有效将Global Storage Efficiency提高至100% 。

请您参照18#给出的详细做法加以修正,以体验这一加速快感!

祝您编码顺利~
使用道具 举报 回复 支持 反对
发表于 2013-10-31 19:47:21
横扫千军 发表于 2013-10-31 19:29
这是最后一次警告了,您已经多次无视了我们的意见。

请您仔细看看18#的发文,里面是让你将__align__(16) ...

版主你好,我按照你的建议把结构体定义如下:
//复数定义
typedef struct __align__(16)
{
        double real; //实部
        double imag;//虚部
}compx;
但是程序的其他地方出了问题
static compx conj(compx c1)
{
        compx c;
        c.real=c1.real;
        c.imag=-1*c1.imag;
        return c;
}
错误在第一行:error C2719: “c1”: 具有 __declspec(align('16')) 的形参将不被对齐
使用道具 举报 回复 支持 反对
发表于 2013-10-31 19:55:08
quanzhang100 发表于 2013-10-31 19:47
版主你好,我按照你的建议把结构体定义如下:
//复数定义
typedef struct __align__(16)

楼主如果您要用在Host Code上,我无法为您评估行为,也超出了本论坛的技术支持范围。

前文给出的解答,均是对贵CUDA Kernel做出的,我无法保证他在贵Host C compiler下的行为。

如果您需要防止贵host code看见CUDA的__align__标记,您可以这样定义:
#if defined(__CUDA_ARCH__)
struct __align__(16) compx
{
    double real;
    double imag;
};
#else
struct compx
{
    double real;
    double imag;
};
#endif
使用道具 举报 回复 支持 反对
发表于 2013-10-31 19:56:31
横扫千军 发表于 2013-10-31 19:55
楼主如果您要用在Host Code上,我无法为您评估行为,也超出了本论坛的技术支持范围。

前文给出的解答,均 ...

这样做可以防止在您的host code中看到我的建议。
使用道具 举报 回复 支持 反对
发表于 2013-10-31 20:27:07
横扫千军 发表于 2013-10-31 19:56
这样做可以防止在您的host code中看到我的建议。

#if defined(__CUDA_ARCH__)
这里的__CUDA_ARCH__ 要显示的定义吗?其他的代码要改吗?我这个真不懂,麻烦版主了。
使用道具 举报 回复 支持 反对
发表于 2013-10-31 20:28:47
quanzhang100 发表于 2013-10-31 20:27
#if defined(__CUDA_ARCH__)
这里的__CUDA_ARCH__ 要显示的定义吗?其他的代码要改吗?我这个真不懂,麻 ...

楼主真心不能立刻尝试一下么?

我这个真心不理解。
使用道具 举报 回复 支持 反对
发表于 2013-10-31 20:32:12
quanzhang100 发表于 2013-10-31 20:27
#if defined(__CUDA_ARCH__)
这里的__CUDA_ARCH__ 要显示的定义吗?其他的代码要改吗?我这个真不懂,麻 ...

LZ您好:

直接用即可,请勿纠结。

这个宏在device端是有意义的,并且是自动生成的,在host端则不存在。

如此device端和host端会得到不同对齐要求的struct,此时,host端将不再抱怨而device端依然可以享受加速快感~~

请您立即尝试,电脑并不会因此而烧毁的
使用道具 举报 回复 支持 反对
发表于 2013-10-31 20:33:54
横扫千军 发表于 2013-10-31 20:28
楼主真心不能立刻尝试一下么?

我这个真心不理解。

我按照你说的尝试了,但是好像都到执行else了
#else
struct compx
{
    double real;
    double imag;
};
所以global store efficiency还是50%
使用道具 举报 回复 支持 反对
发表于 2013-10-31 20:44:05
quanzhang100 发表于 2013-10-31 20:33
我按照你说的尝试了,但是好像都到执行else了
#else
struct compx

是我忘记改kernel了 实在是抱歉 现在store efficiency是100%了 但是速度并没提高很奇怪。
使用道具 举报 回复 支持 反对
发表于 2013-10-31 20:47:24
quanzhang100 发表于 2013-10-31 20:44
是我忘记改kernel了 实在是抱歉 现在store efficiency是100%了 但是速度并没提高很奇怪。 ...

。。。。好的。恭喜您看到合并的写入。

但速度没有提高可能您的瓶颈不在此处。

我不想给出其他什么回复了。。。真的。
让ICE继续服务您吧。
使用道具 举报 回复 支持 反对
发新帖
您需要登录后才可以回帖 登录 | 立即注册