Chris@16
|
1 // Copyright (C) 2006 Douglas Gregor <doug.gregor -at- gmail.com>
|
Chris@16
|
2
|
Chris@16
|
3 // Use, modification and distribution is subject to the Boost Software
|
Chris@16
|
4 // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
|
Chris@16
|
5 // http://www.boost.org/LICENSE_1_0.txt)
|
Chris@16
|
6
|
Chris@16
|
7 /** @file config.hpp
|
Chris@16
|
8 *
|
Chris@16
|
9 * This header provides MPI configuration details that expose the
|
Chris@16
|
10 * capabilities of the underlying MPI implementation, and provides
|
Chris@16
|
11 * auto-linking support on Windows.
|
Chris@16
|
12 */
|
Chris@16
|
13 #ifndef BOOST_MPI_CONFIG_HPP
|
Chris@16
|
14 #define BOOST_MPI_CONFIG_HPP
|
Chris@16
|
15
|
Chris@16
|
16 /* Force MPICH not to define SEEK_SET, SEEK_CUR, and SEEK_END, which
|
Chris@16
|
17 conflict with the versions in <stdio.h> and <cstdio>. */
|
Chris@16
|
18 #define MPICH_IGNORE_CXX_SEEK 1
|
Chris@16
|
19
|
Chris@16
|
20 #include <mpi.h>
|
Chris@16
|
21 #include <boost/config.hpp>
|
Chris@16
|
22
|
Chris@16
|
23 /** @brief Define this macro to avoid expensice MPI_Pack/Unpack calls on
|
Chris@16
|
24 * homogeneous machines.
|
Chris@16
|
25 */
|
Chris@16
|
26 //#define BOOST_MPI_HOMOGENEOUS
|
Chris@16
|
27
|
Chris@16
|
28 // If this is an MPI-2 implementation, define configuration macros for
|
Chris@16
|
29 // the features we are interested in.
|
Chris@16
|
30 #if defined(MPI_VERSION) && MPI_VERSION >= 2
|
Chris@16
|
31 /** @brief Determine if the MPI implementation has support for memory
|
Chris@16
|
32 * allocation.
|
Chris@16
|
33 *
|
Chris@16
|
34 * This macro will be defined when the underlying MPI implementation
|
Chris@16
|
35 * has support for the MPI-2 memory allocation routines @c
|
Chris@16
|
36 * MPI_Alloc_mem and @c MPI_Free_mem. When defined, the @c allocator
|
Chris@16
|
37 * class template will provide Standard Library-compliant access to
|
Chris@16
|
38 * these memory-allocation routines.
|
Chris@16
|
39 */
|
Chris@16
|
40 # define BOOST_MPI_HAS_MEMORY_ALLOCATION
|
Chris@16
|
41
|
Chris@16
|
42 /** @brief Determine if the MPI implementation has supports initialization
|
Chris@16
|
43 * without command-line arguments.
|
Chris@16
|
44 *
|
Chris@16
|
45 * This macro will be defined when the underlying implementation
|
Chris@16
|
46 * supports initialization of MPI without passing along command-line
|
Chris@16
|
47 * arguments, e.g., @c MPI_Init(NULL, NULL). When defined, the @c
|
Chris@16
|
48 * environment class will provide a default constructor. This macro is
|
Chris@16
|
49 * always defined for MPI-2 implementations. */
|
Chris@16
|
50 # define BOOST_MPI_HAS_NOARG_INITIALIZATION
|
Chris@16
|
51 #else
|
Chris@16
|
52 // If this is an MPI-1.x implementation, no arg initialization for
|
Chris@16
|
53 // mpi environement could still be available, but not mandatory.
|
Chris@16
|
54 // Undef this if no arg init is available:
|
Chris@16
|
55 //# define BOOST_MPI_HAS_NOARG_INITIALIZATION
|
Chris@16
|
56 #endif
|
Chris@16
|
57
|
Chris@16
|
58 #if defined(MPIAPI)
|
Chris@16
|
59 # define BOOST_MPI_CALLING_CONVENTION MPIAPI
|
Chris@16
|
60 #else
|
Chris@16
|
61 /** @brief Specifies the calling convention that will be used for callbacks
|
Chris@16
|
62 * from the underlying C MPI.
|
Chris@16
|
63 *
|
Chris@16
|
64 * This is a Windows-specific macro, which will be used internally to state
|
Chris@16
|
65 * the calling convention of any function that is to be used as a callback
|
Chris@16
|
66 * from MPI. For example, the internally-defined functions that are used in
|
Chris@16
|
67 * a call to @c MPI_Op_create. This macro is likely only to be useful to
|
Chris@16
|
68 * users that wish to bypass Boost.MPI, registering their own callbacks in
|
Chris@16
|
69 * certain cases, e.g., through @c MPI_Op_create.
|
Chris@16
|
70 */
|
Chris@16
|
71 # define BOOST_MPI_CALLING_CONVENTION
|
Chris@16
|
72 #endif
|
Chris@16
|
73
|
Chris@16
|
74 #if defined(LAM_MPI)
|
Chris@16
|
75 // Configuration for LAM/MPI
|
Chris@16
|
76 # define BOOST_MPI_HAS_MEMORY_ALLOCATION
|
Chris@16
|
77 # define BOOST_MPI_HAS_NOARG_INITIALIZATION
|
Chris@16
|
78 #elif defined(MPICH_NAME)
|
Chris@16
|
79 // Configuration for MPICH
|
Chris@16
|
80 #endif
|
Chris@16
|
81
|
Chris@16
|
82 /*****************************************************************************
|
Chris@16
|
83 * *
|
Chris@16
|
84 * DLL import/export options *
|
Chris@16
|
85 * *
|
Chris@16
|
86 *****************************************************************************/
|
Chris@16
|
87
|
Chris@101
|
88 #if (defined(BOOST_MPI_DYN_LINK) || defined(BOOST_ALL_DYN_LINK)) && !defined(BOOST_MPI_STATIC_LINK)
|
Chris@16
|
89 # if defined(BOOST_MPI_SOURCE)
|
Chris@101
|
90 # define BOOST_MPI_DECL BOOST_SYMBOL_EXPORT
|
Chris@16
|
91 # define BOOST_MPI_BUILD_DLL
|
Chris@16
|
92 # else
|
Chris@101
|
93 # define BOOST_MPI_DECL BOOST_SYMBOL_IMPORT
|
Chris@16
|
94 # endif
|
Chris@16
|
95 #endif
|
Chris@16
|
96
|
Chris@16
|
97 #ifndef BOOST_MPI_DECL
|
Chris@16
|
98 # define BOOST_MPI_DECL
|
Chris@16
|
99 #endif
|
Chris@16
|
100
|
Chris@16
|
101 #if !defined(BOOST_MPI_NO_LIB) && !defined(BOOST_MPI_SOURCE) && !defined(BOOST_ALL_NO_LIB) && defined(__cplusplus)
|
Chris@16
|
102 # define BOOST_LIB_NAME boost_mpi
|
Chris@16
|
103 # if defined(BOOST_MPI_DYN_LINK) || defined(BOOST_ALL_DYN_LINK)
|
Chris@16
|
104 # define BOOST_DYN_LINK
|
Chris@16
|
105 # endif
|
Chris@16
|
106 # ifdef BOOST_MPI_DIAG
|
Chris@16
|
107 # define BOOST_LIB_DIAGNOSTIC
|
Chris@16
|
108 # endif
|
Chris@16
|
109 # include <boost/config/auto_link.hpp>
|
Chris@16
|
110 #endif
|
Chris@16
|
111
|
Chris@16
|
112 #endif // BOOST_MPI_CONFIG_HPP
|