|
|
 |
Ответов
|
Mar 6 2011, 06:32
|
Участник

Группа: Участник
Сообщений: 47
Регистрация: 16-01-11
Пользователь №: 62 260

|
Цитата(scifi @ Mar 6 2011, 01:20)  Можно измерять время выполнения участков кода. Что-то вроде start_timer() и stop_timer(). Если есть сомнения в калибровке таймера, то set_pin_high() и set_pin_low(), а измерение времени - осциллографом на ножке МК. Как-то так. про таймеры тоже понятно, конечно. но вообще я еще рассчитывал на "что-нибудь" чтобы позволило оценить не только время исполнения, но накладные расходы на sdram, например. в любом случае спасибо.
|
|
|
|
|
Mar 6 2011, 19:59
|
Участник

Группа: Участник
Сообщений: 47
Регистрация: 16-01-11
Пользователь №: 62 260

|
Цитата(sergeeff @ Mar 6 2011, 14:29)  Ну и кто вам мешает, если очень любопытно, запустить тестовую процедуру в ram и sdram. Померить разницу и быть счастливым? это можно. а остальное как глядеть? вот тут посоветовали etm - хотя бы почитаю про него.
|
|
|
|
|
Mar 6 2011, 21:01
|
Участник

Группа: Участник
Сообщений: 47
Регистрация: 16-01-11
Пользователь №: 62 260

|
Цитата(sergeeff @ Mar 6 2011, 23:51)  Почитайте, почитайте. Потом посмотрите сколько это стоит, а потом изучите, работает ли он с вашим компилятором, а потом есть ли etm в вашем процессоре и выведен ли он как надо и прочее. Тогда выяснится, что пиписькомера с осциллографом вам вполне хватит. По крайней мере, на первое время. про осциллограф я пока не понял. вот захотел я узнать места где много времени тратится на доступ к памяти, то есть произошел cache miss. куда я осциллографом буду тыкать?
|
|
|
|
|
Mar 7 2011, 07:15
|
Профессионал
    
Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007

|
Цитата(bzzz77 @ Mar 7 2011, 00:01)  про осциллограф я пока не понял. вот захотел я узнать места где много времени тратится на доступ к памяти, то есть произошел cache miss. куда я осциллографом буду тыкать? А что, вы думаете ETM вам про cache miss расскажет? Это во-первых. Во-вторых, не понимаю разговоров про ловлю микросекундных блох в миллисекундных процедурах. Или задача не по зубам выбранному процессору, или алгоритм хромает. А cache miss - дело десятое. Примеров тому не счесть. Вот вчера видел очередной вопрос про AVR, где в main() три переменные float....
|
|
|
|
|
Mar 7 2011, 09:58
|
Участник

Группа: Участник
Сообщений: 47
Регистрация: 16-01-11
Пользователь №: 62 260

|
Цитата(sergeeff @ Mar 7 2011, 10:15)  А что, вы думаете ETM вам про cache miss расскажет?
Это во-первых.
Во-вторых, не понимаю разговоров про ловлю микросекундных блох в миллисекундных процедурах. Или задача не по зубам выбранному процессору, или алгоритм хромает. А cache miss - дело десятое.
Примеров тому не счесть. Вот вчера видел очередной вопрос про AVR, где в main() три переменные float.... не понимаете и ладно. видимо никогда не сталкивались с ситуациями когда производительность ощутимо падает если, например, две связанные переменные попадают в разные cacheline. вас послушать, так вместо оптимизации (и алгоритма тоже) нужно сразу из пушек по воробьям палить. с задержками в sdram, cache miss очень хорошо производительность может испортить. Цитата(scifi @ Mar 7 2011, 10:37)  Я думал, речь идёт об LPC2478. Если я правильно помню, никакого кэша там нет. Или это уже просто "разговор за жизнь"? кэша нет, ступил я слегка. но есть разница в доступе к sdram и sram, значит perf counters (или etm) мог бы помочь в правильной организации: что положить в sram, что в sdram. например. ps. слегка удивляют люди, которые утверждают, что инструмент - лишний и гвозди можно забивать топором.
|
|
|
|
|
Mar 7 2011, 11:47
|

