Warum ändert sich die Latenz des Befehls sqrtsd basierend auf der Eingabe? Intel-Prozessoren

10
Tommy95 2020-03-12 20:06.

Nun, im Intel Intrinsic Guide wird angegeben, dass der Befehl "sqrtsd" eine Latenz von 18 Zyklen hat.

Ich habe es mit meinem eigenen Programm getestet und es ist richtig, wenn wir zum Beispiel 0,15 als Eingabe nehmen. Aber wenn wir 256 (oder eine beliebige 2 ^ x) Zahl nehmen, beträgt die Latenz nur 13. Warum ist das so?

Eine Theorie, die ich hatte, ist, dass da 13 die Latenz von "sqrtss" ist, die mit "sqrtsd" identisch ist, aber mit 32-Bit-Gleitkommawerten durchgeführt wurde, der Prozessor möglicherweise klug genug war, um zu verstehen, dass 256 in 32-Bit passen und daher diese Version verwenden können während 0,15 das volle 64-Bit benötigt, da es nicht auf endliche Weise darstellbar ist.

Ich mache es mit Inline-Assembly, hier ist der Relveant-Teil, der mit gcc -O3 und -fno-tree-vectorize kompiliert wurde.

static double sqrtsd (double x) {
    double r;
    __asm__ ("sqrtsd %1, %0" : "=x" (r) : "x" (x));
    return r;
}

1 answers

11
Peter Cordes 2020-03-13 05:30.

SQRT * und DIV * sind die einzigen zwei "einfachen" ALU-Anweisungen (Single UOP, keine mikrocodierte Verzweigung / Schleife), die auf modernen Intel / AMD-CPUs einen datenabhängigen Durchsatz oder eine datenabhängige Latenz aufweisen. (Ohne Berücksichtigung des Mikrocodes werden denormale oder subnormale FP-Werte in add / multiply / fma angezeigt.) Alles andere ist so gut wie repariert, so dass die nicht in Ordnung befindlichen UOP-Planungsmaschinen nicht auf die Bestätigung warten müssen, dass ein Ergebnis in einem Zyklus fertig war, sondern nur wissen, dass es sein wird.

Wie üblich bietet der Intrinsics Guide von Intel ein stark vereinfachtes Bild der Leistung. Die tatsächliche Latenz beträgt bei Skylake keine festen 18 Zyklen für doppelte Genauigkeit. (Aufgrund der Zahlen, die Sie zitiert haben, gehe ich davon aus, dass Sie einen Skylake haben.)

div / sqrt sind schwer zu implementieren; Selbst bei Hardware ist das Beste, was wir tun können, ein iterativer Verfeinerungsprozess. Wenn Sie mehr Bits gleichzeitig verfeinern (Radix-1024-Teiler seit Broadwell), wird dies beschleunigt (siehe diese Fragen und Antworten zur Hardware ). Aber es ist immer noch langsam genug, dass ein Early-Out verwendet wird, um einfache Fälle zu beschleunigen (oder der Beschleunigungsmechanismus überspringt nur einen Einrichtungsschritt für Mantissen mit Null auf modernen CPUs mit teilweise Pipeline-Div / SQL-Einheiten. Ältere CPUs hatten Durchsatz = Latenz für FP div / sqrt; diese Ausführungseinheit ist schwieriger zu leiten.)


https://www.uops.info/html-instr/VSQRTSD_XMM_XMM_XMM.htmlzeigt, dass Skylake SQRTSD zwischen 13 und 19 Latenzzeiten variieren kann. Die SKL (Client) -Nummern zeigen nur eine Latenz von 13 Zyklen, aber wir können auf der detaillierten Seite SKL vsqrtsd sehen, dass sie nur mit Eingabe = 0 getestet wurden. SKX (Server) -Nummern zeigen eine Latenz von 13-19 Zyklen. (Auf dieser Seite finden Sie eine detaillierte Aufschlüsselung des verwendeten Testcodes, einschließlich der binären Bitmuster für die Tests.) Ähnliche Tests (mit nur 0 für Client-Kerne) wurden auf der Nicht-VEX-sqrtsd xmm, xmm Seite durchgeführt. : /

