Clang SYCL 链接器

简介

此工具作为 SYCL 设备代码链接过程的包装器。该工具的目的是提供一个接口来链接 LLVM IR 格式的 SYCL 设备位码、SPIR-V IR 格式的 SYCL 设备位码和本机二进制对象,然后使用 SPIR-V LLVM 转换器工具对完全链接的设备对象进行处理,生成最终的输出。在链接阶段之后,完全链接的 LLVM IR 格式的设备代码可能会经过几个特定于 SYCL 的最终化步骤,然后才能进行 SPIR-V 代码生成步骤。该工具还将支持提前编译 (AOT) 编译流程。AOT 编译是指在编译时调用后端以生成最终二进制文件的过程,与延迟到应用程序运行时的最终代码生成的即时 (JIT) 编译相反。

用于 SYCL 卸载的设备代码链接存在一些已知的怪癖,这些怪癖使其难以在统一的卸载设置中使用。两个主要问题是:1. 需要对完全链接的 LLVM IR 位码运行多个最终化步骤,以确保符合 SYCL 标准。此步骤是 SYCL 卸载编译流程所特有的。2. SPIR-V LLVM 转换器工具是一个外部工具,因此 SPIR-V IR 代码生成无法作为 LTO 的一部分完成。一旦 SPIR-V 后端可用作可行的 LLVM 后端,就可以消除此限制。

建议使用此工具来解决这些问题。

用法

此工具可以与以下选项一起使用。这些选项中的几个将传递给下游工具,如“llvm-link”、“llvm-spirv”等。

OVERVIEW: A utility that wraps around the SYCL device code linking process.
This enables linking and code generation for SPIR-V JIT targets and AOT
targets.

USAGE: clang-sycl-linker [options]

OPTIONS:
  --arch <value>                Specify the name of the target architecture.
  --dry-run                     Print generated commands without running.
  -g                            Specify that this was a debug compile.
  -help-hidden                  Display all available options
  -help                         Display available options (--help-hidden for more)
  --library-path=<dir>          Set the library path for SYCL device libraries
  --device-libs=<value>         A comma separated list of device libraries that are linked during the device link
  -o <path>                     Path to file to write output
  --save-temps                  Save intermediate results
  --triple <value>              Specify the target triple.
  --version                     Display the version number and exit
  -v                            Print verbose information
  -spirv-dump-device-code=<dir> Directory to dump SPIR-V IR code into
  -is-windows-msvc-env          Specify if we are compiling under windows environment
  -llvm-spirv-options=<value>   Pass options to llvm-spirv tool
  --llvm-spirv-path=<dir>       Set the system llvm-spirv path

示例

此工具旨在用于针对任何目标卸载工具链时调用。当将 –sycl-link 选项传递给 clang 驱动程序时,驱动程序将调用目标卸载工具链的链接作业,该作业反过来将调用此工具。此工具可用于创建一个或多个完全链接的设备映像,这些映像已准备好进行包装并与主机代码链接,以生成最终的可执行文件。

clang-sycl-linker --triple spirv64 --arch native input.bc