1 /* Author: Lisandro Dalcin */
2 /* Contact: dalcinl@gmail.com */
3
PyMPI_Get_vendor(const char ** vendor_name,int * version_major,int * version_minor,int * version_micro)4 static int PyMPI_Get_vendor(const char **vendor_name,
5 int *version_major,
6 int *version_minor,
7 int *version_micro)
8 {
9 const char *name = "unknown";
10 int major=0, minor=0, micro=0;
11
12 #if defined(I_MPI_VERSION)
13
14 name = "Intel MPI";
15 #if defined(I_MPI_NUMVERSION)
16 {int version = I_MPI_NUMVERSION/1000;
17 major = version/10000; version -= major*10000;
18 minor = version/100; version -= minor*100;
19 micro = version/1; version -= micro*1; }
20 #else
21 (void)sscanf(I_MPI_VERSION,"%d.%d Update %d",&major,&minor,µ);
22 #endif
23
24 #elif defined(PLATFORM_MPI)
25
26 name = "Platform MPI";
27 major = (PLATFORM_MPI>>24)&0xff;
28 minor = (PLATFORM_MPI>>16)&0xff;
29 micro = (PLATFORM_MPI>> 8)&0xff;
30 major = (major/16)*10+(major%16);
31
32 #elif defined(MSMPI_VER)
33
34 name = "Microsoft MPI";
35 major = MSMPI_VER >> 8;
36 minor = MSMPI_VER & 0xFF;
37
38 #elif defined(MVAPICH2_VERSION) || defined(MVAPICH2_NUMVERSION)
39
40 name = "MVAPICH2";
41 #if defined(MVAPICH2_NUMVERSION)
42 {int version = MVAPICH2_NUMVERSION/1000;
43 major = version/10000; version -= major*10000;
44 minor = version/100; version -= minor*100;
45 micro = version/1; version -= micro*1; }
46 #elif defined(MVAPICH2_VERSION)
47 (void)sscanf(MVAPICH2_VERSION,"%d.%d.%d",&major,&minor,µ);
48 #endif
49
50 #elif defined(MPICH_NAME) && (MPICH_NAME >= 3)
51
52 name = "MPICH";
53 #if defined(MPICH_NUMVERSION)
54 {int version = MPICH_NUMVERSION/1000;
55 major = version/10000; version -= major*10000;
56 minor = version/100; version -= minor*100;
57 micro = version/1; version -= micro*1; }
58 #elif defined(MPICH_VERSION)
59 (void)sscanf(MPICH_VERSION,"%d.%d.%d",&major,&minor,µ);
60 #endif
61
62 #elif defined(MPICH_NAME) && (MPICH_NAME == 2)
63
64 name = "MPICH2";
65 #if defined(MPICH2_NUMVERSION)
66 {int version = MPICH2_NUMVERSION/1000;
67 major = version/10000; version -= major*10000;
68 minor = version/100; version -= minor*100;
69 micro = version/1; version -= micro*1; }
70 #elif defined(MPICH2_VERSION)
71 (void)sscanf(MPICH2_VERSION,"%d.%d.%d",&major,&minor,µ);
72 #endif
73
74 #elif defined(MPICH_NAME) && (MPICH_NAME == 1)
75
76 name = "MPICH1";
77 #if defined(MPICH_VERSION)
78 (void)sscanf(MPICH_VERSION,"%d.%d.%d",&major,&minor,µ);
79 #endif
80
81 #elif defined(OPEN_MPI)
82
83 name = "Open MPI";
84 #if defined(OMPI_MAJOR_VERSION)
85 major = OMPI_MAJOR_VERSION;
86 #endif
87 #if defined(OMPI_MINOR_VERSION)
88 minor = OMPI_MINOR_VERSION;
89 #endif
90 #if defined(OMPI_RELEASE_VERSION)
91 micro = OMPI_RELEASE_VERSION;
92 #endif
93
94 #if defined(OMPI_MAJOR_VERSION)
95 #if OMPI_MAJOR_VERSION >= 10
96 name = "Spectrum MPI";
97 #endif
98 #endif
99
100 #elif defined(LAM_MPI)
101
102 name = "LAM/MPI";
103 #if defined(LAM_MAJOR_VERSION)
104 major = LAM_MAJOR_VERSION;
105 #endif
106 #if defined(LAM_MINOR_VERSION)
107 minor = LAM_MINOR_VERSION;
108 #endif
109 #if defined(LAM_RELEASE_VERSION)
110 micro = LAM_RELEASE_VERSION;
111 #endif
112
113 #endif
114
115 if (vendor_name) *vendor_name = name;
116 if (version_major) *version_major = major;
117 if (version_minor) *version_minor = minor;
118 if (version_micro) *version_micro = micro;
119
120 return 0;
121 }
122
123 /*
124 Local variables:
125 c-basic-offset: 2
126 indent-tabs-mode: nil
127 End:
128 */
129