2010-01-06 19 views
20

Büyük bir projeyi (GCC veya Linux çekirdeği) olabildiğince hızlı bir şekilde derlememiz gerektiğini varsayalım. Hyperthreading özelliğine sahip bir işlemci (Intel Core i7 demek), derleyiciyi hiper iş parçacığı ile daha hızlı çalıştırabilir veya devre dışı bırakabilir mi? Bunu test eden herhangi bir yayınlanmış kriter var mı?Kompresör performansında hiper iş parçacığının etkisi?

Hiper iş parçacığı anlayışım, her bir çekirdeğin iki (veya daha fazla işlem) yönergesini seçebilmesidir. Bu, genellikle fonksiyonel ünitelerin boşta kalması olasılığından dolayı çekirdeği daha verimli hale getirir. Ancak, önbellek gibi aynı çekirdek paylaşım kaynakları üzerinde çalışan ve birbiriyle etkileşime girebileceğinden, performans cezası potansiyeli vardır. Performans gerçekte artar veya artmaz iş yüküne bağlıdır.

Derleyici iş yükü için performans artar mı? Eğer öyleyse, ne kadar?

+0

Bu konuda yeni bir deneyimim yok, ancak derleme I/O-bağlı olma eğiliminde değil mi? – Ken

+0

"make -j N" ile oynayın ve farklı N için sistem kaynaklarını ölçün? –

+0

@Nikolai, Oynamak için hiper iş parçacıklı bir CPU'm olsaydı. Bunu soruyorum, bu yüzden satın almanın değerli olup olmadığını biliyorum. –

cevap

26

Derleme coreutils-8.4 Ubuntu 8.04 x86

Intel Atom HT ile 1.6 GHz etkin:

~/coreutils-8.4$ make clean > /dev/null 
~/coreutils-8.4$ time make > /dev/null 

real 2m33.375s 
user 2m22.873s 
sys  0m10.541s 
~/coreutils-8.4$ make clean > /dev/null 
~/coreutils-8.4$ time make -j2 > /dev/null 

real 1m54.707s 
user 3m26.121s 
sys  0m13.821s 
~/coreutils-8.4$ make clean > /dev/null 
~/coreutils-8.4$ time make > /dev/null 

real 2m33.372s 
user 2m22.753s 
sys  0m10.657s 
~/coreutils-8.4$ make clean > /dev/null 
~/coreutils-8.4$ time make -j2 > /dev/null 

real 1m54.851s 
user 3m26.145s 
sys  0m13.685s 
~/coreutils-8.4$ 

Yani Hyper Threading % 33 eşdeğerdir% 75, çalışma süresini azaltır Daha fazla işlem gücü. Bir kontrol deneyi yalnız make -j2 Ubuntu 8.04 x86 üzerinde coreutils-8.4 derleme için hızını artırmak olmadığını göstermek için olduğu burada

(ı. herşey önbellekte olmasını sağlamak için iki kez koştu) Ve

Tek -çekirdek Çekirdek 2 Quad 2.5 GHz VM (HT yok):

~/coreutils-8.4$ make clean > /dev/null 
~/coreutils-8.4$ time make > /dev/null 

real 0m44.453s 
user 0m38.870s 
sys  0m5.500s 
~/coreutils-8.4$ make clean > /dev/null 
~/coreutils-8.4$ time make -j2 > /dev/null 

real 0m45.131s 
user 0m40.450s 
sys  0m4.580s 
~/coreutils-8.4$ make clean > /dev/null 
~/coreutils-8.4$ time make > /dev/null 

real 0m44.621s 
user 0m39.090s 
sys  0m5.340s 
~/coreutils-8.4$ make clean > /dev/null 
~/coreutils-8.4$ time make -j2 > /dev/null 

real 0m45.165s 
user 0m40.390s 
sys  0m4.610s 
~/coreutils-8.4$ 
+0

Bu harika. Kontrol deneyi, bunun gerçekten bir fark yarattığını gösteriyor. Teşekkür ederim. –

+2

Bunu başarmak mümkün olduğunu farz ederek, HT ile devre dışı bırakılan Atom üzerinde tekrarlanan ölçümleri görmek isterdim. Ayrıca, bellek kullanımı ile ilgili bir not, Atom, özellikle -j2 durumunda, önbellekleri değiştirmeye veya bırakmaya başlayabileceğinden, güzel olurdu. – Eroen

+0

Sıralı Atom, Nehalem ya da Sandybridge ailesi CPU'larından ya da AMD Ryzen'den daha fazla eğitim seviyesi paralelliklerinden yararlanmada daha kötüdür. HT, Atom üzerinde bir ana CPU'dan daha fazla yardımcı olabilir.Ya da daha az yardımcı olabilir, çünkü ana işlemcili CPU'lar daha büyük önbelleklere ve daha fazla yürütme kaynağına (ve daha yüksek şube-yanlış tahmin cezalarına sahiptir ve HT, diğer iş parçacığının bir yanlış spekülasyondan kurtarılırken CPU'yu kullanmasına izin verir) sahiptir. Bu yüzden muhtemelen HT ana akım CPU'larda önemli ölçüde yardımcı olur, ancak oran oldukça farklı olabilir. –

0

Derleyicinin çok iş parçacıklı olması için yazılmasının gerekip gerekmediğine bağlıdır. Eğer öyleyse, o zaman kesinlikle hiper iş parçacığı bir şeyleri hızlandırır, o zamandan beri OS, derleyicinin iş parçacıklarının farklı bölümlerini farklı çekirdekler üzerine programlayabilir. Ken ile, derlemelerin genel olarak yoğun işlemden daha fazla I/O bağlı olduğu konusunda hemfikirim, bu yüzden hızlı bir sabit sürücüye sahip olmak, 100'lerin çekirdekleriyle hızlı bir işlemciden daha fazla bir zorunluluk olurdu.

+0

Derleyici, make -j N (N mantıksal işlemci sayısıdır) ile çağrılırsa nasıl olur? Farklı derleyici süreçlerinin herhangi bir veri paylaşmadığından, aslında performansı düşürdüğünden endişe duyuyorum. –

+2

1) Derleme (her durumda Linux'ta), yeterli fiziksel bellek varsa, her zaman io-bağlı olmayan yapılabilir. 2) Popüler yapı sistemleri, birçok derleyici işlemlerini paralel olarak çalıştırabilir ve çok iş parçacıklı derleyicileri sorun oluşturmaz. (daha az bağlayıcılar için, ancak) – Eroen

İlgili konular