Ally
     
Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050

|
Цитата(bzzz77 @ Mar 7 2011, 11:58)  значит perf counters (или etm) мог бы помочь в правильной организации: что положить в sram, что в sdram. например. Что за perf counters? Если те что по ссылке http://msdn.microsoft.com/en-us/library/aa...3(v=vs.85).aspx, то портируйте Win CE и получите их. Прецизионных счетчиков в микроконтроллерах полно, выбираете любой и измеряете длительность любых процедур с точностью до такта. В микроконтроллерах измерения можно сделать гораздо проще и гибче чем в в Windows и с меньшими накладными. Если вы не используете операционку с готовым фреймворком для счетчиков прозводительности, то понятно что в свой код счетчики надо вставлять самому. Все серьезные RTOS под микроконтроллеры имеют механизм "Performance Counters"
|
|
|
|
|
Mar 7 2011, 12:03
|
Участник

Группа: Участник
Сообщений: 47
Регистрация: 16-01-11
Пользователь №: 62 260

|
Цитата(AlexandrY @ Mar 7 2011, 14:47)  Что за perf counters? Если те что по ссылке http://msdn.microsoft.com/en-us/library/aa...3(v=vs.85).aspx, то портируйте Win CE и получите их. Прецизионных счетчиков в микроконтроллерах полно, выбираете любой и измеряете длительность любых процедур с точностью до такта. В микроконтроллерах измерения можно сделать гораздо проще и гибче чем в в Windows и с меньшими накладными. Если вы не используете операционку с готовым фреймворком для счетчиков прозводительности, то понятно что в свой код счетчики надо вставлять самому. Все серьезные RTOS под микроконтроллеры имеют механизм "Performance Counters" ос слегка не в курсе того, что происходит в ядре процессора. оно же не в курсе ситуаций типа cache hit/miss, branch midprediction и прочих вещей, которые придумали, чтобы мы с ними боролись. в новых армах есть вот такое, например: http://oprofile.sourceforge.net/docs/arm-v7-events.phpа на v4 похоже только etm
|
|
|
|
|
Mar 7 2011, 12:42
|
Профессионал
    
Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007

|
Цитата(bzzz77 @ Mar 7 2011, 15:03)  ос слегка не в курсе... в новых армах есть вот такое,.. н а на v4 похоже только etm  Вы все рассказываете, как оно где-то должно быть очень здорово. Про всякие "новые" ARM'ы, a на конкретные вопросы отвечать не любите. Цитата Если команда вместо 1 такта выполняется за 30 тактов - подсказать вам cache miss или hit там имел место ? Даже если бы у меня был ETM на борту и весь инструментарий, вы как себе представляете вылавливание таких команд (1 против 30) в программе более 1Мб? Учитывая статистический механизм срабатывания кеша? Цитата Современные технологии программирования с использованием JIT компиляции Читаем Wiki : (http://ru.wikipedia.org/wiki/JIT-%D0%BA%D0%BE%D0%BC%D0%BF%D0%B8%D0%BB%D1%8F%D1%86%D0%B8%D1%8F) технология увеличения производительности программных систем, использующих байт-код, путём компиляции байт-кода в машинный код непосредственно во время работы программы. Таким образом достигается высокая скорость выполнения (сравнимая с компилируемыми языками) за счёт увеличения потребления памяти (для хранения результатов компиляции) и затрат времени на компиляцию. Вы действительно считаете, что такая технология - благо для embedded processor? И как вы себе представляете постоянное размещение программы в кеше, если объем программы/данных превышают объемы соответствующих кешей?
|
|
|
|
|
Mar 7 2011, 14:21
|
Участник

Группа: Участник
Сообщений: 47
Регистрация: 16-01-11
Пользователь №: 62 260

