simd

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.
2
Antworten

SIMD-Anweisungen für Gleitkomma-Gleichheitsvergleich (mit NaN == NaN)

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
1
Antwort

Einige Iterationen für die vektorisierte Restschleife zurückspringen

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
1
Antwort

(Vec4 x Mat4x4) Produkt mit SIMD und Verbesserungen

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
1
Antwort

Permutieren von Bytes innerhalb von SSE __m128i register

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
2
Antworten

Wann sollte ich _mm_sfence _mm_lfence und _mm_mfence verwenden?

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
1
Antwort

Die beste Methode zum Mischen von 64-Bit-Teilen von zwei __m128i

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
1
Antwort

Wie kann SIMD in OpenCL optimal genutzt werden?

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
2
Antworten

Laden von Daten für GCC Vektor-Erweiterungen

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
5
Antworten

Schnelle Konvertierung von 16-Bit-Big-Endian zu Little-Endian in ARM

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
4
Antworten

Intel SSE: Warum gibt '_mm_extract_ps' 'int' anstelle von 'float' zurück?

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