2011-08-24 3 views
6

У меня есть цикл, который был распараллелен OpenMP, но из-за характера задачи есть 4 critical.Как профилировать узкие места OpenMP

Что было бы лучшим способом профилировать скорость и выяснить, какое из критических предложений (или, возможно, некритическое (!)) Занимает наибольшее время внутри цикла?

Я использую Ubuntu 10.04 с г ++ 4.4.3

+0

I Модифицировано оригинальное сообщение с дополнительной информацией – Mikhail

+1

Я выполнил такую ​​задачу с изменением источников библиотеки omp и добавлением к ним rdtsc's – osgx

ответ

2

OpenMP включает в себя функции omp_get_wtime() и omp_get_wtick() для измерения эффективности синхронизации (docs here), я рекомендовал бы использовать их.

В противном случае попробуйте профилировщик. Я предпочитаю профилировщик процессора Google, который можно найти here.

Существует также ручной способ, описанный в ответе this.

4

Scalasca - хороший инструмент для профилирования кодов OpenMP (и MPI) и анализа результатов. Tau также очень приятно, но гораздо сложнее в использовании. Интеллектуальные инструменты, такие как vtune, также хороши, но очень дороги.

+0

Intel vtune - очень хороший продукт. По сравнению с scalasca или tau использование очень просто. Это определенно стоит денег. – tune2fs

+0

VTune действительно может использоваться бесплатно для некоммерческого программного обеспечения. http://software.intel.com/en-us/non-commercial-software-development – SaiyanGirl

+0

Intel, похоже, прекратил предлагать vtune бесплатно. В настоящее время существует только предложение для академического использования. –

3

Arm MAP имеет профилирование OpenMP и pthreads - и работает без использования инструмента или изменения исходного кода. Вы можете увидеть проблемы синхронизации и потоки тратят время на уровень исходной строки. Стоит прочитать запись в блоге OpenMP profiling.

MAP широко используется для высокопроизводительных вычислений, поскольку он также использует многопроцессорные приложения, такие как MPI.

Смежные вопросы