|
40 / 29 / 11
Регистрация: 21.06.2019
Сообщений: 201
|
|
Не могу понять задание на многопоточку27.01.2021, 11:38. Показов 5812. Ответов 35
Всем привет, пытаюсь добить книжку Уильямса, но как-то тяжело без практики и поэтому нашел (вроде бы) неплохие задания по многопоточке - http://oop.afti.ru/task_blocks/10-mnogopotochnost .
Парочку уже реализовал и мне они казались несложными, но вот задание под названием «Алгоритмы min, max» я понять не могу. А именно следующий текст: "Многопоточность должна быть реализована как с помощью потоков (std::thread) так и с помощью асинхронных функций (std::async). Способ параллелизма должен определяться с помощью ExecutionPolicy классов (наподобие как это сделано в stl). Определение количества потоков выполнения и асинхронных функций является деталью реализации. Нижеприведенные сигнатуры функций pmin_element и pmax_element фиксированы и не подлежат изменению." Во-первых, что значит многопоточность должна быть реализована как с помощью thread, так и с помощью async (хотя async'и то на thread'ах и работают :| ...). Ну как я понимаю это задание, нужно сделать 2 версии одна с thread, а другая с async, хотя сбивает следующая строка. Во-вторых, что значит способ параллелизма должен определяться с помощью политик выполнения как в стандарте. То есть мне как-то надо самому сделать так, чтобы параллелизм мог быть seq, par, unseq_par, unseq? Я понимаю как сделать первые 2, но как быть с остальным, это уже какая-то векторизация (тема далеко непростая). Или это легко сделать? Хотелось бы тогда пример :3 Заранее благодарю!
0
|
|
| 27.01.2021, 11:38 | |
|
Ответы с готовыми решениями:
35
Не могу понять задание Не могу понять задание Не могу понять задание |
|
40 / 29 / 11
Регистрация: 21.06.2019
Сообщений: 201
|
||||||
| 28.01.2021, 14:49 [ТС] | ||||||
|
oleg-m1973, как-то с atomic не выходит корректно итераторы использовать, не подскажите как сделать? (size_t тут не подходит, так как алгоритм принимает итераторы, а новый контейнер делать как-то не хочется)
Тут как я понимаю происходит гонка, может как-то compare_exchange нужно прикрутить, не знаю что делать :c
0
|
||||||
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
|||
| 28.01.2021, 15:37 | |||
|
Добавлено через 2 минуты Хотя, наверное можно и для любых итераторов сделать. Но сделай пока хотя бы для массива Добавлено через 10 минут
0
|
|||
|
40 / 29 / 11
Регистрация: 21.06.2019
Сообщений: 201
|
||||||
| 29.01.2021, 13:28 [ТС] | ||||||
|
oleg-m1973, Добрый день, вроде сделал с итератором (при условии конечно что этот алгоритм один работает над структурой и вообще, только читает из нее) (реализовал в 3 constexpr if, то есть там где unseq_par (хотя мб это вообще не тоже самое)):
unseq_par: 1145 seq: 80 Есть вероятность что я где-то серьезно ошибся и он не параллелится, ответы же на всех тестах были валидны. Других правок не вносил, но учту Ваши рекомендации в дальнейших заданиях!
0
|
||||||
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
|||||
| 29.01.2021, 13:39 | |||||
|
Добавлено через 1 минуту
0
|
|||||
|
40 / 29 / 11
Регистрация: 21.06.2019
Сообщений: 201
|
||||||
| 29.01.2021, 13:42 [ТС] | ||||||
|
oleg-m1973,
1) я сделал пробный:
3) ну оно выполнится так или иначе хотя бы в одном потоке, то есть инкремент точно произойдет, но возможно стоит ее записать внутри while, чтобы каждый поток инкрементил.
0
|
||||||
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
|||||||
| 29.01.2021, 13:44 | |||||||
1
|
|||||||
|
40 / 29 / 11
Регистрация: 21.06.2019
Сообщений: 201
|
|
| 29.01.2021, 13:45 [ТС] | |
|
oleg-m1973, согласен, в итераторе я это учел, а тут что-то нет
0
|
|
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
||||
| 29.01.2021, 13:48 | ||||
|
0
|
||||
|
40 / 29 / 11
Регистрация: 21.06.2019
Сообщений: 201
|
||||||
| 29.01.2021, 13:48 [ТС] | ||||||
|
oleg-m1973, еще это забыл к 1)
0
|
||||||
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
|
| 29.01.2021, 13:51 | |
|
0
|
|
|
40 / 29 / 11
Регистрация: 21.06.2019
Сообщений: 201
|
|
| 29.01.2021, 13:52 [ТС] | |
|
oleg-m1973, ну с индексом работает, только тоже медленнее чем однопоточный :|
0
|
|
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
|||||||
| 29.01.2021, 14:02 | |||||||
Сообщение было отмечено HamsterGamer как решение
РешениеЭто нормально, что медленнее - там накладных расходов просто получается больше, чем на обработку одного элемента. Во первых, запускай не два потока, а по количеству на процессоров - std::thread::hardware_concurrency() Добавлено через 2 минуты Во-вторых, сэмулируй долгую обработку
Добавлено через 3 минуты Тут производительность зависит от алгоритма. Для разных алгоритмов нужно выбирать разные типы распараллеливания.
1
|
|||||||
|
40 / 29 / 11
Регистрация: 21.06.2019
Сообщений: 201
|
|
| 29.01.2021, 14:06 [ТС] | |
|
oleg-m1973,
par: 1963 seq: 15461 ну да, скорее операция сравнения тут играет самую важную роль, большое спасибо за помощь. Буду дальше разбираться
0
|
|
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
||||||||
| 29.01.2021, 14:11 | ||||||||
|
Добавлено через 2 минуты Можно попробовать вот так
1
|
||||||||
|
40 / 29 / 11
Регистрация: 21.06.2019
Сообщений: 201
|
|
| 29.01.2021, 14:16 [ТС] | |
|
oleg-m1973,
par: 2069 seq: 15542 Вроде бы тоже самое С итераторами там вообще одинаково с seq :c
0
|
|
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
||
| 29.01.2021, 14:20 | ||
|
В общем, для задачи поиска минимума-максимума лучше работать с блоками, а не с отдельными элементами.
1
|
||
| 29.01.2021, 14:20 | |
|
Не могу понять 2 задание Не могу понять задание. Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js.
В помощники взял Яндекс-Алису.
Было создано три зала на разные интересы.
исторические и ретро
сериал Хичкок. . .
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#.
Название изменил на ColorStep.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами:
- ВидТО (СправочникСсылка. ВидыТО);
- ВидГСМ. . .
|
|
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F
Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU.
Опрашиваются регистры. . .
|
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка:
Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
|
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо
Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
|