comparison Lib/fftw-3.2.1/doc/html/.svn/text-base/FFTW-MPI-Wisdom.html.svn-base @ 0:25bf17994ef1

First commit. VS2013, Codeblocks and Mac OSX configuration
author Geogaddi\David <d.m.ronan@qmul.ac.uk>
date Thu, 09 Jul 2015 01:12:16 +0100
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:25bf17994ef1
1 <html lang="en">
2 <head>
3 <title>FFTW MPI Wisdom - 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="Distributed_002dmemory-FFTW-with-MPI.html#Distributed_002dmemory-FFTW-with-MPI" title="Distributed-memory FFTW with MPI">
9 <link rel="prev" href="FFTW-MPI-Transposes.html#FFTW-MPI-Transposes" title="FFTW MPI Transposes">
10 <link rel="next" href="Avoiding-MPI-Deadlocks.html#Avoiding-MPI-Deadlocks" title="Avoiding MPI Deadlocks">
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="FFTW-MPI-Wisdom"></a>
51 Next:&nbsp;<a rel="next" accesskey="n" href="Avoiding-MPI-Deadlocks.html#Avoiding-MPI-Deadlocks">Avoiding MPI Deadlocks</a>,
52 Previous:&nbsp;<a rel="previous" accesskey="p" href="FFTW-MPI-Transposes.html#FFTW-MPI-Transposes">FFTW MPI Transposes</a>,
53 Up:&nbsp;<a rel="up" accesskey="u" href="Distributed_002dmemory-FFTW-with-MPI.html#Distributed_002dmemory-FFTW-with-MPI">Distributed-memory FFTW with MPI</a>
54 <hr>
55 </div>
56
57 <h3 class="section">6.8 FFTW MPI Wisdom</h3>
58
59 <p><a name="index-wisdom-380"></a><a name="index-saving-plans-to-disk-381"></a>
60 FFTW's &ldquo;wisdom&rdquo; facility (see <a href="Words-of-Wisdom_002dSaving-Plans.html#Words-of-Wisdom_002dSaving-Plans">Words of Wisdom-Saving Plans</a>) can
61 be used to save MPI plans as well as to save uniprocessor plans.
62 However, for MPI there are several unavoidable complications.
63
64 <p>First, the MPI standard does not guarantee that every process can
65 perform file I/O (at least, not using C stdio routines)&mdash;only the
66 process of rank <code>MPI_IO</code> can in general (unless <code>MPI_IO ==
67 MPI_ANY_SOURCE</code>). (In practice, <code>MPI_IO</code> is commonly assumed to
68 be zero, i.e. at least process 0 can perform I/O, since otherwise a
69 single-process run could not perform I/O.) So, if we want to export
70 the wisdom from a single process to a file, we must first export the
71 wisdom to a string, then send it to process 0, then write it to a
72 file.
73 <a name="index-MPI_005fIO-382"></a><a name="index-MPI_005fANY_005fSOURCE-383"></a>
74 Second, in principle we may want to have separate wisdom for every
75 process, since in general the processes may run on different hardware
76 even for a single MPI program. However, in practice FFTW's MPI code
77 is designed for the case of homogeneous hardware (see <a href="Load-balancing.html#Load-balancing">Load balancing</a>), and in this case it is convenient to use the same wisdom
78 for every process. Thus, we need a mechanism to synchronize the wisdom.
79
80 <p>To address both of these problems, FFTW provides the following two
81 functions:
82
83 <pre class="example"> void fftw_mpi_broadcast_wisdom(MPI_Comm comm);
84 void fftw_mpi_gather_wisdom(MPI_Comm comm);
85 </pre>
86 <p><a name="index-fftw_005fmpi_005fgather_005fwisdom-384"></a><a name="index-fftw_005fmpi_005fbroadcast_005fwisdom-385"></a>
87 Given a communicator <code>comm</code>, <code>fftw_mpi_broadcast_wisdom</code>
88 will broadcast the wisdom from process 0 to all other processes.
89 Conversely, <code>fftw_mpi_gather_wisdom</code> will collect wisdom from all
90 processes onto process 0. (If the plans created for the same problem
91 by different processes are not the same, <code>fftw_mpi_gather_wisdom</code>
92 will arbitrarily choose one of the plans.) Both of these functions
93 may result in suboptimal plans for different processes if the
94 processes are running on non-identical hardware. Both of these
95 functions are <em>collective</em> calls, which means that they must be
96 executed by all processes in the communicator.
97 <a name="index-collective-function-386"></a>
98 So, for example, a typical code snippet to import wisdom from a file
99 and use it on all processes would be:
100
101 <pre class="example"> {
102 int rank;
103 FILE *f;
104
105 fftw_mpi_init();
106 MPI_Comm_rank(MPI_COMM_WORLD, &amp;rank);
107 if (rank == 0 &amp;&amp; (f = fopen("mywisdom", "r"))) {
108 fftw_import_wisdom_from_file(f);
109 fclose(f);
110 }
111 fftw_mpi_broadcast_wisdom(MPI_COMM_WORLD);
112 }
113 </pre>
114 <p>(Note that we must call <code>fftw_mpi_init</code> before importing any
115 wisdom that might contain MPI plans.) Similarly, a typical code
116 snippet to export wisdom from all processes to a file is:
117 <a name="index-fftw_005fmpi_005finit-387"></a>
118 <pre class="example"> {
119 int rank;
120 FILE *f;
121
122 fftw_mpi_gather_wisdom(MPI_COMM_WORLD);
123 MPI_Comm_rank(MPI_COMM_WORLD, &amp;rank);
124 if (rank == 0 &amp;&amp; (f = fopen("mywisdom", "w"))) {
125 fftw_export_wisdom_to_file(f);
126 fclose(f);
127 }
128 }
129 </pre>
130 <!-- -->
131 </body></html>
132