Память процессора... Как обратиться? Заполнить? Освободить?

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Re: Память процессора... Как обратиться? Заполнить? Освободи

Сообщение vitaly_l » 04.06.2012 16:40:12

vada писал(а):Теория и практика структурного программирования

Это волшебная книга, которую невозможно найти в инете... а ведь инет, изначально - задумывался как гигантская библиотека...
kipar писал(а):Поэтому при всех оптимизациях надо замерять получающееся время

А ведь это точный именно ИНСТРУМЕНТ для определения оптимизации, типа штангенциркуля или вернее микрометра... Спасибо, книгу прочту, если найду.
kipar писал(а):ручная оптимизация им обычно будет мешать

Под оптимизацией, лично я, понимаю грамотное написание Паскалевского кода, если я правильно понял, то все программисты в один голос говорят, что с компилятором в написании на ассемблере - тягаться бессмысленно... (и это, лично меня - радует...)
vada писал(а):издержки на вызов процедуры/функции и возврат из нее больше чем время работы самой процедуры. В этом случае inline поможет повысить быстродействие
Тобишь inline - это для коротких и постоянно используемых функций, типа постоянного перемножения матрицы при рендеринге 3D итп? (очевидно ответ ДА...) И тут же встречный вопрос...

:arrow: Если вызов функции - это трата драгоценного времени процессора... Значит ли это, что для максимального быстродействия выгодно весь код уместить в одной функции, без ссылок на внешние функции??? (если функция циклически пользуется и она без inline...) Или там вступают иные ограничения???



PS: СПАСИБО! :cry:
.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: Память процессора... Как обратиться? Заполнить? Освободи

Сообщение vada » 04.06.2012 17:56:35

Значит ли это, что для максимального быстродействия выгодно весь код уместить в одной функции

Да это так, но сложность написания модуля в геометрической зависимости от размера модуля. Для разработки это далеко не оптимально. Для некоторых задач может жизни программиста не хватить. :wink:
Или там вступают иные ограничения???

Вступают. И еще какие!
Например, есть еще такой чрезвычайно важный параметр как читаемость кода. Он, как правило, является более важным чем быстродействие программы. Программу надо написать, отладить, а потом сопровождать. Сопровождать один огромный непонятный модуль невозможно.
Аватара пользователя
vada
энтузиаст
 
Сообщения: 691
Зарегистрирован: 14.02.2006 13:43:17

Re: Память процессора... Как обратиться? Заполнить? Освободи

Сообщение vitaly_l » 06.06.2012 12:46:39

Возник ещё важный вопрос по теме, а именно:

:!: :idea: :arrow: Можно ли, узнать какое количество тактов тратит процессор на ту или иную: функцию, операцию, алгоритм итд. :?:



.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41


Re: Память процессора... Как обратиться? Заполнить? Освободи

Сообщение vitaly_l » 06.06.2012 15:33:08

Brainenjii писал(а):http://wiki.lazarus.freepascal.org/Profiling

Если я правильно понимаю: предложенное профилирование - позволяет видеть некий лог, в котором будет отображена информация об ошибках, которые выявит компилятор... Это оч. полезная информация - спасибо.

Однако я имел ввиду, функцию, которая позволила бы перманентно, в момент исполнения программы, проверить сколько тактов совершено в процессе выполнения моей функции...

Некий счётчик тактов процессора... :roll:, который можно запустить нажатием на button, типа:

Код: Выделить всё

intStart := SomeFunctionOfReturnCountTaktProsessor();
// ... много кода....
intEnd := SomeFunctionOfReturnCountTaktProsessor();
ShowMessage(IntToStr(intEnd - intStart));



:!: :?: Примерно так: Можно ли вычислять количество потраченных процессором тактов? :|



/
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: Память процессора... Как обратиться? Заполнить? Освободи

Сообщение vada » 06.06.2012 16:06:42

Можно ли вычислять количество потраченных процессором тактов?

Не получится. Разные процессоры на одну и ту же команду, частенько, тратят разное количество тактов. Потом, количество тактов зависит от состояния процессорного кеша. Типа, дергать данные из памяти, или они уже здесь.
Аватара пользователя
vada
энтузиаст
 
Сообщения: 691
Зарегистрирован: 14.02.2006 13:43:17

Re: Память процессора... Как обратиться? Заполнить? Освободи

Сообщение vitaly_l » 06.06.2012 16:16:48

vada писал(а):Разные процессоры на одну и ту же команду, частенько, тратят разное количество тактов. Потом, количество тактов зависит от состояния процессорного кеша.

