Comments (3)
Yeah, when I started on rsmpi I structured it in a way that is more geared toward using it from a rust application and having rsmpi be the only interface through which MPI is used. I later realized that writing a rust library which can then be used from HPC applications written in the more traditional languages is also a likely scenario.
However, there will have to be some restructuring to get rsmpi into shape for that use case. This issue touches on one aspect of it.
The Universe
type will have to take a different role, maybe the initialized environment that it stands for will become fully implicit and not have value representation just as it is in the official MPI bindings. There could still be something like a FinalizeGuard
in cases where the user wants something that calls MPI_Finalize
on drop
.
Types like ...Communicator
will need a from_raw
constructor which check certain attributes of the underlying objects (intra-communicator vs. inter-communicator or persistent vs. non-persistent request).
Then of course objects like communicators that are passed in from another language could have different error handlers set. Right now, rsmpi assumes that communication operations crash on error, but that is not necessarily the case, so, in general, everything has to return Result
just like (almost) everything returns int
in the C bindings.
Issue #12 is also somewhat related to this.
If you don't mind, I will hijack this issue and make the title reflect the somewhat broader scope. It could then become a tracking issue for a few smaller issues that cover the different areas that need to be touched.
from rsmpi.
Ah, I hadn't considered all of the potential issues here. If you do find a way to add Send + Sync traits to MPI objects statically depending on while MPI threading setting used, you may need an unsafe
mechanism for choosing at runtime whether Universe is safe to use in a multi-threaded environment. The caller would be expected to know how MPI was initialized in their context.
from rsmpi.
I'm also interested in this mode of use. I'll note that a best practice for MPI libraries is for object constructors to all take an MPI_Comm
. Implicitly using MPI_COMM_WORLD
is generally discouraged. To simplify user code, PETSc has a PetscInitialize
that processes run-time options and sets up a profiling session. If MPI has not been initialized, PETSc initializes it and takes responsibility for MPI_Finalize
. This is a pretty common pattern and seems like not much work to support.
It looks like rsmpi likes to use RSMPI_ANY_TAG
, but this is often problematic for a nontrivial class of algorithms. It's common for libraries to implement "tag dispensers" to prevent different components from interfering with each other. (And MPI_Comm_dup
at the boundary with other libraries.) In PETSc, these are implemented using attributes so we don't have to dup again each time an MPI_Comm
gets passed along a call stack that goes back and forth between PETSc and other code. All this to say that attributes will end up being useful for multi-language scenarios.
from rsmpi.
Related Issues (20)
- Worlds and Universes: MPI_FINALIZE HOT 5
- Support for unit testing HOT 4
- Immediate send/recvs hang when the packets being sent are large HOT 16
- Can I send heap allocated data structures with the UserDataType API?
- Using dynamic reference to communicator HOT 12
- Implement Equivalence trait for complex types HOT 2
- Incorrect parsing of `-L` and `-I` paths in build-probe-mpi
- Support `MaybeUninit` HOT 3
- Why I can not compile “mpi-sys”? HOT 2
- Unstable with openmpi in Arch Linux, yet stable with MPICH from conda HOT 4
- clippy lint for derived `Equivalence` of struct with tuple fields HOT 2
- Cannot open include file: 'fficonfig.h' while building with msvc and ms-mpi HOT 10
- Example of using rsmpi across two or more nodes HOT 2
- Problems compiling crates.io version on Arch HOT 3
- push a release with updated bindgen? HOT 1
- Improving ergonomics of sending arrays/vectors HOT 5
- MPI_File support HOT 1
- MPI Communication Analysis possible? HOT 4
- Should ready send be unsafe? HOT 2
- README example fails do build on windows with MS-MPI HOT 3
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from rsmpi.