- Если какая-либо программа использует, например, инструкцию SSE, может ли она быть запущена на процессоре, который не поддерживает SSE?
Нет.Но в целом это часто генерирует ловушку или исключение, и обработчик ловушек / прерываний может обработать это при необходимости.
Например, давным-давно программы часто содержат код для x87.Если существует сопроцессор x87, инструкция будет нормально выполняться на аппаратном уровне, но если на компьютере отсутствует сопроцессор x87, то он сгенерирует ловушку, после чего инструкция будет обработана программно и вернет результат в обычном режиме.См. Что такое протокол для эмуляции с плавающей запятой x87 в MS-DOS?
Первые версии Hackintosh также используют это для эмуляции SSE2 на процессорах, которые не поддерживают этот набор команд.Конечно, производительность ужасна, но она будет работать.
Если нет, значит ли это, что реальное влияние на производительность таких новых инструкций будет через несколько лет, когда большинство процессоров будет поддерживать такую технологию (поэтому не будет никаких несовместимостей)?
Да.Но через несколько лет, возможно, программное обеспечение нуждается в обновлениях, верно?Для программного обеспечения с высокой производительностью может потребоваться переписать, чтобы воспользоваться новым набором команд.Для некоторых других увеличение производительности может быть незаметным
Когда я компилирую программу на C ++ с оптимизацией, значит ли это, что она будет использовать некоторые из этих новых инструкций?(Я знаю, что это зависит от многих факторов, особенно от кода, но я хочу получить общий ответ) Или они зарезервированы в основном для программ, написанных на asm?
Зависит от компилятора иопции, которые вы передаете ему во время компиляции.
Современные компиляторы поддерживают авто-векторизацию , поэтому они обнаруживают общие идиомы и оптимизируют его .Вам просто нужно перекомпилировать , чтобы воспользоваться новым набором команд.Но для сложных случаев вам все еще нужно оптимизировать вручную с использованием встроенных SIMD
Если вы используете внешнюю библиотеку , вы автоматически получите повышение скорости, когда библиотекаобновляется для поддержки нового набора инструкций, даже если вы ничего не делаете с вашей программой