microbenchmark ile Performans Karşılaştırması
Birden çok uygulamayı microbenchmark() ile istatistiksel olarak karşılaştırın.
microbenchmark ile Performans Karşılaştırması, CoddyKit'te ücretsiz bir R Academy dersidir. Bu, 4 dersinin 4. 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.
Neden microbenchmark?
system.time() milisaniye çözünürlüğüne sahiptir ve hızlı işlemler için güvenilir değildir. microbenchmark paketi ifadeleri yüzlerce kez çalıştırır, ısınma sürecini yönetir ve nanosaniye çözünürlüğünde istatistikler sunar — bu da onu benzer uygulamaları karşılaştırmak için doğru araç hâline getirir.
microbenchmark Temel Kullanımı
Adlandırılmış ifadeleri microbenchmark() işlevine aktarın. Her bağımsız değişkenin adı çıktıda etiket olarak kullanılır. times bağımsız değişkeni, her ifadenin kaç kez değerlendirileceğini belirler.
# library(microbenchmark)
# x <- 1:10000
#
# microbenchmark(
# loop = {
# s <- 0
# for (v in x) s <- s + v
# },
# vectorized = sum(x),
# times = 200L
# )times Bağımsız Değerini Seçme
Daha fazla yineleme daha kararlı tahminler sağlar, ancak daha uzun sürer. Genel yönergeler:
- Hızlı ifadeler (mikrosaniyeler):
times = 1000Lveya daha fazlası - Orta hızdaki ifadeler (milisaniyeler):
times = 100L - Yavaş ifadeler (saniyeler):
times = 10Lveya daha azı
Varsayılan değer times = 100L şeklindedir ve iyi bir başlangıç noktasıdır.
# library(microbenchmark)
# microbenchmark(
# fast_op = sqrt(2),
# times = 10000L # many reps for a nanosecond-scale operation
# )
# microbenchmark(
# slow_op = sort(rnorm(1e6)),
# times = 10L # fewer reps for second-scale operation
# )unit Bağımsız Değerini Belirtme
Sonuçları uygun bir ölçekte görüntülemek için unit bağımsız değişkenini kullanın:
'ns'— nanosaniyeler (çok hızlı işlemler için)'us'— mikrosaniyeler'ms'— milisaniyeler's'— saniyeler'relative'— en hızlı ifadeye oran
# library(microbenchmark)
# x <- runif(1000)
#
# microbenchmark(
# sapply_sqrt = sapply(x, sqrt),
# vectorized = sqrt(x),
# times = 500L,
# unit = 'us' # display in microseconds
# )Özet Çıktısını Yorumlama
microbenchmark şu sütunları içeren bir özet tablosu yazdırır:
- min — tek bir çalıştırmadaki en kısa süre
- lq / mean / median / uq — alt çeyrek, ortalama, ortanca, üst çeyrek
- max — tek bir çalıştırmadaki en uzun süre
- neval — değerlendirme sayısı
Birincil karşılaştırma ölçütü olarak median değerini kullanın — bu değer, en yüksek ve ortalama süreleri artıran ara sıra gerçekleşen GC duraklamalarından daha az etkilenir.
# Example summary output (unit: microseconds):
#
# expr min lq mean median uq max neval
# loop 1203.1 1245.3 1301.7 1262.4 1310.1 2100.8 100
# vectorized 2.1 2.3 2.9 2.4 2.6 18.3 100
#
# => vectorized is ~525x faster at median
cat('Always compare medians, not means, for microbenchmark results
')Bir microbenchmark Nesnesinde summary()
Kayıtlı bir microbenchmark sonucunda summary(mb) çağrıldığında, programatik olarak inceleyebileceğiniz bir veri çerçevesi döndürülür. Özetteki unit değerini de değiştirebilirsiniz.
# library(microbenchmark)
# x <- rnorm(5000)
# mb <- microbenchmark(
# vapply_abs = vapply(x, abs, numeric(1)),
# base_abs = abs(x),
# times = 200L
# )
# s <- summary(mb, unit = 'ms')
# print(s[, c('expr', 'min', 'median', 'max')])Görsel Karşılaştırma için autoplot()
autoplot(mb), ifadeler arasındaki süre dağılımlarını keman grafiği veya kutu grafiği olarak çizmek için ggplot2 kullanır. Böylece yalnızca ortanca değerler arasındaki farkları değil, seçenekler arasındaki değişkenliği ve örtüşmeyi de kolayca görebilirsiniz.
# library(microbenchmark)
# library(ggplot2)
#
# x <- 1:50000
# mb <- microbenchmark(
# loop = { s <- 0; for (v in x) s <- s + v },
# vapply = vapply(x, identity, numeric(1)),
# vec = sum(x),
# times = 100L
# )
# autoplot(mb) # opens ggplot2 violin chartDöngü ile vapply ve sapply Karşılaştırması
Klasik bir karşılaştırma: bir işlevi for döngüsü, sapply() veya vapply() kullanarak öğe bazında uygulamak. vapply(), sonuç vektörüne önceden yer ayırdığı için sapply() işlevinden daha hızlıdır. Her ikisi de tamamen vektörleştirilmiş koddan daha yavaştır.
# library(microbenchmark)
# x <- runif(5000, 1, 100)
#
# mb <- microbenchmark(
# for_loop = {
# r <- numeric(length(x))
# for (i in seq_along(x)) r[i] <- log(x[i])
# },
# sapply_log = sapply(x, log),
# vapply_log = vapply(x, log, numeric(1)),
# vec_log = log(x),
# times = 200L, unit = 'us'
# )
# print(mb)Önce Doğruluğu Denetleme
Karşılaştırma yapmadan önce tüm ifadelerin aynı sonuçları döndürdüğünü doğrulayın. Daha hızlı fakat hatalı bir uygulamanın hiçbir faydası yoktur. Çıktıları karşılaştırmak için identical() veya all.equal() kullanın.
# x <- runif(1000)
# r1 <- sapply(x, sqrt)
# r2 <- sqrt(x)
# r3 <- vapply(x, sqrt, numeric(1))
#
# stopifnot(isTRUE(all.equal(r1, r2)))
# stopifnot(isTRUE(all.equal(r1, r3)))
# cat('All three produce identical results -- safe to benchmark
')
cat('Always verify correctness before comparing speed
')setup Bağımsız Değeriyle Karşılaştırma
Süreleri ölçülen ifadelerden önce kodu bir kez çalıştırmak için setup bağımsız değişkenini kullanın. Ölçmek istediğiniz şey veri oluşturma süresi değilse bu sayede veri oluşturma süresinin karşılaştırmaya dâhil edilmesini önlersiniz.
# library(microbenchmark)
#
# microbenchmark(
# sort_base = sort(x),
# sort_order = x[order(x)],
# setup = { x <- rnorm(10000) },
# times = 100L
# )
# Each iteration refreshes x via setup, then times sort_base and sort_orderAnalizde Karşılaştırma Sonuçlarını Raporlama
Karşılaştırma sonuçlarını paylaşırken her zaman şunları bildirin:
- R sürümü ve platform
- Paket sürümleri
- Kullanılan
timesdeğeri - Karşılaştırmada kullanılan veri boyutu
Süre ölçümleri makineler arasında taşınabilir değildir — uygulamaları karşılaştırırken mutlak sayılar yerine oranları bildirin.
cat('R version :', R.version$version.string, '
')
cat('Platform :', R.version$platform, '
')
cat('Logical cores:', parallel::detectCores(), '
')Kısa Kontrol: microbenchmark Ölçütü
İki uygulamayı karşılaştırmak için microbenchmark çıktısındaki hangi özet istatistiği en güvenilirdir?
microbenchmark Özeti
microbenchmark, R'da titiz mikro karşılaştırmalar yapmak için kullanılan standart araçtır:
- Adlandırılmış ifadeleri aktarın ve yinelemeleri denetlemek için
timesdeğerini ayarlayın - Okunabilir çıktı için
unit = 'us'veya'ms'kullanın - Ortanca değerleri karşılaştırın — bunlar GC kaynaklı aykırı değerlerden daha az etkilenir
- Süre dağılımlarını görselleştirmek için
autoplot()kullanın - Karşılaştırmadan önce doğruluğu
all.equal()ile doğrulayın
Sıkça Sorulan Sorular
“microbenchmark ile Performans Karşılaştırması” dersi ücretsiz mi?
Evet — “microbenchmark ile Performans Karşılaştırması” 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.
“microbenchmark ile Performans Karşılaştırması” dersinde ne öğreneceğim?
Birden çok uygulamayı microbenchmark() ile istatistiksel olarak karşılaştırı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 4. dersidir.
“microbenchmark ile Performans Karşılaştırması” 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
- system.time() ve proc.time()
- Rprof ve profvis ile Kod Profilleme
- Hız için Vektörleştirme
- microbenchmark ile Performans Karşılaştırması