Вопрос: Выбирает ли современное программное обеспечение разные процессоры?


Например, можно ли иметь исполняемый файл, который использует функции для процессоров Core 2, а затем выборочно использовать другие функции для более старого процессора? Или это требование для компиляции другого исполняемого файла? А если нет, это верно для всех случаев?


2
2018-03-18 22:28


Источник


Короче говоря, да. У вас будет несколько путей кода в зависимости от существующих наборов функций (таких как MMX, SSE, ...). Вы также можете скомпилировать разные версии исполняемого файла, для которого требуется набор функций, и тот, который этого не делает, тогда вы можете удалить проверку функции из внутреннего кода кода. - Der Hochstapler


Ответы:


Это вполне возможно, в зависимости от особенностей, которые вы имеете в виду подходом, несколько отличается.

Например, для математического приложения вы можете определить количество процессоров и / или ядер, а затем у каждого основного дескриптора разные части вычисления. Затем жесткая часть гарантирует, что данные данных являются синхронными или асинхронными в зависимости от задачи.

И, как сказано выше, как MMX, SSE2 может быть проверен, а затем либо запущен через разные коды кода, например:

if (CPU.Supports SSE2) {then use SSE2 Libraries}
else if (CPU.Supports SSE) {Then use SSE Libraries}
else {use pre-SSE LIbraries}

Кроме того, для таких вещей, как architechture (x86 vs x64), есть несколько способов, которыми можно управлять. Если вы используете JAVA или C #, например, компилятор JIT может оптимизировать код для любой архитектуры при запуске приложения, это, вероятно, не так быстро, как собственное и хорошо оптимизированное приложение C ++, но компромисс заключается в том, что с C ++ у вас будет иметь версию x64 и x86 отдельно.


4
2018-03-18 23:31





У вас может быть один исполняемый файл, который во время выполнения определяет, какой процессор используется, а затем выбирает наилучший способ их использования. Ofc. каждый из этих «лучших способов» предварительно скомпилирован. Таким образом, вы в основном используете программу, которая была подготовлена ​​для оптимального использования выборочных нескольких процессоров / наборов инструкций.

Не так много программ, которые, похоже, делают это, или, по крайней мере, не многие из них рассказывают об этом пользователю. Тем не менее, есть, по меньшей мере, несколько из них, например. dnetc исполняемый файл.


Если вы хотите, вы можете сравнить его с книгой или брошюрой с указанием индекса:
страница 10-20: английский
страница 21-42: голландский
страница 43-54: US английский
страница 55-70: датский
...

Вам нужно будет написать в соответствующем языке / наборе инструкций для каждого из них.


2
2018-03-18 22:37



Не делает это .net, но вместо нескольких предварительно скомпилированных исполняемых файлов использует запатентованный формат для инкапсуляции исходного кода и компиляции его на лету? - MarcusJ
Это может быть сделано только для определенных целей. Если вы импортируете SSE2, например, .NET не всегда умеет использовать SSE, в новой библиотеке могут быть новые классы / методы. И с другой стороны, новая версия может вырезать устаревшие методы из исходного SSE. - Austin T French
Mplayer имеет некоторые функции обнаружения процессора и сообщает об этом пользователю. - Ярослав Рахматуллин


Ядро Linux использует такие страшные методы, как исправление работающего ядра, чтобы выбрать лучший алгоритм для некоторых очень используемых функций.


0
2018-03-19 01:51



Когда вы компилируете ядро ​​Linux на X86, вы также можете выбрать целевой CPU. (Например, 386, P6, ...). Таким образом, часть ядра уже оптимизирована, прежде чем запускать ее, - Hennes