Skip to content

Rust bindings for AMD ROCm HIP runtime used by CubeCL

License

Apache-2.0, MIT licenses found

Licenses found

Apache-2.0
LICENSE-APACHE
MIT
LICENSE-MIT
Notifications You must be signed in to change notification settings

tracel-ai/cubecl-hip

Repository files navigation

CubeCL Rust bindings for ROCm HIP

Discord Current Crates.io Version Minimum Supported Rust Version Test Status license



This repository contains Rust bindings for AMD ROCm HIP runtime libraries used by CubeCL.

⚠️ Notes

These bindings are unsafe as they are just the raw bindings generated by bindgen with no improvements.

Limitations

  • Works only on Linux
  • Bindings generated for AMD GPUs only

Prerequisites

Install ROCm in the default directory under /opt following the ROCm documentation:

Usage

Add the crate cubecl-hip-sys to the Cargo.toml of your project and enable the feature corresponding to the version of ROCm you have installed. If you no feature corresponds to your ROCm installation then read the next section to learn how to generate and submit new bindings for your version.

Next you need to point out where you installed ROCm so that rustc can link to your ROCM libraries. To do so set the variable ROCM_PATH, or HIP_PATH or the more specific CUBECL_ROCM_PATH to its installation base directory, it is often /opt/rocm.

Here is the table of currently available bindings:

Version Feature Crates
6.2.2 rocm_622 cubecl-hip-sys

Here is a table of the libraries covered by each crate:

Crate ROCm libraries
cubecl-hip-sys hiprtc, amdhip64

Running tests

To run tests you need to first meet the expectations for both Prerequisites and Usage sections.

Then execute the following xtask command and provide the feature that corresponds to your ROCm installation. For instance for the version 6.2.2:

cargo xtask test --features rocm_622

Generate bindings for a given version of ROCm

  1. To generate the bindings you need to first meet the expectations for both Prerequisites and Usage sections.

  2. Generate the bindings using the dedicated xtask command bindgen. For instance, to generate the bindings for the crate cubecl-hip-sys and the ROCm version 6.2.2:

cargo xtask bindgen -c cubecl-hip-sys -v 6.2.2
  1. Declare a new feature in the Cargo.toml of the corresponding crate cubecl-hip-sys with the format rocm_<version> where <version> is the ROCm version without any separator. For instance for the version 6.2.2:
[features]
rocm_622 = []
  1. Add the generated bindings module to the file crates/cubecl-hip-sys/src/bindings/mod.rs conditionally to the new feature you just declared as well as the re-exports:
#[cfg(feature = "rocm_622")]
mod bindings_622;
#[cfg(feature = "rocm_622")]
pub use bindings_622::*;
  1. Run the tests as explain in the previous section. Use the new feature you just created. Currently there is no test selection mechanism in place given a ROCm version. If there are errors you can use conditional attributes for now.

  2. Open a pull request with the modifications, do not forget to add the new generated bindings file in the crates/cubecl-hip-sys/src/bindings/ directory.