void argMinReduce(int lid, size_t lsize, __local float *values, __local int *indices){
    for(int offset = lsize/2; offset > 0; offset >>= 1){
        if(lid < offset){
            argMin(values[lid], indices[lid], values[lid + offset], indices[lid + offset], values + lid, indices + lid);
        }
        barrier(CLK_LOCAL_MEM_FENCE);
    }
}
Beispiel #2
0
index2 m::argMinRand(matrixn const& a, m_real thr)
{
	index2 argMinV=argMin(a);

	std::vector<index2> indexes;

	m_real minV=a(argMinV(0), argMinV(1))*thr;
	for(int i=0; i<a.rows(); i++)
	{
		for(int j=0; j<a.cols(); j++)
		{
			if(a(i,j)<minV)
			{
				indexes.push_back(index2(i,j));
			}
		}
	}

	return indexes[rand()%indexes.size()];
}