template <typename T, typename SizeT, typename Compare>
__device__ SizeT binarySearch(T* elements, SizeT lower_bound, SizeT upper_bound,
T element_to_find, Compare lessThan)
{
while (lower_bound < upper_bound)
{
SizeT mid_point = (lower_bound + upper_bound) >> 1;
auto element = elements[mid_point];
if (lessThan(element, element_to_find))
lower_bound = mid_point + 1;
else upper_bound = mid_point;
}
SizeT retval = horovod::dgc::PreDefinedValues<SizeT>::InvalidValue;
if (upper_bound == lower_bound)
{
if (lessThan(element_to_find, elements[upper_bound]))
retval = upper_bound - 1;
else
retval = upper_bound;
}
return retval;
}
template <typename T, typename SizeT>
__device__ SizeT binarySearch(T* elements, SizeT lower_bound, SizeT upper_bound,
T element_to_find)
{
return binarySearch(elements, lower_bound, upper_bound, element_to_find,
[]__device__ (const T &a, const T &b)
//上面使用lambda函数编程
{
return (a < b);
});
}
cuda lambda函数小例子
最新推荐文章于 2025-06-04 10:58:27 发布