Penandaarasan dengan microbenchmark
Bandingkan beberapa pelaksanaan secara statistik dengan microbenchmark().
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 = 1000Latau lebih - Sederhana (milisaat):
times = 100L - Perlahan (saat):
times = 10Latau 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 chartMembandingkan 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_orderMelaporkan Tanda Aras dalam Analisis
Apabila berkongsi hasil tanda aras, sentiasa laporkan:
- Versi R dan platform
- Versi pakej
- Nilai
timesyang 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
timesuntuk 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
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
- system.time() dan proc.time()
- Menganalisis Prestasi Kod dengan Rprof dan profvis
- Penvectoran untuk Kelajuan
- Penandaarasan dengan microbenchmark