如何确定我的OpenCL内核正在GPU上运行?

9

我如何确保我的OpenCL内核实际在GPU上运行而不是在CPU上运行?因为OpenCL内核也可以在CPU上运行,所以我无法理解这一点。请问有什么指针吗?

4个回答

5

创建OpenCL上下文时,您需要在计算机上可用的平台和设备之间进行选择。

您可以使用clGetPlatformInfoclGetDeviceInfo来获取有关平台和设备的一些信息。

您可以在NVIDIA和AMD SDK中找到示例代码以列出平台和设备。

对于AMD(gDEBugger,Code XL)、NVIDIA(Visual Profiler)和Intel(Intel GPA)设备,您可以使用性能分析工具。


4
创建您的上下文时,使用clCreateContextFromType函数,并传递标志CL_DEVICE_TYPE_GPU,以指定您只需要GPU。像这样做保证了使用GPU(您可以100%确定):
cl_uint num_platforms = 0;
clGetPlatformIDs(0, NULL, &num_platforms);
cl_platform_id* platform = malloc(sizeof(cl_platform_id) * num_platforms);
cl_context_properties cprops[3] = { CL_CONTEXT_PLATFORM, (cl_context_properties)platform[0], 0 };
ctx = clCreateContextFromType(cprops, CL_DEVICE_TYPE_GPU, NULL, NULL, &err);

如果您已经设置好上下文和设备,可以通过以下方式查询设备类型:
cl_device_type dev_type;
clGetDeviceInfo(my_device, CL_DEVICE_TYPE, sizeof(dev_type), &dev_type, NULL);
if (dev_type == CL_DEVICE_TYPE_GPU) {
    printf("I'm 100%% sure this device is a GPU");
}

您在此设备上创建的命令队列中排队的所有内容都将在 GPU 上运行。


0

我在我的Macbook Pro和Mac Pro上使用MenuMeters - 如果CPU正在使用,那是显而易见的。(我不知道在使用XCode下的OpenCL时,分析工具是否适用于我....)


0
您可以使用TechPowerUp GPU-Z来查看GPU上是否有一些工作负载。 另一个解决方案:您可以明确指定是否在设备类型CL_Device_Type_GPU中使用GPU。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接