【问题标题】:How to run Apple's OpenCL "Hello World" example in XCode如何在 XCode 中运行 Apple 的 OpenCL“Hello World”示例
【发布时间】:2013-09-08 02:57:43
【问题描述】:

Apple 提供了一个 OpenCL “Hello World”示例,可以从以下页面下载为 .zip 文件:

https://developer.apple.com/library/mac/samplecode/OpenCL_Hello_World_Example/Introduction/Intro.html

我下载了它,在 Xcode 中打开了项目,然后点击了Run。构建成功,但我收到以下错误消息:Error: Failed to create a device group!

对于如何在我的 Mac 上运行一个简单的 OpenCL 示例的任何建议,我将不胜感激。如果它与诊断相关:我在 2011 年初的 MacBook Pro 上运行 Mac OS 10.7.5,并且安装了 Xcode 4.2 版。

【问题讨论】:

    标签: macos opencl


    【解决方案1】:

    万岁,我自己解决了。 Apple 提供的hello.c 文件包含以下代码行:

    114    // Connect to a compute device
    115    //
    116    int gpu = 1;
    117    err = clGetDeviceIDs(NULL, gpu ? CL_DEVICE_TYPE_GPU : CL_DEVICE_TYPE_CPU, 1, &device_id, NULL);
    118    if (err != CL_SUCCESS)
    119    {
    120        printf("Error: Failed to create a device group!\n");
    121        return EXIT_FAILURE;
    122    }
    

    代码正在尝试获取支持 OpenCL 的 GPU 设备的 ID。问题是我的机器(MacBook Pro,2011 年初)没有支持 OpenCL 的 GPU。如果设置了CL_DEVICE_TYPE_CPU 标志,则CPU 已找到,并且此确实 支持OpenCL。如果文件修改如下:

    116    int gpu = 0;
    

    然后我得到输出:Computed '1024/1024' correct values!

    【讨论】:

      【解决方案2】:

      您可以修改代码,如果没有支持的 GPU 则回退到 CPU

      // Connect to a compute device
      //
      int gpu = 1;
      err = clGetDeviceIDs(NULL, gpu ? CL_DEVICE_TYPE_GPU : CL_DEVICE_TYPE_CPU, 1, &device_id, NULL);
      if (err != CL_SUCCESS)
      {
          printf("Failed to create a device group for gpu, so it will fall back to use cpu!\n");
          err = clGetDeviceIDs(NULL, CL_DEVICE_TYPE_CPU, 1, &device_id, NULL);
          if (err != CL_SUCCESS)
              return EXIT_FAILURE;
      }
      
      
      // Get some information about the returned device
      cl_char vendor_name[1024] = {0};
      cl_char device_name[1024] = {0};
      size_t returned_size = 0;
      err = clGetDeviceInfo(device_id, CL_DEVICE_VENDOR, sizeof(vendor_name),
                            vendor_name, &returned_size);
      err |= clGetDeviceInfo(device_id, CL_DEVICE_NAME, sizeof(device_name),
                             device_name, &returned_size);
      if (err != CL_SUCCESS)
          return EXIT_FAILURE;
      printf("Connecting to %s %s...\n", vendor_name, device_name);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-05-10
        • 2014-09-05
        • 1970-01-01
        • 2021-01-18
        • 1970-01-01
        相关资源
        最近更新 更多