IPB
ЛогинПароль:

> Подсчет производительности системы, Подсчет производительности системы при выполнении логических операций
Янычар
сообщение 7.03.2009 21:12
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 115
Пол: Мужской
Реальное имя: Александр

Репутация: -  1  +


Подскажите пожалуйста где можно узнать как происходит выподнение логических операций в процессоре AMD??? Кароче говоря такое задание: определить производительсноть системы при выполнении логических операций. Ну число лог. операций в секунду я смогу подсчитать, а вот как объяснить полученный результат не знаю. Прошу помочь в решении задачи.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
2 страниц V  1 2 >  
Closed Topic Открыть новую тему 
Ответов(1 - 19)
andriano
сообщение 8.03.2009 15:09
Сообщение #2


Гуру
*****

Группа: Пользователи
Сообщений: 1 168
Пол: Мужской
Реальное имя: Сергей Андрианов

Репутация: -  28  +


Цитата(Янычар @ 7.03.2009 21:12) *

Подскажите пожалуйста где можно узнать как происходит выподнение логических операций в процессоре AMD??? Кароче говоря такое задание: определить производительсноть системы при выполнении логических операций. Ну число лог. операций в секунду я смогу подсчитать, а вот как объяснить полученный результат не знаю. Прошу помочь в решении задачи.

А в каких единицах должна измеряться производительность в данном случае? Разве не в операциях в секунду?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Янычар
сообщение 8.03.2009 20:38
Сообщение #3


Пионер
**

Группа: Пользователи
Сообщений: 115
Пол: Мужской
Реальное имя: Александр

Репутация: -  1  +


Да не в подсчете проблем то нету) Мне нужно еще и объяснить как я понял почему именно такое число оп\сек получится. То есть мне нужно знать как происходит вычисление логических операций в конкретном процессоре, в частности у меня AMD. Так вот чего то ищу в инете и не могу найти эту информацию..Может кто подскажет где ее можно найти?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
andriano
сообщение 9.03.2009 10:39
Сообщение #4


Гуру
*****

Группа: Пользователи
Сообщений: 1 168
Пол: Мужской
Реальное имя: Сергей Андрианов

Репутация: -  28  +


Цитата(Янычар @ 8.03.2009 20:38) *

Да не в подсчете проблем то нету) Мне нужно еще и объяснить как я понял почему именно такое число оп\сек получится. То есть мне нужно знать как происходит вычисление логических операций в конкретном процессоре, в частности у меня AMD. Так вот чего то ищу в инете и не могу найти эту информацию..Может кто подскажет где ее можно найти?

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

Кстати, процессор внутри совершенно не соответствует той программной модели которая досталась от Intel 8086, и которая видна снаружи. Процессор оснащен кэш-памятью и способен выполнять несколько инструкций параллельно, причем его максимальная загрузка практически не достигается, а реальная зависит от того, какие инструкции и в каком порядке он обрабатывает. В частности, скорость работы зависит от перестановки одних и тех же инструкций. Так что, вероятно, нужно еще и показывать устойчивость результатов к перестановке инструкций или, о крайней мере, учитывать этот факт при вычислении погрешности измерений.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Янычар
сообщение 9.03.2009 16:14
Сообщение #5


Пионер
**

Группа: Пользователи
Сообщений: 115
Пол: Мужской
Реальное имя: Александр

Репутация: -  1  +


Честно говоря не понял какой я из этого должен сделать вывод) Ну конечно, я не собираюсь объяснять выполнение операций на уровне цифровой логики(тем более уровне физических устрйств), однако мне остается непонятным с точки зрения чего я должен объяснять буду полученные результаты...Потому что если я буду программировать свой тест на языке высокого уровня, то все что я смогу сказать это, то что конкретная операция занимает столько то времени и сколько например миллионов оп. в секнуду выполняется.. Но это все не то...Видмо мне нужно знать какие логические операции поддерживаются конкретным процессором, за сколько циклов выполняются и как происходит выборка и исполнение команд, но тут вы мне сказали что это информация закрытая, если я правильно понял..
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
andriano
сообщение 9.03.2009 20:40
Сообщение #6


