Beste Antwort
32-Bit-Assembler:
mov eax, 0
cpuid
test ecx, 0x0001
Natürlich Sie Ich möchte sicherstellen, dass Sie zuerst die vier GP-Register drücken und sie öffnen, sobald Sie die gewünschten Flags überprüft haben. Es gibt andere Flags, die sich auf Dinge wie den Monitor / Wait von SSE3 (Bit 3, also 0x0080) oder zusätzliche Funktionen (Bit 9, also 0x0200) beziehen, die Sie möglicherweise ebenfalls verwenden möchten.
Einfach genug, um sie in C oder zu integrieren Die meisten „echten“ Programmiersprachen mit Inline-Assembler setzen voraus, dass Ihr Compiler einen verdammten Wert hat.
Antwort
AVX ist der Name einer von vielen x86-Vektorerweiterungen von Intel. Es wird seit der Sandbrücken- / Bulldozer-Serie von CPUs von Intel bzw. AND verwendet.
Was ist eine Vektorerweiterung?
Die traditionelle CPU-Architektur (Skalarverarbeitung) funktioniert Ein Modell namens SISD: Einzelbefehl, einzelne Daten. Sie haben einen Prozessorkern, der Befehle nacheinander bearbeitet, wobei jeder auf einem einzelnen Satz von Operanden gleichzeitig arbeitet.
Dies funktioniert gut für die meisten Arten von Workloads. Es ist jedoch im Allgemeinen für einige Arten von rechenintensiven Workloads ungeeignet. Betrachten Sie zum Beispiel die Fotobearbeitung: Wenn ich die Helligkeit eines Bildes verdoppeln möchte, muss ich die Helligkeit eines Bildes Pixel für Pixel verdoppeln, was langsam ist. Jedes Pixel ist tatsächlich unabhängig von anderen, was bedeutet, dass es Potenzial für gibt Massive Parallelität: Bei genügend Rechenressourcen und der richtigen Architektur könnte man theoretisch alles, was funktioniert, in einer einzigen Operation erledigen.
Vektorprozessoren eingeben: Diese arbeiten mit einem Modell namens SIMD. Anstatt ein einzelnes Element einzeln zu bearbeiten, verkettet ein Vektorprozessor viele Datenelemente zu einem großen Element (normalerweise 256 Bit oder mehr) und führt dann Operationen an diesem aus. Das Ergebnis ist, dass ein Vektorprozessor viele Datenelemente in einer einzigen Operation bearbeiten kann, wenn ein herkömmlicher Prozessor mehrere Operationen benötigt, um dies zu tun.
Grundlagen der SIMD-Programmierung
Herkömmliche CPU-Architekturen wie X86 wurden offensichtlich nicht für den SIMD-Betrieb entwickelt. Im Laufe der Jahre hat Intel dem x86 ISA kontinuierlich Erweiterungen hinzugefügt, um seine Funktionalität zu verbessern, und SIMD-Erweiterungen waren einige der frühesten, die auftauchten.
Es begann mit MMX auf dem Pentium, aber das war hübsch eklatante Einschränkungen. Später fügte Intel die SSE-Befehlssatzerweiterung hinzu, mit der einige dieser Einschränkungen beseitigt wurden. Sie wurden in den kommenden zehn Jahren in SSE weiter wiederholt, bis schließlich AVX eingeführt wurde.
AVX führte einige ziemlich bedeutende Verbesserungen ein gegenüber dem Vorgänger SSE4.x
wurde die Größe des Vektorregisters von 128 Bit auf 256 Bit erhöht, wodurch der potenzielle Durchsatz verdoppelt wurde. Die Anweisungen wurden vom traditionellen 2-Operanden-Format (a = a + b) auf ein 3-Operanden-Format (a) übertragen. a = b + c), wodurch die Flexibilität verbessert wird. Die Ausrichtungsregeln wurden ebenfalls gelockert.