|
| 1 | +.. _libc_gpu_motivation: |
| 2 | + |
| 3 | +========================== |
| 4 | +Motivation and Limitations |
| 5 | +========================== |
| 6 | + |
| 7 | +.. contents:: Table of Contents |
| 8 | + :depth: 4 |
| 9 | + :local: |
| 10 | + |
| 11 | +Motivation |
| 12 | +========== |
| 13 | + |
| 14 | +This project aims to provide a large subset of the C standard library to users |
| 15 | +of GPU accelerators. We deliberately choose to only implement a subset of the C |
| 16 | +library as some features are not expressly useful or easily implemented on the |
| 17 | +GPU. This will be discussed further in `Limitations <libc_gpu_limitations>`_. |
| 18 | +The main motivation behind this project is to provide the well understood C |
| 19 | +library as a firm base for GPU development. |
| 20 | + |
| 21 | +The main idea behind this project is that programming GPUs can be as |
| 22 | +straightforward as programming on CPUs. This project aims to validate the GPU as |
| 23 | +a more general-purpose target. The implementations here will also enable more |
| 24 | +complex implementations of other libraries on the GPU, such as ``libc++``. |
| 25 | + |
| 26 | +Host services and C library features are currently provided sparsely by the |
| 27 | +different GPU vendors. We wish to provide these functions more completely and |
| 28 | +make their implementations available in a common format. This is useful for |
| 29 | +targets like OpenMP offloading or SYCL which wish to unify the offloading |
| 30 | +toolchain. We also aim to provide these functions in a format compatible with |
| 31 | +offloading in ``Clang`` so that we can treat the C library for the GPU as a |
| 32 | +standard static library. |
| 33 | + |
| 34 | +A valuable use for providing C library features on the GPU is for testing. For |
| 35 | +this reason we build `tests on the GPU <libc_gpu_testing>`_ that can run a unit |
| 36 | +test as if it were being run on the CPU. This also helps users port applications |
| 37 | +that traditionally were run on the CPU. With this support, we can expand test |
| 38 | +coverage for the GPU backend to the existing LLVM C library tests. |
| 39 | + |
| 40 | +.. _libc_gpu_limitations: |
| 41 | + |
| 42 | +Limitations |
| 43 | +=========== |
| 44 | + |
| 45 | +We only implement a subset of the standard C library. The GPU does not |
| 46 | +currently support thread local variables in all cases, so variables like |
| 47 | +``errno`` are not provided. Furthermore, the GPU under the OpenCL execution |
| 48 | +model cannot safely provide a mutex interface. This means that features like |
| 49 | +file buffering are not implemented on the GPU. We can also not easily provide |
| 50 | +threading features on the GPU due to the execution model so these will be |
| 51 | +ignored, as will features like ``locale`` or ``time``. |
0 commit comments