5098
5146
(ulti-dimensional)c(transforms)k(\(see)h(Section)e(3.5)j([Real)e
5099
5147
(Multi-dimensional)c(T)-8 b(rans-)150 1403 y(forms)30
5100
5148
b(Reference],)j(page)e(29\).)44 b(Section)30 b(3.6)i([Wisdom)f
5101
(Reference],)h(page)g(34)f(describ)s(es)f(the)h Fo(wisdom)150
5102
1513 y Fu(mec)m(hanism)c(for)g(exp)s(orting)g(and)g(imp)s(orting)e
5149
(Reference],)h(page)g(34)f(describ)s(es)f(the)h Fp(wisdom)150
5150
1513 y Fv(mec)m(hanism)c(for)g(exp)s(orting)g(and)g(imp)s(orting)e
5103
5151
(plans.)38 b(Finally)-8 b(,)27 b(Section)g(3.7)i([Memory)f(Allo)s
5104
(cator)g(Ref-)150 1622 y(erence],)36 b(page)f(36)g(describ)s(es)e(ho)m
5152
(cator)g(Ref-)150 1622 y(erence],)36 b(page)f(35)g(describ)s(es)e(ho)m
5105
5153
(w)h(to)h(c)m(hange)h(FFTW's)f(default)e(memory)h(allo)s(cator.)53
5106
5154
b(F)-8 b(or)35 b(parallel)150 1732 y(transforms,)30 b(See)g(Chapter)g
5107
(4)h([P)m(arallel)f(FFTW],)h(page)g(37.)150 1985 y Ft(3.1)68
5108
b(Data)46 b(T)l(yp)t(es)275 2177 y Fu(The)e(routines)f(in)g(the)i(FFTW)
5155
(4)h([P)m(arallel)f(FFTW],)h(page)g(37.)150 1985 y Fu(3.1)68
5156
b(Data)46 b(T)l(yp)t(es)275 2177 y Fv(The)e(routines)f(in)g(the)i(FFTW)
5109
5157
h(pac)m(k)-5 b(age)46 b(use)f(three)f(main)g(kinds)f(of)h(data)i(t)m
5110
(yp)s(es.)83 b Fp(Real)49 b Fu(and)150 2286 y Fp(complex)31
5111
b Fu(n)m(um)m(b)s(ers)23 b(should)f(b)s(e)j(already)f(kno)m(wn)g(to)h
5158
(yp)s(es.)83 b Fq(Real)49 b Fv(and)150 2286 y Fq(complex)31
5159
b Fv(n)m(um)m(b)s(ers)23 b(should)f(b)s(e)j(already)f(kno)m(wn)g(to)h
5112
5160
(the)g(reader.)39 b(W)-8 b(e)26 b(also)e(use)h(the)g(term)f
5113
Fp(halfcomplex)150 2396 y Fu(to)41 b(describ)s(e)e(complex)h(arra)m(ys)
5161
Fq(halfcomplex)150 2396 y Fv(to)41 b(describ)s(e)e(complex)h(arra)m(ys)
5114
5162
g(in)f(a)i(sp)s(ecial)e(pac)m(k)m(ed)i(format)g(used)f(b)m(y)g(the)g
5115
5163
(one-dimensional)e(real)150 2505 y(transforms)30 b(\(taking)g(adv)-5
5116
b(an)m(tage)32 b(of)f(the)g Fp(hermitian)d Fu(symmetry)i(that)h(arises)
5117
f(in)f(those)i(cases\).)275 2638 y(By)f(including)d Fo(<fftw.h>)h
5118
Fu(or)j Fo(<rfftw.h>)p Fu(,)d(y)m(ou)i(will)e(ha)m(v)m(e)k(access)f(to)
5119
h(the)e(follo)m(wing)f(de\014nitions:)390 2766 y Fo(typedef)46
5164
b(an)m(tage)32 b(of)f(the)g Fq(hermitian)d Fv(symmetry)i(that)h(arises)
5165
f(in)f(those)i(cases\).)275 2638 y(By)f(including)d Fp(<fftw.h>)h
5166
Fv(or)j Fp(<rfftw.h>)p Fv(,)d(y)m(ou)i(will)e(ha)m(v)m(e)k(access)f(to)
5167
h(the)e(follo)m(wing)f(de\014nitions:)390 2766 y Fp(typedef)46
5120
5168
b(double)g(fftw_real;)390 2973 y(typedef)g(struct)g({)629
5121
5169
3077 y(fftw_real)f(re,)i(im;)390 3181 y(})g(fftw_complex;)390
5122
5170
3388 y(#define)f(c_re\(c\))93 b(\(\(c\).re\))390 3492
5123
5171
y(#define)46 b(c_im\(c\))93 b(\(\(c\).im\))275 3625 y
5124
Fu(All)31 b(FFTW)i(op)s(erations)f(are)h(p)s(erformed)e(on)h(the)h
5125
Fo(fftw_real)d Fu(and)i Fo(fftw_complex)d Fu(data)34
5126
b(t)m(yp)s(es.)150 3735 y(F)-8 b(or)32 b Fo(fftw_complex)c
5127
Fu(n)m(um)m(b)s(ers,)j(the)h(t)m(w)m(o)h(macros)f Fo(c_re)e
5128
Fu(and)h Fo(c_im)f Fu(retriev)m(e,)j(resp)s(ectiv)m(ely)-8
5172
Fv(All)31 b(FFTW)i(op)s(erations)f(are)h(p)s(erformed)e(on)h(the)h
5173
Fp(fftw_real)d Fv(and)i Fp(fftw_complex)d Fv(data)34
5174
b(t)m(yp)s(es.)150 3735 y(F)-8 b(or)32 b Fp(fftw_complex)c
5175
Fv(n)m(um)m(b)s(ers,)j(the)h(t)m(w)m(o)h(macros)f Fp(c_re)e
5176
Fv(and)h Fp(c_im)f Fv(retriev)m(e,)j(resp)s(ectiv)m(ely)-8
5129
5177
b(,)32 b(the)f(real)150 3845 y(and)f(imaginary)f(parts)h(of)g(the)h(n)m
5130
(um)m(b)s(er.)275 3978 y(A)43 b Fp(real)g(arra)m(y)51
5131
b Fu(is)42 b(an)h(arra)m(y)h(of)g(real)e(n)m(um)m(b)s(ers.)78
5132
b(A)43 b Fp(complex)g(arra)m(y)52 b Fu(is)42 b(an)h(arra)m(y)h(of)f
5178
(um)m(b)s(er.)275 3978 y(A)43 b Fq(real)g(arra)m(y)51
5179
b Fv(is)42 b(an)h(arra)m(y)h(of)g(real)e(n)m(um)m(b)s(ers.)78
5180
b(A)43 b Fq(complex)g(arra)m(y)52 b Fv(is)42 b(an)h(arra)m(y)h(of)f
5133
5181
(complex)150 4087 y(n)m(um)m(b)s(ers.)53 b(A)36 b(one-dimensional)d
5134
(arra)m(y)i Fl(X)43 b Fu(of)35 b Fl(n)f Fu(complex)h(n)m(um)m(b)s(ers)f
5135
(is)g Fp(hermitian)f Fu(if)h(the)h(follo)m(wing)150 4197
5182
(arra)m(y)i Fm(X)43 b Fv(of)35 b Fm(n)f Fv(complex)h(n)m(um)m(b)s(ers)f
5183
(is)g Fq(hermitian)f Fv(if)h(the)h(follo)m(wing)150 4197
5136
5184
y(prop)s(ert)m(y)40 b(holds:)60 b(for)41 b(all)f(0)j
5137
Fs(\024)g Fl(i)g(<)f(n)p Fu(,)h(w)m(e)f(ha)m(v)m(e)g
5138
Fl(X)2065 4211 y Fk(i)2136 4197 y Fu(=)g Fl(X)2331 4164
5139
y Fj(\003)2324 4219 y Fk(n)p Fj(\000)p Fk(i)2445 4197
5140
y Fu(,)i(where)c Fl(x)2839 4164 y Fj(\003)2918 4197 y
5141
Fu(denotes)h(the)g(complex)150 4307 y(conjugate)30 b(of)e
5142
Fl(x)p Fu(.)40 b(Hermitian)27 b(arra)m(ys)i(are)f(relev)-5
5185
Ft(\024)g Fm(i)g(<)f(n)p Fv(,)h(w)m(e)f(ha)m(v)m(e)g
5186
Fm(X)2065 4211 y Fl(i)2136 4197 y Fv(=)g Fm(X)2331 4164
5187
y Fk(\003)2324 4219 y Fl(n)p Fk(\000)p Fl(i)2445 4197
5188
y Fv(,)i(where)c Fm(x)2839 4164 y Fk(\003)2918 4197 y
5189
Fv(denotes)h(the)g(complex)150 4307 y(conjugate)30 b(of)e
5190
Fm(x)p Fv(.)40 b(Hermitian)27 b(arra)m(ys)i(are)f(relev)-5
5143
5191
b(an)m(t)29 b(to)g(FFTW)g(b)s(ecause)f(the)h(F)-8 b(ourier)27
5144
5192
b(transform)h(of)h(a)150 4416 y(real)h(arra)m(y)h(is)e(hermitian.)275
5145
5193
4549 y(Because)h(of)e(its)g(symmetry)-8 b(,)30 b(a)f(hermitian)d(arra)m
5146
5194
(y)k(can)f(b)s(e)f(stored)g(in)g(half)f(the)i(space)g(of)g(a)g(complex)
5147
5195
150 4659 y(arra)m(y)i(of)g(the)h(same)f(size.)42 b(FFTW's)32
5148
5196
b(one-dimensional)c(real)j(transforms)f(store)i(hermitian)c(arra)m(ys)k
5149
(as)150 4768 y Fp(halfcomplex)40 b Fu(arra)m(ys.)56 b(A)35
5150
b(halfcomplex)f(arra)m(y)i(of)g(size)f Fl(n)f Fu(is)h(a)g
5151
(one-dimensional)e(arra)m(y)j(of)g Fl(n)e Fo(fftw_)150
5152
4878 y(real)e Fu(n)m(um)m(b)s(ers.)47 b(A)33 b(hermitian)e(arra)m(y)i
5153
Fl(X)41 b Fu(in)31 b(stored)i(in)m(to)g(a)h(halfcomplex)d(arra)m(y)j
5154
Fl(Y)52 b Fu(as)34 b(follo)m(ws.)47 b(F)-8 b(or)150 4988
5155
y(all)36 b(in)m(tegers)h Fl(i)h Fu(suc)m(h)f(that)g(0)g
5156
Fs(\024)f Fl(i)h Fs(\024)f Fl(n=)p Fu(2,)k(w)m(e)d(ha)m(v)m(e)i
5157
Fl(Y)2094 5002 y Fk(i)2158 4988 y Fu(:=)d(Re\()p Fl(X)2507
5158
5002 y Fk(i)2536 4988 y Fu(\).)61 b(F)-8 b(or)38 b(all)e(in)m(tegers)h
5159
Fl(i)h Fu(suc)m(h)e(that)150 5097 y(0)26 b Fl(<)f(i)g(<)g(n=)p
5160
Fu(2,)31 b(w)m(e)g(ha)m(v)m(e)h Fl(Y)1067 5111 y Fk(n)p
5161
Fj(\000)p Fk(i)1212 5097 y Fu(:=)25 b(Im\()p Fl(X)1552
5162
5111 y Fk(i)1580 5097 y Fu(\).)275 5230 y(W)-8 b(e)27
5197
(as)150 4768 y Fq(halfcomplex)40 b Fv(arra)m(ys.)56 b(A)35
5198
b(halfcomplex)f(arra)m(y)i(of)g(size)f Fm(n)f Fv(is)h(a)g
5199
(one-dimensional)e(arra)m(y)j(of)g Fm(n)e Fp(fftw_)150
5200
4878 y(real)e Fv(n)m(um)m(b)s(ers.)47 b(A)33 b(hermitian)e(arra)m(y)i
5201
Fm(X)41 b Fv(in)31 b(stored)i(in)m(to)g(a)h(halfcomplex)d(arra)m(y)j
5202
Fm(Y)52 b Fv(as)34 b(follo)m(ws.)47 b(F)-8 b(or)150 4988
5203
y(all)36 b(in)m(tegers)h Fm(i)h Fv(suc)m(h)f(that)g(0)g
5204
Ft(\024)f Fm(i)h Ft(\024)f Fm(n=)p Fv(2,)k(w)m(e)d(ha)m(v)m(e)i
5205
Fm(Y)2094 5002 y Fl(i)2158 4988 y Fv(:=)d(Re\()p Fm(X)2507
5206
5002 y Fl(i)2536 4988 y Fv(\).)61 b(F)-8 b(or)38 b(all)e(in)m(tegers)h
5207
Fm(i)h Fv(suc)m(h)e(that)150 5097 y(0)26 b Fm(<)f(i)g(<)g(n=)p
5208
Fv(2,)31 b(w)m(e)g(ha)m(v)m(e)h Fm(Y)1067 5111 y Fl(n)p
5209
Fk(\000)p Fl(i)1212 5097 y Fv(:=)25 b(Im\()p Fm(X)1552
5210
5111 y Fl(i)1580 5097 y Fv(\).)275 5230 y(W)-8 b(e)27
5163
5211
b(no)m(w)f(illustrate)e(halfcomplex)h(storage)i(for)f
5164
Fl(n)f Fu(=)g(4)h(and)f Fl(n)g Fu(=)g(5,)j(since)d(the)h(sc)m(heme)h
5165
(dep)s(ends)d(on)150 5340 y(the)g(parit)m(y)g(of)h Fl(n)p
5166
Fu(.)38 b(Let)25 b Fl(n)f Fu(=)h(4.)39 b(In)24 b(this)f(case,)k(w)m(e)e
5167
(ha)m(v)m(e)g Fl(Y)2095 5354 y Fn(0)2157 5340 y Fu(:=)h(Re\()p
5168
Fl(X)2496 5354 y Fn(0)2534 5340 y Fu(\),)g Fl(Y)2673
5169
5354 y Fn(1)2735 5340 y Fu(:=)f(Re)q(\()p Fl(X)3074 5354
5170
y Fn(1)3112 5340 y Fu(\),)h Fl(Y)3251 5354 y Fn(2)3313
5171
5340 y Fu(:=)f(Re\()p Fl(X)3651 5354 y Fn(2)3689 5340
5212
Fm(n)f Fv(=)g(4)h(and)f Fm(n)g Fv(=)g(5,)j(since)d(the)h(sc)m(heme)h
5213
(dep)s(ends)d(on)150 5340 y(the)g(parit)m(y)g(of)h Fm(n)p
5214
Fv(.)38 b(Let)25 b Fm(n)f Fv(=)h(4.)39 b(In)24 b(this)f(case,)k(w)m(e)e
5215
(ha)m(v)m(e)g Fm(Y)2095 5354 y Fo(0)2157 5340 y Fv(:=)h(Re\()p
5216
Fm(X)2496 5354 y Fo(0)2534 5340 y Fv(\),)g Fm(Y)2673
5217
5354 y Fo(1)2735 5340 y Fv(:=)f(Re)q(\()p Fm(X)3074 5354
5218
y Fo(1)3112 5340 y Fv(\),)h Fm(Y)3251 5354 y Fo(2)3313
5219
5340 y Fv(:=)f(Re\()p Fm(X)3651 5354 y Fo(2)3689 5340
5174
18 19 bop 150 -116 a Fu(18)3232 b(FFTW)150 299 y(and)37
5175
b Fl(Y)387 313 y Fn(3)461 299 y Fu(:=)g(Im)o(\()p Fl(X)812
5176
313 y Fn(1)850 299 y Fu(\).)62 b(Let)38 b(no)m(w)g Fl(n)e
5177
Fu(=)h(5.)62 b(In)37 b(this)f(case,)41 b(w)m(e)d(ha)m(v)m(e)g
5178
Fl(Y)2612 313 y Fn(0)2686 299 y Fu(:=)f(Re)q(\()p Fl(X)3037
5179
313 y Fn(0)3074 299 y Fu(\),)j Fl(Y)3227 313 y Fn(1)3301
5180
299 y Fu(:=)d(Re\()p Fl(X)3651 313 y Fn(1)3689 299 y
5181
Fu(\),)150 408 y Fl(Y)203 422 y Fn(2)265 408 y Fu(:=)25
5182
b(Re)q(\()p Fl(X)604 422 y Fn(2)642 408 y Fu(\),)31 b
5183
Fl(Y)786 422 y Fn(3)848 408 y Fu(:=)25 b(Im\()p Fl(X)1188
5184
422 y Fn(2)1226 408 y Fu(\),)31 b(and)e Fl(Y)1546 422
5185
y Fn(4)1609 408 y Fu(:=)c(Im)o(\()p Fl(X)1948 422 y Fn(1)1986
5186
408 y Fu(\).)275 546 y(By)32 b(default,)g(the)h(t)m(yp)s(e)f
5187
Fo(fftw_real)e Fu(equals)i(the)g(C)g(t)m(yp)s(e)h Fo(double)p
5188
Fu(.)45 b(T)-8 b(o)32 b(w)m(ork)h(in)e(single)g(precision)150
5189
655 y(rather)c(than)g(double)f(precision,)g Fo(#define)g
5190
Fu(the)h(sym)m(b)s(ol)f Fo(FFTW_ENABLE_FLOAT)d Fu(in)j
5191
Fo(fftw.h)g Fu(and)g(then)150 765 y(recompile)32 b(the)i(library)-8
5222
TeXDict begin 18 19 bop 150 -116 a Fv(18)3232 b(FFTW)150
5223
299 y(and)37 b Fm(Y)387 313 y Fo(3)461 299 y Fv(:=)g(Im)o(\()p
5224
Fm(X)812 313 y Fo(1)850 299 y Fv(\).)62 b(Let)38 b(no)m(w)g
5225
Fm(n)e Fv(=)h(5.)62 b(In)37 b(this)f(case,)41 b(w)m(e)d(ha)m(v)m(e)g
5226
Fm(Y)2612 313 y Fo(0)2686 299 y Fv(:=)f(Re)q(\()p Fm(X)3037
5227
313 y Fo(0)3074 299 y Fv(\),)j Fm(Y)3227 313 y Fo(1)3301
5228
299 y Fv(:=)d(Re\()p Fm(X)3651 313 y Fo(1)3689 299 y
5229
Fv(\),)150 408 y Fm(Y)203 422 y Fo(2)265 408 y Fv(:=)25
5230
b(Re)q(\()p Fm(X)604 422 y Fo(2)642 408 y Fv(\),)31 b
5231
Fm(Y)786 422 y Fo(3)848 408 y Fv(:=)25 b(Im\()p Fm(X)1188
5232
422 y Fo(2)1226 408 y Fv(\),)31 b(and)e Fm(Y)1546 422
5233
y Fo(4)1609 408 y Fv(:=)c(Im)o(\()p Fm(X)1948 422 y Fo(1)1986
5234
408 y Fv(\).)275 542 y(By)32 b(default,)g(the)h(t)m(yp)s(e)f
5235
Fp(fftw_real)e Fv(equals)i(the)g(C)g(t)m(yp)s(e)h Fp(double)p
5236
Fv(.)45 b(T)-8 b(o)32 b(w)m(ork)h(in)e(single)g(precision)150
5237
652 y(rather)c(than)g(double)f(precision,)g Fp(#define)g
5238
Fv(the)h(sym)m(b)s(ol)f Fp(FFTW_ENABLE_FLOAT)d Fv(in)j
5239
Fp(fftw.h)g Fv(and)g(then)150 761 y(recompile)32 b(the)i(library)-8
5192
5240
b(.)48 b(On)32 b(Unix)g(systems,)j(y)m(ou)f(can)f(instead)g(use)g
5193
Fo(configure)28 b(--enable-float)150 875 y Fu(at)j(installation)d(time)
5241
Fp(configure)28 b(--enable-float)150 871 y Fv(at)j(installation)d(time)
5194
5242
i(\(see)i(Chapter)e(6)g([Installation)f(and)h(Customization],)g(page)h
5195
(55\).)275 1012 y(In)j(v)m(ersion)g(1)h(of)g(FFTW,)h(the)f(data)h(t)m
5196
(yp)s(es)f(w)m(ere)g(called)f Fo(FFTW_REAL)f Fu(and)h
5197
Fo(FFTW_COMPLEX)p Fu(.)51 b(W)-8 b(e)150 1122 y(c)m(hanged)35
5243
(55\).)275 1004 y(In)j(v)m(ersion)g(1)h(of)g(FFTW,)h(the)f(data)h(t)m
5244
(yp)s(es)f(w)m(ere)g(called)f Fp(FFTW_REAL)f Fv(and)h
5245
Fp(FFTW_COMPLEX)p Fv(.)51 b(W)-8 b(e)150 1114 y(c)m(hanged)35
5198
5246
b(the)g(capitalization)f(for)h(consistency)g(with)e(the)i(rest)g(of)g
5199
5247
(FFTW's)h(con)m(v)m(en)m(tions.)55 b(The)34 b(old)150
5200
1231 y(names)c(are)h(still)d(supp)s(orted,)h(but)h(their)f(use)h(is)g
5201
(deprecated.)150 1496 y Ft(3.2)68 b(One-dimensional)46
5202
b(T)-11 b(ransforms)45 b(Reference)275 1692 y Fu(The)d(one-dimensional)
5248
1223 y(names)c(are)h(still)d(supp)s(orted,)h(but)h(their)f(use)h(is)g
5249
(deprecated.)150 1478 y Fu(3.2)68 b(One-dimensional)46
5250
b(T)-11 b(ransforms)45 b(Reference)275 1669 y Fv(The)d(one-dimensional)
5203
5251
f(complex)i(routines)e(are)j(generally)e(pre\014xed)g(with)g
5204
Fo(fftw_)p Fu(.)77 b(Programs)150 1801 y(using)31 b(FFTW)j(should)d(b)s
5205
(e)h(link)m(ed)g(with)f Fo(-lfftw)e(-lm)j Fu(on)h(Unix)e(systems,)j(or)
5206
f(with)f(the)h(FFTW)h(and)150 1911 y(standard)c(math)g(libraries)d(in)i
5207
(general.)150 2141 y Fi(3.2.1)63 b(Plan)40 b(Creation)h(for)g
5208
(One-dimensional)h(T)-10 b(ransforms)390 2330 y Fo(#include)46
5209
b(<fftw.h>)390 2538 y(fftw_plan)f(fftw_create_plan\(int)e(n,)k
5210
(fftw_direction)d(dir,)1679 2642 y(int)j(flags\);)390
5211
2849 y(fftw_plan)e(fftw_create_plan_specific)o(\(int)c(n,)47
5212
b(fftw_direction)d(dir,)2108 2953 y(int)j(flags,)2108
5213
3057 y(fftw_complex)e(*in,)h(int)h(istride,)2108 3161
5214
y(fftw_complex)e(*out,)h(int)h(ostride\);)275 3298 y
5215
Fu(The)27 b(function)f Fo(fftw_create_plan)e Fu(creates)29
5252
Fp(fftw_)p Fv(.)77 b(Programs)150 1779 y(using)31 b(FFTW)j(should)d(b)s
5253
(e)h(link)m(ed)g(with)f Fp(-lfftw)e(-lm)j Fv(on)h(Unix)e(systems,)j(or)
5254
f(with)f(the)h(FFTW)h(and)150 1889 y(standard)c(math)g(libraries)d(in)i
5255
(general.)150 2110 y Fh(3.2.1)63 b(Plan)40 b(Creation)h(for)g
5256
(One-dimensional)h(T)-10 b(ransforms)390 2272 y Fp(#include)46
5257
b(<fftw.h>)390 2479 y(fftw_plan)f(fftw_create_plan\(int)e(n,)k
5258
(fftw_direction)d(dir,)1679 2583 y(int)j(flags\);)390
5259
2791 y(fftw_plan)e(fftw_create_plan_specific)o(\(int)c(n,)47
5260
b(fftw_direction)d(dir,)2108 2894 y(int)j(flags,)2108
5261
2998 y(fftw_complex)e(*in,)h(int)h(istride,)2108 3102
5262
y(fftw_complex)e(*out,)h(int)h(ostride\);)275 3235 y
5263
Fv(The)27 b(function)f Fp(fftw_create_plan)e Fv(creates)29
5216
5264
b(a)f(plan,)f(whic)m(h)g(is)g(a)h(data)g(structure)g(con)m(taining)f
5217
(all)150 3408 y(the)35 b(information)e(that)i Fo(fftw)e
5218
Fu(needs)i(in)e(order)h(to)h(compute)g(the)g(1D)h(F)-8
5265
(all)150 3345 y(the)35 b(information)e(that)i Fp(fftw)e
5266
Fv(needs)i(in)e(order)h(to)h(compute)g(the)g(1D)h(F)-8
5219
5267
b(ourier)34 b(transform.)53 b(Y)-8 b(ou)35 b(can)150
5220
3517 y(create)i(as)e(man)m(y)h(plans)d(as)j(y)m(ou)f(need,)i(but)d
5268
3455 y(create)i(as)e(man)m(y)h(plans)d(as)j(y)m(ou)f(need,)i(but)d
5221
5269
(only)h(one)g(plan)f(for)h(a)h(giv)m(en)f(arra)m(y)g(size)h(is)e
5222
(required)f(\(a)150 3627 y(plan)c(can)i(b)s(e)e(reused)h(man)m(y)g
5223
(times\).)275 3764 y Fo(fftw_create_plan)f Fu(returns)j(a)i(v)-5
5224
b(alid)32 b(plan,)i(or)f Fo(NULL)g Fu(if,)g(for)h(some)g(reason,)h(the)
5225
f(plan)e(can't)j(b)s(e)150 3874 y(created.)78 b(In)42
5270
(required)f(\(a)150 3564 y(plan)c(can)i(b)s(e)e(reused)h(man)m(y)g
5271
(times\).)275 3698 y Fp(fftw_create_plan)f Fv(returns)j(a)i(v)-5
5272
b(alid)32 b(plan,)i(or)f Fp(NULL)g Fv(if,)g(for)h(some)g(reason,)h(the)
5273
f(plan)e(can't)j(b)s(e)150 3807 y(created.)78 b(In)42
5226
5274
b(the)h(default)e(installation,)j(this)d(cannot)i(happ)s(en,)i(but)c
5227
(it)h(is)g(p)s(ossible)e(to)j(con\014gure)150 3983 y(FFTW)27
5275
(it)h(is)g(p)s(ossible)e(to)j(con\014gure)150 3917 y(FFTW)27
5228
5276
b(in)e(suc)m(h)h(a)h(w)m(a)m(y)h(that)f(some)g(input)d(sizes)i(are)h
5229
5277
(forbidden,)e(and)h(FFTW)h(cannot)g(create)h(a)f(plan.)275
5230
4121 y(The)44 b Fo(fftw_create_plan_specific)38 b Fu(v)-5
5278
4050 y(The)44 b Fp(fftw_create_plan_specific)38 b Fv(v)-5
5231
5279
b(arian)m(t)46 b(tak)m(es)g(as)f(additional)f(argumen)m(ts)h(sp)s
5232
(eci\014c)f(in-)150 4230 y(put/output)f(arra)m(ys)g(and)f(their)h
5280
(eci\014c)f(in-)150 4160 y(put/output)f(arra)m(ys)g(and)f(their)h
5233
5281
(strides.)77 b(F)-8 b(or)44 b(the)f(last)g(four)g(argumen)m(ts,)k(y)m
5234
(ou)c(should)e(pass)i(the)150 4340 y(arra)m(ys)31 b(and)g(strides)f
5282
(ou)c(should)e(pass)i(the)150 4270 y(arra)m(ys)31 b(and)g(strides)f
5235
5283
(that)h(y)m(ou)g(will)e(ev)m(en)m(tually)i(b)s(e)f(passing)g(to)i
5236
Fo(fftw)p Fu(.)41 b(The)31 b(resulting)e(plans)g(will)g(b)s(e)150
5237
4450 y(optimized)g(for)h(those)h(arra)m(ys)g(and)e(strides,)h(although)
5284
Fp(fftw)p Fv(.)41 b(The)31 b(resulting)e(plans)g(will)g(b)s(e)150
5285
4379 y(optimized)g(for)h(those)h(arra)m(ys)g(and)e(strides,)h(although)
5238
5286
f(they)i(ma)m(y)g(b)s(e)e(used)h(on)g(other)h(arra)m(ys)f(as)h(w)m
5239
(ell.)150 4559 y(Note:)40 b(the)27 b(con)m(ten)m(ts)i(of)e(the)g(in)e
5240
(and)h(out)h(arra)m(ys)g(are)h Fq(destr)-5 b(oye)g(d)38
5241
b Fu(b)m(y)27 b(the)g(sp)s(eci\014c)e(planner)g(\(the)j(initial)150
5242
4669 y(con)m(ten)m(ts)k(are)f(ignored,)f(so)g(the)h(arra)m(ys)g(need)f
5243
(not)g(ha)m(v)m(e)i(b)s(een)d(initialized\).)150 4899
5244
y Fi(Argumen)m(ts)225 5094 y Fs(\017)60 b Fo(n)30 b Fu(is)f(the)i(size)
5287
(ell.)150 4489 y(Note:)40 b(the)27 b(con)m(ten)m(ts)i(of)e(the)g(in)e
5288
(and)h(out)h(arra)m(ys)g(are)h Fr(destr)-5 b(oye)g(d)38
5289
b Fv(b)m(y)27 b(the)g(sp)s(eci\014c)e(planner)g(\(the)j(initial)150
5290
4598 y(con)m(ten)m(ts)k(are)f(ignored,)f(so)g(the)h(arra)m(ys)g(need)f
5291
(not)g(ha)m(v)m(e)i(b)s(een)d(initialized\).)150 4820
5292
y Fh(Argumen)m(ts)225 4987 y Ft(\017)60 b Fp(n)30 b Fv(is)f(the)i(size)
5245
5293
f(of)h(the)f(transform.)40 b(It)31 b(can)g(b)s(e)e(an)m(y)i(p)s(ositiv)
5246
m(e)e(in)m(teger.)379 5230 y Fs(\000)60 b Fu(FFTW)22
5294
m(e)e(in)m(teger.)379 5121 y Ft(\000)60 b Fv(FFTW)22
5247
5295
b(is)f(b)s(est)g(at)h(handling)c(sizes)k(of)f(the)h(form)f(2)2237
5248
5197 y Fk(a)2277 5230 y Fu(3)2322 5197 y Fk(b)2356 5230
5249
y Fu(5)2401 5197 y Fk(c)2435 5230 y Fu(7)2480 5197 y
5250
Fk(d)2519 5230 y Fu(11)2609 5197 y Fk(e)2646 5230 y Fu(13)2736
5251
5197 y Fk(f)2780 5230 y Fu(,)i(where)e Fl(e)p Fu(+)p
5252
Fl(f)31 b Fu(is)20 b(either)h(0)h(or)510 5340 y(1,)30
5296
5088 y Fl(a)2277 5121 y Fv(3)2322 5088 y Fl(b)2356 5121
5297
y Fv(5)2401 5088 y Fl(c)2435 5121 y Fv(7)2480 5088 y
5298
Fl(d)2519 5121 y Fv(11)2609 5088 y Fl(e)2646 5121 y Fv(13)2736
5299
5088 y Fl(f)2780 5121 y Fv(,)i(where)e Fm(e)p Fv(+)p
5300
Fm(f)31 b Fv(is)20 b(either)h(0)h(or)510 5230 y(1,)30
5253
5301
b(and)e(the)h(other)g(exp)s(onen)m(ts)f(are)i(arbitrary)-8
5254
b(.)39 b(Other)28 b(sizes)h(are)g(computed)f(b)m(y)h(means)g(of)g(a)p
5302
b(.)39 b(Other)28 b(sizes)h(are)g(computed)f(b)m(y)h(means)g(of)g(a)510
5303
5340 y(slo)m(w,)h(general-purp)s(ose)f(routine)h(\(whic)m(h)f(nev)m
5304
(ertheless)i(retains)f Fm(O)s Fv(\()p Fm(n)15 b Fv(log)h
5305
Fm(n)p Fv(\))30 b(p)s(erformance,)p eop end
5257
19 20 bop 150 -116 a Fu(Chapter)30 b(3:)41 b(FFTW)31
5258
b(Reference)2354 b(19)510 299 y(slo)m(w,)30 b(general-purp)s(ose)f
5259
(routine)h(\(whic)m(h)f(nev)m(ertheless)i(retains)f Fl(O)s
5260
Fu(\()p Fl(n)15 b Fu(log)h Fl(n)p Fu(\))30 b(p)s(erformance,)510
5261
408 y(ev)m(en)i(for)f(prime)e(sizes\).)44 b(\(It)31 b(is)g(p)s(ossible)
5262
d(to)k(customize)g(FFTW)g(for)f(di\013eren)m(t)f(arra)m(y)i(sizes.)510
5263
518 y(See)k(Chapter)g(6)g([Installation)f(and)g(Customization],)i(page)
5264
g(55,)h(for)e(more)g(information.\))510 628 y(T)-8 b(ransforms)29
5307
TeXDict begin 19 20 bop 150 -116 a Fv(Chapter)30 b(3:)41
5308
b(FFTW)31 b(Reference)2354 b(19)510 299 y(ev)m(en)32
5309
b(for)f(prime)e(sizes\).)44 b(\(It)31 b(is)g(p)s(ossible)d(to)k
5310
(customize)g(FFTW)g(for)f(di\013eren)m(t)f(arra)m(y)i(sizes.)510
5311
408 y(See)k(Chapter)g(6)g([Installation)f(and)g(Customization],)i(page)
5312
g(55,)h(for)e(more)g(information.\))510 518 y(T)-8 b(ransforms)29
5265
5313
b(whose)h(sizes)h(are)f(p)s(o)m(w)m(ers)h(of)f(2)h(are)g(esp)s(ecially)
5266
d(fast.)225 761 y Fs(\017)60 b Fo(dir)34 b Fu(is)g(the)h(sign)f(of)h
5314
d(fast.)225 646 y Ft(\017)60 b Fp(dir)34 b Fv(is)g(the)h(sign)f(of)h
5267
5315
(the)g(exp)s(onen)m(t)f(in)g(the)h(form)m(ula)f(that)h(de\014nes)f(the)
5268
h(F)-8 b(ourier)34 b(transform.)54 b(It)330 871 y(can)31
5269
b(b)s(e)f Fs(\000)p Fu(1)h(or)g(+)o(1.)43 b(The)30 b(aliases)g
5270
Fo(FFTW_FORWARD)d Fu(and)j Fo(FFTW_BACKWARD)e Fu(are)j(pro)m(vided,)e
5271
(where)330 981 y Fo(FFTW_FORWARD)e Fu(stands)j(for)g
5272
Fs(\000)p Fu(1.)225 1114 y Fs(\017)60 b Fo(flags)29 b
5273
Fu(is)g(a)i(b)s(o)s(olean)e(OR)h(\(`)p Fo(|)p Fu('\))i(of)e(zero)h(or)g
5274
(more)f(of)h(the)f(follo)m(wing:)379 1248 y Fs(\000)60
5275
b Fo(FFTW_MEASURE)p Fu(:)33 b(this)19 b(\015ag)j(tells)e(FFTW)h(to)h
5276
(\014nd)d(the)i(optimal)f(plan)g(b)m(y)g(actually)h Fq(c)-5
5277
b(omputing)510 1358 y Fu(sev)m(eral)31 b(FFTs)g(and)f(measuring)f
5316
h(F)-8 b(ourier)34 b(transform.)54 b(It)330 755 y(can)31
5317
b(b)s(e)f Ft(\000)p Fv(1)h(or)g(+)o(1.)43 b(The)30 b(aliases)g
5318
Fp(FFTW_FORWARD)d Fv(and)j Fp(FFTW_BACKWARD)e Fv(are)j(pro)m(vided,)e
5319
(where)330 865 y Fp(FFTW_FORWARD)e Fv(stands)j(for)g
5320
Ft(\000)p Fv(1.)225 992 y Ft(\017)60 b Fp(flags)29 b
5321
Fv(is)g(a)i(b)s(o)s(olean)e(OR)h(\(`)p Fp(|)p Fv('\))i(of)e(zero)h(or)g
5322
(more)f(of)h(the)f(follo)m(wing:)379 1120 y Ft(\000)60
5323
b Fp(FFTW_MEASURE)p Fv(:)33 b(this)19 b(\015ag)j(tells)e(FFTW)h(to)h
5324
(\014nd)d(the)i(optimal)f(plan)g(b)m(y)g(actually)h Fr(c)-5
5325
b(omputing)510 1230 y Fv(sev)m(eral)31 b(FFTs)g(and)f(measuring)f
5278
5326
(their)h(execution)h(time.)41 b(Dep)s(ending)29 b(on)i(the)g
5279
(installation,)510 1467 y(this)e(can)i(tak)m(e)h(some)f(time.)1481
5280
1434 y Fn(1)379 1601 y Fs(\000)60 b Fo(FFTW_ESTIMATE)p
5281
Fu(:)34 b(do)25 b(not)g(run)f(an)m(y)h(FFT)h(and)e(pro)m(vide)g(a)h
5282
(\\reasonable")h(plan)e(\(for)h(a)g(RISC)510 1711 y(pro)s(cessor)37
5327
(installation,)510 1339 y(this)e(can)i(tak)m(e)h(some)f(time.)1481
5328
1306 y Fo(1)379 1467 y Ft(\000)60 b Fp(FFTW_ESTIMATE)p
5329
Fv(:)34 b(do)25 b(not)g(run)f(an)m(y)h(FFT)h(and)e(pro)m(vide)g(a)h
5330
(\\reasonable")h(plan)e(\(for)h(a)g(RISC)510 1576 y(pro)s(cessor)37
5283
5331
b(with)g(man)m(y)h(registers\).)62 b(If)38 b(neither)e
5284
Fo(FFTW_ESTIMATE)e Fu(nor)k Fo(FFTW_MEASURE)c Fu(is)510
5285
1820 y(pro)m(vided,)29 b(the)i(default)e(is)h Fo(FFTW_ESTIMATE)p
5286
Fu(.)379 1954 y Fs(\000)60 b Fo(FFTW_OUT_OF_PLACE)p Fu(:)41
5332
Fp(FFTW_ESTIMATE)e Fv(nor)k Fp(FFTW_MEASURE)c Fv(is)510
5333
1686 y(pro)m(vided,)29 b(the)i(default)e(is)h Fp(FFTW_ESTIMATE)p
5334
Fv(.)379 1813 y Ft(\000)60 b Fp(FFTW_OUT_OF_PLACE)p Fv(:)41
5287
5335
b(pro)s(duce)32 b(a)i(plan)e(assuming)f(that)j(the)f(input)e(and)i
5288
(output)g(arra)m(ys)510 2063 y(will)28 b(b)s(e)h(distinct)g(\(this)h
5289
(is)f(the)i(default\).)379 2197 y Fs(\000)60 b Fo(FFTW_IN_PLACE)p
5290
Fu(:)39 b(pro)s(duce)31 b(a)h(plan)e(assuming)g(that)i(y)m(ou)g(w)m(an)
5291
m(t)g(the)g(output)f(in)f(the)i(input)510 2307 y(arra)m(y)-8
5336
(output)g(arra)m(ys)510 1923 y(will)28 b(b)s(e)h(distinct)g(\(this)h
5337
(is)f(the)i(default\).)379 2051 y Ft(\000)60 b Fp(FFTW_IN_PLACE)p
5338
Fv(:)39 b(pro)s(duce)31 b(a)h(plan)e(assuming)g(that)i(y)m(ou)g(w)m(an)
5339
m(t)g(the)g(output)f(in)f(the)i(input)510 2160 y(arra)m(y)-8
5292
5340
b(.)50 b(The)33 b(algorithm)f(used)g(is)g(not)i(necessarily)e(in)g
5293
(place:)46 b(FFTW)34 b(is)e(able)h(to)h(compute)510 2416
5341
(place:)46 b(FFTW)34 b(is)e(able)h(to)h(compute)510 2270
5294
5342
y(true)23 b(in-place)f(transforms)h(only)f(for)h(small)f(v)-5
5295
b(alues)23 b(of)g Fo(n)p Fu(.)38 b(If)23 b(FFTW)h(is)e(not)i(able)f(to)
5296
h(compute)510 2526 y(the)31 b(transform)g(in-place,)f(it)h(will)e(allo)
5343
b(alues)23 b(of)g Fp(n)p Fv(.)38 b(If)23 b(FFTW)h(is)e(not)i(able)f(to)
5344
h(compute)510 2379 y(the)31 b(transform)g(in-place,)f(it)h(will)e(allo)
5297
5345
s(cate)i(a)h(temp)s(orary)e(arra)m(y)i(\(unless)e(y)m(ou)h(pro)m(vide)g
5298
(one)510 2636 y(y)m(ourself)7 b(\),)27 b(compute)e(the)h(transform)f
5346
(one)510 2489 y(y)m(ourself)7 b(\),)27 b(compute)e(the)h(transform)f
5299
5347
(out)h(of)g(place,)h(and)e(cop)m(y)h(the)g(result)f(bac)m(k.)40
5300
b Fq(Warning:)510 2745 y(This)f(option)i(changes)e(the)h(me)-5
5348
b Fr(Warning:)510 2599 y(This)f(option)i(changes)e(the)h(me)-5
5301
5349
b(aning)40 b(of)f(some)g(p)-5 b(ar)g(ameters)42 b(of)e
5302
Fo(fftw)c Fu(\(see)i(Section)f(3.2.3)510 2855 y([Computing)29
5350
Fp(fftw)c Fv(\(see)i(Section)f(3.2.3)510 2708 y([Computing)29
5303
5351
b(the)i(One-dimensional)c(T)-8 b(ransform],)30 b(page)h(20\).)510
5304
2988 y(The)d(in-place)f(option)h(is)f(mainly)g(pro)m(vided)f(for)j(p)s
5352
2836 y(The)d(in-place)f(option)h(is)f(mainly)g(pro)m(vided)f(for)j(p)s
5305
5353
(eople)e(who)h(w)m(an)m(t)h(to)g(write)e(their)h(o)m(wn)g(in-)510
5306
3098 y(place)k(m)m(ulti-dimensional)d(F)-8 b(ourier)32
5354
2945 y(place)k(m)m(ulti-dimensional)d(F)-8 b(ourier)32
5307
5355
b(transform,)g(using)f(FFTW)i(as)f(a)h(base.)47 b(F)-8
5308
b(or)33 b(example,)510 3208 y(consider)f(a)i(three-dimensional)e
5309
Fo(n)e(*)g(n)g(*)g(n)j Fu(transform.)49 b(An)33 b(out-of-place)i
5310
(algorithm)e(will)510 3317 y(need)45 b(another)g(arra)m(y)g(\(whic)m(h)
5356
b(or)33 b(example,)510 3055 y(consider)f(a)i(three-dimensional)e
5357
Fp(n)e(*)g(n)g(*)g(n)j Fv(transform.)49 b(An)33 b(out-of-place)i
5358
(algorithm)e(will)510 3164 y(need)45 b(another)g(arra)m(y)g(\(whic)m(h)
5311
5359
f(ma)m(y)i(b)s(e)e(h)m(uge\).)86 b(Ho)m(w)m(ev)m(er,)50
5312
b(FFTW)c(can)f(compute)h(the)510 3427 y(in-place)35 b(transform)f
5360
b(FFTW)c(can)f(compute)h(the)510 3274 y(in-place)35 b(transform)f
5313
5361
(along)i(eac)m(h)h(dimension)c(using)h(only)h(a)h(temp)s(orary)f(arra)m
5314
(y)h(of)g(size)f Fo(n)p Fu(.)510 3536 y(Moreo)m(v)m(er,)h(if)31
5362
(y)h(of)g(size)f Fp(n)p Fv(.)510 3384 y(Moreo)m(v)m(er,)h(if)31
5315
5363
b(FFTW)j(happ)s(ens)c(to)k(b)s(e)e(able)g(to)i(compute)f(the)f
5316
(transform)g(truly)g(in-place,)510 3646 y(no)k(temp)s(orary)g(arra)m(y)
5364
(transform)g(truly)g(in-place,)510 3493 y(no)k(temp)s(orary)g(arra)m(y)
5317
5365
h(and)e(no)i(cop)m(ying)f(are)g(needed.)58 b(As)37 b(distributed,)e
5318
(FFTW)i(`kno)m(ws')510 3756 y(ho)m(w)32 b(to)h(compute)f(in-place)g
5366
(FFTW)i(`kno)m(ws')510 3603 y(ho)m(w)32 b(to)h(compute)f(in-place)g
5319
5367
(transforms)f(of)h(size)g(1,)h(2,)h(3,)f(4,)g(5,)g(6,)g(7,)g(8,)h(9,)f
5320
(10,)h(11,)f(12,)h(13,)510 3865 y(14,)d(15,)h(16,)f(32)h(and)d(64.)510
5321
3999 y(The)h(default)f(mo)s(de)h(of)h(op)s(eration)f(is)f
5322
Fo(FFTW_OUT_OF_PLACE)p Fu(.)379 4133 y Fs(\000)60 b Fo(FFTW_USE_WISDOM)
5323
p Fu(:)37 b(use)30 b(an)m(y)h Fo(wisdom)e Fu(that)i(is)e(a)m(v)-5
5368
(10,)h(11,)f(12,)h(13,)510 3712 y(14,)d(15,)h(16,)f(32)h(and)d(64.)510
5369
3840 y(The)h(default)f(mo)s(de)h(of)h(op)s(eration)f(is)f
5370
Fp(FFTW_OUT_OF_PLACE)p Fv(.)379 3968 y Ft(\000)60 b Fp(FFTW_USE_WISDOM)
5371
p Fv(:)37 b(use)30 b(an)m(y)h Fp(wisdom)e Fv(that)i(is)e(a)m(v)-5
5324
5372
b(ailable)30 b(to)h(help)e(in)h(the)g(creation)h(of)g(the)510
5325
4242 y(plan.)50 b(\(See)34 b(Section)g(2.6)h([W)-8 b(ords)34
5373
4077 y(plan.)50 b(\(See)34 b(Section)g(2.6)h([W)-8 b(ords)34
5326
5374
b(of)h(Wisdom],)f(page)h(13.\))52 b(This)32 b(can)i(greatly)h(sp)s(eed)
5327
e(the)510 4352 y(creation)27 b(of)g(plans,)g(esp)s(ecially)e(with)g
5328
(the)j Fo(FFTW_MEASURE)23 b Fu(option.)39 b Fo(FFTW_ESTIMATE)23
5329
b Fu(plans)510 4461 y(can)28 b(also)g(tak)m(e)i(adv)-5
5330
b(an)m(tage)30 b(of)e Fo(wisdom)e Fu(to)j(pro)s(duce)e(a)h(more)g
5331
(optimal)f(plan)g(\(based)h(on)g(past)510 4571 y(measuremen)m(ts\))i
5375
e(the)510 4187 y(creation)27 b(of)g(plans,)g(esp)s(ecially)e(with)g
5376
(the)j Fp(FFTW_MEASURE)23 b Fv(option.)39 b Fp(FFTW_ESTIMATE)23
5377
b Fv(plans)510 4296 y(can)28 b(also)g(tak)m(e)i(adv)-5
5378
b(an)m(tage)30 b(of)e Fp(wisdom)e Fv(to)j(pro)s(duce)e(a)h(more)g
5379
(optimal)f(plan)g(\(based)h(on)g(past)510 4406 y(measuremen)m(ts\))i
5332
5380
(than)g(the)g(estimation)f(heuristic)f(w)m(ould)g(normally)g(generate.)
5333
42 b(When)30 b(the)510 4681 y Fo(FFTW_MEASURE)36 b Fu(option)j(is)f
5334
(used,)j(new)d Fo(wisdom)g Fu(will)f(also)i(b)s(e)f(generated)j(if)d
5335
(the)h(curren)m(t)510 4790 y(transform)30 b(size)g(is)f(not)i
5336
(completely)f(understo)s(o)s(d)f(b)m(y)h(existing)f Fo(wisdom)p
5337
Fu(.)225 4924 y Fs(\017)60 b Fo(in)p Fu(,)35 b Fo(out)p
5338
Fu(,)f Fo(istride)p Fu(,)g Fo(ostride)e Fu(\(only)i(for)g
5339
Fo(fftw_create_plan_specifi)o(c)p Fu(\):)43 b(see)35
5340
b(corresp)s(ond-)330 5033 y(ing)41 b(argumen)m(ts)h(in)e(the)i
5341
(description)d(of)j Fo(fftw)p Fu(.)73 b(\(See)42 b(Section)g(3.2.3)h
5342
([Computing)d(the)i(One-)p 150 5131 1200 4 v 192 5197
5343
a Fn(1)275 5230 y Fu(The)28 b(basic)h(problem)f(is)g(the)i(resolution)e
5344
(of)i(the)f(clo)s(c)m(k:)41 b(FFTW)30 b(needs)f(to)h(run)e(for)h(a)h
5345
(certain)f(time)275 5340 y(for)h(the)g(clo)s(c)m(k)h(to)g(b)s(e)f
5381
42 b(When)30 b(the)510 4515 y Fp(FFTW_MEASURE)36 b Fv(option)j(is)f
5382
(used,)j(new)d Fp(wisdom)g Fv(will)f(also)i(b)s(e)f(generated)j(if)d
5383
(the)h(curren)m(t)510 4625 y(transform)30 b(size)g(is)f(not)i
5384
(completely)f(understo)s(o)s(d)f(b)m(y)h(existing)f Fp(wisdom)p
5385
Fv(.)225 4753 y Ft(\017)60 b Fp(in)p Fv(,)35 b Fp(out)p
5386
Fv(,)f Fp(istride)p Fv(,)g Fp(ostride)e Fv(\(only)i(for)g
5387
Fp(fftw_create_plan_specifi)o(c)p Fv(\):)43 b(see)35
5388
b(corresp)s(ond-)330 4862 y(ing)41 b(argumen)m(ts)h(in)e(the)i
5389
(description)d(of)j Fp(fftw)p Fv(.)73 b(\(See)42 b(Section)g(3.2.3)h
5390
([Computing)d(the)i(One-)330 4972 y(dimensional)e(T)-8
5391
b(ransform],)45 b(page)f(20.\))79 b(In)42 b(particular,)i(the)f
5392
Fp(out)f Fv(and)g Fp(ostride)f Fv(parameters)330 5081
5393
y(ha)m(v)m(e)32 b(the)e(same)h(sp)s(ecial)e(meaning)h(for)g
5394
Fp(FFTW_IN_PLACE)c Fv(transforms)k(as)h(they)f(ha)m(v)m(e)i(for)e
5395
Fp(fftw)p Fv(.)p 150 5149 1200 4 v 199 5217 a Fo(1)275
5396
5249 y Fj(The)25 b(basic)h(problem)e(is)i(the)e(resolution)j(of)e(the)g
5397
(clo)r(c)n(k:)35 b(FFTW)26 b(needs)e(to)i(run)e(for)i(a)g(certain)f
5398
(time)g(for)g(the)g(clo)r(c)n(k)h(to)275 5340 y(b)r(e)f(reliable.)p
5348
20 21 bop 150 -116 a Fu(20)3232 b(FFTW)330 299 y(dimensional)40
5349
b(T)-8 b(ransform],)45 b(page)f(20.\))79 b(In)42 b(particular,)i(the)f
5350
Fo(out)f Fu(and)g Fo(ostride)f Fu(parameters)330 408
5351
y(ha)m(v)m(e)32 b(the)e(same)h(sp)s(ecial)e(meaning)h(for)g
5352
Fo(FFTW_IN_PLACE)c Fu(transforms)k(as)h(they)f(ha)m(v)m(e)i(for)e
5353
Fo(fftw)p Fu(.)150 636 y Fi(3.2.2)63 b(Discussion)42
5354
b(on)g(Sp)s(eci\014c)f(Plans)275 830 y Fu(W)-8 b(e)22
5355
b(recommend)f(the)g(use)g(of)h(the)f(sp)s(eci\014c)f(planners,)i(ev)m
5356
(en)g(in)e(cases)i(where)e(y)m(ou)i(will)d(b)s(e)h(transform-)150
5357
939 y(ing)30 b(arra)m(ys)h(di\013eren)m(t)f(from)g(those)h(passed)f(to)
5358
i(the)f(sp)s(eci\014c)e(planners,)g(as)i(they)g(confer)g(the)f(follo)m
5359
(wing)150 1049 y(adv)-5 b(an)m(tages:)225 1185 y Fs(\017)60
5360
b Fu(The)36 b(resulting)f(plans)g(will)f(b)s(e)i(optimized)g(for)g(y)m
5361
(our)h(sp)s(eci\014c)e(arra)m(ys)i(and)f(strides.)58
5362
b(This)35 b(ma)m(y)330 1294 y(or)d(ma)m(y)h(not)g(mak)m(e)g(a)f
5363
(signi\014can)m(t)g(di\013erence,)g(but)g(it)f(certainly)h(do)s(esn't)g
5364
(h)m(urt.)46 b(\(The)32 b(ordinary)330 1404 y(planner)d(do)s(es)h(its)f
5365
(planning)f(based)i(up)s(on)f(a)i(stride-one)f(temp)s(orary)g(arra)m(y)
5366
g(that)h(it)f(allo)s(cates.\))225 1539 y Fs(\017)60 b
5367
Fu(Less)27 b(in)m(termediate)g(storage)i(is)e(required)e(during)g(the)j
5368
(planning)d(pro)s(cess.)39 b(\(The)27 b(ordinary)f(plan-)330
5369
1649 y(ner)32 b(uses)g(O\()p Fo(N)p Fu(\))h(temp)s(orary)f(storage,)j
5370
(where)d Fo(N)g Fu(is)g(the)h(maxim)m(um)e(dimension,)g(while)g(it)h
5371
(is)f(cre-)330 1758 y(ating)f(the)h(plan.\))225 1894
5372
y Fs(\017)60 b Fu(F)-8 b(or)32 b(m)m(ulti-dimensional)27
5373
b(transforms,)j(new)h(parameters)g(b)s(ecome)h(accessible)e(for)h
5374
(optimization)330 2003 y(b)m(y)36 b(the)h(planner.)58
5375
b(\(Since)36 b(m)m(ulti-dimensional)c(arra)m(ys)37 b(can)g(b)s(e)f(v)m
5376
(ery)h(large,)h(w)m(e)f(don't)g(dare)f(to)330 2113 y(allo)s(cate)30
5377
b(one)g(in)f(the)g(ordinary)f(planner)g(for)i(exp)s(erimen)m(tation.)39
5378
b(This)28 b(prev)m(en)m(ts)j(us)e(from)g(doing)330 2222
5401
TeXDict begin 20 21 bop 150 -116 a Fv(20)3232 b(FFTW)150
5402
299 y Fh(3.2.2)63 b(Discussion)42 b(on)g(Sp)s(eci\014c)f(Plans)275
5403
499 y Fv(W)-8 b(e)22 b(recommend)f(the)g(use)g(of)h(the)f(sp)s
5404
(eci\014c)f(planners,)i(ev)m(en)g(in)e(cases)i(where)e(y)m(ou)i(will)d
5405
(b)s(e)h(transform-)150 608 y(ing)30 b(arra)m(ys)h(di\013eren)m(t)f
5406
(from)g(those)h(passed)f(to)i(the)f(sp)s(eci\014c)e(planners,)g(as)i
5407
(they)g(confer)g(the)f(follo)m(wing)150 718 y(adv)-5
5408
b(an)m(tages:)225 860 y Ft(\017)60 b Fv(The)36 b(resulting)f(plans)g
5409
(will)f(b)s(e)i(optimized)g(for)g(y)m(our)h(sp)s(eci\014c)e(arra)m(ys)i
5410
(and)f(strides.)58 b(This)35 b(ma)m(y)330 969 y(or)d(ma)m(y)h(not)g
5411
(mak)m(e)g(a)f(signi\014can)m(t)g(di\013erence,)g(but)g(it)f(certainly)
5412
h(do)s(esn't)g(h)m(urt.)46 b(\(The)32 b(ordinary)330
5413
1079 y(planner)d(do)s(es)h(its)f(planning)f(based)i(up)s(on)f(a)i
5414
(stride-one)f(temp)s(orary)g(arra)m(y)g(that)h(it)f(allo)s(cates.\))225
5415
1217 y Ft(\017)60 b Fv(Less)27 b(in)m(termediate)g(storage)i(is)e
5416
(required)e(during)g(the)j(planning)d(pro)s(cess.)39
5417
b(\(The)27 b(ordinary)f(plan-)330 1327 y(ner)32 b(uses)g(O\()p
5418
Fp(N)p Fv(\))h(temp)s(orary)f(storage,)j(where)d Fp(N)g
5419
Fv(is)g(the)h(maxim)m(um)e(dimension,)g(while)g(it)h(is)f(cre-)330
5420
1436 y(ating)f(the)h(plan.\))225 1574 y Ft(\017)60 b
5421
Fv(F)-8 b(or)32 b(m)m(ulti-dimensional)27 b(transforms,)j(new)h
5422
(parameters)g(b)s(ecome)h(accessible)e(for)h(optimization)330
5423
1684 y(b)m(y)36 b(the)h(planner.)58 b(\(Since)36 b(m)m
5424
(ulti-dimensional)c(arra)m(ys)37 b(can)g(b)s(e)f(v)m(ery)h(large,)h(w)m
5425
(e)f(don't)g(dare)f(to)330 1794 y(allo)s(cate)30 b(one)g(in)f(the)g
5426
(ordinary)f(planner)g(for)i(exp)s(erimen)m(tation.)39
5427
b(This)28 b(prev)m(en)m(ts)j(us)e(from)g(doing)330 1903
5379
5428
y(certain)h(optimizations)f(that)i(can)g(yield)e(dramatic)h(impro)m(v)m
5380
(emen)m(ts)g(in)f(some)i(cases.\))275 2384 y(On)36 b(the)h(other)g
5381
(hand,)h(note)g(that)f Fq(the)i(sp)-5 b(e)g(ci\014c)40
5429
(emen)m(ts)g(in)f(some)i(cases.\))275 2073 y(On)36 b(the)h(other)g
5430
(hand,)h(note)g(that)f Fr(the)i(sp)-5 b(e)g(ci\014c)40
5382
5431
b(planner)g(destr)-5 b(oys)41 b(the)e(c)-5 b(ontents)40
5383
b(of)f(the)g Fo(in)f Fq(and)150 2494 y Fo(out)32 b Fq(arr)-5
5384
b(ays)p Fu(.)150 2721 y Fi(3.2.3)63 b(Computing)41 b(the)f
5385
(One-dimensional)i(T)-10 b(ransform)390 2909 y Fo(#include)46
5386
b(<fftw.h>)390 3117 y(void)h(fftw\(fftw_plan)d(plan,)i(int)h(howmany,)
5387
867 3220 y(fftw_complex)e(*in,)h(int)h(istride,)f(int)h(idist,)867
5388
3324 y(fftw_complex)e(*out,)h(int)h(ostride,)f(int)g(odist\);)390
5389
3532 y(void)h(fftw_one\(fftw_plan)42 b(plan,)47 b(fftw_complex)d(*in,)
5390
867 3636 y(fftw_complex)h(*out\);)275 3772 y Fu(The)22
5391
b(function)g Fo(fftw)g Fu(computes)h(the)g(one-dimensional)e(F)-8
5432
b(of)f(the)g Fp(in)f Fr(and)150 2183 y Fp(out)32 b Fr(arr)-5
5433
b(ays)p Fv(.)150 2422 y Fh(3.2.3)63 b(Computing)41 b(the)f
5434
(One-dimensional)i(T)-10 b(ransform)390 2584 y Fp(#include)46
5435
b(<fftw.h>)390 2791 y(void)h(fftw\(fftw_plan)d(plan,)i(int)h(howmany,)
5436
867 2895 y(fftw_complex)e(*in,)h(int)h(istride,)f(int)h(idist,)867
5437
2999 y(fftw_complex)e(*out,)h(int)h(ostride,)f(int)g(odist\);)390
5438
3206 y(void)h(fftw_one\(fftw_plan)42 b(plan,)47 b(fftw_complex)d(*in,)
5439
867 3310 y(fftw_complex)h(*out\);)275 3452 y Fv(The)22
5440
b(function)g Fp(fftw)g Fv(computes)h(the)g(one-dimensional)e(F)-8
5392
5441
b(ourier)23 b(transform,)h(using)e(a)h(plan)f(created)150
5393
3881 y(b)m(y)31 b Fo(fftw_create_plan)c Fu(\(See)k(Section)g(3.2.1)i
5442
3561 y(b)m(y)31 b Fp(fftw_create_plan)c Fv(\(See)k(Section)g(3.2.1)i
5394
5443
([Plan)e(Creation)f(for)h(One-dimensional)e(T)-8 b(ransforms],)150
5395
3991 y(page)38 b(18.\))62 b(The)37 b(function)f Fo(fftw_one)f
5396
Fu(pro)m(vides)h(a)i(simpli\014ed)33 b(in)m(terface)38
5397
b(for)f(the)g(common)h(case)g(of)150 4100 y(single)29
5398
b(input)f(arra)m(y)j(of)g(stride)e(1.)150 4327 y Fi(Argumen)m(ts)225
5399
4522 y Fs(\017)60 b Fo(plan)35 b Fu(is)g(the)i(plan)e(created)i(b)m(y)f
5400
Fo(fftw_create_plan)c Fu(\(see)38 b(Section)e(3.2.1)i([Plan)d(Creation)
5401
h(for)330 4631 y(One-dimensional)27 b(T)-8 b(ransforms],)30
5402
b(page)h(18\).)225 4766 y Fs(\017)60 b Fo(howmany)30
5403
b Fu(is)h(the)h(n)m(um)m(b)s(er)e(of)i(transforms)f Fo(fftw)g
5404
Fu(will)e(compute.)46 b(It)32 b(is)f(faster)h(to)h(tell)e(FFTW)h(to)330
5405
4876 y(compute)f(man)m(y)f(transforms,)g(instead)g(of)g(simply)e
5406
(calling)h Fo(fftw)g Fu(man)m(y)i(times.)225 5011 y Fs(\017)60
5407
b Fo(in)p Fu(,)33 b Fo(istride)e Fu(and)i Fo(idist)e
5408
Fu(describ)s(e)h(the)h(input)e(arra)m(y\(s\).)50 b(There)33
5409
b(are)g Fo(howmany)e Fu(input)g(arra)m(ys;)330 5121 y(the)26
5410
b(\014rst)f(one)h(is)f(p)s(oin)m(ted)g(to)h(b)m(y)g Fo(in)p
5411
Fu(,)g(the)g(second)g(one)g(is)f(p)s(oin)m(ted)g(to)h(b)m(y)g
5412
Fo(in)k(+)g(idist)p Fu(,)c(and)f(so)h(on,)330 5230 y(up)f(to)h
5413
Fo(in)k(+)g(\(howmany)e(-)i(1\))g(*)g(idist)p Fu(.)37
5444
3671 y(page)38 b(18.\))62 b(The)37 b(function)f Fp(fftw_one)f
5445
Fv(pro)m(vides)h(a)i(simpli\014ed)33 b(in)m(terface)38
5446
b(for)f(the)g(common)h(case)g(of)150 3781 y(single)29
5447
b(input)f(arra)m(y)j(of)g(stride)e(1.)150 4019 y Fh(Argumen)m(ts)225
5448
4187 y Ft(\017)60 b Fp(plan)35 b Fv(is)g(the)i(plan)e(created)i(b)m(y)f
5449
Fp(fftw_create_plan)c Fv(\(see)38 b(Section)e(3.2.1)i([Plan)d(Creation)
5450
h(for)330 4297 y(One-dimensional)27 b(T)-8 b(ransforms],)30
5451
b(page)h(18\).)225 4435 y Ft(\017)60 b Fp(howmany)30
5452
b Fv(is)h(the)h(n)m(um)m(b)s(er)e(of)i(transforms)f Fp(fftw)g
5453
Fv(will)e(compute.)46 b(It)32 b(is)f(faster)h(to)h(tell)e(FFTW)h(to)330
5454
4544 y(compute)f(man)m(y)f(transforms,)g(instead)g(of)g(simply)e
5455
(calling)h Fp(fftw)g Fv(man)m(y)i(times.)225 4682 y Ft(\017)60
5456
b Fp(in)p Fv(,)33 b Fp(istride)e Fv(and)i Fp(idist)e
5457
Fv(describ)s(e)h(the)h(input)e(arra)m(y\(s\).)50 b(There)33
5458
b(are)g Fp(howmany)e Fv(input)g(arra)m(ys;)330 4792 y(the)26
5459
b(\014rst)f(one)h(is)f(p)s(oin)m(ted)g(to)h(b)m(y)g Fp(in)p
5460
Fv(,)g(the)g(second)g(one)g(is)f(p)s(oin)m(ted)g(to)h(b)m(y)g
5461
Fp(in)k(+)g(idist)p Fv(,)c(and)f(so)h(on,)330 4902 y(up)f(to)h
5462
Fp(in)k(+)g(\(howmany)e(-)i(1\))g(*)g(idist)p Fv(.)37
5414
5463
b(Eac)m(h)27 b(input)c(arra)m(y)k(consists)e(of)g(complex)h(n)m(um)m(b)
5415
s(ers)e(\(see)330 5340 y(Section)35 b(3.1)i([Data)g(T)m(yp)s(es],)g
5464
s(ers)e(\(see)330 5011 y(Section)35 b(3.1)i([Data)g(T)m(yp)s(es],)g
5416
5465
(page)g(17\),)h(whic)m(h)c(are)i(not)g(necessarily)e(con)m(tiguous)i
5417
(in)e(memory)-8 b(.)p eop
5466
(in)e(memory)-8 b(.)330 5121 y(Sp)s(eci\014cally)g(,)39
5467
b Fp(in[0])f Fv(is)g(the)h(\014rst)g(elemen)m(t)g(of)g(the)h(\014rst)e
5468
(arra)m(y)-8 b(,)42 b Fp(in[istride])36 b Fv(is)j(the)g(second)330
5469
5230 y(elemen)m(t)f(of)f(the)g(\014rst)g(arra)m(y)-8
5470
b(,)40 b(and)c(so)i(on.)61 b(In)36 b(general,)j(the)f
5471
Fp(i)p Fv(-th)f(elemen)m(t)g(of)h(the)f Fp(j)p Fv(-th)g(input)330
5472
5340 y(arra)m(y)31 b(will)d(b)s(e)h(in)g(p)s(osition)g
5473
Fp(in[i)g(*)h(istride)e(+)j(j)f(*)g(idist])p Fv(.)p eop
5419
21 22 bop 150 -116 a Fu(Chapter)30 b(3:)41 b(FFTW)31
5420
b(Reference)2354 b(21)330 299 y(Sp)s(eci\014cally)-8
5421
b(,)39 b Fo(in[0])f Fu(is)g(the)h(\014rst)g(elemen)m(t)g(of)g(the)h
5422
(\014rst)e(arra)m(y)-8 b(,)42 b Fo(in[istride])36 b Fu(is)j(the)g
5423
(second)330 408 y(elemen)m(t)f(of)f(the)g(\014rst)g(arra)m(y)-8
5424
b(,)40 b(and)c(so)i(on.)61 b(In)36 b(general,)j(the)f
5425
Fo(i)p Fu(-th)f(elemen)m(t)g(of)h(the)f Fo(j)p Fu(-th)g(input)330
5426
518 y(arra)m(y)31 b(will)d(b)s(e)h(in)g(p)s(osition)g
5427
Fo(in[i)g(*)h(istride)e(+)j(j)f(*)g(idist])p Fu(.)225
5428
652 y Fs(\017)60 b Fo(out)p Fu(,)33 b Fo(ostride)f Fu(and)g
5429
Fo(odist)g Fu(describ)s(e)g(the)h(output)g(arra)m(y\(s\).)50
5430
b(The)33 b(format)g(is)g(the)g(same)h(as)f(for)330 762
5431
y(the)e(input)d(arra)m(y)-8 b(.)379 895 y Fs(\000)60
5432
b Fq(In-plac)-5 b(e)46 b(tr)-5 b(ansforms)7 b Fu(:)73
5433
b(If)44 b(the)h Fo(plan)e Fu(sp)s(eci\014es)g(an)i(in-place)e
5434
(transform,)48 b Fo(ostride)43 b Fu(and)510 1005 y Fo(odist)33
5435
b Fu(are)h(alw)m(a)m(ys)h(ignored.)51 b(If)33 b Fo(out)g
5436
Fu(is)h Fo(NULL)p Fu(,)g Fo(out)f Fu(is)g(ignored,)h(to)s(o.)53
5437
b(Otherwise,)34 b Fo(out)f Fu(is)510 1115 y(in)m(terpreted)h(as)h(a)g
5438
(p)s(oin)m(ter)f(to)i(an)e(arra)m(y)i(of)f Fo(n)f Fu(complex)h(n)m(um)m
5439
(b)s(ers,)f(that)i(FFTW)f(will)d(use)510 1224 y(as)j(temp)s(orary)f
5440
(space)h(to)h(p)s(erform)d(the)i(in-place)e(computation.)54
5441
b Fo(out)34 b Fu(is)f(used)h(as)h(scratc)m(h)510 1334
5442
y(space)41 b(and)g(its)f(con)m(ten)m(ts)j(destro)m(y)m(ed.)73
5443
b(In)40 b(this)g(case,)k Fo(out)c Fu(m)m(ust)h(b)s(e)f(an)h(ordinary)e
5444
(arra)m(y)510 1443 y(whose)30 b(elemen)m(ts)h(are)g(con)m(tiguous)f(in)
5445
f(memory)i(\(no)f(striding\).)275 1602 y(The)45 b(function)f
5446
Fo(fftw_one)f Fu(transforms)i(a)h(single,)i(con)m(tiguous)e(input)d
5447
(arra)m(y)k(to)f(a)g(con)m(tiguous)150 1711 y(output)30
5448
b(arra)m(y)-8 b(.)42 b(By)30 b(de\014nition,)f(the)h(call)390
5449
1839 y Fo(fftw_one\(plan,)44 b(in,)j(out\))275 1973 y
5450
Fu(is)29 b(equiv)-5 b(alen)m(t)30 b(to)390 2101 y Fo(fftw\(plan,)45
5451
b(1,)i(in,)g(1,)g(1,)g(out,)g(1,)g(1\))150 2324 y Fi(3.2.4)63
5452
b(Destro)m(ying)41 b(a)g(One-dimensional)g(Plan)390 2510
5453
y Fo(#include)46 b(<fftw.h>)390 2718 y(void)h(fftw_destroy_plan\(fftw_)
5454
o(plan)41 b(plan\);)275 2852 y Fu(The)27 b(function)f
5455
Fo(fftw_destroy_plan)d Fu(frees)28 b(the)f(plan)g Fo(plan)f
5456
Fu(and)h(releases)h(all)f(the)h(memory)f(asso-)150 2961
5457
y(ciated)k(with)e(it.)40 b(After)31 b(destruction,)e(a)i(plan)e(is)h
5458
(no)g(longer)g(v)-5 b(alid.)150 3184 y Fi(3.2.5)63 b(What)40
5459
b(FFTW)h(Really)f(Computes)275 3376 y Fu(In)26 b(this)g(section,)i(w)m
5460
(e)g(de\014ne)e(precisely)g(what)h(FFTW)h(computes.)40
5461
b(Please)27 b(b)s(e)f(w)m(arned)h(that)h(di\013er-)150
5462
3485 y(en)m(t)j(authors)f(and)g(soft)m(w)m(are)i(pac)m(k)-5
5476
TeXDict begin 21 22 bop 150 -116 a Fv(Chapter)30 b(3:)41
5477
b(FFTW)31 b(Reference)2354 b(21)225 299 y Ft(\017)60
5478
b Fp(out)p Fv(,)33 b Fp(ostride)f Fv(and)g Fp(odist)g
5479
Fv(describ)s(e)g(the)h(output)g(arra)m(y\(s\).)50 b(The)33
5480
b(format)g(is)g(the)g(same)h(as)f(for)330 408 y(the)e(input)d(arra)m(y)
5481
-8 b(.)379 540 y Ft(\000)60 b Fr(In-plac)-5 b(e)46 b(tr)-5
5482
b(ansforms)7 b Fv(:)73 b(If)44 b(the)h Fp(plan)e Fv(sp)s(eci\014es)g
5483
(an)i(in-place)e(transform,)48 b Fp(ostride)43 b Fv(and)510
5484
649 y Fp(odist)33 b Fv(are)h(alw)m(a)m(ys)h(ignored.)51
5485
b(If)33 b Fp(out)g Fv(is)h Fp(NULL)p Fv(,)g Fp(out)f
5486
Fv(is)g(ignored,)h(to)s(o.)53 b(Otherwise,)34 b Fp(out)f
5487
Fv(is)510 759 y(in)m(terpreted)h(as)h(a)g(p)s(oin)m(ter)f(to)i(an)e
5488
(arra)m(y)i(of)f Fp(n)f Fv(complex)h(n)m(um)m(b)s(ers,)f(that)i(FFTW)f
5489
(will)d(use)510 868 y(as)j(temp)s(orary)f(space)h(to)h(p)s(erform)d
5490
(the)i(in-place)e(computation.)54 b Fp(out)34 b Fv(is)f(used)h(as)h
5491
(scratc)m(h)510 978 y(space)41 b(and)g(its)f(con)m(ten)m(ts)j(destro)m
5492
(y)m(ed.)73 b(In)40 b(this)g(case,)k Fp(out)c Fv(m)m(ust)h(b)s(e)f(an)h
5493
(ordinary)e(arra)m(y)510 1088 y(whose)30 b(elemen)m(ts)h(are)g(con)m
5494
(tiguous)f(in)f(memory)i(\(no)f(striding\).)275 1240
5495
y(The)45 b(function)f Fp(fftw_one)f Fv(transforms)i(a)h(single,)i(con)m
5496
(tiguous)e(input)d(arra)m(y)k(to)f(a)g(con)m(tiguous)150
5497
1350 y(output)30 b(arra)m(y)-8 b(.)42 b(By)30 b(de\014nition,)f(the)h
5498
(call)390 1475 y Fp(fftw_one\(plan,)44 b(in,)j(out\))275
5499
1607 y Fv(is)29 b(equiv)-5 b(alen)m(t)30 b(to)390 1732
5500
y Fp(fftw\(plan,)45 b(1,)i(in,)g(1,)g(0,)g(out,)g(1,)g(0\))150
5501
1946 y Fh(3.2.4)63 b(Destro)m(ying)41 b(a)g(One-dimensional)g(Plan)390
5502
2108 y Fp(#include)46 b(<fftw.h>)390 2316 y(void)h
5503
(fftw_destroy_plan\(fftw_)o(plan)41 b(plan\);)275 2447
5504
y Fv(The)27 b(function)f Fp(fftw_destroy_plan)d Fv(frees)28
5505
b(the)f(plan)g Fp(plan)f Fv(and)h(releases)h(all)f(the)h(memory)f
5506
(asso-)150 2557 y(ciated)k(with)e(it.)40 b(After)31 b(destruction,)e(a)
5507
i(plan)e(is)h(no)g(longer)g(v)-5 b(alid.)150 2771 y Fh(3.2.5)63
5508
b(What)40 b(FFTW)h(Really)f(Computes)275 2960 y Fv(In)26
5509
b(this)g(section,)i(w)m(e)g(de\014ne)e(precisely)g(what)h(FFTW)h
5510
(computes.)40 b(Please)27 b(b)s(e)f(w)m(arned)h(that)h(di\013er-)150
5511
3070 y(en)m(t)j(authors)f(and)g(soft)m(w)m(are)i(pac)m(k)-5
5463
5512
b(ages)32 b(migh)m(t)e(emplo)m(y)g(di\013eren)m(t)g(con)m(v)m(en)m
5464
(tions)h(than)g(FFTW)g(do)s(es.)275 3619 y(The)e(forw)m(ard)h
5465
(transform)g(of)g(a)h(complex)f(arra)m(y)h Fl(X)38 b
5466
Fu(of)30 b(size)h Fl(n)f Fu(computes)g(an)g(arra)m(y)h
5467
Fl(Y)20 b Fu(,)31 b(where)1475 3892 y Fl(Y)1528 3906
5468
y Fk(i)1581 3892 y Fu(=)1677 3786 y Fk(n)p Fj(\000)p
5469
Fn(1)1680 3811 y Fh(X)1682 3988 y Fk(j)s Fn(=0)1818 3892
5470
y Fl(X)1893 3906 y Fk(j)1928 3892 y Fl(e)1970 3854 y
5471
Fj(\000)p Fn(2)p Fk(\031)r(ij)2149 3809 y Fj(p)p 2205
5472
3809 85 3 v 2205 3854 a(\000)p Fn(1)p Fk(=n)2400 3892
5473
y Fl(:)275 4198 y Fu(The)e(bac)m(kw)m(ard)i(transform)f(computes)1501
5474
4471 y Fl(Y)1554 4485 y Fk(i)1607 4471 y Fu(=)1703 4365
5475
y Fk(n)p Fj(\000)p Fn(1)1706 4390 y Fh(X)1708 4567 y
5476
Fk(j)s Fn(=0)1844 4471 y Fl(X)1919 4485 y Fk(j)1954 4471
5477
y Fl(e)1996 4434 y Fn(2)p Fk(\031)r(ij)2123 4389 y Fj(p)p
5478
2179 4389 V 2179 4434 a(\000)p Fn(1)p Fk(=n)2374 4471
5479
y Fl(:)275 4877 y Fu(FFTW)h(computes)g(an)f(unnormalized)f(transform,)h
5480
(that)h(is,)f(the)h(equation)g Fl(I)7 b(F)13 b(F)g(T)g
5481
Fu(\()p Fl(F)g(F)g(T)g Fu(\()p Fl(X)7 b Fu(\)\))27 b(=)150
5482
4987 y Fl(nX)47 b Fu(holds.)70 b(In)40 b(other)g(w)m(ords,)j(applying)c
5513
(tions)h(than)g(FFTW)g(do)s(es.)275 3201 y(The)e(forw)m(ard)h
5514
(transform)g(of)g(a)h(complex)f(arra)m(y)h Fm(X)38 b
5515
Fv(of)30 b(size)h Fm(n)f Fv(computes)g(an)g(arra)m(y)h
5516
Fm(Y)20 b Fv(,)31 b(where)1475 3449 y Fm(Y)1528 3463
5517
y Fl(i)1581 3449 y Fv(=)1677 3344 y Fl(n)p Fk(\000)p
5518
Fo(1)1680 3369 y Fg(X)1682 3545 y Fl(j)s Fo(=0)1818 3449
5519
y Fm(X)1893 3463 y Fl(j)1928 3449 y Fm(e)1970 3412 y
5520
Fk(\000)p Fo(2)p Fl(\031)r(ij)2149 3367 y Fk(p)p 2205
5521
3367 85 3 v 2205 3412 a(\000)p Fo(1)p Fl(=n)2400 3449
5522
y Fm(:)275 3729 y Fv(The)e(bac)m(kw)m(ard)i(transform)f(computes)1501
5523
3977 y Fm(Y)1554 3991 y Fl(i)1607 3977 y Fv(=)1703 3872
5524
y Fl(n)p Fk(\000)p Fo(1)1706 3897 y Fg(X)1708 4073 y
5525
Fl(j)s Fo(=0)1844 3977 y Fm(X)1919 3991 y Fl(j)1954 3977
5526
y Fm(e)1996 3940 y Fo(2)p Fl(\031)r(ij)2123 3895 y Fk(p)p
5527
2179 3895 V 2179 3940 a(\000)p Fo(1)p Fl(=n)2374 3977
5528
y Fm(:)275 4332 y Fv(FFTW)h(computes)g(an)f(unnormalized)f(transform,)h
5529
(that)h(is,)f(the)h(equation)g Fm(I)7 b(F)13 b(F)g(T)g
5530
Fv(\()p Fm(F)g(F)g(T)g Fv(\()p Fm(X)7 b Fv(\)\))27 b(=)150
5531
4442 y Fm(nX)47 b Fv(holds.)70 b(In)40 b(other)g(w)m(ords,)j(applying)c
5483
5532
(the)h(forw)m(ard)g(and)g(then)g(the)h(bac)m(kw)m(ard)g(transform)f
5484
(will)150 5096 y(m)m(ultiply)28 b(the)i(input)f(b)m(y)h
5485
Fl(n)p Fu(.)275 5230 y(An)j Fo(FFTW_FORWARD)e Fu(transform)i(corresp)s
5486
(onds)f(to)j(a)f(sign)f(of)h Fs(\000)p Fu(1)g(in)e(the)i(exp)s(onen)m
5487
(t)g(of)g(the)g(DFT.)150 5340 y(Note)23 b(also)g(that)f(w)m(e)h(use)f
5533
(will)150 4551 y(m)m(ultiply)28 b(the)i(input)f(b)m(y)h
5534
Fm(n)p Fv(.)275 4682 y(An)j Fp(FFTW_FORWARD)e Fv(transform)i(corresp)s
5535
(onds)f(to)j(a)f(sign)f(of)h Ft(\000)p Fv(1)g(in)e(the)i(exp)s(onen)m
5536
(t)g(of)g(the)g(DFT.)150 4792 y(Note)23 b(also)g(that)f(w)m(e)h(use)f
5488
5537
(the)g(standard)g(\\in-order")f(output)h(ordering|the)f
5489
Fl(k)s Fu(-th)i(output)e(corresp)s(onds)p eop
5491
22 23 bop 150 -116 a Fu(22)3232 b(FFTW)150 299 y(to)26
5492
b(the)g(frequency)f Fl(k)s(=n)h Fu(\(or)g Fl(k)s(=T)13
5493
b Fu(,)27 b(where)e Fl(T)38 b Fu(is)25 b(y)m(our)h(total)g(sampling)e
5538
Fm(k)s Fv(-th)i(output)e(corresp)s(onds)150 4902 y(to)26
5539
b(the)g(frequency)f Fm(k)s(=n)h Fv(\(or)g Fm(k)s(=T)13
5540
b Fv(,)27 b(where)e Fm(T)38 b Fv(is)25 b(y)m(our)h(total)g(sampling)e
5494
5541
(p)s(erio)s(d\).)37 b(F)-8 b(or)26 b(those)g(who)f(lik)m(e)g(to)150
5495
408 y(think)g(in)h(terms)h(of)f(p)s(ositiv)m(e)g(and)g(negativ)m(e)i
5542
5011 y(think)g(in)h(terms)h(of)f(p)s(ositiv)m(e)g(and)g(negativ)m(e)i
5496
5543
(frequencies,)f(this)f(means)h(that)g(the)g(p)s(ositiv)m(e)f
5497
(frequencies)150 518 y(are)e(stored)f(in)f(the)h(\014rst)g(half)f(of)i
5544
(frequencies)150 5121 y(are)e(stored)f(in)f(the)h(\014rst)g(half)f(of)i
5498
5545
(the)f(output)g(and)f(the)i(negativ)m(e)g(frequencies)f(are)g(stored)h
5499
(in)e(bac)m(kw)m(ards)150 628 y(order)31 b(in)f(the)i(second)g(half)e
5500
(of)i(the)g(output.)44 b(\(The)32 b(frequency)f Fs(\000)p
5501
Fl(k)s(=n)g Fu(is)g(the)h(same)g(as)g(the)f(frequency)150
5502
737 y(\()p Fl(n)20 b Fs(\000)g Fl(k)s Fu(\))p Fl(=n)p
5503
Fu(.\))150 1042 y Ft(3.3)68 b(Multi-dimensional)46 b(T)-11
5504
b(ransforms)45 b(Reference)275 1253 y Fu(The)26 b(m)m(ulti-dimensional)
5505
d(complex)j(routines)g(are)h(generally)f(pre\014xed)g(with)f
5506
Fo(fftwnd_)p Fu(.)38 b(Programs)150 1363 y(using)d(FFTWND)i(should)d(b)
5507
s(e)h(link)m(ed)g(with)g Fo(-lfftw)28 b(-lm)35 b Fu(on)h(Unix)f
5508
(systems,)j(or)e(with)f(the)h(FFTW)150 1473 y(and)30
5509
b(standard)f(math)i(libraries)c(in)i(general.)150 1735
5510
y Fi(3.3.1)63 b(Plan)40 b(Creation)h(for)g(Multi-dimensional)h(T)-10
5511
b(ransforms)390 1940 y Fo(#include)46 b(<fftw.h>)390
5512
2148 y(fftwnd_plan)f(fftwnd_create_plan\(int)c(rank,)47
5513
b(const)f(int)h(*n,)1870 2252 y(fftw_direction)c(dir,)k(int)g(flags\);)
5514
390 2459 y(fftwnd_plan)e(fftw2d_create_plan\(int)c(nx,)47
5515
b(int)g(ny,)1870 2563 y(fftw_direction)c(dir,)k(int)g(flags\);)390
5516
2771 y(fftwnd_plan)e(fftw3d_create_plan\(int)c(nx,)47
5517
b(int)g(ny,)g(int)g(nz,)1870 2874 y(fftw_direction)c(dir,)k(int)g
5518
(flags\);)390 3082 y(fftwnd_plan)e(fftwnd_create_plan_spec)o(ific)o
5519
(\(int)c(rank,)46 b(const)h(int)g(*n,)2299 3186 y(fftw_direction)d
5520
(dir,)2299 3289 y(int)j(flags,)2299 3393 y(fftw_complex)e(*in,)h(int)h
5521
(istride,)2299 3497 y(fftw_complex)e(*out,)h(int)h(ostride\);)390
5522
3705 y(fftwnd_plan)e(fftw2d_create_plan_spec)o(ific)o(\(int)c(nx,)47
5523
b(int)g(ny,)2299 3808 y(fftw_direction)d(dir,)2299 3912
5524
y(int)j(flags,)2299 4016 y(fftw_complex)e(*in,)h(int)h(istride,)2299
5525
4120 y(fftw_complex)e(*out,)h(int)h(ostride\);)390 4327
5546
(in)e(bac)m(kw)m(ards)150 5230 y(order)31 b(in)f(the)i(second)g(half)e
5547
(of)i(the)g(output.)44 b(\(The)32 b(frequency)f Ft(\000)p
5548
Fm(k)s(=n)g Fv(is)g(the)h(same)g(as)g(the)f(frequency)150
5549
5340 y(\()p Fm(n)20 b Ft(\000)g Fm(k)s Fv(\))p Fm(=n)p
5552
TeXDict begin 22 23 bop 150 -116 a Fv(22)3232 b(FFTW)150
5553
299 y Fu(3.3)68 b(Multi-dimensional)46 b(T)-11 b(ransforms)45
5554
b(Reference)275 499 y Fv(The)26 b(m)m(ulti-dimensional)d(complex)j
5555
(routines)g(are)h(generally)f(pre\014xed)g(with)f Fp(fftwnd_)p
5556
Fv(.)38 b(Programs)150 609 y(using)d(FFTWND)i(should)d(b)s(e)h(link)m
5557
(ed)g(with)g Fp(-lfftw)28 b(-lm)35 b Fv(on)h(Unix)f(systems,)j(or)e
5558
(with)f(the)h(FFTW)150 718 y(and)30 b(standard)f(math)i(libraries)c(in)
5559
i(general.)150 958 y Fh(3.3.1)63 b(Plan)40 b(Creation)h(for)g
5560
(Multi-dimensional)h(T)-10 b(ransforms)390 1120 y Fp(#include)46
5561
b(<fftw.h>)390 1327 y(fftwnd_plan)f(fftwnd_create_plan\(int)c(rank,)47
5562
b(const)f(int)h(*n,)1870 1431 y(fftw_direction)c(dir,)k(int)g(flags\);)
5563
390 1638 y(fftwnd_plan)e(fftw2d_create_plan\(int)c(nx,)47
5564
b(int)g(ny,)1870 1742 y(fftw_direction)c(dir,)k(int)g(flags\);)390
5565
1950 y(fftwnd_plan)e(fftw3d_create_plan\(int)c(nx,)47
5566
b(int)g(ny,)g(int)g(nz,)1870 2054 y(fftw_direction)c(dir,)k(int)g
5567
(flags\);)390 2261 y(fftwnd_plan)e(fftwnd_create_plan_spec)o(ific)o
5568
(\(int)c(rank,)46 b(const)h(int)g(*n,)2299 2365 y(fftw_direction)d
5569
(dir,)2299 2469 y(int)j(flags,)2299 2572 y(fftw_complex)e(*in,)h(int)h
5570
(istride,)2299 2676 y(fftw_complex)e(*out,)h(int)h(ostride\);)390
5571
2884 y(fftwnd_plan)e(fftw2d_create_plan_spec)o(ific)o(\(int)c(nx,)47
5572
b(int)g(ny,)2299 2988 y(fftw_direction)d(dir,)2299 3091
5573
y(int)j(flags,)2299 3195 y(fftw_complex)e(*in,)h(int)h(istride,)2299
5574
3299 y(fftw_complex)e(*out,)h(int)h(ostride\);)390 3506
5526
5575
y(fftwnd_plan)e(fftw3d_create_plan_spec)o(ific)o(\(int)c(nx,)47
5527
b(int)g(ny,)g(int)g(nz,)2299 4431 y(fftw_direction)d(dir,)j(int)g
5528
(flags,)2299 4535 y(fftw_complex)e(*in,)h(int)h(istride,)2299
5529
4639 y(fftw_complex)e(*out,)h(int)h(ostride\);)275 4792
5530
y Fu(The)29 b(function)h Fo(fftwnd_create_plan)25 b Fu(creates)32
5576
b(int)g(ny,)g(int)g(nz,)2299 3610 y(fftw_direction)d(dir,)j(int)g
5577
(flags,)2299 3714 y(fftw_complex)e(*in,)h(int)h(istride,)2299
5578
3818 y(fftw_complex)e(*out,)h(int)h(ostride\);)275 3960
5579
y Fv(The)29 b(function)h Fp(fftwnd_create_plan)25 b Fv(creates)32
5531
5580
b(a)f(plan,)e(whic)m(h)g(is)h(a)g(data)h(structure)f(con)m(taining)150
5532
4902 y(all)41 b(the)h(information)e(that)j Fo(fftwnd)d
5533
Fu(needs)h(in)g(order)g(to)i(compute)f(a)g(m)m(ulti-dimensional)c(F)-8
5534
b(ourier)150 5011 y(transform.)42 b(Y)-8 b(ou)32 b(can)f(create)i(as)e
5581
4069 y(all)41 b(the)h(information)e(that)j Fp(fftwnd)d
5582
Fv(needs)h(in)g(order)g(to)i(compute)f(a)g(m)m(ulti-dimensional)c(F)-8
5583
b(ourier)150 4179 y(transform.)42 b(Y)-8 b(ou)32 b(can)f(create)i(as)e
5535
5584
(man)m(y)g(plans)f(as)h(y)m(ou)g(need,)h(but)e(only)g(one)h(plan)f(for)
5536
h(a)g(giv)m(en)g(arra)m(y)150 5121 y(size)37 b(is)f(required)f(\(a)j
5585
h(a)g(giv)m(en)g(arra)m(y)150 4289 y(size)37 b(is)f(required)f(\(a)j
5537
5586
(plan)e(can)h(b)s(e)g(reused)f(man)m(y)h(times\).)61
5538
b(The)36 b(functions)g Fo(fftw2d_create_plan)150 5230
5539
y Fu(and)e Fo(fftw3d_create_plan)29 b Fu(are)35 b(optional,)g
5540
(alternativ)m(e)g(in)m(terfaces)g(to)h Fo(fftwnd_create_plan)29
5541
b Fu(for)150 5340 y(t)m(w)m(o)j(and)d(three)i(dimensions,)d(resp)s
5542
(ectiv)m(ely)-8 b(.)p eop
5544
23 24 bop 150 -116 a Fu(Chapter)30 b(3:)41 b(FFTW)31
5545
b(Reference)2354 b(23)275 299 y Fo(fftwnd_create_plan)21
5546
b Fu(returns)26 b(a)h(v)-5 b(alid)25 b(plan,)i(or)g Fo(NULL)f
5547
Fu(if,)g(for)h(some)g(reason,)h(the)f(plan)f(can't)i(b)s(e)150
5548
408 y(created.)46 b(This)30 b(can)i(happ)s(en)e(if)h(memory)h(runs)e
5587
b(The)36 b(functions)g Fp(fftw2d_create_plan)150 4398
5588
y Fv(and)e Fp(fftw3d_create_plan)29 b Fv(are)35 b(optional,)g
5589
(alternativ)m(e)g(in)m(terfaces)g(to)h Fp(fftwnd_create_plan)29
5590
b Fv(for)150 4508 y(t)m(w)m(o)j(and)d(three)i(dimensions,)d(resp)s
5591
(ectiv)m(ely)-8 b(.)275 4650 y Fp(fftwnd_create_plan)21
5592
b Fv(returns)26 b(a)h(v)-5 b(alid)25 b(plan,)i(or)g Fp(NULL)f
5593
Fv(if,)g(for)h(some)g(reason,)h(the)f(plan)f(can't)i(b)s(e)150
5594
4760 y(created.)46 b(This)30 b(can)i(happ)s(en)e(if)h(memory)h(runs)e
5549
5595
(out)i(or)g(if)f(the)h(argumen)m(ts)g(are)g(in)m(v)-5
5550
b(alid)29 b(in)i(some)h(w)m(a)m(y)150 518 y(\(e.g.)42
5551
b(if)29 b Fo(rank)h(<)g Fu(0\).)275 654 y(The)22 b Fo
5552
(create_plan_specific)17 b Fu(v)-5 b(arian)m(ts)22 b(tak)m(e)i(as)f
5596
b(alid)29 b(in)i(some)h(w)m(a)m(y)150 4869 y(\(e.g.)42
5597
b(if)29 b Fp(rank)h(<)g Fv(0\).)275 5011 y(The)22 b Fp
5598
(create_plan_specific)17 b Fv(v)-5 b(arian)m(ts)22 b(tak)m(e)i(as)f
5553
5599
(additional)e(argumen)m(ts)h(sp)s(eci\014c)g(input/output)150
5554
763 y(arra)m(ys)k(and)f(their)g(strides.)38 b(F)-8 b(or)26
5600
5121 y(arra)m(ys)k(and)f(their)g(strides.)38 b(F)-8 b(or)26
5555
5601
b(the)g(last)g(four)f(argumen)m(ts,)i(y)m(ou)f(should)e(pass)h(the)h
5556
(arra)m(ys)g(and)f(strides)150 873 y(that)37 b(y)m(ou)g(will)c(ev)m(en)
5557
m(tually)k(b)s(e)f(passing)f(to)i Fo(fftwnd)p Fu(.)57
5602
(arra)m(ys)g(and)f(strides)150 5230 y(that)37 b(y)m(ou)g(will)c(ev)m
5603
(en)m(tually)k(b)s(e)f(passing)f(to)i Fp(fftwnd)p Fv(.)57
5558
5604
b(The)36 b(resulting)f(plans)f(will)g(b)s(e)i(optimized)f(for)150
5559
982 y(those)j(arra)m(ys)g(and)g(strides,)g(although)g(they)f(ma)m(y)i
5605
5340 y(those)j(arra)m(ys)g(and)g(strides,)g(although)g(they)f(ma)m(y)i
5560
5606
(b)s(e)e(used)g(on)h(other)g(arra)m(ys)g(as)g(w)m(ell.)62
5561
b(Note:)57 b(the)150 1092 y(con)m(ten)m(ts)32 b(of)e(the)h(in)d(and)i
5562
(out)g(arra)m(ys)h(are)f Fq(destr)-5 b(oye)g(d)42 b Fu(b)m(y)30
5563
b(the)h(sp)s(eci\014c)e(planner)f(\(the)j(initial)c(con)m(ten)m(ts)150
5564
1202 y(are)k(ignored,)f(so)h(the)g(arra)m(ys)h(need)e(not)h(ha)m(v)m(e)
5565
h(b)s(een)e(initialized\).)39 b(See)31 b(Section)g(3.2.2)i([Discussion)
5566
c(on)150 1311 y(Sp)s(eci\014c)g(Plans],)h(page)h(20,)g(for)f(a)h
5567
(discussion)d(on)i(sp)s(eci\014c)f(plans.)150 1537 y
5568
Fi(Argumen)m(ts)225 1731 y Fs(\017)60 b Fo(rank)27 b
5569
Fu(is)g(the)h(dimensionalit)m(y)d(of)j(the)g(arra)m(ys)g(to)g(b)s(e)f
5570
(transformed.)40 b(It)27 b(can)i(b)s(e)e(an)m(y)h(non-negativ)m(e)330
5571
1841 y(in)m(teger.)225 1976 y Fs(\017)60 b Fo(n)38 b
5572
Fu(is)f(a)h(p)s(oin)m(ter)f(to)i(an)f(arra)m(y)h(of)f
5573
Fo(rank)f Fu(in)m(tegers,)j(giving)d(the)i(size)f(of)g(eac)m(h)h
5574
(dimension)c(of)k(the)330 2085 y(arra)m(ys)h(to)h(b)s(e)f(transformed.)
5575
69 b(These)40 b(sizes,)i(whic)m(h)d(m)m(ust)h(b)s(e)f(p)s(ositiv)m(e)g
5576
(in)m(tegers,)k(corresp)s(ond)330 2195 y(to)37 b(the)f(dimensions)d(of)
5577
j(ro)m(w-ma)5 b(jor)36 b(arra)m(ys|i.e.)58 b Fo(n[0])35
5578
b Fu(is)g(the)h(size)g(of)g(the)g(dimension)d(whose)330
5579
2304 y(indices)21 b(v)-5 b(ary)23 b(most)g(slo)m(wly)-8
5607
b(Note:)57 b(the)p eop end
5609
TeXDict begin 23 24 bop 150 -116 a Fv(Chapter)30 b(3:)41
5610
b(FFTW)31 b(Reference)2354 b(23)150 299 y(con)m(ten)m(ts)32
5611
b(of)e(the)h(in)d(and)i(out)g(arra)m(ys)h(are)f Fr(destr)-5
5612
b(oye)g(d)42 b Fv(b)m(y)30 b(the)h(sp)s(eci\014c)e(planner)f(\(the)j
5613
(initial)c(con)m(ten)m(ts)150 408 y(are)k(ignored,)f(so)h(the)g(arra)m
5614
(ys)h(need)e(not)h(ha)m(v)m(e)h(b)s(een)e(initialized\).)39
5615
b(See)31 b(Section)g(3.2.2)i([Discussion)c(on)150 518
5616
y(Sp)s(eci\014c)g(Plans],)h(page)h(20,)g(for)f(a)h(discussion)d(on)i
5617
(sp)s(eci\014c)f(plans.)150 736 y Fh(Argumen)m(ts)225
5618
903 y Ft(\017)60 b Fp(rank)27 b Fv(is)g(the)h(dimensionalit)m(y)d(of)j
5619
(the)g(arra)m(ys)g(to)g(b)s(e)f(transformed.)40 b(It)27
5620
b(can)i(b)s(e)e(an)m(y)h(non-negativ)m(e)330 1013 y(in)m(teger.)225
5621
1145 y Ft(\017)60 b Fp(n)38 b Fv(is)f(a)h(p)s(oin)m(ter)f(to)i(an)f
5622
(arra)m(y)h(of)f Fp(rank)f Fv(in)m(tegers,)j(giving)d(the)i(size)f(of)g
5623
(eac)m(h)h(dimension)c(of)k(the)330 1255 y(arra)m(ys)h(to)h(b)s(e)f
5624
(transformed.)69 b(These)40 b(sizes,)i(whic)m(h)d(m)m(ust)h(b)s(e)f(p)s
5625
(ositiv)m(e)g(in)m(tegers,)k(corresp)s(ond)330 1365 y(to)37
5626
b(the)f(dimensions)d(of)j(ro)m(w-ma)5 b(jor)36 b(arra)m(ys|i.e.)58
5627
b Fp(n[0])35 b Fv(is)g(the)h(size)g(of)g(the)g(dimension)d(whose)330
5628
1474 y(indices)21 b(v)-5 b(ary)23 b(most)g(slo)m(wly)-8
5580
5629
b(,)24 b(and)f(so)g(on.)38 b(\(See)24 b(Section)e(2.5)j
5581
5630
([Multi-dimensional)19 b(Arra)m(y)k(F)-8 b(ormat],)330
5582
2414 y(page)29 b(11,)g(for)f(more)g(information)e(on)i(ro)m(w-ma)5
5631
1584 y(page)29 b(11,)g(for)f(more)g(information)e(on)i(ro)m(w-ma)5
5583
5632
b(jor)28 b(storage.\))42 b(See)28 b(Section)g(3.2.1)h([Plan)e(Creation)
5584
330 2524 y(for)44 b(One-dimensional)e(T)-8 b(ransforms],)48
5633
330 1693 y(for)44 b(One-dimensional)e(T)-8 b(ransforms],)48
5585
5634
b(page)d(18,)50 b(for)44 b(more)h(information)e(regarding)h(optimal)330
5586
2633 y(arra)m(y)31 b(sizes.)225 2768 y Fs(\017)60 b Fo(nx)35
5587
b Fu(and)f Fo(ny)h Fu(in)f Fo(fftw2d_create_plan)c Fu(are)36
5635
1803 y(arra)m(y)31 b(sizes.)225 1935 y Ft(\017)60 b Fp(nx)35
5636
b Fv(and)f Fp(ny)h Fv(in)f Fp(fftw2d_create_plan)c Fv(are)36
5588
5637
b(p)s(ositiv)m(e)e(in)m(tegers)i(sp)s(ecifying)d(the)i(dimensions)e(of)
5589
330 2878 y(the)h(rank)f(2)h(arra)m(y)g(to)h(b)s(e)e(transformed.)50
5638
330 2045 y(the)h(rank)f(2)h(arra)m(y)g(to)h(b)s(e)e(transformed.)50
5590
5639
b(i.e.)h(they)34 b(sp)s(ecify)e(that)i(the)g(transform)f(will)e(op)s
5591
(erate)330 2987 y(on)k Fo(nx)30 b(x)g(ny)35 b Fu(arra)m(ys)g(in)f(ro)m
5592
(w-ma)5 b(jor)36 b(order,)g(where)f Fo(nx)g Fu(is)f(the)h(n)m(um)m(b)s
5593
(er)f(of)i(ro)m(ws)f(and)g Fo(ny)f Fu(is)h(the)330 3097
5594
y(n)m(um)m(b)s(er)29 b(of)i(columns.)225 3232 y Fs(\017)60
5595
b Fo(nx)p Fu(,)31 b Fo(ny)f Fu(and)g Fo(nz)h Fu(in)e
5596
Fo(fftw3d_create_plan)d Fu(are)32 b(p)s(ositiv)m(e)e(in)m(tegers)h(sp)s
5597
(ecifying)e(the)i(dimensions)330 3342 y(of)c(the)h(rank)e(3)i(arra)m(y)
5640
(erate)330 2154 y(on)k Fp(nx)30 b(x)g(ny)35 b Fv(arra)m(ys)g(in)f(ro)m
5641
(w-ma)5 b(jor)36 b(order,)g(where)f Fp(nx)g Fv(is)f(the)h(n)m(um)m(b)s
5642
(er)f(of)i(ro)m(ws)f(and)g Fp(ny)f Fv(is)h(the)330 2264
5643
y(n)m(um)m(b)s(er)29 b(of)i(columns.)225 2396 y Ft(\017)60
5644
b Fp(nx)p Fv(,)31 b Fp(ny)f Fv(and)g Fp(nz)h Fv(in)e
5645
Fp(fftw3d_create_plan)d Fv(are)32 b(p)s(ositiv)m(e)e(in)m(tegers)h(sp)s
5646
(ecifying)e(the)i(dimensions)330 2506 y(of)c(the)h(rank)e(3)i(arra)m(y)
5598
5647
g(to)g(b)s(e)e(transformed.)39 b(i.e.)h(they)27 b(sp)s(ecify)f(that)i
5599
(the)f(transform)g(will)d(op)s(erate)330 3451 y(on)30
5600
b Fo(nx)g(x)g(ny)g(x)g(nz)g Fu(arra)m(ys)g(in)f(ro)m(w-ma)5
5601
b(jor)31 b(order.)225 3586 y Fs(\017)60 b Fo(dir)34 b
5602
Fu(is)g(the)h(sign)f(of)h(the)g(exp)s(onen)m(t)f(in)g(the)h(form)m(ula)
5648
(the)f(transform)g(will)d(op)s(erate)330 2616 y(on)30
5649
b Fp(nx)g(x)g(ny)g(x)g(nz)g Fv(arra)m(ys)g(in)f(ro)m(w-ma)5
5650
b(jor)31 b(order.)225 2748 y Ft(\017)60 b Fp(dir)34 b
5651
Fv(is)g(the)h(sign)f(of)h(the)g(exp)s(onen)m(t)f(in)g(the)h(form)m(ula)
5603
5652
f(that)h(de\014nes)f(the)h(F)-8 b(ourier)34 b(transform.)54
5604
b(It)330 3696 y(can)31 b(b)s(e)f Fs(\000)p Fu(1)h(or)g(+)o(1.)43
5605
b(The)30 b(aliases)g Fo(FFTW_FORWARD)d Fu(and)j Fo(FFTW_BACKWARD)e
5606
Fu(are)j(pro)m(vided,)e(where)330 3805 y Fo(FFTW_FORWARD)e
5607
Fu(stands)j(for)g Fs(\000)p Fu(1.)225 3940 y Fs(\017)60
5608
b Fo(flags)29 b Fu(is)g(a)i(b)s(o)s(olean)e(OR)h(\(`)p
5609
Fo(|)p Fu('\))i(of)e(zero)h(or)g(more)f(of)h(the)f(follo)m(wing:)379
5610
4075 y Fs(\000)60 b Fo(FFTW_MEASURE)p Fu(:)33 b(this)19
5653
b(It)330 2857 y(can)31 b(b)s(e)f Ft(\000)p Fv(1)h(or)g(+)o(1.)43
5654
b(The)30 b(aliases)g Fp(FFTW_FORWARD)d Fv(and)j Fp(FFTW_BACKWARD)e
5655
Fv(are)j(pro)m(vided,)e(where)330 2967 y Fp(FFTW_FORWARD)e
5656
Fv(stands)j(for)g Ft(\000)p Fv(1.)225 3099 y Ft(\017)60
5657
b Fp(flags)29 b Fv(is)g(a)i(b)s(o)s(olean)e(OR)h(\(`)p
5658
Fp(|)p Fv('\))i(of)e(zero)h(or)g(more)f(of)h(the)f(follo)m(wing:)379
5659
3232 y Ft(\000)60 b Fp(FFTW_MEASURE)p Fv(:)33 b(this)19
5611
5660
b(\015ag)j(tells)e(FFTW)h(to)h(\014nd)d(the)i(optimal)f(plan)g(b)m(y)g
5612
(actually)h Fq(c)-5 b(omputing)510 4185 y Fu(sev)m(eral)31
5661
(actually)h Fr(c)-5 b(omputing)510 3341 y Fv(sev)m(eral)31
5613
5662
b(FFTs)f(and)g(measuring)f(their)h(execution)g(time.)379
5614
4320 y Fs(\000)60 b Fo(FFTW_ESTIMATE)p Fu(:)34 b(do)25
5663
3474 y Ft(\000)60 b Fp(FFTW_ESTIMATE)p Fv(:)34 b(do)25
5615
5664
b(not)g(run)f(an)m(y)h(FFT)h(and)e(pro)m(vide)g(a)h(\\reasonable")h
5616
(plan)e(\(for)h(a)g(RISC)510 4430 y(pro)s(cessor)37 b(with)g(man)m(y)h
5617
(registers\).)62 b(If)38 b(neither)e Fo(FFTW_ESTIMATE)e
5618
Fu(nor)k Fo(FFTW_MEASURE)c Fu(is)510 4539 y(pro)m(vided,)29
5619
b(the)i(default)e(is)h Fo(FFTW_ESTIMATE)p Fu(.)379 4674
5620
y Fs(\000)60 b Fo(FFTW_OUT_OF_PLACE)p Fu(:)41 b(pro)s(duce)32
5665
(plan)e(\(for)h(a)g(RISC)510 3583 y(pro)s(cessor)37 b(with)g(man)m(y)h
5666
(registers\).)62 b(If)38 b(neither)e Fp(FFTW_ESTIMATE)e
5667
Fv(nor)k Fp(FFTW_MEASURE)c Fv(is)510 3693 y(pro)m(vided,)29
5668
b(the)i(default)e(is)h Fp(FFTW_ESTIMATE)p Fv(.)379 3825
5669
y Ft(\000)60 b Fp(FFTW_OUT_OF_PLACE)p Fv(:)41 b(pro)s(duce)32
5621
5670
b(a)i(plan)e(assuming)f(that)j(the)f(input)e(and)i(output)g(arra)m(ys)
5622
510 4784 y(will)28 b(b)s(e)h(distinct)g(\(this)h(is)f(the)i(default\).)
5623
379 4919 y Fs(\000)60 b Fo(FFTW_IN_PLACE)p Fu(:)54 b(pro)s(duce)37
5671
510 3935 y(will)28 b(b)s(e)h(distinct)g(\(this)h(is)f(the)i(default\).)
5672
379 4067 y Ft(\000)60 b Fp(FFTW_IN_PLACE)p Fv(:)54 b(pro)s(duce)37
5624
5673
b(a)i(plan)e(assuming)h(that)h(y)m(ou)g(w)m(an)m(t)g(to)h(p)s(erform)d
5625
(the)i(trans-)510 5028 y(form)30 b(in-place.)40 b(\(Unlik)m(e)30
5674
(the)i(trans-)510 4177 y(form)30 b(in-place.)40 b(\(Unlik)m(e)30
5626
5675
b(the)h(one-dimensional)d(transform,)j(this)e(\\really")3176
5627
4995 y Fn(2)3244 5028 y Fu(p)s(erforms)g(the)p 150 5131
5628
1200 4 v 192 5197 a Fn(2)275 5230 y Fo(fftwnd)e Fu(actually)i(ma)m(y)h
5629
(use)f(some)h(temp)s(orary)e(storage)j(\(hidden)c(in)h(the)i(plan\),)f
5630
(but)f(this)g(storage)275 5340 y(space)40 b(is)e(only)h(the)h(size)f
5631
(of)h(the)g(largest)g(dimension)d(of)j(the)g(arra)m(y)-8
5632
b(,)43 b(rather)c(than)h(b)s(eing)e(as)i(big)p eop
5676
4144 y Fo(2)3244 4177 y Fv(p)s(erforms)g(the)510 4286
5677
y(transform)36 b(in-place.\))58 b(Note)37 b(that,)i(if)c(y)m(ou)i(w)m
5678
(an)m(t)g(to)g(p)s(erform)e(in-place)g(transforms,)j(y)m(ou)510
5679
4396 y Fr(must)h Fv(use)31 b(a)f(plan)f(created)j(with)d(this)g
5680
(option.)510 4528 y(The)h(default)f(mo)s(de)h(of)h(op)s(eration)f(is)f
5681
Fp(FFTW_OUT_OF_PLACE)p Fv(.)379 4661 y Ft(\000)60 b Fp(FFTW_USE_WISDOM)
5682
p Fv(:)h(use)42 b(an)m(y)h Fp(wisdom)e Fv(that)i(is)f(a)m(v)-5
5683
b(ailable)41 b(to)j(help)d(in)g(the)i(creation)g(of)510
5684
4770 y(the)34 b(plan.)50 b(\(See)35 b(Section)e(2.6)i([W)-8
5685
b(ords)35 b(of)f(Wisdom],)g(page)h(13.\))52 b(This)32
5686
b(can)i(greatly)h(sp)s(eed)510 4880 y(the)g(creation)h(of)f(plans,)g
5687
(esp)s(ecially)e(with)h(the)h Fp(FFTW_MEASURE)d Fv(option.)55
5688
b Fp(FFTW_ESTIMATE)p 150 4967 1200 4 v 199 5034 a Fo(2)275
5689
5066 y Fi(fftwnd)32 b Fj(actually)f(ma)n(y)f(use)g(some)h(temp)r(orary)
5690
f(storage)i(\(hidden)e(in)h(the)f(plan\),)i(but)e(this)h(storage)h
5691
(space)g(is)f(only)275 5157 y(the)26 b(size)j(of)f(the)f(largest)h
5692
(dimension)f(of)h(the)f(arra)n(y)-6 b(,)28 b(rather)f(than)g(b)r(eing)g
5693
(as)h(big)g(as)g(the)f(en)n(tire)g(arra)n(y)-6 b(.)39
5694
b(\(Unless)28 b(y)n(ou)275 5249 y(use)k Fi(fftwnd)i Fj(to)f(p)r(erform)
5695
f(one-dimensional)h(transforms,)i(in)d(whic)n(h)h(case)g(the)f(temp)r
5696
(orary)g(storage)i(required)e(for)275 5340 y(in-place)25
5697
b(transforms)h Ff(is)32 b Fj(as)26 b(big)g(as)h(the)e(en)n(tire)h(arra)
5698
n(y)-6 b(.\))p eop end
5634
24 25 bop 150 -116 a Fu(24)3232 b(FFTW)510 299 y(transform)36
5635
b(in-place.\))58 b(Note)37 b(that,)i(if)c(y)m(ou)i(w)m(an)m(t)g(to)g(p)
5636
s(erform)e(in-place)g(transforms,)j(y)m(ou)510 408 y
5637
Fq(must)h Fu(use)31 b(a)f(plan)f(created)j(with)d(this)g(option.)510
5638
546 y(The)h(default)f(mo)s(de)h(of)h(op)s(eration)f(is)f
5639
Fo(FFTW_OUT_OF_PLACE)p Fu(.)379 684 y Fs(\000)60 b Fo(FFTW_USE_WISDOM)p
5640
Fu(:)h(use)42 b(an)m(y)h Fo(wisdom)e Fu(that)i(is)f(a)m(v)-5
5641
b(ailable)41 b(to)j(help)d(in)g(the)i(creation)g(of)510
5642
793 y(the)34 b(plan.)50 b(\(See)35 b(Section)e(2.6)i([W)-8
5643
b(ords)35 b(of)f(Wisdom],)g(page)h(13.\))52 b(This)32
5644
b(can)i(greatly)h(sp)s(eed)510 903 y(the)g(creation)h(of)f(plans,)g
5645
(esp)s(ecially)e(with)h(the)h Fo(FFTW_MEASURE)d Fu(option.)55
5646
b Fo(FFTW_ESTIMATE)510 1012 y Fu(plans)33 b(can)i(also)f(tak)m(e)i(adv)
5647
-5 b(an)m(tage)36 b(of)f Fo(wisdom)e Fu(to)i(pro)s(duce)e(a)i(more)f
5648
(optimal)g(plan)f(\(based)510 1122 y(on)42 b(past)g(measuremen)m(ts\))g
5649
(than)f(the)h(estimation)g(heuristic)e(w)m(ould)g(normally)g(generate.)
5650
510 1232 y(When)30 b(the)h Fo(FFTW_MEASURE)c Fu(option)j(is)g(used,)g
5651
(new)g Fo(wisdom)f Fu(will)f(also)j(b)s(e)f(generated)h(if)f(the)510
5652
1341 y(curren)m(t)42 b(transform)g(size)g(is)g(not)g(completely)g
5653
(understo)s(o)s(d)f(b)m(y)h(existing)g Fo(wisdom)p Fu(.)75
5654
b(Note)510 1451 y(that)37 b(the)g(same)g Fo(wisdom)e
5655
Fu(is)h(shared)g(b)s(et)m(w)m(een)h(one-dimensional)e(and)h(m)m
5656
(ulti-dimensional)510 1560 y(transforms.)225 1698 y Fs(\017)60
5657
b Fo(in)p Fu(,)34 b Fo(out)p Fu(,)g Fo(istride)p Fu(,)f
5658
Fo(ostride)f Fu(\(only)h(for)g(the)h Fo(_create_plan_specific)28
5659
b Fu(v)-5 b(arian)m(ts\):)48 b(see)34 b(cor-)330 1808
5660
y(resp)s(onding)25 b(argumen)m(ts)j(in)f(the)g(description)f(of)i
5661
Fo(fftwnd)p Fu(.)38 b(\(See)28 b(Section)g(3.3.2)h([Computing)e(the)330
5662
1917 y(Multi-dimensional)g(T)-8 b(ransform],)29 b(page)j(24.\))150
5663
2154 y Fi(3.3.2)63 b(Computing)41 b(the)f(Multi-dimensional)i(T)-10
5664
b(ransform)390 2347 y Fo(#include)46 b(<fftw.h>)390 2554
5665
y(void)h(fftwnd\(fftwnd_plan)42 b(plan,)47 b(int)g(howmany,)963
5666
2658 y(fftw_complex)d(*in,)j(int)g(istride,)e(int)i(idist,)963
5667
2762 y(fftw_complex)d(*out,)j(int)f(ostride,)g(int)h(odist\);)390
5668
2969 y(void)g(fftwnd_one\(fftwnd_plan)41 b(p,)48 b(fftw_complex)c(*in,)
5669
1154 3073 y(fftw_complex)g(*out\);)275 3214 y Fu(The)33
5670
b(function)f Fo(fftwnd)g Fu(computes)h(one)h(or)g(more)f(m)m
5671
(ulti-dimensional)d(F)-8 b(ourier)33 b(T)-8 b(ransforms,)33
5672
b(us-)150 3324 y(ing)39 b(a)i(plan)e(created)i(b)m(y)f
5673
Fo(fftwnd_create_plan)35 b Fu(\(see)41 b(Section)f(3.3.1)i([Plan)d
5674
(Creation)h(for)g(Multi-)150 3433 y(dimensional)20 b(T)-8
5700
TeXDict begin 24 25 bop 150 -116 a Fv(24)3232 b(FFTW)510
5701
299 y(plans)33 b(can)i(also)f(tak)m(e)i(adv)-5 b(an)m(tage)36
5702
b(of)f Fp(wisdom)e Fv(to)i(pro)s(duce)e(a)i(more)f(optimal)g(plan)f
5703
(\(based)510 408 y(on)42 b(past)g(measuremen)m(ts\))g(than)f(the)h
5704
(estimation)g(heuristic)e(w)m(ould)g(normally)g(generate.)510
5705
518 y(When)30 b(the)h Fp(FFTW_MEASURE)c Fv(option)j(is)g(used,)g(new)g
5706
Fp(wisdom)f Fv(will)f(also)j(b)s(e)f(generated)h(if)f(the)510
5707
628 y(curren)m(t)42 b(transform)g(size)g(is)g(not)g(completely)g
5708
(understo)s(o)s(d)f(b)m(y)h(existing)g Fp(wisdom)p Fv(.)75
5709
b(Note)510 737 y(that)37 b(the)g(same)g Fp(wisdom)e Fv(is)h(shared)g(b)
5710
s(et)m(w)m(een)h(one-dimensional)e(and)h(m)m(ulti-dimensional)510
5711
847 y(transforms.)225 982 y Ft(\017)60 b Fp(in)p Fv(,)34
5712
b Fp(out)p Fv(,)g Fp(istride)p Fv(,)f Fp(ostride)f Fv(\(only)h(for)g
5713
(the)h Fp(_create_plan_specific)28 b Fv(v)-5 b(arian)m(ts\):)48
5714
b(see)34 b(cor-)330 1092 y(resp)s(onding)25 b(argumen)m(ts)j(in)f(the)g
5715
(description)f(of)i Fp(fftwnd)p Fv(.)38 b(\(See)28 b(Section)g(3.3.2)h
5716
([Computing)e(the)330 1202 y(Multi-dimensional)g(T)-8
5717
b(ransform],)29 b(page)j(24.\))150 1430 y Fh(3.3.2)63
5718
b(Computing)41 b(the)f(Multi-dimensional)i(T)-10 b(ransform)390
5719
1592 y Fp(#include)46 b(<fftw.h>)390 1799 y(void)h(fftwnd\(fftwnd_plan)
5720
42 b(plan,)47 b(int)g(howmany,)963 1903 y(fftw_complex)d(*in,)j(int)g
5721
(istride,)e(int)i(idist,)963 2007 y(fftw_complex)d(*out,)j(int)f
5722
(ostride,)g(int)h(odist\);)390 2215 y(void)g(fftwnd_one\(fftwnd_plan)41
5723
b(p,)48 b(fftw_complex)c(*in,)1154 2318 y(fftw_complex)g(*out\);)275
5724
2455 y Fv(The)33 b(function)f Fp(fftwnd)g Fv(computes)h(one)h(or)g
5725
(more)f(m)m(ulti-dimensional)d(F)-8 b(ourier)33 b(T)-8
5726
b(ransforms,)33 b(us-)150 2565 y(ing)39 b(a)i(plan)e(created)i(b)m(y)f
5727
Fp(fftwnd_create_plan)35 b Fv(\(see)41 b(Section)f(3.3.1)i([Plan)d
5728
(Creation)h(for)g(Multi-)150 2674 y(dimensional)20 b(T)-8
5675
5729
b(ransforms],)24 b(page)g(22\).)40 b(\(Note)24 b(that)g(the)f(plan)f
5676
(determines)g(the)i(rank)e(and)h(dimensions)150 3543
5730
(determines)g(the)i(rank)e(and)h(dimensions)150 2784
5677
5731
y(of)34 b(the)h(arra)m(y)g(to)g(b)s(e)e(transformed.\))52
5678
b(The)34 b(function)f Fo(fftwnd_one)e Fu(pro)m(vides)i(a)i
5679
(simpli\014ed)30 b(in)m(terface)150 3652 y(for)g(the)h(common)f(case)i
5732
b(The)34 b(function)f Fp(fftwnd_one)e Fv(pro)m(vides)i(a)i
5733
(simpli\014ed)30 b(in)m(terface)150 2893 y(for)g(the)h(common)f(case)i
5680
5734
(of)e(single)f(input)g(arra)m(y)i(of)f(stride)f(1.)150
5681
3889 y Fi(Argumen)m(ts)225 4088 y Fs(\017)60 b Fo(plan)35
5682
b Fu(is)h(the)h(plan)e(created)i(b)m(y)g Fo(fftwnd_create_plan)p
5683
Fu(.)54 b(\(see)37 b(Section)f(3.3.1)j([Plan)c(Creation)330
5684
4197 y(for)28 b(Multi-dimensional)d(T)-8 b(ransforms],)28
5685
b(page)i(22\).)41 b(In)28 b(the)h(case)g(of)g(t)m(w)m(o)h(and)e
5686
(three-dimensional)330 4307 y(transforms,)57 b(it)51
5687
b(could)g(also)h(ha)m(v)m(e)i(b)s(een)d(created)i(b)m(y)f
5688
Fo(fftw2d_create_plan)47 b Fu(or)52 b Fo(fftw3d_)330
5689
4417 y(create_plan)p Fu(,)28 b(resp)s(ectiv)m(ely)-8
5690
b(.)225 4554 y Fs(\017)60 b Fo(howmany)28 b Fu(is)i(the)g(n)m(um)m(b)s
5691
(er)f(of)i(m)m(ulti-dimensional)26 b(transforms)k Fo(fftwnd)f
5692
Fu(will)e(compute.)225 4692 y Fs(\017)60 b Fo(in)p Fu(,)f
5693
Fo(istride)52 b Fu(and)h Fo(idist)f Fu(describ)s(e)g(the)i(input)e
5694
(arra)m(y\(s\).)112 b(There)53 b(are)h Fo(howmany)e Fu(m)m(ulti-)330
5695
4801 y(dimensional)24 b(input)g(arra)m(ys;)29 b(the)e(\014rst)f(one)h
5696
(is)e(p)s(oin)m(ted)h(to)h(b)m(y)g Fo(in)p Fu(,)g(the)f(second)h(one)g
5697
(is)f(p)s(oin)m(ted)f(to)330 4911 y(b)m(y)i Fo(in)j(+)g(idist)p
5698
Fu(,)d(and)f(so)i(on,)g(up)e(to)i Fo(in)i(+)g(\(howmany)e(-)i(1\))g(*)g
5699
(idist)p Fu(.)38 b(Eac)m(h)28 b(m)m(ulti-dimensional)p
5700
150 5022 1200 4 v 275 5121 a(as)33 b(the)h(en)m(tire)f(arra)m(y)-8
5701
b(.)51 b(\(Unless)32 b(y)m(ou)i(use)f Fo(fftwnd)f Fu(to)i(p)s(erform)e
5702
(one-dimensional)f(transforms,)i(in)275 5230 y(whic)m(h)26
5703
b(case)i(the)g(temp)s(orary)f(storage)i(required)d(for)i(in-place)e
5704
(transforms)h Fq(is)35 b Fu(as)28 b(big)e(as)i(the)g(en)m(tire)275
5705
5340 y(arra)m(y)-8 b(.\))p eop
5735
3122 y Fh(Argumen)m(ts)225 3289 y Ft(\017)60 b Fp(plan)67
5736
b Fv(is)g(the)i(plan)d(created)k(b)m(y)e Fp(fftwnd_create_plan)p
5737
Fv(.)149 b(\(see)69 b(Section)f(3.3.1)i([Plan)330 3399
5738
y(Creation)56 b(for)g(Multi-dimensional)c(T)-8 b(ransforms],)62
5739
b(page)57 b(22\).)119 b(In)55 b(the)i(case)g(of)f(t)m(w)m(o)i(and)330
5740
3509 y(three-dimensional)24 b(transforms,)j(it)e(could)h(also)g(ha)m(v)
5741
m(e)i(b)s(een)d(created)j(b)m(y)e Fp(fftw2d_create_plan)330
5742
3618 y Fv(or)k Fp(fftw3d_create_plan)p Fv(,)c(resp)s(ectiv)m(ely)-8
5743
b(.)225 3754 y Ft(\017)60 b Fp(howmany)28 b Fv(is)i(the)g(n)m(um)m(b)s
5744
(er)f(of)i(m)m(ulti-dimensional)26 b(transforms)k Fp(fftwnd)f
5745
Fv(will)e(compute.)225 3889 y Ft(\017)60 b Fp(in)p Fv(,)f
5746
Fp(istride)52 b Fv(and)h Fp(idist)f Fv(describ)s(e)g(the)i(input)e
5747
(arra)m(y\(s\).)112 b(There)53 b(are)h Fp(howmany)e Fv(m)m(ulti-)330
5748
3999 y(dimensional)24 b(input)g(arra)m(ys;)29 b(the)e(\014rst)f(one)h
5749
(is)e(p)s(oin)m(ted)h(to)h(b)m(y)g Fp(in)p Fv(,)g(the)f(second)h(one)g
5750
(is)f(p)s(oin)m(ted)f(to)330 4109 y(b)m(y)i Fp(in)j(+)g(idist)p
5751
Fv(,)d(and)f(so)i(on,)g(up)e(to)i Fp(in)i(+)g(\(howmany)e(-)i(1\))g(*)g
5752
(idist)p Fv(.)38 b(Eac)m(h)28 b(m)m(ulti-dimensional)330
5753
4218 y(input)44 b(arra)m(y)j(consists)f(of)g(complex)g(n)m(um)m(b)s
5754
(ers)f(\(see)j(Section)e(3.1)h([Data)h(T)m(yp)s(es],)i(page)d(17\),)330
5755
4328 y(stored)62 b(in)e(ro)m(w-ma)5 b(jor)62 b(format)g(\(see)h
5756
(Section)e(2.5)i([Multi-dimensional)58 b(Arra)m(y)k(F)-8
5757
b(ormat],)330 4437 y(page)49 b(11\),)54 b(whic)m(h)47
5758
b(are)h(not)g(necessarily)f(con)m(tiguous)i(in)d(memory)-8
5759
b(.)95 b(Sp)s(eci\014cally)-8 b(,)50 b Fp(in[0])d Fv(is)330
5760
4547 y(the)d(\014rst)e(elemen)m(t)i(of)g(the)g(\014rst)e(arra)m(y)-8
5761
b(,)48 b Fp(in[istride])41 b Fv(is)h(the)i(second)f(elemen)m(t)h(of)g
5762
(the)g(\014rst)330 4656 y(arra)m(y)-8 b(,)50 b(and)44
5763
b(so)h(on.)85 b(In)44 b(general,)49 b(the)c Fp(i)p Fv(-th)g(elemen)m(t)
5764
g(of)g(the)g Fp(j)p Fv(-th)g(input)e(arra)m(y)j(will)c(b)s(e)i(in)330
5765
4766 y(p)s(osition)g Fp(in[i)30 b(*)g(istride)e(+)i(j)g(*)g(idist])p
5766
Fv(.)87 b(Note)48 b(that,)j(here,)f Fp(i)c Fv(refers)g(to)h(an)f(index)
5767
f(in)m(to)330 4876 y(the)c(ro)m(w-ma)5 b(jor)42 b(format)g(for)e(the)i
5768
(m)m(ulti-dimensional)37 b(arra)m(y)-8 b(,)45 b(rather)c(than)g(an)g
5769
(index)f(in)g(an)m(y)330 4985 y(particular)29 b(dimension.)379
5770
5121 y Ft(\000)60 b Fr(In-plac)-5 b(e)30 b(tr)-5 b(ansforms)7
5771
b Fv(:)42 b(F)-8 b(or)28 b(plans)d(created)j(with)d(the)i
5772
Fp(FFTW_IN_PLACE)c Fv(option,)k(the)g(trans-)510 5230
5773
y(form)g(is)g(computed)g(in-place|the)g(output)g(is)g(returned)f(in)h
5774
(the)g Fp(in)g Fv(arra)m(y)-8 b(,)30 b(using)c(the)i(same)510
5775
5340 y(strides,)h(etcetera,)k(as)e(w)m(ere)g(used)e(in)g(the)i(input.)p
5707
25 26 bop 150 -116 a Fu(Chapter)30 b(3:)41 b(FFTW)31
5708
b(Reference)2354 b(25)330 299 y(input)22 b(arra)m(y)j(consists)f(of)g
5709
(complex)g(n)m(um)m(b)s(ers)e(\(see)k(Section)e(3.1)h([Data)h(T)m(yp)s
5710
(es],)f(page)g(17\),)i(stored)330 408 y(in)20 b(ro)m(w-ma)5
5711
b(jor)21 b(format)h(\(see)g(Section)f(2.5)h([Multi-dimensional)17
5712
b(Arra)m(y)k(F)-8 b(ormat],)25 b(page)d(11\),)i(whic)m(h)330
5713
518 y(are)38 b(not)h(necessarily)e(con)m(tiguous)h(in)f(memory)-8
5714
b(.)64 b(Sp)s(eci\014cally)-8 b(,)38 b Fo(in[0])f Fu(is)g(the)h
5715
(\014rst)f(elemen)m(t)i(of)330 628 y(the)g(\014rst)f(arra)m(y)-8
5716
b(,)43 b Fo(in[istride])36 b Fu(is)i(the)h(second)g(elemen)m(t)h(of)f
5717
(the)g(\014rst)f(arra)m(y)-8 b(,)43 b(and)38 b(so)h(on.)67
5718
b(In)330 737 y(general,)38 b(the)f Fo(i)p Fu(-th)f(elemen)m(t)h(of)f
5719
(the)h Fo(j)p Fu(-th)f(input)e(arra)m(y)j(will)d(b)s(e)h(in)g(p)s
5720
(osition)g Fo(in[i)29 b(*)h(istride)330 847 y(+)g(j)g(*)g(idist])p
5721
Fu(.)43 b(Note)33 b(that,)g(here,)f Fo(i)f Fu(refers)g(to)i(an)e(index)
5722
g(in)m(to)g(the)h(ro)m(w-ma)5 b(jor)32 b(format)g(for)g(the)330
5723
956 y(m)m(ulti-dimensional)26 b(arra)m(y)-8 b(,)32 b(rather)e(than)g
5724
(an)h(index)e(in)g(an)m(y)h(particular)f(dimension.)379
5725
1093 y Fs(\000)60 b Fq(In-plac)-5 b(e)30 b(tr)-5 b(ansforms)7
5726
b Fu(:)42 b(F)-8 b(or)28 b(plans)d(created)j(with)d(the)i
5727
Fo(FFTW_IN_PLACE)c Fu(option,)k(the)g(trans-)510 1203
5728
y(form)g(is)g(computed)g(in-place|the)g(output)g(is)g(returned)f(in)h
5729
(the)g Fo(in)g Fu(arra)m(y)-8 b(,)30 b(using)c(the)i(same)510
5730
1312 y(strides,)h(etcetera,)k(as)e(w)m(ere)g(used)e(in)g(the)i(input.)
5731
225 1449 y Fs(\017)60 b Fo(out)p Fu(,)33 b Fo(ostride)f
5732
Fu(and)g Fo(odist)g Fu(describ)s(e)g(the)h(output)g(arra)m(y\(s\).)50
5733
b(The)33 b(format)g(is)g(the)g(same)h(as)f(for)330 1559
5734
y(the)e(input)d(arra)m(y)-8 b(.)379 1695 y Fs(\000)60
5735
b Fq(In-plac)-5 b(e)47 b(tr)-5 b(ansforms)7 b Fu(:)73
5736
b(These)45 b(parameters)g(are)h(ignored)e(for)g(plans)g(created)i(with)
5737
e(the)510 1805 y Fo(FFTW_IN_PLACE)27 b Fu(option.)275
5738
1971 y(The)36 b(function)g Fo(fftwnd_one)e Fu(transforms)i(a)i(single,)
5739
g(con)m(tiguous)f(input)e(arra)m(y)i(to)h(a)g(con)m(tiguous)150
5740
2080 y(output)30 b(arra)m(y)-8 b(.)42 b(By)30 b(de\014nition,)f(the)h
5741
(call)390 2213 y Fo(fftwnd_one\(plan,)43 b(in,)k(out\))275
5742
2352 y Fu(is)29 b(equiv)-5 b(alen)m(t)30 b(to)390 2485
5743
y Fo(fftwnd\(plan,)44 b(1,)k(in,)f(1,)g(1,)g(out,)g(1,)g(1\))150
5744
2718 y Fi(3.3.3)63 b(Destro)m(ying)41 b(a)g(Multi-dimensional)h(Plan)
5745
390 2910 y Fo(#include)k(<fftw.h>)390 3117 y(void)h
5778
TeXDict begin 25 26 bop 150 -116 a Fv(Chapter)30 b(3:)41
5779
b(FFTW)31 b(Reference)2354 b(25)225 299 y Ft(\017)60
5780
b Fp(out)p Fv(,)33 b Fp(ostride)f Fv(and)g Fp(odist)g
5781
Fv(describ)s(e)g(the)h(output)g(arra)m(y\(s\).)50 b(The)33
5782
b(format)g(is)g(the)g(same)h(as)f(for)330 408 y(the)e(input)d(arra)m(y)
5783
-8 b(.)379 551 y Ft(\000)60 b Fr(In-plac)-5 b(e)47 b(tr)-5
5784
b(ansforms)7 b Fv(:)73 b(These)45 b(parameters)g(are)h(ignored)e(for)g
5785
(plans)g(created)i(with)e(the)510 661 y Fp(FFTW_IN_PLACE)27
5786
b Fv(option.)275 844 y(The)36 b(function)g Fp(fftwnd_one)e
5787
Fv(transforms)i(a)i(single,)g(con)m(tiguous)f(input)e(arra)m(y)i(to)h
5788
(a)g(con)m(tiguous)150 954 y(output)30 b(arra)m(y)-8
5789
b(.)42 b(By)30 b(de\014nition,)f(the)h(call)390 1099
5790
y Fp(fftwnd_one\(plan,)43 b(in,)k(out\))275 1250 y Fv(is)29
5791
b(equiv)-5 b(alen)m(t)30 b(to)390 1395 y Fp(fftwnd\(plan,)44
5792
b(1,)k(in,)f(1,)g(0,)g(out,)g(1,)g(0\))150 1651 y Fh(3.3.3)63
5793
b(Destro)m(ying)41 b(a)g(Multi-dimensional)h(Plan)390
5794
1813 y Fp(#include)k(<fftw.h>)390 2021 y(void)h
5746
5795
(fftwnd_destroy_plan\(fft)o(wnd_)o(pla)o(n)42 b(plan\);)275
5747
3256 y Fu(The)c(function)g Fo(fftwnd_destroy_plan)c Fu(frees)39
5748
b(the)g(plan)e Fo(plan)h Fu(and)h(releases)g(all)f(the)h(memory)150
5749
3366 y(asso)s(ciated)31 b(with)e(it.)40 b(After)31 b(destruction,)f(a)g
5750
(plan)f(is)h(no)g(longer)g(v)-5 b(alid.)150 3599 y Fi(3.3.4)63
5751
b(What)40 b(FFTWND)h(Really)f(Computes)275 3796 y Fu(The)e(con)m(v)m
5796
2172 y Fv(The)c(function)g Fp(fftwnd_destroy_plan)c Fv(frees)39
5797
b(the)g(plan)e Fp(plan)h Fv(and)h(releases)g(all)f(the)h(memory)150
5798
2281 y(asso)s(ciated)31 b(with)e(it.)40 b(After)31 b(destruction,)f(a)g
5799
(plan)f(is)h(no)g(longer)g(v)-5 b(alid.)150 2538 y Fh(3.3.4)63
5800
b(What)40 b(FFTWND)h(Really)f(Computes)275 2747 y Fv(The)e(con)m(v)m
5752
5801
(en)m(tions)j(that)f(w)m(e)g(follo)m(w)e(for)h(the)h(m)m
5753
5802
(ulti-dimensional)35 b(transform)k(are)h(analogous)f(to)150
5754
3905 y(those)23 b(for)f(the)h(one-dimensional)e(transform.)37
5803
2856 y(those)23 b(for)f(the)h(one-dimensional)e(transform.)37
5755
5804
b(In)22 b(particular,)h(the)f(forw)m(ard)h(transform)e(has)i(a)g
5756
(negativ)m(e)150 4015 y(sign)j(in)f(the)i(exp)s(onen)m(t)f(and)g
5805
(negativ)m(e)150 2966 y(sign)j(in)f(the)i(exp)s(onen)m(t)f(and)g
5757
5806
(neither)g(the)h(forw)m(ard)f(nor)g(the)h(bac)m(kw)m(ard)g(transforms)e
5758
(will)f(p)s(erform)i(an)m(y)150 4124 y(normalization.)43
5807
(will)f(p)s(erform)i(an)m(y)150 3075 y(normalization.)43
5759
5808
b(Computing)30 b(the)i(bac)m(kw)m(ard)h(transform)e(of)g(the)h(forw)m
5760
(ard)g(transform)f(will)e(m)m(ultiply)150 4234 y(the)h(arra)m(y)g(b)m
5809
(ard)g(transform)f(will)e(m)m(ultiply)150 3185 y(the)h(arra)m(y)g(b)m
5761
5810
(y)f(the)h(pro)s(duct)e(of)i(its)f(dimensions.)37 b(The)29
5762
5811
b(output)h(is)e(in-order,)h(and)g(the)g(zeroth)h(elemen)m(t)150
5763
4344 y(of)h(the)f(output)g(is)f(the)i(amplitude)d(of)j(the)f(zero)i
5764
(frequency)d(comp)s(onen)m(t.)275 4482 y(The)35 b(exact)j(mathematical)
5812
3295 y(of)h(the)f(output)g(is)f(the)i(amplitude)d(of)j(the)f(zero)i
5813
(frequency)d(comp)s(onen)m(t.)275 3445 y(The)35 b(exact)j(mathematical)
5765
5814
f(de\014nition)d(of)i(our)g(m)m(ulti-dimensional)c(transform)k(follo)m
5766
(ws.)58 b(Let)37 b Fl(X)150 4592 y Fu(b)s(e)d(a)g Fl(d)p
5767
Fu(-dimensional)e(complex)i(arra)m(y)h(whose)f(elemen)m(ts)h(are)g
5768
Fl(X)7 b Fu([)p Fl(j)2489 4606 y Fn(1)2527 4592 y Fl(;)15
5769
b(j)2604 4606 y Fn(2)2642 4592 y Fl(;)g(:)g(:)g(:)i(;)e(j)2881
5770
4606 y Fk(d)2920 4592 y Fu(],)36 b(where)e(0)e Fs(\024)g
5771
Fl(j)3490 4606 y Fk(s)3557 4592 y Fl(<)g(n)3715 4606
5772
y Fk(s)150 4702 y Fu(for)e(all)f Fl(s)c Fs(2)g(f)p Fu(1)p
5773
Fl(;)15 b Fu(2)p Fl(;)g(:)g(:)g(:)k(;)c(d)p Fs(g)p Fu(.)41
5774
b(Let)31 b(also)g Fl(!)1509 4716 y Fk(s)1569 4702 y Fu(=)25
5775
b Fl(e)1707 4669 y Fn(2)p Fk(\031)1781 4624 y Fj(p)p
5776
1836 4624 85 3 v 45 x(\000)p Fn(1)p Fk(=n)1996 4677 y
5777
Fg(s)2032 4702 y Fu(,)30 b(for)h(all)59 b Fl(s)25 b Fs(2)g(f)p
5778
Fu(1)p Fl(;)15 b Fu(2)p Fl(;)g(:)g(:)g(:)j(;)d(d)p Fs(g)p
5779
Fu(.)275 4840 y(The)24 b(forw)m(ard)g(transform)g(computes)h(a)g
5780
(complex)f(arra)m(y)i Fl(Y)20 b Fu(,)26 b(whose)e(structure)h(is)e(the)
5781
i(same)g(as)g(that)150 4950 y(of)31 b Fl(X)7 b Fu(,)31
5782
b(de\014ned)e(b)m(y)534 5258 y Fl(Y)20 b Fu([)p Fl(i)663
5783
5272 y Fn(1)701 5258 y Fl(;)15 b(i)772 5272 y Fn(2)810
5784
5258 y Fl(;)g(:)g(:)g(:)i(;)e(i)1043 5272 y Fk(d)1082
5785
5258 y Fu(])26 b(=)1229 5151 y Fk(n)1270 5159 y Ff(1)1302
5786
5151 y Fj(\000)p Fn(1)1248 5177 y Fh(X)1236 5354 y Fk(j)1263
5787
5362 y Ff(1)1296 5354 y Fn(=0)1402 5151 y Fk(n)1443 5159
5788
y Ff(2)1476 5151 y Fj(\000)p Fn(1)1421 5177 y Fh(X)1409
5789
5354 y Fk(j)1436 5362 y Ff(2)1469 5354 y Fn(=0)1576 5258
5790
y Fs(\001)15 b(\001)g(\001)1697 5150 y Fk(n)1738 5159
5791
y Fg(d)1773 5150 y Fj(\000)p Fn(1)1717 5177 y Fh(X)1704
5792
5354 y Fk(j)1731 5363 y Fg(d)1767 5354 y Fn(=0)1873 5258
5793
y Fl(X)7 b Fu([)p Fl(j)2017 5272 y Fn(1)2055 5258 y Fl(;)15
5794
b(j)2132 5272 y Fn(2)2170 5258 y Fl(;)g(:)g(:)g(:)i(;)e(j)2409
5795
5272 y Fk(d)2449 5258 y Fu(])p Fl(!)2534 5215 y Fj(\000)p
5796
Fk(i)2609 5223 y Ff(1)2642 5215 y Fk(j)2669 5223 y Ff(1)2531
5797
5277 y Fn(1)2706 5258 y Fl(!)2766 5215 y Fj(\000)p Fk(i)2841
5798
5223 y Ff(2)2873 5215 y Fk(j)2900 5223 y Ff(2)2763 5277
5799
y Fn(2)2952 5258 y Fs(\001)g(\001)g(\001)i Fl(!)3134
5800
5215 y Fj(\000)p Fk(i)3209 5224 y Fg(d)3244 5215 y Fk(j)3271
5801
5224 y Fg(d)3131 5280 y Fk(d)3340 5258 y Fl(:)p eop
5815
(ws.)58 b(Let)37 b Fm(X)150 3555 y Fv(b)s(e)d(a)g Fm(d)p
5816
Fv(-dimensional)e(complex)i(arra)m(y)h(whose)f(elemen)m(ts)h(are)g
5817
Fm(X)7 b Fv([)p Fm(j)2489 3569 y Fo(1)2527 3555 y Fm(;)15
5818
b(j)2604 3569 y Fo(2)2642 3555 y Fm(;)g(:)g(:)g(:)i(;)e(j)2881
5819
3569 y Fl(d)2920 3555 y Fv(],)36 b(where)e(0)e Ft(\024)g
5820
Fm(j)3490 3569 y Fl(s)3557 3555 y Fm(<)g(n)3715 3569
5821
y Fl(s)150 3665 y Fv(for)e(all)f Fm(s)c Ft(2)g(f)p Fv(1)p
5822
Fm(;)15 b Fv(2)p Fm(;)g(:)g(:)g(:)k(;)c(d)p Ft(g)p Fv(.)41
5823
b(Let)31 b(also)g Fm(!)1509 3679 y Fl(s)1569 3665 y Fv(=)25
5824
b Fm(e)1707 3632 y Fo(2)p Fl(\031)1781 3587 y Fk(p)p
5825
1836 3587 85 3 v 45 x(\000)p Fo(1)p Fl(=n)1996 3640 y
5826
Fe(s)2032 3665 y Fv(,)30 b(for)h(all)59 b Fm(s)25 b Ft(2)g(f)p
5827
Fv(1)p Fm(;)15 b Fv(2)p Fm(;)g(:)g(:)g(:)j(;)d(d)p Ft(g)p
5828
Fv(.)275 3815 y(The)24 b(forw)m(ard)g(transform)g(computes)h(a)g
5829
(complex)f(arra)m(y)i Fm(Y)20 b Fv(,)26 b(whose)e(structure)h(is)e(the)
5830
i(same)g(as)g(that)150 3925 y(of)31 b Fm(X)7 b Fv(,)31
5831
b(de\014ned)e(b)m(y)534 4262 y Fm(Y)20 b Fv([)p Fm(i)663
5832
4276 y Fo(1)701 4262 y Fm(;)15 b(i)772 4276 y Fo(2)810
5833
4262 y Fm(;)g(:)g(:)g(:)i(;)e(i)1043 4276 y Fl(d)1082
5834
4262 y Fv(])26 b(=)1229 4155 y Fl(n)1270 4163 y Fd(1)1302
5835
4155 y Fk(\000)p Fo(1)1248 4181 y Fg(X)1236 4358 y Fl(j)1263
5836
4366 y Fd(1)1296 4358 y Fo(=0)1402 4155 y Fl(n)1443 4163
5837
y Fd(2)1476 4155 y Fk(\000)p Fo(1)1421 4181 y Fg(X)1409
5838
4358 y Fl(j)1436 4366 y Fd(2)1469 4358 y Fo(=0)1576 4262
5839
y Ft(\001)15 b(\001)g(\001)1697 4155 y Fl(n)1738 4164
5840
y Fe(d)1773 4155 y Fk(\000)p Fo(1)1717 4181 y Fg(X)1704
5841
4358 y Fl(j)1731 4367 y Fe(d)1767 4358 y Fo(=0)1873 4262
5842
y Fm(X)7 b Fv([)p Fm(j)2017 4276 y Fo(1)2055 4262 y Fm(;)15
5843
b(j)2132 4276 y Fo(2)2170 4262 y Fm(;)g(:)g(:)g(:)i(;)e(j)2409
5844
4276 y Fl(d)2449 4262 y Fv(])p Fm(!)2534 4219 y Fk(\000)p
5845
Fl(i)2609 4227 y Fd(1)2642 4219 y Fl(j)2669 4227 y Fd(1)2531
5846
4282 y Fo(1)2706 4262 y Fm(!)2766 4219 y Fk(\000)p Fl(i)2841
5847
4227 y Fd(2)2873 4219 y Fl(j)2900 4227 y Fd(2)2763 4282
5848
y Fo(2)2952 4262 y Ft(\001)g(\001)g(\001)i Fm(!)3134
5849
4219 y Fk(\000)p Fl(i)3209 4228 y Fe(d)3244 4219 y Fl(j)3271
5850
4228 y Fe(d)3131 4284 y Fl(d)3340 4262 y Fm(:)275 4574
5851
y Fv(The)29 b(bac)m(kw)m(ard)i(transform)f(computes)612
5852
4877 y Fm(Y)20 b Fv([)p Fm(i)741 4891 y Fo(1)779 4877
5853
y Fm(;)15 b(i)850 4891 y Fo(2)888 4877 y Fm(;)g(:)g(:)g(:)i(;)e(i)1121
5854
4891 y Fl(d)1160 4877 y Fv(])25 b(=)1306 4771 y Fl(n)1347
5855
4779 y Fd(1)1380 4771 y Fk(\000)p Fo(1)1326 4797 y Fg(X)1314
5856
4973 y Fl(j)1341 4981 y Fd(1)1374 4973 y Fo(=0)1480 4771
5857
y Fl(n)1521 4779 y Fd(2)1553 4771 y Fk(\000)p Fo(1)1499
5858
4797 y Fg(X)1487 4973 y Fl(j)1514 4981 y Fd(2)1547 4973
5859
y Fo(=0)1654 4877 y Ft(\001)15 b(\001)g(\001)1775 4770
5860
y Fl(n)1816 4779 y Fe(d)1851 4770 y Fk(\000)p Fo(1)1795
5861
4797 y Fg(X)1782 4973 y Fl(j)1809 4982 y Fe(d)1844 4973
5862
y Fo(=0)1951 4877 y Fm(X)7 b Fv([)p Fm(j)2095 4891 y
5863
Fo(1)2133 4877 y Fm(;)15 b(j)2210 4891 y Fo(2)2248 4877
5864
y Fm(;)g(:)g(:)g(:)i(;)e(j)2487 4891 y Fl(d)2526 4877
5865
y Fv(])p Fm(!)2611 4835 y Fl(i)2634 4843 y Fd(1)2667
5866
4835 y Fl(j)2694 4843 y Fd(1)2608 4897 y Fo(1)2731 4877
5867
y Fm(!)2791 4835 y Fl(i)2814 4843 y Fd(2)2847 4835 y
5868
Fl(j)2874 4843 y Fd(2)2788 4897 y Fo(2)2926 4877 y Ft(\001)g(\001)g
5869
(\001)i Fm(!)3108 4835 y Fl(i)3131 4844 y Fe(d)3166 4835
5870
y Fl(j)3193 4844 y Fe(d)3105 4900 y Fl(d)3263 4877 y
5871
Fm(:)275 5230 y Fv(Computing)26 b(the)i(forw)m(ard)f(transform)g(follo)
5872
m(w)m(ed)h(b)m(y)g(the)g(bac)m(kw)m(ard)g(transform)f(will)f(m)m
5873
(ultiply)f(the)150 5340 y(arra)m(y)31 b(b)m(y)514 5276
5874
y Fg(Q)593 5296 y Fl(d)593 5363 y(s)p Fo(=1)727 5340
5875
y Fm(n)782 5354 y Fl(d)821 5340 y Fv(.)p eop end
5803
26 27 bop 150 -116 a Fu(26)3232 b(FFTW)275 299 y(The)29
5804
b(bac)m(kw)m(ard)i(transform)f(computes)612 583 y Fl(Y)20
5805
b Fu([)p Fl(i)741 597 y Fn(1)779 583 y Fl(;)15 b(i)850
5806
597 y Fn(2)888 583 y Fl(;)g(:)g(:)g(:)i(;)e(i)1121 597
5807
y Fk(d)1160 583 y Fu(])25 b(=)1306 477 y Fk(n)1347 485
5808
y Ff(1)1380 477 y Fj(\000)p Fn(1)1326 502 y Fh(X)1314
5809
679 y Fk(j)1341 687 y Ff(1)1374 679 y Fn(=0)1480 477
5810
y Fk(n)1521 485 y Ff(2)1553 477 y Fj(\000)p Fn(1)1499
5811
502 y Fh(X)1487 679 y Fk(j)1514 687 y Ff(2)1547 679 y
5812
Fn(=0)1654 583 y Fs(\001)15 b(\001)g(\001)1775 476 y
5813
Fk(n)1816 485 y Fg(d)1851 476 y Fj(\000)p Fn(1)1795 502
5814
y Fh(X)1782 679 y Fk(j)1809 688 y Fg(d)1844 679 y Fn(=0)1951
5815
583 y Fl(X)7 b Fu([)p Fl(j)2095 597 y Fn(1)2133 583 y
5816
Fl(;)15 b(j)2210 597 y Fn(2)2248 583 y Fl(;)g(:)g(:)g(:)i(;)e(j)2487
5817
597 y Fk(d)2526 583 y Fu(])p Fl(!)2611 541 y Fk(i)2634
5818
549 y Ff(1)2667 541 y Fk(j)2694 549 y Ff(1)2608 603 y
5819
Fn(1)2731 583 y Fl(!)2791 541 y Fk(i)2814 549 y Ff(2)2847
5820
541 y Fk(j)2874 549 y Ff(2)2788 603 y Fn(2)2926 583 y
5821
Fs(\001)g(\001)g(\001)i Fl(!)3108 541 y Fk(i)3131 550
5822
y Fg(d)3166 541 y Fk(j)3193 550 y Fg(d)3105 606 y Fk(d)3263
5823
583 y Fl(:)275 904 y Fu(Computing)26 b(the)i(forw)m(ard)f(transform)g
5824
(follo)m(w)m(ed)h(b)m(y)g(the)g(bac)m(kw)m(ard)g(transform)f(will)f(m)m
5825
(ultiply)f(the)150 1013 y(arra)m(y)31 b(b)m(y)514 949
5826
y Fh(Q)593 970 y Fk(d)593 1036 y(s)p Fn(=1)727 1013 y
5827
Fl(n)782 1027 y Fk(d)821 1013 y Fu(.)150 1279 y Ft(3.4)68
5828
b(Real)46 b(One-dimensional)g(T)-11 b(ransforms)45 b(Reference)275
5829
1475 y Fu(The)29 b(one-dimensional)f(real)h(routines)g(are)h(generally)
5830
f(pre\014xed)g(with)f Fo(rfftw_)p Fu(.)3055 1442 y Fn(3)3132
5831
1475 y Fu(Programs)h(using)150 1585 y(RFFTW)c(should)d(b)s(e)i(link)m
5832
(ed)e(with)h Fo(-lrfftw)29 b(-lfftw)f(-lm)c Fu(on)g(Unix)f(systems,)i
5833
(or)g(with)e(the)h(RFFTW,)150 1694 y(the)31 b(FFTW,)g(and)f(the)g
5834
(standard)g(math)g(libraries)e(in)h(general.)150 1925
5835
y Fi(3.4.1)63 b(Plan)40 b(Creation)h(for)g(Real)f(One-dimensional)i(T)
5836
-10 b(ransforms)390 2115 y Fo(#include)46 b(<rfftw.h>)390
5837
2323 y(rfftw_plan)f(rfftw_create_plan\(int)d(n,)47 b(fftw_direction)d
5838
(dir,)j(int)g(flags\);)390 2530 y(rfftw_plan)e
5877
TeXDict begin 26 27 bop 150 -116 a Fv(26)3232 b(FFTW)150
5878
299 y Fu(3.4)68 b(Real)46 b(One-dimensional)g(T)-11 b(ransforms)45
5879
b(Reference)275 489 y Fv(The)29 b(one-dimensional)f(real)h(routines)g
5880
(are)h(generally)f(pre\014xed)g(with)f Fp(rfftw_)p Fv(.)3055
5881
457 y Fo(3)3132 489 y Fv(Programs)h(using)150 599 y(RFFTW)c(should)d(b)
5882
s(e)i(link)m(ed)e(with)h Fp(-lrfftw)29 b(-lfftw)f(-lm)c
5883
Fv(on)g(Unix)f(systems,)i(or)g(with)e(the)h(RFFTW,)150
5884
709 y(the)31 b(FFTW,)g(and)f(the)g(standard)g(math)g(libraries)e(in)h
5885
(general.)150 927 y Fh(3.4.1)63 b(Plan)40 b(Creation)h(for)g(Real)f
5886
(One-dimensional)i(T)-10 b(ransforms)390 1089 y Fp(#include)46
5887
b(<rfftw.h>)390 1296 y(rfftw_plan)f(rfftw_create_plan\(int)d(n,)47
5888
b(fftw_direction)d(dir,)j(int)g(flags\);)390 1504 y(rfftw_plan)e
5839
5889
(rfftw_create_plan_specif)o(ic\(i)o(nt)d(n,)47 b(fftw_direction)d(dir,)
5840
581 2634 y(int)j(flags,)f(fftw_real)f(*in,)i(int)g(istride,)581
5841
2738 y(fftw_real)e(*out,)i(int)f(ostride\);)275 2875
5842
y Fu(The)23 b(function)f Fo(rfftw_create_plan)d Fu(creates)25
5890
581 1608 y(int)j(flags,)f(fftw_real)f(*in,)i(int)g(istride,)581
5891
1711 y(fftw_real)e(*out,)i(int)f(ostride\);)275 1844
5892
y Fv(The)23 b(function)f Fp(rfftw_create_plan)d Fv(creates)25
5843
5893
b(a)g(plan,)f(whic)m(h)e(is)h(a)h(data)g(structure)g(con)m(taining)f
5844
(all)150 2985 y(the)31 b(information)e(that)j Fo(rfftw)e
5845
Fu(needs)g(in)g(order)g(to)i(compute)f(the)h(1D)f(real)g(F)-8
5846
b(ourier)31 b(transform.)41 b(Y)-8 b(ou)150 3095 y(can)32
5894
(all)150 1953 y(the)31 b(information)e(that)j Fp(rfftw)e
5895
Fv(needs)g(in)g(order)g(to)i(compute)f(the)h(1D)f(real)g(F)-8
5896
b(ourier)31 b(transform.)41 b(Y)-8 b(ou)150 2063 y(can)32
5847
5897
b(create)i(as)f(man)m(y)f(plans)f(as)h(y)m(ou)g(need,)h(but)f(only)f
5848
5898
(one)h(plan)f(for)h(a)h(giv)m(en)f(arra)m(y)h(size)f(is)f(required)150
5849
3204 y(\(a)g(plan)e(can)i(b)s(e)f(reused)f(man)m(y)i(times\).)275
5850
3342 y Fo(rfftw_create_plan)j Fu(returns)k(a)i(v)-5 b(alid)38
5851
b(plan,)j(or)e Fo(NULL)f Fu(if,)j(for)e(some)h(reason,)i(the)e(plan)e
5852
(can't)150 3452 y(b)s(e)c(created.)53 b(In)34 b(the)g(default)f
5899
2173 y(\(a)g(plan)e(can)i(b)s(e)f(reused)f(man)m(y)i(times\).)275
5900
2305 y Fp(rfftw_create_plan)j Fv(returns)k(a)i(v)-5 b(alid)38
5901
b(plan,)j(or)e Fp(NULL)f Fv(if,)j(for)e(some)h(reason,)i(the)e(plan)e
5902
(can't)150 2415 y(b)s(e)c(created.)53 b(In)34 b(the)g(default)f
5853
5903
(installation,)h(this)f(cannot)i(happ)s(en,)f(but)f(it)h(is)f(p)s
5854
(ossible)f(to)j(con\014gure)150 3561 y(RFFTW)e(in)e(suc)m(h)h(a)h(w)m
5904
(ossible)f(to)j(con\014gure)150 2524 y(RFFTW)e(in)e(suc)m(h)h(a)h(w)m
5855
5905
(a)m(y)h(that)f(some)f(input)f(sizes)h(are)h(forbidden,)e(and)g(RFFTW)i
5856
(cannot)h(create)g(a)150 3671 y(plan.)275 3809 y(The)k
5857
Fo(rfftw_create_plan_specifi)o(c)33 b Fu(v)-5 b(arian)m(t)39
5906
(cannot)h(create)g(a)150 2634 y(plan.)275 2766 y(The)k
5907
Fp(rfftw_create_plan_specifi)o(c)33 b Fv(v)-5 b(arian)m(t)39
5858
5908
b(tak)m(es)i(as)e(additional)e(argumen)m(ts)j(sp)s(eci\014c)e(in-)150
5859
3918 y(put/output)43 b(arra)m(ys)g(and)f(their)h(strides.)77
5909
2876 y(put/output)43 b(arra)m(ys)g(and)f(their)h(strides.)77
5860
5910
b(F)-8 b(or)44 b(the)f(last)g(four)g(argumen)m(ts,)k(y)m(ou)c(should)e
5861
(pass)i(the)150 4028 y(arra)m(ys)36 b(and)f(strides)g(that)h(y)m(ou)g
5862
(will)e(ev)m(en)m(tually)h(b)s(e)g(passing)g(to)i Fo(rfftw)p
5863
Fu(.)55 b(The)35 b(resulting)f(plans)h(will)150 4137
5911
(pass)i(the)150 2986 y(arra)m(ys)36 b(and)f(strides)g(that)h(y)m(ou)g
5912
(will)e(ev)m(en)m(tually)h(b)s(e)g(passing)g(to)i Fp(rfftw)p
5913
Fv(.)55 b(The)35 b(resulting)f(plans)h(will)150 3095
5864
5914
y(b)s(e)g(optimized)g(for)h(those)g(arra)m(ys)g(and)g(strides,)g
5865
5915
(although)f(they)h(ma)m(y)h(b)s(e)e(used)g(on)h(other)g(arra)m(ys)h(as)
5866
150 4247 y(w)m(ell.)i(Note:)j(the)30 b(con)m(ten)m(ts)h(of)f(the)f(in)g
5867
(and)f(out)i(arra)m(ys)g(are)g Fq(destr)-5 b(oye)g(d)41
5868
b Fu(b)m(y)30 b(the)f(sp)s(eci\014c)g(planner)e(\(the)150
5869
4356 y(initial)f(con)m(ten)m(ts)31 b(are)e(ignored,)g(so)g(the)g(arra)m
5916
150 3205 y(w)m(ell.)i(Note:)j(the)30 b(con)m(ten)m(ts)h(of)f(the)f(in)g
5917
(and)f(out)i(arra)m(ys)g(are)g Fr(destr)-5 b(oye)g(d)41
5918
b Fv(b)m(y)30 b(the)f(sp)s(eci\014c)g(planner)e(\(the)150
5919
3314 y(initial)f(con)m(ten)m(ts)31 b(are)e(ignored,)g(so)g(the)g(arra)m
5870
5920
(ys)g(need)g(not)g(ha)m(v)m(e)i(b)s(een)d(initialized\).)37
5871
b(See)29 b(Section)g(3.2.2)150 4466 y([Discussion)g(on)h(Sp)s(eci\014c)
5921
b(See)29 b(Section)g(3.2.2)150 3424 y([Discussion)g(on)h(Sp)s(eci\014c)
5872
5922
f(Plans],)h(page)h(20,)g(for)f(a)h(discussion)d(on)i(sp)s(eci\014c)f
5873
(plans.)150 4697 y Fi(Argumen)m(ts)225 4893 y Fs(\017)60
5874
b Fo(n)30 b Fu(is)f(the)i(size)f(of)h(the)f(transform.)40
5923
(plans.)150 3642 y Fh(Argumen)m(ts)225 3810 y Ft(\017)60
5924
b Fp(n)30 b Fv(is)f(the)i(size)f(of)h(the)f(transform.)40
5875
5925
b(It)31 b(can)g(b)s(e)e(an)m(y)i(p)s(ositiv)m(e)e(in)m(teger.)379
5876
5029 y Fs(\000)60 b Fu(RFFTW)30 b(is)e(b)s(est)h(at)i(handling)26
5877
b(sizes)j(of)h(the)f(form)g(2)2375 4996 y Fk(a)2416 5029
5878
y Fu(3)2461 4996 y Fk(b)2495 5029 y Fu(5)2540 4996 y
5879
Fk(c)2574 5029 y Fu(7)2619 4996 y Fk(d)2658 5029 y Fu(11)2748
5880
4996 y Fk(e)2785 5029 y Fu(13)2875 4996 y Fk(f)2919 5029
5881
y Fu(,)h(where)e Fl(e)p Fu(+)p Fl(f)39 b Fu(is)28 b(either)510
5882
5138 y(0)h(or)f(1,)h(and)e(the)i(other)f(exp)s(onen)m(ts)g(are)h
5926
3942 y Ft(\000)60 b Fv(RFFTW)30 b(is)e(b)s(est)h(at)i(handling)26
5927
b(sizes)j(of)h(the)f(form)g(2)2375 3909 y Fl(a)2416 3942
5928
y Fv(3)2461 3909 y Fl(b)2495 3942 y Fv(5)2540 3909 y
5929
Fl(c)2574 3942 y Fv(7)2619 3909 y Fl(d)2658 3942 y Fv(11)2748
5930
3909 y Fl(e)2785 3942 y Fv(13)2875 3909 y Fl(f)2919 3942
5931
y Fv(,)h(where)e Fm(e)p Fv(+)p Fm(f)39 b Fv(is)28 b(either)510
5932
4052 y(0)h(or)f(1,)h(and)e(the)i(other)f(exp)s(onen)m(ts)g(are)h
5883
5933
(arbitrary)-8 b(.)39 b(Other)28 b(sizes)f(are)i(computed)f(b)m(y)g
5884
(means)p 150 5241 1200 4 v 192 5307 a Fn(3)275 5340 y
5885
Fu(The)h(et)m(ymologically-correct)j(sp)s(elling)c(w)m(ould)h(b)s(e)h
5886
Fo(frftw_)p Fu(,)f(but)g(it)h(is)g(hard)f(to)i(remem)m(b)s(er.)p
5934
(means)510 4162 y(of)c(a)g(slo)m(w,)i(general-purp)s(ose)c(routine)h
5935
(\(reducing)g(to)i Fm(O)s Fv(\()p Fm(n)2517 4129 y Fo(2)2554
5936
4162 y Fv(\))f(p)s(erformance)f(for)h(prime)f(sizes\).)510
5937
4271 y(\(It)35 b(is)e(p)s(ossible)f(to)j(customize)f(RFFTW)h(for)f
5938
(di\013eren)m(t)g(arra)m(y)g(sizes.)52 b(See)35 b(Chapter)f(6)g([In-)
5939
510 4381 y(stallation)c(and)g(Customization],)g(page)i(55,)g(for)e
5940
(more)h(information.\))41 b(T)-8 b(ransforms)29 b(whose)510
5941
4490 y(sizes)36 b(are)g(p)s(o)m(w)m(ers)g(of)g(2)g(are)h(esp)s(ecially)
5942
d(fast.)58 b(If)35 b(y)m(ou)i(ha)m(v)m(e)g(large)f(prime)e(factors,)39
5943
b(it)c(ma)m(y)510 4600 y(b)s(e)j(faster)h(to)h(switc)m(h)e(o)m(v)m(er)i
5944
(to)g(the)f(complex)f(FFTW)i(routines,)g(whic)m(h)e(ha)m(v)m(e)i
5945
Fm(O)s Fv(\()p Fm(n)15 b Fv(log)h Fm(n)p Fv(\))510 4709
5946
y(p)s(erformance)25 b(ev)m(en)i(for)f(prime)f(sizes)g(\(w)m(e)i(don't)f
5947
(kno)m(w)g(of)h(a)f(similar)e(algorithm)h(sp)s(ecialized)510
5948
4819 y(for)30 b(real)g(data,)h(unfortunately\).)225 4952
5949
y Ft(\017)60 b Fp(dir)31 b Fv(is)g(the)g(direction)g(of)h(the)g
5950
(desired)e(transform,)h(either)h Fp(FFTW_REAL_TO_COMPLEX)26
5951
b Fv(or)31 b Fp(FFTW_)330 5061 y(COMPLEX_TO_REAL)p Fv(,)h(corresp)s
5952
(onding)g(to)j Fp(FFTW_FORWARD)c Fv(or)k Fp(FFTW_BACKWARD)p
5953
Fv(,)d(resp)s(ectiv)m(ely)-8 b(.)p 150 5241 1200 4 v
5954
199 5308 a Fo(3)275 5340 y Fj(The)25 b(et)n(ymologically-correct)i(sp)r
5955
(elling)g(w)n(ould)f(b)r(e)g Fi(frftw_)p Fj(,)h(but)e(it)h(is)g(hard)f
5956
(to)h(remem)n(b)r(er.)p eop end
5889
27 28 bop 150 -116 a Fu(Chapter)30 b(3:)41 b(FFTW)31
5890
b(Reference)2354 b(27)510 299 y(of)24 b(a)g(slo)m(w,)i(general-purp)s
5891
(ose)c(routine)h(\(reducing)g(to)i Fl(O)s Fu(\()p Fl(n)2517
5892
266 y Fn(2)2554 299 y Fu(\))f(p)s(erformance)f(for)h(prime)f(sizes\).)
5893
510 408 y(\(It)35 b(is)e(p)s(ossible)f(to)j(customize)f(RFFTW)h(for)f
5894
(di\013eren)m(t)g(arra)m(y)g(sizes.)52 b(See)35 b(Chapter)f(6)g([In-)
5895
510 518 y(stallation)c(and)g(Customization],)g(page)i(55,)g(for)e(more)
5896
h(information.\))41 b(T)-8 b(ransforms)29 b(whose)510
5897
628 y(sizes)h(are)h(p)s(o)m(w)m(ers)f(of)h(2)f(are)h(esp)s(ecially)e
5898
(fast.)225 766 y Fs(\017)60 b Fo(dir)31 b Fu(is)g(the)g(direction)g(of)
5899
h(the)g(desired)e(transform,)h(either)h Fo(FFTW_REAL_TO_COMPLEX)26
5900
b Fu(or)31 b Fo(FFTW_)330 876 y(COMPLEX_TO_REAL)p Fu(,)h(corresp)s
5901
(onding)g(to)j Fo(FFTW_FORWARD)c Fu(or)k Fo(FFTW_BACKWARD)p
5902
Fu(,)d(resp)s(ectiv)m(ely)-8 b(.)225 1123 y Fs(\017)60
5903
b Fo(flags)29 b Fu(is)g(a)i(b)s(o)s(olean)e(OR)h(\(`)p
5904
Fo(|)p Fu('\))i(of)e(zero)h(or)g(more)f(of)h(the)f(follo)m(wing:)379
5905
1262 y Fs(\000)60 b Fo(FFTW_MEASURE)p Fu(:)43 b(this)32
5958
TeXDict begin 27 28 bop 150 -116 a Fv(Chapter)30 b(3:)41
5959
b(FFTW)31 b(Reference)2354 b(27)225 299 y Ft(\017)60
5960
b Fp(flags)29 b Fv(is)g(a)i(b)s(o)s(olean)e(OR)h(\(`)p
5961
Fp(|)p Fv('\))i(of)e(zero)h(or)g(more)f(of)h(the)f(follo)m(wing:)379
5962
439 y Ft(\000)60 b Fp(FFTW_MEASURE)p Fv(:)43 b(this)32
5906
5963
b(\015ag)i(tells)e(RFFTW)i(to)g(\014nd)e(the)h(optimal)g(plan)e(b)m(y)j
5907
(actually)e Fq(c)-5 b(om-)510 1371 y(puting)45 b Fu(sev)m(eral)37
5964
(actually)e Fr(c)-5 b(om-)510 548 y(puting)45 b Fv(sev)m(eral)37
5908
5965
b(FFTs)g(and)f(measuring)g(their)g(execution)g(time.)60
5909
b(Dep)s(ending)35 b(on)i(the)g(in-)510 1481 y(stallation,)30
5910
b(this)f(can)i(tak)m(e)h(some)e(time.)379 1619 y Fs(\000)60
5911
b Fo(FFTW_ESTIMATE)p Fu(:)34 b(do)25 b(not)g(run)f(an)m(y)h(FFT)h(and)e
5966
b(Dep)s(ending)35 b(on)i(the)g(in-)510 658 y(stallation,)30
5967
b(this)f(can)i(tak)m(e)h(some)e(time.)379 798 y Ft(\000)60
5968
b Fp(FFTW_ESTIMATE)p Fv(:)34 b(do)25 b(not)g(run)f(an)m(y)h(FFT)h(and)e
5912
5969
(pro)m(vide)g(a)h(\\reasonable")h(plan)e(\(for)h(a)g(RISC)510
5913
1729 y(pro)s(cessor)37 b(with)g(man)m(y)h(registers\).)62
5914
b(If)38 b(neither)e Fo(FFTW_ESTIMATE)e Fu(nor)k Fo(FFTW_MEASURE)c
5915
Fu(is)510 1838 y(pro)m(vided,)29 b(the)i(default)e(is)h
5916
Fo(FFTW_ESTIMATE)p Fu(.)379 1977 y Fs(\000)60 b Fo(FFTW_OUT_OF_PLACE)p
5917
Fu(:)41 b(pro)s(duce)32 b(a)i(plan)e(assuming)f(that)j(the)f(input)e
5918
(and)i(output)g(arra)m(ys)510 2086 y(will)28 b(b)s(e)h(distinct)g
5919
(\(this)h(is)f(the)i(default\).)379 2225 y Fs(\000)60
5920
b Fo(FFTW_IN_PLACE)p Fu(:)39 b(pro)s(duce)31 b(a)h(plan)e(assuming)g
5970
908 y(pro)s(cessor)37 b(with)g(man)m(y)h(registers\).)62
5971
b(If)38 b(neither)e Fp(FFTW_ESTIMATE)e Fv(nor)k Fp(FFTW_MEASURE)c
5972
Fv(is)510 1017 y(pro)m(vided,)29 b(the)i(default)e(is)h
5973
Fp(FFTW_ESTIMATE)p Fv(.)379 1157 y Ft(\000)60 b Fp(FFTW_OUT_OF_PLACE)p
5974
Fv(:)41 b(pro)s(duce)32 b(a)i(plan)e(assuming)f(that)j(the)f(input)e
5975
(and)i(output)g(arra)m(ys)510 1267 y(will)28 b(b)s(e)h(distinct)g
5976
(\(this)h(is)f(the)i(default\).)379 1407 y Ft(\000)60
5977
b Fp(FFTW_IN_PLACE)p Fv(:)39 b(pro)s(duce)31 b(a)h(plan)e(assuming)g
5921
5978
(that)i(y)m(ou)g(w)m(an)m(t)g(the)g(output)f(in)f(the)i(input)510
5922
2334 y(arra)m(y)-8 b(.)41 b(The)28 b(algorithm)g(used)f(is)h(not)g
5979
1516 y(arra)m(y)-8 b(.)41 b(The)28 b(algorithm)g(used)f(is)h(not)g
5923
5980
(necessarily)g(in)f(place:)40 b(RFFTW)29 b(is)e(able)h(to)i(compute)510
5924
2444 y(true)43 b(in-place)f(transforms)g(only)g(for)g(small)g(v)-5
5925
b(alues)42 b(of)h Fo(n)p Fu(.)78 b(If)42 b(RFFTW)i(is)e(not)h(able)f
5926
(to)510 2553 y(compute)g(the)h(transform)e(in-place,)j(it)e(will)d
5981
1626 y(true)43 b(in-place)f(transforms)g(only)g(for)g(small)g(v)-5
5982
b(alues)42 b(of)h Fp(n)p Fv(.)78 b(If)42 b(RFFTW)i(is)e(not)h(able)f
5983
(to)510 1735 y(compute)g(the)h(transform)e(in-place,)j(it)e(will)d
5927
5984
(allo)s(cate)j(a)h(temp)s(orary)e(arra)m(y)i(\(unless)e(y)m(ou)510
5928
2663 y(pro)m(vide)d(one)i(y)m(ourself)7 b(\),)41 b(compute)f(the)g
5985
1845 y(pro)m(vide)d(one)i(y)m(ourself)7 b(\),)41 b(compute)f(the)g
5929
5986
(transform)e(out)i(of)f(place,)j(and)c(cop)m(y)j(the)e(result)510
5930
2773 y(bac)m(k.)60 b Fq(Warning:)54 b(This)39 b(option)h(changes)f(the)
5987
1955 y(bac)m(k.)60 b Fr(Warning:)54 b(This)39 b(option)h(changes)f(the)
5931
5988
g(me)-5 b(aning)39 b(of)g(some)g(p)-5 b(ar)g(ameters)42
5932
b(of)c Fo(rfftw)510 2882 y Fu(\(see)31 b(Section)g(3.4.2)h([Computing)d
5989
b(of)c Fp(rfftw)510 2064 y Fv(\(see)31 b(Section)g(3.4.2)h([Computing)d
5933
5990
(the)h(Real)h(One-dimensional)c(T)-8 b(ransform],)30
5934
b(page)h(27\).)510 3021 y(The)f(default)f(mo)s(de)h(of)h(op)s(eration)f
5935
(is)f Fo(FFTW_OUT_OF_PLACE)p Fu(.)379 3159 y Fs(\000)60
5936
b Fo(FFTW_USE_WISDOM)p Fu(:)37 b(use)30 b(an)m(y)h Fo(wisdom)e
5937
Fu(that)i(is)e(a)m(v)-5 b(ailable)30 b(to)h(help)e(in)h(the)g(creation)
5938
h(of)g(the)510 3268 y(plan.)50 b(\(See)34 b(Section)g(2.6)h([W)-8
5991
b(page)h(27\).)510 2204 y(The)f(default)f(mo)s(de)h(of)h(op)s(eration)f
5992
(is)f Fp(FFTW_OUT_OF_PLACE)p Fv(.)379 2344 y Ft(\000)60
5993
b Fp(FFTW_USE_WISDOM)p Fv(:)37 b(use)30 b(an)m(y)h Fp(wisdom)e
5994
Fv(that)i(is)e(a)m(v)-5 b(ailable)30 b(to)h(help)e(in)h(the)g(creation)
5995
h(of)g(the)510 2454 y(plan.)50 b(\(See)34 b(Section)g(2.6)h([W)-8
5939
5996
b(ords)34 b(of)h(Wisdom],)f(page)h(13.\))52 b(This)32
5940
b(can)i(greatly)h(sp)s(eed)e(the)510 3378 y(creation)27
5941
b(of)g(plans,)g(esp)s(ecially)e(with)g(the)j Fo(FFTW_MEASURE)23
5942
b Fu(option.)39 b Fo(FFTW_ESTIMATE)23 b Fu(plans)510
5943
3488 y(can)28 b(also)g(tak)m(e)i(adv)-5 b(an)m(tage)30
5944
b(of)e Fo(wisdom)e Fu(to)j(pro)s(duce)e(a)h(more)g(optimal)f(plan)g
5945
(\(based)h(on)g(past)510 3597 y(measuremen)m(ts\))i(than)g(the)g
5997
b(can)i(greatly)h(sp)s(eed)e(the)510 2563 y(creation)27
5998
b(of)g(plans,)g(esp)s(ecially)e(with)g(the)j Fp(FFTW_MEASURE)23
5999
b Fv(option.)39 b Fp(FFTW_ESTIMATE)23 b Fv(plans)510
6000
2673 y(can)28 b(also)g(tak)m(e)i(adv)-5 b(an)m(tage)30
6001
b(of)e Fp(wisdom)e Fv(to)j(pro)s(duce)e(a)h(more)g(optimal)f(plan)g
6002
(\(based)h(on)g(past)510 2783 y(measuremen)m(ts\))i(than)g(the)g
5946
6003
(estimation)f(heuristic)f(w)m(ould)g(normally)g(generate.)42
5947
b(When)30 b(the)510 3707 y Fo(FFTW_MEASURE)36 b Fu(option)j(is)f(used,)
5948
j(new)d Fo(wisdom)g Fu(will)f(also)i(b)s(e)f(generated)j(if)d(the)h
5949
(curren)m(t)510 3816 y(transform)30 b(size)g(is)f(not)i(completely)f
5950
(understo)s(o)s(d)f(b)m(y)h(existing)f Fo(wisdom)p Fu(.)225
5951
3955 y Fs(\017)60 b Fo(in)p Fu(,)29 b Fo(out)p Fu(,)f
5952
Fo(istride)p Fu(,)g Fo(ostride)f Fu(\(only)h(for)h Fo
5953
(rfftw_create_plan_specifi)o(c)p Fu(\):)34 b(see)c(corresp)s(ond-)330
5954
4064 y(ing)38 b(argumen)m(ts)i(in)e(the)h(description)e(of)i
5955
Fo(rfftw)p Fu(.)66 b(\(See)40 b(Section)f(3.4.2)i([Computing)d(the)h
5956
(Real)330 4174 y(One-dimensional)23 b(T)-8 b(ransform],)27
5957
b(page)g(27.\))40 b(In)26 b(particular,)f(the)i Fo(out)e
5958
Fu(and)g Fo(ostride)g Fu(parameters)330 4283 y(ha)m(v)m(e)31
5959
b(the)f(same)h(sp)s(ecial)d(meaning)h(for)h Fo(FFTW_IN_PLACE)c
5960
Fu(transforms)j(as)h(they)g(ha)m(v)m(e)h(for)f Fo(rfftw)p
5961
Fu(.)150 4523 y Fi(3.4.2)63 b(Computing)41 b(the)f(Real)h
5962
(One-dimensional)g(T)-10 b(ransform)390 4717 y Fo(#include)46
5963
b(<rfftw.h>)390 4925 y(void)h(rfftw\(rfftw_plan)c(plan,)j(int)h
5964
(howmany,)915 5029 y(fftw_real)e(*in,)i(int)g(istride,)e(int)i(idist,)
5965
915 5132 y(fftw_real)e(*out,)i(int)g(ostride,)e(int)i(odist\);)390
5966
5340 y(void)g(rfftw_one\(rfftw_plan)42 b(plan,)k(fftw_real)g(*in,)g
5967
(fftw_real)f(*out\);)p eop
5969
28 29 bop 150 -116 a Fu(28)3232 b(FFTW)275 299 y(The)23
5970
b(function)h Fo(rfftw)f Fu(computes)h(the)h(Real)f(One-dimensional)e(F)
5971
-8 b(ourier)24 b(T)-8 b(ransform,)25 b(using)d(a)j(plan)150
5972
408 y(created)k(b)m(y)e Fo(rfftw_create_plan)c Fu(\(see)29
6004
b(When)30 b(the)510 2892 y Fp(FFTW_MEASURE)36 b Fv(option)j(is)f(used,)
6005
j(new)d Fp(wisdom)g Fv(will)f(also)i(b)s(e)f(generated)j(if)d(the)h
6006
(curren)m(t)510 3002 y(transform)30 b(size)g(is)f(not)i(completely)f
6007
(understo)s(o)s(d)f(b)m(y)h(existing)f Fp(wisdom)p Fv(.)225
6008
3142 y Ft(\017)60 b Fp(in)p Fv(,)29 b Fp(out)p Fv(,)f
6009
Fp(istride)p Fv(,)g Fp(ostride)f Fv(\(only)h(for)h Fp
6010
(rfftw_create_plan_specifi)o(c)p Fv(\):)34 b(see)c(corresp)s(ond-)330
6011
3251 y(ing)38 b(argumen)m(ts)i(in)e(the)h(description)e(of)i
6012
Fp(rfftw)p Fv(.)66 b(\(See)40 b(Section)f(3.4.2)i([Computing)d(the)h
6013
(Real)330 3361 y(One-dimensional)23 b(T)-8 b(ransform],)27
6014
b(page)g(27.\))40 b(In)26 b(particular,)f(the)i Fp(out)e
6015
Fv(and)g Fp(ostride)g Fv(parameters)330 3470 y(ha)m(v)m(e)31
6016
b(the)f(same)h(sp)s(ecial)d(meaning)h(for)h Fp(FFTW_IN_PLACE)c
6017
Fv(transforms)j(as)h(they)g(ha)m(v)m(e)h(for)f Fp(rfftw)p
6018
Fv(.)150 3717 y Fh(3.4.2)63 b(Computing)41 b(the)f(Real)h
6019
(One-dimensional)g(T)-10 b(ransform)390 3878 y Fp(#include)46
6020
b(<rfftw.h>)390 4086 y(void)h(rfftw\(rfftw_plan)c(plan,)j(int)h
6021
(howmany,)915 4190 y(fftw_real)e(*in,)i(int)g(istride,)e(int)i(idist,)
6022
915 4294 y(fftw_real)e(*out,)i(int)g(ostride,)e(int)i(odist\);)390
6023
4501 y(void)g(rfftw_one\(rfftw_plan)42 b(plan,)k(fftw_real)g(*in,)g
6024
(fftw_real)f(*out\);)275 4647 y Fv(The)23 b(function)h
6025
Fp(rfftw)f Fv(computes)h(the)h(Real)f(One-dimensional)e(F)-8
6026
b(ourier)24 b(T)-8 b(ransform,)25 b(using)d(a)j(plan)150
6027
4756 y(created)k(b)m(y)e Fp(rfftw_create_plan)c Fv(\(see)29
5973
6028
b(Section)f(3.4.1)h([Plan)e(Creation)h(for)f(Real)h(One-dimensional)150
5974
518 y(T)-8 b(ransforms],)47 b(page)f(26\).)84 b(The)44
5975
b(function)f Fo(rfftw_one)f Fu(pro)m(vides)i(a)h(simpli\014ed)40
5976
b(in)m(terface)45 b(for)g(the)150 628 y(common)31 b(case)g(of)g(single)
5977
e(input)f(arra)m(y)j(of)f(stride)g(1.)275 777 y Fq(Imp)-5
5978
b(ortant:)63 b Fu(When)37 b(in)m(v)m(ok)m(ed)h(for)g(an)g
5979
(out-of-place,)i Fo(FFTW_COMPLEX_TO_REAL)33 b Fu(transform,)39
5980
b(the)150 886 y(input)d(arra)m(y)j(is)e(o)m(v)m(erwritten)h(with)f
6029
4866 y(T)-8 b(ransforms],)47 b(page)f(26\).)84 b(The)44
6030
b(function)f Fp(rfftw_one)f Fv(pro)m(vides)i(a)h(simpli\014ed)40
6031
b(in)m(terface)45 b(for)g(the)150 4975 y(common)31 b(case)g(of)g
6032
(single)e(input)f(arra)m(y)j(of)f(stride)g(1.)275 5121
6033
y Fr(Imp)-5 b(ortant:)63 b Fv(When)37 b(in)m(v)m(ok)m(ed)h(for)g(an)g
6034
(out-of-place,)i Fp(FFTW_COMPLEX_TO_REAL)33 b Fv(transform,)39
6035
b(the)150 5230 y(input)d(arra)m(y)j(is)e(o)m(v)m(erwritten)h(with)f
5981
6036
(scratc)m(h)i(v)-5 b(alues)37 b(b)m(y)h(these)h(routines.)62
5982
b(The)38 b(input)e(arra)m(y)j(is)e(not)150 996 y(mo)s(di\014ed)28
5983
b(for)i Fo(FFTW_REAL_TO_COMPLEX)25 b Fu(transforms.)150
5984
1250 y Fi(Argumen)m(ts)225 1457 y Fs(\017)60 b Fo(plan)31
5985
b Fu(is)h(the)g(plan)f(created)i(b)m(y)g Fo(rfftw_create_plan)27
5986
b Fu(\(see)33 b(Section)g(3.4.1)h([Plan)d(Creation)h(for)330
5987
1567 y(Real)e(One-dimensional)e(T)-8 b(ransforms],)30
5988
b(page)h(26\).)225 1709 y Fs(\017)60 b Fo(howmany)30
5989
b Fu(is)h(the)g(n)m(um)m(b)s(er)g(of)h(transforms)f Fo(rfftw)f
5990
Fu(will)f(compute.)45 b(It)32 b(is)f(faster)h(to)g(tell)f(RFFTW)330
5991
1818 y(to)g(compute)g(man)m(y)f(transforms,)g(instead)g(of)g(simply)e
5992
(calling)h Fo(rfftw)g Fu(man)m(y)h(times.)225 1960 y
5993
Fs(\017)60 b Fo(in)p Fu(,)49 b Fo(istride)43 b Fu(and)i
5994
Fo(idist)f Fu(describ)s(e)g(the)i(input)e(arra)m(y\(s\).)87
5995
b(There)45 b(are)h(t)m(w)m(o)h(cases.)87 b(If)45 b(the)330
5996
2070 y Fo(plan)36 b Fu(de\014nes)h(a)h Fo(FFTW_REAL_TO_COMPLEX)32
5997
b Fu(transform,)39 b Fo(in)e Fu(is)g(a)g(real)h(arra)m(y)-8
5998
b(.)63 b(Otherwise,)38 b(for)330 2179 y Fo(FFTW_COMPLEX_TO_REAL)30
5999
b Fu(transforms,)35 b Fo(in)g Fu(is)f(a)h(halfcomplex)f(arra)m(y)i
6000
Fq(whose)i(c)-5 b(ontents)38 b(wil)5 b(l)37 b(b)-5 b(e)330
6001
2289 y(destr)g(oye)g(d)p Fu(.)225 2431 y Fs(\017)60 b
6002
Fo(out)p Fu(,)32 b Fo(ostride)d Fu(and)j Fo(odist)e Fu(describ)s(e)g
6037
b(The)38 b(input)e(arra)m(y)j(is)e(not)150 5340 y(mo)s(di\014ed)28
6038
b(for)i Fp(FFTW_REAL_TO_COMPLEX)25 b Fv(transforms.)p
6041
TeXDict begin 28 29 bop 150 -116 a Fv(28)3232 b(FFTW)150
6042
299 y Fh(Argumen)m(ts)225 467 y Ft(\017)60 b Fp(plan)31
6043
b Fv(is)h(the)g(plan)f(created)i(b)m(y)g Fp(rfftw_create_plan)27
6044
b Fv(\(see)33 b(Section)g(3.4.1)h([Plan)d(Creation)h(for)330
6045
576 y(Real)e(One-dimensional)e(T)-8 b(ransforms],)30
6046
b(page)h(26\).)225 713 y Ft(\017)60 b Fp(howmany)30 b
6047
Fv(is)h(the)g(n)m(um)m(b)s(er)g(of)h(transforms)f Fp(rfftw)f
6048
Fv(will)f(compute.)45 b(It)32 b(is)f(faster)h(to)g(tell)f(RFFTW)330
6049
822 y(to)g(compute)g(man)m(y)f(transforms,)g(instead)g(of)g(simply)e
6050
(calling)h Fp(rfftw)g Fv(man)m(y)h(times.)225 959 y Ft(\017)60
6051
b Fp(in)p Fv(,)49 b Fp(istride)43 b Fv(and)i Fp(idist)f
6052
Fv(describ)s(e)g(the)i(input)e(arra)m(y\(s\).)87 b(There)45
6053
b(are)h(t)m(w)m(o)h(cases.)87 b(If)45 b(the)330 1069
6054
y Fp(plan)36 b Fv(de\014nes)h(a)h Fp(FFTW_REAL_TO_COMPLEX)32
6055
b Fv(transform,)39 b Fp(in)e Fv(is)g(a)g(real)h(arra)m(y)-8
6056
b(.)63 b(Otherwise,)38 b(for)330 1178 y Fp(FFTW_COMPLEX_TO_REAL)30
6057
b Fv(transforms,)35 b Fp(in)g Fv(is)f(a)h(halfcomplex)f(arra)m(y)i
6058
Fr(whose)i(c)-5 b(ontents)38 b(wil)5 b(l)37 b(b)-5 b(e)330
6059
1288 y(destr)g(oye)g(d)p Fv(.)225 1424 y Ft(\017)60 b
6060
Fp(out)p Fv(,)32 b Fp(ostride)d Fv(and)j Fp(odist)e Fv(describ)s(e)g
6003
6061
(the)i(output)g(arra)m(y\(s\),)h(and)e(ha)m(v)m(e)i(the)f(same)h
6004
(meaning)e(as)330 2540 y(the)g(corresp)s(onding)d(parameters)j(for)f
6005
(the)g(input)f(arra)m(y)-8 b(.)379 2682 y Fs(\000)60
6006
b Fq(In-plac)-5 b(e)46 b(tr)-5 b(ansforms)7 b Fu(:)73
6007
b(If)44 b(the)h Fo(plan)e Fu(sp)s(eci\014es)g(an)i(in-place)e
6008
(transform,)48 b Fo(ostride)43 b Fu(and)510 2792 y Fo(odist)33
6009
b Fu(are)h(alw)m(a)m(ys)h(ignored.)51 b(If)33 b Fo(out)g
6010
Fu(is)h Fo(NULL)p Fu(,)g Fo(out)f Fu(is)g(ignored,)h(to)s(o.)53
6011
b(Otherwise,)34 b Fo(out)f Fu(is)510 2901 y(in)m(terpreted)h(as)h(a)g
6012
(p)s(oin)m(ter)f(to)i(an)e(arra)m(y)i(of)f Fo(n)f Fu(complex)h(n)m(um)m
6013
(b)s(ers,)f(that)i(FFTW)f(will)d(use)510 3011 y(as)j(temp)s(orary)f
6062
(meaning)e(as)330 1534 y(the)g(corresp)s(onding)d(parameters)j(for)f
6063
(the)g(input)f(arra)m(y)-8 b(.)379 1671 y Ft(\000)60
6064
b Fr(In-plac)-5 b(e)46 b(tr)-5 b(ansforms)7 b Fv(:)73
6065
b(If)44 b(the)h Fp(plan)e Fv(sp)s(eci\014es)g(an)i(in-place)e
6066
(transform,)48 b Fp(ostride)43 b Fv(and)510 1780 y Fp(odist)33
6067
b Fv(are)h(alw)m(a)m(ys)h(ignored.)51 b(If)33 b Fp(out)g
6068
Fv(is)h Fp(NULL)p Fv(,)g Fp(out)f Fv(is)g(ignored,)h(to)s(o.)53
6069
b(Otherwise,)34 b Fp(out)f Fv(is)510 1890 y(in)m(terpreted)h(as)h(a)g
6070
(p)s(oin)m(ter)f(to)i(an)e(arra)m(y)i(of)f Fp(n)f Fv(complex)h(n)m(um)m
6071
(b)s(ers,)f(that)i(FFTW)f(will)d(use)510 2000 y(as)j(temp)s(orary)f
6014
6072
(space)h(to)h(p)s(erform)d(the)i(in-place)e(computation.)54
6015
b Fo(out)34 b Fu(is)f(used)h(as)h(scratc)m(h)510 3120
6073
b Fp(out)34 b Fv(is)f(used)h(as)h(scratc)m(h)510 2109
6016
6074
y(space)41 b(and)g(its)f(con)m(ten)m(ts)j(destro)m(y)m(ed.)73
6017
b(In)40 b(this)g(case,)k Fo(out)c Fu(m)m(ust)h(b)s(e)f(an)h(ordinary)e
6018
(arra)m(y)510 3230 y(whose)30 b(elemen)m(ts)h(are)g(con)m(tiguous)f(in)
6019
f(memory)i(\(no)f(striding\).)275 3412 y(The)40 b(function)g
6020
Fo(rfftw_one)f Fu(transforms)i(a)g(single,)i(con)m(tiguous)f(input)d
6021
(arra)m(y)j(to)g(a)g(con)m(tiguous)150 3521 y(output)30
6075
b(In)40 b(this)g(case,)k Fp(out)c Fv(m)m(ust)h(b)s(e)f(an)h(ordinary)e
6076
(arra)m(y)510 2219 y(whose)30 b(elemen)m(ts)h(are)g(con)m(tiguous)f(in)
6077
f(memory)i(\(no)f(striding\).)275 2385 y(The)40 b(function)g
6078
Fp(rfftw_one)f Fv(transforms)i(a)g(single,)i(con)m(tiguous)f(input)d
6079
(arra)m(y)j(to)g(a)g(con)m(tiguous)150 2494 y(output)30
6022
6080
b(arra)m(y)-8 b(.)42 b(By)30 b(de\014nition,)f(the)h(call)390
6023
3665 y Fo(rfftw_one\(plan,)44 b(in,)j(out\))275 3814
6024
y Fu(is)29 b(equiv)-5 b(alen)m(t)30 b(to)390 3957 y Fo(rfftw\(plan,)45
6025
b(1,)i(in,)g(1,)g(1,)g(out,)g(1,)g(1\))150 4211 y Fi(3.4.3)63
6081
2627 y Fp(rfftw_one\(plan,)44 b(in,)j(out\))275 2766
6082
y Fv(is)29 b(equiv)-5 b(alen)m(t)30 b(to)390 2899 y Fp(rfftw\(plan,)45
6083
b(1,)i(in,)g(1,)g(0,)g(out,)g(1,)g(0\))150 3132 y Fh(3.4.3)63
6026
6084
b(Destro)m(ying)41 b(a)g(Real)f(One-dimensional)i(Plan)390
6027
4413 y Fo(#include)k(<rfftw.h>)390 4620 y(void)h
6085
3294 y Fp(#include)k(<rfftw.h>)390 3501 y(void)h
6028
6086
(rfftw_destroy_plan\(rfft)o(w_pl)o(an)41 b(plan\);)275
6029
4769 y Fu(The)h(function)g Fo(rfftw_destroy_plan)d Fu(frees)k(the)h
6030
(plan)e Fo(plan)g Fu(and)h(releases)g(all)f(the)i(memory)150
6031
4879 y(asso)s(ciated)31 b(with)e(it.)40 b(After)31 b(destruction,)f(a)g
6032
(plan)f(is)h(no)g(longer)g(v)-5 b(alid.)150 5133 y Fi(3.4.4)63
6033
b(What)40 b(RFFTW)h(Really)f(Computes)275 5340 y Fu(In)29
6087
3640 y Fv(The)h(function)g Fp(rfftw_destroy_plan)d Fv(frees)k(the)h
6088
(plan)e Fp(plan)g Fv(and)h(releases)g(all)f(the)i(memory)150
6089
3750 y(asso)s(ciated)31 b(with)e(it.)40 b(After)31 b(destruction,)f(a)g
6090
(plan)f(is)h(no)g(longer)g(v)-5 b(alid.)150 3982 y Fh(3.4.4)63
6091
b(What)40 b(RFFTW)h(Really)f(Computes)275 4179 y Fv(In)29
6034
6092
b(this)g(section,)i(w)m(e)g(de\014ne)f(precisely)f(what)h(RFFTW)h
6093
(computes.)275 4318 y(The)40 b(real)g(to)h(complex)g(\()p
6094
Fp(FFTW_REAL_TO_COMPLEX)p Fv(\))36 b(transform)k(of)g(a)i(real)e(arra)m
6095
(y)h Fm(X)48 b Fv(of)41 b(size)f Fm(n)150 4428 y Fv(computes)31
6096
b(an)f(hermitian)e(arra)m(y)j Fm(Y)20 b Fv(,)31 b(where)1503
6097
4712 y Fm(Y)1556 4726 y Fl(i)1608 4712 y Fv(=)1704 4606
6098
y Fl(n)p Fk(\000)p Fo(1)1707 4631 y Fg(X)1710 4808 y
6099
Fl(j)s Fo(=0)1846 4712 y Fm(X)1921 4726 y Fl(j)1956 4712
6100
y Fm(e)1998 4675 y Fk(\000)p Fo(2)p Fl(\031)r(ij)2177
6101
4630 y Fk(p)p 2233 4630 85 3 v 2233 4675 a(\000)p Fo(1)p
6102
Fl(=n)150 5011 y Fv(\(That)26 b Fm(Y)45 b Fv(is)24 b(a)i(hermitian)d
6103
(arra)m(y)j(is)e(not)h(in)m(tended)g(to)h(b)s(e)e(ob)m(vious,)i
6104
(although)f(the)g(pro)s(of)g(is)f(easy)-8 b(.\))40 b(The)150
6105
5121 y(hermitian)32 b(arra)m(y)i Fm(Y)54 b Fv(is)32 b(stored)i(in)f
6106
(halfcomplex)f(order)h(\(see)i(Section)e(3.1)i([Data)h(T)m(yp)s(es],)e
6107
(page)g(17\).)150 5230 y(Curren)m(tly)-8 b(,)24 b(RFFTW)h(pro)m(vides)f
6108
(no)g(w)m(a)m(y)h(to)g(compute)g(a)g(real)f(to)h(complex)f(transform)f
6109
(with)g(a)i(p)s(ositiv)m(e)150 5340 y(sign)k(in)g(the)i(exp)s(onen)m
6037
29 30 bop 150 -116 a Fu(Chapter)30 b(3:)41 b(FFTW)31
6038
b(Reference)2354 b(29)275 299 y(The)40 b(real)g(to)h(complex)g(\()p
6039
Fo(FFTW_REAL_TO_COMPLEX)p Fu(\))36 b(transform)k(of)g(a)i(real)e(arra)m
6040
(y)h Fl(X)48 b Fu(of)41 b(size)f Fl(n)150 408 y Fu(computes)31
6041
b(an)f(hermitian)e(arra)m(y)j Fl(Y)20 b Fu(,)31 b(where)1503
6042
692 y Fl(Y)1556 706 y Fk(i)1608 692 y Fu(=)1704 586 y
6043
Fk(n)p Fj(\000)p Fn(1)1707 611 y Fh(X)1710 788 y Fk(j)s
6044
Fn(=0)1846 692 y Fl(X)1921 706 y Fk(j)1956 692 y Fl(e)1998
6045
654 y Fj(\000)p Fn(2)p Fk(\031)r(ij)2177 609 y Fj(p)p
6046
2233 609 85 3 v 2233 654 a(\000)p Fn(1)p Fk(=n)150 990
6047
y Fu(\(That)26 b Fl(Y)45 b Fu(is)24 b(a)i(hermitian)d(arra)m(y)j(is)e
6048
(not)h(in)m(tended)g(to)h(b)s(e)e(ob)m(vious,)i(although)f(the)g(pro)s
6049
(of)g(is)f(easy)-8 b(.\))40 b(The)150 1100 y(hermitian)32
6050
b(arra)m(y)i Fl(Y)54 b Fu(is)32 b(stored)i(in)f(halfcomplex)f(order)h
6051
(\(see)i(Section)e(3.1)i([Data)h(T)m(yp)s(es],)e(page)g(17\).)150
6052
1209 y(Curren)m(tly)-8 b(,)24 b(RFFTW)h(pro)m(vides)f(no)g(w)m(a)m(y)h
6053
(to)g(compute)g(a)g(real)f(to)h(complex)f(transform)f(with)g(a)i(p)s
6054
(ositiv)m(e)150 1319 y(sign)k(in)g(the)i(exp)s(onen)m(t.)275
6055
1457 y(The)d(complex)g(to)i(real)e(\()p Fo(FFTW_COMPLEX_TO_REAL)p
6056
Fu(\))c(transform)29 b(of)g(a)g(hermitian)e(arra)m(y)i
6057
Fl(X)36 b Fu(of)29 b(size)150 1567 y Fl(n)h Fu(computes)g(a)h(real)f
6058
(arra)m(y)h Fl(Y)20 b Fu(,)31 b(where)1529 1850 y Fl(Y)1582
6059
1864 y Fk(i)1634 1850 y Fu(=)1730 1745 y Fk(n)p Fj(\000)p
6060
Fn(1)1733 1769 y Fh(X)1736 1946 y Fk(j)s Fn(=0)1872 1850
6061
y Fl(X)1947 1864 y Fk(j)1982 1850 y Fl(e)2024 1813 y
6062
Fn(2)p Fk(\031)r(ij)2151 1768 y Fj(p)p 2207 1768 V 2207
6063
1813 a(\000)p Fn(1)p Fk(=n)150 2148 y Fu(\(That)39 b
6064
Fl(Y)58 b Fu(is)37 b(a)i(real)f(arra)m(y)h(is)f(not)g(in)m(tended)g(to)
6065
h(b)s(e)f(ob)m(vious,)i(although)d(the)i(pro)s(of)f(is)f(easy)-8
6066
b(.\))66 b(The)150 2258 y(hermitian)43 b(input)g(arra)m(y)i
6067
Fl(X)53 b Fu(is)44 b(stored)h(in)e(halfcomplex)h(order)h(\(see)g
6068
(Section)g(3.1)h([Data)h(T)m(yp)s(es],)150 2368 y(page)40
6069
b(17\).)68 b(Curren)m(tly)-8 b(,)40 b(RFFTW)f(pro)m(vides)f(no)h(w)m(a)
6070
m(y)h(to)g(compute)f(a)h(complex)e(to)i(real)f(transform)150
6071
2477 y(with)29 b(a)i(negativ)m(e)g(sign)f(in)f(the)h(exp)s(onen)m(t.)
6072
275 2615 y(Lik)m(e)j(FFTW,)i(RFFTW)f(computes)g(an)g(unnormalized)d
6073
(transform.)50 b(In)33 b(other)h(w)m(ords,)g(applying)150
6074
2725 y(the)44 b(real)f(to)i(complex)e(\(forw)m(ard\))h(and)f(then)h
6075
(the)f(complex)h(to)g(real)g(\(bac)m(kw)m(ard\))h(transform)e(will)150
6076
2835 y(m)m(ultiply)28 b(the)i(input)f(b)m(y)h Fl(n)p
6077
Fu(.)150 3101 y Ft(3.5)68 b(Real)46 b(Multi-dimensional)h(T)-11
6078
b(ransforms)44 b(Reference)275 3298 y Fu(The)39 b(m)m(ulti-dimensional)
6079
c(real)40 b(routines)e(are)i(generally)f(pre\014xed)f(with)h
6080
Fo(rfftwnd_)p Fu(.)66 b(Programs)150 3407 y(using)25
6081
b(RFFTWND)i(should)e(b)s(e)g(link)m(ed)g(with)g Fo(-lrfftw)j(-lfftw)h
6082
(-lm)d Fu(on)g(Unix)f(systems,)i(or)g(with)e(the)150
6083
3517 y(FFTW,)31 b(RFFTW,)h(and)d(standard)h(math)g(libraries)e(in)h
6084
(general.)150 3748 y Fi(3.5.1)63 b(Plan)40 b(Creation)h(for)g(Real)f
6085
(Multi-dimensional)i(T)-10 b(ransforms)390 3939 y Fo(#include)46
6086
b(<rfftw.h>)390 4147 y(rfftwnd_plan)e(rfftwnd_create_plan\(int)e(rank,)
6087
k(const)h(int)g(*n,)1965 4250 y(fftw_direction)d(dir,)j(int)f(flags\);)
6088
390 4458 y(rfftwnd_plan)e(rfftw2d_create_plan\(int)e(nx,)47
6089
b(int)g(ny,)1965 4562 y(fftw_direction)d(dir,)j(int)f(flags\);)390
6090
4769 y(rfftwnd_plan)e(rfftw3d_create_plan\(int)e(nx,)47
6091
b(int)g(ny,)g(int)g(nz,)1965 4873 y(fftw_direction)d(dir,)j(int)f
6092
(flags\);)275 5011 y Fu(The)25 b(function)g Fo(rfftwnd_create_plan)20
6093
b Fu(creates)28 b(a)e(plan,)g(whic)m(h)f(is)g(a)h(data)h(structure)e
6094
(con)m(taining)150 5121 y(all)e(the)h(information)e(that)i
6095
Fo(rfftwnd)e Fu(needs)h(in)f(order)i(to)g(compute)g(a)g(m)m
6096
(ulti-dimensional)c(real)j(F)-8 b(ourier)150 5230 y(transform.)42
6112
TeXDict begin 29 30 bop 150 -116 a Fv(Chapter)30 b(3:)41
6113
b(FFTW)31 b(Reference)2354 b(29)275 299 y(The)28 b(complex)g(to)i(real)
6114
e(\()p Fp(FFTW_COMPLEX_TO_REAL)p Fv(\))c(transform)29
6115
b(of)g(a)g(hermitian)e(arra)m(y)i Fm(X)36 b Fv(of)29
6116
b(size)150 408 y Fm(n)h Fv(computes)g(a)h(real)f(arra)m(y)h
6117
Fm(Y)20 b Fv(,)31 b(where)1529 688 y Fm(Y)1582 702 y
6118
Fl(i)1634 688 y Fv(=)1730 583 y Fl(n)p Fk(\000)p Fo(1)1733
6119
607 y Fg(X)1736 784 y Fl(j)s Fo(=0)1872 688 y Fm(X)1947
6120
702 y Fl(j)1982 688 y Fm(e)2024 651 y Fo(2)p Fl(\031)r(ij)2151
6121
606 y Fk(p)p 2207 606 85 3 v 2207 651 a(\000)p Fo(1)p
6122
Fl(=n)150 983 y Fv(\(That)39 b Fm(Y)58 b Fv(is)37 b(a)i(real)f(arra)m
6123
(y)h(is)f(not)g(in)m(tended)g(to)h(b)s(e)f(ob)m(vious,)i(although)d
6124
(the)i(pro)s(of)f(is)f(easy)-8 b(.\))66 b(The)150 1092
6125
y(hermitian)43 b(input)g(arra)m(y)i Fm(X)53 b Fv(is)44
6126
b(stored)h(in)e(halfcomplex)h(order)h(\(see)g(Section)g(3.1)h([Data)h
6127
(T)m(yp)s(es],)150 1202 y(page)40 b(17\).)68 b(Curren)m(tly)-8
6128
b(,)40 b(RFFTW)f(pro)m(vides)f(no)h(w)m(a)m(y)h(to)g(compute)f(a)h
6129
(complex)e(to)i(real)f(transform)150 1311 y(with)29 b(a)i(negativ)m(e)g
6130
(sign)f(in)f(the)h(exp)s(onen)m(t.)275 1447 y(Lik)m(e)j(FFTW,)i(RFFTW)f
6131
(computes)g(an)g(unnormalized)d(transform.)50 b(In)33
6132
b(other)h(w)m(ords,)g(applying)150 1557 y(the)44 b(real)f(to)i(complex)
6133
e(\(forw)m(ard\))h(and)f(then)h(the)f(complex)h(to)g(real)g(\(bac)m(kw)
6134
m(ard\))h(transform)e(will)150 1666 y(m)m(ultiply)28
6135
b(the)i(input)f(b)m(y)h Fm(n)p Fv(.)150 1927 y Fu(3.5)68
6136
b(Real)46 b(Multi-dimensional)h(T)-11 b(ransforms)44
6137
b(Reference)275 2121 y Fv(The)39 b(m)m(ulti-dimensional)c(real)40
6138
b(routines)e(are)i(generally)f(pre\014xed)f(with)h Fp(rfftwnd_)p
6139
Fv(.)66 b(Programs)150 2230 y(using)25 b(RFFTWND)i(should)e(b)s(e)g
6140
(link)m(ed)g(with)g Fp(-lrfftw)j(-lfftw)h(-lm)d Fv(on)g(Unix)f
6141
(systems,)i(or)g(with)e(the)150 2340 y(FFTW,)31 b(RFFTW,)h(and)d
6142
(standard)h(math)g(libraries)e(in)h(general.)150 2566
6143
y Fh(3.5.1)63 b(Plan)40 b(Creation)h(for)g(Real)f(Multi-dimensional)i
6144
(T)-10 b(ransforms)390 2728 y Fp(#include)46 b(<rfftw.h>)390
6145
2936 y(rfftwnd_plan)e(rfftwnd_create_plan\(int)e(rank,)k(const)h(int)g
6146
(*n,)1965 3040 y(fftw_direction)d(dir,)j(int)f(flags\);)390
6147
3247 y(rfftwnd_plan)e(rfftw2d_create_plan\(int)e(nx,)47
6148
b(int)g(ny,)1965 3351 y(fftw_direction)d(dir,)j(int)f(flags\);)390
6149
3559 y(rfftwnd_plan)e(rfftw3d_create_plan\(int)e(nx,)47
6150
b(int)g(ny,)g(int)g(nz,)1965 3662 y(fftw_direction)d(dir,)j(int)f
6151
(flags\);)275 3798 y Fv(The)25 b(function)g Fp(rfftwnd_create_plan)20
6152
b Fv(creates)28 b(a)e(plan,)g(whic)m(h)f(is)g(a)h(data)h(structure)e
6153
(con)m(taining)150 3908 y(all)e(the)h(information)e(that)i
6154
Fp(rfftwnd)e Fv(needs)h(in)f(order)i(to)g(compute)g(a)g(m)m
6155
(ulti-dimensional)c(real)j(F)-8 b(ourier)150 4017 y(transform.)42
6097
6156
b(Y)-8 b(ou)32 b(can)f(create)i(as)e(man)m(y)g(plans)f(as)h(y)m(ou)g
6098
6157
(need,)h(but)e(only)g(one)h(plan)f(for)h(a)g(giv)m(en)g(arra)m(y)150
6099
5340 y(size)j(is)e(required)g(\(a)i(plan)f(can)h(b)s(e)f(reused)g(man)m
6100
(y)g(times\).)51 b(The)33 b(functions)f Fo(rfftw2d_create_plan)p
6158
4127 y(size)j(is)e(required)g(\(a)i(plan)f(can)h(b)s(e)f(reused)g(man)m
6159
(y)g(times\).)51 b(The)33 b(functions)f Fp(rfftw2d_create_plan)150
6160
4236 y Fv(and)41 b Fp(rfftw3d_create_plan)35 b Fv(are)42
6161
b(optional,)h(alternativ)m(e)f(in)m(terfaces)f(to)h Fp
6162
(rfftwnd_create_plan)150 4346 y Fv(for)30 b(t)m(w)m(o)i(and)e(three)g
6163
(dimensions,)e(resp)s(ectiv)m(ely)-8 b(.)275 4482 y Fp
6164
(rfftwnd_create_plan)27 b Fv(returns)k(a)i(v)-5 b(alid)31
6165
b(plan,)h(or)g Fp(NULL)f Fv(if,)i(for)f(some)h(reason,)g(the)g(plan)e
6166
(can't)150 4591 y(b)s(e)f(created.)42 b(This)28 b(can)j(happ)s(en)d(if)
6167
i(the)g(argumen)m(ts)h(are)g(in)m(v)-5 b(alid)28 b(in)h(some)i(w)m(a)m
6168
(y)g(\(e.g.)42 b(if)29 b Fp(rank)h(<)g Fv(0\).)150 4818
6169
y Fh(Argumen)m(ts)225 4986 y Ft(\017)60 b Fp(rank)27
6170
b Fv(is)g(the)h(dimensionalit)m(y)d(of)j(the)g(arra)m(ys)g(to)g(b)s(e)f
6171
(transformed.)40 b(It)27 b(can)i(b)s(e)e(an)m(y)h(non-negativ)m(e)330
6172
5095 y(in)m(teger.)225 5230 y Ft(\017)60 b Fp(n)22 b
6173
Fv(is)g(a)g(p)s(oin)m(ter)g(to)h(an)f(arra)m(y)h(of)g
6174
Fp(rank)e Fv(in)m(tegers,)k(giving)c(the)i(size)f(of)h(eac)m(h)g
6175
(dimension)d(of)j(the)g(arra)m(ys)330 5340 y(to)35 b(b)s(e)e
6176
(transformed.)51 b(Note)36 b(that)e(these)h(are)f(alw)m(a)m(ys)h(the)f
6177
(dimensions)e(of)i(the)g Fr(r)-5 b(e)g(al)45 b Fv(arra)m(ys;)37
6103
30 31 bop 150 -116 a Fu(30)3232 b(FFTW)150 299 y(and)41
6104
b Fo(rfftw3d_create_plan)35 b Fu(are)42 b(optional,)h(alternativ)m(e)f
6105
(in)m(terfaces)f(to)h Fo(rfftwnd_create_plan)150 408
6106
y Fu(for)30 b(t)m(w)m(o)i(and)e(three)g(dimensions,)e(resp)s(ectiv)m
6107
(ely)-8 b(.)275 546 y Fo(rfftwnd_create_plan)27 b Fu(returns)k(a)i(v)-5
6108
b(alid)31 b(plan,)h(or)g Fo(NULL)f Fu(if,)i(for)f(some)h(reason,)g(the)
6109
g(plan)e(can't)150 655 y(b)s(e)f(created.)42 b(This)28
6110
b(can)j(happ)s(en)d(if)i(the)g(argumen)m(ts)h(are)g(in)m(v)-5
6111
b(alid)28 b(in)h(some)i(w)m(a)m(y)g(\(e.g.)42 b(if)29
6112
b Fo(rank)h(<)g Fu(0\).)150 885 y Fi(Argumen)m(ts)225
6113
1080 y Fs(\017)60 b Fo(rank)27 b Fu(is)g(the)h(dimensionalit)m(y)d(of)j
6114
(the)g(arra)m(ys)g(to)g(b)s(e)f(transformed.)40 b(It)27
6115
b(can)i(b)s(e)e(an)m(y)h(non-negativ)m(e)330 1190 y(in)m(teger.)225
6116
1325 y Fs(\017)60 b Fo(n)22 b Fu(is)g(a)g(p)s(oin)m(ter)g(to)h(an)f
6117
(arra)m(y)h(of)g Fo(rank)e Fu(in)m(tegers,)k(giving)c(the)i(size)f(of)h
6118
(eac)m(h)g(dimension)d(of)j(the)g(arra)m(ys)330 1435
6119
y(to)35 b(b)s(e)e(transformed.)51 b(Note)36 b(that)e(these)h(are)f(alw)
6120
m(a)m(ys)h(the)f(dimensions)e(of)i(the)g Fq(r)-5 b(e)g(al)45
6121
b Fu(arra)m(ys;)37 b(the)330 1545 y(complex)26 b(arra)m(ys)g(ha)m(v)m
6122
(e)h(di\013eren)m(t)e(dimensions)f(\(see)i(Section)g(3.5.3)i([Arra)m(y)
6123
e(Dimensions)e(for)i(Real)330 1654 y(Multi-dimensional)d(T)-8
6124
b(ransforms],)26 b(page)h(32\).)41 b(These)26 b(sizes,)i(whic)m(h)d(m)m
6125
(ust)h(b)s(e)g(p)s(ositiv)m(e)f(in)m(tegers,)330 1764
6126
y(corresp)s(ond)20 b(to)i(the)g(dimensions)c(of)k(ro)m(w-ma)5
6127
b(jor)22 b(arra)m(ys|i.e.)37 b Fo(n[0])21 b Fu(is)f(the)h(size)h(of)f
6128
(the)h(dimension)330 1873 y(whose)32 b(indices)d(v)-5
6129
b(ary)32 b(most)g(slo)m(wly)-8 b(,)32 b(and)f(so)h(on.)45
6130
b(\(See)32 b(Section)g(2.5)h([Multi-dimensional)28 b(Arra)m(y)330
6131
1983 y(F)-8 b(ormat],)32 b(page)f(11,)h(for)e(more)g(information.\))379
6132
2119 y Fs(\000)60 b Fu(See)34 b(Section)g(3.4.1)h([Plan)e(Creation)h
6133
(for)f(Real)h(One-dimensional)d(T)-8 b(ransforms],)34
6134
b(page)h(26,)510 2228 y(for)30 b(more)h(information)d(regarding)i
6135
(optimal)f(arra)m(y)i(sizes.)225 2364 y Fs(\017)60 b
6136
Fo(nx)30 b Fu(and)h Fo(ny)f Fu(in)g Fo(rfftw2d_create_plan)25
6137
b Fu(are)32 b(p)s(ositiv)m(e)d(in)m(tegers)j(sp)s(ecifying)c(the)k
6138
(dimensions)c(of)330 2474 y(the)34 b(rank)f(2)h(arra)m(y)g(to)h(b)s(e)e
6139
(transformed.)50 b(i.e.)h(they)34 b(sp)s(ecify)e(that)i(the)g
6140
(transform)f(will)e(op)s(erate)330 2583 y(on)k Fo(nx)30
6141
b(x)g(ny)35 b Fu(arra)m(ys)g(in)f(ro)m(w-ma)5 b(jor)36
6142
b(order,)g(where)f Fo(nx)g Fu(is)f(the)h(n)m(um)m(b)s(er)f(of)i(ro)m
6143
(ws)f(and)g Fo(ny)f Fu(is)h(the)330 2693 y(n)m(um)m(b)s(er)29
6144
b(of)i(columns.)225 2829 y Fs(\017)60 b Fo(nx)p Fu(,)27
6145
b Fo(ny)f Fu(and)g Fo(nz)g Fu(in)f Fo(rfftw3d_create_plan)c
6146
Fu(are)27 b(p)s(ositiv)m(e)f(in)m(tegers)h(sp)s(ecifying)d(the)j
6147
(dimensions)330 2938 y(of)g(the)h(rank)e(3)i(arra)m(y)g(to)g(b)s(e)e
6148
(transformed.)39 b(i.e.)h(they)27 b(sp)s(ecify)f(that)i(the)f
6149
(transform)g(will)d(op)s(erate)330 3048 y(on)30 b Fo(nx)g(x)g(ny)g(x)g
6150
(nz)g Fu(arra)m(ys)g(in)f(ro)m(w-ma)5 b(jor)31 b(order.)225
6151
3184 y Fs(\017)60 b Fo(dir)31 b Fu(is)g(the)g(direction)g(of)h(the)g
6152
(desired)e(transform,)h(either)h Fo(FFTW_REAL_TO_COMPLEX)26
6153
b Fu(or)31 b Fo(FFTW_)330 3293 y(COMPLEX_TO_REAL)p Fu(,)26
6154
b(corresp)s(onding)j(to)i Fo(FFTW_FORWARD)c Fu(or)j Fo(FFTW_BACKWARD)p
6155
Fu(,)d(resp)s(ectiv)m(ely)-8 b(.)225 3429 y Fs(\017)60
6156
b Fo(flags)29 b Fu(is)g(a)i(b)s(o)s(olean)e(OR)h(\(`)p
6157
Fo(|)p Fu('\))i(of)e(zero)h(or)g(more)f(of)h(the)f(follo)m(wing:)379
6158
3565 y Fs(\000)60 b Fo(FFTW_MEASURE)p Fu(:)33 b(this)19
6159
b(\015ag)j(tells)e(FFTW)h(to)h(\014nd)d(the)i(optimal)f(plan)g(b)m(y)g
6160
(actually)h Fq(c)-5 b(omputing)510 3675 y Fu(sev)m(eral)31
6180
TeXDict begin 30 31 bop 150 -116 a Fv(30)3232 b(FFTW)330
6181
299 y(complex)26 b(arra)m(ys)g(ha)m(v)m(e)h(di\013eren)m(t)e
6182
(dimensions)f(\(see)i(Section)g(3.5.3)i([Arra)m(y)e(Dimensions)e(for)i
6183
(Real)330 408 y(Multi-dimensional)d(T)-8 b(ransforms],)26
6184
b(page)h(32\).)41 b(These)26 b(sizes,)i(whic)m(h)d(m)m(ust)h(b)s(e)g(p)
6185
s(ositiv)m(e)f(in)m(tegers,)330 518 y(corresp)s(ond)20
6186
b(to)i(the)g(dimensions)c(of)k(ro)m(w-ma)5 b(jor)22 b(arra)m(ys|i.e.)37
6187
b Fp(n[0])21 b Fv(is)f(the)h(size)h(of)f(the)h(dimension)330
6188
628 y(whose)32 b(indices)d(v)-5 b(ary)32 b(most)g(slo)m(wly)-8
6189
b(,)32 b(and)f(so)h(on.)45 b(\(See)32 b(Section)g(2.5)h
6190
([Multi-dimensional)28 b(Arra)m(y)330 737 y(F)-8 b(ormat],)32
6191
b(page)f(11,)h(for)e(more)g(information.\))379 872 y
6192
Ft(\000)60 b Fv(See)34 b(Section)g(3.4.1)h([Plan)e(Creation)h(for)f
6193
(Real)h(One-dimensional)d(T)-8 b(ransforms],)34 b(page)h(26,)510
6194
982 y(for)30 b(more)h(information)d(regarding)i(optimal)f(arra)m(y)i
6195
(sizes.)225 1116 y Ft(\017)60 b Fp(nx)30 b Fv(and)h Fp(ny)f
6196
Fv(in)g Fp(rfftw2d_create_plan)25 b Fv(are)32 b(p)s(ositiv)m(e)d(in)m
6197
(tegers)j(sp)s(ecifying)c(the)k(dimensions)c(of)330 1226
6198
y(the)34 b(rank)f(2)h(arra)m(y)g(to)h(b)s(e)e(transformed.)50
6199
b(i.e.)h(they)34 b(sp)s(ecify)e(that)i(the)g(transform)f(will)e(op)s
6200
(erate)330 1335 y(on)k Fp(nx)30 b(x)g(ny)35 b Fv(arra)m(ys)g(in)f(ro)m
6201
(w-ma)5 b(jor)36 b(order,)g(where)f Fp(nx)g Fv(is)f(the)h(n)m(um)m(b)s
6202
(er)f(of)i(ro)m(ws)f(and)g Fp(ny)f Fv(is)h(the)330 1445
6203
y(n)m(um)m(b)s(er)29 b(of)i(columns.)225 1580 y Ft(\017)60
6204
b Fp(nx)p Fv(,)27 b Fp(ny)f Fv(and)g Fp(nz)g Fv(in)f
6205
Fp(rfftw3d_create_plan)c Fv(are)27 b(p)s(ositiv)m(e)f(in)m(tegers)h(sp)
6206
s(ecifying)d(the)j(dimensions)330 1689 y(of)g(the)h(rank)e(3)i(arra)m
6207
(y)g(to)g(b)s(e)e(transformed.)39 b(i.e.)h(they)27 b(sp)s(ecify)f(that)
6208
i(the)f(transform)g(will)d(op)s(erate)330 1799 y(on)30
6209
b Fp(nx)g(x)g(ny)g(x)g(nz)g Fv(arra)m(ys)g(in)f(ro)m(w-ma)5
6210
b(jor)31 b(order.)225 1934 y Ft(\017)60 b Fp(dir)31 b
6211
Fv(is)g(the)g(direction)g(of)h(the)g(desired)e(transform,)h(either)h
6212
Fp(FFTW_REAL_TO_COMPLEX)26 b Fv(or)31 b Fp(FFTW_)330
6213
2043 y(COMPLEX_TO_REAL)p Fv(,)26 b(corresp)s(onding)j(to)i
6214
Fp(FFTW_FORWARD)c Fv(or)j Fp(FFTW_BACKWARD)p Fv(,)d(resp)s(ectiv)m(ely)
6215
-8 b(.)225 2178 y Ft(\017)60 b Fp(flags)29 b Fv(is)g(a)i(b)s(o)s(olean)
6216
e(OR)h(\(`)p Fp(|)p Fv('\))i(of)e(zero)h(or)g(more)f(of)h(the)f(follo)m
6217
(wing:)379 2313 y Ft(\000)60 b Fp(FFTW_MEASURE)p Fv(:)33
6218
b(this)19 b(\015ag)j(tells)e(FFTW)h(to)h(\014nd)d(the)i(optimal)f(plan)
6219
g(b)m(y)g(actually)h Fr(c)-5 b(omputing)510 2422 y Fv(sev)m(eral)31
6161
6220
b(FFTs)f(and)g(measuring)f(their)h(execution)g(time.)379
6162
3810 y Fs(\000)60 b Fo(FFTW_ESTIMATE)p Fu(:)34 b(do)25
6221
2557 y Ft(\000)60 b Fp(FFTW_ESTIMATE)p Fv(:)34 b(do)25
6163
6222
b(not)g(run)f(an)m(y)h(FFT)h(and)e(pro)m(vide)g(a)h(\\reasonable")h
6164
(plan)e(\(for)h(a)g(RISC)510 3920 y(pro)s(cessor)37 b(with)g(man)m(y)h
6165
(registers\).)62 b(If)38 b(neither)e Fo(FFTW_ESTIMATE)e
6166
Fu(nor)k Fo(FFTW_MEASURE)c Fu(is)510 4030 y(pro)m(vided,)29
6167
b(the)i(default)e(is)h Fo(FFTW_ESTIMATE)p Fu(.)379 4165
6168
y Fs(\000)60 b Fo(FFTW_OUT_OF_PLACE)p Fu(:)41 b(pro)s(duce)32
6223
(plan)e(\(for)h(a)g(RISC)510 2667 y(pro)s(cessor)37 b(with)g(man)m(y)h
6224
(registers\).)62 b(If)38 b(neither)e Fp(FFTW_ESTIMATE)e
6225
Fv(nor)k Fp(FFTW_MEASURE)c Fv(is)510 2776 y(pro)m(vided,)29
6226
b(the)i(default)e(is)h Fp(FFTW_ESTIMATE)p Fv(.)379 2911
6227
y Ft(\000)60 b Fp(FFTW_OUT_OF_PLACE)p Fv(:)41 b(pro)s(duce)32
6169
6228
b(a)i(plan)e(assuming)f(that)j(the)f(input)e(and)i(output)g(arra)m(ys)
6170
510 4275 y(will)28 b(b)s(e)h(distinct)g(\(this)h(is)f(the)i(default\).)
6171
379 4411 y Fs(\000)60 b Fo(FFTW_IN_PLACE)p Fu(:)54 b(pro)s(duce)37
6229
510 3020 y(will)28 b(b)s(e)h(distinct)g(\(this)h(is)f(the)i(default\).)
6230
379 3155 y Ft(\000)60 b Fp(FFTW_IN_PLACE)p Fv(:)54 b(pro)s(duce)37
6172
6231
b(a)i(plan)e(assuming)h(that)h(y)m(ou)g(w)m(an)m(t)g(to)h(p)s(erform)d
6173
(the)i(trans-)510 4520 y(form)33 b(in-place.)51 b(\(Unlik)m(e)33
6232
(the)i(trans-)510 3265 y(form)33 b(in-place.)51 b(\(Unlik)m(e)33
6174
6233
b(the)h(one-dimensional)e(transform,)i(this)f(\\really")g(p)s(erforms)g
6175
(the)510 4630 y(transform)j(in-place.\))58 b(Note)37
6234
(the)510 3374 y(transform)j(in-place.\))58 b(Note)37
6176
6235
b(that,)i(if)c(y)m(ou)i(w)m(an)m(t)g(to)g(p)s(erform)e(in-place)g
6177
(transforms,)j(y)m(ou)510 4740 y Fq(must)45 b Fu(use)35
6236
(transforms,)j(y)m(ou)510 3484 y Fr(must)45 b Fv(use)35
6178
6237
b(a)h(plan)f(created)i(with)d(this)h(option.)56 b(The)35
6179
6238
b(use)h(of)f(this)g(option)g(has)h(imp)s(ortan)m(t)510
6180
4849 y(implications)29 b(for)j(the)h(size)f(of)g(the)h(input/output)d
6239
3594 y(implications)29 b(for)j(the)h(size)f(of)g(the)h(input/output)d
6181
6240
(arra)m(y)j(\(see)g(Section)f(3.5.2)i([Computing)510
6182
4959 y(the)d(Real)f(Multi-dimensional)c(T)-8 b(ransform],)30
6183
b(page)h(31\).)510 5095 y(The)f(default)f(mo)s(de)h(of)h(op)s(eration)f
6184
(is)f Fo(FFTW_OUT_OF_PLACE)p Fu(.)379 5230 y Fs(\000)60
6185
b Fo(FFTW_USE_WISDOM)p Fu(:)h(use)42 b(an)m(y)h Fo(wisdom)e
6186
Fu(that)i(is)f(a)m(v)-5 b(ailable)41 b(to)j(help)d(in)g(the)i(creation)
6187
g(of)510 5340 y(the)34 b(plan.)50 b(\(See)35 b(Section)e(2.6)i([W)-8
6241
3703 y(the)d(Real)f(Multi-dimensional)c(T)-8 b(ransform],)30
6242
b(page)h(30\).)510 3838 y(The)f(default)f(mo)s(de)h(of)h(op)s(eration)f
6243
(is)f Fp(FFTW_OUT_OF_PLACE)p Fv(.)379 3973 y Ft(\000)60
6244
b Fp(FFTW_USE_WISDOM)p Fv(:)h(use)42 b(an)m(y)h Fp(wisdom)e
6245
Fv(that)i(is)f(a)m(v)-5 b(ailable)41 b(to)j(help)d(in)g(the)i(creation)
6246
g(of)510 4082 y(the)34 b(plan.)50 b(\(See)35 b(Section)e(2.6)i([W)-8
6188
6247
b(ords)35 b(of)f(Wisdom],)g(page)h(13.\))52 b(This)32
6189
b(can)i(greatly)h(sp)s(eed)p eop
6248
b(can)i(greatly)h(sp)s(eed)510 4192 y(the)g(creation)h(of)f(plans,)g
6249
(esp)s(ecially)e(with)h(the)h Fp(FFTW_MEASURE)d Fv(option.)55
6250
b Fp(FFTW_ESTIMATE)510 4301 y Fv(plans)33 b(can)i(also)f(tak)m(e)i(adv)
6251
-5 b(an)m(tage)36 b(of)f Fp(wisdom)e Fv(to)i(pro)s(duce)e(a)i(more)f
6252
(optimal)g(plan)f(\(based)510 4411 y(on)42 b(past)g(measuremen)m(ts\))g
6253
(than)f(the)h(estimation)g(heuristic)e(w)m(ould)g(normally)g(generate.)
6254
510 4520 y(When)30 b(the)h Fp(FFTW_MEASURE)c Fv(option)j(is)g(used,)g
6255
(new)g Fp(wisdom)f Fv(will)f(also)j(b)s(e)f(generated)h(if)f(the)510
6256
4630 y(curren)m(t)42 b(transform)g(size)g(is)g(not)g(completely)g
6257
(understo)s(o)s(d)f(b)m(y)h(existing)g Fp(wisdom)p Fv(.)75
6258
b(Note)510 4740 y(that)37 b(the)g(same)g Fp(wisdom)e
6259
Fv(is)h(shared)g(b)s(et)m(w)m(een)h(one-dimensional)e(and)h(m)m
6260
(ulti-dimensional)510 4849 y(transforms.)150 5074 y Fh(3.5.2)63
6261
b(Computing)41 b(the)f(Real)h(Multi-dimensional)g(T)-10
6262
b(ransform)390 5236 y Fp(#include)46 b(<rfftw.h>)p eop
6191
31 32 bop 150 -116 a Fu(Chapter)30 b(3:)41 b(FFTW)31
6192
b(Reference)2354 b(31)510 299 y(the)35 b(creation)h(of)f(plans,)g(esp)s
6193
(ecially)e(with)h(the)h Fo(FFTW_MEASURE)d Fu(option.)55
6194
b Fo(FFTW_ESTIMATE)510 408 y Fu(plans)33 b(can)i(also)f(tak)m(e)i(adv)
6195
-5 b(an)m(tage)36 b(of)f Fo(wisdom)e Fu(to)i(pro)s(duce)e(a)i(more)f
6196
(optimal)g(plan)f(\(based)510 518 y(on)42 b(past)g(measuremen)m(ts\))g
6197
(than)f(the)h(estimation)g(heuristic)e(w)m(ould)g(normally)g(generate.)
6198
510 628 y(When)30 b(the)h Fo(FFTW_MEASURE)c Fu(option)j(is)g(used,)g
6199
(new)g Fo(wisdom)f Fu(will)f(also)j(b)s(e)f(generated)h(if)f(the)510
6200
737 y(curren)m(t)42 b(transform)g(size)g(is)g(not)g(completely)g
6201
(understo)s(o)s(d)f(b)m(y)h(existing)g Fo(wisdom)p Fu(.)75
6202
b(Note)510 847 y(that)37 b(the)g(same)g Fo(wisdom)e Fu(is)h(shared)g(b)
6203
s(et)m(w)m(een)h(one-dimensional)e(and)h(m)m(ulti-dimensional)510
6204
956 y(transforms.)150 1179 y Fi(3.5.2)63 b(Computing)41
6205
b(the)f(Real)h(Multi-dimensional)g(T)-10 b(ransform)390
6206
1366 y Fo(#include)46 b(<rfftw.h>)390 1573 y(void)h
6207
(rfftwnd_real_to_complex)o(\(rff)o(twn)o(d_pl)o(an)42
6208
b(plan,)k(int)h(howmany,)1774 1677 y(fftw_real)e(*in,)i(int)g(istride,)
6209
e(int)i(idist,)1774 1781 y(fftw_complex)e(*out,)h(int)h(ostride,)e(int)
6210
i(odist\);)390 1884 y(void)g(rfftwnd_complex_to_real)o(\(rff)o(twn)o
6211
(d_pl)o(an)42 b(plan,)k(int)h(howmany,)1774 1988 y(fftw_complex)e(*in,)
6212
h(int)h(istride,)f(int)h(idist,)1774 2092 y(fftw_real)e(*out,)i(int)g
6213
(ostride,)e(int)i(odist\);)390 2300 y(void)g(rfftwnd_one_real_to_com)o
6265
TeXDict begin 31 32 bop 150 -116 a Fv(Chapter)30 b(3:)41
6266
b(FFTW)31 b(Reference)2354 b(31)390 299 y Fp(void)47
6267
b(rfftwnd_real_to_complex)o(\(rff)o(twn)o(d_pl)o(an)42
6268
b(plan,)k(int)h(howmany,)1774 403 y(fftw_real)e(*in,)i(int)g(istride,)e
6269
(int)i(idist,)1774 506 y(fftw_complex)e(*out,)h(int)h(ostride,)e(int)i
6270
(odist\);)390 610 y(void)g(rfftwnd_complex_to_real)o(\(rff)o(twn)o
6271
(d_pl)o(an)42 b(plan,)k(int)h(howmany,)1774 714 y(fftw_complex)e(*in,)h
6272
(int)h(istride,)f(int)h(idist,)1774 818 y(fftw_real)e(*out,)i(int)g
6273
(ostride,)e(int)i(odist\);)390 1025 y(void)g(rfftwnd_one_real_to_com)o
6214
6274
(plex)o(\(rf)o(ftwn)o(d_pl)o(an)41 b(p,)48 b(fftw_real)d(*in,)1965
6215
2403 y(fftw_complex)f(*out\);)390 2507 y(void)j
6275
1129 y(fftw_complex)f(*out\);)390 1233 y(void)j
6216
6276
(rfftwnd_one_complex_to_)o(real)o(\(rf)o(ftwn)o(d_pl)o(an)41
6217
b(p,)48 b(fftw_complex)c(*in,)1965 2611 y(fftw_real)h(*out\);)275
6218
2745 y Fu(These)24 b(functions)f(compute)h(the)h(real)f(m)m
6277
b(p,)48 b(fftw_complex)c(*in,)1965 1337 y(fftw_real)h(*out\);)275
6278
1464 y Fv(These)24 b(functions)f(compute)h(the)h(real)f(m)m
6219
6279
(ulti-dimensional)c(F)-8 b(ourier)24 b(T)-8 b(ransform,)25
6220
b(using)e(a)h(plan)f(cre-)150 2855 y(ated)i(b)m(y)f Fo
6221
(rfftwnd_create_plan)18 b Fu(\(see)25 b(Section)f(3.5.1)i([Plan)d
6222
(Creation)h(for)g(Real)g(Multi-dimensional)150 2964 y(T)-8
6280
b(using)e(a)h(plan)f(cre-)150 1574 y(ated)i(b)m(y)f Fp
6281
(rfftwnd_create_plan)18 b Fv(\(see)25 b(Section)f(3.5.1)i([Plan)d
6282
(Creation)h(for)g(Real)g(Multi-dimensional)150 1683 y(T)-8
6223
6283
b(ransforms],)31 b(page)h(29\).)46 b(\(Note)33 b(that)f(the)f(plan)g
6224
6284
(determines)f(the)i(rank)f(and)g(dimensions)d(of)k(the)g(ar-)150
6225
3074 y(ra)m(y)27 b(to)g(b)s(e)e(transformed.\))39 b(The)26
6226
b(`)p Fo(rfftwnd_one_)p Fu(')d(functions)i(pro)m(vide)h(a)g
6227
(simpli\014ed)d(in)m(terface)k(for)f(the)150 3183 y(common)33
6285
1793 y(ra)m(y)27 b(to)g(b)s(e)e(transformed.\))39 b(The)26
6286
b(`)p Fp(rfftwnd_one_)p Fv(')d(functions)i(pro)m(vide)h(a)g
6287
(simpli\014ed)d(in)m(terface)k(for)f(the)150 1903 y(common)33
6228
6288
b(case)h(of)f(single)f(input)f(arra)m(y)i(of)g(stride)f(1.)48
6229
6289
b(Unlik)m(e)32 b(other)h(transform)g(routines)e(in)h(FFTW,)150
6230
3293 y(w)m(e)f(here)f(use)g(separate)h(functions)e(for)h(the)h(t)m(w)m
6290
2012 y(w)m(e)f(here)f(use)g(separate)h(functions)e(for)h(the)h(t)m(w)m
6231
6291
(o)g(directions)e(of)i(the)f(transform)g(in)f(order)g(to)j(correctly)
6232
150 3402 y(express)e(the)g(datat)m(yp)s(es)i(of)e(the)h(parameters.)275
6233
3537 y Fq(Imp)-5 b(ortant:)58 b Fu(When)35 b(in)m(v)m(ok)m(ed)g(for)g
6234
(an)g(out-of-place,)j Fo(FFTW_COMPLEX_TO_REAL)30 b Fu(transform)k(with)
6235
150 3646 y Fo(rank)29 b(>)h(1)p Fu(,)35 b(the)f(input)e(arra)m(y)j(is)e
6292
150 2122 y(express)e(the)g(datat)m(yp)s(es)i(of)e(the)h(parameters.)275
6293
2249 y Fr(Imp)-5 b(ortant:)58 b Fv(When)35 b(in)m(v)m(ok)m(ed)g(for)g
6294
(an)g(out-of-place,)j Fp(FFTW_COMPLEX_TO_REAL)30 b Fv(transform)k(with)
6295
150 2359 y Fp(rank)29 b(>)h(1)p Fv(,)35 b(the)f(input)e(arra)m(y)j(is)e
6236
6296
(o)m(v)m(erwritten)h(with)f(scratc)m(h)i(v)-5 b(alues)33
6237
b(b)m(y)h(these)g(routines.)50 b(The)34 b(input)150 3756
6238
y(arra)m(y)26 b(is)e(not)i(mo)s(di\014ed)d(for)i Fo
6239
(FFTW_REAL_TO_COMPLEX)20 b Fu(transforms)25 b(or)g(for)g
6240
Fo(FFTW_COMPLEX_TO_REAL)150 3865 y Fu(with)k Fo(rank)g(==)h(1)p
6241
Fu(.)150 4088 y Fi(Argumen)m(ts)225 4280 y Fs(\017)60
6242
b Fo(plan)20 b Fu(is)g(the)h(plan)e(created)j(b)m(y)f
6243
Fo(rfftwnd_create_plan)p Fu(.)32 b(\(see)22 b(Section)f(3.5.1)i([Plan)d
6244
(Creation)g(for)330 4390 y(Real)i(Multi-dimensional)c(T)-8
6297
b(b)m(y)h(these)g(routines.)50 b(The)34 b(input)150 2468
6298
y(arra)m(y)26 b(is)e(not)i(mo)s(di\014ed)d(for)i Fp
6299
(FFTW_REAL_TO_COMPLEX)20 b Fv(transforms)25 b(or)g(for)g
6300
Fp(FFTW_COMPLEX_TO_REAL)150 2578 y Fv(with)k Fp(rank)g(==)h(1)p
6301
Fv(.)150 2781 y Fh(Argumen)m(ts)225 2949 y Ft(\017)60
6302
b Fp(plan)20 b Fv(is)g(the)h(plan)e(created)j(b)m(y)f
6303
Fp(rfftwnd_create_plan)p Fv(.)32 b(\(see)22 b(Section)f(3.5.1)i([Plan)d
6304
(Creation)g(for)330 3059 y(Real)i(Multi-dimensional)c(T)-8
6245
6305
b(ransforms],)23 b(page)f(29\).)39 b(In)21 b(the)h(case)h(of)f(t)m(w)m
6246
(o)h(and)e(three-dimensional)330 4499 y(transforms,)45
6306
(o)h(and)e(three-dimensional)330 3168 y(transforms,)45
6247
6307
b(it)d(could)g(also)h(ha)m(v)m(e)h(b)s(een)e(created)h(b)m(y)g
6248
Fo(rfftw2d_create_plan)37 b Fu(or)43 b Fo(rfftw3d_)330
6249
4609 y(create_plan)p Fu(,)28 b(resp)s(ectiv)m(ely)-8
6250
b(.)330 4743 y Fo(FFTW_REAL_TO_COMPLEX)15 b Fu(plans)20
6251
b(m)m(ust)h(b)s(e)f(used)g(with)g(the)h(`)p Fo(real_to_complex)p
6252
Fu(')c(functions,)22 b(and)330 4853 y Fo(FFTW_COMPLEX_TO_REAL)h
6253
Fu(plans)k(m)m(ust)i(b)s(e)e(used)h(with)f(the)i(`)p
6254
Fo(complex_to_real)p Fu(')c(functions.)39 b(It)330 4962
6308
Fp(rfftw2d_create_plan)37 b Fv(or)43 b Fp(rfftw3d_)330
6309
3278 y(create_plan)p Fv(,)28 b(resp)s(ectiv)m(ely)-8
6310
b(.)330 3405 y Fp(FFTW_REAL_TO_COMPLEX)15 b Fv(plans)20
6311
b(m)m(ust)h(b)s(e)f(used)g(with)g(the)h(`)p Fp(real_to_complex)p
6312
Fv(')c(functions,)22 b(and)330 3515 y Fp(FFTW_COMPLEX_TO_REAL)h
6313
Fv(plans)k(m)m(ust)i(b)s(e)e(used)h(with)f(the)i(`)p
6314
Fp(complex_to_real)p Fv(')c(functions.)39 b(It)330 3624
6255
6315
y(is)29 b(an)i(error)f(to)h(mismatc)m(h)f(the)g(plan)f(direction)h(and)
6256
f(the)i(transform)f(function.)225 5096 y Fs(\017)60 b
6257
Fo(howmany)28 b Fu(is)i(the)g(n)m(um)m(b)s(er)f(of)i(transforms)f(to)h
6258
(b)s(e)e(computed.)225 5230 y Fs(\017)60 b Fo(in)p Fu(,)33
6259
b Fo(istride)e Fu(and)i Fo(idist)e Fu(describ)s(e)h(the)h(input)e(arra)
6260
m(y\(s\).)50 b(There)33 b(are)g Fo(howmany)e Fu(input)g(arra)m(ys;)330
6261
5340 y(the)42 b(\014rst)e(one)i(is)f(p)s(oin)m(ted)f(to)i(b)m(y)g
6262
Fo(in)p Fu(,)h(the)f(second)g(one)f(is)g(p)s(oin)m(ted)f(to)i(b)m(y)g
6263
Fo(in)29 b(+)h(idist)p Fu(,)44 b(and)p eop
6265
32 33 bop 150 -116 a Fu(32)3232 b(FFTW)330 299 y(so)40
6266
b(on,)i(up)d(to)i Fo(in)30 b(+)g(\(howmany)e(-)i(1\))g(*)g(idist)p
6267
Fu(.)67 b(Eac)m(h)41 b(input)d(arra)m(y)i(is)f(stored)h(in)e(ro)m(w-ma)
6268
5 b(jor)330 408 y(format)31 b(\(see)h(Section)f(2.5)i
6316
f(the)i(transform)f(function.)225 3752 y Ft(\017)60 b
6317
Fp(howmany)28 b Fv(is)i(the)g(n)m(um)m(b)s(er)f(of)i(transforms)f(to)h
6318
(b)s(e)e(computed.)225 3879 y Ft(\017)60 b Fp(in)p Fv(,)33
6319
b Fp(istride)e Fv(and)i Fp(idist)e Fv(describ)s(e)h(the)h(input)e(arra)
6320
m(y\(s\).)50 b(There)33 b(are)g Fp(howmany)e Fv(input)g(arra)m(ys;)330
6321
3989 y(the)42 b(\014rst)e(one)i(is)f(p)s(oin)m(ted)f(to)i(b)m(y)g
6322
Fp(in)p Fv(,)h(the)f(second)g(one)f(is)g(p)s(oin)m(ted)f(to)i(b)m(y)g
6323
Fp(in)29 b(+)h(idist)p Fv(,)44 b(and)330 4099 y(so)c(on,)i(up)d(to)i
6324
Fp(in)30 b(+)g(\(howmany)e(-)i(1\))g(*)g(idist)p Fv(.)67
6325
b(Eac)m(h)41 b(input)d(arra)m(y)i(is)f(stored)h(in)e(ro)m(w-ma)5
6326
b(jor)330 4208 y(format)31 b(\(see)h(Section)f(2.5)i
6269
6327
([Multi-dimensional)27 b(Arra)m(y)k(F)-8 b(ormat],)34
6270
b(page)d(11\),)i(and)e(is)f(not)h(neces-)330 518 y(sarily)g(con)m
6328
b(page)d(11\),)i(and)e(is)f(not)h(neces-)330 4318 y(sarily)g(con)m
6271
6329
(tiguous)h(in)f(memory)-8 b(.)47 b(Sp)s(eci\014cally)-8
6272
b(,)31 b Fo(in[0])g Fu(is)h(the)g(\014rst)g(elemen)m(t)h(of)g(the)f
6273
(\014rst)g(arra)m(y)-8 b(,)330 628 y Fo(in[istride])31
6274
b Fu(is)i(the)h(second)g(elemen)m(t)g(of)g(the)g(\014rst)f(arra)m(y)-8
6330
b(,)31 b Fp(in[0])g Fv(is)h(the)g(\014rst)g(elemen)m(t)h(of)g(the)f
6331
(\014rst)g(arra)m(y)-8 b(,)330 4427 y Fp(in[istride])31
6332
b Fv(is)i(the)h(second)g(elemen)m(t)g(of)g(the)g(\014rst)f(arra)m(y)-8
6275
6333
b(,)36 b(and)e(so)g(on.)51 b(In)33 b(general,)i(the)f
6276
Fo(i)p Fu(-th)330 737 y(elemen)m(t)27 b(of)g(the)g Fo(j)p
6277
Fu(-th)g(input)d(arra)m(y)k(will)c(b)s(e)i(in)f(p)s(osition)g
6278
Fo(in[i)k(*)h(istride)f(+)h(j)g(*)g(idist])p Fu(.)38
6279
b(Note)330 847 y(that,)h(here,)g Fo(i)d Fu(refers)h(to)g(an)g(index)e
6334
Fp(i)p Fv(-th)330 4537 y(elemen)m(t)27 b(of)g(the)g Fp(j)p
6335
Fv(-th)g(input)d(arra)m(y)k(will)c(b)s(e)i(in)f(p)s(osition)g
6336
Fp(in[i)k(*)h(istride)f(+)h(j)g(*)g(idist])p Fv(.)38
6337
b(Note)330 4647 y(that,)h(here,)g Fp(i)d Fv(refers)h(to)g(an)g(index)e
6280
6338
(in)m(to)i(the)g(ro)m(w-ma)5 b(jor)37 b(format)g(for)g(the)g(m)m
6281
(ulti-dimensional)330 956 y(arra)m(y)-8 b(,)32 b(rather)e(than)g(an)g
6282
(index)f(in)g(an)m(y)i(particular)e(dimension.)330 1089
6339
(ulti-dimensional)330 4756 y(arra)m(y)-8 b(,)32 b(rather)e(than)g(an)g
6340
(index)f(in)g(an)m(y)i(particular)e(dimension.)330 4884
6283
6341
y(The)d(dimensions)e(of)j(the)g(arra)m(ys)g(are)g(di\013eren)m(t)f(for)
6284
6342
g(real)g(and)g(complex)h(data,)h(and)e(are)h(discussed)330
6285
1199 y(in)k(more)h(detail)g(b)s(elo)m(w)f(\(see)i(Section)f(3.5.3)i
6343
4993 y(in)k(more)h(detail)g(b)s(elo)m(w)f(\(see)i(Section)f(3.5.3)i
6286
6344
([Arra)m(y)f(Dimensions)e(for)h(Real)g(Multi-dimensional)330
6287
1309 y(T)-8 b(ransforms],)30 b(page)h(32\).)379 1442
6288
y Fs(\000)60 b Fq(In-plac)-5 b(e)30 b(tr)-5 b(ansforms)7
6289
b Fu(:)42 b(F)-8 b(or)28 b(plans)d(created)j(with)d(the)i
6290
Fo(FFTW_IN_PLACE)c Fu(option,)k(the)g(trans-)510 1551
6345
5103 y(T)-8 b(ransforms],)30 b(page)h(32\).)379 5230
6346
y Ft(\000)60 b Fr(In-plac)-5 b(e)30 b(tr)-5 b(ansforms)7
6347
b Fv(:)42 b(F)-8 b(or)28 b(plans)d(created)j(with)d(the)i
6348
Fp(FFTW_IN_PLACE)c Fv(option,)k(the)g(trans-)510 5340
6291
6349
y(form)32 b(is)f(computed)h(in-place|the)g(output)f(is)h(returned)f(in)
6292
g(the)h Fo(in)g Fu(arra)m(y)-8 b(.)47 b(The)32 b(meaning)510
6293
1661 y(of)j(the)h Fo(stride)d Fu(and)i Fo(dist)f Fu(parameters)i(in)e
6350
g(the)h Fp(in)g Fv(arra)m(y)-8 b(.)47 b(The)32 b(meaning)p
6353
TeXDict begin 32 33 bop 150 -116 a Fv(32)3232 b(FFTW)510
6354
299 y(of)35 b(the)h Fp(stride)d Fv(and)i Fp(dist)f Fv(parameters)i(in)e
6294
6355
(this)g(case)i(is)e(subtle)g(and)h(is)f(discussed)g(b)s(elo)m(w)510
6295
1770 y(\(see)d(Section)g(3.5.4)h([Strides)d(in)g(In-place)h(RFFTWND],)i
6296
(page)f(33\).)225 1904 y Fs(\017)60 b Fo(out)p Fu(,)29
6297
b Fo(ostride)f Fu(and)g Fo(odist)g Fu(describ)s(e)g(the)i(output)f
6356
408 y(\(see)d(Section)g(3.5.4)h([Strides)d(in)g(In-place)h(RFFTWND],)i
6357
(page)f(32\).)225 545 y Ft(\017)60 b Fp(out)p Fv(,)29
6358
b Fp(ostride)f Fv(and)g Fp(odist)g Fv(describ)s(e)g(the)i(output)f
6298
6359
(arra)m(y\(s\).)42 b(The)29 b(format)g(is)g(the)h(same)g(as)f(that)330
6299
2013 y(for)34 b(the)g(input)f(arra)m(y)-8 b(.)53 b(See)34
6360
654 y(for)34 b(the)g(input)f(arra)m(y)-8 b(.)53 b(See)34
6300
6361
b(b)s(elo)m(w)g(for)g(a)g(discussion)e(of)i(the)g(dimensions)e(of)i
6301
(the)h(output)e(arra)m(y)330 2123 y(for)d(real)g(and)g(complex)g(data.)
6302
379 2256 y Fs(\000)60 b Fq(In-plac)-5 b(e)47 b(tr)-5
6303
b(ansforms)7 b Fu(:)73 b(These)45 b(parameters)g(are)h(ignored)e(for)g
6304
(plans)g(created)i(with)e(the)510 2365 y Fo(FFTW_IN_PLACE)27
6305
b Fu(option.)275 2522 y(The)32 b(function)f Fo(rfftwnd_one)f
6306
Fu(transforms)i(a)h(single,)g(con)m(tiguous)g(input)e(arra)m(y)i(to)h
6307
(a)f(con)m(tiguous)150 2631 y(output)d(arra)m(y)-8 b(.)42
6308
b(By)30 b(de\014nition,)f(the)h(call)390 2759 y Fo
6309
(rfftwnd_one_...\(plan,)42 b(in,)47 b(out\))275 2892
6310
y Fu(is)29 b(equiv)-5 b(alen)m(t)30 b(to)390 3019 y Fo
6311
(rfftwnd_...\(plan,)43 b(1,)k(in,)g(1,)g(1,)h(out,)e(1,)h(1\))150
6312
3239 y Fi(3.5.3)63 b(Arra)m(y)39 b(Dimensions)j(for)f(Real)g
6313
(Multi-dimensional)g(T)-10 b(ransforms)275 3430 y Fu(The)32
6362
(the)h(output)e(arra)m(y)330 764 y(for)d(real)g(and)g(complex)g(data.)
6363
379 900 y Ft(\000)60 b Fr(In-plac)-5 b(e)47 b(tr)-5 b(ansforms)7
6364
b Fv(:)73 b(These)45 b(parameters)g(are)h(ignored)e(for)g(plans)g
6365
(created)i(with)e(the)510 1010 y Fp(FFTW_IN_PLACE)27
6366
b Fv(option.)275 1175 y(The)32 b(function)f Fp(rfftwnd_one)f
6367
Fv(transforms)i(a)h(single,)g(con)m(tiguous)g(input)e(arra)m(y)i(to)h
6368
(a)f(con)m(tiguous)150 1284 y(output)d(arra)m(y)-8 b(.)42
6369
b(By)30 b(de\014nition,)f(the)h(call)390 1417 y Fp
6370
(rfftwnd_one_...\(plan,)42 b(in,)47 b(out\))275 1555
6371
y Fv(is)29 b(equiv)-5 b(alen)m(t)30 b(to)390 1687 y Fp
6372
(rfftwnd_...\(plan,)43 b(1,)k(in,)g(1,)g(0,)h(out,)e(1,)h(0\))150
6373
1919 y Fh(3.5.3)63 b(Arra)m(y)39 b(Dimensions)j(for)f(Real)g
6374
(Multi-dimensional)g(T)-10 b(ransforms)275 2115 y Fv(The)32
6314
6375
b(output)h(of)g(a)g(m)m(ulti-dimensional)c(transform)k(of)g(real)g
6315
(data)g(con)m(tains)h(symmetries)e(that,)i(in)150 3540
6376
(data)g(con)m(tains)h(symmetries)e(that,)i(in)150 2225
6316
6377
y(principle,)27 b(mak)m(e)j(half)f(of)h(the)f(outputs)h(redundan)m(t)e
6317
6378
(\(see)i(Section)g(3.5.6)h([What)g(RFFTWND)g(Really)150
6318
3649 y(Computes],)36 b(page)f(33\).)55 b(In)34 b(practice,)i(it)f(is)e
6379
2334 y(Computes],)36 b(page)f(33\).)55 b(In)34 b(practice,)i(it)f(is)e
6319
6380
(not)i(p)s(ossible)d(to)k(en)m(tirely)e(realize)g(these)h(sa)m(vings)g
6320
(in)e(an)150 3759 y(e\016cien)m(t)24 b(and)e(understandable)f(format.)
6381
(in)e(an)150 2444 y(e\016cien)m(t)24 b(and)e(understandable)f(format.)
6321
6382
39 b(Instead,)25 b(the)e(output)g(of)g(the)h(r\013t)m(wnd)e(transforms)
6322
h(is)f Fq(slightly)150 3868 y Fu(o)m(v)m(er)27 b(half)e(of)h(the)g
6383
h(is)f Fr(slightly)150 2554 y Fv(o)m(v)m(er)27 b(half)e(of)h(the)g
6323
6384
(output)f(of)h(the)g(corresp)s(onding)d(complex)j(transform.)38
6324
6385
b(W)-8 b(e)27 b(do)f(not)g(\\pac)m(k")h(the)f(data)150
6325
3978 y(in)k(an)m(y)i(w)m(a)m(y)-8 b(,)33 b(but)e(store)h(it)f(as)h(an)f
6326
(ordinary)f(arra)m(y)i(of)f Fo(fftw_complex)e Fu(v)-5
6327
b(alues.)43 b(In)31 b(fact,)h(this)f(data)h(is)150 4088
6386
2663 y(in)k(an)m(y)i(w)m(a)m(y)-8 b(,)33 b(but)e(store)h(it)f(as)h(an)f
6387
(ordinary)f(arra)m(y)i(of)f Fp(fftw_complex)e Fv(v)-5
6388
b(alues.)43 b(In)31 b(fact,)h(this)f(data)h(is)150 2773
6328
6389
y(simply)c(a)j(subsection)e(of)i(what)f(w)m(ould)f(b)s(e)h(the)g(arra)m
6329
6390
(y)h(in)e(the)i(corresp)s(onding)d(complex)i(transform.)275
6330
4221 y(Sp)s(eci\014cally)-8 b(,)32 b(for)i(a)g(real)f(transform)g(of)h
6331
(dimensions)d Fl(n)2225 4235 y Fn(1)2284 4221 y Fs(\002)22
6332
b Fl(n)2432 4235 y Fn(2)2491 4221 y Fs(\002)h(\001)15
6333
b(\001)g(\001)23 b(\002)f Fl(n)2861 4235 y Fk(d)2899
6334
4221 y Fu(,)35 b(the)f(complex)f(data)i(is)150 4330 y(an)e
6335
Fl(n)334 4344 y Fn(1)393 4330 y Fs(\002)21 b Fl(n)540
6336
4344 y Fn(2)599 4330 y Fs(\002)h(\001)15 b(\001)g(\001)23
6337
b(\002)f Fu(\()p Fl(n)1003 4344 y Fk(d)1041 4330 y Fl(=)p
6338
Fu(2)h(+)f(1\))34 b(arra)m(y)f(of)h Fo(fftw_complex)29
6339
b Fu(v)-5 b(alues)33 b(in)e(ro)m(w-ma)5 b(jor)34 b(order)f(\(with)f
6340
(the)150 4440 y(division)j(rounded)h(do)m(wn\).)63 b(That)38
6391
2911 y(Sp)s(eci\014cally)-8 b(,)32 b(for)i(a)g(real)f(transform)g(of)h
6392
(dimensions)d Fm(n)2225 2925 y Fo(1)2284 2911 y Ft(\002)22
6393
b Fm(n)2432 2925 y Fo(2)2491 2911 y Ft(\002)h(\001)15
6394
b(\001)g(\001)23 b(\002)f Fm(n)2861 2925 y Fl(d)2899
6395
2911 y Fv(,)35 b(the)f(complex)f(data)i(is)150 3021 y(an)e
6396
Fm(n)334 3035 y Fo(1)393 3021 y Ft(\002)21 b Fm(n)540
6397
3035 y Fo(2)599 3021 y Ft(\002)h(\001)15 b(\001)g(\001)23
6398
b(\002)f Fv(\()p Fm(n)1003 3035 y Fl(d)1041 3021 y Fm(=)p
6399
Fv(2)h(+)f(1\))34 b(arra)m(y)f(of)h Fp(fftw_complex)29
6400
b Fv(v)-5 b(alues)33 b(in)e(ro)m(w-ma)5 b(jor)34 b(order)f(\(with)f
6401
(the)150 3130 y(division)j(rounded)h(do)m(wn\).)63 b(That)38
6341
6402
b(is,)h(w)m(e)g(only)e(store)h(the)g(lo)m(w)m(er)h(half)d(\(plus)h(one)
6342
h(elemen)m(t\))h(of)f(the)150 4549 y(last)c(dimension)e(of)i(the)g
6403
h(elemen)m(t\))h(of)f(the)150 3240 y(last)c(dimension)e(of)i(the)g
6343
6404
(data)h(from)f(the)g(ordinary)e(complex)i(transform.)51
6344
b(\(W)-8 b(e)36 b(could)d(ha)m(v)m(e)j(instead)150 4659
6405
b(\(W)-8 b(e)36 b(could)d(ha)m(v)m(e)j(instead)150 3349
6345
6406
y(tak)m(en)d(half)f(of)g(an)m(y)h(other)f(dimension,)f(but)g(implemen)m
6346
6407
(tation)g(turns)g(out)i(to)g(b)s(e)e(simpler)f(if)h(the)i(last,)150
6347
4769 y(con)m(tiguous,)e(dimension)d(is)h(used.\))275
6348
4902 y(Since)c(the)i(complex)g(data)h(is)d(sligh)m(tly)h(larger)g(than)
6408
3459 y(con)m(tiguous,)e(dimension)d(is)h(used.\))275
6409
3597 y(Since)c(the)i(complex)g(data)h(is)d(sligh)m(tly)h(larger)g(than)
6349
6410
h(the)g(real)f(data,)j(some)e(complications)f(arise)g(for)150
6350
5011 y(in-place)j(transforms.)39 b(In)29 b(this)f(case,)j(the)f
6411
3707 y(in-place)j(transforms.)39 b(In)29 b(this)f(case,)j(the)f
6351
6412
(\014nal)e(dimension)f(of)j(the)f(real)g(data)i(m)m(ust)e(b)s(e)g
6352
(padded)f(with)150 5121 y(extra)c(v)-5 b(alues)22 b(to)h(accommo)s
6413
(padded)f(with)150 3816 y(extra)c(v)-5 b(alues)22 b(to)h(accommo)s
6353
6414
(date)i(the)e(size)g(of)g(the)g(complex)g(data|t)m(w)m(o)h(extra)g(if)e
6354
(the)h(last)g(dimension)d(is)150 5230 y(ev)m(en)k(and)f(one)h(if)f(it)g
6415
(the)h(last)g(dimension)d(is)150 3926 y(ev)m(en)k(and)f(one)h(if)f(it)g
6355
6416
(is)g(o)s(dd.)37 b(That)24 b(is,)g(the)g(last)f(dimension)e(of)j(the)g
6356
6417
(real)f(data)i(m)m(ust)e(ph)m(ysically)f(con)m(tain)150
6357
5340 y(2\()p Fl(n)285 5354 y Fk(d)324 5340 y Fl(=)p Fu(2)j(+)g(1\))37
6358
b Fo(fftw_real)d Fu(v)-5 b(alues)36 b(\(exactly)i(enough)f(to)g(hold)e
6359
(the)i(complex)g(data\).)60 b(This)35 b(ph)m(ysical)p
6418
4035 y(2\()p Fm(n)285 4049 y Fl(d)324 4035 y Fm(=)p Fv(2)j(+)g(1\))37
6419
b Fp(fftw_real)d Fv(v)-5 b(alues)36 b(\(exactly)i(enough)f(to)g(hold)e
6420
(the)i(complex)g(data\).)60 b(This)35 b(ph)m(ysical)150
6421
4145 y(arra)m(y)42 b(size)g(do)s(es)f(not,)k(ho)m(w)m(ev)m(er,)i(c)m
6422
(hange)c(the)e Fr(lo)-5 b(gic)g(al)53 b Fv(arra)m(y)42
6423
b(size|only)f Fm(n)2909 4159 y Fl(d)2989 4145 y Fv(v)-5
6424
b(alues)41 b(are)h(actually)150 4255 y(stored)27 b(in)e(the)i(last)g
6425
(dimension,)e(and)h Fm(n)1524 4269 y Fl(d)1589 4255 y
6426
Fv(is)g(the)h(last)g(dimension)d(passed)i(to)i Fp(rfftwnd_create_plan)p
6427
Fv(.)150 4486 y Fh(3.5.4)63 b(Strides)41 b(in)g(In-place)g(RFFTWND)275
6428
4682 y Fv(The)32 b(fact)i(that)g(the)f(input)f(and)g(output)h(datat)m
6429
(yp)s(es)h(are)g(di\013eren)m(t)e(for)h(r\013t)m(wnd)g(complicates)g
6430
(the)150 4792 y(meaning)i(of)h(the)g Fp(stride)e Fv(and)i
6431
Fp(dist)e Fv(parameters)j(of)f(in-place)e(transforms|are)i(they)g(in)e
6432
(units)h(of)150 4902 y Fp(fftw_real)g Fv(or)i Fp(fftw_complex)c
6433
Fv(elemen)m(ts?)61 b(When)37 b(reading)f(the)h(input,)g(they)g(are)h
6434
(in)m(terpreted)e(in)150 5011 y(units)28 b(of)i(the)g(datat)m(yp)s(e)h
6435
(of)f(the)g(input)d(data.)42 b(When)29 b(writing)f(the)i(output,)g(the)
6436
f Fp(istride)f Fv(and)h Fp(idist)150 5121 y Fv(are)36
6437
b(translated)g(to)g(the)g(output)f(datat)m(yp)s(e's)i(\\units")e(in)f
6438
(one)i(of)g(t)m(w)m(o)h(w)m(a)m(ys,)i(corresp)s(onding)33
6439
b(to)k(the)150 5230 y(t)m(w)m(o)d(most)e(common)h(situations)e(in)g
6440
(whic)m(h)g Fp(stride)g Fv(and)g Fp(dist)h Fv(parameters)g(are)h
6441
(useful.)45 b(Belo)m(w,)33 b(w)m(e)150 5340 y(refer)k(to)h(these)g
6442
(\\translated")h(parameters)e(as)h Fp(ostride_t)d Fv(and)i
6443
Fp(odist_t)p Fv(.)60 b(\(Note)39 b(that)g(these)f(are)p
6362
33 34 bop 150 -116 a Fu(Chapter)30 b(3:)41 b(FFTW)31
6363
b(Reference)2354 b(33)150 299 y(arra)m(y)42 b(size)g(do)s(es)f(not,)k
6364
(ho)m(w)m(ev)m(er,)i(c)m(hange)c(the)e Fq(lo)-5 b(gic)g(al)53
6365
b Fu(arra)m(y)42 b(size|only)f Fl(n)2909 313 y Fk(d)2989
6366
299 y Fu(v)-5 b(alues)41 b(are)h(actually)150 408 y(stored)27
6367
b(in)e(the)i(last)g(dimension,)e(and)h Fl(n)1524 422
6368
y Fk(d)1589 408 y Fu(is)g(the)h(last)g(dimension)d(passed)i(to)i
6369
Fo(rfftwnd_create_plan)p Fu(.)150 647 y Fi(3.5.4)63 b(Strides)41
6370
b(in)g(In-place)g(RFFTWND)275 847 y Fu(The)32 b(fact)i(that)g(the)f
6371
(input)f(and)g(output)h(datat)m(yp)s(es)h(are)g(di\013eren)m(t)e(for)h
6372
(r\013t)m(wnd)g(complicates)g(the)150 956 y(meaning)i(of)h(the)g
6373
Fo(stride)e Fu(and)i Fo(dist)e Fu(parameters)j(of)f(in-place)e
6374
(transforms|are)i(they)g(in)e(units)h(of)150 1066 y Fo(fftw_real)g
6375
Fu(or)i Fo(fftw_complex)c Fu(elemen)m(ts?)61 b(When)37
6376
b(reading)f(the)h(input,)g(they)g(are)h(in)m(terpreted)e(in)150
6377
1175 y(units)28 b(of)i(the)g(datat)m(yp)s(e)h(of)f(the)g(input)d(data.)
6378
42 b(When)29 b(writing)f(the)i(output,)g(the)f Fo(istride)f
6379
Fu(and)h Fo(idist)150 1285 y Fu(are)36 b(translated)g(to)g(the)g
6380
(output)f(datat)m(yp)s(e's)i(\\units")e(in)f(one)i(of)g(t)m(w)m(o)h(w)m
6381
(a)m(ys,)i(corresp)s(onding)33 b(to)k(the)150 1394 y(t)m(w)m(o)d(most)e
6382
(common)h(situations)e(in)g(whic)m(h)g Fo(stride)g Fu(and)g
6383
Fo(dist)h Fu(parameters)g(are)h(useful.)45 b(Belo)m(w,)33
6384
b(w)m(e)150 1504 y(refer)k(to)h(these)g(\\translated")h(parameters)e
6385
(as)h Fo(ostride_t)d Fu(and)i Fo(odist_t)p Fu(.)60 b(\(Note)39
6386
b(that)g(these)f(are)150 1614 y(computed)31 b(in)m(ternally)e(b)m(y)i
6387
(r\013t)m(wnd;)f(the)h(actual)h Fo(ostride)d Fu(and)h
6388
Fo(odist)f Fu(parameters)j(are)f(ignored)f(for)150 1723
6389
y(in-place)f(transforms.\))275 1865 y(First,)24 b(there)g(is)f(the)h
6390
(case)h(where)e(y)m(ou)h(are)g(transforming)e(a)i(n)m(um)m(b)s(er)f(of)
6391
h(con)m(tiguous)g(arra)m(ys)g(lo)s(cated)150 1974 y(one)34
6392
b(after)g(another)g(in)f(memory)-8 b(.)51 b(In)33 b(this)g(situation,)h
6393
Fo(istride)e Fu(is)g Fo(1)i Fu(and)f Fo(idist)f Fu(is)h(the)h(pro)s
6394
(duct)f(of)150 2084 y(the)f(ph)m(ysical)e(dimensions)e(of)k(the)g(arra)
6395
m(y)-8 b(.)45 b Fo(ostride_t)29 b Fu(and)h Fo(odist_t)g
6396
Fu(are)i(then)f(c)m(hosen)h(so)g(that)g(the)150 2194
6397
y(output)38 b(arra)m(ys)g(are)h(con)m(tiguous)f(and)f(lie)g(on)h(top)h
6398
(of)f(the)g(input)e(arra)m(ys.)65 b Fo(ostride_t)35 b
6399
Fu(is)i(therefore)150 2303 y Fo(1)p Fu(.)50 b(F)-8 b(or)34
6400
b(a)g(real-to-complex)g(transform,)g Fo(odist_t)e Fu(is)g
6401
Fo(idist/2)p Fu(;)i(for)f(a)h(complex-to-real)g(transform,)150
6402
2413 y Fo(odist_t)28 b Fu(is)i Fo(idist*2)p Fu(.)275
6403
2554 y(The)k(second)g(case)i(is)e(when)f(y)m(ou)i(ha)m(v)m(e)h(an)f
6404
(arra)m(y)g(in)e(whic)m(h)g(eac)m(h)j(elemen)m(t)f(has)g
6405
Fo(nc)f Fu(comp)s(onen)m(ts)150 2664 y(\(e.g.)42 b(a)30
6406
b(structure)g(with)e Fo(nc)i Fu(n)m(umeric)e(\014elds\),)i(and)f(y)m
6446
TeXDict begin 33 34 bop 150 -116 a Fv(Chapter)30 b(3:)41
6447
b(FFTW)31 b(Reference)2354 b(33)150 299 y(computed)31
6448
b(in)m(ternally)e(b)m(y)i(r\013t)m(wnd;)f(the)h(actual)h
6449
Fp(ostride)d Fv(and)h Fp(odist)f Fv(parameters)j(are)f(ignored)f(for)
6450
150 408 y(in-place)f(transforms.\))275 548 y(First,)24
6451
b(there)g(is)f(the)h(case)h(where)e(y)m(ou)h(are)g(transforming)e(a)i
6452
(n)m(um)m(b)s(er)f(of)h(con)m(tiguous)g(arra)m(ys)g(lo)s(cated)150
6453
658 y(one)34 b(after)g(another)g(in)f(memory)-8 b(.)51
6454
b(In)33 b(this)g(situation,)h Fp(istride)e Fv(is)g Fp(1)i
6455
Fv(and)f Fp(idist)f Fv(is)h(the)h(pro)s(duct)f(of)150
6456
768 y(the)f(ph)m(ysical)e(dimensions)e(of)k(the)g(arra)m(y)-8
6457
b(.)45 b Fp(ostride_t)29 b Fv(and)h Fp(odist_t)g Fv(are)i(then)f(c)m
6458
(hosen)h(so)g(that)g(the)150 877 y(output)38 b(arra)m(ys)g(are)h(con)m
6459
(tiguous)f(and)f(lie)g(on)h(top)h(of)f(the)g(input)e(arra)m(ys.)65
6460
b Fp(ostride_t)35 b Fv(is)i(therefore)150 987 y Fp(1)p
6461
Fv(.)50 b(F)-8 b(or)34 b(a)g(real-to-complex)g(transform,)g
6462
Fp(odist_t)e Fv(is)g Fp(idist/2)p Fv(;)i(for)f(a)h(complex-to-real)g
6463
(transform,)150 1096 y Fp(odist_t)28 b Fv(is)i Fp(idist*2)p
6464
Fv(.)275 1236 y(The)k(second)g(case)i(is)e(when)f(y)m(ou)i(ha)m(v)m(e)h
6465
(an)f(arra)m(y)g(in)e(whic)m(h)g(eac)m(h)j(elemen)m(t)f(has)g
6466
Fp(nc)f Fv(comp)s(onen)m(ts)150 1346 y(\(e.g.)42 b(a)30
6467
b(structure)g(with)e Fp(nc)i Fv(n)m(umeric)e(\014elds\),)i(and)f(y)m
6407
6468
(ou)h(w)m(an)m(t)h(to)g(transform)e(all)g(of)h(the)g(comp)s(onen)m(ts)
6408
150 2774 y(at)f(once.)40 b(Here,)29 b Fo(istride)d Fu(is)h
6409
Fo(nc)h Fu(and)f Fo(idist)g Fu(is)g Fo(1)p Fu(.)39 b(F)-8
6469
150 1456 y(at)f(once.)40 b(Here,)29 b Fp(istride)d Fv(is)h
6470
Fp(nc)h Fv(and)f Fp(idist)g Fv(is)g Fp(1)p Fv(.)39 b(F)-8
6410
6471
b(or)29 b(this)e(case,)i(it)f(is)f(natural)g(to)h(w)m(an)m(t)h(the)f
6411
(output)150 2883 y(to)j(also)g(ha)m(v)m(e)g Fo(nc)f Fu(consecutiv)m(e)i
6472
(output)150 1565 y(to)j(also)g(ha)m(v)m(e)g Fp(nc)f Fv(consecutiv)m(e)i
6412
6473
(comp)s(onen)m(ts,)f(no)m(w)f(of)h(the)g(output)f(data)h(t)m(yp)s(e;)g
6413
(this)e(is)h(exactly)h(what)150 2993 y(r\013t)m(wnd)k(do)s(es.)58
6414
b(Sp)s(eci\014cally)-8 b(,)35 b(it)h(uses)f(an)h Fo(ostride_t)e
6415
Fu(equal)i(to)g Fo(istride)p Fu(,)g(and)g(an)g Fo(odist_t)e
6416
Fu(of)i Fo(1)p Fu(.)150 3102 y(\(Astute)26 b(readers)e(will)e(realize)j
6474
(this)e(is)h(exactly)h(what)150 1675 y(r\013t)m(wnd)k(do)s(es.)58
6475
b(Sp)s(eci\014cally)-8 b(,)35 b(it)h(uses)f(an)h Fp(ostride_t)e
6476
Fv(equal)i(to)g Fp(istride)p Fv(,)g(and)g(an)g Fp(odist_t)e
6477
Fv(of)i Fp(1)p Fv(.)150 1784 y(\(Astute)26 b(readers)e(will)e(realize)j
6417
6478
(that)g(some)g(extra)g(bu\013er)f(space)h(is)f(required)f(in)g(order)i
6418
(to)g(p)s(erform)e(suc)m(h)150 3212 y(a)31 b(transform;)f(this)f(is)g
6479
(to)g(p)s(erform)e(suc)m(h)150 1894 y(a)31 b(transform;)f(this)f(is)g
6419
6480
(handled)g(automatically)h(b)m(y)g(r\013t)m(wnd.\))275
6420
3353 y(The)k(general)h(rule)e(is)h(as)h(follo)m(ws.)53
6421
b Fo(ostride_t)33 b Fu(equals)h Fo(istride)p Fu(.)52
6422
b(If)34 b Fo(idist)g Fu(is)g Fo(1)g Fu(and)g Fo(idist)g
6423
Fu(is)150 3463 y(less)29 b(than)g Fo(istride)p Fu(,)e(then)i
6424
Fo(odist_t)f Fu(is)g Fo(1)p Fu(.)40 b(Otherwise,)28 b(for)i(a)f
6425
(real-to-complex)h(transform)f Fo(odist_t)150 3573 y
6426
Fu(is)g Fo(idist/2)g Fu(and)h(for)g(a)g(complex-to-real)i(transform)d
6427
Fo(odist_t)g Fu(is)g Fo(idist*2)p Fu(.)150 3811 y Fi(3.5.5)63
6481
2034 y(The)k(general)h(rule)e(is)h(as)h(follo)m(ws.)53
6482
b Fp(ostride_t)33 b Fv(equals)h Fp(istride)p Fv(.)52
6483
b(If)34 b Fp(idist)g Fv(is)g Fp(1)g Fv(and)g Fp(idist)g
6484
Fv(is)150 2144 y(less)29 b(than)g Fp(istride)p Fv(,)e(then)i
6485
Fp(odist_t)f Fv(is)g Fp(1)p Fv(.)40 b(Otherwise,)28 b(for)i(a)f
6486
(real-to-complex)h(transform)f Fp(odist_t)150 2253 y
6487
Fv(is)g Fp(idist/2)g Fv(and)h(for)g(a)g(complex-to-real)i(transform)d
6488
Fp(odist_t)g Fv(is)g Fp(idist*2)p Fv(.)150 2488 y Fh(3.5.5)63
6428
6489
b(Destro)m(ying)41 b(a)g(Multi-dimensional)h(Plan)390
6429
4005 y Fo(#include)k(<rfftw.h>)390 4212 y(void)h
6490
2650 y Fp(#include)k(<rfftw.h>)390 2858 y(void)h
6430
6491
(rfftwnd_destroy_plan\(rf)o(ftwn)o(d_p)o(lan)41 b(plan\);)275
6431
4354 y Fu(The)34 b(function)f Fo(rfftwnd_destroy_plan)c
6432
Fu(frees)35 b(the)g(plan)e Fo(plan)h Fu(and)g(releases)h(all)e(the)i
6433
(memory)150 4464 y(asso)s(ciated)c(with)e(it.)40 b(After)31
6492
2998 y Fv(The)34 b(function)f Fp(rfftwnd_destroy_plan)c
6493
Fv(frees)35 b(the)g(plan)e Fp(plan)h Fv(and)g(releases)h(all)e(the)i
6494
(memory)150 3107 y(asso)s(ciated)c(with)e(it.)40 b(After)31
6434
6495
b(destruction,)f(a)g(plan)f(is)h(no)g(longer)g(v)-5 b(alid.)150
6435
4702 y Fi(3.5.6)63 b(What)40 b(RFFTWND)h(Really)f(Computes)275
6436
4902 y Fu(The)23 b(con)m(v)m(en)m(tions)i(that)f(w)m(e)h(follo)m(w)e
6496
3343 y Fh(3.5.6)63 b(What)40 b(RFFTWND)h(Really)f(Computes)275
6497
3541 y Fv(The)23 b(con)m(v)m(en)m(tions)i(that)f(w)m(e)h(follo)m(w)e
6437
6498
(for)g(the)h(real)g(m)m(ulti-dimensional)c(transform)j(are)h(analogous)
6438
g(to)150 5011 y(those)f(for)f(the)g(complex)g(m)m(ulti-dimensional)d
6499
g(to)150 3650 y(those)f(for)f(the)g(complex)g(m)m(ulti-dimensional)d
6439
6500
(transform.)37 b(In)22 b(particular,)g(the)h(forw)m(ard)f(transform)f
6440
(has)150 5121 y(a)33 b(negativ)m(e)g(sign)f(in)f(the)i(exp)s(onen)m(t)f
6501
(has)150 3760 y(a)33 b(negativ)m(e)g(sign)f(in)f(the)i(exp)s(onen)m(t)f
6441
6502
(and)g(neither)f(the)i(forw)m(ard)f(nor)g(the)g(bac)m(kw)m(ard)h
6442
(transforms)f(will)150 5230 y(p)s(erform)g(an)m(y)i(normalization.)48
6503
(transforms)f(will)150 3870 y(p)s(erform)g(an)m(y)i(normalization.)48
6443
6504
b(Computing)32 b(the)h(bac)m(kw)m(ard)h(transform)f(of)g(the)h(forw)m
6444
(ard)f(transform)150 5340 y(will)c(m)m(ultiply)g(the)j(arra)m(y)h(b)m
6505
(ard)f(transform)150 3979 y(will)c(m)m(ultiply)g(the)j(arra)m(y)h(b)m
6445
6506
(y)f(the)g(pro)s(duct)e(of)i(its)g(dimensions)d(\(that)k(is,)e(the)h
6446
(logical)g(dimensions)d(of)p eop
6507
(logical)g(dimensions)d(of)150 4089 y(the)37 b(real)g(data\).)63
6508
b(The)36 b(forw)m(ard)h(transform)f(is)h(real-to-complex)h(and)e(the)i
6509
(bac)m(kw)m(ard)f(transform)g(is)150 4198 y(complex-to-real.)275
6510
4338 y(The)29 b(exact)j(mathematical)f(de\014nition)d(of)j(our)e(real)h
6511
(m)m(ulti-dimensional)d(transform)j(follo)m(ws.)150 4478
6512
y Fr(R)-5 b(e)g(al)35 b(to)e(c)-5 b(omplex)35 b(\(forwar)-5
6513
b(d\))36 b(tr)-5 b(ansform.)44 b Fv(Let)32 b Fm(X)38
6514
b Fv(b)s(e)30 b(a)h Fm(d)p Fv(-dimensional)e(real)i(arra)m(y)g(whose)g
6515
(elemen)m(ts)150 4588 y(are)g Fm(X)7 b Fv([)p Fm(j)446
6516
4602 y Fo(1)484 4588 y Fm(;)15 b(j)561 4602 y Fo(2)599
6517
4588 y Fm(;)g(:)g(:)g(:)i(;)e(j)838 4602 y Fl(d)877 4588
6518
y Fv(],)31 b(where)f(0)c Ft(\024)f Fm(j)1425 4602 y Fl(s)1486
6519
4588 y Fm(<)g(n)1637 4602 y Fl(s)1703 4588 y Fv(for)30
6520
b(all)f Fm(s)c Ft(2)g(f)p Fv(1)p Fm(;)15 b Fv(2)p Fm(;)g(:)g(:)g(:)k(;)
6521
c(d)p Ft(g)p Fv(.)42 b(Let)31 b(also)f Fm(!)3062 4602
6522
y Fl(s)3122 4588 y Fv(=)c Fm(e)3261 4555 y Fo(2)p Fl(\031)3335
6523
4510 y Fk(p)p 3389 4510 85 3 v 3389 4555 a(\000)p Fo(1)p
6524
Fl(=n)3549 4563 y Fe(s)3586 4588 y Fv(,)k(for)150 4698
6525
y(all)60 b Fm(s)24 b Ft(2)h(f)p Fv(1)p Fm(;)15 b Fv(2)p
6526
Fm(;)g(:)g(:)g(:)k(;)c(d)p Ft(g)p Fv(.)275 4838 y(The)24
6527
b(real)g(to)h(complex)g(transform)e(computes)i(a)g(complex)f(arra)m(y)i
6528
Fm(Y)20 b Fv(,)26 b(whose)e(structure)g(is)g(the)h(same)150
6529
4947 y(as)31 b(that)g(of)f Fm(X)7 b Fv(,)31 b(de\014ned)e(b)m(y)534
6530
5258 y Fm(Y)20 b Fv([)p Fm(i)663 5272 y Fo(1)701 5258
6531
y Fm(;)15 b(i)772 5272 y Fo(2)810 5258 y Fm(;)g(:)g(:)g(:)i(;)e(i)1043
6532
5272 y Fl(d)1082 5258 y Fv(])26 b(=)1229 5151 y Fl(n)1270
6533
5159 y Fd(1)1302 5151 y Fk(\000)p Fo(1)1248 5177 y Fg(X)1236
6534
5354 y Fl(j)1263 5362 y Fd(1)1296 5354 y Fo(=0)1402 5151
6535
y Fl(n)1443 5159 y Fd(2)1476 5151 y Fk(\000)p Fo(1)1421
6536
5177 y Fg(X)1409 5354 y Fl(j)1436 5362 y Fd(2)1469 5354
6537
y Fo(=0)1576 5258 y Ft(\001)15 b(\001)g(\001)1697 5150
6538
y Fl(n)1738 5159 y Fe(d)1773 5150 y Fk(\000)p Fo(1)1717
6539
5177 y Fg(X)1704 5354 y Fl(j)1731 5363 y Fe(d)1767 5354
6540
y Fo(=0)1873 5258 y Fm(X)7 b Fv([)p Fm(j)2017 5272 y
6541
Fo(1)2055 5258 y Fm(;)15 b(j)2132 5272 y Fo(2)2170 5258
6542
y Fm(;)g(:)g(:)g(:)i(;)e(j)2409 5272 y Fl(d)2449 5258
6543
y Fv(])p Fm(!)2534 5215 y Fk(\000)p Fl(i)2609 5223 y
6544
Fd(1)2642 5215 y Fl(j)2669 5223 y Fd(1)2531 5277 y Fo(1)2706
6545
5258 y Fm(!)2766 5215 y Fk(\000)p Fl(i)2841 5223 y Fd(2)2873
6546
5215 y Fl(j)2900 5223 y Fd(2)2763 5277 y Fo(2)2952 5258
6547
y Ft(\001)g(\001)g(\001)i Fm(!)3134 5215 y Fk(\000)p
6548
Fl(i)3209 5224 y Fe(d)3244 5215 y Fl(j)3271 5224 y Fe(d)3131
6549
5280 y Fl(d)3340 5258 y Fm(:)p eop end
6448
34 35 bop 150 -116 a Fu(34)3232 b(FFTW)150 299 y(the)37
6449
b(real)g(data\).)63 b(The)36 b(forw)m(ard)h(transform)f(is)h
6450
(real-to-complex)h(and)e(the)i(bac)m(kw)m(ard)f(transform)g(is)150
6451
408 y(complex-to-real.)275 541 y(The)29 b(exact)j(mathematical)f
6452
(de\014nition)d(of)j(our)e(real)h(m)m(ulti-dimensional)d(transform)j
6453
(follo)m(ws.)150 674 y Fq(R)-5 b(e)g(al)35 b(to)e(c)-5
6454
b(omplex)35 b(\(forwar)-5 b(d\))36 b(tr)-5 b(ansform.)44
6455
b Fu(Let)32 b Fl(X)38 b Fu(b)s(e)30 b(a)h Fl(d)p Fu(-dimensional)e
6456
(real)i(arra)m(y)g(whose)g(elemen)m(ts)150 784 y(are)g
6457
Fl(X)7 b Fu([)p Fl(j)446 798 y Fn(1)484 784 y Fl(;)15
6458
b(j)561 798 y Fn(2)599 784 y Fl(;)g(:)g(:)g(:)i(;)e(j)838
6459
798 y Fk(d)877 784 y Fu(],)31 b(where)f(0)c Fs(\024)f
6460
Fl(j)1425 798 y Fk(s)1486 784 y Fl(<)g(n)1637 798 y Fk(s)1703
6461
784 y Fu(for)30 b(all)f Fl(s)c Fs(2)g(f)p Fu(1)p Fl(;)15
6462
b Fu(2)p Fl(;)g(:)g(:)g(:)k(;)c(d)p Fs(g)p Fu(.)42 b(Let)31
6463
b(also)f Fl(!)3062 798 y Fk(s)3122 784 y Fu(=)c Fl(e)3261
6464
751 y Fn(2)p Fk(\031)3335 706 y Fj(p)p 3389 706 85 3
6465
v 3389 751 a(\000)p Fn(1)p Fk(=n)3549 759 y Fg(s)3586
6466
784 y Fu(,)k(for)150 893 y(all)60 b Fl(s)24 b Fs(2)h(f)p
6467
Fu(1)p Fl(;)15 b Fu(2)p Fl(;)g(:)g(:)g(:)k(;)c(d)p Fs(g)p
6468
Fu(.)275 1026 y(The)24 b(real)g(to)h(complex)g(transform)e(computes)i
6469
(a)g(complex)f(arra)m(y)i Fl(Y)20 b Fu(,)26 b(whose)e(structure)g(is)g
6470
(the)h(same)150 1136 y(as)31 b(that)g(of)f Fl(X)7 b Fu(,)31
6471
b(de\014ned)e(b)m(y)534 1430 y Fl(Y)20 b Fu([)p Fl(i)663
6472
1444 y Fn(1)701 1430 y Fl(;)15 b(i)772 1444 y Fn(2)810
6473
1430 y Fl(;)g(:)g(:)g(:)i(;)e(i)1043 1444 y Fk(d)1082
6474
1430 y Fu(])26 b(=)1229 1324 y Fk(n)1270 1332 y Ff(1)1302
6475
1324 y Fj(\000)p Fn(1)1248 1350 y Fh(X)1236 1526 y Fk(j)1263
6476
1534 y Ff(1)1296 1526 y Fn(=0)1402 1324 y Fk(n)1443 1332
6477
y Ff(2)1476 1324 y Fj(\000)p Fn(1)1421 1350 y Fh(X)1409
6478
1526 y Fk(j)1436 1534 y Ff(2)1469 1526 y Fn(=0)1576 1430
6479
y Fs(\001)15 b(\001)g(\001)1697 1323 y Fk(n)1738 1332
6480
y Fg(d)1773 1323 y Fj(\000)p Fn(1)1717 1350 y Fh(X)1704
6481
1526 y Fk(j)1731 1535 y Fg(d)1767 1526 y Fn(=0)1873 1430
6482
y Fl(X)7 b Fu([)p Fl(j)2017 1444 y Fn(1)2055 1430 y Fl(;)15
6483
b(j)2132 1444 y Fn(2)2170 1430 y Fl(;)g(:)g(:)g(:)i(;)e(j)2409
6484
1444 y Fk(d)2449 1430 y Fu(])p Fl(!)2534 1388 y Fj(\000)p
6485
Fk(i)2609 1396 y Ff(1)2642 1388 y Fk(j)2669 1396 y Ff(1)2531
6486
1450 y Fn(1)2706 1430 y Fl(!)2766 1388 y Fj(\000)p Fk(i)2841
6487
1396 y Ff(2)2873 1388 y Fk(j)2900 1396 y Ff(2)2763 1450
6488
y Fn(2)2952 1430 y Fs(\001)g(\001)g(\001)i Fl(!)3134
6489
1388 y Fj(\000)p Fk(i)3209 1397 y Fg(d)3244 1388 y Fk(j)3271
6490
1397 y Fg(d)3131 1453 y Fk(d)3340 1430 y Fl(:)275 1693
6491
y Fu(The)26 b(output)g(arra)m(y)h Fl(Y)46 b Fu(enjo)m(ys)27
6551
TeXDict begin 34 35 bop 150 -116 a Fv(34)3232 b(FFTW)275
6552
299 y(The)26 b(output)g(arra)m(y)h Fm(Y)46 b Fv(enjo)m(ys)27
6492
6553
b(a)g(m)m(ultidimensional)22 b(hermitian)j(symmetry)-8
6493
b(,)27 b(that)g(is,)g(the)f(iden)m(tit)m(y)150 1802 y
6494
Fl(Y)20 b Fu([)p Fl(i)279 1816 y Fn(1)317 1802 y Fl(;)15
6495
b(i)388 1816 y Fn(2)426 1802 y Fl(;)g(:)g(:)g(:)h(;)f(i)658
6496
1816 y Fk(d)698 1802 y Fu(])28 b(=)g Fl(Y)20 b Fu([)p
6497
Fl(n)1003 1816 y Fn(1)1062 1802 y Fs(\000)h Fl(i)1185
6498
1816 y Fn(1)1223 1802 y Fl(;)15 b(n)1318 1816 y Fn(2)1376
6499
1802 y Fs(\000)21 b Fl(i)1499 1816 y Fn(2)1537 1802 y
6500
Fl(;)15 b(:)g(:)g(:)h(;)f(n)1793 1816 y Fk(d)1854 1802
6501
y Fs(\000)21 b Fl(i)1977 1816 y Fk(d)2016 1802 y Fu(])2041
6502
1769 y Fj(\003)2111 1802 y Fu(holds)31 b(for)h(all)f(0)e
6503
Fs(\024)f Fl(i)2824 1816 y Fk(s)2888 1802 y Fl(<)g(n)3042
6504
1816 y Fk(s)3077 1802 y Fu(.)46 b(Because)34 b(of)e(this)150
6505
1912 y(symmetry)-8 b(,)29 b Fl(Y)48 b Fu(is)28 b(stored)g(in)g(the)g(p)
6506
s(eculiar)e(w)m(a)m(y)k(describ)s(ed)c(in)h(Section)h(3.5.3)j([Arra)m
6507
(y)e(Dimensions)d(for)150 2021 y(Real)k(Multi-dimensional)d(T)-8
6508
b(ransforms],)30 b(page)h(32.)150 2154 y Fq(Complex)44
6509
b(to)f(r)-5 b(e)g(al)44 b(\(b)-5 b(ackwar)g(d\))45 b(tr)-5
6510
b(ansform.)74 b Fu(Let)42 b Fl(X)48 b Fu(b)s(e)41 b(a)g
6511
Fl(d)p Fu(-dimensional)e(complex)i(arra)m(y)g(whose)150
6512
2264 y(elemen)m(ts)f(are)h Fl(X)7 b Fu([)p Fl(j)837 2278
6513
y Fn(1)875 2264 y Fl(;)15 b(j)952 2278 y Fn(2)990 2264
6514
y Fl(;)g(:)g(:)g(:)i(;)e(j)1229 2278 y Fk(d)1268 2264
6515
y Fu(],)43 b(where)c(0)j Fs(\024)f Fl(j)1869 2278 y Fk(s)1946
6516
2264 y Fl(<)g(n)2113 2278 y Fk(s)2188 2264 y Fu(for)e(all)g
6517
Fl(s)i Fs(2)g(f)p Fu(1)p Fl(;)15 b Fu(2)p Fl(;)g(:)g(:)g(:)j(;)d(d)p
6518
Fs(g)p Fu(.)71 b(The)39 b(arra)m(y)i Fl(X)150 2373 y
6519
Fu(m)m(ust)33 b(b)s(e)f(hermitian,)f(that)i(is,)g(the)g(iden)m(tit)m(y)
6520
f Fl(X)7 b Fu([)p Fl(j)1906 2387 y Fn(1)1944 2373 y Fl(;)15
6521
b(j)2021 2387 y Fn(2)2059 2373 y Fl(;)g(:)g(:)g(:)i(;)e(j)2298
6522
2387 y Fk(d)2337 2373 y Fu(])30 b(=)f Fl(X)7 b Fu([)p
6523
Fl(n)2654 2387 y Fn(1)2713 2373 y Fs(\000)21 b Fl(j)2842
6524
2387 y Fn(1)2880 2373 y Fl(;)15 b(n)2975 2387 y Fn(2)3034
6525
2373 y Fs(\000)21 b Fl(j)3163 2387 y Fn(2)3201 2373 y
6526
Fl(;)15 b(:)g(:)g(:)i(;)e(n)3458 2387 y Fk(d)3518 2373
6527
y Fs(\000)21 b Fl(j)3647 2387 y Fk(d)3687 2373 y Fu(])3712
6528
2340 y Fj(\003)150 2483 y Fu(m)m(ust)39 b(hold)e(for)i(all)f(0)i
6529
Fs(\024)f Fl(j)1109 2497 y Fk(s)1184 2483 y Fl(<)g(n)1349
6530
2497 y Fk(s)1384 2483 y Fu(.)66 b(Moreo)m(v)m(er,)44
6531
b Fl(X)i Fu(m)m(ust)39 b(b)s(e)f(stored)h(in)f(memory)g(in)g(the)h(p)s
6532
(eculiar)150 2593 y(w)m(a)m(y)32 b(describ)s(ed)d(in)h(Section)h(3.5.3)
6533
i([Arra)m(y)e(Dimensions)e(for)i(Real)g(Multi-dimensional)d(T)-8
6534
b(ransforms],)150 2702 y(page)31 b(32.)275 2835 y(Let)f
6535
Fl(!)494 2849 y Fk(s)554 2835 y Fu(=)25 b Fl(e)692 2802
6536
y Fn(2)p Fk(\031)766 2757 y Fj(p)p 821 2757 V 45 x(\000)p
6537
Fn(1)p Fk(=n)981 2810 y Fg(s)1017 2835 y Fu(,)30 b(for)f(all)58
6538
b Fl(s)25 b Fs(2)g(f)p Fu(1)p Fl(;)15 b Fu(2)p Fl(;)g(:)g(:)g(:)j(;)d
6539
(d)p Fs(g)p Fu(.)42 b(The)29 b(complex)g(to)i(real)e(transform)g
6540
(computes)h(a)150 2944 y(real)g(arra)m(y)h Fl(Y)20 b
6541
Fu(,)30 b(whose)h(structure)f(is)f(the)h(same)h(as)g(that)g(of)f
6542
Fl(X)7 b Fu(,)31 b(de\014ned)f(b)m(y)612 3239 y Fl(Y)20
6543
b Fu([)p Fl(i)741 3253 y Fn(1)779 3239 y Fl(;)15 b(i)850
6544
3253 y Fn(2)888 3239 y Fl(;)g(:)g(:)g(:)i(;)e(i)1121
6545
3253 y Fk(d)1160 3239 y Fu(])25 b(=)1306 3133 y Fk(n)1347
6546
3141 y Ff(1)1380 3133 y Fj(\000)p Fn(1)1326 3158 y Fh(X)1314
6547
3335 y Fk(j)1341 3343 y Ff(1)1374 3335 y Fn(=0)1480 3133
6548
y Fk(n)1521 3141 y Ff(2)1553 3133 y Fj(\000)p Fn(1)1499
6549
3158 y Fh(X)1487 3335 y Fk(j)1514 3343 y Ff(2)1547 3335
6550
y Fn(=0)1654 3239 y Fs(\001)15 b(\001)g(\001)1775 3132
6551
y Fk(n)1816 3141 y Fg(d)1851 3132 y Fj(\000)p Fn(1)1795
6552
3158 y Fh(X)1782 3335 y Fk(j)1809 3344 y Fg(d)1844 3335
6553
y Fn(=0)1951 3239 y Fl(X)7 b Fu([)p Fl(j)2095 3253 y
6554
Fn(1)2133 3239 y Fl(;)15 b(j)2210 3253 y Fn(2)2248 3239
6555
y Fl(;)g(:)g(:)g(:)i(;)e(j)2487 3253 y Fk(d)2526 3239
6556
y Fu(])p Fl(!)2611 3197 y Fk(i)2634 3205 y Ff(1)2667
6557
3197 y Fk(j)2694 3205 y Ff(1)2608 3259 y Fn(1)2731 3239
6558
y Fl(!)2791 3197 y Fk(i)2814 3205 y Ff(2)2847 3197 y
6559
Fk(j)2874 3205 y Ff(2)2788 3259 y Fn(2)2926 3239 y Fs(\001)g(\001)g
6560
(\001)i Fl(!)3108 3197 y Fk(i)3131 3206 y Fg(d)3166 3197
6561
y Fk(j)3193 3206 y Fg(d)3105 3262 y Fk(d)3263 3239 y
6562
Fl(:)275 3507 y Fu(\(That)30 b Fl(Y)50 b Fu(is)30 b(real)g(is)f(not)i
6563
(mean)m(t)g(to)g(b)s(e)f(ob)m(vious,)g(although)g(the)g(pro)s(of)g(is)f
6564
(easy)-8 b(.\))275 3639 y(Computing)26 b(the)i(forw)m(ard)f(transform)g
6565
(follo)m(w)m(ed)h(b)m(y)g(the)g(bac)m(kw)m(ard)g(transform)f(will)f(m)m
6566
(ultiply)f(the)150 3749 y(arra)m(y)31 b(b)m(y)514 3685
6567
y Fh(Q)593 3705 y Fk(d)593 3772 y(s)p Fn(=1)727 3749
6568
y Fl(n)782 3763 y Fk(d)821 3749 y Fu(.)150 4001 y Ft(3.6)68
6569
b(Wisdom)45 b(Reference)150 4278 y Fi(3.6.1)63 b(Exp)s(orting)41
6570
b(Wisdom)390 4463 y Fo(#include)46 b(<fftw.h>)390 4671
6554
b(,)27 b(that)g(is,)g(the)f(iden)m(tit)m(y)150 408 y
6555
Fm(Y)20 b Fv([)p Fm(i)279 422 y Fo(1)317 408 y Fm(;)15
6556
b(i)388 422 y Fo(2)426 408 y Fm(;)g(:)g(:)g(:)h(;)f(i)658
6557
422 y Fl(d)698 408 y Fv(])28 b(=)g Fm(Y)20 b Fv([)p Fm(n)1003
6558
422 y Fo(1)1062 408 y Ft(\000)h Fm(i)1185 422 y Fo(1)1223
6559
408 y Fm(;)15 b(n)1318 422 y Fo(2)1376 408 y Ft(\000)21
6560
b Fm(i)1499 422 y Fo(2)1537 408 y Fm(;)15 b(:)g(:)g(:)h(;)f(n)1793
6561
422 y Fl(d)1854 408 y Ft(\000)21 b Fm(i)1977 422 y Fl(d)2016
6562
408 y Fv(])2041 375 y Fk(\003)2111 408 y Fv(holds)31
6563
b(for)h(all)f(0)e Ft(\024)f Fm(i)2824 422 y Fl(s)2888
6564
408 y Fm(<)g(n)3042 422 y Fl(s)3077 408 y Fv(.)46 b(Because)34
6565
b(of)e(this)150 518 y(symmetry)-8 b(,)29 b Fm(Y)48 b
6566
Fv(is)28 b(stored)g(in)g(the)g(p)s(eculiar)e(w)m(a)m(y)k(describ)s(ed)c
6567
(in)h(Section)h(3.5.3)j([Arra)m(y)e(Dimensions)d(for)150
6568
628 y(Real)k(Multi-dimensional)d(T)-8 b(ransforms],)30
6569
b(page)h(32.)150 761 y Fr(Complex)44 b(to)f(r)-5 b(e)g(al)44
6570
b(\(b)-5 b(ackwar)g(d\))45 b(tr)-5 b(ansform.)74 b Fv(Let)42
6571
b Fm(X)48 b Fv(b)s(e)41 b(a)g Fm(d)p Fv(-dimensional)e(complex)i(arra)m
6572
(y)g(whose)150 870 y(elemen)m(ts)f(are)h Fm(X)7 b Fv([)p
6573
Fm(j)837 884 y Fo(1)875 870 y Fm(;)15 b(j)952 884 y Fo(2)990
6574
870 y Fm(;)g(:)g(:)g(:)i(;)e(j)1229 884 y Fl(d)1268 870
6575
y Fv(],)43 b(where)c(0)j Ft(\024)f Fm(j)1869 884 y Fl(s)1946
6576
870 y Fm(<)g(n)2113 884 y Fl(s)2188 870 y Fv(for)e(all)g
6577
Fm(s)i Ft(2)g(f)p Fv(1)p Fm(;)15 b Fv(2)p Fm(;)g(:)g(:)g(:)j(;)d(d)p
6578
Ft(g)p Fv(.)71 b(The)39 b(arra)m(y)i Fm(X)150 980 y Fv(m)m(ust)33
6579
b(b)s(e)f(hermitian,)f(that)i(is,)g(the)g(iden)m(tit)m(y)f
6580
Fm(X)7 b Fv([)p Fm(j)1906 994 y Fo(1)1944 980 y Fm(;)15
6581
b(j)2021 994 y Fo(2)2059 980 y Fm(;)g(:)g(:)g(:)i(;)e(j)2298
6582
994 y Fl(d)2337 980 y Fv(])30 b(=)f Fm(X)7 b Fv([)p Fm(n)2654
6583
994 y Fo(1)2713 980 y Ft(\000)21 b Fm(j)2842 994 y Fo(1)2880
6584
980 y Fm(;)15 b(n)2975 994 y Fo(2)3034 980 y Ft(\000)21
6585
b Fm(j)3163 994 y Fo(2)3201 980 y Fm(;)15 b(:)g(:)g(:)i(;)e(n)3458
6586
994 y Fl(d)3518 980 y Ft(\000)21 b Fm(j)3647 994 y Fl(d)3687
6587
980 y Fv(])3712 947 y Fk(\003)150 1090 y Fv(m)m(ust)39
6588
b(hold)e(for)i(all)f(0)i Ft(\024)f Fm(j)1109 1104 y Fl(s)1184
6589
1090 y Fm(<)g(n)1349 1104 y Fl(s)1384 1090 y Fv(.)66
6590
b(Moreo)m(v)m(er,)44 b Fm(X)i Fv(m)m(ust)39 b(b)s(e)f(stored)h(in)f
6591
(memory)g(in)g(the)h(p)s(eculiar)150 1199 y(w)m(a)m(y)32
6592
b(describ)s(ed)d(in)h(Section)h(3.5.3)i([Arra)m(y)e(Dimensions)e(for)i
6593
(Real)g(Multi-dimensional)d(T)-8 b(ransforms],)150 1309
6594
y(page)31 b(32.)275 1442 y(Let)f Fm(!)494 1456 y Fl(s)554
6595
1442 y Fv(=)25 b Fm(e)692 1409 y Fo(2)p Fl(\031)766 1364
6596
y Fk(p)p 821 1364 85 3 v 45 x(\000)p Fo(1)p Fl(=n)981
6597
1417 y Fe(s)1017 1442 y Fv(,)30 b(for)f(all)58 b Fm(s)25
6598
b Ft(2)g(f)p Fv(1)p Fm(;)15 b Fv(2)p Fm(;)g(:)g(:)g(:)j(;)d(d)p
6599
Ft(g)p Fv(.)42 b(The)29 b(complex)g(to)i(real)e(transform)g(computes)h
6600
(a)150 1552 y(real)g(arra)m(y)h Fm(Y)20 b Fv(,)30 b(whose)h(structure)f
6601
(is)f(the)h(same)h(as)g(that)g(of)f Fm(X)7 b Fv(,)31
6602
b(de\014ned)f(b)m(y)612 1847 y Fm(Y)20 b Fv([)p Fm(i)741
6603
1861 y Fo(1)779 1847 y Fm(;)15 b(i)850 1861 y Fo(2)888
6604
1847 y Fm(;)g(:)g(:)g(:)i(;)e(i)1121 1861 y Fl(d)1160
6605
1847 y Fv(])25 b(=)1306 1740 y Fl(n)1347 1748 y Fd(1)1380
6606
1740 y Fk(\000)p Fo(1)1326 1766 y Fg(X)1314 1943 y Fl(j)1341
6607
1951 y Fd(1)1374 1943 y Fo(=0)1480 1740 y Fl(n)1521 1748
6608
y Fd(2)1553 1740 y Fk(\000)p Fo(1)1499 1766 y Fg(X)1487
6609
1943 y Fl(j)1514 1951 y Fd(2)1547 1943 y Fo(=0)1654 1847
6610
y Ft(\001)15 b(\001)g(\001)1775 1740 y Fl(n)1816 1749
6611
y Fe(d)1851 1740 y Fk(\000)p Fo(1)1795 1766 y Fg(X)1782
6612
1943 y Fl(j)1809 1952 y Fe(d)1844 1943 y Fo(=0)1951 1847
6613
y Fm(X)7 b Fv([)p Fm(j)2095 1861 y Fo(1)2133 1847 y Fm(;)15
6614
b(j)2210 1861 y Fo(2)2248 1847 y Fm(;)g(:)g(:)g(:)i(;)e(j)2487
6615
1861 y Fl(d)2526 1847 y Fv(])p Fm(!)2611 1804 y Fl(i)2634
6616
1812 y Fd(1)2667 1804 y Fl(j)2694 1812 y Fd(1)2608 1866
6617
y Fo(1)2731 1847 y Fm(!)2791 1804 y Fl(i)2814 1812 y
6618
Fd(2)2847 1804 y Fl(j)2874 1812 y Fd(2)2788 1866 y Fo(2)2926
6619
1847 y Ft(\001)g(\001)g(\001)i Fm(!)3108 1804 y Fl(i)3131
6620
1813 y Fe(d)3166 1804 y Fl(j)3193 1813 y Fe(d)3105 1869
6621
y Fl(d)3263 1847 y Fm(:)275 2117 y Fv(\(That)30 b Fm(Y)50
6622
b Fv(is)30 b(real)g(is)f(not)i(mean)m(t)g(to)g(b)s(e)f(ob)m(vious,)g
6623
(although)g(the)g(pro)s(of)g(is)f(easy)-8 b(.\))275 2250
6624
y(Computing)26 b(the)i(forw)m(ard)f(transform)g(follo)m(w)m(ed)h(b)m(y)
6625
g(the)g(bac)m(kw)m(ard)g(transform)f(will)f(m)m(ultiply)f(the)150
6626
2359 y(arra)m(y)31 b(b)m(y)514 2295 y Fg(Q)593 2316 y
6627
Fl(d)593 2382 y(s)p Fo(=1)727 2359 y Fm(n)782 2373 y
6628
Fl(d)821 2359 y Fv(.)150 2613 y Fu(3.6)68 b(Wisdom)45
6629
b(Reference)150 2891 y Fh(3.6.1)63 b(Exp)s(orting)41
6630
b(Wisdom)390 3053 y Fp(#include)46 b(<fftw.h>)390 3261
6571
6631
y(void)h(fftw_export_wisdom\(void)41 b(\(*emitter\)\(char)j(c,)j(void)g
6572
(*\),)f(void)h(*data\);)390 4775 y(void)g(fftw_export_wisdom_to_f)o
6573
(ile\()o(FIL)o(E)42 b(*output_file\);)390 4878 y(char)47
6632
(*\),)f(void)h(*data\);)390 3365 y(void)g(fftw_export_wisdom_to_f)o
6633
(ile\()o(FIL)o(E)42 b(*output_file\);)390 3468 y(char)47
6574
6634
b(*fftw_export_wisdom_to_)o(stri)o(ng\()o(void)o(\);)275
6575
5011 y Fu(These)35 b(functions)g(allo)m(w)g(y)m(ou)i(to)f(exp)s(ort)g
6576
(all)f(curren)m(tly)g(accum)m(ulated)i Fo(wisdom)d Fu(in)g(a)j(form)e
6577
(from)150 5121 y(whic)m(h)g(it)g(can)i(b)s(e)e(later)h(imp)s(orted)f
6635
3602 y Fv(These)35 b(functions)g(allo)m(w)g(y)m(ou)i(to)f(exp)s(ort)g
6636
(all)f(curren)m(tly)g(accum)m(ulated)i Fp(wisdom)d Fv(in)g(a)j(form)e
6637
(from)150 3711 y(whic)m(h)g(it)g(can)i(b)s(e)e(later)h(imp)s(orted)f
6578
6638
(and)g(restored,)j(ev)m(en)f(during)c(a)k(separate)g(run)d(of)j(the)f
6579
(program.)150 5230 y(\(See)c(Section)e(2.6)i([W)-8 b(ords)32
6639
(program.)150 3821 y(\(See)c(Section)e(2.6)i([W)-8 b(ords)32
6580
6640
b(of)f(Wisdom],)g(page)g(13.\))44 b(The)31 b(curren)m(t)f(store)i(of)f
6581
Fo(wisdom)e Fu(is)h(not)h(a\013ected)150 5340 y(b)m(y)f(calling)f(an)m
6582
(y)i(of)f(these)h(routines.)p eop
6584
35 36 bop 150 -116 a Fu(Chapter)30 b(3:)41 b(FFTW)31
6585
b(Reference)2354 b(35)275 299 y Fo(fftw_export_wisdom)34
6586
b Fu(exp)s(orts)39 b(the)h Fo(wisdom)e Fu(to)i(an)m(y)g(output)f
6587
(medium,)i(as)e(sp)s(eci\014ed)f(b)m(y)i(the)150 408
6588
y(callbac)m(k)33 b(function)f Fo(emitter)p Fu(.)47 b
6589
Fo(emitter)32 b Fu(is)g(a)h Fo(putc)p Fu(-lik)m(e)f(function)g(that)i
6590
(writes)e(the)i(c)m(haracter)g Fo(c)f Fu(to)150 518 y(some)27
6591
b(output;)g(its)f(second)g(parameter)g(is)g(the)g Fo(data)f
6592
Fu(p)s(oin)m(ter)g(passed)h(to)h Fo(fftw_export_wisdom)p
6593
Fu(.)34 b(F)-8 b(or)150 628 y(con)m(v)m(enience,)32 b(the)e(follo)m
6594
(wing)f(t)m(w)m(o)j(\\wrapp)s(er")d(routines)h(are)g(pro)m(vided:)275
6595
762 y Fo(fftw_export_wisdom_to_f)o(ile)k Fu(writes)40
6596
b(the)g Fo(wisdom)f Fu(to)j(the)f(curren)m(t)f(p)s(osition)f(in)g
6597
Fo(output_)150 872 y(file)p Fu(,)28 b(whic)m(h)g(should)f(b)s(e)i(op)s
6641
Fp(wisdom)e Fv(is)h(not)h(a\013ected)150 3930 y(b)m(y)f(calling)f(an)m
6642
(y)i(of)f(these)h(routines.)275 4064 y Fp(fftw_export_wisdom)j
6643
Fv(exp)s(orts)39 b(the)h Fp(wisdom)e Fv(to)i(an)m(y)g(output)f(medium,)
6644
i(as)e(sp)s(eci\014ed)f(b)m(y)i(the)150 4173 y(callbac)m(k)33
6645
b(function)f Fp(emitter)p Fv(.)47 b Fp(emitter)32 b Fv(is)g(a)h
6646
Fp(putc)p Fv(-lik)m(e)f(function)g(that)i(writes)e(the)i(c)m(haracter)g
6647
Fp(c)f Fv(to)150 4283 y(some)27 b(output;)g(its)f(second)g(parameter)g
6648
(is)g(the)g Fp(data)f Fv(p)s(oin)m(ter)g(passed)h(to)h
6649
Fp(fftw_export_wisdom)p Fv(.)34 b(F)-8 b(or)150 4392
6650
y(con)m(v)m(enience,)32 b(the)e(follo)m(wing)f(t)m(w)m(o)j(\\wrapp)s
6651
(er")d(routines)h(are)g(pro)m(vided:)275 4526 y Fp
6652
(fftw_export_wisdom_to_f)o(ile)k Fv(writes)40 b(the)g
6653
Fp(wisdom)f Fv(to)j(the)f(curren)m(t)f(p)s(osition)f(in)g
6654
Fp(output_)150 4635 y(file)p Fv(,)28 b(whic)m(h)g(should)f(b)s(e)i(op)s
6598
6655
(en)f(with)g(write)g(p)s(ermission.)37 b(Up)s(on)28 b(exit,)i(the)f
6599
(\014le)f(remains)g(op)s(en)g(and)h(is)150 981 y(p)s(ositioned)f(at)j
6600
(the)g(end)f(of)g(the)h Fo(wisdom)e Fu(data.)275 1116
6601
y Fo(fftw_export_wisdom_to_s)o(tri)o(ng)22 b Fu(returns)27
6602
b(a)h(p)s(oin)m(ter)f(to)i(a)f Fo(NULL)p Fu(-terminated)f(string)g
6603
(holding)150 1225 y(the)37 b Fo(wisdom)e Fu(data.)60
6656
(\014le)f(remains)g(op)s(en)g(and)h(is)150 4745 y(p)s(ositioned)f(at)j
6657
(the)g(end)f(of)g(the)h Fp(wisdom)e Fv(data.)275 4878
6658
y Fp(fftw_export_wisdom_to_s)o(tri)o(ng)22 b Fv(returns)27
6659
b(a)h(p)s(oin)m(ter)f(to)i(a)f Fp(NULL)p Fv(-terminated)f(string)g
6660
(holding)150 4988 y(the)37 b Fp(wisdom)e Fv(data.)60
6604
6661
b(This)34 b(string)i(is)f(dynamically)g(allo)s(cated,)j(and)e(it)g(is)g
6605
(the)g(resp)s(onsibilit)m(y)d(of)k(the)150 1335 y(caller)30
6606
b(to)h(deallo)s(cate)g(it)e(with)h Fo(fftw_free)d Fu(when)j(it)g(is)f
6607
(no)h(longer)g(needed.)275 1469 y(All)24 b(of)j(these)g(routines)e(exp)
6662
(the)g(resp)s(onsibilit)m(y)d(of)k(the)150 5097 y(caller)30
6663
b(to)h(deallo)s(cate)g(it)e(with)h Fp(fftw_free)d Fv(when)j(it)g(is)f
6664
(no)h(longer)g(needed.)275 5230 y(All)24 b(of)j(these)g(routines)e(exp)
6608
6665
s(ort)h(the)g(wisdom)f(in)g(the)i(same)f(format,)i(whic)m(h)d(w)m(e)i
6609
(will)d(not)i(do)s(cumen)m(t)150 1579 y(here)k(except)i(to)f(sa)m(y)g
6666
(will)d(not)i(do)s(cumen)m(t)150 5340 y(here)k(except)i(to)f(sa)m(y)g
6610
6667
(that)g(it)f(is)f(LISP-lik)m(e)g(ASCI)s(I)g(text)i(that)g(is)f
6611
(insensitiv)m(e)e(to)j(white)f(space.)150 1803 y Fi(3.6.2)63
6612
b(Imp)s(orting)41 b(Wisdom)390 1990 y Fo(#include)46
6613
b(<fftw.h>)390 2198 y(fftw_status)f(fftw_import_wisdom\(int)c
6614
(\(*get_input\)\(void)j(*\),)i(void)h(*data\);)390 2301
6615
y(fftw_status)e(fftw_import_wisdom_from)o(_fil)o(e\(FI)o(LE)c
6616
(*input_file\);)390 2405 y(fftw_status)k(fftw_import_wisdom_from)o
6617
(_str)o(ing\()o(con)o(st)d(char)k(*input_string\);)275
6618
2540 y Fu(These)32 b(functions)f(imp)s(ort)g Fo(wisdom)g
6619
Fu(in)m(to)i(a)g(program)f(from)h(data)g(stored)g(b)m(y)f(the)h
6620
Fo(fftw_export_)150 2649 y(wisdom)39 b Fu(functions)g(ab)s(o)m(v)m(e.)
6621
72 b(\(See)41 b(Section)g(2.6)g([W)-8 b(ords)41 b(of)g(Wisdom],)i(page)
6622
e(13.\))73 b(The)40 b(imp)s(orted)150 2759 y Fo(wisdom)29
6623
b Fu(supplemen)m(ts)h(rather)g(than)h(replaces)g(an)m(y)g
6624
Fo(wisdom)f Fu(already)g(accum)m(ulated)i(b)m(y)e(the)i(running)150
6625
2868 y(program)40 b(\(except)i(when)d(there)h(is)g(con\015icting)f
6626
Fo(wisdom)p Fu(,)i(in)e(whic)m(h)g(case)i(the)g(existing)e(wisdom)g(is)
6627
150 2978 y(replaced\).)275 3112 y Fo(fftw_import_wisdom)25
6628
b Fu(imp)s(orts)k Fo(wisdom)g Fu(from)h(an)m(y)h(input)d(medium,)h(as)i
6629
(sp)s(eci\014ed)e(b)m(y)i(the)f(call-)150 3222 y(bac)m(k)25
6630
b(function)d Fo(get_input)p Fu(.)36 b Fo(get_input)22
6631
b Fu(is)h(a)h Fo(getc)p Fu(-lik)m(e)e(function)h(that)h(returns)f(the)h
6632
(next)g(c)m(haracter)150 3332 y(in)30 b(the)h(input;)f(its)g(parameter)
6633
i(is)e(the)h Fo(data)f Fu(p)s(oin)m(ter)g(passed)h(to)h
6634
Fo(fftw_import_wisdom)p Fu(.)38 b(If)30 b(the)i(end)150
6635
3441 y(of)41 b(the)g(input)e(data)i(is)f(reac)m(hed)h(\(whic)m(h)f
6636
(should)f(nev)m(er)i(happ)s(en)e(for)i(v)-5 b(alid)39
6637
b(data\),)44 b(it)d(ma)m(y)g(return)150 3551 y(either)25
6638
b Fo(NULL)g Fu(\(ASCI)s(I)g(0\))i(or)f Fo(EOF)f Fu(\(as)h(de\014ned)f
6639
(in)g Fo(<stdio.h>)p Fu(\).)37 b(F)-8 b(or)27 b(con)m(v)m(enience,)h
6640
(the)e(follo)m(wing)f(t)m(w)m(o)150 3660 y(\\wrapp)s(er")k(routines)h
6641
(are)g(pro)m(vided:)275 3795 y Fo(fftw_import_wisdom_from)o(_fi)o(le)40
6642
b Fu(reads)46 b Fo(wisdom)f Fu(from)h(the)g(curren)m(t)g(p)s(osition)f
6643
(in)g Fo(input_)150 3905 y(file)p Fu(,)30 b(whic)m(h)g(should)f(b)s(e)i
6644
(op)s(en)f(with)g(read)h(p)s(ermission.)39 b(Up)s(on)30
6645
b(exit,)i(the)f(\014le)f(remains)g(op)s(en)g(and)h(is)150
6646
4014 y(p)s(ositioned)d(at)j(the)g(end)f(of)g(the)h Fo(wisdom)e
6647
Fu(data.)275 4149 y Fo(fftw_import_wisdom_from)o(_st)o(ring)52
6648
b Fu(reads)59 b Fo(wisdom)f Fu(from)h(the)g Fo(NULL)p
6649
Fu(-terminated)f(string)150 4258 y Fo(input_string)p
6650
Fu(.)275 4393 y(The)28 b(return)f(v)-5 b(alue)28 b(of)h(these)g
6651
(routines)e(is)h Fo(FFTW_SUCCESS)d Fu(if)i(the)i(wisdom)e(w)m(as)i
6652
(read)f(successfully)-8 b(,)150 4502 y(and)36 b Fo(FFTW_FAILURE)d
6653
Fu(otherwise.)58 b(Note)38 b(that,)g(in)d(all)h(of)g(these)h
6654
(functions,)g(an)m(y)f(data)h(in)e(the)i(input)150 4612
6655
y(stream)29 b(past)g(the)g(end)f(of)h(the)g Fo(wisdom)e
6656
Fu(data)i(is)f(simply)f(ignored)g(\(it)i(is)f(not)h(ev)m(en)g(read)g
6657
(if)f(the)h Fo(wisdom)150 4721 y Fu(data)i(is)e(w)m(ell-formed\).)150
6658
4946 y Fi(3.6.3)63 b(F)-10 b(orgetting)41 b(Wisdom)390
6659
5132 y Fo(#include)46 b(<fftw.h>)390 5340 y(void)h
6660
(fftw_forget_wisdom\(void)o(\);)p eop
6662
36 37 bop 150 -116 a Fu(36)3232 b(FFTW)275 299 y(Calling)39
6663
b Fo(fftw_forget_wisdom)d Fu(causes)42 b(all)e(accum)m(ulated)i
6664
Fo(wisdom)e Fu(to)i(b)s(e)f(discarded)f(and)h(its)150
6665
408 y(asso)s(ciated)30 b(memory)f(to)h(b)s(e)e(freed.)40
6666
b(\(New)30 b Fo(wisdom)d Fu(can)j(still)d(b)s(e)i(gathered)g(subsequen)
6667
m(tly)-8 b(,)29 b(ho)m(w)m(ev)m(er.\))150 666 y Ft(3.7)68
6668
b(Memory)45 b(Allo)t(cator)h(Reference)390 853 y Fo(#include)g
6669
(<fftw.h>)390 1060 y(void)h(*\(*fftw_malloc_hook\))42
6670
b(\(size_t)k(n\);)390 1164 y(void)h(\(*fftw_free_hook\))c(\(void)j
6671
(*p\);)275 1298 y Fu(Whenev)m(er)21 b(it)e(has)i(to)g(allo)s(cate)f
6668
(insensitiv)m(e)e(to)j(white)f(space.)p eop end
6670
TeXDict begin 35 36 bop 150 -116 a Fv(Chapter)30 b(3:)41
6671
b(FFTW)31 b(Reference)2354 b(35)150 299 y Fh(3.6.2)63
6672
b(Imp)s(orting)41 b(Wisdom)390 461 y Fp(#include)46 b(<fftw.h>)390
6673
668 y(fftw_status)f(fftw_import_wisdom\(int)c(\(*get_input\)\(void)j
6674
(*\),)i(void)h(*data\);)390 772 y(fftw_status)e
6675
(fftw_import_wisdom_from)o(_fil)o(e\(FI)o(LE)c(*input_file\);)390
6676
876 y(fftw_status)k(fftw_import_wisdom_from)o(_str)o(ing\()o(con)o(st)d
6677
(char)k(*input_string\);)275 1011 y Fv(These)32 b(functions)f(imp)s
6678
(ort)g Fp(wisdom)g Fv(in)m(to)i(a)g(program)f(from)h(data)g(stored)g(b)
6679
m(y)f(the)h Fp(fftw_export_)150 1121 y(wisdom)39 b Fv(functions)g(ab)s
6680
(o)m(v)m(e.)72 b(\(See)41 b(Section)g(2.6)g([W)-8 b(ords)41
6681
b(of)g(Wisdom],)i(page)e(13.\))73 b(The)40 b(imp)s(orted)150
6682
1230 y Fp(wisdom)29 b Fv(supplemen)m(ts)h(rather)g(than)h(replaces)g
6683
(an)m(y)g Fp(wisdom)f Fv(already)g(accum)m(ulated)i(b)m(y)e(the)i
6684
(running)150 1340 y(program)40 b(\(except)i(when)d(there)h(is)g
6685
(con\015icting)f Fp(wisdom)p Fv(,)i(in)e(whic)m(h)g(case)i(the)g
6686
(existing)e(wisdom)g(is)150 1449 y(replaced\).)275 1584
6687
y Fp(fftw_import_wisdom)25 b Fv(imp)s(orts)k Fp(wisdom)g
6688
Fv(from)h(an)m(y)h(input)d(medium,)h(as)i(sp)s(eci\014ed)e(b)m(y)i(the)
6689
f(call-)150 1694 y(bac)m(k)25 b(function)d Fp(get_input)p
6690
Fv(.)36 b Fp(get_input)22 b Fv(is)h(a)h Fp(getc)p Fv(-lik)m(e)e
6691
(function)h(that)h(returns)f(the)h(next)g(c)m(haracter)150
6692
1804 y(in)30 b(the)h(input;)f(its)g(parameter)i(is)e(the)h
6693
Fp(data)f Fv(p)s(oin)m(ter)g(passed)h(to)h Fp(fftw_import_wisdom)p
6694
Fv(.)38 b(If)30 b(the)i(end)150 1913 y(of)41 b(the)g(input)e(data)i(is)
6695
f(reac)m(hed)h(\(whic)m(h)f(should)f(nev)m(er)i(happ)s(en)e(for)i(v)-5
6696
b(alid)39 b(data\),)44 b(it)d(ma)m(y)g(return)150 2023
6697
y(either)25 b Fp(NULL)g Fv(\(ASCI)s(I)g(0\))i(or)f Fp(EOF)f
6698
Fv(\(as)h(de\014ned)f(in)g Fp(<stdio.h>)p Fv(\).)37 b(F)-8
6699
b(or)27 b(con)m(v)m(enience,)h(the)e(follo)m(wing)f(t)m(w)m(o)150
6700
2132 y(\\wrapp)s(er")k(routines)h(are)g(pro)m(vided:)275
6701
2267 y Fp(fftw_import_wisdom_from)o(_fi)o(le)40 b Fv(reads)46
6702
b Fp(wisdom)f Fv(from)h(the)g(curren)m(t)g(p)s(osition)f(in)g
6703
Fp(input_)150 2377 y(file)p Fv(,)30 b(whic)m(h)g(should)f(b)s(e)i(op)s
6704
(en)f(with)g(read)h(p)s(ermission.)39 b(Up)s(on)30 b(exit,)i(the)f
6705
(\014le)f(remains)g(op)s(en)g(and)h(is)150 2487 y(p)s(ositioned)d(at)j
6706
(the)g(end)f(of)g(the)h Fp(wisdom)e Fv(data.)275 2622
6707
y Fp(fftw_import_wisdom_from)o(_st)o(ring)52 b Fv(reads)59
6708
b Fp(wisdom)f Fv(from)h(the)g Fp(NULL)p Fv(-terminated)f(string)150
6709
2731 y Fp(input_string)p Fv(.)275 2866 y(The)28 b(return)f(v)-5
6710
b(alue)28 b(of)h(these)g(routines)e(is)h Fp(FFTW_SUCCESS)d
6711
Fv(if)i(the)i(wisdom)e(w)m(as)i(read)f(successfully)-8
6712
b(,)150 2976 y(and)36 b Fp(FFTW_FAILURE)d Fv(otherwise.)58
6713
b(Note)38 b(that,)g(in)d(all)h(of)g(these)h(functions,)g(an)m(y)f(data)
6714
h(in)e(the)i(input)150 3085 y(stream)29 b(past)g(the)g(end)f(of)h(the)g
6715
Fp(wisdom)e Fv(data)i(is)f(simply)f(ignored)g(\(it)i(is)f(not)h(ev)m
6716
(en)g(read)g(if)f(the)h Fp(wisdom)150 3195 y Fv(data)i(is)e(w)m
6717
(ell-formed\).)150 3420 y Fh(3.6.3)63 b(F)-10 b(orgetting)41
6718
b(Wisdom)390 3582 y Fp(#include)46 b(<fftw.h>)390 3790
6719
y(void)h(fftw_forget_wisdom\(void)o(\);)275 3925 y Fv(Calling)39
6720
b Fp(fftw_forget_wisdom)d Fv(causes)42 b(all)e(accum)m(ulated)i
6721
Fp(wisdom)e Fv(to)i(b)s(e)f(discarded)f(and)h(its)150
6722
4035 y(asso)s(ciated)30 b(memory)f(to)h(b)s(e)e(freed.)40
6723
b(\(New)30 b Fp(wisdom)d Fv(can)j(still)d(b)s(e)i(gathered)g(subsequen)
6724
m(tly)-8 b(,)29 b(ho)m(w)m(ev)m(er.\))150 4293 y Fu(3.7)68
6725
b(Memory)45 b(Allo)t(cator)h(Reference)390 4455 y Fp(#include)g
6726
(<fftw.h>)390 4663 y(void)h(*\(*fftw_malloc_hook\))42
6727
b(\(size_t)k(n\);)390 4767 y(void)h(\(*fftw_free_hook\))c(\(void)j
6728
(*p\);)275 4902 y Fv(Whenev)m(er)21 b(it)e(has)i(to)g(allo)s(cate)f
6672
6729
(and)g(release)h(memory)-8 b(,)23 b(FFTW)e(ordinarily)c(calls)i
6673
Fo(malloc)g Fu(and)h Fo(free)p Fu(.)150 1408 y(If)25
6674
b Fo(malloc)e Fu(fails,)i(FFTW)h(prin)m(ts)e(an)h(error)g(message)h
6730
Fp(malloc)g Fv(and)h Fp(free)p Fv(.)150 5011 y(If)25
6731
b Fp(malloc)e Fv(fails,)i(FFTW)h(prin)m(ts)e(an)h(error)g(message)h
6675
6732
(and)f(exits.)39 b(This)23 b(b)s(eha)m(vior)h(ma)m(y)i(b)s(e)f
6676
(undesirable)150 1518 y(in)i(some)i(applications.)38
6733
(undesirable)150 5121 y(in)i(some)i(applications.)38
6677
6734
b(Also,)29 b(sp)s(ecial)e(memory-handling)f(functions)h(ma)m(y)i(b)s(e)
6678
e(necessary)i(in)e(certain)150 1627 y(en)m(vironmen)m(ts.)66
6735
e(necessary)i(in)e(certain)150 5230 y(en)m(vironmen)m(ts.)66
6679
6736
b(Consequen)m(tly)-8 b(,)41 b(FFTW)f(pro)m(vides)e(means)h(b)m(y)g
6680
6737
(whic)m(h)e(y)m(ou)j(can)f(install)e(y)m(our)i(o)m(wn)150
6681
1737 y(memory)k(allo)s(cator)g(and)g(tak)m(e)i(whatev)m(er)e
6738
5340 y(memory)k(allo)s(cator)g(and)g(tak)m(e)i(whatev)m(er)e
6682
6739
(error-correcting)h(action)f(y)m(ou)h(\014nd)d(appropriate.)78
6683
b(The)150 1846 y(v)-5 b(ariables)31 b Fo(fftw_malloc_hook)d
6684
Fu(and)k Fo(fftw_free_hook)d Fu(are)k(p)s(oin)m(ters)e(to)i(functions,)
6685
f(and)g(they)h(are)150 1956 y(normally)c Fo(NULL)p Fu(.)42
6686
b(If)31 b(y)m(ou)h(set)g(those)f(v)-5 b(ariables)30 b(to)i(p)s(oin)m(t)
6687
e(to)i(other)g(functions,)e(then)h(FFTW)h(will)c(use)150
6688
2066 y(y)m(our)h(routines)e(instead)h(of)h Fo(malloc)d
6689
Fu(and)i Fo(free)p Fu(.)39 b Fo(fftw_malloc_hook)25 b
6690
Fu(m)m(ust)j(p)s(oin)m(t)g(to)h(a)g Fo(malloc)p Fu(-lik)m(e)150
6691
2175 y(function,)g(and)h Fo(fftw_free_hook)d Fu(m)m(ust)j(p)s(oin)m(t)f
6692
(to)i(a)g Fo(free)p Fu(-lik)m(e)e(function.)150 2433
6693
y Ft(3.8)68 b(Thread)45 b(safet)l(y)275 2625 y Fu(Users)30
6694
b(writing)e(m)m(ulti-threaded)h(programs)h(m)m(ust)h(concern)f
6695
(themselv)m(es)h(with)e(the)i Fp(thread)f(safet)m(y)150
6696
2735 y Fu(of)d(the)g(libraries)d(they)k(use|that)f(is,)g(whether)f(it)h
6697
(is)f(safe)h(to)h(call)e(routines)g(in)g(parallel)f(from)h(m)m(ultiple)
6698
150 2844 y(threads.)39 b(FFTW)29 b(can)e(b)s(e)g(used)g(in)f(suc)m(h)i
6699
(an)f(en)m(vironmen)m(t,)h(but)f(some)h(care)g(m)m(ust)f(b)s(e)g(tak)m
6700
(en)i(b)s(ecause)150 2954 y(certain)21 b(parts)f(of)h(FFTW)g(use)g
6701
(priv)-5 b(ate)20 b(global)g(v)-5 b(ariables)19 b(to)j(share)e(data)h
6702
(b)s(et)m(w)m(een)h(calls.)36 b(In)20 b(particular,)150
6703
3064 y(the)42 b(plan-creation)f(functions)f(share)i(trigonometric)g
6704
(tables)f(and)g(accum)m(ulated)h Fo(wisdom)p Fu(.)74
6705
b(\(Users)150 3173 y(should)37 b(note)j(that)f(these)h(commen)m(ts)g
6706
(only)e(apply)g(to)h(programs)g(using)f(shared-memory)g(threads.)150
6707
3283 y(P)m(arallelism)k(using)g(MPI)h(or)h(fork)m(ed)g(pro)s(cesses)f
6708
(in)m(v)m(olv)m(es)h(a)g(separate)h(address-space)f(and)f(global)150
6709
3392 y(v)-5 b(ariables)29 b(for)h(eac)m(h)i(pro)s(cess,)e(and)g(is)f
6742
TeXDict begin 36 37 bop 150 -116 a Fv(36)3232 b(FFTW)150
6743
299 y(v)-5 b(ariables)31 b Fp(fftw_malloc_hook)d Fv(and)k
6744
Fp(fftw_free_hook)d Fv(are)k(p)s(oin)m(ters)e(to)i(functions,)f(and)g
6745
(they)h(are)150 408 y(normally)c Fp(NULL)p Fv(.)42 b(If)31
6746
b(y)m(ou)h(set)g(those)f(v)-5 b(ariables)30 b(to)i(p)s(oin)m(t)e(to)i
6747
(other)g(functions,)e(then)h(FFTW)h(will)c(use)150 518
6748
y(y)m(our)h(routines)e(instead)h(of)h Fp(malloc)d Fv(and)i
6749
Fp(free)p Fv(.)39 b Fp(fftw_malloc_hook)25 b Fv(m)m(ust)j(p)s(oin)m(t)g
6750
(to)h(a)g Fp(malloc)p Fv(-lik)m(e)150 628 y(function,)g(and)h
6751
Fp(fftw_free_hook)d Fv(m)m(ust)j(p)s(oin)m(t)f(to)i(a)g
6752
Fp(free)p Fv(-lik)m(e)e(function.)150 885 y Fu(3.8)68
6753
b(Thread)45 b(safet)l(y)275 1078 y Fv(Users)30 b(writing)e(m)m
6754
(ulti-threaded)h(programs)h(m)m(ust)h(concern)f(themselv)m(es)h(with)e
6755
(the)i Fq(thread)f(safet)m(y)150 1187 y Fv(of)d(the)g(libraries)d(they)
6756
k(use|that)f(is,)g(whether)f(it)h(is)f(safe)h(to)h(call)e(routines)g
6757
(in)g(parallel)f(from)h(m)m(ultiple)150 1297 y(threads.)39
6758
b(FFTW)29 b(can)e(b)s(e)g(used)g(in)f(suc)m(h)i(an)f(en)m(vironmen)m
6759
(t,)h(but)f(some)h(care)g(m)m(ust)f(b)s(e)g(tak)m(en)i(b)s(ecause)150
6760
1406 y(certain)21 b(parts)f(of)h(FFTW)g(use)g(priv)-5
6761
b(ate)20 b(global)g(v)-5 b(ariables)19 b(to)j(share)e(data)h(b)s(et)m
6762
(w)m(een)h(calls.)36 b(In)20 b(particular,)150 1516 y(the)42
6763
b(plan-creation)f(functions)f(share)i(trigonometric)g(tables)f(and)g
6764
(accum)m(ulated)h Fp(wisdom)p Fv(.)74 b(\(Users)150 1626
6765
y(should)37 b(note)j(that)f(these)h(commen)m(ts)g(only)e(apply)g(to)h
6766
(programs)g(using)f(shared-memory)g(threads.)150 1735
6767
y(P)m(arallelism)k(using)g(MPI)h(or)h(fork)m(ed)g(pro)s(cesses)f(in)m
6768
(v)m(olv)m(es)h(a)g(separate)h(address-space)f(and)f(global)150
6769
1845 y(v)-5 b(ariables)29 b(for)h(eac)m(h)i(pro)s(cess,)e(and)g(is)f
6710
6770
(not)i(susceptible)d(to)j(problems)e(of)i(this)e(sort.\))275
6711
3527 y(The)c(cen)m(tral)i(restriction)e(of)h(FFTW)h(is)e(that)h(it)g
6771
1979 y(The)c(cen)m(tral)i(restriction)e(of)h(FFTW)h(is)e(that)h(it)g
6712
6772
(is)f(not)h(safe)h(to)g(create)g(m)m(ultiple)d(plans)h(in)g(parallel.)
6713
150 3636 y(Y)-8 b(ou)33 b(m)m(ust)e(either)h(create)i(all)c(of)j(y)m
6773
150 2089 y(Y)-8 b(ou)33 b(m)m(ust)e(either)h(create)i(all)c(of)j(y)m
6714
6774
(our)f(plans)e(from)i(a)g(single)f(thread,)h(or)g(instead)g(use)f(a)i
6715
(semaphore,)150 3746 y(m)m(utex,)h(or)f(other)g(mec)m(hanism)f(to)i
6775
(semaphore,)150 2198 y(m)m(utex,)h(or)f(other)g(mec)m(hanism)f(to)i
6716
6776
(ensure)e(that)i(di\013eren)m(t)e(threads)g(don't)h(attempt)h(to)g
6717
(create)g(plans)150 3856 y(at)41 b(the)f(same)h(time.)70
6777
(create)g(plans)150 2308 y(at)41 b(the)f(same)h(time.)70
6718
6778
b(The)40 b(same)h(restriction)e(also)h(holds)f(for)h(destruction)f(of)i
6719
(plans)e(and)g(imp)s(ort-)150 3965 y(ing/forgetting)31
6720
b Fo(wisdom)p Fu(.)39 b(Once)30 b(created,)i(a)e(plan)f(ma)m(y)i
6721
(safely)f(b)s(e)g(used)g(in)f(an)m(y)h(thread.)275 4100
6779
(plans)e(and)g(imp)s(ort-)150 2418 y(ing/forgetting)31
6780
b Fp(wisdom)p Fv(.)39 b(Once)30 b(created,)i(a)e(plan)f(ma)m(y)i
6781
(safely)f(b)s(e)g(used)g(in)f(an)m(y)h(thread.)275 2552
6722
6782
y(The)24 b(actual)h(transform)g(routines)e(in)h(FFTW)i(\()p
6723
Fo(fftw_one)p Fu(,)e(etcetera\))k(are)d(re-en)m(tran)m(t)i(and)d
6724
(thread-)150 4209 y(safe,)i(so)d(it)g(is)g(\014ne)g(to)h(call)f(them)g
6783
Fp(fftw_one)p Fv(,)e(etcetera\))k(are)d(re-en)m(tran)m(t)i(and)d
6784
(thread-)150 2662 y(safe,)i(so)d(it)g(is)g(\014ne)g(to)h(call)f(them)g
6725
6785
(sim)m(ultaneously)f(from)h(m)m(ultiple)e(threads.)38
6726
b(Another)24 b(question)e(arises,)150 4319 y(ho)m(w)m(ev)m(er|is)33
6727
b(it)g(safe)g(to)h(use)e(the)i Fq(same)h(plan)41 b Fu(for)33
6786
b(Another)24 b(question)e(arises,)150 2771 y(ho)m(w)m(ev)m(er|is)33
6787
b(it)g(safe)g(to)h(use)e(the)i Fr(same)h(plan)41 b Fv(for)33
6728
6788
b(m)m(ultiple)e(transforms)h(in)f(parallel?)46 b(\(It)34
6729
b(w)m(ould)e(b)s(e)150 4428 y(unsafe)e(if,)h(for)f(example,)i(the)f
6789
b(w)m(ould)e(b)s(e)150 2881 y(unsafe)e(if,)h(for)f(example,)i(the)f
6730
6790
(plan)e(w)m(ere)j(mo)s(di\014ed)d(in)g(some)j(w)m(a)m(y)f(b)m(y)g(the)g
6731
(transform.\))43 b(W)-8 b(e)32 b(address)150 4538 y(this)40
6791
(transform.\))43 b(W)-8 b(e)32 b(address)150 2990 y(this)40
6732
6792
b(question)g(b)m(y)h(de\014ning)e(an)i(additional)e(planner)g(\015ag,)
6733
44 b Fo(FFTW_THREADSAFE)p Fu(.)69 b(When)41 b(included)150
6734
4648 y(in)d(the)i(\015ags)f(for)h(an)m(y)g(of)f(the)h(plan-creation)f
6735
(routines,)i Fo(FFTW_THREADSAFE)35 b Fu(guaran)m(tees)41
6736
b(that)f(the)150 4757 y(resulting)28 b(plan)i(will)d(b)s(e)j(read-only)
6793
44 b Fp(FFTW_THREADSAFE)p Fv(.)69 b(When)41 b(included)150
6794
3100 y(in)d(the)i(\015ags)f(for)h(an)m(y)g(of)f(the)h(plan-creation)f
6795
(routines,)i Fp(FFTW_THREADSAFE)35 b Fv(guaran)m(tees)41
6796
b(that)f(the)150 3210 y(resulting)28 b(plan)i(will)d(b)s(e)j(read-only)
6737
6797
g(and)g(safe)g(to)h(use)f(in)g(parallel)e(b)m(y)i(m)m(ultiple)e
6740
37 38 bop 150 -116 a Fu(Chapter)30 b(4:)41 b(P)m(arallel)29
6741
b(FFTW)2435 b(37)150 299 y Fr(4)80 b(P)l(arallel)57 b(FFTW)275
6742
569 y Fu(In)46 b(this)g(c)m(hapter)i(w)m(e)f(discuss)f(the)h(use)g(of)g
6743
(FFTW)h(in)e(a)h(parallel)f(en)m(vironmen)m(t,)51 b(do)s(cumen)m(t-)150
6744
679 y(ing)41 b(the)h(di\013eren)m(t)f(parallel)f(libraries)f(that)k(w)m
6745
(e)f(ha)m(v)m(e)h(pro)m(vided.)74 b(\(Users)42 b(calling)f(FFTW)h(from)
6746
g(a)150 789 y(m)m(ulti-threaded)e(program)i(should)e(also)i(consult)f
6747
(Section)h(3.8)h([Thread)e(safet)m(y],)46 b(page)d(36.\))76
6748
b(The)150 898 y(FFTW)35 b(pac)m(k)-5 b(age)36 b(curren)m(tly)d(con)m
6749
(tains)h(three)h(parallel)d(transform)h(implemen)m(tations)g(that)i
6750
(lev)m(erage)150 1008 y(the)c(unipro)s(cessor)d(FFTW)j(co)s(de:)225
6751
1154 y Fs(\017)60 b Fu(The)38 b(\014rst)h(set)g(of)g(routines)f
6752
(utilizes)f(shared-memory)h(threads)h(for)f(parallel)f(one-)j(and)e(m)m
6753
(ulti-)330 1264 y(dimensional)24 b(transforms)h(of)i(b)s(oth)e(real)h
6754
(and)g(complex)g(data.)40 b(An)m(y)27 b(program)f(using)f(FFTW)i(can)
6755
330 1374 y(b)s(e)33 b(trivially)e(mo)s(di\014ed)g(to)k(use)e(the)h(m)m
6756
(ulti-threaded)e(routines.)49 b(This)32 b(co)s(de)i(can)g(use)f(an)m(y)
6757
h(com-)330 1483 y(mon)28 b(threads)g(implemen)m(tation,)f(including)e
6758
(POSIX)j(threads.)39 b(\(POSIX)28 b(threads)g(are)h(a)m(v)-5
6800
TeXDict begin 37 38 bop 150 -116 a Fv(Chapter)30 b(4:)41
6801
b(P)m(arallel)29 b(FFTW)2435 b(37)150 299 y Fs(4)80 b(P)l(arallel)57
6802
b(FFTW)275 569 y Fv(In)46 b(this)g(c)m(hapter)i(w)m(e)f(discuss)f(the)h
6803
(use)g(of)g(FFTW)h(in)e(a)h(parallel)f(en)m(vironmen)m(t,)51
6804
b(do)s(cumen)m(t-)150 679 y(ing)41 b(the)h(di\013eren)m(t)f(parallel)f
6805
(libraries)f(that)k(w)m(e)f(ha)m(v)m(e)h(pro)m(vided.)74
6806
b(\(Users)42 b(calling)f(FFTW)h(from)g(a)150 789 y(m)m(ulti-threaded)e
6807
(program)i(should)e(also)i(consult)f(Section)h(3.8)h([Thread)e(safet)m
6808
(y],)46 b(page)d(36.\))76 b(The)150 898 y(FFTW)35 b(pac)m(k)-5
6809
b(age)36 b(curren)m(tly)d(con)m(tains)h(three)h(parallel)d(transform)h
6810
(implemen)m(tations)g(that)i(lev)m(erage)150 1008 y(the)c(unipro)s
6811
(cessor)d(FFTW)j(co)s(de:)225 1154 y Ft(\017)60 b Fv(The)38
6812
b(\014rst)h(set)g(of)g(routines)f(utilizes)f(shared-memory)h(threads)h
6813
(for)f(parallel)f(one-)j(and)e(m)m(ulti-)330 1264 y(dimensional)24
6814
b(transforms)h(of)i(b)s(oth)e(real)h(and)g(complex)g(data.)40
6815
b(An)m(y)27 b(program)f(using)f(FFTW)i(can)330 1374 y(b)s(e)33
6816
b(trivially)e(mo)s(di\014ed)g(to)k(use)e(the)h(m)m(ulti-threaded)e
6817
(routines.)49 b(This)32 b(co)s(de)i(can)g(use)f(an)m(y)h(com-)330
6818
1483 y(mon)28 b(threads)g(implemen)m(tation,)f(including)e(POSIX)j
6819
(threads.)39 b(\(POSIX)28 b(threads)g(are)h(a)m(v)-5
6759
6820
b(ailable)330 1593 y(on)36 b(most)g(Unix)f(v)-5 b(arian)m(ts,)37
6760
6821
b(including)c(Lin)m(ux.\))56 b(These)36 b(routines)f(are)h(lo)s(cated)g
6761
(in)f(the)h Fo(threads)330 1702 y Fu(directory)-8 b(,)31
6822
(in)f(the)h Fp(threads)330 1702 y Fv(directory)-8 b(,)31
6762
6823
b(and)e(are)i(do)s(cumen)m(ted)f(in)f(Section)h(4.1)i([Multi-threaded)d
6763
(FFTW],)j(page)f(37.)225 1843 y Fs(\017)60 b Fu(The)43
6764
b Fo(mpi)g Fu(directory)g(con)m(tains)h(m)m(ulti-dimensional)39
6824
(FFTW],)j(page)f(37.)225 1843 y Ft(\017)60 b Fv(The)43
6825
b Fp(mpi)g Fv(directory)g(con)m(tains)h(m)m(ulti-dimensional)39
6765
6826
b(transforms)k(of)h(real)f(and)g(complex)g(data)330 1952
6766
6827
y(for)32 b(parallel)f(mac)m(hines)h(supp)s(orting)e(MPI.)i(It)h(also)f
6767
6828
(includes)e(parallel)h(one-dimensional)f(trans-)330 2062
7415
7489
(is)f(for)i(the)g(unipro)s(cessor)d(in-place)i(real)g(transforms)150
7416
7490
3494 y(\(see)31 b(Section)f(3.5.3)j([Arra)m(y)d(Dimensions)f(for)h
7417
7491
(Real)g(Multi-dimensional)d(T)-8 b(ransforms],)30 b(page)h(32\).)42
7418
b(In)150 3604 y(particular,)26 b(the)h Fo(z)f Fu(dimension)e(of)j(the)g
7492
b(In)150 3604 y(particular,)26 b(the)h Fp(z)f Fv(dimension)e(of)j(the)g
7419
7493
(real)f(input)e(data)k(is)d(padded)h(to)h(a)g(size)g
7420
Fo(2*\(nz/2+1\))p Fu(,)d(and)i(after)150 3713 y(the)31
7421
b(transform)e(it)h(con)m(tains)h Fo(nz/2+1)d Fu(complex)i(v)-5
7494
Fp(2*\(nz/2+1\))p Fv(,)d(and)i(after)150 3713 y(the)31
7495
b(transform)e(it)h(con)m(tains)h Fp(nz/2+1)d Fv(complex)i(v)-5
7422
7496
b(alues.)275 3870 y(Some)30 b(other)h(imp)s(ortan)m(t)e(things)g(to)i
7423
7497
(kno)m(w)g(ab)s(out)f(the)h(real)f(MPI)g(transforms:)225
7424
4027 y Fs(\017)60 b Fu(As)36 b(for)g(the)g(unipro)s(cessor)e
7425
Fo(rfftwnd_create_plan)p Fu(,)e(the)37 b(dimensions)c(passed)i(for)h
7426
(the)g Fo(FFTW_)330 4136 y(COMPLEX_TO_REAL)h Fu(plan)j(are)i(those)g
7427
(of)g(the)f Fq(r)-5 b(e)g(al)53 b Fu(data.)74 b(In)41
7428
b(particular,)i(ev)m(en)f(when)e Fo(FFTW_)330 4246 y(TRANSPOSED_ORDER)
7429
32 b Fu(is)j(used)g(as)h(in)f(this)g(case,)k(the)d(dimensions)e(are)i
7498
4027 y Ft(\017)60 b Fv(As)36 b(for)g(the)g(unipro)s(cessor)e
7499
Fp(rfftwnd_create_plan)p Fv(,)e(the)37 b(dimensions)c(passed)i(for)h
7500
(the)g Fp(FFTW_)330 4136 y(COMPLEX_TO_REAL)h Fv(plan)j(are)i(those)g
7501
(of)g(the)f Fr(r)-5 b(e)g(al)53 b Fv(data.)74 b(In)41
7502
b(particular,)i(ev)m(en)f(when)e Fp(FFTW_)330 4246 y(TRANSPOSED_ORDER)
7503
32 b Fv(is)j(used)g(as)h(in)f(this)g(case,)k(the)d(dimensions)e(are)i
7430
7504
(those)h(of)f(the)g(\(un)m(trans-)330 4355 y(p)s(osed\))29
7431
7505
b(real)h(output,)g(not)g(the)g(\(transp)s(osed\))g(complex)g(input.)38
7432
7506
b(\(F)-8 b(or)31 b(the)f(complex)g(MPI)g(trans-)330 4465
7433
7507
y(forms,)g(on)g(the)h(other)f(hand,)g(the)h(dimensions)c(are)k(alw)m(a)
7434
7508
m(ys)g(those)g(of)f(the)h(input)d(arra)m(y)-8 b(.\))225
7435
4610 y Fs(\017)60 b Fu(The)24 b(output)h(ordering)e(of)i(the)g
7436
(transform)f(\()p Fo(FFTW_TRANSPOSED_ORDER)c Fu(or)k
7437
Fo(FFTW_TRANSPOSED_)330 4720 y(ORDER)p Fu(\))39 b Fq(must)50
7438
b Fu(b)s(e)40 b(the)h(same)g(for)f(b)s(oth)g(forw)m(ard)g(and)g(bac)m
7509
4610 y Ft(\017)60 b Fv(The)24 b(output)h(ordering)e(of)i(the)g
7510
(transform)f(\()p Fp(FFTW_TRANSPOSED_ORDER)c Fv(or)k
7511
Fp(FFTW_TRANSPOSED_)330 4720 y(ORDER)p Fv(\))39 b Fr(must)50
7512
b Fv(b)s(e)40 b(the)h(same)g(for)f(b)s(oth)g(forw)m(ard)g(and)g(bac)m
7439
7513
(kw)m(ard)h(transforms.)70 b(\(This)39 b(is)h(not)330
7440
7514
4830 y(required)29 b(in)g(the)h(complex)g(case.\))225
7441
4975 y Fs(\017)60 b Fo(total_local_size)24 b Fu(is)k(the)h(required)d
7442
(size)j(in)e Fo(fftw_real)f Fu(v)-5 b(alues,)29 b(not)f
7443
Fo(fftw_complex)e Fu(v)-5 b(alues)330 5085 y(as)31 b(it)f(is)f(for)h
7444
(the)h(complex)f(transforms.)225 5230 y Fs(\017)60 b
7445
Fo(local_ny_after_transpose)20 b Fu(and)26 b Fo
7446
(local_y_start_after_tra)o(nspo)o(se)20 b Fu(describ)s(e)25
7515
4975 y Ft(\017)60 b Fp(total_local_size)24 b Fv(is)k(the)h(required)d
7516
(size)j(in)e Fp(fftw_real)f Fv(v)-5 b(alues,)29 b(not)f
7517
Fp(fftw_complex)e Fv(v)-5 b(alues)330 5085 y(as)31 b(it)f(is)f(for)h
7518
(the)h(complex)f(transforms.)225 5230 y Ft(\017)60 b
7519
Fp(local_ny_after_transpose)20 b Fv(and)26 b Fp
7520
(local_y_start_after_tra)o(nspo)o(se)20 b Fv(describ)s(e)25
7447
7521
b(the)i(p)s(or-)330 5340 y(tion)21 b(of)h(the)h(arra)m(y)f(after)g(the)
7448
7522
h(transform;)h(that)e(is,)h(they)f(are)h(indices)d(in)g(the)i(complex)g
7449
(arra)m(y)g(for)g(an)p eop
7523
(arra)m(y)g(for)g(an)p eop end
7451
47 48 bop 150 -116 a Fu(Chapter)30 b(4:)41 b(P)m(arallel)29
7452
b(FFTW)2435 b(47)330 299 y Fo(FFTW_REAL_TO_COMPLEX)19
7453
b Fu(transform)k(and)g(in)g(the)h(real)g(arra)m(y)h(for)f(an)f
7454
Fo(FFTW_COMPLEX_TO_REAL)330 408 y Fu(transform.)225 544
7455
y Fs(\017)60 b Fo(rfftwnd_mpi)21 b Fu(alw)m(a)m(ys)j(exp)s(ects)g
7456
Fo(fftw_real*)d Fu(arra)m(y)k(argumen)m(ts,)h(but)d(of)h(course)g
7457
(these)g(p)s(oin)m(ters)330 654 y(can)29 b(refer)f(to)h(either)f(real)g
7525
TeXDict begin 47 48 bop 150 -116 a Fv(Chapter)30 b(4:)41
7526
b(P)m(arallel)29 b(FFTW)2435 b(47)330 299 y Fp(FFTW_REAL_TO_COMPLEX)19
7527
b Fv(transform)k(and)g(in)g(the)h(real)g(arra)m(y)h(for)f(an)f
7528
Fp(FFTW_COMPLEX_TO_REAL)330 408 y Fv(transform.)225 541
7529
y Ft(\017)60 b Fp(rfftwnd_mpi)21 b Fv(alw)m(a)m(ys)j(exp)s(ects)g
7530
Fp(fftw_real*)d Fv(arra)m(y)k(argumen)m(ts,)h(but)d(of)h(course)g
7531
(these)g(p)s(oin)m(ters)330 651 y(can)29 b(refer)f(to)h(either)f(real)g
7458
7532
(or)h(complex)f(arra)m(ys,)i(dep)s(ending)c(up)s(on)h(whic)m(h)g(side)g
7459
(of)i(the)g(transform)330 764 y(y)m(ou)i(are)h(on.)42
7533
(of)i(the)g(transform)330 760 y(y)m(ou)i(are)h(on.)42
7460
7534
b(Just)30 b(as)i(for)e(in-place)g(unipro)s(cessor)f(real)i(transforms)f
7461
(\(and)h(also)f(in)g(the)h(example)330 873 y(ab)s(o)m(v)m(e\),)f(this)d
7535
(\(and)h(also)f(in)g(the)h(example)330 870 y(ab)s(o)m(v)m(e\),)f(this)d
7462
7536
(is)g(most)i(easily)e(handled)f(b)m(y)i(t)m(yp)s(ecasting)g(to)h(a)g
7463
(complex)e(p)s(oin)m(ter)h(when)f(handling)330 983 y(the)k(complex)f
7464
(data.)225 1119 y Fs(\017)60 b Fu(As)33 b(with)e(the)i(complex)g
7465
(transforms,)g(there)g(are)g(also)f Fo(rfftwnd_create_plan)c
7466
Fu(and)k Fo(rfftw2d_)330 1228 y(create_plan)27 b Fu(functions,)i(and)h
7537
(complex)e(p)s(oin)m(ter)h(when)f(handling)330 979 y(the)k(complex)f
7538
(data.)225 1112 y Ft(\017)60 b Fv(As)33 b(with)e(the)i(complex)g
7539
(transforms,)g(there)g(are)g(also)f Fp(rfftwnd_create_plan)c
7540
Fv(and)k Fp(rfftw2d_)330 1221 y(create_plan)27 b Fv(functions,)i(and)h
7467
7541
(an)m(y)h(rank)f(greater)h(than)g(one)f(is)g(supp)s(orted.)275
7468
1392 y(Programs)c(using)e(the)j(MPI)f(FFTW)h(real)f(transforms)f
7469
(should)g(link)f(with)h Fo(-lrfftw_mpi)i(-lfftw_)150
7470
1502 y(mpi)i(-lrfftw)g(-lfftw)g(-lm)g Fu(on)h(Unix.)150
7471
1714 y Fi(4.2.5)63 b(Usage)41 b(of)g(MPI)g(FFTW)g(for)g(Complex)f
7472
(One-dimensional)464 1838 y(T)-10 b(ransforms)275 2034
7473
y Fu(The)53 b(MPI)h(FFTW)g(also)g(includes)e(routines)g(for)i(parallel)
7474
e(one-dimensional)g(transforms)h(of)150 2143 y(complex)40
7475
b(data)h(\(only\).)72 b(Although)39 b(the)i(sp)s(eedup)e(is)g
7476
(generally)h(w)m(orse)h(than)f(it)g(is)g(for)g(the)h(m)m(ulti-)150
7477
2253 y(dimensional)26 b(routines,)994 2220 y Fn(2)1059
7478
2253 y Fu(these)j(distributed-memory)c(one-dimensional)h(transforms)i
7479
(are)h(esp)s(ecially)150 2363 y(useful)d(for)i(p)s(erforming)e
7480
(one-dimensional)g(transforms)h(that)i(don't)f(\014t)f(in)m(to)h(the)h
7481
(memory)f(of)g(a)g(single)150 2472 y(mac)m(hine.)275
7482
2610 y(The)45 b(usage)i(of)f(these)g(routines)f(is)g(straigh)m(tforw)m
7542
1377 y(Programs)c(using)e(the)j(MPI)f(FFTW)h(real)f(transforms)f
7543
(should)g(link)f(with)h Fp(-lrfftw_mpi)i(-lfftw_)150
7544
1487 y(mpi)i(-lrfftw)g(-lfftw)g(-lm)g Fv(on)h(Unix.)150
7545
1687 y Fh(4.2.5)63 b(Usage)41 b(of)g(MPI)g(FFTW)g(for)g(Complex)f
7546
(One-dimensional)464 1811 y(T)-10 b(ransforms)275 2002
7547
y Fv(The)67 b(MPI)h(FFTW)h(also)f(includes)d(routines)i(for)h(parallel)
7548
e(one-dimensional)g(transforms)150 2111 y(of)51 b(complex)g(data)g
7549
(\(only\).)103 b(Although)50 b(the)h(sp)s(eedup)e(is)h(generally)g(w)m
7550
(orse)i(than)e(it)h(is)f(for)h(the)150 2221 y(m)m(ulti-dimensional)g
7551
(routines,)1260 2188 y Fo(2)1358 2221 y Fv(these)56 b
7552
(distributed-memory)d(one-dimensional)g(transforms)i(are)150
7553
2331 y(esp)s(ecially)28 b(useful)g(for)h(p)s(erforming)f
7554
(one-dimensional)f(transforms)i(that)h(don't)g(\014t)g(in)m(to)f(the)h
7555
(memory)150 2440 y(of)h(a)f(single)f(mac)m(hine.)275
7556
2573 y(The)45 b(usage)i(of)f(these)g(routines)f(is)g(straigh)m(tforw)m
7483
7557
(ard,)50 b(and)c(is)f(similar)e(to)k(that)g(of)f(the)g(m)m(ulti-)150
7484
2719 y(dimensional)41 b(MPI)i(transform)g(functions.)79
7485
b(Y)-8 b(ou)45 b(\014rst)e(include)e(the)j(header)f Fo(<fftw_mpi.h>)e
7486
Fu(and)150 2829 y(then)30 b(create)i(a)f(plan)e(b)m(y)h(calling:)390
7487
2960 y Fo(fftw_mpi_plan)44 b(fftw_mpi_create_plan\(MPI_)o(Comm)d(comm,)
7488
46 b(int)h(n,)2060 3064 y(fftw_direction)d(dir,)j(int)g(flags\);)275
7489
3202 y Fu(The)32 b(last)i(three)f(argumen)m(ts)h(are)f(the)h(same)g(as)
7490
f(for)g Fo(fftw_create_plan)c Fu(\(except)35 b(that)f(all)e(MPI)150
7491
3311 y(transforms)k(are)h(automatically)g Fo(FFTW_IN_PLACE)p
7492
Fu(\).)58 b(The)36 b(\014rst)g(argumen)m(t)i(sp)s(eci\014es)d(the)i
7493
(group)g(of)150 3421 y(pro)s(cesses)26 b(y)m(ou)h(are)g(using,)f(and)g
7494
(is)f(usually)g Fo(MPI_COMM_WORLD)d Fu(\(all)k(pro)s(cesses\).)39
7495
b(A)27 b(plan)e(can)i(b)s(e)f(used)150 3530 y(for)h(man)m(y)f
7558
2682 y(dimensional)41 b(MPI)i(transform)g(functions.)79
7559
b(Y)-8 b(ou)45 b(\014rst)e(include)e(the)j(header)f Fp(<fftw_mpi.h>)e
7560
Fv(and)150 2792 y(then)30 b(create)i(a)f(plan)e(b)m(y)h(calling:)390
7561
2919 y Fp(fftw_mpi_plan)44 b(fftw_mpi_create_plan\(MPI_)o(Comm)d(comm,)
7562
46 b(int)h(n,)2060 3022 y(fftw_direction)d(dir,)j(int)g(flags\);)275
7563
3155 y Fv(The)32 b(last)i(three)f(argumen)m(ts)h(are)f(the)h(same)g(as)
7564
f(for)g Fp(fftw_create_plan)c Fv(\(except)35 b(that)f(all)e(MPI)150
7565
3265 y(transforms)k(are)h(automatically)g Fp(FFTW_IN_PLACE)p
7566
Fv(\).)58 b(The)36 b(\014rst)g(argumen)m(t)i(sp)s(eci\014es)d(the)i
7567
(group)g(of)150 3374 y(pro)s(cesses)26 b(y)m(ou)h(are)g(using,)f(and)g
7568
(is)f(usually)g Fp(MPI_COMM_WORLD)d Fv(\(all)k(pro)s(cesses\).)39
7569
b(A)27 b(plan)e(can)i(b)s(e)f(used)150 3484 y(for)h(man)m(y)f
7496
7570
(transforms)g(of)h(the)g(same)g(size,)h(and)e(is)g(destro)m(y)m(ed)i
7497
7571
(when)d(y)m(ou)i(are)h(done)e(with)f(it)i(b)m(y)f(calling)150
7498
3640 y Fo(fftw_mpi_destroy_plan\(pl)o(an\))p Fu(.)275
7499
3777 y(If)32 b(y)m(ou)i(don't)f(care)h(ab)s(out)e(the)i(ordering)d(of)j
7572
3593 y Fp(fftw_mpi_destroy_plan\(pl)o(an\))p Fv(.)275
7573
3726 y(If)32 b(y)m(ou)i(don't)f(care)h(ab)s(out)e(the)i(ordering)d(of)j
7500
7574
(the)f(input)e(or)i(output)g(data)h(of)f(the)g(transform,)h(y)m(ou)150
7501
3887 y(can)d(include)d Fo(FFTW_SCRAMBLED_INPUT)d Fu(and/or)30
7502
b Fo(FFTW_SCRAMBLED_OUTPUT)24 b Fu(in)29 b(the)i Fo(flags)p
7503
Fu(.)39 b(These)150 3997 y(sa)m(v)m(e)34 b(some)e(comm)m(unications)g
7575
3835 y(can)d(include)d Fp(FFTW_SCRAMBLED_INPUT)d Fv(and/or)30
7576
b Fp(FFTW_SCRAMBLED_OUTPUT)24 b Fv(in)29 b(the)i Fp(flags)p
7577
Fv(.)39 b(These)150 3945 y(sa)m(v)m(e)34 b(some)e(comm)m(unications)g
7504
7578
(at)h(the)f(exp)s(ense)g(of)g(ha)m(ving)g(the)g(input)f(and/or)h
7505
(output)g(reordered)f(in)150 4106 y(an)e(undo)s(cumen)m(ted)f(w)m(a)m
7579
(output)g(reordered)f(in)150 4055 y(an)e(undo)s(cumen)m(ted)f(w)m(a)m
7506
7580
(y)-8 b(.)42 b(F)-8 b(or)29 b(example,)h(if)e(y)m(ou)h(are)h(p)s
7507
7581
(erforming)d(an)i(FFT-based)g(con)m(v)m(olution,)h(y)m(ou)150
7508
4216 y(migh)m(t)d(use)f Fo(FFTW_SCRAMBLED_OUTPUT)21 b
7509
Fu(for)27 b(the)g(forw)m(ard)f(transform)g(and)g Fo
7510
(FFTW_SCRAMBLED_INPUT)150 4325 y Fu(for)k(the)h(in)m(v)m(erse)f
7511
(transform.)275 4463 y(The)f(transform)h(itself)f(is)h(computed)g(b)m
7512
(y:)390 4594 y Fo(void)47 b(fftw_mpi\(fftw_mpi_plan)41
7513
b(p,)48 b(int)e(n_fields,)1058 4698 y(fftw_complex)f(*local_data,)f
7514
(fftw_complex)h(*work\);)p 150 4802 1200 4 v 192 4869
7515
a Fn(2)275 4902 y Fu(The)35 b(1D)h(transforms)f(require)f(m)m(uc)m(h)i
7516
(more)f(comm)m(unication.)56 b(All)34 b(the)i(comm)m(unication)f(in)f
7517
(our)275 5011 y(FFT)46 b(routines)g(tak)m(es)i(the)f(form)f(of)g(an)h
7518
(all-to-all)f(comm)m(unication:)72 b(the)47 b(m)m(ulti-dimensional)275
7519
5121 y(transforms)29 b(require)f(t)m(w)m(o)k(all-to-all)d(comm)m
7520
(unications)g(\(or)i(one,)f(if)f(y)m(ou)i(use)e Fo(FFTW_TRANSPOSED_)275
7521
5230 y(ORDER)p Fu(\),)c(while)f(the)i(one-dimensional)d(transforms)i
7522
(require)g Fq(thr)-5 b(e)g(e)33 b Fu(\(or)26 b(t)m(w)m(o,)j(if)24
7523
b(y)m(ou)i(use)g(scram)m(bled)275 5340 y(input)i(or)i(output\).)p
7582
4164 y(migh)m(t)d(use)f Fp(FFTW_SCRAMBLED_OUTPUT)21 b
7583
Fv(for)27 b(the)g(forw)m(ard)f(transform)g(and)g Fp
7584
(FFTW_SCRAMBLED_INPUT)150 4274 y Fv(for)k(the)h(in)m(v)m(erse)f
7585
(transform.)275 4406 y(The)f(transform)h(itself)f(is)h(computed)g(b)m
7586
(y:)390 4533 y Fp(void)47 b(fftw_mpi\(fftw_mpi_plan)41
7587
b(p,)48 b(int)e(n_fields,)1058 4637 y(fftw_complex)f(*local_data,)f
7588
(fftw_complex)h(*work\);)275 4769 y(n_fields)p Fv(,)c(as)g(in)f
7589
Fp(fftwnd_mpi)p Fv(,)h(is)f(equiv)-5 b(alen)m(t)41 b(to)g
7590
Fp(howmany=n_fields)p Fv(,)f Fp(stride=n_fields)p Fv(,)150
7591
4879 y(and)h Fp(dist=1)p Fv(,)i(and)e(should)f(b)s(e)h
7592
Fp(1)g Fv(when)g(y)m(ou)h(are)g(computing)f(the)h(transform)f(of)g(a)h
7593
(single)f(arra)m(y)-8 b(.)p 150 4967 1200 4 v 199 5034
7594
a Fo(2)275 5066 y Fj(The)33 b(1D)h(transforms)g(require)g(m)n(uc)n(h)e
7595
(more)h(comm)n(unication.)57 b(All)34 b(the)f(comm)n(unication)g(in)h
7596
(our)f(FFT)i(routines)275 5157 y(tak)n(es)c(the)g(form)g(of)h(an)f
7597
(all-to-all)i(comm)n(unication:)44 b(the)31 b(m)n(ulti-dimensional)f
7598
(transforms)i(require)f(t)n(w)n(o)g(all-to-all)275 5249
7599
y(comm)n(unications)36 b(\(or)h(one,)k(if)d(y)n(ou)e(use)i
7600
Fi(FFTW_TRANSPOSED_ORDER)p Fj(\),)44 b(while)39 b(the)d
7601
(one-dimensional)i(transforms)275 5340 y(require)25 b
7602
Ff(thr)l(e)l(e)33 b Fj(\(or)26 b(t)n(w)n(o,)g(if)h(y)n(ou)e(use)h
7603
(scram)n(bled)f(input)f(or)i(output\).)p eop end
7526
48 49 bop 150 -116 a Fu(48)3232 b(FFTW)275 299 y Fo(n_fields)p
7527
Fu(,)41 b(as)g(in)f Fo(fftwnd_mpi)p Fu(,)h(is)f(equiv)-5
7528
b(alen)m(t)41 b(to)g Fo(howmany=n_fields)p Fu(,)f Fo(stride=n_fields)p
7529
Fu(,)150 408 y(and)h Fo(dist=1)p Fu(,)i(and)e(should)f(b)s(e)h
7530
Fo(1)g Fu(when)g(y)m(ou)h(are)g(computing)f(the)h(transform)f(of)g(a)h
7531
(single)f(arra)m(y)-8 b(.)150 518 y Fo(local_data)25
7532
b Fu(con)m(tains)j(the)f(p)s(ortion)g(of)g(the)h(arra)m(y)g(lo)s(cal)f
7533
(to)i(the)f(curren)m(t)f(pro)s(cess,)h(describ)s(ed)d(b)s(elo)m(w.)150
7534
628 y Fo(work)37 b Fu(is)f(either)h Fo(NULL)g Fu(or)h(an)f(arra)m(y)h
7535
(exactly)h(the)f(same)g(size)g(as)f Fo(local_data)p Fu(;)i(in)e(the)h
7536
(latter)g(case,)150 737 y(FFTW)h(can)f(use)g(the)g Fo(MPI_Alltoall)d
7537
Fu(comm)m(unications)i(primitiv)m(e)f(whic)m(h)h(is)g(\(usually\))g
7538
(faster)h(at)150 847 y(the)30 b(exp)s(ense)g(of)g(extra)h(storage.)42
7539
b(Up)s(on)29 b(return,)g Fo(local_data)f Fu(con)m(tains)i(the)g(p)s
7540
(ortion)f(of)h(the)g(output)150 956 y(lo)s(cal)g(to)h(the)f(curren)m(t)
7541
g(pro)s(cess)g(\(see)i(b)s(elo)m(w\).)275 1104 y(T)-8
7605
TeXDict begin 48 49 bop 150 -116 a Fv(48)3232 b(FFTW)150
7606
299 y Fp(local_data)25 b Fv(con)m(tains)j(the)f(p)s(ortion)g(of)g(the)h
7607
(arra)m(y)g(lo)s(cal)f(to)i(the)f(curren)m(t)f(pro)s(cess,)h(describ)s
7608
(ed)d(b)s(elo)m(w.)150 408 y Fp(work)37 b Fv(is)f(either)h
7609
Fp(NULL)g Fv(or)h(an)f(arra)m(y)h(exactly)h(the)f(same)g(size)g(as)f
7610
Fp(local_data)p Fv(;)i(in)e(the)h(latter)g(case,)150
7611
518 y(FFTW)h(can)f(use)g(the)g Fp(MPI_Alltoall)d Fv(comm)m(unications)i
7612
(primitiv)m(e)f(whic)m(h)h(is)g(\(usually\))g(faster)h(at)150
7613
628 y(the)30 b(exp)s(ense)g(of)g(extra)h(storage.)42
7614
b(Up)s(on)29 b(return,)g Fp(local_data)f Fv(con)m(tains)i(the)g(p)s
7615
(ortion)f(of)h(the)g(output)150 737 y(lo)s(cal)g(to)h(the)f(curren)m(t)
7616
g(pro)s(cess)g(\(see)i(b)s(elo)m(w\).)275 870 y(T)-8
7542
7617
b(o)29 b(\014nd)f(out)i(what)f(p)s(ortion)f(of)h(the)h(arra)m(y)f(is)g
7543
7618
(stored)g(lo)s(cal)g(to)h(the)f(curren)m(t)g(pro)s(cess,)h(y)m(ou)f
7544
(call)g(the)150 1213 y(follo)m(wing)g(routine:)390 1355
7545
y Fo(void)47 b(fftw_mpi_local_sizes\(ff)o(tw_m)o(pi_)o(plan)41
7546
b(p,)1631 1459 y(int)47 b(*local_n,)e(int)i(*local_start,)1631
7547
1563 y(int)g(*local_n_after_transform)o(,)1631 1666 y(int)g
7548
(*local_start_after_trans)o(for)o(m,)1631 1770 y(int)g
7549
(*total_local_size\);)275 1918 y(total_local_size)17
7550
b Fu(is)j(the)i(n)m(um)m(b)s(er)f(of)g Fo(fftw_complex)e
7551
Fu(elemen)m(ts)j(y)m(ou)g(should)d(actually)i(allo)s(cate)150
7552
2027 y(for)34 b Fo(local_data)e Fu(\(and)i Fo(work)p
7553
Fu(\).)52 b Fo(local_n)33 b Fu(and)h Fo(local_start)d
7554
Fu(indicate)i(that)i(the)g(curren)m(t)f(pro)s(cess)150
7555
2137 y(stores)23 b Fo(local_n)d Fu(elemen)m(ts)j(corresp)s(onding)e(to)
7556
i(the)g(indices)d Fo(local_start)g Fu(to)j Fo(local_start+local_)150
7557
2246 y(n-1)35 b Fu(in)f(the)i(\\real")g(arra)m(y)-8 b(.)58
7558
b Fq(After)37 b(the)h(tr)-5 b(ansform,)41 b(the)d(pr)-5
7619
(call)g(the)150 980 y(follo)m(wing)g(routine:)390 1107
7620
y Fp(void)47 b(fftw_mpi_local_sizes\(ff)o(tw_m)o(pi_)o(plan)41
7621
b(p,)1631 1211 y(int)47 b(*local_n,)e(int)i(*local_start,)1631
7622
1314 y(int)g(*local_n_after_transform)o(,)1631 1418 y(int)g
7623
(*local_start_after_trans)o(for)o(m,)1631 1522 y(int)g
7624
(*total_local_size\);)275 1655 y(total_local_size)17
7625
b Fv(is)j(the)i(n)m(um)m(b)s(er)f(of)g Fp(fftw_complex)e
7626
Fv(elemen)m(ts)j(y)m(ou)g(should)d(actually)i(allo)s(cate)150
7627
1765 y(for)34 b Fp(local_data)e Fv(\(and)i Fp(work)p
7628
Fv(\).)52 b Fp(local_n)33 b Fv(and)h Fp(local_start)d
7629
Fv(indicate)i(that)i(the)g(curren)m(t)f(pro)s(cess)150
7630
1874 y(stores)23 b Fp(local_n)d Fv(elemen)m(ts)j(corresp)s(onding)e(to)
7631
i(the)g(indices)d Fp(local_start)g Fv(to)j Fp(local_start+local_)150
7632
1984 y(n-1)35 b Fv(in)f(the)i(\\real")g(arra)m(y)-8 b(.)58
7633
b Fr(After)37 b(the)h(tr)-5 b(ansform,)41 b(the)d(pr)-5
7559
7634
b(o)g(c)g(ess)40 b(may)e(stor)-5 b(e)39 b(a)f(di\013er)-5
7560
b(ent)38 b(p)-5 b(ortion)40 b(of)150 2356 y(the)f(arr)-5
7561
b(ay.)60 b Fu(The)36 b(p)s(ortion)f(of)i(the)g(data)g(stored)f(on)h
7635
b(ent)38 b(p)-5 b(ortion)40 b(of)150 2093 y(the)f(arr)-5
7636
b(ay.)60 b Fv(The)36 b(p)s(ortion)f(of)i(the)g(data)g(stored)f(on)h
7562
7637
(the)g(pro)s(cess)f(after)h(the)f(transform)g(is)g(giv)m(en)g(b)m(y)150
7563
2466 y Fo(local_n_after_transform)23 b Fu(and)29 b Fo
7564
(local_start_after_transfor)o(m)p Fu(.)34 b(This)28 b(data)j(is)d
7565
(exactly)j(the)150 2575 y(same)g(as)h(a)f(con)m(tiguous)g(segmen)m(t)h
7638
2203 y Fp(local_n_after_transform)23 b Fv(and)29 b Fp
7639
(local_start_after_transfor)o(m)p Fv(.)34 b(This)28 b(data)j(is)d
7640
(exactly)j(the)150 2312 y(same)g(as)h(a)f(con)m(tiguous)g(segmen)m(t)h
7566
7641
(of)f(the)h(corresp)s(onding)d(unipro)s(cessor)f(transform)j(output)f
7567
(\(i.e.)43 b(an)150 2685 y(in-order)29 b(sequence)i(of)f(sequen)m(tial)
7568
g(frequency)g(bins\).)275 2832 y(Note)35 b(that,)g(if)e(y)m(ou)h
7642
(\(i.e.)43 b(an)150 2422 y(in-order)29 b(sequence)i(of)f(sequen)m(tial)
7643
g(frequency)g(bins\).)275 2555 y(Note)35 b(that,)g(if)e(y)m(ou)h
7569
7644
(compute)h(b)s(oth)e(a)h(forw)m(ard)f(and)h(a)g(bac)m(kw)m(ard)g
7570
(transform)f(of)h(the)h(same)f(size,)150 2942 y(the)39
7645
(transform)f(of)h(the)h(same)f(size,)150 2665 y(the)39
7571
7646
b(lo)s(cal)f(sizes)h(are)g(guaran)m(teed)h(to)f(b)s(e)g(consisten)m(t.)
7572
7647
66 b(That)39 b(is,)h(the)f(lo)s(cal)f(size)h(after)g(the)g(forw)m(ard)
7573
150 3051 y(transform)28 b(will)f(b)s(e)h(the)h(same)g(as)h(the)f(lo)s
7648
150 2774 y(transform)28 b(will)f(b)s(e)h(the)h(same)g(as)h(the)f(lo)s
7574
7649
(cal)f(size)h(b)s(efore)f(the)h(bac)m(kw)m(ard)h(transform,)f(and)f
7575
(vice)h(v)m(ersa.)275 3199 y(Programs)c(using)f(the)h(FFTW)h(MPI)g
7576
(routines)e(should)f(b)s(e)i(link)m(ed)f(with)g Fo(-lfftw_mpi)j(-lfftw)
7577
i(-lm)150 3308 y Fu(on)h(Unix,)g(in)f(addition)f(to)j(whatev)m(er)h
7578
(libraries)27 b(are)k(required)d(for)j(MPI.)150 3558
7579
y Fi(4.2.6)63 b(MPI)41 b(Tips)275 3764 y Fu(There)27
7650
(vice)h(v)m(ersa.)275 2907 y(Programs)c(using)f(the)h(FFTW)h(MPI)g
7651
(routines)e(should)f(b)s(e)i(link)m(ed)f(with)g Fp(-lfftw_mpi)j(-lfftw)
7652
i(-lm)150 3017 y Fv(on)h(Unix,)g(in)f(addition)f(to)j(whatev)m(er)h
7653
(libraries)27 b(are)k(required)d(for)j(MPI.)150 3236
7654
y Fh(4.2.6)63 b(MPI)41 b(Tips)275 3427 y Fv(There)27
7580
7655
b(are)h(sev)m(eral)g(things)f(y)m(ou)h(should)e(consider)g(in)h(order)g
7581
7656
(to)h(get)h(the)f(b)s(est)g(p)s(erformance)f(out)h(of)150
7582
3874 y(the)j(MPI)f(FFTW)h(routines.)275 4021 y(First,)39
7657
3537 y(the)j(MPI)f(FFTW)h(routines.)275 3670 y(First,)39
7583
7658
b(if)f(p)s(ossible,)g(the)g(\014rst)g(and)g(second)g(dimensions)e(of)i
7584
7659
(y)m(our)g(data)h(should)e(b)s(e)h(divisible)c(b)m(y)150
7585
4131 y(the)43 b(n)m(um)m(b)s(er)f(of)h(pro)s(cesses)g(y)m(ou)g(are)g
7660
3779 y(the)43 b(n)m(um)m(b)s(er)f(of)h(pro)s(cesses)g(y)m(ou)g(are)g
7586
7661
(using.)77 b(\(If)43 b(only)f(one)i(can)f(b)s(e)f(divisible,)h(then)g
7587
(y)m(ou)g(should)150 4240 y(c)m(ho)s(ose)29 b(the)f(\014rst)f
7662
(y)m(ou)g(should)150 3889 y(c)m(ho)s(ose)29 b(the)f(\014rst)f
7588
7663
(dimension.\))37 b(This)26 b(allo)m(ws)h(the)h(computational)g(load)f
7589
(to)i(b)s(e)e(spread)g(ev)m(enly)g(among)150 4350 y(the)32
7664
(to)i(b)s(e)e(spread)g(ev)m(enly)g(among)150 3999 y(the)32
7590
7665
b(pro)s(cesses,)h(and)e(also)h(reduces)g(the)g(comm)m(unications)f
7591
7666
(complexit)m(y)h(and)f(o)m(v)m(erhead.)47 b(In)31 b(the)h(one-)150
7592
4459 y(dimensional)39 b(transform)h(case,)46 b(the)41
7667
4108 y(dimensional)39 b(transform)h(case,)46 b(the)41
7593
7668
b(size)g(of)h(the)g(transform)e(should)g(ideally)f(b)s(e)i(divisible)c
7594
(b)m(y)42 b(the)150 4569 y Fq(squar)-5 b(e)38 b Fu(of)30
7595
b(the)h(n)m(um)m(b)s(er)e(of)i(pro)s(cessors.)275 4716
7669
(b)m(y)42 b(the)150 4218 y Fr(squar)-5 b(e)38 b Fv(of)30
7670
b(the)h(n)m(um)m(b)s(er)e(of)i(pro)s(cessors.)275 4351
7596
7671
y(Second,)38 b(y)m(ou)f(should)e(consider)g(using)h(the)h
7597
Fo(FFTW_TRANSPOSED_ORDER)30 b Fu(output)37 b(format)g(if)f(it)g(is)150
7598
4826 y(not)26 b(to)s(o)g(burdensome.)37 b(The)25 b(sp)s(eed)g(gains)f
7672
Fp(FFTW_TRANSPOSED_ORDER)30 b Fv(output)37 b(format)g(if)f(it)g(is)150
7673
4460 y(not)26 b(to)s(o)g(burdensome.)37 b(The)25 b(sp)s(eed)g(gains)f
7599
7674
(from)h(comm)m(unications)g(sa)m(vings)g(are)h(usually)d(substan)m
7600
(tial.)275 4973 y(Third,)40 b(y)m(ou)h(should)d(consider)h(allo)s
7601
(cating)h(a)h(w)m(orkspace)g(for)f Fo(\(r\)fftw\(nd\)_mpi)p
7602
Fu(,)f(as)h(this)g(can)150 5083 y(often)31 b(\(but)f(not)g(alw)m(a)m
7675
(tial.)275 4593 y(Third,)40 b(y)m(ou)h(should)d(consider)h(allo)s
7676
(cating)h(a)h(w)m(orkspace)g(for)f Fp(\(r\)fftw\(nd\)_mpi)p
7677
Fv(,)f(as)h(this)g(can)150 4703 y(often)31 b(\(but)f(not)g(alw)m(a)m
7603
7678
(ys\))i(impro)m(v)m(e)e(p)s(erformance)g(\(at)h(the)g(cost)g(of)g
7604
(extra)g(storage\).)275 5230 y(F)-8 b(ourth,)50 b(y)m(ou)c(should)e
7679
(extra)g(storage\).)275 4836 y(F)-8 b(ourth,)50 b(y)m(ou)c(should)e
7605
7680
(exp)s(erimen)m(t)h(with)g(the)h(b)s(est)g(n)m(um)m(b)s(er)e(of)i(pro)s
7606
(cessors)g(to)h(use)e(for)h(y)m(our)150 5340 y(problem.)71
7681
(cessors)g(to)h(use)e(for)h(y)m(our)150 4945 y(problem.)71
7607
7682
b(\(There)41 b(comes)h(a)f(p)s(oin)m(t)f(of)i(diminishing)36
7608
b(returns,)42 b(when)e(the)i(comm)m(unications)e(costs)p
7683
b(returns,)42 b(when)e(the)i(comm)m(unications)e(costs)150
7684
5055 y(out)m(w)m(eigh)e(the)g(computational)f(b)s(ene\014ts.)1645
7685
5022 y Fo(3)1681 5055 y Fv(\))62 b(The)37 b Fp(fftw_mpi_test)d
7686
Fv(program)j(can)h(output)f(helpful)p 150 5149 1200 4
7687
v 199 5217 a Fo(3)275 5249 y Fj(An)c(FFT)h(is)h(particularly)f(hard)g
7688
(on)g(comm)n(unications)e(systems,)k(as)f(it)f(requires)g(an)g
7689
Fc(all-to-all)k Fj(comm)n(unication,)275 5340 y(whic)n(h)25
7690
b(is)h(more)g(or)g(less)g(the)g(w)n(orst)g(p)r(ossible)h(case.)p
7611
49 50 bop 150 -116 a Fu(Chapter)30 b(4:)41 b(P)m(arallel)29
7612
b(FFTW)2435 b(49)150 299 y(out)m(w)m(eigh)38 b(the)g(computational)f(b)
7613
s(ene\014ts.)1645 266 y Fn(3)1681 299 y Fu(\))62 b(The)37
7614
b Fo(fftw_mpi_test)d Fu(program)j(can)h(output)f(helpful)150
7615
408 y(p)s(erformance)23 b(b)s(enc)m(hmarks.)37 b(It)24
7616
b(accepts)h(the)e(same)h(parameters)g(as)g(the)g(unipro)s(cessor)d
7617
(test)j(programs)150 518 y(\(c.f.)53 b Fo(tests/README)p
7618
Fu(\))31 b(and)i(is)g(run)g(lik)m(e)g(an)h(ordinary)f(MPI)h(program.)51
7619
b(F)-8 b(or)35 b(example,)g Fo(mpirun)29 b(-np)150 628
7620
y(4)h(fftw_mpi_test)d(-s)j(128x128x128)g Fu(will)h(b)s(enc)m(hmark)h(a)
7621
i Fo(128x128x128)c Fu(transform)j(on)g(four)g(pro-)150
7622
737 y(cessors,)28 b(rep)s(orting)d(timings)g(and)g(parallel)g(sp)s
7623
(eedups)f(for)j(all)e(v)-5 b(arian)m(ts)26 b(of)h Fo(fftwnd_mpi)c
7624
Fu(\(transp)s(osed,)150 847 y(with)34 b(w)m(orkspace,)k(etcetera\).)60
7625
b(\(Note)37 b(also)e(that)i(there)f(is)e(the)i Fo(rfftw_mpi_test)c
7626
Fu(program)j(for)h(the)150 956 y(real)30 b(transforms.\))p
7627
150 5131 1200 4 v 192 5197 a Fn(3)275 5230 y Fu(An)42
7628
b(FFT)h(is)f(particularly)e(hard)i(on)h(comm)m(unications)f(systems,)k
7629
(as)d(it)g(requires)e(an)i Fp(all-to-all)275 5340 y Fu(comm)m
7630
(unication,)30 b(whic)m(h)f(is)g(more)i(or)f(less)g(the)g(w)m(orst)h(p)
7631
s(ossible)d(case.)p eop
7693
TeXDict begin 49 50 bop 150 -116 a Fv(Chapter)30 b(4:)41
7694
b(P)m(arallel)29 b(FFTW)2435 b(49)150 299 y(p)s(erformance)23
7695
b(b)s(enc)m(hmarks.)37 b(It)24 b(accepts)h(the)e(same)h(parameters)g
7696
(as)g(the)g(unipro)s(cessor)d(test)j(programs)150 408
7697
y(\(c.f.)53 b Fp(tests/README)p Fv(\))31 b(and)i(is)g(run)g(lik)m(e)g
7698
(an)h(ordinary)f(MPI)h(program.)51 b(F)-8 b(or)35 b(example,)g
7699
Fp(mpirun)29 b(-np)150 518 y(4)h(fftw_mpi_test)d(-s)j(128x128x128)g
7700
Fv(will)h(b)s(enc)m(hmark)h(a)i Fp(128x128x128)c Fv(transform)j(on)g
7701
(four)g(pro-)150 628 y(cessors,)28 b(rep)s(orting)d(timings)g(and)g
7702
(parallel)g(sp)s(eedups)f(for)j(all)e(v)-5 b(arian)m(ts)26
7703
b(of)h Fp(fftwnd_mpi)c Fv(\(transp)s(osed,)150 737 y(with)34
7704
b(w)m(orkspace,)k(etcetera\).)60 b(\(Note)37 b(also)e(that)i(there)f
7705
(is)e(the)i Fp(rfftw_mpi_test)c Fv(program)j(for)h(the)150
7706
847 y(real)30 b(transforms.\))p eop end
7633
50 51 bop 150 -116 a Fu(50)3232 b(FFTW)p eop
7708
TeXDict begin 50 51 bop 150 -116 a Fv(50)3232 b(FFTW)p
7635
51 52 bop 150 -116 a Fu(Chapter)30 b(5:)41 b(Calling)28
7636
b(FFTW)j(from)f(F)-8 b(ortran)1909 b(51)150 299 y Fr(5)80
7637
b(Calling)56 b(FFTW)f(from)e(F)-13 b(ortran)275 528 y
7638
Fu(The)27 b(standard)g(FFTW)h(libraries)d(include)g(sp)s(ecial)h(wrapp)
7639
s(er)g(functions)g(that)j(allo)m(w)e(F)-8 b(ortran)28
7640
b(pro-)150 638 y(grams)44 b(to)h(call)f(FFTW)h(subroutines.)79
7711
TeXDict begin 51 52 bop 150 -116 a Fv(Chapter)30 b(5:)41
7712
b(Calling)28 b(FFTW)j(from)f(F)-8 b(ortran)1909 b(51)150
7713
299 y Fs(5)80 b(Calling)56 b(FFTW)f(from)e(F)-13 b(ortran)275
7714
503 y Fv(The)27 b(standard)g(FFTW)h(libraries)d(include)g(sp)s(ecial)h
7715
(wrapp)s(er)g(functions)g(that)j(allo)m(w)e(F)-8 b(ortran)28
7716
b(pro-)150 612 y(grams)44 b(to)h(call)f(FFTW)h(subroutines.)79
7641
7717
b(This)43 b(c)m(hapter)i(describ)s(es)d(ho)m(w)i(those)h(functions)e
7642
(ma)m(y)i(b)s(e)150 747 y(emplo)m(y)m(ed)32 b(to)h(use)e(FFTW)i(from)e
7718
(ma)m(y)i(b)s(e)150 722 y(emplo)m(y)m(ed)32 b(to)h(use)e(FFTW)i(from)e
7643
7719
(F)-8 b(ortran.)46 b(W)-8 b(e)33 b(assume)f(here)g(that)g(the)g(reader)
7644
g(is)f(already)g(familiar)150 857 y(with)e(the)i(usage)g(of)f(FFTW)h
7720
g(is)f(already)g(familiar)150 832 y(with)e(the)i(usage)g(of)f(FFTW)h
7645
7721
(in)e(C,)i(as)f(describ)s(ed)e(elsewhere)i(in)f(this)h(man)m(ual.)275
7646
991 y(In)h(general,)i(it)e(is)g(not)i(p)s(ossible)c(to)k(call)f(C)f
7722
960 y(In)h(general,)i(it)e(is)g(not)i(p)s(ossible)c(to)k(call)f(C)f
7647
7723
(functions)g(directly)g(from)g(F)-8 b(ortran,)34 b(due)d(to)i(F)-8
7648
b(ortran's)150 1100 y(inabilit)m(y)33 b(to)k(pass)f(argumen)m(ts)h(b)m
7724
b(ortran's)150 1070 y(inabilit)m(y)33 b(to)k(pass)f(argumen)m(ts)h(b)m
7649
7725
(y)f(v)-5 b(alue)35 b(and)h(also)g(b)s(ecause)g(F)-8
7650
7726
b(ortran)37 b(compilers)d(t)m(ypically)h(exp)s(ect)150
7651
1210 y(iden)m(ti\014ers)i(to)i(b)s(e)g(mangled)f(someho)m(w)h(for)g
7727
1179 y(iden)m(ti\014ers)i(to)i(b)s(e)g(mangled)f(someho)m(w)h(for)g
7652
7728
(linking.)63 b(Ho)m(w)m(ev)m(er,)43 b(if)38 b(C)g(functions)g(are)h
7653
(written)f(in)g(a)150 1319 y(sp)s(ecial)28 b(w)m(a)m(y)-8
7654
b(,)31 b(they)e Fq(ar)-5 b(e)37 b Fu(callable)28 b(from)h(F)-8
7729
(written)f(in)g(a)150 1289 y(sp)s(ecial)28 b(w)m(a)m(y)-8
7730
b(,)31 b(they)e Fr(ar)-5 b(e)37 b Fv(callable)28 b(from)h(F)-8
7655
7731
b(ortran,)30 b(and)e(w)m(e)i(ha)m(v)m(e)g(emplo)m(y)m(ed)g(this)e(tec)m
7656
(hnique)h(to)g(create)150 1429 y(F)-8 b(ortran-callable)42
7732
(hnique)h(to)g(create)150 1398 y(F)-8 b(ortran-callable)42
7657
7733
b(\\wrapp)s(er")f(functions)g(around)g(the)h(main)f(FFTW)h(routines.)75
7658
b(These)42 b(wrapp)s(er)150 1538 y(functions)36 b(are)j(included)c(in)h
7734
b(These)42 b(wrapp)s(er)150 1508 y(functions)36 b(are)j(included)c(in)h
7659
7735
(the)j(FFTW)f(libraries)d(b)m(y)j(default,)h(unless)d(a)j(F)-8
7660
b(ortran)38 b(compiler)f(isn't)150 1648 y(found)29 b(on)h(y)m(our)h
7661
(system)f(or)h Fo(--disable-fortran)25 b Fu(is)30 b(included)d(in)i
7662
(the)i Fo(configure)d Fu(\015ags.)275 1782 y(As)34 b(a)h(result,)f
7736
b(ortran)38 b(compiler)f(isn't)150 1618 y(found)29 b(on)h(y)m(our)h
7737
(system)f(or)h Fp(--disable-fortran)25 b Fv(is)30 b(included)d(in)i
7738
(the)i Fp(configure)d Fv(\015ags.)275 1746 y(As)34 b(a)h(result,)f
7663
7739
(calling)f(FFTW)i(from)f(F)-8 b(ortran)35 b(requires)e(little)g(more)h
7664
(than)h(app)s(ending)c(`)p Fo(_f77)p Fu(')j(to)150 1891
7740
(than)h(app)s(ending)c(`)p Fp(_f77)p Fv(')j(to)150 1856
7665
7741
y(the)g(function)f(names)i(and)e(then)h(linking)e(normally)g(with)h
7666
7742
(the)i(FFTW)g(libraries.)49 b(There)34 b(are)h(a)f(few)150
7667
2001 y(wrinkles,)28 b(ho)m(w)m(ev)m(er,)k(as)f(w)m(e)g(shall)d(discuss)
7668
h(b)s(elo)m(w.)150 2255 y Ft(5.1)68 b(W)-11 b(rapp)t(er)44
7669
b(Routines)275 2447 y Fu(All)g(of)j(the)f(unipro)s(cessor)e(and)h(m)m
7743
1965 y(wrinkles,)28 b(ho)m(w)m(ev)m(er,)k(as)f(w)m(e)g(shall)d(discuss)
7744
h(b)s(elo)m(w.)150 2205 y Fu(5.1)68 b(W)-11 b(rapp)t(er)44
7745
b(Routines)275 2391 y Fv(All)g(of)j(the)f(unipro)s(cessor)e(and)h(m)m
7670
7746
(ulti-threaded)g(transform)h(routines)f(ha)m(v)m(e)i(F)-8
7671
b(ortran-callable)150 2556 y(wrapp)s(ers,)38 b(except)h(for)f(the)h
7747
b(ortran-callable)150 2501 y(wrapp)s(ers,)38 b(except)h(for)f(the)h
7672
7748
(wisdom)d(imp)s(ort/exp)s(ort)h(functions)g(\(since)h(it)f(is)g(not)i
7673
(p)s(ossible)c(to)k(ex-)150 2666 y(c)m(hange)c(string)d(and)h(\014le)f
7749
(p)s(ossible)c(to)k(ex-)150 2610 y(c)m(hange)c(string)d(and)h(\014le)f
7674
7750
(argumen)m(ts)i(p)s(ortably)e(with)g(F)-8 b(ortran\))35
7675
7751
b(and)e(the)g(sp)s(eci\014c)f(planner)g(routines)150
7676
2776 y(\(see)25 b(Section)g(3.2.2)h([Discussion)d(on)h(Sp)s(eci\014c)f
7752
2720 y(\(see)25 b(Section)g(3.2.2)h([Discussion)d(on)h(Sp)s(eci\014c)f
7677
7753
(Plans],)i(page)h(20\).)39 b(The)24 b(name)h(of)g(the)f(wrapp)s(er)f
7678
(routine)150 2885 y(is)k(the)h(same)g(as)g(that)h(of)e(the)h(corresp)s
7679
(onding)e(C)i(routine,)f(but)g(with)g Fo(fftw/fftwnd/rfftw/rfftwn)o(d)
7680
150 2995 y Fu(replaced)g(b)m(y)g Fo(fftw_f77/fftwnd_f77/rff)o(tw_)o
7681
(f77/)o(rfft)o(wnd)o(_f77)o Fu(.)34 b(F)-8 b(or)28 b(example,)f(in)f(F)
7682
-8 b(ortran,)29 b(in-)150 3104 y(stead)41 b(of)f(calling)f
7683
Fo(fftw_one)e Fu(y)m(ou)k(w)m(ould)e(call)g Fo(fftw_f77_one)p
7684
Fu(.)2464 3071 y Fn(1)2568 3104 y Fu(F)-8 b(or)41 b(the)f(most)h(part,)
7685
h(all)d(of)i(the)150 3214 y(argumen)m(ts)31 b(to)g(the)f(functions)f
7754
(routine)150 2829 y(is)k(the)h(same)g(as)g(that)h(of)e(the)h(corresp)s
7755
(onding)e(C)i(routine,)f(but)g(with)g Fp(fftw/fftwnd/rfftw/rfftwn)o(d)
7756
150 2939 y Fv(replaced)g(b)m(y)g Fp(fftw_f77/fftwnd_f77/rff)o(tw_)o
7757
(f77/)o(rfft)o(wnd)o(_f77)o Fv(.)34 b(F)-8 b(or)28 b(example,)f(in)f(F)
7758
-8 b(ortran,)29 b(in-)150 3049 y(stead)41 b(of)f(calling)f
7759
Fp(fftw_one)e Fv(y)m(ou)k(w)m(ould)e(call)g Fp(fftw_f77_one)p
7760
Fv(.)2464 3016 y Fo(1)2568 3049 y Fv(F)-8 b(or)41 b(the)f(most)h(part,)
7761
h(all)d(of)i(the)150 3158 y(argumen)m(ts)31 b(to)g(the)f(functions)f
7686
7762
(are)i(the)g(same,)g(with)e(the)h(follo)m(wing)f(exceptions:)225
7687
3348 y Fs(\017)60 b Fo(plan)22 b Fu(v)-5 b(ariables)23
7688
b(\(what)g(w)m(ould)g(b)s(e)g(of)g(t)m(yp)s(e)h Fo(fftw_plan)p
7689
Fu(,)f Fo(rfftwnd_plan)p Fu(,)f(etcetera,)27 b(in)22
7690
b(C\),)i(m)m(ust)330 3457 y(b)s(e)37 b(declared)h(as)g(a)g(t)m(yp)s(e)g
7763
3287 y Ft(\017)60 b Fp(plan)22 b Fv(v)-5 b(ariables)23
7764
b(\(what)g(w)m(ould)g(b)s(e)g(of)g(t)m(yp)s(e)h Fp(fftw_plan)p
7765
Fv(,)f Fp(rfftwnd_plan)p Fv(,)f(etcetera,)27 b(in)22
7766
b(C\),)i(m)m(ust)330 3396 y(b)s(e)37 b(declared)h(as)g(a)g(t)m(yp)s(e)g
7691
7767
(that)g(is)f(the)h(same)h(size)e(as)i(a)f(p)s(oin)m(ter)f(\(address\))g
7692
(on)h(y)m(our)g(mac)m(hine.)330 3567 y(\(F)-8 b(ortran)33
7768
(on)h(y)m(our)g(mac)m(hine.)330 3506 y(\(F)-8 b(ortran)33
7693
7769
b(has)f(no)g(generic)g(p)s(oin)m(ter)f(t)m(yp)s(e.\))47
7694
b(The)32 b(F)-8 b(ortran)33 b Fo(integer)d Fu(t)m(yp)s(e)i(is)f
7695
(usually)f(the)j(same)330 3676 y(size)c(as)g(a)h(p)s(oin)m(ter,)f(but)f
7770
b(The)32 b(F)-8 b(ortran)33 b Fp(integer)d Fv(t)m(yp)s(e)i(is)f
7771
(usually)f(the)j(same)330 3615 y(size)c(as)g(a)h(p)s(oin)m(ter,)f(but)f
7696
7772
(y)m(ou)i(need)f(to)h(b)s(e)e(w)m(ary)h(\(esp)s(ecially)f(on)h(64-bit)h
7697
(mac)m(hines\).)40 b(\(Y)-8 b(ou)30 b(could)330 3786
7698
y(also)36 b(use)f Fo(integer*4)f Fu(on)i(a)g(32-bit)g(mac)m(hine)g(and)
7699
f Fo(integer*8)e Fu(on)j(a)g(64-bit)g(mac)m(hine.\))58
7700
b(Ugh.)330 3896 y(\()p Fo(g77)38 b Fu(has)g(a)h(sp)s(ecial)e(t)m(yp)s
7701
(e,)k Fo(integer\(kind=7\))p Fu(,)c(that)i(is)e(de\014ned)h(to)h(b)s(e)
7702
f(the)h(same)f(size)h(as)g(a)330 4005 y(p)s(oin)m(ter.\))225
7703
4139 y Fs(\017)60 b Fu(An)m(y)26 b(function)e(that)i(returns)e(a)i(v)-5
7704
b(alue)25 b(\(e.g.)40 b Fo(fftw_create_plan)p Fu(\))22
7705
b(is)i(con)m(v)m(erted)j(in)m(to)e(a)h(subrou-)330 4248
7773
(mac)m(hines\).)40 b(\(Y)-8 b(ou)30 b(could)330 3725
7774
y(also)36 b(use)f Fp(integer*4)f Fv(on)i(a)g(32-bit)g(mac)m(hine)g(and)
7775
f Fp(integer*8)e Fv(on)j(a)g(64-bit)g(mac)m(hine.\))58
7776
b(Ugh.)330 3835 y(\()p Fp(g77)38 b Fv(has)g(a)h(sp)s(ecial)e(t)m(yp)s
7777
(e,)k Fp(integer\(kind=7\))p Fv(,)c(that)i(is)e(de\014ned)h(to)h(b)s(e)
7778
f(the)h(same)f(size)h(as)g(a)330 3944 y(p)s(oin)m(ter.\))225
7779
4073 y Ft(\017)60 b Fv(An)m(y)26 b(function)e(that)i(returns)e(a)i(v)-5
7780
b(alue)25 b(\(e.g.)40 b Fp(fftw_create_plan)p Fv(\))22
7781
b(is)i(con)m(v)m(erted)j(in)m(to)e(a)h(subrou-)330 4182
7706
7782
y(tine.)40 b(The)28 b(return)g(v)-5 b(alue)28 b(is)g(con)m(v)m(erted)i
7707
7783
(in)m(to)f(an)f(additional)f(\(\014rst\))i(parameter)g(of)g(the)g
7708
(wrapp)s(er)330 4358 y(subroutine.)53 b(\(The)35 b(reason)h(for)f(this)
7784
(wrapp)s(er)330 4292 y(subroutine.)53 b(\(The)35 b(reason)h(for)f(this)
7709
7785
f(is)g(that)i(some)g(F)-8 b(ortran)35 b(implemen)m(tations)f(seem)i(to)
7710
g(ha)m(v)m(e)330 4467 y(trouble)29 b(with)g(C)h(function)f(return)h(v)
7711
-5 b(alues.\))225 4601 y Fs(\017)60 b Fu(When)29 b(p)s(erforming)e
7712
(one-dimensional)h Fo(FFTW_IN_PLACE)d Fu(transforms,)k(y)m(ou)h(don't)g
7713
(ha)m(v)m(e)g(the)g(op-)330 4711 y(tion)36 b(of)i(passing)d
7714
Fo(NULL)h Fu(for)h(the)g Fo(out)f Fu(argumen)m(t)i(\(since)e(there)h
7715
(is)f(no)h(w)m(a)m(y)h(to)g(pass)f Fo(NULL)e Fu(from)330
7716
4820 y(F)-8 b(ortran\).)69 b(Therefore,)42 b(when)c(p)s(erforming)g
7717
(suc)m(h)h(transforms,)i(y)m(ou)f Fq(must)48 b Fu(allo)s(cate)40
7718
b(and)f(pass)330 4930 y(a)e(con)m(tiguous)f(scratc)m(h)i(arra)m(y)f(of)
7786
g(ha)m(v)m(e)330 4401 y(trouble)29 b(with)g(C)h(function)f(return)h(v)
7787
-5 b(alues.\))225 4530 y Ft(\017)60 b Fv(When)29 b(p)s(erforming)e
7788
(one-dimensional)h Fp(FFTW_IN_PLACE)d Fv(transforms,)k(y)m(ou)h(don't)g
7789
(ha)m(v)m(e)g(the)g(op-)330 4639 y(tion)36 b(of)i(passing)d
7790
Fp(NULL)h Fv(for)h(the)g Fp(out)f Fv(argumen)m(t)i(\(since)e(there)h
7791
(is)f(no)h(w)m(a)m(y)h(to)g(pass)f Fp(NULL)e Fv(from)330
7792
4749 y(F)-8 b(ortran\).)69 b(Therefore,)42 b(when)c(p)s(erforming)g
7793
(suc)m(h)h(transforms,)i(y)m(ou)f Fr(must)48 b Fv(allo)s(cate)40
7794
b(and)f(pass)330 4859 y(a)e(con)m(tiguous)f(scratc)m(h)i(arra)m(y)f(of)
7719
7795
f(the)h(same)g(size)f(as)h(the)g(transform.)58 b(Note)38
7720
b(that)f(for)f(in-place)p 150 5022 1200 4 v 192 5088
7721
a Fn(1)275 5121 y Fu(T)-8 b(ec)m(hnically)g(,)34 b(F)-8
7722
b(ortran)35 b(77)g(iden)m(ti\014ers)d(are)i(not)g(allo)m(w)m(ed)g(to)h
7723
(ha)m(v)m(e)g(more)g(than)e(6)i(c)m(haracters,)h(nor)275
7724
5230 y(ma)m(y)23 b(they)f(con)m(tain)h(underscores.)37
7725
b(An)m(y)23 b(compiler)e(that)i(enforces)g(this)e(limitation)f(do)s
7726
(esn't)i(deserv)m(e)275 5340 y(to)31 b(link)d(to)j(FFTW.)p
7796
b(that)f(for)f(in-place)330 4968 y(m)m(ulti-dimensional)d(\()p
7797
Fp(\(r\)fftwnd)p Fv(\))j(transforms,)j(the)e Fp(out)g
7798
Fv(argumen)m(t)g(is)g(ignored,)h(so)g(y)m(ou)g(can)330
7799
5078 y(pass)30 b(an)m(ything)g(for)g(that)h(parameter.)p
7800
150 5149 1200 4 v 199 5217 a Fo(1)275 5249 y Fj(T)-6
7801
b(ec)n(hnically)g(,)24 b(F)-6 b(ortran)24 b(77)h(iden)n(ti\014ers)e
7802
(are)i(not)e(allo)n(w)n(ed)j(to)e(ha)n(v)n(e)f(more)g(than)h(6)g(c)n
7803
(haracters,)h(nor)f(ma)n(y)f(they)g(con)n(tain)275 5340
7804
y(underscores.)34 b(An)n(y)25 b(compiler)g(that)h(enforces)h(this)e
7805
(limitation)i(do)r(esn't)f(deserv)n(e)f(to)h(link)f(to)h(FFTW.)p
7729
52 53 bop 150 -116 a Fu(52)3232 b(FFTW)330 299 y(m)m(ulti-dimensional)
7730
33 b(\()p Fo(\(r\)fftwnd)p Fu(\))j(transforms,)j(the)e
7731
Fo(out)g Fu(argumen)m(t)g(is)g(ignored,)h(so)g(y)m(ou)g(can)330
7732
408 y(pass)30 b(an)m(ything)g(for)g(that)h(parameter.)225
7733
543 y Fs(\017)60 b Fu(The)37 b(wrapp)s(er)e(routines)h(exp)s(ect)i(m)m
7808
TeXDict begin 52 53 bop 150 -116 a Fv(52)3232 b(FFTW)225
7809
299 y Ft(\017)60 b Fv(The)37 b(wrapp)s(er)e(routines)h(exp)s(ect)i(m)m
7734
7810
(ulti-dimensional)33 b(arra)m(ys)k(to)h(b)s(e)f(in)f(column-ma)5
7735
b(jor)36 b(order,)330 652 y(whic)m(h)c(is)g(the)i(ordinary)d(format)j
7811
b(jor)36 b(order,)330 408 y(whic)m(h)c(is)g(the)i(ordinary)d(format)j
7736
7812
(of)f(F)-8 b(ortran)34 b(arra)m(ys.)50 b(They)32 b(do)h(this)g
7737
(transparen)m(tly)f(and)h(cost-)330 762 y(lessly)f(simply)g(b)m(y)h
7813
(transparen)m(tly)f(and)h(cost-)330 518 y(lessly)f(simply)g(b)m(y)h
7738
7814
(rev)m(ersing)h(the)g(order)f(of)h(the)g(dimensions)d(passed)i(to)i
7739
(FFTW,)f(but)f(this)g(has)330 872 y(one)38 b(imp)s(ortan)m(t)f
7815
(FFTW,)f(but)f(this)g(has)330 628 y(one)38 b(imp)s(ortan)m(t)f
7740
7816
(consequence)i(for)e(m)m(ulti-dimensional)d(real-complex)k(transforms,)
7741
h(discussed)330 981 y(b)s(elo)m(w.)275 1165 y(In)32 b(general,)h(y)m
7742
(ou)h(should)d(tak)m(e)j(care)g(to)g(use)e(F)-8 b(ortran)34
7817
h(discussed)330 737 y(b)s(elo)m(w.)275 923 y(In)32 b(general,)h(y)m(ou)
7818
h(should)d(tak)m(e)j(care)g(to)g(use)e(F)-8 b(ortran)34
7743
7819
b(data)f(t)m(yp)s(es)g(that)h(corresp)s(ond)d(to)j(\(i.e.)49
7744
b(are)150 1275 y(the)27 b(same)h(size)f(as\))g(the)h(C)e(t)m(yp)s(es)h
7820
b(are)150 1033 y(the)27 b(same)h(size)f(as\))g(the)h(C)e(t)m(yp)s(es)h
7745
7821
(used)g(b)m(y)g(FFTW.)h(If)e(y)m(our)h(C)g(and)f(F)-8
7746
b(ortran)28 b(compilers)d(are)j(made)f(b)m(y)150 1385
7822
b(ortran)28 b(compilers)d(are)j(made)f(b)m(y)150 1142
7747
7823
y(the)33 b(same)h(v)m(endor,)g(the)f(corresp)s(ondence)f(is)h(usually)d
7748
(straigh)m(tforw)m(ard)j(\(i.e.)49 b Fo(integer)31 b
7749
Fu(corresp)s(onds)150 1494 y(to)38 b Fo(int)p Fu(,)g
7750
Fo(real)e Fu(corresp)s(onds)g(to)h Fo(float)p Fu(,)h(etcetera\).)63
7824
(straigh)m(tforw)m(ard)j(\(i.e.)49 b Fp(integer)31 b
7825
Fv(corresp)s(onds)150 1252 y(to)38 b Fp(int)p Fv(,)g
7826
Fp(real)e Fv(corresp)s(onds)g(to)h Fp(float)p Fv(,)h(etcetera\).)63
7751
7827
b(Suc)m(h)37 b(simple)e(corresp)s(ondences)h(are)i(assumed)150
7752
1604 y(in)h(the)h(examples)g(b)s(elo)m(w.)68 b(The)40
7828
1362 y(in)h(the)h(examples)g(b)s(elo)m(w.)68 b(The)40
7753
7829
b(examples)g(also)g(assume)f(that)i(FFTW)g(w)m(as)f(compiled)f(in)f
7754
(double)150 1713 y(precision)29 b(\(the)h(default\).)150
7755
1971 y Ft(5.2)68 b(FFTW)43 b(Constan)l(ts)j(in)f(F)-11
7756
b(ortran)275 2163 y Fu(When)44 b(creating)h(plans)e(in)h(FFTW,)h(a)g(n)
7830
(double)150 1471 y(precision)29 b(\(the)h(default\).)150
7831
1731 y Fu(5.2)68 b(FFTW)43 b(Constan)l(ts)j(in)f(F)-11
7832
b(ortran)275 1924 y Fv(When)44 b(creating)h(plans)e(in)h(FFTW,)h(a)g(n)
7757
7833
m(um)m(b)s(er)f(of)h(constan)m(ts)h(are)f(used)f(to)h(sp)s(ecify)e
7758
(options,)150 2273 y(suc)m(h)36 b(as)g Fo(FFTW_FORWARD)d
7759
Fu(or)j Fo(FFTW_USE_WISDOM)p Fu(.)54 b(The)35 b(same)i(constan)m(ts)g
7760
(m)m(ust)f(b)s(e)g(used)f(with)g(the)150 2382 y(wrapp)s(er)28
7834
(options,)150 2034 y(suc)m(h)36 b(as)g Fp(FFTW_FORWARD)d
7835
Fv(or)j Fp(FFTW_USE_WISDOM)p Fv(.)54 b(The)35 b(same)i(constan)m(ts)g
7836
(m)m(ust)f(b)s(e)g(used)f(with)g(the)150 2143 y(wrapp)s(er)28
7761
7837
b(routines,)g(but)h(of)g(course)h(the)f(C)g(header)g(\014les)g(where)g
7762
7838
(the)g(constan)m(ts)i(are)e(de\014ned)f(can't)j(b)s(e)150
7763
2492 y(incorp)s(orated)e(directly)g(in)m(to)i(F)-8 b(ortran)31
7764
b(co)s(de.)275 2626 y(Instead,)c(w)m(e)g(ha)m(v)m(e)h(placed)e(F)-8
7839
2253 y(incorp)s(orated)e(directly)g(in)m(to)i(F)-8 b(ortran)31
7840
b(co)s(de.)275 2388 y(Instead,)c(w)m(e)g(ha)m(v)m(e)h(placed)e(F)-8
7765
7841
b(ortran)27 b(equiv)-5 b(alen)m(ts)26 b(of)h(the)g(FFTW)g(constan)m(t)h
7766
(de\014nitions)c(in)h(the)i(\014le)150 2736 y Fo(fortran/fftw_f77.i)h
7767
Fu(of)33 b(the)h(FFTW)f(pac)m(k)-5 b(age.)51 b(If)33
7842
(de\014nitions)c(in)h(the)i(\014le)150 2498 y Fp(fortran/fftw_f77.i)h
7843
Fv(of)33 b(the)h(FFTW)f(pac)m(k)-5 b(age.)51 b(If)33
7768
7844
b(y)m(our)g(F)-8 b(ortran)33 b(compiler)f(supp)s(orts)f(a)j(prepro-)150
7769
2845 y(cessor,)i(y)m(ou)f(can)g(use)g(that)g(to)g(incorp)s(orate)f
7845
2607 y(cessor,)i(y)m(ou)f(can)g(use)g(that)g(to)g(incorp)s(orate)f
7770
7846
(this)g(\014le)f(in)m(to)i(y)m(our)g(co)s(de)f(whenev)m(er)h(y)m(ou)g
7771
(need)f(to)i(call)150 2955 y(FFTW.)31 b(Otherwise,)f(y)m(ou)g(will)e
7847
(need)f(to)i(call)150 2717 y(FFTW.)31 b(Otherwise,)f(y)m(ou)g(will)e
7772
7848
(ha)m(v)m(e)k(to)f(paste)g(the)f(constan)m(t)i(de\014nitions)c(in)h
7773
(directly)-8 b(.)40 b(They)30 b(are:)676 3084 y Fo(integer)46
7774
b(FFTW_FORWARD,FFTW_BACKWAR)o(D)676 3187 y(parameter)g
7775
(\(FFTW_FORWARD=-1,FFTW_B)o(ACKW)o(ARD)o(=1\))676 3395
7849
(directly)-8 b(.)40 b(They)30 b(are:)676 2846 y Fp(integer)46
7850
b(FFTW_FORWARD,FFTW_BACKWAR)o(D)676 2950 y(parameter)g
7851
(\(FFTW_FORWARD=-1,FFTW_B)o(ACKW)o(ARD)o(=1\))676 3158
7776
7852
y(integer)g(FFTW_REAL_TO_COMPLEX,FFTW)o(_COM)o(PLE)o(X_TO)o(_REA)o(L)
7777
676 3499 y(parameter)g(\(FFTW_REAL_TO_COMPLEX=-)o(1,FF)o(TW_)o(COMP)o
7778
(LEX_)o(TO_)o(REAL)o(=1\))676 3706 y(integer)g
7779
(FFTW_ESTIMATE,FFTW_MEASUR)o(E)676 3810 y(parameter)g
7780
(\(FFTW_ESTIMATE=0,FFTW_M)o(EASU)o(RE=)o(1\))676 4018
7853
676 3262 y(parameter)g(\(FFTW_REAL_TO_COMPLEX=-)o(1,FF)o(TW_)o(COMP)o
7854
(LEX_)o(TO_)o(REAL)o(=1\))676 3469 y(integer)g
7855
(FFTW_ESTIMATE,FFTW_MEASUR)o(E)676 3573 y(parameter)g
7856
(\(FFTW_ESTIMATE=0,FFTW_M)o(EASU)o(RE=)o(1\))676 3780
7781
7857
y(integer)g(FFTW_OUT_OF_PLACE,FFTW_IN)o(_PLA)o(CE,)o(FFTW)o(_USE)o(_WI)
7782
o(SDOM)676 4121 y(parameter)g(\(FFTW_OUT_OF_PLACE=0\))676
7783
4225 y(parameter)g(\(FFTW_IN_PLACE=8,FFTW_U)o(SE_W)o(ISD)o(OM=1)o(6\))
7784
676 4433 y(integer)g(FFTW_THREADSAFE)676 4537 y(parameter)g
7785
(\(FFTW_THREADSAFE=128\))275 4671 y Fu(In)31 b(C,)h(y)m(ou)g(com)m
7786
(bine)g(di\013eren)m(t)g(\015ags)g(\(lik)m(e)g Fo(FFTW_USE_WISDOM)c
7787
Fu(and)j Fo(FFTW_MEASURE)p Fu(\))e(using)i(the)150 4781
7788
y(`)p Fo(|)p Fu(')g(op)s(erator;)f(in)g(F)-8 b(ortran)31
7789
b(y)m(ou)f(should)f(just)g(use)i(`)p Fo(+)p Fu('.)150
7790
5038 y Ft(5.3)68 b(F)-11 b(ortran)45 b(Examples)275 5230
7791
y Fu(In)20 b(C)h(y)m(ou)h(migh)m(t)g(ha)m(v)m(e)g(something)f(lik)m(e)g
7858
o(SDOM)676 3884 y(parameter)g(\(FFTW_OUT_OF_PLACE=0\))676
7859
3988 y(parameter)g(\(FFTW_IN_PLACE=8,FFTW_U)o(SE_W)o(ISD)o(OM=1)o(6\))
7860
676 4196 y(integer)g(FFTW_THREADSAFE)676 4299 y(parameter)g
7861
(\(FFTW_THREADSAFE=128\))275 4435 y Fv(In)31 b(C,)h(y)m(ou)g(com)m
7862
(bine)g(di\013eren)m(t)g(\015ags)g(\(lik)m(e)g Fp(FFTW_USE_WISDOM)c
7863
Fv(and)j Fp(FFTW_MEASURE)p Fv(\))e(using)i(the)150 4544
7864
y(`)p Fp(|)p Fv(')g(op)s(erator;)f(in)g(F)-8 b(ortran)31
7865
b(y)m(ou)f(should)f(just)g(use)i(`)p Fp(+)p Fv('.)150
7866
4804 y Fu(5.3)68 b(F)-11 b(ortran)45 b(Examples)275 4997
7867
y Fv(In)20 b(C)h(y)m(ou)h(migh)m(t)g(ha)m(v)m(e)g(something)f(lik)m(e)g
7792
7868
(the)h(follo)m(wing)e(to)i(transform)f(a)h(one-dimensional)d(complex)
7793
150 5340 y(arra)m(y:)p eop
7869
150 5107 y(arra)m(y:)772 5236 y Fp(fftw_complex)44 b(in[N],)i(*out[N];)
7870
772 5340 y(fftw_plan)f(plan;)p eop end
7795
53 54 bop 150 -116 a Fu(Chapter)30 b(5:)41 b(Calling)28
7796
b(FFTW)j(from)f(F)-8 b(ortran)1909 b(53)772 299 y Fo(fftw_complex)44
7797
b(in[N],)i(*out[N];)772 403 y(fftw_plan)f(plan;)772 610
7798
y(plan)h(=)i(fftw_create_plan\(N,FFTW_)o(FORW)o(ARD)o(,FFT)o(W_ES)o
7799
(TIM)o(ATE\))o(;)772 714 y(fftw_one\(plan,in,out\);)772
7800
818 y(fftw_destroy_plan\(plan\);)275 961 y Fu(In)29 b(F)-8
7872
TeXDict begin 53 54 bop 150 -116 a Fv(Chapter)30 b(5:)41
7873
b(Calling)28 b(FFTW)j(from)f(F)-8 b(ortran)1909 b(53)772
7874
403 y Fp(plan)46 b(=)i(fftw_create_plan\(N,FFTW_)o(FORW)o(ARD)o(,FFT)o
7875
(W_ES)o(TIM)o(ATE\))o(;)772 506 y(fftw_one\(plan,in,out\);)772
7876
610 y(fftw_destroy_plan\(plan\);)275 749 y Fv(In)29 b(F)-8
7801
7877
b(ortran,)31 b(y)m(ou)g(use)f(the)h(follo)m(wing)e(to)i(accomplish)e
7802
(the)h(same)h(thing:)772 1099 y Fo(double)46 b(complex)g(in,)h(out)772
7803
1203 y(dimension)e(in\(N\),)h(out\(N\))772 1307 y(integer)g(plan)772
7804
1515 y(call)g(fftw_f77_create_plan\(plan,)o(N,FF)o(TW_)o(FORW)o(ARD,)o
7805
(FFT)o(W_ES)o(TIMA)o(TE\))772 1618 y(call)g
7806
(fftw_f77_one\(plan,in,out\))772 1722 y(call)g
7807
(fftw_f77_destroy_plan\(plan)o(\))275 1866 y Fu(Notice)34
7878
(the)h(same)h(thing:)772 883 y Fp(double)46 b(complex)g(in,)h(out)772
7879
986 y(dimension)e(in\(N\),)h(out\(N\))772 1090 y(integer)g(plan)772
7880
1298 y(call)g(fftw_f77_create_plan\(plan,)o(N,FF)o(TW_)o(FORW)o(ARD,)o
7881
(FFT)o(W_ES)o(TIMA)o(TE\))772 1402 y(call)g
7882
(fftw_f77_one\(plan,in,out\))772 1505 y(call)g
7883
(fftw_f77_destroy_plan\(plan)o(\))275 1644 y Fv(Notice)34
7808
7884
b(ho)m(w)g(all)f(routines)f(are)i(called)f(as)h(F)-8
7809
7885
b(ortran)35 b(subroutines,)d(and)i(the)g(plan)e(is)h(returned)f(via)150
7810
1975 y(the)43 b(\014rst)e(argumen)m(t)i(to)g Fo(fftw_f77_create_plan)p
7811
Fu(.)72 b Fq(Imp)-5 b(ortant:)72 b Fu(these)43 b(examples)f(assume)g
7812
(that)150 2085 y Fo(integer)26 b Fu(is)h(the)i(same)f(size)g(as)g(a)h
7886
1754 y(the)43 b(\014rst)e(argumen)m(t)i(to)g Fp(fftw_f77_create_plan)p
7887
Fv(.)72 b Fr(Imp)-5 b(ortant:)72 b Fv(these)43 b(examples)f(assume)g
7888
(that)150 1864 y Fp(integer)26 b Fv(is)h(the)i(same)f(size)g(as)g(a)h
7813
7889
(p)s(oin)m(ter,)f(and)f(ma)m(y)i(need)f(mo)s(di\014cation)e(on)i(a)h
7814
(64-bit)f(mac)m(hine.)40 b(See)150 2195 y(Section)28
7890
(64-bit)f(mac)m(hine.)40 b(See)150 1973 y(Section)28
7815
7891
b(5.1)h([W)-8 b(rapp)s(er)28 b(Routines],)g(page)h(51,)h(ab)s(o)m(v)m
7816
7892
(e.)41 b(T)-8 b(o)29 b(do)f(the)g(same)h(thing,)f(but)f(using)g(8)h
7817
(threads)150 2304 y(in)d(parallel)g(\(see)j(Section)f(4.1)h
7893
(threads)150 2083 y(in)d(parallel)g(\(see)j(Section)f(4.1)h
7818
7894
([Multi-threaded)d(FFTW],)j(page)g(37\),)h(y)m(ou)e(w)m(ould)f(simply)e
7819
(replace)j(the)150 2414 y(call)j(to)h Fo(fftw_f77_one)c
7820
Fu(with:)772 2552 y Fo(call)46 b(fftw_f77_threads_one\(8,pla)o(n,in)o
7821
(,ou)o(t\))275 2695 y Fu(T)-8 b(o)30 b(transform)g(a)h
7895
(replace)j(the)150 2192 y(call)j(to)h Fp(fftw_f77_one)c
7896
Fv(with:)772 2326 y Fp(call)46 b(fftw_f77_threads_one\(8,pla)o(n,in)o
7897
(,ou)o(t\))275 2465 y Fv(T)-8 b(o)30 b(transform)g(a)h
7822
7898
(three-dimensional)d(arra)m(y)j(in-place)e(with)g(C,)h(y)m(ou)h(migh)m
7823
(t)f(do:)772 2833 y Fo(fftw_complex)44 b(arr[L][M][N];)772
7824
2937 y(fftwnd_plan)h(plan;)772 3041 y(int)i(n[3])f(=)i({L,M,N};)772
7825
3248 y(plan)e(=)i(fftwnd_create_plan\(3,n,F)o(FTW_)o(FOR)o(WARD)o(,)
7826
2013 3352 y(FFTW_ESTIMATE)c(|)j(FFTW_IN_PLACE\);)772
7827
3456 y(fftwnd_one\(plan,)c(arr,)k(0\);)772 3560 y
7828
(fftwnd_destroy_plan\(plan)o(\);)275 3703 y Fu(In)29
7899
(t)f(do:)772 2598 y Fp(fftw_complex)44 b(arr[L][M][N];)772
7900
2702 y(fftwnd_plan)h(plan;)772 2806 y(int)i(n[3])f(=)i({L,M,N};)772
7901
3013 y(plan)e(=)i(fftwnd_create_plan\(3,n,F)o(FTW_)o(FOR)o(WARD)o(,)
7902
2013 3117 y(FFTW_ESTIMATE)c(|)j(FFTW_IN_PLACE\);)772
7903
3221 y(fftwnd_one\(plan,)c(arr,)k(0\);)772 3325 y
7904
(fftwnd_destroy_plan\(plan)o(\);)275 3464 y Fv(In)29
7829
7905
b(F)-8 b(ortran,)31 b(y)m(ou)g(w)m(ould)e(use)h(this)g(instead:)772
7830
3841 y Fo(double)46 b(complex)g(arr)772 3945 y(dimension)f
7831
(arr\(L,M,N\))772 4049 y(integer)h(n)772 4153 y(dimension)f(n\(3\))772
7832
4256 y(integer)h(plan)772 4464 y(n\(1\))g(=)i(L)772 4568
7833
y(n\(2\))e(=)i(M)772 4672 y(n\(3\))e(=)i(N)772 4775 y(call)e
7906
3597 y Fp(double)46 b(complex)g(arr)772 3701 y(dimension)f
7907
(arr\(L,M,N\))772 3805 y(integer)h(n)772 3909 y(dimension)f(n\(3\))772
7908
4012 y(integer)h(plan)772 4220 y(n\(1\))g(=)i(L)772 4324
7909
y(n\(2\))e(=)i(M)772 4427 y(n\(3\))e(=)i(N)772 4531 y(call)e
7834
7910
(fftwnd_f77_create_plan\(pla)o(n,3,)o(n,F)o(FTW_)o(FORW)o(ARD)o(,)724
7835
4879 y(+)1336 b(FFTW_ESTIMATE)44 b(+)k(FFTW_IN_PLACE\))772
7836
4983 y(call)e(fftwnd_f77_one\(plan,)d(arr,)j(0\))772
7837
5087 y(call)g(fftwnd_f77_destroy_plan\(pl)o(an\))275
7838
5230 y Fu(Instead)29 b(of)h(calling)e Fo(fftwnd_f77_create_plan\()o
7839
(plan)o(,3,n)o(,..)o(.\))p Fu(,)c(w)m(e)30 b(could)e(also)i(ha)m(v)m(e)
7840
h(called)150 5340 y Fo(fftw3d_f77_create_plan\(p)o(lan,)o(L,M,)o(N,.)o
7911
4635 y(+)1336 b(FFTW_ESTIMATE)44 b(+)k(FFTW_IN_PLACE\))772
7912
4739 y(call)e(fftwnd_f77_one\(plan,)d(arr,)j(0\))772
7913
4843 y(call)g(fftwnd_f77_destroy_plan\(pl)o(an\))275
7914
4982 y Fv(Instead)29 b(of)h(calling)e Fp(fftwnd_f77_create_plan\()o
7915
(plan)o(,3,n)o(,..)o(.\))p Fv(,)c(w)m(e)30 b(could)e(also)i(ha)m(v)m(e)
7916
h(called)150 5091 y Fp(fftw3d_f77_create_plan\(p)o(lan,)o(L,M,)o(N,.)o
7917
(..\))p Fv(.)275 5230 y(Note)j(that)g(w)m(e)g(pass)f(the)h(arra)m(y)g
7918
(dimensions)d(in)h(the)h Fp(")p Fv(natural)p Fp(")f Fv(order;)j(also)e
7919
(note)h(that)g(the)g(last)150 5340 y(argumen)m(t)d(to)g
7920
Fp(fftwnd_f77)d Fv(is)h(ignored)g(since)h(the)h(transform)e(is)h
7921
Fp(FFTW_IN_PLACE)p Fv(.)p eop end
7843
54 55 bop 150 -116 a Fu(54)3232 b(FFTW)275 299 y(Note)34
7844
b(that)g(w)m(e)g(pass)f(the)h(arra)m(y)g(dimensions)d(in)h(the)h
7845
Fo(")p Fu(natural)p Fo(")f Fu(order;)j(also)e(note)h(that)g(the)g(last)
7846
150 408 y(argumen)m(t)d(to)g Fo(fftwnd_f77)d Fu(is)h(ignored)g(since)h
7847
(the)h(transform)e(is)h Fo(FFTW_IN_PLACE)p Fu(.)275 543
7848
y(T)-8 b(o)30 b(transform)g(a)h(one-dimensional)d(real)i(arra)m(y)h(in)
7849
e(F)-8 b(ortran,)31 b(y)m(ou)g(migh)m(t)f(do:)772 672
7850
y Fo(double)46 b(precision)f(in,)i(out)772 775 y(dimension)e(in\(N\),)h
7851
(out\(N\))772 879 y(integer)g(plan)772 1087 y(call)g
7852
(rfftw_f77_create_plan\(plan)o(,N,F)o(FTW)o(_REA)o(L_TO)o(_CO)o(MPLE)o
7853
(X,)724 1191 y(+)1288 b(FFTW_ESTIMATE\))772 1294 y(call)46
7854
b(rfftw_f77_one\(plan,in,out\))772 1398 y(call)g
7855
(rfftw_f77_destroy_plan\(pla)o(n\))275 1533 y Fu(T)-8
7923
TeXDict begin 54 55 bop 150 -116 a Fv(54)3232 b(FFTW)275
7924
299 y(T)-8 b(o)30 b(transform)g(a)h(one-dimensional)d(real)i(arra)m(y)h
7925
(in)e(F)-8 b(ortran,)31 b(y)m(ou)g(migh)m(t)f(do:)772
7926
428 y Fp(double)46 b(precision)f(in,)i(out)772 531 y(dimension)e
7927
(in\(N\),)h(out\(N\))772 635 y(integer)g(plan)772 843
7928
y(call)g(rfftw_f77_create_plan\(plan)o(,N,F)o(FTW)o(_REA)o(L_TO)o(_CO)o
7929
(MPLE)o(X,)724 946 y(+)1288 b(FFTW_ESTIMATE\))772 1050
7930
y(call)46 b(rfftw_f77_one\(plan,in,out\))772 1154 y(call)g
7931
(rfftw_f77_destroy_plan\(pla)o(n\))275 1289 y Fv(T)-8
7856
7932
b(o)30 b(transform)g(a)h(t)m(w)m(o-dimensional)e(real)h(arra)m(y)-8
7857
7933
b(,)32 b(out)e(of)h(place,)f(y)m(ou)h(migh)m(t)f(use)g(the)h(follo)m
7858
(wing:)772 1661 y Fo(double)46 b(precision)f(in)772 1765
7859
y(double)h(complex)g(out)772 1869 y(dimension)f(in\(M,N\),)h(out\(M/2)f
7860
(+)j(1,)f(N\))772 1973 y(integer)f(plan)772 2180 y(call)g
7934
(wing:)772 1417 y Fp(double)46 b(precision)f(in)772 1521
7935
y(double)h(complex)g(out)772 1625 y(dimension)f(in\(M,N\),)h(out\(M/2)f
7936
(+)j(1,)f(N\))772 1729 y(integer)f(plan)772 1936 y(call)g
7861
7937
(rfftw2d_f77_create_plan\(pl)o(an,M)o(,N,)o(FFTW)o(_REA)o(L_T)o(O_CO)o
7862
(MPLE)o(X,)724 2284 y(+)1384 b(FFTW_ESTIMATE\))772 2388
7938
(MPLE)o(X,)724 2040 y(+)1384 b(FFTW_ESTIMATE\))772 2144
7863
7939
y(call)46 b(rfftwnd_f77_one_real_to_co)o(mple)o(x\(p)o(lan,)41
7864
b(in,)47 b(out\))772 2491 y(call)f(rfftwnd_f77_destroy_plan\(p)o(lan\))
7865
275 2626 y Fm(Imp)s(ortan)m(t:)40 b Fu(Notice)30 b(that)g(it)f(is)f
7866
(the)i Fq(\014rst)38 b Fu(dimension)27 b(of)i(the)h(complex)f(output)g
7867
(arra)m(y)h(that)f(is)g(cut)150 2736 y(in)38 b(half)g(in)g(F)-8
7940
b(in,)47 b(out\))772 2247 y(call)f(rfftwnd_f77_destroy_plan\(p)o(lan\))
7941
275 2382 y Fn(Imp)s(ortan)m(t:)40 b Fv(Notice)30 b(that)g(it)f(is)f
7942
(the)i Fr(\014rst)38 b Fv(dimension)27 b(of)i(the)h(complex)f(output)g
7943
(arra)m(y)h(that)f(is)g(cut)150 2491 y(in)38 b(half)g(in)g(F)-8
7868
7944
b(ortran,)42 b(rather)d(than)g(the)h(last)f(dimension)e(as)i(in)f(C.)h
7869
(This)e(is)i(a)g(consequence)h(of)g(the)150 2845 y(wrapp)s(er)29
7945
(This)e(is)i(a)g(consequence)h(of)g(the)150 2601 y(wrapp)s(er)29
7870
7946
b(routines)h(rev)m(ersing)g(the)i(order)e(of)h(the)g(arra)m(y)h
7871
7947
(dimensions)c(passed)j(to)g(FFTW)h(so)f(that)h(the)150
7872
2955 y(F)-8 b(ortran)31 b(program)f(can)h(use)f(its)g(ordinary)e
7873
(column-ma)5 b(jor)30 b(order.)p eop
7948
2711 y(F)-8 b(ortran)31 b(program)f(can)h(use)f(its)g(ordinary)e
7949
(column-ma)5 b(jor)30 b(order.)p eop end
7875
55 56 bop 150 -116 a Fu(Chapter)30 b(6:)41 b(Installation)29
7876
b(and)g(Customization)1808 b(55)150 299 y Fr(6)80 b(Installation)56
7877
b(and)d(Customization)275 515 y Fu(This)32 b(c)m(hapter)j(describ)s(es)
7878
e(the)h(installation)f(and)h(customization)g(of)g(FFTW,)i(the)e(latest)
7879
h(v)m(ersion)150 625 y(of)c(whic)m(h)e(ma)m(y)i(b)s(e)e(do)m(wnloaded)h
7880
(from)g(the)g(FFTW)h(home)g(page)g(\()p Fo(http://www.fftw.org)p
7881
Fu(\).)275 756 y(As)e(distributed,)e(FFTW)j(mak)m(es)h(v)m(ery)f(few)f
7951
TeXDict begin 55 56 bop 150 -116 a Fv(Chapter)30 b(6:)41
7952
b(Installation)29 b(and)g(Customization)1808 b(55)150
7953
299 y Fs(6)80 b(Installation)56 b(and)d(Customization)275
7954
520 y Fv(This)32 b(c)m(hapter)j(describ)s(es)e(the)h(installation)f
7955
(and)h(customization)g(of)g(FFTW,)i(the)e(latest)h(v)m(ersion)150
7956
629 y(of)c(whic)m(h)e(ma)m(y)i(b)s(e)e(do)m(wnloaded)h(from)g(the)g
7957
(FFTW)h(home)g(page)g(\()p Fp(http://www.fftw.org)p Fv(\).)275
7958
761 y(As)e(distributed,)e(FFTW)j(mak)m(es)h(v)m(ery)f(few)f
7882
7959
(assumptions)f(ab)s(out)h(y)m(our)h(system.)40 b(All)29
7883
b(y)m(ou)h(need)f(is)150 866 y(an)i(ANSI)g(C)g(compiler)e(\()p
7884
Fo(gcc)i Fu(is)f(\014ne,)h(although)f(v)m(endor-pro)m(vided)g
7885
(compilers)g(often)i(pro)s(duce)e(faster)150 975 y(co)s(de\).)50
7960
b(y)m(ou)h(need)f(is)150 871 y(an)i(ANSI)g(C)g(compiler)e(\()p
7961
Fp(gcc)i Fv(is)f(\014ne,)h(although)f(v)m(endor-pro)m(vided)g
7962
(compilers)g(often)i(pro)s(duce)e(faster)150 980 y(co)s(de\).)50
7886
7963
b(Ho)m(w)m(ev)m(er,)36 b(installation)31 b(of)i(FFTW)h(is)e(somewhat)i
7887
7964
(simpler)d(if)h(y)m(ou)i(ha)m(v)m(e)g(a)f(Unix)g(or)g(a)g(GNU)150
7888
1085 y(system,)46 b(suc)m(h)d(as)g(Lin)m(ux.)77 b(In)42
7965
1090 y(system,)46 b(suc)m(h)d(as)g(Lin)m(ux.)77 b(In)42
7889
7966
b(this)g(c)m(hapter,)47 b(w)m(e)d(\014rst)e(describ)s(e)f(the)i
7890
(installation)e(of)i(FFTW)h(on)150 1194 y(Unix)33 b(and)h(non-Unix)f
7967
(installation)e(of)i(FFTW)h(on)150 1200 y(Unix)33 b(and)h(non-Unix)f
7891
7968
(systems.)53 b(W)-8 b(e)36 b(then)e(describ)s(e)f(ho)m(w)i(y)m(ou)g
7892
(can)f(customize)h(FFTW)g(to)h(ac)m(hiev)m(e)150 1304
7969
(can)f(customize)h(FFTW)g(to)h(ac)m(hiev)m(e)150 1309
7893
7970
y(b)s(etter)41 b(p)s(erformance.)71 b(Sp)s(eci\014cally)-8
7894
b(,)41 b(y)m(ou)g(can)g(I\))g(enable)f Fo(gcc)p Fu(/x86-sp)s(eci\014c)g
7895
(hac)m(ks)i(that)f(impro)m(v)m(e)150 1414 y(p)s(erformance)26
7971
b(,)41 b(y)m(ou)g(can)g(I\))g(enable)f Fp(gcc)p Fv(/x86-sp)s(eci\014c)g
7972
(hac)m(ks)i(that)f(impro)m(v)m(e)150 1419 y(p)s(erformance)26
7896
7973
b(on)g(P)m(en)m(tia)h(and)e(P)m(en)m(tiumPro's;)j(I)s(I\))e(adapt)g
7897
7974
(FFTW)h(to)g(use)f(the)h(high-resolution)d(clo)s(c)m(k)150
7898
1523 y(of)i(y)m(our)h(mac)m(hine,)g(if)e(an)m(y;)j(I)s(I)s(I\))d(pro)s
7899
(duce)g(co)s(de)i(\()p Fq(c)-5 b(o)g(delets)7 b Fu(\))29
7975
1528 y(of)i(y)m(our)h(mac)m(hine,)g(if)e(an)m(y;)j(I)s(I)s(I\))d(pro)s
7976
(duce)g(co)s(de)i(\()p Fr(c)-5 b(o)g(delets)7 b Fv(\))29
7900
7977
b(to)e(supp)s(ort)d(fast)j(transforms)e(of)h(sizes)g(that)150
7901
1633 y(are)31 b(not)f(supp)s(orted)f(e\016cien)m(tly)h(b)m(y)g(the)h
7902
(standard)e(FFTW)i(distribution.)150 1880 y Ft(6.1)68
7903
b(Installation)47 b(on)e(Unix)275 2069 y Fu(FFTW)24 b(comes)g(with)e(a)
7904
h Fo(configure)e Fu(program)i(in)f(the)i(GNU)g(st)m(yle.)38
7905
b(Installation)22 b(can)i(b)s(e)e(as)i(simple)150 2178
7906
y(as:)390 2303 y Fo(./configure)390 2407 y(make)390 2511
7907
y(make)47 b(install)275 2642 y Fu(This)24 b(will)h(build)e(the)k
7978
1638 y(are)31 b(not)f(supp)s(orted)f(e\016cien)m(tly)h(b)m(y)g(the)h
7979
(standard)e(FFTW)i(distribution.)150 1887 y Fu(6.1)68
7980
b(Installation)47 b(on)e(Unix)275 2077 y Fv(FFTW)24 b(comes)g(with)e(a)
7981
h Fp(configure)e Fv(program)i(in)f(the)i(GNU)g(st)m(yle.)38
7982
b(Installation)22 b(can)i(b)s(e)e(as)i(simple)150 2187
7983
y(as:)390 2313 y Fp(./configure)390 2417 y(make)390 2521
7984
y(make)47 b(install)275 2652 y Fv(This)24 b(will)h(build)e(the)k
7908
7985
(unipro)s(cessor)e(complex)h(and)g(real)h(transform)f(libraries)e
7909
(along)j(with)e(the)i(test)150 2752 y(programs.)37 b(W)-8
7986
(along)j(with)e(the)i(test)150 2762 y(programs.)37 b(W)-8
7910
7987
b(e)22 b(strongly)d(recommend)i(that)g(y)m(ou)f(use)g(GNU)h
7911
Fo(make)f Fu(if)f(it)h(is)f(a)m(v)-5 b(ailable;)24 b(on)c(some)h
7912
(systems)150 2861 y(it)37 b(is)g(called)g Fo(gmake)p
7913
Fu(.)62 b(The)37 b(\\)p Fo(make)30 b(install)p Fu(")36
7988
Fp(make)f Fv(if)f(it)h(is)f(a)m(v)-5 b(ailable;)24 b(on)c(some)h
7989
(systems)150 2872 y(it)37 b(is)g(called)g Fp(gmake)p
7990
Fv(.)62 b(The)37 b(\\)p Fp(make)30 b(install)p Fv(")36
7914
7991
b(command)i(installs)d(the)j(\013t)m(w)g(and)f(r\013t)m(w)h(libraries)d
7915
(in)150 2971 y(standard)28 b(places,)i(and)e(t)m(ypically)g(requires)g
7992
(in)150 2981 y(standard)28 b(places,)i(and)e(t)m(ypically)g(requires)g
7916
7993
(ro)s(ot)i(privileges)d(\(unless)h(y)m(ou)h(sp)s(ecify)f(a)h
7917
(di\013eren)m(t)g(install)150 3080 y(directory)34 b(with)e(the)j
7918
Fo(--prefix)c Fu(\015ag)k(to)f Fo(configure)p Fu(\).)50
7919
b(Y)-8 b(ou)35 b(can)f(also)g(t)m(yp)s(e)g(\\)p Fo(make)c(check)p
7920
Fu(")j(to)i(put)150 3190 y(the)f(FFTW)h(test)f(programs)g(through)f
7994
(di\013eren)m(t)g(install)150 3091 y(directory)34 b(with)e(the)j
7995
Fp(--prefix)c Fv(\015ag)k(to)f Fp(configure)p Fv(\).)50
7996
b(Y)-8 b(ou)35 b(can)f(also)g(t)m(yp)s(e)g(\\)p Fp(make)c(check)p
7997
Fv(")j(to)i(put)150 3200 y(the)f(FFTW)h(test)f(programs)g(through)f
7921
7998
(their)g(paces.)51 b(If)34 b(y)m(ou)g(ha)m(v)m(e)h(problems)d(during)g
7922
(con\014guration)150 3299 y(or)i(compilation,)g(y)m(ou)h(ma)m(y)g(w)m
7923
(an)m(t)g(to)g(run)e(\\)p Fo(make)d(distclean)p Fu(")i(b)s(efore)i
7924
(trying)f(again;)k(this)c(ensures)150 3409 y(that)e(y)m(ou)g(don't)f
7999
(con\014guration)150 3310 y(or)i(compilation,)g(y)m(ou)h(ma)m(y)g(w)m
8000
(an)m(t)g(to)g(run)e(\\)p Fp(make)d(distclean)p Fv(")i(b)s(efore)i
8001
(trying)f(again;)k(this)c(ensures)150 3419 y(that)e(y)m(ou)g(don't)f
7925
8002
(ha)m(v)m(e)i(an)m(y)e(stale)h(\014les)e(left)h(o)m(v)m(er)i(from)e
7926
(previous)f(compilation)g(attempts.)275 3540 y(The)g
7927
Fo(configure)f Fu(script)i(kno)m(ws)g(go)s(o)s(d)g Fo(CFLAGS)f
7928
Fu(\(C)h(compiler)f(\015ags\))i(for)f(a)h(few)f(systems.)41
7929
b(If)30 b(y)m(our)150 3650 y(system)g(is)f(not)h(kno)m(wn,)g(the)g
7930
Fo(configure)d Fu(script)i(will)e(prin)m(t)i(out)h(a)g(w)m(arning.)2858
7931
3617 y Fn(1)2935 3650 y Fu(In)f(this)g(case,)i(y)m(ou)g(can)150
7932
3759 y(compile)e(FFTW)i(with)e(the)i(command)390 3884
7933
y Fo(make)47 b(CFLAGS="<write)d(your)i(CFLAGS)g(here>")275
7934
4015 y Fu(If)24 b(y)m(ou)h(do)g(\014nd)e(an)i(optimal)f(set)i(of)f
7935
Fo(CFLAGS)e Fu(for)i(y)m(our)f(system,)j(please)e(let)f(us)h(kno)m(w)g
7936
(what)f(they)i(are)150 4125 y(\(along)31 b(with)e(the)h(output)g(of)h
7937
Fo(config.guess)p Fu(\))c(so)k(that)g(w)m(e)g(can)f(include)f(them)h
7938
(in)f(future)g(releases.)275 4256 y(The)38 b Fo(configure)e
7939
Fu(program)j(supp)s(orts)e(all)h(the)h(standard)f(\015ags)h(de\014ned)f
7940
(b)m(y)h(the)g(GNU)h(Co)s(ding)150 4366 y(Standards;)23
7941
b(see)d(the)h Fo(INSTALL)d Fu(\014le)i(in)f(FFTW)h(or)h(the)f(GNU)h(w)m
7942
(eb)f(page)h(\()p Fo(http://www.gnu.org/prep/sta)o(ndar)o(ds_)p
7943
4282 4388 42 91 v 150 4475 a(toc.html)p Fu(\).)38 b(Note)31
7944
b(esp)s(ecially)d Fo(--help)f Fu(to)k(list)d(all)g(\015ags)h(and)g
7945
Fo(--enable-shared)c Fu(to)30 b(create)h(shared,)150
7946
4585 y(rather)21 b(than)g(static,)j(libraries.)35 b Fo(configure)19
7947
b Fu(also)j(accepts)g(a)g(few)f(FFTW-sp)s(eci\014c)g(\015ags,)j
7948
(particularly:)225 4716 y Fs(\017)60 b Fo(--enable-float)28
7949
b Fu(Pro)s(duces)j(a)i(single-precision)c(v)m(ersion)i(of)h(FFTW)h(\()p
7950
Fo(float)p Fu(\))e(instead)h(of)g(the)330 4825 y(default)24
7951
b(double-precision)d(\()p Fo(double)p Fu(\).)38 b(See)24
8003
(previous)f(compilation)g(attempts.)275 3551 y(The)g
8004
Fp(configure)f Fv(script)i(kno)m(ws)g(go)s(o)s(d)g Fp(CFLAGS)f
8005
Fv(\(C)h(compiler)f(\015ags\))i(for)f(a)h(few)f(systems.)41
8006
b(If)30 b(y)m(our)150 3661 y(system)g(is)f(not)h(kno)m(wn,)g(the)g
8007
Fp(configure)d Fv(script)i(will)e(prin)m(t)i(out)h(a)g(w)m(arning.)2858
8008
3628 y Fo(1)2935 3661 y Fv(In)f(this)g(case,)i(y)m(ou)g(can)150
8009
3771 y(compile)e(FFTW)i(with)e(the)i(command)390 3897
8010
y Fp(make)47 b(CFLAGS="<write)d(your)i(CFLAGS)g(here>")275
8011
4028 y Fv(If)24 b(y)m(ou)h(do)g(\014nd)e(an)i(optimal)f(set)i(of)f
8012
Fp(CFLAGS)e Fv(for)i(y)m(our)f(system,)j(please)e(let)f(us)h(kno)m(w)g
8013
(what)f(they)i(are)150 4138 y(\(along)31 b(with)e(the)h(output)g(of)h
8014
Fp(config.guess)p Fv(\))c(so)k(that)g(w)m(e)g(can)f(include)f(them)h
8015
(in)f(future)g(releases.)275 4270 y(The)95 b Fp(configure)f
8016
Fv(program)h(supp)s(orts)f(all)h(the)i(standard)e(\015ags)h(de\014ned)f
8017
(b)m(y)h(the)150 4379 y(GNU)67 b(Co)s(ding)e(Standards;)84
8018
b(see)67 b(the)g Fp(INSTALL)e Fv(\014le)h(in)f(FFTW)j(or)e(the)h(GNU)h
8019
(w)m(eb)e(page)150 4489 y(\()p Fp(http://www.gnu.org/prep/st)o(and)o
8020
(ards)o(_toc)o(.ht)o(ml)p Fv(\).)93 b(Note)51 b(esp)s(ecially)c
8021
Fp(--help)h Fv(to)j(list)d(all)150 4599 y(\015ags)32
8022
b(and)f Fp(--enable-shared)d Fv(to)33 b(create)g(shared,)f(rather)g
8023
(than)g(static,)h(libraries.)43 b Fp(configure)29 b Fv(also)150
8024
4708 y(accepts)j(a)e(few)h(FFTW-sp)s(eci\014c)f(\015ags,)h
8025
(particularly:)225 4840 y Ft(\017)60 b Fp(--enable-float)28
8026
b Fv(Pro)s(duces)j(a)i(single-precision)c(v)m(ersion)i(of)h(FFTW)h(\()p
8027
Fp(float)p Fv(\))e(instead)h(of)g(the)330 4950 y(default)24
8028
b(double-precision)d(\()p Fp(double)p Fv(\).)38 b(See)24
7952
8029
b(Section)g(6.3)i([Installing)c(FFTW)j(in)e(b)s(oth)h(single)f(and)330
7953
4935 y(double)29 b(precision],)g(page)i(57.)p 150 5022
7954
1200 4 v 192 5088 a Fn(1)275 5121 y Fu(Eac)m(h)e(v)m(ersion)e(of)i
7955
Fo(cc)f Fu(seems)g(to)i(ha)m(v)m(e)f(its)f(o)m(wn)g(magic)h(incan)m
7956
(tation)f(to)h(get)h(the)f(fastest)g(co)s(de)g(most)275
7957
5230 y(of)42 b(the)g(time|y)m(ou'd)f(think)g(that)h(p)s(eople)f(w)m
7958
(ould)g(ha)m(v)m(e)i(agreed)g(up)s(on)d(some)i(con)m(v)m(en)m(tion,)47
7959
b(e.g.)275 5340 y Fo("-Omax")p Fu(,)28 b(b)m(y)i(no)m(w.)p
8030
5059 y(double)29 b(precision],)g(page)i(57.)p 150 5149
8031
1200 4 v 199 5217 a Fo(1)275 5249 y Fj(Eac)n(h)18 b(v)n(ersion)h(of)g
8032
Fi(cc)f Fj(seems)g(to)h(ha)n(v)n(e)f(its)g(o)n(wn)h(magic)f(incan)n
8033
(tation)h(to)g(get)f(the)g(fastest)i(co)r(de)f(most)e(of)i(the)f
8034
(time|y)n(ou'd)275 5340 y(think)24 b(that)i(p)r(eople)g(w)n(ould)g(ha)n
8035
(v)n(e)f(agreed)h(up)r(on)f(some)h(con)n(v)n(en)n(tion,)f(e.g.)35
8036
b Fi("-Omax")p Fj(,)28 b(b)n(y)d(no)n(w.)p eop end
7962
56 57 bop 150 -116 a Fu(56)3232 b(FFTW)225 299 y Fs(\017)60
7963
b Fo(--enable-type-prefix)34 b Fu(Adds)k(a)i(`)p Fo(d)p
7964
Fu(')g(or)g(`)p Fo(s)p Fu(')f(pre\014x)g(to)h(all)e(installed)g
8038
TeXDict begin 56 57 bop 150 -116 a Fv(56)3232 b(FFTW)225
8039
299 y Ft(\017)60 b Fp(--enable-type-prefix)34 b Fv(Adds)k(a)i(`)p
8040
Fp(d)p Fv(')g(or)g(`)p Fp(s)p Fv(')f(pre\014x)g(to)h(all)e(installed)g
7965
8041
(libraries)e(and)j(header)330 408 y(\014les)29 b(to)h(indicate)f(the)h
7966
8042
(\015oating-p)s(oin)m(t)f(precision.)39 b(See)30 b(Section)g(6.3)h
7967
8043
([Installing)d(FFTW)i(in)f(b)s(oth)330 518 y(single)c(and)g(double)f
7968
(precision],)i(page)g(57.)40 b(\()p Fo(--enable-type-prefix=<prefi)o
7969
(x>)20 b Fu(lets)25 b(y)m(ou)i(add)330 628 y(an)j(arbitrary)f
8044
(precision],)i(page)g(57.)40 b(\()p Fp(--enable-type-prefix=<prefi)o
8045
(x>)20 b Fv(lets)25 b(y)m(ou)i(add)330 628 y(an)j(arbitrary)f
7970
8046
(pre\014x.\))40 b(By)31 b(default,)f(no)g(pre\014x)f(is)h(used.)225
7971
764 y Fs(\017)60 b Fo(--enable-threads)24 b Fu(Enables)j(compilation)g
8047
758 y Ft(\017)60 b Fp(--enable-threads)24 b Fv(Enables)j(compilation)g
7972
8048
(and)g(installation)g(of)h(the)g(FFTW)h(threads)f(library)330
7973
874 y(\(see)36 b(Section)e(4.1)i([Multi-threaded)e(FFTW],)i(page)f
8049
867 y(\(see)36 b(Section)e(4.1)i([Multi-threaded)e(FFTW],)i(page)f
7974
8050
(37\),)i(whic)m(h)d(pro)m(vides)g(a)h(simple)d(in)m(terface)330
7975
983 y(to)43 b(parallel)e(transforms)g(for)i(SMP)f(systems.)77
8051
977 y(to)43 b(parallel)e(transforms)g(for)i(SMP)f(systems.)77
7976
8052
b(\(By)43 b(default,)i(the)d(threads)g(routines)g(are)h(not)330
7977
1093 y(compiled.\))225 1229 y Fs(\017)60 b Fo(--enable-mpi)38
7978
b Fu(Enables)h(compilation)h(and)g(installation)f(of)i(the)g(FFTW)h
7979
(MPI)e(library)f(\(see)330 1339 y(Section)27 b(4.2)i([MPI)e(FFTW],)i
7980
(page)f(40\),)i(whic)m(h)c(pro)m(vides)g(parallel)g(transforms)g(for)i
7981
(distributed-)330 1449 y(memory)i(systems)h(with)e(MPI.)h(\(By)h
7982
(default,)f(the)h(MPI)f(routines)f(are)i(not)g(compiled.\))225
7983
1585 y Fs(\017)60 b Fo(--disable-fortran)19 b Fu(Disables)k(inclusion)e
7984
(of)j(F)-8 b(ortran-callable)24 b(wrapp)s(er)e(routines)h(\(see)i
7985
(Chap-)330 1695 y(ter)32 b(5)h([Calling)d(FFTW)i(from)g(F)-8
7986
b(ortran],)33 b(page)g(51\))g(in)e(the)h(standard)f(FFTW)i(libraries.)
7987
42 b(These)330 1804 y(wrapp)s(er)e(routines)g(increase)h(the)h(library)
7988
d(size)i(b)m(y)g(only)g(a)g(negligible)e(amoun)m(t,)45
7989
b(so)d(they)g(are)330 1914 y(included)30 b(b)m(y)j(default)g(as)g(long)
7990
g(as)g(the)h Fo(configure)c Fu(script)i(\014nds)g(a)h(F)-8
7991
b(ortran)34 b(compiler)e(on)h(y)m(our)330 2023 y(system.)225
7992
2160 y Fs(\017)60 b Fo(--with-gcc)32 b Fu(Enables)h(the)i(use)g(of)g
7993
Fo(gcc)p Fu(.)53 b(By)35 b(default,)g(FFTW)h(uses)e(the)h(v)m
7994
(endor-supplied)d Fo(cc)330 2269 y Fu(compiler)22 b(if)h(presen)m(t.)39
7995
b(Unfortunately)-8 b(,)25 b Fo(gcc)e Fu(pro)s(duces)f(slo)m(w)m(er)i
7996
(co)s(de)g(than)g Fo(cc)f Fu(on)h(man)m(y)g(systems.)225
7997
2406 y Fs(\017)60 b Fo(--enable-i386-hacks)25 b Fu(See)31
8053
1086 y(compiled.\))225 1217 y Ft(\017)60 b Fp(--with-openmp)p
8054
Fv(,)44 b Fp(--with-sgimp)d Fv(In)j(conjunction)f(with)g
8055
Fp(--enable-threads)p Fv(,)g(causes)i(the)330 1326 y(m)m(ulti-threaded)
8056
27 b(FFTW)j(library)c(to)j(use)g(Op)s(enMP)e(or)i(SGI)f(MP)h(compiler)e
8057
(directiv)m(es)h(in)f(order)330 1436 y(to)g(induce)e(parallelism,)g
8058
(rather)h(than)h(spa)m(wning)e(its)h(o)m(wn)g(threads)g(directly)-8
8059
b(.)39 b(\(Useful)26 b(esp)s(ecially)330 1545 y(for)i(programs)f
8060
(already)g(emplo)m(ying)g(suc)m(h)g(directiv)m(es,)h(in)f(order)g(to)i
8061
(minimize)c(con\015icts)i(b)s(et)m(w)m(een)330 1655 y(di\013eren)m(t)j
8062
(parallelization)e(mec)m(hanisms.\))225 1785 y Ft(\017)60
8063
b Fp(--enable-mpi)38 b Fv(Enables)h(compilation)h(and)g(installation)f
8064
(of)i(the)g(FFTW)h(MPI)e(library)f(\(see)330 1895 y(Section)27
8065
b(4.2)i([MPI)e(FFTW],)i(page)f(40\),)i(whic)m(h)c(pro)m(vides)g
8066
(parallel)g(transforms)g(for)i(distributed-)330 2004
8067
y(memory)i(systems)h(with)e(MPI.)h(\(By)h(default,)f(the)h(MPI)f
8068
(routines)f(are)i(not)g(compiled.\))225 2134 y Ft(\017)60
8069
b Fp(--disable-fortran)19 b Fv(Disables)k(inclusion)e(of)j(F)-8
8070
b(ortran-callable)24 b(wrapp)s(er)e(routines)h(\(see)i(Chap-)330
8071
2244 y(ter)32 b(5)h([Calling)d(FFTW)i(from)g(F)-8 b(ortran],)33
8072
b(page)g(51\))g(in)e(the)h(standard)f(FFTW)i(libraries.)42
8073
b(These)330 2353 y(wrapp)s(er)e(routines)g(increase)h(the)h(library)d
8074
(size)i(b)m(y)g(only)g(a)g(negligible)e(amoun)m(t,)45
8075
b(so)d(they)g(are)330 2463 y(included)30 b(b)m(y)j(default)g(as)g(long)
8076
g(as)g(the)h Fp(configure)c Fv(script)i(\014nds)g(a)h(F)-8
8077
b(ortran)34 b(compiler)e(on)h(y)m(our)330 2573 y(system.)225
8078
2703 y Ft(\017)60 b Fp(--with-gcc)32 b Fv(Enables)h(the)i(use)g(of)g
8079
Fp(gcc)p Fv(.)53 b(By)35 b(default,)g(FFTW)h(uses)e(the)h(v)m
8080
(endor-supplied)d Fp(cc)330 2812 y Fv(compiler)22 b(if)h(presen)m(t.)39
8081
b(Unfortunately)-8 b(,)25 b Fp(gcc)e Fv(pro)s(duces)f(slo)m(w)m(er)i
8082
(co)s(de)g(than)g Fp(cc)f Fv(on)h(man)m(y)g(systems.)225
8083
2942 y Ft(\017)60 b Fp(--enable-i386-hacks)25 b Fv(See)31
7998
8084
b(Section)f(6.4)h([gcc)h(and)e(P)m(en)m(tium)g(hac)m(ks],)h(page)g(57,)
7999
h(b)s(elo)m(w.)225 2542 y Fs(\017)60 b Fo(--enable-pentium-timer)24
8000
b Fu(See)31 b(Section)f(6.4)i([gcc)f(and)f(P)m(en)m(tium)g(hac)m(ks],)i
8001
(page)f(57,)g(b)s(elo)m(w.)275 2708 y(T)-8 b(o)22 b(force)h
8002
Fo(configure)d Fu(to)k(use)e(a)h(particular)d(C)i(compiler)f(\(instead)
8003
h(of)h(the)g(default,)g(usually)d Fo(cc)p Fu(\),)k(set)150
8004
2817 y(the)i(en)m(vironmen)m(t)f(v)-5 b(ariable)25 b
8005
Fo(CC)g Fu(to)h(the)g(name)g(of)g(the)g(desired)e(compiler)g(b)s(efore)
8006
h(running)e Fo(configure)p Fu(;)150 2927 y(y)m(ou)31
8085
h(b)s(elo)m(w.)225 3072 y Ft(\017)60 b Fp(--enable-pentium-timer)24
8086
b Fv(See)31 b(Section)f(6.4)i([gcc)f(and)f(P)m(en)m(tium)g(hac)m(ks],)i
8087
(page)f(57,)g(b)s(elo)m(w.)275 3223 y(T)-8 b(o)22 b(force)h
8088
Fp(configure)d Fv(to)k(use)e(a)h(particular)d(C)i(compiler)f(\(instead)
8089
h(of)h(the)g(default,)g(usually)d Fp(cc)p Fv(\),)k(set)150
8090
3333 y(the)i(en)m(vironmen)m(t)f(v)-5 b(ariable)25 b
8091
Fp(CC)g Fv(to)h(the)g(name)g(of)g(the)g(desired)e(compiler)g(b)s(efore)
8092
h(running)e Fp(configure)p Fv(;)150 3442 y(y)m(ou)31
8007
8093
b(ma)m(y)g(also)f(need)g(to)h(set)g(the)g(\015ags)f(via)g(the)h(v)-5
8008
b(ariable)29 b Fo(CFLAGS)p Fu(.)150 3194 y Ft(6.2)68
8009
b(Installation)47 b(on)e(non-Unix)g(Systems)275 3390
8010
y Fu(It)22 b(is)f(quite)h(straigh)m(tforw)m(ard)g(to)h(install)d(FFTW)j
8094
b(ariable)29 b Fp(CFLAGS)p Fv(.)150 3686 y Fu(6.2)68
8095
b(Installation)47 b(on)e(non-Unix)g(Systems)275 3874
8096
y Fv(It)22 b(is)f(quite)h(straigh)m(tforw)m(ard)g(to)h(install)d(FFTW)j
8011
8097
(ev)m(en)h(on)e(non-Unix)f(systems)h(lac)m(king)g(the)h(niceties)150
8012
3500 y(of)33 b(the)g Fo(configure)e Fu(script.)47 b(The)32
8098
3984 y(of)33 b(the)g Fp(configure)e Fv(script.)47 b(The)32
8013
8099
b(FFTW)i(Home)g(P)m(age)g(ma)m(y)g(include)c(some)k(FFTW)f(pac)m(k)-5
8014
b(ages)35 b(pre-)150 3610 y(con\014gured)29 b(for)h(particular)f
8100
b(ages)35 b(pre-)150 4094 y(con\014gured)29 b(for)h(particular)f
8015
8101
(systems/compilers,)g(and)h(also)g(con)m(tains)h(installation)d(notes)i
8016
(sen)m(t)h(in)e(b)m(y)150 3719 y(users.)40 b(All)30 b(y)m(ou)h(really)e
8102
(sen)m(t)h(in)e(b)m(y)150 4203 y(users.)40 b(All)30 b(y)m(ou)h(really)e
8017
8103
(need)h(to)i(do,)e(though,)h(is)f(to)h(compile)e(all)h(of)h(the)f
8018
Fo(.c)g Fu(\014les)g(in)f(the)i(appropriate)150 3829
8104
Fp(.c)g Fv(\014les)g(in)f(the)i(appropriate)150 4313
8019
8105
y(directories)39 b(of)i(the)g(FFTW)g(pac)m(k)-5 b(age.)72
8020
8106
b(\(Y)-8 b(ou)42 b(needn't)e(w)m(orry)g(ab)s(out)g(the)h(man)m(y)f
8021
(extraneous)h(\014les)150 3938 y(lying)29 b(around.\))275
8022
4077 y(F)-8 b(or)37 b(the)g(complex)f(transforms,)i(compile)e(all)f(of)
8023
i(the)g Fo(.c)f Fu(\014les)g(in)f(the)i Fo(fftw)f Fu(directory)g(and)g
8024
(link)150 4186 y(them)j(in)m(to)h(a)g(library)-8 b(.)66
8107
(extraneous)h(\014les)150 4422 y(lying)29 b(around.\))275
8108
4552 y(F)-8 b(or)37 b(the)g(complex)f(transforms,)i(compile)e(all)f(of)
8109
i(the)g Fp(.c)f Fv(\014les)g(in)f(the)i Fp(fftw)f Fv(directory)g(and)g
8110
(link)150 4662 y(them)j(in)m(to)h(a)g(library)-8 b(.)66
8025
8111
b(Similarly)-8 b(,)38 b(for)h(the)h(real)f(transforms,)i(compile)e(all)
8026
f(of)i(the)f Fo(.c)g Fu(\014les)g(in)f(the)150 4296 y
8027
Fo(rfftw)31 b Fu(directory)h(in)m(to)h(a)g(library)-8
8028
b(.)46 b(Note)34 b(that)f(these)g(sources)g Fo(#include)d
8029
Fu(v)-5 b(arious)32 b(\014les)g(in)f(the)i Fo(fftw)150
8030
4406 y Fu(and)k Fo(rfftw)f Fu(directories,)j(so)f(y)m(ou)g(ma)m(y)g
8031
(need)f(to)h(set)h(up)d(the)i Fo(#include)d Fu(paths)i(for)h(y)m(our)f
8032
(compiler)150 4515 y(appropriately)-8 b(.)38 b(Be)27
8112
f(of)i(the)f Fp(.c)g Fv(\014les)g(in)f(the)150 4772 y
8113
Fp(rfftw)31 b Fv(directory)h(in)m(to)h(a)g(library)-8
8114
b(.)46 b(Note)34 b(that)f(these)g(sources)g Fp(#include)d
8115
Fv(v)-5 b(arious)32 b(\014les)g(in)f(the)i Fp(fftw)150
8116
4881 y Fv(and)k Fp(rfftw)f Fv(directories,)j(so)f(y)m(ou)g(ma)m(y)g
8117
(need)f(to)h(set)h(up)d(the)i Fp(#include)d Fv(paths)i(for)h(y)m(our)f
8118
(compiler)150 4991 y(appropriately)-8 b(.)38 b(Be)27
8033
8119
b(sure)f(to)i(enable)e(the)g(highest-p)s(ossible)e(lev)m(el)i(of)h
8034
(optimization)e(in)h(y)m(our)g(compiler.)275 4654 y(By)i(default,)h
8120
(optimization)e(in)h(y)m(our)g(compiler.)275 5121 y(By)i(default,)h
8035
8121
(FFTW)g(is)f(compiled)f(for)h(double-precision)e(transforms.)39
8036
b(T)-8 b(o)29 b(w)m(ork)g(in)e(single)h(preci-)150 4763
8037
y(sion)j(rather)i(than)f(double)e(precision,)i Fo(#define)e
8038
Fu(the)j(sym)m(b)s(ol)e Fo(FFTW_ENABLE_FLOAT)c Fu(in)k
8039
Fo(fftw.h)g Fu(\(in)150 4873 y(the)g Fo(fftw)e Fu(directory\))h(and)g
8040
(\(re\)compile)g(FFTW.)275 5011 y(These)36 b(libraries)e(should)h(b)s
8041
(e)h(link)m(ed)f(with)g(an)m(y)i(program)g(that)g(uses)f(the)h(corresp)
8042
s(onding)e(trans-)150 5121 y(forms.)44 b(The)31 b(required)f(header)h
8043
(\014les,)g Fo(fftw.h)f Fu(and)h Fo(rfftw.h)p Fu(,)f(are)i(lo)s(cated)g
8044
(in)e(the)i Fo(fftw)e Fu(and)h Fo(rfftw)150 5230 y Fu(directories)h
8045
(resp)s(ectiv)m(ely;)j(y)m(ou)e(ma)m(y)h(w)m(an)m(t)h(to)f(put)e(them)i
8046
(with)e(the)h(libraries,)f(or)h(wherev)m(er)g(header)150
8047
5340 y(\014les)c(normally)g(go)i(on)f(y)m(our)h(system.)p
8122
b(T)-8 b(o)29 b(w)m(ork)g(in)e(single)h(preci-)150 5230
8123
y(sion)j(rather)i(than)f(double)e(precision,)i Fp(#define)e
8124
Fv(the)j(sym)m(b)s(ol)e Fp(FFTW_ENABLE_FLOAT)c Fv(in)k
8125
Fp(fftw.h)g Fv(\(in)150 5340 y(the)g Fp(fftw)e Fv(directory\))h(and)g
8126
(\(re\)compile)g(FFTW.)p eop end
8050
57 58 bop 150 -116 a Fu(Chapter)30 b(6:)41 b(Installation)29
8051
b(and)g(Customization)1808 b(57)275 299 y(FFTW)44 b(includes)d(test)k
8052
(programs,)i Fo(fftw_test)41 b Fu(and)i Fo(rfftw_test)p
8053
Fu(,)i(in)d(the)i Fo(tests)f Fu(directory)-8 b(.)150
8054
408 y(These)33 b(are)g(compiled)f(and)g(link)m(ed)f(lik)m(e)i(an)m(y)g
8128
TeXDict begin 57 58 bop 150 -116 a Fv(Chapter)30 b(6:)41
8129
b(Installation)29 b(and)g(Customization)1808 b(57)275
8130
299 y(These)36 b(libraries)e(should)h(b)s(e)h(link)m(ed)f(with)g(an)m
8131
(y)i(program)g(that)g(uses)f(the)h(corresp)s(onding)e(trans-)150
8132
408 y(forms.)44 b(The)31 b(required)f(header)h(\014les,)g
8133
Fp(fftw.h)f Fv(and)h Fp(rfftw.h)p Fv(,)f(are)i(lo)s(cated)g(in)e(the)i
8134
Fp(fftw)e Fv(and)h Fp(rfftw)150 518 y Fv(directories)h(resp)s(ectiv)m
8135
(ely;)j(y)m(ou)e(ma)m(y)h(w)m(an)m(t)h(to)f(put)e(them)i(with)e(the)h
8136
(libraries,)f(or)h(wherev)m(er)g(header)150 628 y(\014les)c(normally)g
8137
(go)i(on)f(y)m(our)h(system.)275 771 y(FFTW)44 b(includes)d(test)k
8138
(programs,)i Fp(fftw_test)41 b Fv(and)i Fp(rfftw_test)p
8139
Fv(,)i(in)d(the)i Fp(tests)f Fv(directory)-8 b(.)150
8140
881 y(These)33 b(are)g(compiled)f(and)g(link)m(ed)f(lik)m(e)i(an)m(y)g
8055
8141
(program)g(using)e(FFTW,)j(except)g(that)g(they)f(use)g(addi-)150
8056
518 y(tional)g(header)h(\014les)f(lo)s(cated)h(in)f(the)h
8057
Fo(fftw)f Fu(and)g Fo(rfftw)g Fu(directories,)h(so)g(y)m(ou)h(will)c
8058
(need)j(to)g(set)h(y)m(our)150 628 y(compiler)41 b Fo(#include)e
8059
Fu(paths)j(appropriately)-8 b(.)74 b Fo(fftw_test)40
8060
b Fu(is)h(compiled)f(from)i Fo(fftw_test.c)d Fu(and)150
8061
737 y Fo(test_main.c)p Fu(,)25 b(while)h Fo(rfftw_test)f
8062
Fu(is)i(compiled)f(from)i Fo(rfftw_test.c)c Fu(and)j
8063
Fo(test_main.c)p Fu(.)37 b(When)150 847 y(y)m(ou)i(run)f(these)h
8142
991 y(tional)g(header)h(\014les)f(lo)s(cated)h(in)f(the)h
8143
Fp(fftw)f Fv(and)g Fp(rfftw)g Fv(directories,)h(so)g(y)m(ou)h(will)c
8144
(need)j(to)g(set)h(y)m(our)150 1100 y(compiler)41 b Fp(#include)e
8145
Fv(paths)j(appropriately)-8 b(.)74 b Fp(fftw_test)40
8146
b Fv(is)h(compiled)f(from)i Fp(fftw_test.c)d Fv(and)150
8147
1210 y Fp(test_main.c)p Fv(,)25 b(while)h Fp(rfftw_test)f
8148
Fv(is)i(compiled)f(from)i Fp(rfftw_test.c)c Fv(and)j
8149
Fp(test_main.c)p Fv(.)37 b(When)150 1319 y(y)m(ou)i(run)f(these)h
8064
8150
(programs,)j(y)m(ou)d(will)d(b)s(e)j(prompted)f(in)m(teractiv)m(ely)h
8065
8151
(for)g(v)-5 b(arious)38 b(p)s(ossible)e(tests)k(to)150
8066
956 y(p)s(erform;)29 b(see)i(also)f Fo(tests/README)e
8067
Fu(for)i(more)g(information.)150 1214 y Ft(6.3)68 b(Installing)47
8152
1429 y(p)s(erform;)29 b(see)i(also)f Fp(tests/README)e
8153
Fv(for)i(more)g(information.)150 1710 y Fu(6.3)68 b(Installing)47
8068
8154
b(FFTW)c(in)i(b)t(oth)f(single)i(and)f(double)g(precision)275
8069
1407 y Fu(It)f(is)f(often)i(useful)e(to)i(install)d(b)s(oth)h(single-)h
8155
1912 y Fv(It)f(is)f(often)i(useful)e(to)i(install)d(b)s(oth)h(single-)h
8070
8156
(and)f(double-precision)f(v)m(ersions)h(of)i(the)f(FFTW)150
8071
1517 y(libraries)31 b(on)j(the)g(same)g(mac)m(hine,)h(and)e(w)m(e)h
8157
2021 y(libraries)31 b(on)j(the)g(same)g(mac)m(hine,)h(and)e(w)m(e)h
8072
8158
(pro)m(vide)f(a)i(con)m(v)m(enien)m(t)g(mec)m(hanism)e(for)h(ac)m
8073
(hieving)f(this)150 1626 y(on)d(Unix)f(systems.)275 1761
8074
y(When)h(the)i Fo(--enable-type-prefix)25 b Fu(option)31
8159
(hieving)f(this)150 2131 y(on)d(Unix)f(systems.)275 2275
8160
y(When)h(the)i Fp(--enable-type-prefix)25 b Fv(option)31
8075
8161
b(of)g(con\014gure)g(is)f(used,)h(the)g(FFTW)h(libraries)d(and)150
8076
1871 y(header)j(\014les)g(are)h(installed)d(with)h(a)i(pre\014x)e(of)i
8077
(`)p Fo(d)p Fu(')g(or)f(`)p Fo(s)p Fu(',)i(dep)s(ending)c(up)s(on)h
8078
(whether)h(y)m(ou)g(compiled)150 1980 y(in)c(double)g(or)h(single)f
8162
2384 y(header)j(\014les)g(are)h(installed)d(with)h(a)i(pre\014x)e(of)i
8163
(`)p Fp(d)p Fv(')g(or)f(`)p Fp(s)p Fv(',)i(dep)s(ending)c(up)s(on)h
8164
(whether)h(y)m(ou)g(compiled)150 2494 y(in)c(double)g(or)h(single)f
8079
8165
(precision.)38 b(Then,)29 b(instead)f(of)i(linking)c(y)m(our)j(program)
8080
g(with)f Fo(-lrfftw)g(-lfftw)p Fu(,)150 2090 y(for)39
8081
b(example,)j(y)m(ou)e(w)m(ould)f(link)e(with)h Fo(-ldrfftw)29
8082
b(-ldfftw)37 b Fu(to)k(use)e(the)h(double-precision)c(v)m(ersion)150
8083
2199 y(or)e(with)g Fo(-lsrfftw)28 b(-lsfftw)k Fu(to)k(use)e(the)g
8166
g(with)f Fp(-lrfftw)g(-lfftw)p Fv(,)150 2603 y(for)39
8167
b(example,)j(y)m(ou)e(w)m(ould)f(link)e(with)h Fp(-ldrfftw)29
8168
b(-ldfftw)37 b Fv(to)k(use)e(the)h(double-precision)c(v)m(ersion)150
8169
2713 y(or)e(with)g Fp(-lsrfftw)28 b(-lsfftw)k Fv(to)k(use)e(the)g
8084
8170
(single-precision)e(v)m(ersion.)53 b(Also,)35 b(y)m(ou)g(w)m(ould)e
8085
Fo(#include)150 2309 y(<drfftw.h>)28 b Fu(or)i Fo(<srfftw.h>)e
8086
Fu(instead)h(of)i Fo(<rfftw.h>)p Fu(,)d(and)i(so)g(on.)275
8087
2444 y Fq(The)j(names)g(of)g(FFTW)h(functions,)f(data)h(typ)-5
8171
Fp(#include)150 2823 y(<drfftw.h>)28 b Fv(or)i Fp(<srfftw.h>)e
8172
Fv(instead)h(of)i Fp(<rfftw.h>)p Fv(,)d(and)i(so)g(on.)275
8173
2966 y Fr(The)j(names)g(of)g(FFTW)h(functions,)f(data)h(typ)-5
8088
8174
b(es,)34 b(and)g(c)-5 b(onstants)34 b(r)-5 b(emain)34
8089
b(unchange)-5 b(d!)54 b Fu(Y)-8 b(ou)31 b(still)150 2553
8090
y(call,)24 b(for)f(instance,)i Fo(fftw_one)c Fu(and)i(not)h
8091
Fo(dfftw_one)p Fu(.)35 b(Only)22 b(the)i(names)f(of)h(header)f(\014les)
8092
f(and)h(libraries)150 2663 y(are)34 b(mo)s(di\014ed.)47
8093
b(One)32 b(consequence)i(of)g(this)e(is)g(that)i Fq(you)h
8094
Fm(cannot)h Fq(use)f(b)-5 b(oth)36 b(the)g(single-)f(and)h(double-)150
8095
2772 y(pr)-5 b(e)g(cision)27 b(FFTW)f(libr)-5 b(aries)27
8175
b(unchange)-5 b(d!)54 b Fv(Y)-8 b(ou)31 b(still)150 3076
8176
y(call,)24 b(for)f(instance,)i Fp(fftw_one)c Fv(and)i(not)h
8177
Fp(dfftw_one)p Fv(.)35 b(Only)22 b(the)i(names)f(of)h(header)f(\014les)
8178
f(and)h(libraries)150 3186 y(are)34 b(mo)s(di\014ed.)47
8179
b(One)32 b(consequence)i(of)g(this)e(is)g(that)i Fr(you)h
8180
Fn(cannot)h Fr(use)f(b)-5 b(oth)36 b(the)g(single-)f(and)h(double-)150
8181
3295 y(pr)-5 b(e)g(cision)27 b(FFTW)f(libr)-5 b(aries)27
8096
8182
b(in)e(the)h(same)g(pr)-5 b(o)g(gr)g(am,)30 b(simultane)-5
8097
b(ously,)26 b Fu(as)d(the)g(function)f(names)g(w)m(ould)150
8098
2882 y(con\015ict.)275 3017 y(So,)35 b(to)g(install)d(b)s(oth)i(the)g
8183
b(ously,)26 b Fv(as)d(the)g(function)f(names)g(w)m(ould)150
8184
3405 y(con\015ict.)275 3549 y(So,)35 b(to)g(install)d(b)s(oth)i(the)g
8099
8185
(single-)f(and)h(double-precision)e(libraries)f(on)j(the)h(same)f(mac)m
8100
(hine,)i(y)m(ou)150 3126 y(w)m(ould)29 b(do:)390 3255
8101
y Fo(./configure)45 b(--enable-type-prefix)d Fq([)32
8102
b(other)i(options)g(])390 3359 y Fo(make)390 3463 y(make)47
8103
b(install)390 3567 y(make)g(clean)390 3670 y(./configure)e
8104
(--enable-float)f(--enable-type-prefix)e Fq([)32 b(other)i(options)g(])
8105
390 3774 y Fo(make)390 3878 y(make)47 b(install)150 4136
8106
y Ft(6.4)68 b Fe(gcc)43 b Ft(and)i(P)l(en)l(tium)h(hac)l(ks)275
8107
4329 y Fu(The)22 b Fo(configure)e Fu(option)i Fo(--enable-i386-hacks)c
8108
Fu(enables)k(sp)s(eci\014c)f(optimizations)h(for)g(the)h(P)m(en-)150
8109
4438 y(tium)g(and)i(later)f(x86)i(CPUs)e(under)f(gcc,)k(whic)m(h)d(can)
8186
(hine,)i(y)m(ou)150 3658 y(w)m(ould)29 b(do:)390 3796
8187
y Fp(./configure)45 b(--enable-type-prefix)d Fr([)32
8188
b(other)i(options)g(])390 3900 y Fp(make)390 4004 y(make)47
8189
b(install)390 4108 y(make)g(clean)390 4211 y(./configure)e
8190
(--enable-float)f(--enable-type-prefix)e Fr([)32 b(other)i(options)g(])
8191
390 4315 y Fp(make)390 4419 y(make)47 b(install)150 4700
8192
y Fu(6.4)68 b Fb(gcc)43 b Fu(and)i(P)l(en)l(tium)h(hac)l(ks)275
8193
4902 y Fv(The)22 b Fp(configure)e Fv(option)i Fp(--enable-i386-hacks)c
8194
Fv(enables)k(sp)s(eci\014c)f(optimizations)h(for)g(the)h(P)m(en-)150
8195
5011 y(tium)g(and)i(later)f(x86)i(CPUs)e(under)f(gcc,)k(whic)m(h)d(can)
8110
8196
h(signi\014can)m(tly)e(impro)m(v)m(e)h(p)s(erformance)g(of)h(double-)
8111
150 4548 y(precision)f(transforms.)39 b(Sp)s(eci\014cally)-8
8197
150 5121 y(precision)f(transforms.)39 b(Sp)s(eci\014cally)-8
8112
8198
b(,)24 b(w)m(e)j(ha)m(v)m(e)g(tested)g(these)f(hac)m(ks)h(on)f(Lin)m
8113
(ux)e(with)h Fo(gcc)g Fu(2.[789])k(and)150 4657 y(v)m(ersions)j(of)i
8114
Fo(egcs)d Fu(since)i(1.0.3.)50 b(These)33 b(optimizations)f(a\013ect)i
8115
(only)f(the)g(p)s(erformance)f(and)g(not)i(the)150 4767
8199
(ux)e(with)h Fp(gcc)g Fv(2.[789])k(and)150 5230 y(v)m(ersions)j(of)i
8200
Fp(egcs)d Fv(since)i(1.0.3.)50 b(These)33 b(optimizations)f(a\013ect)i
8201
(only)f(the)g(p)s(erformance)f(and)g(not)i(the)150 5340
8116
8202
y(correctness)d(of)g(FFTW)g(\(i.e.)41 b(it)30 b(is)f(alw)m(a)m(ys)i
8117
(safe)g(to)g(try)f(them)g(out\).)275 4902 y(These)h(hac)m(ks)i(pro)m
8118
(vide)e(a)h(w)m(ork)-5 b(around)31 b(to)i(the)f(incorrect)g(alignmen)m
8119
(t)g(of)g(lo)s(cal)f Fo(double)f Fu(v)-5 b(ariables)150
8120
5011 y(in)31 b Fo(gcc)p Fu(.)47 b(The)32 b(compiler)f(aligns)h(these)h
8121
(v)-5 b(ariables)31 b(to)i(m)m(ultiples)e(of)h(4)h(b)m(ytes,)h(but)e
8122
(execution)h(is)f(m)m(uc)m(h)150 5121 y(faster)k(\(on)g(P)m(en)m(tium)g
8123
(and)f(P)m(en)m(tiumPro\))h(if)f Fo(double)p Fu(s)f(are)i(aligned)f(to)
8124
h(a)h(m)m(ultiple)c(of)j(8)h(b)m(ytes.)58 b(By)150 5230
8125
y(carefully)25 b(coun)m(ting)h(the)g(n)m(um)m(b)s(er)f(of)h(v)-5
8126
b(ariables)25 b(allo)s(cated)h(b)m(y)g(the)h(compiler)d(in)h(p)s
8127
(erformance-critical)150 5340 y(regions)i(of)g(the)h(co)s(de,)g(w)m(e)g
8128
(ha)m(v)m(e)h(b)s(een)d(able)h(to)h(in)m(tro)s(duce)e(dumm)m(y)h(allo)s
8129
(cations)f(\(using)g Fo(alloca)p Fu(\))g(that)p eop
8203
(safe)g(to)g(try)f(them)g(out\).)p eop end
8131
58 59 bop 150 -116 a Fu(58)3232 b(FFTW)150 299 y(align)34
8132
b(the)g(stac)m(k)j(prop)s(erly)-8 b(.)51 b(The)35 b(hac)m(k)g(dep)s
8133
(ends)e(crucially)g(on)h(the)h(compiler)e(\015ags)i(that)g(are)g(used.)
8134
150 408 y(F)-8 b(or)31 b(example,)f(it)g(w)m(on't)h(w)m(ork)g(without)e
8135
Fo(-fomit-frame-pointer)p Fu(.)275 584 y(In)d(principle,)f(these)j(hac)
8136
m(ks)h(are)f(no)f(longer)g(required)f(under)g Fo(gcc)h
8137
Fu(v)m(ersions)g(2.95)i(and)e(later,)h(whic)m(h)150 693
8138
y(automatically)d(align)f(the)h(stac)m(k)i(correctly)e(\(see)h
8139
Fo(-mpreferred-stack-bounda)o(ry)19 b Fu(in)24 b(the)h
8140
Fo(gcc)f Fu(man-)150 803 y(ual\).)37 b(Ho)m(w)m(ev)m(er,)24
8141
b(w)m(e)d(ha)m(v)m(e)h(encoun)m(tered)e(a)h(bug)f(\()p
8142
Fo(http://egcs.cygnus.com/ml)o(/gc)o(c-bu)o(gs/1)o(999)o(-11/)o(msg0)o
8143
(025)o(9.ht)o(ml)p Fu(\))p 4555 826 42 91 v 150 912 a(in)25
8144
b(the)h(stac)m(k)h(alignmen)m(t)e(of)h(v)m(ersions)f(2.95.[012])30
8145
b(that)c(causes)g(FFTW's)h(stac)m(k)g(to)g(b)s(e)e(misaligned)f(un-)150
8146
1022 y(der)k(some)g(circumstances.)40 b(The)27 b Fo(configure)f
8147
Fu(script)h(automatically)h(detects)h(this)e(bug)g(and)h(disables)150
8148
1132 y Fo(gcc)p Fu('s)i(stac)m(k)h(alignmen)m(t)f(in)f(fa)m(v)m(or)j
8149
(of)e(our)g(o)m(wn)h(hac)m(ks)g(when)e Fo(--enable-i386-hacks)c
8150
Fu(is)k(used.)275 1307 y(The)34 b Fo(fftw_test)e Fu(program)i(outputs)g
8205
TeXDict begin 58 59 bop 150 -116 a Fv(58)3232 b(FFTW)275
8206
299 y(These)31 b(hac)m(ks)i(pro)m(vide)e(a)h(w)m(ork)-5
8207
b(around)31 b(to)i(the)f(incorrect)g(alignmen)m(t)g(of)g(lo)s(cal)f
8208
Fp(double)f Fv(v)-5 b(ariables)150 408 y(in)31 b Fp(gcc)p
8209
Fv(.)47 b(The)32 b(compiler)f(aligns)h(these)h(v)-5 b(ariables)31
8210
b(to)i(m)m(ultiples)e(of)h(4)h(b)m(ytes,)h(but)e(execution)h(is)f(m)m
8211
(uc)m(h)150 518 y(faster)k(\(on)g(P)m(en)m(tium)g(and)f(P)m(en)m
8212
(tiumPro\))h(if)f Fp(double)p Fv(s)f(are)i(aligned)f(to)h(a)h(m)m
8213
(ultiple)c(of)j(8)h(b)m(ytes.)58 b(By)150 628 y(carefully)25
8214
b(coun)m(ting)h(the)g(n)m(um)m(b)s(er)f(of)h(v)-5 b(ariables)25
8215
b(allo)s(cated)h(b)m(y)g(the)h(compiler)d(in)h(p)s(erformance-critical)
8216
150 737 y(regions)i(of)g(the)h(co)s(de,)g(w)m(e)g(ha)m(v)m(e)h(b)s(een)
8217
d(able)h(to)h(in)m(tro)s(duce)e(dumm)m(y)h(allo)s(cations)f(\(using)g
8218
Fp(alloca)p Fv(\))g(that)150 847 y(align)34 b(the)g(stac)m(k)j(prop)s
8219
(erly)-8 b(.)51 b(The)35 b(hac)m(k)g(dep)s(ends)e(crucially)g(on)h(the)
8220
h(compiler)e(\015ags)i(that)g(are)g(used.)150 956 y(F)-8
8221
b(or)31 b(example,)f(it)g(w)m(on't)h(w)m(ork)g(without)e
8222
Fp(-fomit-frame-pointer)p Fv(.)275 1086 y(In)86 b(principle,)98
8223
b(these)87 b(hac)m(ks)h(are)f(no)g(longer)f(required)g(under)f
8224
Fp(gcc)h Fv(v)m(ersions)g(2.95)150 1195 y(and)96 b(later,)112
8225
b(whic)m(h)95 b(automatically)h(align)g(the)g(stac)m(k)i(correctly)e
8226
(\(see)h Fp(-mpreferred-)150 1305 y(stack-boundary)76
8227
b Fv(in)j(the)h Fp(gcc)f Fv(man)m(ual\).)190 b(Ho)m(w)m(ev)m(er,)95
8228
b(w)m(e)80 b(ha)m(v)m(e)i(encoun)m(tered)e(a)h(bug)150
8229
1415 y(\()p Fp(http://egcs.cygnus.com/ml/)o(gcc)o(-bug)o(s/19)o(99-)o
8230
(11/m)o(sg00)o(259)o(.htm)o(l)p Fv(\))145 b(in)150 b(the)g(stac)m(k)150
8231
1524 y(alignmen)m(t)39 b(of)g(v)m(ersions)g(2.95.[012])k(that)d(causes)
8232
g(FFTW's)g(stac)m(k)h(to)f(b)s(e)f(misaligned)e(under)h(some)150
8233
1634 y(circumstances.)72 b(The)40 b Fp(configure)f Fv(script)h
8234
(automatically)g(detects)i(this)e(bug)h(and)f(disables)f
8235
Fp(gcc)p Fv('s)150 1743 y(stac)m(k)32 b(alignmen)m(t)e(in)f(fa)m(v)m
8236
(or)i(of)g(our)f(o)m(wn)g(hac)m(ks)h(when)e Fp(--enable-i386-hacks)c
8237
Fv(is)30 b(used.)275 1873 y(The)k Fp(fftw_test)e Fv(program)i(outputs)g
8151
8238
(sp)s(eed)g(measuremen)m(ts)g(that)i(y)m(ou)e(can)h(use)g(to)g(see)g
8152
(if)e(these)150 1416 y(hac)m(ks)e(are)g(b)s(ene\014cial.)275
8153
1592 y(The)36 b Fo(configure)e Fu(option)i Fo(--enable-pentium-timer)30
8154
b Fu(enables)36 b(the)h(use)f(of)h(the)f(P)m(en)m(tium)h(and)150
8155
1701 y(P)m(en)m(tiumPro)g(cycle)g(coun)m(ter)h(for)f(timing)e(purp)s
8239
(if)e(these)150 1982 y(hac)m(ks)e(are)g(b)s(ene\014cial.)275
8240
2112 y(The)36 b Fp(configure)e Fv(option)i Fp(--enable-pentium-timer)30
8241
b Fv(enables)36 b(the)h(use)f(of)h(the)f(P)m(en)m(tium)h(and)150
8242
2221 y(P)m(en)m(tiumPro)g(cycle)g(coun)m(ter)h(for)f(timing)e(purp)s
8156
8243
(oses.)59 b(In)37 b(order)f(to)i(get)h(correct)f(results,)g(y)m(ou)f(m)
8157
m(ust)150 1811 y(de\014ne)f Fo(FFTW_CYCLES_PER_SEC)31
8158
b Fu(in)k Fo(fftw/config.h)e Fu(to)38 b(b)s(e)d(the)i(clo)s(c)m(k)g(sp)
8159
s(eed)f(of)h(y)m(our)f(pro)s(cessor;)150 1920 y(the)31
8244
m(ust)150 2331 y(de\014ne)f Fp(FFTW_CYCLES_PER_SEC)31
8245
b Fv(in)k Fp(fftw/config.h)e Fv(to)38 b(b)s(e)d(the)i(clo)s(c)m(k)g(sp)
8246
s(eed)f(of)h(y)m(our)f(pro)s(cessor;)150 2440 y(the)31
8160
8247
b(resulting)e(FFTW)j(library)d(will)f(b)s(e)i(nonp)s(ortable.)41
8161
8248
b(The)31 b(use)f(of)h(this)f(option)h(is)f(deprecated.)43
8162
b(On)150 2030 y(serious)25 b(op)s(erating)h(systems)g(\(suc)m(h)g(as)g
8163
(Lin)m(ux\),)g(FFTW)h(uses)f Fo(gettimeofday\(\))p Fu(,)d(whic)m(h)i
8164
(has)h(enough)150 2140 y(resolution)34 b(and)g(is)g(p)s(ortable.)54
8249
b(On)150 2550 y(serious)25 b(op)s(erating)h(systems)g(\(suc)m(h)g(as)g
8250
(Lin)m(ux\),)g(FFTW)h(uses)f Fp(gettimeofday\(\))p Fv(,)d(whic)m(h)i
8251
(has)h(enough)150 2660 y(resolution)34 b(and)g(is)g(p)s(ortable.)54
8165
8252
b(\(Note)37 b(that)e(Win32)g(has)g(its)g(o)m(wn)g(high-resolution)d
8166
(timing)i(routines)150 2249 y(as)d(w)m(ell.)39 b(FFTW)31
8253
(timing)i(routines)150 2769 y(as)d(w)m(ell.)39 b(FFTW)31
8167
8254
b(con)m(tains)g(unsupp)s(orted)c(co)s(de)k(to)g(use)f(these)h
8168
(routines.\))150 2608 y Ft(6.5)68 b(Customizing)46 b(the)f(timer)275
8169
2842 y Fu(FFTW)32 b(needs)g(a)h(reasonably-precise)e(clo)s(c)m(k)i(in)e
8255
(routines.\))150 3011 y Fu(6.5)68 b(Customizing)46 b(the)f(timer)275
8256
3199 y Fv(FFTW)32 b(needs)g(a)h(reasonably-precise)e(clo)s(c)m(k)i(in)e
8170
8257
(order)h(to)h(\014nd)d(the)j(optimal)e(w)m(a)m(y)i(to)g(compute)g(a)150
8171
2951 y(transform.)39 b(On)27 b(Unix)f(systems,)i Fo(configure)d
8172
Fu(lo)s(oks)i(for)h Fo(gettimeofday)c Fu(and)j(other)h(system-sp)s
8173
(eci\014c)150 3061 y(timers.)81 b(If)43 b(it)h(do)s(es)g(not)g(\014nd)e
8258
3308 y(transform.)39 b(On)27 b(Unix)f(systems,)i Fp(configure)d
8259
Fv(lo)s(oks)i(for)h Fp(gettimeofday)c Fv(and)j(other)h(system-sp)s
8260
(eci\014c)150 3418 y(timers.)81 b(If)43 b(it)h(do)s(es)g(not)g(\014nd)e
8174
8261
(an)m(y)j(high)d(resolution)h(clo)s(c)m(k,)48 b(it)43
8175
b(defaults)g(to)i(using)e(the)h Fo(clock\(\))150 3170
8176
y Fu(function,)35 b(whic)m(h)e(is)h(v)m(ery)h(p)s(ortable,)g(but)f
8262
b(defaults)g(to)i(using)e(the)h Fp(clock\(\))150 3527
8263
y Fv(function,)35 b(whic)m(h)e(is)h(v)m(ery)h(p)s(ortable,)g(but)f
8177
8264
(forces)i(FFTW)f(to)h(run)d(for)i(a)g(long)f(time)h(in)e(order)h(to)i
8178
(get)150 3280 y(reliable)28 b(measuremen)m(ts.)275 3455
8265
(get)150 3637 y(reliable)28 b(measuremen)m(ts.)275 3766
8179
8266
y(If)23 b(y)m(our)i(mac)m(hine)f(supp)s(orts)e(a)j(high-resolution)d
8180
8267
(clo)s(c)m(k)j(not)f(recognized)h(b)m(y)f(FFTW,)h(it)f(is)f(therefore)
8181
150 3565 y(advisable)35 b(to)i(use)e(it.)58 b(Y)-8 b(ou)36
8182
b(m)m(ust)g(edit)g Fo(fftw/fftw-int.h)p Fu(.)54 b(There)35
8183
b(are)i(a)f(few)g(macros)h(y)m(ou)f(m)m(ust)150 3674
8268
150 3876 y(advisable)35 b(to)i(use)e(it.)58 b(Y)-8 b(ou)36
8269
b(m)m(ust)g(edit)g Fp(fftw/fftw-int.h)p Fv(.)54 b(There)35
8270
b(are)i(a)f(few)g(macros)h(y)m(ou)f(m)m(ust)150 3985
8184
8271
y(rede\014ne.)46 b(The)32 b(co)s(de)h(is)e(do)s(cumen)m(ted)h(and)g
8185
8272
(should)e(b)s(e)i(self-explanatory)-8 b(.)47 b(\(By)33
8186
b(the)g(w)m(a)m(y)-8 b(,)34 b Fo(fftw-int)150 3784 y
8187
Fu(stands)28 b(for)g Fo(fftw-internal)p Fu(,)d(but)j(for)g(some)g
8273
b(the)g(w)m(a)m(y)-8 b(,)34 b Fp(fftw-int)150 4095 y
8274
Fv(stands)28 b(for)g Fp(fftw-internal)p Fv(,)d(but)j(for)g(some)g
8188
8275
(inexplicable)e(reason)i(p)s(eople)g(are)g(still)e(using)h(primitiv)m
8189
(e)150 3894 y(systems)j(with)f(8.3)j(\014lenames.\))275
8190
4069 y(Ev)m(en)e(if)g(y)m(ou)h(don't)g(install)e(high-resolution)f
8276
(e)150 4205 y(systems)j(with)f(8.3)j(\014lenames.\))275
8277
4334 y(Ev)m(en)e(if)g(y)m(ou)h(don't)g(install)e(high-resolution)f
8191
8278
(timing)h(co)s(de,)j(w)m(e)f(still)d(recommend)j(that)g(y)m(ou)g(lo)s
8192
(ok)150 4178 y(at)38 b(the)f Fo(FFTW_TIME_MIN)d Fu(constan)m(t)39
8193
b(in)c Fo(fftw/fftw-int.h)p Fu(.)58 b(This)35 b(constan)m(t)k(holds)c
8194
(the)j(minim)m(um)150 4288 y(time)h(in)m(terv)-5 b(al)39
8279
(ok)150 4444 y(at)38 b(the)f Fp(FFTW_TIME_MIN)d Fv(constan)m(t)39
8280
b(in)c Fp(fftw/fftw-int.h)p Fv(.)58 b(This)35 b(constan)m(t)k(holds)c
8281
(the)j(minim)m(um)150 4553 y(time)h(in)m(terv)-5 b(al)39
8195
8282
b(\(in)g(seconds\))h(required)e(to)i(get)h(accurate)g(timing)d
8196
(measuremen)m(ts,)43 b(and)c(should)f(b)s(e)150 4398
8283
(measuremen)m(ts,)43 b(and)c(should)f(b)s(e)150 4663
8197
8284
y(\(at)j(least\))f(sev)m(eral)g(h)m(undred)d(times)j(the)f(resolution)g
8198
8285
(of)g(y)m(our)h(clo)s(c)m(k.)69 b(The)39 b(default)g(constan)m(ts)i
8199
(are)150 4507 y(on)c(the)g(conserv)-5 b(ativ)m(e)39 b(side,)f(and)e(ma)
8286
(are)150 4772 y(on)c(the)g(conserv)-5 b(ativ)m(e)39 b(side,)f(and)e(ma)
8200
8287
m(y)i(cause)g(FFTW)g(to)f(tak)m(e)i(longer)e(than)g(necessary)g(when)g
8201
(y)m(ou)150 4617 y(create)f(a)e(plan.)51 b(Set)35 b Fo(FFTW_TIME_MIN)30
8202
b Fu(to)35 b(whatev)m(er)g(is)f(appropriate)f(on)h(y)m(our)g(system)h
8203
(\(b)s(e)f(sure)f(to)150 4726 y(set)e(the)h Fq(right)40
8204
b Fo(FFTW_TIME_MIN)6 b Fu(.)18 b(.)k(.)12 b(there)31
8205
b(are)g(sev)m(eral)g(de\014nitions)e(in)g Fo(fftw-int.h)p
8206
Fu(,)g(corresp)s(onding)150 4836 y(to)i(di\013eren)m(t)f(platforms)f
8207
(and)h(timers\).)275 5011 y(As)36 b(an)f(aid)h(in)e(c)m(hec)m(king)j
8288
(y)m(ou)150 4882 y(create)f(a)e(plan.)51 b(Set)35 b Fp(FFTW_TIME_MIN)30
8289
b Fv(to)35 b(whatev)m(er)g(is)f(appropriate)f(on)h(y)m(our)g(system)h
8290
(\(b)s(e)f(sure)f(to)150 4991 y(set)e(the)h Fr(right)40
8291
b Fp(FFTW_TIME_MIN)6 b Fv(.)18 b(.)k(.)12 b(there)31
8292
b(are)g(sev)m(eral)g(de\014nitions)e(in)g Fp(fftw-int.h)p
8293
Fv(,)g(corresp)s(onding)150 5101 y(to)i(di\013eren)m(t)f(platforms)f
8294
(and)h(timers\).)275 5230 y(As)36 b(an)f(aid)h(in)e(c)m(hec)m(king)j
8208
8295
(the)f(resolution)f(of)h(y)m(our)g(clo)s(c)m(k,)i(y)m(ou)f(can)f(use)g
8209
(the)g Fo(tests/fftw_test)150 5121 y Fu(program)41 b(with)g(the)g
8210
Fo(-t)g Fu(option)g(\(c.f.)75 b Fo(tests/README)p Fu(\).)d(Remem)m(b)s
8211
(er,)44 b(the)e(mere)f(fact)i(that)f(y)m(our)150 5230
8212
y(clo)s(c)m(k)32 b(rep)s(orts)f(times)g(in,)f(sa)m(y)-8
8296
(the)g Fp(tests/fftw_test)150 5340 y Fv(program)41 b(with)g(the)g
8297
Fp(-t)g Fv(option)g(\(c.f.)75 b Fp(tests/README)p Fv(\).)d(Remem)m(b)s
8298
(er,)44 b(the)e(mere)f(fact)i(that)f(y)m(our)p eop end
8300
TeXDict begin 59 60 bop 150 -116 a Fv(Chapter)30 b(6:)41
8301
b(Installation)29 b(and)g(Customization)1808 b(59)150
8302
299 y(clo)s(c)m(k)32 b(rep)s(orts)f(times)g(in,)f(sa)m(y)-8
8213
8303
b(,)34 b(picoseconds,)d(do)s(es)g(not)h(mean)g(that)g(it)f(is)f
8214
(actually)h Fq(ac)-5 b(cur)g(ate)40 b Fu(to)32 b(that)150
8215
5340 y(resolution.)p eop
8217
59 60 bop 150 -116 a Fu(Chapter)30 b(6:)41 b(Installation)29
8218
b(and)g(Customization)1808 b(59)150 299 y Ft(6.6)68 b(Generating)46
8219
b(y)l(our)f(o)l(wn)g(co)t(de)275 491 y Fu(If)22 b(y)m(ou)i(kno)m(w)g
8304
(actually)h Fr(ac)-5 b(cur)g(ate)40 b Fv(to)32 b(that)150
8305
408 y(resolution.)150 666 y Fu(6.6)68 b(Generating)46
8306
b(y)l(our)f(o)l(wn)g(co)t(de)275 858 y Fv(If)22 b(y)m(ou)i(kno)m(w)g
8220
8307
(that)g(y)m(ou)f(will)e(only)h(use)i(transforms)e(of)i(a)f(certain)h
8221
8308
(size)f(\(sa)m(y)-8 b(,)26 b(p)s(o)m(w)m(ers)e(of)f(2\))h(and)f(w)m(an)
8222
m(t)150 601 y(to)28 b(reduce)f(the)h(size)f(of)g(the)h(library)-8
8309
m(t)150 968 y(to)28 b(reduce)f(the)h(size)f(of)g(the)h(library)-8
8223
8310
b(,)26 b(y)m(ou)i(can)f(recon\014gure)h(FFTW)g(to)g(supp)s(ort)d(only)i
8224
(those)h(sizes)f(y)m(ou)150 711 y(are)34 b(in)m(terested)g(in.)50
8311
(those)h(sizes)f(y)m(ou)150 1078 y(are)34 b(in)m(terested)g(in.)50
8225
8312
b(Y)-8 b(ou)34 b(ma)m(y)h(ev)m(en)f(generate)i(co)s(de)e(to)g(enable)f
8226
8313
(e\016cien)m(t)i(transforms)e(of)h(a)g(size)g(not)150
8227
820 y(supp)s(orted)28 b(b)m(y)i(the)g(default)f(distribution.)36
8314
1187 y(supp)s(orted)28 b(b)m(y)i(the)g(default)f(distribution.)36
8228
8315
b(The)30 b(default)f(distribution)d(supp)s(orts)i(transforms)h(of)h(an)
8229
m(y)150 930 y(size,)e(but)e(not)h(all)e(sizes)i(are)g(equally)e(fast.)
8316
m(y)150 1297 y(size,)e(but)e(not)h(all)e(sizes)i(are)g(equally)e(fast.)
8230
8317
40 b(The)26 b(default)g(installation)f(of)i(FFTW)g(is)f(b)s(est)g(at)i
8231
(handling)150 1039 y(sizes)33 b(of)h(the)g(form)g(2)892
8232
1006 y Fk(a)932 1039 y Fu(3)977 1006 y Fk(b)1011 1039
8233
y Fu(5)1056 1006 y Fk(c)1090 1039 y Fu(7)1135 1006 y
8234
Fk(d)1174 1039 y Fu(11)1264 1006 y Fk(e)1301 1039 y Fu(13)1391
8235
1006 y Fk(f)1435 1039 y Fu(,)h(where)e Fl(e)p Fu(+)p
8236
Fl(f)43 b Fu(is)33 b(either)g(0)h(or)g(1,)h(and)e(the)h(other)g(exp)s
8237
(onen)m(ts)g(are)150 1149 y(arbitrary)-8 b(.)39 b(Other)27
8318
(handling)150 1406 y(sizes)33 b(of)h(the)g(form)g(2)892
8319
1373 y Fl(a)932 1406 y Fv(3)977 1373 y Fl(b)1011 1406
8320
y Fv(5)1056 1373 y Fl(c)1090 1406 y Fv(7)1135 1373 y
8321
Fl(d)1174 1406 y Fv(11)1264 1373 y Fl(e)1301 1406 y Fv(13)1391
8322
1373 y Fl(f)1435 1406 y Fv(,)h(where)e Fm(e)p Fv(+)p
8323
Fm(f)43 b Fv(is)33 b(either)g(0)h(or)g(1,)h(and)e(the)h(other)g(exp)s
8324
(onen)m(ts)g(are)150 1516 y(arbitrary)-8 b(.)39 b(Other)27
8238
8325
b(sizes)g(are)h(computed)f(b)m(y)g(means)h(of)f(a)h(slo)m(w,)g
8239
8326
(general-purp)s(ose)e(routine.)39 b(Ho)m(w)m(ev)m(er,)150
8240
1259 y(if)34 b(y)m(ou)h(ha)m(v)m(e)h(an)f(application)e(that)j
8327
1626 y(if)34 b(y)m(ou)h(ha)m(v)m(e)h(an)f(application)e(that)j
8241
8328
(requires)d(fast)j(transforms)e(of)h(size,)h(sa)m(y)-8
8242
b(,)37 b Fo(17)p Fu(,)f(there)f(is)f(a)h(w)m(a)m(y)h(to)150
8243
1368 y(generate)c(sp)s(ecialized)c(co)s(de)j(to)g(handle)e(that.)275
8244
1503 y(The)i(directory)g Fo(gensrc)g Fu(con)m(tains)h(all)f(the)h
8329
b(,)37 b Fp(17)p Fv(,)f(there)f(is)f(a)h(w)m(a)m(y)h(to)150
8330
1735 y(generate)c(sp)s(ecialized)c(co)s(de)j(to)g(handle)e(that.)275
8331
1870 y(The)i(directory)g Fp(gensrc)g Fv(con)m(tains)h(all)f(the)h
8245
8332
(programs)f(and)h(scripts)f(that)h(w)m(ere)h(used)e(to)h(generate)150
8246
1612 y(FFTW.)g(In)e(particular,)f(the)i(program)f Fo(gensrc/genfft.ml)c
8247
Fu(w)m(as)31 b(used)f(to)h(generate)i(the)d(co)s(de)h(that)150
8248
1722 y(FFTW)j(uses)f(to)h(compute)g(the)g(transforms.)49
8333
1979 y(FFTW.)g(In)e(particular,)f(the)i(program)f Fp(gensrc/genfft.ml)c
8334
Fv(w)m(as)31 b(used)f(to)h(generate)i(the)d(co)s(de)h(that)150
8335
2089 y(FFTW)j(uses)f(to)h(compute)g(the)g(transforms.)49
8249
8336
b(W)-8 b(e)35 b(do)e(not)h(exp)s(ect)g(casual)f(users)g(to)h(use)f(it.)
8250
50 b Fo(genfft)150 1831 y Fu(is)27 b(a)i(rather)f(sophisticated)g
8337
50 b Fp(genfft)150 2198 y Fv(is)27 b(a)i(rather)f(sophisticated)g
8251
8338
(program)g(that)h(generates)h(directed)e(acyclic)g(graphs)g(of)g(FFT)h
8252
(algorithms)150 1941 y(and)38 b(p)s(erforms)e(algebraic)i
8253
(simpli\014cations)d(on)j(them.)64 b Fo(genfft)36 b Fu(is)i(written)f
8254
(in)g(Ob)5 b(jectiv)m(e)38 b(Caml,)i(a)150 2051 y(dialect)g(of)h(ML.)g
8339
(algorithms)150 2308 y(and)38 b(p)s(erforms)e(algebraic)i
8340
(simpli\014cations)d(on)j(them.)64 b Fp(genfft)36 b Fv(is)i(written)f
8341
(in)g(Ob)5 b(jectiv)m(e)38 b(Caml,)i(a)150 2418 y(dialect)g(of)h(ML.)g
8255
8342
(Ob)5 b(jectiv)m(e)41 b(Caml)f(is)f(describ)s(ed)g(at)i
8256
Fo(http://pauillac.inria.fr/o)o(cam)o(l/)35 b Fu(and)150
8257
2160 y(can)c(b)s(e)e(do)m(wnloaded)h(from)g(from)g Fo
8258
(ftp://ftp.inria.fr/lang)o(/cam)o(l-l)o(ight)o Fu(.)275
8259
2295 y(If)37 b(y)m(ou)g(ha)m(v)m(e)i(Ob)5 b(jectiv)m(e)38
8260
b(Caml)e(installed,)i(y)m(ou)f(can)h(t)m(yp)s(e)g Fo(sh)30
8261
b(bootstrap.sh)k Fu(in)i(the)i(top-lev)m(el)150 2404
8343
Fp(http://pauillac.inria.fr/o)o(cam)o(l/)35 b Fv(and)150
8344
2527 y(can)c(b)s(e)e(do)m(wnloaded)h(from)g(from)g Fp
8345
(ftp://ftp.inria.fr/lang)o(/cam)o(l-l)o(ight)o Fv(.)275
8346
2662 y(If)37 b(y)m(ou)g(ha)m(v)m(e)i(Ob)5 b(jectiv)m(e)38
8347
b(Caml)e(installed,)i(y)m(ou)f(can)h(t)m(yp)s(e)g Fp(sh)30
8348
b(bootstrap.sh)k Fv(in)i(the)i(top-lev)m(el)150 2771
8262
8349
y(directory)32 b(to)i(re-generate)h(the)e(\014les.)47
8263
b(If)33 b(y)m(ou)g(c)m(hange)h(the)f Fo(gensrc/config)c
8264
Fu(\014le,)k(y)m(ou)g(can)h(optimize)150 2514 y(FFTW)d(for)f(sizes)g
8350
b(If)33 b(y)m(ou)g(c)m(hange)h(the)f Fp(gensrc/config)c
8351
Fv(\014le,)k(y)m(ou)g(can)h(optimize)150 2881 y(FFTW)d(for)f(sizes)g
8265
8352
(that)h(are)g(not)g(curren)m(tly)e(supp)s(orted)g(e\016cien)m(tly)h
8266
(\(sa)m(y)-8 b(,)32 b(17)f(or)f(19\).)275 2648 y(W)-8
8353
(\(sa)m(y)-8 b(,)32 b(17)f(or)f(19\).)275 3015 y(W)-8
8267
8354
b(e)44 b(do)e(not)h(pro)m(vide)f(more)h(details)f(ab)s(out)g(the)h(co)s
8268
8355
(de-generation)h(pro)s(cess,)i(since)c(w)m(e)h(do)g(not)150
8269
2758 y(exp)s(ect)32 b(that)g(users)e(will)f(need)i(to)h(generate)h
8356
3125 y(exp)s(ect)32 b(that)g(users)e(will)f(need)i(to)h(generate)h
8270
8357
(their)d(o)m(wn)h(co)s(de.)44 b(Ho)m(w)m(ev)m(er,)34
8271
b(feel)d(free)g(to)h(con)m(tact)i(us)c(at)150 2868 y
8272
Fo(fftw@fftw.org)d Fu(if)i(y)m(ou)i(are)g(in)m(terested)f(in)f(the)i
8273
(sub)5 b(ject.)275 3002 y(Y)-8 b(ou)21 b(migh)m(t)g(\014nd)f(it)g(in)m
8358
b(feel)d(free)g(to)h(con)m(tact)i(us)c(at)150 3235 y
8359
Fp(fftw@fftw.org)d Fv(if)i(y)m(ou)i(are)g(in)m(terested)f(in)f(the)i
8360
(sub)5 b(ject.)275 3369 y(Y)-8 b(ou)21 b(migh)m(t)g(\014nd)f(it)g(in)m
8274
8361
(teresting)h(to)h(learn)e(Caml)g(and/or)h(some)h(mo)s(dern)d
8275
(programming)h(tec)m(hniques)150 3112 y(that)39 b(w)m(e)f(used)f(in)g
8362
(programming)h(tec)m(hniques)150 3479 y(that)39 b(w)m(e)f(used)f(in)g
8276
8363
(the)h(generator)h(\(including)c(monadic)i(programming\),)i(esp)s
8277
(ecially)d(if)h(y)m(ou)i(heard)150 3221 y(the)d(rumor)f(that)h(Ja)m(v)
8364
(ecially)d(if)h(y)m(ou)i(heard)150 3588 y(the)d(rumor)f(that)h(Ja)m(v)
8278
8365
-5 b(a)37 b(and)f(ob)5 b(ject-orien)m(ted)37 b(programming)d(are)j(the)
8279
f(latest)g(adv)-5 b(ancemen)m(t)37 b(in)e(the)150 3331
8366
f(latest)g(adv)-5 b(ancemen)m(t)37 b(in)e(the)150 3698
8280
8367
y(\014eld.)60 b(The)37 b(in)m(ternal)f(op)s(eration)h(of)h(the)f(co)s
8281
8368
(delet)h(generator)g(is)f(describ)s(ed)e(in)h(the)h(pap)s(er,)i(\\A)f
8282
(F)-8 b(ast)150 3440 y(F)g(ourier)32 b(T)-8 b(ransform)31
8369
(F)-8 b(ast)150 3807 y(F)g(ourier)32 b(T)-8 b(ransform)31
8283
8370
b(Compiler,")h(b)m(y)g(M.)h(F)-8 b(rigo,)33 b(whic)m(h)e(is)h(a)m(v)-5
8284
b(ailable)31 b(from)h(the)h(FFTW)g(home)f(page)150 3550
8285
y(\()p Fo(http://www.fftw.org)p Fu(\))e(and)k(will)f(app)s(ear)h(in)f
8286
(the)i Fp(Pro)s(ceedings)f(of)h(the)g(1999)i(A)m(CM)e(SIGPLAN)150
8287
3660 y(Conference)30 b(on)h(Programming)e(Language)j(Design)e(and)g
8288
(Implemen)m(tation)f(\(PLDI\))p Fu(.)p eop
8371
b(ailable)31 b(from)h(the)h(FFTW)g(home)f(page)150 3917
8372
y(\()p Fp(http://www.fftw.org)p Fv(\))e(and)k(will)f(app)s(ear)h(in)f
8373
(the)i Fq(Pro)s(ceedings)f(of)h(the)g(1999)i(A)m(CM)e(SIGPLAN)150
8374
4027 y(Conference)30 b(on)h(Programming)e(Language)j(Design)e(and)g
8375
(Implemen)m(tation)f(\(PLDI\))p Fv(.)p eop end
8290
60 61 bop 150 -116 a Fu(60)3232 b(FFTW)p eop
8377
TeXDict begin 60 61 bop 150 -116 a Fv(60)3232 b(FFTW)p
8292
61 62 bop 150 -116 a Fu(Chapter)30 b(7:)41 b(Ac)m(kno)m(wledgmen)m(ts)
8293
2335 b(61)150 299 y Fr(7)80 b(Ac)l(kno)l(wledgmen)l(ts)275
8294
533 y Fu(Matteo)28 b(F)-8 b(rigo)27 b(w)m(as)f(supp)s(orted)e(in)h
8295
(part)h(b)m(y)g(the)g(Defense)h(Adv)-5 b(anced)26 b(Researc)m(h)h(Pro)5
8296
b(jects)27 b(Agency)150 643 y(\(D)m(ARP)-8 b(A\))33 b(under)c(Gran)m
8297
(ts)j(N00014-94-1-0985)37 b(and)30 b(F30602-97-1-0270)q(,)37
8298
b(and)30 b(b)m(y)h(a)g(Digital)g(Equip-)150 752 y(men)m(t)d(Corp)s
8299
(oration)d(F)-8 b(ello)m(wship.)38 b(Stev)m(en)28 b(G.)g(Johnson)e(w)m
8300
(as)h(supp)s(orted)e(in)h(part)h(b)m(y)g(a)g(DoD)i(NDSEG)150
8301
862 y(F)-8 b(ello)m(wship,)33 b(an)g(MIT)h(Karl)e(T)-8
8302
b(a)m(ylor)34 b(Compton)f(F)-8 b(ello)m(wship,)33 b(and)g(b)m(y)h(the)g
8303
(Materials)f(Researc)m(h)i(Sci-)150 971 y(ence)43 b(and)f(Engineering)f
8304
(Cen)m(ter)i(program)f(of)h(the)f(National)h(Science)f(F)-8
8305
b(oundation)42 b(under)f(a)m(w)m(ard)150 1081 y(DMR-9400334.)275
8306
1215 y(Both)34 b(authors)g(w)m(ere)g(also)g(supp)s(orted)e(in)h(part)g
8307
(b)m(y)h(their)f(resp)s(ectiv)m(e)h(girlfriends,)e(b)m(y)i(the)g
8308
(letters)150 1325 y(\\Q")d(and)f(\\R",)h(and)f(b)m(y)g(the)h(n)m(um)m
8309
(b)s(er)e(12.)275 1460 y(W)-8 b(e)32 b(are)g(grateful)f(to)h(SUN)f
8310
(Microsystems)h(Inc.)f(for)g(its)g(donation)g(of)h(a)f(cluster)g(of)h
8311
(9)g(8-pro)s(cessor)150 1569 y(Ultra)h(HPC)g(5000)i(SMPs)d(\(24)j
8312
(G\015ops)d(p)s(eak\).)50 b(These)33 b(mac)m(hines)f(serv)m(ed)i(as)f
8313
(the)h(primary)d(platform)150 1679 y(for)f(the)h(dev)m(elopmen)m(t)f
8314
(of)h(earlier)e(v)m(ersions)h(of)h(FFTW.)275 1813 y(W)-8
8315
b(e)39 b(thank)e(In)m(tel)h(Corp)s(oration)e(for)i(donating)f(a)h
8316
(four-pro)s(cessor)f(P)m(en)m(tium)g(Pro)h(mac)m(hine.)63
8317
b(W)-8 b(e)150 1923 y(thank)30 b(the)h(Lin)m(ux)e(comm)m(unit)m(y)h
8318
(for)g(giving)f(us)h(a)g(decen)m(t)i(OS)d(to)i(run)e(on)i(that)g(mac)m
8319
(hine.)275 2057 y(The)22 b Fo(genfft)f Fu(program)i(w)m(as)h(written)e
8320
(using)f(Ob)5 b(jectiv)m(e)23 b(Caml,)h(a)g(dialect)e(of)h(ML.)h(Ob)5
8321
b(jectiv)m(e)23 b(Caml)150 2167 y(is)h(a)i(small)e(and)h(elegan)m(t)h
8322
(language)g(dev)m(elop)s(ed)f(b)m(y)g(Xa)m(vier)g(Lero)m(y)-8
8323
b(.)40 b(The)25 b(implemen)m(tation)f(is)h(a)m(v)-5 b(ailable)150
8324
2276 y(from)30 b Fo(ftp.inria.fr)e Fu(in)i(the)h(directory)f
8325
Fo(lang/caml-light)p Fu(.)39 b(W)-8 b(e)32 b(used)e(v)m(ersions)g(1.07)
8326
j(and)d(2.00)j(of)150 2386 y(the)39 b(soft)m(w)m(are.)66
8327
b(In)38 b(previous)f(releases)i(of)f(FFTW,)i Fo(genfft)d
8328
Fu(w)m(as)h(written)g(in)f(Caml)h(Ligh)m(t,)i(b)m(y)f(the)150
8329
2496 y(same)29 b(authors.)39 b(An)28 b(ev)m(en)h(earlier)f(implemen)m
8330
(tation)f(of)h Fo(genfft)f Fu(w)m(as)h(written)g(in)f(Sc)m(heme,)i(but)
8331
f(Caml)150 2605 y(is)h(de\014nitely)g(b)s(etter)h(for)g(this)g(kind)e
8332
(of)j(application.)275 2740 y(FFTW)47 b(uses)g(man)m(y)f(to)s(ols)h
8333
(from)g(the)g(GNU)g(pro)5 b(ject,)52 b(including)43 b
8334
Fo(automake)p Fu(,)49 b Fo(texinfo)p Fu(,)h(and)150 2849
8335
y Fo(libtool)p Fu(.)275 2984 y(Prof.)21 b(Charles)g(E.)h(Leiserson)e
8336
(of)i(MIT)g(pro)m(vided)e(con)m(tin)m(uous)i(supp)s(ort)e(and)h
8337
(encouragemen)m(t.)40 b(This)150 3093 y(program)33 b(w)m(ould)e(not)j
8338
(exist)e(without)g(him.)47 b(Charles)32 b(also)g(prop)s(osed)g(the)h
8339
(name)g(\\co)s(delets")h(for)f(the)150 3203 y(basic)d(FFT)g(blo)s(c)m
8340
(ks.)275 3337 y(Prof.)48 b(John)g(D.)h(Joannop)s(oulos)e(of)i(MIT)g
8341
(demonstrated)f(con)m(tin)m(uing)g(tolerance)h(of)g(Stev)m(en's)150
8342
3447 y(\\extra-curricular")32 b(computer-science)h(activities.)47
8343
b(Stev)m(en's)33 b(c)m(hances)h(at)f(a)g(ph)m(ysics)f(degree)h(w)m
8344
(ould)150 3557 y(not)e(exist)f(without)f(him.)275 3691
8345
y(Andrew)g(Sterian)g(con)m(tributed)h(the)g(Windo)m(ws)g(timing)f(co)s
8346
(de.)275 3826 y(Didier)34 b(Miras)i(rep)s(orted)g(a)h(bug)f(in)f(the)i
8347
(test)g(pro)s(cedure)e(used)h(in)f(FFTW)i(1.2.)60 b(W)-8
8348
b(e)38 b(no)m(w)e(use)h(a)150 3935 y(completely)32 b(di\013eren)m(t)g
8349
(test)h(algorithm)e(b)m(y)h(F)-8 b(unda)32 b(Ergun)f(that)i(do)s(es)f
8350
(not)g(require)f(a)h(separate)i(FFT)150 4045 y(program)c(to)h(compare)g
8380
TeXDict begin 61 62 bop 150 -116 a Fv(Chapter)30 b(7:)41
8381
b(Ac)m(kno)m(wledgmen)m(ts)2335 b(61)150 299 y Fs(7)80
8382
b(Ac)l(kno)l(wledgmen)l(ts)275 533 y Fv(Matteo)28 b(F)-8
8383
b(rigo)27 b(w)m(as)f(supp)s(orted)e(in)h(part)h(b)m(y)g(the)g(Defense)h
8384
(Adv)-5 b(anced)26 b(Researc)m(h)h(Pro)5 b(jects)27 b(Agency)150
8385
643 y(\(D)m(ARP)-8 b(A\))33 b(under)c(Gran)m(ts)j(N00014-94-1-0985)37
8386
b(and)30 b(F30602-97-1-0270)q(,)37 b(and)30 b(b)m(y)h(a)g(Digital)g
8387
(Equip-)150 752 y(men)m(t)d(Corp)s(oration)d(F)-8 b(ello)m(wship.)38
8388
b(Stev)m(en)28 b(G.)g(Johnson)e(w)m(as)h(supp)s(orted)e(in)h(part)h(b)m
8389
(y)g(a)g(DoD)i(NDSEG)150 862 y(F)-8 b(ello)m(wship,)33
8390
b(an)g(MIT)h(Karl)e(T)-8 b(a)m(ylor)34 b(Compton)f(F)-8
8391
b(ello)m(wship,)33 b(and)g(b)m(y)h(the)g(Materials)f(Researc)m(h)i
8392
(Sci-)150 971 y(ence)43 b(and)f(Engineering)f(Cen)m(ter)i(program)f(of)
8393
h(the)f(National)h(Science)f(F)-8 b(oundation)42 b(under)f(a)m(w)m(ard)
8394
150 1081 y(DMR-9400334.)275 1215 y(Both)34 b(authors)g(w)m(ere)g(also)g
8395
(supp)s(orted)e(in)h(part)g(b)m(y)h(their)f(resp)s(ectiv)m(e)h
8396
(girlfriends,)e(b)m(y)i(the)g(letters)150 1325 y(\\Q")d(and)f(\\R",)h
8397
(and)f(b)m(y)g(the)h(n)m(um)m(b)s(er)e(12.)275 1460 y(W)-8
8398
b(e)32 b(are)g(grateful)f(to)h(SUN)f(Microsystems)h(Inc.)f(for)g(its)g
8399
(donation)g(of)h(a)f(cluster)g(of)h(9)g(8-pro)s(cessor)150
8400
1569 y(Ultra)h(HPC)g(5000)i(SMPs)d(\(24)j(G\015ops)d(p)s(eak\).)50
8401
b(These)33 b(mac)m(hines)f(serv)m(ed)i(as)f(the)h(primary)d(platform)
8402
150 1679 y(for)f(the)h(dev)m(elopmen)m(t)f(of)h(earlier)e(v)m(ersions)h
8403
(of)h(FFTW.)275 1813 y(W)-8 b(e)39 b(thank)e(In)m(tel)h(Corp)s(oration)
8404
e(for)i(donating)f(a)h(four-pro)s(cessor)f(P)m(en)m(tium)g(Pro)h(mac)m
8405
(hine.)63 b(W)-8 b(e)150 1923 y(thank)30 b(the)h(Lin)m(ux)e(comm)m
8406
(unit)m(y)h(for)g(giving)f(us)h(a)g(decen)m(t)i(OS)d(to)i(run)e(on)i
8407
(that)g(mac)m(hine.)275 2057 y(The)22 b Fp(genfft)f Fv(program)i(w)m
8408
(as)h(written)e(using)f(Ob)5 b(jectiv)m(e)23 b(Caml,)h(a)g(dialect)e
8409
(of)h(ML.)h(Ob)5 b(jectiv)m(e)23 b(Caml)150 2167 y(is)h(a)i(small)e
8410
(and)h(elegan)m(t)h(language)g(dev)m(elop)s(ed)f(b)m(y)g(Xa)m(vier)g
8411
(Lero)m(y)-8 b(.)40 b(The)25 b(implemen)m(tation)f(is)h(a)m(v)-5
8412
b(ailable)150 2276 y(from)30 b Fp(ftp.inria.fr)e Fv(in)i(the)h
8413
(directory)f Fp(lang/caml-light)p Fv(.)39 b(W)-8 b(e)32
8414
b(used)e(v)m(ersions)g(1.07)j(and)d(2.00)j(of)150 2386
8415
y(the)39 b(soft)m(w)m(are.)66 b(In)38 b(previous)f(releases)i(of)f
8416
(FFTW,)i Fp(genfft)d Fv(w)m(as)h(written)g(in)f(Caml)h(Ligh)m(t,)i(b)m
8417
(y)f(the)150 2496 y(same)29 b(authors.)39 b(An)28 b(ev)m(en)h(earlier)f
8418
(implemen)m(tation)f(of)h Fp(genfft)f Fv(w)m(as)h(written)g(in)f(Sc)m
8419
(heme,)i(but)f(Caml)150 2605 y(is)h(de\014nitely)g(b)s(etter)h(for)g
8420
(this)g(kind)e(of)j(application.)275 2740 y(FFTW)47 b(uses)g(man)m(y)f
8421
(to)s(ols)h(from)g(the)g(GNU)g(pro)5 b(ject,)52 b(including)43
8422
b Fp(automake)p Fv(,)49 b Fp(texinfo)p Fv(,)h(and)150
8423
2849 y Fp(libtool)p Fv(.)275 2984 y(Prof.)21 b(Charles)g(E.)h
8424
(Leiserson)e(of)i(MIT)g(pro)m(vided)e(con)m(tin)m(uous)i(supp)s(ort)e
8425
(and)h(encouragemen)m(t.)40 b(This)150 3093 y(program)33
8426
b(w)m(ould)e(not)j(exist)e(without)g(him.)47 b(Charles)32
8427
b(also)g(prop)s(osed)g(the)h(name)g(\\co)s(delets")h(for)f(the)150
8428
3203 y(basic)d(FFT)g(blo)s(c)m(ks.)275 3337 y(Prof.)48
8429
b(John)g(D.)h(Joannop)s(oulos)e(of)i(MIT)g(demonstrated)f(con)m(tin)m
8430
(uing)g(tolerance)h(of)g(Stev)m(en's)150 3447 y(\\extra-curricular")32
8431
b(computer-science)h(activities.)47 b(Stev)m(en's)33
8432
b(c)m(hances)h(at)f(a)g(ph)m(ysics)f(degree)h(w)m(ould)150
8433
3557 y(not)e(exist)f(without)f(him.)275 3691 y(Andrew)g(Sterian)g(con)m
8434
(tributed)h(the)g(Windo)m(ws)g(timing)f(co)s(de.)275
8435
3826 y(Didier)34 b(Miras)i(rep)s(orted)g(a)h(bug)f(in)f(the)i(test)g
8436
(pro)s(cedure)e(used)h(in)f(FFTW)i(1.2.)60 b(W)-8 b(e)38
8437
b(no)m(w)e(use)h(a)150 3935 y(completely)32 b(di\013eren)m(t)g(test)h
8438
(algorithm)e(b)m(y)h(F)-8 b(unda)32 b(Ergun)f(that)i(do)s(es)f(not)g
8439
(require)f(a)h(separate)i(FFT)150 4045 y(program)c(to)h(compare)g
8351
8440
(against.)275 4179 y(W)-8 b(olfgang)26 b(Reimer)f(con)m(tributed)g(the)
8352
8441
h(P)m(en)m(tium)f(cycle)h(coun)m(ter)g(and)g(a)g(few)f(\014xes)g(that)i
8353
8442
(help)d(p)s(orta-)150 4289 y(bilit)m(y)-8 b(.)275 4423
8407
8498
m(ou)g(m)m(ust)g(purc)m(hase)f(a)i(license)d(from)150
8408
8499
2521 y(MIT's)39 b(T)-8 b(ec)m(hnology)40 b(Licensing)d(O\016ce.)67
8409
8500
b(Users)39 b(in)m(terested)g(in)f(suc)m(h)h(a)g(license)f(should)f(con)
8410
m(tact)42 b(us)150 2630 y(\()p Fo(fftw@fftw.org)p Fu(\))27
8411
b(for)k(more)f(information.)p eop
8501
m(tact)42 b(us)150 2630 y(\()p Fp(fftw@fftw.org)p Fv(\))27
8502
b(for)k(more)f(information.)p eop end
8413
64 65 bop 150 -116 a Fu(64)3232 b(FFTW)p eop
8504
TeXDict begin 64 65 bop 150 -116 a Fv(64)3232 b(FFTW)p
8415
65 66 bop 150 -116 a Fu(Chapter)30 b(9:)41 b(Concept)30
8416
b(Index)2463 b(65)150 299 y Fr(9)80 b(Concept)52 b(Index)150
8417
651 y Ft(A)150 785 y Fd(algorithm)21 b Fc(.)12 b(.)h(.)f(.)g(.)h(.)f(.)
8418
g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h
8419
(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)47 b Fd(2)150
8420
1058 y Ft(B)150 1193 y Fb(benchfft)8 b Fc(.)14 b(.)e(.)h(.)f(.)g(.)h(.)
8421
f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
8422
(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)34
8423
b Fd(1)150 1294 y(b)r(enc)n(hmark)12 b Fc(.)f(.)h(.)h(.)f(.)g(.)h(.)f
8424
(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)
8425
39 b Fd(1,)26 b(40,)h(49,)f(58)150 1394 y(blo)r(c)n(king)e
8426
Fc(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
8427
(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)
8428
g(.)h(.)49 b Fd(43)150 1667 y Ft(C)150 1802 y Fd(C)26
8429
b(m)n(ulti-dimensional)f(arra)n(ys)16 b Fc(.)d(.)f(.)g(.)h(.)f(.)g(.)h
8430
(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)42 b Fd(12)150
8431
1902 y(Caml)12 b Fc(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
8432
(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)
8433
g(.)h(.)f(.)g(.)h(.)38 b Fd(59,)26 b(61)150 2003 y(Cilk)15
8434
b Fc(.)e(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)
8435
g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
8436
(.)g(.)h(.)f(.)41 b Fd(2,)26 b(37)150 2104 y Fb(clock)11
8437
b Fc(.)j(.)e(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)
8438
h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
8439
(.)g(.)h(.)f(.)g(.)37 b Fd(58)150 2204 y(co)r(de)26 b(generator)21
8440
b Fc(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
8441
(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)45 b Fd(1,)26
8442
b(59)150 2305 y(column-ma)t(jor)e Fc(.)12 b(.)g(.)g(.)h(.)f(.)g(.)h(.)f
8443
(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)50
8444
b Fd(11,)27 b(52,)f(54)150 2406 y(compiler)10 b Fc(.)j(.)f(.)g(.)h(.)f
8445
(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)
8446
h(.)36 b Fd(2,)26 b(51,)h(55,)g(56,)f(57)150 2507 y(compiler)g(\015ags)
8447
16 b Fc(.)d(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
8448
(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)43 b Fd(55,)26
8507
TeXDict begin 65 66 bop 150 -116 a Fv(Chapter)30 b(9:)41
8508
b(Concept)30 b(Index)2463 b(65)150 299 y Fs(9)80 b(Concept)52
8509
b(Index)150 642 y Fu(A)150 777 y Fj(algorithm)21 b Ff(.)12
8510
b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
8511
(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)
8512
47 b Fj(2)150 1069 y Fu(B)150 1204 y Fi(benchfft)8 b
8513
Ff(.)14 b(.)e(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
8514
(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)
8515
h(.)f(.)g(.)34 b Fj(1)150 1301 y(b)r(enc)n(hmark)12 b
8516
Ff(.)f(.)h(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f
8517
(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)39 b Fj(1,)26 b(40,)h(49,)f(58)150
8518
1399 y(blo)r(c)n(king)e Ff(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
8519
(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)
8520
g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)49 b Fj(43)150 1691 y
8521
Fu(C)150 1826 y Fj(C)26 b(m)n(ulti-dimensional)f(arra)n(ys)16
8522
b Ff(.)d(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)
8523
f(.)g(.)42 b Fj(12)150 1923 y(Caml)12 b Ff(.)h(.)f(.)g(.)h(.)f(.)g(.)h
8524
(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)
8525
g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)38 b Fj(59,)26
8526
b(61)150 2021 y(Cilk)15 b Ff(.)e(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)
8527
h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
8528
(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)41 b Fj(2,)26
8529
b(37)150 2119 y Fi(clock)11 b Ff(.)j(.)e(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)
8530
g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
8531
(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)37 b Fj(58)150
8532
2217 y(co)r(de)26 b(generator)21 b Ff(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)
8533
g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
8534
(.)g(.)h(.)45 b Fj(1,)26 b(59)150 2314 y(column-ma)t(jor)e
8535
Ff(.)12 b(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
8536
(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)50 b Fj(11,)27 b(52,)f(54)150
8537
2412 y(compiler)10 b Ff(.)j(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
8538
(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)36 b Fj(2,)26
8539
b(51,)h(55,)g(56,)f(58)150 2510 y(compiler)g(\015ags)16
8540
b Ff(.)d(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)
8541
g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)43 b Fj(55,)26
8449
8542
b(56)150 2607 y(complex)f(m)n(ulti-dimensional)f(transform)d
8450
Fc(.)13 b(.)f(.)g(.)h(.)f(.)g(.)47 b Fd(4,)26 b(22)150
8451
2708 y(complex)f(n)n(um)n(b)r(er)13 b Fc(.)e(.)h(.)g(.)g(.)h(.)f(.)g(.)
8543
Ff(.)13 b(.)f(.)g(.)h(.)f(.)g(.)47 b Fj(4,)26 b(22)150
8544
2705 y(complex)f(n)n(um)n(b)r(er)13 b Ff(.)e(.)h(.)g(.)g(.)h(.)f(.)g(.)
8452
8545
h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
8453
(.)h(.)f(.)g(.)39 b Fd(17)150 2809 y(complex)25 b(one-dimensional)g
8454
(transform)e Fc(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)49
8455
b Fd(3)150 2909 y(complex)25 b(to)h(real)g(transform)12
8456
b Fc(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)
8457
f(.)38 b Fd(6,)26 b(26)150 3010 y(complex)f(transform)14
8458
b Fc(.)e(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)
8459
h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)40 b Fd(3)150
8460
3111 y Fb(configure)12 b Fc(.)i(.)f(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
8461
(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)38 b Fd(18,)26
8462
b(37,)h(41,)g(55,)f(57)150 3211 y(con)n(v)n(olution)7
8463
b Fc(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
8546
(.)h(.)f(.)g(.)39 b Fj(17)150 2803 y(complex)25 b(one-dimensional)g
8547
(transform)e Ff(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)49
8548
b Fj(3)150 2901 y(complex)25 b(to)h(real)g(transform)12
8549
b Ff(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)
8550
f(.)38 b Fj(6,)26 b(26)150 2998 y(complex)f(transform)14
8551
b Ff(.)e(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)
8552
h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)40 b Fj(3)150
8553
3096 y Fi(configure)12 b Ff(.)i(.)f(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
8554
(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)38 b Fj(18,)26
8555
b(37,)h(41,)g(55,)f(57)150 3194 y(con)n(v)n(olution)7
8556
b Ff(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
8464
8557
(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)
8465
32 b Fd(10)150 3312 y(cyclic)26 b(con)n(v)n(olution)10
8466
b Fc(.)j(.)f(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)
8467
f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)36 b Fd(10)150
8468
3585 y Ft(D)150 3720 y Fd(Discrete)26 b(F)-6 b(ourier)26
8469
b(T)-6 b(ransform)24 b Fc(.)13 b(.)f(.)g(.)h(.)50 b Fd(21,)26
8470
b(25,)h(28,)g(33,)f(34)150 3820 y(distributed)f(arra)n(y)h(format)12
8471
b Fc(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)38
8472
b Fd(43,)27 b(46,)f(48)150 3921 y(distributed)f(memory)17
8473
b Fc(.)10 b(.)i(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
8474
(.)g(.)h(.)42 b Fd(37,)27 b(40,)f(43)150 4193 y Ft(E)150
8475
4328 y Fd(Ecclesiastes)f Fc(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
8558
32 b Fj(10)150 3291 y(cyclic)26 b(con)n(v)n(olution)10
8559
b Ff(.)j(.)f(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)
8560
f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)36 b Fj(10)150
8561
3583 y Fu(D)150 3718 y Fj(Discrete)26 b(F)-6 b(ourier)26
8562
b(T)-6 b(ransform)13 b Ff(.)g(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)39
8563
b Fj(21,)27 b(25,)g(28,)f(33)150 3816 y(distributed)f(arra)n(y)h
8564
(format)12 b Ff(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
8565
(.)38 b Fj(43,)27 b(46,)f(48)150 3913 y(distributed)f(memory)17
8566
b Ff(.)10 b(.)i(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
8567
(.)g(.)h(.)42 b Fj(37,)27 b(40,)f(43)150 4205 y Fu(E)150
8568
4340 y Fj(Ecclesiastes)f Ff(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
8476
8569
(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)
8477
g(.)h(.)f(.)g(.)h(.)48 b Fd(14)150 4429 y(executor)23
8478
b Fc(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h
8570
g(.)h(.)f(.)g(.)h(.)48 b Fj(14)150 4438 y(executor)23
8571
b Ff(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h
8479
8572
(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)
8480
h(.)f(.)g(.)49 b Fd(1)150 4702 y Ft(F)150 4836 y Fd(FFTW)11
8481
b Fc(.)i(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)
8573
h(.)f(.)g(.)49 b Fj(1)150 4717 y Fu(F)150 4851 y Fj(FFTW)11
8574
b Ff(.)i(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)
8482
8575
f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
8483
(.)f(.)g(.)h(.)f(.)37 b Fd(1)150 4937 y(FFTWND)6 b Fc(.)13
8576
(.)f(.)g(.)h(.)f(.)37 b Fj(1)150 4949 y(FFTWND)6 b Ff(.)13
8484
8577
b(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
8485
8578
(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)32
8486
b Fd(22)150 5038 y(\015ags)22 b Fc(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g
8487
(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)47 b Fd(4,)26
8488
b(5,)h(19,)g(23,)f(27,)h(30,)g(47,)f(52)150 5139 y(\015oating-p)r(oin)n
8489
(t)g(precision)21 b Fc(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)46
8490
b Fd(18,)26 b(52,)h(55,)g(56,)f(57)150 5239 y(F)-6 b(ortran-callable)27
8491
b(wrapp)r(ers)8 b Fc(.)14 b(.)e(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
8492
(.)h(.)34 b Fd(12,)27 b(51,)f(56)150 5340 y(frequency)8
8493
b Fc(.)k(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)
8579
b Fj(22)150 5047 y(\015ags)22 b Ff(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g
8580
(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)47 b Fj(4,)26
8581
b(5,)h(19,)g(23,)f(27,)h(30,)g(47,)f(52)150 5145 y(\015oating-p)r(oin)n
8582
(t)g(precision)21 b Ff(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)46
8583
b Fj(18,)26 b(52,)h(55,)g(56,)f(57)150 5242 y(F)-6 b(ortran-callable)27
8584
b(wrapp)r(ers)8 b Ff(.)14 b(.)e(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
8585
(.)h(.)34 b Fj(12,)27 b(51,)f(56)150 5340 y(frequency)8
8586
b Ff(.)k(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)
8494
8587
h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)34
8495
b Fd(4,)26 b(5,)g(21)2025 651 y Ft(G)2025 798 y Fb(gettimeofday)c
8496
Fc(.)12 b(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
8588
b Fj(4,)26 b(5,)g(21)2025 642 y Fu(G)2025 765 y Fi(gettimeofday)c
8589
Ff(.)12 b(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
8497
8590
(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)45
8498
b Fd(58)2025 905 y(girlfriends)14 b Fc(.)g(.)e(.)g(.)h(.)f(.)g(.)h(.)f
8499
(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)
8500
h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)40 b Fd(61)2025 1212
8501
y Ft(H)2025 1360 y Fd(halfcomplex)25 b(arra)n(y)20 b
8502
Fc(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
8503
(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)46 b Fd(6,)26 b(17)2025
8504
1466 y(hermitian)f(arra)n(y)c Fc(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
8505
(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)46
8506
b Fd(17,)27 b(34)2025 1774 y Ft(I)2025 1922 y Fd(in-place)c(transform)8
8507
b Fc(.)13 b(.)32 b Fd(5,)24 b(19,)h(21,)g(25,)g(30,)g(32,)g(40,)g(42,)g
8508
(51)2025 2028 y(installation)12 b Fc(.)i(.)e(.)h(.)f(.)g(.)h(.)f(.)g(.)
8509
h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
8510
(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)38 b Fd(55)2025 2336 y
8511
Ft(L)2025 2483 y Fd(linking)26 b(on)f(Unix)13 b Fc(.)e(.)i(.)f(.)g(.)h
8512
(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)38 b Fd(4,)27
8513
b(7,)f(39,)h(43,)f(47,)h(48)2025 2590 y(LISP)16 b Fc(.)c(.)g(.)h(.)f(.)
8514
g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
8515
(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)42
8516
b Fd(15,)27 b(61)2025 2696 y(load-balancing)11 b Fc(.)j(.)e(.)g(.)h(.)f
8517
(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)
8518
h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)37 b Fd(48)2025 3004
8519
y Ft(M)2025 3151 y Fb(malloc)22 b Fc(.)12 b(.)g(.)g(.)h(.)f(.)g(.)h(.)f
8520
(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)
8521
f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)46 b Fd(12,)27 b(36)2025
8522
3258 y(ML)14 b Fc(.)e(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
8523
(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)
8524
h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)39 b Fd(59)2025
8525
3364 y(monadic)25 b(programming)c Fc(.)13 b(.)f(.)g(.)h(.)f(.)g(.)g(.)h
8526
(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)48
8527
b Fd(59)2025 3471 y(MPI)13 b Fc(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
8528
(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)
8529
f(.)g(.)h(.)38 b Fd(2,)27 b(37,)f(40,)h(56)2025 3577
8530
y Fb(MPI_Alltoall)e Fc(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
8531
(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)49
8532
b Fd(41,)26 b(42,)h(48)2025 3684 y Fb(MPI_Barrier)c Fc(.)12
8591
b Fj(58)2025 857 y(girlfriends)14 b Ff(.)g(.)e(.)g(.)h(.)f(.)g(.)h(.)f
8592
(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)
8593
h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)40 b Fj(61)2025 1116
8594
y Fu(H)2025 1238 y Fj(halfcomplex)25 b(arra)n(y)20 b
8595
Ff(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
8596
(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)46 b Fj(6,)26 b(17)2025
8597
1330 y(hermitian)f(arra)n(y)13 b Ff(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
8598
(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)39
8599
b Fj(17,)26 b(33,)h(34)2025 1590 y Fu(I)2025 1712 y Fj(in-place)c
8600
(transform)8 b Ff(.)13 b(.)32 b Fj(5,)24 b(19,)h(21,)g(24,)g(30,)g(32,)
8601
g(40,)g(42,)g(51)2025 1804 y(installation)12 b Ff(.)i(.)e(.)h(.)f(.)g
8602
(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)
8603
f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)38 b Fj(55)2025
8604
2050 y Fu(L)2025 2173 y Fj(linking)26 b(on)f(Unix)13
8605
b Ff(.)e(.)i(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)38
8606
b Fj(4,)27 b(7,)f(39,)h(43,)f(47,)h(48)2025 2265 y(LISP)16
8607
b Ff(.)c(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)
8608
g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h
8609
(.)f(.)42 b Fj(15,)27 b(61)2025 2356 y(load-balancing)11
8610
b Ff(.)j(.)e(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)
8611
f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)37
8612
b Fj(48)2025 2616 y Fu(M)2025 2738 y Fi(malloc)22 b Ff(.)12
8613
b(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
8614
(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)46
8615
b Fj(12,)27 b(35)2025 2830 y(ML)14 b Ff(.)e(.)g(.)h(.)f(.)g(.)h(.)f(.)g
8616
(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)
8617
g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)39
8618
b Fj(59)2025 2922 y(monadic)25 b(programming)c Ff(.)13
8619
b(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
8620
(.)g(.)h(.)f(.)g(.)48 b Fj(59)2025 3014 y(MPI)13 b Ff(.)f(.)h(.)f(.)g
8621
(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)
8622
f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)38 b Fj(2,)27 b(37,)f(40,)h(56)2025
8623
3106 y Fi(MPI_Alltoall)e Ff(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
8624
(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)49
8625
b Fj(41,)26 b(42,)h(48)2025 3197 y Fi(MPI_Barrier)c Ff(.)12
8533
8626
b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
8534
8627
(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)46
8535
b Fd(43)2025 3791 y Fb(MPI_COMM_WORLD)9 b Fc(.)15 b(.)d(.)h(.)f(.)g(.)h
8628
b Fj(43)2025 3289 y Fi(MPI_COMM_WORLD)9 b Ff(.)15 b(.)d(.)h(.)f(.)g(.)h
8536
8629
(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)
8537
g(.)h(.)34 b Fd(42,)27 b(47)2025 3897 y Fb(MPI_Finalize)22
8538
b Fc(.)12 b(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
8630
g(.)h(.)34 b Fj(42,)27 b(47)2025 3381 y Fi(MPI_Finalize)22
8631
b Ff(.)12 b(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
8539
8632
(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)45
8540
b Fd(42)2025 4004 y Fb(MPI_Init)7 b Fc(.)14 b(.)e(.)g(.)h(.)f(.)g(.)h
8633
b Fj(42)2025 3473 y Fi(MPI_Init)7 b Ff(.)14 b(.)e(.)g(.)h(.)f(.)g(.)h
8541
8634
(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)
8542
g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)32 b Fd(42)2025
8543
4110 y(m)n(ulti-dimensional)24 b(transform)19 b Fc(.)12
8544
b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)44 b Fd(4,)26
8545
b(22,)h(29)2025 4418 y Ft(N)2025 4565 y Fd(n)p 2073 4565
8546
24 4 v 27 w(\014elds)17 b Fc(.)c(.)f(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)
8635
g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)32 b Fj(42)2025
8636
3565 y(m)n(ulti-dimensional)24 b(transform)19 b Ff(.)12
8637
b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)44 b Fj(4,)26
8638
b(22,)h(29)2025 3824 y Fu(N)2025 3946 y Fj(n)p 2073 3946
8639
24 4 v 27 w(\014elds)17 b Ff(.)c(.)f(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)
8547
8640
f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
8548
(.)f(.)g(.)h(.)f(.)g(.)43 b Fd(42,)27 b(47)2025 4672
8549
y(nerd-readable)e(text)18 b Fc(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
8641
(.)f(.)g(.)h(.)f(.)g(.)43 b Fj(42,)27 b(47)2025 4038
8642
y(nerd-readable)e(text)18 b Ff(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
8550
8643
(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)
8551
44 b Fd(15)2025 4778 y(normalization)13 b Fc(.)g(.)f(.)g(.)h(.)f(.)g(.)
8552
h(.)f(.)g(.)h(.)f(.)39 b Fd(4,)26 b(5,)g(7,)h(8,)f(11,)h(21,)f(29,)h
8553
(43)2025 4885 y(n)n(um)n(b)r(er)c(of)k(threads)19 b Fc(.)13
8644
44 b Fj(15)2025 4130 y(normalization)13 b Ff(.)g(.)f(.)g(.)h(.)f(.)g(.)
8645
h(.)f(.)g(.)h(.)f(.)39 b Fj(4,)26 b(5,)g(7,)h(8,)f(11,)h(21,)f(29,)h
8646
(43)2025 4222 y(n)n(um)n(b)r(er)c(of)k(threads)19 b Ff(.)13
8554
8647
b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
8555
(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)45 b Fd(39)2025 5192
8556
y Ft(O)2025 5340 y Fd(out-of-place)26 b(transform)9 b
8557
Fc(.)j(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
8558
(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)35 b Fd(5)p eop
8648
(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)45 b Fj(39)2025 4468
8649
y Fu(O)2025 4591 y Fj(out-of-place)26 b(transform)9 b
8650
Ff(.)j(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
8651
(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)35 b Fj(5)2025 4850 y
8652
Fu(P)2025 4973 y Fj(padding)16 b Ff(.)11 b(.)i(.)f(.)g(.)h(.)f(.)g(.)h
8653
(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)
8654
g(.)h(.)f(.)g(.)h(.)41 b Fj(8,)26 b(32,)h(46)2025 5065
8655
y(parallel)g(transform)21 b Ff(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
8656
(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)47
8657
b Fj(2,)26 b(37)2025 5156 y(P)n(en)n(tium)e(hac)n(k)f
8658
Ff(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
8659
(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)49
8660
b Fj(57)2025 5248 y(plan)24 b Ff(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
8661
(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)
8662
g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)50 b Fj(1,)26 b(3,)g(42)2025
8663
5340 y(planner)20 b Ff(.)13 b(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h
8664
(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)
8665
h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)47 b Fj(1)p eop end
8560
66 67 bop 150 -116 a Fu(66)3232 b(FFTW)150 299 y Ft(P)150
8561
440 y Fd(padding)16 b Fc(.)c(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)
8667
TeXDict begin 66 67 bop 150 -116 a Fv(66)3232 b(FFTW)150
8668
299 y Fj(p)r(o)n(w)n(er)26 b(sp)r(ectrum)7 b Ff(.)k(.)h(.)h(.)f(.)g(.)h
8669
(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)
8670
g(.)h(.)f(.)g(.)h(.)f(.)g(.)33 b Fj(7)150 556 y Fu(R)150
8671
678 y Fj(rank)16 b Ff(.)c(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
8672
(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)
8673
g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)42 b Fj(4)150
8674
769 y(real)27 b(m)n(ulti-dimensional)d(transform)g Ff(.)12
8675
b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)50 b Fj(7,)26
8676
b(29)150 860 y(real)h(n)n(um)n(b)r(er)16 b Ff(.)10 b(.)j(.)f(.)g(.)h(.)
8677
f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
8678
(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)42 b Fj(17)150
8679
952 y(real)27 b(transform)10 b Ff(.)i(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g
8680
(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)
8681
f(.)g(.)36 b Fj(6,)26 b(26)150 1043 y(RFFTW)12 b Ff(.)g(.)g(.)h(.)f(.)g
8682
(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)
8683
g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)38 b Fj(6,)26
8684
b(26)150 1135 y(RFFTWND)14 b Ff(.)e(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
8685
(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)
8686
f(.)g(.)g(.)h(.)f(.)40 b Fj(29)150 1226 y(r\013t)n(wnd)25
8687
b(arra)n(y)h(format)13 b Ff(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
8688
(.)g(.)h(.)f(.)g(.)40 b Fj(8,)26 b(32,)h(46,)f(54)150
8689
1318 y(ro)n(w-ma)t(jor)12 b Ff(.)h(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
8690
(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)
8691
38 b Fj(11,)27 b(23,)f(44)150 1575 y Fu(S)150 1696 y
8692
Fj(sa)n(ving)g(plans)g(to)g(disk)13 b Ff(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)
8562
8693
g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
8563
(.)f(.)41 b Fd(8,)27 b(32,)f(46)150 543 y(parallel)h(transform)21
8564
b Fc(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f
8565
(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)46 b Fd(2,)26 b(37)150
8566
646 y(P)n(en)n(tium)e(hac)n(k)f Fc(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f
8567
(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)
8568
h(.)f(.)g(.)h(.)f(.)49 b Fd(57)150 750 y(plan)24 b Fc(.)12
8569
b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h
8570
(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)50
8571
b Fd(1,)26 b(3,)g(42)150 853 y(planner)20 b Fc(.)13 b(.)f(.)g(.)h(.)f
8572
(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)
8573
f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)47
8574
b Fd(1)150 956 y(p)r(o)n(w)n(er)26 b(sp)r(ectrum)7 b
8575
Fc(.)k(.)h(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
8576
(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)33
8577
b Fd(7)150 1245 y Ft(R)150 1385 y Fd(rank)16 b Fc(.)c(.)g(.)h(.)f(.)g
8578
(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)
8579
g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
8580
(.)42 b Fd(4)150 1489 y(real)27 b(m)n(ulti-dimensional)d(transform)g
8581
Fc(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)50 b
8582
Fd(7,)26 b(29)150 1592 y(real)h(n)n(um)n(b)r(er)16 b
8583
Fc(.)10 b(.)j(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
8584
(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)42
8585
b Fd(17)150 1695 y(real)27 b(transform)10 b Fc(.)i(.)g(.)g(.)h(.)f(.)g
8586
(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)
8587
g(.)g(.)h(.)f(.)g(.)36 b Fd(6,)26 b(26)150 1799 y(RFFTW)12
8588
b Fc(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)
8589
g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)38
8590
b Fd(6,)26 b(26)150 1902 y(RFFTWND)14 b Fc(.)e(.)g(.)h(.)f(.)g(.)h(.)f
8591
(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)
8592
f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)40 b Fd(29)150 2005 y(r\013t)n(wnd)25
8593
b(arra)n(y)h(format)6 b Fc(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
8594
(.)h(.)f(.)32 b Fd(8,)26 b(32,)h(33,)g(46,)f(54)150 2109
8595
y(ro)n(w-ma)t(jor)12 b Fc(.)h(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
8596
(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)38
8597
b Fd(11,)27 b(23,)f(44)2025 299 y Ft(S)2025 438 y Fd(sa)n(ving)g(plans)
8598
g(to)g(disk)13 b Fc(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
8599
(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)39
8600
b Fd(13)2025 541 y(slab)26 b(decomp)r(osition)8 b Fc(.)13
8601
b(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
8602
(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)33 b Fd(43)2025 644
8603
y(sp)r(eci\014c)26 b(planner)13 b Fc(.)f(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)
8604
h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
8605
(.)h(.)f(.)g(.)39 b Fd(20)2025 747 y(stride)7 b Fc(.)12
8694
(.)38 b Fj(13)2025 299 y(slab)26 b(decomp)r(osition)8
8695
b Ff(.)13 b(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
8696
(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)33 b Fj(43)2025
8697
391 y(sp)r(eci\014c)26 b(planner)13 b Ff(.)f(.)h(.)f(.)g(.)g(.)h(.)f(.)
8698
g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
8699
(.)g(.)h(.)f(.)g(.)39 b Fj(20)2025 483 y(stride)7 b Ff(.)12
8606
8700
b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
8607
(.)33 b Fd(11,)27 b(20,)f(24,)h(28,)g(31,)f(33,)h(42)2025
8608
1031 y Ft(T)2025 1171 y Fd(thread)e(safet)n(y)10 b Fc(.)j(.)f(.)h(.)f
8609
(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)
8610
h(.)f(.)g(.)h(.)f(.)g(.)h(.)35 b Fd(36,)27 b(40)2025
8611
1273 y(threads)18 b Fc(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
8612
(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)44
8613
b Fd(2,)27 b(36,)f(37,)h(56)2025 1376 y(timer,)e(customization)h(of)10
8614
b Fc(.)j(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)
8615
h(.)f(.)g(.)h(.)f(.)g(.)36 b Fd(58)2025 1479 y(T)-6 b(utorial)11
8616
b Fc(.)i(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)
8701
(.)33 b Fj(11,)27 b(20,)f(24,)h(27,)g(31,)f(32,)h(42)2025
8702
743 y Fu(T)2025 866 y Fj(thread)e(safet)n(y)10 b Ff(.)j(.)f(.)h(.)f(.)g
8703
(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)
8704
f(.)g(.)h(.)f(.)g(.)h(.)35 b Fj(36,)27 b(40)2025 958
8705
y(threads)18 b Ff(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)
8706
h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)44
8707
b Fj(2,)27 b(36,)f(37,)h(56)2025 1050 y(timer,)e(customization)h(of)10
8708
b Ff(.)j(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)
8709
h(.)f(.)g(.)h(.)f(.)g(.)36 b Fj(58)2025 1142 y(T)-6 b(utorial)11
8710
b Ff(.)i(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)
8617
8711
g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h
8618
(.)f(.)g(.)h(.)37 b Fd(3)2025 1764 y Ft(W)2025 1903 y
8619
Fd(wisdom)8 b Fc(.)k(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)
8620
g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)34 b Fd(13,)27
8621
b(19,)g(24,)f(30,)h(34)2025 2006 y(wisdom,)f(imp)r(ort)f(and)g(exp)r
8622
(ort)12 b Fc(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)
8623
f(.)g(.)h(.)f(.)38 b Fd(14)2025 2109 y(wisdom,)26 b(problems)f(with)11
8624
b Fc(.)i(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)
8625
h(.)f(.)g(.)h(.)f(.)g(.)37 b Fd(14)p eop
8712
(.)f(.)g(.)h(.)37 b Fj(3)2025 1389 y Fu(W)2025 1512 y
8713
Fj(wisdom)8 b Ff(.)k(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)
8714
g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)34 b Fj(13,)27
8715
b(19,)g(23,)f(30,)h(34)2025 1604 y(wisdom,)f(imp)r(ort)f(and)g(exp)r
8716
(ort)12 b Ff(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)
8717
f(.)g(.)h(.)f(.)38 b Fj(14)2025 1696 y(wisdom,)26 b(problems)f(with)11
8718
b Ff(.)i(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)
8719
h(.)f(.)g(.)h(.)f(.)g(.)37 b Fj(14)p eop end
8627
67 68 bop 150 -116 a Fu(Chapter)30 b(10:)41 b(Library)29
8628
b(Index)2448 b(67)150 299 y Fr(10)80 b(Library)55 b(Index)150
8629
651 y Ft(F)150 786 y Fb(fftw)13 b Fc(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)
8630
g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h
8631
(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)38
8632
b Fd(20)150 888 y Fb(fftw_threads)22 b Fc(.)12 b(.)g(.)h(.)f(.)g(.)h(.)
8721
TeXDict begin 67 68 bop 150 -116 a Fv(Chapter)30 b(10:)41
8722
b(Library)29 b(Index)2448 b(67)150 299 y Fs(10)80 b(Library)55
8723
b(Index)150 642 y Fu(F)150 764 y Fi(fftw)13 b Ff(.)g(.)f(.)g(.)h(.)f(.)
8724
g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
8725
(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)38
8726
b Fj(20)150 856 y Fi(fftw_threads)22 b Ff(.)12 b(.)g(.)h(.)f(.)g(.)h(.)
8633
8727
f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
8634
(.)f(.)g(.)g(.)h(.)f(.)g(.)45 b Fd(38)150 989 y Fb(fftw_threads_one)13
8635
b Fc(.)j(.)d(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)
8636
g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)39 b Fd(38)150
8637
1090 y Fb(FFTW_BACKWARD)22 b Fc(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
8728
(.)f(.)g(.)g(.)h(.)f(.)g(.)45 b Fj(38)150 947 y Fi(fftw_threads_one)13
8729
b Ff(.)j(.)d(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)
8730
g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)39 b Fj(38)150
8731
1039 y Fi(FFTW_BACKWARD)22 b Ff(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
8638
8732
(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)
8639
g(.)h(.)f(.)g(.)45 b Fd(4)150 1191 y Fb(fftw_complex)13
8640
b Fc(.)i(.)d(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)
8733
g(.)h(.)f(.)g(.)45 b Fj(4)150 1130 y Fi(fftw_complex)13
8734
b Ff(.)i(.)d(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)
8641
8735
f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)39 b
8642
Fd(4,)26 b(17)150 1292 y Fb(FFTW_COMPLEX)c Fc(.)12 b(.)g(.)h(.)f(.)g(.)
8736
Fj(4,)26 b(17)150 1222 y Fi(FFTW_COMPLEX)c Ff(.)12 b(.)g(.)h(.)f(.)g(.)
8643
8737
h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
8644
(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)45 b Fd(18)150 1394 y
8645
Fb(FFTW_COMPLEX_TO_REAL)12 b Fc(.)17 b(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f
8646
(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)37 b Fd(6,)27 b(27,)f(46)150
8647
1495 y Fb(fftw_create_plan)7 b Fc(.)16 b(.)c(.)h(.)f(.)g(.)g(.)h(.)f(.)
8738
(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)45 b Fj(18)150 1313 y
8739
Fi(FFTW_COMPLEX_TO_REAL)12 b Ff(.)17 b(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f
8740
(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)37 b Fj(6,)27 b(26,)f(46)150
8741
1405 y Fi(fftw_create_plan)7 b Ff(.)16 b(.)c(.)h(.)f(.)g(.)g(.)h(.)f(.)
8648
8742
g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)33
8649
b Fd(3,)26 b(18)150 1596 y Fb(fftw_create_plan_specific)18
8650
b Fc(.)g(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
8651
(.)44 b Fd(18)150 1697 y Fb(fftw_destroy_plan)27 b Fc(.)13
8743
b Fj(3,)26 b(18)150 1496 y Fi(fftw_create_plan_specific)18
8744
b Ff(.)g(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
8745
(.)44 b Fj(18)150 1588 y Fi(fftw_destroy_plan)27 b Ff(.)13
8652
8746
b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
8653
(.)h(.)f(.)g(.)h(.)49 b Fd(4,)26 b(21)150 1798 y Fb(fftw_direction)c
8654
Fc(.)12 b(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)45
8655
b Fd(3,)26 b(4,)h(6,)f(18,)h(22,)f(29)150 1900 y Fb(FFTW_ENABLE_FLOAT)
8656
12 b Fc(.)k(.)c(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
8657
(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)37 b Fd(18)150
8658
2001 y Fb(FFTW_ESTIMATE)22 b Fc(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
8747
(.)h(.)f(.)g(.)h(.)49 b Fj(4,)26 b(21)150 1679 y Fi(fftw_direction)c
8748
Ff(.)12 b(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)45
8749
b Fj(3,)26 b(4,)h(6,)f(18,)h(22,)f(29)150 1771 y Fi(FFTW_ENABLE_FLOAT)
8750
12 b Ff(.)k(.)c(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
8751
(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)37 b Fj(18)150
8752
1862 y Fi(FFTW_ESTIMATE)22 b Ff(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
8659
8753
(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)
8660
g(.)h(.)f(.)g(.)45 b Fd(4)150 2102 y Fb(fftw_export_wisdom)25
8661
b Fc(.)13 b(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
8662
(.)h(.)f(.)g(.)h(.)47 b Fd(13,)26 b(34)150 2203 y Fb
8663
(fftw_export_wisdom_to_file)10 b Fc(.)18 b(.)12 b(.)g(.)h(.)f(.)g(.)h
8664
(.)f(.)g(.)h(.)f(.)g(.)36 b Fd(14,)26 b(34)150 2304 y
8665
Fb(fftw_export_wisdom_to_string)7 b Fc(.)18 b(.)13 b(.)f(.)g(.)h(.)f(.)
8666
g(.)h(.)f(.)g(.)33 b Fd(15,)26 b(34)150 2406 y Fb(fftw_f77_create_plan)
8667
7 b Fc(.)17 b(.)c(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
8668
(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)33 b Fd(53)150 2507 y
8669
Fb(fftw_f77_destroy_plan)c Fc(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)
8670
g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)50 b Fd(53)150
8671
2608 y Fb(fftw_f77_one)12 b Fc(.)j(.)d(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
8754
g(.)h(.)f(.)g(.)45 b Fj(4)150 1954 y Fi(fftw_export_wisdom)25
8755
b Ff(.)13 b(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
8756
(.)h(.)f(.)g(.)h(.)47 b Fj(13,)26 b(34)150 2045 y Fi
8757
(fftw_export_wisdom_to_file)10 b Ff(.)18 b(.)12 b(.)g(.)h(.)f(.)g(.)h
8758
(.)f(.)g(.)h(.)f(.)g(.)36 b Fj(14,)26 b(34)150 2137 y
8759
Fi(fftw_export_wisdom_to_string)7 b Ff(.)18 b(.)13 b(.)f(.)g(.)h(.)f(.)
8760
g(.)h(.)f(.)g(.)33 b Fj(15,)26 b(34)150 2228 y Fi(fftw_f77_create_plan)
8761
7 b Ff(.)17 b(.)c(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
8762
(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)33 b Fj(53)150 2320 y
8763
Fi(fftw_f77_destroy_plan)c Ff(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)
8764
g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)50 b Fj(53)150
8765
2411 y Fi(fftw_f77_one)12 b Ff(.)j(.)d(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
8672
8766
(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)
8673
38 b Fd(51,)26 b(53)150 2709 y Fb(fftw_f77_threads_one)7
8674
b Fc(.)17 b(.)c(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
8675
(.)g(.)h(.)f(.)g(.)h(.)f(.)33 b Fd(53)150 2810 y Fb(fftw_forget_wisdom)
8676
10 b Fc(.)17 b(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
8677
(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)36 b Fd(35)150
8678
2911 y Fb(FFTW_FORWARD)23 b Fc(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
8767
38 b Fj(51,)26 b(53)150 2503 y Fi(fftw_f77_threads_one)7
8768
b Ff(.)17 b(.)c(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
8769
(.)g(.)h(.)f(.)g(.)h(.)f(.)33 b Fj(53)150 2594 y Fi(fftw_forget_wisdom)
8770
10 b Ff(.)17 b(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
8771
(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)36 b Fj(35)150
8772
2686 y Fi(FFTW_FORWARD)23 b Ff(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
8679
8773
(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)
8680
h(.)f(.)g(.)g(.)h(.)46 b Fd(4)150 3013 y Fb(fftw_free_hook)16
8681
b Fc(.)g(.)c(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)
8774
h(.)f(.)g(.)g(.)h(.)46 b Fj(4)150 2777 y Fi(fftw_free_hook)16
8775
b Ff(.)g(.)c(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)
8682
8776
h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)42 b
8683
Fd(36)150 3114 y Fb(fftw_import_wisdom)25 b Fc(.)13 b(.)f(.)g(.)h(.)f
8777
Fj(35)150 2869 y Fi(fftw_import_wisdom)25 b Ff(.)13 b(.)f(.)g(.)h(.)f
8684
8778
(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)47
8685
b Fd(13,)26 b(35)150 3215 y Fb(fftw_import_wisdom_from_file)7
8686
b Fc(.)18 b(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)33
8687
b Fd(14,)26 b(35)150 3316 y Fb(fftw_import_wisdom_from_strin)q(g)i
8688
Fc(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)48 b Fd(15,)26 b(35)150
8689
3417 y Fb(FFTW_IN_PLACE)c Fc(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
8779
b Fj(13,)26 b(35)150 2961 y Fi(fftw_import_wisdom_from_file)7
8780
b Ff(.)18 b(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)33
8781
b Fj(14,)26 b(35)150 3052 y Fi(fftw_import_wisdom_from_strin)q(g)i
8782
Ff(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)48 b Fj(15,)26 b(35)150
8783
3144 y Fi(FFTW_IN_PLACE)c Ff(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
8690
8784
(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)
8691
h(.)f(.)g(.)45 b Fd(5)150 3519 y Fb(fftw_malloc)23 b
8692
Fc(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
8785
h(.)f(.)g(.)45 b Fj(5)150 3235 y Fi(fftw_malloc)23 b
8786
Ff(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
8693
8787
(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)46
8694
b Fd(36)150 3620 y Fb(fftw_malloc_hook)13 b Fc(.)j(.)d(.)f(.)g(.)h(.)f
8788
b Fj(35)150 3327 y Fi(fftw_malloc_hook)13 b Ff(.)j(.)d(.)f(.)g(.)h(.)f
8695
8789
(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)
8696
h(.)f(.)g(.)39 b Fd(36)150 3721 y Fb(FFTW_MEASURE)23
8697
b Fc(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
8790
h(.)f(.)g(.)39 b Fj(35)150 3418 y Fi(FFTW_MEASURE)23
8791
b Ff(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
8698
8792
(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)46
8699
b Fd(4)150 3822 y Fb(fftw_mpi)7 b Fc(.)14 b(.)e(.)g(.)h(.)f(.)g(.)h(.)f
8793
b Fj(4)150 3510 y Fi(fftw_mpi)7 b Ff(.)14 b(.)e(.)g(.)h(.)f(.)g(.)h(.)f
8700
8794
(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)
8701
f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)32 b Fd(47)150
8702
3923 y Fb(fftw_mpi_create_plan)7 b Fc(.)17 b(.)c(.)f(.)g(.)h(.)f(.)g(.)
8795
f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)32 b Fj(47)150
8796
3601 y Fi(fftw_mpi_create_plan)7 b Ff(.)17 b(.)c(.)f(.)g(.)h(.)f(.)g(.)
8703
8797
h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)33
8704
b Fd(47)150 4025 y Fb(fftw_mpi_destroy_plan)c Fc(.)12
8798
b Fj(47)150 3693 y Fi(fftw_mpi_destroy_plan)c Ff(.)12
8705
8799
b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
8706
(.)f(.)g(.)50 b Fd(47)150 4126 y Fb(fftw_mpi_local_sizes)7
8707
b Fc(.)17 b(.)c(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
8708
(.)g(.)h(.)f(.)g(.)h(.)f(.)33 b Fd(48)150 4227 y Fb(fftw_mpi_plan)18
8709
b Fc(.)d(.)d(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)
8800
(.)f(.)g(.)50 b Fj(47)150 3784 y Fi(fftw_mpi_local_sizes)7
8801
b Ff(.)17 b(.)c(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
8802
(.)g(.)h(.)f(.)g(.)h(.)f(.)33 b Fj(48)150 3876 y Fi(fftw_mpi_plan)18
8803
b Ff(.)d(.)d(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)
8710
8804
f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)43
8711
b Fd(47)150 4328 y Fb(fftw_mpi_test)10 b Fc(.)16 b(.)c(.)g(.)g(.)h(.)f
8805
b Fj(47)150 3967 y Fi(fftw_mpi_test)10 b Ff(.)16 b(.)c(.)g(.)g(.)h(.)f
8712
8806
(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)
8713
f(.)g(.)h(.)36 b Fd(41,)26 b(49)150 4429 y Fb(FFTW_NORMAL_ORDER)12
8714
b Fc(.)k(.)c(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)
8715
g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)37 b Fd(42)150 4530
8716
y Fb(fftw_one)20 b Fc(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)
8807
f(.)g(.)h(.)36 b Fj(41,)26 b(49)150 4059 y Fi(FFTW_NORMAL_ORDER)12
8808
b Ff(.)k(.)c(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)
8809
g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)37 b Fj(42)150 4150
8810
y Fi(fftw_one)20 b Ff(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)
8717
8811
g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
8718
(.)f(.)g(.)h(.)44 b Fd(4,)26 b(20)150 4632 y Fb(FFTW_OUT_OF_PLACE)12
8719
b Fc(.)k(.)c(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)
8720
g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)37 b Fd(19)150 4733
8721
y Fb(fftw_plan)17 b Fc(.)d(.)f(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
8812
(.)f(.)g(.)h(.)44 b Fj(4,)26 b(20)150 4242 y Fi(FFTW_OUT_OF_PLACE)12
8813
b Ff(.)k(.)c(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)
8814
g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)37 b Fj(19)150 4333
8815
y Fi(fftw_plan)17 b Ff(.)d(.)f(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
8722
8816
(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)
8723
h(.)f(.)43 b Fd(3,)26 b(18)150 4834 y Fb(fftw_real)f
8724
Fc(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
8817
h(.)f(.)43 b Fj(3,)26 b(18)150 4425 y Fi(fftw_real)f
8818
Ff(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
8725
8819
(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)
8726
49 b Fd(17)150 4935 y Fb(FFTW_REAL)25 b Fc(.)13 b(.)f(.)g(.)h(.)f(.)g
8820
49 b Fj(17)150 4516 y Fi(FFTW_REAL)25 b Ff(.)13 b(.)f(.)g(.)h(.)f(.)g
8727
8821
(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)
8728
g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)49 b Fd(18)150
8729
5036 y Fb(FFTW_REAL_TO_COMPLEX)24 b Fc(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f
8822
g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)49 b Fj(18)150
8823
4608 y Fi(FFTW_REAL_TO_COMPLEX)24 b Ff(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f
8730
8824
(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)45
8731
b Fd(6,)26 b(27)150 5138 y Fb(FFTW_SCRAMBLED_INPUT)7
8732
b Fc(.)17 b(.)c(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
8733
(.)g(.)h(.)f(.)g(.)h(.)f(.)33 b Fd(47)150 5239 y Fb
8734
(FFTW_SCRAMBLED_OUTPUT)c Fc(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
8735
(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)50 b Fd(47)150
8736
5340 y Fb(fftw_test)16 b Fc(.)e(.)f(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
8825
b Fj(6,)26 b(26)150 4699 y Fi(FFTW_SCRAMBLED_INPUT)7
8826
b Ff(.)17 b(.)c(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
8827
(.)g(.)h(.)f(.)g(.)h(.)f(.)33 b Fj(47)150 4791 y Fi
8828
(FFTW_SCRAMBLED_OUTPUT)c Ff(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
8829
(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)50 b Fj(47)150
8830
4882 y Fi(fftw_test)16 b Ff(.)e(.)f(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
8737
8831
(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)
8738
g(.)h(.)42 b Fd(57,)26 b(58)2025 651 y Fb(fftw_threads_init)12
8739
b Fc(.)k(.)c(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)
8740
f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)38 b Fd(38)2025 750
8741
y Fb(fftw_threads_test)12 b Fc(.)k(.)c(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
8742
(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)38
8743
b Fd(39)2025 850 y Fb(FFTW_THREADSAFE)15 b Fc(.)g(.)e(.)f(.)g(.)g(.)h
8832
g(.)h(.)42 b Fj(57,)26 b(58)150 4974 y Fi(fftw_threads_init)12
8833
b Ff(.)k(.)c(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)
8834
g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)37 b Fj(38)150 5065
8835
y Fi(fftw_threads_test)12 b Ff(.)k(.)c(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
8836
(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)37
8837
b Fj(39)150 5157 y Fi(FFTW_THREADSAFE)15 b Ff(.)g(.)e(.)f(.)g(.)h(.)f
8838
(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)
8839
f(.)g(.)g(.)h(.)40 b Fj(36)150 5248 y Fi(FFTW_TIME_MIN)18
8840
b Ff(.)d(.)d(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)
8841
f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)43
8842
b Fj(58)150 5340 y Fi(FFTW_TRANSPOSED_ORDER)25 b Ff(.)12
8843
b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)46 b Fj(42,)27
8844
b(44,)g(46,)f(48)2025 642 y Fi(FFTW_USE_WISDOM)15 b Ff(.)g(.)e(.)f(.)g
8845
(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)
8846
f(.)g(.)h(.)f(.)g(.)h(.)40 b Fj(13)2025 734 y Fi(fftw2d_create_plan)26
8847
b Ff(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
8848
(.)h(.)f(.)g(.)g(.)h(.)48 b Fj(5,)26 b(22)2025 825 y
8849
Fi(fftw2d_create_plan_specific)16 b Ff(.)i(.)12 b(.)g(.)h(.)f(.)g(.)h
8850
(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)41 b Fj(22)2025 917 y
8851
Fi(fftw2d_mpi_create_plan)27 b Ff(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)
8852
g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)48 b Fj(42)2025
8853
1008 y Fi(fftw3d_create_plan)26 b Ff(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h
8854
(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)48
8855
b Fj(5,)26 b(22)2025 1100 y Fi(fftw3d_create_plan_specific)16
8856
b Ff(.)i(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)41
8857
b Fj(22)2025 1191 y Fi(fftw3d_f77_create_plan)27 b Ff(.)13
8858
b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
8859
(.)h(.)48 b Fj(53)2025 1283 y Fi(fftw3d_mpi_create_plan)27
8860
b Ff(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
8861
(.)f(.)g(.)h(.)48 b Fj(42)2025 1374 y Fi(fftwnd)23 b
8862
Ff(.)12 b(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
8744
8863
(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)
8745
h(.)f(.)g(.)h(.)40 b Fd(36)2025 950 y Fb(FFTW_TIME_MIN)18
8746
b Fc(.)d(.)d(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)
8747
h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)43
8748
b Fd(58)2025 1050 y Fb(FFTW_TRANSPOSED_ORDER)25 b Fc(.)12
8749
b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)46 b Fd(42,)27
8750
b(44,)f(46,)h(48)2025 1149 y Fb(FFTW_USE_WISDOM)15 b
8751
Fc(.)g(.)e(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
8752
(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)40 b Fd(13)2025
8753
1249 y Fb(fftw2d_create_plan)26 b Fc(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h
8754
(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)48
8755
b Fd(5,)26 b(22)2025 1349 y Fb(fftw2d_create_plan_specific)16
8756
b Fc(.)i(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)41
8757
b Fd(22)2025 1449 y Fb(fftw2d_mpi_create_plan)27 b Fc(.)13
8758
b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
8759
(.)h(.)48 b Fd(42)2025 1548 y Fb(fftw3d_create_plan)26
8760
b Fc(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
8761
(.)h(.)f(.)g(.)g(.)h(.)48 b Fd(5,)26 b(22)2025 1648 y
8762
Fb(fftw3d_create_plan_specific)16 b Fc(.)i(.)12 b(.)g(.)h(.)f(.)g(.)h
8763
(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)41 b Fd(22)2025 1748 y
8764
Fb(fftw3d_f77_create_plan)27 b Fc(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)
8765
g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)48 b Fd(53)2025
8766
1848 y Fb(fftw3d_mpi_create_plan)27 b Fc(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h
8767
(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)48
8768
b Fd(42)2025 1947 y Fb(fftwnd)23 b Fc(.)12 b(.)g(.)h(.)f(.)g(.)g(.)h(.)
8769
f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
8770
(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)47 b Fd(5,)26
8771
b(24)2025 2047 y Fb(fftwnd_threads)16 b Fc(.)f(.)e(.)f(.)g(.)h(.)f(.)g
8772
(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)
8773
g(.)g(.)h(.)f(.)42 b Fd(38)2025 2147 y Fb(fftwnd_threads_one)10
8774
b Fc(.)17 b(.)12 b(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
8775
(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)36 b Fd(38)2025
8776
2247 y Fb(fftwnd_create_plan)26 b Fc(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h
8777
(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)48
8778
b Fd(4,)26 b(22)2025 2346 y Fb(fftwnd_create_plan_specific)16
8779
b Fc(.)i(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)41
8780
b Fd(22)2025 2446 y Fb(fftwnd_destroy_plan)25 b Fc(.)12
8864
h(.)47 b Fj(5,)26 b(24)2025 1466 y Fi(fftwnd_threads)16
8865
b Ff(.)f(.)e(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)
8866
h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)42 b
8867
Fj(38)2025 1557 y Fi(fftwnd_threads_one)10 b Ff(.)17
8868
b(.)12 b(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)
8869
f(.)g(.)h(.)f(.)g(.)h(.)f(.)36 b Fj(38)2025 1649 y Fi
8870
(fftwnd_create_plan)26 b Ff(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
8871
(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)48 b Fj(4,)26
8872
b(22)2025 1740 y Fi(fftwnd_create_plan_specific)16 b
8873
Ff(.)i(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)41
8874
b Fj(22)2025 1832 y Fi(fftwnd_destroy_plan)25 b Ff(.)12
8781
8875
b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
8782
(.)f(.)g(.)47 b Fd(5,)26 b(25)2025 2546 y Fb(fftwnd_f77_create_plan)h
8783
Fc(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
8784
(.)f(.)g(.)h(.)48 b Fd(53)2025 2646 y Fb(fftwnd_f77_destroy_plan)26
8785
b Fc(.)13 b(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
8786
(.)h(.)f(.)47 b Fd(53)2025 2745 y Fb(fftwnd_f77_one)16
8787
b Fc(.)f(.)e(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)
8876
(.)f(.)g(.)47 b Fj(5,)26 b(25)2025 1923 y Fi(fftwnd_f77_create_plan)h
8877
Ff(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
8878
(.)f(.)g(.)h(.)48 b Fj(53)2025 2015 y Fi(fftwnd_f77_destroy_plan)26
8879
b Ff(.)13 b(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
8880
(.)h(.)f(.)47 b Fj(53)2025 2106 y Fi(fftwnd_f77_one)16
8881
b Ff(.)f(.)e(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)
8788
8882
h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)42 b
8789
Fd(53)2025 2845 y Fb(fftwnd_mpi)24 b Fc(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g
8883
Fj(53)2025 2198 y Fi(fftwnd_mpi)24 b Ff(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g
8790
8884
(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)
8791
f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)48 b Fd(42)2025 2945
8792
y Fb(fftwnd_mpi_create_plan)27 b Fc(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f
8793
(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)48 b Fd(42)2025
8794
3045 y Fb(fftwnd_mpi_destroy_plan)26 b Fc(.)13 b(.)f(.)g(.)h(.)f(.)g(.)
8885
f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)48 b Fj(42)2025 2289
8886
y Fi(fftwnd_mpi_create_plan)27 b Ff(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f
8887
(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)48 b Fj(42)2025
8888
2381 y Fi(fftwnd_mpi_destroy_plan)26 b Ff(.)13 b(.)f(.)g(.)h(.)f(.)g(.)
8795
8889
g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)47 b
8796
Fd(43)2025 3144 y Fb(fftwnd_mpi_local_sizes)27 b Fc(.)13
8890
Fj(43)2025 2472 y Fi(fftwnd_mpi_local_sizes)27 b Ff(.)13
8797
8891
b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
8798
(.)h(.)48 b Fd(43)2025 3244 y Fb(fftwnd_mpi_plan)15 b
8799
Fc(.)g(.)e(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
8800
(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)40 b Fd(42)2025
8801
3344 y Fb(fftwnd_one)16 b Fc(.)e(.)e(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)
8892
(.)h(.)48 b Fj(43)2025 2564 y Fi(fftwnd_mpi_plan)15 b
8893
Ff(.)g(.)e(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
8894
(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)40 b Fj(42)2025
8895
2655 y Fi(fftwnd_one)16 b Ff(.)e(.)e(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)
8802
8896
g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
8803
(.)f(.)g(.)42 b Fd(5,)26 b(24)2025 3444 y Fb(fftwnd_plan)14
8804
b Fc(.)h(.)d(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)
8897
(.)f(.)g(.)42 b Fj(5,)26 b(24)2025 2747 y Fi(fftwnd_plan)14
8898
b Ff(.)h(.)d(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)
8805
8899
f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)40
8806
b Fd(4,)26 b(22)2025 3710 y Ft(G)2025 3843 y Fb(genfft)c
8807
Fc(.)12 b(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
8900
b Fj(4,)26 b(22)2025 3007 y Fu(G)2025 3128 y Fi(genfft)c
8901
Ff(.)12 b(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
8808
8902
(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)
8809
46 b Fd(59,)27 b(61)2025 4110 y Ft(R)2025 4243 y Fb(rfftw)11
8810
b Fc(.)i(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)
8903
46 b Fj(59,)27 b(61)2025 3388 y Fu(R)2025 3510 y Fi(rfftw)11
8904
b Ff(.)i(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)
8811
8905
g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
8812
(.)g(.)h(.)f(.)g(.)37 b Fd(27)2025 4342 y Fb(rfftw_threads)18
8813
b Fc(.)d(.)d(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)
8906
(.)g(.)h(.)f(.)g(.)37 b Fj(27)2025 3601 y Fi(rfftw_threads)18
8907
b Ff(.)d(.)d(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)
8814
8908
h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)43
8815
b Fd(38)2025 4442 y Fb(rfftw_threads_one)12 b Fc(.)k(.)c(.)g(.)h(.)f(.)
8909
b Fj(38)2025 3693 y Fi(rfftw_threads_one)12 b Ff(.)k(.)c(.)g(.)h(.)f(.)
8816
8910
g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
8817
(.)g(.)g(.)38 b Fd(38)2025 4542 y Fb(rfftw_create_plan)27
8818
b Fc(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g
8819
(.)h(.)f(.)g(.)h(.)f(.)g(.)50 b Fd(6,)26 b(26)2025 4642
8820
y Fb(rfftw_create_plan_specific)17 b Fc(.)h(.)12 b(.)h(.)f(.)g(.)g(.)h
8821
(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)43 b Fd(26)2025 4741
8822
y Fb(rfftw_destroy_plan)26 b Fc(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
8911
(.)g(.)g(.)38 b Fj(38)2025 3784 y Fi(rfftw_create_plan)27
8912
b Ff(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g
8913
(.)h(.)f(.)g(.)h(.)f(.)g(.)50 b Fj(6,)26 b(26)2025 3876
8914
y Fi(rfftw_create_plan_specific)17 b Ff(.)h(.)12 b(.)h(.)f(.)g(.)g(.)h
8915
(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)43 b Fj(26)2025 3967
8916
y Fi(rfftw_destroy_plan)26 b Ff(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
8823
8917
(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)48
8824
b Fd(6,)26 b(28)2025 4841 y Fb(rfftw_f77_create_plan)j
8825
Fc(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
8826
(.)g(.)g(.)h(.)f(.)50 b Fd(54)2025 4941 y Fb(rfftw_f77_destroy_plan)27
8827
b Fc(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
8828
(.)f(.)g(.)h(.)48 b Fd(54)2025 5041 y Fb(rfftw_f77_one)18
8829
b Fc(.)d(.)d(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)
8918
b Fj(6,)26 b(28)2025 4059 y Fi(rfftw_f77_create_plan)j
8919
Ff(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
8920
(.)g(.)g(.)h(.)f(.)50 b Fj(54)2025 4150 y Fi(rfftw_f77_destroy_plan)27
8921
b Ff(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
8922
(.)f(.)g(.)h(.)48 b Fj(54)2025 4242 y Fi(rfftw_f77_one)18
8923
b Ff(.)d(.)d(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)
8830
8924
h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)43
8831
b Fd(54)2025 5140 y Fb(rfftw_mpi_test)9 b Fc(.)15 b(.)d(.)h(.)f(.)g(.)h
8925
b Fj(54)2025 4333 y Fi(rfftw_mpi_test)9 b Ff(.)15 b(.)d(.)h(.)f(.)g(.)h
8832
8926
(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)
8833
g(.)h(.)34 b Fd(41,)27 b(49)2025 5240 y Fb(rfftw_one)17
8834
b Fc(.)d(.)f(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)
8927
g(.)h(.)34 b Fj(41,)27 b(49)2025 4425 y Fi(rfftw_one)17
8928
b Ff(.)d(.)f(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)
8835
8929
g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)43
8836
b Fd(6,)26 b(27)2025 5340 y Fb(rfftw_plan)16 b Fc(.)e(.)e(.)h(.)f(.)g
8930
b Fj(6,)26 b(27)2025 4516 y Fi(rfftw_plan)16 b Ff(.)e(.)e(.)h(.)f(.)g
8837
8931
(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)
8838
f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)42 b Fd(6,)26 b(26)p
8932
f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)42 b Fj(6,)26 b(26)2025
8933
4608 y Fi(rfftw_test)e Ff(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)
8934
h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
8935
(.)g(.)h(.)f(.)g(.)48 b Fj(57)2025 4699 y Fi(rfftw_threads_test)10
8936
b Ff(.)17 b(.)12 b(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
8937
(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)36 b Fj(39)2025
8938
4791 y Fi(rfftw2d_create_plan)13 b Ff(.)k(.)12 b(.)g(.)h(.)f(.)g(.)h(.)
8939
f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)39 b Fj(7,)26
8940
b(29,)h(47)2025 4882 y Fi(rfftw2d_f77_create_plan)f Ff(.)13
8941
b(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
8942
(.)47 b Fj(54)2025 4974 y Fi(rfftw3d_mpi_create_plan)26
8943
b Ff(.)13 b(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
8944
(.)h(.)f(.)47 b Fj(45)2025 5065 y Fi(rfftw3d_create_plan)25
8945
b Ff(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
8946
(.)g(.)h(.)f(.)g(.)47 b Fj(7,)26 b(29)2025 5157 y Fi(rfftwnd_mpi)d
8947
Ff(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
8948
(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)46
8949
b Fj(46)2025 5248 y Fi(rfftwnd_mpi_destroy_plan)25 b
8950
Ff(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
8951
(.)g(.)46 b Fj(46)2025 5340 y Fi(rfftwnd_mpi_local_sizes)26
8952
b Ff(.)13 b(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
8953
(.)h(.)f(.)47 b Fj(45)p eop end
8841
68 69 bop 150 -116 a Fu(68)3232 b(FFTW)150 299 y Fb(rfftw_test)24
8842
b Fc(.)13 b(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
8843
(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)47
8844
b Fd(57)150 399 y Fb(rfftw_threads_test)10 b Fc(.)17
8845
b(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)
8846
g(.)h(.)f(.)g(.)h(.)f(.)g(.)36 b Fd(39)150 498 y Fb
8847
(rfftw2d_create_plan)13 b Fc(.)k(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
8848
(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)39 b Fd(7,)27 b(29,)f(47)150
8849
598 y Fb(rfftw2d_f77_create_plan)g Fc(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)
8850
f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)47 b Fd(54)150
8851
697 y Fb(rfftw3d_mpi_create_plan)26 b Fc(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h
8852
(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)47 b Fd(45)150
8853
797 y Fb(rfftw3d_create_plan)25 b Fc(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h
8854
(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)47
8855
b Fd(7,)26 b(29)150 897 y Fb(rfftwnd_mpi)d Fc(.)12 b(.)h(.)f(.)g(.)h(.)
8856
f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g
8857
(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)46 b Fd(46)150 996
8858
y Fb(rfftwnd_mpi_destroy_plan)25 b Fc(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)
8859
f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)45 b Fd(46)150
8860
1096 y Fb(rfftwnd_mpi_local_sizes)26 b Fc(.)13 b(.)f(.)g(.)h(.)f(.)g(.)
8861
h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)47 b
8862
Fd(45)150 1196 y Fb(rfftwnd_threads_complex_to_re)q(al)10
8863
b Fc(.)18 b(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)35
8864
b Fd(39)150 1295 y Fb(rfftwnd_threads_one_complex_t)q(o_re)q(al)28
8865
b Fc(.)12 b(.)h(.)f(.)g(.)h(.)47 b Fd(39)2025 299 y Fb
8866
(rfftwnd_threads_one_real_to_co)q(mplex)16 b Fc(.)i(.)12
8867
b(.)40 b Fd(38,)27 b(39)2025 399 y Fb(rfftwnd_threads_real_to_comple)q
8868
(x)10 b Fc(.)18 b(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)35
8869
b Fd(38)2025 498 y Fb(rfftwnd_complex_to_real)26 b Fc(.)13
8870
b(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
8871
(.)47 b Fd(31)2025 598 y Fb(rfftwnd_create_plan)13 b
8872
Fc(.)k(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
8873
(.)f(.)39 b Fd(7,)26 b(29,)h(47)2025 697 y Fb(rfftwnd_destroy_plan)7
8874
b Fc(.)17 b(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
8875
(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)33 b Fd(33)2025 797 y
8876
Fb(rfftwnd_f77_destroy_plan)25 b Fc(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h
8877
(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)46 b Fd(54)2025
8878
897 y Fb(rfftwnd_f77_one_real_to_comple)q(x)10 b Fc(.)18
8879
b(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)35 b Fd(54)2025
8880
996 y Fb(rfftwnd_one_complex_to_real)9 b Fc(.)18 b(.)13
8881
b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)35 b Fd(8,)26
8882
b(31)2025 1096 y Fb(rfftwnd_one_real_to_complex)9 b Fc(.)18
8883
b(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)35
8884
b Fd(8,)26 b(31)2025 1196 y Fb(rfftwnd_plan)13 b Fc(.)i(.)d(.)g(.)h(.)f
8955
TeXDict begin 68 69 bop 150 -116 a Fv(68)3232 b(FFTW)150
8956
299 y Fi(rfftwnd_threads_complex_to_re)q(al)10 b Ff(.)18
8957
b(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)35 b Fj(39)150
8958
391 y Fi(rfftwnd_threads_one_complex_t)q(o_re)q(al)28
8959
b Ff(.)12 b(.)h(.)f(.)g(.)h(.)47 b Fj(39)150 483 y Fi
8960
(rfftwnd_threads_one_real_to_c)q(ompl)q(ex)28 b Ff(.)12
8961
b(.)h(.)f(.)g(.)h(.)47 b Fj(39)150 575 y Fi
8962
(rfftwnd_threads_real_to_compl)q(ex)10 b Ff(.)18 b(.)12
8963
b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)35 b Fj(38)150 667
8964
y Fi(rfftwnd_complex_to_real)26 b Ff(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f
8965
(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)47 b Fj(31)150
8966
759 y Fi(rfftwnd_create_plan)13 b Ff(.)k(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g
8967
(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)39 b Fj(7,)27
8968
b(29,)f(47)150 851 y Fi(rfftwnd_destroy_plan)7 b Ff(.)17
8969
b(.)c(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h
8970
(.)f(.)g(.)h(.)f(.)33 b Fj(33)2025 299 y Fi(rfftwnd_f77_destroy_plan)25
8971
b Ff(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
8972
(.)g(.)46 b Fj(54)2025 409 y Fi(rfftwnd_f77_one_real_to_comple)q(x)10
8973
b Ff(.)18 b(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)35
8974
b Fj(54)2025 520 y Fi(rfftwnd_one_complex_to_real)9 b
8975
Ff(.)18 b(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)35
8976
b Fj(8,)26 b(31)2025 630 y Fi(rfftwnd_one_real_to_complex)9
8977
b Ff(.)18 b(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)35
8978
b Fj(8,)26 b(31)2025 741 y Fi(rfftwnd_plan)13 b Ff(.)i(.)d(.)g(.)h(.)f
8885
8979
(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)
8886
h(.)f(.)g(.)h(.)f(.)g(.)39 b Fd(7,)26 b(29)2025 1295
8887
y Fb(rfftwnd_real_to_complex)g Fc(.)13 b(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)
8888
f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)47 b Fd(31)p
8980
h(.)f(.)g(.)h(.)f(.)g(.)39 b Fj(7,)26 b(29)2025 851 y
8981
Fi(rfftwnd_real_to_complex)g Ff(.)13 b(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f
8982
(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)47 b Fj(31)p eop
8891
-1 70 bop 3725 -116 a Fu(i)150 299 y Fr(T)-13 b(able)54
8892
b(of)g(Con)l(ten)l(ts)150 641 y Ft(1)135 b(In)l(tro)t(duction)15
8893
b Fa(.)20 b(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f
8894
(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)60
8895
b Ft(1)150 911 y(2)135 b(T)-11 b(utorial)25 b Fa(.)20
8985
TeXDict begin -1 70 bop 3725 -116 a Fv(i)150 299 y Fs(T)-13
8986
b(able)54 b(of)g(Con)l(ten)l(ts)150 641 y Fu(1)135 b(In)l(tro)t
8987
(duction)15 b Fa(.)20 b(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h
8988
(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)
8989
60 b Fu(1)150 911 y(2)135 b(T)-11 b(utorial)25 b Fa(.)20
8896
8990
b(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h
8897
8991
(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)69
8898
b Ft(3)449 1048 y Fu(2.1)92 b(Complex)29 b(One-dimensional)f(T)-8
8899
b(ransforms)29 b(T)-8 b(utorial)22 b Fq(.)15 b(.)g(.)g(.)h(.)f(.)g(.)g
8900
(.)g(.)g(.)g(.)g(.)53 b Fu(3)449 1157 y(2.2)92 b(Complex)29
8992
b Fu(3)449 1048 y Fv(2.1)92 b(Complex)29 b(One-dimensional)f(T)-8
8993
b(ransforms)29 b(T)-8 b(utorial)22 b Fr(.)15 b(.)g(.)g(.)h(.)f(.)g(.)g
8994
(.)g(.)g(.)g(.)g(.)53 b Fv(3)449 1157 y(2.2)92 b(Complex)29
8901
8995
b(Multi-dimensional)e(T)-8 b(ransforms)29 b(T)-8 b(utorial)16
8902
b Fq(.)e(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)46 b Fu(4)449
8996
b Fr(.)e(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)46 b Fv(4)449
8903
8997
1267 y(2.3)92 b(Real)30 b(One-dimensional)e(T)-8 b(ransforms)29
8904
b(T)-8 b(utorial)23 b Fq(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
8905
(.)g(.)g(.)g(.)g(.)54 b Fu(6)449 1377 y(2.4)92 b(Real)30
8998
b(T)-8 b(utorial)23 b Fr(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
8999
(.)g(.)g(.)g(.)g(.)54 b Fv(6)449 1377 y(2.4)92 b(Real)30
8906
9000
b(Multi-dimensional)d(T)-8 b(ransforms)29 b(T)-8 b(utorial)16
8907
b Fq(.)e(.)h(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)46
8908
b Fu(7)449 1486 y(2.5)92 b(Multi-dimensional)26 b(Arra)m(y)31
8909
b(F)-8 b(ormat)29 b Fq(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
9001
b Fr(.)e(.)h(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)46
9002
b Fv(7)449 1486 y(2.5)92 b(Multi-dimensional)26 b(Arra)m(y)31
9003
b(F)-8 b(ormat)29 b Fr(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
8910
9004
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)57
8911
b Fu(11)748 1596 y(2.5.1)93 b(Ro)m(w-ma)5 b(jor)31 b(F)-8
8912
b(ormat)28 b Fq(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
9005
b Fv(11)748 1596 y(2.5.1)93 b(Ro)m(w-ma)5 b(jor)31 b(F)-8
9006
b(ormat)28 b Fr(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
8913
9007
(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)56
8914
b Fu(11)748 1705 y(2.5.2)93 b(Column-ma)5 b(jor)28 b(F)-8
8915
b(ormat)23 b Fq(.)16 b(.)f(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
8916
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)52 b Fu(11)748
9008
b Fv(11)748 1705 y(2.5.2)93 b(Column-ma)5 b(jor)28 b(F)-8
9009
b(ormat)23 b Fr(.)16 b(.)f(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
9010
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)52 b Fv(11)748
8917
9011
1815 y(2.5.3)93 b(Static)30 b(Arra)m(ys)h(in)e(C)20 b
8918
Fq(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
9012
Fr(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
8919
9013
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)50
8920
b Fu(12)748 1924 y(2.5.4)93 b(Dynamic)30 b(Arra)m(ys)g(in)f(C)23
8921
b Fq(.)15 b(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
8922
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)53 b Fu(12)748
9014
b Fv(12)748 1924 y(2.5.4)93 b(Dynamic)30 b(Arra)m(ys)g(in)f(C)23
9015
b Fr(.)15 b(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
9016
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)53 b Fv(12)748
8923
9017
2034 y(2.5.5)93 b(Dynamic)30 b(Arra)m(ys)g(in)f(C|The)h(W)-8
8924
b(rong)31 b(W)-8 b(a)m(y)15 b Fq(.)i(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)45
8925
b Fu(12)449 2144 y(2.6)92 b(W)-8 b(ords)31 b(of)f(Wisdom)20
8926
b Fq(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
9018
b(rong)31 b(W)-8 b(a)m(y)15 b Fr(.)i(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)45
9019
b Fv(12)449 2144 y(2.6)92 b(W)-8 b(ords)31 b(of)f(Wisdom)20
9020
b Fr(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
8927
9021
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
8928
h(.)f(.)g(.)g(.)49 b Fu(13)748 2253 y(2.6.1)93 b(Ca)m(v)m(eats)32
8929
b(in)d(Using)h(Wisdom)22 b Fq(.)14 b(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
9022
h(.)f(.)g(.)g(.)49 b Fv(13)748 2253 y(2.6.1)93 b(Ca)m(v)m(eats)32
9023
b(in)d(Using)h(Wisdom)22 b Fr(.)14 b(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
8930
9024
g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)51 b
8931
Fu(14)748 2363 y(2.6.2)93 b(Imp)s(orting)28 b(and)i(Exp)s(orting)f
8932
(Wisdom)d Fq(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
8933
56 b Fu(14)150 2605 y Ft(3)135 b(FFTW)43 b(Reference)28
9025
Fv(14)748 2363 y(2.6.2)93 b(Imp)s(orting)28 b(and)i(Exp)s(orting)f
9026
(Wisdom)d Fr(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
9027
56 b Fv(14)150 2605 y Fu(3)135 b(FFTW)43 b(Reference)28
8934
9028
b Fa(.)21 b(.)e(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f
8935
(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)72 b Ft(17)449 2742
8936
y Fu(3.1)92 b(Data)32 b(T)m(yp)s(es)15 b Fq(.)f(.)h(.)g(.)g(.)g(.)g(.)g
9029
(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)72 b Fu(17)449 2742
9030
y Fv(3.1)92 b(Data)32 b(T)m(yp)s(es)15 b Fr(.)f(.)h(.)g(.)g(.)g(.)g(.)g
8937
9031
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)
8938
9032
g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
8939
(.)g(.)44 b Fu(17)449 2852 y(3.2)92 b(One-dimensional)27
8940
b(T)-8 b(ransforms)30 b(Reference)10 b Fq(.)15 b(.)g(.)g(.)g(.)g(.)h(.)
9033
(.)g(.)44 b Fv(17)449 2852 y(3.2)92 b(One-dimensional)27
9034
b(T)-8 b(ransforms)30 b(Reference)10 b Fr(.)15 b(.)g(.)g(.)g(.)g(.)h(.)
8941
9035
f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)39 b
8942
Fu(18)748 2961 y(3.2.1)93 b(Plan)29 b(Creation)h(for)g(One-dimensional)
8943
d(T)-8 b(ransforms)13 b Fq(.)h(.)h(.)42 b Fu(18)748 3071
9036
Fv(18)748 2961 y(3.2.1)93 b(Plan)29 b(Creation)h(for)g(One-dimensional)
9037
d(T)-8 b(ransforms)13 b Fr(.)h(.)h(.)42 b Fv(18)748 3071
8944
9038
y(3.2.2)93 b(Discussion)28 b(on)i(Sp)s(eci\014c)f(Plans)19
8945
b Fq(.)14 b(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g
8946
(.)g(.)g(.)g(.)48 b Fu(20)748 3181 y(3.2.3)93 b(Computing)28
8947
b(the)j(One-dimensional)c(T)-8 b(ransform)14 b Fq(.)g(.)h(.)g(.)g(.)g
8948
(.)43 b Fu(20)748 3290 y(3.2.4)93 b(Destro)m(ying)31
8949
b(a)f(One-dimensional)e(Plan)c Fq(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
8950
g(.)g(.)g(.)g(.)54 b Fu(21)748 3400 y(3.2.5)93 b(What)31
8951
b(FFTW)g(Really)e(Computes)22 b Fq(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g
8952
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)51 b Fu(21)449 3509
9039
b Fr(.)14 b(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g
9040
(.)g(.)g(.)g(.)48 b Fv(20)748 3181 y(3.2.3)93 b(Computing)28
9041
b(the)j(One-dimensional)c(T)-8 b(ransform)14 b Fr(.)g(.)h(.)g(.)g(.)g
9042
(.)43 b Fv(20)748 3290 y(3.2.4)93 b(Destro)m(ying)31
9043
b(a)f(One-dimensional)e(Plan)c Fr(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
9044
g(.)g(.)g(.)g(.)54 b Fv(21)748 3400 y(3.2.5)93 b(What)31
9045
b(FFTW)g(Really)e(Computes)22 b Fr(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g
9046
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)51 b Fv(21)449 3509
8953
9047
y(3.3)92 b(Multi-dimensional)26 b(T)-8 b(ransforms)30
8954
b(Reference)24 b Fq(.)15 b(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
8955
(.)g(.)g(.)g(.)g(.)53 b Fu(22)748 3619 y(3.3.1)93 b(Plan)27
9048
b(Reference)24 b Fr(.)15 b(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
9049
(.)g(.)g(.)g(.)g(.)53 b Fv(22)748 3619 y(3.3.1)93 b(Plan)27
8956
9050
b(Creation)h(for)g(Multi-dimensional)c(T)-8 b(ransforms)10
8957
b Fq(.)k(.)38 b Fu(22)748 3729 y(3.3.2)93 b(Computing)28
8958
b(the)j(Multi-dimensional)26 b(T)-8 b(ransform)27 b Fq(.)15
8959
b(.)g(.)g(.)57 b Fu(24)748 3838 y(3.3.3)93 b(Destro)m(ying)31
8960
b(a)f(Multi-dimensional)d(Plan)17 b Fq(.)d(.)h(.)g(.)g(.)g(.)g(.)g(.)g
8961
(.)g(.)g(.)h(.)46 b Fu(25)748 3948 y(3.3.4)93 b(What)31
8962
b(FFTWND)g(Really)f(Computes)18 b Fq(.)c(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)
8963
g(.)g(.)g(.)g(.)g(.)47 b Fu(25)449 4057 y(3.4)92 b(Real)30
9051
b Fr(.)k(.)38 b Fv(22)748 3729 y(3.3.2)93 b(Computing)28
9052
b(the)j(Multi-dimensional)26 b(T)-8 b(ransform)27 b Fr(.)15
9053
b(.)g(.)g(.)57 b Fv(24)748 3838 y(3.3.3)93 b(Destro)m(ying)31
9054
b(a)f(Multi-dimensional)d(Plan)17 b Fr(.)d(.)h(.)g(.)g(.)g(.)g(.)g(.)g
9055
(.)g(.)g(.)h(.)46 b Fv(25)748 3948 y(3.3.4)93 b(What)31
9056
b(FFTWND)g(Really)f(Computes)18 b Fr(.)c(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)
9057
g(.)g(.)g(.)g(.)g(.)47 b Fv(25)449 4057 y(3.4)92 b(Real)30
8964
9058
b(One-dimensional)e(T)-8 b(ransforms)29 b(Reference)13
8965
b Fq(.)j(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)43
8966
b Fu(26)748 4167 y(3.4.1)93 b(Plan)29 b(Creation)h(for)g(Real)g
8967
(One-dimensional)e(T)-8 b(ransforms)954 4276 y Fq(.)16
8968
b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
8969
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)
8970
f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)54 b
8971
Fu(26)748 4386 y(3.4.2)93 b(Computing)28 b(the)j(Real)f
8972
(One-dimensional)e(T)-8 b(ransform)954 4496 y Fq(.)16
8973
b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
8974
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)
8975
f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)54 b
8976
Fu(27)748 4605 y(3.4.3)93 b(Destro)m(ying)31 b(a)f(Real)h
8977
(One-dimensional)c(Plan)g Fq(.)15 b(.)g(.)g(.)h(.)f(.)g(.)g(.)57
8978
b Fu(28)748 4715 y(3.4.4)93 b(What)31 b(RFFTW)g(Really)e(Computes)10
8979
b Fq(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
8980
39 b Fu(28)449 4824 y(3.5)92 b(Real)30 b(Multi-dimensional)d(T)-8
8981
b(ransforms)29 b(Reference)f Fq(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
8982
(.)g(.)g(.)57 b Fu(29)748 4934 y(3.5.1)93 b(Plan)28 b(Creation)g(for)h
9059
b Fr(.)j(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)43
9060
b Fv(26)748 4167 y(3.4.1)93 b(Plan)29 b(Creation)h(for)g(Real)g
9061
(One-dimensional)e(T)-8 b(ransforms)954 4276 y Fr(.)16
9062
b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
9063
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)
9064
f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)54 b
9065
Fv(26)748 4386 y(3.4.2)93 b(Computing)28 b(the)j(Real)f
9066
(One-dimensional)e(T)-8 b(ransform)954 4496 y Fr(.)16
9067
b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
9068
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)
9069
f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)54 b
9070
Fv(27)748 4605 y(3.4.3)93 b(Destro)m(ying)31 b(a)f(Real)h
9071
(One-dimensional)c(Plan)g Fr(.)15 b(.)g(.)g(.)h(.)f(.)g(.)g(.)57
9072
b Fv(28)748 4715 y(3.4.4)93 b(What)31 b(RFFTW)g(Really)e(Computes)10
9073
b Fr(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
9074
39 b Fv(28)449 4824 y(3.5)92 b(Real)30 b(Multi-dimensional)d(T)-8
9075
b(ransforms)29 b(Reference)f Fr(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
9076
(.)g(.)g(.)57 b Fv(29)748 4934 y(3.5.1)93 b(Plan)28 b(Creation)g(for)h
8983
9077
(Real)g(Multi-dimensional)c(T)-8 b(ransforms)954 5044
8984
y Fq(.)16 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
9078
y Fr(.)16 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
8985
9079
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
8986
9080
g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)54
8987
b Fu(29)748 5153 y(3.5.2)93 b(Computing)28 b(the)j(Real)f
8988
(Multi-dimensional)d(T)-8 b(ransform)954 5263 y Fq(.)16
9081
b Fv(29)748 5153 y(3.5.2)93 b(Computing)28 b(the)j(Real)f
9082
(Multi-dimensional)d(T)-8 b(ransform)954 5263 y Fr(.)16
8989
9083
b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
8990
9084
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)
8991
9085
f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)54 b
8994
-2 71 bop 150 -116 a Fu(ii)3270 b(FFTW)748 83 y(3.5.3)93
8995
b(Arra)m(y)30 b(Dimensions)f(for)h(Real)g(Multi-dimensional)930
8996
193 y(T)-8 b(ransforms)17 b Fq(.)d(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
9088
TeXDict begin -2 71 bop 150 -116 a Fv(ii)3270 b(FFTW)748
9089
83 y(3.5.3)93 b(Arra)m(y)30 b(Dimensions)f(for)h(Real)g
9090
(Multi-dimensional)930 193 y(T)-8 b(ransforms)17 b Fr(.)d(.)h(.)g(.)g
8997
9091
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
8998
g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)46 b Fu(32)748
8999
302 y(3.5.4)93 b(Strides)28 b(in)h(In-place)h(RFFTWND)c
9000
Fq(.)16 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
9001
(.)54 b Fu(33)748 412 y(3.5.5)93 b(Destro)m(ying)31 b(a)f
9002
(Multi-dimensional)d(Plan)17 b Fq(.)d(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g
9003
(.)g(.)h(.)46 b Fu(33)748 521 y(3.5.6)93 b(What)31 b(RFFTWND)g(Really)f
9004
(Computes)c Fq(.)15 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)56
9005
b Fu(33)449 631 y(3.6)92 b(Wisdom)30 b(Reference)f Fq(.)15
9092
g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)46
9093
b Fv(32)748 302 y(3.5.4)93 b(Strides)28 b(in)h(In-place)h(RFFTWND)c
9094
Fr(.)16 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
9095
(.)54 b Fv(32)748 412 y(3.5.5)93 b(Destro)m(ying)31 b(a)f
9096
(Multi-dimensional)d(Plan)17 b Fr(.)d(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g
9097
(.)g(.)h(.)46 b Fv(33)748 521 y(3.5.6)93 b(What)31 b(RFFTWND)g(Really)f
9098
(Computes)c Fr(.)15 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)56
9099
b Fv(33)449 631 y(3.6)92 b(Wisdom)30 b(Reference)f Fr(.)15
9006
9100
b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f
9007
9101
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
9008
g(.)58 b Fu(34)748 741 y(3.6.1)93 b(Exp)s(orting)28 b(Wisdom)g
9009
Fq(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g
9010
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)58 b Fu(34)748
9011
850 y(3.6.2)93 b(Imp)s(orting)28 b(Wisdom)h Fq(.)15 b(.)g(.)g(.)g(.)g
9012
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
9013
g(.)g(.)g(.)g(.)g(.)59 b Fu(35)748 960 y(3.6.3)93 b(F)-8
9014
b(orgetting)31 b(Wisdom)23 b Fq(.)15 b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
9015
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
9016
g(.)53 b Fu(35)449 1069 y(3.7)92 b(Memory)31 b(Allo)s(cator)f
9017
(Reference)22 b Fq(.)15 b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g
9102
g(.)58 b Fv(34)748 741 y(3.6.1)93 b(Exp)s(orting)28 b(Wisdom)g
9103
Fr(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g
9104
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)58 b Fv(34)748
9105
850 y(3.6.2)93 b(Imp)s(orting)28 b(Wisdom)h Fr(.)15 b(.)g(.)g(.)g(.)g
9106
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
9107
g(.)g(.)g(.)g(.)g(.)59 b Fv(35)748 960 y(3.6.3)93 b(F)-8
9108
b(orgetting)31 b(Wisdom)23 b Fr(.)15 b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
9109
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
9110
g(.)53 b Fv(35)449 1069 y(3.7)92 b(Memory)31 b(Allo)s(cator)f
9111
(Reference)22 b Fr(.)15 b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g
9018
9112
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)51
9019
b Fu(36)449 1179 y(3.8)92 b(Thread)29 b(safet)m(y)16
9020
b Fq(.)h(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
9113
b Fv(35)449 1179 y(3.8)92 b(Thread)29 b(safet)m(y)16
9114
b Fr(.)h(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
9021
9115
g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
9022
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)46 b Fu(36)150 1419 y
9023
Ft(4)135 b(P)l(arallel)47 b(FFTW)30 b Fa(.)18 b(.)h(.)h(.)f(.)g(.)h(.)f
9116
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)46 b Fv(36)150 1419 y
9117
Fu(4)135 b(P)l(arallel)47 b(FFTW)30 b Fa(.)18 b(.)h(.)h(.)f(.)g(.)h(.)f
9024
9118
(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)
9025
f(.)g(.)75 b Ft(37)449 1556 y Fu(4.1)92 b(Multi-threaded)29
9026
b(FFTW)10 b Fq(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g
9119
f(.)g(.)75 b Fu(37)449 1556 y Fv(4.1)92 b(Multi-threaded)29
9120
b(FFTW)10 b Fr(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g
9027
9121
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
9028
g(.)g(.)g(.)39 b Fu(37)748 1665 y(4.1.1)93 b(Installation)28
9122
g(.)g(.)g(.)39 b Fv(37)748 1665 y(4.1.1)93 b(Installation)28
9029
9123
b(and)i(Supp)s(orted)e(Hardw)m(are/Soft)m(w)m(are)9 b
9030
Fq(.)17 b(.)e(.)38 b Fu(37)748 1775 y(4.1.2)93 b(Usage)31
9031
b(of)g(Multi-threaded)e(FFTW)f Fq(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
9032
g(.)g(.)g(.)g(.)g(.)g(.)g(.)57 b Fu(38)748 1885 y(4.1.3)93
9033
b(Ho)m(w)31 b(Man)m(y)g(Threads)e(to)i(Use?)22 b Fq(.)15
9124
Fr(.)17 b(.)e(.)38 b Fv(37)748 1775 y(4.1.2)93 b(Usage)31
9125
b(of)g(Multi-threaded)e(FFTW)f Fr(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
9126
g(.)g(.)g(.)g(.)g(.)g(.)g(.)57 b Fv(38)748 1885 y(4.1.3)93
9127
b(Ho)m(w)31 b(Man)m(y)g(Threads)e(to)i(Use?)22 b Fr(.)15
9034
9128
b(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
9035
(.)g(.)51 b Fu(39)748 1994 y(4.1.4)93 b(Using)29 b(Multi-threaded)g
9129
(.)g(.)51 b Fv(39)748 1994 y(4.1.4)93 b(Using)29 b(Multi-threaded)g
9036
9130
(FFTW)i(in)e(a)i(Multi-threaded)930 2104 y(Program)24
9037
b Fq(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g
9131
b Fr(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g
9038
9132
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
9039
g(.)g(.)g(.)g(.)g(.)g(.)54 b Fu(40)748 2213 y(4.1.5)93
9040
b(Tips)28 b(for)i(Optimal)f(Threading)22 b Fq(.)13 b(.)i(.)g(.)g(.)g(.)
9133
g(.)g(.)g(.)g(.)g(.)g(.)54 b Fv(40)748 2213 y(4.1.5)93
9134
b(Tips)28 b(for)i(Optimal)f(Threading)22 b Fr(.)13 b(.)i(.)g(.)g(.)g(.)
9041
9135
g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)51
9042
b Fu(40)748 2323 y(4.1.6)93 b(P)m(arallelization)29 b(de\014ciencies)g
9043
(in)g(one-dimensional)930 2433 y(transforms)e Fq(.)15
9136
b Fv(40)748 2323 y(4.1.6)93 b(P)m(arallelization)29 b(de\014ciencies)g
9137
(in)g(one-dimensional)930 2433 y(transforms)e Fr(.)15
9044
9138
b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
9045
9139
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
9046
g(.)g(.)58 b Fu(40)449 2542 y(4.2)92 b(MPI)30 b(FFTW)d
9047
Fq(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g
9140
g(.)g(.)58 b Fv(40)449 2542 y(4.2)92 b(MPI)30 b(FFTW)d
9141
Fr(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g
9048
9142
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
9049
g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)55 b Fu(40)748 2652
9050
y(4.2.1)93 b(MPI)30 b(FFTW)h(Installation)9 b Fq(.)k(.)i(.)g(.)g(.)g(.)
9143
g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)55 b Fv(40)748 2652
9144
y(4.2.1)93 b(MPI)30 b(FFTW)h(Installation)9 b Fr(.)k(.)i(.)g(.)g(.)g(.)
9051
9145
g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
9052
(.)38 b Fu(41)748 2761 y(4.2.2)93 b(Usage)31 b(of)f(MPI)g(FFTW)h(for)f
9146
(.)38 b Fv(41)748 2761 y(4.2.2)93 b(Usage)31 b(of)f(MPI)g(FFTW)h(for)f
9053
9147
(Complex)f(Multi-dimensional)930 2871 y(T)-8 b(ransforms)17
9054
b Fq(.)d(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
9148
b Fr(.)d(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
9055
9149
g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
9056
(.)g(.)g(.)g(.)46 b Fu(41)748 2980 y(4.2.3)93 b(MPI)30
9057
b(Data)i(La)m(y)m(out)9 b Fq(.)16 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
9150
(.)g(.)g(.)g(.)46 b Fv(41)748 2980 y(4.2.3)93 b(MPI)30
9151
b(Data)i(La)m(y)m(out)9 b Fr(.)16 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
9058
9152
(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
9059
g(.)g(.)38 b Fu(43)748 3090 y(4.2.4)93 b(Usage)31 b(of)g(MPI)f(FFTW)h
9153
g(.)g(.)38 b Fv(43)748 3090 y(4.2.4)93 b(Usage)31 b(of)g(MPI)f(FFTW)h
9060
9154
(for)f(Real)h(Multi-dimensional)930 3200 y(T)-8 b(ransforms)17
9061
b Fq(.)d(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
9155
b Fr(.)d(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
9062
9156
g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
9063
(.)g(.)g(.)g(.)46 b Fu(44)748 3309 y(4.2.5)93 b(Usage)31
9157
(.)g(.)g(.)g(.)46 b Fv(44)748 3309 y(4.2.5)93 b(Usage)31
9064
9158
b(of)g(MPI)f(FFTW)h(for)f(Complex)g(One-dimensional)930
9065
3419 y(T)-8 b(ransforms)17 b Fq(.)d(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
9159
3419 y(T)-8 b(ransforms)17 b Fr(.)d(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
9066
9160
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
9067
g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)46 b Fu(47)748
9068
3528 y(4.2.6)93 b(MPI)30 b(Tips)21 b Fq(.)13 b(.)i(.)g(.)g(.)g(.)g(.)g
9161
g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)46 b Fv(47)748
9162
3528 y(4.2.6)93 b(MPI)30 b(Tips)21 b Fr(.)13 b(.)i(.)g(.)g(.)g(.)g(.)g
9069
9163
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)
9070
9164
g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)50 b
9071
Fu(48)150 3768 y Ft(5)135 b(Calling)46 b(FFTW)e(from)h(F)-11
9165
Fv(48)150 3768 y Fu(5)135 b(Calling)46 b(FFTW)e(from)h(F)-11
9072
9166
b(ortran)16 b Fa(.)j(.)g(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)
9073
g(.)61 b Ft(51)449 3905 y Fu(5.1)92 b(W)-8 b(rapp)s(er)30
9074
b(Routines)13 b Fq(.)h(.)h(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g
9167
g(.)61 b Fu(51)449 3905 y Fv(5.1)92 b(W)-8 b(rapp)s(er)30
9168
b(Routines)13 b Fr(.)h(.)h(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g
9075
9169
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
9076
g(.)g(.)g(.)g(.)g(.)g(.)g(.)43 b Fu(51)449 4015 y(5.2)92
9077
b(FFTW)31 b(Constan)m(ts)g(in)e(F)-8 b(ortran)21 b Fq(.)16
9170
g(.)g(.)g(.)g(.)g(.)g(.)g(.)43 b Fv(51)449 4015 y(5.2)92
9171
b(FFTW)31 b(Constan)m(ts)g(in)e(F)-8 b(ortran)21 b Fr(.)16
9078
9172
b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
9079
(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)50 b Fu(52)449
9080
4125 y(5.3)92 b(F)-8 b(ortran)31 b(Examples)20 b Fq(.)14
9173
(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)50 b Fv(52)449
9174
4125 y(5.3)92 b(F)-8 b(ortran)31 b(Examples)20 b Fr(.)14
9081
9175
b(.)h(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
9082
9176
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
9083
g(.)g(.)50 b Fu(52)150 4364 y Ft(6)135 b(Installation)47
9177
g(.)g(.)50 b Fv(52)150 4364 y Fu(6)135 b(Installation)47
9084
9178
b(and)e(Customization)35 b Fa(.)19 b(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)
9085
f(.)h(.)78 b Ft(55)449 4501 y Fu(6.1)92 b(Installation)29
9086
b(on)h(Unix)19 b Fq(.)14 b(.)h(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g
9179
f(.)h(.)78 b Fu(55)449 4501 y Fv(6.1)92 b(Installation)29
9180
b(on)h(Unix)19 b Fr(.)14 b(.)h(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g
9087
9181
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
9088
g(.)g(.)g(.)g(.)g(.)g(.)49 b Fu(55)449 4611 y(6.2)92
9089
b(Installation)29 b(on)h(non-Unix)f(Systems)13 b Fq(.)i(.)g(.)g(.)g(.)g
9182
g(.)g(.)g(.)g(.)g(.)g(.)49 b Fv(55)449 4611 y(6.2)92
9183
b(Installation)29 b(on)h(non-Unix)f(Systems)13 b Fr(.)i(.)g(.)g(.)g(.)g
9090
9184
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)
9091
g(.)42 b Fu(56)449 4721 y(6.3)92 b(Installing)28 b(FFTW)j(in)e(b)s(oth)
9092
h(single)f(and)h(double)e(precision)14 b Fq(.)g(.)h(.)g(.)g(.)g(.)43
9093
b Fu(57)449 4830 y(6.4)92 b Fo(gcc)29 b Fu(and)h(P)m(en)m(tium)g(hac)m
9094
(ks)18 b Fq(.)e(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
9185
g(.)42 b Fv(56)449 4721 y(6.3)92 b(Installing)28 b(FFTW)j(in)e(b)s(oth)
9186
h(single)f(and)h(double)e(precision)14 b Fr(.)g(.)h(.)g(.)g(.)g(.)43
9187
b Fv(57)449 4830 y(6.4)92 b Fp(gcc)29 b Fv(and)h(P)m(en)m(tium)g(hac)m
9188
(ks)18 b Fr(.)e(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
9095
9189
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
9096
47 b Fu(57)449 4940 y(6.5)92 b(Customizing)29 b(the)h(timer)16
9097
b Fq(.)e(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)
9190
47 b Fv(57)449 4940 y(6.5)92 b(Customizing)29 b(the)h(timer)16
9191
b Fr(.)e(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)
9098
9192
g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)45
9099
b Fu(58)449 5049 y(6.6)92 b(Generating)31 b(y)m(our)f(o)m(wn)g(co)s(de)
9100
c Fq(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g
9193
b Fv(58)449 5049 y(6.6)92 b(Generating)31 b(y)m(our)f(o)m(wn)g(co)s(de)
9194
c Fr(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g
9101
9195
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)55
9102
b Fu(59)150 5289 y Ft(7)135 b(Ac)l(kno)l(wledgmen)l(ts)12
9196
b Fv(59)150 5289 y Fu(7)135 b(Ac)l(kno)l(wledgmen)l(ts)12
9103
9197
b Fa(.)20 b(.)g(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f
9104
(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)57 b Ft(61)p eop
9198
(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)57 b Fu(61)p eop end
9106
-3 72 bop 3674 -116 a Fu(iii)150 83 y Ft(8)135 b(License)45
9107
b(and)g(Cop)l(yrigh)l(t)35 b Fa(.)19 b(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h
9108
(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)79 b Ft(63)150
9109
353 y(9)135 b(Concept)45 b(Index)13 b Fa(.)20 b(.)f(.)g(.)h(.)f(.)h(.)f
9110
(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)
9111
f(.)g(.)h(.)58 b Ft(65)150 623 y(10)135 b(Library)45
9112
b(Index)35 b Fa(.)19 b(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h
9113
(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)80
9200
TeXDict begin -3 72 bop 3674 -116 a Fv(iii)150 83 y Fu(8)135
9201
b(License)45 b(and)g(Cop)l(yrigh)l(t)35 b Fa(.)19 b(.)h(.)f(.)h(.)f(.)h
9202
(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)79
9203
b Fu(63)150 353 y(9)135 b(Concept)45 b(Index)13 b Fa(.)20
9204
b(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h
9205
(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)58 b Fu(65)150
9206
623 y(10)135 b(Library)45 b(Index)35 b Fa(.)19 b(.)h(.)f(.)h(.)f(.)h(.)
9207
f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f
9208
(.)h(.)f(.)80 b Fu(67)p eop end
9210
TeXDict begin -4 73 bop 150 -116 a Fv(iv)3248 b(FFTW)p
9117
9214
userdict /end-hook known{end-hook}if