#include "NBody.hpp" /////////////////////////////////// NBody::cleanup Func \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ // // Releases OpenCL resources (Context, Memory etc.) // /////////////////////////////////// NBody::cleanup Func \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ int NBody::cleanup() { //================================================ // Resources common to all integrators: /* Releases OpenCL resources (Context, Memory etc.) */ cl_int status; status = clReleaseKernel(kernel); if (status != CL_SUCCESS){ std::cout << "clReleaseKernel failed." << std::endl; return 1; } status = clReleaseProgram(program); if (status != CL_SUCCESS){ std::cout << "clReleaseProgram failed." << std::endl; return 1; } status = clReleaseMemObject(updatedPos); if (status != CL_SUCCESS){ std::cout << "clReleaseMemObject failed." << std::endl; return 1; } status = clReleaseMemObject(updatedVel); if (status != CL_SUCCESS){ std::cout << "clReleaseMemObject failed." << std::endl; return 1; } status = clReleaseCommandQueue(commandQueue); if (status != CL_SUCCESS){ std::cout << "clReleaseMemObject failed." << std::endl; return 1; } status = clReleaseContext(context); if (status != CL_SUCCESS){ std::cout << "clReleaseMemObject failed." << std::endl; return 1; } //================================================ // Resources specific only for Leapfrog integrator: status = clReleaseMemObject(updatedAcc); if (status != CL_SUCCESS){ std::cout << "clReleaseMemObject failed." << std::endl; return 1; } return 0; } /////////////////////////////////// NBody::~NBody() \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ // // Override the constructor of the NBody class, releasing // unreleased resources // /////////////////////////////////// NBody::~NBody() \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ NBody::~NBody() { //================================================ // Resources common to all integrators: /* release program resources */ if(initPos) { free(initPos); initPos = NULL; } if(initVel) { free(initVel); initVel = NULL; } if(pos) { #if defined (_WIN32) _aligned_free(pos); #else free(pos); #endif pos = NULL; } if(vel) { #if defined (_WIN32) _aligned_free(vel); #else free(vel); #endif vel = NULL; } if(devices) { free(devices); devices = NULL; } if(maxWorkItemSizes) { free(maxWorkItemSizes); maxWorkItemSizes = NULL; } //================================================ // Resources specific only for Leapfrog integrator: if(acc) { #if defined (_WIN32) _aligned_free(acc); #else free(acc); #endif acc = NULL; } }