<html><head><meta http-equiv="Content-Type" content="text/html charset=windows-1252"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">Simon,<div><br></div><div>Thanks for trying out the patch. Sorry for the parse error blunder.</div><div><br></div><div>Regarding the sse2 not being enable by default. I would view that as an issue with FFTW. Why do they not enable it by default? Every x86_64 processor has sse2 instructions. In general, determining optimal compilation flags for different platforms, and architectures in not done by defaults in ITK. I think it is just too big of a rabbit hole to open up.</div><div><br></div><div>Brad&nbsp;</div><div><br><div><div>On Apr 14, 2013, at 8:15 AM, Simon Rit &lt;<a href="mailto:simon.rit@creatis.insa-lyon.fr">simon.rit@creatis.insa-lyon.fr</a>&gt; wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><meta http-equiv="Content-Type" content="text/html; charset=Windows-1252"><div dir="ltr"><div><div><div>Hi,<br>Thanks! A few things. First, going from the latest release to HEAD, I had a compilation issue:<br><font size="1">/home/<span style="" class="">srit</span>/<span style="" class="">src</span>/itk4/<span style="" class="">itk</span>/Modules/Filtering/<span style="" class="">FFT</span>/include/<span style="" class="">itkFFTWHalfHermitianToRealInve</span><span style="" class="">rseFFTImageFilter</span>.<span style="" class="">hxx</span>:103:5: &nbsp; required from ‘void <span style="" class="">itk</span>::<span style="" class="">FFTWHalfHermitianToRealInverse</span><span style="" class="">FFTImageFilter</span>&lt;<span style="" class="">TInputImage</span>, <span style="" class="">TOutputImage</span>&gt;::<span style="" class="">BeforeThreadedGenerateData</span>() [with <span style="" class="">TInputImage</span> = <span style="" class="">itk</span>::Image&lt;std::complex&lt;double&gt;, 3u&gt;; <span style="" class="">TOutputImage</span> = <span style="" class="">itk</span>::Image&lt;double, 3u&gt;]’<br>



/home/<span style="" class="">srit</span>/<span style="" class="">src</span>/<span style="" class="">rtk</span>/<span style="" class="">rtk</span>/testing/<span style="" class="">rtkdisplaceddetectortest</span>.<span style="" class="">cxx</span>:203:1: &nbsp; required from here<br>

/<span style="" class="">usr</span>/lib/<span style="" class="">gcc</span>/x86_64-<span style="" class="">redhat</span>-<span style="" class="">linux</span>/4.7.2/../../../../include/c++/4.7.2/bits/<span style="" class="">stl</span>_<span style="" class="">algobase</span>.h:329:8: <span style="" class="">erreur</span>: incompatible types in assignment of ‘const std::complex&lt;double&gt;’ to ‘double [2]’<br>



</font><br>I fixed it with a pointer cast<span></span><span></span><br><font size="1">diff --git a/Modules/Filtering/<span style="" class="">FFT</span>/include/<span style="" class="">itkFFTWHalfHermitianToRealInve</span><span style="" class="">rseFFTImageFilter</span>.<span style="" class="">hxx</span> b/Modules/Filtering/<span style="" class="">FFT</span>/include/<span style="" class="">itkFFTWHalfHermitianToRealInve</span><span style="" class="">rseFFTImageFilter</span>.<span style="" class="">hxx</span><br>



index 9338cb1..806d803 100644<br>--- a/Modules/Filtering/<span style="" class="">FFT</span>/include/<span style="" class="">itkFFTWHalfHermitianToRealInve</span><span style="" class="">rseFFTImageFilter</span>.<span style="" class="">hxx</span><br>

+++ b/Modules/Filtering/<span style="" class="">FFT</span>/include/<span style="" class="">itkFFTWHalfHermitianToRealInve</span><span style="" class="">rseFFTImageFilter</span>.<span style="" class="">hxx</span><br>@@ -100,7 +100,7 @@ <span style="" class="">FFTWHalfHermitianToRealInverse</span><span style="" class="">FFTImageFilter</span>&lt; <span style="" class="">TInputImage</span>, <span style="" class="">TOutputImage</span> &gt;<br>



