R Academy · Pelajaran

Menguji Kinerja dengan microbenchmark

Bandingkan beberapa implementasi secara statistik dengan microbenchmark().

Pelajaran 4 dari 413 langkah

Menguji Kinerja dengan microbenchmark adalah pelajaran R Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar R Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus R Academy mencakup 4 pelajaran total.

Mengapa Menggunakan microbenchmark?

system.time() memiliki resolusi milidetik dan tidak andal untuk operasi yang cepat. Paket microbenchmark menjalankan ekspresi ratusan kali, menangani pemanasan, dan melaporkan statistik dengan resolusi nanodetik—sehingga menjadi alat yang tepat untuk membandingkan implementasi yang serupa.

Penggunaan Dasar microbenchmark

Berikan ekspresi bernama kepada microbenchmark(). Nama setiap argumen akan menjadi label dalam keluaran. Argumen times menentukan berapa kali setiap ekspresi dievaluasi.

# library(microbenchmark)
# x <- 1:10000
#
# microbenchmark(
#   loop = {
#     s <- 0
#     for (v in x) s <- s + v
#   },
#   vectorized = sum(x),
#   times = 200L
# )

Memilih Argumen times

Pengulangan yang lebih banyak menghasilkan estimasi yang lebih stabil, tetapi membutuhkan waktu lebih lama. Panduan umum:

  • Ekspresi cepat (mikrodetik): times = 1000L atau lebih
  • Ekspresi sedang (milidetik): times = 100L
  • Ekspresi lambat (detik): times = 10L atau kurang

Nilai bawaan adalah times = 100L, yang merupakan titik awal yang baik.

# 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
# )

Menentukan Argumen unit

Gunakan argumen unit untuk menampilkan hasil dalam skala yang mudah digunakan:

  • 'ns'—nanodetik (untuk operasi yang sangat cepat)
  • 'us'—mikrodetik
  • 'ms'—milidetik
  • 's'—detik
  • 'relative'—rasio terhadap ekspresi tercepat
# library(microbenchmark)
# x <- runif(1000)
#
# microbenchmark(
#   sapply_sqrt = sapply(x, sqrt),
#   vectorized  = sqrt(x),
#   times = 500L,
#   unit = 'us'   # display in microseconds
# )

Menafsirkan Keluaran Ringkasan

microbenchmark mencetak tabel ringkasan dengan kolom-kolom berikut:

  • min—satu kali eksekusi tercepat
  • lq / mean / median / uq—kuartil bawah, rata-rata, median, kuartil atas
  • max—satu kali eksekusi terlambat
  • neval—jumlah evaluasi

Gunakan median sebagai metrik perbandingan utama—metrik ini tahan terhadap jeda GC sesekali yang memperbesar nilai maksimum dan rata-rata.

# 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
')

summary() pada Objek microbenchmark

Memanggil summary(mb) pada hasil microbenchmark yang disimpan akan mengembalikan kerangka data yang dapat Anda periksa secara terprogram. Anda juga dapat mengubah unit dalam pemanggilan ringkasan.

# 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')])

autoplot() untuk Perbandingan Visual

autoplot(mb) menggunakan ggplot2 untuk menggambar plot biola atau plot kotak dari distribusi waktu di berbagai ekspresi. Dengan demikian, Anda dapat melihat bukan hanya perbedaan median, tetapi juga variabilitas dan tumpang tindih antaralternatif.

# 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 chart

Membandingkan Perulangan dengan vapply dan sapply

Benchmark klasik: menerapkan fungsi per elemen menggunakan perulangan for, sapply(), atau vapply(). vapply() lebih cepat daripada sapply() karena melakukan pra-alokasi vektor hasil. Keduanya lebih lambat daripada kode yang sepenuhnya tervectorisasi.

# 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)

Memeriksa Kebenaran Terlebih Dahulu

Sebelum melakukan benchmarking, pastikan semua ekspresi mengembalikan hasil yang identik. Implementasi yang lebih cepat tetapi salah tidak berguna. Gunakan identical() atau all.equal() untuk membandingkan keluaran.

# 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
')

Benchmarking dengan Argumen setup

Gunakan argumen setup untuk menjalankan kode sekali sebelum ekspresi yang diukur waktunya. Dengan begitu, waktu pembuatan data tidak ikut dihitung jika pembuatan data bukan hal yang sedang Anda ukur.

# 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_order

Melaporkan Benchmark dalam Analisis

Saat membagikan hasil benchmark, selalu laporkan:

  • Versi dan platform R
  • Versi paket
  • Nilai times yang digunakan
  • Ukuran data yang diukur

Waktu eksekusi tidak dapat dibandingkan langsung antar-komputer—laporkan rasio, bukan angka absolut, saat membandingkan implementasi.

cat('R version    :', R.version$version.string, '
')
cat('Platform     :', R.version$platform, '
')
cat('Logical cores:', parallel::detectCores(), '
')

Pemeriksaan Cepat: Metrik microbenchmark

Statistik ringkasan mana dari keluaran microbenchmark yang paling andal untuk membandingkan dua implementasi?

Ikhtisar microbenchmark

microbenchmark adalah alat standar untuk microbenchmarking yang ketat dalam R:

  • Berikan ekspresi bernama dan atur times untuk mengendalikan jumlah pengulangan
  • Gunakan unit = 'us' atau 'ms' agar keluaran mudah dibaca
  • Bandingkan median karena tahan terhadap pencilan GC
  • Gunakan autoplot() untuk memvisualisasikan distribusi waktu
  • Verifikasi kebenaran dengan all.equal() sebelum melakukan benchmarking
Gratis untuk memulai

Belajar R dengan tutor AI — gratis

Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.

Kursus
43
Pelajaran
159

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Menguji Kinerja dengan microbenchmark” gratis?

Ya — teks lengkap “Menguji Kinerja dengan microbenchmark” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus R Academy, upgrade ke CoddyKit PRO. Kursus R Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Menguji Kinerja dengan microbenchmark”?

Bandingkan beberapa implementasi secara statistik dengan microbenchmark(). Kamu berlatih R Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai R Academy?

Tidak diperlukan pengalaman sebelumnya. R Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.

Berapa lama pelajaran “Menguji Kinerja dengan microbenchmark” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran R Academy ini?

Ya. Setiap pelajaran R Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. system.time() dan proc.time()
  2. Membuat Profil Kode dengan Rprof dan profvis
  3. Vektorisasi untuk Kecepatan
  4. Menguji Kinerja dengan microbenchmark
← Kembali ke R Academy