Я пытаюсь проанализировать поведение масштабирования C ++ — программы, которую я распараллелил с Intel OpenMP и Intel Composer XE 2014. Когда я запускаю «Advanced Hotspot Analyses», в результате я получаю библиотечную функцию «kmp print». «Карта памяти gtip» потребляет вторую самую длинную часть общего времени выполнения. Я погуглил смысл этой рутины, но я не получил результатов. Связана ли эта процедура с структурами данных std :: map, которые я использую в этой части алгоритма?
Заранее спасибо!
РЕДАКТИРОВАТЬ
Теперь я снял один барьер и мог все ускорить. Но теперь новый Hotspot вступает в игру. Вдруг когда я делаю замки & Анализ ожидания у меня на первой позиции: «OMP Join Barrier mkl_blas_daxpy_omp: 115» и «OMP Join Barrier mkl_blas_dcopy: 155» «. Но я не вызываю никакую процедуру mkl явно. Как я могу исследовать это дальше?
__kmp_print_storage_map_gtid
вызывается всякий раз, когда переменная среды KMP_STORAGE_MAP
установлен в true
или же verbose
, Он выводит в стандартный поток ошибок информацию о расположении различных объектов, используемых библиотекой времени выполнения OpenMP. Поскольку операции ввода-вывода в целом медленные, неудивительно, что это занимает много времени выполнения вашей программы, особенно когда речь идет о коротких тестовых примерах.
поскольку KMP_STORAGE_MAP
недокументировано и его значение по умолчанию false
можно с уверенностью предположить, что он используется только в особых случаях другими инструментами, например, VTune во время анализа горячих точек. Когда ваша программа работает нормально, функция вообще не вызывается.
Вы можете отследить вызов MKL в своем коде, глядя на панель стека справа, когда точка доступа mkl_blas_dcopy выбрана снизу вверх — вы должны увидеть цепочку вызовов вплоть до main (). Может быть, какая-то другая библиотека, вызываемая из вашего кода, использует MKL.