|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Ноя 18, 2003 22:10:51 Возникла проблема определения времени работы процедуры конвертации, для дальнейшей её оптимизации. Прикинул время по opcodes.hlp, получилось одно. Посчитал с помощью RDTSC — получилось меньше. Кто не прав, не подскажите? Или opcodes.hlp устарел и нужно отдельно пересчитать каждую инструкцию под своим процессором? Вот код: RDTSC mov Timex,eax ; (1 clock) @@: lodsb ; Load the next character (5 clocks) cmp al,0 ; Is '0'? (1 clocks) jz @F ; (? clocks) xlatb ; Store into al the [ebx+al] character (4 clocks) stosb ; Store the converted character into dest. buffer (5 clocks) jmp @B ; Next iteration (min 3 clocks) @@: RDTSC ; (? clocks) |
|
|
Дата: Ноя 18, 2003 22:14:40 rdtsc должен использоваться с умом. Перед rdtsc должен быть очищен кеш - например, с помощью cpuid: cpuid rdtsc А вообще - если ты хочешь померять время нескольких команд - rdtsc не даст тебе нужной точности. |
|
|
Дата: Ноя 18, 2003 22:23:05 А как быть? Как посчитать время? У Intel есть информация о времени выполнения комманд? Или надо узнавать самому? И обязательно ли устанавливать наивысший приоритет при подсчёте? Насчёт кэша не знал, исправлю. А перед cpuid делать очищение eax? |
|
|
Дата: Ноя 18, 2003 22:28:02 rdtsc не даст тебе нужной точности. Ну и нафига его тогда придумали, просто о том как применять rdtsc нужно читать мануалы интела и применять соответствующим образом. |
|
|
Дата: Ноя 18, 2003 22:36:36 Asterix Хрен там. Читай статьи Касперски. Вообще, я буду описывать темы эмуляции RDTSC в третьей части. Пригодится для StarForce. |
|
|
Дата: Ноя 18, 2003 22:39:21 Ты собираешься коснуться в третьей части таких протекторов, что каждый достоин отдельной ПОДРОБНОЙ статьи, уж не знаю каких размеров будет общая статья! |
|
|
Дата: Ноя 18, 2003 22:44:23 · Поправил: IceStudent нужно читать мануалы интела "System Programming Guide"? Так, пока цари бьются, у мужиков лбы трещат. Подожду лучше тихонько исхода. |
|
|
Дата: Ноя 18, 2003 22:58:38 Asterix Гы, ты прав, но я не хочу впадать в рабство статьи. Я хочу ее дописать и никогда более не касаться упаковщиков... Может, разве что PE Tools наворачивать да что-то вроде айса писать... Там видно будет. |
|
|
Дата: Ноя 19, 2003 04:36:24 volodya > хочешь померять время нескольких команд - rdtsc не даст тебе нужной точности IceStudent > А как быть? Выполни эти команды в цикле. Общее время раздели на число итераций, правда, необходимо учитывать команды организации цикла. |
|
|
Дата: Ноя 19, 2003 12:25:19 · Поправил: Four-F IceStudent, посмотри это: PROFILE and get 100% precise, consistent and stable results. Насколько я помню это самое лучшее решение, которое я видел, в том смысле, что его можно тупо использовать. Человек ( Maverick ) делавший этот макрос очень грамотный. Я на всякий случай приаттачил пример профилирования процедур InString. Для чтения результатов необходим VKDEBUG by vkim. Если у тя один из последних масмов32, то он там есть. |
|
|
Дата: Ноя 19, 2003 12:28:26 |
|
|
Дата: Ноя 19, 2003 12:46:25 IceStudent Посмотри вот здесь. Там есть и ссылка на интеловский мануал. З.Ы. Тока при профилировании ненадо забывать о переключении задач планировщиком. |
|
|
Дата: Ноя 19, 2003 13:27:29 Если есть возможность испорльзовать порты то используя таймер можно при некоторых условиях достаточно точно мерить время выполнения. Я когда-то даже такты через него умудрялся просчитывать... Нажел тут свою поделку 98 года, она для REAL mode но может что кому прояснит. _571682099__test.asm |
|
|
Дата: Ноя 19, 2003 13:33:49 IceStudent А по поводу opcodes.hlp и прочего не заморачивайся, в реалии миллион нуансов по поводу того сколько тактов, на каком проце и в какой ситуации займет выполнение. Все всем известно) и зависит от команд до, после, вырванивания и т.д. а при условии переключения задач и вообще все туго..) Поэтому ориентируйся на время выполенения ну и про такты не забывай) в общем дорога в сторону dZen Оптимизации ) |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.076 |