Bir hiper iplik ne kadar hız verir? (teoride)


38

Teorik hızlanmanın hiper iş parçacıklı işlemcilerden ne olduğunu merak ediyorum. % 100 paralelleştirme ve 0 haberleşmesi varsayarsak, iki CPU 2 hızını verirdi. Peki ya hiper dişli CPU?

Yanıtlar:


59

Başkalarının söylediği gibi, bu tamamen göreve bağlıdır.

Bunu göstermek için, gerçek bir kritere bakalım:

görüntü tanımını buraya girin

Bu benim yüksek lisans tezimden alındı ​​(şu anda çevrimiçi olarak mevcut değil).

Bu Şekil nispi hızlandırıcı 1 dizge ile eşleşen algoritmaları (her renk farklı algoritma). Algoritmalar, iki adet Xth X5550 dört çekirdekli işlemci ve hyperthreading ile gerçekleştirildi. Başka bir deyişle: her biri iki donanım iş parçacığını çalıştırabilen toplam 8 çekirdek vardı (= “hyperthreads”). Bu nedenle, benchmark, 16 iş parçacığıyla hızlanmayı test eder (bu konfigürasyonun gerçekleştirebileceği maksimum eşzamanlı iş parçacığı sayısıdır).

Dört algoritmadan ikisi (mavi ve gri) tüm aralık boyunca doğrusal olarak daha fazla veya daha az ölçeklenir. Yani, hiper-titremeden faydalanır.

Diğer iki algoritma (kırmızı ve yeşil; renk körü insanlar için talihsiz seçim) 8 ipliğe kadar doğrusal olarak ölçeklenir. Ondan sonra durgunlaşıyorlar. Bu açıkça, bu algoritmaların hiper-yayılmadan faydalanmadığını gösterir.

Sebep? Bu özel durumda, hafıza yükü; ilk iki algoritma hesaplama için daha fazla belleğe ihtiyaç duyar ve ana bellek veriyolunun performansı ile sınırlandırılır. Bu, bir donanım iş parçacığı belleği beklerken, diğerinin yürütmeye devam edebileceği anlamına gelir; donanım konuları için ana kullanım çantası.

Diğer algoritmalar daha az hafıza gerektirir ve veri yolu için beklemeniz gerekmez. Neredeyse tamamen hesaplanmışlar ve sadece tamsayı aritmetiği kullanıyorlar (aslında bit işlemleri). Bu nedenle, paralel uygulama için potansiyel yoktur ve paralel komut boru hatlarından faydalanılmaz.


1 Yani sadece bir iplikle yürütülmüş gibi algoritma açlığın olarak dört kez çalışır 4 araçlarının bir hızlandırıcı faktörü. Tanım olarak, o zaman, bir iş parçacığı üzerinde yürütülen her algoritmanın göreceli hızlanma faktörü 1'dir.


En iyi cevap :-)
Sklivvz

1
Algoritmaların çekirdek sayısı karşısında çizilen gerçek hızları nelerdir? Yani bu testlerde en hızlı algoritma için hız kazancı nedir? Sadece merak ediyorum :).
crazy2be

@ crazy2be Mavi çizgi için ( Horspool'un algoritması ), çalışma süresi 16 iş parçacığıyla 4.16 saniyeden 0.35 saniyeye çıkar. Yani hız 11,74. Ancak, hiper iş parçacıklı. Çekirdek sayısına karşı çizildiğinde, bu algoritmanın hızlanması 8 çekirdekte 7.17'dir.
Konrad Rudolph

5
Bu cevabı olan tek sorun sadece bir kez oy veremem. Öznel bir soru için şaşırtıcı derecede nesnel bir cevabı;)
Journeyman Geek


20

Sorun şu, göreve bağlı.

