opencl/source/openclwrapper.cxx | 1 + sc/source/core/opencl/formulagroupcl.cxx | 16 ++++++++++++++++ 2 files changed, 17 insertions(+)
New commits: commit 127b0efe6fee1620647a2e249cbae9b8f13ee0cd Author: Tor Lillqvist <[email protected]> Date: Tue Feb 10 20:04:01 2015 +0200 Don't call clReleaseProgram() on the same program twice If the clBuildProgram() failed, the lastSecondProgram variable kept as its value the already released program handle, and later we called clReleaseProgram() on it again. This is certainly wrong, and caused a crash at least with my OpenCL implementation. As such I am not sure if that lastOneProgram, lastSecondProgram etc dance is sane... Change-Id: Ia30426fbba9118ad7e20f13ef35daa5f78a1f0a1 diff --git a/sc/source/core/opencl/formulagroupcl.cxx b/sc/source/core/opencl/formulagroupcl.cxx index a70c0f7..6f42d2c 100644 --- a/sc/source/core/opencl/formulagroupcl.cxx +++ b/sc/source/core/opencl/formulagroupcl.cxx @@ -3837,6 +3837,7 @@ void DynamicKernel::CreateKernel() SAL_INFO("sc.opencl", "Releasing program " << lastSecondProgram); err = clReleaseProgram(lastSecondProgram); SAL_WARN_IF(err != CL_SUCCESS, "sc.opencl", "clReleaseProgram failed: " << ::opencl::errorString(err)); + lastSecondProgram = NULL; } if (::opencl::buildProgramFromBinary("", &::opencl::gpuEnv, KernelHash.c_str(), 0)) commit 770c92b048df2259df1b7ce2a47f9903fc8be387 Author: Tor Lillqvist <[email protected]> Date: Tue Feb 10 19:25:58 2015 +0200 Add SAL_INFOs for tracing kernel and program life cycle Change-Id: Icb28114d3939063dedaedbd0ce370210b3721fc5 diff --git a/opencl/source/openclwrapper.cxx b/opencl/source/openclwrapper.cxx index 658e275..5f0b991 100644 --- a/opencl/source/openclwrapper.cxx +++ b/opencl/source/openclwrapper.cxx @@ -442,6 +442,7 @@ bool buildProgramFromBinary(const char* buildOption, GPUEnv* gpuInfo, const char // something went wrong, fall back to compiling from source return false; } + SAL_INFO("opencl", "Created program " << gpuInfo->mpArryPrograms[idx] << " from binary"); for(size_t i = 0; i < numDevices; ++i) { delete[] pBinary[i]; diff --git a/sc/source/core/opencl/formulagroupcl.cxx b/sc/source/core/opencl/formulagroupcl.cxx index d549451..a70c0f7 100644 --- a/sc/source/core/opencl/formulagroupcl.cxx +++ b/sc/source/core/opencl/formulagroupcl.cxx @@ -1499,6 +1499,8 @@ public: cl_kernel redKernel = clCreateKernel(mpProgram, kernelName.c_str(), &err); if (err != CL_SUCCESS) throw OpenCLError("clCreateKernel", err, __FILE__, __LINE__); + SAL_INFO("sc.opencl", "Created kernel " << redKernel << " with name " << kernelName << " in program " << mpProgram); + // set kernel arg of reduction kernel // TODO(Wei Wei): use unique name for kernel cl_mem buf = Base::GetCLBuffer(); @@ -1556,6 +1558,8 @@ public: redKernel = clCreateKernel(mpProgram, kernelName.c_str(), &err); if (err != CL_SUCCESS) throw OpenCLError("clCreateKernel", err, __FILE__, __LINE__); + SAL_INFO("sc.opencl", "Created kernel " << redKernel << " with name " << kernelName << " in program " << mpProgram); + // set kernel arg of reduction kernel buf = Base::GetCLBuffer(); SAL_INFO("sc.opencl", "Kernel " << redKernel << " arg " << 0 << ": cl_mem: " << buf); @@ -2281,6 +2285,8 @@ public: cl_kernel redKernel = clCreateKernel(pProgram, kernelName.c_str(), &err); if (err != CL_SUCCESS) throw OpenCLError("clCreateKernel", err, __FILE__, __LINE__); + SAL_INFO("sc.opencl", "Created kernel " << redKernel << " with name " << kernelName << " in program " << pProgram); + // set kernel arg of reduction kernel for (size_t j = 0; j < vclmem.size(); j++) { @@ -2352,6 +2358,7 @@ public: cl_kernel redKernel = clCreateKernel(pProgram, kernelName.c_str(), &err); if (err != CL_SUCCESS) throw OpenCLError("clCreateKernel", err, __FILE__, __LINE__); + SAL_INFO("sc.opencl", "Created kernel " << redKernel << " with name " << kernelName << " in program " << pProgram); // set kernel arg of reduction kernel for (size_t j = 0; j < vclmem.size(); j++) @@ -2394,6 +2401,7 @@ public: if (CL_SUCCESS != err) throw OpenCLError("clFinish", err, __FILE__, __LINE__); + SAL_INFO("sc.opencl", "Relasing kernel " << redKernel); err = clReleaseKernel(redKernel); SAL_WARN_IF(err != CL_SUCCESS, "sc.opencl", "clReleaseKernel failed: " << ::opencl::errorString(err)); @@ -3719,6 +3727,7 @@ DynamicKernel::~DynamicKernel() } if (mpKernel) { + SAL_INFO("sc.opencl", "Releasing kernel " << mpKernel); err = clReleaseKernel(mpKernel); SAL_WARN_IF(err != CL_SUCCESS, "sc.opencl", "clReleaseKernel failed: " << ::opencl::errorString(err)); } @@ -3825,6 +3834,7 @@ void DynamicKernel::CreateKernel() if (lastSecondProgram) { + SAL_INFO("sc.opencl", "Releasing program " << lastSecondProgram); err = clReleaseProgram(lastSecondProgram); SAL_WARN_IF(err != CL_SUCCESS, "sc.opencl", "clReleaseProgram failed: " << ::opencl::errorString(err)); } @@ -3840,6 +3850,8 @@ void DynamicKernel::CreateKernel() &src, NULL, &err); if (err != CL_SUCCESS) throw OpenCLError("clCreateProgramWithSource", err, __FILE__, __LINE__); + SAL_INFO("sc.opencl", "Created program " << mpProgram); + err = clBuildProgram(mpProgram, 1, ::opencl::gpuEnv.mpArryDevsID, "", NULL, NULL); if (err != CL_SUCCESS) @@ -3890,6 +3902,8 @@ void DynamicKernel::CreateKernel() #endif throw OpenCLError("clBuildProgram", err, __FILE__, __LINE__); } + SAL_INFO("sc.opencl", "Built program " << mpProgram); + // Generate binary out of compiled kernel. ::opencl::generatBinFromKernelSource(mpProgram, (mKernelSignature + GetMD5()).c_str()); @@ -3902,6 +3916,7 @@ void DynamicKernel::CreateKernel() mpKernel = clCreateKernel(mpProgram, kname.c_str(), &err); if (err != CL_SUCCESS) throw OpenCLError("clCreateKernel", err, __FILE__, __LINE__); + SAL_INFO("sc.opencl", "Created kernel " << mpKernel << " with name " << kname << " in program " << mpProgram); } void DynamicKernel::Launch( size_t nr ) _______________________________________________ Libreoffice-commits mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
