Pull to refresh

Утилита для поиска приложений, скомпилированных Intel C++ Compiler и последующего отключения “диспетчера процессора” в них

Reading time5 min
Views6.3K
В продолжение моей статьи «Тест программы, скомпилированной Intel Compiler на системе AMD. «До» и «после» патча» решил автоматизировать процесс поиска исполняемых файлов на компьютере, скомпилированных Intel C++/Fortran Compiler. Результатом стала небольшая утилита, о которой подробно под катом. Эта утилита может оказаться полезной владельцам процессоров, отличных от Intel, для повышения производительности таких программ.
Предупреждение: эта статья рассчитана на опытных пользователей и программистов. Возможно, она будет сложна для понимания неподготовленному читателю.

Для тех, кто не читал статьи "Придётся ли Intel убрать из компилятора функцию, намеренно выдающую плохой код для процессоров AMD?" позволю себе процитировать из нее небольшую выдержку: “Компилятор для программного кода может выдавать несколько версий машинного кода, каждая из которых оптимизирована для определённого процессора и набора инструкций, например, SSE2, SSE3, и т.д. Система включает в себя функцию, которая определяет, на каком типе процессора она запущена и выбирает самую подходящую версию. Эта функция называется диспетчером процессора. Диспетчер процессора Intel проверяет не только набор инструкций, поддерживаемый
процессором, но также идентификатор производителя процессора. Если идентификатор — строка «GenuineIntel», то выбирается наиболее оптимальный вариант кода. Но если процессор не от Intel, то в большинстве случаев будет выбран самый медленный из возможных вариантов, даже если процессор полностью совместим с лучшей версией”

Таким образом, отключив этот самый “диспетчер процессора” имеется возможность несколько повысить быстродействие программ и библиотек, скомпилированных с помощью Intel C++ Compiler или Intel Fortran Compiler на процессорах, отличных от Intel. Единственный возникающий вопрос – а как определить среди многих тысяч исполняемых файлов в системе, скомпилирована ли та или иная программа с помощью Intel Compiler? Для этого и была написана данная утилита. Я не буду повторяться и подробно описывать техническую сторону реализации; это обсуждалось и в предыдущей моей статье и подробно рассказано в файле README.TXT, прилагающемуся к утилите. Кстати, перед началом использования этой утилиты, крайне рекомендую его прочтение. Итак, Intel Compiler Patcher (далее ICP):

image

Программа имеет довольно простой “спартанский” интерфейс, который состоит из главного окна, на котором располагаются кнопки управления программой, список найденных файлов и ниже — информация о каждом найденном файле. Работа с программой сводится к двум основным этапам: 1) непосредственно сканирование (поиск) файлов и 2) отключение диспетчера процессора в найденных файлах (патчинг). Перед началом сканирования файлов можно задать параметры поиска, нажав кнопку “Опции”, хотя в общем случае подходят настройки “по-умолчанию”.

Настройки

image

Далее приведу описание настроек программы из файла README.TXT:

«Минимальный размер» — Минимальный размер сканируемых файлов. По умолчанию размер равен 500 байтам. Изменить в меньшую сторону параметр нельзя, поскольку вряд-ли Вам встретится исполняемый файл в Windows меньше пяти ста байт.

«Максимальный размер» — Максимальный размер сканируемых файлов. По умолчанию равен 100 Mb. Уменьшение этого параметра приведет к повышению быстродействия сканирования, так как ICP загружает ПОЛНОСТЬЮ каждый файл в оперативную память.

«Искать файлы с не одинаковыми регистрами» — Этот параметр следует объяснить подробнее. Обычно, процедура проверки типа процессора в компиляторах Intel состоит из трех команд сравнения сигнатур «Genu»,«ineI»,«ntel» с одинаковым регистром, то есть например только с EAX или только с EDX и тд. Однако, встречаются исполняемые файлы в которых проверка сигнатуры производится с различными регистрами, например: cmp eax, «Genu»; cmp ebx, «ineI»; cmp edx, «ntel». Такой алгоритм сравнения обычно применяется просто для идентификации процессора и не указывает на принадлежность программы к Intel Compiler'у. С другой стороны, в программе может сначала встретится обычная проверка диспетчера процессора Intel (сравнение с одним и тем-же регистром), а где-то в конце программы уже собственный алгоритм проверки типа процессора, написанный программистом. По умолчанию данный параметр выключен. Не рекомендуется его включение, если Вы не понимаете, что Вы делаете.

«Искать файлы с нечетным количеством совпадений» — Процедура проверки в диспетчере процессора Intel состоит из трех команд сравнения. Так, например, если в программе встречается только одна команда сравнения cmp eax,«Genu» это говорит о не принадлежности программы к Intel Compiler'у, а о собственной функции определения типа процессора написанной программистом. Однако, как и в предыдущем случае, возможен вариант, когда в начале программы встречается обычная проверка диспетчера процессора Intel (cmp eax, «Genu»; cmp eax, «ineI»; cmp eax, «ntel»), а где-то в конце программы — одинокая команда cmp ebx,«Genu». По умолчанию данный параметр выключен. Не рекомендуется его включение, если Вы не понимаете, что Вы делаете.

«Делать бекап» — Делать резервное копирование файлов перед их изменением
(патчем). Файл копируется в ту же директорию, где находится оригинальный файл, с расширением .orig По умолчанию данная функция включена.

«Расширения файлов» — указывает, файлы с какими расширениями следует искать. По умолчанию ICP ищет и проверяет все файлы с расширениями ".EXE", ".DLL", ".ACM", ".AX", ".CPL", ".OCX". Каждое расширение должно начинаться с точки, разделителем служит символ ";" (точка с запятой).

«Язык» — Язык интерфейса программы.

«Автоматическая прокрутка файл-листа» — Позволяет автоматически прокручивать в низ список файлов при сканировании. По умолчанию включена.

«Влючить лог-файл» — Позволяет включить протоколирование действий программы. Лог файл имеет имя «icc_patch.log» и создается в директории, откуда запускалась программа ICP.

Сканирование

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

Патчинг

image

Когда сканирование завершено, остается лишь отметить нужные файлы галочками, нажать кнопку “Патчить” и дождаться завершения. Файлы, успешно пропатченные отметятся в списке серым цветом.

ВНИМАНИЕ

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

Скачать

Скачать программу можно здесь: http://rghost.ru/users/tronix286/releases/intel-compiler-patcher
Tags:
Hubs:
+14
Comments4

Articles