Optimizasyon çabalarımızla düzenli bir şekilde yavaşlayan orta boyutlu bir C ++ kod tabanı (10Mloc) üzerinde çalışıyoruz .
Bu kod tabanı, onları çalıştırmak için birleştirdiğimiz bir dizi kütüphanedir. Bu kütüphanelerin nasıl iletişim kurduğuna dair genel çerçeve geliştirildiğinde, performans üzerinde biraz duruldu ve daha sonra, daha fazla bölüm eklendiğinde, genel çerçeve fazla değişmedi. Optimizasyon gerektiğinde ve donanımımız geliştikçe yapıldı. Bu, pahalı erken kararı ancak daha sonra belirgin hale getirdi. Şimdi, kod tabanının büyük bölümlerinin yeniden yazılmasını gerektirecekleri için daha fazla optimizasyonun çok daha pahalı olduğu bir noktadayız. Prensipte kodun çok daha hızlı çalışabilmesi gerektiğini bildiğimiz için kendimizi istenmeyen bir yerel asgari seviyeye yaklaşırken buluyoruz.
Kolay optimizasyon fırsatlarıyla kolayca karıştırılmayan, küresel olarak optimum performans gösteren bir çözüme doğru bir kod tabanının gelişimini neyin üstleneceğine karar vermeye yardımcı olan başarılı metodolojiler var mı?
DÜZENLE
Şu anda nasıl profil oluşturduğumuzu cevaplamak için:
Gerçekten bu kodun nasıl kullanılabileceğine dair iki farklı senaryo var, her ikisi de utanç verici bir şekilde paralel. Profilleme, hem büyük bir girdi örneği üzerinde ortalama duvar saati süresi hem de daha ayrıntılı çalışmalarla (talimat maliyetleri, şube yanlış tahminleri ve önbellek sorunları) yapılır. Sadece son derece homojen makinelerimizde (birkaç bin özdeş makineden oluşan bir küme) çalıştığımız için bu iyi çalışıyor. Genellikle tüm makinelerimizi meşgul ettiğimiz için çoğu zaman daha hızlı çalışır, ek yeni şeylere bakabileceğimiz anlamına gelir. Mesele şu ki, yeni girdi varyasyonları ortaya çıktığında, diğer kullanım durumları için en belirgin mikro verimsizlikleri kaldırdığımızdan, muhtemelen "en iyi çalışan" senaryoların sayısını daralttığımız için geç gelen bir ceza alabilirler.
sloc
. Burada "orta boy" olarak adlandırdım çünkü burada neyin "büyük" olduğu hakkında hiçbir fikrim yok.