[Insight-users] (no subject)

Tim Soper tim_d_soper at yahoo.com
Tue Jan 7 15:08:15 EST 2014


I am trying to use the itkGPUDiscreteGaussianImageFilter to smooth a relatively large input image (512 x 512 x 631) with single floating precision. But I am getting runtime errors when I try to perform a second smoothing operation on this large dataset. I can smooth the image once, but then receive a vague error from the code below( -R6010 -abort() has been called ). I do not have an error when replacing the filter with the non-GPU version. 

Is there a more correct way to clear GPU buffers associated with the filter below? I have tried a similar piece of code within a matlab mex file and received a CL_MEM_OBJECT_ALLOCATION_FAILURE. 

Thanks,
Tim


//======================== CODE ===========================
#include "itkGPUDiscreteGaussianImageFilter.h"
#include "itkCastImageFilter.h"
#include "itkImageFileReader.h"

int main( int argc, char * argv[] )
{
//type definitions
const int Dimension = 3;
typedef floatPixelType;
typedef itk::Image<PixelType,Dimension>ImageType;
typedef itk::GPUImage<PixelType,Dimension>GPUImageType;
typedef itk::ImageFileReader<ImageType> ReaderType;
typedef itk::CastImageFilter<ImageType,GPUImageType>CastFilterType;
typedef itk::GPUDiscreteGaussianImageFilter<GPUImageType,GPUImageType>FilterType; 

//read in our image
ReaderType::Pointer reader = ReaderType::New();
reader->SetFileName("BigImage.mhd");  //512 x 512 x 631
reader->Update();

//cast to GPUImage
CastFilterType::Pointer castFilter = CastFilterType::New();
castFilter->SetInput( reader->GetOutput() );
castFilter->Update();

//smooth the image
FilterType::Pointer filter = FilterType::New();
filter->SetInput( castFilter->GetOutput() );
filter->SetVariance( 1.0 );
filter->Update();
filter->GetOutput()->UpdateBuffers();

//clear the GPUImage buffer
filter->SetReleaseDataFlag(true);
filter->GetOutput()->Initialize();

//try to smooth again
FilterType::Pointer filter2 = FilterType::New();
filter2->SetInput( castFilter->GetOutput() );
filter2->SetVariance( 1.0 );
filter2->Update(); //GET RUNTIME ERROR HERE
filter2->GetOutput()->UpdateBuffers();

return EXIT_SUCCESS;  
}
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.itk.org/pipermail/insight-users/attachments/20140107/2cb51439/attachment.htm>


More information about the Insight-users mailing list