[libc] Add a loader utility for NVPTX architectures for testing
authorJoseph Huber <jhuber6@vols.utk.edu>
Thu, 23 Mar 2023 01:00:13 +0000 (20:00 -0500)
committerJoseph Huber <jhuber6@vols.utk.edu>
Sat, 25 Mar 2023 01:04:42 +0000 (20:04 -0500)
commit2bef46d2ad872794c83a49f1da12b1b20835f75d
treea2e15b026cdc203f4bedff02e652e4da29a04651
parent583120642694f21dc5f7cfc59b22fa6e709258eb
[libc] Add a loader utility for NVPTX architectures for testing

This patch adds a loader utility targeting the CUDA driver API to launch
NVPTX images called `nvptx_loader`. This takes a GPU image on the
command line and launches the `_start` kernel with the appropriate
arguments. The `_start` kernel is provided by the already implemented
`nvptx/start.cpp`. So, an application with a `main` function can be
compiled and run as follows.

```
clang++ --target=nvptx64-nvidia-cuda main.cpp crt1.o -march=sm_70 -o image
./nvptx_loader image args to kernel
```

This implementation is not tested and does not yet support RPC. This
requires further development to work around NVIDIA specific limitations
in atomics and linking.

Reviewed By: jdoerfert

Differential Revision: https://reviews.llvm.org/D146681
libc/utils/gpu/loader/CMakeLists.txt
libc/utils/gpu/loader/Loader.h
libc/utils/gpu/loader/amdgpu/Loader.cpp
libc/utils/gpu/loader/nvptx/CMakeLists.txt [new file with mode: 0644]
libc/utils/gpu/loader/nvptx/Loader.cpp [new file with mode: 0644]