Implementation of SYCL and C++ standard parallelism for CPUs and GPUs from all vendors: The independent, community-driven compiler for C++-based heterogeneous programming models. Lets applications adapt themselves to all the hardware in the system - even at runtime!
BSD-2-CLAUSE License
(Note: This project is currently in progress of changing its name to AdaptiveCpp due to external legal pressure. Documentation and code may still use the older name hipSYCL / Open SYCL)
AdaptiveCpp is the independent, community-driven modern platform for C++-based heterogeneous programming models targeting CPUs and GPUs from all major vendors. AdaptiveCpp lets applications adapt themselves to all the hardware found in the system. This includes use cases where a single binary needs to be able to target all supported hardware, or utilize hardware from different vendors simultaneously.
It currently supports the following programming models:
AdaptiveCpp supports CPUs (including x86, arm and other LLVM-supported architectures) as well as GPUs from Intel, NVIDIA, and AMD. This includes the ability to generate a single binary that can offload to all supported devices.
AdaptiveCpp's compilation flows include
A full list of its compilation capabilities can be found here.
Because a program compiled with AdaptiveCpp appears just like any other program written in vendor-supported programming models (like CUDA or HIP) to vendor-provided software, vendor tools such as profilers or debuggers also work with AdaptiveCpp.
An illustration on how the project fits into the SYCL ecosystem can be found (here).
See the AdaptiveCpp performance guide.
In order to compile software with AdaptiveCpp, use acpp
. acpp
can be used like a regular compiler, i.e. you can use acpp -o test test.cpp
to compile your application called test.cpp
with AdaptiveCpp.
acpp
accepts both command line arguments and environment variables to configure its behavior (e.g., to select the target to compile for). See acpp --help
for a comprehensive list of options.
For details and instructions on using AdaptiveCpp in CMake projects, please see the documentation on using AdaptiveCpp.
Development of AdaptiveCpp is currently primarily led by Heidelberg University, with contributions from a growing community. We see AdaptiveCpp as a community-driven project, in contrast to the many vendor-driven heterogeneous compiler efforts. AdaptiveCpp not only serves as a research platform, but is also a solution used in production on machines of all scales, including some of the most powerful supercomputers.
Join us on Discord! Alternatively, open a discussion or issue in this repository.
We encourage contributions and are looking forward to your pull request! Please have a look at CONTRIBUTING.md. If you need any guidance, please just open an issue and we will get back to you shortly.
If your institution or organization is considering to support the AdaptiveCpp development in some official capacity, we are always happy to discuss collaborations and to broaden the developer community. Please do reach out :-)
If you are a student at Heidelberg University and wish to work on AdaptiveCpp, please get in touch with us. There are various options possible and we are happy to include you in the project :-)
AdaptiveCpp is a production platform for heterogeneous computing, but also a research project. As such, if you use AdaptiveCpp in your research, we kindly request that you cite one of the following publications, depending on your focus:
(The latter is a talk and available online. Note that some of the content in this talk is outdated by now)
We gratefully acknowledge contributions from the community.