GNU / Linux'u -O3 optimizasyonu ile derleme


Yanıtlar:


8

Gentoo'da kullanıldı ve alışılmadık bir şey fark etmedim.


8
Bununla birlikte, -O3'ün genellikle ebuild'ler tarafından filtrelendiğini lütfen unutmayın.
Maciej Piechotka

17

-O3 çeşitli dezavantajları vardır:

  1. Her şeyden önce genellikle -O2veya ' dan daha yavaş kod üretir -Os. Bazen döngü açma nedeniyle daha uzun kod üretir, bu da kodun daha kötü önbellek performansı nedeniyle daha yavaş olabilir.
  2. Söylendiği gibi bazen yanlış kod üretir. Bunun nedeni optimalizasyondaki hata veya koddaki hata olabilir (katı takma adı yoksaymak gibi). Çekirdek kodu bazen 'akıllı' olmak zorunda olduğu için, bazı çekirdek geliştiricilerinin bazı hatalar yapmasının mümkün olduğunu söyleyebilirim. Bu noktada sabit olan gcc 4.5 ile çekirdeği derlediğimde, kullanıcı alanı yardımcı programlarının çökmesi gibi çeşitli garip sorunlar yaşadım. Hala çekirdek ve çeşitli hatalar nedeniyle seçilen birkaç kullanıcı alanı yardımcı programları için gcc 4.4 kullanıyorum. Aynı şey için de geçerli olabilir -O3.
  3. Linux çekirdeğine çok fazla fayda sağladığını düşünmüyorum. Çekirdek ağır hesaplamalar yapmaz ve yaptığı yerlerde montaj ile optimize edilir. -O3bayrak olacak değil I / O bağlamı anahtarlama veya hız maliyetini değiştirin. Genel performansın% 0.1'inden daha az hızlanması gibi bir şeyin buna değeceğini düşünmüyorum.

6
Linus gcc'nin aptal ve aşırı derecede kısıtlayıcı olduğunu düşündüğünden Linux -fno-katı takma ile derlenmiştir, çünkü açık bir şekilde açıkça olmasa bile değerleri tedavi gibi aptalca şeyler yapar (yani takma adlandırma bir fonksiyonun içine girmiştir ve derleyici bak). bkz. mail-archive.com/linux-btrfs@vger.kernel.org/msg01647.html
Spudd86

@ Spudd86: İnsanların kod okuması ya da derleyici için olmadığı açık mı? Söylediğim gibi - Çekirdek bazen kullanıcı alanı programlarının yapmaması gereken akıllı şeyler yapmak zorunda. Kullanıcı alanı için mantıklı olan şey (bazı alanlarda ağır optimizasyon) çekirdek için anlamlı olmayabilir (daha fazla miktarda akıllı kod + farklı yerlerde darboğaz).
Maciej Piechotka

1
Söylediği hiçbir şey kullanıcı alanı için de geçerli değil.
Spudd86

1
@ Spudd86: Ona katılmıyorum. Derleyiciyi bu tür 'açık' şeyleri görecek kadar 'akıllı' hale getirmek önemsiz değildir. Dolayısıyla, mümkün olan tek yol a) yalnızca yavaş (er) kod üretmek (örneğin HPC'deki bazı kullanım durumları için kabul edilemez) ve / veya programcıları kodu manuel olarak optimize etmeye zorlamaktır b) kuralları 'dumber' için izin vermek en uygun hale getirmek için derleyici - rota C standart tarafından alınır.
Maciej Piechotka

6

Optimizasyon seviyelerini değiştirirseniz, büyük bir takım zinciri parçasının (özellikle glibc) düzleşmediğini unutmayın. İnşa sistemi, çoğu aklı başında dağıtımda bu bölümler için -O tercihlerinizi yoksayacak şekilde ayarlanmıştır.

Basitçe söylemek gerekirse, bazı temel kütüphane ve işletim sistemi özellikleri, çoğu durumda daha hızlı olana değil, aslında söylediklerini yapan koda bağlıdır. Özellikle -fgcse-reload sonrası (-O3 tarafından etkinleştirilir) garip sorunlara neden olabilir.


5

Son 10 yıl içinde 1000'den fazla paket ile -O3 -march=nativeküresel olarak kullanılan birden fazla Gentoo sistemi kullanıyorum ve henüz bu efsanevi istikrar sorunlarından herhangi birine girmedim -O3. CPU yoğun uygulamaların (matematik / bilim uygulamaları gibi) karşılaştırmaları -O3, daha hızlı kod üretmek için sürekli olarak gösterilir , sonuçta olmasaydı anlamsız olurdu. Masaüstü uygulamalarının çoğunluğu için CFLAGS, IO'ya bağlı oldukları için zaten çok önemli değil, ancak CPU'ya bağlı olan sunucu tarafı şeyler için çok önemlidir.


3

-O3, yalnızca yazmaç kullanımı ile ilgili belirli varsayımlar, yığın çerçevelerinin nasıl etkileşime girdiği ve işlev yeniden girilmesinin doğru olduğu durumlarda güvenli olan bazı agresif optimizasyonlar kullanır ve bu varsayımların özellikle satır içi montaj olduğunda çekirdek gibi bazı kodlarda doğru olacağı garanti edilmez. kullanılır (çekirdeğin ve sürücü modüllerinin çok düşük bazı kısımlarında olduğu gibi).


Her zaman daha hızlı olmadığından bahsetmemek gerekirse, aslında kriterler -O2
bulup

0

Eğer (ve çoğu uygulama üzerinde -o3 ve diğer optimizasyonlar düğmeleri kullanarak paçayı mümkün olmakla birlikte olabilir hız iyileştirmeleri neden), böyle ince ayarlar (derleyici, binutils bu bina için gerekli çekirdek kendisi veya araç zinciri üzerinde kullanmakta tereddüt ediyorum, vb.).

Bir düşünün: Raid ve ext3 alt sistemlerinin% 5'lik bir performans kazancı, sistem çökmelerine veya potansiyel veri kaybı ve / veya bozulmasına değer mi?

Oynattığınız Quake bağlantı noktası veya DVD koleksiyonunuzu divx dosyalarına kopyalamak için kullandığınız ses / video kodekleri için tüm düğmeleri değiştirin. Muhtemelen bir gelişme göreceksiniz. Kaybedecek zamanınız ve kaybetmek için taşıyabileceğiniz veriler yoksa, çekirdeği karıştırmayın.


3
Değerli olup olmadığını, güvenli olup olmadığını veya neden yapmamamız gerektiğini sormuyorum, sorduğum şey aslında, gerçek uygulamada gerçekten böcek üretiyor mu ?, hiç oldu mu ?, hiç kanıtladı mı ..
uray
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.