<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">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><br></div><div><br><div><div>On Jul 25, 2012, at 4:31 PM, Rupert Brooks wrote:</div><br class="Apple-interchange-newline"><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">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 class="im">
<div><br></div><div>Rupert</div><div><br></div><div>&lt;snipped&gt;</div></div></div></blockquote></div>
</blockquote></div><br></div></body></html>