使用 AMD APP SDK 2.9 创建符合 OpenCL 1.1 的应用程序

Creating OpenCL 1.1 compliant application using AMD APP SDK 2.9?

本文关键字:OpenCL 应用程序 创建 APP AMD SDK 使用      更新时间:2023-10-16

AMD仅保留了其SDK的2.9,2.8和2.7版本,所有这些版本都适用于OpenCL 1.2。我希望我的应用程序与 OpenCL 1.1 硬件兼容。由于我坚持使用 1.2 SDK,并且没有太多的硬件支持进行测试,我想知道这样做的正确方法是什么?

  1. 我从Khronos网站下载了1.1标头,并将它们与我的MinGW编译器一起使用。该应用程序适用于我的 ATI GPU,只有 OpenCL 1.1 驱动程序,但我不确定我是否正确。我有这个疑问,因为我仍在从OpenCL 1.2的SDK链接OpenCL.lib。

  2. 我还应该将 OpenCL.dll 从 SDK 分发到我的应用程序中吗?

  3. 通过禁用 OpenCL 代码以避免在不兼容的硬件中出现错误消息的最佳方法是什么,以便至少其他所有内容都运行?

看看 cl.h header:

每个 API 函数都有宏,用于定义它属于哪个版本:

extern CL_API_ENTRY CL_EXT_PREFIX__VERSION_1_1_DEPRECATED cl_mem CL_API_CALL
clCreateImage2D(cl_context              /* context */,
                cl_mem_flags            /* flags */,
                const cl_image_format * /* image_format */,
                size_t                  /* image_width */,
                size_t                  /* image_height */,
                size_t                  /* image_row_pitch */, 
                void *                  /* host_ptr */,
                cl_int *                /* errcode_ret */) CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED;

因此,要使您的应用程序符合 OpenCL 1.1 标准,请使用版本 1.1 及更早版本的函数。考虑到,函数(如clCreateImage2D)可能在新的API版本中被弃用。在这种情况下,您需要定义CL_USE_DEPRECATED_OPENCL_1_1_APIS宏 - 但我不知道这是否是一种好的做法。