Re: Compile Fourier (2)
- To: mathgroup at smc.vnet.net
- Subject: [mg64908] Re: Compile Fourier (2)
- From: Peter Pein <petsie at dordos.net>
- Date: Tue, 7 Mar 2006 06:12:00 -0500 (EST)
- References: <duh2s0$5qg$1@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
Alberto Verga schrieb: > (Please, forget my last question, the answer is in the third argument of > Compile; but...) > Someone could explain why the compiled version is slower than the uncompiled > one in the following example? > > (* Compiled *) > cf = Compile[{{m, _Complex, 2}}, Module[{a, b = {m}}, a = m; > Do[a = a + Fourier[Re[InverseFourier[m]]]; AppendTo[b, a];, {100}]; > Return[Re[b]]], {{Fourier[_], _Complex, > 2}, {InverseFourier[_], _Complex, 2}}] > > mm = cf[Table[N[i - j], {i, 64}, {j, 64}]]; // Timing > {2.654 Second, Null} > > (*Uncompiled*) > > f[m_] := Module[{a, b = {m}}, a = m; > Do[a = a + Fourier[Re[InverseFourier[m]]]; AppendTo[b, a];, {100}]; > Return[Re[b]]]; > > mmf = f[Table[N[i - j], {i, 64}, {j, 64}]]; // Timing > {0.35 Second, Null} > > Thanks, > > Alberto Verga > Alberto.Verga at irphe.univ-mrs.fr > > > > Hi Alberto, I've overlooked this second posting when answering the first - sorry. I can't tell you, why the uncompiled code is faster than the compiled version, but if you want to speed it up... f[m_] := Module[{a, b = {m}}, a = m; Do[a = a + Fourier[Re[InverseFourier[m]]]; AppendTo[b, a]; , {100}]; Return[Re[b]]]; Timing[mmf = f[Table[N[i - j], {i, 64}, {j, 64}]]; ] --> {0.156*Second, Null} and because Fourier[Re[InverseFourier[m]]] is a constant matrix, Timing[mmf2 = Fourier[Re[InverseFourier[t = Table[N[i - j], {i, 64}, {j, 64}]]]]; mmf2 = Re[(t + #1*mmf2 & ) /@ Range[0, 100]]; ] --> {0.047*Second, Null} mmf == mmf2 --> True Hope this helps a bit, Peter