sc/source/core/opencl/formulagroupcl.cxx | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-)
New commits: commit 445299be76934c6c593793aae2d7630f8a42562b Author: haochen <haoc...@multicorewareinc.com> Date: Sat Nov 30 10:51:49 2013 +0800 GPU Calc: cache more once compiled program in memory Change-Id: Iab34567806e069d819c86b52f93d88355272416f diff --git a/sc/source/core/opencl/formulagroupcl.cxx b/sc/source/core/opencl/formulagroupcl.cxx index 1c79f36..b73b32a 100644 --- a/sc/source/core/opencl/formulagroupcl.cxx +++ b/sc/source/core/opencl/formulagroupcl.cxx @@ -2675,21 +2675,27 @@ void DynamicKernel::CreateKernel(void) KernelEnv kEnv; OpenclDevice::setKernelEnv(&kEnv); const char *src = mFullProgramSrc.c_str(); - static std::string lastKernelHash = ""; - static cl_program lastProgram = NULL; + static std::string lastOneKernelHash = ""; + static std::string lastSecondKernelHash = ""; + static cl_program lastOneProgram = NULL; + static cl_program lastSecondProgram = NULL; std::string KernelHash = mKernelSignature+GetMD5(); - if (lastKernelHash == KernelHash && lastProgram) + if (lastOneKernelHash == KernelHash && lastOneProgram) { std::cerr<<"cl_program cache hit: "<< KernelHash << "\n"; - mpProgram = lastProgram; + mpProgram = lastOneProgram; + } + else if(lastSecondKernelHash == KernelHash && lastSecondProgram) + { + std::cerr<<"cl_program cache hit: "<< KernelHash << "\n"; + mpProgram = lastSecondProgram; } else { // doesn't match the last compiled formula. - if (lastProgram) { - std::cerr<<"Freeing last program: "<< GetMD5() << "\n"; - clReleaseProgram(lastProgram); - lastProgram = NULL; + if (lastSecondProgram) { + std::cerr<<"Freeing lastsecond program: "<< GetMD5() << "\n"; + clReleaseProgram(lastSecondProgram); } if (OpenclDevice::buildProgramFromBinary("", &OpenclDevice::gpuEnv, KernelHash.c_str(), 0)) { @@ -2754,8 +2760,10 @@ void DynamicKernel::CreateKernel(void) OpenclDevice::generatBinFromKernelSource(mpProgram, (mKernelSignature+GetMD5()).c_str()); } - lastKernelHash = KernelHash; - lastProgram = mpProgram; + lastSecondKernelHash = lastOneKernelHash; + lastSecondProgram = lastOneProgram; + lastOneKernelHash = KernelHash; + lastOneProgram = mpProgram; } mpKernel = clCreateKernel(mpProgram, kname.c_str(), &err); if (err != CL_SUCCESS) _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits