Frage

ein Register von 4 Bytes Given (oder 16 für SIMD), es muss ein effizienter Weg sein, um das Bytes in-Register mit einem paar Anweisungen zu sortieren.

Vielen Dank im Voraus.

War es hilfreich?

Lösung

Sehen Sie eine effiziente Netzwerk für N = die Anzahl von Bytes, die Sie interessieren (4 oder 16). Konvertieren, dass in eine Folge von Vergleichen und Austauschanweisungen. (Für N = 16, der als sein werde 'ein paar', though.)

Andere Tipps

Gefunden! Es ist in 2007 Papier "Verwenden von SIMD-Register und Anweisungen an dem Instruction-Level Parallelism in Sortieralgorithmen Enable" von Furtak, Amaral und Niewiadomski. Abschnitt 4.

Es wird mit 4 SSE-Register, hat 12 Stufen und läuft in 19 Anweisungen einschließlich Laden und Speichern.

Das gleiche Papier hat eine ausgezeichnete Arbeit auf dynamisch Sortiernetze mit SIMD zu machen.

Zur Beschleunigung der Saiten Sortierung, beendet I 7 Bytes pro Doppel Einpacken und Sortieren (Ranking) mit einer Anordnung von 16 verdoppelt in SSE2, bitonische Sortierung unter Verwendung von zwei Durchläufen von 8 zu schaffen, und eine binäre verschmelzen die beiden Läufe zu fusionieren . Sie können den ersten Teil sehen hier http://mischasan.wordpress.com/2011/07/29/okay-one-more-poke-at-sse2-sorting-doubles/ (asm) und hier http://mischasan.wordpress.com/2011/09/ 02 / update-on-bitonische-SSE2-Art-of-16-Doppel / (C) und der bitonische merge Schritt (wenn Sie möchten SSE den ganzen Weg gehen) hier: http://mischasan.wordpress.com/ 2012/11/04 / SSE2-odd-even-merge-the-last-Schritt-in-Sortier- / . Ich ersetzen den Insertionsort am unteren Rande des qsort mit dieser Art, und es ist etwa 5 mal so schnell wie gerade qsort. HTH

hatte ich nicht das UofA Papier gesehen; die bitonische Logik ist von der alten Schule (CTM) GPGPU Programmierung.

Es tut uns Leid über die eingebetteten Verbindungsketten; Ich weiß nicht, wie anklickbare Links hinzufügen in den Kommentaren Stackoverflow.

Alle Sortieralgorithmen erfordern Werte von einem Ort zum anderen „Swapping“. Da Sie sprechen über ein wörtliches CPU-Register, das bedeutet jede Art ein anderes Register als temporären Ort zum Einsatz benötigen würde die Bytes werden getauscht zu halten.

Ich habe noch nie einen Chip mit einem eingebauten in Verfahren zum Sortieren von Bytes innerhalb eines Registers zu sehen. Nicht, dass es nicht geschehen ist, aber ich kann nicht glauben, viele Einsatzmöglichkeiten für einen derartigen Befehl.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top