0

为了测量 OpenCL 内核执行时间,我们可以使用:

1- CPU 定时器.. 但我们需要考虑 OCL 函数是非阻塞的,因此我们需要使用clFinish()例程来实现全吞吐量。

2- GPU 计时器.. 使用clGetEventProfilingInfo()例程以及CL_QUEUE_PROFILING_ENABLE在任一例程的属性参数中clCreateCommandQueue()设置clSetCommandQueueProperty()标志。

操作系统和驱动程序版本如何影响用于测量内核执行时间的计时器的准确性?

我所知道的是,我们需要用至少一个内核调用来预热设备,以在一开始就吸收 OpenCL 资源分配的延迟。

4

1 回答 1

0

1-如果由于非阻塞内核启动而仅使用 CPU 计时,您将无法获得准确的计时,您在驱动程序上花费的时间甚至可能由于操作系统角度的上下文切换而有所不同。2- GPU 计时器取决于 GPU 硬件计数器。使用事件来读取计数器将为您提供您可以获得的最准确的时间。由于 CPU 或操作系统不干预 GPU 硬件计数器,因此效果将为零。唯一可能影响的情况是驱动程序如何处理硬件计数器。

预热部分用于数据传输和内存分配,因此它不会影响硬件计数器的行为。

于 2017-06-22T20:58:36.127 回答