2012-09-23 19 views
5

Birden çok ortam, özellikle linux/gcc ve windows/msvc altında oluşturması gereken büyük bir proje üzerinde çalışıyorum. Yapıyı hızlandırmak için önceden derlenmiş üstbilgileri kullanırız.gcc'de (ancak görsel stüdyo ile büyük hızda) önceden derlenmiş başlıklar ile hızlandırma yok

Windows uygulaması çok verimli: dört çekirdekli hiper iş parçacıklı i7 yapım süremde 9 dakikadan 1,5 dakikaya iner. Ancak, önceden derlenmiş üstbilgileri kullanmanın performansı artırmadığı görülüyor: her iki durumda da, aynı bilgisayardaki sanal bir kutuda 22 dakika veya gerçek bir sunucuda yaklaşık 40 dakika.

Açıkçası, bir şekilde yanlış bir şey olduğunu ve önceden derlenmiş üstbilginin tekmelemediğini düşünüyorum. Ancak ne olduğunu bulamıyorum.

Makefillerimiz CMake tarafından üretilmiştir, bu yüzden üstbilgi ve kullanılan nesne dosyalarını derlemek için kullanılan kodu yapıştırın.

başlık oluşturma:

/usr/bin/c++ -O3 -DNDEBUG --no-warnings "-I/mnt/code/server a/src/game" 
"-I/mnt/code/server a/src/game/vmap" "-I/mnt/code/server a/dep/include/g3dlite" 
"-I/mnt/code/server a/dep/include" "-I/mnt/code/server a/src/shared" 
"-I/mnt/code/server a/src/framework" "-I/mnt/code/server a/buildlinux" 
"-I/mnt/code/server a/buildlinux/src/shared" -I/usr/include/mysql 
"-I/mnt/code/server a/dep/acelite" -DDO_MYSQL -DHAVE_CONFIG_H 
-DVERSION=\"0.6.1\" -DSYSCONFDIR=\"../etc/\" -D_RELEASE -D_NDEBUG -x c++-header 
-o "/mnt/code/server a/buildlinux/src/game/pchdef.h.gch" "/mnt/code/server 
a/src/game/pchdef.h" 

bir nesne dosyası derleniyor:

/usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) "-I/mnt/code/server 
a/buildlinux/src/game" -include pchdef.h -Winvalid-pch -o 
CMakeFiles/game.dir/AccountMgr.cpp.o -c "/mnt/code/server 
a/src/game/AccountMgr.cpp" 

Insights takdir edilmektedir, bunlar doğrudan doğruya değil yukarıdaki snippet'lere kaynaklanıyor olsa bile.

+1

, buldum yapı aşağı bile yavaşlatır GCC ile derlenmiş başlık kullanarak bu. CLANG bir süre önce daha iyiydi ama şimdi precompiled üstbilgileri kullanarak değersiz görünüyor, MSVC'den yararlanan tek derleyici olarak kalıyor. – Lothar

cevap

1

Eğer GCC derlenmiş başlık kullanırken dikkat etmek gereken şeylerin bir çift vardır. Her şeyden önce, önceden derlenmiş başlık, cpp dosyaları derlendikçe aynı argümanlarla oluşturulmalıdır. Ayrıca, önceden derlenmiş üstbilgiyi fiilen dahil ettiğinizi varsayalım.

-H bayrağıyla derlemeye çalışın, bu dosyalar dahil edilmek üzere çıktısını alır. Pchdef dosyasının belirtildiğini kontrol edin ve diğer dosyaların ayrıştırıldığını görün. Gcc'nin geçersiz PCH dosyaları hakkında şikayet etmesi için -Winvalid-pch'u kullanmayı düşünün.

Sen şanslısın
+0

Komutlara bakarsanız, zaten '-Winvalid-pch' kullandığımı göreceksiniz. Ayrıca, başlık dosyasını 'AccountMgr.cpp' içine dahil etmiyorum, ancak başlık' -include' seçeneğiyle birlikte gelir. '-H' işaretini kullanmayı ve rapor vermeyi deneyeceğim. – Norswap

+0

"-H" bayrağıyla ben koştum, önceden derlenmiş üstbilgiyi kesinlikle görür ve kullanır. Gizem kalınlaşıyor. – Norswap

+0

"kullanımlar" ile, görüntülenen dosyalar listesinin, derlenmiş dosyalar dahil edilmediğini gösteren dosyaların gösterildiğini mi kastediyorsunuz? Yani -Hiçin bir kez -Hiçin bir kez olmadan çalışmayı dene. Çıktı sonra, aynı ya da PCH alakalı bir şey içermez (veya AccountMgr.cpp içeren bir sürü kullanmıyor) ve sadece PCH'yi kullanarak zaman harcamak ya da yeni bir ipucu ise. – dseifert

İlgili konular