R Academy · Ders

system.time() ve proc.time()

R ifadeleri için geçen süreyi, kullanıcı süresini ve sistem süresini ölçün.

1. ders / 413 adım

system.time() ve proc.time(), CoddyKit'te ücretsiz bir R Academy dersidir. Bu, 4 dersinin 1. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, R Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. R Academy kursu toplamda 4 dersten oluşur.

Performansı Neden Ölçmelisiniz?

Kodu iyileştirmeden önce onu ölçmeniz gerekir. Yavaşlığın nerede olduğunu tahmin etmek emek israfına yol açar. R, ifadelerin süresini hassas biçimde ölçmek için yerleşik araçlar sunar.

Üç temel araç system.time(), proc.time() ve Sys.time() işlevleridir. Her biri performans analizinde farklı bir amaca hizmet eder.

system.time() Temelleri

system.time(expr) bir ifadeyi değerlendirir ve ne kadar sürdüğünü döndürür. R'de tek bir işlemin süresini ölçmenin en basit yoludur.

Sonuç, inceleyebileceğiniz adlandırılmış öğelere sahip proc_time sınıfında bir nesnedir.

result <- system.time({
  x <- 1:1000000
  total <- sum(x)
})
print(result)

Üç Zaman Değerini Okuma

system.time() beş değer döndürür, ancak en önemli üçü şunlardır:

  • user — R kodunun kendisi tarafından kullanılan CPU süresi
  • sys — işletim sisteminin R adına kullandığı CPU süresi
  • elapsed — gerçek saat süresi (geçen gerçek saniyeler)

Genellikle ilgilendiğiniz değer elapsed'dır. Çok çekirdekli makinelerde user + sys, elapsed değerini aşabilir.

