Анимация
JavaScript


Главная  Библионтека 

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 [ 81 ] 82 83 84 85 86 87 88

ITER DUP (0) Code segment;

[COUNTER],0

COUNTER DD TICS DD RESULTLIST DD ,************

. CODE

BEGIN: MOV TESTLOOP:

Делаем здесь необходимую инициализацию:

счетчик цикла

временная переменная для счетчика список тестовых результатов

. *********

*******************

сегмент кода

сбрасываем счетчик цикла тестовый цикл

***************:

FINIT

. -К -к * *

********

Конец инициализиции *.**.**.**.**.*.**.,

RDTSC

; считываем значение счетчика тактов

[TICS],ЕАХ ; сохраняем его

; не спариваемая инструкция

REPT

NOP

; 8 NOPoB, чтобы избежать "затенения"

ENDM

. * * *

Поместите здесь инструкции, которые нужно протестировать: ***

FLDPI

; это всего лишь пример

FSQRT

ЕВХ,10

FSTP

.********

Конец инструкций-, которые нужно тестировать

CLC RDTSC SUB SUB

ЕАХ,[TICS] ЕАХ,OVERHEAD

MOV MOV ADD

*************

инструкция против спаривания и затенения ; снова читаем счетчик ; вычисляем разность

; вычитаем такты, которые использоваг:. подсобные инструкции (против спаривания ; и затенения) ; счетчик цикла

сохраняем результат в таблице увеличиваем значение счетчика ; сохраняем счетчик

EDX, [COUNTER] [RESULTLIST] [EDX],ЕАХ EDX,TYPE RESULTLIST [COUNTER],EDX

EDX,ITER * (TYPE RESULTLIST)

TESTLOOP ; повторяем заданное число раз

; вставьте здесь код, чтобы считать значения в RESULTLIST

Дополнительные инструкции до и после тестируемого кода включены, чтобы получить адекватные результаты на Р1. CLD - это неспариваемая инструкция, которая была добавлена, чтобы порядок спаривания инструкций в первый раз был такой же, как и во все остальные. Восемь инструкций NOP были вставлены, чтобы предотвратить влияние возможных префиксов в тестируемом коде, которые могли бы раскодироваться в тени предыдущих инструкций на Р1. Однобайтовые инструкции использовались здесь, чтобы получить тот же порядок спаривания.

На РММХ еще можно вставить XOR ЕАХ,ЕАХ / CPUID перед тестируемым кодом, чтобы FIFO-буфер инструкций был очищен, или какую-нибудь длительную инструкцию (например, CLI или AAD), если нужно, чтобы он был полон (CPUID не вызывает эффекта затенения - может начаться раскодировка префиксов последующих инструкций).

РММХ

РРго

кэш кода, кб

кэш данных, кб

встроенный кэш 2 уровня, кб

512 *)

512 *)

инструкции ММХ

инструкции ХММ

инструкции условной пересылки

данных

£ыполнение не по порядку

..предсказывание переходов

плохо

хорошо

хорошо

хорошо

хорошо

JWli!TOB элементво в буфере

256 .

~Л1Р£Дсказывания переходов

-5р стекового буфера

--52£!Ращений

-Л21£ри при неправильном

10-20

10-20

10-20

На РРго, Р2 и РЗ можно добавить XOR ЕАХ,ЕАХ / CPUID до и после кажд RDTSC, чтобы предотвратить ее возможное выполнение параллельно с какой-ниб) другой инструкцией и убрать подсобные инструкции. CPUID - это синхронизируют инструкция, это означает, что она очищает конвейер и ждет, пока все исполняющ!} инструкции не будут выполнены, и только тогда выполнится сама. Это может быть лезно для тестирования.

Инструкция RDTSC не может выполняться в виртуальном режиме на Р1 и PMN поэтому при запуске DOS-программ, следует перегрузиться в реальный режим.

Полный текст исходного кода тестовой программы доступен по адр( http: www. agner. org/assem/.

У процессоров Pentium есть специальнью счетчики наблюдения за качеством рабо-которые отслеживают и подсчитывают такие события, как промахи кэша, невырав» ность, различные задержки. Подробности об использовании счетчиков в данной главе затрагиваются, но их можно найти в "Intel Architecture Software Developers Manual", \ 3, Appendix A.

631. Сравнение различных микропроцессоров

в табл. 6.14 изложены некоторые важные различия между процессорами семейства Pentiur Таблица 6.14. Основные поколения семейства процессоров Pentii



предсказании перехода

задержки чтения регистров

время ожидания FMUL

производительность FMUL

время ожидания IMUL

производительность IMUL

*) Celeron: 0-128, Xeon: 512 или больше, доступны другие варианты. На некоторых версиях кэш второго уровня выполняется на половинной скорости.

Комментарии к таблице

в Размер кэша кода важен, если критические части программы занимают достаточно много места.

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

к Инструкции ММХ и ХММ полезны для тех программ, которые обрабатывают большие массивы данных, такие как звук и изображения. Не всегда от использования инструкций ММХ и ХММ можно получить выгоду.

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

к Выполнение не по порядку улучшает качество (особенно не оптимизированного кода). Оно включает в себя автоматическую перегруппировку и переименование регистров.

