32 namespace scheduler_utils
35 std::pair<unsigned, unsigned>
split_2d(
unsigned max_threads, std::size_t m, std::size_t n)
47 double ratio = m / static_cast<double>(n);
51 std::sqrt(max_threads * ratio));
54 for(
unsigned i = 0; i != adjusted; ++i)
57 const unsigned adj_down = adjusted - i;
58 if(max_threads % adj_down == 0)
60 return { adj_down, max_threads / adj_down };
64 const unsigned adj_up = adjusted + i;
65 if(max_threads % adj_up == 0)
67 return { adj_up, max_threads / adj_up };
74 return { std::min<unsigned>(m, max_threads), 1 };
78 return { 1, std::min<unsigned>(n, max_threads) };
std::pair< unsigned, unsigned > split_2d(unsigned max_threads, std::size_t m, std::size_t n)
Given two dimensions and a maximum number of threads to utilise, calculate the best combination of th...
Copyright (c) 2017-2021 Arm Limited.
int round(float x, RoundingPolicy rounding_policy)
Return a rounded value of x.