У заголовку все сказано: чи є спосіб отримати старшу програму, розроблену для використання одного ядра процесора для використання декількох ядер процесора?
У заголовку все сказано: чи є спосіб отримати старшу програму, розроблену для використання одного ядра процесора для використання декількох ядер процесора?
Відповіді:
На жаль, застаріла програма, написана для одного процесора, не може бути змушена використовувати декілька ядер CPU. Використання декількох ядер процесора вимагає декількох потоків, які потребують зв'язку один з одним, забезпечуючи, щоб не виникали перегони та інші проблеми. Старіші програми не можуть бути використані для використання більше, ніж ядра CPU, якщо це не буде переписано для цього, і лише якщо природа програми дозволяє паралелізувати його.
Яка ваша мета? Підвищення продуктивності? На жаль, додатки, призначені для використання лише одного ядра, більше не використовуватимуть. Саме про це йдеться у розмові про "багатопотокові" програми.
Існує щонайменше три методи для використання декількох процесорів у програмі, розробленій для використання одного ядра. Найпростішим з цих методів є використання бібліотек та системного коду, який використовує декілька ядер або може виконувати хоча б частково паралельно коду програми. Збір сміття - це приклад функціональності, який можна паралелізувати, і це можливо зробити паралельно виконанню програми. Навіть без автоматичного управління пам’яттю існує певний потенціал для паралелізму функцій розподілу пам’яті, тому що в алокаторі пам’яті може бути виконано певну роботу, крім простого маркування розділу пам’яті як доступного.
Другий прийом - це бінарний переклад. Хоча це може вважатися "перезаписом програми", це робиться програмним забезпеченням та без доступу до вихідного коду. Створення паралелізму на рівні потоку, здається, не було головною метою більшості досліджень та розробок із використанням бінарного перекладу (який часто стосується запуску застарілого коду на іншому ISA, використання розширень ISA або оптимізації для певної мікроархітектури та використання динамічної інформації для забезпечення вищої якісна профільна оптимізація), але потенціал очевидний.
Третя техніка - спекулятивна багатопотокова. Наразі жоден процесор (про який я знаю) не підтримує апаратну спекулятивну багатопотоковість. Однак із впровадженням апаратної транзакційної пам’яті наявність системи виконання програми такої стає дещо практичнішою, оскільки HTM може використовуватися для виявлення конфліктів при використанні пам’яті. Спекулятивна багатопотокова редакція, керована програмним забезпеченням, зазвичай передбачає певний бінарний переклад, але її умоглядний характер виправдовує розгляд окремої методики.
Практичність цих методів обмежена витратами, пов'язаними з існуючими системами (включаючи витрати на зв’язок між потоками та нерестовими потоками), обмеженим паралелізмом, який вони можуть використовувати, та обмеженою віддачею інвестицій (важливі програми, які можуть приносити користь паралелі, ймовірно, будуть переписані, багато застосувань отримають користь порівняно мало, якщо взагалі від таких методів (особливо з обмеженнями потужності / теплоти, що дозволяють одному ядру працювати з більш високою частотою, ніж кілька ядер), а витрати на розробку значні). Тим НЕ менше , ці методи роблять існування і теоретично можливо використовувати кілька ядра з додатком , призначеним для використання одного ядра.
Ні, цього не може бути. Програма явно написана для використання декількох ядер. Це не тривіально виконувати роботу в декількох ядрах. Він вимагає синхронізації всіх потоків. Як один кидає м'яч, інший ловить, один відшліфує кульку, один очищає, один перевіряє м'яч, чи є в ньому хороша кількість повітря. Тепер уявіть кожен персонаж як біг у нитці незалежно один від одного. Хтось намагається зловити м'яч, коли його не кинули. Або хтось намагається відшліфувати м'яч під час його гри. Або два персонажі, які намагаються спіймати і кинути м'яч одночасно. Існує так багато способів аварії. Таким чином, програмістам потрібно ретельно переробити єдиний основний додаток, щоб він міг скористатися кількома ядрами.