doLapply()
iterates over all subjobs (using the non-parallel
lapply()
). Similarly, but in parallel, for
doForeach
(based on CRAN package foreach's foreach()
),
doRmpi
(based on Rmpi's mpi.apply()
),
doMclapply
(based on parallel's mclapply()
), and
doClusterApply
(based on parallel's clusterApply()
).
doRes.equal()
is simple convenience wrapper for
all.equal()
, for comparing two results (from the same
varlist
and doOne
arguments) of the do*
lapply-like functions above.
doLapply(vList, seed="seq", repFirst=TRUE,
sfile=NULL, check=TRUE, doAL=TRUE, subjob.=subjob, monitor=FALSE,
doOne, ...)
doForeach(vList, cluster=makeCluster(detectCores(), type="PSOCK"),
cores=NULL, block.size = 1, seed="seq", repFirst=TRUE,
sfile=NULL, check=TRUE, doAL=TRUE, subjob.=subjob, monitor=FALSE,
doOne, extraPkgs=character(), exports=character(), ...)
doRmpi(vList,
nslaves = if((sz <- Rmpi::mpi.universe.size()) <= 1="" 1)="" detectcores()="" else="" sz,="" load.balancing="TRUE," block.size="1," seed="seq" ,="" repfirst="TRUE," sfile="NULL," check="TRUE," doal="TRUE," subjob.="subjob," monitor="FALSE," doone,="" exports="character()," ...)="" domclapply(vlist,="" cores="if(.Platform$OS.type" =="windows" )="" detectcores(),="" doclusterapply(vlist,="" cluster="makeCluster(detectCores()," type="PSOCK" ),="" initexpr,="" ...)<="" p="">doRes.equal(x, y, tol = 1e-15, ...)
=>
The result of applying subjob()
to all subjobs, converted with
saveSim()
.
a list
of variable specifications. Each
variable spec is itself a named list which must contain a
"value"
component.
cluster object, typically generated by
makeCluster()
. For doForeach()
, this can
be NULL
as well, see Details below.
the number of cores. For doForeach()
, this can
be NULL
as well, see Details below.
the number of workers for doRmpi
, passed
to package Rmpi's mpi.spawn.Rslaves
when no
running workers are found.
logical
indicating whether
load balancing is used:
mpi.applyLB()
is used instead of
mpi.apply()
.
here, mc.preschedule=!load.balancing
determines load balancing.
clusterApplyLB()
instead of
clusterApply()
.
size of blocks of rows in the virtual grid which are computed simultaneously (load-balancing).
see subjob()
.
see saveSim()
.
a function
for computing a subjob (one
row of the virtual grid). Typically subjob()
.
a user-supplied function
for computing one
row of the (physical) grid.
a logical or a function
for producing
“monitoring” output; the function argument list must contain
the one of printInfo[["default"]]
.
character
vector of packages to be made
available on the nodes.
character
vector of functions (for
doForeach()
and doClusterApply()
) or
objects (for doRmpi()
) to export.
expression initially evaluated on the cluster (can be missing).
additional arguments passed to subjob()
(typically
further passed on to doOne()
), or, for doRes.equal()
, to
all.equal(*)
.
Marius Hofert and Martin Maechler.
See the vignette or references in simsalapar-package
for
how to use these functions.
For reasons to choose "MPI"
as cluster type (if not on Windows),
see the discussion starting at
https://stat.ethz.ch/pipermail/r-sig-hpc/2013-April/001647.html.
For doForeach()
, precisely one of cluster
or
cores
has to be not NULL
. This will determine whether
the parallel computations are carried out on a cluster with multiple
nodes or on a multi-core processor.
subjob()
for computing a subjob. doCallWE()
for the return value of doOne()
. .Random.seed
for
information about random number generators and seeds.
if(simsalapar:::doExtras()) { ## needs some CPU
demo(robust.mean) # 512 simulations, differing block sizes, ...
}
Run the code above in your browser using DataLab