|
Цитата(sergeeff @ Mar 7 2011, 15:42)  Вы действительно считаете, что такая технология - благо для embedded processor? И как вы себе представляете постоянное размещение программы в кеше, если объем программы/данных превышают объемы соответствующих кешей? считаю, что это благо для любого CPU. никакое полное размещение кода в кэше никому не нужно. размещать там нужно критические куски. то же самое касается данных. сейчас мне это потребовалось для декодирования mp3. когда я работаю с intel/amd, то у меня под рукой есть oprofile, которые однозначно покажет "горячие" места, над которыми стоит думать-работать-оптимизировать. например, поднапрячься и переписать их на асме. например, подумать как лучше разместить данные (с учетом наличия sram, который ссуть тот же кэш), использовать возможности разных там burst mode и прочее. однако как я узнаю "горячие" места на lpc2438? ну да, придется расставлять кучу счетчиков клоков тут и там, интеративно приближаясь к "горячим" точкам. только с oprofile (который просто показывает perf counters) это делается за одну итерацию. поглядите какие есть счетчики на разных камнях: http://oprofile.sourceforge.net/docs/Цитата(AlexandrY @ Mar 7 2011, 17:11)  Performance Counters - это программный фреймворк на базе оси. А для архитектуры с недетминированным временем выполнения но требованием жесткого реалтайма Performance Counters недостаточно. Нужна статистика и оценки параметров статистики. Это делается на ARM-ах элементарно, но тоже программно. курите мат. часть: http://oprofile.sourceforge.net/docs/ - внизу страницы. perf. counters - это счетчики внутри CPU. для того, чтобы с ними работать ось не нужна. максимум, что требуется от оси - не мешать, давать доступ к ним. Цитата(scifi @ Mar 7 2011, 16:28)  Хороший, годный срач получился. Чем засорять тему дальше, почему бы не сойтись на том, что ARM7TDMI не имеет аппаратных Performance Counters, и средства измерения производительности должны добавляться к программе вручную? похоже так  зассучив рукава ... вот с ETM можно было бы много интересной информации получить, я полагаю. но под нынешний проект - это слишком большой объем работ получится. в любом случае, за подсказку про ETM спасибо подсказавшим.
|
|
|
|
|
Mar 7 2011, 14:40
|

Ally
     
Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050

|
Цитата(bzzz77 @ Mar 7 2011, 16:21)  курите мат. часть: http://oprofile.sourceforge.net/docs/ - внизу страницы. perf. counters - это счетчики внутри CPU. для того, чтобы с ними работать ось не нужна. максимум, что требуется от оси - не мешать, давать доступ к ним. Я вам уже дал ссылку: http://msdn.microsoft.com/en-us/library/aa...3(v=vs.85).aspx Не ней невооруженным взглядом видно что на PC вы имеете дело не со счетчиками напрямик, а с программным инструментом, без которого от тех счетчиков ни холодно ни жарко. B RTOS есть такие же программные инструменты. Или скажем так. Покажите хоть один счетчик в PC-шном проце который бы вам помог узнать наиболее узкое место в алгоритме
|
|
|
|
|
Mar 7 2011, 15:27
|
Участник

Группа: Участник
Сообщений: 47
Регистрация: 16-01-11
Пользователь №: 62 260

|
Цитата(AlexandrY @ Mar 7 2011, 17:40)  Я вам уже дал ссылку: http://msdn.microsoft.com/en-us/library/aa...3(v=vs.85).aspx Не ней невооруженным взглядом видно что на PC вы имеете дело не со счетчиками напрямик, а с программным инструментом, без которого от тех счетчиков ни холодно ни жарко. B RTOS есть такие же программные инструменты. Или скажем так. Покажите хоть один счетчик в PC-шном проце который бы вам помог узнать наиболее узкое место в алгоритме  пожалуйста, прекратите ссылаться на тупейшие документы майкрософт и посмотрите то, что я показал выше. там настоящие счетчики, а не какие-то "программные инструменты". касательно счетчиков в PC - они там же описаны, их полно. я их много раз использовал. современный CPU легко может снизить теоретическую производительность алгоритма во много раз, если не принимать во внимание особенности CPU.
|
|
|
|
|
Mar 7 2011, 16:20
|

Ally
     
Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050

