Форум: "Основная";
Текущий архив: 2004.01.09;
Скачать: [xml.tar.bz2];
ВнизЗамерить время выполнения! Найти похожие ветки
← →
emergenter (2003-12-25 10:52) [0]Подскажите пожалуйста как замерить время (в тиках или нсек или милисек или ) куска выполнения программы. Заранее спасибо.
← →
Silver Alex (2003-12-25 10:55) [1]var
n: Cardinal;
begin
n:=GetTickCount;
...
Result:=GetTickCount-n;
← →
mrcat (2003-12-25 10:56) [2]см. rdtsc
← →
emergenter (2003-12-25 10:56) [3]большое спасибо!!
← →
emergenter (2003-12-25 10:57) [4]так rdtsc - это в тактах!!!!
← →
mrcat (2003-12-25 10:59) [5]~ 1/1600000000 - чем не наносекунды ? ;)
← →
emergenter (2003-12-25 11:01) [6]Что-то такой функции нету
GetTickCount...
← →
emergenter (2003-12-25 11:02) [7]mrcat ©
Так это на Асме надо! правильно?
← →
Silver Alex (2003-12-25 11:04) [8]
> Что-то такой функции нету
> GetTickCount...
в модуле Windows живет (в D7)
← →
NoIdeaAboutName (2003-12-25 11:06) [9]"Что-то такой функции нету"
а ты подключи модуль mmsystem
← →
emergenter (2003-12-25 11:12) [10]Я так понимаю результат в тиках??? а как перевести в наносекунды или в милисекунды??? Тик - это сколько?
← →
Silver Alex (2003-12-25 11:16) [11]результат в милисекундах как раз
← →
Anatoly Podgoretsky (2003-12-25 11:17) [12]emergenter © (25.12.03 11:12) [10]
Надо калибровать, измерив количество тактов за интервал, но это счетчик с самым максимальным разрешением в компьютере, к тому же он не зависит от загрузки системы, поскольку аппаратный.
Посмотри еще QueryPerformanceCounter
← →
emergenter (2003-12-25 11:20) [13]я делаю так!!!
var
i : integer;
n1 : Cardinal;
n2 : Cardinal;
begin
n1:=GetTickCount();
for i:=0 to 1000 do
....моя функция, кот надо измерить...
n2:=GetTickCount()-n1;
end;
И что то вроде как нет то !!! Результаты могут быть
16, 390, 1640...
Поправьте если что не так...
← →
MV (2003-12-25 11:32) [14]А если вместо GetTickCount использовать Now ?
Толку-то в наносекундах, если эти тики 60 раз в секунду происходят... И точнее - нельзя, хоть убейся.
← →
Silver Alex (2003-12-25 11:37) [15]
> MV (25.12.03 11:32) [14]
> А если вместо GetTickCount использовать Now ?
ну попробуй, потом расскажешь
← →
Brahman (2003-12-25 13:37) [16]Выдернул.. думаю разберетесь.
Не учтены ньюансы, связанные с вызовом, но это второе..
function TtsvTimer.GetFactor:int64;
begin
fFactor := CPUClockFrequency div 1000;
Result := fFactor;
end;
function TtsvTimer.CPUClockFrequency: Int64;
begin
QueryPerformanceFrequency( Result );
end;
function TtsvTimer.GetTick: Int64;
var i : Int64;
begin
QueryPerformanceCounter (I);
Result := i - fElapseStart;
end;
// Measure time in [us]
function TtsvTimer.TimeElapseduS: LongWord;
begin
Result := (GetTick*1000) div fFactor;
end;
// Measure time in [ms]
function TtsvTimer.TimeElapsed: LongWord;
begin
Result := GetTick div fFactor;
end;
// Measure time in [s]
function TtsvTimer.TimeElapsedS: LongWord;
begin
Result := ((GetTick div fFactor) div 1000);
end;
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.01.09;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.01 c