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
191 lines
6.8 KiB
Markdown
191 lines
6.8 KiB
Markdown
# hipSPARSE
|
|
|
|
hipSPARSE is a SPARSE marshalling library with multiple supported backends. It sits between your
|
|
application and a 'worker' SPARSE library, where it marshals inputs to the backend library and marshals
|
|
results to your application. hipSPARSE exports an interface that doesn't require the client to change,
|
|
regardless of the chosen backend. Currently, hipSPARSE supports
|
|
[rocSPARSE](https://github.com/ROCm/rocm-libraries/tree/develop/projects/rocsparse) and
|
|
[NVIDIA CUDA cuSPARSE](https://developer.nvidia.com/cusparse) backends.
|
|
|
|
## Documentation
|
|
|
|
> [!NOTE]
|
|
> The published hipSPARSE documentation is available at [https://rocm.docs.amd.com/projects/hipSPARSE/en/latest/](https://rocm.docs.amd.com/projects/hipSPARSE/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 `rocm-libraries/projects/hipsparse` 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).
|
|
|
|
To build our documentation locally, run the following code:
|
|
|
|
```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 -DHIPSPARSE_BUILD_DOCS=ON ...
|
|
```
|
|
|
|
## Installing pre-built packages
|
|
|
|
Download pre-built packages from
|
|
[ROCm's package servers](https://rocm.docs.amd.com/en/latest/deploy/linux/index.html) using the
|
|
following code:
|
|
|
|
```bash
|
|
`sudo apt update && sudo apt install hipsparse`
|
|
```
|
|
|
|
## Build hipSPARSE
|
|
|
|
hipSPARSE 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.
|
|
|
|
We assume the user has a ROCm installation (conventionally installed to `/opt/rocm`), Python 3.9 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
|
|
```
|
|
|
|
**Debug build for development**
|
|
|
|
```bash
|
|
cmake --preset debug
|
|
cmake --build build/debug
|
|
```
|
|
|
|
**Build with coverage**
|
|
|
|
```bash
|
|
cmake --preset coverage
|
|
cmake --build build/coverage --target coverage
|
|
```
|
|
|
|
### Using CMake variables directly {#using-cmake-variables-directly}
|
|
|
|
**Full build**
|
|
|
|
```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
|
|
# build
|
|
cmake --build build --parallel
|
|
```
|
|
|
|
### Using the installation script
|
|
|
|
The `install.sh` script builds and installs hipSPARSE on Ubuntu with a single command.
|
|
|
|
```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 library with clients, and fetch dependencies
|
|
./install.sh -idc
|
|
```
|
|
|
|
## Options {#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*:
|
|
|
|
* `HIPSPARSE_BUILD_SHARED_LIBS`: Build hipSPARSE as a shared library (default: `ON`)
|
|
* `HIPSPARSE_BUILD_TESTING`: Build test client (default: `OFF`)
|
|
* `HIPSPARSE_ENABLE_COVERAGE`: Build with code coverage enabled (default: `OFF`)
|
|
* `HIPSPARSE_BUILD_DOCS`: Build documentation (default: `OFF`)
|
|
|
|
*Backend options*:
|
|
|
|
* `HIPSPARSE_ENABLE_HIP`: Build hipSPARSE with HIP backend (default: `ON`)
|
|
* `HIPSPARSE_ENABLE_CUDA`: Build hipSPARSE with CUDA backend (default: `OFF`)
|
|
|
|
*Client options*:
|
|
|
|
* `HIPSPARSE_ENABLE_CLIENT`: Build hipSPARSE clients (default: `ON`)
|
|
* `HIPSPARSE_ENABLE_BENCHMARKS`: Build benchmark client (default: `ON`)
|
|
* `HIPSPARSE_ENABLE_SAMPLES`: Build sample programs (default: `ON`)
|
|
* `HIPSPARSE_ENABLE_FORTRAN`: Enable Fortran client support (default: `ON` on Linux, `OFF` on Windows)
|
|
* `HIPSPARSE_ENABLE_OPENMP`: Enable OpenMP support in clients (default: `ON`)
|
|
|
|
*Advanced options*:
|
|
|
|
* `HIPSPARSE_ENABLE_ASAN`: Build with address sanitizer enabled (default: `OFF`)
|
|
* `HIPSPARSE_ENABLE_HOST`: Build hipSPARSE library (default: `ON`)
|
|
|
|
## CMake Targets
|
|
|
|
*Libraries*:
|
|
|
|
* `roc::hipsparse` - Main library target
|
|
|
|
*Executables*:
|
|
|
|
* `hipsparse-test` - Test executable (when `HIPSPARSE_BUILD_TESTING=ON`)
|
|
* `hipsparse-bench` - Benchmark executable (when `HIPSPARSE_ENABLE_BENCHMARKS=ON`)
|
|
* `example_*` - Sample executables (when `HIPSPARSE_ENABLE_SAMPLES=ON`)
|
|
* `coverage` - Code coverage target (when `HIPSPARSE_ENABLE_COVERAGE=ON`)
|
|
|
|
## Supported functions
|
|
|
|
See the hipSPARSE documentation for a list of
|
|
[exported functions](https://rocm.docs.amd.com/projects/hipSPARSE/en/latest/reference/api.html).
|
|
|
|
## Interface examples
|
|
|
|
The hipSPARSE interface is compatible with rocSPARSE and CUDA cuSPARSE-v2 APIs. Porting a CUDA
|
|
application that calls the CUDA cuSPARSE API to an application that calls the hipSPARSE API is relatively
|
|
straightforward. For example, the hipSPARSE SCSRMV interface is:
|
|
|
|
### CSRMV API
|
|
|
|
```c
|
|
hipsparseStatus_t
|
|
hipsparseScsrmv(hipsparseHandle_t handle,
|
|
hipsparseOperation_t transA,
|
|
int m, int n, int nnz, const float *alpha,
|
|
const hipsparseMatDescr_t descrA,
|
|
const float *csrValA,
|
|
const int *csrRowPtrA, const int *csrColIndA,
|
|
const float *x, const float *beta,
|
|
float *y);
|
|
```
|
|
|
|
hipSPARSE assumes matrix A and vectors x, y are allocated in GPU memory space filled with data. Users
|
|
are responsible for copying data to and from the host and device memory.
|