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