diff --git a/doc/html/heterogeneous_jobs.shtml b/doc/html/heterogeneous_jobs.shtml index 7a7756c1f9c67fcb7332891f1c3d61d0198c4d83..0c0162d4e962b9b463da3dcba3cd32fb8b07bf8f 100644 --- a/doc/html/heterogeneous_jobs.shtml +++ b/doc/html/heterogeneous_jobs.shtml @@ -500,6 +500,9 @@ components of a heterogeneous job.</p> <p>Slurm's PERL APIs currently do not support heterogeneous jobs.</p> +<p>The srun --multi-prog option can not be used to span more than one +heterogeneous job component.</p> + <h2><a name="sys_admin">System Administrator Information</a></h2> <p>The job submit plugin is invoked independently for each component of a @@ -576,6 +579,6 @@ especially other heterogeneous jobs.</p> <p class="footer"><a href="#top">top</a></p> -<p style="text-align:center;">Last modified 29 August 2017</p> +<p style="text-align:center;">Last modified 4 September 2017</p> <!--#include virtual="footer.txt"--> diff --git a/src/srun/libsrun/srun_job.c b/src/srun/libsrun/srun_job.c index 4fa92ae85a6fbb520c953dd6a1f4bf713b6dca07..a6b9087c0af58d829458be5d6cea95e6544c3b3c 100644 --- a/src/srun/libsrun/srun_job.c +++ b/src/srun/libsrun/srun_job.c @@ -487,6 +487,7 @@ static void _pack_grp_test(List opt_list) int pack_offset; bitstr_t *master_map = NULL; List missing_argv_list = NULL; + bool multi_pack = false, multi_prog = false; if (opt_list) { missing_argv_list = list_create(NULL); @@ -510,12 +511,15 @@ static void _pack_grp_test(List opt_list) } else { if (bit_overlap(master_map, opt_local->pack_grp_bits)) { - error("Duplicate pack groups in single srun not supported"); - exit(error_exit); + fatal("Duplicate pack groups in single srun not supported"); } bit_or(master_map, opt_local->pack_grp_bits); } + if (opt_local->multi_prog) + multi_prog = true; } + if (master_map && (bit_set_count(master_map) > 1)) + multi_pack = true; FREE_NULL_BITMAP(master_map); list_iterator_destroy(iter); list_destroy(missing_argv_list); @@ -525,8 +529,15 @@ static void _pack_grp_test(List opt_list) } else if (!opt.pack_group && opt.pack_grp_bits) { if ((pack_offset = bit_ffs(opt.pack_grp_bits)) < 0) pack_offset = 0; + else if (bit_set_count(opt.pack_grp_bits) > 1) + multi_pack = true; + if (opt.multi_prog) + multi_prog = true; xstrfmtcat(opt.pack_group, "%d", pack_offset); } + + if (multi_pack && multi_prog) + fatal("--multi-prog option not supported with multiple pack groups"); } /*