我怎样才能100%确定我的opencl内核实际上是在GPU上运行而不是在CPU上运行。 我无法理解这一点,因为openCL内核也可以在CPU上运行。 这里有什么指示?
答案 0 :(得分:5)
创建OpenCL上下文时,必须在计算机上可用的平台和设备之间进行选择。 您可以使用 clGetPlatformInfo 和 clGetDeviceInfo 获取有关平台和设备的一些信息。 您可以在NVIDIA和AMD SDK中找到样本代码,以列出平台和设备。
对于AMD(gDEBugger,Code XL),NVIDIA(Visual Profiler)和英特尔(Intel GPA)设备,您可以使用分析工具。
答案 1 :(得分: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上运行。
答案 2 :(得分:0)
您可以简单地使用TechPowerUp GPU-Z来查看GPU上是否存在一些工作负载。 另一种解决方案:您可以明确指定您是否在设备类型CL_Device_Type_GPU中使用GPU。
答案 3 :(得分:0)
我在Macbook Pro& amp; Mac Pro - 如果正在使用CPU,那很明显。 (我不知道在XCode下使用OpenCL时,分析工具是否适合我。)