Это мне понятно... Однако: Мне всё равно(пофигу), на другие процессоры... Мне нужно знать, как изменяется кол-во тактов - на моём процессоре, при изменении кода... Пусть на других процессорах будет другое значение, но мне важен только мой... Тобишь, нужен простой счётчик... :? В любом процессоре, такой счётчик тактов :roll: - естественно есть...

:arrow: Как получить данные счётчика тактов процессора???



.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: Память процессора... Как обратиться? Заполнить? Освободи

Сообщение Brainenjii » 06.06.2012 16:23:04

GetTickCount?
Аватара пользователя
Brainenjii
энтузиаст
 
Сообщения: 1351
Зарегистрирован: 10.05.2007 00:04:46

Re: Память процессора... Как обратиться? Заполнить? Освободи

Сообщение vitaly_l » 06.06.2012 16:44:26

Brainenjii писал(а):GetTickCount?

В описании GetTickCount Считывает вpемя, пpошедшее с момента запуска системы (в миллисекундах). Считывает такты системного таймера...

:arrow: А нужно: данные счётчика количества совершённых тактов процессора???
Например, загрузка ЦП в диспетчере задач: Как определяется???



.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: Память процессора... Как обратиться? Заполнить? Освободи

Сообщение iskander » 06.06.2012 17:01:15

Если речь про Intel-AMD, то RDTSC
iskander
энтузиаст
 
Сообщения: 626
Зарегистрирован: 08.01.2012 18:43:34

Re: Память процессора... Как обратиться? Заполнить? Освободи

Сообщение vitaly_l » 06.06.2012 17:38:19

iskander писал(а):RDTSC

Спасибо... Однако, если я в функции напишу всего одну команду: sleep(1000);
то: RDTSC - вернёт точное кол-во тактов, совершённое за sleep(1000);...
А мне нужно, количество - не пустых(исполяемых), тактов процессора, совершённых в процессе функции...
Или точнее количество ОБРАЩЕНИЙ к процессору...

:arrow: Как посчитать или получить?



.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: Память процессора... Как обратиться? Заполнить? Освободи

Сообщение vada » 06.06.2012 17:40:58

Не получится.
Ваша задача не одна выполняется в системе. Она в любой момент может быть прервана высокоприоритетным прерыванием. И все ваши подсчеты полетят сами знаете куда.
Можно по ассемблеровкому коду посчитать такт, и то не все так просто. А вот за сколько тактов реально выполняется данный кусок кода определить не получится.
Аватара пользователя
vada
энтузиаст
 
Сообщения: 691
Зарегистрирован: 14.02.2006 13:43:17

Re: Память процессора... Как обратиться? Заполнить? Освободи

Сообщение vitaly_l » 06.06.2012 17:51:41

vada писал(а):Не получится. ... прервана высокоприоритетным прерыванием ...

"Злой" vada... :shock: :cry: :arrow: В смысле: Ужасно я о, высокоприоритетном прерывании - не подумал :(, :( , :( ... :oops:

:idea: Хорошо... тогда так:
:arrow: Можно ли, узнать кол-во строк ассемблеровского кода, в функции от точки X1 до X2(в коде) - чтобы ответ выводился ShowMessage :?:
:!: (c учётом того что я ассемблер не знаю...) :cry:


Добавлено спустя 13 минут 40 секунд:
Re: Память процессора... Как обратиться? Заполнить? Освободить?
Точнее не кода, а количество ассемблеровских операций(инструкций) или обращений к процессору??? (в процессе исполнения...)



.
Последний раз редактировалось vitaly_l 06.06.2012 19:42:28, всего редактировалось 1 раз.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: Память процессора... Как обратиться? Заполнить? Освободи

Сообщение iskander » 06.06.2012 18:08:23

Если интересует производительность перлов вроде Sleep(1000) то дело, конечно, безнадёжное.
Если-же код процедуры\функции выполняется в пределах миллисекунды, то вероятность
переключения контекста во время выполнения небольшая и её влияние может быть уменьшено
увеличением количества измерений.
iskander
энтузиаст
 
Сообщения: 626
Зарегистрирован: 08.01.2012 18:43:34

Re: Память процессора... Как обратиться? Заполнить? Освободи

Сообщение vitaly_l » 06.06.2012 18:12:17

iskander писал(а):вероятность
переключения контекста во время выполнения небольшая


Интересует: количество ассемблеровских операций(инструкций) или обращений к процессору :?: (в процессе исполнения...)
:!: :arrow: Как TaskMeneger считает загруженность процессора :?:



.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Пред.След.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 241

Рейтинг@Mail.ru