https://public.kitware.com/Wiki/api.php?action=feedcontributions&user=Zygmunt&feedformat=atomKitwarePublic - User contributions [en]2024-03-28T10:36:43ZUser contributionsMediaWiki 1.38.6https://public.kitware.com/Wiki/index.php?title=ITK/Release_4/GPU_Acceleration&diff=49012ITK/Release 4/GPU Acceleration2012-10-18T19:25:10Z<p>Zygmunt: /* Target architecture */</p>
<hr />
<div>This page outlines the proposed GPU acceleration framework in ITK v4. The GPU has become a cost-effective parallel computing platform for computationally expensive problems. Although many ITK image filters can benefit from the GPU, there has been no GPU support in ITK as of today. We propose to add a new data structure, framework, and some basic image operations that support the GPU in order to allow ITK developers to easily implement their filters running on both the CPU and GPU.<br />
<br />
== Goals ==<br />
<br />
* Add the support for the GPU processing in ITK<br />
** GPU image class<br />
** Extension of ITK multithreading model to support the GPU<br />
** Pipeline supporting both CPU and GPU filters and images<br />
** Basic GPU image operators<br />
<br />
== Authors ==<br />
<br />
GPU acceleration for ITK v4 has been proposed by Harvard University and University of Utah (PI: Jim Miller from GE).<br />
University of Pennsylvania is also participating for GPU image registration.<br />
<br />
* Won-Ki Jeong (wkjeong -at- seas.harvard.edu)<br />
* Baohua Wu (baohua -at- seas.upenn.edu)<br />
<br />
== Summary ==<br />
<br />
* GPU image class that manages GPU and CPU data transparently from users<br />
* GPU image filter base class that supports pipelining<br />
* GPU data, context, kernel manager that help users to use OpenCL code easily with ITK<br />
* Object factory automatically creates images and filters for target architecture<br />
* GPU inPlace image filter<br />
* GPU Finite Difference Image Filter and Function classes<br />
<br />
== Example Filters ==<br />
<br />
* GPUMeanImageFilter<br />
* GPUBinaryThresholdImageFilter<br />
* GPUGradientAnisotropicDiffusionImageFilter<br />
* GPUDemonsRegistrationFilter<br />
<br />
== New Classes ==<br />
<br />
=== GPUImage ===<br />
GPU image class.<br />
<br />
=== GPUDataManager ===<br />
Manage GPU data container and synchronize between the CPU and GPU. Used by GPU image class.<br />
<br />
==== GPUImageDataManager ====<br />
GPU data manager for GPUImage data, derived from GPUDataManager base class.<br />
<br />
=== GPUContextManager ===<br />
Manage GPU contexts and Command Queues.<br />
<br />
=== GPUKernelManager ===<br />
Manage GPU programs and kernels, and execute kernels.<br />
<br />
=== GPUImageToImageFilter ===<br />
Base class for GPU-based ImageToImage filters. To write your own filter, derive a child class from this base class and implement GPUGenerateDate() accordingly.<br />
<br />
==== GPUMeanImageFilter ====<br />
Mean image filter implementation.<br />
<br />
=== GPUInPlaceImageFilter ===<br />
Base class for GPU-based inplace image filters. Input and output image is same. Graft() for GPU data is implemented.<br />
<br />
==== GPUBinaryThresholdImageFilter ====<br />
Binary threshold image filter as an example of inplace image filter.<br />
<br />
=== GPUFiniteDifferenceImageFilter ===<br />
Base class for GPU-based finite difference image filters.<br />
<br />
== Usage Example ==<br />
<br />
ITK GPU classes hide low-level details to manage GPU resources and greatly reduce programmer's effort. You just need to create and modify GPU images as you would normally do for a regular ITK image (e.g., using pixel iterators, FillBuffer(), or SetPixel()). A GPU kernel can be created by as simple as using only three lines of code (creating kernel manager, loading source program, and creating kernel). After running a kernel on the GPU images, you can access pixel values using normal ITK pixel access APIs (e.g., GetPixel()). Synchronization between the CPU and GPU will be performed automatically and efficiently (lazy-evaluation), transparent to the users. Example:<br />
<br />
<pre><br />
typedef itk::GPUImage<float, 2> GPUImage1f;<br />
<br />
//<br />
// Create GPU images as normal itk image<br />
//<br />
GPUImage1f::Pointer srcA, srcB, dest;<br />
srcA = GPUImage1f::New();<br />
srcB = GPUImage1f::New();<br />
dest = GPUImage1f::New();<br />
<br />
//<br />
// Initialize GPU images as you normally do for regular itk images<br />
//<br />
srcA->FillBuffer(1.0f);<br />
srcB->FillBuffer(2.0f);<br />
dest->FillBuffer(3.0f);<br />
<br />
//<br />
// Create GPU program object<br />
//<br />
GPUKernelManager::Pointer kernelManager = GPUKernelManager::New();<br />
<br />
//<br />
// Load OpenCL source code and compile<br />
//<br />
kernelManager->LoadProgramFromFile("ImageOps.cl");<br />
<br />
//<br />
// Create kernel<br />
//<br />
int kernel_add = kernelManager->CreateKernel("ImageAdd");<br />
<br />
//<br />
// Set parameters<br />
//<br />
unsigned int nElem = 65536;<br />
kernelManager->SetKernelArgWithImage(kernel_add, 0, srcA->GetGPUDataManager());<br />
kernelManager->SetKernelArgWithImage(kernel_add, 1, srcB->GetGPUDataManager());<br />
kernelManager->SetKernelArgWithImage(kernel_add, 2, dest->GetGPUDataManager());<br />
kernelManager->SetKernelArg(kernel_add, 3, sizeof(unsigned int), &nElem);<br />
<br />
//<br />
// Launch Kernel<br />
//<br />
kernelManager->LaunchKernel2D(kernel_add, 16, 16, 16, 16);<br />
</pre><br />
<br />
== Latest Code ==<br />
* git@github.com:graphor/ITK.git (branch: GPU-Alpha)<br />
<br />
== ToDo List ==<br />
<br />
* GPUThreadedGenerateData() for multi-GPU support<br />
* Context/device management<br />
* InPlace GPU filter base class<br />
** Grafting for GPU data object<br />
<br />
== Plans ==<br />
<br />
=== GPU image class ===<br />
<br />
We propose a new GPU image class, itk::GPUImage,<br />
which provides a GPU data container and functions for implicit and explicit data transfers<br />
between the CPU and the GPU memory spaces. itk::GPUImage will contain two snapshots<br />
of the current image—one on the CPU and one on the GPU—but provide the functionality of<br />
a single image to the user. itk::GPUImage inherits all the public functions from itk::Image,<br />
so it can be used with the existing CPU ITK image filters as before. All the pixel operators,<br />
for example GetPixel(), and the image iterators can be used to modify pixel values on the<br />
CPU side. Conversely, GPU code will modify the pixel values on the GPU side. We propose<br />
an automatic synchronization mechanism between the CPU and GPU buffers, transparent to<br />
the user. Specifically, we propose the following functionalities for the ITK GPU image class:<br />
<br />
* Efficient GPU memory management<br />
* CPU and GPU synchronization scheme<br />
* GPU buffer interface for direct access<br />
<br />
=== GPU support for ITK multithreading model ===<br />
<br />
We will extend the ITK multithreaded architecture by introducing two new virtual functions, GPUGenerateData()<br />
and GPUThreadedGenerateData(). These methods will borrow the implicit thread management<br />
design from the existing architecture but manage threads based on GPU resources and<br />
not CPU resources. When the filter is called, a superclass of the filter will decide between<br />
single or multi-threaded execution and determine where to run the code, either on a CPU or<br />
GPU. The superclass will spawn threads and call one of the four functions accordingly.<br />
<br />
=== Filter API to support GPU code ===<br />
<br />
We will implement a filter class that has an API to execute GPU code written in OpenCL.<br />
<br />
=== Basic GPU image operators ===<br />
<br />
We propose a set of basic GPU image operators and filters that can be used as building blocks for more complicated numerical algorithms, such as:<br />
<br />
* Addition, subtraction, division, multiplication, inner product, reduction, copy and assignment operators<br />
* Neighborhood operator filter (for convolution-type filter)<br />
<br />
=== Wish List of Classes to Support GPU ===<br />
<br />
* [[ITK_Release_4/GPU Acceleration/Wish List|Wish List of Filters to Support]]<br />
<br />
== Target architecture ==<br />
<br />
We are going to use OpenCL to implement GPU code for wide applicability (Intel, AMD, and NVIDIA). We will consider supporting NVIDIA CUDA as well if required (for example, to employ existing GPU libraries, such as CUFFT or CUBLAS).<br />
<br />
Architectures that have been confirmed to work as of ITK 4.2:<br />
{| border="1"<br />
|- bgcolor="#abcdef"<br />
! OS !! GPU !! Driver !! OpenCL !! Test Status<br />
|-<br />
|Mac 10.6.8 || NVIDIA GeForce GT 120 (9500 GT) || nvidia, included with OS || v 12.3.6, get info string 1.5.6 || PASS<br />
|-<br />
|Mac 10.7.? || NVIDIA GeForce 9400M and NVIDIA GeForce 9600M GT || included with OS || ? || ? <br />
|-<br />
|Mac 10.7.3 || ATI Radeon HD 5870 || nvidia, included with OS || ? || 3D Mean Filter FAILS<br />
|-<br />
|Mac 10.7.2 || NVIDIA GeForce GT 120 (9500 GT) || nvidia, included with OS || v 1.50.63, get info string 1.50.63 || PASS<br />
|-<br />
|Linux OpenSUSE 11.4 (x86_64) || NVIDIA GeForce GTX 570 || x86_64 280.13 || NVIDIA GPU Computing SDK v? || PASS<br />
|-<br />
|Linux OpenSUSE 11.4 (x86_64) || NVIDIA Tesla C2070 || x86_64 280.13 || NVIDIA GPU Computing SDK v? || PASS<br />
|-<br />
|Linux OpenSUSE 12.1 (x86_64) || NVIDIA Quadro FX 5600 || x86_64 295.33 || nvidia Revision 10327 || PASS<br />
|-<br />
|Linux OpenSUSE 12.1 (x86_64) || NVIDIA GeForce GT120 (9500 GT) || x86_64 295.40-15.1 || nvidia 295.40-15.1 || PASS<br />
|-<br />
|Linux OpenSUSE 12.1 (x86_64) || NVIDIA GeForce GT120 (9500 GT) || x86_64 295.40-15.1 || intel 1.5 x64 || PASS<br />
|-<br />
|Windows 7 Professional SP1 (64-bit) || NVIDIA GeForce 8800 GTX || 8.17.12.8562 (285.62) || NVIDIA GPU Computing SDK 4.0.19 Win 64 || PASS<br />
|-<br />
|Windows 7 Professional SP1 (64-bit) || NVIDIA GeForce 9500 GT (GT120) || 8.17.12.9610 || Intel SDK for ocl applications 2012 x64 || PASS<br />
|-<br />
|Windows 7 Professional SP1 (64-bit) || NVIDIA GeForce 9500 GT (GT120) || 8.17.12.9610 || NVIDIA GPU Computing SDK 4.2.9 Win 64 || PASS <br />
|-<br />
|Windows Vista Ultimate SP2 (64-bit) || ATI FireGL V7600 || 8.850.7.2000 || AMD APP SDK v2.5 Windows 64 (AMD APP SDK Runtime 2.4.595.10) || Code compiles, all tests fail because GPU device not found. According to http://forums.amd.com/devforum/messageview.cfm?catid=390&threadid=126463, this card is not supported<br />
|}<br />
<br />
<br />
Potential error messages and fixes<br />
{| border="1"<br />
|- bgcolor="#abcdef"<br />
!Error !! OS !! Fix<br />
|-<br />
|clGetPlatformIDs returns -1001 and 0 platforms || Linux || Make sure permissions for /dev/nvidia0 and /dev/nvidiactl are rw for your user<br />
|-<br />
|error : Instruction ‘mov’ requires SM 1.3 or higher, or map_f64_to_f32 directive … ptxas fatal : Ptx assembly aborted due to errors … ptxas application ptx input, line 109; warning : Double is not supported. Demoting to float … || Any ||Not all GPUs and/or drivers support double precision calculations. Be sure to only instantiate floating point or integer filter types<br />
|}<br />
<br />
== Instructions for Installing OpenCL ==<br />
<br />
* http://www.khronos.org/opencl/<br />
<br />
In specific platforms <br />
<br />
* http://www.nvidia.com/object/cuda_opencl_new.html<br />
* http://developer.amd.com/zones/OpenCLZone/pages/default.aspx<br />
* http://software.intel.com/en-us/articles/intel-opencl-sdk/<br />
<br />
= Tcons =<br />
<br />
* [[ITK_Release_4/GPU Acceleration/Tcon-2011-01-28|Tcon 2011-01-28]]<br />
* [[ITK_Release_4/GPU Acceleration/Tcon-2011-01-06|Tcon 2011-01-06]]<br />
* [[ITK_Release_4/GPU Acceleration/Tcon-2010-11-22|Tcon 2010-11-22]]</div>Zygmunthttps://public.kitware.com/Wiki/index.php?title=ITK/Release_4/GPU_Acceleration&diff=49007ITK/Release 4/GPU Acceleration2012-10-18T17:29:17Z<p>Zygmunt: /* Target architecture */</p>
<hr />
<div>This page outlines the proposed GPU acceleration framework in ITK v4. The GPU has become a cost-effective parallel computing platform for computationally expensive problems. Although many ITK image filters can benefit from the GPU, there has been no GPU support in ITK as of today. We propose to add a new data structure, framework, and some basic image operations that support the GPU in order to allow ITK developers to easily implement their filters running on both the CPU and GPU.<br />
<br />
== Goals ==<br />
<br />
* Add the support for the GPU processing in ITK<br />
** GPU image class<br />
** Extension of ITK multithreading model to support the GPU<br />
** Pipeline supporting both CPU and GPU filters and images<br />
** Basic GPU image operators<br />
<br />
== Authors ==<br />
<br />
GPU acceleration for ITK v4 has been proposed by Harvard University and University of Utah (PI: Jim Miller from GE).<br />
University of Pennsylvania is also participating for GPU image registration.<br />
<br />
* Won-Ki Jeong (wkjeong -at- seas.harvard.edu)<br />
* Baohua Wu (baohua -at- seas.upenn.edu)<br />
<br />
== Summary ==<br />
<br />
* GPU image class that manages GPU and CPU data transparently from users<br />
* GPU image filter base class that supports pipelining<br />
* GPU data, context, kernel manager that help users to use OpenCL code easily with ITK<br />
* Object factory automatically creates images and filters for target architecture<br />
* GPU inPlace image filter<br />
* GPU Finite Difference Image Filter and Function classes<br />
<br />
== Example Filters ==<br />
<br />
* GPUMeanImageFilter<br />
* GPUBinaryThresholdImageFilter<br />
* GPUGradientAnisotropicDiffusionImageFilter<br />
* GPUDemonsRegistrationFilter<br />
<br />
== New Classes ==<br />
<br />
=== GPUImage ===<br />
GPU image class.<br />
<br />
=== GPUDataManager ===<br />
Manage GPU data container and synchronize between the CPU and GPU. Used by GPU image class.<br />
<br />
==== GPUImageDataManager ====<br />
GPU data manager for GPUImage data, derived from GPUDataManager base class.<br />
<br />
=== GPUContextManager ===<br />
Manage GPU contexts and Command Queues.<br />
<br />
=== GPUKernelManager ===<br />
Manage GPU programs and kernels, and execute kernels.<br />
<br />
=== GPUImageToImageFilter ===<br />
Base class for GPU-based ImageToImage filters. To write your own filter, derive a child class from this base class and implement GPUGenerateDate() accordingly.<br />
<br />
==== GPUMeanImageFilter ====<br />
Mean image filter implementation.<br />
<br />
=== GPUInPlaceImageFilter ===<br />
Base class for GPU-based inplace image filters. Input and output image is same. Graft() for GPU data is implemented.<br />
<br />
==== GPUBinaryThresholdImageFilter ====<br />
Binary threshold image filter as an example of inplace image filter.<br />
<br />
=== GPUFiniteDifferenceImageFilter ===<br />
Base class for GPU-based finite difference image filters.<br />
<br />
== Usage Example ==<br />
<br />
ITK GPU classes hide low-level details to manage GPU resources and greatly reduce programmer's effort. You just need to create and modify GPU images as you would normally do for a regular ITK image (e.g., using pixel iterators, FillBuffer(), or SetPixel()). A GPU kernel can be created by as simple as using only three lines of code (creating kernel manager, loading source program, and creating kernel). After running a kernel on the GPU images, you can access pixel values using normal ITK pixel access APIs (e.g., GetPixel()). Synchronization between the CPU and GPU will be performed automatically and efficiently (lazy-evaluation), transparent to the users. Example:<br />
<br />
<pre><br />
typedef itk::GPUImage<float, 2> GPUImage1f;<br />
<br />
//<br />
// Create GPU images as normal itk image<br />
//<br />
GPUImage1f::Pointer srcA, srcB, dest;<br />
srcA = GPUImage1f::New();<br />
srcB = GPUImage1f::New();<br />
dest = GPUImage1f::New();<br />
<br />
//<br />
// Initialize GPU images as you normally do for regular itk images<br />
//<br />
srcA->FillBuffer(1.0f);<br />
srcB->FillBuffer(2.0f);<br />
dest->FillBuffer(3.0f);<br />
<br />
//<br />
// Create GPU program object<br />
//<br />
GPUKernelManager::Pointer kernelManager = GPUKernelManager::New();<br />
<br />
//<br />
// Load OpenCL source code and compile<br />
//<br />
kernelManager->LoadProgramFromFile("ImageOps.cl");<br />
<br />
//<br />
// Create kernel<br />
//<br />
int kernel_add = kernelManager->CreateKernel("ImageAdd");<br />
<br />
//<br />
// Set parameters<br />
//<br />
unsigned int nElem = 65536;<br />
kernelManager->SetKernelArgWithImage(kernel_add, 0, srcA->GetGPUDataManager());<br />
kernelManager->SetKernelArgWithImage(kernel_add, 1, srcB->GetGPUDataManager());<br />
kernelManager->SetKernelArgWithImage(kernel_add, 2, dest->GetGPUDataManager());<br />
kernelManager->SetKernelArg(kernel_add, 3, sizeof(unsigned int), &nElem);<br />
<br />
//<br />
// Launch Kernel<br />
//<br />
kernelManager->LaunchKernel2D(kernel_add, 16, 16, 16, 16);<br />
</pre><br />
<br />
== Latest Code ==<br />
* git@github.com:graphor/ITK.git (branch: GPU-Alpha)<br />
<br />
== ToDo List ==<br />
<br />
* GPUThreadedGenerateData() for multi-GPU support<br />
* Context/device management<br />
* InPlace GPU filter base class<br />
** Grafting for GPU data object<br />
<br />
== Plans ==<br />
<br />
=== GPU image class ===<br />
<br />
We propose a new GPU image class, itk::GPUImage,<br />
which provides a GPU data container and functions for implicit and explicit data transfers<br />
between the CPU and the GPU memory spaces. itk::GPUImage will contain two snapshots<br />
of the current image—one on the CPU and one on the GPU—but provide the functionality of<br />
a single image to the user. itk::GPUImage inherits all the public functions from itk::Image,<br />
so it can be used with the existing CPU ITK image filters as before. All the pixel operators,<br />
for example GetPixel(), and the image iterators can be used to modify pixel values on the<br />
CPU side. Conversely, GPU code will modify the pixel values on the GPU side. We propose<br />
an automatic synchronization mechanism between the CPU and GPU buffers, transparent to<br />
the user. Specifically, we propose the following functionalities for the ITK GPU image class:<br />
<br />
* Efficient GPU memory management<br />
* CPU and GPU synchronization scheme<br />
* GPU buffer interface for direct access<br />
<br />
=== GPU support for ITK multithreading model ===<br />
<br />
We will extend the ITK multithreaded architecture by introducing two new virtual functions, GPUGenerateData()<br />
and GPUThreadedGenerateData(). These methods will borrow the implicit thread management<br />
design from the existing architecture but manage threads based on GPU resources and<br />
not CPU resources. When the filter is called, a superclass of the filter will decide between<br />
single or multi-threaded execution and determine where to run the code, either on a CPU or<br />
GPU. The superclass will spawn threads and call one of the four functions accordingly.<br />
<br />
=== Filter API to support GPU code ===<br />
<br />
We will implement a filter class that has an API to execute GPU code written in OpenCL.<br />
<br />
=== Basic GPU image operators ===<br />
<br />
We propose a set of basic GPU image operators and filters that can be used as building blocks for more complicated numerical algorithms, such as:<br />
<br />
* Addition, subtraction, division, multiplication, inner product, reduction, copy and assignment operators<br />
* Neighborhood operator filter (for convolution-type filter)<br />
<br />
=== Wish List of Classes to Support GPU ===<br />
<br />
* [[ITK_Release_4/GPU Acceleration/Wish List|Wish List of Filters to Support]]<br />
<br />
== Target architecture ==<br />
<br />
We are going to use OpenCL to implement GPU code for wide applicability (Intel, AMD, and NVIDIA). We will consider supporting NVIDIA CUDA as well if required (for example, to employ existing GPU libraries, such as CUFFT or CUBLAS).<br />
<br />
Architectures that have been confirmed to work as of ITK 4.2:<br />
{| border="1"<br />
|- bgcolor="#abcdef"<br />
! OS !! GPU !! Driver !! OpenCL !! Test Status<br />
|-<br />
|Mac 10.6.8 || NVIDIA GeForce GT 120 (9500 GT) || nvidia, included with OS || v 12.3.6, get info string 1.5.6 || PASS<br />
|-<br />
|Mac 10.7.? || NVIDIA GeForce 9400M and NVIDIA GeForce 9600M GT || included with OS || ? || ? <br />
|-<br />
|Mac 10.7.3 || ATI Radeon HD 5870 || nvidia, included with OS || ? || 3D Mean Filter FAILS<br />
|-<br />
|Mac 10.7.2 || NVIDIA GeForce GT 120 (9500 GT) || nvidia, included with OS || v 1.50.63, get info string 1.50.63 || ?<br />
|-<br />
|Linux OpenSUSE 11.4 (x86_64) || NVIDIA GeForce GTX 570 || x86_64 280.13 || NVIDIA GPU Computing SDK v? || PASS<br />
|-<br />
|Linux OpenSUSE 11.4 (x86_64) || NVIDIA Tesla C2070 || x86_64 280.13 || NVIDIA GPU Computing SDK v? || PASS<br />
|-<br />
|Linux OpenSUSE 12.1 (x86_64) || NVIDIA Quadro FX 5600 || x86_64 295.33 || nvidia Revision 10327 || PASS<br />
|-<br />
|Linux OpenSUSE 12.1 (x86_64) || NVIDIA GeForce GT120 (9500 GT) || x86_64 295.40-15.1 || nvidia 295.40-15.1 || PASS<br />
|-<br />
|Linux OpenSUSE 12.1 (x86_64) || NVIDIA GeForce GT120 (9500 GT) || x86_64 295.40-15.1 || intel 1.5 x64 || PASS<br />
|-<br />
|Windows 7 Professional SP1 (64-bit) || NVIDIA GeForce 8800 GTX || 8.17.12.8562 (285.62) || NVIDIA GPU Computing SDK 4.0.19 Win 64 || PASS<br />
|-<br />
|Windows 7 Professional SP1 (64-bit) || NVIDIA GeForce 9500 GT (GT120) || 8.17.12.9610 || Intel SDK for ocl applications 2012 x64 || PASS<br />
|-<br />
|Windows 7 Professional SP1 (64-bit) || NVIDIA GeForce 9500 GT (GT120) || 8.17.12.9610 || NVIDIA GPU Computing SDK 4.2.9 Win 64 || PASS <br />
|-<br />
|Windows Vista Ultimate SP2 (64-bit) || ATI FireGL V7600 || 8.850.7.2000 || AMD APP SDK v2.5 Windows 64 (AMD APP SDK Runtime 2.4.595.10) || Code compiles, all tests fail because GPU device not found. According to http://forums.amd.com/devforum/messageview.cfm?catid=390&threadid=126463, this card is not supported<br />
|}<br />
<br />
<br />
Potential error messages and fixes<br />
{| border="1"<br />
|- bgcolor="#abcdef"<br />
!Error !! OS !! Fix<br />
|-<br />
|clGetPlatformIDs returns -1001 and 0 platforms || Linux || Make sure permissions for /dev/nvidia0 and /dev/nvidiactl are rw for your user<br />
|-<br />
|error : Instruction ‘mov’ requires SM 1.3 or higher, or map_f64_to_f32 directive … ptxas fatal : Ptx assembly aborted due to errors … ptxas application ptx input, line 109; warning : Double is not supported. Demoting to float … || Any ||Not all GPUs and/or drivers support double precision calculations. Be sure to only instantiate floating point or integer filter types<br />
|}<br />
<br />
== Instructions for Installing OpenCL ==<br />
<br />
* http://www.khronos.org/opencl/<br />
<br />
In specific platforms <br />
<br />
* http://www.nvidia.com/object/cuda_opencl_new.html<br />
* http://developer.amd.com/zones/OpenCLZone/pages/default.aspx<br />
* http://software.intel.com/en-us/articles/intel-opencl-sdk/<br />
<br />
= Tcons =<br />
<br />
* [[ITK_Release_4/GPU Acceleration/Tcon-2011-01-28|Tcon 2011-01-28]]<br />
* [[ITK_Release_4/GPU Acceleration/Tcon-2011-01-06|Tcon 2011-01-06]]<br />
* [[ITK_Release_4/GPU Acceleration/Tcon-2010-11-22|Tcon 2010-11-22]]</div>Zygmunthttps://public.kitware.com/Wiki/index.php?title=ITK/Release_4/GPU_Acceleration&diff=48216ITK/Release 4/GPU Acceleration2012-06-26T15:54:11Z<p>Zygmunt: /* Target architecture */</p>
<hr />
<div>This page outlines the proposed GPU acceleration framework in ITK v4. The GPU has become a cost-effective parallel computing platform for computationally expensive problems. Although many ITK image filters can benefit from the GPU, there has been no GPU support in ITK as of today. We propose to add a new data structure, framework, and some basic image operations that support the GPU in order to allow ITK developers to easily implement their filters running on both the CPU and GPU.<br />
<br />
== Goals ==<br />
<br />
* Add the support for the GPU processing in ITK<br />
** GPU image class<br />
** Extension of ITK multithreading model to support the GPU<br />
** Pipeline supporting both CPU and GPU filters and images<br />
** Basic GPU image operators<br />
<br />
== Authors ==<br />
<br />
GPU acceleration for ITK v4 has been proposed by Harvard University and University of Utah (PI: Jim Miller from GE).<br />
University of Pennsylvania is also participating for GPU image registration.<br />
<br />
* Won-Ki Jeong (wkjeong -at- seas.harvard.edu)<br />
* Baohua Wu (baohua -at- seas.upenn.edu)<br />
<br />
== Summary ==<br />
<br />
* GPU image class that manages GPU and CPU data transparently from users<br />
* GPU image filter base class that supports pipelining<br />
* GPU data, context, kernel manager that help users to use OpenCL code easily with ITK<br />
* Object factory automatically creates images and filters for target architecture<br />
* GPU inPlace image filter<br />
* GPU Finite Difference Image Filter and Function classes<br />
<br />
== Example Filters ==<br />
<br />
* GPUMeanImageFilter<br />
* GPUBinaryThresholdImageFilter<br />
* GPUGradientAnisotropicDiffusionImageFilter<br />
* GPUDemonsRegistrationFilter<br />
<br />
== New Classes ==<br />
<br />
=== GPUImage ===<br />
GPU image class.<br />
<br />
=== GPUDataManager ===<br />
Manage GPU data container and synchronize between the CPU and GPU. Used by GPU image class.<br />
<br />
==== GPUImageDataManager ====<br />
GPU data manager for GPUImage data, derived from GPUDataManager base class.<br />
<br />
=== GPUContextManager ===<br />
Manage GPU contexts and Command Queues.<br />
<br />
=== GPUKernelManager ===<br />
Manage GPU programs and kernels, and execute kernels.<br />
<br />
=== GPUImageToImageFilter ===<br />
Base class for GPU-based ImageToImage filters. To write your own filter, derive a child class from this base class and implement GPUGenerateDate() accordingly.<br />
<br />
==== GPUMeanImageFilter ====<br />
Mean image filter implementation.<br />
<br />
=== GPUInPlaceImageFilter ===<br />
Base class for GPU-based inplace image filters. Input and output image is same. Graft() for GPU data is implemented.<br />
<br />
==== GPUBinaryThresholdImageFilter ====<br />
Binary threshold image filter as an example of inplace image filter.<br />
<br />
=== GPUFiniteDifferenceImageFilter ===<br />
Base class for GPU-based finite difference image filters.<br />
<br />
== Usage Example ==<br />
<br />
ITK GPU classes hide low-level details to manage GPU resources and greatly reduce programmer's effort. You just need to create and modify GPU images as you would normally do for a regular ITK image (e.g., using pixel iterators, FillBuffer(), or SetPixel()). A GPU kernel can be created by as simple as using only three lines of code (creating kernel manager, loading source program, and creating kernel). After running a kernel on the GPU images, you can access pixel values using normal ITK pixel access APIs (e.g., GetPixel()). Synchronization between the CPU and GPU will be performed automatically and efficiently (lazy-evaluation), transparent to the users. Example:<br />
<br />
<pre><br />
typedef itk::GPUImage<float, 2> GPUImage1f;<br />
<br />
//<br />
// Create GPU images as normal itk image<br />
//<br />
GPUImage1f::Pointer srcA, srcB, dest;<br />
srcA = GPUImage1f::New();<br />
srcB = GPUImage1f::New();<br />
dest = GPUImage1f::New();<br />
<br />
//<br />
// Initialize GPU images as you normally do for regular itk images<br />
//<br />
srcA->FillBuffer(1.0f);<br />
srcB->FillBuffer(2.0f);<br />
dest->FillBuffer(3.0f);<br />
<br />
//<br />
// Create GPU program object<br />
//<br />
GPUKernelManager::Pointer kernelManager = GPUKernelManager::New();<br />
<br />
//<br />
// Load OpenCL source code and compile<br />
//<br />
kernelManager->LoadProgramFromFile("ImageOps.cl");<br />
<br />
//<br />
// Create kernel<br />
//<br />
int kernel_add = kernelManager->CreateKernel("ImageAdd");<br />
<br />
//<br />
// Set parameters<br />
//<br />
unsigned int nElem = 65536;<br />
kernelManager->SetKernelArgWithImage(kernel_add, 0, srcA->GetGPUDataManager());<br />
kernelManager->SetKernelArgWithImage(kernel_add, 1, srcB->GetGPUDataManager());<br />
kernelManager->SetKernelArgWithImage(kernel_add, 2, dest->GetGPUDataManager());<br />
kernelManager->SetKernelArg(kernel_add, 3, sizeof(unsigned int), &nElem);<br />
<br />
//<br />
// Launch Kernel<br />
//<br />
kernelManager->LaunchKernel2D(kernel_add, 16, 16, 16, 16);<br />
</pre><br />
<br />
== Latest Code ==<br />
* git@github.com:graphor/ITK.git (branch: GPU-Alpha)<br />
<br />
== ToDo List ==<br />
<br />
* GPUThreadedGenerateData() for multi-GPU support<br />
* Context/device management<br />
* InPlace GPU filter base class<br />
** Grafting for GPU data object<br />
<br />
== Plans ==<br />
<br />
=== GPU image class ===<br />
<br />
We propose a new GPU image class, itk::GPUImage,<br />
which provides a GPU data container and functions for implicit and explicit data transfers<br />
between the CPU and the GPU memory spaces. itk::GPUImage will contain two snapshots<br />
of the current image—one on the CPU and one on the GPU—but provide the functionality of<br />
a single image to the user. itk::GPUImage inherits all the public functions from itk::Image,<br />
so it can be used with the existing CPU ITK image filters as before. All the pixel operators,<br />
for example GetPixel(), and the image iterators can be used to modify pixel values on the<br />
CPU side. Conversely, GPU code will modify the pixel values on the GPU side. We propose<br />
an automatic synchronization mechanism between the CPU and GPU buffers, transparent to<br />
the user. Specifically, we propose the following functionalities for the ITK GPU image class:<br />
<br />
* Efficient GPU memory management<br />
* CPU and GPU synchronization scheme<br />
* GPU buffer interface for direct access<br />
<br />
=== GPU support for ITK multithreading model ===<br />
<br />
We will extend the ITK multithreaded architecture by introducing two new virtual functions, GPUGenerateData()<br />
and GPUThreadedGenerateData(). These methods will borrow the implicit thread management<br />
design from the existing architecture but manage threads based on GPU resources and<br />
not CPU resources. When the filter is called, a superclass of the filter will decide between<br />
single or multi-threaded execution and determine where to run the code, either on a CPU or<br />
GPU. The superclass will spawn threads and call one of the four functions accordingly.<br />
<br />
=== Filter API to support GPU code ===<br />
<br />
We will implement a filter class that has an API to execute GPU code written in OpenCL.<br />
<br />
=== Basic GPU image operators ===<br />
<br />
We propose a set of basic GPU image operators and filters that can be used as building blocks for more complicated numerical algorithms, such as:<br />
<br />
* Addition, subtraction, division, multiplication, inner product, reduction, copy and assignment operators<br />
* Neighborhood operator filter (for convolution-type filter)<br />
<br />
=== Wish List of Classes to Support GPU ===<br />
<br />
* [[ITK_Release_4/GPU Acceleration/Wish List|Wish List of Filters to Support]]<br />
<br />
== Target architecture ==<br />
<br />
We are going to use OpenCL to implement GPU code for wide applicability (Intel, AMD, and NVIDIA). We will consider supporting NVIDIA CUDA as well if required (for example, to employ existing GPU libraries, such as CUFFT or CUBLAS).<br />
<br />
Architectures that have been confirmed to work as of ITK 4.2:<br />
{| border="1"<br />
|- bgcolor="#abcdef"<br />
! OS !! GPU !! Driver !! OpenCL !! Test Status<br />
|-<br />
|Mac 10.6.8 || NVIDIA GeForce GT 120 (9500 GT) || nvidia, included with OS || v 12.3.6, get info string 1.5.6 || PASS<br />
|-<br />
|Mac 10.7.? || NVIDIA GeForce 9400M and NVIDIA GeForce 9600M GT || included with OS || ? || ? <br />
|-<br />
|Mac 10.7.3 || ATI Radeon HD 5870 || nvidia, included with OS || ? || 3D Mean Filter FAILS<br />
|-<br />
|Mac 10.7.2 || NVIDIA GeForce GT 120 (9500 GT) || nvidia, included with OS || v 1.50.63, get info string 1.50.63 || ?<br />
|-<br />
|Linux OpenSuse 12.1 (x86_64) || NVIDIA Quadro FX 5600 || x86_64 295.33 || nvidia Revision 10327 || PASS<br />
|-<br />
|Linux OpenSuse 12.1 (x86_64) || NVIDIA GeForce GT120 (9500 GT) || x86_64 295.40-15.1 || nvidia 295.40-15.1 || PASS<br />
|-<br />
|Linux OpenSuse 12.1 (x86_64) || NVIDIA GeForce GT120 (9500 GT) || x86_64 295.40-15.1 || intel 1.5 x64 || PASS<br />
|-<br />
|Windows 7 Professional SP1 (64-bit) || NVIDIA GeForce 8800 GTX || 8.17.12.8562 (285.62) || NVIDIA GPU Computing SDK 4.0.19 Win 64 || PASS<br />
|-<br />
|Windows 7 Professional SP1 (64-bit) || NVIDIA GeForce 9500 GT (GT120) || 8.17.12.9610 || Intel SDK for ocl applications 2012 x64 || PASS<br />
|-<br />
|Windows 7 Professional SP1 (64-bit) || NVIDIA GeForce 9500 GT (GT120) || 8.17.12.9610 || NVIDIA GPU Computing SDK 4.2.9 Win 64 || PASS <br />
|-<br />
|Windows Vista Ultimate SP2 (64-bit) || ATI FireGL V7600 || 8.850.7.2000 || AMD APP SDK v2.5 Windows 64 (AMD APP SDK Runtime 2.4.595.10) || Code compiles, all tests fail because GPU device not found. According to http://forums.amd.com/devforum/messageview.cfm?catid=390&threadid=126463, this card is not supported<br />
|}<br />
<br />
<br />
Potential error messages and fixes<br />
{| border="1"<br />
|- bgcolor="#abcdef"<br />
!Error !! OS !! Fix<br />
|-<br />
|clGetPlatformIDs returns -1001 and 0 platforms || Linux || Make sure permissions for /dev/nvidia0 and /dev/nvidiactl are rw for your user<br />
|-<br />
|error : Instruction ‘mov’ requires SM 1.3 or higher, or map_f64_to_f32 directive … ptxas fatal : Ptx assembly aborted due to errors … ptxas application ptx input, line 109; warning : Double is not supported. Demoting to float … || Any ||Not all GPUs and/or drivers support double precision calculations. Be sure to only instantiate floating point or integer filter types<br />
|}<br />
<br />
== Instructions for Installing OpenCL ==<br />
<br />
* http://www.khronos.org/opencl/<br />
<br />
In specific platforms <br />
<br />
* http://www.nvidia.com/object/cuda_opencl_new.html<br />
* http://developer.amd.com/zones/OpenCLZone/pages/default.aspx<br />
* http://software.intel.com/en-us/articles/intel-opencl-sdk/<br />
<br />
= Tcons =<br />
<br />
* [[ITK_Release_4/GPU Acceleration/Tcon-2011-01-28|Tcon 2011-01-28]]<br />
* [[ITK_Release_4/GPU Acceleration/Tcon-2011-01-06|Tcon 2011-01-06]]<br />
* [[ITK_Release_4/GPU Acceleration/Tcon-2010-11-22|Tcon 2010-11-22]]</div>Zygmunthttps://public.kitware.com/Wiki/index.php?title=ITK/Release_4/GPU_Acceleration&diff=48198ITK/Release 4/GPU Acceleration2012-06-25T15:20:02Z<p>Zygmunt: /* Target architecture */</p>
<hr />
<div>This page outlines the proposed GPU acceleration framework in ITK v4. The GPU has become a cost-effective parallel computing platform for computationally expensive problems. Although many ITK image filters can benefit from the GPU, there has been no GPU support in ITK as of today. We propose to add a new data structure, framework, and some basic image operations that support the GPU in order to allow ITK developers to easily implement their filters running on both the CPU and GPU.<br />
<br />
== Goals ==<br />
<br />
* Add the support for the GPU processing in ITK<br />
** GPU image class<br />
** Extension of ITK multithreading model to support the GPU<br />
** Pipeline supporting both CPU and GPU filters and images<br />
** Basic GPU image operators<br />
<br />
== Authors ==<br />
<br />
GPU acceleration for ITK v4 has been proposed by Harvard University and University of Utah (PI: Jim Miller from GE).<br />
University of Pennsylvania is also participating for GPU image registration.<br />
<br />
* Won-Ki Jeong (wkjeong -at- seas.harvard.edu)<br />
* Baohua Wu (baohua -at- seas.upenn.edu)<br />
<br />
== Summary ==<br />
<br />
* GPU image class that manages GPU and CPU data transparently from users<br />
* GPU image filter base class that supports pipelining<br />
* GPU data, context, kernel manager that help users to use OpenCL code easily with ITK<br />
* Object factory automatically creates images and filters for target architecture<br />
* GPU inPlace image filter<br />
* GPU Finite Difference Image Filter and Function classes<br />
<br />
== Example Filters ==<br />
<br />
* GPUMeanImageFilter<br />
* GPUBinaryThresholdImageFilter<br />
* GPUGradientAnisotropicDiffusionImageFilter<br />
* GPUDemonsRegistrationFilter<br />
<br />
== New Classes ==<br />
<br />
=== GPUImage ===<br />
GPU image class.<br />
<br />
=== GPUDataManager ===<br />
Manage GPU data container and synchronize between the CPU and GPU. Used by GPU image class.<br />
<br />
==== GPUImageDataManager ====<br />
GPU data manager for GPUImage data, derived from GPUDataManager base class.<br />
<br />
=== GPUContextManager ===<br />
Manage GPU contexts and Command Queues.<br />
<br />
=== GPUKernelManager ===<br />
Manage GPU programs and kernels, and execute kernels.<br />
<br />
=== GPUImageToImageFilter ===<br />
Base class for GPU-based ImageToImage filters. To write your own filter, derive a child class from this base class and implement GPUGenerateDate() accordingly.<br />
<br />
==== GPUMeanImageFilter ====<br />
Mean image filter implementation.<br />
<br />
=== GPUInPlaceImageFilter ===<br />
Base class for GPU-based inplace image filters. Input and output image is same. Graft() for GPU data is implemented.<br />
<br />
==== GPUBinaryThresholdImageFilter ====<br />
Binary threshold image filter as an example of inplace image filter.<br />
<br />
=== GPUFiniteDifferenceImageFilter ===<br />
Base class for GPU-based finite difference image filters.<br />
<br />
== Usage Example ==<br />
<br />
ITK GPU classes hide low-level details to manage GPU resources and greatly reduce programmer's effort. You just need to create and modify GPU images as you would normally do for a regular ITK image (e.g., using pixel iterators, FillBuffer(), or SetPixel()). A GPU kernel can be created by as simple as using only three lines of code (creating kernel manager, loading source program, and creating kernel). After running a kernel on the GPU images, you can access pixel values using normal ITK pixel access APIs (e.g., GetPixel()). Synchronization between the CPU and GPU will be performed automatically and efficiently (lazy-evaluation), transparent to the users. Example:<br />
<br />
<pre><br />
typedef itk::GPUImage<float, 2> GPUImage1f;<br />
<br />
//<br />
// Create GPU images as normal itk image<br />
//<br />
GPUImage1f::Pointer srcA, srcB, dest;<br />
srcA = GPUImage1f::New();<br />
srcB = GPUImage1f::New();<br />
dest = GPUImage1f::New();<br />
<br />
//<br />
// Initialize GPU images as you normally do for regular itk images<br />
//<br />
srcA->FillBuffer(1.0f);<br />
srcB->FillBuffer(2.0f);<br />
dest->FillBuffer(3.0f);<br />
<br />
//<br />
// Create GPU program object<br />
//<br />
GPUKernelManager::Pointer kernelManager = GPUKernelManager::New();<br />
<br />
//<br />
// Load OpenCL source code and compile<br />
//<br />
kernelManager->LoadProgramFromFile("ImageOps.cl");<br />
<br />
//<br />
// Create kernel<br />
//<br />
int kernel_add = kernelManager->CreateKernel("ImageAdd");<br />
<br />
//<br />
// Set parameters<br />
//<br />
unsigned int nElem = 65536;<br />
kernelManager->SetKernelArgWithImage(kernel_add, 0, srcA->GetGPUDataManager());<br />
kernelManager->SetKernelArgWithImage(kernel_add, 1, srcB->GetGPUDataManager());<br />
kernelManager->SetKernelArgWithImage(kernel_add, 2, dest->GetGPUDataManager());<br />
kernelManager->SetKernelArg(kernel_add, 3, sizeof(unsigned int), &nElem);<br />
<br />
//<br />
// Launch Kernel<br />
//<br />
kernelManager->LaunchKernel2D(kernel_add, 16, 16, 16, 16);<br />
</pre><br />
<br />
== Latest Code ==<br />
* git@github.com:graphor/ITK.git (branch: GPU-Alpha)<br />
<br />
== ToDo List ==<br />
<br />
* GPUThreadedGenerateData() for multi-GPU support<br />
* Context/device management<br />
* InPlace GPU filter base class<br />
** Grafting for GPU data object<br />
<br />
== Plans ==<br />
<br />
=== GPU image class ===<br />
<br />
We propose a new GPU image class, itk::GPUImage,<br />
which provides a GPU data container and functions for implicit and explicit data transfers<br />
between the CPU and the GPU memory spaces. itk::GPUImage will contain two snapshots<br />
of the current image—one on the CPU and one on the GPU—but provide the functionality of<br />
a single image to the user. itk::GPUImage inherits all the public functions from itk::Image,<br />
so it can be used with the existing CPU ITK image filters as before. All the pixel operators,<br />
for example GetPixel(), and the image iterators can be used to modify pixel values on the<br />
CPU side. Conversely, GPU code will modify the pixel values on the GPU side. We propose<br />
an automatic synchronization mechanism between the CPU and GPU buffers, transparent to<br />
the user. Specifically, we propose the following functionalities for the ITK GPU image class:<br />
<br />
* Efficient GPU memory management<br />
* CPU and GPU synchronization scheme<br />
* GPU buffer interface for direct access<br />
<br />
=== GPU support for ITK multithreading model ===<br />
<br />
We will extend the ITK multithreaded architecture by introducing two new virtual functions, GPUGenerateData()<br />
and GPUThreadedGenerateData(). These methods will borrow the implicit thread management<br />
design from the existing architecture but manage threads based on GPU resources and<br />
not CPU resources. When the filter is called, a superclass of the filter will decide between<br />
single or multi-threaded execution and determine where to run the code, either on a CPU or<br />
GPU. The superclass will spawn threads and call one of the four functions accordingly.<br />
<br />
=== Filter API to support GPU code ===<br />
<br />
We will implement a filter class that has an API to execute GPU code written in OpenCL.<br />
<br />
=== Basic GPU image operators ===<br />
<br />
We propose a set of basic GPU image operators and filters that can be used as building blocks for more complicated numerical algorithms, such as:<br />
<br />
* Addition, subtraction, division, multiplication, inner product, reduction, copy and assignment operators<br />
* Neighborhood operator filter (for convolution-type filter)<br />
<br />
=== Wish List of Classes to Support GPU ===<br />
<br />
* [[ITK_Release_4/GPU Acceleration/Wish List|Wish List of Filters to Support]]<br />
<br />
== Target architecture ==<br />
<br />
We are going to use OpenCL to implement GPU code for wide applicability (Intel, AMD, and NVIDIA). We will consider supporting NVIDIA CUDA as well if required (for example, to employ existing GPU libraries, such as CUFFT or CUBLAS).<br />
<br />
Architectures that have been confirmed to work as of ITK 4.2:<br />
{| border="1"<br />
|- bgcolor="#abcdef"<br />
! OS !! GPU !! Driver !! OpenCL !! Test Status<br />
|-<br />
|Mac 10.6.8 || NVIDIA GeForce GT 120 (9500 GT) || nvidia, included with OS || v 12.3.6, get info string 1.5.6 || PASS<br />
|-<br />
|Mac 10.7.? || NVIDIA GeForce 9400M and NVIDIA GeForce 9600M GT || included with OS || ? || ? <br />
|-<br />
|Mac 10.7.3 || ATI Radeon HD 5870 || nvidia, included with OS || ? || 3D Mean Filter FAILS<br />
|-<br />
|Mac 10.7.2 || NVIDIA GeForce GT 120 (9500 GT) || nvidia, included with OS || v 1.50.63, get info string 1.50.63 || ?<br />
|-<br />
|Linux OpenSuse 12.1 (x86_64) || NVIDIA Quadro FX 5600 || x86_64 295.33 || nvidia Revision 10327 || PASS<br />
|-<br />
|Linux OpenSuse 12.1 (x86_64) || NVIDIA GeForce GT120 (9500 GT) || x86_64 295.40-15.1 || nvidia 295.40-15.1 || PASS<br />
|-<br />
|Linux OpenSuse 12.1 (x86_64) || NVIDIA GeForce GT120 (9500 GT) || x86_64 295.40-15.1 || intel 1.5 x64 || PASS<br />
|-<br />
|Windows 7 Professional SP1 (64-bit) || NVIDIA GeForce 8800 GTX || 8.17.12.8562 (285.62) || NVIDIA GPU Computing SDK 4.0.19 Win 64 || PASS<br />
|-<br />
|Windows 7 Professional SP1 (64-bit) || NVIDIA GeForce 9500 GT (GT120) || 8.17.12.9610 || Intel SDK for ocl applications 2012 x64 || ?<br />
|-<br />
|Windows 7 Professional SP1 (64-bit) || NVIDIA GeForce 9500 GT (GT120) || 8.17.12.9610 || NVIDIA GPU Computing SDK 4.2.9 Win 64 || PASS <br />
|-<br />
|Windows Vista Ultimate SP2 (64-bit) || ATI FireGL V7600 || 8.850.7.2000 || AMD APP SDK v2.5 Windows 64 (AMD APP SDK Runtime 2.4.595.10) || Code compiles, all tests fail because GPU device not found. According to http://forums.amd.com/devforum/messageview.cfm?catid=390&threadid=126463, this card is not supported<br />
|}<br />
<br />
<br />
Potential error messages and fixes<br />
{| border="1"<br />
|- bgcolor="#abcdef"<br />
!Error !! OS !! Fix<br />
|-<br />
|clGetPlatformIDs returns -1001 and 0 platforms || Linux || Make sure permissions for /dev/nvidia0 and /dev/nvidiactl are rw for your user<br />
|-<br />
|error : Instruction ‘mov’ requires SM 1.3 or higher, or map_f64_to_f32 directive … ptxas fatal : Ptx assembly aborted due to errors … ptxas application ptx input, line 109; warning : Double is not supported. Demoting to float … || Any ||Not all GPUs and/or drivers support double precision calculations. Be sure to only instantiate floating point or integer filter types<br />
|}<br />
<br />
== Instructions for Installing OpenCL ==<br />
<br />
* http://www.khronos.org/opencl/<br />
<br />
In specific platforms <br />
<br />
* http://www.nvidia.com/object/cuda_opencl_new.html<br />
* http://developer.amd.com/zones/OpenCLZone/pages/default.aspx<br />
* http://software.intel.com/en-us/articles/intel-opencl-sdk/<br />
<br />
= Tcons =<br />
<br />
* [[ITK_Release_4/GPU Acceleration/Tcon-2011-01-28|Tcon 2011-01-28]]<br />
* [[ITK_Release_4/GPU Acceleration/Tcon-2011-01-06|Tcon 2011-01-06]]<br />
* [[ITK_Release_4/GPU Acceleration/Tcon-2010-11-22|Tcon 2010-11-22]]</div>Zygmunthttps://public.kitware.com/Wiki/index.php?title=ITK/Release_4/GPU_Acceleration&diff=48136ITK/Release 4/GPU Acceleration2012-06-22T21:23:45Z<p>Zygmunt: /* Target architecture */</p>
<hr />
<div>This page outlines the proposed GPU acceleration framework in ITK v4. The GPU has become a cost-effective parallel computing platform for computationally expensive problems. Although many ITK image filters can benefit from the GPU, there has been no GPU support in ITK as of today. We propose to add a new data structure, framework, and some basic image operations that support the GPU in order to allow ITK developers to easily implement their filters running on both the CPU and GPU.<br />
<br />
== Goals ==<br />
<br />
* Add the support for the GPU processing in ITK<br />
** GPU image class<br />
** Extension of ITK multithreading model to support the GPU<br />
** Pipeline supporting both CPU and GPU filters and images<br />
** Basic GPU image operators<br />
<br />
== Authors ==<br />
<br />
GPU acceleration for ITK v4 has been proposed by Harvard University and University of Utah (PI: Jim Miller from GE).<br />
University of Pennsylvania is also participating for GPU image registration.<br />
<br />
* Won-Ki Jeong (wkjeong -at- seas.harvard.edu)<br />
* Baohua Wu (baohua -at- seas.upenn.edu)<br />
<br />
== Summary ==<br />
<br />
* GPU image class that manages GPU and CPU data transparently from users<br />
* GPU image filter base class that supports pipelining<br />
* GPU data, context, kernel manager that help users to use OpenCL code easily with ITK<br />
* Object factory automatically creates images and filters for target architecture<br />
* GPU inPlace image filter<br />
* GPU Finite Difference Image Filter and Function classes<br />
<br />
== Example Filters ==<br />
<br />
* GPUMeanImageFilter<br />
* GPUBinaryThresholdImageFilter<br />
* GPUGradientAnisotropicDiffusionImageFilter<br />
* GPUDemonsRegistrationFilter<br />
<br />
== New Classes ==<br />
<br />
=== GPUImage ===<br />
GPU image class.<br />
<br />
=== GPUDataManager ===<br />
Manage GPU data container and synchronize between the CPU and GPU. Used by GPU image class.<br />
<br />
==== GPUImageDataManager ====<br />
GPU data manager for GPUImage data, derived from GPUDataManager base class.<br />
<br />
=== GPUContextManager ===<br />
Manage GPU contexts and Command Queues.<br />
<br />
=== GPUKernelManager ===<br />
Manage GPU programs and kernels, and execute kernels.<br />
<br />
=== GPUImageToImageFilter ===<br />
Base class for GPU-based ImageToImage filters. To write your own filter, derive a child class from this base class and implement GPUGenerateDate() accordingly.<br />
<br />
==== GPUMeanImageFilter ====<br />
Mean image filter implementation.<br />
<br />
=== GPUInPlaceImageFilter ===<br />
Base class for GPU-based inplace image filters. Input and output image is same. Graft() for GPU data is implemented.<br />
<br />
==== GPUBinaryThresholdImageFilter ====<br />
Binary threshold image filter as an example of inplace image filter.<br />
<br />
=== GPUFiniteDifferenceImageFilter ===<br />
Base class for GPU-based finite difference image filters.<br />
<br />
== Usage Example ==<br />
<br />
ITK GPU classes hide low-level details to manage GPU resources and greatly reduce programmer's effort. You just need to create and modify GPU images as you would normally do for a regular ITK image (e.g., using pixel iterators, FillBuffer(), or SetPixel()). A GPU kernel can be created by as simple as using only three lines of code (creating kernel manager, loading source program, and creating kernel). After running a kernel on the GPU images, you can access pixel values using normal ITK pixel access APIs (e.g., GetPixel()). Synchronization between the CPU and GPU will be performed automatically and efficiently (lazy-evaluation), transparent to the users. Example:<br />
<br />
<pre><br />
typedef itk::GPUImage<float, 2> GPUImage1f;<br />
<br />
//<br />
// Create GPU images as normal itk image<br />
//<br />
GPUImage1f::Pointer srcA, srcB, dest;<br />
srcA = GPUImage1f::New();<br />
srcB = GPUImage1f::New();<br />
dest = GPUImage1f::New();<br />
<br />
//<br />
// Initialize GPU images as you normally do for regular itk images<br />
//<br />
srcA->FillBuffer(1.0f);<br />
srcB->FillBuffer(2.0f);<br />
dest->FillBuffer(3.0f);<br />
<br />
//<br />
// Create GPU program object<br />
//<br />
GPUKernelManager::Pointer kernelManager = GPUKernelManager::New();<br />
<br />
//<br />
// Load OpenCL source code and compile<br />
//<br />
kernelManager->LoadProgramFromFile("ImageOps.cl");<br />
<br />
//<br />
// Create kernel<br />
//<br />
int kernel_add = kernelManager->CreateKernel("ImageAdd");<br />
<br />
//<br />
// Set parameters<br />
//<br />
unsigned int nElem = 65536;<br />
kernelManager->SetKernelArgWithImage(kernel_add, 0, srcA->GetGPUDataManager());<br />
kernelManager->SetKernelArgWithImage(kernel_add, 1, srcB->GetGPUDataManager());<br />
kernelManager->SetKernelArgWithImage(kernel_add, 2, dest->GetGPUDataManager());<br />
kernelManager->SetKernelArg(kernel_add, 3, sizeof(unsigned int), &nElem);<br />
<br />
//<br />
// Launch Kernel<br />
//<br />
kernelManager->LaunchKernel2D(kernel_add, 16, 16, 16, 16);<br />
</pre><br />
<br />
== Latest Code ==<br />
* git@github.com:graphor/ITK.git (branch: GPU-Alpha)<br />
<br />
== ToDo List ==<br />
<br />
* GPUThreadedGenerateData() for multi-GPU support<br />
* Context/device management<br />
* InPlace GPU filter base class<br />
** Grafting for GPU data object<br />
<br />
== Plans ==<br />
<br />
=== GPU image class ===<br />
<br />
We propose a new GPU image class, itk::GPUImage,<br />
which provides a GPU data container and functions for implicit and explicit data transfers<br />
between the CPU and the GPU memory spaces. itk::GPUImage will contain two snapshots<br />
of the current image—one on the CPU and one on the GPU—but provide the functionality of<br />
a single image to the user. itk::GPUImage inherits all the public functions from itk::Image,<br />
so it can be used with the existing CPU ITK image filters as before. All the pixel operators,<br />
for example GetPixel(), and the image iterators can be used to modify pixel values on the<br />
CPU side. Conversely, GPU code will modify the pixel values on the GPU side. We propose<br />
an automatic synchronization mechanism between the CPU and GPU buffers, transparent to<br />
the user. Specifically, we propose the following functionalities for the ITK GPU image class:<br />
<br />
* Efficient GPU memory management<br />
* CPU and GPU synchronization scheme<br />
* GPU buffer interface for direct access<br />
<br />
=== GPU support for ITK multithreading model ===<br />
<br />
We will extend the ITK multithreaded architecture by introducing two new virtual functions, GPUGenerateData()<br />
and GPUThreadedGenerateData(). These methods will borrow the implicit thread management<br />
design from the existing architecture but manage threads based on GPU resources and<br />
not CPU resources. When the filter is called, a superclass of the filter will decide between<br />
single or multi-threaded execution and determine where to run the code, either on a CPU or<br />
GPU. The superclass will spawn threads and call one of the four functions accordingly.<br />
<br />
=== Filter API to support GPU code ===<br />
<br />
We will implement a filter class that has an API to execute GPU code written in OpenCL.<br />
<br />
=== Basic GPU image operators ===<br />
<br />
We propose a set of basic GPU image operators and filters that can be used as building blocks for more complicated numerical algorithms, such as:<br />
<br />
* Addition, subtraction, division, multiplication, inner product, reduction, copy and assignment operators<br />
* Neighborhood operator filter (for convolution-type filter)<br />
<br />
=== Wish List of Classes to Support GPU ===<br />
<br />
* [[ITK_Release_4/GPU Acceleration/Wish List|Wish List of Filters to Support]]<br />
<br />
== Target architecture ==<br />
<br />
We are going to use OpenCL to implement GPU code for wide applicability (Intel, AMD, and NVIDIA). We will consider supporting NVIDIA CUDA as well if required (for example, to employ existing GPU libraries, such as CUFFT or CUBLAS).<br />
<br />
Architectures that have been confirmed to work as of ITK 4.2:<br />
{| border="1"<br />
|- bgcolor="#abcdef"<br />
! OS !! GPU !! Driver !! OpenCL !! Test Status<br />
|-<br />
|Mac 10.6.8 || NVIDIA GeForce GT 120 (9500 GT) || nvidia, included with OS || v 12.3.6, get info string 1.5.6 || PASS<br />
|-<br />
|Mac 10.7.? || NVIDIA GeForce 9400M and NVIDIA GeForce 9600M GT || included with OS || ? || ? <br />
|-<br />
|Mac 10.7.3 || ATI Radeon HD 5870 || nvidia, included with OS || ? || 3D Mean Filter FAILS<br />
|-<br />
|Mac 10.7.2 || NVIDIA GeForce GT 120 (9500 GT) || nvidia, included with OS || v 1.50.63, get info string 1.50.63 || ?<br />
|-<br />
|Linux OpenSuse 12.1 (x86_64) || NVIDIA Quadro FX 5600 || x86_64 295.33 || nvidia Revision 10327 || PASS<br />
|-<br />
|Linux OpenSuse 12.1 (x86_64) || NVIDIA GeForce GT120 (9500 GT) || x86_64 295.40-15.1 || nvidia 295.40-15.1 || PASS<br />
|-<br />
|Linux OpenSuse 12.1 (x86_64) || NVIDIA GeForce GT120 (9500 GT) || x86_64 295.40-15.1 || intel 1.5 x64 || PASS<br />
|-<br />
|Windows 7 Professional SP1 (64-bit) || NVIDIA GeForce 8800 GTX || 8.17.12.8562 (285.62) || NVIDIA GPU Computing SDK 4.0.19 Win 64 || PASS<br />
|-<br />
|Windows 7 Professional SP1 (64-bit) || NVIDIA GeForce 9500 GT (GT120) || 8.17.12.9610 || Intel SDK for ocl applications 2012 x64 || ?<br />
|-<br />
|Windows 7 Professional SP1 (64-bit) || NVIDIA GeForce 9500 GT (GT120) || 8.17.12.9610 || NVIDIA GPU Computing SDK 4.2.9 Win 64 || ? <br />
|-<br />
|Windows Vista Ultimate SP2 (64-bit) || ATI FireGL V7600 || 8.850.7.2000 || AMD APP SDK v2.5 Windows 64 (AMD APP SDK Runtime 2.4.595.10) || Code compiles, all tests fail because GPU device not found. According to http://forums.amd.com/devforum/messageview.cfm?catid=390&threadid=126463, this card is not supported<br />
|}<br />
<br />
<br />
Potential error messages and fixes<br />
{| border="1"<br />
|- bgcolor="#abcdef"<br />
!Error !! OS !! Fix<br />
|-<br />
|clGetPlatformIDs returns -1001 and 0 platforms || Linux || Make sure permissions for /dev/nvidia0 and /dev/nvidiactl are rw for your user<br />
|-<br />
|error : Instruction ‘mov’ requires SM 1.3 or higher, or map_f64_to_f32 directive … ptxas fatal : Ptx assembly aborted due to errors … ptxas application ptx input, line 109; warning : Double is not supported. Demoting to float … || Any ||Not all GPUs and/or drivers support double precision calculations. Be sure to only instantiate floating point or integer filter types<br />
|}<br />
<br />
== Instructions for Installing OpenCL ==<br />
<br />
* http://www.khronos.org/opencl/<br />
<br />
In specific platforms <br />
<br />
* http://www.nvidia.com/object/cuda_opencl_new.html<br />
* http://developer.amd.com/zones/OpenCLZone/pages/default.aspx<br />
* http://software.intel.com/en-us/articles/intel-opencl-sdk/<br />
<br />
= Tcons =<br />
<br />
* [[ITK_Release_4/GPU Acceleration/Tcon-2011-01-28|Tcon 2011-01-28]]<br />
* [[ITK_Release_4/GPU Acceleration/Tcon-2011-01-06|Tcon 2011-01-06]]<br />
* [[ITK_Release_4/GPU Acceleration/Tcon-2010-11-22|Tcon 2010-11-22]]</div>Zygmunthttps://public.kitware.com/Wiki/index.php?title=ITK/Release_4&diff=43559ITK/Release 42011-09-27T13:33:11Z<p>Zygmunt: /* A2D2s */</p>
<hr />
<div>= Overview =<br />
<br />
* [[ITK_Release_4.0]]<br />
<br />
= Dashboard of ITKv4 Efforts =<br />
<br />
== Completed Efforts ==<br />
Defined as having examples, tests, migration guide, and documentation; as well as being accepted through gerrit<br />
<br />
* Modernizing ITK's Software Process<br />
** [[ITK_Release_4/Testing_Data]]<br />
** [[ITK_Release_4/Testing_On_Demand]]<br />
** [[ITK_Release_4/UnitTesting]]<br />
* Managing Contributions<br />
** [[ITK_Release_4/Modularization]]<br />
** [[ITK_Release_4/New_Code_Contribution_Process]]<br />
<br />
== Ongoing Efforts ==<br />
Defined as having completed design with work underway. High likelihood of completion by Dec 31, 2011.<br />
<br />
* [[ITK_Release_4/DICOM]]<br />
* [[ITK_Release_4/Wrapping]]<br />
* [[ITK_Release_4/SimpleITK]]<br />
* [[ITK_Release_4/Refactoring_Level_Set_Framework]]<br />
* [[ITK_Release_4/Migration_Plan]]<br />
* [[ITK_Release_4/Refactor_Numerical_Libraries]]<br />
* [[ITK_Release_4/Why Switch to ITKv4]]<br />
* [[ITK_Release_4/Outreach]]<br />
* [[ITK_Release_4/Refactoring_FEM_Framework]]<br />
* [[ITK_Release_4/Enhancing_Image_Registration_Framework]]<br />
<br />
== Demonstrations/Discussions ==<br />
Defined as low likelihood of completion, e.g., limited to being a concept demonstration by Dec 31, 2011.<br />
<br />
* [[ITK_Release_4/Coding_Style]]<br />
* [[ITK_Release_4/SpatialObjects]]<br />
* [[ITK_Release_4/GPU_Acceleration]]<br />
* [[ITK_Release_4/Global_Code_Review]]<br />
<br />
= A2D2s =<br />
{| border="1"<br />
|- bgcolor="#abcdef"<br />
! A2D2 !! Discussion !! Ongoing !! Committed to Gerrit !! Completed !! Notes<br />
|-<br />
| [[ITK_Release_4/A2D2_Projects|Lesion Sizing Toolkit]] || X || X || X || X ||<br />
|-<br />
| [[ITK_Release_4/A2D2_Projects/SCORE|SCORE]] || X || X || || ||<br />
|-<br />
| [[ITK_Release_4/A2D2_Projects/SCORE++|SCORE++]] || X || X || || ||<br />
|-<br />
| [[ITK_Release_4/A2D2_Projects/Video Bridge|Video Bridge]] || X || X || || || [[ITK_Release_4/Outreach/Conferences/CVPR_2011 | CVPR Demonstration]]<br />
|-<br />
| [[ITK_Release_4/A2D2_Projects/Registration Parameter Tuning |Registration Parameter Tuning]] || X || X || || ||<br />
|-<br />
| [[ITK_Release_4/A2D2_Projects/VideoGrabber |VideoGrabber]] || || || || ||<br />
|-<br />
| [[ITK_Release_4/A2D2_Projects/Deconvolution Algorithms|Deconvolution Algorithms]] || || || || ||<br />
|-<br />
| [[ITK_Release_4/A2D2_Projects/Microstructure for Cancer Studies|Microstructure for Cancer Studies]] || || || || ||<br />
|-<br />
| [[ITK_Release_4/A2D2_Projects/Large Histology Segmentation and Visualization|Large Histology Segmentation and Visualization]] || || || || ||<br />
|-<br />
| [[ITK_Release_4/A2D2_Projects/Physics-Based Non-rigid Registration|3D Real-time Physics-based Non-rigid Registration for Image-guided Neurosurgery]] || || || || ||<br />
|-<br />
| [[ITK_Release_4/A2D2_Projects|Denoising]] || X || X || || || <br />
|}</div>Zygmunthttps://public.kitware.com/Wiki/index.php?title=ITK/Fall_v4_2011_Meeting&diff=43461ITK/Fall v4 2011 Meeting2011-09-20T20:49:48Z<p>Zygmunt: /* Attendance Matrix */</p>
<hr />
<div>ITKv4 Fall Meeting<br />
<br />
*'''Dates: September 27-28, 2011, Work day September 29, 2011'''<br />
** Start Time: 0800 (TBD), September 27<br />
** End Time: 1600 (TBD), September 28<br />
** Hackathon: 0800-1700 (TBD), September 29<br />
*'''City: Bethesda, MD'''<br />
*'''Location: NLM'''<br />
<br />
UPDATE: The hotel rooming block will be available until Wednesday, September 7, 2011.<br />
<br />
== Travel / Hotel Information ==<br />
<br />
NEW - The reservation deadline for the rooming block has been extended until September 7, 2011.<br />
<br />
The code for the block of rooms is '''"ITK"'''<br />
<br />
The Meeting will take place at the NLM in Bethesda, MD<br />
<br />
A block of hotel rooms has been set aside at the nearby DoubleTree Bethesda Hotel, $269/night.<br />
<br />
<br />
Doubletree Hotel Bethesda<br />
8120 Wisconsin Ave., Bethesda, MD<br />
(301) 652-2000<br />
<br />
Please make reservations before *September 7, 2011.* (extended from the original date of 2-Sep-2011).<br />
<br />
Points of interest for your ITK Travelers:<br />
- Guestrooms have Complimentary Wireless Internet<br />
- Location and Transportation to NIH<br />
4 Blocks or Just a 10 Minute Walk to Campus Visitors Entrance<br />
Hotel Provides an Hourly Complimentary Shuttle to Campus<br />
<br />
- Hotel has 4 Dining Options on Property<br />
The Cup- Starbucks Coffee, Pastries, and To- Go Sandwiches and Salads<br />
The OZ Restaurant- 3 Sophisticated Meals a Day: Full American Buffet Breakfast, Buffet and A La Carte Lunch Menu, Elegant yet Comforting Dinner Entrees and Ambiance<br />
The Bar- Beer on Tap, Mixed Drinks, 60 Wines by the Glass, and a Great Bar Menu, Perfect for the Gov. Per Diem Traveler<br />
Room Service- Full Menu Available 6:00am- 11:00pm Daily<br />
- Parking<br />
Valet Parking is $20 Overnight<br />
Public Parking Lot Behind Hotel is $0.75 per Hour<br />
- Other Complimentary Services<br />
24- Hour Gym<br />
24- Hour Free and Unlimited Business Center<br />
Wireless Internet in Lobby<br />
<br />
The hotel website is: <br />
<br />
http://www.doubletreebethesda.com<br />
<br />
<br />
* Additional details will be provided in the near future<br />
<br />
== Registration Information ==<br />
<br />
== Meeting Room ==<br />
<br />
The opening session of the 2011 Fall ITKv4 meeting will be held in the NLM Visitor's Center, 9 AM-Noon, Tuesday 27-September-2001.<br />
<br />
The remaining sessions will be held in the NLM Board Room. Networking/WiFi support will be available in the Board Room.<br />
<br />
== Meeting Agenda ==<br />
<br />
=== Must See Topics ===<br />
<br />
Carried-over from June, 2011 meeting<br />
<br />
* [[ITK_Release_4 | ITKv4 Status: Beta Release]]<br />
<br />
* Projects<br />
** [[ITK_Release_4/GPU_Acceleration]]<br />
** [[ITK_Release_4/Modularization]]<br />
** [[ITK_Release_4/SimpleITK]]<br />
** [[ITK_Release_4/Wrapping]]<br />
** [[ITK_Release_4/DICOM]]<br />
** [[ITK_Release_4/Enhancing_Image_Registration_Framework]]<br />
** [[ITK_Release_4/Migration_Plan]]<br />
** [[ITK_Release_4/Refactoring_Level_Set_Framework]]<br />
** [[ITK_Release_4/ITK 3.x Migration Guidelines]]<br />
<br />
=== September 27th - A2D2 Summit ===<br />
<br />
* [[ITK_Release_4/The Team/A2D2 Development Team|A2D2 Development Team]]<br />
* [[ITK_Release_4/The Team/ITKv4 Development Team|ITKv4 Development Team]]<br />
<br />
* 8:30 am Welcome: Terry Yoo<br />
<br />
<br />
=== September 28th ===<br />
<br />
* 8:30 am Welcome, Questions, Concerns<br />
<br />
=== September 29th ===<br />
<br />
* [[Fall_ITKv4_2011_Meeting/Hackathon|Hackaton]]<br />
<br />
== Attendees ==<br />
<br />
Please add your name to the list below if you are planning to attend.<br />
<br />
=== Attendance Matrix ===<br />
<br />
{| border="1"<br />
|- bgcolor="#abcdef"<br />
! Name !! Organization !! Project !! September 27 !! September 28 !! September 29<br />
|-<br />
| Luis Ibanez || Kitware || ITKv4 || X || X || X<br />
|-<br />
| Bill Hoffman || Kitware || ITKv4 || X || X || <br />
|-<br />
| Stephen Aylward || Kitware || ITKv4 || X || X ||<br />
|-<br />
| Matt McCormick || Kitware || ITKv4 || X || X || X<br />
|-<br />
| Xiaoxiao Liu || Kitware || ITKv4 || X || X || X<br />
|-<br />
| Andinet Enquobahrie || Kitware || ITKv4 || X || X || X<br />
|-<br />
| Amitha Perera || Kitware || A2D2-VideoExt || X || X ||<br />
|-<br />
| Patrick Reynolds || Kitware || A2D2-(VideoExt,SCORE,SCORE++) || X || X || X<br />
|-<br />
| Andrew Wasem || CoSMo || ITKv4 || X || X ||<br />
|-<br />
|-<br />
| Raghu Machiraju || OSU || A2D2s || X || ||<br />
|-<br />
| Marc Niethammer || UNC || A2D2-Deconvolution || X || X ||<br />
|-<br />
| Cory Quammen || UNC || A2D2-Deconvolution || X || X ||<br />
|-<br />
| Hans Johnson || UIowa || ITKv4 || X || X || X <br />
|-<br />
| Bill Ryan || Mayo || ITKv4 || X || X || X <br />
|-<br />
| Sean Megason || HMS || ITKv4 || X || X || <br />
|-<br />
| Arnaud Gelas || HMS || ITKv4 || X || X || X<br />
|-<br />
| Bill Lorensen || Noware || ITK... || X || X ||<br />
|-<br />
| Marcel Prastawa || Utah || A2D2-SCORE || X || X || X<br />
|-<br />
| Suyash Awate || Utah || A2D2-Denoising || X || X || <br />
|-<br />
| Kris Zygmunt || Utah || A2D2-Denoising || X || X || <br />
|-<br />
| Michel Audette || Old Dominion || A2D2-FEM 3D registration || X || || <br />
|-<br />
| Jim Miller || GE Research || ITKv4 || X || X || <br />
|-<br />
| Dan Blezek || Mayo Clinic || ITKv4 || X || X || <br />
|}</div>Zygmunthttps://public.kitware.com/Wiki/index.php?title=ITK/Fall_v4_2011_Meeting&diff=43460ITK/Fall v4 2011 Meeting2011-09-20T20:49:27Z<p>Zygmunt: /* Attendance Matrix */</p>
<hr />
<div>ITKv4 Fall Meeting<br />
<br />
*'''Dates: September 27-28, 2011, Work day September 29, 2011'''<br />
** Start Time: 0800 (TBD), September 27<br />
** End Time: 1600 (TBD), September 28<br />
** Hackathon: 0800-1700 (TBD), September 29<br />
*'''City: Bethesda, MD'''<br />
*'''Location: NLM'''<br />
<br />
UPDATE: The hotel rooming block will be available until Wednesday, September 7, 2011.<br />
<br />
== Travel / Hotel Information ==<br />
<br />
NEW - The reservation deadline for the rooming block has been extended until September 7, 2011.<br />
<br />
The code for the block of rooms is '''"ITK"'''<br />
<br />
The Meeting will take place at the NLM in Bethesda, MD<br />
<br />
A block of hotel rooms has been set aside at the nearby DoubleTree Bethesda Hotel, $269/night.<br />
<br />
<br />
Doubletree Hotel Bethesda<br />
8120 Wisconsin Ave., Bethesda, MD<br />
(301) 652-2000<br />
<br />
Please make reservations before *September 7, 2011.* (extended from the original date of 2-Sep-2011).<br />
<br />
Points of interest for your ITK Travelers:<br />
- Guestrooms have Complimentary Wireless Internet<br />
- Location and Transportation to NIH<br />
4 Blocks or Just a 10 Minute Walk to Campus Visitors Entrance<br />
Hotel Provides an Hourly Complimentary Shuttle to Campus<br />
<br />
- Hotel has 4 Dining Options on Property<br />
The Cup- Starbucks Coffee, Pastries, and To- Go Sandwiches and Salads<br />
The OZ Restaurant- 3 Sophisticated Meals a Day: Full American Buffet Breakfast, Buffet and A La Carte Lunch Menu, Elegant yet Comforting Dinner Entrees and Ambiance<br />
The Bar- Beer on Tap, Mixed Drinks, 60 Wines by the Glass, and a Great Bar Menu, Perfect for the Gov. Per Diem Traveler<br />
Room Service- Full Menu Available 6:00am- 11:00pm Daily<br />
- Parking<br />
Valet Parking is $20 Overnight<br />
Public Parking Lot Behind Hotel is $0.75 per Hour<br />
- Other Complimentary Services<br />
24- Hour Gym<br />
24- Hour Free and Unlimited Business Center<br />
Wireless Internet in Lobby<br />
<br />
The hotel website is: <br />
<br />
http://www.doubletreebethesda.com<br />
<br />
<br />
* Additional details will be provided in the near future<br />
<br />
== Registration Information ==<br />
<br />
== Meeting Room ==<br />
<br />
The opening session of the 2011 Fall ITKv4 meeting will be held in the NLM Visitor's Center, 9 AM-Noon, Tuesday 27-September-2001.<br />
<br />
The remaining sessions will be held in the NLM Board Room. Networking/WiFi support will be available in the Board Room.<br />
<br />
== Meeting Agenda ==<br />
<br />
=== Must See Topics ===<br />
<br />
Carried-over from June, 2011 meeting<br />
<br />
* [[ITK_Release_4 | ITKv4 Status: Beta Release]]<br />
<br />
* Projects<br />
** [[ITK_Release_4/GPU_Acceleration]]<br />
** [[ITK_Release_4/Modularization]]<br />
** [[ITK_Release_4/SimpleITK]]<br />
** [[ITK_Release_4/Wrapping]]<br />
** [[ITK_Release_4/DICOM]]<br />
** [[ITK_Release_4/Enhancing_Image_Registration_Framework]]<br />
** [[ITK_Release_4/Migration_Plan]]<br />
** [[ITK_Release_4/Refactoring_Level_Set_Framework]]<br />
** [[ITK_Release_4/ITK 3.x Migration Guidelines]]<br />
<br />
=== September 27th - A2D2 Summit ===<br />
<br />
* [[ITK_Release_4/The Team/A2D2 Development Team|A2D2 Development Team]]<br />
* [[ITK_Release_4/The Team/ITKv4 Development Team|ITKv4 Development Team]]<br />
<br />
* 8:30 am Welcome: Terry Yoo<br />
<br />
<br />
=== September 28th ===<br />
<br />
* 8:30 am Welcome, Questions, Concerns<br />
<br />
=== September 29th ===<br />
<br />
* [[Fall_ITKv4_2011_Meeting/Hackathon|Hackaton]]<br />
<br />
== Attendees ==<br />
<br />
Please add your name to the list below if you are planning to attend.<br />
<br />
=== Attendance Matrix ===<br />
<br />
{| border="1"<br />
|- bgcolor="#abcdef"<br />
! Name !! Organization !! Project !! September 27 !! September 28 !! September 29<br />
|-<br />
| Luis Ibanez || Kitware || ITKv4 || X || X || X<br />
|-<br />
| Bill Hoffman || Kitware || ITKv4 || X || X || <br />
|-<br />
| Stephen Aylward || Kitware || ITKv4 || X || X ||<br />
|-<br />
| Matt McCormick || Kitware || ITKv4 || X || X || X<br />
|-<br />
| Xiaoxiao Liu || Kitware || ITKv4 || X || X || X<br />
|-<br />
| Andinet Enquobahrie || Kitware || ITKv4 || X || X || X<br />
|-<br />
| Amitha Perera || Kitware || A2D2-VideoExt || X || X ||<br />
|-<br />
| Patrick Reynolds || Kitware || A2D2-(VideoExt,SCORE,SCORE++) || X || X || X<br />
|-<br />
| Andrew Wasem || CoSMo || ITKv4 || X || X ||<br />
|-<br />
|-<br />
| Raghu Machiraju || OSU || A2D2s || X || ||<br />
|-<br />
| Marc Niethammer || UNC || A2D2-Deconvolution || X || X ||<br />
|-<br />
| Cory Quammen || UNC || A2D2-Deconvolution || X || X ||<br />
|-<br />
| Hans Johnson || UIowa || ITKv4 || X || X || X <br />
|-<br />
| Bill Ryan || Mayo || ITKv4 || X || X || X <br />
|-<br />
| Sean Megason || HMS || ITKv4 || X || X || <br />
|-<br />
| Arnaud Gelas || HMS || ITKv4 || X || X || X<br />
|-<br />
| Bill Lorensen || Noware || ITK... || X || X ||<br />
|-<br />
| Marcel Prastawa || Utah || A2D2-SCORE || X || X || X<br />
|-<br />
| Suyash Awate || Utah || A2D2-Denoising || X || X || <br />
|-<br />
| Kris Zygmunt || Utah || A2D2-Denoising || X || X || <br />
| Michel Audette || Old Dominion || A2D2-FEM 3D registration || X || || <br />
|-<br />
| Jim Miller || GE Research || ITKv4 || X || X || <br />
|-<br />
| Dan Blezek || Mayo Clinic || ITKv4 || X || X || <br />
|}</div>Zygmunthttps://public.kitware.com/Wiki/index.php?title=ITK/Summer_v4_2011_Meeting&diff=41252ITK/Summer v4 2011 Meeting2011-06-27T15:39:05Z<p>Zygmunt: </p>
<hr />
<div>ITKv4 Summer Meeting<br />
<br />
*'''Dates: June 27-29, 2011''' <br />
*'''City: Chapel Hill, NC'''<br />
*'''Location: Franklin Hotel<br />
<br />
== Travel / Hotel Information ==<br />
<br />
The Meeting will take place at the Franklin Hotel.<br />
<br />
* http://franklinhotelnc-px.trvlclick.com/index.html<br />
<br />
Since the meeting starts at<br />
<br />
* 8 am on June 27th,<br />
<br />
we recommend people to arrange their hotel accommodation for the previous night!<br />
<br />
* Use the room group 'ITKV4'<br />
** Reservation line: 866.831.5999<br />
** Ask for the "room block" reserved under 'ITKV4'<br />
* The rate is $129 / Night<br />
<br />
== Registration Information ==<br />
<br />
* Download [[Media:ITKv4 Summer2011Meeting Registration.pdf |Registration Form]]<br />
* It is a fillable PDF form<br />
* Fill it up please.<br />
** Indicate the number of days that you are attending.<br />
** Registration fee = ( NumberOfDays * $65 );<br />
** Print it as a PDF file<br />
*** since otherwise the form is still modifiable<br />
* Send the processed form back to Kitware<br />
** email it at: admin at kitware dot com<br />
<br />
== Meeting Room ==<br />
<br />
<br />
== Meeting Agenda ==<br />
<br />
* '''WARNING : THE AGENDA WAS REORGANIZED ON MAY 27th : PLEASE REVIEW'''<br />
<br />
=== Must See Topics ===<br />
<br />
* BETA Release<br />
* GPU<br />
* Modularization<br />
* SimpleITK<br />
* DICOM<br />
* Registration Refactoring<br />
* LevelSet Refactoring<br />
<br />
=== Monday June 27th - A2D2 Summit ===<br />
<br />
* [[ITK_Release_4/The Team/A2D2 Development Team|A2D2 Development Team]]<br />
* [[ITK_Release_4/The Team/ITKv4 Development Team|ITKv4 Development Team]]<br />
<br />
==== Monday Morning ====<br />
<br />
* 8:30 am Welcome: Terry Yoo<br />
* 8:50 am State of the Toolkit: Hans Johnson [[http://www.vtk.org/Wiki/File:20110627ITKToolKitStatus.pdf#filelinks]] [[http://www.vtk.org/Wiki/File:20110627ITKToolKitStatus.pptx#filelinks]]<br />
* 9:10 am [[ITK_Release_4/New_Code_Contribution_Process|Procedures for integrating A2D2 contributions]] (Bill/Luis)<br />
* 9:30 am Split in to Focus Groups<br />
** '''Group1''' : Microscopy<br />
** '''Group2''' : Clinical Applications<br />
** '''Group3''' : Video<br />
** '''Group4''' : Data and Web-based Applications<br />
* 10:00 Break<br />
* 10:30 am Working Groups (continuation)<br />
** '''Group1''' : Microscopy<br />
** '''Group2''' : Clinical Applications<br />
** '''Group3''' : Video<br />
** '''Group4''' : Data and Web-based Applications<br />
* 12:00 pm Lunch<br />
<br />
==== Monday Afternoon ====<br />
<br />
* 1:00 pm Plenary: '''Group 1''' : 20min presentation + discussion<br />
* 2:00 pm Plenary: '''Group 2''' : 20min presentation + discussion [[Summer_ITKv4_ClinicalGroupMeetingNotes | Group 2 notes]]<br />
* 2:45 pm Break<br />
* 3:15 pm Plenary: '''Group 3''' : 20min presentation + discussion<br />
* 4:00 pm Plenary: '''Group 4''' : 20min presentation + discussion<br />
* 4:45 pm Adjourn<br />
<br />
==== Group Details ====<br />
<br />
===== Group 1: Microscopy and Histology =====<br />
<br />
# '''Ross Whitaker''' (designated speaker), '''Kris Zygmunt''' ''Fast Nonlocal Algorithms for Denoising Microscopy, MRI, and Ultrasound Images Using Nonparametric Neighborhood Statistics.'' [[Summer_ITKv4_2011_Meeting/A2D2/Denoising| Pre-Meeting Document]]<br />
# '''Marc Niethammer''' ''Adding Deconvolution Algorithms to ITK'' [[Summer_ITKv4_2011_Meeting/A2D2/Deconvolution| Pre-Meeting Document]]<br />
# '''Raghu Machiraju''' ''A Comprehensive Workflow for Robust Characterization of Microstructure for Cancer Studies''<br />
# '''Raghu Machiraju''' ''A Comprehensive Workflow for Large Histology Segmentation and Visualization''<br />
<br />
===== Group 2: Clinical Applications and CADs =====<br />
<br />
# '''Thomas Fletcher''' (designated speaker) ''ITK Algorithms for Analyzing Time-Varying Shape with Application to Longitudinal Heart Modeling''<br />
# '''Ricardo Avila''' ''Fostering Open Science for Lung Cancer Lesion Sizing''<br />
# '''Nikos Chrisochoides''' ''3D Real-Time Physics-Based Non-Rigid Registration for Image Guided Neurosurgery''<br />
<br />
===== Group 3: Video =====<br />
<br />
# '''Amitha Perera''' and '''Patrick Reynolds''' (designated speakers) ''ITKExtensions for Video Processing'' [[Summer_ITKv4_2011_Meeting/A2D2/VideoExtensions| Pre-Meeting Document]]<br />
# '''Kevin Cleary''' ''Real-Time Image Capture for ITK through a Video Grabber''<br />
# '''John Galeotti''' ''Methods in Medical Image Analysis: An ITK-Based Course with Deliverable Algorithms that extends and evaluates ITK while broadening its developer base''<br />
<br />
===== Group 4: Data and Web-based Applications =====<br />
<br />
# '''Sean Megason''' (designated speaker) ''SCORE++: Crowd source data, automatic segmentation and ground truth for ITK4''<br />
# '''Marcel Prastawa''' ''SCORE: Systematic Comparison through Objective Rating and Evaluation''<br />
# '''Ziv Yaniv''' ''Framework for automated parameter tuning of ITK registration pipelines''<br />
<br />
===== Working Groups Tasks =====<br />
<br />
* Each PI or representative will share a brief summary (max 5min) of their proposal with the other members of the group.<br />
* Things to Discuss:<br />
*# How the A2D2s will advance the subject under consideration.<br />
*# Find possible overlaps and similarities between the A2D2s - solve them.<br />
*# Decide how the software will be distributed. (e.g. ITK module, ITK classes, independent software, IJ, etc...)<br />
*# List all the new classes/modules that will be contributed to ITK<br />
*# Discuss the design, architecture, and dependencies<br />
*# List ITKv4 features that you might need to use (e.g. GPU? Multi-thread? Streaming?)<br />
*# Discuss how each member of the group can help/assist each other<br />
*# Come-up with a plan of action and '''time-line'''<br />
*# Combine slides into a single presentation showing all the points that were discussed<br />
<br />
===== Plenary Sessions =====<br />
<br />
* Designated speaker will present<br />
* Each of the other members should be available to anser questions and/or provide additional explanation<br />
* Discuss possible problems and challenges<br />
<br />
==== Dinner ====<br />
==== Arrival Group Dinner ====<br />
<br />
<br />
* Hackfest at Kitware NC Office (KRS)<br />
<br />
* Location:<br />
<br />
Suite G-4<br />
101 East Weaver St<br />
Carrboro, North Carolina<br />
27510 USA<br />
518-371-3971 (voice/fax)<br />
<br />
http://www.kitware.com/company/NC_mapsdirections.html<br />
<br />
This is at walking distance from the Franklin Hotel.<br />
<br />
* Date: Monday June 27th<br />
* Time: 6pm-10pm<br />
<br />
* Hands Raised so Far:<br />
<br />
Terry, Bill, Stephen, Luis, Nick, Hans, Bill(ret), Arnaud, Cory<br />
<br />
=== Tuesday June 28th ===<br />
<br />
<br />
==== Tuesday Morning ====<br />
<br />
* 8:30 am Welcome, Questions, Concerns<br />
* 9:00 am Working Groups<br />
** '''Group 1''' ITK Revise<br />
** '''Group 2''' DICOM<br />
* 10:30 am Break<br />
* 11:00 am Working Groups<br />
** '''Group 3''' GPU and Multithreading<br />
** '''Group 4''' Simplify<br />
* 12:30 pm Lunch<br />
<br />
==== Tuesday Afternoon ====<br />
<br />
* 1:30 pm Plenary Session: '''Revise'''<br />
** 20min presentations and the discussion about Registration, FEM, LevelSets.<br />
* 3:00 pm Break<br />
* 3:30 pm Plenary Session: '''Simplify'''<br />
** 20min presentations and the discussion about SimpleITK, WrapITK, Doxygen for SimpleITK<br />
* 4:30 pm Plenary Session: '''GPU & Multithreading'''<br />
** 20min presentations and discussion<br />
* 5:30 pm Adjourn<br />
<br />
==== Dinner ====<br />
<br />
* GROUP DINNER<br />
** Mama Dip's<br />
*** http://www.mamadips.com/<br />
<br />
=== Wednesday June 29th ===<br />
<br />
==== Wednesday Morning ====<br />
<br />
* 8:30 am Welcome, Questions, Concerns<br />
* 9:00 am Plenary Session: '''DICOM'''<br />
** 20min presentation and discussion DCMTK, GDCM<br />
* 9:30 am Modularization (Bill Hoffman)<br />
* 10:00 am Break<br />
* 10:30 am Migration Guide (Gabe Hart / Dave Cole)<br />
* 11:00 am Road Ahead (What's Next ?) (Terry Yoo)<br />
<br />
* 12:00 pm Lunch<br />
<br />
==== Wednesday Afternoon ====<br />
<br />
* 1:00 pm Testing Data (Patric Reynolds / Bill Hoffman)<br />
* 1:30 pm Integration (Slicer/Wiki Examples/OTB/ImageJ/ICY/OME/V3D) (Bill Lorensen / Luis Ibanez)<br />
* 2:00 pm Code Revisions (Jim Miller)<br />
* 2:30 pm Break<br />
* 3:00 pm New Process for New Incoming Code (Bill Lorensen)<br />
* 3:30 pm Doxygen Documentation (Arnaud Gelas)<br />
* 4:00 pm Adjourn<br />
<br />
==== Dinner ====<br />
<br />
* GROUP DINNER for Survivors<br />
** Carolina Brewery.<br />
<br />
== Attendees ==<br />
<br />
Please add your name to the list below if you are planning to attend.<br />
<br />
=== Kitware ===<br />
<br />
* Luis Ibanez<br />
* Bill Hoffman<br />
* Stephen Aylward<br />
* David Cole <br />
* Marcus Hanwell<br />
* Xiaoxiao Liu (Lesion Sizing Toolkit)<br />
* Andinet Enquobahrie (A2D2 Registration)<br />
* Michel Audette (A2D2 Meshes)<br />
* Amitha Perera (A2D2 Video)<br />
* Gabe Hart (A2D2 Video / Simple ITK)<br />
* Patrick Reynolds (A2D2 Video/SCORE/SCORE++)<br />
* Brad Davis<br />
* Mike Grauer (SCORE/SCORE++/A2D2 Registration)<br />
* Jean-Christophe Fillion-Robin<br />
<br />
=== University of Iowa ===<br />
* Vincent Magnotta<br />
* Hans Johnson<br />
<br />
=== University of Pennsylvania ===<br />
*Brian Avants<br />
*James C. Gee<br />
*Nick Tustison<br />
<br />
=== Harvard University ===<br />
* Sean Megason<br />
* Arnaud Gelas<br />
* Won-Ki Jeong (SEAS)<br />
<br />
=== The Ohio State University ===<br />
<br />
* Raghu Machiraju<br />
* Kun Huang<br />
* Zhi Han<br />
<br />
=== College of William and Mary ===<br />
<br />
* Nikos Chrisochoides<br />
* Dr. Kot<br />
* Dr. Liu<br />
<br />
=== University of Utah ===<br />
<br />
* Ross Whitaker<br />
* Marcel Prastawa<br />
* Josh Cates<br />
* Kris Zygmunt<br />
<br />
=== Cosmo Software===<br />
<br />
* Drew Wasem<br />
* Ashish Sharma<br />
* Alex Gouaillard [A*STAR] (over the phone / internet)<br />
<br />
=== GE ===<br />
* Jim Miller<br />
* Dirk Padfield<br />
<br />
=== Mayo Clinic ===<br />
* Dan Blezek<br />
<br />
=== University of North Carolina ===<br />
<br />
* Cory Quammen<br />
* Marc Niethammer<br />
<br />
=== National Library of Medicine ===<br />
* Terry Yoo<br />
* Bradley Lowekamp<br />
* Jesus Caban<br />
<br />
=== Georgetown University / CNMC ===<br />
* Ziv Yaniv<br />
<br />
=== Noware ===<br />
* Bill Lorensen<br />
<br />
=== Bioscan ===<br />
* John McInerney<br />
<br />
=== Attendance Matrix ===<br />
<br />
{| border="1"<br />
|- bgcolor="#abcdef"<br />
! Name !! Monday June 27 !! Tuesday June 28 !! Wednesday June 29<br />
|-<br />
| Luis Ibanez || X || X || X<br />
|-<br />
| Bill Hoffman || || || <br />
|-<br />
| Stephen Aylward || || || <br />
|-<br />
| David Cole || || || <br />
|-<br />
| Marcus Hanwell || X || X || X <br />
|-<br />
| Xiaoxiao Liu || || || <br />
|-<br />
| Andinet Enquobahrie || || || <br />
|-<br />
| Michel Audette || || || <br />
|-<br />
| Amitha Perera || || || <br />
|-<br />
| Gabe Hart || || || <br />
|-<br />
| Patrick Reynolds || || || <br />
|-<br />
| Brad Davis || || || <br />
|-<br />
| Vincent Magnotta || || x || X<br />
|-<br />
| Hans Johnson || x || X || X <br />
|-<br />
| Brian Avants || || || <br />
|-<br />
| James C. Gee || || || <br />
|-<br />
| Nick Tustison || x || x || x <br />
|-<br />
| Sean Megason || x || x || x <br />
|-<br />
| Arnaud Gelas || x || x || x <br />
|-<br />
| Won-Ki Jeong || X || X || X <br />
|-<br />
| Raghu Machiraju || x || x || x<br />
|-<br />
| Kun Huang || || || <br />
|-<br />
| Zhi Han || || || <br />
|-<br />
| Nikos Chrisochoides || || || <br />
|-<br />
| Dr. Kot || || || <br />
|-<br />
| Dr. Liu || || || <br />
|-<br />
| Ross Whitaker || || || <br />
|-<br />
| Drew Wasem || X || X || X <br />
|-<br />
| Ashish sharma || X || X || X <br />
|-<br />
| Alex Gouaillard (remote) || || || <br />
|-<br />
| Jim Miller || X || X || X <br />
|-<br />
| Dirk Padfield || X || X || X <br />
|-<br />
| Dan Blezek || X || X || X <br />
|-<br />
| Cory Quammen || || || <br />
|-<br />
| Marc Niethammer || || || <br />
|-<br />
| Terry Yoo || || || <br />
|-<br />
| Bradley Lowekamp || || || <br />
|-<br />
| Jesus Caban || || || <br />
|-<br />
| Ziv Yaniv || X || X || <br />
|-<br />
| Bill Lorensen || X || X || X <br />
|-<br />
| Marcel Prastawa || X || || <br />
|-<br />
| Josh Cates || X || X || <br />
|-<br />
| Kris Zygmunt || X || X || X <br />
|-<br />
| Jean-Christophe Fillion-Robin || X || || <br />
|-<br />
<br />
|}</div>Zygmunthttps://public.kitware.com/Wiki/index.php?title=ITK/Summer_v4_2011_Meeting/A2D2/Denoising&diff=41251ITK/Summer v4 2011 Meeting/A2D2/Denoising2011-06-27T15:35:48Z<p>Zygmunt: </p>
<hr />
<div>Notes about A2D2 Denoising taken around the ITK summer meeting 2011<br />
<br />
* [[File:Itk_a2d2_2011_June.pptx|PowerPoint Presentation]]<br />
<br />
testing here</div>Zygmunthttps://public.kitware.com/Wiki/index.php?title=ITK/Summer_v4_2011_Meeting&diff=41144ITK/Summer v4 2011 Meeting2011-06-24T19:50:08Z<p>Zygmunt: </p>
<hr />
<div>ITKv4 Summer Meeting<br />
<br />
*'''Dates: June 27-29, 2011''' <br />
*'''City: Chapel Hill, NC'''<br />
*'''Location: Franklin Hotel<br />
<br />
== Travel / Hotel Information ==<br />
<br />
The Meeting will take place at the Franklin Hotel.<br />
<br />
* http://franklinhotelnc-px.trvlclick.com/index.html<br />
<br />
Since the meeting starts at<br />
<br />
* 8 am on June 27th,<br />
<br />
we recommend people to arrange their hotel accommodation for the previous night!<br />
<br />
* Use the room group 'ITKV4'<br />
** Reservation line: 866.831.5999<br />
** Ask for the "room block" reserved under 'ITKV4'<br />
* The rate is $129 / Night<br />
<br />
== Registration Information ==<br />
<br />
* Download [[Media:ITKv4 Summer2011Meeting Registration.pdf |Registration Form]]<br />
* It is a fillable PDF form<br />
* Fill it up please.<br />
** Indicate the number of days that you are attending.<br />
** Registration fee = ( NumberOfDays * $65 );<br />
** Print it as a PDF file<br />
*** since otherwise the form is still modifiable<br />
* Send the processed form back to Kitware<br />
** email it at: admin at kitware dot com<br />
<br />
== Meeting Room ==<br />
<br />
<br />
== Meeting Agenda ==<br />
<br />
* '''WARNING : THE AGENDA WAS REORGANIZED ON MAY 27th : PLEASE REVIEW'''<br />
<br />
=== Must See Topics ===<br />
<br />
* BETA Release<br />
* GPU<br />
* Modularization<br />
* SimpleITK<br />
* DICOM<br />
* Registration Refactoring<br />
* LevelSet Refactoring<br />
<br />
=== Monday June 27th - A2D2 Summit ===<br />
<br />
* [[ITK_Release_4/The Team/A2D2 Development Team|A2D2 Development Team]]<br />
* [[ITK_Release_4/The Team/ITKv4 Development Team|ITKv4 Development Team]]<br />
<br />
==== Monday Morning ====<br />
<br />
* 8:30 am Welcome: Terry Yoo<br />
* 8:50 am State of the Toolkit: Hans Johnson<br />
* 9:10 am Procedures for integrating A2D2 contributions (Bill/Luis)<br />
* 9:30 am Split in to Focus Groups<br />
** '''Group1''' : Microscopy<br />
** '''Group2''' : Clinical Applications<br />
** '''Group3''' : Video<br />
** '''Group4''' : Data and Web-based Applications<br />
* 10:00 Break<br />
* 10:30 am Working Groups (continuation)<br />
** '''Group1''' : Microscopy<br />
** '''Group2''' : Clinical Applications<br />
** '''Group3''' : Video<br />
** '''Group4''' : Data and Web-based Applications<br />
* 12:00 pm Lunch<br />
<br />
==== Monday Afternoon ====<br />
<br />
* 1:00 pm Plenary: '''Group 1''' : 20min presentation + discussion<br />
* 2:00 pm Plenary: '''Group 2''' : 20min presentation + discussion<br />
* 2:45 pm Break<br />
* 3:15 pm Plenary: '''Group 3''' : 20min presentation + discussion<br />
* 4:00 pm Plenary: '''Group 4''' : 20min presentation + discussion<br />
* 4:45 pm Adjourn<br />
<br />
==== Group Details ====<br />
<br />
===== Group 1: Microscopy and Histology =====<br />
<br />
# '''Ross Whitaker''' (designated speaker) ''Fast Nonlocal Algorithms for Denoising Microscopy, MRI, and Ultrasound Images Using Nonparametric Neighborhood Statistics.''<br />
# '''Marc Niethammer''' ''Adding Deconvoltion Algorithms to ITK''<br />
# '''Raghu Machiraju''' ''A Comprehensive Workflow for Robust Characterization of Microstructure for Cancer Studies''<br />
# '''Raghu Machiraju''' ''A Comprehensive Workflow for Large Histology Segmentation and Visualization''<br />
<br />
===== Group 2: Clinical Applications and CADs =====<br />
<br />
# '''Thomas Fletcher''' (designated speaker) ''ITK Algorithms for Analyzing Time-Varying Shape with Application to Longitudinal Heart Modeling''<br />
# '''Ricardo Avila''' ''Fostering Open Science for Lung Cancer Lesion Sizing''<br />
# '''Nikos Chrisochoides''' ''3D Real-Time Physics-Based Non-Rigid Registration for Image Guided Neurosurgery''<br />
<br />
===== Group 3: Video =====<br />
<br />
# '''Amitha Perera''' and '''Patrick Reynolds''' (designated speakers) ''ITKExtensions for Video Processing''<br />
# '''Kevin Cleary''' ''Real-Time Image Capture for ITK through a Video Grabber''<br />
# '''John Galeotti''' ''Methods in Medical Image Analysis: An ITK-Based Course with Deliverable Algorithms that extends and evaluates ITK while broadening its developer base''<br />
<br />
===== Group 4: Data and Web-based Applications =====<br />
<br />
# '''Sean Megason''' (designated speaker) ''SCORE++: Crowd source data, automatic segmentation and ground truth for ITK4''<br />
# '''Marcel Prastawa''' ''SCORE: Systematic Comparison through Objective Rating and Evaluation''<br />
# '''Ziv Yaniv''' ''Framework for automated parameter tuning of ITK registration pipelines''<br />
<br />
===== Working Groups Tasks =====<br />
<br />
* Each PI or representative will share a brief summary (max 5min) of their proposal with the other members of the group.<br />
* Things to Discuss:<br />
*# How the A2D2s will advance the subject under consideration.<br />
*# Find possible overlaps and similarities between the A2D2s - solve them.<br />
*# Decide how the software will be distributed. (e.g. ITK module, ITK classes, independent software, IJ, etc...)<br />
*# List all the new classes/modules that will be contributed to ITK<br />
*# Discuss the design, architecture, and dependencies<br />
*# List ITKv4 features that you might need to use (e.g. GPU? Multi-thread? Streaming?)<br />
*# Discuss how each member of the group can help/assist each other<br />
*# Come-up with a plan of action and '''time-line'''<br />
*# Combine slides into a single presentation showing all the points that were discussed<br />
<br />
===== Plenary Sessions =====<br />
<br />
* Designated speaker will present<br />
* Each of the other members should be available to anser questions and/or provide additional explanation<br />
* Discuss possible problems and challenges<br />
<br />
==== Dinner ====<br />
==== Arrival Group Dinner ====<br />
<br />
<br />
* Hackfest at Kitware NC Office (KRS)<br />
<br />
* Location:<br />
<br />
Suite G-4<br />
101 East Weaver St<br />
Carrboro, North Carolina<br />
27510 USA<br />
518-371-3971 (voice/fax)<br />
<br />
http://www.kitware.com/company/NC_mapsdirections.html<br />
<br />
This is at walking distance from the Franklin Hotel.<br />
<br />
* Date: Monday June 27th<br />
* Time: 6pm-10pm<br />
<br />
* Hands Raised so Far:<br />
<br />
Terry, Bill, Stephen, Luis, Nick, Hans, Bill(ret), Arnaud, Cory<br />
<br />
=== Tuesday June 28th ===<br />
<br />
<br />
==== Tuesday Morning ====<br />
<br />
* 8:30 am Welcome, Questions, Concerns<br />
* 9:00 am Working Groups<br />
** '''Group 1''' ITK Revise<br />
** '''Group 2''' DICOM<br />
* 10:30 am Break<br />
* 11:00 am Working Groups<br />
** '''Group 3''' GPU and Multithreading<br />
** '''Group 4''' Simplify<br />
* 12:30 pm Lunch<br />
<br />
==== Tuesday Afternoon ====<br />
<br />
* 1:30 pm Plenary Session: '''Revise'''<br />
** 20min presentations and the discussion about Registration, FEM, LevelSets.<br />
* 3:00 pm Break<br />
* 3:30 pm Plenary Session: '''Simplify'''<br />
** 20min presentations and the discussion about SimpleITK, WrapITK, Doxygen for SimpleITK<br />
* 4:30 pm Plenary Session: '''GPU & Multithreading'''<br />
** 20min presentations and discussion<br />
* 5:30 pm Adjourn<br />
<br />
==== Dinner ====<br />
<br />
* GROUP DINNER<br />
** Mama Dip's<br />
*** http://www.mamadips.com/<br />
<br />
=== Wednesday June 29th ===<br />
<br />
==== Wednesday Morning ====<br />
<br />
* 8:30 am Welcome, Questions, Concerns<br />
* 9:00 am Plenary Session: '''DICOM'''<br />
** 20min presentation and discussion DCMTK, GDCM<br />
* 9:30 am Modularization (Bill Hoffman)<br />
* 10:00 am Break<br />
* 10:30 am Migration Guide (Gabe Hart / Dave Cole)<br />
* 11:00 am Road Ahead (What's Next ?) (Terry Yoo)<br />
<br />
* 12:00 pm Lunch<br />
<br />
==== Wednesday Afternoon ====<br />
<br />
* 1:00 pm Testing Data (Patric Reynolds / Bill Hoffman)<br />
* 1:30 pm Integration (Slicer/Wiki Examples/OTB/ImageJ/ICY/OME/V3D) (Bill Lorensen / Luis Ibanez)<br />
* 2:00 pm Code Revisions (Jim Miller)<br />
* 2:30 pm Break<br />
* 3:00 pm New Process for New Incoming Code (Bill Lorensen)<br />
* 3:30 pm Doxygen Documentation (Arnaud Gelas)<br />
* 4:00 pm Adjourn<br />
<br />
==== Dinner ====<br />
<br />
* GROUP DINNER for Survivors<br />
** Carolina Brewery.<br />
<br />
== Attendees ==<br />
<br />
Please add your name to the list below if you are planning to attend.<br />
<br />
=== Kitware ===<br />
<br />
* Luis Ibanez<br />
* Bill Hoffman<br />
* Stephen Aylward<br />
* David Cole <br />
* Marcus Hanwell<br />
* Xiaoxiao Liu (Lesion Sizing Toolkit)<br />
* Andinet Enquobahrie (A2D2 Registration)<br />
* Michel Audette (A2D2 Meshes)<br />
* Amitha Perera (A2D2 Video)<br />
* Gabe Hart (A2D2 Video / Simple ITK)<br />
* Patrick Reynolds (A2D2 Video/SCORE/SCORE++)<br />
* Brad Davis<br />
* Mike Grauer (SCORE/SCORE++/A2D2 Registration)<br />
<br />
=== University of Iowa ===<br />
* Vincent Magnotta<br />
* Hans Johnson<br />
<br />
=== University of Pennsylvania ===<br />
*Brian Avants<br />
*James C. Gee<br />
*Nick Tustison<br />
<br />
=== Harvard University ===<br />
* Sean Megason<br />
* Arnaud Gelas<br />
* Won-Ki Jeong (SEAS)<br />
<br />
=== The Ohio State University ===<br />
<br />
* Raghu Machiraju<br />
* Kun Huang<br />
* Zhi Han<br />
<br />
=== College of William and Mary ===<br />
<br />
* Nikos Chrisochoides<br />
* Dr. Kot<br />
* Dr. Liu<br />
<br />
=== University of Utah ===<br />
<br />
* Ross Whitaker<br />
* Marcel Prastawa<br />
* Josh Cates<br />
* Kris Zygmunt<br />
<br />
=== Cosmo Software===<br />
<br />
* Drew Wasem<br />
* Ashish Sharma<br />
* Alex Gouaillard [A*STAR] (over the phone / internet)<br />
<br />
=== GE ===<br />
* Jim Miller<br />
* Dirk Padfield<br />
<br />
=== Mayo Clinic ===<br />
* Dan Blezek<br />
<br />
=== University of North Carolina ===<br />
<br />
* Cory Quammen<br />
* Marc Niethammer<br />
<br />
=== National Library of Medicine ===<br />
* Terry Yoo<br />
* Bradley Lowekamp<br />
* Jesus Caban<br />
<br />
=== Georgetown University / CNMC ===<br />
* Ziv Yaniv<br />
<br />
=== Noware ===<br />
* Bill Lorensen<br />
<br />
=== Bioscan ===<br />
* John McInerney<br />
<br />
=== Attendance Matrix ===<br />
<br />
{| border="1"<br />
|- bgcolor="#abcdef"<br />
! Name !! Monday June 27 !! Tuesday June 28 !! Wednesday June 29<br />
|-<br />
| Luis Ibanez || X || X || X<br />
|-<br />
| Bill Hoffman || || || <br />
|-<br />
| Stephen Aylward || || || <br />
|-<br />
| David Cole || || || <br />
|-<br />
| Marcus Hanwell || || || <br />
|-<br />
| Xiaoxiao Liu || || || <br />
|-<br />
| Andinet Enquobahrie || || || <br />
|-<br />
| Michel Audette || || || <br />
|-<br />
| Amitha Perera || || || <br />
|-<br />
| Gabe Hart || || || <br />
|-<br />
| Patrick Reynolds || || || <br />
|-<br />
| Brad Davis || || || <br />
|-<br />
| Vincent Magnotta || || || <br />
|-<br />
| Hans Johnson || || || <br />
|-<br />
| Brian Avants || || || <br />
|-<br />
| James C. Gee || || || <br />
|-<br />
| Nick Tustison || x || x || x <br />
|-<br />
| Sean Megason || x || x || x <br />
|-<br />
| Arnaud Gelas || x || x || x <br />
|-<br />
| Won-Ki Jeong || X || X || X <br />
|-<br />
| Raghu Machiraju || x || x || x<br />
|-<br />
| Kun Huang || || || <br />
|-<br />
| Zhi Han || || || <br />
|-<br />
| Nikos Chrisochoides || || || <br />
|-<br />
| Dr. Kot || || || <br />
|-<br />
| Dr. Liu || || || <br />
|-<br />
| Ross Whitaker || || || <br />
|-<br />
| Drew Wasem || X || X || X <br />
|-<br />
| Ashish sharma || X || X || X <br />
|-<br />
| Alex Gouaillard (remote) || || || <br />
|-<br />
| Jim Miller || X || X || X <br />
|-<br />
| Dirk Padfield || X || X || X <br />
|-<br />
| Dan Blezek || X || X || X <br />
|-<br />
| Cory Quammen || || || <br />
|-<br />
| Marc Niethammer || || || <br />
|-<br />
| Terry Yoo || || || <br />
|-<br />
| Bradley Lowekamp || || || <br />
|-<br />
| Jesus Caban || || || <br />
|-<br />
| Ziv Yaniv || X || X || <br />
|-<br />
| Bill Lorensen || X || X || X <br />
|-<br />
| Marcel Prastawa || X || || <br />
|-<br />
| Josh Cates || X || X || <br />
|-<br />
| Kris Zygmunt || X || X || X <br />
|-<br />
<br />
|}</div>Zygmunt