NAC: Optimized registration in Slicer Goals Optimize ITK registration framework Targets: Multi-processor and multi-core, shared memory systems Medium and large-size problems Transforms, Interpolators, and metrics Thread, pre-compute, and integrate Maximize backward compatibility Monitor project’s progress Deliver as Slicer3 modules
Optimize registration Threaded base classes: interpolators, transforms, and metrics TransformPoint(itk::Point, unsigned int threadID) GetValue(itk::Point, unsigned int threadID) Reduce creation/destruction of local vars Increase memory requirements (minimal)
Optimize registration Extend ImageToImageMetric base class Samples Random, entire image, or passed as list Detect BSpline transform pre-compute weights, relevant control points, and rigid transform of samples Integrate transform and metric Detect BSpline interpolator Optimize derivative computation Threaded metric computation ThreadedPreProcess ThreadedProcessSample ThreadedPostProcess
Optimize registration Other optimizations Memset Floor Do not use MUTEX Limit amount of data distribution and integration when threads created/destroyed Method-specific optimizations E.g., MattesMIMetric JointPDF – one per thread during process sample JointPDF – re-integrated using one region per thread
Monitor RealTimeHighPriorityTimer BatchMake BatchBoards SetPriority, SetThreadAffinity BatchMake GetCPUInfo # of cores, speed, etc GetMemoryInfo Physical memory SendToBatchBoard Parameters, results Available as commands, function calls, and CMake variables BatchBoards
Results
NAC: Optimized registration in Slicer Slicer Modules BWHITKOptimization/Code/Applications/SlicerRegistrationModules Same GUI as current registration modules