【问题标题】:empty openCL program throws deprecation warning空的 openCL 程序引发弃用警告
【发布时间】:2015-12-18 16:27:38
【问题描述】:

我下载了 AMD APP 3.0 SDK,一旦我将 #include <CL/cl.hpp> 包含到我的 cpp 中,它就会引发弃用警告:

1>c:\program files (x86)\amd app sdk\3.0\include\cl\cl.hpp(4240): warning 
     C4996: 'clCreateSampler': was declared deprecated

还有更多。

我做错了吗?在编写一行有用的代码之前,我就已经开始使用 openCL 有这么多警告,我感到很不舒服。

【问题讨论】:

标签: c++ opencl


【解决方案1】:

这里的问题是cl.hpp 适用于 OpenCL 1.X 平台,但 AMD 的 SDK 的其余部分支持 OpenCL 2.0。 clCreateSampler 函数在 OpenCL 2.0 中已弃用。

Khronos 发布了 C++ 绑定的 OpenCL 2.X 版本 - cl2.hpp - 如果您希望使用 C++ API 定位 OpenCL 2.0 设备,您应该使用它。它可能尚未传播到供应商 SDK,但您可以获得最新版本 directly from Khronos。要使用此标头定位 OpenCL 2.0,您可以像这样包含它:

#define CL_HPP_TARGET_OPENCL_VERSION 200
#include <CL/cl2.hpp>

如果您希望改为以 OpenCL 1.2 平台为目标,您只需更改 CL_HPP_TARGET_OPENCL_VERSION_MACRO 的值:

#define CL_HPP_TARGET_OPENCL_VERSION 120
#include <CL/cl2.hpp>

(这将抑制您之前收到的弃用警告)

对于 1.X 平台,您仍然可以使用 1.X 标头 (cl.hpp);您只需要明确说明弃用警告对您来说不是问题:

#define CL_USE_DEPRECATED_OPENCL_1_2_APIS
#include <CL/cl.hpp>

【讨论】:

  • cl.hpp 切换到cl2.hpp 标头在我的英特尔OpenCL SDK 上打开了LNK2005 错误:enum cl::QueueProperties __cdecl cl::operator|(enum cl::QueueProperties,enum cl::QueueProperties) ...&lt;mangling&gt;... already defined in opencl_ops-tester.obj
  • @PatrizioBertoni 这个问题应该在几个月前就已经修复了,你使用的是最新的 cl2.hpp 吗? github.com/KhronosGroup/OpenCL-CLHPP/releases/tag/v2.0.9
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-08
  • 2023-02-14
  • 1970-01-01
  • 2018-06-22
  • 2017-09-04
相关资源
最近更新 更多