[cfe-dev] clang-offload-bundler
Jonas Hahnfeld via cfe-dev
cfe-dev at lists.llvm.org
Thu Jan 11 13:20:05 PST 2018
This is implemented so that no changes to the build system are
necessary. Have a look at the class ObjectFileHandler
(https://github.com/llvm-mirror/clang/blob/f0382ad/tools/clang-offload-bundler/ClangOffloadBundler.cpp#L370).
$ clang -fopenmp -fopenmp-targets=x86_64-unknown-linux-gnu -c target.c
$ objdump -h target.o
target.o: file format elf64-x86-64
Sections:
Idx Name Size VMA LMA File off
Algn
0 .group 00000014 0000000000000000 0000000000000000 00000040
2**2
CONTENTS, READONLY, EXCLUDE, GROUP, LINK_ONCE_DISCARD
1 .text 00000068 0000000000000000 0000000000000000 00000060
2**4
CONTENTS, ALLOC, LOAD, RELOC, READONLY, CODE
2 .text.startup 00000080 0000000000000000 0000000000000000 000000d0
2**4
CONTENTS, ALLOC, LOAD, RELOC, READONLY, CODE
3 .rodata 00000001 0000000000000000 0000000000000000 00000150
2**0
CONTENTS, ALLOC, LOAD, READONLY, DATA
4 .rodata.str1.16 00000024 0000000000000000 0000000000000000
00000160 2**4
CONTENTS, ALLOC, LOAD, READONLY, DATA
5 .omp_offloading.entries 00000020 0000000000000000 0000000000000000
00000184 2**0
CONTENTS, ALLOC, LOAD, RELOC, READONLY, DATA
6 .rodata..omp_offloading.device_images 00000020 0000000000000000
0000000000000000 000001a8 2**3
CONTENTS, ALLOC, LOAD, RELOC, READONLY, DATA
7 .rodata..omp_offloading.descriptor 00000020 0000000000000000
0000000000000000 000001c8 2**3
CONTENTS, ALLOC, LOAD, RELOC, READONLY, DATA
8 __CLANG_OFFLOAD_BUNDLE__openmp-x86_64-unknown-linux-gnu 00000588
0000000000000000 0000000000000000 000001f0 2**4
CONTENTS, ALLOC, LOAD, READONLY, DATA
9 __CLANG_OFFLOAD_BUNDLE__host-x86_64-unknown-linux-gnu 00000001
0000000000000000 0000000000000000 00000778 2**0
CONTENTS, ALLOC, LOAD, READONLY, DATA
10 .eh_frame 00000098 0000000000000000 0000000000000000 00000780
2**3
CONTENTS, ALLOC, LOAD, RELOC, READONLY, DATA
11 .init_array.0 00000008 0000000000000000 0000000000000000 00000818
2**3
CONTENTS, ALLOC, LOAD, RELOC, DATA
12 .comment 00000038 0000000000000000 0000000000000000 00000820
2**0
CONTENTS, READONLY
13 .note.GNU-stack 00000000 0000000000000000 0000000000000000
00000858 2**0
CONTENTS, READONLY
Am 2018-01-11 22:12, schrieb Simone Atzeni:
> Hi Jonas,
>
> The clang-offload-bundler does not look like it uses the ELF sections
> (both the version of trunk and Ykt), it looks like it just concatenate
> the object files into one file, but I might be wrong or if not
> hopefully this will be changed later.
> At the moment, even though offloading to GPUs is not working on Clang,
> the driver seems like is doing something different than any other
> compiler.
> I cced Doru, maybe he can add more about this.
>
> I am just asking because we are going to add GPUs support on Flang and
> of course we want to keep clang and flang compatible.
>
> Thanks.
> Simone
>
> On Thu, Jan 11, 2018 at 1:00 PM, Jonas Hahnfeld <hahnjo at hahnjo.de>
> wrote:
>
>> Hi Simone,
>>
>> the same answers as always:
>> 1. Offloading to GPUs is not yet working with Clang trunk.
>> 2. Most of this has already been discussed on the mailing list or
>> described in publications. In short, clang-offload-bundler should
>> also use ELF sections for object files. And AFAIK, IBM XL uses the
>> same mechanisms in most cases.
>>
>> Jonas
>>
>> Am 2018-01-11 19:15, schrieb Simone Atzeni via cfe-dev:
>>
>>> Hi all,
>>>
>>> I have been playing with the clang driver to see how it performs
>>> the
>>> compilations for an OpenMP program with target offloading (for
>>> NVidia
>>> GPU).
>>>
>>> I noticed the use of the tool 'clang-offload-bundler' which seems
>>> to
>>> bundle together the object files for the host and for the device.
>>> In particular, if I use -c my foo.o will be a bundle of
>>> foo-x86_64.o
>>> and foo-cuda.o, and at link time it will unbundle the foo.o to
>>> obtain
>>> back the two object files.
>>>
>>> Now, if I put my foo.o for example in a static library clang does
>>> not
>>> work because it does not know how to unbundle the object files
>>> from
>>> the library.
>>>
>>> Other compilers, such as IBM XL create a specific section in the
>>> ELF
>>> to store the device code, in this way we always have one object
>>> file
>>> and there is no need to bundle/unbundle.
>>> Also if a object file/library was compiled with XL it can not be
>>> linked with clang and/or viceversa.
>>>
>>> So, am I doing something wrong, or is this the status of the clang
>>> driver?
>>> Is the clang-offload-bundler the official choice to manage device
>>> code?
>>> If my analysis is correct, what's the workaround?
>>>
>>> Thanks!
>>> Best,
>>> Simone
>>> _______________________________________________
>>> cfe-dev mailing list
>>> cfe-dev at lists.llvm.org
>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev [1]
>
>
>
> Links:
> ------
> [1] http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev
More information about the cfe-dev
mailing list