Использовал для измерения времени работы процедур. Потом обнаружил, что при опросе получаю не всегда верные значения счетчика тактов процессора, он перескакивает назад (у меня около 16 млн тактов), при дальнейшем опросе скачком вперед на то же примерно значение, хотя должен по идее опрашиваться равномерно с шагом +30 для приведенного кода. За 10 млн опросов в цикле у меня обычно от 3 до 15 перескоков. Проверял на 3-х машинах, на двух это наблюдается, на третьей нет (опрашивается равномерно). Подскажите, где в таком опросе ошибка?
Код | function GPT:int64;assembler; asm db 0fh,31h // RDTSC mov dword ptr result,eax mov dword ptr result[4],edx end;
procedure verify_RDTSC; var tick,tick0:int64; i:integer; begin tick0:=gpt; For i:=1 to 10000000 do begin tick:=gpt; if tick<tick0 then Form1.ListBox1.Items.Add(inttostr(tick-tick0)); tick0:=tick; end; end;
|
|