# Spindle Spindle is a Rust crate simplifies GPGPU multithreaded execution of embarrassingly parallel and data parallel tasks. ```rust #[spindle::map] fn _i32_to_f64(x: i32) -> f64 { x as f64 } fn main() -> Result<(), spindle::error::Error> { spindle::spin!(U, i32, f64); let nums: Vec = (0..10).collect(); let spindle: spindle::DevSpindle = nums.try_into()?; let spindle: spindle::DevSpindle = unsafe { spindle.i32_to_f64() }?; let spindle: spindle::HostSpindle = spindle.try_to_host()?; for (i, x) in spindle.iter().enumerate() { assert_eq!(*x, i as f64); } Ok(()) } ``` ## Contributing Welcome, idea-haver! - Do you have a feature or syntax suggestion? - Want to share ideas about bit fiddly implmentations? - Did you know how to squash a bug? Please skim the [Collaborator Guidelines](https://github.com/ariasanovsky/spindle/discussions/13) and say hello! Thank you for your contributions! ## License Dual-licensed to be compatible with the Rust project. Licensed under the [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0) or the [MIT license](http://opensource.org/licenses/MIT), at your option. This file may not be copied, modified, or distributed except according to those terms. ## Acknowledgments (collaborators, feel free to expand) Our work is inspired by so many great crates! This includes, but is not limited to, - [`rayon`](https://crates.io/crates/rayon), our inspiration in reliable fearless concurrency - [`dfdx`](https://crates.io/crates/dfdx), for ergonomic machine learning - [`faer`](https://crates.io/crates/faer), the uncompromisingly brilliant linear algebra backend - [`cudarc`](https://crates.io/crates/cudarc), the smart-pointered, typesafe wrapper for `CUDA` ### [Alex](https://github.com/ariasanovsky/) is personally grateful for - the [2023 Scientific Computing in Rust](https://scientificcomputing.rs/) conference - the joy I felt when my first GPGPU project hit ~ `1_000_000_000_000_000` iterations in a single day - the Rust community's committment to: - welcoming everyone, - tackling developer ergonomics, - teaching us correctness and safety, and - giving us tools to push the language further.