Soru Kumlu köprü ve haswell SSE2 / AVX / AVX2 için döngü başına FLOPS


Sandy-Bridge ve Haswell ile çekirdek başına kaç tane flop yapılabileceğine dair kafam karıştı. SSE ile anladığım kadarıyla, SSE için çekirdek başına döngü başına 4 flop ve AVX / AVX2 için çekirdek başına döngü başına 8 flop olmalıdır.

Bu burada doğrulanmış gibi görünüyor. Çevrim başına teorik maksimum 4 FLOP'a nasıl ulaşabilirim? ,ve burada, Sandy-Bridge CPU özellikleri.

Ancak aşağıdaki bağlantı, Sandy köprüsünün çekirdek başına döngü başına 16 flop ve çekirdek başına döngü başına Haswell 32 flop yapabileceğini göstermektedir. http://www.extremetech.com/computing/136219-intels-haswell-is-an-unprecedented-threat-to-nvidia-amd.

Birisi bunu bana açıklayabilir mi?

Düzenle: Şimdi neden kafamın karıştığını anlıyorum. FLOP teriminin sadece tek kayan noktaya (SP) atıfta bulunduğunu düşündüm. Şimdi testte görüyorum Çevrim başına teorik maksimum 4 FLOP'a nasıl ulaşabilirim? Aslında çift kayan nokta (DP) için, SSE için 4 DP FLOP / devir ve AVX için 8 DP FLOP / devir elde ederler. SP'de bu testi tekrarlamak ilginç olurdu.


44
2018-03-27 09:48


Menşei