а Процессоры с хорошим механизмом предсказания переходов могут предсказывать простые повторяющиеся последовательности. Чем выше потери при неправильном предсказании переходов, тем важнее их предсказуемость.

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

в Задержки чтения регистров делают обработку смешанных типов данных (8, 16, 32 битов) более сложной.

в Время ожидания инструкции умножения зависит от цепочки зависимостей. Производительность 1/2 значит, что инструкция может конвейеризироваться, поэтому новое умножение может начинаться каждый второй такт. Это определяет скорость параллельной обработки данных.

в Использование инструкций FPU на PI и РММХ часто требует большого количества дополнительных инструкций FXCH. Это тормозит выполнение на "старых" процессорах-но не на процессорах семейства Pentium и продвинутых неинтеловских процессорах.

ш Использование инструкций ММХ на процессорах РММХ, Р2 и РЗ или инструкций условной пересылки данных на РРго, Р2 и РЗ создает проблемы периносимости с более ранними прО" цессорами. Решение может состоять в написании нескольких версий кода, каждая из кото-

0 Использование инструкций FPU на PI и РММХ часто требует большого коли дополнительных инсфукций FXCH. Это тормозит выполнение на "старых" процес но не на процессорах семейства Pentium и продвинутых неинтеловских процессорах.

f Использование инструкций ММХ на процессорах РММХ, Р2 и РЗ или инструкций уа пересьшки данных на РРго, Р2 и РЗ создает проблемы периносимости с более ранш» цессорами. Решение может состоять в написании нескольких версий кода, каждая и рых будет оптимизированна под определенное поколение. Программа должна определ каком процессоре она выполняется и выбирать соответствующую версию (п. 6.27.10).

Большая часть методов оптимизации быстродействия исполняемого кода, обс> шихся в этой главе, имеет ценность и для других микропроцессоров, включая н ЛИЯ других производителей, не только Intel.



литература

Литература

Основная:

1. Зубков С. В. Assembler. Для DOS, Windows и Unix. - М.: ДМК, 1999.

2. Рудаков П. И., Финогенов К. Г. Язык Ассемблера: уроки программированм М.: ДИАЛОГ-МИФИ, 2001. "

3. Сван Т. Освоение Turbo Assembler. - Киев: Диалектика, 1996.

4. Финогенов К. Г. Самоучитель по системным функциям MS-DOS. М.: Радио и связь: Энтроп, 1995.

5. Detmer R. С. Introduction to 80x86 Assembly Language and Computer Architecture. 2001

6. Fog A. How to optimize for the Pentium family of microprocessors [http: www.anger.org/assem]

7. Hennessy J. L., Patterson D. A. Computer Architecture: A Quantitative Approach. 2002. Дополнительная:

1. Зензин О. С, Иванов М. А. Стандарт криптографической защиты AES. Конечные поля. М.: КУДИЦ-ОБРАЗ, 2002.

2. Долгий А. Алгоритм противодействия исследованию исполняемых модулей Компьютер Пресс- 1993.-№ И.-С. 55-61.

3. Долгий А., Расторгуев С. Защита программ от дизассемблеров и отладчиков Компьютер Пресс- 1992.-№ 4.- С. 49-53.

4. Дмитриевский Н. П., Расторгуев С. П. Искусство защиты и "раздевания" программ. -М.: Совмаркет, 1991.

5. Иванов М. А., Чугунков И. В. Теория, применение и оценка качества генераторов псевдослучайных последовательностей. М.: КУ ДИЦ-ОБРАЗ, 2003.

6. Правиков Д., Фролов К. Реализация пристыковочного модуля. - Монитор-1994.-№5.

7. Правиков Д. И. Ключевые дискеты. Разработка элементов систем защиты от несанкционированного копирования.- М.: Радио и связь, 1995.

8. Программно-аппаратные средства обеспечения информационной безопасности Защита программ и данных. Учебн. пособие для вузов / П. Ю. Белкин О. О. Михальский, А. С. Перщаков и др. - М.: Радио и связь, 2000.

9. Расторгуев С. П. Программные методы защиты информации в компьютер и сетях. - М.: Яхтсмен, 1996.

10. Рыскунов А. Этот безумный, безумный, безумный мир резидентных программ Монитор.- 1992.-№ 4.- С. 3-12;-№ 5.- С. 53-58.

11. Спесивцев А. В., Вегнер В. А., Крутяков А. Ю. и др. Защита информащ в персональных ЭВМ.- М.: Радио и связь: МП "Веста", 1992.

12. Щербаков А. Защита от копирования. Построение программных средств М.: ЭДЭЛЬ, 1992.

13. Щербаков А. Разрушающие программные воздействия. - М.: ЭДЭЛЬ, 1993.

14. Электронный журнал X25-zine.

15. Материалы с сайта http: www.ssl.stu.neva.ru/psw/crypto.html.

16. Материалы с сайта http: rootteam.void.ru

17. Материалы с сайта http: www-106.ibm.com/developerworks/

18. Материалы с сайта http: www.shellcode.com.ar

19. Материалы с сайта http: www.advancedlinuxprogramming.coni/

20. Материалы сайта http: www. wasm.ru



0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 [ 81 ] 82 83 84 85 86 87 88