internet pencereler Android
Genişletmek

Hiper iş parçacığı teknolojisi. Hyper Threading hakkında bir kez daha

Hyper-Threading teknolojisi (HT, hyperthreading) ilk olarak 15 yıl önce ortaya çıktı - 2002'de Pentium 4 ve Xeon işlemcilerde ve o zamandan beri Intel işlemcilerde (Core i serisinde, bazı Atomlarda ve yakın zamanda Pentium'da) ortaya çıktı. sonra ortadan kayboldu (desteği Core 2 Duo ve Quad hatlarında değildi). Ve bu süre zarfında efsanevi özellikler edindi; varlığının işlemci performansını neredeyse iki katına çıkardığını ve zayıf i3'leri güçlü i5'lere dönüştürdüğünü söylüyorlar. Aynı zamanda diğerleri HT'nin yaygın bir pazarlama taktiği olduğunu ve pek işe yaramadığını söylüyor. Gerçek şu ki, her zamanki gibi ortada - bazı yerlerde bunun bir anlamı var, ancak kesinlikle iki kat bir artış beklememelisiniz.

Teknolojinin teknik açıklaması

Intel web sitesinde verilen tanımla başlayalım:

Intel® Hyper-Threading Teknolojisi (Intel® HT), her çekirdekte birden fazla iş parçacığının çalışmasına izin vererek işlemci kaynaklarının daha verimli kullanılmasını sağlar. Performans açısından bu teknoloji, işlemcilerin verimini artırarak çok iş parçacıklı uygulamaların genel performansını artırır.

Genel olarak, hiçbir şeyin net olmadığı açıktır - sadece genel ifadeler, ancak teknolojiyi kısaca açıklarlar - HT, bir fiziksel çekirdeğin aynı anda birkaç (genellikle iki) mantıksal iş parçacığını işlemesine izin verir. Ama nasıl? Hyperthreading'i destekleyen işlemci:

  • birden fazla çalışan iş parçacığı hakkındaki bilgileri aynı anda saklayabilir;
  • bir kayıt kümesi (yani işlemci içindeki hızlı bellek blokları) ve bir kesme denetleyicisi (yani, anında müdahale gerektiren herhangi bir olayın meydana gelmesi için istekleri sıralı olarak işleme yeteneğinden sorumlu yerleşik bir işlemci birimi) içerir. her mantıksal CPU için farklı cihazlar).
Basit bir örneğe bakalım:

Diyelim ki işlemcinin iki görevi var. İşlemcinin bir çekirdeği varsa, bunları sırayla, ikiyse iki çekirdekte paralel olarak yürütecek ve her iki görevin yürütme süresi, daha ağır görev için harcanan süreye eşit olacaktır. Peki ya işlemci tek çekirdekliyse ancak hiper iş parçacığını destekliyorsa? Yukarıdaki resimde görebileceğiniz gibi, bir görevi gerçekleştirirken işlemci %100 meşgul değildir - bu görevde bazı işlemci bloklarına gerek yoktur, bir yerlerde dal tahmin modülü bir hata yapmaktadır (bu, bir hatanın olup olmayacağını tahmin etmek için gereklidir). koşullu dallanma programda yürütülecektir), bir yerde önbellek erişim hatası vardır - genel olarak, bir görevi yürütürken işlemci nadiren% 70'ten fazla meşgul olur. Ve HT teknolojisi boş işlemci bloklarına ikinci bir görevi "itiyor" ve iki görevin aynı anda tek bir çekirdekte işlendiği ortaya çıkıyor. Bununla birlikte, performansı iki katına çıkarmak bariz nedenlerden dolayı gerçekleşmez - çoğu zaman iki görevin işlemcide aynı bilgi işlem birimine ihtiyaç duyduğu ortaya çıkar ve sonra basit bir görev görürüz: bir görev işlenirken ikincisinin yürütülmesi basitçe şu anda durur (mavi kareler - ilk görev, yeşil - ikinci, kırmızı - işlemcide aynı bloğa erişen görevler):

Sonuç olarak, HT'li bir işlemcinin iki görev için harcadığı sürenin, en ağır görevi hesaplamak için gereken süreden fazla, ancak her iki görevi sırayla değerlendirmek için gereken süreden daha az olduğu ortaya çıkıyor.

Teknolojinin artıları ve eksileri

HT destekli işlemci kalıbının HT içermeyen işlemci kalıbından fiziksel olarak ortalama %5 daha büyük olduğu (bu, ek yazmaç bloklarının ve kesme denetleyicilerinin kapladığı miktardır) ve HT desteğinin, işlemciyi %90-95 oranında artırdıktan sonra, HT'siz %70 ile karşılaştırıldığında artışın en iyi ihtimalle %20-30 olacağını görüyoruz - rakam oldukça büyük.

Ancak her şey o kadar iyi değil: HT'den hiçbir performans artışı olmuyor ve hatta HT işlemcinin performansını kötüleştiriyor. Bu birçok nedenden dolayı olur:

  • Önbellek eksikliği. Örneğin, modern dört çekirdekli i5'lerde 6 MB L3 önbellek bulunur (çekirdek başına 1,5 MB). HT'li dört çekirdekli i7'lerde önbellek zaten 8 MB'dir, ancak 8 mantıksal çekirdek olduğundan çekirdek başına yalnızca 1 MB alıyoruz - hesaplamalar sırasında bazı programlar bu hacimden yeterli olmayabilir, bu da düşüşe neden olur verim.
  • Yazılım optimizasyonu eksikliği. En temel sorun, programların mantıksal çekirdekleri fiziksel olarak kabul etmesidir; bu nedenle, görevleri bir çekirdek üzerinde paralel olarak yürütürken, görevlerin aynı hesaplama birimine erişmesi nedeniyle sıklıkla gecikmeler meydana gelir ve bu da sonuçta HT'den elde edilen performans kazancını sıfıra indirir.
  • Veri bağımlılığı. Önceki noktadan hareketle - bir görevi tamamlamak için diğerinin sonucu gereklidir, ancak henüz tamamlanmamıştır. Ve yine kesinti, CPU yükünde azalma ve HT'de küçük bir artışla karşılaşıyoruz.
Hyperthreading ile çalışabilen programlar

Birçoğu var, çünkü HT hesaplamaları için bu cennetten gelen mannadır - ısı dağılımı pratikte artmaz, işlemci çok fazla büyümez ve uygun optimizasyonla% 30'a kadar bir artış elde edebilirsiniz. Bu nedenle, arşivleyicilerde (WinRar), 2D/3D modelleme programlarında (3ds Max, Maya), fotoğraf ve video işleme programlarında (Sony Vegas, Photoshop,) yükü paralelleştirmenin kolay olduğu programlarda desteği hızlı bir şekilde uygulandı. Corel çizgisi) .

Hyperthreading ile iyi çalışmayan programlar

Geleneksel olarak, bu oyunların çoğunluğudur - genellikle yetkin bir şekilde paralelleştirilmesi zordur, bu nedenle genellikle yüksek frekanslardaki dört fiziksel çekirdek (i5 K serisi) oyunlar için fazlasıyla yeterlidir, paralelleştirme i7'deki 8 mantıksal çekirdekle ortaya çıkar imkansız bir görev. Bununla birlikte, arka plan işlemlerinin de olduğunu ve işlemci HT'yi desteklemiyorsa, bunların işlenmesinin fiziksel çekirdeklere düştüğünü ve bunun da oyunu yavaşlatabileceğini dikkate almakta fayda var. Burada HT'li i7 kazanıyor - tüm arka plan görevleri geleneksel olarak daha düşük önceliğe sahiptir, bu nedenle oyunun bir fiziksel çekirdeğinde ve bir arka plan görevinde aynı anda çalıştırıldığında, oyun artan öncelik alacaktır ve arka plan görevi çekirdeklerin "dikkatini dağıtmayacaktır" oyunla meşgul - bu yüzden oyunları yayınlamak veya kaydetmek için hiper iş parçacıklı bir i7 almak daha iyidir.

Sonuçlar

Belki de burada tek bir soru kaldı - HT'li işlemcileri almak mantıklı mı değil mi? Beş programı aynı anda açık tutmayı ve aynı anda oyun oynamayı seviyorsanız veya fotoğraf işleme, video veya modelleme ile uğraşıyorsanız - evet, elbette almaya değer. Ağır bir programı başlatmadan önce diğerlerini kapatmaya alışkınsanız ve işleme veya modellemeyle uğraşmıyorsanız, HT'li bir işlemcinin işinize yaramaz.

15.03.2013

Hyper-Threading teknolojisi Intel işlemcilerde 10 yıldan fazla bir süre önce ortaya çıktı, söylemesi korkutucu. Ve şu anda Core işlemcilerin önemli bir unsurudur. Ancak oyunlarda HT'ye ihtiyaç olup olmadığı sorusu hala tam olarak net değil. Oyuncuların Core i7'ye mi ihtiyacı olduğunu yoksa Core i5'in mi daha iyi olduğunu anlamak için bir test yapmaya karar verdik. Ayrıca Core i3'ün Pentium'dan ne kadar daha iyi olduğunu da öğrenin.