|
Цитата(bzzz77 @ Mar 7 2011, 17:27)  пожалуйста, прекратите ссылаться на тупейшие документы майкрософт и посмотрите то, что я показал выше. там настоящие счетчики, а не какие-то "программные инструменты".
касательно счетчиков в PC - они там же описаны, их полно. я их много раз использовал. современный CPU легко может снизить теоретическую производительность алгоритма во много раз, если не принимать во внимание особенности CPU. Ну пока инфа от микрософта у меня вызывает больше доверия чем ваша Да и пакет по вашей ссылке тоже есть по сути чисто программное решение. Хотя честно скажу, оно мне понравилось, так что от ваших постов польза есть.  Кстати там ответ на вашу проблему. Организуйте регулярные прерывания и фиксируйте по какому адресу вы прервали алгоритм, пишите адреса в базу данных (огромная правда будет ) или на лету пытайтесь определить имя функции которую прервали и ее пишите в базу (тогда огромный символьный файл нужен будет). После миллиона запусков приложения получите вполне правдоподобную статистику. Это типа то удобство которое дают профайлеры на PC-ишных процессорах. Смешно, но это костыли. Простенький симмулятор в Keil-е даст гораздо более подробную и исчерпывающую информацию вплоть до обращений к отдельным периферийным регистрам. Взяв симуляторы покруче можно и шинные задержки учесть. И расскажите ка, как вы все таки те счетчики использовали  Ну просто интересно. (это при том что у вас не было понятия о текущих DMA обменах, задержках в контроллерах памяти, шинных мостах и т.д. и т.п. ) Т.е. что дает статистика ядра без статистики со всей платформы SoC-а?
|
|
|
|
|
Mar 7 2011, 16:38
|
Участник

Группа: Участник
Сообщений: 47
Регистрация: 16-01-11
Пользователь №: 62 260

|
Цитата(AlexandrY @ Mar 7 2011, 19:20)  Ну пока инфа от микрософта у меня вызывает больше доверия чем ваша Да и пакет по вашей ссылке тоже есть по сути чисто программное решение. Хотя честно скажу, оно мне понравилось, так что от ваших постов польза есть.  И расскажите ка, как вы все таки те счетчики использовали  Ну просто интересно. (это при том что у вас не было понятия о текущих DMA обменах, задержках в контроллерах памяти, шинных мостах и т.д. и т.п. ) Т.е. что дает статистика ядра без статистики со всей платформы SoC-а? ну вы хоть приличия ради загляните по ссылке, да? http://oprofile.sourceforge.net/docs/intel-piii-events.php - это счетчики *внутри* CPU. oprofile/проч их только показывают. где оно "чисто программное" ? ну или почитайте шиты от intel/amd. раз так интересно - расскажу. oprofile (или другой похожий) покажет точки в коде, на который счетчики чаще всего срабатывают: http://oprofile.sourceforge.net/examples/дальше - по ситуации, которых масса. например, есть структуры, связанные в список, по которым постоянно делается поиск (hash-листы, деревья). структура может быть достаточно большая и не влазить целиком в cache line. кто-то (может быть и сам) организовал структуру так, что указатель на следующий элемент находится в одной cache line, а "ключ" - в другой. потребуется два обращения к памяти. а можно положить указатель и ключ в пределах одной cacheline и обойтись одним обращением к памяти. есть branch prediction/misprediction. есть обращения к tlb. есть отдельный и большой класс ситуаций, связанных с SMP, с NUMA. для всех них тоже *обычно* есть счетчики, которые позволяют оценить расходы и производительность *существующего* кода. и искать неоптимальные места не наобум, не методом тыка, не путем изучения кучи кода. со счетчиками я вижу, где чаще всего бывают обращения к памяти (а не к кэшу), где чаще всего бранчи предсказывают неверное и так далее.
Сообщение отредактировал bzzz77 - Mar 7 2011, 16:40
|
|
|
|
|
Mar 7 2011, 17:08
|

Ally
     
Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050

