· Начало · Статистика · WASM.RU · Noir.Ru ·

 WASM Phorum (Оффлайн - 24.11.2003) —› WASM.ASSEMBLER —› Как посчитать время выполнения?

Посл.отвђт Сообщен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