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
