<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
</head>
<body style="word-wrap:break-word; color:rgb(0,0,0); font-size:14px; font-family:Calibri,sans-serif">
<div>
<div>
<div>Brad,</div>
<div><br>
</div>
<div>I think that tr1 extensions have &nbsp;method for alignment:</div>
<div><br>
</div>
<div><a href="http://msdn.microsoft.com/en-us/library/bb983063.aspx">http://msdn.microsoft.com/en-us/library/bb983063.aspx</a></div>
<div><br>
</div>
<div><u>Hans</u></div>
<div>
<div>
<div>--&nbsp;</div>
<div>
<div>
<div style="font-family:Calibri; font-size:15px"><font face="Arial" size="2"><span style="font-size:10pt">Hans J. Johnson, Ph.D.</span></font></div>
<div style="font-family:Calibri; font-size:15px"><font face="Arial" size="2"><span style="font-size:10pt"><a href="mailto:hans-johnson@uiowa.edu">hans-johnson@uiowa.edu</a></span></font></div>
<div style="font-family:Calibri; font-size:15px"><font face="Arial" size="2"><span style="font-size:10pt">Assistant Professor of Psychiatry</span></font></div>
<div style="font-family:Calibri; font-size:15px"><span class="Apple-style-span" style="font-size:13px; font-family:Arial">University of Iowa Carver College of Medicine</span></div>
<div style="font-family:Calibri; font-size:15px"><font face="Arial" size="2"><span style="font-size:10pt"><span class="Apple-style-span" style="font-family:Calibri; font-size:15px">
<div><span class="Apple-style-span" style="font-size:13px; font-family:Arial">W278 GH, 200 Hawkins Drive</span></div>
</span></span></font></div>
<div style="font-family:Calibri; font-size:15px"><font face="Arial" size="2"><span style="font-size:10pt">Iowa City, Iowa 52242</span></font></div>
<div style="font-family:Calibri; font-size:15px"><font face="Arial" size="2"><span style="font-size:10pt">Phone:&nbsp; 319-353-8587</span></font></div>
</div>
</div>
</div>
</div>
</div>
</div>
<div><br>
</div>
<span id="OLK_SRC_BODY_SECTION">
<div style="font-family:Calibri; font-size:11pt; text-align:left; color:black; border-bottom:medium none; border-left:medium none; padding-bottom:0in; padding-left:0in; padding-right:0in; border-top:#b5c4df 1pt solid; border-right:medium none; padding-top:3pt">
<span style="font-weight:bold">From: </span>Bradley Lowekamp &lt;<a href="mailto:blowekamp@mail.nih.gov">blowekamp@mail.nih.gov</a>&gt;<br>
<span style="font-weight:bold">Date: </span>Thursday, July 26, 2012 10:53 AM<br>
<span style="font-weight:bold">To: </span>Rupert Brooks &lt;<a href="mailto:rupert.brooks@gmail.com">rupert.brooks@gmail.com</a>&gt;<br>
<span style="font-weight:bold">Cc: </span>ITK &lt;<a href="mailto:insight-developers@itk.org">insight-developers@itk.org</a>&gt;<br>
<span style="font-weight:bold">Subject: </span>Re: [Insight-developers] itk performance numbers<br>
</div>
<div><br>
</div>
<div>
<div style="word-wrap:break-word">Hello,
<div><br>
</div>
<div>Well I did get to it before you:</div>
<div><br>
</div>
<div><a href="http://review.source.kitware.com/#/c/6614/">http://review.source.kitware.com/#/c/6614/</a></div>
<div><br>
</div>
<div>I also uped the size of the image 100x &nbsp;in your test, here is the current performance on my system:</div>
<div><br>
</div>
<div>
<div>System: <a href="http://victoria.nlm.nih.gov">victoria.nlm.nih.gov</a></div>
<div>Processor: Intel(R) Xeon(R) CPU &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; X5670 &nbsp;@ 2.93GHz</div>
<div>&nbsp;Serial #:&nbsp;</div>
<div>&nbsp; &nbsp; Cache: 32768</div>
<div>&nbsp; &nbsp; Clock: 2794.27</div>
<div>&nbsp; &nbsp; Cores: 12 cpus x 24 Cores = 288</div>
<div>OSName: &nbsp; &nbsp; Mac OS X</div>
<div>&nbsp; Release: &nbsp;10.6.8</div>
<div>&nbsp; Version: &nbsp;10K549</div>
<div>&nbsp; Platform: x86_64</div>
<div>&nbsp; Operating System is 64 bit</div>
<div>ITK Version: 3.20.1</div>
<div>Virtual Memory: Total: 256 Available: 228</div>
<div>Physical Memory: Total:65536 Available: 58374</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Probe Name: &nbsp; &nbsp; &nbsp; &nbsp;Count &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Min &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Mean &nbsp; &nbsp; &nbsp; &nbsp; Stdev &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Max &nbsp; &nbsp; &nbsp; &nbsp;Total&nbsp;</div>
<div>&nbsp;MeanSquares_1_threads &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;20 &nbsp; &nbsp; &nbsp;0.344348 &nbsp; &nbsp; &nbsp;0.347567 &nbsp; &nbsp;0.00244733 &nbsp; &nbsp; &nbsp;0.352629 &nbsp; &nbsp; &nbsp; 6.95134</div>
<div>&nbsp;MeanSquares_2_threads &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;20 &nbsp; &nbsp; &nbsp;0.251223 &nbsp; &nbsp; &nbsp;0.300869 &nbsp; &nbsp; 0.0179305 &nbsp; &nbsp; &nbsp;0.321404 &nbsp; &nbsp; &nbsp; 6.01738</div>
<div>&nbsp;MeanSquares_4_threads &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;20 &nbsp; &nbsp; &nbsp;0.215516 &nbsp; &nbsp; &nbsp;0.348677 &nbsp; &nbsp; &nbsp;0.173645 &nbsp; &nbsp; &nbsp;0.678274 &nbsp; &nbsp; &nbsp; 6.97355</div>
<div>&nbsp;MeanSquares_8_threads &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;20 &nbsp; &nbsp; &nbsp;0.138184 &nbsp; &nbsp; &nbsp;0.182681 &nbsp; &nbsp; 0.0297812 &nbsp; &nbsp; &nbsp;0.237129 &nbsp; &nbsp; &nbsp; 3.65362</div>
<div>System: <a href="http://victoria.nlm.nih.gov">victoria.nlm.nih.gov</a></div>
<div>Processor:&nbsp;</div>
<div>&nbsp;Serial #:&nbsp;</div>
<div>&nbsp; &nbsp; Cache: 32768</div>
<div>&nbsp; &nbsp; Clock: 2930</div>
<div>&nbsp; &nbsp; Cores: 12 cpus x 24 Cores = 288</div>
<div>OSName: &nbsp; &nbsp; Mac OS X</div>
<div>&nbsp; Release: &nbsp;10.6.8</div>
<div>&nbsp; Version: &nbsp;10K549</div>
<div>&nbsp; Platform: x86_64</div>
<div>&nbsp; Operating System is 64 bit</div>
<div>ITK Version: 4.2.0</div>
<div>Virtual Memory: Total: 256 Available: 228</div>
<div>Physical Memory: Total:65536 Available: 58371</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Probe Name: &nbsp; &nbsp; &nbsp; &nbsp;Count &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Min &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Mean &nbsp; &nbsp; &nbsp; &nbsp; Stdev &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Max &nbsp; &nbsp; &nbsp; &nbsp;Total&nbsp;</div>
<div>&nbsp;MeanSquares_1_threads &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;20 &nbsp; &nbsp; &nbsp;0.382481 &nbsp; &nbsp; &nbsp;0.383342 &nbsp; &nbsp;0.00186954 &nbsp; &nbsp; &nbsp;0.391027 &nbsp; &nbsp; &nbsp; 7.66685</div>
<div>&nbsp;MeanSquares_2_threads &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;20 &nbsp; &nbsp; &nbsp;0.211908 &nbsp; &nbsp; &nbsp;0.335328 &nbsp; &nbsp; 0.0777408 &nbsp; &nbsp; &nbsp;0.435574 &nbsp; &nbsp; &nbsp; 6.70655</div>
<div>&nbsp;MeanSquares_4_threads &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;20 &nbsp; &nbsp; &nbsp;0.271531 &nbsp; &nbsp; &nbsp;0.315688 &nbsp; &nbsp; 0.0390751 &nbsp; &nbsp; &nbsp;0.385683 &nbsp; &nbsp; &nbsp; 6.31377</div>
<div>&nbsp;MeanSquares_8_threads &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;20 &nbsp; &nbsp; &nbsp;0.147544 &nbsp; &nbsp; &nbsp;0.192132 &nbsp; &nbsp; 0.0299427 &nbsp; &nbsp; &nbsp;0.240976 &nbsp; &nbsp; &nbsp; 3.84263</div>
</div>
<div><br>
</div>
<div><br>
</div>
<div>In the patch provided, it is implicitly done on assignment on a per-thread basis. What was most un-expected was when then allocation of the Jacobin was explicitly done out side the threaded part, the time when up by 50%! I presume that the sequential allocation,
 of the doubles in the master thread made the allocation sequentially, next to each other, and may be a more insidious form of false sharing. Below is the numbers from this run, notice the lack of speed up with more threads:</div>