t <- system.time(Sys.sleep(0.1))
cat('user   :', t['user.self'], '
')
cat('sys    :', t['sys.self'], '
')
cat('elapsed:', t['elapsed'], '
')

Elle Süre Ölçmek için proc.time()

proc.time() mevcut CPU ve geçen süreleri bir anlık görüntü olarak döndürür. Bir kod bloğunun öncesinde ve sonrasında bu görüntüyü alarak istediğiniz kod parçasının süresini ölçebilirsiniz.

Bu bölümün geçen süresini elde etmek için başlangıç görüntüsünü bitiş görüntüsünden çıkarın.

start <- proc.time()
for (i in 1:100000) sqrt(i)
end <- proc.time()
diff <- end - start
cat('elapsed:', diff['elapsed'], 'seconds
')

proc.time() Bileşenleri

proc.time() üç öğeden oluşan adlandırılmış bir numeric vektör döndürür:

  • user.self — R işlemi için kullanıcı CPU süresi
  • sys.self — R işlemi için sistem CPU süresi
  • elapsed — R'nin başlatılmasından bu yana geçen gerçek saat süresi

İki proc.time() çağrısı arasındaki fark, anlamlı süre farklarını verir.

pt <- proc.time()
cat('Names:', names(pt), '
')
cat('Values:', pt, '
')
cat('Class:', class(pt), '
')

Gerçek Saat Zaman Damgaları için Sys.time()

Sys.time() mevcut tarih ve saati POSIXct nesnesi olarak döndürür. proc.time() işlevinden farklı olarak yalnızca CPU kullanımını değil, gerçek dünyadaki bir zaman damgasını verir.

Bu, yalnızca ne kadar sürdüğünü değil, bir şeyin ne zaman gerçekleştiğini günlük kaydına geçirmek için kullanışlıdır.

start_time <- Sys.time()
cat('Start:', format(start_time), '
')
Sys.sleep(0.05)
end_time <- Sys.time()
cat('End  :', format(end_time), '
')

Aralıkları Ölçmek için difftime()

difftime(end, start, units='secs') iki POSIXct zaman damgası arasındaki farkı hesaplar. Birimleri seçebilirsiniz: 'secs', 'mins', 'hours', 'days'.

Bu işlev, okunabilir süre çıktıları elde etmek için Sys.time() ile doğal biçimde birlikte kullanılır.

t1 <- Sys.time()
x <- cumsum(1:500000)
t2 <- Sys.time()
delta <- difftime(t2, t1, units = 'secs')
cat('Time taken:', round(as.numeric(delta), 4), 'seconds
')

replicate() ile Döngüde Süre Ölçme

Çöp toplama veya OS zamanlaması nedeniyle tek bir süre ölçümü değişkenlik gösterebilir. replicate(n, system.time(expr)['elapsed']) ifadeyi birden çok kez çalıştırır ve geçen sürelerin bir vektörünü döndürür.

Tekrarlanan ölçümlerin ortancasını almak daha kararlı bir tahmin sağlar.

times <- replicate(10, system.time({
  x <- rnorm(10000)
  mean(x)
})['elapsed'])
cat('Median elapsed:', median(times), 'seconds
')
cat('Range:', range(times), '
')

İki Yaklaşımı Karşılaştırma

Aynı görevin iki uygulamasını doğrudan karşılaştırmak için system.time() kullanın. Bu yöntem, bir yaklaşımı tercih etmeden önce onun daha hızlı olduğunu doğrulamanıza yardımcı olur.

n <- 100000
t_loop <- system.time({
  result <- numeric(n)
  for (i in seq_len(n)) result[i] <- i^2
})['elapsed']

t_vec <- system.time({
  result <- seq_len(n)^2
})['elapsed']

cat('Loop   :', t_loop, 's
')
cat('Vector :', t_vec, 's
')
cat('Speedup:', round(t_loop / max(t_vec, 1e-6), 1), 'x
')

İç İçe İşlemlerde Süre Ölçme

Darboğazın hangi adım olduğunu belirlemek için system.time() çağrılarını iç içe yerleştirebilir veya bir iş akışının içinde proc.time() kontrol noktaları kullanabilirsiniz.

Veri işlem hattınızın zaman çizelgesini oluşturmak için betik çalışırken ara farkları yazdırın.

p0 <- proc.time()
x <- rnorm(200000)
p1 <- proc.time()
y <- sort(x)
p2 <- proc.time()
z <- cumsum(y)
p3 <- proc.time()

cat('Generate:', (p1-p0)['elapsed'], 's
')
cat('Sort    :', (p2-p1)['elapsed'], 's
')
cat('Cumsum  :', (p3-p2)['elapsed'], 's
')

Süre Ölçümü için Uygulama İpuçları

R kodunun süresini ölçerken şu uygulamaları göz önünde bulundurun:

  • JIT'i ve dosya önbelleklerini ısıtmak için ölçümden önce kodu bir kez çalıştırın
  • Çöp toplama durumunu sıfırlamak için ölçümden önce gc() kullanın
  • Tekrarlarda ortalama yerine ortancayı tercih edin — çöp toplamadaki aykırı değerler ortalamayı saptırır
  • Tüm betiğin değil, darboğazın süresini ölçün
gc()  # clear garbage before timing
times <- replicate(5, system.time({
  m <- matrix(rnorm(1000 * 1000), nrow = 1000)
  crossprod(m)
})['elapsed'])
cat('Median:', median(times), 's
')

Hızlı Kontrol: system.time() Bileşenleri

system.time() bileşenlerinden hangisi, yürütme sırasında geçen gerçek saat saniyelerini gösterir?

Performans Süresi Ölçümünün Özeti

Artık temel R'de birbirini tamamlayan üç süre ölçümü aracına sahipsiniz:

  • system.time(expr) — tek bir ifadenin süresini ölçmenin en hızlı yolu; user/sys/elapsed değerlerini döndürür
  • proc.time() — isteğe bağlı kod blokları için anlık görüntü tabanlı süre ölçümü
  • Sys.time() + difftime() — gerçek saat zaman damgaları ve insanların kolayca okuyabileceği aralıklar

Performans hakkında sonuç çıkarmadan önce kararlı ortanca süre ölçümleri elde etmek için replicate() kullanın.

Başlamak ücretsiz

Yapay zeka eğitmeniyle R öğren — ücretsiz

Tarayıcında gerçek kod yaz ve çalıştır, 7/24 yapay zeka eğitmeninden anında yardım al; web'de ya da uygulamada kaldığın yerden devam et.

Kurslar
43
Dersler
159

Sıkça Sorulan Sorular

“system.time() ve proc.time()” dersi ücretsiz mi?

Evet — “system.time() ve proc.time()” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve R Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. R Academy kursu toplamda 4 dersten oluşur.

“system.time() ve proc.time()” dersinde ne öğreneceğim?

R ifadeleri için geçen süreyi, kullanıcı süresini ve sistem süresini ölçün. R Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

R Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te R Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 1. dersidir.

“system.time() ve proc.time()” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu R Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her R Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. system.time() ve proc.time()
  2. Rprof ve profvis ile Kod Profilleme
  3. Hız için Vektörleştirme
  4. microbenchmark ile Performans Karşılaştırması
← R Academy Sayfasına Dön