Kim daha hızlı kod yazar, insanlar mı yoksa derleyiciler mi? Cevaplarınız yanlış olabilir

Yazar | Jussi

Çevirmen | Ay gibi ağlamak

Üretildi | CSDN (CSDNnews)

Modern optimizasyon derleyicileri gerçekten harika. Berbat kodların çok hızlı, çoğu insanın elle yazdığından daha hızlı çalışmasını sağlamak için binlerce tekniği var. Bu, bazı kişilerin program optimizasyonunun derleyiciye bırakılabileceğini iddia etmesine neden olur, çünkü bu alanda daha iyi bir iş çıkarırlar. Bu genellikle diğer aşırı uçtan muhalefete neden olur.Elle herhangi bir derleyiciden daha hızlı kod yazabileceğinizi söylerler, bu da derleyiciyi performans açısından işe yaramaz hale getirir.

Bir dereceye kadar her iki görüş de doğrudur. Öte yandan hepsi yanılıyordu.

Bunun nasıl yapılacağını anlamak için bu soruyu iki kısma ayıralım.

Herhangi bir program için, insanlar bir derleyiciden daha hızlı kod yazabilir

Bu problemin resmen kanıtlanması kolaydır. Herhangi bir el yazısı sürümünden daha hızlı çalışan, belirli bir programlama dili L ile yazılmış bir programınız olduğunu varsayalım. İnsanlar programın assembly çıktısını görüntüleyebilir ve daha sonra C dilinde eşdeğer bir kaynak kodu sürümünü doğrudan yazabilir. Genellikle bunu yaparken, el yazısı sürümü hızlandırmak için ekleyebileceğiniz bazı özel optimizasyonlar bulacaksınız.

Derleyicinin çıktısı en iyisi olsa bile (örneğin, hiper optimizasyon), çıktıyı satır içi derleme olarak kendi programınıza kopyalayarak yine de eşleştirilebilir. Bu nedenle, insanların herhangi bir program için her zaman daha hızlı olduğunu kanıtladık.

İnsanların her program için bir derleyiciden daha hızlı kod yazması imkansızdır

Örnek olarak Firefox'u ele alalım. Önceki bölümlerden, karmaşık derleyici optimizasyonlarından kaçınabileceğimizi ve daha iyi performans elde etmek için bunu doğrudan C dilinde veya eşdeğer bir dilde yeniden yazabileceğimizi biliyoruz. Dezavantajı, görev tamamlanmadan önce bunun geçersiz hale gelebilmesidir.

İnsan hayatı sınırlıdır. Klavyeyi kırana kadar klavyedeki bir tuşa basabilirler. Firefox kodunu, C'de mevcut sürümden daha hızlı çalışmasını sağlamak için yeniden yazın ve tüm optimizasyonları etkinleştirin.

Bunu bir numara ile yapabilseniz bile, tarayıcıyı yeniden yazma sürecinde tarayıcıdaki gereksinimler değişecektir. Daha sonra eklenen tüm yeni özellikleri eklemediğiniz sürece, sonuç faydasız olacaktır.

Yapılabilse bile, optimize eden derleyici daha iyi hale gelmeye devam edecektir, bu nedenle tüm kod tabanını düzenli aralıklarla gezmeniz ve güncel tutmak için aynı optimizasyonları manuel olarak eklemeniz gerekir. Bütün bunlar teoride yapılabilir, ancak pratikte tamamen imkansızdır.

Bu soru pek iyi sorulmadı

Derleyiciye veya daha hızlı kod yazabilen insanlara sormak, hangisinin daha mavi, deniz mi yoksa gökyüzü mü olduğunu sormak gibidir. Elbette, bu konuyu Twitter'da tartışmak için birkaç yıl harcayabilirsiniz, ancak muhtemelen ilerleme yok, anlamsız. Şu soruyu sormanız önerilir: "Mevcut ihtiyaçlarıma, becerilerime ve kaynaklarıma dayalı olarak, bu belirli programı manuel olarak optimize etmeli miyim yoksa derleyiciye mi bırakmalıyım?".

Bunu yaparsanız, şunları bulacaksınız: Varsayılan olarak, en iyi sonuçları almak için çalışan uygulamayı analiz ederek bulunan darboğazları manuel olarak ele almak için derleyiciye güvenebilirsiniz.

Not: Optimize edilmemiş C de çok yavaştır

Bazı insanlar, C dilinde kod yazdıklarında, bunun temeldeki derlemeye "çok yakın" olduğunu düşünür, bu nedenle derleyici optimizasyonları pek yardımcı olmaz. Bu durum birkaç yıldır (belki on yıllardır) devam ediyor. Özellikle for döngüsü iç içe senaryoda, optimizasyon yapılmaması ve -O2 açılması arasındaki performans farkı çok farklıdır.

