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 and NVIDIA CUDA cuSPARSELt v0.4 as backends.
Note
The published hipSPARSELt documentation is available at hipSPARSELt 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.
Download pre-built packages either from the ROCm package servers or by clicking the GitHub releases tab and manually downloading, which could be newer. Release notes are available for each release on the releases tab.
sudo apt update && sudo apt install hipsparselt
- Git
- CMake 3.16.8 or later
- python3.7 or later
- python3.7-venv or later
- AMD [ROCm] 6.0 platform or later
- hipSPARSE (for the header file)
The root of this repository has a helper bash script install.sh
to build and
install hipSPARSELt on Ubuntu with a single command. It does not take a lot of
options and hard-codes configuration that can be specified through invoking
CMake directly, but it's a great way to get started quickly and can serve as an
example of how to build/install. A few commands in the script need sudo access,
so it may prompt you for a password.
# Run install.sh script
# 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
./install.sh -dc
- 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
- 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 uppoer 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 genroator, used to provide the appropriate solution for the specific problem.
- Add support for Mixed-precision computation
- Mixed-precision computation support:
- AMD sparse MFMA matrix core support
- CUDA
- Support cusparseLt v0.4
Run the steps below to build documentation locally.
cd docs
pip3 install -r sphinx/requirements.txt
python3 -m sphinx -T -E -b html -d _build/doctrees -D language=en . _build/html
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
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.
To run unit tests, hipSPARSELt has to be built with option -DBUILD_CLIENTS_TESTS=ON (or using ./install.sh -c)
# Go to hipSPARSELt build directory
cd hipSPARSELt; cd build/release
# Run all tests
./clients/staging/hipsparselt-test
To run benchmarks, hipSPARSELt has to be built with option -DBUILD_CLIENTS_BENCHMARKS=ON (or using ./install.sh -c).
# Go to hipSPARSELt build directory
cd hipSPARSELt/build/release
# Run benchmark, e.g.
./clients/staging/hipsparselt-bench -f spmm -i 200 -m 256 -n 256 -k 256