1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105
|
#include "mpi.h"
#define myAtoI(p, i) \
do { \
i = 0; \
while (*p >= '0' && *p <= '9') \
{ i *= 10; i += *p++ - '0'; } \
} while(0)
#define myVersionParser(S, a, b, c) \
do { \
const char *s = S; \
a = b = c = 0; \
myAtoI(s, a); if(*s++ != '.') break; \
myAtoI(s, b); if(*s++ != '.') break; \
myAtoI(s, c); if(*s++ != '.') break; \
} while(0)
static int MPI_Get_vendor(const char **vendor_name,
int *version_major,
int *version_minor,
int *version_micro)
{
const char* name="unknown";
int major=0, minor=0, micro=0;
/* MPICH2 */
#if defined(MPICH2)
name = "MPICH2";
#if defined(MPICH2_VERSION)
myVersionParser(MPICH2_VERSION,major,minor,micro);
#endif
#endif
/* Open MPI */
#if defined(OPEN_MPI)
name = "Open MPI";
#if defined(OMPI_MAJOR_VERSION)
major = OMPI_MAJOR_VERSION;
#endif
#if defined(OMPI_MINOR_VERSION)
minor = OMPI_MINOR_VERSION;
#endif
#if defined(OMPI_RELEASE_VERSION)
micro = OMPI_RELEASE_VERSION;
#endif
#endif
/* HP MPI */
#if defined(HP_MPI)
name = "HP MPI";
major = HP_MPI/100;
minor = HP_MPI%100;
#if defined(HP_MPI_MINOR)
micro = HP_MPI_MINOR;
#endif
#endif
/* DeinoMPI */
#if defined(DEINO_MPI)
name = "DeinoMPI";
#endif
/* MPICH1 */
#if defined(MPICH_NAME) && MPICH_NAME==1
name = "MPICH1";
#if defined(MPICH_VERSION)
myVersionParser(MPICH_VERSION,major,minor,micro);
#endif
#endif
/* LAM/MPI */
#if defined(LAM_MPI)
name = "LAM/MPI";
#if defined(LAM_MAJOR_VERSION)
major = LAM_MAJOR_VERSION;
#endif
#if defined(LAM_MINOR_VERSION)
minor = LAM_MINOR_VERSION;
#endif
#if defined(LAM_RELEASE_VERSION)
micro = LAM_RELEASE_VERSION;
#endif
#endif
/* SGI */
#if defined(SGI_MPI)
name = "SGI";
#endif
if (vendor_name) *vendor_name = name;
if (version_major) *version_major = major;
if (version_minor) *version_minor = minor;
if (version_micro) *version_micro = micro;
return 0;
}
/*
Local variables:
c-basic-offset: 2
indent-tabs-mode: nil
End:
*/
|