comparison Lib/fftw-3.2.1/doc/html/.svn/text-base/Transposed-distributions.html.svn-base @ 15:585caf503ef5 tip

Tidy up for ROLI
author Geogaddi\David <d.m.ronan@qmul.ac.uk>
date Tue, 17 May 2016 18:50:19 +0100
parents 636c989477e7
children
comparison
equal deleted inserted replaced
14:636c989477e7 15:585caf503ef5
1 <html lang="en">
2 <head>
3 <title>Transposed distributions - FFTW 3.2alpha3</title>
4 <meta http-equiv="Content-Type" content="text/html">
5 <meta name="description" content="FFTW 3.2alpha3">
6 <meta name="generator" content="makeinfo 4.8">
7 <link title="Top" rel="start" href="index.html#Top">
8 <link rel="up" href="MPI-data-distribution.html#MPI-data-distribution" title="MPI data distribution">
9 <link rel="prev" href="Load-balancing.html#Load-balancing" title="Load balancing">
10 <link rel="next" href="One_002ddimensional-distributions.html#One_002ddimensional-distributions" title="One-dimensional distributions">
11 <link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
12 <!--
13 This manual is for FFTW
14 (version 3.2alpha3, 14 August 2007).
15
16 Copyright (C) 2003 Matteo Frigo.
17
18 Copyright (C) 2003 Massachusetts Institute of Technology.
19
20 Permission is granted to make and distribute verbatim copies of
21 this manual provided the copyright notice and this permission
22 notice are preserved on all copies.
23
24 Permission is granted to copy and distribute modified versions of
25 this manual under the conditions for verbatim copying, provided
26 that the entire resulting derived work is distributed under the
27 terms of a permission notice identical to this one.
28
29 Permission is granted to copy and distribute translations of this
30 manual into another language, under the above conditions for
31 modified versions, except that this permission notice may be
32 stated in a translation approved by the Free Software Foundation.
33 -->
34 <meta http-equiv="Content-Style-Type" content="text/css">
35 <style type="text/css"><!--
36 pre.display { font-family:inherit }
37 pre.format { font-family:inherit }
38 pre.smalldisplay { font-family:inherit; font-size:smaller }
39 pre.smallformat { font-family:inherit; font-size:smaller }
40 pre.smallexample { font-size:smaller }
41 pre.smalllisp { font-size:smaller }
42 span.sc { font-variant:small-caps }
43 span.roman { font-family:serif; font-weight:normal; }
44 span.sansserif { font-family:sans-serif; font-weight:normal; }
45 --></style>
46 </head>
47 <body>
48 <div class="node">
49 <p>
50 <a name="Transposed-distributions"></a>
51 Next:&nbsp;<a rel="next" accesskey="n" href="One_002ddimensional-distributions.html#One_002ddimensional-distributions">One-dimensional distributions</a>,
52 Previous:&nbsp;<a rel="previous" accesskey="p" href="Load-balancing.html#Load-balancing">Load balancing</a>,
53 Up:&nbsp;<a rel="up" accesskey="u" href="MPI-data-distribution.html#MPI-data-distribution">MPI data distribution</a>
54 <hr>
55 </div>
56
57 <h4 class="subsection">6.4.3 Transposed distributions</h4>
58
59 <p>Internally, FFTW's MPI transform algorithms work by first computing
60 transforms of the data local to each process, then by globally
61 <em>transposing</em> the data in some fashion to redistribute the data
62 among the processes, transforming the new data local to each process,
63 and transposing back. For example, a two-dimensional <code>n0</code> by
64 <code>n1</code> array, distributed across the <code>n0</code> dimension, is
65 transformd by: (i) transforming the <code>n1</code> dimension, which are
66 local to each process; (ii) transposing to a <code>n1</code> by <code>n0</code>
67 array, distributed across the <code>n1</code> dimension; (iii) transforming
68 the <code>n0</code> dimension, which is now local to each process; (iv)
69 transposing back.
70 <a name="index-transpose-359"></a>
71 However, in many applications it is acceptable to compute a
72 multidimensional DFT whose results are produced in transposed order
73 (e.g., <code>n1</code> by <code>n0</code> in two dimensions). This provides a
74 significant performance advantage, because it means that the final
75 transposition step can be omitted. FFTW supports this optimization,
76 which you specify by passing the flag <code>FFTW_MPI_TRANSPOSED_OUT</code>
77 to the planner routines. To compute the inverse transform of
78 transposed output, you specify <code>FFTW_MPI_TRANSPOSED_IN</code> to tell
79 it that the input is transposed. In this section, we explain how to
80 interpret the output format of such a transform.
81 <a name="index-FFTW_005fMPI_005fTRANSPOSED_005fOUT-360"></a><a name="index-FFTW_005fMPI_005fTRANSPOSED_005fIN-361"></a>
82 Suppose you have are transforming multi-dimensional data with (at
83 least two) dimensions 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>. As always, it is distributed along
84 the first dimension n<sub>0</sub>. Now, if we compute its DFT with the
85 <code>FFTW_MPI_TRANSPOSED_OUT</code>, the resulting output data are stored
86 with the first <em>two</em> dimensions transosed: 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>,
87 distributed along the n<sub>0</sub> dimension. Conversely, if we take the
88 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> data and transform it with the
89 <code>FFTW_MPI_TRANSPOSED_IN</code> flag, then the format goes back to the
90 original 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>.
91
92 <p>There are two ways to find the portion of the transposed array that
93 resides on the current process. First, you can simply call the
94 appropriate `<samp><span class="samp">local_size</span></samp>' function, passing 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> (the
95 transposed dimensions). This would mean calling the `<samp><span class="samp">local_size</span></samp>'
96 function twice, once for the transposed and once for the
97 non-transposed dimensions. Alternatively, you can call one of the
98 `<samp><span class="samp">local_size_transposed</span></samp>' functions, which returns both the
99 non-transposed and transposed data distribution from a single call.
100 For example, for a 3d transform with transposed output (or input), you
101 might call:
102
103 <pre class="example"> ptrdiff_t fftw_mpi_local_size_3d_transposed(
104 ptrdiff_t n0, ptrdiff_t n1, ptrdiff_t n2, MPI_Comm comm,
105 ptrdiff_t *local_n0, ptrdiff_t *local_0_start,
106 ptrdiff_t *local_n1, ptrdiff_t *local_1_start);
107 </pre>
108 <p><a name="index-fftw_005fmpi_005flocal_005fsize_005f3d_005ftransposed-362"></a>
109 Here, <code>local_n0</code> and <code>local_0_start</code> give the size and
110 starting index of the <code>n0</code> dimension, for the
111 <em>non</em>-transposed data, as in the previous sections. For
112 <em>transposed</em> data (e.g. the output for
113 <code>FFTW_MPI_TRANSPOSED_OUT</code>), <code>local_n1</code> and
114 <code>local_1_start</code> give the size and starting index of the <code>n1</code>
115 dimension, which is the first dimension of the transposed data
116 (<code>n1</code> by <code>n0</code> by <code>n2</code>).
117
118 <p>(Note that <code>FFTW_MPI_TRANSPOSED_IN</code> is completely equivalent to
119 performing <code>FFTW_MPI_TRANSPOSED_OUT</code> and passing the first two
120 dimensions to the planner in reverse order, or vice versa. If you
121 pass <em>both</em> the <code>FFTW_MPI_TRANSPOSED_IN</code> and
122 <code>FFTW_MPI_TRANSPOSED_OUT</code> flags, it is equivalent to swapping the
123 first two dimensions passed to the planner and passing <em>neither</em>
124 flag.)
125
126 </body></html>
127