Всем привет, читаю в данный момент книгу по многопоточности в С++, так вот там есть примерно такой код:
template<typename Iterator,typename T>
T parallel_accumulate(Iterator first,Iterator last,T init)
{
unsigned long const length=std::distance(first,last);
if(!length)
return init;
unsigned long const min_per_thread=25;
unsigned long const max_threads=
(length+min_per_thread-1)/min_per_thread;
unsigned long const hardware_threads=
std::thread::hardware_concurrency();
Я надеюсь что по контексту будет примерно понятно что код делает.
Может быть кто-то знает почему min_per_thread=25? В гугле найти не могу, в книге объяснений нет, единственное:
«Although this is quite a long function, it’s actually straightforward. If the input range is empty B, you just return the initial value init. Otherwise, there’s at least one element in the range, so you can divide the number of elements to process by the minimum block size in order to give the maximum number of threads c. This is to avoid creating 32 threads on a 32-core machine when you have only five values in the range.»