[Insight-developers] thread safety (or lack) of transforms

Luis Ibanez luis.ibanez at kitware.com
Wed Aug 13 18:23:21 EDT 2008


Stephen,


                You are right.

     The Transforms are not thread-safe.


Rupert:

   The way to use the Transforms in a multi-threaded
   environment is to clone them before spawning the
   threads.


   You may want to take a look at the file:

           Insight/Code/Review/
              itkOptImageToImageMetric.txx

    lines 250-264, in the MultiThreadingInitialize()
    method.

    It shows how to clone N transforms that are then
    passed to N threads.

    This is the method we are using now for the
    multi-threaded metrics.



   Please let us know if you run into any problems
   while using this method.


      Thanks



         Luis



-------------------------
Stephen Aylward wrote:
> I believe that transforms (including calls to transform point) cannot
> be assumed to be thread safe.
> 
> The reason is the kernel transforms as you suggested.  I believe the
> thin-plate spline and elastic body spline transforms were the main
> problems.
> 
> I could be mistaken.
> s
> 
> On Wed, Aug 13, 2008 at 5:43 PM, Rupert Brooks <rupe.brooks at gmail.com> wrote:
> 
>>Hi
>>
>>A quick question about thread-safety of transforms.  Are transforms
>>supposed to be thread safe?  Are specific functions threadsafe and
>>others not?
>>
>>The optimized image metrics are specifically designed to duplicate the
>>transform for each thread.  However, the ResampleImageFilter does not
>>and neither does the OptResampleImageFilter in the Review directory as
>>far as I can tell.  So it appears that the ResampleImageFilter assumes
>>threadsafety and the metrics dont.
>>
>>I suspect that this is because the GetJacobian function is inherently
>>not threadsafe, but is not used by the ResampleImageFilter and is used
>>by the metrics.
>>
>>Anyway, my question is - does the TransformPoint method of the
>>transforms have to be threadsafe, or should ResampleImageFilter be
>>changed?   I ask because I can optimize my modified Kernel transforms
>>significantly if i do not keep the TransformPoint threadsafe.  This
>>worked in the image metrics, but blew up in the ResampleFilter when i
>>tried it.  I was just wondering what the intention was when designing
>>the multithreaded registration framework.  Briefly - theres
>>calculations done for the TransformPoint that are also done for the
>>GetJacobian.  These can be cached, and since the registration
>>framework tends to call TransformPoint followed by GetJacobian a lot
>>there is a speed gain.  This could potentially apply to other
>>transforms, but i cant think of a significant example right off.
>>
>>Thanks
>>Rupert
>>
>>--
>>--------------------------------------------------------------
>>Rupert Brooks
>>McGill Centre for Intelligent Machines (www.cim.mcgill.ca)
>>Ph.D Student, Electrical and Computer Engineering
>>http://www.cyberus.ca/~rbrooks
>>_______________________________________________
>>Insight-developers mailing list
>>Insight-developers at itk.org
>>http://www.itk.org/mailman/listinfo/insight-developers
>>
> 
> 
> 
> 


More information about the Insight-developers mailing list