system.time(expression)Bir R işlevi için yürütme süresini ölçmek için kullanıyorum .
Çağrı için aldığım çıktı
system.time(myfunction())
dır-dir:
user system elapsed
117.36 5.65 127.86
'Kullanıcı' ve 'sistem' neyi ölçer?
system.time(expression)Bir R işlevi için yürütme süresini ölçmek için kullanıyorum .
Çağrı için aldığım çıktı
system.time(myfunction())
dır-dir:
user system elapsed
117.36 5.65 127.86
'Kullanıcı' ve 'sistem' neyi ölçer?
Yanıtlar:
Bu, şu bölümde tartışılmaktadır ?proc.time( system.time()bir sınıf nesnesi döndürür "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.
....ve
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._
Geçen zaman userile systemgeçen zaman arasındaki fark hakkında okuduğum en net açıklama William Dunlap tarafından [R-help] ' de sağlandı :
"Kullanıcı CPU süresi" geçerli işlem tarafından harcanan CPU süresini (yani, geçerli R oturumu) ve "sistem CPU zamanı", geçerli işlem adına çekirdek (işletim sistemi) tarafından harcanan CPU süresini verir. İşletim sistemi, dosyaları açmak, girdi veya çıktı yapmak, diğer işlemleri başlatmak ve sistem saatine bakmak gibi şeyler için kullanılır: birçok işlemin paylaşması gereken kaynakları içeren işlemler.
Her ne kadar ?proc.timedöner benzer bir şey, bu açıklama benim için anlamak çok daha kolay oldu.
İşte bazı basit açıklamalar:
Geçen Süre , ifade için CPU'ya / CPU'lara yüklenen zamandır.
Kullanıcı Zamanı , duvar saati süresidir. Bir kullanıcı olarak deneyimlediğiniz zaman.
Genellikle her iki zaman da nispeten yakındır. Ancak diğer bazı durumlarda değişiklik gösterebilir. Örneğin:
Bunlar yine de jenerik olduğundan, Wikipedia'dan:
'Kullanıcı CPU zamanı' terimi ilk başta biraz yanıltıcı olabilir. Açık olmak gerekirse, toplam süre (gerçek CPU süresi), CPU'nun bir program için bazı eylemleri gerçekleştirirken harcadığı zaman miktarı ile CPU'nun program adına çekirdek için sistem çağrıları gerçekleştirerek harcadığı sürenin birleşimidir. Bir program bir dizi aracılığıyla döngü gerçekleştirdiğinde, kullanıcının CPU süresini biriktirir. Tersine, bir program exec veya fork gibi bir sistem çağrısı yürüttüğünde, sistem CPU süresini biriktirir.
http://en.wikipedia.org/wiki/Time_(Unix)#User_Time_vs_System_Time
Bu zaman değişkenleri işletim sisteminiz tarafından tanımlandığından, nasıl hesaplandıklarına ilişkin bilgileri man timekabuğunuzda (Unix'te) çalıştırarak alabilirsiniz:
... Bu istatistikler, (i) çağırma ve sonlandırma arasında geçen gerçek zamandan, (ii) kullanıcının CPU zamanından ( (2) tarafından döndürülen bir yapıdaki
tms_utimevetms_cutimedeğerlerinin toplamı ) ve (iii) sistem CPU zamanı ( zaman (2) ile döndürülen bir yapıdakitms_stimevetms_cstimedeğerlerinin toplamı ).
Bahsedilen zaman değişkenlerinin tanımı burada bulunabilir :
tms_utimeKullanıcı CPU zamanı.
tms_stimeSistem CPU zamanı.
tms_cutimeSonlandırılan alt işlemlerin kullanıcı CPU süresi.
tms_cstimeSonlandırılan alt işlemlerin sistem CPU süresi.
Kullanıcı ve sistem zamanı arasındaki farkların bir açıklaması daroczig'in cevabında ve SO'da başka yerlerde açıklanmıştır :
tms_utimeEleman kodunuzu yürütme harcanan zaman miktarı veya C kütüphanesinde kodudur.tms_stimeEleman kodu sizin adınıza yürütülmesi çekirdekte harcanan zaman miktarıdır.