реши задачу: Кеша заинтересовался распределёнными ...
생성일: 2025년 2월 8일
생성일: 2025년 2월 8일
реши задачу: Кеша заинтересовался распределёнными вычислениями и написал программу для тестирования различных кластеров (наборов процессоров).
Кешина программа довольно проста - она добавляет в очередь
10000 операций по
6 секунд каждая и запускает задачи из этой очереди как только у одного из процессоров появляется свободный поток. Запущенная задача из очереди убирается. Программа работает до тех пор, пока очередь не опустеет. Программа не дожидается окончания работы отправленных задач, работа завершается сразу же, как только в очереди не остаётся ни одной задачи. Отправку задач Кеша для простоты вычислений считает мгновенной.
Кеша рассматривает
3 вида процессоров:
A -
8 ядер,
2 потока на каждом ядре, стоимость -
500 денег за один процессор.
B -
16 ядер,
2 потока на каждом ядре, стоимость -
700 денег за один процессор.
C -
4 ядра,
1 поток на каждом ядре, стоимость -
200 денег за один процессор.
Кеша хочет собрать кластер, купив некоторое количество процессоров того или иного типа для запуска на них своей программы. Определите, какое минимальное время работы программы Кеша может достичь, если он хочет, чтобы все используемые процессоры в сумме стоили не более
3000 денег. В качестве ответа укажите через пробел
2 числа – минимальное возможное число секунд и необходимое для этого количество денег.
Примечание: кластер может состоять из процессоров разных типов, а может и из процессоров одного типа.
Разбор задачи
Имеется очередь из 10 000 задач, каждая задача занимает ровно 6 секунд. Задачи выполняются на кластере, состоящем из некоторого набора процессоров. Важная особенность: программа заканчивает работу в тот момент, когда очередь опустела, то есть когда последняя задача была запущена (а не когда она завершилась). Таким образом:
Если у нас есть потоков (thread-ов), то они могут запускать задачи «волнами» каждые 6 секунд:
Пусть требуется таких «волн» (шагов по 6 секунд), чтобы распределить все 10 000 задач. Тогда:
За одну волну (когда потоки только что освободились) можно выдать максимум задач (по одной на каждый поток). Чтобы покрыть все 10 000 задач за волн, нужно:
Минимальное , удовлетворя этому, есть
Тогда итоговое время:
Типы процессоров и их «выгода»
У нас есть три типа процессоров с разными характеристиками:
A
B
C
Наилучшее соотношение «потоки/стоимость» у процессора типа B (примерно 0.0457), затем идёт A, и хуже всего C.
Задача: выбрать некоторое количество процессоров (A, B, C) так, чтобы суммарная стоимость , а суммарное число потоков было максимально (это даёт минимальное время ).
Поиск оптимальной комбинации
Попробуем взять максимум B, так как у них лучшее «потоки/стоимость»:
Проверим, не выйдет ли больше потоков, если комбинировать B и A и/или C как-то иначе:
Таким образом, максимум потоков в пределах 3000 денег даёт комбинация:
4 процессора B + 1 процессор C = 132 потока, стоимость ровно 3000.
Вычисление времени
При потоках нам нужно закрыть 10 000 задач по 6 с:
Тогда число «волн» . Итоговое время:
Ответ
Минимальное возможное время работы программы (при бюджете не более 3000) равно 450 секунд. При этом нужно ровно 3000 денег (дешевле уже не получится набрать столько потоков, чтобы уменьшить время).
450 3000