Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Optimizasyon Seviyeleri

BERK derleyicisi, LLVM optimizer kullanarak kodunuzu maksimum performans için optimize eder.

Optimizasyon Seviyeleri

SeviyeBayrakKullanımDerlemePerformansBinary Boyutu
O0-O0Debug🚀 Çok Hızlı🐌 Yavaş📦 Büyük
O1-O1Temel⚡ Hızlı⚡ Orta📦 Orta
O2-O2Varsayılan🐌 Yavaş🚀 Hızlı📦 Küçük
O3-O3Maksimum🐌 En Yavaş🚀 En Hızlı📦 Değişken

-O0 (Optimizasyon Yok)

berk-lang build --opt=0 program.berk
# veya
berk-lang build -O0 program.berk

Özellikler:

  • ✅ En hızlı derleme süresi
  • ✅ Debug sembolleri korunur
  • ✅ Stack trace doğru
  • ❌ Çok yavaş çalışma
  • ❌ Büyük binary boyutu

Kullanım Alanı: Geliştirme ve debugging

-O1 (Temel Optimizasyonlar)

berk-lang build --opt=1 program.berk

Uygulanan Optimizasyonlar:

  • Constant folding: 5 + 1015
  • Dead code elimination: Kullanılmayan kod silinir
  • Basic inlining: Çok küçük fonksiyonlar inline edilir
  • Register allocation: Değişkenler register'lara atanır

