我如何知道我的OpenCL内核正在GPU上运行?

我如何知道我的OpenCL内核正在GPU上运行?,opencl,gpu,Opencl,Gpu,我怎样才能100%确定我的opencl内核实际上是在GPU上运行,而不是在CPU上运行。我无法理解这一点,因为openCL内核也可以在CPU上运行。这里有什么指示吗 使用创建命令队列时,将传入一个设备。这将是用于排队到此队列的内核的设备 通过查询CL_设备类型,可以确定这是否是GPU。它将返回一个或多个 CL_DEVICE_TYPE_CPU CL_DEVICE_TYPE_GPU CL_DEVICE_TYPE_ACCELERATOR CL_DEVICE_TYPE_DEFAULT CL_DEVICE

我怎样才能100%确定我的opencl内核实际上是在GPU上运行,而不是在CPU上运行。我无法理解这一点,因为openCL内核也可以在CPU上运行。这里有什么指示吗

使用创建命令队列时,将传入一个设备。这将是用于排队到此队列的内核的设备

通过查询CL_设备类型,可以确定这是否是GPU。它将返回一个或多个

CL_DEVICE_TYPE_CPU
CL_DEVICE_TYPE_GPU
CL_DEVICE_TYPE_ACCELERATOR
CL_DEVICE_TYPE_DEFAULT
CL_DEVICE_TYPE_CUSTOM 

顺便说一下,这些类型与您在获取设备ID时要传递的类型相同。因此,您可能希望在开始时将此查询限制为CL_DEVICE_TYPE_GPU,以便只获取GPU的设备ID

我同意。此外,为了实际观察效果,您还可以使用类似“选择系统信息控制+I/选择GPU选项卡”的工具来观察GPU峰值。感谢重播,我在运行简单的c代码(如while1{printfhello\n;})时使用了与process explorer相同的amd System monitorgpu的使用率在5%到90%之间,没有任何opencl代码,只有简单的c。当运行opencl程序时,sobel edge detection for gray img with ou process(灰度图像边缘检测)仅显示每秒帧的输入和输出fps=70,但当进程减少到20时,使用gpu的进程可以知道that@user1848223很抱歉我想我不明白最后一个问题。听上去,当你不计算任何东西时,每秒的帧数是70,而当你进行计算时,每秒的帧数是20。任何计算都需要时间,所以这并不奇怪。也许你可以尝试重新表述这个问题,可能是一个包含更多信息的新问题。