Time PyOpenCL中的时间测量

Time PyOpenCL中的时间测量,time,opencl,gpu,fpga,pyopencl,Time,Opencl,Gpu,Fpga,Pyopencl,我正在FPGA和GPU中使用PyOpenCL运行内核。为了测量执行所需的时间,我使用: t1 = time() event = mykernel(queue, (c_width, c_height), (block_size, block_size), d_c_buf, d_a_buf, d_b_buf, a_width, b_width) event.wait() t2 = time() compute_time = t2-t1 compute_time_e = (event.profile

我正在FPGA和GPU中使用PyOpenCL运行内核。为了测量执行所需的时间,我使用:

t1 = time()
event = mykernel(queue, (c_width, c_height), (block_size, block_size), d_c_buf, d_a_buf, d_b_buf, a_width, b_width)
event.wait()
t2 = time()

compute_time = t2-t1
compute_time_e = (event.profile.end-event.profile.start)*1e-9 
这从主机(计算时间)和设备(计算时间)的角度为我提供了执行时间。问题是这些值非常不同:

compute (host-timed) [s]: 0.0009386539459228516
compute (event-timed) [s]:  9.4528e-05
有人知道这种差异的原因吗?更重要的是,哪一个更准确


谢谢。

我觉得这两个数字都不错。如果我没有弄错的话,主机的时间大约是设备时间的10倍——这对于一个小内核来说并不奇怪,因为它包含了传输时间。主机时间测量通过PCB的通信,但设备时间仅测量芯片上的操作

我认为您的节目时间安排如下:

  • 内核执行时间:0.1ms//event timed
  • 传输时间:0.8ms/(主机定时-事件定时)
  • 总时间:0.9ms//主机定时
如果您对这种情况感到好奇,请尝试在设备上运行需要更长时间的内核。随着固定传输时间占总时间的比例越来越小,您应该开始看到这些数字更加匹配

例如:

  • 内核执行时间:900ms
  • 传输时间:0.8ms
  • 总时间:900.8ms

您可以从OpenCL上的站点学到很多东西。它指出,
event.profile
仅给出内核的纯硬件执行时间的提示,而忽略了数据传输时间(包括在第一次测量中)。因此,主机侧墙上的时钟时间可能会返回不同的结果。然而,也有人指出,如果将内核作为OpenCL设备瞄准CPU,则时间差应该会变小(甚至可以忽略不计)