[RFC] Add libompx to LLVM

Libompx is a portable algorithm library for OpenMP offload.
The question is if the library should be placed inside the LLVM repository, or be kept in a separate repository?

Overview
Currently, using a vendor library from OpenMP requires code specialized for each targeted GPU.
It would improve the OpenMP offload programming experience to use common algorithms and functions from a portable, cross-platform library.

Existing code is here: GitHub - markdewing/libompx
Algorithm interfaces currently exist for sort, sort_by_key, and inclusive_scan. The implementations are provided through Thrust, rocThrust, and oneDPL.

A second request is for concrete use-cases. If you a have an OpenMP offload code that uses a common external library and would benefit from a portable interface, please contact us.

Discussion
Reasons for placing it in the LLVM repository:

  1. Easier to install and make available to users.
  2. Easier to implement testing and CI.
  3. More visibility.
  4. An established process for contribution.

Reasons for keeping it in a separate repository:

  1. It will necessarily have external dependencies because it interfaces with other libraries (Thrust, vendor BLAS, etc.).
  2. Support for non-LLVM (or non-mainline LLVM) compilers such as Intel (icpx) and NVIDIA HPC SDK compilers is desirable.
    Both of these will complicate the build and testing environment. Certainly it means building libompx would be optional and off by default.

If it were to be included in LLVM there are some further questions:

  • Should it keep the libompx name, or is there a better name?
  • Where should it go (openmp/libompx?)