【问题标题】:How to use OpenCL lib with SPIR-V?如何将 OpenCL 库与 SPIR-V 一起使用?
【发布时间】:2018-09-23 13:39:23
【问题描述】:

我已经成功使用 OpenCL 和 VS2015 编写并执行了一个.cl 程序。我现在正在尝试按照these guidelines 将其转换为 OpenCL C++,其中提到:

要将 OpenCL C++ 内核语言编译为 SPIR-V,用户必须使用不属于 OpenCL 框架的编译器。 Khronos Group 提供参考 offline compiler based on Clang 3.6 和名为 libclcxx 的 OpenCL C++ 标准库的实现。

如何使这些安装说明适应 VS2015?

【问题讨论】:

  • @Quentin 是的,我试过了。要编译cl 文件,我必须使用 SPIR 编译器。但我不明白,我如何将两个编译器一起使用,gcc 用于主机文件,spir-v 用于 cl 文件。
  • @Quentin 不,不是 cl.exe。 To compile OpenCL C++ kernel language to SPIR-V user have to use compiler that is not a part of OpenCL framework. The Khronos Group provides reference offline compiler based on Clang 3.6 and an implementation of OpenCL C++ Standard Library called libclcxx.
  • 我已对您的问题进行了大量改写以提供更多上下文。根据您的喜好随意更正、修改甚至丢弃它。此外,您应该用描述您在尝试中遇到的确切位置来替换最后那句宽泛的句子。
  • @Quentin 哦,谢谢。现在它更正确了。我会等待答案
  • 这是针对哪个硬件供应商的,您使用的是 AMD App SDK 吗?请参阅this thread,AMD 表示他们不支持 OpenCL 和 SPIR-V。但显然 AMD 现在正在追求 ROCm。英特尔工具包确实提供了一个用于 Windows 的 SPIR-V 编译器,如果您有兴趣在 CPU 上运行 OpenCL,则调用为 ioc64 -cmd=compile -spirv64。

标签: c++ visual-studio-2015 opencl


【解决方案1】:

在使用 OpenCL 时,您应该了解代码是如何划分的。有一部分代码是在host环境下运行的,然后是device代码。

在您的示例中,您可以使用 VS2015 使用 MSVC 编译器编译主机代码,链接到 OpenCL 运行时库。但是,MSVC 将不支持编译 kernel 代码,无论是 C 还是 C++。

要编译内核代码,您可以使用 OpenCL 运行时库(即 clCreateProgram 后跟 clBuildProgram),如果它们支持源语言的话。此外,一些(大多数)OpenCL 设备支持内核代码的中间表示。这些通用的中间表示之一是 SPIR-V。因此,您可以加载内核的任意 SPIR-V 表示,假设它满足所有 OpenCL 要求。

因此,说明告诉您要做的是使用 OpenCL 运行时本身的外部工具将您的“.cl”文件编译为 SPIR-V 表示,然后加载该表示(clCreateProgramWithIL 后跟 clBuildProgram) OpenCL 运行时。

具体如何执行此操作取决于您。一种方法是使用 Khronos 提供的修改后的 Clang 编译器: https://github.com/KhronosGroup/SPIR/tree/spirv-1.1

构建完成后(如果您已经安装了 git 和 cmake,这很容易),您可以在 VS2015 中使用自定义构建工具/步骤(无论您喜欢哪个)调用它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-30
    • 1970-01-01
    • 2011-07-10
    • 1970-01-01
    • 1970-01-01
    • 2014-03-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多