CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
77 lines
3.4 KiB
ReStructuredText
77 lines
3.4 KiB
ReStructuredText
=======================
|
|
Clang SYCL Linker
|
|
=======================
|
|
|
|
.. contents::
|
|
:local:
|
|
|
|
.. _clang-sycl-linker:
|
|
|
|
Introduction
|
|
============
|
|
|
|
This tool works as a wrapper around the SYCL device code linking process.
|
|
The purpose of this tool is to provide an interface to link SYCL device bitcode
|
|
in LLVM IR format together with LLVM bitcode libraries, and then run SPIR-V
|
|
code generation on the fully linked device code to produce the final output.
|
|
After the linking stage, the fully linked device code in LLVM IR format may
|
|
undergo several SYCL-specific finalization steps before the SPIR-V code
|
|
generation step.
|
|
The tool will also support the Ahead-Of-Time (AOT) compilation flow. AOT
|
|
compilation is the process of invoking the back-end at compile time to produce
|
|
the final binary, as opposed to just-in-time (JIT) compilation when final code
|
|
generation is deferred until application runtime.
|
|
|
|
Device code linking for SYCL offloading has known quirks that make it
|
|
difficult to use in a unified offloading setting. The primary issue is that
|
|
several finalization steps are required to be run on the fully linked LLVM
|
|
IR bitcode to guarantee conformance to SYCL standards. This step is unique to
|
|
the SYCL offloading compilation flow.
|
|
|
|
This tool has been proposed to work around this issue.
|
|
|
|
Usage
|
|
=====
|
|
|
|
This tool can be used with the following options. Several of these options will
|
|
be passed down to downstream AOT compilation tools like 'ocloc' and 'opencl-aot'.
|
|
|
|
.. code-block:: console
|
|
|
|
OVERVIEW: A utility that wraps around the SYCL device code linking process.
|
|
This enables LLVM IR linking, post-linking and code generation for SPIR-V
|
|
JIT and AOT targets.
|
|
|
|
USAGE: clang-sycl-linker [options] <input bitcode files>
|
|
|
|
OPTIONS:
|
|
--arch <value> Specify the name of the target architecture.
|
|
--dry-run Print generated commands without running.
|
|
-help-hidden Display all available options
|
|
-help Display available options (--help-hidden for more)
|
|
-L <dir> Add <dir> to the library search path
|
|
--bc-library <name> Add LLVM bitcode library <name> (with extension) to the link. A relative <name> is resolved against -L paths; an absolute path is taken as-is.
|
|
--module-split-mode=<mode> Module split mode: 'source' (default), 'kernel', or 'none'
|
|
--ocloc-options=<value> Options passed to ocloc for Intel GPU AOT compilation
|
|
--opencl-aot-options=<value> Options passed to opencl-aot for Intel CPU AOT compilation
|
|
-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
|
|
|
|
Example
|
|
=======
|
|
|
|
This tool is intended to be invoked when targeting any of the target offloading
|
|
toolchains. When the --sycl-link option is passed to the clang driver, the
|
|
driver will invoke the linking job of the target offloading toolchain, which in
|
|
turn will invoke this tool. This tool can be used to create one or more fully
|
|
linked device images that are ready to be wrapped and linked with host code to
|
|
generate the final executable.
|
|
|
|
.. code-block:: console
|
|
|
|
clang-sycl-linker --triple spirv64 --arch bmg_g21 input.bc
|