From f5b21e81415c417fd3a7db97a2a02c5bd79f12c9 Mon Sep 17 00:00:00 2001 From: Yan Wang Date: Mon, 19 Jan 2015 15:50:16 +0800 Subject: [PATCH] Avoid deadlock becasue some work item couldn't reach barrier in loop and unsynchronized. Signed-off-by: Yan Wang --- modules/objdetect/src/cascadedetect.cpp | 2 +- modules/objdetect/src/opencl/cascadedetect.cl | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/modules/objdetect/src/cascadedetect.cpp b/modules/objdetect/src/cascadedetect.cpp index 6ddc0c878..8da3ffbf3 100644 --- a/modules/objdetect/src/cascadedetect.cpp +++ b/modules/objdetect/src/cascadedetect.cpp @@ -587,7 +587,7 @@ bool HaarEvaluator::read(const FileNode& node, Size _origWinSize) localSize = lbufSize = Size(0, 0); if (ocl::haveOpenCL()) { - if (ocl::Device::getDefault().isAMD()) + if (ocl::Device::getDefault().isAMD() || ocl::Device::getDefault().isIntel()) { localSize = Size(8, 8); lbufSize = Size(origWinSize.width + localSize.width, diff --git a/modules/objdetect/src/opencl/cascadedetect.cl b/modules/objdetect/src/opencl/cascadedetect.cl index 13cb1aa38..ce676426f 100644 --- a/modules/objdetect/src/opencl/cascadedetect.cl +++ b/modules/objdetect/src/opencl/cascadedetect.cl @@ -233,11 +233,12 @@ void runHaarClassifier( for( stageIdx = SPLIT_STAGE; stageIdx < N_STAGES; stageIdx++ ) { + barrier(CLK_LOCAL_MEM_FENCE); int nrects = lcount[0]; - barrier(CLK_LOCAL_MEM_FENCE); if( nrects == 0 ) break; + barrier(CLK_LOCAL_MEM_FENCE); if( lidx == 0 ) lcount[0] = 0;