0Pricing
Lua Academy · Ders

Karşılaştırma Örüntüleri

os.clock kullanarak güvenilir mikro karşılaştırmalar yazın ve yaygın tuzaklardan kaçının.

Karşılaştırma Örüntüleri, CoddyKit'te ücretsiz bir Lua 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, Lua Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Lua Academy kursu toplamda 4 dersten oluşur.

Neden Karşılaştırma Yapılır?

Mikro karşılaştırmalar, belirli bir kod parçasının performansını yalıtılmış biçimde ölçer. Sezgiye güvenmeden bir iyileştirmenin hızı gerçekten artırdığını doğrulamanıza yardımcı olur.

Temel Karşılaştırma Şablonu

Kodu bir döngü içine alın, geçen süreyi os.clock() ile ölçün ve yineleme sayısına bölün.

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

Isınma Turu

Süre ölçümünden önce LuaJIT'in izleri derlemesine zaman tanımak için bir ısınma turu çalıştırın. Isınma olmadan, ilk ölçümlü çalıştırma JIT derleme ek yükünü de içerir.

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() - t0

Ölü Kodların Elenmesini Önleme

JIT, sonuçları kullanılmayan hesaplamaları kaldırabilir. Karşılaştırmanın doğru sonuç vermesini sağlamak için sonuçları bir değişkende biriktirin.

local sum = 0
for i = 1, N do sum = sum + math.sin(i) end
print(sum)  -- prevent elimination

İki Yaklaşımı Karşılaştırma

Alternatif uygulamaları aynı koşullar altında karşılaştırın. OS zamanlama gürültüsünü en aza indirmek için bunları dönüşümlü olarak veya birden çok kez çalıştırın.

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

İstatistiksel Analiz

Karşılaştırmayı birden çok kez çalıştırıp en küçük, en büyük ve ortanca değerleri hesaplayın. GC duraklamalarından veya OS zamanlamasından kaynaklanan aykırı değerleri çıkarın.

Bellek Karşılaştırması

Zaman ölçümünün yanı sıra bellek ayırmayı da ölçün.

collectgarbage("collect")
local mem0 = collectgarbage("count")
-- ... run operation ...
collectgarbage("collect")
local mem1 = collectgarbage("count")
print(("Memory delta: %.1f KB"):format(mem1 - mem0))

GC Etkileşimini Önleme

Salt hesaplama süresini ölçmek için zaman ölçümünden önce GC'yi durdurun. Ardından yeniden başlatın.

collectgarbage("stop")
local t0 = os.clock()
for i = 1, N do -- ... end
print(os.clock() - t0)
collectgarbage("restart")

Gerçekçi Karşılaştırmalar ve Mikro Karşılaştırmalar

Mikro karşılaştırmalar küçük kod parçalarını iyileştirir, ancak gerçek dünya performansını yansıtmayabilir. İyileştirmeleri her zaman uygulamanın tamamının profiline göre doğrulayın.

Karşılaştırma Yardımcıları

Tüm karşılaştırmalarınızda tutarlı ve biçimlendirilmiş sonuçlar yazdıran, yeniden kullanılabilir bir benchmark(name, fn, iters) yardımcı programı oluşturun.

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

CI ile Karşılaştırma

Performans gerilemelerini tespit etmek için karşılaştırmaları CI'da çalıştırın. Bir karşılaştırma belirlenen eşiğin (ör. %10) üzerinde kötüleşirse uyarı verin.

Karşılaştırma Sorusu

LuaJIT kodunu karşılaştırırken ısınma turu neden önemlidir?

Özet: Karşılaştırma Kalıpları

Bir ısınma turu kullanın, sonuçları kullanarak ölü kodların elenmesini önleyin, os.clock() ile ölçüm yapın, GC'yi denetleyin ve kararlı ölçümler için birden çok deneme çalıştırın. Tutarlılık için yeniden kullanılabilir bir karşılaştırma yardımcı programı oluşturun.

Sıkça Sorulan Sorular

“Karşılaştırma Örüntüleri” dersi ücretsiz mi?

Evet — “Karşılaştırma Örüntüleri” 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 Lua Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Lua Academy kursu toplamda 4 dersten oluşur.

“Karşılaştırma Örüntüleri” dersinde ne öğreneceğim?

os.clock kullanarak güvenilir mikro karşılaştırmalar yazın ve yaygın tuzaklardan kaçının. Lua 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.

Lua Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Lua 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.

“Karşılaştırma Örüntüleri” 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 Lua Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Lua 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

  1. LuaJIT Mimarısına Genel Bakış
  2. JIT Dostu Lua Yazma
  3. jit.p ve perf ile Profil Oluşturma
  4. Karşılaştırma Örüntüleri
← Lua Academy Sayfasına Dön