Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2005.02.06;
Скачать: [xml.tar.bz2];

Вниз

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

 
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 вся ветка

Форум: "WinAPI";
Текущий архив: 2005.02.06;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.04 c
3-1104748932
UVV
2005-01-03 13:42
2005.02.06
последовательность в Oracle


3-1104398587
Georji
2004-12-30 12:23
2005.02.06
Извлечение месяца


11-1089154817
murtix
2004-07-07 03:00
2005.02.06
создание КОЛ компоненты в runtime


14-1103740532
Alexander Panov
2004-12-22 21:35
2005.02.06
Выборы в Украине. Противостояние. (Продолжение 5 - шестая ветка)


14-1106122704
Cosinus
2005-01-19 11:18
2005.02.06
Подскажите хорошую утилитку физического тестирования HDD...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский