9

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

4

4 回答 4

5

创建 OpenCL 上下文时,您必须在计算机上可用的平台和设备之间进行选择。您可以使用clGetPlatformInfoclGetDeviceInfo获取有关平台和设备的一些信息。您可以在 NVIDIA 和 AMD SDK 中找到示例代码以列出平台和设备。

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

于 2012-10-02T13:41:06.677 回答
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 上运行。

于 2012-10-03T08:36:24.063 回答
0

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

于 2012-10-02T14:35:38.013 回答
0

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

于 2012-10-03T06:49:10.437 回答