<div><br>
</div>
<div>
<div>System: <a href="http://victoria.nlm.nih.gov">victoria.nlm.nih.gov</a></div>
<div>Processor:&nbsp;</div>
<div>&nbsp;Serial #:&nbsp;</div>
<div>&nbsp; &nbsp; Cache: 32768</div>
<div>&nbsp; &nbsp; Clock: 2930</div>
<div>&nbsp; &nbsp; Cores: 12 cpus x 24 Cores = 288</div>
<div>OSName: &nbsp; &nbsp; Mac OS X</div>
<div>&nbsp; Release: &nbsp;10.6.8</div>
<div>&nbsp; Version: &nbsp;10K549</div>
<div>&nbsp; Platform: x86_64</div>
<div>&nbsp; Operating System is 64 bit</div>
<div>ITK Version: 4.2.0</div>
<div>Virtual Memory: Total: 256 Available: 226</div>
<div>Physical Memory: Total:65536 Available: 57091</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Probe Name: &nbsp; &nbsp; &nbsp; &nbsp;Count &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Min &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Mean &nbsp; &nbsp; &nbsp; &nbsp; Stdev &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Max &nbsp; &nbsp; &nbsp; &nbsp;Total&nbsp;</div>
<div>&nbsp;MeanSquares_1_threads &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;20 &nbsp; &nbsp; &nbsp;0.403931 &nbsp; &nbsp; &nbsp; 0.40648 &nbsp; &nbsp;0.00213043 &nbsp; &nbsp; &nbsp; 0.41389 &nbsp; &nbsp; &nbsp; &nbsp;8.1296</div>
<div>&nbsp;MeanSquares_2_threads &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;20 &nbsp; &nbsp; &nbsp;0.243789 &nbsp; &nbsp; &nbsp;0.367603 &nbsp; &nbsp; 0.0894637 &nbsp; &nbsp; &nbsp; 0.65006 &nbsp; &nbsp; &nbsp; 7.35206</div>
<div>&nbsp;MeanSquares_4_threads &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;20 &nbsp; &nbsp; &nbsp;0.281336 &nbsp; &nbsp; &nbsp;0.354749 &nbsp; &nbsp; 0.0431082 &nbsp; &nbsp; &nbsp;0.440161 &nbsp; &nbsp; &nbsp; 7.09497</div>
<div>&nbsp;MeanSquares_8_threads &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;20 &nbsp; &nbsp; &nbsp; 0.24615 &nbsp; &nbsp; &nbsp;0.301576 &nbsp; &nbsp; 0.0552998 &nbsp; &nbsp; &nbsp;0.446528 &nbsp; &nbsp; &nbsp; 6.03151</div>
</div>
<div><br>
</div>
<div><br>
</div>
<div>Brad</div>
<div><br>
</div>
<div><br>
<div>
<div>On Jul 26, 2012, at 8:56 AM, Rupert Brooks wrote:</div>
<br class="Apple-interchange-newline">
<blockquote type="cite">Brad,
<div><br>
</div>
<div>The false sharing issue is a good point - however, i dont think this is the cause of the performance degradation. &nbsp;This part of the class (m_Threader, etc) has not changed since 3.20. &nbsp;(I used the optimized metrics in my 3.20 builds, so its in Review/itkOptMeanSquares....)
 It also does not explain the performance drop in single threaded mode.</div>
