Learn R Programming

pbdMPI (version 0.2-3)

sendrecv.replace-method: Send and Receive an Object to and from Other Ranks

Description

This method lets a rank send an object to the other rank and receive an object from another rank in the same communicator. The default return is x.

Usage

sendrecv.replace(x,
    rank.dest = (comm.rank(.SPMD.CT$comm) + 1) %%
                comm.size(.SPMD.CT$comm),
    send.tag = .SPMD.CT$tag,
    rank.source = (comm.rank(.SPMD.CT$comm) - 1) %%
                  comm.size(.SPMD.CT$comm),
    recv.tag = .SPMD.CT$tag,
    comm = .SPMD.CT$comm, status = .SPMD.CT$status)

Arguments

x
an object to be sent from a rank.
rank.dest
a rank of destination where x send to.
send.tag
a send tag number.
rank.source
a source rank where x sent from.
recv.tag
a receive tag number.
comm
a communicator number.
status
a status number.

Value

  • A x is returned by default.

Details

A corresponding sendrecv.replace() should be evoked at the corresponding ranks rank.dest and rank.source.

rank.dest and rank.source can be as.integer(NULL) to create a silent sendrecv operation which is more efficient than setting rank.dest and rank.source to be equal.

Warning: sendrecv.replace() is not safe for Rsince Ris not a thread safe package that a dynamic returning object requires certain blocking or barrier at some where. The replaced object or memory address `MUST' return correctly. This is almost equivalent to sendrecv().

References

Programming with Big Data in R Website: http://r-pbd.org/

See Also

sendrecv().

Examples

Run this code
### Save code in a file "demo.r" and run with 2 processors by
### SHELL> mpiexec -np 2 Rscript demo.r

### Initial.
library(pbdMPI, quietly = TRUE)
init()
.comm.size <- comm.size()
.comm.rank <- comm.rank()

### Examples.
N <- 5
x <- (1:N) + N * .comm.size
x <- sendrecv.replace(matrix(x, nrow = 1))
comm.print(x, rank.print = 1)

### Finish.
finalize()

Run the code above in your browser using DataLab