Мал. Чотирьохядерний процесор Core 2 Quad Q6600
Потенціал нових мікропроцесорів розкривається дуже важко. Ддізайн чіпів - не єдина причина. Якби розробники програм відразу попрямували на роботу з багатоядерними процесорами, вони могли б уже вичавити підвищену продуктивність майже з усіх програм.
Мистецтво поділу: багатопотоковості
Щоб програма змогла працювати з декількома ядрами мікропроцесора, вона повинна виконуватися паралельно окремими обчислювальними потоками, так званими threads ( «нитки»). При багатопотоковості (multithreading) частина програми, що вимагає інтенсивних обчислень, може працювати у фоновому режимі, а інтерфейс програми - постійно оновлюватися невеликим окремим потоком.Но це майже не дає загального приросту продуктивності, тому що операції, хоч і розподіляються рівномірно на всі обчислювальний час, все ж виконуються одна за одною. Процесори Intel Pentium 4 завдяки технології hyperthreading почали працювати з двома логічними віртуальними ядрами, здатними одночасно виконувати дві обчислювальні операції. Ось тут і виникли проблеми, при одночасному виконанні двох процесів, яким необхідний доступ до одного ресурсу, наприклад осередку пам'яті, один з потоків може впоратися з обчисленнями раніше, а інший пізніше з деякою затримкою. Тому результат іншого потоку буде ще не готовий, і він не зможе використовувати загальний ресурс - це називається race-condition, або «стан гонки». Друга велика проблема - потоки можуть заважати один одному, чекаючи доступу до одного ресурсу і блокуючи при цьому будь-якої іншої - цей стан називається deadlock. або «взаімоблокіровка». Якщо при гіперпотоковості і двоядерних процесорах проблеми обмежувалися двома потоками (threads), то при збільшенні кількості ядер мікропроцесора ситуація ускладнюється, і розробникам програм доводиться шукати нові рішення цих проблем.
Плюси і мінуси багатоядерності
Intel Compiler 10 проти OpenMP