【问题标题】:pycuda.gpuarray.dot() very slow at first callpycuda.gpuarray.dot() 在第一次调用时非常慢
【发布时间】:2013-07-08 14:43:18
【问题描述】:

我在 pycuda 中有一个有效的共轭梯度方法实现,我想对其进行优化。它使用自写的矩阵向量乘法和 pycuda-native gpuarray.dotgpuarray.mul_add 函数

使用kernprof.py/line_profiler 分析程序返回了大部分时间 (>60%),直到收敛花费在一个 gpuarray.dot() 调用中。 (约 0.2 秒) gpuarray.dot() 的所有后续调用大约需要 7 微秒。所有调用都有相同类型的输入向量(大小:400 双精度)

有什么原因吗?我的意思是最后它只是一个常数,但它使分析变得困难。 我想在 pycuda 邮件列表中提问。但是我无法使用@gmail.com 地址订阅。如果有人对奇怪的.dot() 行为或我无法订阅该邮件列表有任何解释,请给我一个提示;)

【问题讨论】:

  • 空闲的 GPU 经常有一个与之相关的“启动延迟”。这可能是由于将 GPU 从睡眠模式唤醒,或者仅仅是与创建 GPU CUDA 上下文相关的开销。有多种方法可以缓解这种情况。如果“第一次调用”实际上是代码中创建 GPU 上下文的第一件事,那么这可能是一种可能的解释。您可以尝试在您关心的第一个操作之前创建一个虚拟 GPU 操作,当然是在任何循环之前。
  • FWIW,订阅列表确实可以从 GMail 工作——我认为。检查您的垃圾邮件文件夹中是否有订阅确认电子邮件。
  • 感谢您的输入,是的,它在垃圾邮件文件夹中。不应该使用我无法处理我猜想的界面的邮件提供商。感谢您,给您带来的不便,我们深表歉意

标签: python cuda pycuda mailing-list


【解决方案1】:

一个原因是 Pycuda 在上传内核之前对其进行编译。据我记得认为这应该只在它第一次执行时发生。

一种解决方案是通过执行一次内核来“预热”内核,然后启动分析过程。

【讨论】:

    猜你喜欢
    • 2017-04-23
    • 2021-02-01
    • 1970-01-01
    • 2014-02-15
    • 1970-01-01
    • 2023-03-13
    • 2017-01-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多