Intel'in Haswell çipi neden FP çarpımının ekleme işleminden iki kat daha hızlı olmasına izin veriyor?


35

Yığın Taşması ile ilgili bu çok ilginç soruyu okuyordum:

Tamsayılı çarpma, modern bir CPU'daki ekleme ile aynı hızda yapılıyor mu?

Yorumlardan biri şöyle dedi:

“Haswell'de, FP çarpma işleminin FP toplama işleminin iki katı olduğu bir şey değil. Bunun nedeni, hem 0 hem de 1 numaralı bağlantı noktalarının çoğaltma için kullanılabileceği, ancak yalnızca ekleme için 1 numaralı bağlantı noktasının da kullanılabileceği.” -multiply, her iki bağlantı noktasının da yapabildiğinden ekler. "

Neden ilaveye kıyasla iki kat daha fazla eşzamanlı çarpmaya izin verecekleri?


3
@DKNguyen teşekkür ederiz! Ancak çarpma, toplama işleminden çok daha fazla elektronik içerir (aslında toplama, çarpma işleminin son basamağıdır, bu nedenle çarpma için gerekli olan devre, toplama için gerekli olanı da içerir), bu yüzden daha az kalıp alanını nasıl alabileceğini göremiyorum!
user1271772

5
FP çarpma olduğunu eklenmesi. Logaritma bakınız.
Janka,

9
@Janka FP çarpımı üslerin eklenmesini gerektirse de, gerçekte mantisleri çarpmak gerekir. Depolanan mantis bir logaritma değildir.
Elliot Alderson

6
Skylake'deki FWIW "saf ekleme" verimi iki katına çıktı, bu yüzden Haswell / Broadwell döneminden kalma bir merak, bir tür doğal şey değil.
Ağustos’ta

4
@ user1271772 evet, yine de aynı limanlardır: 0 ve 1 numaralı bağlantı noktalarına ekleme ve 0 ve 1 numaralı bağlantı noktalarına da çarpma. Bu, aynı zamanda, bazı ek benzeri işlemleri de kapsamaktadır, yani Min / Maks / (orada bir karışık ya da yük μop çok sık yoktur) dönüştürülmesi asıl yapan bir dönüşüm μop karşılaştırma
Harold

Yanıtlar:


37

Bu muhtemelen, bedenin değilse sorunun başlığına cevap verir:

Kayan nokta eklenmesi, eklemeden önce (iki üst kısım arasındaki farka bağlı olarak) potansiyel olarak toplayıcıdan önce büyük bir değişken miktarda kayma gerektiren iki mantisin hizalanmasını gerektirir. Ardından, mantis ilavesi sonucunun yeniden normalleştirilmesi gerekebilir ve potansiyel olarak kayan nokta sonucunu doğru bir şekilde biçimlendirmek için başka bir büyük değişken kayma miktarı gerektirir. İki mantis namlu kaydırıcısı, potansiyel olarak daha iyi geçit gecikmesi, daha büyük tel gecikmeleri veya iyi sıkıştırılmış bir taşıma-kaydetme-toplayıcı-ağaç çarpanı ön ucunun gecikmesini aşan fazladan döngüleri gerektirir.

OP için eklendi: 2 milimetre ve 2 kilometre uzunluğunun eklenmesinin her iki ünitenin de 4 olmadığını unutmayın. Bunun nedeni, bir veya diğer ölçümleri eklemeden önce aynı ölçek veya birim sunumuna dönüştürmek gerekmesidir. Bu dönüşüm esasen 10'luk bir güç ile çarpmayı gerektirir. Aynı şeyin kayan nokta eklemesi sırasında genellikle olması gerekir, çünkü kayan nokta sayıları değişken bir şekilde ölçeklendirilmiş tam sayıların bir şeklidir (örneğin, bir birim veya ölçek faktörü, bir üs, bununla ilişkili her numara). Bu nedenle, her ikisinin de aynı birimleri veya ölçeği temsil etmesi için ham mantis bitlerini eklemeden önce sayılardan birini 2 gücüyle ölçeklendirmeniz gerekebilir. Bu ölçeklendirme esasen 2 gücüyle basit bir çarpım biçimidir. Bu nedenle, kayan nokta eklenmesi çarpma gerektirir(ki bu 2'nin bir gücü olduğu için, derin alt mikron litografi devrelerinde nispeten yavaş olabilen transistör boyutlarına göre nispeten uzun teller gerektirebilen değişken bir bit kaydırma veya namlu değiştiricisi ile yapılabilir). İki sayı çoğunlukla iptal edilirse (biri neredeyse diğerinin negatifi olduğundan), sonucu uygun şekilde biçimlendirmek için eklemenin sonucunu yeniden ölçeklendirmek gerekebilir. Bu nedenle, ayrıca, sayı formatının (IEEE kayan nokta) doğası gereği, eşdeğer birimleri veya ölçeği temsil eden bir ham sabit (sonlu) sayıdaki mantis bitinin ikili ilavesini çevreleyen 2 çarpma (ön ve son) adımı gerektiriyorsa, ekleme yavaş olabilir. ).

