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.
Ö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.
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.
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!