Я використовую system.time(expression)для вимірювання часу виконання функції R.
Результат, який я отримую для дзвінка
system.time(myfunction())
це:
user system elapsed
117.36 5.65 127.86
Що вимірює "користувач" та "система"?
Я використовую system.time(expression)для вимірювання часу виконання функції R.
Результат, який я отримую для дзвінка
system.time(myfunction())
це:
user system elapsed
117.36 5.65 127.86
Що вимірює "користувач" та "система"?
Відповіді:
Це обговорюється в ?proc.time( system.time()повертає об'єкт класу "proc.time"):
Details:
‘proc.time’ returns five elements for backwards compatibility, but
its ‘print’ method prints a named vector of length 3. The first
two entries are the total user and system CPU times of the current
R process and any child processes on which it has waited, and the
third entry is the ‘real’ elapsed time since the process was
started.
.... і
Value:
....
The definition of ‘user’ and ‘system’ times is from your OS.
Typically it is something like
_The ‘user time’ is the CPU time charged for the execution of user
instructions of the calling process. The ‘system time’ is the CPU
time charged for execution by the system on behalf of the calling
process._
Найбільш чітке пояснення, яке я коли-небудь читав щодо різниці між часом userта systemминулим часом, надав Вільям Данлап у [R-help] :
"Час процесора користувача" надає час процесора, витрачений поточним процесом (тобто поточним сеансом R), а "системний час процесора" - час процесора, витрачений ядром (операційною системою) від імені поточного процесу. Операційна система використовується для таких речей, як відкриття файлів, введення або виведення, запуск інших процесів і перегляд системного годинника: операції, що включають ресурси, якими багато процесів повинні ділитися.
Хоча і ?proc.timeповертається щось подібне, цей опис для мене було набагато легше зрозуміти.
Ось кілька простих пояснень:
Час, що минув - це час, заряджений процесором (процесорами) для виразу.
User Time - час настінного годинника. Час, який ви як користувач пережили.
Зазвичай обидва рази відносно близькі. Але вони можуть відрізнятися в деяких інших ситуаціях. Наприклад:
Оскільки вони і так є загальними, з Вікіпедії:
Термін "час процесора користувача" спочатку може трохи ввести в оману. Щоб бути зрозумілим, загальний час (реальний час процесора) - це поєднання кількості часу, витраченого процесором, виконуючи якусь дію для програми, і кількості часу, проведеного процесором, виконуючи системні виклики ядра від імені програми. Коли програма переглядає масив, вона накопичує час процесора користувача. І навпаки, коли програма виконує системний виклик, такий як exec або fork, вона накопичує системний час процесора.
http://en.wikipedia.org/wiki/Time_(Unix)#User_Time_vs_System_Time
Оскільки ці часові змінні визначаються вашою ОС, ви можете отримати інформацію про те, як вони обчислюються, виконавши man timeу вашій оболонці (на Unix):
... Ці статистичні дані складаються з (i) минулого реального часу між викликом та завершенням, (ii) часу користувальницького процесора (суми значень
tms_utimeі іtms_cutimeзначень у структурі, що повертаються за часом (2)), і (iii) системний час процесора (сума значеньtms_stimeі таtms_cstimeзначень у структурі tms, що повертається за часом (2)).
Визначення згаданих змінних часу можна знайти тут :
tms_utimeЧас процесора користувача.
tms_stimeСистемний час процесора.
tms_cutimeЧас користувальницького процесора завершених дочірніх процесів.
tms_cstimeЧас системного процесора завершених дочірніх процесів.
Пояснення різниці між користувальницьким та системним часом описано у відповіді daroczig та в інших місцях щодо SO :
tms_utimeЕлементом є кількість часу , витрачений на виконання коду або коду в бібліотеці C.tms_stimeЕлемент є кількістю часу , витраченим в ядрі виконуючого код від вашого імені.