InstLatx64- Ergebnisse zeigen Best- / Worst-Case-Latenzen von 13 bis 18 Zyklen auf Skylake-X (das den gleichen Kern wie Skylake-Client verwendet, jedoch mit aktiviertem AVX512).

Die Anweisungstabellen von Agner Fog zeigen die Latenz von 15-16 Zyklen auf Skylake. (Agner testet normalerweise mit einer Reihe unterschiedlicher Eingabewerte.) Seine Tests sind weniger automatisiert und stimmen manchmal nicht genau mit anderen Ergebnissen überein.

Was macht manche Fälle schnell?

Beachten Sie, dass die meisten ISAs (einschließlich x86) binäre Gleitkommazahlen verwenden :
Die Bits repräsentieren Werte als linearen Signifikanten (auch bekannt als Mantisse) mal 2 exp und als Vorzeichenbit.

Es scheint, dass es unter modernen Intel möglicherweise nur zwei Geschwindigkeiten gibt (zumindest seit Haswell) (siehe Diskussion mit @harold in den Kommentaren), z. B. sind sogar Zweierpotenzen schnell, wie 0,25, 1, 4 und 16. Diese sind trivial Mantisse = 0x0 für 1,0.https://www.h-schmidt.net/FloatConverter/IEEE754.html hat einen schönen interaktiven dezimalen <-> Bitmusterkonverter für einfache Genauigkeit mit Kontrollkästchen für die gesetzten Bits und Anmerkungen zu dem, was die Mantisse und der Exponent darstellen.

Auf Skylake sind die einzigen schnellen Fälle, die ich bei einer schnellen Überprüfung gefunden habe, sogar Potenzen von 2 wie 4.0, aber nicht 2.0. Diese Zahlen haben ein genaues sqrt-Ergebnis, wobei sowohl die Eingabe als auch die Ausgabe eine Mantisse von 1,0 haben (nur die implizite 1-Bit-Menge). 9.0ist nicht schnell, obwohl es genau darstellbar ist und das 3.0Ergebnis auch. 3.0 hat Mantisse = 1,5, wobei nur das höchstwertige Bit der Mantisse in der binären Darstellung gesetzt ist. Die Mantisse von 9.0 ist 1.125 (0b00100 ...). Die Nicht-Null-Bits befinden sich also sehr nahe am oberen Rand, aber anscheinend reicht dies aus, um sie zu disqualifizieren.

( +-Infund NaNsind auch schnell. Ebenso gewöhnliche negative Zahlen: result = -NaN . Ich messe die Latenz von 13 Zyklen für diese auf i7-6700k, genau wie für 4.0. vs. 18 Latenzzeiten von 18 Zyklen für den langsamen Fall.)

x = sqrt(x)ist definitiv schnell mit x = 1.0(All-Null-Mantisse mit Ausnahme des implizit führenden 1-Bit). Es hat eine einfache Eingabe und eine einfache Ausgabe.

Mit 2.0 ist die Eingabe ebenfalls einfach (All-Null-Mantisse und Exponent 1 höher), aber die Ausgabe ist keine runde Zahl. sqrt (2) ist irrational und hat daher unendlich viele Nicht-Null-Bits in jeder Basis. Dies macht es anscheinend auf Skylake langsam.

Die Befehlstabellen von Agner Fog besagen, dass die ganzzahlige divBefehlsleistung von AMD K10 von der Anzahl der signifikanten Bits in der Dividende (Eingabe) abhängt , nicht vom Quotienten. Bei der Suche in den PDF- und Befehlstabellen von Agner wurden jedoch keine Fußnoten oder Informationen darüber gefunden, wie sqrt spezifisch ist datenabhängig.

Auf älteren CPUs mit noch langsamerem FP-Quadrat ist möglicherweise mehr Platz für eine Reihe von Geschwindigkeiten vorhanden. Ich denke, die Anzahl der signifikanten Bits in der Mantisse der Eingabe wird wahrscheinlich relevant sein. Weniger signifikante Bits (mehr nachfolgende Nullen im Signifikanten) machen es schneller, wenn dies korrekt ist. Aber auch hier scheinen auf Haswell / Skylake die einzigen schnellen Fälle gerade Potenzen von 2 zu sein.


Sie können dies mit etwas testen , das die Ausgabe wieder mit der Eingabe koppelt, ohne die Datenabhängigkeit zu unterbrechen , z. B. andps xmm0, xmm1/ orps xmm0, xmm2, um einen festen Wert in xmm0 festzulegen, der von der sqrtsd-Ausgabe abhängt.

Oder eine einfachere Möglichkeit, die Latenz zu testen, besteht darin, die falsche Ausgabeabhängigkeit vonsqrtsd xmm0, xmm1 - it "auszunutzen" und sqrtssdie oberen 64/32 Bits (bzw.) des Ziels unverändert zu lassen, sodass das Ausgaberegister auch eine Eingabe für diese Zusammenführung ist. Ich gehe davon aus, dass Ihr naiver Inline-Asm-Versuch auf diese Weise zu einem Engpass bei der Latenz statt zum Durchsatz geführt hat, da der Compiler ein anderes Register für die Ausgabe ausgewählt hat, sodass er dieselbe Eingabe in einer Schleife erneut lesen konnte. Die Inline - asm Sie zu Ihrer Frage hinzugefügt wird total kaputt und wird nicht einmal kompilieren, aber vielleicht Ihr echter Code verwendet "x"(XMM - Register) Eingangs- und Ausgangsbeschränkungen statt "i"(sofort)?

Diese NASM-Quelle für eine statische ausführbare Testschleife (unter der ausgeführt werden soll perf stat) verwendet diese falsche Abhängigkeit mit der Nicht-VEX-Codierung von sqrtsd.

Diese ISA-Designwarze ist der kurzfristigen Optimierung von Intel mit SSE1 auf Pentium III zu verdanken. P3 behandelte 128-Bit-Register intern als zwei 64-Bit-Hälften. Wenn Sie die obere Hälfte unverändert lassen, lassen Sie skalare Anweisungen zu einem einzigen UOP dekodieren. (Aber das gibt PIII immer noch sqrtsseine falsche Abhängigkeit). Mit AVX können wir dies schließlich vsqrtsd dst, src,srczumindest für Registerquellen und ähnlich vcvtsi2sd dst, cold_reg, eaxfür die ähnlich kurzsichtig gestalteten skalaren Int-> Fp-Konvertierungsanweisungen vermeiden. (GCC verpasste-Optimierung Berichte: 80586 , 89071 , 80571 ) .


Auf vielen früheren CPUs war sogar der Durchsatz variabel, aber Skylake hat die Teiler so stark verbessert, dass der Scheduler immer weiß, dass er 3 Zyklen nach der letzten Eingabe mit einfacher Genauigkeit einen neuen div / sqrt-Uop starten kann.

Selbst der Skylake-Durchsatz mit doppelter Genauigkeit ist variabel: 4 bis 6 Zyklen nach der letzten Eingabe mit doppelter Genauigkeit, wenn die Anweisungstabellen von Agner Fog richtig sind.https://uops.info/zeigt einen flachen reziproken 6c-Durchsatz. (Oder doppelt so lang für 256-Bit-Vektoren; 128-Bit und Skalar können separate Hälften der breiten SIMD-Teiler für mehr Durchsatz bei gleicher Latenz verwenden.) Siehe auch Gleitkommadivision vs. Gleitkommamultiplikation für einige extrahierte Durchsatz- / Latenzzahlen aus den Anweisungstabellen von Agner Fog.

MORE COOL STUFF

Cate Blanchett schlief nach 3 gemeinsamen Tagen mit ihrem Ehemann und ist 25 Jahre später immer noch mit ihm verheiratet

