MathGroup Archive 2013

[Date Index] [Thread Index] [Author Index]

Search the Archive

memory leak with Cuda


Here is an application of Wolfram white paper (Heterogeneous Computing in Mathematica page 16 and 17). After several cursor movement program stops because of a memory leak. How to fix it please?

Julia set with CUDA

Needs["CUDALink`"]

code = "
  __global__ void julia_kernel(Real_t * set, int width, int height, Real_t \
cx, Real_t cy) {
  	int xIndex = threadIdx.x + blockIdx.x*blockDim.x;
  	int yIndex = threadIdx.y + blockIdx.y*blockDim.y;
  	int ii;
  	Real_t x = ZOOM_LEVEL*(width/2 - xIndex);
  	Real_t y = ZOOM_LEVEL*(height/2 - yIndex);
  	Real_t tmp;
  	Real_t c;
  	if (xIndex < width && yIndex < height) {
  		for (ii = 0; ii < MAX_ITERATIONS && x*x + y*y < BAILOUT; ii++) {
  			tmp = x*x - y*y + cx;
  			y = 2*x*y + cy;
  			x = tmp;
  		}
  		c = log(0.1f + sqrt(x*x + y*y));
  		set[xIndex + yIndex*width] = c;
  	}
  }";

JuliaCalculate = 
  CUDAFunctionLoad[code, 
   "julia_kernel", {{_Real, "Output"}, _Integer, _Integer, _Real, _Real}, {16,
     16}, "Defines" -> {"MAX_ITERATIONS" -> 10, "ZOOM_LEVEL" -> "0.0050", 
     "BAILOUT" -> "4.0"}];

{width, height} = {512, 512};
jset = CUDAMemoryAllocate[Real, {height, width}];

Manipulate[
 JuliaCalculate[jset, width, height, c[[1]], c[[2]], {width, height}];
 ReliefPlot[Reverse@CUDAMemoryGet[jset], ColorFunction -> "Rainbow", 
  DataRange -> {{-2.0, 2.0}, {-2.0, 2.0}}, ImageSize -> 512, Frame -> None, 
  Epilog -> {Opacity[.5], Dashed, Thick, 
    Line[{{{c[[1]], -2}, {c[[1]], 2}}, {{-2, c[[2]]}, {2, 
        c[[2]]}}}]}], {{c, {0, 1}}, {-2, -2}, {2, 2}, Locator, 
  Appearance -> 
   Graphics[{Thick, Dashed, Opacity[.75], Circle[]}, ImageSize -> 50]}]


General::nomem: The current computation was aborted because there was insufficient memory available to complete the computation.



  • Prev by Date: Re: bug or feature ?
  • Next by Date: Re: bug or feature ?
  • Previous by thread: Re: Decoupling E and I
  • Next by thread: Re: bug or feature ?