12

Название говорит само за себя: есть ли способ получить более старую программу, предназначенную для использования одного ядра ЦП для использования нескольких ядер ЦП?

4 ответа4

16

К сожалению, устаревшая программа, написанная для одного процессора, не может быть принудительно использована для нескольких ядер процессора. Для использования нескольких ядер ЦП требуется несколько потоков, которые должны обмениваться данными друг с другом, гарантируя, что условия гонки и другие проблемы не возникнут. Более старое приложение нельзя заставить использовать больше, чем ядро ЦП, если оно не переписано для этого, и только если природа приложения позволяет его распараллеливать.

13

Какова ваша цель с этим? Увеличение производительности? К сожалению, приложения, предназначенные для использования только 1 ядра, не будут использовать больше. Вот о чем этот разговор о «многопоточных» приложениях.

2

Существует как минимум три метода использования нескольких процессоров в программе, предназначенной для использования одного ядра. Наиболее простым из этих методов является использование библиотек и системного кода, который использует несколько ядер или может выполняться хотя бы частично параллельно с кодом приложения. Сборка мусора является примером функциональности, которая может быть распараллелена и может выполняться параллельно с выполнением приложения. Даже без автоматического управления памятью существует некоторый потенциал для параллелизма в функциях освобождения памяти, потому что у распределителя памяти может быть некоторая работа, помимо простой маркировки секции памяти как доступной.

Второй метод - бинарный перевод. Хотя это можно считать "переписыванием приложения", это делается программным обеспечением и без доступа к исходному коду. Создание параллелизма на уровне потоков, по-видимому, не было главной целью большинства исследований и разработок с использованием бинарной трансляции (что часто касается запуска устаревшего кода на другом ISA, использования расширений ISA или оптимизации для конкретной микроархитектуры, а также использования динамической информации для обеспечения более высокой производительности). качественная профильная оптимизация), но потенциал очевиден.

Третий метод - умозрительная многопоточность. В настоящее время ни один из известных мне процессоров не поддерживает спекулятивную многопоточность с аппаратным управлением. Тем не менее, с введением аппаратной транзакционной памяти, реализация системы во время выполнения делает это несколько более практичным, поскольку HTM может использоваться для обнаружения конфликтов в использовании памяти. Управляемая программным обеспечением спекулятивная многопоточность обычно включает в себя некоторую двоичную трансляцию, но ее умозрительный характер оправдывает рассмотрение отдельного метода.

Практичность этих методов ограничена затратами, связанными с существующими системами (включая стоимость связи между потоками и порождаемыми потоками), ограниченным параллелизмом, который они могут использовать, и ограниченным возвратом инвестиций (важные приложения, которые могут быть выгодно распараллеливание, вероятно, будет переписано, многие приложения извлекут относительно небольшую выгоду, если вообще будут пользоваться такими методами (особенно с учетом ограничений мощности / температуры, позволяющих одному ядру работать с более высокой частотой, чем у нескольких ядер), и затраты на разработку значительны). Тем не менее , эти методы существуют , и теоретически возможно использовать несколько ядра с приложением , предназначенным для использования одного ядра.

0

Нет, этого не может быть. Программа явно написана для использования нескольких ядер. Это не тривиально, чтобы сделать работу в нескольких ядрах. Требует синхронизации всех потоков. Как один бросает мяч, другой ловит, один полирует мяч, один чистит, другой проверяет, достаточно ли воздуха в нем. Теперь представьте, что каждый персонаж работает в потоке независимо друг от друга. Кто-то пытается поймать мяч, когда его не бросили. Или кто-то пытается отполировать мяч во время игры. Или два персонажа, пытающиеся поймать и бросить мяч одновременно. Есть так много способов сбой. Поэтому программистам необходимо тщательно перепроектировать одноядерное приложение, чтобы оно могло использовать преимущества нескольких ядер.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .