4 releases (2 stable)
new 1.5.2 |
|
---|---|
1.5.1 | Nov 1, 2024 |
#6 in #quick
175 downloads per month
120KB
803 lines
OpenSHMEM-rs
Rust bindings for the OpenSHMEM 1.5 (and soon 1.6) communication API.
Quick start:
let ctx = ShmemCtx::init()?;
let my_pe = ctx.my_pe().raw();
let npes = ctx.n_pes();
println!("Hello from PE {my_pe}!");
Examples
See ./examples/ for example programs.
Building
This library depends on openshmem-sys
. Building the sys crate
requires the environment variable SHMEM_INSTALL_DIR
to point to
a directory containing your OpenSHMEM installation. Your
SHMEM_INSTALL_DIR
should contain a lib/
and a
include/
. For example, this is the output of tree
on the
SHMEM_INSTALL_DIR
for Sandia OpenSHMEM.
├── ...
├── include/
│ ├── mpp/
│ ├── shmem-def.h
│ ├── shmem.fh
│ ├── shmem.h
│ ├── shmemx-def.h
│ ├── shmemx.fh
│ └── shmemx.h
├── lib/
│ ├── libsma.0.dylib
│ ├── libsma.a
│ └── ...
└── ...
We currently test with Sandia OpenSHMEM as the underlying OpenSHMEM implementation.
Developing
If you want rust-analyzer to function correctly, you'll need to pass
SHMEM_INSTALL_DIR
to rust-analyzer.
VSCode
Add this to your user settings JSON.
...
"rust-analyzer.server.extraEnv": { "SHMEM_INSTALL_DIR": "~/my-shmem-install-dir" },
...
Emacs (lsp-mode)
Add this to your configuration.
(setq lsp-rust-analyzer-cargo-extra-env ["SHMEM_INSTALL_DIR", "~/my-shmem-install-dir"])
Prior Work
Rebecca Hassett and Tony Curtis at Stony Brook University created the RustySHMEM project, which this library draws heavy inspiration from.
Dependencies
~0.4–2.7MB
~54K SLoC