R Academy · Pelajaran

Penandaarasan dengan microbenchmark

Bandingkan beberapa pelaksanaan secara statistik dengan microbenchmark().

Pelajaran 4 daripada 413 langkah

Penandaarasan dengan microbenchmark ialah pelajaran R Academy percuma di CoddyKit. Ini ialah pelajaran 4 daripada 4. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran R Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus R Academy merangkumi sejumlah 4 pelajaran.

Mengapa microbenchmark?

system.time() mempunyai ketepatan milisaat dan tidak boleh dipercayai untuk operasi pantas. Pakej microbenchmark menjalankan ungkapan beratus-ratus kali, mengendalikan pemanasan awal dan melaporkan statistik dengan ketepatan nanosaat — menjadikannya alat yang sesuai untuk membandingkan pelaksanaan yang serupa.

Penggunaan Asas microbenchmark

Hantar ungkapan bernama kepada microbenchmark(). Nama setiap argumen menjadi label dalam output. Argumen times mengawal berapa kali setiap ungkapan dinilai.

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

Memilih Argumen times

Ulangan yang lebih banyak memberikan anggaran yang lebih stabil tetapi mengambil masa yang lebih lama. Panduan umum:

  • Ungkapan pantas (mikrosaat): times = 1000L atau lebih
  • Sederhana (milisaat): times = 100L
  • Perlahan (saat): times = 10L atau kurang

Nilai lalai ialah times = 100L, yang merupakan titik permulaan 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 memaparkan hasil dalam skala yang sesuai:

  • 'ns' — nanosaat (untuk operasi yang sangat pantas)
  • 'us' — mikrosaat
  • 'ms' — milisaat
  • 's' — saat
  • 'relative' — nisbah berbanding ungkapan yang paling pantas
# library(microbenchmark)
# x <- runif(1000)
#
# microbenchmark(
#   sapply_sqrt = sapply(x, sqrt),
#   vectorized  = sqrt(x),
#   times = 500L,
#   unit = 'us'   # display in microseconds
# )

Mentafsir Output Ringkasan

microbenchmark mencetak jadual ringkasan dengan lajur berikut:

  • min — satu pelaksanaan paling pantas
  • lq / mean / median / uq — kuartil bawah, min, median, kuartil atas
  • max — satu pelaksanaan paling perlahan
  • neval — bilangan penilaian

Gunakan median sebagai metrik perbandingan utama — ia tahan terhadap jeda GC sekali-sekala yang meningkatkan nilai maksimum dan min.

# 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 mengembalikan bingkai data yang boleh anda periksa secara terprogram. Anda juga boleh menukar unit dalam panggilan 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 melukis plot biola atau plot kotak bagi taburan masa merentas ungkapan. Ini memudahkan anda melihat bukan sahaja perbezaan median, tetapi juga kepelbagaian dan pertindihan antara alternatif.

# 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 Gelung berbanding vapply berbanding sapply

Tanda aras klasik: menggunakan fungsi mengikut unsur dengan gelung for, sapply() atau vapply(). vapply() lebih pantas daripada sapply() kerana ia membuat peruntukan awal untuk vektor hasil. Kedua-duanya lebih perlahan daripada kod yang tervector sepenuhnya.

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

Menyemak Ketepatan Terlebih Dahulu

Sebelum menjalankan tanda aras, sahkan bahawa semua ungkapan mengembalikan hasil yang sama. Pelaksanaan yang lebih pantas tetapi salah tidak berguna. Gunakan identical() atau all.equal() untuk membandingkan output.

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

Menjalankan Tanda Aras dengan Argumen setup

Gunakan argumen setup untuk menjalankan kod sekali sebelum ungkapan yang ditetapkan masanya. Ini mengelakkan masa penciptaan data dimasukkan dalam tanda aras apabila penciptaan data bukan perkara 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 Tanda Aras dalam Analisis

Apabila berkongsi hasil tanda aras, sentiasa laporkan:

  • Versi R dan platform
  • Versi pakej
  • Nilai times yang digunakan
  • Saiz data yang ditanda aras

Masa pelaksanaan tidak boleh dipindahkan terus antara mesin — laporkan nisbah, bukan nombor mutlak, apabila membandingkan pelaksanaan.

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

Semakan Pantas: Metrik microbenchmark

Statistik ringkasan daripada output microbenchmark yang manakah paling boleh dipercayai untuk membandingkan dua pelaksanaan?

Imbas Kembali microbenchmark

microbenchmark ialah alat piawai untuk tanda aras mikro yang teliti dalam R:

  • Hantar ungkapan bernama dan tetapkan times untuk mengawal ulangan
  • Gunakan unit = 'us' atau 'ms' untuk output yang mudah dibaca
  • Bandingkan median — ia tahan terhadap nilai terpencil GC
  • Gunakan autoplot() untuk menggambarkan taburan masa
  • Sahkan ketepatan dengan all.equal() sebelum menjalankan tanda aras
Percuma untuk bermula

Pelajari R dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
43
Pelajaran
159

Soalan Lazim

Adakah pelajaran “Penandaarasan dengan microbenchmark” percuma?

Ya — sebanyak 3 pelajaran dalam laluan pembelajaran R Academy, termasuk “Penandaarasan dengan microbenchmark”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus R Academy merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “Penandaarasan dengan microbenchmark”?

Bandingkan beberapa pelaksanaan secara statistik dengan microbenchmark(). Anda berlatih R Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan R Academy?

Tiada pengalaman terdahulu diperlukan. Pembelajaran R Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 4 daripada 4.

Berapa lamakah pelajaran “Penandaarasan dengan microbenchmark” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran R Academy ini?

Ya. Setiap pelajaran R Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. system.time() dan proc.time()
  2. Menganalisis Prestasi Kod dengan Rprof dan profvis
  3. Penvectoran untuk Kelajuan
  4. Penandaarasan dengan microbenchmark
← Kembali ke R Academy