saiislam created this revision.
saiislam added reviewers: sylvestre.ledru, ye-luo, jdoerfert.
Herald added a subscriber: arphaman.
saiislam requested review of this revision.
Herald added subscribers: cfe-commits, sstefan1.
Herald added a project: clang.

Add documentation of clang-nvlink-wrapper tool in clang. Add it to
the release notes of clang.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D109225

Files:
  clang/docs/ClangNvlinkWrapper.rst
  clang/docs/ReleaseNotes.rst
  clang/docs/index.rst


Index: clang/docs/index.rst
===================================================================
--- clang/docs/index.rst
+++ clang/docs/index.rst
@@ -80,6 +80,7 @@
    ClangFormat
    ClangFormatStyleOptions
    ClangFormattedStatus
+   ClangNvlinkWrapper
    ClangOffloadBundler
 
 Design Documents
Index: clang/docs/ReleaseNotes.rst
===================================================================
--- clang/docs/ReleaseNotes.rst
+++ clang/docs/ReleaseNotes.rst
@@ -147,7 +147,9 @@
 OpenMP Support in Clang
 -----------------------
 
-- ...
+- clang-nvlink-wrapper tool introduced to support linking of cubin files
+  archived in an archive. See `Clang Nvlink Wrapper 
<https://clang.llvm.org/docs/ClangNvlinkWrapper.html>`_ .
+
 
 CUDA Support in Clang
 ---------------------
Index: clang/docs/ClangNvlinkWrapper.rst
===================================================================
--- /dev/null
+++ clang/docs/ClangNvlinkWrapper.rst
@@ -0,0 +1,51 @@
+=====================
+Clang Nvlink Wrapper
+=====================
+
+.. contents::
+   :local:
+
+.. _clang-nvlink-wrapper:
+
+Introduction
+============
+
+This tool works as a wrapper over nvlink program. It is required because 
nvlink does not
+support linking of archive files implicitly. It transparently passes every
+input option and objects to nvlink except archive files. It reads each input
+archive file to extract archived cubin files as temporary files.
+These temp (*.cubin) files are passed to nvlink.
+
+During linking of heterogenous device archive libraries with an OpenMP program,
+the `Clang Offload Bundler 
<https://clang.llvm.org/docs/ClangOffloadBundler.html>`_
+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 
a.out-openmp-nvptx64
+
+**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 by linking all cubin files.
\ No newline at end of file


Index: clang/docs/index.rst
===================================================================
--- clang/docs/index.rst
+++ clang/docs/index.rst
@@ -80,6 +80,7 @@
    ClangFormat
    ClangFormatStyleOptions
    ClangFormattedStatus
+   ClangNvlinkWrapper
    ClangOffloadBundler
 
 Design Documents
Index: clang/docs/ReleaseNotes.rst
===================================================================
--- clang/docs/ReleaseNotes.rst
+++ clang/docs/ReleaseNotes.rst
@@ -147,7 +147,9 @@
 OpenMP Support in Clang
 -----------------------
 
-- ...
+- clang-nvlink-wrapper tool introduced to support linking of cubin files
+  archived in an archive. See `Clang Nvlink Wrapper <https://clang.llvm.org/docs/ClangNvlinkWrapper.html>`_ .
+
 
 CUDA Support in Clang
 ---------------------
Index: clang/docs/ClangNvlinkWrapper.rst
===================================================================
--- /dev/null
+++ clang/docs/ClangNvlinkWrapper.rst
@@ -0,0 +1,51 @@
+=====================
+Clang Nvlink Wrapper
+=====================
+
+.. contents::
+   :local:
+
+.. _clang-nvlink-wrapper:
+
+Introduction
+============
+
+This tool works as a wrapper over nvlink program. It is required because nvlink does not
+support linking of archive files implicitly. It transparently passes every
+input option and objects to nvlink except archive files. It reads each input
+archive file to extract archived cubin files as temporary files.
+These temp (*.cubin) files are passed to nvlink.
+
+During linking of heterogenous device archive libraries with an OpenMP program,
+the `Clang Offload Bundler <https://clang.llvm.org/docs/ClangOffloadBundler.html>`_
+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 a.out-openmp-nvptx64
+
+**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 by linking all cubin files.
\ No newline at end of file
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to