CUDA速度优化

时间:2016-04-08 07:17:03

标签: performance cuda

我在CUDA中开发了一个用于模幂运算的应用程序,它对512位整数表现非常好。这个多精度整数存储在16个32位字中 与OpenSSL模幂运算方法相比,我使用的一些概念是为了实现2.5 - 3.2的加速:

  • __shared__记忆
  • CUDA memory align
  • 用于32位加法的PTX代码,乘法
  • 展开

现在好了,但是尝试将整数扩展到1024位,性能急剧下降到0.1 - 0.3,唯一的区别是存储整数所需的内存大小 - 现在是32 x 32位字。更不用说速度慢了几百倍的2048位版本。

我必须说,当我想计算1000个模幂运算(r = a^x mod n)时,我只是将所有操作数发送到我的内核,这意味着512000字节的内存。
我的问题:为什么这种微小的变化会对性能产生如此大的影响? 我使用的是Nvidia Geforce GT 520mx,Ubuntu 14.04 64位。

1 个答案:

答案 0 :(得分:2)

很难说没有最小的测试源代码,但是在增加数据大小的同时可能会遇到一些限制:

  • 寄存器
  • 共享内存/ L1缓存
  • 占有

也许还有很多其他我忘了。

分析您的应用程序可能非常非常有用。如果您使用Visual Studio,Nvidia NSIGHT可以分析您的应用程序的执行情况并为您提供大量有用的信息:

  • 块,线程,扭曲
  • 设备理论和实现占用
  • 多处理器活动

甚至draw some charts让您轻松查看瓶颈在哪里。

请参阅my answer here了解如何运行Nsight并分析您的应用程序以进行性能分析。