17 std::thread::hardware_concurrency();
21 static constexpr auto async = std::launch::async;
22 static constexpr auto deferred = std::launch::deferred;
31 else if (k == 1 || k == (n - 1))
38 if(k > (n-k) ) k = n-k;
54 else if (k == 1 || k == (n - 1))
61 if(k > (n-k) ) k = n-k;
71 auto future_ncr_n_1_k_1
79 auto rlt = current_thread_n_1_k + future_ncr_n_1_k_1.get();
93 catch(
const std::exception& e)
95 std::cerr << e.what() <<
'\n';
108 if (k == 0 || n == k)
112 else if (k == 1 || k == (n - 1))
119 if(k > (n-k) ) k = n-k;
129 auto future_ncr_n_1_k_1
137 auto rlt = current_thread_n_1_k + future_ncr_n_1_k_1.get();
151 catch(
const std::exception& e)
153 std::cerr << e.what() <<
'\n';
179 std::cout <<
"single_thread_combination_recursion : "
180 << ctr::single_thread_combination_recursion(n, k)
197 std::cout <<
"smart_cross_thread_combination_recursion : "
198 << ctr::smart_cross_thread_combination_recursion(n, k)
201 std::cout <<
"cross_thread_combination_recursion : "
202 << ctr::cross_thread_combination_recursion(n, k)
205 std::cout <<
"single_thread_combination_recursion : "
206 << ctr::single_thread_combination_recursion(n, k)
215 std::cout <<
"\n\n========= single thread vs. multithread recursion ==== " <<
std::endl;
void single_vs_multiple_thread_recursion()
std::string elapsed_time(bool bReset=true, TimeUnit dummy_time=TimeUnit{}) const
enable_if_all_in_list_t< types::type_list_t< Type1, Type2 >, integral_list_t, ReturnType > ncr(Type1 nn, Type2 rr)
static int max_thread_count
static big_int_t smart_cross_thread_combination_recursion(big_int_t n, big_int_t k)
static constexpr auto deferred
static constexpr int factor
static constexpr auto async
static big_int_t cross_thread_combination_recursion(big_int_t n, big_int_t k)
static std::atomic< int > thread_count
static big_int_t single_thread_combination_recursion(big_int_t n, big_int_t k)
Stream output operators << are implemented.