Objekte mit Schub-CUDA sortieren

7

Ist es möglich, Objekte mit der Schubbibliothek zu sortieren? Ich habe die folgende Struktur:

%Vor%

Ist es möglich, Schub zu verwenden, um ein Array von OB nach N zu sortieren? Können Sie ein einfaches Beispiel für die Verwendung von Schub zum Sortieren von Objekten bereitstellen? Wenn Schub nicht dazu in der Lage ist, gibt es andere CUDA-Bibliotheken, die mir das erlauben?

    
liz 12.03.2011, 10:46
quelle

5 Antworten

13

Die Dokumentation für stoß :: sortieren zeigt, dass sie einen Vergleichsoperator akzeptiert. Sehen Sie in ihrem Beispiel nach, wie diese definiert und verwendet werden. Ich habe das nicht getestet, aber basierend auf dem Beispiel benötigen Sie nur eine Struktur, die ungefähr so ​​aussieht:

%Vor%

und rufen Sie dann thrust::sort(obs.begin(), obs.end(), OBCmp()) auf.

    
Davor Cubranic 18.03.2011 21:18
quelle
6

Obwohl Sie die Objekte mithilfe spezieller Strukturdefinitionen sortieren können, indem Sie eine Struktur als Funktor verwenden, wird der Sortieralgorithmus von radix-sort nach merge-sort geändert. Die Geschwindigkeit von radix-sort ist merklich schneller als die von merge-sort. Versuchen Sie also bei Verwendung von Schub, Integer-Typen als Schlüsselwerte zu verwenden.

Ich könnte vorschlagen, dass Sie die Funktion "thrust :: sory_by_key (..)" verwenden.

Sie sollten Ihre Struktur von AOS in SOA-Struktur ändern.

%Vor%

bis

%Vor%

Wenn Sie die Indizes mit sort_by_key sortieren, werden die Werte bereits sortiert.

%Vor%     
phoad 18.06.2012 13:21
quelle
2

Sie können Objekte sortieren, indem Sie den Operator & lt; . Zum Beispiel:

%Vor%

Die Objekte werden nach der Entfernung sortiert.

    
yuy 25.03.2013 16:08
quelle
-1

Bis jetzt können Sie keine benutzerdefinierten Objekte sortieren. Sie können die Sortierung auf Schlüsselbasis durchführen, nicht jedoch auf benutzerdefinierte Objekte wie die von Ihnen erwähnte Struktur. Es gibt ein paar andere offene CUDA-basierte Algorithmen, die dafür zur Verfügung stehen, aber auch das erfordert einige Modifikationen usw., damit sie für Sie funktionieren.

    
Salman Ul Haq 12.03.2011 18:39
quelle
-1

Ich habe Thrust noch nicht versucht, aber es gibt eine ähnliche Sortierfunktion in CUDPP cadppSort genannt. Sie können keine Strukturen direkt mit cudppSort sortieren, es kann nur ganze Zahlen oder Gleitkommazahlen verarbeiten.

Eine Möglichkeit, ein Array von Strukturen zu sortieren, besteht also darin, die Schlüssel (Ihrer Struktur) und ein Index-Array von Werten zusammen mit dem Array zu sortieren. Verwenden Sie später das sortierte Indexarray, um die Strukturen an ihre endgültigen sortierten Positionen zu verschieben. Ich habe beschrieben, wie Sie dies für den Komprimierungsalgorithmus cauppCompact in einem Blogpost tun können . Die Technik sollte für cadppSort auch ähnlich sein.

    
Ashwin Nanjappa 14.03.2011 02:57
quelle

Tags und Links