|
Цитата(bzzz77 @ Mar 7 2011, 18:38)  Так, исчо раз. Решение это программное. В памяти сидит демон, он во первых оказывает неизвестный местный эффект. Во вторых решение это изолированное, т.е. это не реальная работа программы, а тестовые бесконечные запуски иначе не наберется статистика. Все это вы можете таким же образом сделать на своем ARM-е. А какие-то особенные счетчики можете вставить ручками и даже такие каких нет в Core I7 тем боле, что работать с кэшем вам на ARM7TDMI не грозит. При том в i7 нет тучи счетчиков того, что действительно критически тормозит ARM-ы в SoC-ах. Про то что там чета не помещается в кэш, а вы героически это решаете, то тоже в данной теме не в кассу. Есть ARM-ы с TCM памятью специально для жесткого риалтайма, никаких танцев с бубном вокруг кэша. Т.е. если выбрали неподходящую архитектуру для решения, то пеняйте только на себя, а не на ARM-ы.
|
|
|
|
|
Mar 7 2011, 17:19
|
Участник

Группа: Участник
Сообщений: 47
Регистрация: 16-01-11
Пользователь №: 62 260

|
Цитата(AlexandrY @ Mar 7 2011, 20:08)  Так, исчо раз. Решение это программное. В памяти сидит демон, он во первых оказывает неизвестный местный эффект. Во вторых решение это изолированное, т.е. это не реальная работа программы, а тестовые бесконечные запуски иначе не наберется статистика.
Все это вы можете таким же образом сделать на своем ARM-е. А какие-то особенные счетчики можете вставить ручками и даже такие каких нет в Core I7 тем боле, что работать с кэшем вам на ARM7TDMI не грозит.
Про то что там чета не помещается в кэш, а вы героически это решаете, то тоже в данной теме не в кассу. Есть ARM-ы с TCM памятью специально для жесткого риалтайма, никаких танцев с бубном вокруг кэша. Т.е. если выбрали неподходящую архитектуру для решения, то пеняйте только на себя, а не на ARM-ы. прямо параллельная вселенная какая-то, ей-богу. демон, который сидит в памяти - собирает данные, предоставляемые CPU. потому что "программно" узнать как часто бывает cache hit/miss и все остальное - нельзя. следуя вашей логике, можно и видеокарту называть программным решением, ибо ей требуется драйвер. на arm я не могу увидеть в каком-нибудь регистре как много обращений к памяти было, например. не важно есть демон или нет. на intel/amd я могу это сделать, без всякого демона. потому что соответствующий регистр есть и с демоном не уходит. бесконечные тестовые запуски весьма даже конечны - например, мне более чем достаточно было декодировать пару мегабайт mp3, чтобы увидеть горячие места и понять где нужно копать. в данной теме много чего не в кассу. на arm я не пенял. я просто спросил как можно профилировать на arm. в ответ на это вы принялись валить сюда кучу лажи и ничего по существу. извиняйте за прямоту.
|
|
|
|
|
Mar 7 2011, 17:38
|

Ally
     
Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050

