Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.02.06;
Скачать: CL | DM;

Вниз

Подсчет опираций процессора   Найти похожие ветки 

 
Alex____ ©   (2004-12-15 20:14) [0]

Подскажите пожалуйста как сделать подсчет опираций процессора в програме:
"
const n=10;
var a:array[1..n]of longint;k:longint;
procedure sort(l,r:longint);
var i,j:longint;w,x:longint;
begin i:=l;j:=r;
x:=a[(l+r) div 2];
repeat
while a[i]<x do inc(i);
while x<a[j] do dec(j);
if i<=j then begin w:=a[i];a[i]:=a[j];a[j]:=w;inc(i);dec(j) end;
until i>j;
if l<j then sort(l,j);
if i<r then sort(i,r);
end;
begin
for k:=1 to n do readln(a[k]);
sort(1,n);
for k:=1 to n do writeln(a[k]);
readln;
end.
"
Да, тот самый Quicksort.
Спасибо!


 
begin...end ©   (2004-12-15 20:16) [1]

> Alex____ ©   (15.12.04 20:14)

А что понимается под "опирацией процессора"? И главное - зачем их считать?


 
Alex____ ©   (2004-12-15 20:21) [2]

Можно сказать ассэмблеровских операций, для более точного сравнения алгоритмов.


 
jack128 ©   (2004-12-15 20:28) [3]

открываешь окно CPU и считаешь кол-во строк ;-)
Только вод каждая инструкция процессора выполняется разное время, поэтому просот их кол-во те ничего не даст.  Может просто тесты обыкновенные провести, какой алгоритм лудше??


 
uny ©   (2004-12-15 20:28) [4]

время лучше, хоть сравнивать можно. а операции = бывают процессоры вообще своё что то делают транслированное


 
begin...end ©   (2004-12-15 20:29) [5]

> [2] Alex____ ©   (15.12.04 20:21)

Останов на контрольной точке + сочетание славиш Ctrl-Alt-C.

Только как с помощью такого подсчёта можно сравнить алгоритмы - ума не приложу.


 
Mystic ©   (2004-12-15 20:31) [6]

1. Ввести счетчики вручную
2. Засекать время
3. QueryPerformanceCounter, возможно QueryPerformanceFrequency

Первое самое надежное. На всех компьютерах будет один и тот же результат. Второе и третье зависит от компьютера. Сравнивать алгоритмы надо на одном компьютере, не на разных :)

Вообще-то есть грабли в том, что в операционных системах вроде Windows может случатся, что активность системы будет вносить совю погрешность в вычисления.

Да. Единица измерения в P III есть такт процессора. Команды могут иметьразное количество тактов. Кроме того теоретически возможно, что алгоритм, выполняющийся за большее количество тактов будет выполняться быстрее (за счет большего количества кэш-попаданий, ...) Но это уже тонкости.


 
Alex____ ©   (2004-12-16 08:30) [7]

"Ввести счетчики вручную" КАК???


 
Digitman ©   (2004-12-16 08:57) [8]


> Alex____ ©   (15.12.04 20:21) [2]
> Можно сказать ассэмблеровских операций, для более точного
> сравнения алгоритмов.


сравнивая кол-ва маш.инструкций ты сравниваешь отнюдь не алгоритмы.

если же тебе необходимо сравнить эффективности того или иного алгоритма на одном и том же сортируемом этими алгоритмами списке, то загляни в демо-проект threads.dpr


 
Alex____ ©   (2004-12-16 20:10) [9]

Как посчитать количество тактов процессора?


 
Anatoly Podgoretsky ©   (2004-12-16 20:36) [10]

RDTSC


 
Alex Konshin ©   (2004-12-17 02:31) [11]

RDTSC может быть некорректным, т.к. теоретически код может выполяться на разных процессорах (особенно если долго считает). Можно, конечно, назначить опереленный процессор, но QueryPerformanceCounter будет надежней.
Сейчас уже частенько процессоров несколько стоит, так что будьте осторожны.


 
Anatoly Podgoretsky ©   (2004-12-17 11:36) [12]

QueryPerformanceCounter работает на основе RDTSC, функция просто читает его значение.
Для нескольких процессоров на мой взгляд без разницы из какого будут прочитаны эти значения, все они стартуют одновременно, ошибка может состовлять всего несколько тактов, не знаю как насчет генератора тактов для процессора один на все или разные, думаю что один, но может быть есть системы с отдельными, тогда конечно добавится небольшая ошибка, из за разницы частот кварцев.


 
SammIk ©   (2004-12-17 20:21) [13]

Есть в винде таккая в-я, какая не помню.
Которая привязывает конкретный поток к конкретному процу.
Следовательно счетчик будет считаться с одного проца.
Тогда много процессорность не помешает.


 
Alex____ ©   (2004-12-20 08:04) [14]

Извенмте за необразованость, но что такое RDTSC или QueryPerformanceCounter я не знаю, и в хелпе ничего не нашел.
Обьясните по-подробней плиз.



Страницы: 1 вся ветка

Текущий архив: 2005.02.06;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.025 c
3-1105067306
makz
2005-01-07 06:08
2005.02.06
Снова ХП


4-1103166649
Guest44
2004-12-16 06:10
2005.02.06
use GetSystemMetrics


1-1106279118
Poha
2005-01-21 06:45
2005.02.06
AutoCad


1-1106326550
sloug
2005-01-21 19:55
2005.02.06
Ошибка


14-1106092204
noone_____
2005-01-19 02:50
2005.02.06
inttostr in cpp