Cate Blanchett schlief nach 3 gemeinsamen Tagen mit ihrem Ehemann und ist 25 Jahre später immer noch mit ihm verheiratet

Cate Blanchett widersetzte sich typischen Dating-Ratschlägen, als sie ihren Ehemann traf.

Warum Michael Sheen ein gemeinnütziger Schauspieler ist

Warum Michael Sheen ein gemeinnütziger Schauspieler ist

Michael Sheen ist ein gemeinnütziger Schauspieler, aber was genau bedeutet das?

Hallmark-Star Colin Egglesfield sorgt für spannende Fan-Begegnungen bei RomaDrama Live! [Exklusiv]

Hallmark-Star Colin Egglesfield sorgt für spannende Fan-Begegnungen bei RomaDrama Live! [Exklusiv]

Hallmark-Star Colin Egglesfield sprach über spannende Fan-Begegnungen bei RomaDrama Live! plus sein INSPIRE-Programm auf der Convention.

Warum Sie „Northern Exposure“ nicht online streamen können

Warum Sie „Northern Exposure“ nicht online streamen können

Sie müssen einen Blu-ray- oder DVD-Player abstauben, um zu sehen, warum Northern Exposure zu einer der beliebtesten Shows der 90er Jahre wurde.

Where in the World Are You? Take our GeoGuesser Quiz

Where in the World Are You? Take our GeoGuesser Quiz

The world is a huge place, yet some GeoGuessr players know locations in mere seconds. Are you one of GeoGuessr's gifted elite? Take our quiz to find out!

Werfen Sie diese Pappröhren nicht weg! 10 Möglichkeiten, sie wiederzuverwenden

Werfen Sie diese Pappröhren nicht weg! 10 Möglichkeiten, sie wiederzuverwenden

Werfen Sie Ihr Papierhandtuch, Toilettenpapier und Geschenkpapierrollen nicht in den Müll. Geben Sie ihnen stattdessen mit einem dieser 10 Hacks ein zweites Leben.

Schlafen Fische?

Schlafen Fische?

Es ist schwer vorstellbar, dass Nemo im Great Barrier Reef ein paar Zs fängt. Aber Fische brauchen Ruhe. Schlafen sie so wie wir?

Spenden Sie Ihr Haar, um unser Wasser sauber zu halten

Spenden Sie Ihr Haar, um unser Wasser sauber zu halten

Haarteile aus Salons und persönliche Spenden können als Matten wiederverwendet werden, die Ölverschmutzungen aufsaugen und zum Schutz der Umwelt beitragen.

Der bizarre Fall der Inhaftierung von Meek Mill, erklärt

Der bizarre Fall der Inhaftierung von Meek Mill, erklärt

Marcus Ingram / Getty Images Lassen Sie mich das klarstellen: Ich bin kein Team #FreeMeekMill, aber ich bin Team # FreeRobertRihmeekWilliams.Es gibt einen Unterschied.

Der Gouverneur von Missouri, Eric Greitens, wurde wegen schwerer Verletzung der Datenschutzbeschuldigung angeklagt

Der Gouverneur von Missouri, Eric Greitens, wurde wegen schwerer Verletzung der Datenschutzbeschuldigung angeklagt

Foto: AP Die New York Times berichtete am Donnerstag, dass eine Grand Jury in St. Louis Missouris erstmaligen republikanischen Gouverneur Eric Greitens wegen einer Straftat gegen die Privatsphäre angeklagt habe.

Ist das der Anfang vom Ende von Brittney Griners Inhaftierung?

Ist das der Anfang vom Ende von Brittney Griners Inhaftierung?

Brittney Griner (r.) Brittney Griners Status war von Anfang an die einzigartigste amerikanische Geiselsituation in der modernen Geschichte.

Tom Brady ist der erste Quarterback, der Julio Jones endlich mehr als 10 Touchdowns in einer Saison bescheren kann

Tom Brady ist der erste Quarterback, der Julio Jones endlich mehr als 10 Touchdowns in einer Saison bescheren kann

