Pola Benchmark
Tulis benchmark mikro yang andal menggunakan os.clock dan hindari jebakan umum.
Pola Benchmark adalah pelajaran Lua 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 Lua Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Lua Academy mencakup 4 pelajaran total.
Mengapa Melakukan Tolok Ukur?
Tolok ukur mikro mengukur kinerja potongan kode tertentu secara terisolasi. Tolok ukur ini membantu memverifikasi bahwa pengoptimalan benar-benar meningkatkan kecepatan tanpa mengandalkan intuisi.
Templat Tolok Ukur Dasar
Bungkus kode dalam perulangan, ukur waktu nyata dengan os.clock(), lalu bagi dengan jumlah iterasi.
local N = 1e6
local t0 = os.clock()
for i = 1, N do
-- code to benchmark
end
local elapsed = os.clock() - t0
print(("%.2f ns/op"):format(elapsed / N * 1e9))Putaran Pemanasan
Jalankan putaran pemanasan sebelum mengukur waktu agar LuaJIT dapat mengompilasi pelacakan. Tanpa pemanasan, pengukuran pertama mencakup overhead kompilasi JIT.
for i = 1, 1000 do hotFunction(i) end -- warm up
local t0 = os.clock()
for i = 1, N do hotFunction(i) end
local elapsed = os.clock() - t0Mencegah Penghapusan Kode Mati
JIT dapat mengoptimalkan dan menghapus perhitungan yang hasilnya tidak digunakan. Akumulasikan hasil ke dalam variabel agar tolok ukur tetap valid.
local sum = 0
for i = 1, N do sum = sum + math.sin(i) end
print(sum) -- prevent eliminationMembandingkan Dua Pendekatan
Uji implementasi alternatif dalam kondisi yang sama. Jalankan secara berselang-seling atau beberapa kali untuk meminimalkan derau penjadwalan OS.
local function approach1() -- ...
end
local function approach2() -- ...
end
local function bench(fn, n)
local t = os.clock()
for _ = 1, n do fn() end
return os.clock() - t
end
print("A:", bench(approach1, 1e5))
print("B:", bench(approach2, 1e5))Analisis Statistik
Jalankan tolok ukur beberapa kali, lalu hitung nilai minimum, maksimum, dan median. Pencilan akibat jeda GC atau penjadwalan OS sebaiknya dibuang.
Pengukuran Memori
Ukur alokasi memori bersamaan dengan waktu.
collectgarbage("collect")
local mem0 = collectgarbage("count")
-- ... run operation ...
collectgarbage("collect")
local mem1 = collectgarbage("count")
print(("Memory delta: %.1f KB"):format(mem1 - mem0))Menghindari Gangguan GC
Hentikan GC sebelum pengukuran waktu untuk mengukur waktu komputasi murni. Aktifkan kembali setelahnya.
collectgarbage("stop")
local t0 = os.clock()
for i = 1, N do -- ... end
print(os.clock() - t0)
collectgarbage("restart")Tolok Ukur Realistis vs Mikro
Tolok ukur mikro mengoptimalkan potongan kecil, tetapi mungkin tidak mencerminkan kinerja di dunia nyata. Selalu validasi peningkatan berdasarkan profil aplikasi lengkap.
Utilitas Tolok Ukur
Buat utilitas benchmark(name, fn, iters) yang dapat digunakan kembali dan mencetak hasil yang konsisten serta terformat pada semua tolok ukur Anda.
local function benchmark(name, fn, iters)
iters = iters or 1e5
for _ = 1, iters // 10 do fn() end -- warm up
local t = os.clock()
for _ = 1, iters do fn() end
local ns = (os.clock() - t) / iters * 1e9
print(("%-30s %8.1f ns/op"):format(name, ns))
endTolok Ukur di CI
Jalankan tolok ukur dalam CI untuk mendeteksi penurunan kinerja. Berikan peringatan jika tolok ukur memburuk melebihi ambang batas yang ditentukan, misalnya 10%.
Pertanyaan tentang Tolok Ukur
Mengapa putaran pemanasan penting saat melakukan tolok ukur kode LuaJIT?
Ringkasan: Pola Tolok Ukur
Gunakan putaran pemanasan, cegah penghapusan kode mati dengan menggunakan hasilnya, lakukan pengukuran dengan os.clock(), kendalikan GC, dan jalankan beberapa percobaan untuk mendapatkan pengukuran yang stabil. Buat utilitas tolok ukur yang dapat digunakan kembali agar hasilnya konsisten.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Pola Benchmark” gratis?
Ya — teks lengkap “Pola Benchmark” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Lua Academy, upgrade ke CoddyKit PRO. Kursus Lua Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Pola Benchmark”?
Tulis benchmark mikro yang andal menggunakan os.clock dan hindari jebakan umum. Kamu berlatih Lua 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 Lua Academy?
Tidak diperlukan pengalaman sebelumnya. Lua 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 “Pola Benchmark” 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 Lua Academy ini?
Ya. Setiap pelajaran Lua 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
- Gambaran Umum Arsitektur LuaJIT
- Menulis Lua yang Ramah JIT
- Pembuatan Profil dengan jit.p dan perf
- Pola Benchmark