我在CUDA中开发了一个用于模幂运算的应用程序,它对512位整数表现非常好。这个多精度整数存储在16个32位字中 与OpenSSL模幂运算方法相比,我使用的一些概念是为了实现2.5 - 3.2的加速:
__shared__
记忆现在好了,但是尝试将整数扩展到1024位,性能急剧下降到0.1 - 0.3,唯一的区别是存储整数所需的内存大小 - 现在是32 x 32位字。更不用说速度慢了几百倍的2048位版本。
我必须说,当我想计算1000个模幂运算(r = a^x mod n
)时,我只是将所有操作数发送到我的内核,这意味着512000字节的内存。
我的问题:为什么这种微小的变化会对性能产生如此大的影响?
我使用的是Nvidia Geforce GT 520mx,Ubuntu 14.04 64位。
答案 0 :(得分:2)
很难说没有最小的测试源代码,但是在增加数据大小的同时可能会遇到一些限制:
也许还有很多其他我忘了。
分析您的应用程序可能非常非常有用。如果您使用Visual Studio,Nvidia NSIGHT可以分析您的应用程序的执行情况并为您提供大量有用的信息:
甚至draw some charts让您轻松查看瓶颈在哪里。
请参阅my answer here了解如何运行Nsight并分析您的应用程序以进行性能分析。