Avoid deadlock becasue some work item couldn't reach barrier in loop

and unsynchronized.

Signed-off-by: Yan Wang <yan.wang@linux.intel.com>
This commit is contained in:
Yan Wang 2015-01-19 15:50:16 +08:00
parent df57d038b8
commit f5b21e8141
2 changed files with 3 additions and 2 deletions

View File

@ -587,7 +587,7 @@ bool HaarEvaluator::read(const FileNode& node, Size _origWinSize)
localSize = lbufSize = Size(0, 0); localSize = lbufSize = Size(0, 0);
if (ocl::haveOpenCL()) if (ocl::haveOpenCL())
{ {
if (ocl::Device::getDefault().isAMD()) if (ocl::Device::getDefault().isAMD() || ocl::Device::getDefault().isIntel())
{ {
localSize = Size(8, 8); localSize = Size(8, 8);
lbufSize = Size(origWinSize.width + localSize.width, lbufSize = Size(origWinSize.width + localSize.width,

View File

@ -233,11 +233,12 @@ void runHaarClassifier(
for( stageIdx = SPLIT_STAGE; stageIdx < N_STAGES; stageIdx++ ) for( stageIdx = SPLIT_STAGE; stageIdx < N_STAGES; stageIdx++ )
{ {
barrier(CLK_LOCAL_MEM_FENCE);
int nrects = lcount[0]; int nrects = lcount[0];
barrier(CLK_LOCAL_MEM_FENCE);
if( nrects == 0 ) if( nrects == 0 )
break; break;
barrier(CLK_LOCAL_MEM_FENCE);
if( lidx == 0 ) if( lidx == 0 )
lcount[0] = 0; lcount[0] = 0;