File: ClangNvlinkWrapper.rst

package info (click to toggle)
llvm-toolchain-15 1%3A15.0.6-4
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 1,554,644 kB
  • sloc: cpp: 5,922,452; ansic: 1,012,136; asm: 674,362; python: 191,568; objc: 73,855; f90: 42,327; lisp: 31,913; pascal: 11,973; javascript: 10,144; sh: 9,421; perl: 7,447; ml: 5,527; awk: 3,523; makefile: 2,520; xml: 885; cs: 573; fortran: 567
file content (57 lines) | stat: -rw-r--r-- 1,691 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
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.