The 'parallelly' hexlogo

parallelly 1.32.0 is now on CRAN. One of the major updates is that availableCores() and availableWorkers(), and therefore also the future framework, gained support for the ‘Fujitsu Technical Computing Suite’ job scheduler. For other updates, please see NEWS.

The parallelly package enhances the parallel package - our built-in R package for parallel processing - by improving on existing features and by adding new ones. Somewhat simplified, parallelly provides the things that you would otherwise expect to find in the parallel package. The future package relies on the parallelly package internally for local and remote parallelization.

Support for the Fujitsu Technical Computing Suite

Functions availableCores() and availableWorkers() now support the Fujitsu Technical Computing Suite. Fujitsu Technical Computing Suite is a high-performance compute (HPC) job scheduler, which is popular in Japan among other places, e.g. at RIKEN and Kyushu University.

Specifically, these functions now recognize environment variables PJM_VNODE_CORE, PJM_PROC_BY_NODE, and PJM_O_NODEINF set by the Fujitsu Technical Computing Suite scheduler. For example, if we submit a job script with:

$ pjsub -L vnode=4 -L vnode-core=10

the scheduler will allocate four slots with ten cores each on one or more compute nodes. For example, we might get:

#> [1] 10

#>  [1] "node032" "node032" "node032" "node032" "node032"
#>  [6] "node032" "node032" "node032" "node032" "node032"
#> [11] "node032" "node032" "node032" "node032" "node032"
#> [16] "node032" "node032" "node032" "node032" "node032"
#> [21] "node032" "node032" "node032" "node032" "node032"
#> [26] "node032" "node032" "node032" "node032" "node032"
#> [31] "node109" "node109" "node109" "node109" "node109"
#> [36] "node109" "node109" "node109" "node109" "node109"

In this example, the scheduler allocated three 10-core slots on compute node node032 and one 10-core slot on compute node node109, totalling 40 CPU cores, as requested. Because of this, users on these systems can now use makeClusterPSOCK() to set up a parallel PSOCK cluster as:

cl <- makeClusterPSOCK(availableWorkers(), rshcmd = "pjrsh")

As shown above, this code picks up whatever vnode and vnode-core configuration were requested via the pjsub submission, and launch 40 parallel R workers via the pjrsh tool part of the Fujitsu Technical Computing Suite.

This also means that we can use:

plan(cluster, rshcmd = "pjrsh")

when using the future framework, which uses makeClusterPSOCK() and availableWorkers() internally.

Avoid having to specify rshcmd = “pjrsh”

To avoid having to manually specify argument rshcmd = "pjrsh" manually, we can set it via environment variable R_PARALLELLY_MAKENODEPSOCK_RSHCMD (sic!) before launching R, e.g.


To make this persistent, the user can add this line to their ~/.bashrc shell startup script. Alternatively, the system administrator can add it to a /etc/profile.d/*.sh file of their choice.

With this environment variable set, it’s sufficient to do:

cl <- makeClusterPSOCK(availableWorkers())



In addition to not having to remember using rshcmd = "pjrsh", a major advantage of this approach is that the same R script works also on other systems, including the user’s local machine and HPC environments such as Slurm and SGE.

Over and out, and welcome to all Fujitsu Technical Computing Suite users!