Search code examples
rparallel-processingforkhpcslurm

Forks are spawned on a single core on interactive HPC node


I am trying to test a script I have developed locally on an interactive HPC node, and I keep running in this strange issue that mclapply works only on a single core. I see several R processes spawned in htop (as many as the number of the cores), but they all occupy only one core.

Here is how I obtain the interactive node:

srun -n 16 -N 1 -t 5 --pty bash -il 

Is there a setting I am missing? How can I make this work? What can I check?

P.S. I just tested and the other programs that rely on forking to do parallel processing (say pigz) are afflicted by the same issue as well. Those that rely on MPI and messaging work properly, it seems.


Solution

  • Yes, you are missing a setting. Try:

    srun -N 1 -n 1 -c 16 -t 5 --pty bash -il
    

    The problem is that you are running the parallel commands within a bash shell that is allocated on a single core, so the bash process is spawned on only one of the cores requested by srun.

    Otherwise, you can first allocate your resources using salloc and once you obtain them run your actual command. For instance:

    salloc -N 1 -n 1 -c 16 -t 5
    srun pigz file.ext