#api #wrapper #open-shmem #communication #quick

nightly bin+lib openshmem-rs

Wrappers for the OpenSHMEM API

6 releases (2 stable)

1.5.3-1 Nov 13, 2024
1.5.2 Nov 4, 2024
1.5.2-3 Nov 5, 2024
1.5.1 Nov 1, 2024

#309 in Concurrency

Download history 194/week @ 2024-10-28 389/week @ 2024-11-04 105/week @ 2024-11-11

688 downloads per month

MIT/Apache

76KB
1K SLoC

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