annotate src/fftw-3.3.8/doc/html/MPI-Plan-Creation.html @ 83:ae30d91d2ffe

Replace these with versions built using an older toolset (so as to avoid ABI compatibilities when linking on Ubuntu 14.04 for packaging purposes)
author Chris Cannam
date Fri, 07 Feb 2020 11:51:13 +0000
parents d0c2a83c1364
children
rev   line source
Chris@82 1 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
Chris@82 2 <html>
Chris@82 3 <!-- This manual is for FFTW
Chris@82 4 (version 3.3.8, 24 May 2018).
Chris@82 5
Chris@82 6 Copyright (C) 2003 Matteo Frigo.
Chris@82 7
Chris@82 8 Copyright (C) 2003 Massachusetts Institute of Technology.
Chris@82 9
Chris@82 10 Permission is granted to make and distribute verbatim copies of this
Chris@82 11 manual provided the copyright notice and this permission notice are
Chris@82 12 preserved on all copies.
Chris@82 13
Chris@82 14 Permission is granted to copy and distribute modified versions of this
Chris@82 15 manual under the conditions for verbatim copying, provided that the
Chris@82 16 entire resulting derived work is distributed under the terms of a
Chris@82 17 permission notice identical to this one.
Chris@82 18
Chris@82 19 Permission is granted to copy and distribute translations of this manual
Chris@82 20 into another language, under the above conditions for modified versions,
Chris@82 21 except that this permission notice may be stated in a translation
Chris@82 22 approved by the Free Software Foundation. -->
Chris@82 23 <!-- Created by GNU Texinfo 6.3, http://www.gnu.org/software/texinfo/ -->
Chris@82 24 <head>
Chris@82 25 <title>FFTW 3.3.8: MPI Plan Creation</title>
Chris@82 26
Chris@82 27 <meta name="description" content="FFTW 3.3.8: MPI Plan Creation">
Chris@82 28 <meta name="keywords" content="FFTW 3.3.8: MPI Plan Creation">
Chris@82 29 <meta name="resource-type" content="document">
Chris@82 30 <meta name="distribution" content="global">
Chris@82 31 <meta name="Generator" content="makeinfo">
Chris@82 32 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
Chris@82 33 <link href="index.html#Top" rel="start" title="Top">
Chris@82 34 <link href="Concept-Index.html#Concept-Index" rel="index" title="Concept Index">
Chris@82 35 <link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
Chris@82 36 <link href="FFTW-MPI-Reference.html#FFTW-MPI-Reference" rel="up" title="FFTW MPI Reference">
Chris@82 37 <link href="MPI-Wisdom-Communication.html#MPI-Wisdom-Communication" rel="next" title="MPI Wisdom Communication">
Chris@82 38 <link href="MPI-Data-Distribution-Functions.html#MPI-Data-Distribution-Functions" rel="prev" title="MPI Data Distribution Functions">
Chris@82 39 <style type="text/css">
Chris@82 40 <!--
Chris@82 41 a.summary-letter {text-decoration: none}
Chris@82 42 blockquote.indentedblock {margin-right: 0em}
Chris@82 43 blockquote.smallindentedblock {margin-right: 0em; font-size: smaller}
Chris@82 44 blockquote.smallquotation {font-size: smaller}
Chris@82 45 div.display {margin-left: 3.2em}
Chris@82 46 div.example {margin-left: 3.2em}
Chris@82 47 div.lisp {margin-left: 3.2em}
Chris@82 48 div.smalldisplay {margin-left: 3.2em}
Chris@82 49 div.smallexample {margin-left: 3.2em}
Chris@82 50 div.smalllisp {margin-left: 3.2em}
Chris@82 51 kbd {font-style: oblique}
Chris@82 52 pre.display {font-family: inherit}
Chris@82 53 pre.format {font-family: inherit}
Chris@82 54 pre.menu-comment {font-family: serif}
Chris@82 55 pre.menu-preformatted {font-family: serif}
Chris@82 56 pre.smalldisplay {font-family: inherit; font-size: smaller}
Chris@82 57 pre.smallexample {font-size: smaller}
Chris@82 58 pre.smallformat {font-family: inherit; font-size: smaller}
Chris@82 59 pre.smalllisp {font-size: smaller}
Chris@82 60 span.nolinebreak {white-space: nowrap}
Chris@82 61 span.roman {font-family: initial; font-weight: normal}
Chris@82 62 span.sansserif {font-family: sans-serif; font-weight: normal}
Chris@82 63 ul.no-bullet {list-style: none}
Chris@82 64 -->
Chris@82 65 </style>
Chris@82 66
Chris@82 67
Chris@82 68 </head>
Chris@82 69
Chris@82 70 <body lang="en">
Chris@82 71 <a name="MPI-Plan-Creation"></a>
Chris@82 72 <div class="header">
Chris@82 73 <p>
Chris@82 74 Next: <a href="MPI-Wisdom-Communication.html#MPI-Wisdom-Communication" accesskey="n" rel="next">MPI Wisdom Communication</a>, Previous: <a href="MPI-Data-Distribution-Functions.html#MPI-Data-Distribution-Functions" accesskey="p" rel="prev">MPI Data Distribution Functions</a>, Up: <a href="FFTW-MPI-Reference.html#FFTW-MPI-Reference" accesskey="u" rel="up">FFTW MPI Reference</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Concept-Index.html#Concept-Index" title="Index" rel="index">Index</a>]</p>
Chris@82 75 </div>
Chris@82 76 <hr>
Chris@82 77 <a name="MPI-Plan-Creation-1"></a>
Chris@82 78 <h4 class="subsection">6.12.5 MPI Plan Creation</h4>
Chris@82 79
Chris@82 80 <a name="Complex_002ddata-MPI-DFTs"></a>
Chris@82 81 <h4 class="subsubheading">Complex-data MPI DFTs</h4>
Chris@82 82
Chris@82 83 <p>Plans for complex-data DFTs (see <a href="2d-MPI-example.html#g_t2d-MPI-example">2d MPI example</a>) are created by:
Chris@82 84 </p>
Chris@82 85 <a name="index-fftw_005fmpi_005fplan_005fdft_005f1d"></a>
Chris@82 86 <a name="index-fftw_005fmpi_005fplan_005fdft_005f2d-1"></a>
Chris@82 87 <a name="index-fftw_005fmpi_005fplan_005fdft_005f3d"></a>
Chris@82 88 <a name="index-fftw_005fmpi_005fplan_005fdft"></a>
Chris@82 89 <a name="index-fftw_005fmpi_005fplan_005fmany_005fdft"></a>
Chris@82 90 <div class="example">
Chris@82 91 <pre class="example">fftw_plan fftw_mpi_plan_dft_1d(ptrdiff_t n0, fftw_complex *in, fftw_complex *out,
Chris@82 92 MPI_Comm comm, int sign, unsigned flags);
Chris@82 93 fftw_plan fftw_mpi_plan_dft_2d(ptrdiff_t n0, ptrdiff_t n1,
Chris@82 94 fftw_complex *in, fftw_complex *out,
Chris@82 95 MPI_Comm comm, int sign, unsigned flags);
Chris@82 96 fftw_plan fftw_mpi_plan_dft_3d(ptrdiff_t n0, ptrdiff_t n1, ptrdiff_t n2,
Chris@82 97 fftw_complex *in, fftw_complex *out,
Chris@82 98 MPI_Comm comm, int sign, unsigned flags);
Chris@82 99 fftw_plan fftw_mpi_plan_dft(int rnk, const ptrdiff_t *n,
Chris@82 100 fftw_complex *in, fftw_complex *out,
Chris@82 101 MPI_Comm comm, int sign, unsigned flags);
Chris@82 102 fftw_plan fftw_mpi_plan_many_dft(int rnk, const ptrdiff_t *n,
Chris@82 103 ptrdiff_t howmany, ptrdiff_t block, ptrdiff_t tblock,
Chris@82 104 fftw_complex *in, fftw_complex *out,
Chris@82 105 MPI_Comm comm, int sign, unsigned flags);
Chris@82 106 </pre></div>
Chris@82 107
Chris@82 108 <a name="index-MPI-communicator-2"></a>
Chris@82 109 <a name="index-collective-function-4"></a>
Chris@82 110 <p>These are similar to their serial counterparts (see <a href="Complex-DFTs.html#Complex-DFTs">Complex DFTs</a>)
Chris@82 111 in specifying the dimensions, sign, and flags of the transform. The
Chris@82 112 <code>comm</code> argument gives an MPI communicator that specifies the set
Chris@82 113 of processes to participate in the transform; plan creation is a
Chris@82 114 collective function that must be called for all processes in the
Chris@82 115 communicator. The <code>in</code> and <code>out</code> pointers refer only to a
Chris@82 116 portion of the overall transform data (see <a href="MPI-Data-Distribution.html#MPI-Data-Distribution">MPI Data Distribution</a>)
Chris@82 117 as specified by the &lsquo;<samp>local_size</samp>&rsquo; functions in the previous
Chris@82 118 section. Unless <code>flags</code> contains <code>FFTW_ESTIMATE</code>, these
Chris@82 119 arrays are overwritten during plan creation as for the serial
Chris@82 120 interface. For multi-dimensional transforms, any dimensions <code>&gt;
Chris@82 121 1</code> are supported; for one-dimensional transforms, only composite
Chris@82 122 (non-prime) <code>n0</code> are currently supported (unlike the serial
Chris@82 123 FFTW). Requesting an unsupported transform size will yield a
Chris@82 124 <code>NULL</code> plan. (As in the serial interface, highly composite sizes
Chris@82 125 generally yield the best performance.)
Chris@82 126 </p>
Chris@82 127 <a name="index-advanced-interface-6"></a>
Chris@82 128 <a name="index-FFTW_005fMPI_005fDEFAULT_005fBLOCK-2"></a>
Chris@82 129 <a name="index-stride-3"></a>
Chris@82 130 <p>The advanced-interface <code>fftw_mpi_plan_many_dft</code> additionally
Chris@82 131 allows you to specify the block sizes for the first dimension
Chris@82 132 (<code>block</code>) of the n<sub>0</sub>&nbsp;&times;&nbsp;n<sub>1</sub>&nbsp;&times;&nbsp;n<sub>2</sub>&nbsp;&times;&nbsp;&hellip;&nbsp;&times;&nbsp;n<sub>d-1</sub>
Chris@82 133 input data and the first dimension
Chris@82 134 (<code>tblock</code>) of the n<sub>1</sub>&nbsp;&times;&nbsp;n<sub>0</sub>&nbsp;&times;&nbsp;n<sub>2</sub>&nbsp;&times;&hellip;&times;&nbsp;n<sub>d-1</sub>
Chris@82 135 transposed data (at intermediate
Chris@82 136 steps of the transform, and for the output if
Chris@82 137 <code>FFTW_TRANSPOSED_OUT</code> is specified in <code>flags</code>). These must
Chris@82 138 be the same block sizes as were passed to the corresponding
Chris@82 139 &lsquo;<samp>local_size</samp>&rsquo; function; you can pass <code>FFTW_MPI_DEFAULT_BLOCK</code>
Chris@82 140 to use FFTW&rsquo;s default block size as in the basic interface. Also, the
Chris@82 141 <code>howmany</code> parameter specifies that the transform is of contiguous
Chris@82 142 <code>howmany</code>-tuples rather than individual complex numbers; this
Chris@82 143 corresponds to the same parameter in the serial advanced interface
Chris@82 144 (see <a href="Advanced-Complex-DFTs.html#Advanced-Complex-DFTs">Advanced Complex DFTs</a>) with <code>stride = howmany</code> and
Chris@82 145 <code>dist = 1</code>.
Chris@82 146 </p>
Chris@82 147 <a name="MPI-flags"></a>
Chris@82 148 <h4 class="subsubheading">MPI flags</h4>
Chris@82 149
Chris@82 150 <p>The <code>flags</code> can be any of those for the serial FFTW
Chris@82 151 (see <a href="Planner-Flags.html#Planner-Flags">Planner Flags</a>), and in addition may include one or more of
Chris@82 152 the following MPI-specific flags, which improve performance at the
Chris@82 153 cost of changing the output or input data formats.
Chris@82 154 </p>
Chris@82 155 <ul>
Chris@82 156 <li> <a name="index-FFTW_005fMPI_005fSCRAMBLED_005fOUT-2"></a>
Chris@82 157 <a name="index-FFTW_005fMPI_005fSCRAMBLED_005fIN-2"></a>
Chris@82 158 <code>FFTW_MPI_SCRAMBLED_OUT</code>, <code>FFTW_MPI_SCRAMBLED_IN</code>: valid for
Chris@82 159 1d transforms only, these flags indicate that the output/input of the
Chris@82 160 transform are in an undocumented &ldquo;scrambled&rdquo; order. A forward
Chris@82 161 <code>FFTW_MPI_SCRAMBLED_OUT</code> transform can be inverted by a backward
Chris@82 162 <code>FFTW_MPI_SCRAMBLED_IN</code> (times the usual 1/<i>N</i> normalization).
Chris@82 163 See <a href="One_002ddimensional-distributions.html#One_002ddimensional-distributions">One-dimensional distributions</a>.
Chris@82 164
Chris@82 165 </li><li> <a name="index-FFTW_005fMPI_005fTRANSPOSED_005fOUT-2"></a>
Chris@82 166 <a name="index-FFTW_005fMPI_005fTRANSPOSED_005fIN-2"></a>
Chris@82 167 <code>FFTW_MPI_TRANSPOSED_OUT</code>, <code>FFTW_MPI_TRANSPOSED_IN</code>: valid
Chris@82 168 for multidimensional (<code>rnk &gt; 1</code>) transforms only, these flags
Chris@82 169 specify that the output or input of an n<sub>0</sub>&nbsp;&times;&nbsp;n<sub>1</sub>&nbsp;&times;&nbsp;n<sub>2</sub>&nbsp;&times;&nbsp;&hellip;&nbsp;&times;&nbsp;n<sub>d-1</sub>
Chris@82 170 transform is
Chris@82 171 transposed to n<sub>1</sub>&nbsp;&times;&nbsp;n<sub>0</sub>&nbsp;&times;&nbsp;n<sub>2</sub>&nbsp;&times;&hellip;&times;&nbsp;n<sub>d-1</sub>
Chris@82 172 . See <a href="Transposed-distributions.html#Transposed-distributions">Transposed distributions</a>.
Chris@82 173
Chris@82 174 </li></ul>
Chris@82 175
Chris@82 176 <a name="Real_002ddata-MPI-DFTs"></a>
Chris@82 177 <h4 class="subsubheading">Real-data MPI DFTs</h4>
Chris@82 178
Chris@82 179 <a name="index-r2c-4"></a>
Chris@82 180 <p>Plans for real-input/output (r2c/c2r) DFTs (see <a href="Multi_002ddimensional-MPI-DFTs-of-Real-Data.html#Multi_002ddimensional-MPI-DFTs-of-Real-Data">Multi-dimensional MPI DFTs of Real Data</a>) are created by:
Chris@82 181 </p>
Chris@82 182 <a name="index-fftw_005fmpi_005fplan_005fdft_005fr2c_005f2d"></a>
Chris@82 183 <a name="index-fftw_005fmpi_005fplan_005fdft_005fr2c_005f2d-1"></a>
Chris@82 184 <a name="index-fftw_005fmpi_005fplan_005fdft_005fr2c_005f3d"></a>
Chris@82 185 <a name="index-fftw_005fmpi_005fplan_005fdft_005fr2c"></a>
Chris@82 186 <a name="index-fftw_005fmpi_005fplan_005fdft_005fc2r_005f2d"></a>
Chris@82 187 <a name="index-fftw_005fmpi_005fplan_005fdft_005fc2r_005f2d-1"></a>
Chris@82 188 <a name="index-fftw_005fmpi_005fplan_005fdft_005fc2r_005f3d"></a>
Chris@82 189 <a name="index-fftw_005fmpi_005fplan_005fdft_005fc2r"></a>
Chris@82 190 <div class="example">
Chris@82 191 <pre class="example">fftw_plan fftw_mpi_plan_dft_r2c_2d(ptrdiff_t n0, ptrdiff_t n1,
Chris@82 192 double *in, fftw_complex *out,
Chris@82 193 MPI_Comm comm, unsigned flags);
Chris@82 194 fftw_plan fftw_mpi_plan_dft_r2c_2d(ptrdiff_t n0, ptrdiff_t n1,
Chris@82 195 double *in, fftw_complex *out,
Chris@82 196 MPI_Comm comm, unsigned flags);
Chris@82 197 fftw_plan fftw_mpi_plan_dft_r2c_3d(ptrdiff_t n0, ptrdiff_t n1, ptrdiff_t n2,
Chris@82 198 double *in, fftw_complex *out,
Chris@82 199 MPI_Comm comm, unsigned flags);
Chris@82 200 fftw_plan fftw_mpi_plan_dft_r2c(int rnk, const ptrdiff_t *n,
Chris@82 201 double *in, fftw_complex *out,
Chris@82 202 MPI_Comm comm, unsigned flags);
Chris@82 203 fftw_plan fftw_mpi_plan_dft_c2r_2d(ptrdiff_t n0, ptrdiff_t n1,
Chris@82 204 fftw_complex *in, double *out,
Chris@82 205 MPI_Comm comm, unsigned flags);
Chris@82 206 fftw_plan fftw_mpi_plan_dft_c2r_2d(ptrdiff_t n0, ptrdiff_t n1,
Chris@82 207 fftw_complex *in, double *out,
Chris@82 208 MPI_Comm comm, unsigned flags);
Chris@82 209 fftw_plan fftw_mpi_plan_dft_c2r_3d(ptrdiff_t n0, ptrdiff_t n1, ptrdiff_t n2,
Chris@82 210 fftw_complex *in, double *out,
Chris@82 211 MPI_Comm comm, unsigned flags);
Chris@82 212 fftw_plan fftw_mpi_plan_dft_c2r(int rnk, const ptrdiff_t *n,
Chris@82 213 fftw_complex *in, double *out,
Chris@82 214 MPI_Comm comm, unsigned flags);
Chris@82 215 </pre></div>
Chris@82 216
Chris@82 217 <p>Similar to the serial interface (see <a href="Real_002ddata-DFTs.html#Real_002ddata-DFTs">Real-data DFTs</a>), these
Chris@82 218 transform logically n<sub>0</sub>&nbsp;&times;&nbsp;n<sub>1</sub>&nbsp;&times;&nbsp;n<sub>2</sub>&nbsp;&times;&nbsp;&hellip;&nbsp;&times;&nbsp;n<sub>d-1</sub>
Chris@82 219 real data to/from n<sub>0</sub>&nbsp;&times;&nbsp;n<sub>1</sub>&nbsp;&times;&nbsp;n<sub>2</sub>&nbsp;&times;&nbsp;&hellip;&nbsp;&times;&nbsp;(n<sub>d-1</sub>/2 + 1)
Chris@82 220 complex
Chris@82 221 data, representing the non-redundant half of the conjugate-symmetry
Chris@82 222 output of a real-input DFT (see <a href="Multi_002ddimensional-Transforms.html#Multi_002ddimensional-Transforms">Multi-dimensional Transforms</a>).
Chris@82 223 However, the real array must be stored within a padded n<sub>0</sub>&nbsp;&times;&nbsp;n<sub>1</sub>&nbsp;&times;&nbsp;n<sub>2</sub>&nbsp;&times;&nbsp;&hellip;&nbsp;&times;&nbsp;[2&nbsp;(n<sub>d-1</sub>/2 + 1)]
Chris@82 224
Chris@82 225 array (much like the in-place serial r2c transforms, but here for
Chris@82 226 out-of-place transforms as well). Currently, only multi-dimensional
Chris@82 227 (<code>rnk &gt; 1</code>) r2c/c2r transforms are supported (requesting a plan
Chris@82 228 for <code>rnk = 1</code> will yield <code>NULL</code>). As explained above
Chris@82 229 (see <a href="Multi_002ddimensional-MPI-DFTs-of-Real-Data.html#Multi_002ddimensional-MPI-DFTs-of-Real-Data">Multi-dimensional MPI DFTs of Real Data</a>), the data
Chris@82 230 distribution of both the real and complex arrays is given by the
Chris@82 231 &lsquo;<samp>local_size</samp>&rsquo; function called for the dimensions of the
Chris@82 232 <em>complex</em> array. Similar to the other planning functions, the
Chris@82 233 input and output arrays are overwritten when the plan is created
Chris@82 234 except in <code>FFTW_ESTIMATE</code> mode.
Chris@82 235 </p>
Chris@82 236 <p>As for the complex DFTs above, there is an advance interface that
Chris@82 237 allows you to manually specify block sizes and to transform contiguous
Chris@82 238 <code>howmany</code>-tuples of real/complex numbers:
Chris@82 239 </p>
Chris@82 240 <a name="index-fftw_005fmpi_005fplan_005fmany_005fdft_005fr2c"></a>
Chris@82 241 <a name="index-fftw_005fmpi_005fplan_005fmany_005fdft_005fc2r"></a>
Chris@82 242 <div class="example">
Chris@82 243 <pre class="example">fftw_plan fftw_mpi_plan_many_dft_r2c
Chris@82 244 (int rnk, const ptrdiff_t *n, ptrdiff_t howmany,
Chris@82 245 ptrdiff_t iblock, ptrdiff_t oblock,
Chris@82 246 double *in, fftw_complex *out,
Chris@82 247 MPI_Comm comm, unsigned flags);
Chris@82 248 fftw_plan fftw_mpi_plan_many_dft_c2r
Chris@82 249 (int rnk, const ptrdiff_t *n, ptrdiff_t howmany,
Chris@82 250 ptrdiff_t iblock, ptrdiff_t oblock,
Chris@82 251 fftw_complex *in, double *out,
Chris@82 252 MPI_Comm comm, unsigned flags);
Chris@82 253 </pre></div>
Chris@82 254
Chris@82 255 <a name="MPI-r2r-transforms"></a>
Chris@82 256 <h4 class="subsubheading">MPI r2r transforms</h4>
Chris@82 257
Chris@82 258 <a name="index-r2r-4"></a>
Chris@82 259 <p>There are corresponding plan-creation routines for r2r
Chris@82 260 transforms (see <a href="More-DFTs-of-Real-Data.html#More-DFTs-of-Real-Data">More DFTs of Real Data</a>), currently supporting
Chris@82 261 multidimensional (<code>rnk &gt; 1</code>) transforms only (<code>rnk = 1</code> will
Chris@82 262 yield a <code>NULL</code> plan):
Chris@82 263 </p>
Chris@82 264 <div class="example">
Chris@82 265 <pre class="example">fftw_plan fftw_mpi_plan_r2r_2d(ptrdiff_t n0, ptrdiff_t n1,
Chris@82 266 double *in, double *out,
Chris@82 267 MPI_Comm comm,
Chris@82 268 fftw_r2r_kind kind0, fftw_r2r_kind kind1,
Chris@82 269 unsigned flags);
Chris@82 270 fftw_plan fftw_mpi_plan_r2r_3d(ptrdiff_t n0, ptrdiff_t n1, ptrdiff_t n2,
Chris@82 271 double *in, double *out,
Chris@82 272 MPI_Comm comm,
Chris@82 273 fftw_r2r_kind kind0, fftw_r2r_kind kind1, fftw_r2r_kind kind2,
Chris@82 274 unsigned flags);
Chris@82 275 fftw_plan fftw_mpi_plan_r2r(int rnk, const ptrdiff_t *n,
Chris@82 276 double *in, double *out,
Chris@82 277 MPI_Comm comm, const fftw_r2r_kind *kind,
Chris@82 278 unsigned flags);
Chris@82 279 fftw_plan fftw_mpi_plan_many_r2r(int rnk, const ptrdiff_t *n,
Chris@82 280 ptrdiff_t iblock, ptrdiff_t oblock,
Chris@82 281 double *in, double *out,
Chris@82 282 MPI_Comm comm, const fftw_r2r_kind *kind,
Chris@82 283 unsigned flags);
Chris@82 284 </pre></div>
Chris@82 285
Chris@82 286 <p>The parameters are much the same as for the complex DFTs above, except
Chris@82 287 that the arrays are of real numbers (and hence the outputs of the
Chris@82 288 &lsquo;<samp>local_size</samp>&rsquo; data-distribution functions should be interpreted as
Chris@82 289 counts of real rather than complex numbers). Also, the <code>kind</code>
Chris@82 290 parameters specify the r2r kinds along each dimension as for the
Chris@82 291 serial interface (see <a href="Real_002dto_002dReal-Transform-Kinds.html#Real_002dto_002dReal-Transform-Kinds">Real-to-Real Transform Kinds</a>). See <a href="Other-Multi_002ddimensional-Real_002ddata-MPI-Transforms.html#Other-Multi_002ddimensional-Real_002ddata-MPI-Transforms">Other Multi-dimensional Real-data MPI Transforms</a>.
Chris@82 292 </p>
Chris@82 293 <a name="MPI-transposition"></a>
Chris@82 294 <h4 class="subsubheading">MPI transposition</h4>
Chris@82 295 <a name="index-transpose-5"></a>
Chris@82 296
Chris@82 297 <p>FFTW also provides routines to plan a transpose of a distributed
Chris@82 298 <code>n0</code> by <code>n1</code> array of real numbers, or an array of
Chris@82 299 <code>howmany</code>-tuples of real numbers with specified block sizes
Chris@82 300 (see <a href="FFTW-MPI-Transposes.html#FFTW-MPI-Transposes">FFTW MPI Transposes</a>):
Chris@82 301 </p>
Chris@82 302 <a name="index-fftw_005fmpi_005fplan_005ftranspose-1"></a>
Chris@82 303 <a name="index-fftw_005fmpi_005fplan_005fmany_005ftranspose-1"></a>
Chris@82 304 <div class="example">
Chris@82 305 <pre class="example">fftw_plan fftw_mpi_plan_transpose(ptrdiff_t n0, ptrdiff_t n1,
Chris@82 306 double *in, double *out,
Chris@82 307 MPI_Comm comm, unsigned flags);
Chris@82 308 fftw_plan fftw_mpi_plan_many_transpose
Chris@82 309 (ptrdiff_t n0, ptrdiff_t n1, ptrdiff_t howmany,
Chris@82 310 ptrdiff_t block0, ptrdiff_t block1,
Chris@82 311 double *in, double *out, MPI_Comm comm, unsigned flags);
Chris@82 312 </pre></div>
Chris@82 313
Chris@82 314 <a name="index-new_002darray-execution-2"></a>
Chris@82 315 <a name="index-fftw_005fmpi_005fexecute_005fr2r-1"></a>
Chris@82 316 <p>These plans are used with the <code>fftw_mpi_execute_r2r</code> new-array
Chris@82 317 execute function (see <a href="Using-MPI-Plans.html#Using-MPI-Plans">Using MPI Plans</a>), since they count as (rank
Chris@82 318 zero) r2r plans from FFTW&rsquo;s perspective.
Chris@82 319 </p>
Chris@82 320 <hr>
Chris@82 321 <div class="header">
Chris@82 322 <p>
Chris@82 323 Next: <a href="MPI-Wisdom-Communication.html#MPI-Wisdom-Communication" accesskey="n" rel="next">MPI Wisdom Communication</a>, Previous: <a href="MPI-Data-Distribution-Functions.html#MPI-Data-Distribution-Functions" accesskey="p" rel="prev">MPI Data Distribution Functions</a>, Up: <a href="FFTW-MPI-Reference.html#FFTW-MPI-Reference" accesskey="u" rel="up">FFTW MPI Reference</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Concept-Index.html#Concept-Index" title="Index" rel="index">Index</a>]</p>
Chris@82 324 </div>
Chris@82 325
Chris@82 326
Chris@82 327
Chris@82 328 </body>
Chris@82 329 </html>