Ertugrul:<br><br>I might be missing something in translation, but if I understand Takayuki&#39;s message&#39;s intent, everything needs to be calculated because the C-based FFTW library is called (eventually). Laziness doesn&#39;t really have an impact.<br>
<br>The choice of underlying data structure and whether FFTW wisdom is used clearly has a significant impact.<br><br>FFTW and Intel&#39;s MKL libraries are the acknowledged &quot;state of the art&quot; libraries for performing discrete Fourier transforms. I&#39;m not sure there&#39;s anything better or faster for CPU implementations (I know there&#39;s a O(1) implementation for map-reduce systems and NVIDIA&#39;s CUDA-FFT. Note that the map-reduce approach has a preprocessing step that isn&#39;t O(1).) Interesting to note that much of the code for FFTW was initially generated using OCaml to find optimal versions of code for particular problem sizes.<br>
<br><br>-scooter<br><br><div class="gmail_quote">On Sun, Aug 5, 2012 at 6:37 PM, Ertugrul Söylemez <span dir="ltr">&lt;<a href="mailto:es@ertes.de" target="_blank">es@ertes.de</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div class="im">Takayuki Muranushi &lt;<a href="mailto:muranushi@gmail.com">muranushi@gmail.com</a>&gt; wrote:<br>
<br>
&gt; * vector-fftw with wisdom was more than 1/2 times faster than fftw in<br>
&gt; C with wisdom (and with communication overhead.)<br>
&gt; * vector-fftw without wisdom was significantly _faster_ than fftw in C<br>
&gt; without wisdom. I wonder why.<br>
&gt; * vector-fftw over vector was faster than fft over CArray.<br>
&gt; * any library that doesn&#39;t use fftw is much slower than those that<br>
&gt; does.<br>
<br>
</div>I have no experience with FFTW, but in general a result like this often<br>
means that you may not have actually calculated the values themselves.<br>
One easy way to ensure this is to print out the whole result.  If you<br>
feel like printing takes too much CPU time for comparison, you need to<br>
force deeply like with deepseq.<br>
<br>
Notably Data.Vector is a lazy data structure.  If you force the vector<br>
itself, you are not forcing the individual values.  For FFT I would<br>
assume that the length of the resulting vector does not depend on any<br>
values.<br>
<br>
<br>
Greets,<br>
Ertugrul<br>
<span class="HOEnZb"><font color="#888888"><br>
--<br>
Not to be or to be and (not to be or to be and (not to be or to be and<br>
(not to be or to be and ... that is the list monad.<br>
</font></span><br>_______________________________________________<br>
Haskell-Cafe mailing list<br>
<a href="mailto:Haskell-Cafe@haskell.org">Haskell-Cafe@haskell.org</a><br>
<a href="http://www.haskell.org/mailman/listinfo/haskell-cafe" target="_blank">http://www.haskell.org/mailman/listinfo/haskell-cafe</a><br>
<br></blockquote></div><br>