Eklendi # 2: Ayrıca, birçok kriter FMACS (katlanır), çıplak eklemelerden daha fazla ağırlıktadır. Kaynaşmış bir MAC'de ekin hizalaması (kayması) çoğunlukla çoğulla paralel olarak yapılabilir ve mantis eklemesi genellikle nihai taşıma yayılımından önce CSA ağacına dahil edilebilir.


Yorumlar uzun tartışmalar için değildir; bu konuşma sohbete taşındı . Ulaşılan sonuçlar, soru ve / veya cevaplarda tekrar düzenlenmelidir.
Dave Tweed

3
BS'i arıyorum. Kuşkusuz, bir FP çarpma işlemindeki gerçek çarpma iki varil kaymasından daha zor olamaz.
user253751

5
"zor", potansiyel olarak daha hızlı ve proje kısıtlamaları ve hedefleri göz önüne alındığında optimizasyona değer 4 farklı şeydir.
hotpaw2

3
@ immibis: Haswell'den önce Intel CPU'larda 1 SIMD FP ekleme ünitesi (3 döngü gecikme süresi) ve 1 SIMD FP mul ünitesi (5 döngü gecikme süresi) vardı. Öyleyse ekle çarpmaktan daha hızlıdır. (Haswell'in, SKL'deki gibi FMA biriminde çalıştırmak yerine fma ve mul için 2x FMA birimi eklerken ayrı bir FP ekleme birimi tutmasının nedeni budur). Ayrıca, SIMD-int değişimleri 1c gecikmeyle çalışır, 5c gecikmeyle SIMD-int mul ile çalışır (bir FMA birimindeki anlamlı ve çoğaltıcılarla ilgili piggyback). Yani evet, vardiya çoğalmaktan çok daha ucuz. Hem ekleme hem de mul tamamen boru hattına bağlanmıştır, böylece her ikisi de çıkışı normalleştirmek için ayrı bir namlu kaydırıcıya ihtiyaç duyarlar.
Peter Cordes

22

FP çarpımında, üs işleminin basit bir toplama olduğu ortaya çıkar (tam olarak log alanındaki çarpımın sadece ekleme olması nedeniyle). Logaritma ile karşılaştınız, umarım.

Şimdi logaritmik biçimde iki sayı eklemenin ne kadar zor olduğunu düşünün ...

Kayan nokta, her iki yönüyle birlikte doğrusal ve kütük alanları arasında gri bir alanda yaşar. Her FP numarası, bir mantis (doğrusal olan) ve bir (logaritmik) üs içerir. Mantideki her bir bitin anlamını belirlemek için, önce üssüne bakmalısınız (bu sadece bir ölçek faktörüdür).

FP ilavesinde, genel durumdaki üs işleme, her iki vardiya kaymasının etkin bir şekilde hafif basitleştirilmiş bir çarpımın özel bir durum olduğu mantılsısının iki kez kaydırmasını gerektirir.

