Моделі паралельних обчислень; класифікація Флінна

Розділ: Основи мов програмування

📌 Про що ця тема

Тут перевіряють розуміння того, як обчислення можуть виконуватися одночасно (паралельно), а не одне за одним (послідовно). Ключове поняття — класифікація Флінна, яка ділить архітектури комп'ютерів за тим, скільки потоків команд і скільки потоків даних обробляється одночасно.


📖 Головне

• Паралельні обчислення — це виконання кількох операцій в один і той самий момент часу, щоб прискорити роботу. Протилежність — послідовні (одна команда за раз).

• Потік команд (Instruction stream) — послідовність інструкцій, які виконує процесор.

• Потік даних (Data stream) — послідовність даних, над якими виконуються команди.

• Класифікація Флінна ділить системи за комбінацією «один/багато» для команд і даних — виходить 4 класи.

• SISD (Single Instruction, Single Data) — один потік команд, один потік даних. Класичний послідовний комп'ютер з одним процесором, одне ядро виконує одну команду над одними даними.

• SIMD (Single Instruction, Multiple Data) — одна команда одночасно застосовується до багатьох даних. Приклад: обробка масивів, графіки, векторні процесори, GPU.

• MISD (Multiple Instruction, Single Data) — багато різних команд над одними даними. Найрідкісніший тип, майже не трапляється практично; приклад — системи з надлишковістю для надійності.

• MIMD (Multiple Instruction, Multiple Data) — багато команд над багатьма даними одночасно. Це сучасні багатоядерні процесори, кластери, суперкомп'ютери.

• Моделі паралелізму: за даними (однакова операція над різними даними — ближче до SIMD) і за задачами (різні операції/потоки — ближче до MIMD).

• Переваги паралельності — швидкість і продуктивність; складнощі — синхронізація потоків, розподіл даних, уникнення конфліктів доступу.


🔢 Як це працює на прикладі

Приклад 1. Треба додати до кожного елемента масиву [2, 5, 7, 9] число 10.

• SISD: процесор по черзі: 2+10, потім 5+10, потім 7+10, потім 9+10 — 4 кроки.

• SIMD: одна команда «+10» застосовується одразу до всіх 4 елементів паралельно — фактично 1 крок. Це типовий паралелізм за даними.


Приклад 2. Визначити клас для сучасного 4-ядерного процесора, де кожне ядро виконує свою програму над своїми даними.

• Багато потоків команд (у кожного ядра свій) + багато потоків даних → це MIMD.


⚠️ Типові помилки

• Плутають SIMD і MIMD: у SIMD команда ОДНА на всіх, у MIMD — у кожного процесора СВОЯ.

• Вважають, що SISD — це завжди «старий» чи «поганий» комп'ютер; насправді це просто послідовна модель з одним потоком.

• Забувають, що MISD майже не має реального застосування, і приписують йому GPU (а GPU — це SIMD).

• Плутають «потік команд» і «потік даних» місцями при розшифровці абревіатур.

• Думають, що паралельність завжди пришвидшує у N разів — забувають про витрати на синхронізацію.


🎯 Що завчити напам'ять

• 4 класи Флінна і їх розшифровку: SISD, SIMD, MISD, MIMD.

• S = Single (один), M = Multiple (багато); перше слово — Instruction (команди), друге — Data (дані).

• SISD — послідовний ПК; SIMD — GPU/векторні/обробка масивів; MISD — рідкісний; MIMD — багатоядерні, кластери.

• Два види паралелізму: за даними та за задачами.


🧠 Перевір себе

1. Як розшифровується SIMD і де застосовується?

2. До якого класу Флінна належить сучасний багатоядерний процесор?

3. Який клас Флінна майже не має практичного застосування?

4. Чим потік команд відрізняється від потоку даних?


Відповіді: 1 — Single Instruction, Multiple Data; одна команда над багатьма даними (GPU, обробка масивів, графіка). 2 — MIMD. 3 — MISD. 4 — потік команд це послідовність інструкцій, які виконує процесор, а потік даних — послідовність даних, над якими ці команди виконуються.

Перевірити себе на практиці

Прочитати — половина справи. Далі потрібні завдання цієї ж теми з розбором кожної відповіді: саме на них видно, чи справді тема закрита.