Каковы причины того, что прошедшее время значительно превышает время пользователя + ядра? - PullRequest
0 голосов
/ 03 августа 2011

Я вижу много потоков, спрашивающих о том, что прошедшее время (время стены) меньше, чем время пользователя + ядра, и я понимаю, как многопоточность может вызвать эту ситуацию.Однако при определении времени выполнения некоторого MPI-кода с помощью:

$ time mpirun -n 4 ./a.out

я вижу прошедшее время в диапазоне от 4-5 минут, пользовательвремя около 40 секунд и время ядра около 40 секунд.Я думаю, что барьерная синхронизация между процессами может быть частью причины, или, возможно, время только для получения информации об одном MPI-процессе, но я все еще не могу точно объяснить, что вызывает мои показания.Кто-нибудь может объяснить это?

Большое спасибо.

Ответы [ 2 ]

3 голосов
/ 03 августа 2011

Для многих процессов я ожидаю, что время настенных часов значительно превысит общее время процессора. Немногие процессы связаны с процессором, поэтому они будут тратить много времени на ожидание. К счастью, время ожидания больше не оплачивается. Вещи, которые вызывают ожидания:

  • Ввод / вывод любого типа (диск, сеть, межпроцессные каналы и т. Д.).
  • Синхронизация ресурсов между процессами.
  • Срезы времени, выделенные другим процессам.
  • Обмен памяти (не часто встречается в наши дни).
  • Прерывания почти любого другого вида.

Даже мощные статистические программы могут выполнять ввод / вывод, что приводит к тому, что загрузка ЦП будет меньше времени настенных часов.

Крайний пример - копирование большого файла из одного раздела на диске в другой раздел на том же диске. Это может занять много времени Wall с небольшим временем процессора. Если у вас есть возможность использовать ionice, вы можете увеличить время на стене, если диск вообще занят другой работой.

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

time bash -c "read ans"
1 голос
/ 03 августа 2011

Время пользователя / ядра увеличивается только при использовании процессора.Если ваш код в основном ожидает чего-то такого, как дисковый или сетевой ввод-вывод, истекшее в реальном времени будет намного больше, чем время процессора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...