Гуру
*****

Группа: Пользователи
Сообщений: 1 168
Пол: Мужской
Реальное имя: Сергей Андрианов

Репутация: -  28  +


Ну, выводы - делай, какие можешь. Я тоже не понял, что именно тебе нужно.
Насчет логических операций, думаю, насчет поддержки конкретным процессором - неактуально, т.к. практически наверняка имеется в видк х86, а там набор операций один и тот же. Сколько тактов - для современных процессоров не найдешь (последняя растактовка была для первого Пентиума), да и не может быть такой информации, т.к. внутри и снаружи процессоры устроены по-разному. Время выполнения операции зависит от ее окружения, так что можно оперировать лишь средними величинами.
Думаю, можно логические операции разбить на несколько групп, например, сдвиги, операции, сложность которых зависит от разрядности и операции, сложность которых не зависит от разрядности.
Если я правильно понял, требуется ПРАВИЛЬНО провести измерения, а также доказать, что измерения проведены правильно.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Янычар
сообщение 9.03.2009 20:59
Сообщение #7


Пионер
**

Группа: Пользователи
Сообщений: 115
Пол: Мужской
Реальное имя: Александр

Репутация: -  1  +


Ну может и так..у меня так проблема в том и состоит что не очень понимаю что нужно сделать(это конечно надо было мне уточнить).Просто помню то, что когда спросил насчет того чтобы провести тест на нескольких компах, мне сказали что лучше не надо ибо придется тогда объяснять и для других компов почему так получается.. Вот их этого я и сделал вывод что как то нужно объяснять происхождение полученных результатов на конкретном компе. Но и то что ты говоришь логично.Хотя непонятно как я буду доказывать, что измерения проведены правильно.Ну допустим разобью я на группы логические операции, подсчитаю за сколько каждая из них выполняется и все такое и что дальше?Ну можно подсчитать насколько производительность выполнения лог. операций зависит от разрядности операндов.ну и больше ничего в голову не лезет..

Сообщение отредактировано: Янычар - 9.03.2009 21:00
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
andriano
сообщение 9.03.2009 22:02
Сообщение #8


Гуру
*****

Группа: Пользователи
Сообщений: 1 168
Пол: Мужской
Реальное имя: Сергей Андрианов

Репутация: -  28  +


Ну для начала неплохо бы узнать, как именно ты собиаешься узнавать, сколько выполняется, скажем, циклический сдвих вправо.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Янычар
сообщение 12.03.2009 19:32
Сообщение #9


Пионер
**

Группа: Пользователи
Сообщений: 115
Пол: Мужской
Реальное имя: Александр

Репутация: -  1  +


Извеняюсь за такую задержку, просто были дела) Ну вот, наверное я бы сделал так вычисление MFLOPS для логических операций, хотя не уверен что правильно:

clock_t start,finish;
int i=0,b=1,c=0,j=0;
float d=0;
double duration;
start = clock(); //отсчитываем начало отсчета
for(i=0;i<=10000;i++){
for(j=0;j<=10000;j++){
b<<=1;
b>>=1;
}
}
finish=clock(); //после выполнения циклов
c=10000*(10000*2); //количество операций в циклах
duration=double(finish-start); //время в милисекундах
duration/=1000;
d=c/(duration*1000000); //вычисление MFLOPS
cout<<d;


 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
andriano
сообщение 12.03.2009 21:44
Сообщение #10


Гуру
*****

Группа: Пользователи
Сообщений: 1 168
Пол: Мужской
Реальное имя: Сергей Андрианов

Репутация: -  28  +