<div><br>
</div>
<div>Testing will tell... &nbsp;Seems like a Friday afternoon project to me, unless someone else gets there first.</div>
<div><br>
</div>
<div>Rupert</div>
<div><br clear="all">
--------------------------------------------------------------<br>
Rupert Brooks<br>
<a href="mailto:rupert.brooks@gmail.com">rupert.brooks@gmail.com</a><br>
<br>
<br>
<br>
<div class="gmail_quote">On Wed, Jul 25, 2012 at 5:18 PM, Bradley Lowekamp <span dir="ltr">
&lt;<a href="mailto:blowekamp@mail.nih.gov" target="_blank">blowekamp@mail.nih.gov</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex; border-left:1px #ccc solid; padding-left:1ex">
<div style="word-wrap:break-word">Hello,
<div><br>
</div>
<div>Continuing to glance at the class.... I also see the following member variables for the MeanSquares class:</div>
<div><br>
</div>
<div>
<div>&nbsp; MeasureType * &nbsp; m_ThreaderMSE;</div>
<div>&nbsp; DerivativeType *m_ThreaderMSEDerivatives;</div>
</div>
<div><br>
</div>
<div>Where these are index by the thread ID and access simultaneously across the threads causes the potential for False Sharing, which can be a MAJOR problem with threaded algorithms.</div>
<div><br>
</div>
<div>I would think a good solution would be to create a per-thread data structure consisting of the Jacobin, MeasureType, and DerivativeType, plus padding to prevent false sharing, or equivalently assigning max data alignment to the structure.</div>
<div><br>
</div>
<div>Rupert, Would like to take a stab at this fix?</div>
<div><br>
</div>
<div>Brad</div>
<div>
<div class="h5">
<div><br>
</div>
<div><br>
<div>
<div>On Jul 25, 2012, at 4:31 PM, Rupert Brooks wrote:</div>
<br>
<blockquote type="cite">Sorry if this repeats - i just got a bounce from Insight Developers, so im trimming the message and resending....<br clear="all">
--------------------------------------------------------------<br>
Rupert Brooks<br>
<a href="mailto:rupert.brooks@gmail.com" target="_blank">rupert.brooks@gmail.com</a><br>
<br>
<br>
<br>
<div class="gmail_quote">On Wed, Jul 25, 2012 at 4:12 PM, Rupert Brooks <span dir="ltr">
&lt;<a href="mailto:rupert.brooks@gmail.com" target="_blank">rupert.brooks@gmail.com</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex; border-left:1px #ccc solid; padding-left:1ex">
Aha. &nbsp;Heres around line 183 of itkTranslationTransform.
<div>
<div><br>
</div>
<div>// Compute the Jacobian in one position</div>
<div>template &lt;class TScalarType, unsigned int NDimensions&gt;</div>
<div>void</div>
<div>TranslationTransform&lt;TScalarType, NDimensions&gt;::ComputeJacobianWithRespectToParameters(</div>
<div>&nbsp; const InputPointType &amp;,</div>
<div>&nbsp; JacobianType &amp; jacobian) const</div>
<div>{</div>
<div>&nbsp; // the Jacobian is constant for this transform, and it has already been</div>
<div>&nbsp; // initialized in the constructor, so we just need to return it here.</div>
<div>&nbsp; jacobian = this-&gt;m_IdentityJacobian;</div>
<div>&nbsp; return;</div>
<div>}</div>
<div><br>
</div>
<div>Thats probably the culprit, although the root cause may be the reallocating of the jacobian every time through the loop.</div>
<div>
<div><br>
</div>
<div>Rupert</div>
<div><br>
</div>
<div>&lt;snipped&gt;</div>
</div>
</div>
</blockquote>
</div>
</blockquote>
</div>
<br>
</div>
</div>
</div>
</div>
</blockquote>
</div>
<br>
</div>
</blockquote>
</div>
<br>
<div>
<div style="word-wrap:break-word; font-size:12px">
<p style="margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px"><font face="Helvetica" size="3" style="font:normal normal normal 12px/normal Helvetica">========================================================</font></p>
<p style="margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px"><font face="Helvetica" size="3" style="font:normal normal normal 12px/normal Helvetica">Bradley Lowekamp<span class="Apple-converted-space">&nbsp;</span><span class="Apple-converted-space">&nbsp;</span></font></p>
<p style="margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px"><font face="Helvetica" size="3" style="font:normal normal normal 12px/normal Helvetica">Medical Science and Computing for</font></p>
<p style="margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px"><font face="Helvetica" size="3" style="font:normal normal normal 12px/normal Helvetica">Office of High Performance Computing and Communications</font></p>
<p style="margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px"><font face="Helvetica" size="3" style="font:normal normal normal 12px/normal Helvetica">National Library of Medicine<span class="Apple-converted-space">&nbsp;</span></font></p>
<p style="margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px"><font face="Helvetica" size="3" style="font:normal normal normal 12px/normal Helvetica"><a href="mailto:blowekamp@mail.nih.gov">blowekamp@mail.nih.gov</a></font></p>
<br class="Apple-interchange-newline">
</div>
<br class="Apple-interchange-newline">
</div>
<br>
</div>
</div>
</div>
</span><br>
<br>
<hr>
Notice: This UI Health Care e-mail (including attachments) is covered by the Electronic Communications Privacy Act, 18 U.S.C. 2510-2521, is confidential and may be legally privileged.&nbsp; If you are not the intended recipient, you are hereby notified that any
 retention, dissemination, distribution, or copying of this communication is strictly prohibited.&nbsp; Please reply to the sender that you have received the message in error, then delete it.&nbsp; Thank you.
<hr>
</body>
</html>