-
Notifications
You must be signed in to change notification settings - Fork 31
Description
Background
SnowParam()
supports type = "SOCK"
(default), type = "MPI"
, and type = "FORK"
. The former two stems from the days of snow package and the latter was introduced with the parallel package. The type
argument is passed to parallel::makeCluster()
as-is;
> parallel::makeCluster
function (spec, type = getClusterOption("type"), ...)
{
switch(type, PSOCK = makePSOCKcluster(names = spec, ...),
FORK = makeForkCluster(nnodes = spec, ...), SOCK = snow::makeSOCKcluster(names = spec,
...), MPI = snow::makeMPIcluster(count = spec, ...),
stop("unknown cluster type"))
}
<environment: namespace:parallel>
Wish
Please add support also for type = "PSOCK"
, which is the default for parallel::makeCluster()
[since day one back in 2014, I think]. It looks like it would be quite straightforward to do this.
Why add this? Because, PSOCK clusters have undergone lots of improvements since snow was incorporated into parallel. For example, in R (>= 4.0.0), the nodes ("workers") of PSOCK cluster is set up in parallel, instead of sequentially. This makes the setup much faster, e,g.
Source: https://www.jottr.org/2021/06/10/parallelly-1.26.0/
In addition, this parallel setup strategy avoids port clashes that we saw in parallel (< 4.0.0), and still in snow (since it's deprecated and not improved on), e.g.
Error in `socketConnection(port = port, server = TRUE, blocking = TRUE,
open = "a+b")`: cannot open the connection
FYI, I haven't seen those type of errors since R (< 4.0.0), except from revdep checking packages relying on snow. More recently while revdep checking Bioconductor package DMCFB that uses SnowParam
in it's package tests.