Название говорит само за себя: есть ли способ получить более старую программу, предназначенную для использования одного ядра ЦП для использования нескольких ядер ЦП?
Название говорит само за себя: есть ли способ получить более старую программу, предназначенную для использования одного ядра ЦП для использования нескольких ядер ЦП?
Ответы:
К сожалению, устаревшая программа, написанная для одного процессора, не может быть принудительно использована для нескольких ядер процессора. Использование нескольких ядер ЦП требует нескольких потоков, которые должны обмениваться данными друг с другом, гарантируя, что условия гонки и другие проблемы не возникнут. Более старое приложение нельзя заставить использовать больше, чем ядро ЦП, если оно не переписано для этого, и только если природа приложения позволяет его распараллеливать.
Какова ваша цель с этим? Увеличение производительности? К сожалению, приложения, предназначенные для использования только 1 ядра, не будут использовать больше. Вот о чем этот разговор о «многопоточных» приложениях.
Существует как минимум три метода использования нескольких процессоров в программе, предназначенной для использования одного ядра. Наиболее простым из этих методов является использование библиотек и системного кода, который использует несколько ядер или может выполняться хотя бы частично параллельно с кодом приложения. Сборка мусора является примером функциональности, которая может быть распараллелена и может выполняться параллельно с выполнением приложения. Даже без автоматического управления памятью существует некоторый потенциал для параллелизма в функциях освобождения памяти, потому что распределителю памяти может потребоваться некоторая работа, помимо простой маркировки секции памяти как доступной.
Второй метод - бинарный перевод. Хотя это можно считать «переписыванием приложения», это делается программным обеспечением и без доступа к исходному коду. Создание параллелизма на уровне потоков, по-видимому, не было главной целью большинства исследований и разработок с использованием бинарной трансляции (что часто касается запуска унаследованного кода на другом ISA, использования расширений ISA или оптимизации для конкретной микроархитектуры и использования динамической информации для обеспечения более высокой производительности). качественная профильная оптимизация), но потенциал очевиден.
Третий метод - умозрительная многопоточность. В настоящее время ни один из известных мне процессоров не поддерживает спекулятивную многопоточность с аппаратным управлением. Тем не менее, с введением аппаратной транзакционной памяти, реализация системы во время выполнения делает это несколько более практичным, поскольку HTM может использоваться для обнаружения конфликтов в использовании памяти. Управляемая программным обеспечением спекулятивная многопоточность обычно включает в себя некоторую двоичную трансляцию, но ее спекулятивный характер оправдывает рассмотрение отдельного метода.
Практичность этих методов ограничена затратами, связанными с существующими системами (включая стоимость связи между потоками и порождаемыми потоками), ограниченным параллелизмом, который они могут использовать, и ограниченным возвратом инвестиций (важные приложения, которые могут быть выгодно распараллеливание, вероятно, будет переписано, многие приложения получат относительно небольшую выгоду, если вообще будут пользоваться такими методами (особенно с учетом ограничений мощности / температуры, позволяющих одному ядру работать с более высокой частотой, чем у нескольких ядер), а затраты на разработку значительны). Тем не менее , эти методы делают существование и теоретически возможно использовать несколько ядра с приложением , предназначенным для использования одного ядра.
Нет, этого не может быть. Программа явно написана для использования нескольких ядер. Это не тривиально, чтобы сделать работу в нескольких ядрах. Требует синхронизации всех потоков. Как один бросает мяч, другой ловит, один полирует мяч, один чистит, другой проверяет, достаточно ли воздуха в нем. Теперь представьте, что каждый персонаж работает в потоке независимо друг от друга. Кто-то пытается поймать мяч, когда его не бросили. Или кто-то пытается отполировать мяч во время игры. Или два персонажа, пытающиеся поймать и бросить мяч одновременно. Есть так много способов сбой. Поэтому программисты должны тщательно перепроектировать одноядерное приложение, чтобы оно могло использовать преимущества нескольких ядер.