Cuda:VtkCudaDataSet

From NAMIC Wiki
Revision as of 17:59, 10 July 2017 by Grundlett (talk | contribs) (Text replacement - "http://www.slicer.org/slicerWiki/index.php/" to "https://www.slicer.org/wiki/")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search
Home < Cuda:VtkCudaDataSet

The vtkCudaDataSet is a data-container used to communicate data structures between CUDA and host memory in an easy way. This is Part of the Volume Rendering With Cuda implementation.

Overview

VTK integration of the Cuda DataSet for Images

In the picture you see how the vtkImageDataSet will be embedded into the Pipeline of VTK.

The ImageDataSet will act as a container for communicating sets of arbitrary size from a host memory to the memory of a CUDA card and back again. As a performance leap the data should also be stored within a non-paged memory range on the host side.

Implementation

Synchronization

The most important part about communication CUDA datasets is to upload/download and synchronize between Host and CUDA memory. These functions will be implemented for this to be safe

  1. SetDataSize
  2. SetCommunicationType (Host or normal memory range)
  3. Upload
  4. Download
  5. Synchronize
  6. Events:
    1. HostMemoryChanged
    2. CudaMemoryChanged
    3. HostUpdateFinished
    4. CudaUpdateFinished
  7. ...

Used vtkCudaSupport Classes

As this is intertwined with memory access most of the vtkCudaMemory* classes will be used within this class to communicate and store data. Eventually events and streaming will be integrated.

Used Cuda Functions

[NICHOLAS: Please add all the CUDA functions you would like this class to support here]

Performance Issues

  1. Data could be read directly to the vtkCudaDataSet to spare the conversion from a vtkDataSet.
  2. Host Memory
  3. Use the CUDA-Memory-Stream for concurrent upload and download of data
    1. Use the CUDA-Events to signal the end of Data Streaming