LZ您好:
经实机验证,横扫斑竹18#给出的在定义struct时指定__align__(16)的做法,能有效将Global Storage Efficiency提高至100% 。
请您参照18#给出的详细做法加以修正,以体验这一加速快感!
祝您编码顺利~
LZ您好:
经实机验证,横扫斑竹18#给出的在定义struct时指定__align__(16)的做法,能有效将Global Storage Efficiency提高至100% 。
请您参照18#给出的详细做法加以修正,以体验这一加速快感!
祝您编码顺利~
版主你好,我按照你的建议把结构体定义如下:
//复数定义
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’)) 的形参将不被对齐
楼主如果您要用在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
这样做可以防止在您的host code中看到我的建议。
#if defined(CUDA_ARCH)
这里的__CUDA_ARCH__ 要显示的定义吗?其他的代码要改吗?我这个真不懂,麻烦版主了。
楼主真心不能立刻尝试一下么?
我这个真心不理解。
LZ您好:
直接用即可,请勿纠结。
这个宏在device端是有意义的,并且是自动生成的,在host端则不存在。
如此device端和host端会得到不同对齐要求的struct,此时,host端将不再抱怨而device端依然可以享受加速快感~~
请您立即尝试,电脑并不会因此而烧毁的:)
我按照你说的尝试了,但是好像都到执行else了
#else
struct compx
{
double real;
double imag;
};
所以global store efficiency还是50%
是我忘记改kernel了 实在是抱歉 现在store efficiency是100%了 但是速度并没提高很奇怪。
。。。。好的。恭喜您看到合并的写入。
但速度没有提高可能您的瓶颈不在此处。
我不想给出其他什么回复了。。。真的。
让ICE继续服务您吧。
辛苦横版主和ice版主啦,对你们的敬业精神很佩服,我是个小白,真心向两位版主学习:P