diff options
author | haochen <haochen@multicorewareinc.com> | 2013-12-09 13:07:32 +0800 |
---|---|---|
committer | I-Jui (Ray) Sung <ray@multicorewareinc.com> | 2013-12-09 18:52:40 -0600 |
commit | 7d68e43e8b35419dc481ce3a06716113b4045839 (patch) | |
tree | 7103d1edfbf091eb92f3ccd45a654b8f03d706ed /sc | |
parent | e485eede25b01482c7bb3c7808e9feb8f9c9d518 (diff) |
Release cl_mem&kernel after sumifs reduction kernel
Change-Id: Ibe2eccf92b5f8e7b12b5d885cb393238b16837b0
Signed-off-by: Your Name <you@example.com>
Diffstat (limited to 'sc')
-rw-r--r-- | sc/source/core/opencl/formulagroupcl.cxx | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/sc/source/core/opencl/formulagroupcl.cxx b/sc/source/core/opencl/formulagroupcl.cxx index 36981a7c8a0d..618fcc9f4d11 100644 --- a/sc/source/core/opencl/formulagroupcl.cxx +++ b/sc/source/core/opencl/formulagroupcl.cxx @@ -1457,7 +1457,7 @@ public: DynamicKernelArgument *Arg = mvSubArguments[0].get(); DynamicKernelSlidingArgument<VectorRef> *slidingArgPtr = dynamic_cast< DynamicKernelSlidingArgument<VectorRef> *> (Arg); - cl_mem mpClmem2; + mpClmem2 = NULL; if (OpSumCodeGen->NeedReductionKernel()) { @@ -1518,7 +1518,7 @@ public: err = clFinish(kEnv.mpkCmdQueue); if (CL_SUCCESS != err) throw OpenCLError(err); - + clReleaseKernel(redKernel); // Pass mpClmem2 to the "real" kernel err = clSetKernelArg(k, argno, sizeof(cl_mem), (void *)&mpClmem2); if (CL_SUCCESS != err) @@ -1615,7 +1615,16 @@ public: for (unsigned i = 0; i < mvSubArguments.size(); i++) mvSubArguments[i]->DumpInlineFun(decls,funs); } + ~DynamicKernelSoPArguments() + { + if (mpClmem2) + { + clReleaseMemObject(mpClmem2); + mpClmem2 = NULL; + } + } private: + cl_mem mpClmem2; SubArgumentsType mvSubArguments; boost::shared_ptr<SlidingFunctionBase> mpCodeGen; }; @@ -1675,7 +1684,7 @@ DynamicKernelArgument *VectorRefFactory(const std::string &s, DynamicKernelSoPArguments::DynamicKernelSoPArguments( const std::string &s, const FormulaTreeNodeRef& ft, SlidingFunctionBase* pCodeGen) : - DynamicKernelArgument(s, ft), mpCodeGen(pCodeGen) + DynamicKernelArgument(s, ft), mpCodeGen(pCodeGen),mpClmem2(NULL) { size_t nChildren = ft->Children.size(); |