Wir konnten dieses Jahr viel mehr von einem gesunden Julio Jones in der Endzone sehen. John Parker Wilson, Greg McElroy, A.

Tudor Dixon gewinnt Michigan GOP Primary und trifft nun auf die amtierende Demokratin Gretchen Whitmer

Tudor Dixon gewinnt Michigan GOP Primary und trifft nun auf die amtierende Demokratin Gretchen Whitmer

Tudor Dixon hat am Dienstag die Vorwahlen von Michigan zum Gouverneur gewonnen, nachdem er eine späte Bestätigung des ehemaligen Präsidenten Donald Trump erhalten hatte

Nicky Hilton Forced to Borrow Paris' 'I Love Paris' Sweatshirt After 'Airline Loses All [My] Luggage'

Nicky Hilton Forced to Borrow Paris' 'I Love Paris' Sweatshirt After 'Airline Loses All [My] Luggage'

Nicky Hilton Rothschild's luggage got lost, but luckily she has an incredible closet to shop: Sister Paris Hilton's!

Kate Middleton verbringt einen Tag am Wasser in London, plus Jennifer Lopez, Julianne Hough und mehr

Kate Middleton verbringt einen Tag am Wasser in London, plus Jennifer Lopez, Julianne Hough und mehr

Kate Middleton verbringt einen Tag am Wasser in London, plus Jennifer Lopez, Julianne Hough und mehr. Von Hollywood bis New York und überall dazwischen, sehen Sie, was Ihre Lieblingsstars vorhaben!

17-Jähriger erstochen, während 4 weitere bei einem Messerangriff am Wisconsin River verwundet wurden

17-Jähriger erstochen, während 4 weitere bei einem Messerangriff am Wisconsin River verwundet wurden

Die Ermittler prüfen, ob sich die Gruppe und der Verdächtige vor dem Angriff kannten

Stellen Sie sich vor, Sie erstellen eine Inhaltsstrategie, die tatsächlich KONVERTIERT. Es ist möglich.

Stellen Sie sich vor, Sie erstellen eine Inhaltsstrategie, die tatsächlich KONVERTIERT. Es ist möglich.

Im Jahr 2021 ermutige ich Sie, alles zu überdenken, was Sie über die Kunden, die Sie bedienen, und die Geschichten, die Sie ihnen erzählen, wissen. Zurücktreten.

Ein Mammutverlust öffnete mein Herz für die Liebe

Ein Mammutverlust öffnete mein Herz für die Liebe

Am Tag des 9. Geburtstags von Felix The Cat erinnere ich mich an einen der größten Verluste meines Erwachsenenlebens – meine Sophie im Jahr 2013. Ich habe diesen Essay geschrieben und ihn kurz im Jahr 2013 auf dieser Plattform geteilt.

Wenn Sie nicht die Person sein können, die das Internet von Ihnen will

Wenn Sie nicht die Person sein können, die das Internet von Ihnen will

Ich hasse das Wort „Zugwrack“. Die Menschen trösten sich mit ihrem eigenen moralischen Kompass und treffen dabei auf ein Urteil.

Die dezentralisierte Cloud-Vision der DFINITY Blockchain

Anmerkung des Herausgebers: Sie sehen veraltetes Material aus dem DFINITY-Blog, das zu Archivierungszwecken aufbewahrt wird.

Die dezentralisierte Cloud-Vision der DFINITY Blockchain

Dieser Beitrag untersucht die dezentralisierte Cloud-Vision des DFINITY-Teams und ihre Beziehung zu traditioneller Blockchain und bestehenden Cloud-Anbietern wie Amazon Web Services. Demonstrationen der DFINITY-Technologie, die von einem groß angelegten Netzwerk angewendet wird, werden im Herbst 2017 durchgeführt, gefolgt von einer Hauptfinanzierung für die unterstützende gemeinnützige Stiftung, wobei das „offene Cloud“-Netzwerk voraussichtlich im Frühsommer 2018 starten wird .

Language