Измерение времени в подпрограммах omp_fn

Я пишу pintool, собирающий метрики в подмножестве подпрограмм приложений (некоторые из них генерируются компилятором). Цель состоит в том, чтобы получить время выполнения этих подпрограмм.

Ниже приведен набор попыток, которые я уже дал:

  • Конечно, делать это с помощью булавки — плохая идея из-за накладных расходов на виртуальную машину.
  • Параметр gcc -finstrument-functions не распространяется на генерируемые им функции OpenMP.
  • LD_PRELOAD не работает со статически связанными функциями OpenMP.
  • Возможно, если бы pin позволял выгружать статически инструментированную сборку, мы могли бы избежать накладных расходов на виртуальную среду, но, насколько я знаю, это невозможно.
  • Я знаю об инструментальном инструменте Maqao, который не использует виртуальную среду, но я хочу избежать использования слишком большого количества фреймворков или перевода моего pintool в скрипт maqao lua.

Я предполагаю, что у меня осталась ручная бинарная инструментация, но если у кого-то есть лучшее решение, помощь будет оценена по достоинству.


person Nicolas Denoyelle    schedule 22.06.2017    source источник


Ответы (1)


Если вам нужны только результаты, используйте комплексную измерительную инфраструктуру с поддержкой OpenMP, такую ​​как Intel VTune, Extrae/Paraver, Score-P< /а>. Это предоставит вам информацию о профилировании или отслеживании регионов OpenMP.

Если вы хотите реализовать измерение самостоятельно, вы можете использовать базовый инструмент преобразования источника в источник Опари. Вы также можете использовать гораздо более чистый интерфейс инструментов OpenMP (OMPT), но, насколько я знаю, он еще не получил широкой поддержки. Возможно, вам повезет с последними средами выполнения Intel OpenMP.

person Zulan    schedule 22.06.2017
comment
Я согласен с использованием OMPT. Это один из лучших способов сделать это. Есть несколько других инструментальных библиотек, которые поддерживают это. Например: Intel VTune, Extrae/Paraver и т. д. Производительность Linux также очень полезна, хотя трудно разделить метрики для каждого отдельного потока. - person Jorge Bellon; 23.06.2017
comment
Добавлен VTune/Extrae. В целом perf — отличный инструмент, но он не имеет представления об OpenMP и не умеет различать потоки. Кроме того, выборочный подход будет давать ограниченную точность в отношении времени. - person Zulan; 23.06.2017
comment
OMPT кажется лучшим решением, позволяющим избежать лишних фреймворков. Позвольте мне попробовать, и я дам вам свой отзыв. - person Nicolas Denoyelle; 23.06.2017
comment
Интерфейс, похоже, еще не реализован. Это ? - person Nicolas Denoyelle; 23.06.2017
comment
Как я уже писал, он еще не получил широкой поддержки. Например, вы можете проверить github.com/OpenMPToolsInterface/LLVM-openmp. - person Zulan; 23.06.2017
comment
Изменить: компилятор Intel может иметь это: software.intel.com/en-us/forums/ Я ищу реализацию gcc, я проверю вашу ссылку - person Nicolas Denoyelle; 23.06.2017
comment
Среда выполнения LLVM, на которую указал Зулан, в основном совместима с скомпилированным кодом GCC (может быть несколько отсутствующих точек входа, связанных с недавно реализованными операциями задач, но классический код OpenMP должен подойти). - person Jim Cownie; 23.06.2017