This repository contains the code for spar-rust
, which was the subject of my (Leonardo Gibrowski Faé) Master Thesis.
spar-rust
uses procedural macros to transform sequential Rust function to parallel functions. It was inspired by SPar, which is a C++ annotation-based Domain-Specific Language for expressing stream parallelism.
We can generate parallel code that executes in multiple environments:
- multi-threaded (using the standard library's thread implementation)
- mpi (using rsmpi)
- GPU with OpenCL
Note the gpu code generation is very simplified. Read my thesis for the full details.
This is the result of many years of work. The most complete and up-to-date piece that talks exhaustively about is my Master Thesis (you can export the bibtex in the page).
Other than that, we've had many publications. Note that older publications may not reflect the current state of the implementation:
- DOI Leonardo G. Faé, Renato B. Hoffman, and Dalvan Griebler. 2024. An internal domain-specific language for expressing linear pipelines: a proof-of-concept with MPI in Rust. In Proceedings of the XXVIII Brazilian Symposium on Programming Languages (SBLP '24).
- DOI Leonardo G. Faé, Renato B. Hoffman, and Dalvan Griebler. 2023. Source-to-Source Code Transformation on Rust for High-Level Stream Parallelism. In Proceedings of the XXVII Brazilian Symposium on Programming Languages (SBLP '23).