FP32 CUDA-Core implementations of SpMM (node aggregation) and SDDMM (edge messaging), with GPU-assisted sparse preprocessing.
Requires Linux, CUDA Toolkit 11.8+, CMake 3.18+, and a C++17 compiler with OpenMP.
Use CUDA architecture 80 for A800 or 90 for H100.
cmake -S . -B build \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_CUDA_COMPILER="$(command -v nvcc)" \
-DCMAKE_CUDA_ARCHITECTURES=80
cmake --build build --parallelSee dataset/README.md for the download link.
Both executables take the same arguments:
powersparse_{spmm,sddmm} MATRIX.mtx N DEVICE CHECK REPEATS
build/bin/powersparse_spmm dataset/amazon-products.mtx 32 0 0 100
build/bin/powersparse_sddmm dataset/amazon-products.mtx 128 0 0 100DEVICE is the CUDA-visible GPU index;
CHECK=1 enables preprocessing and CPU reference checks (0 skips them);
REPEATS is the number of timed calls.
Output is CSV, including preprocessing time, average operator time (ms), and
GFLOPS. Timing uses 30 warmups and excludes reading, preprocessing, and
verification. Use --header to print the CSV column names.
To run all .mtx files in a directory:
bash scripts/run_benchmarks.sh build dataset spmm 0 results/spmm.csv
bash scripts/run_benchmarks.sh build dataset sddmm 0 results/sddmm.csvThe batch defaults are N=32,128, 100 repeats, and CHECK=0. Set DATASET_LIST to a
file listing paths relative to the dataset directory to select specific inputs.
This project is licensed under the Creative Commons Attribution 4.0 International (CC BY 4.0) License.