Brad,
 
The false sharing possibility is very interesting. I'll look to see if
this may be effecting performance in the v4 metrics, where I provide an
array of pre-allocated, per-thread Jacobian objects to avoid
instantiation of the Jacobian object at each point.
 
-M 


  _____  

From: [email protected]
[mailto:[email protected]] On Behalf Of Bradley
Lowekamp
Sent: Wednesday, July 25, 2012 5:19 PM
To: Rupert Brooks
Cc: Insight Developers
Subject: Re: [Insight-developers] itk performance numbers


Hello, 

Continuing to glance at the class.... I also see the following member
variables for the MeanSquares class:

  MeasureType *   m_ThreaderMSE;
  DerivativeType *m_ThreaderMSEDerivatives;

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.

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.

Rupert, Would like to take a stab at this fix?

Brad


On Jul 25, 2012, at 4:31 PM, Rupert Brooks wrote:


Sorry if this repeats - i just got a bounce from Insight Developers, so
im trimming the message and resending....
--------------------------------------------------------------
Rupert Brooks
[email protected]




On Wed, Jul 25, 2012 at 4:12 PM, Rupert Brooks <[email protected]>
wrote:


Aha.  Heres around line 183 of itkTranslationTransform. 

// Compute the Jacobian in one position
template <class TScalarType, unsigned int NDimensions>
void
TranslationTransform<TScalarType,
NDimensions>::ComputeJacobianWithRespectToParameters(
  const InputPointType &,
  JacobianType & jacobian) const
{
  // the Jacobian is constant for this transform, and it has already
been
  // initialized in the constructor, so we just need to return it here.
  jacobian = this->m_IdentityJacobian;
  return;
}

Thats probably the culprit, although the root cause may be the
reallocating of the jacobian every time through the loop.

Rupert

<snipped>


_______________________________________________
Powered by www.kitware.com

Visit other Kitware open-source projects at
http://www.kitware.com/opensource/opensource.html

Kitware offers ITK Training Courses, for more information visit:
http://kitware.com/products/protraining.php

Please keep messages on-topic and check the ITK FAQ at:
http://www.itk.org/Wiki/ITK_FAQ

Follow this link to subscribe/unsubscribe:
http://www.itk.org/mailman/listinfo/insight-developers

Reply via email to