&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;!m_<span style="" class="">CanUseDestructiveAlgorithm</span> );<br>&nbsp; &nbsp;if( !m_<span style="" class="">CanUseDestructiveAlgorithm</span> )<br>&nbsp; &nbsp; &nbsp;{<br>- &nbsp; &nbsp;<span style="" class="">itk</span>::algorithm::copy_n(<span style="" class="">inputPtr</span>-&gt;<span style="" class="">GetBufferPointer</span>(), <span style="" class="">totalInputSize</span>, &nbsp;in);<br>

+ &nbsp; &nbsp;<span style="" class="">itk</span>::algorithm::copy_n((<span style="" class="">typename</span> <span style="" class="">FFTWProxyType</span>::<span style="" class="">ComplexType</span>*)<span style="" class="">inputPtr</span>-&gt;<span style="" class="">GetBufferPointer</span>(), <span style="" class="">totalInputSize</span>, &nbsp;in);<br>



&nbsp; &nbsp; &nbsp;}<br>&nbsp; &nbsp;<span style="" class="">FFTWProxyType</span>::Execute( plan );<br></font><br>Second, there is a missing parenthesis in the patch:<br><font size="1">/home/<span style="" class="">srit</span>/<span style="" class="">src</span>/itk4/lin64-<span style="" class="">dg</span>/<span style="" class="">fftwd</span>_configure_step.<span style="" class="">cmake</span>:36:<br>

Parse error. &nbsp;Function missing ending ")". &nbsp;End of file reached.<br>

<br></font></div><font>Finally, <font>the patch <font><span style="" class="">propa</span><font>gates -O3 but d<font><span style="" class="">oes</span></font> not fully fix the speed issue. A<font><span style="" class="">fter</span> a bit more digging, it turns out that sse2 instructions are not automatically ac<font><span style="" class="">tivated</span><font>. One must <font>set <span style="" class="">FFTW</span>_OPTIMIZATION_CONFIGURATION to "--enable-sse2". <span style="" class="">Shoul</span><font><span style="" class="">dn't</span> this be done automatically? <font>Setting it fixed the compilation time.</font><br>



</font></font></font></font></font></font></font></font></font></div><font><font><font><font><font><font><font><font><font><font>Thanks a<font>gain for your help<font>,<br></font></font></font></font></font></font></font></font></font></font></font></font></div>


<font>
<font><font><font><font><font><font><font><font><font><font><font><font><font>Simon</font><br></font></font><div class="gmail_extra"><font>
</font><br><br><div class="gmail_quote">On Fri, Apr 12, 2013 at 8:27 PM, Bradley <span style="" class="">Lowekamp</span> <span dir="ltr">&lt;<a href="mailto:blowekamp@mail.nih.gov" target="_blank"><span style="" class="">blowekamp</span>@mail.<span style="" class="">nih</span>.gov</a>&gt;</span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

