Sigh - of course, they changed the name of the silly MPI_Info object in the final standard, but not in the proposal. So change to the new MPI_INFO_ENV name. Also, don't set unknown values to "N/A", but just leave them unset.
This commit was SVN r27012.
Этот коммит содержится в:
родитель
cb48fd52d4
Коммит
c90b7380c1
@ -643,9 +643,9 @@ enum {
|
||||
#endif
|
||||
|
||||
/*
|
||||
* GET_ENV handle
|
||||
* MPI_INFO_ENV handle
|
||||
*/
|
||||
#define MPI_INFO_GET_ENV OMPI_PREDEFINED_GLOBAL(MPI_Info, ompi_mpi_info_get_env)
|
||||
#define MPI_INFO_ENV OMPI_PREDEFINED_GLOBAL(MPI_Info, ompi_mpi_info_env)
|
||||
|
||||
#define MPI_STATUS_IGNORE ((MPI_Status *) 0)
|
||||
#define MPI_STATUSES_IGNORE ((MPI_Status *) 0)
|
||||
@ -890,7 +890,7 @@ OMPI_DECLSPEC extern struct ompi_predefined_win_t ompi_mpi_win_null;
|
||||
OMPI_DECLSPEC extern struct ompi_predefined_file_t ompi_mpi_file_null;
|
||||
|
||||
OMPI_DECLSPEC extern struct ompi_predefined_info_t ompi_mpi_info_null;
|
||||
OMPI_DECLSPEC extern struct ompi_predefined_info_t ompi_mpi_info_get_env;
|
||||
OMPI_DECLSPEC extern struct ompi_predefined_info_t ompi_mpi_info_env;
|
||||
|
||||
OMPI_DECLSPEC extern MPI_Fint *MPI_F_STATUS_IGNORE;
|
||||
OMPI_DECLSPEC extern MPI_Fint *MPI_F_STATUSES_IGNORE;
|
||||
|
@ -54,7 +54,7 @@
|
||||
*/
|
||||
ompi_predefined_info_t ompi_mpi_info_null;
|
||||
ompi_predefined_info_t *ompi_mpi_info_null_addr = &ompi_mpi_info_null;
|
||||
ompi_predefined_info_t ompi_mpi_info_get_env;
|
||||
ompi_predefined_info_t ompi_mpi_info_env;
|
||||
|
||||
|
||||
/*
|
||||
@ -112,60 +112,66 @@ int ompi_info_init(int argc, char **argv)
|
||||
ompi_mpi_info_null.info.i_f_to_c_index = 0;
|
||||
|
||||
/* Create MPI_INFO_GET_ENV */
|
||||
OBJ_CONSTRUCT(&ompi_mpi_info_get_env.info, ompi_info_t);
|
||||
ompi_mpi_info_get_env.info.i_f_to_c_index = 1;
|
||||
OBJ_CONSTRUCT(&ompi_mpi_info_env.info, ompi_info_t);
|
||||
ompi_mpi_info_env.info.i_f_to_c_index = 1;
|
||||
|
||||
/* fill the get_env info object */
|
||||
|
||||
/* command for this app_context */
|
||||
ompi_info_set(&ompi_mpi_info_get_env.info, "command", argv[0]);
|
||||
ompi_info_set(&ompi_mpi_info_env.info, "command", argv[0]);
|
||||
|
||||
/* space-separated list of argv for this command */
|
||||
if (1 < argc) {
|
||||
cptr = opal_argv_join(&argv[1], ' ');
|
||||
ompi_info_set(&ompi_mpi_info_get_env.info, "argv", cptr);
|
||||
ompi_info_set(&ompi_mpi_info_env.info, "argv", cptr);
|
||||
free(cptr);
|
||||
} else {
|
||||
ompi_info_set(&ompi_mpi_info_get_env.info, "argv", "N/A");
|
||||
}
|
||||
|
||||
/* max procs for the entire job */
|
||||
if (NULL == (cptr = getenv("OMPI_MCA_orte_ess_num_procs"))) {
|
||||
cptr = "1";
|
||||
if (NULL != (cptr = getenv("OMPI_MCA_orte_ess_num_procs"))) {
|
||||
ompi_info_set(&ompi_mpi_info_env.info, "maxprocs", cptr);
|
||||
}
|
||||
ompi_info_set(&ompi_mpi_info_get_env.info, "maxprocs", cptr);
|
||||
ompi_info_set(&ompi_mpi_info_get_env.info, "soft", "N/A");
|
||||
|
||||
#if 0
|
||||
/* Open MPI does not support the "soft" option */
|
||||
ompi_info_set(&ompi_mpi_info_env.info, "soft", "N/A");
|
||||
#endif
|
||||
|
||||
/* local host name */
|
||||
gethostname(tmp, MPI_MAX_INFO_KEY);
|
||||
ompi_info_set(&ompi_mpi_info_get_env.info, "host", tmp);
|
||||
ompi_info_set(&ompi_mpi_info_env.info, "host", tmp);
|
||||
|
||||
/* architecture name */
|
||||
if (NULL == (cptr = getenv("OMPI_MCA_orte_cpu_type"))) {
|
||||
if (NULL != (cptr = getenv("OMPI_MCA_orte_cpu_type"))) {
|
||||
ompi_info_set(&ompi_mpi_info_env.info, "arch", cptr);
|
||||
}
|
||||
#ifdef HAVE_SYS_UTSNAME_H
|
||||
{
|
||||
else {
|
||||
struct utsname sysname;
|
||||
uname(&sysname);
|
||||
cptr = sysname.machine;
|
||||
ompi_info_set(&ompi_mpi_info_env.info, "arch", cptr);
|
||||
}
|
||||
#else
|
||||
cptr = "unknown";
|
||||
#endif
|
||||
}
|
||||
ompi_info_set(&ompi_mpi_info_get_env.info, "arch", cptr);
|
||||
|
||||
/* working directory of this process */
|
||||
opal_getcwd(tmp, MPI_MAX_INFO_KEY);
|
||||
ompi_info_set(&ompi_mpi_info_get_env.info, "wdir", tmp);
|
||||
ompi_info_set(&ompi_mpi_info_env.info, "wdir", tmp);
|
||||
|
||||
/* the number of app_contexts in this job */
|
||||
if (NULL == (cptr = getenv("OMPI_NUM_APP_CTX"))) {
|
||||
cptr = "1";
|
||||
if (NULL != (cptr = getenv("OMPI_NUM_APP_CTX"))) {
|
||||
ompi_info_set(&ompi_mpi_info_env.info, "num_app_ctx", cptr);
|
||||
}
|
||||
ompi_info_set(&ompi_mpi_info_get_env.info, "num_app_ctx", cptr);
|
||||
|
||||
/* space-separated list of first MPI rank of each app_context */
|
||||
if (NULL == (cptr = getenv("OMPI_FIRST_RANKS"))) {
|
||||
cptr = "0";
|
||||
if (NULL != (cptr = getenv("OMPI_FIRST_RANKS"))) {
|
||||
ompi_info_set(&ompi_mpi_info_env.info, "first_rank", cptr);
|
||||
}
|
||||
ompi_info_set(&ompi_mpi_info_get_env.info, "first_rank", cptr);
|
||||
|
||||
/* space-separated list of num procs for each app_context */
|
||||
if (NULL == (cptr = getenv("OMPI_APP_CTX_NUM_PROCS"))) {
|
||||
cptr = "1";
|
||||
if (NULL != (cptr = getenv("OMPI_APP_CTX_NUM_PROCS"))) {
|
||||
ompi_info_set(&ompi_mpi_info_env.info, "np", cptr);
|
||||
}
|
||||
ompi_info_set(&ompi_mpi_info_get_env.info, "np", cptr);
|
||||
|
||||
/* All done */
|
||||
|
||||
@ -427,7 +433,7 @@ int ompi_info_finalize(void)
|
||||
opal_pointer_array_set_item(&ompi_info_f_to_c_table, 0, NULL);
|
||||
|
||||
/* ditto for MPI_INFO_GET_ENV */
|
||||
OBJ_DESTRUCT(&ompi_mpi_info_get_env.info);
|
||||
OBJ_DESTRUCT(&ompi_mpi_info_env.info);
|
||||
opal_pointer_array_set_item(&ompi_info_f_to_c_table, 1, NULL);
|
||||
|
||||
/* Go through the f2c table and see if anything is left. Free them
|
||||
|
@ -106,9 +106,9 @@ OMPI_DECLSPEC extern ompi_predefined_info_t ompi_mpi_info_null;
|
||||
OMPI_DECLSPEC extern ompi_predefined_info_t *ompi_mpi_info_null_addr;
|
||||
|
||||
/**
|
||||
* Global instance for MPI_INFO_GET_ENV
|
||||
* Global instance for MPI_INFO_ENV
|
||||
*/
|
||||
OMPI_DECLSPEC extern ompi_predefined_info_t ompi_mpi_info_get_env;
|
||||
OMPI_DECLSPEC extern ompi_predefined_info_t ompi_mpi_info_env;
|
||||
|
||||
/**
|
||||
* \internal
|
||||
|
@ -31,9 +31,9 @@ int main(int argc, char* argv[])
|
||||
nk = sizeof(keys) / sizeof(char*);
|
||||
|
||||
for (i=0; i < nk; i++) {
|
||||
MPI_Info_get(MPI_INFO_GET_ENV, keys[i], MPI_MAX_INFO_KEY,
|
||||
MPI_Info_get(MPI_INFO_ENV, keys[i], MPI_MAX_INFO_KEY,
|
||||
value, &flag);
|
||||
fprintf(stderr, "%s: %s\n", keys[i], value);
|
||||
fprintf(stderr, "%s: %s\n", keys[i], (flag) ? value : "Not found");
|
||||
}
|
||||
|
||||
MPI_Finalize();
|
||||
|
Загрузка…
Ссылка в новой задаче
Block a user