|
Цитата(bzzz77 @ Mar 7 2011, 19:19)  бесконечные тестовые запуски весьма даже конечны - например, мне более чем достаточно было декодировать пару мегабайт mp3, чтобы увидеть горячие места и понять где нужно копать. Я подозреваю что половина из тех кто вам ответил портировала этот несчастный mp3. О его потрировании темы здесь не утихают не на месяц. И что вам скажет счетчик обращений к абстрактной памяти? Вы что, уберете эти обращения? Ну так это уже вопрос системного проектирования, а не отладки. Напороться на него при отладке вот уж действительно лажа. Ну, какие еще счетчики вспомните? Гораздо продуктивнее заниматься тюнингом мнгозадачных планировщиков: Lower the overhead in RTOS scheduling
|
|
|
|
Сообщений в этой теме
bzzz77 профилирование и оптимизация на arm Mar 5 2011, 21:25        aaarrr Цитата(bzzz77 @ Mar 7 2011, 12:58) ps. сл... Mar 7 2011, 10:11        sergeeff Цитата(bzzz77 @ Mar 7 2011, 12:58) не пон... Mar 7 2011, 10:18         sasamy Цитата(sergeeff @ Mar 7 2011, 13:18) Как ... Mar 7 2011, 11:09           ar__systems Цитата(sergeeff @ Mar 7 2011, 07:42) Даже... Mar 7 2011, 13:29              sergeeff Цитата(bzzz77 @ Mar 7 2011, 18:27) ... ес... Mar 7 2011, 15:54               bzzz77 Цитата(sergeeff @ Mar 7 2011, 18:54) ... ... Mar 7 2011, 16:02                sergeeff Цитата(bzzz77 @ Mar 7 2011, 19:02) не сто... Mar 7 2011, 16:31                   bzzz77 Цитата(AlexandrY @ Mar 7 2011, 20:38) Я п... Mar 7 2011, 17:57                    sergeeff Цитата(bzzz77 @ Mar 7 2011, 20:57) особог... Mar 7 2011, 18:13                     bzzz77 Цитата(sergeeff @ Mar 7 2011, 21:13) Ну-н... Mar 7 2011, 18:22                 ar__systems Цитата(AlexandrY @ Mar 7 2011, 12:08) Так... Mar 7 2011, 18:37                  AlexandrY Цитата(ar__systems @ Mar 7 2011, 20:37) У... Mar 7 2011, 18:53                   bzzz77 Цитата(AlexandrY @ Mar 7 2011, 21:53) Это... Mar 7 2011, 19:02                    aaarrr Цитата(bzzz77 @ Mar 7 2011, 22:02) хорошо... Mar 7 2011, 19:31                     bzzz77 Цитата(aaarrr @ Mar 7 2011, 22:31) Если в... Mar 7 2011, 19:54                      aaarrr Цитата(bzzz77 @ Mar 7 2011, 22:54) ...нуж... Mar 7 2011, 20:08                       bzzz77 Цитата(aaarrr @ Mar 7 2011, 23:08) Зачем ... Mar 7 2011, 20:11                        sonycman Цитата(bzzz77 @ Mar 8 2011, 00:11) уже вл... Jun 15 2011, 17:12                  singlskv Цитата(ar__systems @ Mar 7 2011, 21:37) У... Mar 8 2011, 21:54                   bzzz77 Цитата(singlskv @ Mar 9 2011, 00:54) Оста... Mar 9 2011, 05:05         ar__systems Цитата(AlexandrY @ Mar 7 2011, 06:47) Что... Mar 7 2011, 13:25      scifi Цитата(bzzz77 @ Mar 7 2011, 00:01) про ос... Mar 7 2011, 07:37 ViKo В Keil есть Analisis Windows, а именно Logic Anili... Mar 6 2011, 11:44 sasamy Цитата(bzzz77 @ Mar 6 2011, 00:25) день д... Mar 6 2011, 12:36 sergeeff До чего все любят усложнять себе (и другим) жизнь... Mar 6 2011, 13:24 sasamy Цитата(sergeeff @ Mar 6 2011, 16:24) До ч... Mar 6 2011, 15:15 ar__systems Меня тоже неприятно удивило отсутсвие в АРМе каких... Mar 7 2011, 00:52 aaarrr В старших (ARM11, Cortex-Ax) есть. Mar 7 2011, 01:07 scifi Хороший, годный срач получился.
Чем засорять тему ... Mar 7 2011, 13:28 AlexandrY Цитата(scifi @ Mar 7 2011, 15:28) Хороший... Mar 7 2011, 14:11 sergeeff Цитатафилософия "оскорбить когда сказать нече... Mar 7 2011, 18:42 bzzz77 Цитата(sergeeff @ Mar 7 2011, 21:42) А че... Mar 7 2011, 18:45  sergeeff Цитата(bzzz77 @ Mar 7 2011, 21:45) я разв... Mar 7 2011, 19:22   sasamy Цитата(sergeeff @ Mar 7 2011, 22:22) Напо... Mar 7 2011, 19:29 igorsk DMA используется? В LPC имеется поддержка memory-t... Mar 7 2011, 23:28 bzzz77 Цитата(igorsk @ Mar 8 2011, 02:28) DMA ис... Mar 8 2011, 04:44 Rst7 QUOTE Это вам 90 килобайт оперативки не хватило ..... Jun 15 2011, 17:44 sonycman Цитата(Rst7 @ Jun 15 2011, 21:44) Ололо, ... Jun 15 2011, 18:55 Rst7 QUOTE Ничего смешного не вижу
А я не в Ваш огород... Jun 15 2011, 19:14
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|