首页
社区
课程
招聘
[分享]Intel Compiler Patcher
发表于: 2015-11-26 12:12 2615

[分享]Intel Compiler Patcher

bxc 活跃值
6
2015-11-26 12:12
2615
来源:
http://www.cnbeta.com/articles/451611.htm
http://www.majorgeeks.com/files/details/intel_compiler_patcher.html

Intel、AMD虽然都是x86芯片厂商,但是各有自己的编译器,在对方的平台上运行肯定会有所不同。相比之下,Intel的开发实力、业界号召力都远 远超出AMD,软硬件优化自然更加到位。AMD也一直在指责Intel,使用其编译器编译的软件,在自己的CPU上运行,效率会被刻意降低,影响性能。
有趣的是,现在网上出现了一个叫做“Intel Compiler Patcher”(Intel编译器补丁)的软件,号称可以自动扫描检测使用Intel C++编译器开发的软件,对其进行优化,提高在AMD CPU上的性能!

这个区区600K、只有一个EXE主程序的软件真这么神奇?
作者是这么解释的:“编译器或库可以让一段代码有多个版本,各自针对特定的处理器和指令集进行优化,比如SSE2、SSE3等等。(Windows)系统可以检测所运行CPU的类型,然后为其选择最优的代码路径。这叫做CPU调度。然而,Intel CPU调度器不仅会检测CPU支持的指令集,还会检查厂商ID字符串。如果这个字符串是GenuineIntel,那就是用优化代码路径。如果CPU不是来自Intel,大多数情况下,它会运行最慢的代码,即便是这个CPU兼容更好的版本。”


Intel Compiler Patcher

ВНИМАНИЕ! ВЫ ИСПОЛЬЗУЕТЕ ЭТУ ПРОГРАММУ НА СВОЙ СТРАХ И РИСК. АВТОР НЕ НЕСЕТ
ОТВЕТСТВЕННОСТИ ЗА ЛЮБУЮ ВОЗМОЖНУЮ ПОРЧУ ИНФОРМАЦИИ, ВОЗНИКШУЮ В РЕЗУЛЬТАТЕ
ИСПОЛЬЗОВАНИЯ ЭТОЙ ПРОГРАММЫ. ПОЖАЛУЙСТА ПРОЧИТАЙТЕ ФАЙЛ LICENSE.TXT ДЛЯ
ПОДРОБНОЙ ИНФОРМАЦИИ.


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

СОДЕРЖАНИЕ
1. ОПИСАНИЕ
2. ТЕОРЕТИЧЕСКАЯ ЧАСТЬ
3. ПРАКТИЧЕСКАЯ ЧАСТЬ
4. ПРИНЦИП РАБОТЫ ICP
5. РАБОТА С ПРОГРАММОЙ
5.1 РАБОТА С ПРОГРАММОЙ - ОПЦИИ
5.2 РАБОТА С ПРОГРАММОЙ - СКАНИРОВАНИЕ (ПОИСК)
5.3 РАБОТА С ПРОГРАММОЙ - ПАТЧИНГ
6. БЛАГОДАРНОСТИ
7. АВТОР

1. ОПИСАНИЕ
Программа Intel Compiler Patcher (далее ICP) предназначена для поиска
исполняемых файлов, скомпилированных с помощью Intel C++ Compiler, с
возможностью дальнейшего отключения "диспетчера процессора" в найденных
файлах. ICP может повысить производительность таких программ на процессорах,
отличных от Intel.

2. ТЕОРЕТИЧЕСКАЯ ЧАСТЬ
Компилятор для программного кода может выдавать несколько версий машинного
кода, каждая из которых оптимизирована для определённого процессора и набора
инструкций, например, SSE2, SSE3, и т.д. Система включает в себя функцию,
которая определяет, на каком типе процессора она запущена и выбирает самую
подходящую версию. Эта функция называется диспетчером процессора. Диспетчер
процессора Intel проверяет не только набор инструкций, поддерживаемый
процессором, но также идентификатор производителя процессора.
Если идентификатор — строка «GenuineIntel», то выбирается наиболее
оптимальный вариант кода. Но если процессор не от Intel, то в большинстве
случаев будет выбран самый медленный из возможных вариантов, даже если
процессор полностью совместим с лучшей версией.

3. ПРАКТИЧЕСКАЯ ЧАСТЬ
Часть функции диспетчера задач от компиляторов Intel представляет из себя
код вида:

[..skip..]
mov eax, [ebp][-0008]
cmp eax, 0756E6547 ;"uneG" ; Проверка на "Genu"
jne not_intel ; если не равно, уходим на not_intel
mov eax, [ebp][-0010]
cmp eax, 049656E69 ;"Ieni" ; Проверка на "ineI"
jne not_intel ; не равно - not_intel
mov eax, [ebp][-0014]
cmp eax, 06C65746E ;"letn" ; Проверка на "ntel"
jne not_intel ; не равно - not_intel
mov edx, 000000001 ; тот самый секретный байт
jmps next
not_intel:
xor edx, edx ; а здесь 0, для всех не-интел процессоров
next:
[..skip..]