Понятно.
Ну, во-первых, у тебя во время выполнения обмеряемого фрагмента кода входит время выполнения вложенного цикла. В принципе, это можно откорректировать примерно так:

start2 = clock(); //отсчитываем начало отсчета
for(i=0;i<=10000;i++){
for(j=0;j<=10000;j++){
}
}
finish2=clock(); //после выполнения циклов
...
duration=double((finish-start) - (finish2-start2)); //время в милисекундах

Далее: тебя интересует производительность процессора по выполнению логических операций? Чтобы избежать включения в обмеряемый фрагмент времени загрузки из памяти в регистр и выгрузки из регистра в память я бы описал переменную b как register.
А вообще нормальный оптимизирующий компилятор должен вырезать из кода оба цикла, и тот, что написал ты, и тот, что добавил я. Поэтому при подобных измерениях обмеряемые фрагменты кода обычно пишут на ассемблере. В противном случае необходимо предпринимать очень серьезные меры для борьбы с оптимизатором и, кроме того, доказывать, что эти меры привели к успеху.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Янычар
сообщение 12.03.2009 22:25
Сообщение #11


Пионер
**

Группа: Пользователи
Сообщений: 115
Пол: Мужской
Реальное имя: Александр

Репутация: -  1  +


Ну да я думал об этом и твое исправление тоже понимал просто лень было писать) Ну мне кажется что от меня не будут требовать такой точности в этом я уверен. А что за тип register честно говоря не знаю... Кароче говоря таким макаром считаю возможным высчитывать производительность, ибо нету смысла париться когда спросу нет) Так что следующиим вопросом остается что же дальше делать мне. Ну допустим я подсчитаю еще операцию сравнения, логического ИЛИ и НЕ таким же макаром. И что дальше..в чем собственно должно состоять доказательство?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
andriano
сообщение 12.03.2009 23:05
Сообщение #12


Гуру
*****

Группа: Пользователи
Сообщений: 1 168
Пол: Мужской
Реальное имя: Сергей Андрианов

Репутация: -  28  +


Цитата(Янычар @ 12.03.2009 22:25) *
Ну мне кажется что от меня не будут требовать такой точности в этом я уверен.
Ну тогда хотелось бы услышать оценку погрешности предпрлагаемого метода в процентах, а также величину максимально допустимой погрешности.
Цитата
Так что следующиим вопросом остается что же дальше делать мне. Ну допустим я подсчитаю еще операцию сравнения, логического ИЛИ и НЕ таким же макаром. И что дальше..в чем собственно должно состоять доказательство?
С моей точки зрения достаточным было бы правильно оценить погрешность измерения.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Янычар
сообщение 12.03.2009 23:54
Сообщение #13


Пионер
**

Группа: Пользователи
Сообщений: 115
Пол: Мужской
Реальное имя: Александр

Репутация: -  1  +


Ну а все таки никак нельзя объяснить полученные результаты на более низком уровне? Ну хоть как нибудь с точки зрения ассемблера для данного процессора.может как нить так...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
andriano
сообщение 13.03.2009 8:06
Сообщение #14


Гуру
*****

Группа: Пользователи
Сообщений: 1 168
Пол: Мужской
Реальное имя: Сергей Андрианов

Репутация: -  28  +


Ты пропустил мой вопрос о погрешности метода и максимально допустимой погрешности измерений. Пока ответа на них нет, дальше пытаться что-либо "объяснить" лишено смысла.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Янычар
сообщение 13.03.2009 18:32
Сообщение #15


Пионер
**

Группа: Пользователи
Сообщений: 115
Пол: Мужской
Реальное имя: Александр

Репутация: -  1  +


Ну значит не знаю как правильно ли я сделал. Кароче говоря я искал случайную погрешность измерений. Провел 10 измерений(10 запусков программы) и в большинстве случаев получил разные значения. Сначала вычислил среднее арифметическое: X=1207,759/10=120,776;
Затем можно найти среднее квадратичное отклонение: Sx_=6,02 и средняя квадратичная погрешность: Sx=60.2. А вот как в данном слкчае выразить полную погрешность не знаю..
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
andriano
сообщение 13.03.2009 21:56
Сообщение #16


