【问题标题】:Is there a way to profile an OpenCL or a pyOpenCL program?有没有办法分析 OpenCL 或 pyOpenCL 程序?
【发布时间】:2015-05-18 01:26:16
【问题描述】:

我正在尝试优化 pyOpenCL 程序。出于这个原因,我想知道是否有一种方法可以分析程序并查看大部分时间需要在哪里。

你知道如何解决这个问题吗?

提前致谢
安迪

编辑:例如,用于 CUDA 的 nvidias nvprof 可以为 pyCuda 解决问题,但不适用于 pyOpenCL。

【问题讨论】:

  • @en_Knight:您的帖子是关于纯 python 的。这对我没有帮助。您能否重新检查一下,如果帖子不同,请取消标记。

标签: python opencl pyopencl


【解决方案1】:

是的,绝对有 - 您可以分析设备上运行的单个 PyOpenCL 事件,还可以分析主机上的整个程序。

通过将内存复制到设备、在设备上运行内核以及从设备复制内存来返回 PyOpenCL 事件。

这是一个对设备事件进行分析的示例:

event = cl.enqueue_copy(queue, np_array, cl_array)
event.wait()
print (event.profile.end-event.profile.start)*1e-9

这是一个在主机上进行分析的示例:

from time import time, strftime, gmtime
start_time = time()
# ... do some stuff like the above ^
end_time = time()
print strftime('%H:%M:%S', gmtime(end_time - start_time))

我还没有看到更全面的方法来分析 PyOpenCL 程序。希望对您有所帮助!

【讨论】:

  • 它确实有帮助,但是,我更多的是寻找像我现在发布的东西。也许这对你也有帮助。
  • 酷!是的,我还没有看到让视觉分析器与 PyOpenCL(而不是普通的 OpenCL)一起工作的简单方法 - 所以如果你能做到 - 更多关于你如何做到的细节会很棒!
  • 我有一个windows平台,只不过是按照下面的答案安装了Cuda Toolkit!
  • 如果你喜欢这个答案,如果你能投票就太好了,所以我可以尽快发布 cmets。谢谢;)
【解决方案2】:

好的,
我想出了一个办法:Cuda Toolkit 3.1 为 openCL 提供了分析(更高版本不会)。从此包中使用compute visual profiler,即(computeprof.exe)。它适用于 windows 和 linux here,并且可以与新的 Cuda Toolkit 一起安装。
它看起来像这样:

我希望这对其他人也有帮助。

【讨论】:

    【解决方案3】:

    基本上,Nvidia 的 Visual Profiler (nvvp) 用于分析 OpenCL(甚至通过 pyopenCL),但 Nvidia 停止更新它。有一个巧妙的技巧,我从 pyopenCL 邮件列表中提取并使用来自here 的信息开始使用 nvvp。

    基本步骤是:

    1. 创建一个nvvp.cfg 文件,其中包含可视分析器的配置。

    例子:

    profilelogformat CSV
    streamid
    gpustarttimestamp
    gpuendtimestamp
    gridsize
    threadblocksize
    dynsmemperblock
    stasmemperblock
    regperthread
    memtransfersize
    
    1. 创建一个 bash 脚本来设置环境变量并启动 python / OpenCL / pyOpenCL 进程。

    例子:

    #!/bin/bash
    export {CL_,COMPUTE_}PROFILE=1
    export COMPUTE_PROFILE_CONFIG=nvvp.cfg
    python OpenCL_test.py
    

    这将在您的工作目录中放置一个日志文件,您可以对其进行检查。如果您将每次出现的“OPENCL_”更改为“CUDA_”,则可以将此文件导入 nvvp。如需更多信息,请点击提供的链接。

    【讨论】:

      【解决方案4】:

      AMD 的 CodeXL 运行良好。

      【讨论】:

      • 想详细说明您认为 CodeXL 运行良好的原因吗?如果没有更多细节,这个答案似乎更像是评论,因为它没有提供任何价值。
      • 当然,CodeXL 可以直接链接到运行 OpenCl 的 Python 代码并提供非常详细的统计信息。它有很好的界面和相当好的文档。我在 PyOpenCl 中相对较新,但我可以轻松地使用 CodeXL 来优化代码的各个方面。
      【解决方案5】:

      除了benshope's answer,您应该通过创建命令队列来启用它的分析

      queue = cl.CommandQueue(context, 
                  properties=cl.command_queue_properties.PROFILING_ENABLE)
      

      PyOpenCL examples 包含执行一些基本分析的基准测试脚本(检查benchmark.pydump-performance.pytranspose.py)。

      【讨论】:

        猜你喜欢
        • 2017-12-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-04
        • 1970-01-01
        • 2015-09-06
        • 2021-06-26
        • 1970-01-01
        相关资源
        最近更新 更多