Как узнать загрузку каждого процесса в MPI? [Дубликат]

Вы не первый, кто попал в знаменитую «задержанную ловушку расширения» (и вы не станете последним)

Вам нужно задержать расширение, если вы хотите использовать переменную, что вы изменен в том же блоке (блок представляет собой последовательность команд в скобках ( и ))

Отложенные переменные ссылаются на !var! вместо %var%

Причина в том, что cmd анализирует код. Полная строка или блок анализируется сразу, заменяя обычные переменные своим значением во время разбора. Отложенные переменные оцениваются во время выполнения.

Две простые партии для демонстрации:

setlocal enabledelayedexpansion
set "var=hello"
if 1==1 (
  set "var=world"
  echo %var% !var!
)

.

setlocal enabledelayedexpansion
for /L %%i in (1,1,5) do (
  echo %random% !random!
)

Примечание: также строка рассматривается как block:

set "var=old"
set "var=new" & echo %var% 

с задержкой расширения:

setlocal enabledelayedexpansion
set "var=old"
set "var=new" & echo !var! 

Отсроченное расширение по умолчанию отключено в командной строке. Если вам это действительно нужно, вы можете сделать:

cmd /v:on /c "set "var=hello" & echo !var!"

Также есть способ сделать то же самое без задержки расширения (но call стоит некоторое время, поэтому он медленнее, но если по какой-то причине вы не можете / не хотите использовать замедленное расширение, это альтернатива):

setlocal DISabledelayedexpansion
for /L %%i in (1,1,5) do (
  call echo %random% %%random%% 
)

Оба метода могут использоваться для отображения переменных типа массива :

setlocal ENabledelayedexpansion
set "num=4"
set "var[%num%]=hello"
echo !var[%num%]!

или

setlocal DISabledelayedexpansion
set "num=4"
set "var[%num%]=hello"
call echo %%var[%num%]%%

(этого часто задают как «переменная, которая содержит другую переменную» или «вложенные переменные»

2
задан Smirno 12 August 2013 в 17:28
поделиться

6 ответов

Существует ряд инструментов анализа производительности, предназначенных для программ Parallel / MPI, таких как:

  • Score-P , который работает с рядом различных анализов инструментов, например Cube , Vampir
  • HPCToolkit использует только выборку, поэтому вам не нужно перекомпилировать ваше приложение
  • Tau

Сначала они могут быть не такими простыми в использовании простыми в использовании, но они обеспечивают гораздо большую помощь в исследовании производительности параллельных приложений

8
ответ дан Zulan 21 August 2018 в 13:06
поделиться

Allinea MAP - профайлер, простой и понятный, но очень мощный.

Он предназначен для отображения проблем производительности в приложениях Fortran, C и C ++ MPI и требует очень мало усилий для начала работы и профилирования.

Он графический и имеет интегрированный с браузером исходного кода, который показывает производительность против строк кода и способен анализировать плохое поведение MPI, плохой рабочий баланс или плохую векторизацию.

Я одна из команды за продуктом, поэтому я немного предвзятый. Это коммерческая - на веб-сайте доступны лицензии для оценки.

2
ответ дан David 21 August 2018 в 13:06
поделиться

Вы можете использовать анализатор трассировки Intel для передачи сообщений MPI и Intel VTune для получения профиля одной задачи MPI. Оба программного обеспечения были широко документированы на веб-сайте Intel.

0
ответ дан epascolo 21 August 2018 в 13:06
поделиться

Я хотел бы добавить еще два профайлера: (1) mpiP - легкий профилировщик и может производить текстовый вывод, но только для MPI-функций. (2) Scalasca - это создает сложный вывод, который также может указывать на дисбалансы синхронизации (поздний отправитель / поздний приемник) (в отличие от TAU, который не указывает на дисбалансы синхронизации).

0
ответ дан Gaurav Saxena 21 August 2018 в 13:06
поделиться

Когда вопроситель говорит, что «gprof, похоже, работает некорректно», возможно, он ссылается на то, что процессы N MPI могут сбивать файл gmon.out. В этом случае переменная среды (недокументированная) GMON_OUT_PREFIX может сделать gprof более полезной:

$ export GMON_OUT_PREFIX=gmon.out
$ mpiexec -np 4 cpi
3
ответ дан Rob Latham 21 August 2018 в 13:06
поделиться

gprof является хорошим профилировщиком для Fortran и других компиляторов на основе GNU.

0
ответ дан Smirno 21 August 2018 в 13:06
поделиться
  • 1
    Вы даже прочитали вопрос? – Cyril Duchon-Doris 22 May 2016 в 00:05
  • 2
    @ CyrilDuchon-Doris, он, вероятно, читал, и его ответ противоречит вопросу SkypeMeSm, потому что он не предоставляет никаких подробностей и объяснений и почему «gprof не работает правильно». – Kamil Kiełczewski 3 February 2018 в 08:21
Другие вопросы по тегам:

Похожие вопросы: