ITK/Fall v4 2011 Meeting/Hackathon: Difference between revisions

From KitwarePublic
Jump to navigationJump to search
 
(6 intermediate revisions by 3 users not shown)
Line 6: Line 6:
=Topics=
=Topics=
==Multithreading==
==Multithreading==
===New Threading Class===


====Motivation====
===Motivation===


The ImageToImageFilter ''BeforeThreadedGenerateData'', ''ThreadedGenerateData'', ''AfterThreadedGenerateData'' infrastructure has successfully promoted the use of multithreading in the toolkit for Image filters.  Last time checked, there was only one other use of the Multithreader class in the entire framework.
The ImageToImageFilter ''BeforeThreadedGenerateData'', ''ThreadedGenerateData'', ''AfterThreadedGenerateData'' infrastructure has successfully promoted the use of multithreading in the toolkit for Image filters.  Last time checked, there are only maybe three other uses of the itk::Multithreader class in the entire toolkit, while there are well over a hundred that use ThreadedGenerateData.


There is generally a need to do threading outside of Image filters, and sometimes a different or more complicated threading is needed within the filters.  Registration refactoring and level sets refactoring are trying to do non-ImageToImageFilter threading.
There is generally a need to do threading outside of Image filters, and sometimes a different or more complicated threading is needed within the filters.  Registration refactoring and level sets refactoring are trying to do non-ImageToImageFilter threading.


====New infrastructure====
===New Threading Class===


'''ThreadedExecution''' class.  This class will be easy to use, and should handle 90% of the use cases for parallel processing.  It will provide organization for multithreaded code.
'''ThreadedExecution''' class.  This class will be easy to use, and should handle 90% of the use cases for parallel processing.  It will provide organization for multithreaded code.
Line 28: Line 27:


The ThreadedExecution class would have a '''ThreadedDomainPartitioner''' member.  The ThreadedDomainPartitioner is based off the work of the Registration refactoring group.  It separates a domain into the sections to be processed per thread.
The ThreadedExecution class would have a '''ThreadedDomainPartitioner''' member.  The ThreadedDomainPartitioner is based off the work of the Registration refactoring group.  It separates a domain into the sections to be processed per thread.
===Thread pools===
* Intel Thread Building Blocks
* Other?


==DICOM==
==DICOM==
*Focus on DCMTK
**Create ITK::DCMTK Module
**Create DCMTK-PACS Module for ITK
==Registration==
==Registration==
* Bring enough classes into ITK to enable a full registration problem in the new framework.
==GPU==
==GPU==
==SimpleITK==
==SimpleITK==

Latest revision as of 01:18, 11 February 2012

September 29th

  • 8:30 am Hackathon
  • Send ideas for projects to tyoo@mail.nlm.nih.gov

Topics

Multithreading

Motivation

The ImageToImageFilter BeforeThreadedGenerateData, ThreadedGenerateData, AfterThreadedGenerateData infrastructure has successfully promoted the use of multithreading in the toolkit for Image filters. Last time checked, there are only maybe three other uses of the itk::Multithreader class in the entire toolkit, while there are well over a hundred that use ThreadedGenerateData.

There is generally a need to do threading outside of Image filters, and sometimes a different or more complicated threading is needed within the filters. Registration refactoring and level sets refactoring are trying to do non-ImageToImageFilter threading.

New Threading Class

ThreadedExecution class. This class will be easy to use, and should handle 90% of the use cases for parallel processing. It will provide organization for multithreaded code.

It has methods:

  • BeforeThreadedExecution
    • Optionally do preparations like create instance variables needed per thread.
  • ThreadedExecution
    • Do the threaded operation, somewhat like ThreadedGenerateData. A method that gets passed the 'this *', but as thread data. Due to C++ rules, to get access to the 'this *', it has to be a nested class. It gets passed in here as 'Self *'. The ThreadedExecution nested class can live somewhere high up in the inheritance tree, e.g., itk::Object. When inheriting, one has to be careful with the declaration, then dynamic_cast down to 'Self *' in the method
  • AfterThreadedExecution'
    • Optionally collect results, etc. E.g. calculate the global minimum from the minimums calculated per thread.

The ThreadedExecution class would have a ThreadedDomainPartitioner member. The ThreadedDomainPartitioner is based off the work of the Registration refactoring group. It separates a domain into the sections to be processed per thread.

Thread pools

  • Intel Thread Building Blocks
  • Other?

DICOM

  • Focus on DCMTK
    • Create ITK::DCMTK Module
    • Create DCMTK-PACS Module for ITK

Registration

  • Bring enough classes into ITK to enable a full registration problem in the new framework.

GPU

SimpleITK