Parallel and distributed computing · Параллельные и распределенные вычисления
Doing work in order
- Most simple programs are sequential: they do one step, then the next, then the next.
- The computer finishes step 1 before it starts step 2.
- This is easy to understand, but it can be slow for big jobs.
Выполнение задач последовательно
- Большинство простых программ являются последовательными: они выполняют один шаг, затем следующий, затем еще один.
- Компьютер завершает шаг 1 перед тем, как начать шаг 2.
- Это легко понять, но для больших задач это может быть медленно.
Sequential (one worker):
task A -> task B -> task C -> task D
|-------|--------|--------|--------|
total time = A + B + C + D
Parallel computing
- Parallel computing splits work so several parts run at the same time.
- A modern computer has several processors (also called cores) that can each do work.
- If four workers each take one task, four tasks can finish in about the time of one.
Параллельные вычисления
- Параллельные вычисления делят работу так, что несколько частей выполняются одновременно.
- В современном компьютере есть несколько процессоров (также называемых ядрами), способных выполнять работу.
- Если четыре работника берут по одной задаче, четыре задачи могут быть завершены примерно за время выполнения одной.
Parallel (four workers at once):
worker 1: task A
worker 2: task B
worker 3: task C
worker 4: task D
|--------|
total time ≈ the longest single task
Speedup
- Speedup asks: how many times faster is the parallel version?
- speedup = (sequential time) / (parallel time).
- Example: a job takes 8 seconds in order, but 2 seconds split up. Speedup = 8 / 2 = 4 times.
Ускорение
- Ускорение спрашивает: во сколько раз параллельная версия быстрее?
- ускорение = (время последовательного выполнения) / (время параллельного выполнения).
- Пример: задача занимает 8 секунд при последовательном выполнении, но 2 секунды при разделении. Ускорение = 8 / 2 = в 4 раза.
Not always N times faster
- More processors does not always mean N times faster.
- Some parts of a job cannot be split — they must happen in order.
- Also, splitting work and joining results back together takes some extra time.
Не всегда N раз быстрее
- Наличие большего количества процессоров не всегда означает ускорение в N раз.
- Некоторые части задачи нельзя разделить — они должны выполняться последовательно.
- Кроме того, разделение работы и объединение результатов занимает некоторое дополнительное время.
Job = setup (must be in order) + main work (can split)
setup main work (split over 4)
|-----| |--------------------------------|
|--------| <- this part gets 4x
The setup part stays the same length.
Distributed computing
- Distributed computing uses many separate computers that cooperate over a network.
- They may sit in different rooms, cities, or countries.
- Examples: the web (many servers), big data jobs split over thousands of machines, and large science projects.
Распределенные вычисления
- Распределенные вычисления используют множество отдельных компьютеров, сотрудничающих через сеть.
- Они могут находиться в разных комнатах, городах или странах.
- Примеры: веб (множество серверов), задачи больших данных, распределенные по тысячам машин, и крупные научные проекты.
Distributed (computers cooperate over a network):
[computer 1] [computer 2] [computer 3]
\ | /
\ | /
shared network / job
Each computer does part of the work.
Trade-offs
- Good: parallel and distributed systems can be much faster, and can handle huge jobs.
- Harder: the code is more complex; parts must be coordinated; results must be combined.
- Limits: speedup is capped by the parts that cannot be split, and by network delays between computers.
Компромиссы
- Плюс: параллельные и распределенные системы могут быть намного быстрее и справляться с огромными объемами задач.
- Сложнее: код становится более сложным; компоненты требуют координации; результаты необходимо объединять.
- Ограничения: ускорение ограничено частями, которые нельзя разделить, а также задержками сети между компьютерами.
Key words
- Sequential: steps run one after another, in order.
- Parallel: parts run at the same time on several processors.
- Speedup: sequential time divided by parallel time.
- Distributed: many separate computers cooperate over a network.
Ключевые слова
- Последовательный: шаги выполняются один за другим, строго по порядку.
- Параллельный: части выполняются одновременно на нескольких процессорах.
- Ускорение: время последовательного выполнения, деленное на время параллельного выполнения.
- Распределенный: множество отдельных компьютеров сотрудничают через сеть.
Common mistakes
- Parallel speed-up only helps work that can be split into independent parts.
- Each extra processor adds less and less speed.
Распространенные ошибки
- Параллельное ускорение полезно только для задач, которые можно разбить на независимые части.
- Каждый дополнительный процессор дает все меньше прибавки в скорости.
Now you try
- Put the speedup formulas to work as small functions.
- Model a job that is part fixed setup and part splittable work. Press Check answer.
Теперь попробуйте сами
- Примените формулы ускорения в виде небольших функций.
- Смоделируйте задачу, состоящую из фиксированной подготовки и разделяемой работы. Нажмите Проверить ответ.
A job has a setup part that must run in order, and a splittable part that workers can share at the same time. Write parallel_time(setup, splittable, workers) that returns the total time: the setup, plus the splittable part divided among the workers. Example: parallel_time(2, 8, 4) → 4.0 (2 + 8/4). · Задача имеет часть setup, которая должна выполняться последовательно, и часть splittable, которую workers могут выполнять одновременно. Напишите процедуру parallel_time(setup, splittable, workers), которая возвращает общее время: время подготовки, плюс делимую часть, разделенную между работниками. Пример: ⟨parallel_time(2, 8, 4)⟩ → ⟨4.0⟩ (2 + 8/4).
Click Run to see the output here. · Нажмите Запустить, чтобы увидеть результат здесь.
Write speedup(sequential, parallel) that returns how many times faster the parallel version is: the sequential time divided by the parallel time. Example: speedup(8, 2) → 4.0. · Напишите процедуру speedup(sequential, parallel), которая возвращает, во сколько раз параллельная версия быстрее: последовательное время, деленное на параллельное время. Пример: ⟨speedup(8, 2)⟩ → ⟨4.0⟩.
Click Run to see the output here. · Нажмите Запустить, чтобы увидеть результат здесь.
Even with unlimited workers, the setup part still cannot be split. Write max_speedup(setup, splittable) for the best possible speedup: the whole job time divided by the setup time (endless workers shrink the splittable part to almost nothing, leaving only the setup). Example: max_speedup(2, 6) → 4.0 ((2+6)/2). · Даже при неограниченном количестве работников часть setup все равно нельзя разделить. Напишите процедуру max_speedup(setup, splittable) для максимально возможного ускорения: общее время задачи, деленное на время подготовки (бесконечное число работников сокращает делимую часть почти до нуля, оставляя только подготовку). Пример: ⟨max_speedup(2, 6)⟩ → ⟨4.0⟩ ((2+6)/2).
Click Run to see the output here. · Нажмите Запустить, чтобы увидеть результат здесь.