LINUX.ORG.RU

std::reduce (и собратия) с ограничением на число тредов

 , ,


1

3

Привет ЛОР.

Как ограничить максимальное число тредов, доступных для std::reduce с parallel_unsequenced_policy? Я просмотрел соответствующие страницы в cppreference, но не нашёл ответа. Я попробовал поиграться на уровене prlimit, но получил ошибку thread_monitor Resource temporarily unavailable in pthread_create. Хотелось бы не городить костылей в виде семафоров и мьютексов только ради такой казалось бы простой задачи.

UPD: В стандартной библиотеке так сделать нельзя, а вот в HPX можно. Вот пример: https://github.com/STEllAR-GROUP/hpx/blob/master/examples/quickstart/vector_zip_dotproduct.cpp

★★★★★

Последнее исправление: luke (всего исправлений: 1)

Ответ на: комментарий от luke

Можно взять пул из boost::asio на пока. Конечный std’шный вариант всё равно будет чем-то похожим. Будет немного доп обвязки в виде проверки атомиков или futures. По идее, потом можно будет передавать экзекьюторы в алгоритмы без низкоуровневых телодвижений.

kvpfs ★★
()

Хотелось бы не городить костылей в виде семафоров и мьютексов

2 вопроса:

  • а причём здесь семафоры?
  • неужели Вам не интересно попытаться написать своё? Во-первых - это действительно познавательно, а во-вторых - я уверен там куча своей специфики связанной с приоритетами конкретно взятого юнита вычислений, их зависимостями итд итп. Нет?
bugfixer ★★★★★
()
Ответ на: комментарий от bugfixer

Да, с семафорами наверное не выйдет, я думал завести глобальный счётчик тредов, и ежели он достиг максимума то запретить исполнение, но всё равно тред-то будет создан.

Второе: мне freed partial wave analysis надо писать, а не свою libc++.

luke ★★★★★
() автор топика
Ответ на: комментарий от luke

Второе: мне freed partial wave analysis надо писать, а не свою libc++.

На HPX смотрели? Вроде бы там пытаются сделать на современном C++ удобные инструменты для решения вычислительных задач.

eao197 ★★★★★
()
Ответ на: комментарий от eao197

Нет, не смотрел. Спасибо за ссылку.

luke ★★★★★
() автор топика
Ответ на: комментарий от eao197

Спасибо ещё раз.

Нужно сделать примерно такую штуку. Выглядит так же, как и в stdlib, только можно выкрутить ручку не на максимум:

    std::vector<std::string> const cfg = {"hpx.os_threads=4"};
luke ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.