Я хотел бы профилировать свое (многопоточное) приложение с точки зрения времени. Предполагается, что определенные потоки должны часто повторно активироваться, то есть поток выполняет свою основную работу один раз в каждый фиксированный интервал времени. Другими словами, есть фиксированный временной интервал, в котором все потоки повторно активируются.
Точнее, я ожидаю, что определенные потоки будут активироваться каждые 2 мс (поскольку это период цикла). Я провел несколько упрощенных измерений, которые подтвердили, что 2 мс действительно эффективны.
Для более точного профилирования моего приложения показалось целесообразным использовать инструмент Momentics «Application Profiler». Однако когда я это делаю, я не могу интерпретировать выбранные мной цифры времени. Меня бы интересовало среднее, а также минимальное и максимальное время, которое требуется до того, как определенный поток будет повторно активирован. Пока что, похоже, идея состоит в том, чтобы иметь возможность отслеживать только время, которое занимают определенные функции. Однако даже это, похоже, не так. Например. У меня есть 2 строки кода, которые ставятся буквально рядом друг с другом:
if (var1 && var2 && var3) var5=1;
занимает 1 мс (в среднем)
if (var4) var5=0;
занимает 5 мс (в среднем)
Что это должно мне сказать?
Еще одна вещь меня смущает - родительский поток «занимает» 33 мс на avg, 2 мс на max и 1 мс на min. Помимо того факта, что avg не должно быть больше max (т. Е. Даже больше, я ожидаю, что avg будет не больше 2 мс - поскольку это - время цикла), оно фактически увеличивается, чем дольше я запускаю инструмент профилирования. Итак, если бы я запустил инструмент в течение получаса, 33 мс фактически были бы примерно 120 с. Таким образом, кажется, что avg - это на самом деле общее время, в течение которого поток занимает ЦП.
Если это так, я бы предположил, что смогу компенсировать общее время, используя показатель count, который тоже не работает. В основном из-за того, что рисунок почти никогда не доступен, то есть существует только отдельная запись в списке (для каждого родительского потока) с именем , которая не представляет конкретную область процесса.
Итак, я прочитал вики сообщества QNX о "профилировщике приложений ", в т.ч. руководство по "Профилировщик нового приложения IDE Улучшения », а также статьи из официального руководства о том, как использовать инструмент профилировщика .. но я не мог понять, как я буду использовать этот инструмент в своих интересах.
Итог: я почти уверен, что неверно истолковываю и использую инструмент по назначению. Таким образом, мой вопрос - как мне интерпретировать числа или правильно использовать обратную связь инструмента, чтобы подтвердить время цикла 2 мс?
Дополнительная информация
- ЦП: одноядерный
- QNX SDP 6.5 / Momentics 4.7.0
- Метод профилирования: инструменты выборки и подсчета вызовов
- Объем профилирования: одно приложение
- Я включил «Сборка для профилирования (инструменты выборки и подсчета вызовов)» в параметрах сборки 1