Моделі паралельних обчислень; класифікація Флінна
Розділ: Основи мов програмування
📌 Про що ця тема
Тут перевіряють розуміння того, як обчислення можуть виконуватися одночасно (паралельно), а не одне за одним (послідовно). Ключове поняття — класифікація Флінна, яка ділить архітектури комп'ютерів за тим, скільки потоків команд і скільки потоків даних обробляється одночасно.
📖 Головне
• Паралельні обчислення — це виконання кількох операцій в один і той самий момент часу, щоб прискорити роботу. Протилежність — послідовні (одна команда за раз).
• Потік команд (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 — потік команд це послідовність інструкцій, які виконує процесор, а потік даних — послідовність даних, над якими ці команди виконуються.