Performans: ~2-5x hızlanma (O0'a göre)

-O2 (Tam Optimizasyon - Varsayılan)

berk-lang build --opt=2 program.berk
# veya sadece
berk-lang build --release program.berk

Uygulanan Optimizasyonlar:

  • Tüm O1 optimizasyonları
  • Loop optimization: Döngü hızlandırma
  • Function inlining: Orta boyutlu fonksiyonlar
  • Vectorization: SIMD instruction'ları
  • Tail call optimization: Recursive call'ları optimize et
  • Common subexpression elimination

Performans: ~10-20x hızlanma (O0'a göre)

-O3 (Agresif Optimizasyon)

berk-lang build --opt=3 program.berk

Uygulanan Optimizasyonlar:

  • Tüm O2 optimizasyonları
  • Aggressive inlining: Büyük fonksiyonlar bile inline
  • Loop unrolling: Döngüleri açar
  • Speculative execution
  • Interprocedural optimization

Performans: ~15-30x hızlanma (O0'a göre)

⚠️ Dikkat: Derleme süresi çok uzun, binary boyutu artabilir

Özel Optimizasyonlar

Tüm modüller birlikte optimize edilir:

berk-lang build --lto program.berk

Avantajlar:

  • Cross-module inlining
  • Dead code elimination (tüm program)
  • %10-30 performans artışı

Dezavantaj: Çok uzun derleme süresi

PGO (Profile-Guided Optimization)

Programı çalıştırarak profil toplar, sonra optimize eder:

# 1. Profiling için derle
berk-lang build --profile-generate program.berk -o program.exe

# 2. Programı çalıştır (profil topla)
./program.exe

# 3. Profil kullanarak optimize et
berk-lang build --profile-use=default.profdata program.berk -o program_optimized.exe

Performans: %15-40 ek hızlanma

Size Optimization

Binary boyutunu küçültmek için:

# Boyut optimizasyonu
berk-lang build --opt-size program.berk

# Aggressive size optimization
berk-lang build --opt-size-aggressive program.berk

# Strip sembolleri
berk-lang build --strip program.berk

Sonuç: %30-70 daha küçük binary

Optimizasyon Teknikleri

Constant Folding

// Kaynak kod
değişken x = 5 + 10 * 2

// Optimize sonrası
değişken x = 25

Dead Code Elimination

// Kaynak kod
fonksiyon hesapla() -> sayı yap
    değişken x = 10
    değişken y = 20  // Kullanılmıyor
    dön x
son

// Optimize sonrası
fonksiyon hesapla() -> sayı yap
    dön 10
son

Function Inlining

// Kaynak kod
fonksiyon topla(a: sayı, b: sayı) -> sayı yap
    dön a + b
son

değişken sonuç = topla(5, 10)

// Optimize sonrası (O2+)
değişken sonuç = 15  // Fonksiyon çağrısı yok!

Loop Unrolling

// Kaynak kod
için i 0'dan 4'e yap
    yazdir(i)
son

// Optimize sonrası (O3)
yazdir(0)
yazdir(1)
yazdir(2)
yazdir(3)

Vectorization (SIMD)

// Kaynak kod
değişken a: [sayı; 4] = [1, 2, 3, 4]
değişken b: [sayı; 4] = [5, 6, 7, 8]
değişken c: [sayı; 4]

için i 0'dan 4'e yap
    c[i] = a[i] + b[i]
son

// Optimize sonrası (O2+ SIMD)
// Tek SIMD instruction ile 4 toplama birden!
// paddq xmm0, xmm1

Optimizasyon Kontrolü

Belirli Optimizasyonları Aktif/Deaktif Et

# Inlining'i kapat
berk-lang build -O2 --no-inline program.berk

# Vectorization'ı kapat
berk-lang build -O2 --no-vectorize program.berk

# Loop unrolling'i kapat
berk-lang build -O3 --no-unroll-loops program.berk

Fonksiyon Bazlı Optimizasyon

// Bu fonksiyonu inline etme
#[no_inline]
fonksiyon debug_fonksiyon() yap
    // debug kodu
son

// Bu fonksiyonu her zaman inline et
#[always_inline]
fonksiyon hızlı_işlem() yap
    // kritik kod
son

Performans Karşılaştırması

Test: Fibonacci(40) hesaplama

SeviyeSüreHızlanmaDerleme SüresiBinary Boyutu
-O02.5s1x0.1s250 KB
-O10.8s3x0.2s180 KB
-O20.12s21x0.5s120 KB
-O30.09s28x1.2s140 KB
-O3 --lto0.07s36x3.5s110 KB

Hangi Seviyeyi Kullanmalı?

DurumÖneriNeden
🔧 Geliştirme-O0Hızlı derleme, kolay debug
🧪 Test-O1Orta performans, hızlı derleme
🚀 Production-O2İyi performans, makul derleme
🏆 Maksimum Hız-O3 --ltoEn iyi performans
📦 Küçük Binary--opt-sizeEmbedded sistemler

berk.toml Yapılandırması

[build]
optimization = 2          # Varsayılan: O2
lto = true               # Link-Time Optimization
strip = false            # Debug sembolleri koru

[profile.dev]
optimization = 0
debug = true

[profile.release]
optimization = 3
lto = true
strip = true

[profile.bench]
optimization = 3
lto = true
pgo = true

Profil Kullanımı

# Dev profili
berk-lang build --profile=dev program.berk

# Release profili
berk-lang build --profile=release program.berk

# Bench profili
berk-lang build --profile=bench program.berk

Optimizasyon İpuçları

  1. Release build kullanın:

    berk-lang build --release program.berk
    
  2. LTO ekleyin (production için):

    berk-lang build --release --lto program.berk
    
  3. PGO kullanın (kritik uygulamalar):

    berk-lang build --profile-generate program.berk
    ./program.exe  # Profil topla
    berk-lang build --profile-use=default.profdata program.berk
    
  4. ⚠️ O3 dikkatli: Bazen O2'den daha yavaş olabilir

  5. ⚠️ Binary boyutu önemliyse: --opt-size kullanın

Özet

  • -O0: Debug, hızlı derleme
  • -O1: Temel optimizasyon
  • -O2: Production (varsayılan)
  • -O3: Maksimum hız
  • --lto: +%10-30 performans
  • --pgo: +%15-40 performans
  • --opt-size: Küçük binary