Exemplo n.º 1
0
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);
}
Exemplo n.º 2
0
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);
}
Exemplo n.º 3
0
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;
}