2017-09-06 4 views
4

Ich habe eine Menge über Altivec Register gehört, aber ich finde es nicht einmal auf einer POWER9 ISA. In diesem Dokument finde ich nur VR- und VSR-Register unter Kapitel 6 "Vektor-Einrichtung" und Kapitel 7 "Vektor-Skalar-Gleitkomma-Operationen".VSX? VMX? Altivec? VR? VSR ?! Wie hängen diese PowerPC SIMD Akronyme zusammen?

Auf ABI bemerkte ich, wie die Register physisch zugeordnet: Vector Registers as Part of VSRs

und ich habe immer noch nicht, warum es zwei Gruppen gibt. Ist Altivec Erbe?

Soweit ich verstand, ist die folgende, was passiert ist:

  1. AltiVec/VMX (Vector Multimedia Extensions) ist eine alte SIMD-Technologie für PowerPC. Ich sehe es als das alte Intel MMX.
  2. Die neuen VSX (Vector Scalar eXtensions) sind ein Upgrade davon, aber um die Kompatibilität mit Altivec zu vermeiden, blieben sie nur 32 Register (VSR32-VSR63) und Altivec-Operationen können die anderen VSR0-VSR31 nicht verarbeiten. Die VSX-Befehle können jedoch in allen 64 Registern (VSR0-VSR63) arbeiten. Ich sehe es als die neue Intel SSE.

Ist das korrekt?

Antwort

2

der Terminologie ein wenig zu klären:

  • VMX die Unterstützung für POWER/PowerPC-Prozessoren früher Implementierung von Vektor ist.
  • Altivec ist eine Marke für VMX; Funktionell sollte
  • VSX ist eine neuere Ausführung von Vektor Unterstützung für Power-Prozessoren

VSX fügt mehr Vektorregister (32 mehr, aber immer noch mit 128 Bits pro Register) und VSX-spezifische Anweisungen äquivalent sein. Wie Sie festgestellt haben, werden die VSX-Register mit den höheren Nummern mit denen für VMX-Operationen geteilt. Daher ist es nicht ratsam, VMX- und VSX-Anweisungen in einem einzigen Prozess zu mischen, es sei denn, Sie sind bei der Zuweisung von Registern vorsichtig.

Ich bin nicht vertraut mit Intels Vektor-Implementierungen, aber Ihre Analogien klingen korrekt für mich.

+0

Was meinen Sie mit "Es wäre nicht ratsam, VMX- und VSX-Anweisungen in einem einzigen Prozess zu mischen, es sei denn, Sie sind vorsichtig bei der Zuweisung von Registern"? Speziell für die Inline-Assemblierung von gcc können Sie den Modifizierer% x verwenden, um zu kennzeichnen, dass dasselbe Vektorregister in VSX konvertiert werden muss, wie [in diesem Beispiel] (https://github.com/PPC64/sha2-le/). Blob/Master/sha512_compress.C# L389). Höchstens dachte ich, dass es etwas Leistungsproblem auf Multi Threading haben könnte, aber Einzelprozess ?! – gut

+0

@gut: mehr, dass Sie nicht unbeabsichtigt eines der Werte des VMX-Registers durch ein Schreiben in ein VSX-Register (und umgekehrt) überschreiben möchten. –

Verwandte Themen