CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
298 lines
11 KiB
Markdown
298 lines
11 KiB
Markdown
# hipSPARSELt
|
|
|
|
hipSPARSELt is a SPARSE marshalling library, with multiple supported backends.
|
|
It sits between the application and a 'worker' SPARSE library, marshalling
|
|
inputs into the backend library and marshalling results back to the
|
|
application. hipSPARSELt exports an interface that does not require the client
|
|
to change, regardless of the chosen backend. Currently, hipSPARSELt supports
|
|
[rocSPARSELt](library/src/hcc_detail/rocsparselt) and [NVIDIA CUDA cuSPARSELt v0.6.3](https://docs.nvidia.com/cuda/cusparselt)
|
|
as backends.
|
|
|
|
> [!NOTE]
|
|
> The published hipSPARSELt documentation is available at [hipSPARSELt](https://rocm.docs.amd.com/projects/hipSPARSELt/en/latest/index.html) in an organized, easy-to-read format, with search and a table of contents. The documentation source files reside in the hipsparselt/docs folder of this repository. As with all ROCm projects, the documentation is open source. For more information, see [Contribute to ROCm documentation](https://rocm.docs.amd.com/en/latest/contribute/contributing.html).
|
|
|
|
## Installing pre-built packages
|
|
|
|
Download pre-built packages either from the
|
|
[ROCm package servers](https://rocm.docs.amd.com/projects/hipSPARSELt/en/latest/tutorials/install/linux.html#building-hipsparselt-from-source)
|
|
or by clicking the GitHub releases tab and manually downloading. Release notes are available for each release on the releases tab.
|
|
|
|
* `sudo apt update && sudo apt install hipsparselt`
|
|
|
|
## Getting started
|
|
|
|
> [!NOTE]
|
|
> The steps in this section are intended to help users get started building hipsparselt. However, it is recommended to consult the
|
|
> [hipSPARSELt installation documentation](https://rocm.docs.amd.com/projects/hipSPARSELt/en/latest/tutorials/install/linux.html)
|
|
> for complete setup and installation instructions.
|
|
|
|
### Setup
|
|
|
|
The simplest option is to clone all of [rocm-libraries](https://github.com/ROCm/rocm-libraries) and navigate to the hipsparselt project:
|
|
|
|
```bash
|
|
# Clone rocm-libraries
|
|
git clone https://github.com/ROCm/rocm-libraries.git
|
|
# Go to hipSPARSELt directory
|
|
cd rocm-libraries/projects/hipsparselt
|
|
```
|
|
|
|
For a shorter download process, use sparse checkout to only clone the hipsparselt project:
|
|
|
|
```bash
|
|
git clone --no-checkout --filter=blob:none https://github.com/ROCm/rocm-libraries.git
|
|
cd rocm-libraries
|
|
git sparse-checkout init --cone
|
|
git sparse-checkout set projects/hipsparselt
|
|
git checkout develop # or the branch you are starting from
|
|
```
|
|
|
|
### Configure and build
|
|
|
|
hipSPARSELt provides modern CMake support and relies on native CMake functionality, with the exception of
|
|
some project specific options. As such, users are advised to consult the CMake documentation for
|
|
general usage questions. For details on all configuration options see the [Options](#options) section.
|
|
|
|
This section provides usage examples on how to configure, build and install hipSPARSELt using various supported methods.
|
|
We assume the user has a ROCm installation (conventionally installed to `/opt/rocm`), Python 3.8 or newer,
|
|
and a CMake version greater than or equal to the `cmake_minimum_required` defined in [CMakeLists.txt](./CMakeLists.txt#L4).
|
|
|
|
### Using CMake presets
|
|
|
|
> [!NOTE]
|
|
> When using presets, assumptions are made about search paths, built-in CMake variables, and output directories.
|
|
> Consult [CMakePresets.json](./CMakePresets.json) to understand which variables are set,
|
|
> or refer to [Using CMake variables directly](#using-cmake-variables-directly) for a fully custom configuration.
|
|
|
|
**Release build**
|
|
|
|
```bash
|
|
# show available presets
|
|
cmake --list-presets
|
|
# configure
|
|
cmake --preset default-release
|
|
# build
|
|
cmake --build _build --parallel
|
|
# install
|
|
cmake --install _build
|
|
```
|
|
|
|
**Debug build for development**
|
|
|
|
```bash
|
|
cmake --preset debug
|
|
cmake --build _build
|
|
```
|
|
|
|
**Build with coverage**
|
|
|
|
```bash
|
|
cmake --preset coverage
|
|
cmake --build _build --target coverage
|
|
```
|
|
|
|
### Using CMake variables directly
|
|
|
|
**Full build for gfx942**
|
|
|
|
```bash
|
|
# configure
|
|
cmake -B build -S . \
|
|
-D CMAKE_BUILD_TYPE=Release \
|
|
-D CMAKE_CXX_COMPILER=/opt/rocm/bin/amdclang++ \
|
|
-D CMAKE_C_COMPILER=/opt/rocm/bin/amdclang \
|
|
-D CMAKE_PREFIX_PATH=/opt/rocm \
|
|
-D GPU_TARGETS=gfx942
|
|
# build
|
|
cmake --build build --parallel
|
|
```
|
|
|
|
> [!TIP]
|
|
> **For Developers**
|
|
>
|
|
> View debugging info by adding `--log-level=VERBOSE` to the configure command.
|
|
|
|
### Using the installation script
|
|
|
|
Refer to the available build options using `./install.sh --help`
|
|
|
|
```bash
|
|
# Command line options:
|
|
# -h|--help - prints help message
|
|
# -i|--install - install after build
|
|
# -d|--dependencies - install build dependencies
|
|
# -c|--clients - build library clients too (combines with -i & -d)
|
|
# -g|--debug - build with debug flag
|
|
# -k|--relwithdebinfo - build with RelWithDebInfo
|
|
|
|
# build and install all libraries and clients, and fetch dependencies
|
|
./install.sh -idc
|
|
# build for gfx942 only without installation
|
|
./install.sh -c -a gfx942
|
|
```
|
|
|
|
### Options
|
|
|
|
> [!NOTE]
|
|
> When using the install script these variables are either hardcoded or set via its command line options.
|
|
|
|
*CMake options*:
|
|
|
|
* `CMAKE_BUILD_TYPE`: Any of Release, Debug, RelWithDebInfo, MinSizeRel
|
|
* `CMAKE_INSTALL_PREFIX`: Base installation directory (defaults to `/opt/rocm` on Linux, `C:/hipSDK` on Windows)
|
|
* `CMAKE_PREFIX_PATH`: Find package search path (consider setting to `$ROCM_PATH`)
|
|
* `CMAKE_EXPORT_COMPILE_COMMANDS`: Export compile_commands.json for clang tooling support (default: `ON`)
|
|
|
|
*Build control options*:
|
|
|
|
* `GPU_TARGETS`: AMD GFX targets to cross-compile for (default: `all`)
|
|
* `HIPSPARSELT_BUILD_SHARED_LIBS`: Build the hipSPARSELt shared or static library (default: `ON`)
|
|
* `HIPSPARSELT_BUILD_TESTING`: Build test client (default: `ON`)
|
|
* `HIPSPARSELT_BUILD_COVERAGE`: Build tests with coverage support (default: `OFF`)
|
|
|
|
*Backend options*:
|
|
|
|
* `HIPSPARSELT_ENABLE_HIP`: Build hipSPARSELt with HIP backend (default: `ON`)
|
|
* `HIPSPARSELT_ENABLE_CUDA`: Build hipSPARSELt with CUDA backend (default: `OFF`)
|
|
|
|
*Client options*:
|
|
|
|
* `HIPSPARSELT_ENABLE_CLIENT`: Build hipSPARSELt clients (default: `ON`)
|
|
* `HIPSPARSELT_ENABLE_BENCHMARKS`: Build benchmark client (default: `ON`)
|
|
* `HIPSPARSELT_ENABLE_SAMPLES`: Build client samples (default: `ON`)
|
|
* `HIPSPARSELT_ENABLE_FORTRAN`: Build Fortran clients (default: `OFF`)
|
|
* `HIPSPARSELT_ENABLE_BLIS`: Enable BLIS support for reference implementations (default: `ON`)
|
|
|
|
*Advanced options*:
|
|
|
|
* `HIPSPARSELT_ENABLE_MARKER`: Enable rocTracer marker support (default: `OFF`)
|
|
* `HIPSPARSELT_ENABLE_ASAN`: Build with address sanitizer enabled (default: `OFF`)
|
|
* `HIPSPARSELT_HIPBLASLT_PATH`: Path to hipblaslt directory (default: `${CMAKE_CURRENT_SOURCE_DIR}/../../hipblaslt/next-cmake`)
|
|
* `HIPSPARSELT_COVERAGE_GTEST_FILTER`: GTest filter for coverage tests (default: empty)
|
|
* `TENSILE_ENABLE_MARKER`: Enables or disables the Tensile marker functionality (default: `OFF`)
|
|
|
|
## CMake Targets
|
|
|
|
*Libraries*:
|
|
|
|
* `roc::hipsparselt` - Main library target
|
|
|
|
*Executables*:
|
|
|
|
* `hipsparselt-test` - Test executable (when HIPSPARSELT_BUILD_TESTING=ON)
|
|
* `hipsparselt-bench` - Benchmark executable (when HIPSPARSELT_ENABLE_BENCHMARKS=ON)
|
|
* `example_spmm_strided_batched` - Sample executable (when HIPSPARSELT_ENABLE_SAMPLES=ON)
|
|
* `example_prune_strip` - Sample executable (when HIPSPARSELT_ENABLE_SAMPLES=ON)
|
|
* `example_compress` - Sample executable (when HIPSPARSELT_ENABLE_SAMPLES=ON)
|
|
* `coverage` - Code coverage target (when HIPSPARSELT_BUILD_COVERAGE=ON)
|
|
|
|
## Functions supported
|
|
|
|
* ROCm
|
|
* AMD sparse MFMA matrix core support
|
|
* Mixed-precision computation support:
|
|
* FP16 input/output, FP32 Matrix Core accumulate
|
|
* BFLOAT16 input/output, FP32 Matrix Core accumulate
|
|
* INT8 input/output, INT32 Matrix Core accumulate
|
|
* INT8 input, FP16 output, INT32 Matrix Core accumulate
|
|
* INT8 input, INT32 output, INT32 Matrix Core accumulate
|
|
* FP8(E4M3) input, FP32 output, FP32 Matrix Core accumulate (LLVM target: gfx950)
|
|
* BF8(E5M2) input, FP32 output, FP32 Matrix Core accumulate (LLVM target: gfx950)
|
|
* Matrix pruning and compression functionalities
|
|
* Auto-tuning functionality (see hipsparseLtMatmulSearch())
|
|
* Batched Sparse Gemm support:
|
|
* Single sparse matrix / Multiple dense matrices (Broadcast)
|
|
* Multiple sparse and dense matrices
|
|
* Batched bias vector
|
|
* Activation function fuse in spmm kernel support:
|
|
* ReLU
|
|
* ClippedReLU (ReLU with upper bound and threshold setting)
|
|
* GeLU
|
|
* GeLU Scaling (Implied enable GeLU)
|
|
* Abs
|
|
* LeakyReLU
|
|
* Sigmoid
|
|
* Tanh
|
|
* On-going feature development
|
|
* Add support for Mixed-precision computation
|
|
* FP8 input/output, FP32 Matrix Core accumulate
|
|
* BF8 input/output, FP32 Matrix Core accumulate
|
|
* Add kernel selection and generator, used to provide the appropriate
|
|
solution for the specific problem.
|
|
* CUDA
|
|
* Support cusparseLt v0.6.3
|
|
|
|
## Documentation
|
|
|
|
Full documentation for hipSPARSELt is available at
|
|
[rocm.docs.amd.com/projects/hipSPARSELt](https://rocm.docs.amd.com/projects/hipSPARSELt/en/latest/index.html).
|
|
|
|
Run the steps below to build documentation locally.
|
|
|
|
```bash
|
|
cd docs
|
|
|
|
pip3 install -r sphinx/requirements.txt
|
|
|
|
python3 -m sphinx -T -E -b html -d _build/doctrees -D language=en . _build/html
|
|
```
|
|
|
|
Alternatively, build with CMake:
|
|
|
|
```bash
|
|
cmake -DBUILD_DOCS=ON ...
|
|
```
|
|
|
|
## hipSPARSELt interface examples
|
|
|
|
The hipSPARSELt interface is compatible with cuSPARSELt APIs. Porting a CUDA
|
|
application which originally calls the cuSPARSELt API to an application calling
|
|
hipSPARSELt API should be relatively straightforward. For example, the
|
|
hipSPARSELt matmul interface is
|
|
|
|
### matmul API
|
|
|
|
```c
|
|
hipsparseStatus_t hipsparseLtMatmul(const hipsparseLtHandle_t* handle,
|
|
const hipsparseLtMatmulPlan_t* plan,
|
|
const void* alpha,
|
|
const void* d_A,
|
|
const void* d_B,
|
|
const void* beta,
|
|
const void* d_C,
|
|
void* d_D,
|
|
void* workspace,
|
|
hipStream_t* streams,
|
|
int32_t numStreams);
|
|
|
|
```
|
|
|
|
hipSPARSELt assumes matrix A, B, C, D and workspace are allocated in GPU memory
|
|
space filled with data. Users are responsible for copying data from/to the host
|
|
and device memory.
|
|
|
|
## Unit tests
|
|
|
|
All unit tests are located in the build directory. To build these tests, you must build
|
|
hipSPARSELt with `--clients` or `-c` flag.
|
|
|
|
To run unit tests:
|
|
|
|
```bash
|
|
# Go to hipSPARSELt build directory
|
|
cd build/release
|
|
|
|
# Run all tests
|
|
./clients/staging/hipsparselt-test
|
|
```
|
|
|
|
To run benchmarks:
|
|
|
|
```bash
|
|
# Go to hipSPARSELt build directory
|
|
cd build/release
|
|
|
|
# Run benchmark, e.g.
|
|
./clients/staging/hipsparselt-bench -f spmm -i 200 -m 256 -n 256 -k 256
|
|
```
|