summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhaochen <haochen@multicorewareinc.com>2013-12-09 13:07:32 +0800
committerI-Jui (Ray) Sung <ray@multicorewareinc.com>2013-12-09 18:52:40 -0600
commit7d68e43e8b35419dc481ce3a06716113b4045839 (patch)
tree7103d1edfbf091eb92f3ccd45a654b8f03d706ed
parente485eede25b01482c7bb3c7808e9feb8f9c9d518 (diff)
Release cl_mem&kernel after sumifs reduction kernel
Change-Id: Ibe2eccf92b5f8e7b12b5d885cb393238b16837b0 Signed-off-by: Your Name <you@example.com>
-rw-r--r--sc/source/core/opencl/formulagroupcl.cxx15
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();