Как распределить задачи между процессорами, чтобы всё выполнилось быстрее? Разбираем диаграмму Ганта, конвейер, зависимости задач и закон Амдала — с 50 задачами из ЕГЭ №22.
Диаграмма Ганта — это визуальный способ показать, какой процессор что делает в каждый момент времени.
На ЕГЭ №22 встречаются задачи на планирование процессов, конвейерную обработку, графы зависимостей и закон Амдала. Эта страница научит решать каждый тип.
Визуализация расписания выполнения задач на процессорах
Диаграмма Ганта — это горизонтальная временна́я шкала, где каждая строка представляет один процессор (или ресурс), а цветные блоки показывают, какая задача выполняется в каждый момент времени.
Допустим, есть 3 независимых процесса: A = 5 с, B = 3 с, C = 4 с, и 2 процессора.
Вариант 1: P1 = {A(5), C(4)} = 9 с, P2 = {B(3)} = 3 с. Общее время = 9 с.
Вариант 2: P1 = {A(5)} = 5 с, P2 = {B(3), C(4)} = 7 с. Общее время = 7 с.
Вариант 3: P1 = {A(5), B(3)} = 8 с, P2 = {C(4)} = 4 с. Общее время = 8 с.
Минимально возможное время не может быть меньше:
⌈Сумма всех времён / N⌉ — если бы загрузка была идеально равномернойmax(время одного процесса) — самый длинный процесс нельзя разделитьВ нашем примере: ⌈12/2⌉ = 6, max = 5. Нижняя оценка = max(6, 5) = 6. Но достичь 6 не удалось — лучший вариант = 7.
Отсортируйте процессы по убыванию времени. Каждый следующий процесс назначайте на тот процессор, который освободится раньше всего. Это не всегда даёт оптимум, но обычно близко к нему.
Как ускорить обработку, разбив задачу на стадии
Вместо того чтобы обрабатывать каждую команду целиком и только потом брать следующую, мы разбиваем обработку на стадии. Пока одна команда проходит стадию 2, следующая уже на стадии 1.
Аналогия: конвейер на заводе. Пока одна машина красится, другая собирается, третьая проходит контроль качества.
T = Σtᵢ + (n − 1) · max(tᵢ)Σtᵢ — сумма времён всех стадий (время прохождения первой команды)max(tᵢ) — время самой медленной стадии («узкое место»)n — количество команд
Первая команда должна пройти все стадии последовательно: это занимает Σtᵢ. После этого каждая следующая команда выходит с интервалом max(tᵢ) — потому что конвейер не может выпускать команды чаще, чем работает самая медленная стадия.
Конвейер из 3 стадий: 2 нс, 4 нс, 3 нс. Обработать 8 команд.
Σtᵢ = 2 + 4 + 3 = 9 нс (первая команда)
max(tᵢ) = 4 нс (стадия 2 — узкое место)
Ещё 7 команд: 7 × 4 = 28 нс
Итого: 9 + 28 = 37 нс
Если все k стадий длятся t нс, формула упрощается:
T = (k + n − 1) · t
Пример: 5 стадий по 1 нс, 100 команд → T = (5 + 100 − 1) × 1 = 104 нс.
n = (T − Σtᵢ) / max(tᵢ) + 1 (округлить вниз)
Когда задачи не могут выполняться в произвольном порядке
Часто задачи связаны: задача B не может начаться, пока не завершится задача A. Это описывается ориентированным ациклическим графом (DAG).
A → B означает: B зависит от A, B стартует не раньше, чем A завершится.
Критический путь — самый длинный путь в графе от начала до конца. Он определяет минимальное время выполнения всего проекта, даже если у нас бесконечно много процессоров.
Задачи: A(3), B(2), C(4), D(5), E(2). Зависимости: A→C, B→D, C→E, D→E.
Решение:
Критический путь: A→C→E = 3+4+2 = 9 (или B→D→E = 2+5+2 = 9). Оба пути одинаковой длины!
Почему бесконечное число ядер не даёт бесконечного ускорения
S = 1 / ((1 − p) + p / N)p — доля параллельного кода (от 0 до 1)N — число процессоровS — ускорение (во сколько раз быстрее)
Часть программы (1 − p) — последовательная, её нельзя ускорить никаким числом ядер. Она всегда выполняется за своё время. Параллельная часть p ускоряется в N раз.
| p (паралл.) | N ядер | Ускорение S | Комментарий |
|---|---|---|---|
| 80% | 4 | 2.5 | Из 4 ядер выжали 2.5× |
| 90% | 10 | 5.3 | 10 ядер → только 5.3× |
| 99% | 100 | ≈50 | 100 ядер → только 50× |
| 50% | 1000 | ≈2 | 1000 ядер, а ускорение всего 2× |
При N → ∞: S_max = 1 / (1 − p)
Если 90% кода параллельно, максимальное ускорение = 1/0.1 = 10 раз, даже с миллионом ядер.
N = p / (1/S − (1−p))Четыре типа задач и алгоритм для каждого
Введите времена процессов через запятую и укажите число процессоров. Симулятор построит оптимальную диаграмму Ганта.
Введите времена стадий и количество команд — калькулятор покажет пошаговое решение.
50 задач · 10 случайных · перемешать для новой подборки