Hi Gilles I'm surprised this came into the trunk - last I saw, we hadn't fully decided which approach we wanted to pursue. Did I miss some discussion?
Due to some other issues, we had been leaning more towards the other alternative - i.e., adding structure to the opal identifier struct. Is there some reason why you chose this alternative? Begin forwarded message: > From: git...@crest.iu.edu > Subject: [OMPI commits] Git: open-mpi/ompi branch master updated. > dev-102-gc9c5d40 > Date: October 15, 2014 at 3:50:43 AM PDT > To: ompi-comm...@open-mpi.org > Reply-To: de...@open-mpi.org > > This is an automated email from the git hooks/post-receive script. It was > generated because a ref change was pushed to the repository containing > the project "open-mpi/ompi". > > The branch, master has been updated > via c9c5d4011bf6ea1ade1a5bd9b6a77f02157dc774 (commit) > from 5c81658d58e260170c995030ac17e42a4032e2dd (commit) > > Those revisions listed above that are new to this repository have > not appeared on any other notification email; so we list those > revisions in full, below. > > - Log ----------------------------------------------------------------- > https://github.com/open-mpi/ompi/commit/c9c5d4011bf6ea1ade1a5bd9b6a77f02157dc774 > > commit c9c5d4011bf6ea1ade1a5bd9b6a77f02157dc774 > Author: Gilles Gouaillardet <gilles.gouaillar...@iferc.org> > Date: Wed Oct 15 17:19:13 2014 +0900 > > Fix heterogeneous support > > * redefine orte_process_name_t so it can be converted > between host and network format as an opal_identifier_t > aka uint64_t by the OPAL layer. > * correctly send OPAL_DSTORE_ARCH key > > diff --git a/ompi/proc/proc.c b/ompi/proc/proc.c > index d30182f..12b781e 100644 > --- a/ompi/proc/proc.c > +++ b/ompi/proc/proc.c > @@ -107,6 +107,7 @@ int ompi_proc_init(void) > OMPI_CAST_RTE_NAME(&proc->super.proc_name)->vpid = i; > > if (i == OMPI_PROC_MY_NAME->vpid) { > + opal_value_t kv; > ompi_proc_local_proc = proc; > proc->super.proc_flags = OPAL_PROC_ALL_LOCAL; > proc->super.proc_hostname = strdup(ompi_process_info.nodename); > @@ -115,8 +116,13 @@ int ompi_proc_init(void) > opal_proc_local_set(&proc->super); > #if OPAL_ENABLE_HETEROGENEOUS_SUPPORT > /* add our arch to the modex */ > - OPAL_MODEX_SEND_STRING(ret, PMIX_SYNC_REQD, PMIX_REMOTE, > OPAL_DSTORE_ARCH, > - &proc->super.proc_arch, OPAL_UINT32); > + OBJ_CONSTRUCT(&kv, opal_value_t); > + kv.key = strdup(OPAL_DSTORE_ARCH); > + kv.type = OPAL_UINT32; > + kv.data.uint32 = opal_local_arch; > + ret = opal_pmix.put(PMIX_REMOTE, &kv); > + OBJ_DESTRUCT(&kv); > + > if (OPAL_SUCCESS != ret) { > return ret; > } > diff --git a/opal/util/proc.h b/opal/util/proc.h > index 8a52a08..db5cfbc 100644 > --- a/opal/util/proc.h > +++ b/opal/util/proc.h > @@ -23,7 +23,7 @@ > #include "opal/dss/dss.h" > > #if OPAL_ENABLE_HETEROGENEOUS_SUPPORT > -#include <arpa/inet.h> > +#include "opal/types.h" > #endif > > /** > @@ -37,22 +37,11 @@ > typedef opal_identifier_t opal_process_name_t; > > #if OPAL_ENABLE_HETEROGENEOUS_SUPPORT && !defined(WORDS_BIGENDIAN) > -#define OPAL_PROCESS_NAME_NTOH(guid) opal_process_name_ntoh_intr(&(guid)) > -static inline __opal_attribute_always_inline__ void > -opal_process_name_ntoh_intr(opal_process_name_t *name) > -{ > - uint32_t * w = (uint32_t *)name; > - w[0] = ntohl(w[0]); > - w[1] = ntohl(w[1]); > -} > -#define OPAL_PROCESS_NAME_HTON(guid) opal_process_name_hton_intr(&(guid)) > -static inline __opal_attribute_always_inline__ void > -opal_process_name_hton_intr(opal_process_name_t *name) > -{ > - uint32_t * w = (uint32_t *)name; > - w[0] = htonl(w[0]); > - w[1] = htonl(w[1]); > -} > +#define OPAL_PROCESS_NAME_NTOH(guid) \ > + guid = ntoh64(guid) > + > +#define OPAL_PROCESS_NAME_HTON(guid) \ > + guid = hton64(guid) > #else > #define OPAL_PROCESS_NAME_NTOH(guid) > #define OPAL_PROCESS_NAME_HTON(guid) > diff --git a/orte/include/orte/types.h b/orte/include/orte/types.h > index c9ae320..f14b527 100644 > --- a/orte/include/orte/types.h > +++ b/orte/include/orte/types.h > @@ -10,6 +10,8 @@ > * Copyright (c) 2004-2005 The Regents of the University of California. > * All rights reserved. > * Copyright (c) 2014 Intel, Inc. All rights reserved. > + * Copyright (c) 2014 Research Organization for Information Science > + * and Technology (RIST). All rights reserved. > * $COPYRIGHT$ > * > * Additional copyrights may follow > @@ -83,17 +85,17 @@ typedef uint32_t orte_vpid_t; > #define ORTE_VPID_MAX UINT32_MAX-2 > #define ORTE_VPID_MIN 0 > > -#define ORTE_PROCESS_NAME_HTON(n) \ > -do { \ > - n.jobid = htonl(n.jobid); \ > - n.vpid = htonl(n.vpid); \ > -} while (0) > +#if OPAL_ENABLE_HETEROGENEOUS_SUPPORT && !defined(WORDS_BIGENDIAN) > +#define ORTE_PROCESS_NAME_HTON(n) \ > + OPAL_PROCESS_NAME_HTON(*(opal_process_name_t *)&(n)) > > -#define ORTE_PROCESS_NAME_NTOH(n) \ > -do { \ > - n.jobid = ntohl(n.jobid); \ > - n.vpid = ntohl(n.vpid); \ > -} while (0) > +#define ORTE_PROCESS_NAME_NTOH(n) \ > + OPAL_PROCESS_NAME_NTOH(*(opal_process_name_t *)&(n)) > +#else > +#define ORTE_PROCESS_NAME_HTON(n) > + > +#define ORTE_PROCESS_NAME_NTOH(n) > +#endif > > #define ORTE_NAME_ARGS(n) \ > (unsigned long) ((NULL == n) ? (unsigned long)ORTE_JOBID_INVALID : > (unsigned long)(n)->jobid), \ > @@ -115,11 +117,23 @@ do { \ > > /* > * define the process name structure > + * the OPAL layer sees an orte_process_name_t as an opal_process_name_t aka > uint64_t > + * if heterogeneous is supported, when converting this uint64_t to > + * an endian neutral format, vpid and jobid will be swapped. > + * consequently, the orte_process_name_t struct must have different > definitions > + * (swap jobid and vpid) on little and big endian arch. > */ > +#if OPAL_ENABLE_HETEROGENEOUS_SUPPORT && !defined(WORDS_BIGENDIAN) > +struct orte_process_name_t { > + orte_vpid_t vpid; /**< Process id - equivalent to rank */ > + orte_jobid_t jobid; /**< Job number */ > +}; > +#else > struct orte_process_name_t { > orte_jobid_t jobid; /**< Job number */ > orte_vpid_t vpid; /**< Process id - equivalent to rank */ > }; > +#endif > typedef struct orte_process_name_t orte_process_name_t; > > > > > ----------------------------------------------------------------------- > > Summary of changes: > ompi/proc/proc.c | 10 ++++++++-- > opal/util/proc.h | 23 ++++++----------------- > orte/include/orte/types.h | 34 ++++++++++++++++++++++++---------- > 3 files changed, 38 insertions(+), 29 deletions(-) > > > hooks/post-receive > -- > open-mpi/ompi > _______________________________________________ > ompi-commits mailing list > ompi-comm...@open-mpi.org > http://www.open-mpi.org/mailman/listinfo.cgi/ompi-commits