Набагато складніше розробити дійсно жахливі перегони даних за допомогою одного процесора. Я маю на увазі, звичайно, ви можете зняти сльозотечу між словами, якщо ви перервете один процесор, але чи можете ви створити екзотичні сценарії, де немає єдиного переплетення потоків, що робить те, що ви хочете?
Гаразд, можливо, підступні помилки не вважаються дійсним використанням багатокодового просування. Як виявляється, не так багато, що мутлі-ядро може зробити, що одне ядро не може дати час. Причина проста. Якщо ви намагаєтеся уникнути цих злих перегонів даних, у вашому коді повинні бути точки синхронізації. Якщо ви моделюєте свій код як грати обчислень, де ті входи повинні бути завершеними та синхронізованими, перш ніж ви зможете обчислити та отримати виходи, неважко помітити, що один процесор може просто пройти шлях за решіткою, обчисливши наступний доступний блок роботи .
Насправді, якщо ви можете продемонструвати, що ваш алгоритм може бути вирішений машиною Тьюрінга (це практично кожен алгоритм, який нас цікавить), можна довести, що алгоритм може бути виконаний не лише одним основним процесором, а фактично a державна машина з дуже довгим шматочком стрічки для пам’яті!
ШАХИ детектор гонки на насправді використовує це , щоб знайти випадки гонки. Він запускає все однопоточне і систематично досліджує всі можливі переплетення між потоками, намагаючись знайти випадки, коли тест провалюється через гоночний випадок. CHESS залежить від того, що ви можете запустити будь-яке багатопотокове додаток на одному ядрі.
Випадки, коли вам потрібна багатоядерність, з’являються, коли ви починаєте розтягувати межі обладнання. Очевидним є те, коли у тебе є обмеження в часі. Деякі проблеми з обмеженнями часу в режимі реального часу неможливо зробити одноядерними, оскільки вони просто не можуть керувати годинником одного ядра досить швидко. Є причина, що процесори піднялися до 4 ГГц, а потім трохи розташувалися, віддаючи перевагу більше ядер на менших швидкостях.
Більш екзотична версія цього обмеження в часі є в системах жорсткого реального часу. У деяких жорстких системах реального часу сервіс переривань настільки вимогливий, що вам насправді доводиться вибирати багатоядерний процесор, який дозволяє вам розгадувати перерви вгору по ядрах, або ви стикаєтесь з обмеженнями в часі.
Інший ліміт виникає з шинами даних. Розглянемо блакитний ген / P як приклад. JUGENE, особливий суперкомп'ютер Blue Gene / P, має 144 терабайти пам'яті. Вони просто не роблять єдиних процесорів, які можуть отримати доступ до всієї цієї пам'яті.