|
|
  |
профилирование и оптимизация на arm |
|
|
|
Mar 7 2011, 16:02
|
Участник

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

|
Цитата(sergeeff @ Mar 7 2011, 18:54)  ... до основанья, а затем, мы наш, мы новый мир построим ...
А что же вы не сказали главного, что ваш любимый oprofile под Linux? Или вы хотите его "легко" на lpc2438 портировать вместе с искомой ОС для "удобного" профилирования "горячих" процедур? не стоит за меня додумывать и пытаться все списать на фанатизм. oprofile и линукс тут не причем. он просто показывает эти счетчики, которые реализованы в cpu. какие счетчики есть - такие и покажет. точно так же работают в базе amd code analyst и intel vtune - вытаскивают эти счетчики. соответственно меня заинтересовали счетчики в arm7tdmi. ну или какие-то другие методы для профилирования на arm. которое, в ряде случаев, сильно помогает.
|
|
|
|
|
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
|
|
|
|
|
Mar 7 2011, 17:57
|
Участник

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

|
Цитата(AlexandrY @ Mar 7 2011, 20:38)  Я подозреваю что половина из тех кто вам ответил портировала этот несчастный mp3. О его потрировании темы здесь не утихают не на месяц. И что вам скажет счетчик обращений к абстрактной памяти? Вы что, уберете эти обращения? Ну так это уже вопрос системного проектирования, а не отладки. Напороться на него при отладке вот уж действительно лажа. Ну, какие еще счетчики вспомните? Гораздо продуктивнее заниматься тюнингом мнгозадачных планировщиков: Lower the overhead in RTOS schedulingособого ума портировать не нужно. делается на раз-два-три. кол-во обращений к sdram я могу сократить, по-другому распределив данные-код между sram/sdram. "вспоминать" счетчики у меня не выйдет - нет их на arm. на intel/amd можно было бы поглядеть на ошибки переходов, на среднее кол-во тактов на инструкцию и, возможно, переработать код на асме.
|
|
|
|
|
Mar 7 2011, 18:22
|
Участник

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

|
Цитата(sergeeff @ Mar 7 2011, 21:13)  Ну-ну. Философия списывающего школьного двоечника. философия "оскорбить когда сказать нечего" ?
|
|
|
|
|
Mar 7 2011, 18:45
|
Участник

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

|
Цитата(sergeeff @ Mar 7 2011, 21:42)  А чего тут говорить. У меня таких студентов было лет ...дцать тому назад немало - "все вокруг идиоты, все сделано неправильно, а я вот счас всех за пояс". Кто-то из них быстро бросил всю эту инженерию, кто-то надорвался, кто-то сумел извлечь уроки и стал поспокойнее, кто-то спился, увы. спасибо на добром слове. и себя похвалить не забыл - золотой человек. я разве сказал "сделано неправильно"? уже читайте, а не додумывайте.
|
|
|
|
|
Mar 7 2011, 18:53
|

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

|
Цитата(ar__systems @ Mar 7 2011, 20:37)  Уважаемый, вы меня пугаете. Вам 10ый раз говорят, эти счетчики не просто регистры процессора, их железо само обновляет. Решение это ХАРДВЕРНОЕ. Это ничего не меняет! Не счетчики же он профилирует. Счетчики могут выполняться хоть тыщу тактов. Он эти счетчик враз может сделать по прерываниям в ARM-е. Демон же у TC не вызывает никакого отторжения. В ARM-ах есть к счастью всякие исключения которые не препятствуют наделать тучу изощренных счетчиков. Если же отойти от устаревшего ARM7TDMI, а перейти на Cortex-ы то вообще открываются невиданные перспективы. Но разговор про юзабилити. Т.е. я не услышал, что голые хардварные счетчики как-то можно без изменения сорсов и других софтварных ухищрений применить для профайлинга. Т.е. способом иным как это предложили для ARM-ов.
|
|
|
|
|
Mar 7 2011, 19:02
|
Участник

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

|
Цитата(AlexandrY @ Mar 7 2011, 21:53)  Это ничего не меняет! Не счетчики же он профилирует. Счетчики могут выполняться хоть тыщу тактов. Он эти счетчик враз может сделать по прерываниям в ARM-е. Демон же у TC не вызывает никакого отторжения. хорошо, покажите мне счетчик обращений ядра к sdram. с меня спасибо и респект. к слову, oprofile *никакого* измения в исходники/бинарники не вносит. потому что все, что делает oprofile - считывает счетчики. это можно и самому спокойно сделать.
Сообщение отредактировал bzzz77 - Mar 7 2011, 19:04
|
|
|
|
|
  |
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|