pub struct Node { /* private fields */ }Expand description
A ranked RDMA network node with barrier synchronization.
Wraps a MultiChannel with a rank, world size, and a Barrier for
collective synchronization across all nodes in the network.
Implementations§
Source§impl Node
impl Node
Sourcepub fn barrier(
&mut self,
peers: &[usize],
timeout: Duration,
) -> Result<(), BarrierError>
pub fn barrier( &mut self, peers: &[usize], timeout: Duration, ) -> Result<(), BarrierError>
Synchronizes with the given peers, blocking until all have reached the barrier or timeout.
Sourcepub fn barrier_unchecked(
&mut self,
peers: &[usize],
timeout: Duration,
) -> Result<(), BarrierError>
pub fn barrier_unchecked( &mut self, peers: &[usize], timeout: Duration, ) -> Result<(), BarrierError>
Like barrier, but skips validation of the peer list.
Source§impl Node
impl Node
Sourcepub fn send<'op>(
&'op mut self,
wr: PeerSendWorkRequest<'op, 'op>,
) -> TransportResult<WorkSuccess>
pub fn send<'op>( &'op mut self, wr: PeerSendWorkRequest<'op, 'op>, ) -> TransportResult<WorkSuccess>
Posts a send to the work request’s target peer and blocks until it completes.
Sourcepub fn receive<'op>(
&'op mut self,
wr: PeerReceiveWorkRequest<'op, 'op>,
) -> TransportResult<WorkSuccess>
pub fn receive<'op>( &'op mut self, wr: PeerReceiveWorkRequest<'op, 'op>, ) -> TransportResult<WorkSuccess>
Posts a receive to the work request’s target peer and blocks until it completes.
Sourcepub fn write<'op>(
&'op mut self,
wr: PeerWriteWorkRequest<'op, 'op>,
) -> TransportResult<WorkSuccess>
pub fn write<'op>( &'op mut self, wr: PeerWriteWorkRequest<'op, 'op>, ) -> TransportResult<WorkSuccess>
Posts an RDMA write to the work request’s target peer and blocks until it completes.
Sourcepub fn read<'op>(
&'op mut self,
wr: PeerReadWorkRequest<'op, 'op>,
) -> TransportResult<WorkSuccess>
pub fn read<'op>( &'op mut self, wr: PeerReadWorkRequest<'op, 'op>, ) -> TransportResult<WorkSuccess>
Posts an RDMA read to the work request’s target peer and blocks until it completes.
Source§impl Node
impl Node
Sourcepub unsafe fn send_unpolled<'data>(
&mut self,
wr: PeerSendWorkRequest<'_, 'data>,
) -> IbvResult<PendingWork<'data>>
pub unsafe fn send_unpolled<'data>( &mut self, wr: PeerSendWorkRequest<'_, 'data>, ) -> IbvResult<PendingWork<'data>>
Sourcepub unsafe fn receive_unpolled<'data>(
&mut self,
wr: PeerReceiveWorkRequest<'_, 'data>,
) -> IbvResult<PendingWork<'data>>
pub unsafe fn receive_unpolled<'data>( &mut self, wr: PeerReceiveWorkRequest<'_, 'data>, ) -> IbvResult<PendingWork<'data>>
Posts a receive to the target peer without polling for completion.
§Safety
Sourcepub unsafe fn write_unpolled<'data>(
&mut self,
wr: PeerWriteWorkRequest<'_, 'data>,
) -> IbvResult<PendingWork<'data>>
pub unsafe fn write_unpolled<'data>( &mut self, wr: PeerWriteWorkRequest<'_, 'data>, ) -> IbvResult<PendingWork<'data>>
Posts an RDMA write to the target peer without polling for completion.
§Safety
Sourcepub unsafe fn read_unpolled<'data>(
&mut self,
wr: PeerReadWorkRequest<'_, 'data>,
) -> IbvResult<PendingWork<'data>>
pub unsafe fn read_unpolled<'data>( &mut self, wr: PeerReadWorkRequest<'_, 'data>, ) -> IbvResult<PendingWork<'data>>
Posts an RDMA read to the target peer without polling for completion.
§Safety
Source§impl Node
impl Node
Sourcepub fn scatter_send<'op, I>(
&'op mut self,
wrs: I,
) -> TransportResult<Vec<WorkSuccess>>where
I: IntoIterator<Item = PeerSendWorkRequest<'op, 'op>>,
pub fn scatter_send<'op, I>(
&'op mut self,
wrs: I,
) -> TransportResult<Vec<WorkSuccess>>where
I: IntoIterator<Item = PeerSendWorkRequest<'op, 'op>>,
Posts sends to multiple peers and blocks until all complete.
Sourcepub fn scatter_write<'op, I>(
&'op mut self,
wrs: I,
) -> TransportResult<Vec<WorkSuccess>>where
I: IntoIterator<Item = PeerWriteWorkRequest<'op, 'op>>,
pub fn scatter_write<'op, I>(
&'op mut self,
wrs: I,
) -> TransportResult<Vec<WorkSuccess>>where
I: IntoIterator<Item = PeerWriteWorkRequest<'op, 'op>>,
Posts RDMA writes to multiple peers and blocks until all complete.
Sourcepub fn gather_receive<'op, I>(
&'op mut self,
wrs: I,
) -> TransportResult<Vec<WorkSuccess>>where
I: IntoIterator<Item = PeerReceiveWorkRequest<'op, 'op>>,
pub fn gather_receive<'op, I>(
&'op mut self,
wrs: I,
) -> TransportResult<Vec<WorkSuccess>>where
I: IntoIterator<Item = PeerReceiveWorkRequest<'op, 'op>>,
Posts receives from multiple peers and blocks until all complete.
Sourcepub fn gather_read<'op, I>(
&'op mut self,
wrs: I,
) -> TransportResult<Vec<WorkSuccess>>where
I: IntoIterator<Item = PeerReadWorkRequest<'op, 'op>>,
pub fn gather_read<'op, I>(
&'op mut self,
wrs: I,
) -> TransportResult<Vec<WorkSuccess>>where
I: IntoIterator<Item = PeerReadWorkRequest<'op, 'op>>,
Posts RDMA reads from multiple peers and blocks until all complete.
Sourcepub fn multicast_send<'op, I>(
&'op mut self,
peers: I,
wr: SendWorkRequest<'op, 'op>,
) -> TransportResult<Vec<WorkSuccess>>where
I: IntoIterator<Item = usize>,
pub fn multicast_send<'op, I>(
&'op mut self,
peers: I,
wr: SendWorkRequest<'op, 'op>,
) -> TransportResult<Vec<WorkSuccess>>where
I: IntoIterator<Item = usize>,
Posts the same send to multiple peers and blocks until all complete.
Source§impl Node
impl Node
Sourcepub unsafe fn scatter_send_unpolled<'wr, 'data, I>(
&mut self,
wrs: I,
) -> IbvResult<Vec<PendingWork<'data>>>where
I: IntoIterator<Item = PeerSendWorkRequest<'wr, 'data>>,
'data: 'wr,
pub unsafe fn scatter_send_unpolled<'wr, 'data, I>(
&mut self,
wrs: I,
) -> IbvResult<Vec<PendingWork<'data>>>where
I: IntoIterator<Item = PeerSendWorkRequest<'wr, 'data>>,
'data: 'wr,
Sourcepub unsafe fn scatter_write_unpolled<'wr, 'data, I>(
&mut self,
wrs: I,
) -> IbvResult<Vec<PendingWork<'data>>>where
I: IntoIterator<Item = PeerWriteWorkRequest<'wr, 'data>>,
'data: 'wr,
pub unsafe fn scatter_write_unpolled<'wr, 'data, I>(
&mut self,
wrs: I,
) -> IbvResult<Vec<PendingWork<'data>>>where
I: IntoIterator<Item = PeerWriteWorkRequest<'wr, 'data>>,
'data: 'wr,
Posts RDMA writes to multiple peers without polling for completion.
§Safety
Sourcepub unsafe fn gather_receive_unpolled<'wr, 'data, I>(
&mut self,
wrs: I,
) -> IbvResult<Vec<PendingWork<'data>>>where
I: IntoIterator<Item = PeerReceiveWorkRequest<'wr, 'data>>,
'data: 'wr,
pub unsafe fn gather_receive_unpolled<'wr, 'data, I>(
&mut self,
wrs: I,
) -> IbvResult<Vec<PendingWork<'data>>>where
I: IntoIterator<Item = PeerReceiveWorkRequest<'wr, 'data>>,
'data: 'wr,
Posts receives from multiple peers without polling for completion.
§Safety
Sourcepub unsafe fn gather_read_unpolled<'wr, 'data, I>(
&mut self,
wrs: I,
) -> IbvResult<Vec<PendingWork<'data>>>where
I: IntoIterator<Item = PeerReadWorkRequest<'wr, 'data>>,
'data: 'wr,
pub unsafe fn gather_read_unpolled<'wr, 'data, I>(
&mut self,
wrs: I,
) -> IbvResult<Vec<PendingWork<'data>>>where
I: IntoIterator<Item = PeerReadWorkRequest<'wr, 'data>>,
'data: 'wr,
Posts RDMA reads from multiple peers without polling for completion.
§Safety
Sourcepub unsafe fn multicast_send_unpolled<'wr, 'data, I>(
&mut self,
peers: I,
wr: SendWorkRequest<'wr, 'data>,
) -> IbvResult<Vec<PendingWork<'data>>>where
I: IntoIterator<Item = usize>,
pub unsafe fn multicast_send_unpolled<'wr, 'data, I>(
&mut self,
peers: I,
wr: SendWorkRequest<'wr, 'data>,
) -> IbvResult<Vec<PendingWork<'data>>>where
I: IntoIterator<Item = usize>,
Posts the same send to multiple peers without polling for completion.
§Safety
Source§impl Node
impl Node
Sourcepub fn scope<'env, F, T, E>(&'env mut self, f: F) -> Result<T, ScopeError<E>>
pub fn scope<'env, F, T, E>(&'env mut self, f: F) -> Result<T, ScopeError<E>>
Opens a polling scope that automatically polls all outstanding work requests when it ends.
See Channel::scope for details on the scoping mechanism.
Sourcepub fn manual_scope<'env, F, T, E>(&'env mut self, f: F) -> Result<T, E>
pub fn manual_scope<'env, F, T, E>(&'env mut self, f: F) -> Result<T, E>
Opens a polling scope that enforces manual polling of all work requests.
See Channel::manual_scope for details.