Здесь видно, что происходят три сравнения с сигнатурами "Genu", "ineI",
"ntel" и если все три проверки завершились удачей, регистру EDX присваивается
значение "1" (один) - процессор от компании Intel. В противном случае - "0"
(ноль) - процессор от любых других производителей. Из этого следует, что
если отключить данные проверки, или заменить их на условие, которое всегда
будет верно, на выходе в регистре EDX будет содержатся "1" (один) не зависимо
от типа процессора.

4. ПРИНЦИП РАБОТЫ ICP
ICP базируется на алгоритме оригинального патчера от M. D Mackey (C) 2004 на
языке Perl: в исполняемом файле производится поиск на наличие сигнатур команд
сравнения, например 81 fa 47 65 6e 75 (cmp edx, 0756E6547), и последующей их
заменой на команды вида testl edx, 000000000 (f7 c2 00 00 00 00). Условие
testl edx, 00000000 всегда будет верным, а значит в EDX будет всегда значение
"1" (один), не зависимо от полученной ранее командой CPUID сроки. Таким
образом программа всегда будет считать, что она выполняется на процессоре от
фирмы Intel.
Регистры у команд сравнения могут быть различными, в зависимости от версий
компиляторов. ICP проверяет сигнатуры команд сравнения с регистрами: EAX, EBX,
ECX, EDX, EBP, ESI, EDI и [EBP][offset].

5. РАБОТА С ПРОГРАММОЙ
Интерфейс программы состоит из главного окна, на котором располагаются кнопки
управления программой, список найденных файлов и ниже - информация о каждом
найденном файле. Работа с программой сводится к двум основным этапам: 1)
непосредственно сканирование (поиск) файлов и 2) отключение диспетчера
процессора в найденных файлах (патчинг).

5.1 РАБОТА С ПРОГРАММОЙ - ОПЦИИ
Кнопка "Опции" предоставляет возможность настроить параметры поиска и
некоторые другие параметры:

"Минимальный размер" - Минимальный размер сканируемых файлов. По умолчанию
равен 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.

5.2 РАБОТА С ПРОГРАММОЙ - СКАНИРОВАНИЕ (ПОИСК)
ВНИМАНИЕ! Перед началом сканирования файлов рекомендуется отключить
анти-вирусный резидентный сканер. Так как ICP работает с исполняемыми файлами
(производит открытие файла и его чтение в память), то как правило,
анти-вирусный резидентный сканер перехватывает обращения к файлам и
предварительно сканирует их на вирусы, тем самым значительно замедляя поиск
файлов. ICP НЕ запускает загруженный исполняемый файл на выполнение, а значит
не может активировать вредоносный код, случайно встреченный в программах.

Для поиска файлов, скомпилированных Intel Compiler'ом служит кнопка "Поиск".
Вам предлагается выбрать начальный каталог, откуда начнется сканирование.
Процесс сканирования отображается в нижней статусной строке. Найденные файлы
помещаются в центральное окно программы. Для просмотра информации о файле и
найденных в нем сигнатур необходимо нажать на имени файла в списке файлов.
Можно остановить процесс сканирования кнопкой "Стоп".

5.3 РАБОТА С ПРОГРАММОЙ - ПАТЧИНГ
После сканирования необходимо отметить нужные файлы галочками в списке и
нажать кнопку "Патчить".

6. БЛАГОДАРНОСТИ
В данном документе частично использован перевод статьи "Will Intel be
forced to remove the "cripple AMD" function from their compiler?" Алексея
Романова.
Based on Perl version (C) Copyright M. D Mackey 2004. e-mail: mark@swallowtail.org
Third party library:
TaskEx v1.4 (C) Alexander Alexeev
AsyncCalls (C) 2006-2009 Andreas Hausladen
RXLib port (C) Oleg Fedorov

7. АВТОР
Written by Tronix (C) 2010. e-mail: tronix286@rambler.ru

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 0
支持
分享
最新回复 (8)
雪    币: 1088
活跃值: (30)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
快来吃螃蟹!!
2015-11-26 12:18
0
雪    币: 1632
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
恶意竞争啊
2015-11-26 12:47
0
雪    币: 16468
活跃值: (2493)
能力值: ( LV9,RANK:147 )
在线值:
发帖
回帖
粉丝
4
嗯.- -不错.感谢楼主分享.
这难道就是传说中的,你有张良计我有过墙梯.
2015-11-26 13:19
0
雪    币: 4889
活跃值: (2275)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
真的假的?不至于吧。
2015-11-26 14:16
0
雪    币: 581
活跃值: (215)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
6
这是哪国语言,看不懂啊
2015-11-26 14:34
0
雪    币: 7048
活跃值: (3527)
能力值: ( LV12,RANK:340 )
在线值:
发帖
回帖
粉丝
7
俄文,我也看不懂。
2015-11-26 14:49
0
雪    币: 8808
活跃值: (3038)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
俄国人的软件吧
2015-11-28 14:04
0
雪    币: 7048
活跃值: (3527)
能力值: ( LV12,RANK:340 )
在线值:
发帖
回帖
粉丝
9
在intel官网看到了有趣的东西,可以解释为何在AMD上优化不力了
https://software.intel.com/en-us/articles/optimization-notice#opt-cn
2016-2-5 22:25
0
游客
登录 | 注册 方可回帖
返回
//