Hi Ralph, I want to ask you one more thing about default setting of
num_procs
when we don't specify the -np option and we set the cpus-per-proc > 1.

In this case, the round_robin_mapper sets num_procs = num_slots as below:

rmaps_rr.c:
130        if (0 == app->num_procs) {
131            /* set the num_procs to equal the number of slots on these
mapped nodes */
132            app->num_procs = num_slots;
133        }

However, because of cpus_per_rank > 1, this num_procs will be refused at
the
line 61 in rmaps_rr_mappers.c as below, unless we switch on the
oversubscribe
directive.

rmaps_rr_mappers.c:
61    if (num_slots < ((int)app->num_procs *
orte_rmaps_base.cpus_per_rank)) {
62        if (ORTE_MAPPING_NO_OVERSUBSCRIBE & ORTE_GET_MAPPING_DIRECTIVE
(jdata->map->mapping)) {
63            orte_show_help("help-orte-rmaps-base.txt",
"orte-rmaps-base:alloc-error",
64                           true, app->num_procs, app->app);
65            return ORTE_ERR_SILENT;
66        }
67    }

Therefore, I think the default num_procs should be equal to the number of
num_slots divided by cpus/rank:

           app->num_procs = num_slots / orte_rmaps_base.cpus_per_rank;

This would be more convinient for most of people who want to use the
-cpus-per-proc option. I already confirmed it worked well. Please consider
to apply this fix to 1.7.4.

Regards,
Tetsuya Mishima

Reply via email to