Нравится? Делимся информацией!

четверг, 17 января 2013 г.

Профилирование embedded кода средствами Code Composer Studio v.3.3




Тест производительности программы в Code Composer Studio осуществляется путем профилирования кода.



Профилирование - это процесс сбора статистики выполнения областей кода, что дает возможность оценивать эффективность приложения и выявлять места для оптимизации кода. Можно определить, например, сколько времени процессор затрачивает на DSP алгоритмы. Можно также профилировать другие события процессора (число вызовов подпрограммы, принимаемых прерываний и т.п.). В общем, для работы крупных проектов и/или работы в реальном времени нам нужно знать производительность отдельных участков кода.
Информация от Texas Instruments: TMS320C28x Optimizing C/C++ Compiler v6.1 : 2.3.4 Symbolic Debugging and Profiling Options, 3.8 Debugging and Profiling Optimized Code. SPRA905: Code Composer Studio IDE 2.2 Profiler . От самого TI информации мало, ну или ищется долго и находится в недрах интернета, что я не смог ее найти...

Code Composer Studio предоставляет пару методов профилирования кода:
I)  breakpoints based (точки останова + профильные часы ( Profile Clock) )



Данный метод быстр в получении примерного количества тактов для текущего запуска программы. От запуска к запуску код может занимать разное количество тактов вследствие условных переходов и условных инструкций кода.
Чтобы активировать/блокировать профильные часы:
Profile →  clock →  Enable. Если этот пункт помечен (галочкой), значит, часы активированы. Если пометка отсутствует – блокированы.
Чтобы увидеть профильные часы:
Profile →  clock →  View. В Status Bar появится окно Clock, в котором отобразится значение переменной CLK (рис. выше)
Чтобы сбросить профильные часы дважды щёлкните мышью по содержимому окна Clock.
ссылка на доп. инфу по точности Профильных Часов : CCStudio_Clock Profile accuracy

II)  Profiling (профилирование) позволяет выполнять код несколько раз и получать в результате среднее, максимально, минимальное число тактов и другие характеристики.

I. Breakpoints Based ( use Profile Clock )
Profile clock in CCS

1) Открываем CCStudio с подключенной заранее отладочной платой
2) Debug → Connect
3) Открыть проект, собрать его, загрузить .out файл в отладочную плату ( любое другое железо )
4) Открыть исходник, который будет профилироваться
5) Установить две точки останова ( BreakPoints ): одну в начале желаемой области профилирования, другую - в конце
6) Profile →  clock →  Enable.
7) Profile →  clock →  View.
6) Запустить программу на отладку Debug → Run . Программа остановится в первой точке останова.
9) Сбросить профильные часы ( Profile Clock ): дважды кликнуть по иконке.
10) Снова запустить на отладку программу. Она остановится на второй точке останова
11) Сейчас часы будут показывать  количество тактов, имевших место между двумя выставленными точками останова

II. Profiling
Благодаря данной опции многочисленные, в том числе и все, функции, циклы и просто области кода можно профилировать в CCStudio одновременно и получать статистику. Статистика накапливается в окне Profiler (см. рис. ниже).
Узнать версию профилировщика можно в окне Profiler, которое открывается после ряда действий: подключиться к плате ( Debug → Connect ),  Profile->Setup и Profile->Viewer. Затем ПКМ на всплывшем окне и выбрать меню Property Page:


Возможно профилирование функции ( function profiling ), циклов ( loops ) и участков кода ( Ranges ):

В каждом случае (функция/цикл/область кода( Ranges) )  добавление происходит разным способом.

Например, последовательность для профилирования части кода:
1) Для отображения  profiling windows : Profile->Setup (открывается Profiling Setup window)  и Profile->Viewer ( Profiler Viewer Window )
2) Загрузить программу в целевой процессор DSP (отладочную плату DSP Kit, starter Kit ) :  File → Load Program
3)  Нажать на значке Секундомера в Profiling Setup window: это разрешит/запретит профилирование

4) Войти во вкладку “Ranges” в Profiling Setup window:

5) Выделить в исходниках - в *.с, *.срр или *.hpp ( при использовании шаблонных классов и функций ) - интересуемый кусок кода, нажать ПКМ на выделении  и выбрать меню Profile -> Range.

На приведенном изображении плохо видно, поэтому я выбрал кусок кода, состоящий из нескольких строк, чтоб показать какие значки в CCS должны отобразиться:

6) Запустить отладку. Через некоторое время остановить отладку. Информация в статистике обновляется при остановке процессора (или достижения точки останова )



Примечание!!! Обычно по умолчанию выводимая статистика может не отображать то, что мы ищем. Чтобы изменить ситуацию, жмем в Profiler Viewer Window ПКМ на Address Range, настройки статистики которого хотим поменять, и жмем 'Columns and Rows Setting'. Разные параметры можно вывести в таблицу, но  'CPU Cycles: Incl. Max.' (или 'CPU Cycles: Incl. Total'), вероятно, наиважнейшая из них.

Пояснения к содержанию таблицы статистики профилирования кода в СCStudio v.3.3:
  • Access Count: количество выполнения соответствующей области/цикла/функции. Примечание!
Возможно, область/цикл/функция были вызваны большее число раз, чем
отображено в ячейке, но CCStudio обработал их только указанное в ячейке
число раз, на основе этого он и составил статистику.

  • Cycles: Incl. Total : общее число тактов (командных циклов), затраченных за все время выполнения
кода (от момента начала отладки, до остановки процессора). Include - означает
“включая расход времени на вызов функций” (скидывание
переменных в стек при входе в функцию и возврат из стека при выходе)

  • Cycles: Excl. Total: Общее число тактов, потраченных на выполнение профилируемой области,
исключая время выполнения любых функций/подпрограмм, вызываемых
изнутри профилируемой области

  • Cycles: Incl. Max.: Максимальное число тактов, потраченных на одно выполнение профилируемой
области, включая время  выполнения любых функций/подпрограмм, вызываемых
изнутри профилируемой области.

  • Cycles: Incl. Min.: Минимальное число тактов, потраченных на одно выполнение профилируемой
области, включая время  выполнения любых функций/подпрограмм, вызываемых
изнутри профилируемой области.

  • Cycles: Excl. Max.: Максимальное число тактов, потраченных на одно выполнение профилируемой
области, исключая время  выполнения любых функций/подпрограмм, вызываемых
изнутри профилируемой области.

  • Cycles: Excl. Min.: Минимальное число тактов, потраченных на одно выполнение профилируемой
области, исключая время выполнения любых функций/подпрограмм, вызываемых
изнутри профилируемой области

  • Cycles: Incl. Avg.: Среднее число тактов, потраченных на одно выполнение профилируемой области,
включая время выполнения любых функций/подпрограмм, вызываемых изнутри
профилируемой области

  • Cycles: Excl. Avg.: Среднее число тактов, потраченных на одно выполнение профилируемой области,
исключая время выполнения любых функций/подпрограмм, вызываемых изнутри
профилируемой области.


Комментариев нет:

Отправить комментарий