Hiper-işin arkasındaki kavram, temel olarak tüm modern CPU'ların birden fazla yürütme sorununa sahip olmasıdır. Genelde şimdi bir düzine kadar yaklaşıyor. Tamsayı, kayan nokta, SSE / MMX / Akış (bugün ne denirse) arasında bölünmüştür.

Ek olarak, her birim farklı hızlara sahiptir. Yani bir şeyi işlemek için bir tamsayı matematik birimi 3 çevrimi gerekebilir, ancak 64 bitlik bir kayan nokta bölmesi 7 döngü alabilir. (Bunlar hiçbir şeye dayanmayan efsanevi sayılardır).

Sıra dışı çalıştırma, çeşitli birimleri mümkün olduğunca dolu tutmada çok yardımcı olur.

Ancak, herhangi bir görev, her bir yürütme birimini her an kullanmayacaktır. İpleri bölmek bile tamamen yardımcı olabilir.

Böylece teori, ikinci bir CPU varmış gibi davranarak, başka bir iş parçacığı üzerinde çalışabilir,% 98 SSE / MMX malzeme olan Ses kodlama kodunuz kullanılmadığı için mevcut kullanım birimlerini kullanarak çalıştırılabilir. bazı şeyler dışında boşta.

Bana göre, bu tek bir CPU dünyasında daha mantıklı, orada ikinci bir CPU'nun sahte olması, bu sahte ikinci CPU'yu idare etmek için çok az (varsa) fazladan kodlama ile ipliklerin daha kolay geçmesini sağlar.

3/4/6/8 çekirdek dünyasında, 6/8/12/16 CPU'lara sahip olmak yardımcı oluyor mu? Dunno. Kadar? Eldeki görevlere bağlıdır.

Bu nedenle, sorularınızı yanıtlamak için, işleminizdeki, hangi yürütme birimlerini kullandığı ve CPU'nuzda hangi yürütme birimlerinin kullanılmadığı / kullanılmadığı ve bu ikinci sahte CPU için kullanılabilir olduğu görevlere bağlı olacaktır.

Bazı hesaplamalı işlemlerin 'sınıflarının' fayda sağladığı söylenir. Ancak zor ve hızlı bir kural yoktur ve bazı sınıflar için işleri yavaşlatır.


2
Her ne kadar "1.7 zaman hızlandırması" gibi bir şey arıyor olmama rağmen, bu sorunun cevabı siyah-beyaz görünmüyor.
Mikhail

@Mikhail: Mesele şu ki basit bir faktör yok - bu, yaşamda sık sık olduğu gibi, :-).
sleske

4
Oy hakkı haklı. Yine de bir kelime oyunu: tek bir çekirdeğin hiper-yayma işleminden çok sayıda çekirdekten daha fazla yararlanması için önceden bir neden yoktur. Yanlış görev için, ne kar. Doğru görev için, her ikisi de aynı etkene göre kar eder.
Konrad Rudolph

@Konrad: Sanırım aldığım nokta, bir çekirdek ve iki çekirdek arasındaki farkın, 4 ve 8 veya 2 ve 4 arasındaki farktan daha değerli olabileceğini düşünüyorum. Yani, kötü işlenen bir uygulama için ikinci bir çekirdeğe sahip olmak yardımcı olabilir Biraz daha.
geoffc

“Kötü iş parçacıklı bir uygulama için” - önemli olan bu. Ancak gerçekçi olarak, çoğu uygulamanın iş parçacığı desteği zayıf olduğundan bir noktanız var.
Konrad Rudolph

5

Geoffc'in cevabını eklemek için bazı anekdot kanıtlarım var. Aslında aslında Hyththreading özellikli bir Core i7 CPU'ya (4 çekirdekli) sahip oldum ve biraz fazla iletişim ve senkronizasyon gerektiren ancak yeterli miktarda olan bir görev olan video kodlama ile biraz oynadım. Bir sistemi etkili bir şekilde tam olarak yükleyebileceğiniz paralellik.

