OpenCL:如何使用C++包装器检查构建错误

OpenCL: How to check for build errors using the C++ wrapper

本文关键字:检查 构建 错误 包装 C++ 何使用 OpenCL      更新时间:2023-10-16

如果我用这样的源代码构建一个openCL程序

cl::Program program = cl::Program(context, sourceCode);
program.build(devices);

我想检查一下这是否成功。我看到了一些如何在C中实现这一点的例子,但由于我的项目是在C++中进行的,我想知道如何(在出现问题的情况下)获得一条可读的文本消息,指示使用C++包装器可能存在的问题。

我还启用了异常

#define CL_HPP_ENABLE_EXCEPTIONS 

但不知道CCD_ 1是否抛出异常。

我使用的是AMD APP SDK 3.0和Khronos网页上的cl2.hpp(因为它没有包含在SDK中)。

如果构建失败,cl::Program::build()函数确实会抛出异常。以下是如何获取构建日志:
cl::Program program = cl::Program(context, sourceCode);
try
{
  program.build(devices);
}
catch (cl::Error& e)
{
  if (e.err() == CL_BUILD_PROGRAM_FAILURE)
  {
    for (cl::Device dev : devices)
    {
      // Check the build status
      cl_build_status status = program.getBuildInfo<CL_PROGRAM_BUILD_STATUS>(dev);
      if (status != CL_BUILD_ERROR)
        continue;
      // Get the build log
      std::string name     = dev.getInfo<CL_DEVICE_NAME>();
      std::string buildlog = program.getBuildInfo<CL_PROGRAM_BUILD_LOG>(dev);
      std::cerr << "Build log for " << name << ":" << std::endl
                << buildlog << std::endl;
  }
  else
  {
    throw e;
  }
}