(İlk vardiya, her iki girişi de aynı 2 gücüne hizalar, böylece bir mantis bitinin her bir işlemcide aynı ikili ağırlığa sahip olmasını sağlar.

Ondalık bir örnek yeterli olacaktır (açıkçası ikili kullanılmasına rağmen) ...

(3103)+(1101)=(3103)+(0.0001103)

İkinci çıktıyı yeniden ölçeklendirir ...

1100+(0.999100)=0.001100=1103

Bu yüzden paradoksal olarak, bir FP ilavesi, aralarındaki mantis ilavesi ile sırayla yapılması gereken iki çarpma gibi bir şeyi içerir. Bu ışıkta, bildirilen performans çok şaşırtıcı değil.


8
"Logaritmik biçimde iki sayı eklemenin ne kadar zor olduğunu düşünün" oldukça aydınlatıcıydı.
Peter - Monica,

1
Neyse ki, kayan nokta üstelleri tam sayı olsa da, 1.3 + 2.3 = 2.34 gibi bir şey eklemeniz gerekmez, bu sadece mantislerin değişmesidir.
ilkkachu

1
Döngü başına iki çarpma yapabilmenizin nedeni, çarpma ünitesinin toplama ünitesinden daha hızlı olması değil, iki çarpma ünitesi olmasıdır (pjc50'nin cevabındaki şemaya bakınız). Neden bir ekleme biriminin çarpma biriminden daha yavaş olduğunu düşündüğünüzü açıklayarak bu soruyu cevaplayamazsınız. Bunun yanı sıra, şu ana kadarki diğer cevaplar toplama ünitesinin daha düşük gecikme süresi olduğunu söyleyerek toplama işleminin daha basit bir işlem olduğunu düşündürmektedir.
user253751

2
@ immibis: gözlemin doğru. Ancak soru, "neden bu durumda? Neden iki ekleme birimi bulunmuyor, buna ek olarak mpy'den daha basit / daha ucuz olduğu göz önüne alınmıyor?" Cevabın bir kısmı, "FP'de, gerçekten kolay değil" dir. silikon. Bu kısmı genişletmek için diğer cevapları bırakacağım.
Brian Drummond,

Bazı bilgisayar bilimcileri (örneğin, Kahan (IEEE754 FP mimarı) ve Knuth), "mantissa" nın yanlış bir kelime olduğunu çünkü doğrusal (logaritmik değil ) olduğunu iddia ediyor . Tercih edilen modern terim önemlidir. en.wikipedia.org/wiki/Significand#Use_of_%22mantissa%22 . "Mantissa", ancak daha az heceli, daha hoş görünümlü bir kelimedir.
Peter Cordes

16

TL: DR : Intel, SSE / AVX FP gecikme süresinin verimden daha önemli olduğunu düşündüğü için Haswell / Broadwell'deki FMA ünitelerinde çalıştırmamayı seçti.


Haswell (SIMD) FP'yi FMA ( Fused Multiply-Add ) ile aynı yürütme birimlerinde çoğaltır, çünkü bunlardan iki tanesine sahiptir, çünkü bazı FP-yoğun kodları talimat başına 2 FLOP yapmak için çoğunlukla FMA kullanabilir. FMA ile aynı 5 döngü gecikmesi ve mulpsönceki CPU'larda olduğu gibi (Sandybridge / IvyBridge). Haswell 2 FMA birimi istedi ve her ikisinde de çarpma işlemine izin vermenin dezavantajı yok çünkü bunlar önceki CPU'larda tahsisli çarpma ünitesi ile aynı gecikme süresi.

Ama yine de çalıştırmak için önceki işlemcilerden adanmış SIMD FP eklenti ünitesi tutar addps/ addpd3 döngü gecikmesi ile. Muhtemel akıl yürütmenin, pek çok FP ekleyen kodun gecikme üzerinde darboğaz olma eğiliminde olduğunu, verimsizlik olabileceğini okudum. Bu, GCC otomatik vektörleştirmesinden sık sık aldığınız gibi, yalnızca bir (vektör) akümülatöre sahip bir dizinin saf toplamı için kesinlikle geçerlidir. Ancak, Intel'in bunun mantıklı olduğunu onaylayıp onaylamadığını bilmiyorum.

Broadwell aynıdır ( ancak hızlandırdı mulps/mulpd FMA 5c kaldı iken 3c gecikme için). Belki de FMA birimini kısayol haline getirebildiler ve kukla bir eklenti yapmadan 0.0ya da tamamen farklı bir şey yapmadan önce çarpma sonucunu elde ettiler ve bu çok basit. BDW çoğunlukla, çoğu küçük değişiklik gösterdiği için, çoğunlukla HSW’nin daralmasıdır.

Skylake'de her şey FP (ekleme dahil) FMA ünitesinde 4 döngü gecikmesi ve 0.5c verim ile çalışır, tabii ki div / sqrt ve bitsel boole'lar (örneğin mutlak değer veya olumsuzlama için) hariç. Intel, düşük gecikmeli FP eklemesi için ekstra silikonun olmadığı ya da dengesiz addpsverimin sorunlu olduğuna karar vermişti . Ayrıca gecikmeleri standartlaştırmak, geridönüşüm çakışmalarından kaçınmayı (aynı sonuçta 2 sonuç hazır olduğunda) uop zamanlamada kaçınmayı kolaylaştırır. yani programlama ve / veya tamamlama portlarını basitleştirir.

Öyleyse evet, Intel bir sonraki büyük mikro mimarlık revizyonunda (Skylake) değişiklik yaptı. FMA gecikme süresini 1 döngü azaltmak, gecikme sınırı olan durumlar için özel bir SIMD FP ekleme ünitesinden daha küçük hale getirmiştir.

Skylake ayrıca, Intel’in AVX512’e hazır olduğunu gösteriyor; ayrı bir SIMD-FP toplayıcıyı 512 bit genişliğe genişletmek daha fazla kalıp alanını alacaktı. Skylake-X'in (AVX512 ile) bildirildiği gibi, daha büyük L2 önbellek ve (bazı modellerde) "5. bağlantı noktasına" cıvatalı "512 bitlik bir FMA ünitesi hariç, neredeyse Skylake-client ile aynı çekirdeğe sahip.

SKX, 512 bit uops uçuştayken 1 SIMD ALU portunu kapatır, ancak vaddps xmm/ymm/zmmherhangi bir noktada yürütülmesi gereken bir yol gerekir . Bu, 1 numaralı bağlantı noktasında kendisine tahsis edilmiş bir FP ADD ünitesine bir sorun yarattı ve mevcut kodun performansından kaynaklanan değişiklik için ayrı bir motivasyon oldu.

Eğlence gerçeği: Skylake, KabyLake, Coffee Lake ve hatta Cascade Lake'ten gelen her şey, bazı yeni AVX512 talimatları ekleyen Cascade Lake hariç, mikromimari olarak Skylake ile aynıydı. IPC aksi takdirde değişmedi. Daha yeni işlemciler daha iyi iGPU'lara sahipler. Buz Gölü (Sunny Cove mikro mimarisi), birkaç yıl içinde ilk kez, gerçek anlamda yeni bir mikro mimari görmüştük (hiç yayılmamış Cannon Lake hariç).


Bir FMUL biriminin bir FADD biriminin karmaşıklığına dayanan argümanlar ilginçtir, ancak bu durumda ilgili değildir . Bir FMA birimi, bir FMA 1'in parçası olarak FP eklemesi yapmak için gerekli tüm kaydırma donanımını içerir .

Not: x87 fmulkomutunu kastetmiyorum, SSE / AVX SIMD / scalar FP'yi 32 bit tek duyarlıklı / floatve 64 bitlik doublehassasiyeti (53 bitlik anlam ve aka mantis) destekleyen ALU ile çarpın . örneğin mulpsveya gibi talimatlar mulsd. Gerçek 80-bit x87 fmul, Haswell'de , 0 numaralı bağlantı noktasında hala yalnızca 1 / saat verimdir.

Modern CPU'lar buna değdiğinde ve fiziksel mesafe yayılma gecikmesi problemlerine neden olmadığında problemlere atmak için yeterli sayıda transistöre sahiptir . Özellikle sadece bir süre aktif olan icra birimleri için. Bkz. Https://en.wikipedia.org/wiki/Dark_silicon ve bu 2011 konferansı: Dark Silicon ve Multicore Ölçeklendirmenin Sonu. Bu, CPU'ların büyük FPU verimi ve büyük tamsayı verimi elde etmesini mümkün kılan şeydir, ancak her ikisini de aynı anda yapmazlar (çünkü bu farklı yürütme birimleri aynı sevkiyat limanlarındadır, böylece birbirleriyle rekabet ederler). Mem bant genişliği üzerinde darboğaz olmayan, dikkatlice ayarlanmış bir çok kodda, sınırlayıcı faktör olan arka uç yürütme birimleri değil, bunun yerine ön uç komut verimidir. ( geniş çekirdekler çok pahalıdır ). Ayrıca bkz . Http://www.lighterra.com/papers/modernmicroprocessors/ .


Haswell'den önce

HSW önce , Nehalem ve Intel Sandy Bridge gibi Intel CPU'lar Yani ayrı yürütme birimleri ve üretilen iş dengeli edildi çarpma port 0 ve SIMD FP üzerinde port 1. eklenti SIMD FP vardı. ( https://stackoverflow.com/questions/8389648/how-do-i-achieve-the-theoretical-maximum- of-4-flops-per-cycle

Haswell, Intel işlemcilere FMA desteği verdi (AMD, Buldozer'da FMA4'ü piyasaya sürdükten birkaç yıl sonra, Intel, 4 işlemcili olmayan 3 işlemcili FMA'yı uygulayacaklarını açıklayacak kadar gecikmeden bekleyerek sahtekarlık yaptı. yıkıcı hedef FMA4). Eğlenceli gerçek: AMD Piledriver hala FMA3 ile ilk x86 işlemcisiydi , Haziran 2013'de Haswell'den bir yıl önce

Bu, bazı girdilerin 3 girişi olan tek bir girişi bile desteklemesini gerektiriyordu. Yine de, Intel hepsi bir araya geldi ve sürekli daralan transistörlerden faydalandı ve 256-bitlik iki SIMD FMA ünitesine sahip oldu ve Haswell'i (ve haleflerini) FP matematiği için canavara çevirdi.

Intel’in aklında olabilecek bir performans hedefi, BLAS'ın yoğun matmul ve vektör nokta ürünü olmasıydı. Her ikisi de çoğunlukla FMA'yı kullanabilir ve sadece eklemek gerekmez .

Daha önce de belirttiğim gibi, çoğunlukla veya sadece FP ilavesi yapan bazı iş yükleri, gecikme (çoğunlukla) verimsizlik nedeniyle tıkanmış durumda.


Dipnot 1 : Ve bir çarpanı ile 1.0, FMA kelimenin tam anlamıyla eklenmesi için kullanılabilir, ancak addpstalimattan daha kötü gecikme ile . Bu, L1d önbelleğinde sıcak olan bir dizinin toplanması gibi iş yükleri için potansiyel olarak yararlıdır; burada FP, verimin eklendiği gecikmeden daha önemlidir. Bu, yalnızca gecikmeyi gizlemek için elbette birden fazla vektör akümülatörü kullanıyorsanız ve FP yürütme birimlerinde 10 FMA işlemini uçuşta tutarsanız yardımcı olur (5c gecikme / 0.5c çıkış = 10 işlem gecikme süresi * bant genişliği ürünü). Bunu bir vektör nokta ürünü için FMA'yı kullanırken de yapmanız gerekir .

David Kanter'in NHM, SnB ve AMD Bulldozer-ailesi için hangi limanın bulunduğu blok şemasına sahip Sandybridge mikro mimarisini yazdığını görün . (Ayrıca bkz. Agner Fog'un kullanım tabloları ve asm optimizasyon mikroarş kılavuzu, ayrıca https://uops.info/ ve birçok Intel mikro mimarisinin nesillerindeki neredeyse her komutun deneme, gecikme ve gecikme / verim deneylerini de vardır.)

Ayrıca ilgili: https://stackoverflow.com/questions/8389648/how-do-i-achieve-the-theoretical-maximum-of-4-flops-per-cycle


1
Eğer bu sözüme isteyip merak ediyoruz: Yığın taşması, ben de dahil olmak üzere altın rozetler bulunur [cpu-architecture], [performance], [x86-64], [assembly], ve [sse]. Collatz varsayımını elle yazılmış montajdan daha hızlı test etmek için C ++ koduna bir cevap yazdım - neden? birçok insanın iyi olduğunu düşündüğü. Ayrıca bu OoO boru hattı yürütme hakkında.
Peter Cordes

“BDW çoğunlukla, çoğu değişiklik küçük olmak üzere, çoğunlukla HSW’nin daralmasından kaynaklanıyor” dedi. Muhtemelen maddi sebeplerden dolayı ilk seferde biten bazı optimizasyonları bilerek bırakmış gibi görünmesini sağlar.
Jpaugh

2
@jpaugh: Bkz. en.wikipedia.org/wiki/Tick%E2%80%93tock_model - Intel'in 2006 yılındaki planı ( 10nm'da bir barikatı vuruncaya kadar), diğer küçük değişikliklerle birlikte yeni bir süreç üzerinde küçüldü, sonra yeni mimari Zaten test edilmiş süreçte. Unutmayın ki gelişme yıllarca uçuşta gelecek gelecek tasarımlarla birlikte devam ediyor: bir sonrakine başlamadan önce bir tanesini bitirmiyorlar. Broadwell her zaman 14nm üretim işlemlerinden tam anlamıyla yararlanan Skylake "tock" undan önce sadece bir "kene" olarak düşünülmüştü ve sürecin hata ayıklanması konusunda endişelenmenize gerek yoktu, sadece tasarım
Peter Cordes,

Bağlantıyı takdir ediyorum. Esasen benim hissettiğimden daha fazla hassasiyete rağmen, duygularımı yansıttın.
Jpaugh

8

Bu bölüme bakacağım:
“Neden izin verecekleri? ”…
TL; DR - çünkü bu şekilde tasarladılar. Bu bir yönetim kararıdır. Tabii mantis ve bit kaydırıcıların cevapları var, ancak bunlar yönetim kararına giren şeyler.

Neden böyle tasarladılar? Cevap, özelliklerin belirli hedeflere ulaşmak için yapılmış olmasıdır. Bu hedefler performans ve maliyeti içerir. Performans operasyonlara değil, Crysis'teki FLOPS ya da FPS gibi bir kriterdir.
Bu kıyaslamaların bir fonksiyon karışımı olacaktır, bunlardan bazıları aynı anda işlenebilir.
Tasarımcılar, A gerecinin iki işlevinden ziyade iki A gereci işlevine sahip olduklarını anlarlarsa, A gereci A ile devam edeceklerdir.

Superscalar ve super boru hatları (çok çekirdekli önce) ilk kez ticari yongalarda yaygın hale geldiğinde, bunlar performansı artırmak için vardı. Pentium'un iki borusu var ve hiçbir vektör birleşmiyor. Haswell'de daha fazla boru, vektör birimi, daha derin bir boru, özel işlevler ve daha fazlası bulunur. Neden her şeyden iki tane yok? Çünkü onu bu şekilde tasarladılar.


Daha alakalı bir performans hedefi, BLAS yoğun matmul ve vektör nokta ürünü olabilir. Her ikisi de çoğunlukla FMA'yı kullanabilir ve sadece eklemek gerekmez.
Peter Cordes,

Bir ürün kutusunda BLAS'ın yoğun matmazmasını ve vektör noktasını hiç görmedim. Bunları reklamlarda görmedim. Bunları bir ürün incelemesinde görmedim. (Önemli olduklarından emin olun, ancak mühendislik yönetimi takip eder, yönetim pazarlamayı takip eder, pazarlama satışları takip eder. Satışlar normal kişilerce satın alınır.
MikeP

1
Linpack gibi kriterler içeren CPU incelemeleri gördüm. Ama yine de, söylediğiniz gibi (teorik olarak maks.) FLOPS reklam verir ve önbellek devam ederse temelde performans performansı için bir vekil budur. Herhangi bir SPECfp kriterinin, her iki FMA birimini HSW veya SKL'de dolaştırmaya yaklaşıp yaklaşmadığından emin değilim, ancak SPEC kriterleri çok önemlidir. Her bir satış birer birer perakende satış değildir; bazıları ne zaman yükseltileceğine karar veren süper bilgisayar kümesi alıcıları veya şirket sunucu çiftlikleri gibi karmaşık alıcılardır. Sanırım, bu satışlarda da marjlar daha yüksek.
Peter Cordes

6

Intel'den gelen bu şema yardımcı olabilir:

Haswell İcra Birimine Genel Bakış

Her birime bir FMA (kaynaşmış çoklu toplama), bir çarpma ve tek bir toplayıcı vermişler gibi görünüyor. Altındaki donanımı paylaşabilirler veya paylaşmayabilirler.

Sorusu neden işlemci fiili kullanım durumları türetilmiş bir dizi kriteri, hedef olacaktır: İç tasarım gerekçeler olmadan cevaba zor bir çok şey, ama mor kutuya metin bize "çiftler zirve arası terlik" ile bir ipucu verir. FMA bunlarda çok popülerdir, çünkü temel matris çarpımının birimidir. Çıplak ilavesi daha az popülerdir.

Belirtildiği gibi, çarpma parametresinin 1, hesaplama (A x 1) + B olduğu bir FMA komutuyla ekleme yapmak için her iki bağlantı noktasını da kullanabilirsiniz. Bu, çıplak eklemeden biraz daha yavaş olacaktır.


FP Multiply FMA ünitesinde çalışır. FP ekleme, yalnızca 1 numaralı bağlantı noktasındaki özel SIMD FP ekleme biriminde düşük gecikme süresiyle çalışır. Bazı transistörleri bu bağlantı noktasında FMA ünitesiyle paylaşıyor olabilir, ancak okuduğumdan itibaren bunu sağlamak için önemli bir alan gerekli olduğu izlenimini edindim.
Peter Cordes,

Daha fazla ayrıntı içeren bir cevap gönderdi .
Peter Cordes

4

Zaman alıcı adımlara bir göz atalım:

Ekleme: Üstleri hizalayın (çok büyük bir vardiya işlemi olabilir). Bir 53 bit toplayıcı. Normalleştirme (en fazla 53 bit).

Çarpma: 53 x 53 bir bit ürünü iki 106 bit sayının toplamına düşürmek için bir büyük toplayıcı ağ. Bir 106 bit toplayıcı. Normalleştirme. Bit ürünleri iki adede düşürmek son toplayıcı kadar hızlı yapılabilir.

Eğer çarpma değişken zamanını yapabilirseniz, normalizasyonun çoğu zaman sadece bir bit kayması avantajına sahip olursunuz ve diğer vakaları çok hızlı bir şekilde tespit edebilirsiniz (denormalize girişler veya üs sayısı çok küçük).

Ek olarak, normalleştirme adımlarına ihtiyaç duymak çok yaygındır (eşit boyutta olmayan sayılar eklemek, yakın sayıları çıkarmak). Yani çarpma için hızlı bir yola sahip olmak ve yavaş yoldan büyük bir darbe almak için göze alabilirsiniz; ek olarak yapamazsın.

PS. Yorumların okunması: Normalleştirilmiş sayıların eklenmesinin bir cezaya yol açmayacağı mantıklıdır: Sadece üstleri hizalamak için kaydırılan bitler arasında çoğunun sıfır olduğu anlamına gelir. Ve denormalize sonuç, üssü çok küçük yaparsa, baştaki sıfırları kaldırmak için kaydırmayı durdurduğunuz anlamına gelir.


Intel CPU'ları aslında bir mikrokod asistanı ile normal altı çarpma işlemlerini gerçekleştirir (giriş veya çıkış); yani normal FPU bu durum için ekstra bir boru hattı aşaması yerine bir istisna işaret eder. Agner Fog şöyle diyor: Sandybridge Testlerimde, su altı ve denormal sayıların vakaları, ekleme için normal kayan nokta sayılarının olduğu kadar hızlı bir şekilde ele alındı, ancak çarpma için değil. Bu yüzden -ffast-math, bir FP yardımcısı yerine bunu yapmak için FTZ / DAZ (dernorları sıfıra çevirme) kümeleriyle derlemenin nedeni budur .
Peter Cordes

Agner'in mikroarşçık rehberinde , normal girişli işlemler normal olmayan bir çıktı ürettiğinde her zaman bir ceza olduğunu söylüyor . Fakat normal + normal altı eklemenin cezası yoktur. Bu nedenle, özet gözden geçirme yanlış olabilir, ya da Uarch rehberi yanlış olabilir. Agner, Knight's Landing'in (Xeon Phi) mul / add üzerindeki herhangi bir subnormal için herhangi bir cezası olmadığını, sadece bölündüğünü söylüyor. Ancak KNL, ana akım Haswell (5c) / SKL'den (4c) daha yüksek gecikme katma / mul / FMA (6c) 'ye sahiptir. İlginçtir, AMD Ryzen, Bulldozer ailesindeki büyük bir cezaya karşı yalnızca birkaç devir ceza alır.
Peter Cordes

Kısıtlamaya göre, GPU'lar gecikmeyle değil, tümüyle verimlilikle ilgilidir, bu nedenle genellikle normal durumlar için bile tüm durumlar için sabit gecikme süreleri vardır. Mikrokodu yakalama muhtemelen böyle bir çıplak kemik hattı için bir seçenek bile değildir.
Peter Cordes
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.