LLVM IR
- Rust kursu
- Uzman
- Ders 3/46
- 4 dk
LLVM backend'ini ve kod üretim sürecini öğrenirsin.
LLVM IR
MIR, LLVM ara gösterimine çevrilir ve LLVM optimizasyonları (satır içi alma, sabit katlama, döngü açma, vektörleştirme) burada uygulanır; ardından hedef işlemci için makine kodu üretilir. Optimizasyon düzeyi opt-level ile seçilir: debug derlemede 0, release'te 3.
fn kare_toplam(n: u64) -> u64 {
(1..=n).map(|i| i * i).sum()
}
// release'te LLVM bu döngüyü n(n+1)(2n+1)/6 formülüne çevirebilirÇıktıyı görmek için: cargo rustc --release -- --emit=llvm-ir ya da Compiler Explorer (godbolt.org).
Debug ve release farkı
Debug derlemede taşma denetimleri ve hata ayıklama bilgisi açıktır, optimizasyon yoktur; release'te tersi. Performans her zaman release derlemede ölçülmelidir: aynı kod debug'da 10–100 kat yavaş olabilir. Ara seçenekler Cargo.toml'da ayarlanır:
[profile.dev]
opt-level = 1 # debug'da biraz optimizasyon
[profile.release]
debug = true # profilleme için sembol bilgisi
codegen-units = 1 # daha iyi optimizasyon, daha yavaş derlemeUygulama Kareler toplamı
Yukarıdaki kare_toplam fonksiyonunu yaz. Girdiyi std::hint::black_box(10u64) ile vererek sonucu yazdır.
Başlangıç kodu
fn main() {
// buraya yaz
}Örnek çözüm
fn kare_toplam(n: u64) -> u64 {
(1..=n).map(|i| i * i).sum()
}
fn main() {
let n = std::hint::black_box(10u64);
println!("{}", kare_toplam(n));
}Beklenen çıktı
385
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Benchmark yazarken neden <code>std::hint::black_box</code> kullanılır?
- Bellek ayırmak için
- Hata ayıklamak için
- Derleyicinin değeri bilinen sabit sayıp hesabı tamamen silmesini engellemek için Doğru cevap
- Programı hızlandırmak için
Açıklama: Sabit girdiyle çağrılan saf bir fonksiyon derleme anında hesaplanabilir; ölçülen süre gerçeği yansıtmaz.
2 Optimizasyonu engelle
let n = std::hint::____(10u64);
println!("{}", kare_toplam(n));
let n = std::hint::black_box(10u64);
println!("{}", kare_toplam(n));
Açıklama: black_box değeri derleyiciye bilinmeyen gösterir.
3 Ayar ve etkisi
| Kavram | Anlamı |
|---|---|
opt-level = 0 |
Optimizasyon yok |
opt-level = 3 |
Tam optimizasyon |
--emit=llvm-ir |
LLVM IR çıktısı |
black_box |
Katlamayı engeller |