|
40 / 29 / 11
Регистрация: 21.06.2019
Сообщений: 201
|
|
Не могу понять задание на многопоточку27.01.2021, 11:38. Показов 5725. Ответов 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 задание Не могу понять задание. Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Из невошедшего на форум (диалог с ИИ-гугла)
zorxor 29.07.2026
А вот, что интересно, сказал мне ИИ-гугла:
Этот текст — эмоциональный пост пользователя под ником zorxor на интернет-форуме (вероятно, посвященном мистике, непознанному или альтернативной науке). . . .
|
Был праздник вчера, а я и не знал.
kumehtar 28.07.2026
27. 07. 2026г. Intel Core 2 Duo исполнилось 20 лет
Новости компьютерного мира и их обсуждение (4)
Салют, шампанское, овации!
:drink:
|
Нейтральные знания, чистый код - бла-бла-бла-бла, на самом деле кликбейт и самореклама, плагиат, и вот почему
Hrethgir 27.07.2026
То-есть отклонение такой публикации говорит само за себя, и пусть только возьмут на вооружение после отклонения публикации - это будет чистейшим актом плагиата. Отклонял Хабр.
Дословно, отклонённая. . .
|
тв 16 бой ии
anaschu 27.07.2026
Великий Перелом ИИ: Как уравнения ОДУ Radau дожали цензурные фильтры Алисы
Фиксируем в мемофонде Теории Всего беспрецедентный факт в истории ИИ-зондирования. В затяжном многораундовом. . .
|
|
мв 15. непроверенное, возможно, глюк
anaschu 27.07.2026
НАУЧНО-АНАЛИТИЧЕСКИЙ ОТЧЕТ. РАЗДЕЛ 1. 1: «НАУКА» (РАСШИРЕННАЯ СТЕХИОМЕТРИЧЕСКАЯ И ГЕНЕТИЧЕСКАЯ ВЕРСИЯ)Тема: Теоретическое обоснование инвариантности 19-мерного тензорного ядра непрерывных ОДУ и. . .
|
Очистка реквизитов и табличных частей документа при копировании (вариант 2)
Maks 26.07.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРаботу", разработанного в КА2.
Задача: Заменить алгоритм запрета копирования документов для сотрудников с ролью "Стажер",. . .
|
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
|
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
|