Как в бинарнике организована поддержка различных процессоров?
От: elmal  
Дата: 19.11.19 12:10
Оценка: :)
Заинтересовал меня один вопрос.

Сейчас бешенное количество процессорных архитектур. И даже в рамках x86-64 архитектуры постоянно добавляют новые команды, всякие AVX, AVX2 и т.д. И возникает вопрос, как компилятор (для простоты возьмем gcc) компилирует код таким образом, чтобы максимально использовались возможности новых процессоров, но была возможность запустить код на старых процессорах без поддержки новых инструкций.

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

Так как это все сделано?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.