Interface Documentation
Version: invalid
mpi_type_traits.hh
Go to the documentation of this file.
1 /*
2  @@@@@@@@ @@ @@@@@@ @@@@@@@@ @@
3  /@@///// /@@ @@////@@ @@////// /@@
4  /@@ /@@ @@@@@ @@ // /@@ /@@
5  /@@@@@@@ /@@ @@///@@/@@ /@@@@@@@@@/@@
6  /@@//// /@@/@@@@@@@/@@ ////////@@/@@
7  /@@ /@@/@@//// //@@ @@ /@@/@@
8  /@@ @@@//@@@@@@ //@@@@@@ @@@@@@@@ /@@
9  // /// ////// ////// //////// //
10 
11  Copyright (c) 2016, Triad National Security, LLC
12  All rights reserved.
13  */
14 #pragma once
15 
18 #include <flecsi-config.h>
19 
20 #if !defined(FLECSI_ENABLE_MPI)
21 #error FLECSI_ENABLE_MPI not defined! This file depends on MPI!
22 #endif
23 
24 #include <mpi.h>
25 
26 namespace flecsi {
27 namespace util {
28 
37 template<typename TYPE>
39 
40  inline static MPI_Datatype type() {
41  static MPI_Datatype data_type = MPI_DATATYPE_NULL;
42 
43  if(data_type == MPI_DATATYPE_NULL) {
44  MPI_Type_contiguous(sizeof(TYPE), MPI_BYTE, &data_type);
45  MPI_Type_commit(&data_type);
46  }
47  return data_type;
48  }
49 };
50 
51 template<>
52 struct mpi_typetraits<size_t> {
53  inline static MPI_Datatype type() {
54  if(sizeof(size_t) == 8) {
55  return MPI_UNSIGNED_LONG_LONG;
56  }
57  else {
58  return MPI_UNSIGNED;
59  } // if
60  }
61 }; // mpi_typetraits
62 
63 template<>
64 struct mpi_typetraits<char> {
65  inline static MPI_Datatype type() {
66  return MPI_SIGNED_CHAR;
67  }
68 }; // mpi_typetraits
69 
70 template<>
71 struct mpi_typetraits<unsigned char> {
72  inline static MPI_Datatype type() {
73  return MPI_UNSIGNED_CHAR;
74  }
75 }; // mpi_typetraits
76 
77 template<>
78 struct mpi_typetraits<short> {
79  inline static MPI_Datatype type() {
80  return MPI_SHORT;
81  }
82 }; // mpi_typetraits
83 
84 template<>
85 struct mpi_typetraits<unsigned short> {
86  inline static MPI_Datatype type() {
87  return MPI_UNSIGNED_SHORT;
88  }
89 }; // mpi_typetraits
90 
91 template<>
92 struct mpi_typetraits<int> {
93  inline static MPI_Datatype type() {
94  return MPI_INT;
95  }
96 }; // mpi_typetraits
97 
98 template<>
99 struct mpi_typetraits<unsigned> {
100  inline static MPI_Datatype type() {
101  return MPI_UNSIGNED;
102  }
103 }; // mpi_typetraits
104 
105 template<>
106 struct mpi_typetraits<long> {
107  inline static MPI_Datatype type() {
108  return MPI_LONG;
109  }
110 }; // mpi_typetraits
111 
112 template<>
113 struct mpi_typetraits<double> {
114  inline static MPI_Datatype type() {
115  return MPI_DOUBLE;
116  }
117 }; // mpi_typetraits
118 
119 template<>
120 struct mpi_typetraits<float> {
121  inline static MPI_Datatype type() {
122  return MPI_FLOAT;
123  }
124 }; // mpi_typetraits
125 
126 template<>
127 struct mpi_typetraits<long double> {
128  inline static MPI_Datatype type() {
129  return MPI_LONG_DOUBLE;
130  }
131 }; // mpi_typetraits
132 
133 } // namespace util
134 } // namespace flecsi
std::string type()
Definition: demangle.hh:44
Definition: mpi_type_traits.hh:38
Definition: control.hh:31