Einzelbefehl, mehrere Daten (SIMD) ist das Konzept, dass jeder Befehl an einem kleinen Block oder Vektor von Datenelementen arbeitet. Zu den CPU-Vektor-Befehlssätzen gehören: x86 SSE und AVX, ARM NEON und PowerPC AltiVec. Um SIMD-Anweisungen effizient zu verwenden, müssen Daten in Form von Arrays vorliegen und in längeren Datenströmen auftreten. Naively "SIMD optimized" -Code überrascht oft, indem er langsamer als das Original läuft.
Welche Anweisungen würden für den Vergleich zweier 128-Bit-Vektoren aus 4 * 32-Bit-Fließkommawerten verwendet?
Gibt es eine Anweisung, die einen NaN-Wert auf beiden Seiten als gleich betrachtet? Wenn nicht, wie groß wäre der Leistungseinfluss...
22.01.2016, 16:41
Ich vektorisiere eine Schleife von Hand und bearbeite 4 Elemente gleichzeitig. Die Gesamtzahl der Elemente darf nicht ein Vielfaches von 4 sein, daher habe ich am Ende meiner Hauptschleife noch ein paar Dinge übrig. Ich dachte, dass ich die Rest...
17.11.2017, 14:52
Ich schreibe ein komplexes Simulationsprogramm und es ist offensichtlich, dass die zeitaufwendigste Routine diejenige ist, die einen Vier-Vektor (float4) mit einer 4x4-Matrix multipliziert. Ich muss dieses Programm auf mehreren Computern ausführ...
26.06.2015, 15:01
Ich habe folgendes Problem:
In __m128i register gibt es 16 8bit Werte in folgender Reihenfolge:
%Vor%
Was ich erreichen möchte, ist, Bytes effizient zu mischen, um diese Reihenfolge zu erhalten:
%Vor%
Es ist tatsächlich analog zur...
06.07.2014, 10:43
Ich habe den "Intel Optimization guide Guide für Intel Architektur" gelesen.
Ich habe aber immer noch keine Ahnung, wann ich es benutzen soll
_mm_sfence ()
_mm_lfence ()
_mm_mfence ()
Könnte mir jemand die Erklärung geben?
27.12.2010, 09:35
Ich habe zwei __m128i s, a und b , die ich mischen will, so dass die oberen 64 Bits von a in die unteren 64 Bits von dst fallen und die unteren 64 Bits von b fallen in die oberen 64 von dst . d. h.
%Vor%
Entspricht:
%Vo...
13.08.2014, 18:37
Im Optimierungsleitfaden von Beignet, einer Open-Source-Implementierung von OpenCL für Intel-GPUs
Arbeitsgruppengröße sollte größer als 16 sein und ein Vielfaches von 16 sein.
Da zwei mögliche SIMD-Lanes auf Gen 8 oder 16 sind....
31.10.2015, 14:24
Die Vektorerweiterungen von GCC bieten eine nette, vernünftige Möglichkeit, auf verschiedene SIMD-Anweisungen zuzugreifen Hardwarearchitekturen, ohne auf hardwarespezifische intrinsics (oder Auto-Vectorization) zurückzugreifen.
Ein echter...
16.02.2012, 19:53
Ich muss große Arrays von 16-Bit-Integer-Werten vom Big-Endian- in das Little-Endian-Format konvertieren.
Jetzt verwende ich zur Konvertierung die folgende Funktion:
%Vor%
Ich benutze GCC. Zielplattform ist ARMv7 (Raspberry Phi 2B).
Gi...
26.11.2015, 06:36
Warum gibt _mm_extract_ps eine int anstatt einer float zurück?
Was ist der richtige Weg, um ein einzelnes float von einem XMM-Register in C zu lesen?
Oder anders gefragt: Was ist das Gegenteil von _mm_set_ps ?
02.04.2011, 23:52