частки послідовних операцій (c) у програмі: S? 1/(с + (1-с)/N). Граничні значення c відповідають повністю паралельним (c = 0) і повністю послідовним (c = 1) програмам. Якщо лише 1/10 частина програми виконується послідовно, то в принципі неможливо прискорення в десять разів незалежно від кількості використовуваних процесорів (ядер) [4]. Важливе наслідок закону Амдала полягає в тому, що максимальне зростання продуктивності (в N разів при N процесорах) недосяжний. В іншому випадку послідовно виконується частина програми повинна дорівнювати нулю, що неможливо. Ще один наслідок закону таке: чим менше частка послідовно виконуваної частини програми, тим більше приріст продуктивності (рис. 1). br/>В
Рис. 1. Наслідку закону Амдала
Сьогодні тільки невелика частина програмного забезпечення може виконуватися на багатоядерних процесорах, що підтверджують результати тестів синтетичних і призначених для конкретних класів додатків (див., наприклад, 3dnews.ru/cpu/dualcore-cpu/index03 . htm). Реальне зростання продуктивності дають лише програми, оптимізовані під багато потоковість, такі як Adobe Premiere Pro 1.5 і 3DMax. Дуже важливі розробка і впровадження драйверів пристроїв, що підтримують багатопоточність. При переході з одноядерних процесорів на багатоядерні доводиться брати до уваги проблему послідовного виконання. br/>
.1 Особливості переходу до паралельних обчислень
У ній виконання вважається послідовним, якщо в якийсь момент одне або більше ядер не можуть виконувати код одночасно з іншими ядрами. Така ситуація може виникнути з різних причин: блокування при доступі до ресурсів, необхідність синхронізації процесів або потоків на ядрах, підтримка когерентності кеш-пам'яті, нерівномірність завантаження. p align="justify"> Блокування виникають через неможливість (наприклад, у момент "збору сміття") одночасного доступу додатків на різних ядрах до жорсткого диску, до пристроїв введення/виводу або даними додатків. Дуже часто паралельні процеси, що виконуються на різних ядрах, потрібно синхронізувати в певні моменти. Наприклад, додаток на одному з ядер має використовувати проміжні дані, які отримує додаток (потік, процес) на іншому ядрі. Перший додаток не може продовжити роботу до отримання цих даних, тобто перебуває в стані очікування. У такій ситуації неминучі накладні витрати на синхронізацію додатків (процесів, потоків), що виконуються на різних ядрах. У свою чергу, це обумовлює зниження ефективності паралельної роботи, що знаходить відображення в мережевому законі Амдала. Виникає необхідність у підтримці когерентності (узгодженості) кеш-пам'яті для всіх ядер при використанні розділяється пам'яті. p align="justify"> Можна згадати про дослідження Intel, присвячених динамічному регулюванню інтенсивності виконання інструкцій (energy per instruction, EPI) залежно від ступеня паралелізму реалізації програмного забезпечення [2]. Фахівці к...