Düzenlemenize yanıt olarak: Sayılar tam olarak DP sayılarını iki katına çıkarır. Bunun nedeni, gecikmelerin ve geçişlerin, SIMD yönergelerinin SP ve DP sürümleri ile aynı olmasıdır. (Bazı durumlarda, SP'lerin daha da düşük gecikme süresi vardır.) - Mysticial
Bu kodu, Visual Studio 2012 ile anladığım kadarıyla SP'yi kullanmam için dönüştürdüm. Ancak, hızda bir fark görmüyorum ve toplamı bir hata bildiriyor, bu yüzden biraz daha fazla kod değiştirmem gerekiyor. Buna geri dönmeliyim.
Sayaç DP'yi aldığından beri sayıları iki katına çıkarmanız gerekir. (Değişiklik: 48 * 1000 * iterations * tds * 2 için 48 * 1000 * iterations * tds * 4Ayrıca, SP'de çalışmak için yeniden normalleştirme maskesini değiştirmeniz gerekir: uint64 iMASK = 0x800fffffffffffffull; - Mysticial
4 SSE kaydına göre dört SP yüzdesi nedeniyle. Tekrar teşekkürler. Ayrıca renormalizasyon maskesini imzasız int olarak değiştirdim iMASK = 0x80fffffu. Şimdi işe yarıyor ve dediğin gibi iki kez aldım.


Cevaplar:


FLOP'lar, bir dizi yeni işlemci mikro mimarisini ve bunların nasıl elde edileceğini açıklamaktadır:

Intel Core 2 ve Nehalem:

  • 4 DP FLOP / döngüsü: 2-geniş SSE2 ilavesi + 2-genişlikli SSE2 çarpımı
  • 8 SP FLOP / döngüsü: 4-geniş SSE ek + 4-genişlikli SSE çarpımı

Intel Sandy Köprüsü / Ivy Köprüsü:

  • 8 DP FLOP / döngüsü: 4-genişliğinde AVX ekleme + 4-genişliğinde AVX çarpımı
  • 16 SP FLOP / döngüsü: 8-genişliğinde AVX toplama + 8-genişliğinde AVX çarpımı

Intel Haswell / Broadwell / Skylake / Kaby Gölü:

  • 16 DP FLOP / döngüsü: iki adet 4-FMA (fused multiply-add) talimatları
  • 32 SP FLOP / döngüsü: iki 8-FMA (fused multiply-add) talimatları

AMD K10:

  • 4 DP FLOP / döngüsü: 2-geniş SSE2 ilavesi + 2-genişlikli SSE2 çarpımı
  • 8 SP FLOP / döngüsü: 4-geniş SSE ek + 4-genişlikli SSE çarpımı

Modül başına AMD Buldozer / Piledriver / Steamroller / Ekskavatör (iki çekirdek):

  • 8 DP FLOP / çevrim: 4-FMA
  • 16 SP FLOP / çevrim: 8-geniş FMA

AMD Ryzen

  • 8 DP FLOP / çevrim: 4-FMA
  • 16 SP FLOP / çevrim: 8-geniş FMA

Intel Atom (Bonnell / 45nm, Saltwell / 32nm, Silvermont / 22nm):

  • 1.5 DP FLOP / döngüsü: skaler SSE2 ekleme + skaler SSE2 çarpımı diğer her döngü
  • 6 SP FLOP / döngüsü: 4-geniş SSE ek + 4-genişlikli SSE çarpımı diğer her döngü

AMD Bobcat:

  • 1.5 DP FLOP / döngüsü: skaler SSE2 ekleme + skaler SSE2 çarpımı diğer her döngü
  • 4 SP FLOPs / cycle: 4-genişlikli SSE ilavesi, diğer her döngüde + 4-genişlikli SSE çarpımları diğer her döngüde

AMD Jaguar:

  • 3 DP FLOP / döngüsü: 4 döngüde 4-genişliğinde AVX ilaveli döngü + 4-genişliğinde AVX çarpımı
  • 8 SP FLOP'lar / döngü: 8-genişliğinde AVX ilavesi diğer her döngüde + 8-genişliğinde AVX çarpımı diğer her döngüde

ARM Cortex-A9:

  • 1.5 DP FLOPs / cycle: skaler toplama + skaler çarpım diğer her döngüde
  • 4 SP FLOP / döngüsü: 4-genişlikli NEON eklenmesi diğer her döngü + 4-genişlikli NEON çarpımı diğer her döngüde

ARM Cortex-A15:

  • 2 DP FLOPs / cycle: skaler FMA veya skaler multiply-add
  • 8 SP FLOPs / cycle: 4-genişlikte NEONv2 FMA veya 4-genişlikte NEON multiply-add

Qualcomm Krait:

  • 2 DP FLOPs / cycle: skaler FMA veya skaler multiply-add
  • 8 SP FLOPs / cycle: 4-genişlikte NEONv2 FMA veya 4-genişlikte NEON multiply-add

Çekirdek başına IBM PowerPC A2 (Blue Gene / Q):

  • 8 DP FLOPs / döngüsü: 4 döngülü QPX FMA her döngü
  • SP elemanları DP'ye genişletildi ve aynı birimlerde işlendi

Her iş parçacığı için IBM PowerPC A2 (Blue Gene / Q):

  • 4 DP FLOP / döngüsü: 4-genişlikli QPX FMA her diğer döngü
  • SP elemanları DP'ye genişletildi ve aynı birimlerde işlendi

Çekirdek başına Intel Xeon Phi (Şövalyeler Köşesi):

  • 16 DP FLOPs / döngüsü: 8 çevrimli FMA her döngüde
  • 32 SP FLOP / döngü: 16-FMA her döngüde

Vida başına Intel Xeon Phi (Şövalyeler Köşesi):

  • 8 DP FLOP / çevrim: 8-gen FMA diğer her döngüde
  • 16 SP FLOPs / döngüsü: 16-FMA her diğer döngüde

Çekirdek başına Intel Xeon Phi (Knights Landing):

  • 32 DP FLOP / döngüsü: her çevrimde iki 8-FMA
  • 64 SP FLOPs / döngüsü: her döngüde iki adet 16-geniş FMA

IBM Blue Gene / Q ve Intel Xeon Phi (Knights Corner) için iş parçacığı başına ve çekirdek başına veri bulunmasının nedeni, bu çekirdeklerin çekirdek başına birden çok iş parçacığı çalıştırırken daha yüksek bir eğitim sorunu oranına sahip olmasıdır.


100
2017-07-24 13:35



DP desteği de SSE2'ye eklendi - Marat Dukhan
Cortex-M0 ve M3'ün FPU'ları bile yok, bu yüzden sıfır FLOP / döngü yapıyorlar. M4'de bile FPU isteğe bağlıdır. Cortex-A8, NEON ile 2 SP FLOP / döngüsü yapabilir. Çift duyarlıklı… iyi, VFP pipeli değil A8'de, bu yaklaşık 1/8 DP FLOP / çevrim demektir. - Stephen Canon
@netvope Bunlar, modül başına - Marat Dukhan
Bu bilgilerin nasıl edinileceğine dair bazı referans veya açıklamalarda yardımcı olabilir.
Skylake-X, 1 veya 2 AVX512 FMA ünitesi ile konfigürasyonlarda gelir ... software.intel.com/en-us/forums/intel-isa-extensions/topic/... - michaf


Haswell'in verimi, çarpma ve FMA'dan daha düşüktür. İki çarpma / FMA birimi vardır, ancak sadece bir f.p. birim ekle. Kodunuz esas olarak eklemeler içeriyorsa, maksimum çıktıyı elde etmek için eklemeleri FMA talimatlarına göre 1.0 çarpanıyla değiştirmeniz gerekir.

Haswell'teki FMA talimatlarının gecikmesi 5'tir ve çıktı her saat için 2'dir. Bu, maksimum çıktıyı elde etmek için 10 paralel işlem tutmanız gerektiği anlamına gelir. Örneğin, çok uzun bir liste eklemek isterseniz f.p. sayıları, on parçaya bölmek ve on akümülatör kayıt kullanmanız gerekir.

Bu gerçekten mümkündür, ancak belirli bir işlemci için kim böyle garip bir optimizasyon yapar?


18



Döngüyü elle ayırmanıza gerek yok, biraz derleyicinin açılmasından ve sıra dışı bir HW'den (bağımlılıklarınız olmadığı varsayılarak) önemli bir üretim darboğazına ulaşmanıza izin verebilirsiniz. Bu hiper-iş parçacığına eklenir ve saat başına 2 işlem gerekli hale gelir. - Leeor
@Leeor, belki bunu göstermek için bir kod gönderebilirsin? FMA ile 10 kez açıldığında bana en iyi sonucu veriyor. Cevabımı gör stackoverflow.com/questions/21090873/... - Z boson
Hesaplamaya bağlı olan çoğu HPC kodu (ör. Flop bağlı) çok fazla FMA yapar. Deneyimlerime göre, çok fazla ekleme yapılan yerler bant genişliğine bağlıdır. - Jeff
En yeni Intel nesli daha dengeli bir çıktıya sahiptir. Kayan nokta ekleme, çarpma ve FMA'nın hepsi, saat döngüsü başına 2 talimat ve 4'lük bir gecikme oranına sahiptir. - A Fog