Intel tarafından geliştirilen ve unutulmaz Pentium 4'ten başlayarak yalnızca şirketin işlemcilerinde kullanılan Hyper-Threading Teknolojisi, şu anda olağan kabul edilen bir şey. Mevcut ve önceki nesillerin önemli sayıda işlemcisi bununla donatılmıştır. Yakın gelecekte kullanılacaktır.

Ve Hyper-Threading teknolojisinin faydalı olduğunu ve performans üzerinde olumlu bir etkisi olduğunu kabul etmek gerekir, aksi takdirde Intel, işlemcilerini seri içinde konumlandırmak için bunu kullanmazdı. Ve ikincil bir unsur olarak değil, en önemlisi olmasa da en önemlilerinden biri. Neden bahsettiğimizi netleştirmek için Intel işlemcilerin segmentasyon prensibini değerlendirmeyi kolaylaştıran bir tablo hazırladık.


Gördüğünüz gibi Pentium ile Core i3 arasında ve ayrıca Core i5 ile Core i7 arasında çok az fark var. Aslında i3 ve i7 modelleri Pentium ve i5'ten yalnızca çekirdek başına üçüncü düzey önbellek boyutunda farklılık gösterir (elbette saat frekansını saymaz). İlk çift 1,5 megabayt, ikinci çift ise 2 megabayttır. Önbellek boyutundaki fark çok küçük olduğundan bu fark işlemcilerin performansını temelden etkileyemez. Bu nedenle Core i3 ve Core i7, bu işlemcilerin sırasıyla Pentium ve Core i5'e göre performans avantajına sahip olmasını sağlayan ana unsur olan Hyper-Threading teknolojisi için destek aldı.

Sonuç olarak, biraz daha büyük bir önbellek ve Hyper-Threading desteği, işlemciler için önemli ölçüde daha yüksek fiyatlara olanak tanıyacak. Örneğin, Pentium serisinin işlemcileri (yaklaşık 10 bin tenge), Core i3'ten (yaklaşık 20 bin tenge) yaklaşık iki kat daha ucuzdur ve bu, fiziksel olarak donanım düzeyinde kesinlikle aynı olmalarına ve buna göre , aynı maliyete sahiptir. Core i5 (yaklaşık 30 bin tenge) ile Core i7 (yaklaşık 50 bin tenge) arasındaki fiyat farkı da oldukça büyük, ancak daha genç modellerde iki kattan az.


Bu fiyat artışı ne kadar haklı? Hyper-Threading hangi gerçek kazancı sağlar? Cevap uzun zamandır biliniyor: Artış değişiyor, hepsi uygulamaya ve optimizasyonuna bağlı. En zorlu "ev" uygulamalarından biri olan HT'nin oyunlarda neler yapabileceğini kontrol etmeye karar verdik. Ayrıca bu test, işlemcideki çekirdek sayısının oyun performansı üzerindeki etkisine ilişkin önceki materyalimize mükemmel bir katkı olacaktır.

