dopar {spaMM} | R Documentation |
Interface for parallel computations
Description
dopar
and combinepar
are interfaces primarily designed to apply some function fn
in parallel on columns of a matrix, although other uses are possible. Depending on the nb_cores
argument, parallel or serial computation is performed. A socket cluster is used by default for parallel computations, but a fork cluster can be requested on linux and alike operating systems by using argument cluster_args=list(type="FORK")
.
dopar
has been designed to provide by default a progress bar in all evaluations contexts. A drawback is that different procedures are called depending e.g. on the type of cluster, with different possible controls. In particular, foreach
is called in some cases but not others, so non-trivial values of its .combine
control are not always enforced. The alternative interface combinepar
will always use foreach
, and will still try to provide by default a progress bar but may fail to do so in some cases (see Details).
Usage
dopar(newresp, fn, nb_cores = NULL, fit_env,
control = list(.final=function(v) if( ! is.list(v[[1]])) {do.call(cbind,v)} else v),
cluster_args = NULL, debug. = FALSE, iseed = NULL,
showpbar = eval(spaMM.getOption("barstyle")),
pretest_cores =NULL, ...)
combinepar(newresp, fn, nb_cores = NULL, cluster=NULL, fit_env,
control = list(.final=function(v) if( ! is.list(v[[1]])) {do.call(cbind,v)} else v),
cluster_args = NULL, debug. = FALSE, iseed = NULL,
showpbar = eval(spaMM.getOption("barstyle")),
pretest_cores =NULL, ...)
Arguments
newresp |
A matrix on whose columns |
fn |
Function whose first argument is named |
nb_cores |
Integer. Number of cores to use for parallel computations. If >1 (and no cluster is provided by the |
cluster |
(for |
fit_env |
(for socket clusters only:) An environment, or a list, containing variables to be exported on the nodes of the cluster (by |
control |
A list following the
|
cluster_args |
A list of arguments passed to |
debug. |
(for socket clusters only:) For debugging purposes. Effect, if any, is to be defined by the |
iseed |
(all parallel contexts:) Integer, or NULL. If an integer, it is used as the |
showpbar |
(for socket clusters only:) Controls display of progress bar. See |
pretest_cores |
(for socket clusters only:) A function to run on the cores before running |
... |
Further arguments to be passed (unevaluated) to |
Details
Control of random numbers through the "L'Ecuyer-CMRG"
generator and the iseed
argument is not sufficient for consistent results when the doSNOW
parallel backend is used, so if you really need such control in a fn
using random numbers, do not use doSNOW
. Yet, it is fine to use doSNOW
for bootstrap procedures in spaMM, because the fitting functions do not use random numbers: only sample simulation uses them, and it is not performed in parallel.
combinepar
calls foreach::%dopar%
which assumes that a cluster has been declared using a suitable backend such as doSNOW
, doFuture
or doParallel
. If only the latter is available, no progress bar is displayed. A method to render a bar when doParallel
is used can be found on the Web, but that bar is not a valid progress bar as it is displayed only after all the processes have been run.
Value
The result of calling foreach
, pbapply
or mclapply
, as dependent on the control
argument and the interface used. A side-effect of either interface is to show a progress bar whose character informs about the type of parallelisation performed: a "F"
or default "="
character for fork clusters, a "P"
for parallel computation via foreach
and doSNOW
, a "p"
for parallel computation via foreach
and doFuture
or via pbapply
, and "s"
for serial computation foreach
and doParallel
or via pbapply
.
See Also
dofuture
is yet another interface with (essentially) the same functionalities as dopar
. See the documentation of the wrap_parallel
option for its differences from dopar
.
Examples
## See source code of spaMM_boot()
## Not run:
# Useless function, but requiring some argument beyond the first
foo <- function(y, somearg, ...) {
if ( is.null(somearg) || TRUE ) length(y)
}
# Whether FORK can be used depends on OS and whether Rstudio is used:
dopar(matrix(1,ncol=4,nrow=3), foo, fit_env=list(), somearg=NULL,
nb_cores=2, cluster_args=list(type="FORK"))
## End(Not run)