annotate src/fftw-3.3.5/mpi/fftw3-mpi.h @ 169:223a55898ab9 tip default

Add null config files
author Chris Cannam <cannam@all-day-breakfast.com>
date Mon, 02 Mar 2020 14:03:47 +0000
parents 7867fa7e1b6b
children
rev   line source
cannam@127 1 /*
cannam@127 2 * Copyright (c) 2003, 2007-14 Matteo Frigo
cannam@127 3 * Copyright (c) 2003, 2007-14 Massachusetts Institute of Technology
cannam@127 4 *
cannam@127 5 * The following statement of license applies *only* to this header file,
cannam@127 6 * and *not* to the other files distributed with FFTW or derived therefrom:
cannam@127 7 *
cannam@127 8 * Redistribution and use in source and binary forms, with or without
cannam@127 9 * modification, are permitted provided that the following conditions
cannam@127 10 * are met:
cannam@127 11 *
cannam@127 12 * 1. Redistributions of source code must retain the above copyright
cannam@127 13 * notice, this list of conditions and the following disclaimer.
cannam@127 14 *
cannam@127 15 * 2. Redistributions in binary form must reproduce the above copyright
cannam@127 16 * notice, this list of conditions and the following disclaimer in the
cannam@127 17 * documentation and/or other materials provided with the distribution.
cannam@127 18 *
cannam@127 19 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
cannam@127 20 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
cannam@127 21 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
cannam@127 22 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
cannam@127 23 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
cannam@127 24 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
cannam@127 25 * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
cannam@127 26 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
cannam@127 27 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
cannam@127 28 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
cannam@127 29 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
cannam@127 30 */
cannam@127 31
cannam@127 32 /***************************** NOTE TO USERS *********************************
cannam@127 33 *
cannam@127 34 * THIS IS A HEADER FILE, NOT A MANUAL
cannam@127 35 *
cannam@127 36 * If you want to know how to use FFTW, please read the manual,
cannam@127 37 * online at http://www.fftw.org/doc/ and also included with FFTW.
cannam@127 38 * For a quick start, see the manual's tutorial section.
cannam@127 39 *
cannam@127 40 * (Reading header files to learn how to use a library is a habit
cannam@127 41 * stemming from code lacking a proper manual. Arguably, it's a
cannam@127 42 * *bad* habit in most cases, because header files can contain
cannam@127 43 * interfaces that are not part of the public, stable API.)
cannam@127 44 *
cannam@127 45 ****************************************************************************/
cannam@127 46
cannam@127 47 #ifndef FFTW3_MPI_H
cannam@127 48 #define FFTW3_MPI_H
cannam@127 49
cannam@127 50 #include "fftw3.h"
cannam@127 51 #include <mpi.h>
cannam@127 52
cannam@127 53 #ifdef __cplusplus
cannam@127 54 extern "C"
cannam@127 55 {
cannam@127 56 #endif /* __cplusplus */
cannam@127 57
cannam@127 58 struct fftw_mpi_ddim_do_not_use_me {
cannam@127 59 ptrdiff_t n; /* dimension size */
cannam@127 60 ptrdiff_t ib; /* input block */
cannam@127 61 ptrdiff_t ob; /* output block */
cannam@127 62 };
cannam@127 63
cannam@127 64 /*
cannam@127 65 huge second-order macro that defines prototypes for all API
cannam@127 66 functions. We expand this macro for each supported precision
cannam@127 67
cannam@127 68 XM: name-mangling macro (MPI)
cannam@127 69 X: name-mangling macro (serial)
cannam@127 70 R: real data type
cannam@127 71 C: complex data type
cannam@127 72 */
cannam@127 73
cannam@127 74 #define FFTW_MPI_DEFINE_API(XM, X, R, C) \
cannam@127 75 \
cannam@127 76 typedef struct fftw_mpi_ddim_do_not_use_me XM(ddim); \
cannam@127 77 \
cannam@127 78 FFTW_EXTERN void XM(init)(void); \
cannam@127 79 FFTW_EXTERN void XM(cleanup)(void); \
cannam@127 80 \
cannam@127 81 FFTW_EXTERN ptrdiff_t XM(local_size_many_transposed) \
cannam@127 82 (int rnk, const ptrdiff_t *n, ptrdiff_t howmany, \
cannam@127 83 ptrdiff_t block0, ptrdiff_t block1, MPI_Comm comm, \
cannam@127 84 ptrdiff_t *local_n0, ptrdiff_t *local_0_start, \
cannam@127 85 ptrdiff_t *local_n1, ptrdiff_t *local_1_start); \
cannam@127 86 FFTW_EXTERN ptrdiff_t XM(local_size_many) \
cannam@127 87 (int rnk, const ptrdiff_t *n, ptrdiff_t howmany, \
cannam@127 88 ptrdiff_t block0, MPI_Comm comm, \
cannam@127 89 ptrdiff_t *local_n0, ptrdiff_t *local_0_start); \
cannam@127 90 FFTW_EXTERN ptrdiff_t XM(local_size_transposed) \
cannam@127 91 (int rnk, const ptrdiff_t *n, MPI_Comm comm, \
cannam@127 92 ptrdiff_t *local_n0, ptrdiff_t *local_0_start, \
cannam@127 93 ptrdiff_t *local_n1, ptrdiff_t *local_1_start); \
cannam@127 94 FFTW_EXTERN ptrdiff_t XM(local_size) \
cannam@127 95 (int rnk, const ptrdiff_t *n, MPI_Comm comm, \
cannam@127 96 ptrdiff_t *local_n0, ptrdiff_t *local_0_start); \
cannam@127 97 FFTW_EXTERN ptrdiff_t XM(local_size_many_1d)( \
cannam@127 98 ptrdiff_t n0, ptrdiff_t howmany, \
cannam@127 99 MPI_Comm comm, int sign, unsigned flags, \
cannam@127 100 ptrdiff_t *local_ni, ptrdiff_t *local_i_start, \
cannam@127 101 ptrdiff_t *local_no, ptrdiff_t *local_o_start); \
cannam@127 102 FFTW_EXTERN ptrdiff_t XM(local_size_1d)( \
cannam@127 103 ptrdiff_t n0, MPI_Comm comm, int sign, unsigned flags, \
cannam@127 104 ptrdiff_t *local_ni, ptrdiff_t *local_i_start, \
cannam@127 105 ptrdiff_t *local_no, ptrdiff_t *local_o_start); \
cannam@127 106 FFTW_EXTERN ptrdiff_t XM(local_size_2d)( \
cannam@127 107 ptrdiff_t n0, ptrdiff_t n1, MPI_Comm comm, \
cannam@127 108 ptrdiff_t *local_n0, ptrdiff_t *local_0_start); \
cannam@127 109 FFTW_EXTERN ptrdiff_t XM(local_size_2d_transposed)( \
cannam@127 110 ptrdiff_t n0, ptrdiff_t n1, MPI_Comm comm, \
cannam@127 111 ptrdiff_t *local_n0, ptrdiff_t *local_0_start, \
cannam@127 112 ptrdiff_t *local_n1, ptrdiff_t *local_1_start); \
cannam@127 113 FFTW_EXTERN ptrdiff_t XM(local_size_3d)( \
cannam@127 114 ptrdiff_t n0, ptrdiff_t n1, ptrdiff_t n2, MPI_Comm comm, \
cannam@127 115 ptrdiff_t *local_n0, ptrdiff_t *local_0_start); \
cannam@127 116 FFTW_EXTERN ptrdiff_t XM(local_size_3d_transposed)( \
cannam@127 117 ptrdiff_t n0, ptrdiff_t n1, ptrdiff_t n2, MPI_Comm comm, \
cannam@127 118 ptrdiff_t *local_n0, ptrdiff_t *local_0_start, \
cannam@127 119 ptrdiff_t *local_n1, ptrdiff_t *local_1_start); \
cannam@127 120 \
cannam@127 121 FFTW_EXTERN X(plan) XM(plan_many_transpose) \
cannam@127 122 (ptrdiff_t n0, ptrdiff_t n1, \
cannam@127 123 ptrdiff_t howmany, ptrdiff_t block0, ptrdiff_t block1, \
cannam@127 124 R *in, R *out, MPI_Comm comm, unsigned flags); \
cannam@127 125 FFTW_EXTERN X(plan) XM(plan_transpose) \
cannam@127 126 (ptrdiff_t n0, ptrdiff_t n1, \
cannam@127 127 R *in, R *out, MPI_Comm comm, unsigned flags); \
cannam@127 128 \
cannam@127 129 FFTW_EXTERN X(plan) XM(plan_many_dft) \
cannam@127 130 (int rnk, const ptrdiff_t *n, ptrdiff_t howmany, \
cannam@127 131 ptrdiff_t block, ptrdiff_t tblock, C *in, C *out, \
cannam@127 132 MPI_Comm comm, int sign, unsigned flags); \
cannam@127 133 FFTW_EXTERN X(plan) XM(plan_dft) \
cannam@127 134 (int rnk, const ptrdiff_t *n, C *in, C *out, \
cannam@127 135 MPI_Comm comm, int sign, unsigned flags); \
cannam@127 136 FFTW_EXTERN X(plan) XM(plan_dft_1d) \
cannam@127 137 (ptrdiff_t n0, C *in, C *out, \
cannam@127 138 MPI_Comm comm, int sign, unsigned flags); \
cannam@127 139 FFTW_EXTERN X(plan) XM(plan_dft_2d) \
cannam@127 140 (ptrdiff_t n0, ptrdiff_t n1, C *in, C *out, \
cannam@127 141 MPI_Comm comm, int sign, unsigned flags); \
cannam@127 142 FFTW_EXTERN X(plan) XM(plan_dft_3d) \
cannam@127 143 (ptrdiff_t n0, ptrdiff_t n1, ptrdiff_t n2, C *in, C *out, \
cannam@127 144 MPI_Comm comm, int sign, unsigned flags); \
cannam@127 145 \
cannam@127 146 FFTW_EXTERN X(plan) XM(plan_many_r2r) \
cannam@127 147 (int rnk, const ptrdiff_t *n, ptrdiff_t howmany, \
cannam@127 148 ptrdiff_t iblock, ptrdiff_t oblock, R *in, R *out, \
cannam@127 149 MPI_Comm comm, const X(r2r_kind) *kind, unsigned flags); \
cannam@127 150 FFTW_EXTERN X(plan) XM(plan_r2r) \
cannam@127 151 (int rnk, const ptrdiff_t *n, R *in, R *out, \
cannam@127 152 MPI_Comm comm, const X(r2r_kind) *kind, unsigned flags); \
cannam@127 153 FFTW_EXTERN X(plan) XM(plan_r2r_2d) \
cannam@127 154 (ptrdiff_t n0, ptrdiff_t n1, R *in, R *out, MPI_Comm comm, \
cannam@127 155 X(r2r_kind) kind0, X(r2r_kind) kind1, unsigned flags); \
cannam@127 156 FFTW_EXTERN X(plan) XM(plan_r2r_3d) \
cannam@127 157 (ptrdiff_t n0, ptrdiff_t n1, ptrdiff_t n2, \
cannam@127 158 R *in, R *out, MPI_Comm comm, X(r2r_kind) kind0, \
cannam@127 159 X(r2r_kind) kind1, X(r2r_kind) kind2, unsigned flags); \
cannam@127 160 \
cannam@127 161 FFTW_EXTERN X(plan) XM(plan_many_dft_r2c) \
cannam@127 162 (int rnk, const ptrdiff_t *n, ptrdiff_t howmany, \
cannam@127 163 ptrdiff_t iblock, ptrdiff_t oblock, R *in, C *out, \
cannam@127 164 MPI_Comm comm, unsigned flags); \
cannam@127 165 FFTW_EXTERN X(plan) XM(plan_dft_r2c) \
cannam@127 166 (int rnk, const ptrdiff_t *n, R *in, C *out, \
cannam@127 167 MPI_Comm comm, unsigned flags); \
cannam@127 168 FFTW_EXTERN X(plan) XM(plan_dft_r2c_2d) \
cannam@127 169 (ptrdiff_t n0, ptrdiff_t n1, R *in, C *out, \
cannam@127 170 MPI_Comm comm, unsigned flags); \
cannam@127 171 FFTW_EXTERN X(plan) XM(plan_dft_r2c_3d) \
cannam@127 172 (ptrdiff_t n0, ptrdiff_t n1, ptrdiff_t n2, R *in, C *out, \
cannam@127 173 MPI_Comm comm, unsigned flags); \
cannam@127 174 \
cannam@127 175 FFTW_EXTERN X(plan) XM(plan_many_dft_c2r) \
cannam@127 176 (int rnk, const ptrdiff_t *n, ptrdiff_t howmany, \
cannam@127 177 ptrdiff_t iblock, ptrdiff_t oblock, C *in, R *out, \
cannam@127 178 MPI_Comm comm, unsigned flags); \
cannam@127 179 FFTW_EXTERN X(plan) XM(plan_dft_c2r) \
cannam@127 180 (int rnk, const ptrdiff_t *n, C *in, R *out, \
cannam@127 181 MPI_Comm comm, unsigned flags); \
cannam@127 182 FFTW_EXTERN X(plan) XM(plan_dft_c2r_2d) \
cannam@127 183 (ptrdiff_t n0, ptrdiff_t n1, C *in, R *out, \
cannam@127 184 MPI_Comm comm, unsigned flags); \
cannam@127 185 FFTW_EXTERN X(plan) XM(plan_dft_c2r_3d) \
cannam@127 186 (ptrdiff_t n0, ptrdiff_t n1, ptrdiff_t n2, C *in, R *out, \
cannam@127 187 MPI_Comm comm, unsigned flags); \
cannam@127 188 \
cannam@127 189 FFTW_EXTERN void XM(gather_wisdom)(MPI_Comm comm_); \
cannam@127 190 FFTW_EXTERN void XM(broadcast_wisdom)(MPI_Comm comm_); \
cannam@127 191 \
cannam@127 192 FFTW_EXTERN void XM(execute_dft)(X(plan) p, C *in, C *out); \
cannam@127 193 FFTW_EXTERN void XM(execute_dft_r2c)(X(plan) p, R *in, C *out); \
cannam@127 194 FFTW_EXTERN void XM(execute_dft_c2r)(X(plan) p, C *in, R *out); \
cannam@127 195 FFTW_EXTERN void XM(execute_r2r)(X(plan) p, R *in, R *out);
cannam@127 196
cannam@127 197
cannam@127 198
cannam@127 199 /* end of FFTW_MPI_DEFINE_API macro */
cannam@127 200
cannam@127 201 #define FFTW_MPI_MANGLE_DOUBLE(name) FFTW_MANGLE_DOUBLE(FFTW_CONCAT(mpi_,name))
cannam@127 202 #define FFTW_MPI_MANGLE_FLOAT(name) FFTW_MANGLE_FLOAT(FFTW_CONCAT(mpi_,name))
cannam@127 203 #define FFTW_MPI_MANGLE_LONG_DOUBLE(name) FFTW_MANGLE_LONG_DOUBLE(FFTW_CONCAT(mpi_,name))
cannam@127 204
cannam@127 205 FFTW_MPI_DEFINE_API(FFTW_MPI_MANGLE_DOUBLE, FFTW_MANGLE_DOUBLE, double, fftw_complex)
cannam@127 206 FFTW_MPI_DEFINE_API(FFTW_MPI_MANGLE_FLOAT, FFTW_MANGLE_FLOAT, float, fftwf_complex)
cannam@127 207 FFTW_MPI_DEFINE_API(FFTW_MPI_MANGLE_LONG_DOUBLE, FFTW_MANGLE_LONG_DOUBLE, long double, fftwl_complex)
cannam@127 208
cannam@127 209 #define FFTW_MPI_DEFAULT_BLOCK (0)
cannam@127 210
cannam@127 211 /* MPI-specific flags */
cannam@127 212 #define FFTW_MPI_SCRAMBLED_IN (1U << 27)
cannam@127 213 #define FFTW_MPI_SCRAMBLED_OUT (1U << 28)
cannam@127 214 #define FFTW_MPI_TRANSPOSED_IN (1U << 29)
cannam@127 215 #define FFTW_MPI_TRANSPOSED_OUT (1U << 30)
cannam@127 216
cannam@127 217 #ifdef __cplusplus
cannam@127 218 } /* extern "C" */
cannam@127 219 #endif /* __cplusplus */
cannam@127 220
cannam@127 221 #endif /* FFTW3_MPI_H */