【问题标题】:CUDA speed optimizationCUDA速度优化
【发布时间】:2016-07-29 08:53:41
【问题描述】:

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

  • __shared__内存
  • CUDA 内存对齐
  • 用于 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 位。

【问题讨论】:

  • 没有minimal reproducible example 很难/不可能说出来。您可能想要查看的一点是寄存器溢出。但这只是猜测......
  • 注册溢出也是我的第一个猜测。使用 `nvcc -Xptxas=-v ...` 编译 PTX 以接收有关寄存器使用情况的信息,也许会有所帮助。
  • 好的,我会考虑的!

标签: performance cuda


【解决方案1】:

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

  • 注册
  • 共享内存/L1 缓存
  • 入住率

也许还有很多我忘记了。

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

  • 块、线、经线
  • 设备理论占用率和实际占用率
  • 多处理器活动

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

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

【讨论】:

  • 感谢您的建议。我有可能用 Nsight 对其进行测试。即使是最小的示例也太大而无法在此处发布,并且也难以理解。我会尝试使用 Nsight,我会回来回答。
  • @DaniGrosu 如果您有机会尝试使用 Nsight,那么可以这样做!你肯定会得到更多有用的信息。
猜你喜欢
  • 2011-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-17
  • 2020-01-19
  • 2020-01-09
  • 1970-01-01
相关资源
最近更新 更多