【问题标题】:How do I know my OpenCL kernel is running on GPU?我如何知道我的 OpenCL 内核正在 GPU 上运行?
【发布时间】:2012-10-03 16:36:24
【问题描述】:

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

【问题讨论】:

    标签: opencl


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      创建上下文时,使用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 上运行。

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2023-02-19
            • 2020-07-18
            • 2014-09-18
            相关资源
            最近更新 更多