MSVC C++ Modüllerinde Derleme Süresi Testi: Otomatik Modülerleştirme
Gerçek bir VS oyun motoru çözümünde otomatik modülerleştirme ile MSVC C++ modül derleme performansı stratejileri karşılaştırıldı.
Bir geliştirici, gerçek bir Visual Studio çözümünü (gizli bir oyun motoru) otomatik olarak modülerleştiren bir Python betiği yazarak MSVC'de C++ modüllerinin derleme performansına etkisini ölçtü. Header-tabanlı, partition tabanlı ve tam submodül yaklaşımları proje bazında karşılaştırıldı; 12600 işlemcili bir sistemde debug konfigürasyonuyla tekrarlı ölçümler alındı.
Sonuçlar, tüm kod tabanını modülerleştirmenin en iyi sonucu vermediğini gösteriyor. En iyi performans, yalnızca harici kütüphaneler (Boost, PhysX, ImGui, spdlog vb.) ve ortak kütüphanenin modülerleştirildiği, geri kalanın header olarak bırakıldığı ara noktada elde edildi. Tam modülerleştirme bazı durumlarda header+PCH'den daha yavaş kaldı; MSVC partition'lar ise ayrı modüllere göre daha düşük performans gösterdi çünkü DAG'de ekstra bir düğüm gerektiriyor.
Detaylı zamanlamalar, .cpp dosyalarının modül kullanıldığında çok daha hızlı derlendiğini (bazı durumlarda 4x'e kadar) ama .ixx bağımlılık taraması ve derlemesinin (SetModuleDependencies, MultiToolTask) bu kazancı büyük ölçüde götürdüğünü gösteriyor. MSBuild, cpp derlemesine geçmeden önce tüm ixx dosyalarının bitmesini bekliyor, bu da paralelliği sınırlıyor. Ayrıca modül içeren kodda Intellisense, header'lara göre çok daha kırılgan davranıyor ve tek bir hata tüm projede kırmızı dalgalı çizgilere yol açabiliyor.
Mühendisler için çıkarım net: modülleri her yere yaymak yerine seçici uygulamak, derleme sürelerinde daha öngörülebilir ve genellikle daha iyi kazanımlar sağlıyor; ancak araç zinciri (özellikle MSBuild'in ixx işleme mantığı) hâlâ olgunlaşma aşamasında.
Bu sentez, kaynağından yapay zeka tarafından üretildi; insan editör ya da elle onay adımı yoktur. Nasıl çalışıyoruz