2014-11-17 4 views
1

Я пытаюсь проанализировать поведение масштабирования для C++-программы, которую я распараллеливал с Intel OpenMP и Intel Composer XE 2014. Когда я запускаю «Advanced Hotspot Analyzes», я получаю в результате, что библиотечная функция, называемая «gtp print storage map gtip», потребляет вторую самую длинную часть общей продолжительности выполнения. Я искал смысл этой подпрограммы, но я не получил результатов. Является ли эта процедура связанной с std :: map datastructures, которую я использую в этой части алгоритма? Спасибо заранее!Анализ прокси-сервера OpenMP с помощью Intel VTune Amplifier: Что такое «mapp print storage map gtip»

EDIT Теперь я удалил один барьер и мог ускорить все. Но теперь вступает в игру новая «горячая точка». Вдруг, когда я делаю блокировки & Анализ ожидания. У меня есть на первой позиции «OMP Join Barrier mkl_blas_daxpy_omp: 115» и «OMP Join Barrier mkl_blas_dcopy: 155». Но я не называю какую-либо mkl-процедуру явно. дальше?

+0

Я забыл упомянуть, что он содержится в библиотеке OpenMP. – user3572032

+1

Как долго проходит ваш тест, тривиально короткий? – steabert

+0

Это была тестовая версия, которая требовала 3,5 секунды. Используя большие данные, я получаю _kmp_barrier и _kmp_x86_pause в позициях 2 и 3. Это выглядит намного «лучше», то есть более реалистичным. Спасибо, я подумал, что тестовый тест с 3,5 секундами будет довольно нетривиальным. – user3572032

ответ

1

__kmp_print_storage_map_gtid вызывается всякий раз, когда переменная окружения KMP_STORAGE_MAP устанавливаются в true или verbose. Он печатает на стандартную ошибку поток расположения различных объектов, используемых в библиотеке OpenMP во время выполнения. Я операции ввода/вывод медленно в целом, неудивительно, что это требует много времени на выполнение вашей программы, особенно когда дело доходит до коротких тестовых случаев.

С KMP_STORAGE_MAP недокументированным и его значением по умолчанию является false, можно с уверенностью предположить, что он может использоваться только в особых случаях другими инструментами, например. VTune, делая анализ «горячих точек». Когда ваша программа работает нормально, функция вообще не будет вызвана.

1

Вы можете проследить вызов MKL в коде, глядя на панель стека справа, когда в нижней части выбрана точка доступа «mkl_blas_dcopy» - вы должны иметь возможность видеть цепочку вызовов до main(). Возможно, какая-то другая библиотека, вызванная из вашего кода, использует MKL. enter image description here