Acovea GCC C ve C ++ derleyicileri programları derlemek için "en iyi" seçeneği bulmak için bir genetik algoritma uygular.
ACOVEA (Evrimsel Algoritma aracılığıyla Derleyici Seçenekleri Analizi) GNU Compiler Collection (GCC) C ve C ++ derleyicileri programları derlemek için "en iyi" seçenekleri bulmak için genetik algoritma uygular.
"En iyi", bu bağlamda, belirli bir kaynak kodu hızlı yürütülebilir program üretmek bu seçenekler olarak tanımlanmaktadır. Acovea diğer programlama dilleri ve non-GCC derleyicileri test etmek için uzatılabilir C ++ çerçevedir.
Ben profil amaç benzer bir optimizasyon aracı olarak Acovea öngörülüyor. Geleneksel fonksiyon seviyesi profilleme bir programın performansı en etkili algoritmalar tanımlar; Acovea sonra en hızlı kod üretmek derleyici bayrakları ve seçenekleri bulmak için bu algoritmalar uygulanır.
Acovea da kötümser etkileşimleri ve derleyici güvenilirliğini test etmek için bayrakların kombinasyonları test etmek için yararlıdır.
Modern yazılım anlamak ve geleneksel yollarla doğrulamak zordur. Kod satırları milyonlarca uygulamaları, basit bir açıklama ya da kaba kuvvet soruşturma meydan okuyan, karmaşık etkileşimleri içeren üretirler.
Yazılım karmaşıklığı verilen gerçekçi olmayan bir önermeyi - test bir güdümlü, deterministik yaklaşım eylemlerin her olası birleşimini tasavvur insan test dayanır. Ancak, bu karmaşıklığına rağmen, modern, büyük ölçekli yazılım hakkında önemli sorularınızı gerekir.
Önemli sorular Ne tür? GNU Compiler Collection düşünün. Ben, farklı derleyiciler tarafından sağlanan sayısız seçenekler makaleleri kriter kod üretimi, zorluklarla dolu bir görev yazın. Benim kriterler herhangi bir anlam var, ben belirli bir uygulama için hızlı kod üreten seçeneklerin hangi kombinasyonu bilmeniz gerekir.
Seçenekler "en iyi" seti bulmak GCC belgelerin kapsamı ve KİK geliştirici topluluğunun geleneksel bilgelik verilen, basit bir görev gibi geliyor. Ah, sadece bu kadar kolay olsaydı! GCC belgeleri, geniş iken, aynı zamanda dürüst kesin olduğunu.
Ben belgelerin bu tarz takdir; kendi ürünlerinin "kalite" konusunda mutlak beyanda birçok ticari satıcıları, aksine GCC en documenters kod üretimi nasıl değiştirdiğini çeşitli seçenekler belirsizlikleri itiraf. Nitekim, kod üretimi derlenmiş olan uygulama türüne ve hedef platform üzerinde tamamen bağımlıdır. Tek kaynak kodu için hızlı yürütülebilir kod üreten bir seçenek başka bir program performansı için zararlı olabilir.
Ben yeni bir makale yayımlamak zaman "Geleneksel bilgelik" benim doğuştan geldi. Kibar kaba için ısrarlı arasında değişen bu e-postalar, hızlı kod üretmek için çelişkili önerileri içermektedir.
Vakaların büyük çoğunluğunda bu tür anekdot iddialar daha sık değil, onların geçerlilik herhangi bir resmi delilsiz ve önerilen "iyileştirme" etkisiz ya da zararlıdır. Tüm bu seçenekler GCC program kodu üreten birlikte nasıl çalıştığını tam olarak bilir - Bu dahil --myself hiç kimse gittikçe belirgin hale gelmiştir.
Ben Optimizasyonu Kutsal Kase aramak - ama optimizasyon tam olarak nedir? Sorunu anlamak bir çözüm bulma konusunda ilk adımdır.
Optimizasyon kaynak kodundan "en iyi" makine kodu üretmek için çalışır. "En iyi" farklı uygulamalar için farklı anlamına gelir; Bir bilimsel uygulama hızlı ve doğru sonuçları ile ilgili ise bir bilgi veritabanı kürek topakları; bir gömülü sistem için ilk endişe kod boyutu olabilir.
Ve küçük bir kod hızlı veya hızlı kod doğru oldukça mümkündür. Optimizasyon donanım ve yazılım konfigürasyonları çeşitliliği göz önüne alındığında, çok kesin bir bilim olmaktan uzaktır.
Bir optimizasyon algoritması bir döngü değişmez, ya da küresel ortak alt ifadeleri ortadan kaldırmak için bütün bir programın incelenmesi gibi karmaşık kaldırma gibi basit olabilir. Birçok optimizasyonlar programcı verimliliği için temel ayrıntıları değiştirerek ederken aynı sonucu üreten, daha verimli bir forma ne yazdı değiştirmek; gibi özel talimat setleri gibi altta yatan belirli donanım özelliklerini kullanan öteki "optimizasyonlar" üretmek kodu.
Bellek mimarileri, boru hatları, içi ve dışı çip önbelleklerini - tüm üst düzey dil kullanarak programcılar için açık olmayan yöntemlerle kod performansını etkileyebilir. Aslında, daha fazla önbellek isabetsizlik neden büyük kod böylece aşağılayıcı performans yaratabilir hızlı kod üretmek için görünebilir bir optimizasyon.
Hatta en iyi el ayarlı C kodu yorumlama alanlarını içeren; C tablolar ve makine talimatları arasında mutlak bir-bir yazışma var. Neredeyse kaynak kodunun herhangi dizisi farklı derlenmiş olabilir - ama işlevsel olarak eşdeğer - Makine talimat farklı boyutlarda ve performans özellikleri ile akışları.
Daha hızlı bir program üretmek olabilir işlev kodu kendisi ile ilgili bir işlevine bir çağrı yerine, aynı zamanda programın boyutunu artırabilir: işlevlerini Inlining bu olayların klasik bir örneğidir. Artan Program boyutu, sırayla, böylece nedeniyle önbellek isabetsizlik için bir program yavaşlama, yüksek hızlı önbellek içinde oturan bir algoritma engelleyebilir.
Çakal sözcüğün benim kullanımına dikkat edin "may" - küçük fonksiyonları Inlining bazen diğer optimizasyon algoritmalar daha hızlı ve daha küçük kod üreten, yerel koşullara kod geliştirmek için bir şans verir.
Optimizasyon basit ya da açık değildir ve algoritmaların kombinasyonları beklenmeyen sonuçlara yol açabilir. Hangi soruya bana geri getiriyor: herhangi bir uygulama için, en etkili optimizasyon seçenekleri nelerdir?
Bu Sürümdeki Yenilikler:
· Özgür olmayan bir lisans küçük değişiklikler.
· Destek libcoyotl ve libevocosm en son sürümleri için eklenmiştir.
Yazılım detaylar:
Versiyon: 1.0.1
Qayıt: 3 Jun 15
Lisans: Ücretsiz
Popülerlik: 176
Yorum Bulunamadı