AMD GPU的OpenCL时间测量问题

OpenCL time measurment issues with AMD GPU

本文关键字:测量 问题 时间 OpenCL GPU AMD      更新时间:2023-10-16

我最近比较了两种进行内核运行时测量的方法,发现了一些令人困惑的结果。

我使用AMD山猫CPU(E-350),集成GPU和Ubuntu Linux(CL_PLATFORM_VERSION就是OpenCL 1.2 AMD-APP (923.1))。

每日获取时间的基本想法如下:

clFinish(...)  // that all tasks are finished on the command queue
gettimeofday(&starttime,0x0)
clEnqueueNDRangeKernel(...)
clFlush(...)
clWaitForEvents(...)
gettimeofday(&endtime,0x0)

这意味着内核需要5466毫秒左右的

我用clGetEventProfilingInfoQUEUED/SUBMIT/START/END进行了第二次时间测量。

使用4个时间值,我可以计算在不同状态下花费的时间:

  • 排队时间:0.06ms
  • 提交的时间花费:2733ms
  • 执行时间:2731ms(实际执行时间)

我看到它加起来是5466毫秒,但为什么它有一半时间处于提交状态?

有趣的是:

  • 提交的状态总是实际执行时间的一半,即使对于不同的内核或不同的工作负载(因此它不可能是恒定的设置时间),

  • 对于CPU,在提交状态下花费的时间为0,执行时间等于获取日期结果

  • 我在英特尔常春藤桥上用CPU和GPU测试了我的内核,没有看到效果。

有人知道线索吗?

我怀疑GPU运行内核两次(导致gettimeofday是实际执行时间的两倍),或者函数clGetEventProfileInfo对AMD GPU工作不正常。

我在AMD论坛上发布了这个问题。他们说这是AMD探查器中的一个错误。

http://devgurus.amd.com/thread/159809