Mercurial > hg > CbC > CbC_llvm
view clang/docs/ClangNvlinkWrapper.rst @ 236:c4bab56944e8 llvm-original
LLVM 16
author | kono |
---|---|
date | Wed, 09 Nov 2022 17:45:10 +0900 |
parents | |
children |
line wrap: on
line source
==================== Clang Nvlink Wrapper ==================== .. contents:: :local: .. _clang-nvlink-wrapper: Introduction ============ This tool works as a wrapper over the ``nvlink`` program. It is required because ``nvlink`` does not support linking of archive files implicitly. It transparently passes every input option and object to ``nvlink`` except archive files. It reads each input archive file to extract the archived cubin files as temporary files. These temporary (\*.cubin) files are passed to ``nvlink``. Use Case ======== During linking of heterogeneous device archive libraries with an OpenMP program, the :doc:`ClangOffloadBundler` creates a device specific archive of cubin files. Such an archive is then passed to this wrapper tool to extract cubin files before passing to ``nvlink``. Working ======= **Inputs** A command line generated by the OpenMP-Clang driver targeting NVPTX, containing a set of flags, cubin object files, and zero or more archive files. Example:: clang-nvlink-wrapper main.cubin /tmp/libTest-nvptx-sm_50.a -o main-linked.out **Processing** 1. From each archive file extract all cubin files as temporary files and store their names in a list, `CubinFiles`. 2. Create a new command line, `NVLinkCommand`, such that * Program is ``nvlink`` * All input flags are transparently passed on as flags * All input archive file are replaced with `CubinFiles` 3. Execute NVLinkCommand :: 1. Extract (libTest-nvptx-sm_50.a) => /tmp/a.cubin /tmp/b.cubin 2. nvlink -o a.out-openmp-nvptx64 main.cubin /tmp/a.cubin /tmp/b.cubin **Output** Output file generated by ``nvlink`` which links all cubin files.