İnsanlar, Guopan'ın derleyici için optimize edilmiş sürümünden başka dillerde daha hızlı kod yazabileceklerini söylediklerinde, aslında durum böyle değil. % 100 elle yazılmış ASM olmadıkça, bunu söylemezler. Bunun yerine, "Onu uygulamak ve farklı bir sözdiziminde yazmak için herhangi bir algoritmayı kullanabilirim. Her iki algoritma da ilgili optimizasyon derleyicileriyle çalıştırıldığında, ortaya çıkan program daha hızlı çalışacaktır." Dediler.

Bu durum, özellikle SIMD (Tek Yönerge Çoklu Veri Akışı) kodu için ortaya çıkabilir.

Bu makale bir CSDN çeviri makalesidir, lütfen yeniden basımın kaynağını belirtin.

Yeni madalyalar, yeni ödüller, yüksek trafik ve daha fazla avantaj sizi bekliyor ~

Evrensel programlama çağı yaklaşırken, programcıların yerini yapay zeka mı alacak?

Programcının 12 saatlik şoku: "" bir çevrimiçi kazaya neden

AI görüntüsü eski fotoğrafların akıllıca onarımı, etki benim için harika! | Kod ile

10.975 Go dil geliştiricisine anket yaptık ve bu bulgulara sahibiz!

Kıdemli mimar size şunu söylüyor: Kodu kendi başınıza yazmak nasıl kolay olabilir ve başkalarının görmesi acı verici değildir

Cep telefonlarında soruları otomatik olarak yanıtlamak için Python'u kullanın. Bu milyon cevaplı oyunu kimse oynayamaz!

Uzaktan nasıl verimli bir şekilde konuşlandırılır? Fabric yardım etmek için burada
önceki
Çin'de bir sonraki "para toplama dönemi" geliyor: Borç içinde olduğunuzda ve akrabalarınız sizi ihmal ettiğinde, para kazanmanın "Yahudi" yolunu denemenizi öneririm
Sonraki
Güçlü hisse senetlerinin işareti: "Güzellik Omuz" formu Bir kez elinde tutulan sağlam bir hisse senedi ile karşılaştığınızda, ana gücün toplandığı ve hisse senedi fiyatının yakında yükseleceği anlamı
Çin borsası: PetroChina açıkça para kazanıyor, ancak hisse fiyatı neden yükselmedi Bu aşamada 100.000 satın almak 4.6 yuan. 5 yıl tuttuktan sonra para kazanabilir mi?
Kısa vadeli yönetim kurulu ustaları nadiren konuşurlar: size sıcak ve güçlü lider hisse senetlerini ele geçirmeyi, piyasa görünümünü ve tüm karı tam olarak anlamayı öğretmenin üç yolu
A paylaşımları: Bu uzun alt gölge K çizgisi neyi temsil ediyor?
Çin borsası: Hisse senetleriniz aniden limitine ulaşırsa, onu tutmalı mı yoksa satmalısınız mı? Anahtar, "sonsuz günlük sınır" veya "yüksek hacimli günlük sınır" dır
Çin borsası: Elinizde 200.000 yedek nakit varsa bu aşamada 3 yuan civarında menkul kıymetler veya düşük fiyatlı hisse senetleri satın almalısınız Boğa piyasasında hangisi daha karlı?
Morning Reading | 1 Mayıs uçak bileti ve otel rezervasyonları fırladı, misilleme turizmi mi geliyor?
A hisselerini yükseltmenin anahtarı bu "5 özelliğe" bağlıdır. "Devrim noktası satın alma yöntemini" aklınızda bulundurun ve boğa piyasasının başlangıç noktasında satın alın.
Ana trend | 1013 yuan gönder! Çin'den Ping An'ı yükseltmek için 1,6 milyar yuan ana fon
Kiralık arabadaki yüksek hızlı motor yanar ve çevrimdışı mağaza kiracının yaklaşık 10.000 bakım maliyetini üstlenmesini gerektirir.
Kayıt sırasında, bu bir kolej yükseltme paketidir + iki konu muaftır.Ücret tahsil edildikten sonra, sözleşme iptal edilir + 1.000 yuan düşülür
Chongqing, yeni koronavirüs nükleik asit test kurumları için ilk randevuların listesini yayınladı | Southwest Hastanesi 1 Mayıs öğleden sonra ayakta tedavi edilmeyecek
To Top