cudapro case study notefloat4 alignment and class案例研究对齐类rev2.pdfVIP

cudapro case study notefloat4 alignment and class案例研究对齐类rev2.pdf

  1. 1、本文档共15页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

::

本文档内容由ice根据CUDAProfessional讨论整理而来。简要经过

和结论由ice总结并写在本文前部,脱水版讨论原文附于其后。ice不保证该总结100%正确,

参考,请以讨论原文为准。讨论原文中,各人观点由发言的各人负责,发言内容的所有

权益亦归发言的各人享有。欢迎参考,讨论。

如非性学术组织和个人需要学习和使用文中内容,请给予合适的和致谢。

如其他性质组织和团体需要使用文中内容,请联系文中的发言的群友,取得。

其他未尽事宜,请联系CUDAProfessional管理团队。

2012-5-5第一版根据当日上午讨论内容总结整理,第一次发布。

2012-5-5第二版邀请神秘琪琪审阅了第一版,并对该问题作了讨论和验证,整理为第

二版。和琪琪的脱水版讨论附于最后。对琪琪的大力支持表示由衷的感谢。

2012-5-5第二版修正版(rev2.1)由琪琪大人统稿并做了修正和删减。

和结论:

和结论:

事情经过:[]-石头(736183739)发现他的某个class在cpp文件内编译后的大小和在cu

内编译后的大小不同,造成赋值错位,并验证了这一点。(琪琪:--正常。谁让他是.cpp

而不是.cu呢。这导致文件不会被nvcc过一遍的。联合编译不会出问题)经过讨论,风辰认

为“float4在在设备端是16字节对齐的,如果是vs或gcc则是4字节,你可以使用gcc的

attribute对齐到16字节,vs也应该有相关的设置”。(琪琪:“--这个要看情况下。如

果被nvcc过了一遍了,是16B对齐的。”并通过实测得知,.cu里的hostcode,float4对齐

到16B;32-bit.p,VC下,float4对齐到4B;--64bit的.p,VC下,float4对齐到16B。

也就是只会在分开编译,且是32位VC的情况下发生。64bit的VC分开编译结果和参与混

合编译的一样。)同时ice发现programmingguide4.2中也分别提到过相关内容。

B.3.1

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

结论:在使用class/struct的时候要十分内建变量在device端和host端由于对齐约定不

同,造成的实际位置不同,进而产生错误。

经琪琪指正,结论重新整理为:

hostcode用.cu的话,NVCC会在将host端code交给hostcompiler之前做修改,被NVCC

过滤后的hostcode里的struct实际上是带有__attribute__的对齐的属性的(某些情况下可能

是作为编译器的对齐参数,例如-malign-double,在-m32的gcc下的时候)(或者将某些,这

将指导hostcompiler采用和NVCC一致的对齐方式,如此怎么用都无需考虑。)

如果是不能联合编译的情况(如C#),或者是使用driverAPI,那么请手工根据对应的

编译器进行对应形式的“align”。

如果是NVCC下,因为某种需要调整对齐模式,建议使用NVCC自带的__align__(n),

这是一个自动转换的宏,会根据hostcompiler是VC还是GCC,是32位还是64位目标代

码编译,而自动转换为合适的形式。

任何调用/使用.cu里的东西的,都推荐在另外一个.cu里。否则就算能编译,结果可能异

常。

同时实验得知,.cu中的float4是自动对齐到16B的,.p在64bitVC下恰好也是16B

对齐,而在32bitVC下是4B对齐。

脱水版原文:

脱水版原文:

[]-石头(736183739)9:30:57

VC里边遇到诡异的bug

[]-石头(736183739)9:31:05

一个结构体A

[]

文档评论(0)

183****7931 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档