Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > Вопрос по команде RDTSC


Автор: Guam 20.9.2010, 21:22
Использовал для измерения времени работы процедур. Потом обнаружил, что при опросе получаю не всегда верные значения счетчика тактов процессора, он перескакивает назад (у меня около 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;


Автор: WWWlad 21.9.2010, 13:22
Действительно, странно... Проверил у себя - не перескакивает. Система: Win XP Pro SP3 x86, проц - iCore i7 965.

Автор: kami 24.9.2010, 01:19
Возможно, здесь играет роль оптимизация выполнения кода самим процессором...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)