Testlere geçmeden önce Hyper-Threading Teknolojisinin ne olduğunu hatırlayalım (veya öğrenelim). Intel'in yıllar önce bu teknolojiyi tanıtırken söylediği gibi, bunda özellikle karmaşık bir şey yok. Aslında, HT'yi fiziksel düzeyde tanıtmak için gereken tek şey, bir fiziksel çekirdeğe değil, iki kayıt kümesini ve bir kesme denetleyicisini eklemektir. Pentium 4 işlemcilerde bu ek öğeler transistör sayısını yalnızca yüzde beş artırdı. Modern Ivy Bridge çekirdeklerinde (Sandy Bridge ve gelecekteki Haswell'in yanı sıra), dört çekirdek için bile ek öğeler zarı yüzde 1 bile artırmaz.


Yazılım desteğiyle birleştirilmiş ek kayıtlar ve kesme denetleyicisi, işletim sisteminin bir fiziksel çekirdeği değil iki mantıksal çekirdeği görmesine olanak tanır. Aynı zamanda, sistem tarafından gönderilen iki akıştan gelen verilerin işlenmesi hala aynı çekirdek üzerinde ancak bazı özelliklerle gerçekleşmektedir. Bir iş parçacığının tüm işlemcisi hala elindedir, ancak bazı CPU blokları serbest bırakıldığında ve boşta kaldığında, bunlar hemen ikinci iş parçacığına verilir. Bu sayede tüm işlemci bloklarını aynı anda kullanarak verimliliği artırmak mümkün oldu. Intel'in kendisinin de belirttiği gibi ideal koşullardaki performans artışı yüzde 30'a kadar çıkabiliyor. Doğru, bu göstergeler yalnızca çok uzun üretim hattına sahip Pentium 4 için geçerlidir; modern işlemciler HT'den daha az yararlanır.

Ancak Hyper-Threading için ideal koşullar her zaman geçerli değildir. Ve en önemlisi HT'nin en kötü sonucu performans kazancının olmaması değil, azalmasıdır. Yani, belirli koşullar altında, HT'li bir işlemcinin performansı, HT'siz bir işlemciye göre düşecektir, çünkü iş parçacığı bölümü ve sıraya alma ek yükü, bu özel durumda mümkün olan paralel iş parçacıklarının işlenmesinden elde edilen kazancı önemli ölçüde aşacaktır. dava. Ve bu tür durumlar Intel'in istediğinden çok daha sık yaşanıyor. Üstelik uzun yıllardır Hyper-Threading kullanmak durumu iyileştirmedi. Bu özellikle çok karmaşık olan ve veri hesaplama ve uygulamalar açısından hiç de standart olmayan oyunlar için geçerlidir.

Hyper-Threading'in oyun performansı üzerindeki etkisini bulmak için yine uzun zamandır acı çeken Core i7-2700K test işlemcimizi kullandık ve çekirdekleri devre dışı bırakıp HT'yi açıp kapatarak dört işlemciyi aynı anda simüle ettik. Geleneksel olarak Pentium (2 çekirdek, HT devre dışı), Core i3 (2 çekirdek, HT etkin), Core i5 (4 çekirdek, HT devre dışı) ve Core i7 (4 çekirdek, HT etkin) olarak adlandırılabilirler. Neden şartlı? Öncelikle bazı özelliklerine göre gerçek ürünlerle örtüşmüyorlar. Özellikle, çekirdeklerin devre dışı bırakılması, üçüncü düzey önbelleğin hacminde karşılık gelen bir azalmaya yol açmaz - herkes için hacmi 8 megabayttır. Ayrıca tüm "koşullu" işlemcilerimiz, Intel serisindeki tüm işlemciler tarafından henüz elde edilemeyen aynı 3,5 gigahertz frekansında çalışır.


Ancak bu daha da iyi, çünkü tüm önemli parametrelerin sürekli değişmesi sayesinde Hyper-Threading'in oyun performansı üzerindeki gerçek etkisini hiçbir çekince olmadan öğrenebileceğiz. Ve "koşullu" Pentium ile Core i3 arasındaki performans farkı, frekansların eşit olması koşuluyla gerçek işlemciler arasındaki farka yakın olacaktır. Sandy Bridge mimarisine sahip bir işlemci kullanmamız da kafa karıştırıcı olmamalı çünkü “Çıplak Performans - ALU'ların ve FPU'ların Verimliliğinin İncelenmesi” makalesinde okuyabileceğiniz verimlilik testlerimiz Hyper- En yeni nesil işlemcilerde iş parçacığı çekirdeği değişmeden kalır. Büyük olasılıkla, bu materyal gelecek Haswell işlemcileri için de geçerli olacaktır.

Görünüşe göre test metodolojisine ve Hyper-Threading Teknolojisinin işletim özelliklerine ilişkin tüm sorular tartışıldı ve bu nedenle en ilginç şeye, yani testlere geçmenin zamanı geldi.

İşlemci çekirdeği sayısının oyun performansı üzerindeki etkisini incelediğimiz bir testte bile 3DMark 11'in CPU performansı konusunda tamamen rahat olduğunu, tek çekirdekte bile mükemmel çalıştığını gördük. Hyper-Threading'in de aynı "güçlü" etkisi vardı. Gördüğünüz gibi testte Pentium ve Core i7 arasında herhangi bir fark görülmüyor, ara modeller de cabası.

Metro 2033

Ancak Metro 2033, Hyper-Threading'in görünümünü açıkça fark etti. Ve ona olumsuz tepki verdi! Evet, doğru: Bu oyunda HT'yi etkinleştirmenin performans üzerinde olumsuz etkisi var. Elbette küçük bir etki - dört fiziksel çekirdekle saniyede 0,5 kare ve iki fiziksel çekirdekle 0,7. Ancak bu gerçek, Metro 2033 Pentium'un Core i3'ten daha hızlı olduğunu ve Core i5'in Core i7'den daha iyi olduğunu söylemek için her türlü nedeni veriyor. Bu, Hyper-Threading'in etkinliğini her zaman değil, her yerde göstermediği gerçeğinin doğrulanmasıdır.

Kriz 2

Bu oyun çok ilginç sonuçlar verdi. Her şeyden önce, Hyper-Threading'in etkisinin çift çekirdekli işlemcilerde açıkça görülebildiğini not ediyoruz - Core i3, Pentium'un neredeyse yüzde 9 önünde, bu da bu oyun için oldukça fazla. HT ve Intel'in zaferi mi? Pek değil, çünkü Core i7, gözle görülür derecede daha ucuz olan Core i5'e kıyasla herhangi bir kazanç göstermedi. Ancak bunun makul bir açıklaması var: Crysis 2 dörtten fazla veri akışını kullanamıyor. Bu nedenle, HT'li çift çekirdekte iyi bir artış görüyoruz; yine de dört iş parçacığı, mantıksal da olsa, iki iş parçacığından daha iyidir. Öte yandan, ek Core i7 iş parçacığı koyacak yer yoktu, dört fiziksel çekirdek yeterliydi. Dolayısıyla, bu testin sonuçlarına dayanarak, HT'nin Core i3'teki olumlu etkisini burada Pentium'dan belirgin şekilde daha iyi olduğunu not edebiliriz. Ancak dört çekirdekli işlemciler arasında Core i5 yine daha makul bir çözüm gibi görünüyor.

Savaş alanı 3

Buradaki sonuçlar çok tuhaf. Çekirdek sayısı testinde savaş alanı mikroskobik ancak doğrusal bir artışın bir örneğiyse, Hyper-Threading'in dahil edilmesi sonuçlara kaos getirdi. Aslında Core i3'ün iki çekirdeği ve HT'si ile Core i5 ve Core i7'nin bile önünde en iyisi olduğunu söyleyebiliriz. Elbette tuhaf ama aynı zamanda Core i5 ve Core i7 yine aynı seviyedeydi. Bunu neyin açıkladığı açık değil. Büyük olasılıkla, bu oyundaki test metodolojisi burada rol oynadı ve bu da standart kıyaslamalardan daha fazla hata veriyor.

Son testte F1 2011, çekirdek sayısı açısından çok kritik olan oyunlardan biri olduğunu kanıtladı ve bu testte Hyper-Threading teknolojisinin performans üzerindeki mükemmel etkisiyle bizi bir kez daha şaşırttı. Ve yine Crysis 2'de olduğu gibi çift çekirdekli işlemcilerde HT'nin dahil edilmesi çok işe yaradı. Koşullu Core i3 ile Pentium arasındaki farka bakın - iki kattan fazla! Oyunun iki çekirdeğin büyük ölçüde eksik olduğu açıkça görülüyor ve aynı zamanda kodu o kadar iyi paralelleştirilmiş ki etkisi inanılmaz. Öte yandan, dört fiziksel çekirdekle tartışamazsınız - Core i5, Core i3'ten belirgin şekilde daha hızlıdır. Ancak Core i7 yine önceki oyunlarda olduğu gibi Core i5'e kıyasla olağanüstü bir şey göstermedi. Sebep aynı; oyun 4'ten fazla iş parçacığı kullanamıyor ve HT çalıştırmanın getirdiği ek yük, Core i7'nin performansını Core i5 seviyesinin altına düşürüyor.

Eski bir savaşçının Hyper-Threading'e, bir kirpinin tişörte ihtiyaç duyduğundan daha fazla ihtiyacı yoktur - etkisi hiçbir şekilde F1 2011 veya Crysis 2'deki kadar belirgin değildir. Bununla birlikte, çift çekirdekli bir işlemcide HT'yi açmanın yine de dikkat çekici olduğunu unutmayın. 1 ekstra çerçeve getirdim. Bu kesinlikle Core i3'ün Pentium'dan daha iyi olduğunu söylemek için yeterli değil. En azından bu gelişme açıkça bu işlemcilerin fiyat farkına karşılık gelmiyor. Ve Core i5 ile Core i7 arasındaki fiyat farkından bahsetmeye bile gerek yok çünkü HT desteği olmayan işlemcinin yine daha hızlı olduğu ortaya çıktı. Ve gözle görülür şekilde daha hızlı - yüzde 7 oranında. Ne derse desin, bu oyun için maksimum dört iş parçacığının olduğunu bir kez daha belirtiyoruz ve bu nedenle HyperThreading bu durumda Core i7'ye yardımcı olmuyor, aksine engel oluyor.

BIOS Kurulumunun içeriğini dikkatlice incelediyseniz, orada CPU Hyper Threading Teknolojisi seçeneğini fark etmiş olabilirsiniz. Hyper Threading'in (veya hyperthreading'in, resmi adı Hyper Threading Technology, HTT'dir) ne olduğunu ve bu seçeneğin ne işe yaradığını merak etmiş olabilirsiniz.

Hyper Threading, Intel tarafından Pentium mimarili işlemciler için geliştirilen nispeten yeni bir teknolojidir. Uygulamanın gösterdiği gibi, Hyper Threading teknolojisinin kullanımı birçok durumda CPU performansının yaklaşık% 20-30 oranında artırılmasını mümkün kılmıştır.

Burada bir bilgisayarın merkezi işlemcisinin genel olarak nasıl çalıştığını hatırlamanız gerekir. Bilgisayarı açıp üzerinde bir program çalıştırdığınız anda, CPU, makine kodu olarak adlandırılan, içinde yer alan talimatları okumaya başlar. Her talimatı sırayla okur ve birbiri ardına yürütür.

Ancak birçok programda aynı anda çalışan birden fazla yazılım işlemi bulunur. Ayrıca modern işletim sistemleri kullanıcıya birden fazla programın aynı anda çalıştırılmasına olanak tanır. Ve buna izin vermiyorlar - aslında, işletim sisteminde tek bir işlemin çalıştığı bir durum bugün tamamen düşünülemez. Bu nedenle eski teknolojiler kullanılarak geliştirilen işlemciler, aynı anda birden fazla işlemin işlenmesinin gerekli olduğu durumlarda düşük performans gösteriyordu.

Elbette bu sorunu çözmek için sisteme birden fazla işlemci veya birkaç fiziksel hesaplama çekirdeği kullanan işlemciler dahil edebilirsiniz. Ancak böyle bir gelişme pahalıdır, teknik açıdan karmaşıktır ve pratik açıdan her zaman etkili değildir.

Geliştirme geçmişi

Bu nedenle birden fazla işlemin tek bir fiziksel çekirdek üzerinde işlenmesine olanak sağlayacak bir teknolojinin oluşturulmasına karar verildi. Bu durumda, programlar için dışarıdan bakıldığında sistemde aynı anda birden fazla işlemci çekirdeği varmış gibi görünecektir.

Hyper Threading teknolojisi desteği ilk olarak 2002 yılında işlemcilerde ortaya çıktı. Bunlar Pentium 4 ailesinin işlemcileri ve saat hızı 2 GHz'in üzerinde olan Xeon sunucu işlemcileriydi. Başlangıçta teknolojinin kod adı Jackson'dı, ancak daha sonra adı genel halk için daha anlaşılır olan Hyper Threading olarak değiştirildi - kabaca "süper iş parçacığı" olarak çevrilebilir.

Aynı zamanda Intel'e göre Hyper Threading'i destekleyen işlemci kristalinin yüzey alanı, onu desteklemeyen önceki modele göre yalnızca %5 arttı ve ortalama %20 performans artışı sağlandı.

Teknolojinin genel olarak kendini iyi bir şekilde kanıtlamış olmasına rağmen Intel, çeşitli nedenlerden dolayı Pentium 4'ün yerini alan Core 2 ailesi işlemcilerdeki Hyper Threading teknolojisini devre dışı bırakmaya karar verdi. Ancak Hyper Threading daha sonra işlemcilerde yeniden ortaya çıktı. Sandy Bridge ve Ivy mimarileri Bridge ve Haswell önemli ölçüde yeniden tasarlandı.

Teknolojinin özü

Hyper Threading Teknolojisini anlamak önemlidir çünkü Intel işlemcilerdeki temel özelliklerden biridir.

İşlemcilerin elde ettiği tüm başarıya rağmen, önemli bir dezavantajları var; aynı anda yalnızca bir talimatı yürütebiliyorlar. Diyelim ki metin editörü, tarayıcı ve Skype gibi uygulamaları aynı anda başlattınız. Kullanıcı açısından bakıldığında bu yazılım ortamı çoklu görev olarak adlandırılabilir, ancak işlemci açısından bu durumdan çok uzaktır. İşlemci çekirdeği yine de belirli bir zaman dilimi başına bir talimat yürütecektir. Bu durumda işlemcinin görevi, işlemci zamanı kaynaklarını bireysel uygulamalar arasında dağıtmaktır. Talimatların bu sıralı yürütülmesi son derece hızlı gerçekleştiğinden, bunu fark etmezsiniz. Ve size öyle geliyor ki hiçbir gecikme yok.

Ama hâlâ bir gecikme var. Gecikme, her programın işlemciye veri sağlama şekli nedeniyle oluşur. Her veri akışının belirli bir zamanda ulaşması ve işlemci tarafından ayrı ayrı işlenmesi gerekir. Hyper Threading teknolojisi, her işlemci çekirdeğinin veri işlemeyi planlamasını ve kaynakları iki iş parçacığı için aynı anda dağıtmasını mümkün kılar.

Modern işlemcilerin çekirdeğinde, her biri veriler üzerinde belirli bir işlemi gerçekleştirmek üzere tasarlanmış birkaç sözde yürütme cihazının bulunduğunu belirtmekte fayda var. Bu durumda, bu yürütme aygıtlarından bazıları, bir iş parçacığından gelen verileri işlerken boşta kalabilir.

Bu durumu anlamak için bir montaj atölyesinde konveyör üzerinde çalışan ve farklı türde parçaları işleyen işçilere benzetme yapabiliriz. Her çalışan, bir görevi gerçekleştirmek için tasarlanmış özel bir araçla donatılmıştır. Ancak parçaların yanlış sırayla gelmesi durumunda bazı çalışanların işe başlamak için kuyrukta beklemesi nedeniyle gecikmeler meydana geliyor. Hyper Threading, daha önce boşta olan çalışanların işlerini diğerlerinden bağımsız olarak yürütmeleri için atölyeye yerleştirilen ek bir taşıma bandına benzetilebilir. Atölye hala bir tanedir ancak parçalar daha hızlı ve verimli bir şekilde işlenir, bu da arıza süresinin azalmasına neden olur. Böylece Hyper Threading, bir iş parçacığından gelen talimatları yürütürken boşta kalan işlemci yürütme birimlerinin açılmasını mümkün kıldı.

Hyper Threading'i destekleyen çift çekirdekli işlemciye sahip bir bilgisayarı açtığınızda ve Performans sekmesi altında Windows Görev Yöneticisini açtığınızda, içinde dört grafik bulacaksınız. Ancak bu aslında 4 işlemci çekirdeğiniz olduğu anlamına gelmiyor.

Bunun nedeni Windows'un her çekirdeğin iki mantıksal işlemciye sahip olduğunu düşünmesidir. "Mantıksal işlemci" terimi kulağa komik gelse de fiziksel olarak var olmayan bir işlemci anlamına gelir. Windows her mantıksal işlemciye veri akışı gönderebilir, ancak aslında işi yalnızca bir çekirdek yapar. Bu nedenle Hyper Threading teknolojisine sahip tek bir çekirdek, ayrı fiziksel çekirdeklerden önemli ölçüde farklıdır.

Hyper Threading teknolojisi aşağıdaki donanım ve yazılımlardan destek gerektirir:

  • İşlemci
  • Anakart yonga seti
  • işletim sistemi

Teknolojinin faydaları

Şimdi şu soruyu ele alalım: Hyper Threading teknolojisi bilgisayar performansını ne kadar artırıyor? İnternette gezinmek ve yazmak gibi günlük görevlerde teknolojinin faydaları o kadar açık değildir. Ancak günümüzün işlemcilerinin o kadar güçlü olduğunu ve günlük görevlerin nadiren işlemciyi tam olarak kullandığını unutmayın. Ayrıca birçok şey yazılımın nasıl yazıldığına da bağlıdır. Aynı anda çalışan birden fazla programınız olabilir ancak yük grafiğine baktığınızda çekirdek başına yalnızca bir mantıksal işlemcinin kullanıldığını göreceksiniz. Bunun nedeni, yazılımın çekirdekler arasındaki süreçlerin dağıtımını desteklememesidir.

Ancak daha karmaşık görevler için Hyper Threading daha kullanışlı olabilir. 3B modelleme programları, 3B oyunlar, müzik veya video kodlama/kod çözme programları ve birçok bilimsel uygulama gibi uygulamalar, çoklu iş parçacığından tam olarak yararlanacak şekilde yazılmıştır. Böylece zorlu oyunlar oynarken, müzik dinlerken veya film izlerken Hyper Threading özellikli bir bilgisayarın performans avantajlarından yararlanabilirsiniz. Performans artışı %30'lara kadar çıkabiliyor ancak Hyper Threading'in hiç avantaj sağlamadığı durumlar da olabiliyor. Bazen her iki iş parçacığının tüm işlemci yürütme birimlerini aynı görevlerle yüklemesi durumunda performansta hafif bir düşüş bile gözlemlenebilir.

BIOS Kurulumunda Hyper Threading parametrelerini ayarlamanıza izin veren ilgili seçeneğin varlığına dönersek, çoğu durumda bu işlevin etkinleştirilmesi önerilir. Ancak bilgisayarınızın hatalarla çalıştığı veya hatta performansın beklediğinizden daha düşük olduğu ortaya çıkarsa, bu özelliği her zaman devre dışı bırakabilirsiniz.

Çözüm

Hyper Threading kullanıldığında maksimum performans artışı %30 olduğundan, teknolojinin işlemci çekirdek sayısını iki katına çıkarmaya eşdeğer olduğu söylenemez. Ancak Hyper Threading kullanışlı bir seçenektir ve bir bilgisayar sahibi olarak size zarar vermez. Faydası özellikle, örneğin multimedya dosyalarını düzenlediğinizde veya bilgisayarınızı Photoshop veya Maya gibi profesyonel programlar için bir iş istasyonu olarak kullandığınızda fark edilir.

Tek işlemcili Xeon sistemlerini kullanmanın hiçbir anlam ifade etmediğini yazdık, çünkü daha yüksek bir fiyata performansları aynı frekanstaki Pentium 4 ile aynı olacaktır. Şimdi daha kapsamlı bir çalışmanın ardından muhtemelen bu açıklamada ufak bir değişiklik yapılması gerekecek. Intel Xeon'da Prestonia çekirdeğiyle uygulanan Hyper-Threading teknolojisi gerçekten işe yarıyor ve çok belirgin bir etki yaratıyor. Her ne kadar kullanırken birçok soru ortaya çıksa da...

Verimlilik verirsiniz

"Daha hızlı, daha da hızlı..." Performans yarışı yıllardır sürüyor ve bazen hangi bilgisayar bileşeninin daha hızlı hızlandığını söylemek bile zor. Bunu başarmak için her geçen gün daha fazla yeni yöntem icat ediliyor, dahası çığ gibi büyüyen bu sürece daha nitelikli iş gücü ve kaliteli beyin yatırılıyor.

Performansta sürekli bir artış kesinlikle gereklidir. En azından, bu karlı bir iştir ve kullanıcıları dünün "süper verimli CPU'sundan" yarının "daha da süper..." işlemcisine yükseltmeye teşvik etmenin her zaman güzel bir yolu vardır. Örneğin, eşzamanlı konuşma tanıma ve başka bir dile eşzamanlı çeviri - bu herkesin hayali değil mi? Veya neredeyse "sinema" kalitesinde alışılmadık derecede gerçekçi oyunlar (tamamen dikkati çekiyor ve bazen ruhta ciddi değişikliklere yol açıyor) - bu, genç ve yaşlı birçok oyuncunun arzusu değil mi?

Ancak bu durumda pazarlama unsurlarını denklemden çıkarıp teknik unsurlara odaklanalım. Üstelik her şey o kadar da kasvetli değil: Özellikle merkezi işlemcilerde giderek daha yüksek performansın gerçekten gerekli olduğu acil görevler (sunucu uygulamaları, bilimsel hesaplamalar, modelleme vb.) Var.

Peki performanslarını arttırmanın yolları nelerdir?

Saat hızını artırın. Teknolojik süreci daha da "inceltmek" ve sıklığını artırmak mümkündür. Ancak bildiğiniz gibi bu kolay değil ve ısı üretimiyle ilgili sorunlar gibi her türlü yan etkiyle doludur.

CPU kaynaklarını artırma- örneğin, önbellek hacminin arttırılması, yeni blokların (Yürütme Birimleri) eklenmesi. Bütün bunlar, transistör sayısında bir artış, daha karmaşık bir işlemci, çip alanında bir artış ve dolayısıyla maliyet anlamına geliyor.

Ayrıca önceki iki yöntem kural olarak üretkenlikte doğrusal bir artış sağlamaz. Bu, Pentium 4'te iyi bilinmektedir: dal tahminindeki hatalar ve kesintiler, uzun bir hattın sıfırlanmasına neden olur ve bu da genel performansı büyük ölçüde etkiler.

Çoklu işlem. Birden fazla CPU kurmak ve işi bunlar arasında dağıtmak genellikle oldukça etkilidir. Ancak bu yaklaşım çok ucuz değil - her ek işlemci sistemin maliyetini artırır ve çift anakart normal olandan çok daha pahalıdır (dört veya daha fazla CPU'yu destekleyen kartlardan bahsetmiyorum bile). Ayrıca tüm uygulamalar, maliyeti haklı çıkaracak kadar performans açısından çoklu işlemden yararlanamaz.

"Saf" çoklu işlemeye ek olarak, uygulamanın yürütülmesini hızlandırabilecek birkaç "ara" seçenek de vardır:

Çip Çoklu İşleme (CMP)- iki işlemci çekirdeği, ortak veya ayrı bir önbellek kullanılarak fiziksel olarak tek bir yonga üzerinde bulunur. Doğal olarak kristal boyutu oldukça büyük çıkıyor ve bu maliyeti etkilemekten başka bir şey yapamaz. Bu "çift" CPU'ların birçoğunun çok işlemcili bir sistemde de çalışabileceğini unutmayın.

Zaman Dilimli Çoklu İş Parçacığı. İşlemci program iş parçacıkları arasında sabit aralıklarla geçiş yapar. Ek yük bazen oldukça önemli olabilir, özellikle de bir süreç bekliyorsa.

Olaya Geçiş Çoklu İş Parçacığı. Uzun duraklamalar meydana geldiğinde görevlerin değiştirilmesi (örneğin, büyük bir kısmı sunucu uygulamaları için tipik olan önbellek eksiklikleri). Bu durumda, verileri nispeten yavaş bellekten önbelleğe yüklemeyi bekleyen işlem askıya alınır ve CPU kaynaklarının diğer işlemler için serbest bırakılması sağlanır. Bununla birlikte, Zaman Dilimli Çoklu İş Parçacığı gibi, Olaya Geçiş Çoklu İş Parçacığı, özellikle dal tahmini, talimat bağımlılıkları vb. hatalar nedeniyle işlemci kaynaklarının en iyi şekilde kullanılmasını her zaman sağlayamaz.

Eşzamanlı Çoklu İş Parçacığı. Bu durumda, program iş parçacıkları bir işlemci üzerinde "eş zamanlı olarak", yani aralarında geçiş yapılmadan yürütülür. CPU kaynakları “kullanmıyorsan başkasına ver” ilkesine göre dinamik olarak dağıtılır. Şu anda ele aldığımız Intel Hyper-Threading teknolojisinin temelini oluşturan bu yaklaşımdır.

Hyper-Threading Nasıl Çalışır?

Bildiğiniz gibi mevcut “bilgi işlem paradigması” çok iş parçacıklı hesaplamayı içeriyor. Bu sadece başlangıçta böyle bir konseptin mevcut olduğu sunucular için değil, aynı zamanda iş istasyonları ve masaüstü sistemleri için de geçerlidir. İş parçacıkları aynı veya farklı uygulamalara ait olabilir, ancak neredeyse her zaman birden fazla etkin iş parçacığı vardır (bunu doğrulamak için Windows 2000/XP'de Görev Yöneticisini açın ve iş parçacığı sayısının görüntülenmesini açın). Bununla birlikte, tipik bir işlemci aynı anda yalnızca bir iş parçacığını çalıştırabilir ve bunlar arasında sürekli geçiş yapmak zorunda kalır.

Hyper-Threading teknolojisi ilk kez test edildiği Intel Xeon MP (Foster MP) işlemcide uygulandı. Resmi olarak IDF Bahar 2002'de tanıtılan Xeon MP'nin Pentium 4 Willamette ile ilgili bir çekirdek kullandığını, 256 KB L2 önbellek ve 512 KB/1 MB L3 önbellek içerdiğini ve 4 işlemcili konfigürasyonlarda çalışmayı desteklediğini hatırlayalım. Hyper-Threading desteği, pazara Xeon MP'den biraz daha önce giren Intel Xeon (Prestonia çekirdeği, 512 KB L2 önbellek) iş istasyonu işlemcisinde de mevcuttur. Okuyucularımız zaten Intel Xeon'daki çift işlemcili yapılandırmalara aşinadır, bu nedenle bu CPU'ları örnek olarak kullanarak Hyper-Threading'in hem teorik hem de pratik olarak yeteneklerine bakacağız. Ne olursa olsun, "basit" Xeon, 4 işlemcili sistemlerde Xeon MP'den daha sıradan ve sindirilebilir bir şeydir...

Hyper-Threading'in çalışma prensibi, herhangi bir zamanda program kodunu çalıştırırken işlemci kaynaklarının yalnızca bir kısmının kullanılması gerçeğine dayanmaktadır. Kullanılmayan kaynaklar da işle yüklenebilir; örneğin, paralel yürütme için başka bir uygulama (veya aynı uygulamanın başka bir iş parçacığı) kullanılabilir. Bir fiziksel Intel Xeon işlemcide, CPU'nun bilgi işlem kaynaklarını paylaşan iki mantıksal işlemci (LP - Mantıksal İşlemci) oluşturulur. İşletim sistemi ve uygulamalar tam olarak iki CPU'yu "görür" ve tam teşekküllü bir çift işlemcili sistemde olduğu gibi işi bunlar arasında dağıtabilir.

Hyper-Threading'i uygulamanın hedeflerinden biri, yalnızca bir aktif iş parçacığı olduğunda normal bir CPU ile aynı hızda çalışmasına izin vermektir. Bunu yapmak için işlemcinin iki ana çalışma modu vardır: Tek Görev (ST) ve Çoklu Görev (MT). ST modunda yalnızca bir mantıksal işlemci etkindir ve mevcut kaynakların bölünmemiş kullanımına sahiptir (ST0 ve ST1 modları); HALT komutuyla başka bir LP durdurulur. İkinci bir program iş parçacığı göründüğünde, hareketsiz mantıksal işlemci etkinleştirilir (bir kesinti yoluyla) ve fiziksel CPU, MT moduna geçirilir. Kullanılmayan LP'lerin HALT komutuyla durdurulması, işletim sistemine atanmıştır; bu, sonuçta Hyper-Threading'in olmadığı durumda olduğu gibi bir iş parçacığının aynı hızlı yürütülmesinden sorumludur.

İki LP'nin her biri için, genel amaç, kontrol, APIC ve hizmet gibi çeşitli türlerdeki kayıtların durumunu içeren Mimari Durumu (AS) adı verilen bilgi depolanır. Her LP'nin kendi APIC'si (kesinti denetleyicisi) ve sekiz genel amaçlı IA-32 kaydı ile 128 arasındaki yazışmayı izleyen Kayıt Takma Ad Tablosu (RAT) kavramının tanıtıldığı doğru çalışması için bir dizi kaydı vardır. fiziksel CPU'nun kayıtları (her LP için bir RAT).

İki iş parçacığı çalıştırıldığında, karşılık gelen iki Sonraki Talimat İşaretçisi seti desteklenir. Talimatların çoğu, kodu çözülmüş biçimde saklandıkları İzleme Önbelleğinden (TC) alınır ve iki aktif LP, her iki saatte bir dönüşümlü olarak TC'ye erişir. Aynı zamanda yalnızca bir LP aktif olduğunda saat dönüşü olmadan TC'ye özel erişim elde eder. Mikrokod ROM'a erişim de benzer şekilde gerçekleşir. Komut önbelleğinde gerekli talimatlar eksik olduğunda kullanılan ITLB (Instruction Translation Look-aside Buffer) blokları çoğaltılır ve her biri kendi iş parçacığı için komutları iletir. Talimat kod çözme bloğu IA-32 Komut Kod Çözme bloğu paylaşılır ve her iki iş parçacığı için talimatların kodunun çözülmesinin gerekli olduğu durumda, onlara birer birer hizmet verir (yine her iki saatte bir). Uop Queue ve Allocator blokları ikiye bölünerek öğelerin yarısı her LP'ye tahsis edilir. 5 numaralı programlayıcılar, LP0/LP1'e ait olmalarına rağmen kodu çözülmüş komutların (Uop'lar) kuyruklarını işler ve gerekli Yürütme Birimleri tarafından yürütülecek doğrudan komutları - birincinin yürütülmesi için hazır olup olmadığına ve ikincisinin kullanılabilirliğine bağlı olarak. Tüm düzeylerdeki önbellekler (Xeon için L1/L2 ve ayrıca Xeon MP için L3) iki LP arasında tamamen paylaşılır, ancak veri bütünlüğünü sağlamak için DTLB'deki (Veri Çevirisi Bakış Arabelleği) girişler, LP'deki tanımlayıcılarla donatılmıştır. mantıksal işlemci kimlikleri biçimi.

Böylece, her iki mantıksal CPU'dan gelen talimatlar, dört sınıfa ayrılmış bir fiziksel işlemcinin kaynakları üzerinde aynı anda yürütülebilir:

  • kopyalandı;
  • Tamamen Paylaşılan;
  • öğe tanımlayıcılarla (Giriş Etiketli);
  • ST0/ST1 veya MT çalışma moduna bağlı olarak dinamik olarak bölümlendirilmiştir (Bölümlendirilmiş).

Ancak çok işlemcili sistemlerde hızlandırma alan uygulamaların çoğu, Hyper-Threading etkinleştirilmiş bir CPU üzerinde herhangi bir değişiklik yapılmadan da hızlandırılabilir. Ancak sorunlar da var: Örneğin, bir işlem bekleme döngüsündeyse, fiziksel CPU'nun tüm kaynaklarını tüketerek ikinci LP'nin çalışmasına müdahale edebilir. Bu nedenle, Hyper-Threading kullanırken performans bazen düşebilir (%20'ye kadar). Bunu önlemek için Intel, boş bekleme döngüleri yerine PAUSE komutunun (Pentium 4'ten itibaren IA-32'de sunulan) kullanılmasını önerir. Derleme sırasında otomatik ve yarı otomatik kod optimizasyonu konusunda da oldukça ciddi çalışmalar yapılıyor - örneğin Intel OpenMP C++/Fortran Derleyicileri () serisi derleyiciler bu konuda önemli ilerleme kaydetti.

Intel'e göre Hyper-Threading'in ilk uygulamasının bir diğer hedefi, performansta gözle görülür bir artış elde ederken transistör sayısı, çip alanı ve güç tüketimindeki artışı en aza indirmekti. Bu taahhüdün ilk kısmı zaten yerine getirildi: Xeon/Xeon MP'ye Hyper-Threading desteğinin eklenmesi, kalıp alanını ve güç tüketimini %5'ten daha az artırdı. Hala ikinci kısımda (performans) ne olduğunu kontrol etmemiz gerekiyor.

Pratik kısım

Açık nedenlerden dolayı, 4 işlemcili sunucu sistemlerini Xeon MP üzerinde Hyper-Threading etkinken test etmedik. Öncelikle oldukça emek yoğun bir iş. İkincisi, böyle bir başarıya karar versek bile, bu pahalı ekipmanı şu anda, resmi duyurunun üzerinden bir aydan kısa bir süre sonra almak kesinlikle imkansız olacaktır. Bu nedenle, bu işlemcilerin ilk testinin yapıldığı iki Intel Xeon 2,2 GHz ile kendimizi aynı sistemle sınırlamaya karar verildi (makalenin başındaki bağlantıya bakın). Sistem bir Supermicro P4DC6+ anakartı (Intel i860 yonga seti) temel alıyordu; 512 MB RDRAM bellek, GeForce3 yongası üzerinde bir video kartı (64 MB DDR, Detonator 21.85 sürücüleri), bir Western Digital WD300BB sabit disk ve 6X DVD-ROM içeriyordu; İşletim sistemi olarak Windows 2000 Professional SP2 kullanıldı.

Öncelikle birkaç genel izlenim. Prestonia çekirdekli bir Xeon takarken, sistem başlatıldığında BIOS iki CPU'nun varlığına ilişkin bir mesaj görüntüler; iki işlemci takılıysa kullanıcı dört CPU hakkında bir mesaj görür. İşletim sistemi normalde "her iki işlemciyi" tanır, ancak yalnızca iki koşulun karşılanması durumunda.

İlk olarak, CMOS Kurulumunda, Supermicro P4DCxx kartlarının en son BIOS sürümlerinde artık Hyper-Threading'i Etkinleştir seçeneği var; bu seçenek olmadan işletim sistemi yalnızca fiziksel işlemcileri tanıyacaktır. İkinci olarak, ACPI yetenekleri, işletim sistemini ek mantıksal işlemcilerin varlığı hakkında bilgilendirmek için kullanılır. Bu nedenle Hyper-Threading'i etkinleştirmek için CMOS Kurulumunda ACPI seçeneğinin etkinleştirilmesi ve işletim sisteminin kendisi için de ACPI destekli HAL'nin (Donanım Soyutlama Katmanı) kurulması gerekir. Neyse ki, Windows 2000'de HAL'ı Standart PC'den (veya MPS Tek/Çok İşlemcili PC'den) ACPI Tek/Çok İşlemcili PC'ye değiştirmek kolaydır; aygıt yöneticisindeki "bilgisayar sürücüsünü" değiştirmek. Aynı zamanda Windows XP için ACPI HAL'e geçişin tek yasal yolu, sistemi mevcut kurulum üzerine yeniden yüklemektir.

Ancak artık tüm hazırlıklar yapıldı ve Windows 2000 Pro'muz çift işlemcili bir sistem üzerinde çalıştığına zaten kesin olarak inanıyor (aslında yalnızca bir işlemci kurulu olmasına rağmen). Şimdi geleneksel olarak test hedeflerine karar verme zamanı. Yani şunu istiyoruz:

  • Hyper-Threading'in çeşitli sınıflardaki uygulamaların performansı üzerindeki etkisini değerlendirin.
  • Bu etkiyi ikinci bir işlemci takmanın etkisiyle karşılaştırın.
  • İkinci LP boştayken kaynakların aktif mantıksal işlemciye ne kadar "adil" şekilde tahsis edildiğini kontrol edin.

Performansı değerlendirmek için okuyucuların zaten aşina olduğu ve iş istasyonu sistemlerinin test edilmesinde kullanılan bir dizi uygulamayı aldık. En baştan başlayalım ve mantıksal CPU'ların “eşitliğini” kontrol edelim. Çok basit: önce testleri Hyper-Threading devre dışı bırakılmış bir işlemci üzerinde çalıştırıyoruz ve ardından Hyper-Threading etkinken ve iki mantıksal CPU'dan yalnızca birini kullanarak (Görev Yöneticisini kullanarak) işlemi tekrarlıyoruz. Bu durumda sadece göreceli değerlerle ilgilendiğimiz için, tüm testlerin sonuçları "daha büyük daha iyidir" formuna getirilir ve normalleştirilir (Hyper-Threading'siz tek işlemcili bir sistemin göstergeleri bir olarak alınır).

Gördüğünüz gibi Intel'in vaatleri burada yerine getiriliyor: Yalnızca tek bir aktif iş parçacığıyla, iki LP'nin her birinin performansı, Hyper-Threading'siz fiziksel bir CPU'nun performansına tam olarak eşittir. Etkin olmayan LP (ve hem LP0 hem de LP1) gerçekte askıya alınır ve elde edilen sonuçlardan anlaşıldığı kadarıyla paylaşılan kaynaklar, kullanılmak üzere tamamen etkin LP'ye aktarılır.

Bu nedenle, ilk sonuca varıyoruz: iki mantıksal işlemci aslında eşittir ve Hyper-Threading'in etkinleştirilmesi, bir iş parçacığının çalışmasına "engellemez" (ki bu kendi içinde kötü değildir). Şimdi bu katılımın "yardımcı olup olmadığına" bakalım, eğer öyleyse nerede ve nasıl?

İşleme. 3D Studio MAX 4.26, Lightwave 7b ve A|W Maya 4.0.1 3D modelleme paketlerindeki dört testin sonuçları, benzerlikleri nedeniyle tek bir diyagramda birleştirildi.

Dört durumun tamamında (Lightwave için - iki farklı sahne), Hyper-Threading kapalı bir işlemcinin varlığında CPU yükü neredeyse her zaman %100'de tutulur. Ancak Hyper-Threading etkinleştirildiğinde sahne hesaplamaları hızlanıyor (bunun sonucunda CPU yükünün %100'den fazla olduğu konusunda şaka bile yaptık). Üç testte Hyper-Threading'den %14-18'lik bir performans artışı görüldü - bir yandan ikinci CPU'ya kıyasla çok fazla değil, diğer yandan bu etkinin "serbest" doğası göz önüne alındığında oldukça iyi. . Lightwave ile yapılan iki testten birinde performans artışı neredeyse sıfırdır (görünüşe göre bu, garip şeylerle dolu olan bu uygulamanın özelliklerinden kaynaklanmaktadır). Ancak hiçbir yerde olumsuz bir sonuç yok ve diğer üç vakada gözle görülür bir artış cesaret verici. Ve bu, paralel oluşturma işlemlerinin benzer işler yapmasına ve muhtemelen fiziksel CPU'nun kaynaklarını aynı anda en iyi şekilde kullanamamasına rağmen.

Photoshop ve MP3 kodlama. GOGO-no-coda 2.39c codec'i, SMP'yi destekleyen birkaç kodlayıcıdan biridir ve çift işlemci sayesinde performansta %34'lük gözle görülür bir artışa sahiptir. Aynı zamanda Hyper-Threading'in bu durumda etkisi sıfırdır (%3'lük bir farkı önemli saymıyoruz). Ancak Photoshop 6.0.1 (çok sayıda komut ve filtreden oluşan bir komut dosyası) ile yapılan testte Hyper-Threading etkinleştirildiğinde bir yavaşlama görülüyor, ancak bu durumda ikinci fiziksel CPU %12 performans ekliyor. Aslında bu, Hyper-Threading'in performansta düşüşe neden olduğu ilk durumdur...

Profesyonel OpenGL. SPEC ViewPerf ve diğer birçok OpenGL uygulamasının SMP sistemlerinde sıklıkla yavaşladığı uzun zamandır bilinmektedir.

OpenGL ve çift işlemciler: neden arkadaş değiller

Makalelerimizde birçok kez, profesyonel OpenGL testleri gerçekleştirirken çift işlemcili platformların tek işlemcili platformlara göre çok nadiren önemli bir avantaj gösterdiğine okuyucuların dikkatini çektik. Dahası, ikinci bir işlemci takıldığında, dinamik üç boyutlu sahneler oluşturulurken sistemin performansının kötüleştiği durumlar da sıklıkla görülür.

Doğal olarak bu tuhaflığı fark eden sadece biz değildik. Bazı test uzmanları bu durumdan sessizce kaçındılar; örneğin, yalnızca çift işlemcili yapılandırmalar için SPEC ViewPerf testlerinden elde edilen karşılaştırma sonuçlarını sunarak "çift işlemcili sistem neden daha yavaştır?" açıklamalarından kaçındılar. Diğerleri önbellek tutarlılığı, bunu sürdürme ihtiyacı, bundan kaynaklanan ek yük vb. hakkında her türlü fantastik varsayımda bulundu. Ve bazı nedenlerden dolayı, örneğin işlemcilerin özellikle pencereli OpenGL oluşturmada tutarlılığı izlemek için sabırsız olmalarına kimse şaşırmadı ("hesaplamalı" özünde, diğer herhangi bir hesaplama görevinden pek farklı değildir).

Aslında bizce açıklaması çok daha basittir. Bildiğiniz gibi bir uygulama aşağıdaki durumlarda iki işlemcide tek işlemciden daha hızlı çalışabilir:

  • eş zamanlı olarak çalışan iki veya daha fazla program iş parçacığı vardır;
  • bu iş parçacıkları birbirlerinin yürütülmesine müdahale etmez; örneğin, harici bir sürücü veya ağ arabirimi gibi paylaşılan bir kaynak için rekabet etmezler.

Şimdi iki iş parçacığı tarafından gerçekleştirildiğinde OpenGL oluşturmanın nasıl göründüğüne basitleştirilmiş bir göz atalım. İki işlemciyi "gören" bir uygulama iki OpenGL oluşturma iş parçacığı oluşturursa, OpenGL kurallarına göre bunların her biri için kendi gl bağlamı oluşturulur. Buna göre her iş parçacığı kendi gl bağlamına dönüştürülür. Ancak sorun şu ki, görüntünün görüntülendiği pencere için herhangi bir zamanda yalnızca bir gl bağlamı geçerli olabilir. Buna göre, bu durumda iş parçacıkları, oluşturulan görüntüyü pencerede basitçe "birer birer" görüntüler ve dönüşümlü olarak bağlamlarını geçerli hale getirir. Söylemeye gerek yok, bu tür bir "bağlam serpiştirmesi" genel gider açısından çok pahalı olabilir mi?

Ayrıca örnek olarak, OpenGL sahnelerini görüntüleyen çeşitli uygulamalarda iki CPU kullanımının grafiklerini göstereceğiz. Tüm ölçümler platform üzerinde aşağıdaki konfigürasyonda gerçekleştirildi:

  • bir veya iki Intel Xeon 2,2 GHz (Hyper-Threading devre dışı);
  • 512 MB RDRAM bellek;
  • Supermicro P4DC6+ anakart;
  • ASUS V8200 Deluxe ekran kartı (NVidia GeForce3, 64 MB DDR SDRAM, Detonator 21.85 sürücüleri);
  • Windows 2000 Profesyonel SP2;
  • video modu 1280x1024x32 bpp, 85 Hz, Vsync devre dışı.

Mavi ve kırmızı sırasıyla CPU 0 ve CPU 1'in yük grafiklerini gösterir. Ortadaki çizgi son CPU Kullanımı grafiğidir. Üç grafik, 3D Studio MAX 4.26'dan iki sahneye ve SPEC ViewPerf testinin (AWadvs-04) bir kısmına karşılık gelir.


CPU Kullanımı: animasyon 3D Studio MAX 4.26 - Anibal (manipülatörlerle).max


CPU Kullanımı: Animation 3D Studio MAX 4.26 - Rabbit.max


CPU Kullanımı: SPEC ViewPerf 6.1.2 - AWadvs-04

Aynı resim OpenGL kullanan diğer birçok uygulamada da tekrarlanıyor. İki işlemci hiç rahatsız etmiyor ve genel CPU Kullanımı %50-60 seviyesinde. Aynı zamanda tek işlemcili bir sistem için tüm bu durumlarda CPU Kullanımı kesinlikle %100'de kalır.

Bu nedenle birçok OpenGL uygulamasının ikili sistemlerde çok fazla hızlanmaması şaşırtıcı değildir. Bazen yavaşlamalarının bile bize göre tamamen mantıklı bir açıklaması var.

İki mantıksal CPU ile performans düşüşünün daha da belirgin olduğunu söyleyebiliriz ki bu da anlaşılabilir bir durumdur: iki mantıksal işlemci, iki fiziksel işlemciyle aynı şekilde birbirine müdahale eder. Ancak genel performansları doğal olarak daha düşük çıkıyor, dolayısıyla Hyper-Threading etkinleştirildiğinde, iki fiziksel CPU çalışırken olduğundan daha da fazla düşüyor. Sonuç tahmin edilebilir ve sonuç basit: Hyper-Threading, "gerçek" SMP gibi, OpenGL için kontrendikedir.

CAD uygulamaları. Önceki sonuç iki CAD testinin sonuçlarıyla doğrulandı: SolidEdge V10 için SPECapc ve SolidWorks için SPECapc. Bu Hyper-Threading testlerinin grafik performansı benzerdir (her ne kadar SolidEdge V10 için SMP sistemi biraz daha yüksek puan alsa da). Ancak işlemci yükleme CPU_Score testlerinin sonuçları şunu düşündürüyor: SMP'de %5-10 artış ve Hyper-Threading'de %14-19 yavaşlama.

Ancak günün sonunda Intel, Hyper-Threading'in bazı durumlarda (örneğin boş bekleme döngüleri kullanıldığında) performansın düşmesine neden olabileceğini dürüstçe kabul ediyor. Sebebin yalnızca bu olduğunu varsayabiliriz (SolidEdge ve SolidWorks kodunun ayrıntılı bir çalışması bu makalenin kapsamı dışındadır). Sonuçta herkes, kanıtlanmış güvenilirliği tercih eden ve programlamadaki yeni eğilimleri dikkate alarak kodu yeniden yazmak için özel bir acelesi olmayan CAD uygulama geliştiricilerinin muhafazakarlığını bilir.

Özetleme veya "Dikkat, doğru soru"

Hyper-Threading işe yarıyor, buna hiç şüphe yok. Elbette teknoloji evrensel değil: Hyper-Threading'den muzdarip uygulamalar var ve bu teknoloji yaygınlaşırsa bunların değiştirilmesi istenecektir. Ama aynı şey geçmişte MMX ve SSE'de de olmadı mı ve SSE2'de de olmaya devam etmedi mi?..

Ancak bu, bu teknolojinin gerçeklerimize uygulanabilirliği sorusunu gündeme getiriyor. Xeon'da Hyper-Threading özellikli tek işlemcili sistem seçeneğini derhal iptal edeceğiz (veya ikinci bir işlemci satın alınana kadar buna yalnızca geçici olarak izin vereceğiz): performanstaki %30'luk bir artış bile fiyatı haklı çıkarmaz. her durumda - o zaman normal bir Pentium 4 satın almak daha iyidir. Kalan CPU sayısı iki ve üzeridir.

Şimdi çift işlemcili bir Xeon sistemi (örneğin Windows 2000/XP Professional ile) satın aldığımızı hayal edelim. İki CPU takıldı, Hyper-Threading etkinleştirildi, BIOS dört adede kadar mantıksal işlemci buldu, şimdi vay canına, yola çıkmak üzereyiz... Dur. Peki işletim sistemimiz kaç işlemci görecek? Doğru, iki. Sadece iki tane, çünkü daha fazlası için tasarlanmamıştır. Bunlar iki fiziksel işlemci olacaktır, yani her şey Hyper-Threading devre dışıyken olduğu gibi tamamen aynı şekilde çalışacaktır - daha yavaş değil (iki "ek" mantıksal CPU duracaktır), ancak daha hızlı da olmayacaktır (ek testlerle test edilmiştir, sonuçlar bunları sunun çünkü bunlar tamamen açıktır). Hımmm, pek hoş değil...

Ne anlamda? Peki iş istasyonumuza gerçekten Advanced Server veya .NET Server kurmamız gerekmez mi? Hayır, sistem dört mantıksal işlemcinin tamamını kuracak, tanıyacak ve çalışacaktır. Ancak sunucu işletim sistemi, en hafif tabirle (finansal yönlerden bahsetmiyorum bile) bir iş istasyonunda biraz tuhaf görünüyor. Tek makul durum, çift işlemcili Xeon sistemimizin bir sunucu gibi davranacağı zamandır (en azından bazı montajcılar tereddüt etmeden iş istasyonu Xeon işlemcileri üzerinde sunucular üretmeye başlamıştır). Ancak ilgili işletim sistemine sahip çift iş istasyonları için Hyper-Threading'in uygulanabilirliği hala şüphelidir. Intel artık işletim sistemi lisanslamasının mantıksal CPU sayısı yerine fiziksel CPU sayısına göre yapılmasını aktif olarak savunuyor. Tartışmalar halen devam ediyor ve genel olarak pek çok şey, dört işlemci desteğine sahip bir iş istasyonu işletim sistemi görüp görmeyeceğimize bağlı.

Sunucularda her şey oldukça basit bir şekilde ortaya çıkıyor. Örneğin, Hyper-Threading etkinleştirilmiş çift işlemcili bir Xeon sistemine yüklenen Windows 2000 Advanced Server, dört mantıksal işlemciyi "görecek" ve üzerinde sorunsuz bir şekilde çalışacaktır. Hyper-Threading'in sunucu sistemlerinde neler yapabileceğini değerlendirmek amacıyla, çift işlemcili Xeon MP sistemleri ve çeşitli Microsoft sunucu uygulamaları için Intel Mikroişlemci Yazılım Laboratuvarlarından elde edilen sonuçları sunuyoruz.

İki işlemcili bir sunucu için "ücretsiz" için %20-30'luk bir performans artışı, cazip olmaktan da ötedir (özellikle "gerçek" 4 işlemcili bir sistem satın almakla karşılaştırıldığında).

Yani şu anda Hyper-Threading'in pratik uygulanabilirliğinin yalnızca sunucularda mümkün olduğu ortaya çıktı. İş istasyonlarıyla ilgili sorun, işletim sistemi lisanslamasına ilişkin karara bağlıdır. Hyper-Threading'in başka bir uygulaması oldukça mümkün olsa da - eğer masaüstü işlemciler de bu teknoloji için destek alırsa. Örneğin (hayal edelim), SMP destekli Windows 2000/XP Professional'ın kurulu olduğu, Hyper-Threading destekli Pentium 4'lü bir sistemin nesi kötü?.. Ancak bunda inanılmaz bir şey yok: hevesli Intel geliştiricileri söz veriyor Hyper-Threading'in sunuculardan masaüstü ve mobil sistemlere kadar yaygın şekilde uygulanması.

20 Ocak 2015, 19:43

Hyper-Threading hakkında bir kez daha

  • BT sistemleri testi,
  • Programlama

Bellek performansını Hyper-threading teknolojisi bağlamında değerlendirmenin gerekli olduğu bir zaman vardı. Etkisinin her zaman olumlu olmadığı sonucuna vardık. Bir miktar boş zaman ortaya çıktığında, kendi tasarımımız olan yazılımı kullanarak araştırmaya devam etme ve devam eden süreçleri makine saat döngüleri ve bitleri doğruluğuyla değerlendirme arzusu vardı.

Üzerinde çalışılan platform

Deneylerin amacı Intel Core i7-4700HQ işlemciye sahip bir ASUS N750JK dizüstü bilgisayardır. Saat frekansı 2,4 GHz, Intel Turbo Boost modunda 3,4 GHz'e yükseltildi. Çift kanal modunda çalışan 16 gigabayt DDR3-1600 RAM (PC3-12800) takıldı. İşletim sistemi – Microsoft Windows 8.1 64 bit.

Şekil 1 Çalışılan platformun konfigürasyonu.

İncelenen platformun işlemcisi, Hyper-Threading teknolojisi etkinleştirildiğinde 8 iş parçacığı veya mantıksal işlemci için donanım desteği sağlayan 4 çekirdek içeriyor. Platform ürün yazılımı bu bilgiyi ACPI tablosu MADT (Çoklu APIC Açıklama Tablosu) aracılığıyla işletim sistemine iletir. Platform yalnızca bir RAM denetleyicisi içerdiğinden, işlemci çekirdeklerinin bellek denetleyicilerine yakınlığını bildiren bir SRAT (Sistem Kaynağı Yakınlık Tablosu) tablosu yoktur. Açıkçası, incelenen dizüstü bilgisayar bir NUMA platformu değil, ancak işletim sistemi, birleştirme amacıyla onu, NUMA Düğümleri = 1 satırıyla belirtildiği gibi, tek etki alanına sahip bir NUMA sistemi olarak görüyor. Deneyler, birinci düzey veri önbelleğinin dört çekirdeğin her biri için 32 kilobayt boyutuna sahip olmasıdır. Bir çekirdeği paylaşan iki mantıksal işlemci, L1 ve L2 önbelleklerini paylaşır.

İncelenmekte olan operasyon

Bir veri bloğunun okuma hızının boyutuna bağımlılığını inceleyeceğiz. Bunu yapmak için en verimli yöntemi, yani AVX VMOVAPD komutunu kullanarak 256 bit işlenenleri okumayı seçeceğiz. Grafiklerde X ekseni blok boyutunu, Y ekseni ise okuma hızını göstermektedir. L1 önbelleğinin boyutuna karşılık gelen X noktası civarında, işlenen blok önbellek sınırlarını terk ettikten sonra performansın düşmesi gerekeceğinden bir dönüm noktası görmeyi bekliyoruz. Testimizde, çok iş parçacıklı işleme durumunda, başlatılan 16 iş parçacığının her biri ayrı bir adres aralığıyla çalışır. Uygulama içindeki Hyper-Threading teknolojisini kontrol etmek için her iş parçacığı, bir bitin her mantıksal işlemciye karşılık geldiği bir maske ayarlayan SetThreadAffinityMask API işlevini kullanır. Tek bir bit değeri, belirtilen işlemcinin belirli bir iş parçacığı tarafından kullanılmasına izin verir, sıfır değeri ise bunu yasaklar. İncelenen platformun 8 mantıksal işlemcisi için, 11111111b maskesi tüm işlemcilerin kullanımına izin verir (Hyper-Threading etkindir), 01010101b maskesi her çekirdekte bir mantıksal işlemcinin kullanılmasına izin verir (Hyper-Threading devre dışıdır).

Grafiklerde aşağıdaki kısaltmalar kullanılmıştır:

MBPS (Saniyede Megabayt)saniyede megabayt cinsinden blok okuma hızı;

CPI (Talimat başına Saat)talimat başına saat döngüsü sayısı;

TSC (Zaman Damgası Sayacı)CPU saat sayacı.

Not: TSC kayıt saat hızı, Turbo Boost modunda çalışırken işlemci saat hızıyla eşleşmeyebilir. Sonuçları yorumlarken bu dikkate alınmalıdır.

Grafiklerin sağ tarafında, program iş parçacıklarının her birinde yürütülen hedef işlemin döngü gövdesini veya bu kodun ilk 128 baytını oluşturan talimatların onaltılık dökümü görselleştirilir.

1 numaralı deneyimi yaşayın. Bir iplik



İncir. 2 Tek konu okuma

Maksimum hız saniyede 213563 megabayttır. Bükülme noktası yaklaşık 32 kilobaytlık bir blok boyutunda meydana gelir.

2 numaralı deneyimi yaşayın. 4 işlemcide 16 iş parçacığı, Hyper-Threading devre dışı



Şek. 3 On altı başlıkta okuma. Kullanılan mantıksal işlemci sayısı dörttür

Hyper-Threading devre dışı bırakıldı. Maksimum hız saniyede 797598 megabayttır. Bükülme noktası yaklaşık 32 kilobaytlık bir blok boyutunda meydana gelir. Beklendiği gibi, tek iş parçacığıyla okumaya kıyasla, çalışan çekirdek sayısına bağlı olarak hız yaklaşık 4 kat arttı.

3 numaralı deneyimi yaşayın. 8 işlemcide 16 iş parçacığı, Hyper-Threading etkin



Şekil 4 On altı başlıkta okuma. Kullanılan mantıksal işlemci sayısı sekizdir

Hyper-Threading etkinleştirildi. Maksimum hız saniyede 800.722 megabayttır; Hyper-Threading'in etkinleştirilmesinin bir sonucu olarak neredeyse hiç artmadı. Büyük eksi, bükülme noktasının yaklaşık 16 kilobaytlık bir blok boyutunda oluşmasıdır. Hyper-Threading'in etkinleştirilmesi maksimum hızı biraz artırdı, ancak hız düşüşü artık blok boyutunun yarısında (yaklaşık 16 kilobayt) meydana geliyor, dolayısıyla ortalama hız önemli ölçüde düştü. Bu şaşırtıcı değil, her çekirdeğin kendi L1 önbelleği var ve aynı çekirdeğin mantıksal işlemcileri bunu paylaşıyor.

sonuçlar

İncelenen işlem, çok çekirdekli bir işlemcide oldukça iyi ölçekleniyor. Sebepler: Her çekirdek kendi L1 ve L2 önbelleğini içerir, hedef blok boyutu önbellek boyutuyla karşılaştırılabilir ve her iş parçacığı kendi adres aralığıyla çalışır. Akademik amaçlar doğrultusunda, gerçek dünyadaki uygulamaların genellikle ideal optimizasyondan uzak olduğunu kabul ederek bu koşulları sentetik bir testte oluşturduk. Ancak Hyper-Threading'in bu koşullar altında bile etkinleştirilmesinin olumsuz bir etkisi oldu; tepe hızındaki hafif bir artışla, boyutları 16 ila 32 kilobayt arasında değişen blokların işlem hızında önemli bir kayıp var.