I am running a set of many parallel jobs in slurm (around 1000) and each of these has to be assigned to one CPU. Reading the slurm documentation I found this:
Best Practices, Large Job Counts
Consider putting related work into a single Slurm job with multiple job steps both for performance reasons and ease of management. Each Slurm job can contain a multitude of job steps and the overhead in Slurm for managing job steps is much lower than that of individual jobs.
Job arrays are an efficient mechanism of managing a collection of batch jobs with identical resource requirements. Most Slurm commands can manage job arrays either as individual elements (tasks) or as a single entity (e.g. delete an entire job array in a single command).
This seems to imply that a single job with many job steps (e.g. one batch script with many srun calls, each with the same resources) performs better than a job array. My issue though is that I don't want to block resources for other people; if I run one job with 1000 srun calls the job will block a large number of processors constantly once it starts running, however, if I run a job array with 1000 jobs then those jobs will only use processors if they are available on the queue, which I believe is more flexible.
My question is: Is the overhead of running a job array over job steps significant enough for me to worry about this? Is there any alternative if the overhead is large? How do people usually deal with this sort of situations? I've seen people using GNU parallel with slurm in some circumstances, does it provide any advantage? Is this a possible use case?