Genelde, işlemden geçirilen yaklaşık 1 ekstra CPU değerine eşdeğer 4 hiper iş parçacıklı "ekstra" çekirdeği kullanarak, göreve ne kadar CPU atandığı ile oynama deneyimim. Ekstra 4 "aşırı işlenmiş" çekirdek, 3 ila 4 "gerçek" çekirdek ile aynı miktarda kullanılabilir işlem gücüne eklenmiştir.

Bu, kesinlikle şifreleyen bir test değildir, çünkü tüm kodlama iş parçacıkları CPU'larda aynı kaynaklar için rekabet edebilir, ancak bana göre, genel işlem gücünde en azından küçük bir destek olduğunu gösterdi.

Gerçekten yardımcı olup olmadığını göstermenin tek gerçek yolu, aynı anda birkaç farklı Tamsayı / Kayan Nokta / SSE tipi testi çalıştırmak ve aynı zamanda hiperthreading etkin ve devre dışı olan bir sistemde çalıştırmak ve kontrollü bir işlemde ne kadar işlem gücünün mevcut olduğunu görmek olacaktır. ortamı.


1
Peki, açık bir nokta - bu uygulamaya bağlıdır. Çekirdek 0 ve çekirdek 0-h, yavaş RAM kullanmadan aynı önbellek üzerinden iletişim kuracağından yüksek iletişim bilgi işleminin hızlanabileceğinden eminim.
Mikhail

1
@Mikhail, o zaman sorun şu ki, eğer her iki iş parçacığı büyük miktarda işlem gücü gerektiriyorsa, o zaman her ikisi de aynı kaynaklar için rekabet edecek ve her iki işlemcinin L3 önbelleği paylaşılan CPU'lardan (i7 L1 ve L2 önbelleğe sahip olacak) iletişim kurmadan çok daha iyi olacaklarıdır. çekirdek ve paylaşılan bir L3 önbellek) ve hatta sistem belleği ve ayrı ayrı görevlerini yerine getirir. Bunların hepsi büyük bir salınımlı ve döner kavşak egzersizi ...
Mokubai

3

Diğerlerinin dediği gibi CPU ve iş yüküne çok bağlı.

Intel diyor ki :

Hyper-Threading Teknolojisine sahip Intel® Xeon® işlemci MP'de ölçülen performans, bu teknoloji için ortak sunucu uygulama karşılaştırma ölçütlerinde% 30'a varan performans artışı sağlar

(Bu bana biraz muhafazakar görünüyor.)

Ve burada daha fazla sayıda daha fazla sayıda başka bir kağıt daha var (hepsini henüz okumadım) . Bu yazının ilginç bir özelliği de, hiper-diş etmenin bazı görevler için ince yapıları yavaşlatmasıdır .

AMD'nin Bulldozer mimarisi ilginç olabilir . Her bir çekirdeği etkin bir şekilde 1.5 çekirdek olarak tanımlarlar. Bu, potansiyel performansından ne kadar emin olduğunuza bağlı olarak, aşırı derecede yüksek okuyuculu veya alt standart çok çekirdeklidir. Bu parçadaki sayılar, 0,5x ile 1,5x arasında bir yorum hızına işaret eder.

Son olarak, performans işletim sistemine de bağlıdır. İşletim sistemi, umarım, yalnızca CPU olarak gizlenen köprüler tercih edilen işlemlere gerçek işlemcilere gönderir . Aksi halde, çift çekirdekli bir sistemde, boşta çalışan bir işlemciye ve iki iş parçacığının çarptığı çok meşgul bir çekirdeğiniz olabilir. Elbette, tüm modern işletim sistemlerinin uygun şekilde çalışabildiğini, ancak bunun Windows 2000'de olduğunu hatırlıyor gibiyim.


1
İşletim sistemi dişlilerin birbirlerini saat-engellemediğinden emin olmalı :)
Mikhail
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.