
y combination of comma-separated values and ranges. Daemons will use the first port in the range, MPI procs will use the other ports in the range assuming that they know their node rank in time and enough ports were specified. NOTE: this capability only works under specific conditions. I will outline more about this in a note to devel as the remainder of the implementation progresses. For now, the only environment where this works is slurm. The linear routed module has also been adjusted to work with static ports so that all messaging flows strictly through the topology, including the initial daemon callback - thus limiting the number of sockets opened by mpirun. This commit was SVN r20390.
78 строки
2.3 KiB
C
78 строки
2.3 KiB
C
/*
|
|
* Copyright (c) 2004-2007 The Trustees of Indiana University and Indiana
|
|
* University Research and Technology
|
|
* Corporation. All rights reserved.
|
|
* Copyright (c) 2004-2008 The University of Tennessee and The University
|
|
* of Tennessee Research Foundation. All rights
|
|
* reserved.
|
|
* Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
|
|
* University of Stuttgart. All rights reserved.
|
|
* Copyright (c) 2004-2005 The Regents of the University of California.
|
|
* All rights reserved.
|
|
* Copyright (c) 2008 Sun Microsystems, Inc. All rights reserved.
|
|
* Copyright (c) 2008 Cisco Systems, Inc. All rights reserved.
|
|
* $COPYRIGHT$
|
|
*
|
|
* Additional copyrights may follow
|
|
*
|
|
* $HEADER$
|
|
*/
|
|
#include "orte_config.h"
|
|
#include "orte/constants.h"
|
|
|
|
#include <string.h>
|
|
#include <stdlib.h>
|
|
#ifdef HAVE_UNISTD_H
|
|
#include <unistd.h>
|
|
#endif
|
|
#ifdef HAVE_SYS_TYPES_H
|
|
#include <sys/types.h>
|
|
#endif
|
|
|
|
#include "opal/util/argv.h"
|
|
|
|
#include "orte/util/name_fns.h"
|
|
|
|
#include "orte/util/parse_options.h"
|
|
|
|
void orte_util_parse_range_options(char *input, char ***output)
|
|
{
|
|
char **r1=NULL, **r2=NULL;
|
|
int i, vint;
|
|
int start, end, n;
|
|
char nstr[32];
|
|
|
|
/* split on commas */
|
|
r1 = opal_argv_split(input, ',');
|
|
/* for each resulting element, check for range */
|
|
for (i=0; i < opal_argv_count(r1); i++) {
|
|
r2 = opal_argv_split(r1[i], '-');
|
|
if (1 < opal_argv_count(r2)) {
|
|
/* given range - get start and end */
|
|
start = strtol(r2[0], NULL, 10);
|
|
end = strtol(r2[1], NULL, 10);
|
|
} else {
|
|
/* check for wildcard - have to do this here because
|
|
* the -1 would have been caught in the split
|
|
*/
|
|
vint = strtol(r1[i], NULL, 10);
|
|
if (-1 == vint) {
|
|
opal_argv_free(*output);
|
|
opal_argv_append_nosize(output, "-1");
|
|
goto cleanup;
|
|
}
|
|
start = strtol(r2[0], NULL, 10);
|
|
end = start;
|
|
}
|
|
for (n = start; n <= end; n++) {
|
|
snprintf(nstr, 32, "%d", n);
|
|
opal_argv_append_nosize(output, nstr);
|
|
}
|
|
}
|
|
|
|
cleanup:
|
|
opal_argv_free(r1);
|
|
opal_argv_free(r2);
|
|
|
|
}
|