tRaytracer only calls cudaFree(linarr) when it has been allocated - sphere - GPU-based 3D discrete element method algorithm with optional fluid coupling
 (HTM) git clone git://src.adamsgaard.dk/sphere
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) LICENSE
       ---
 (DIR) commit 03f15c4126707713021223f8c2fb19d12a9329b2
 (DIR) parent de937c7ef7b26ad0befaea97dab04c59075edd64
 (HTM) Author: Anders Damsgaard <adc@geo.au.dk>
       Date:   Wed, 14 Nov 2012 14:15:39 +0100
       
       Raytracer only calls cudaFree(linarr) when it has been allocated
       
       Diffstat:
         M src/Makefile                        |       2 +-
         M src/device.cu                       |       6 ++++--
         M src/main.cpp                        |       2 +-
         M src/raytracer.cuh                   |       8 ++++++--
       
       4 files changed, 12 insertions(+), 6 deletions(-)
       ---
 (DIR) diff --git a/src/Makefile b/src/Makefile
       t@@ -66,7 +66,7 @@ INCLUDES+=-I. -I$(SDKPATH)/shared/inc -I$(SDKPATH)/inc -I$(CUDA_INSTALL_PATH)/in
        LDFLAGS+=-L$(CUDA_INSTALL_PATH)/lib
        LDFLAGS+=-L$(SDKPATH)/../../shared/lib -L$(SDKPATH)/../lib 
        LDFLAGS+=-lcutil_x86_64 -lcuda -lcudart
       -LDFLAGS+=-fopenmp
       +LDFLAGS+=-fopenmp 
        
        #all: $(CCFILES) $(CUFILES) $(EXECUTABLE) raytracer
        all: $(CCFILES) $(CUFILES) $(EXECUTABLE) folders
 (DIR) diff --git a/src/device.cu b/src/device.cu
       t@@ -41,6 +41,7 @@ __host__ void DEM::initializeGPU(void)
          int cudaDriverVersion;
          int cudaRuntimeVersion;
        
       +  checkForCudaErrors("Before initializing CUDA device");
        
          // Register number of devices
          cudaGetDeviceCount(&devicecount);
       t@@ -72,9 +73,9 @@ __host__ void DEM::initializeGPU(void)
          }
        
          // Comment following line when using a system only containing exclusive mode GPUs
       -  cudaChooseDevice(&cudadevice, &prop); 
       +  //cudaChooseDevice(&cudadevice, &prop); 
        
       -  checkForCudaErrors("After initializing CUDA device");
       +  checkForCudaErrors("While initializing CUDA device");
        }
        
        // Start timer for kernel profiling
       t@@ -331,6 +332,7 @@ __host__ void DEM::freeGlobalDeviceMemory()
          cudaFree(dev_walls_mvfd);
          cudaFree(dev_walls_force_partial);
          cudaFree(dev_walls_force_pp);
       +  checkForCudaErrors("During cudaFree calls");
        
          if (verbose == 1)
            printf("Done\n");
 (DIR) diff --git a/src/main.cpp b/src/main.cpp
       t@@ -19,7 +19,6 @@
        #include "datatypes.h"
        #include "sphere.h"
        
       -
        //////////////////
        // MAIN ROUTINE //
        //////////////////
       t@@ -128,6 +127,7 @@ int main(const int argc, const char *argv[])
              // Otherwise, start iterating through time
              else
                dem.startTime();
       +
            }
          }
        
 (DIR) diff --git a/src/raytracer.cuh b/src/raytracer.cuh
       t@@ -517,8 +517,12 @@ __host__ void DEM::render(
        
          // Free dynamically allocated global device memory
          rt_freeGlobalDeviceMemory();
       -  delete[] linarr;
       -  cudaFree(dev_linarr);
       +  checkForCudaErrors("after rt_freeGlobalDeviceMemory");
       +  if (transfer == 1) {
       +    delete[] linarr;
       +    cudaFree(dev_linarr);
       +    checkForCudaErrors("When calling cudaFree(dev_linarr)");
       +  }
        
          //cudaPrintfDisplay(stdout, true);