LVV>>И возникает естественный вопрос: а оно вообще на многоядерном процессоре параллельно работает ?
LVV>>Как-то у меня не получается ускорить стандартный последовательный алгоритм — время получается практически то же самое.
SP>на msvc из коробки должно работать, на gcc/clang надо tbb подключать (-ltbb). Ну и проверять, что компилятор вообще это поддерживает https://en.cppreference.com/w/cpp/compiler_support/17.html#C.2B.2B17_library_features Хотя уже почти 10 лет прошло, пора бы и поддерживать.
Это с какого бодуна подключать tbb ?
Посторонняя библиотека, к стандартной отношения не имеет...
Вот жеж блин!
Впрочем, в minGW все равно не работает...
LVV>>И еще вопрос: вот хотелось бы заполнить вектор из 500 000 000 элементов случайными числами параллельно.
LVV>>generate(std::execution::par, v.begin(), v.end(), gen);
LVV>>Не возникнет ли здесь UB из-за ГСЧ ?
LVV>>Например, если
LVV>> mt19937_64 gen(rd());
LVV>>ведь внутренность ГСЧ явно не рассчитана на параллельное получение нескольких случайных чисел...
SP>например обернуть в лямбду
SP>SP>auto gen = [] {
SP> static mt19937_64 rng(rd());
SP> static std::mutex m;
SP> std::lock_guard<std::mutex> lock(m);
SP> return rng();
SP>};
SP>
Спасибо.
С мутексом — те же последовательные яйца, только вид сбоку...