Hello,<br>
<br>
I have placed a patch on gerrit for review:<br>
<br>
<a href="http://review.source.kitware.com/#/c/10848/" target="_blank">http://review.source.kitware.com/#/c/10848/</a><br>
<br>
Please let us know if works for you.<br>
<br>
Brad<br>
<div><br>
On Apr 12, 2013, at 12:15 PM, Bradley Lowekamp &lt;<a href="mailto:blowekamp@mail.nih.gov" target="_blank">blowekamp@mail.nih.gov</a>&gt; wrote:<br>
<br>
&gt; Looking at the cmake build scripts:<br>
&gt;<br>
&gt; <a href="https://github.com/Kitware/ITK/blob/master/CMake/itkExternal_FFTW.cmake#L44" target="_blank">https://github.com/Kitware/ITK/blob/master/CMake/itkExternal_FFTW.cmake#L44</a><br>
&gt;<br>
&gt; It looks like CMAKE_C_FLAGS_RELEASE is not getting passed.<br>
&gt;<br>
&gt; I'll see if I can take this on after lunch.<br>
&gt;<br>
&gt; Brad<br>
&gt;<br>
&gt; On Apr 12, 2013, at 11:30 AM, Simon Rit &lt;<a href="mailto:simon.rit@creatis.insa-lyon.fr" target="_blank">simon.rit@creatis.insa-lyon.fr</a>&gt; wrote:<br>
&gt;<br>
&gt;&gt; I'm not sure it's the reason: I don't expect a two fold improvement<br>
&gt;&gt; and the system has the same version installed, 3.3.2. Are we sure that<br>
&gt;&gt; the release flags are passed to FFTW? When I looked at the compilation<br>
&gt;&gt; log, I don't see -O3, here is an excerpt:<br>
&gt;&gt;<br>
&gt;&gt; /bin/sh ../libtool --tag=CC &nbsp; --mode=compile /usr/bin/cc -std=gnu99<br>
&gt;&gt; -DHAVE_CONFIG_H -I.<br>
&gt;&gt; -I/home/srit/src/itk4/lin64-dg/fftwd/src/fftwd/kernel -I..<br>
&gt;&gt; -I/home/srit/src/itk4/lin64-dg/fftwd/src/fftwd/simd<br>
&gt;&gt; -Wno-uninitialized -Wno-unused-parameter -Wall -Wcast-align<br>
&gt;&gt; -Wdisabled-optimization -Wextra -Wformat=2 -Winvalid-pch<br>
&gt;&gt; -Wno-format-nonliteral -Wpointer-arith -Wshadow -Wunused<br>
&gt;&gt; -Wwrite-strings -funit-at-a-time -Wno-strict-overflow &nbsp;-MT<br>
&gt;&gt; cpy2d-pair.lo -MD -MP -MF .deps/cpy2d-pair.Tpo -c -o cpy2d-pair.lo<br>
&gt;&gt; /home/srit/src/itk4/lin64-dg/fftwd/src/fftwd/kernel/cpy2d-pair.c<br>
&gt;&gt; libtool: compile: &nbsp;/usr/bin/cc -std=gnu99 -DHAVE_CONFIG_H -I.<br>
&gt;&gt; -I/home/srit/src/itk4/lin64-dg/fftwd/src/fftwd/kernel -I..<br>
&gt;&gt; -I/home/srit/src/itk4/lin64-dg/fftwd/src/fftwd/simd -Wno-uninitialized<br>
&gt;&gt; -Wno-unused-parameter -Wall -Wcast-align -Wdisabled-optimization<br>
&gt;&gt; -Wextra -Wformat=2 -Winvalid-pch -Wno-format-nonliteral<br>
&gt;&gt; -Wpointer-arith -Wshadow -Wunused -Wwrite-strings -funit-at-a-time<br>
&gt;&gt; -Wno-strict-overflow -MT cpy2d-pair.lo -MD -MP -MF<br>
&gt;&gt; .deps/cpy2d-pair.Tpo -c<br>
&gt;&gt; /home/srit/src/itk4/lin64-dg/fftwd/src/fftwd/kernel/cpy2d-pair.c -o<br>
&gt;&gt; cpy2d-pair.o<br>
&gt;&gt; mv -f .deps/cpy2d-pair.Tpo .deps/cpy2d-pair.Plo<br>
&gt;&gt; /bin/sh ../libtool --tag=CC &nbsp; --mode=compile /usr/bin/cc -std=gnu99<br>
&gt;&gt; -DHAVE_CONFIG_H -I.<br>
&gt;&gt; -I/home/srit/src/itk4/lin64-dg/fftwd/src/fftwd/kernel -I..<br>
&gt;&gt; -I/home/srit/src/itk4/lin64-dg/fftwd/src/fftwd/simd<br>
&gt;&gt; -Wno-uninitialized -Wno-unused-parameter -Wall -Wcast-align<br>
&gt;&gt; -Wdisabled-optimization -Wextra -Wformat=2 -Winvalid-pch<br>
&gt;&gt; -Wno-format-nonliteral -Wpointer-arith -Wshadow -Wunused<br>
&gt;&gt; -Wwrite-strings -funit-at-a-time -Wno-strict-overflow &nbsp;-MT cpy2d.lo<br>
&gt;&gt; -MD -MP -MF .deps/cpy2d.Tpo -c -o cpy2d.lo<br>
&gt;&gt; /home/srit/src/itk4/lin64-dg/fftwd/src/fftwd/kernel/cpy2d.c<br>
&gt;&gt; libtool: compile: &nbsp;/usr/bin/cc -std=gnu99 -DHAVE_CONFIG_H -I.<br>
&gt;&gt; -I/home/srit/src/itk4/lin64-dg/fftwd/src/fftwd/kernel -I..<br>
&gt;&gt; -I/home/srit/src/itk4/lin64-dg/fftwd/src/fftwd/simd -Wno-uninitialized<br>
&gt;&gt; -Wno-unused-parameter -Wall -Wcast-align -Wdisabled-optimization<br>
&gt;&gt; -Wextra -Wformat=2 -Winvalid-pch -Wno-format-nonliteral<br>
&gt;&gt; -Wpointer-arith -Wshadow -Wunused -Wwrite-strings -funit-at-a-time<br>
&gt;&gt; -Wno-strict-overflow -MT cpy2d.lo -MD -MP -MF .deps/cpy2d.Tpo -c<br>
&gt;&gt; /home/srit/src/itk4/lin64-dg/fftwd/src/fftwd/kernel/cpy2d.c -o cpy2d.o<br>
&gt;&gt; mv -f .deps/cpy2d.Tpo .deps/cpy2d.Plo<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; On Fri, Apr 12, 2013 at 5:21 PM, Bill Lorensen &lt;<a href="mailto:bill.lorensen@gmail.com" target="_blank">bill.lorensen@gmail.com</a>&gt; wrote:<br>
&gt;&gt;&gt; Looks like the fftw folks have made some efficiency improvements.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; On Fri, Apr 12, 2013 at 11:18 AM, Simon Rit &lt;<a href="mailto:simon.rit@creatis.insa-lyon.fr" target="_blank">simon.rit@creatis.insa-lyon.fr</a>&gt;<br>
&gt;&gt;&gt; wrote:<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; I should have mentioned it: yes, it is!<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; On Fri, Apr 12, 2013 at 5:16 PM, Bill Lorensen &lt;<a href="mailto:bill.lorensen@gmail.com" target="_blank">bill.lorensen@gmail.com</a>&gt;<br>
&gt;&gt;&gt;&gt; wrote:<br>
&gt;&gt;&gt;&gt;&gt; Is your ITK built Release?<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; On Fri, Apr 12, 2013 at 11:13 AM, Simon Rit<br>
&gt;&gt;&gt;&gt;&gt; &lt;<a href="mailto:simon.rit@creatis.insa-lyon.fr" target="_blank">simon.rit@creatis.insa-lyon.fr</a>&gt;<br>
&gt;&gt;&gt;&gt;&gt; wrote:<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt; Hi,<br>
&gt;&gt;&gt;&gt;&gt;&gt; We have recently observed on a fedora distribution that FFTW is two<br>
&gt;&gt;&gt;&gt;&gt;&gt; times slower when one uses the ITK compilation<br>
&gt;&gt;&gt;&gt;&gt;&gt; (USE_SYSTEM_FFTW:BOOL=OFF, default) than when one uses the system fftw<br>
&gt;&gt;&gt;&gt;&gt;&gt; (USE_SYSTEM_FFTW:BOOL=ON).<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt; We have looked for an explanation in the flags (the Fedora flags are<br>
&gt;&gt;&gt;&gt;&gt;&gt; available here<br>
&gt;&gt;&gt;&gt;&gt;&gt; <a href="http://pkgs.fedoraproject.org/cgit/fftw.git/tree/fftw.spec" target="_blank">http://pkgs.fedoraproject.org/cgit/fftw.git/tree/fftw.spec</a>)<br>
&gt;&gt;&gt;&gt;&gt;&gt; but we have not managed to figure it out. Would someone happen to have<br>
&gt;&gt;&gt;&gt;&gt;&gt; an explanation and solution?<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt; Thanks in advance,<br>
&gt;&gt;&gt;&gt;&gt;&gt; Simon<br>
&gt;&gt;&gt;&gt;&gt;&gt; _____________________________________<br>
&gt;&gt;&gt;&gt;&gt;&gt; Powered by <a href="http://www.kitware.com/" target="_blank">www.kitware.com</a><br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt; Visit other Kitware open-source projects at<br>
&gt;&gt;&gt;&gt;&gt;&gt; <a href="http://www.kitware.com/opensource/opensource.html" target="_blank">http://www.kitware.com/opensource/opensource.html</a><br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt; Kitware offers ITK Training Courses, for more information visit:<br>
&gt;&gt;&gt;&gt;&gt;&gt; <a href="http://www.kitware.com/products/protraining.php" target="_blank">http://www.kitware.com/products/protraining.php</a><br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt; Please keep messages on-topic and check the ITK FAQ at:<br>
&gt;&gt;&gt;&gt;&gt;&gt; <a href="http://www.itk.org/Wiki/ITK_FAQ" target="_blank">http://www.itk.org/Wiki/ITK_FAQ</a><br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt; Follow this link to subscribe/unsubscribe:<br>
&gt;&gt;&gt;&gt;&gt;&gt; <a href="http://www.itk.org/mailman/listinfo/insight-users" target="_blank">http://www.itk.org/mailman/listinfo/insight-users</a><br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; --<br>
&gt;&gt;&gt;&gt;&gt; Unpaid intern in BillsBasement at noware dot com<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; --<br>
&gt;&gt;&gt; Unpaid intern in BillsBasement at noware dot com<br>
&gt;&gt; _____________________________________<br>
&gt;&gt; Powered by <a href="http://www.kitware.com/" target="_blank">www.kitware.com</a><br>
&gt;&gt;<br>
&gt;&gt; Visit other Kitware open-source projects at<br>
&gt;&gt; <a href="http://www.kitware.com/opensource/opensource.html" target="_blank">http://www.kitware.com/opensource/opensource.html</a><br>
&gt;&gt;<br>
&gt;&gt; Kitware offers ITK Training Courses, for more information visit:<br>
&gt;&gt; <a href="http://www.kitware.com/products/protraining.php" target="_blank">http://www.kitware.com/products/protraining.php</a><br>
&gt;&gt;<br>
&gt;&gt; Please keep messages on-topic and check the ITK FAQ at:<br>
&gt;&gt; <a href="http://www.itk.org/Wiki/ITK_FAQ" target="_blank">http://www.itk.org/Wiki/ITK_FAQ</a><br>
&gt;&gt;<br>
&gt;&gt; Follow this link to subscribe/unsubscribe:<br>
&gt;&gt; <a href="http://www.itk.org/mailman/listinfo/insight-users" target="_blank">http://www.itk.org/mailman/listinfo/insight-users</a><br>
&gt;<br>
&gt; _____________________________________<br>
&gt; Powered by <a href="http://www.kitware.com/" target="_blank">www.kitware.com</a><br>
&gt;<br>
&gt; Visit other Kitware open-source projects at<br>
&gt; <a href="http://www.kitware.com/opensource/opensource.html" target="_blank">http://www.kitware.com/opensource/opensource.html</a><br>
&gt;<br>
&gt; Kitware offers ITK Training Courses, for more information visit:<br>
&gt; <a href="http://www.kitware.com/products/protraining.php" target="_blank">http://www.kitware.com/products/protraining.php</a><br>
&gt;<br>
&gt; Please keep messages on-topic and check the ITK FAQ at:<br>
&gt; <a href="http://www.itk.org/Wiki/ITK_FAQ" target="_blank">http://www.itk.org/Wiki/ITK_FAQ</a><br>
&gt;<br>
&gt; Follow this link to subscribe/unsubscribe:<br>
&gt; <a href="http://www.itk.org/mailman/listinfo/insight-users" target="_blank">http://www.itk.org/mailman/listinfo/insight-users</a><br>
<br>
_____________________________________<br>
Powered by <a href="http://www.kitware.com/" target="_blank">www.kitware.com</a><br>
<br>
Visit other Kitware open-source projects at<br>
<a href="http://www.kitware.com/opensource/opensource.html" target="_blank">http://www.kitware.com/opensource/opensource.html</a><br>
<br>
Kitware offers ITK Training Courses, for more information visit:<br>
<a href="http://www.kitware.com/products/protraining.php" target="_blank">http://www.kitware.com/products/protraining.php</a><br>
<br>
Please keep messages on-topic and check the ITK FAQ at:<br>
<a href="http://www.itk.org/Wiki/ITK_FAQ" target="_blank">http://www.itk.org/Wiki/ITK_FAQ</a><br>
<br>
Follow this link to subscribe/unsubscribe:<br>
<a href="http://www.itk.org/mailman/listinfo/insight-users" target="_blank">http://www.itk.org/mailman/listinfo/insight-users</a><br>
</div></blockquote></div><br></div></font></font></font></font></font></font></font></font></font></font></font></div>
</blockquote></div><br></div></body></html>