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 Clang Offload Bundler 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
From each archive file extract all cubin files as temporary files and store their names in a list, CubinFiles.
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 CubinFilesExecute 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.