Гуру
*****

Группа: Пользователи
Сообщений: 1 168
Пол: Мужской
Реальное имя: Сергей Андрианов

Репутация: -  28  +


Вот, скажем, тебе нужно измерить скорость падения кирпича на пол.
Ты берешь линейку и измеряешь. 10 раз. (то же самое можно ппытаться сделать при помощи вольтметра. С тем жерезультатом)
Потом чисто формальными методами обрабатываешь результаты измерения и получаешь некоторые величины матожидания и дисперсии.
Как ты думаешь, означает ли это, что ты получил правильный результат?

Прежде всего нужно убедиться, что ты меряешь именно то, что нужно. Т.е. что ты используешь правильный МЕТОД.


PS. Я тут немножко поэкспериментировал и пришел к выводам (для Pentium M).
1. Хотя "пустой" цикл занимает некоторое время, в случае "непустого" цикла операции по организации самого цикла времени практически не занимают. Вероятно, из-за того, что выполняются параллельно сдвигам.
2. 1 сдвиг выполняется 1 такт процессора. Т.е. производительность численно равна тактовой частоте.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Янычар
сообщение 14.03.2009 16:04
Сообщение #17


Пионер
**

Группа: Пользователи
Сообщений: 115
Пол: Мужской
Реальное имя: Александр

Репутация: -  1  +


То есть как, если у меня 3000 MHz, то у меня в секунду должно выполняться 3 млрд. операций. Однако мой результат это 120 млн.Что то не похоже на тактовую частоту. Или я чего то не понимаю?Или ты имел ввиду что операция выполняется за каждый цикл как одна?(без учета самого цикла)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
andriano
сообщение 14.03.2009 19:36
Сообщение #18


Гуру
*****

Группа: Пользователи
Сообщений: 1 168
Пол: Мужской
Реальное имя: Сергей Андрианов

Репутация: -  28  +


Ну, процессоры у нас немного разные, но по порядку их производительность должна совпадать.
На древних процессорах длительность этой операции не превосходила 3 тактов. Сейчас она не может быть меньше.
Отсюда, мне кажется, можно сделать лишь один вывод: методическая погрешность у тебя составляет сотни процентов.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Янычар
сообщение 15.03.2009 16:25
Сообщение #19


Пионер
**

Группа: Пользователи
Сообщений: 115
Пол: Мужской
Реальное имя: Александр

Репутация: -  1  +


А можно по подробней для твоего процессора. Мог бы написать параметры твоего проца, испульзуемый метод измерения и результаты?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
andriano
сообщение 15.03.2009 16:47
Сообщение #20


Гуру
*****

Группа: Пользователи
Сообщений: 1 168
Пол: Мужской
Реальное имя: Сергей Андрианов

Репутация: -  28  +


Проверил на AMD 64 3500+ (2.2GHz):
здесь результаты несколько отличаются:
- пустой цикл и папа сдвигов внутри цикла выполняется одинаковое время. Т.е. сдвиги идут параллельно циклу, не удлиняя время его выполнения.
- при наличии внутри цикла не менее 6 сдвигов за такт производится 3 сдвига.
Получается, производительность AMD на операциях сдвига вчетверо больше, чем Intel Pentium M.
Метод, в принципе, похожий, но, естественно, все на ассемблере + анализ получаемых цифр уже посредством "естественного" интеллекта.

Тебе же, мне кажется, надо начать с того, что точно сформулировать цель работы. Потому как методы выбираются именно, исходя из цели.

Сообщение отредактировано: andriano - 15.03.2009 16:47
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

2 страниц V  1 2 >
Closed Topic Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 2.11.2024 0:51
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"