forked from OSchip/llvm-project
[clang-nvlink-wrapper] Add documentation in clang docs
Add documentation of clang-nvlink-wrapper tool in clang. Add it to the release notes of clang. Fix a small MSVC warning. Differential Revision: https://reviews.llvm.org/D109225
This commit is contained in:
parent
779368bd9f
commit
e15836361c
|
@ -0,0 +1,57 @@
|
||||||
|
====================
|
||||||
|
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.
|
|
@ -147,7 +147,8 @@ ABI Changes in Clang
|
||||||
OpenMP Support in Clang
|
OpenMP Support in Clang
|
||||||
-----------------------
|
-----------------------
|
||||||
|
|
||||||
- ...
|
- ``clang-nvlink-wrapper`` tool introduced to support linking of cubin files archived in an archive. See :doc:`ClangNvlinkWrapper`.
|
||||||
|
|
||||||
|
|
||||||
CUDA Support in Clang
|
CUDA Support in Clang
|
||||||
---------------------
|
---------------------
|
||||||
|
|
|
@ -80,6 +80,7 @@ Using Clang Tools
|
||||||
ClangFormat
|
ClangFormat
|
||||||
ClangFormatStyleOptions
|
ClangFormatStyleOptions
|
||||||
ClangFormattedStatus
|
ClangFormattedStatus
|
||||||
|
ClangNvlinkWrapper
|
||||||
ClangOffloadBundler
|
ClangOffloadBundler
|
||||||
|
|
||||||
Design Documents
|
Design Documents
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
/// These temp (*.cubin) files are passed to nvlink, because nvlink does not
|
/// These temp (*.cubin) files are passed to nvlink, because nvlink does not
|
||||||
/// support linking of archive files implicitly.
|
/// support linking of archive files implicitly.
|
||||||
///
|
///
|
||||||
/// During linking of heteregenous device archive libraries, the
|
/// During linking of heterogeneous device archive libraries, the
|
||||||
/// clang-offload-bundler creates a device specific archive of cubin files.
|
/// clang-offload-bundler creates a device specific archive of cubin files.
|
||||||
/// Such an archive is then passed to this tool to extract cubin files before
|
/// Such an archive is then passed to this tool to extract cubin files before
|
||||||
/// passing to nvlink.
|
/// passing to nvlink.
|
||||||
|
@ -60,7 +60,7 @@ static Error extractArchiveFiles(StringRef Filename,
|
||||||
std::vector<std::unique_ptr<MemoryBuffer>> ArchiveBuffers;
|
std::vector<std::unique_ptr<MemoryBuffer>> ArchiveBuffers;
|
||||||
|
|
||||||
ErrorOr<std::unique_ptr<MemoryBuffer>> BufOrErr =
|
ErrorOr<std::unique_ptr<MemoryBuffer>> BufOrErr =
|
||||||
MemoryBuffer::getFileOrSTDIN(Filename, -1, false);
|
MemoryBuffer::getFileOrSTDIN(Filename, false, false);
|
||||||
if (std::error_code EC = BufOrErr.getError())
|
if (std::error_code EC = BufOrErr.getError())
|
||||||
return createFileError(Filename, EC);
|
return createFileError(Filename, EC);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue