double oclMorphFilter::runSubtractKernel( const oclImage2DHolder& sourceA, const oclImage2DHolder& sourceB, oclImage2DHolder& output) { cl_int err; err = kernelSubtract.setArg(0, sourceA.img); err = kernelSubtract.setArg(1, sourceB.img); err |= kernelSubtract.setArg(2, output.img); if(!oclContext::oclError("Error while setting kernel arguments", err)) return 0.0; cl::NDRange offset(computeOffset(0, 0)); cl::NDRange gridDim(computeGlobal(0, 0)); cl::Event evt; err = ctx->commandQueue().enqueueNDRangeKernel( kernelSubtract, offset, gridDim, ctx->workgroupSize(), nullptr, &evt); evt.wait(); oclContext::oclError("Error while executing kernel over ND range!", err); return oclContext::oclElapsedEvent(evt); }
double oclMorphFilter::runMorphologyKernel( cl::Kernel* kernel, const oclImage2DHolder& source, oclImage2DHolder& output) { cl_int err; err = kernel->setArg(0, source.img); err |= kernel->setArg(1, output.img); err |= kernel->setArg(2, structuringElement.buf); err |= kernel->setArg(3, structuringElement.size / static_cast<int>(sizeof(cl_int2))); if(!oclContext::oclError("Error while setting kernel arguments", err)) return 0.0; cl::NDRange offset(computeOffset(0, 0)); cl::NDRange gridDim(computeGlobal(0, 0)); cl::Event evt; err = ctx->commandQueue().enqueueNDRangeKernel( *kernel, offset, gridDim, ctx->workgroupSize(), nullptr, &evt); evt.wait(); oclContext::oclError("Error while executing kernel over ND range!", err); return oclContext::oclElapsedEvent(evt); }
bool PRDF::perform(OptCTX & oc) { START_TIMER_AFTER(); m_ru->checkValidAndRecompute(&oc, PASS_RPO, PASS_UNDEF); List<IRBB*> * bbl = m_ru->get_bb_list(); if (bbl->get_elem_count() == 0) { return false; } List<IR const*> lst; C<IRBB*> * ct; for (bbl->get_head(&ct); ct != bbl->end(); ct = bbl->get_next(ct)) { IRBB * bb = ct->val(); ASSERT0(bb); computeLocal(bb, lst); } computeGlobal(); //dump(); END_TIMER_AFTER(get_pass_name()); return false; }