cuda programming,一次异域之旅.pptVIP

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

设计抉择 输出格式 决定后续模块的算法 决定本模块的效率 Plan 还是 Packed 格式? Half-warp内16线程是否整齐输出 整齐输出意味着更少的内存事务 后续模块处理是否简便 RGB? Packed,回写索引计算简单 Plan?Packed ,回写索引计算复杂 最终选择取决于Zig-Zag模块 Zig-Zag一定是不规整输出 所有的不规整输出应集中在Zig-Zag 测试结果 84us Occupancy 100% Gloable memory read 1920? write 5760 600us Rest:9400us 70us Rest:9360us 600us 70us Rest:9360us 1x full 2D DCT scan O(N4) 8x Row 1D DCT scan 8x Column 1D DCT scan 8 threads 并行 O(N3) 测试结果 153 us 指令数,25467 性能分析 浮点运算量 28次加法,24次乘法 优化(AAN算法) 利用FFT算法减少浮点运算 8点DCT等于16点DFT的实部乘上一个系数 DFT采用FFT后达到O(nlogn) 消去16次浮点系数乘法 利用Quantization 浮点运算量 28次加法,5次乘法 测试结果 119 us 指令数22599 600us 70us Rest:9360us 119us Rest: 9241us #define C_a = 1.387039845322148 #define C_b = 1.306562964876377 #define C_c = 1.175875602419359 #define C_d = 0.785694958387102 #define C_e = 0.541196100146197 #define C_f = 0.275899379282943 #define C_norm = 0.3535533905932737 float X07P = (*Vect0) + (*Vect7); float X16P = (*Vect1) + (*Vect6); float X25P = (*Vect2) + (*Vect5); float X34P = (*Vect3) + (*Vect4); float X07M = (*Vect0) - (*Vect7); float X61M = (*Vect6) - (*Vect1); float X25M = (*Vect2) - (*Vect5); float X43M = (*Vect4) - (*Vect3); float X07P34PP = X07P + X34P; float X07P34PM = X07P - X34P; float X16P25PP = X16P + X25P; float X16P25PM = X16P - X25P; (*Vect0) = C_norm * (X07P34PP + X16P25PP); (*Vect2) = C_norm * (C_b * X07P34PM + C_e * X16P25PM); (*Vect4) = C_norm * (X07P34PP - X16P25PP); (*Vect6) = C_norm * (C_e * X07P34PM - C_b * X16P25PM); (*Vect1) = C_norm * (C_a * X07M - C_c * X61M + C_d * X25M - C_f * X43M); (*Vect3) = C_norm * (C_c * X07M + C_f * X61M - C_a * X25M + C_d * X43M); (*Vect5) = C_norm * (C_d * X07M + C_a * X61M + C_f * X25M - C_c * X43M); (*Vect7) = C_norm * (C_f * X07M + C_d * X61M + C_c * X25M + C_a * X43M); #define P1 0.707106781 #define P2 0.382683433 #define P3 0.541196100 #define P4 1.306562965 Float tmp0 = *(Vect0) + *(Vect7); Float tmp7 = *(Vect0) - *(Vect7); Float tmp1 = *(Vect1) + *(Vect6); Float tmp6 = *(Vect1) - *(Vect6); Float tmp2 = *(Vect2) + *(Vect5);

文档评论(0)

celkhn0303 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档