quick_select_template Class — pytorch Architecture
Architecture documentation for the quick_select_template class in Sorting.cpp from the pytorch codebase.
Entity Profile
Source Code
aten/src/ATen/native/Sorting.cpp lines 129–184
template <typename scalar_t, typename Comp, typename Fn>
void quick_select_template(
TensorAccessor<scalar_t, 1> arr,
int64_t k,
Comp gt_or_nan,
Fn swap_fn) {
int64_t L = 0;
int64_t R = arr.size(0) - 1;
do {
if (R <= L) // One element only
return;
if (R == L + 1) { // Two elements only
if (gt_or_nan(arr[L], arr[R])) {
swap_fn(L, R);
}
return;
}
// Use median of three for pivot choice
auto P = L + (R - L) / 2;
swap_fn(P, L + 1);
if (gt_or_nan(arr[L + 1], arr[R])) {
swap_fn(L + 1, R);
}
if (gt_or_nan(arr[L], arr[R])) {
swap_fn(L, R);
}
if (gt_or_nan(arr[L + 1], arr[L])) {
swap_fn(L + 1, L);
}
auto i = L + 1;
auto j = R;
auto piv = arr[L];
do {
do
i++;
while (gt_or_nan(piv, arr[i]));
do
j--;
while (gt_or_nan(arr[j], piv));
if (j < i)
break;
swap_fn(i, j);
} while (true);
swap_fn(L, j);
// Re-set active partition
if (j <= k)
L = i;
if (j >= k)
R = j - 1;
} while (true);
}
Source
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free