Ich habe zwei Arrays innerhalb Cuda;Cuda effiziente Einfügung von Daten in unsortiertem Array
int *main; // unsorted
int *source; // sorted
Teil meines Algorithmus erfordert, dass ich neue Daten in das Hauptarray aus dem Quell-Array einfügen regulary. Wenn eine Position innerhalb des Hauptarrays Null ist, nimmt sie an, dass sie leer ist. Daher kann sie mit einem Wert aus dem Quellenarray gefüllt werden.
Ich frage mich nur, was die effizienteste Methode ist, dies zu tun, habe ich ein paar Ansätze versucht, aber immer noch denke, es gibt noch mehr Leistungsgewinne hier gemacht werden.
Derzeit verwende ich eine modifizierte Version einer Radix-Sortierung, um den Inhalt des Haupt-Arrays bis zum Ende des Haupt-Arrays zu "mischen", wobei alle Null-Werte am Anfang des Arrays liegen bleiben aus der Quelle trivial. Die Sortierung wurde so geändert, dass sie über ein einzelnes Bit anstatt über 32 Bits iteriert wird. Dies funktioniert mit einem einfachen Schalter am Eingang.
input[i] = source[i] > 1 ? 1 : 0
Ich frage mich, ob dies schon recht ein effizienter Weg, dies zu tun? Ich frage mich, ob ich nicht etwas mit einem taktisch eingesetzten atomicAdd wie z.
Ich füge im Moment nicht so viele Elemente über das Quell-Array ein, aber das könnte sich in der Zukunft ändern.
Das fühlt sich an, als sollte es ein allgemeines Problem sein, das vorher gelöst wurde, ich frage mich, ob die Schubbibliothek helfen kann, aber nach geeigneten Funktionen suchend, fühlt es sich nicht richtig für das, was ich versuche (nicht sehr sauber passend mit dem Code, den ich bereits habe)
Gedanken von erfahrenen Cuda-Entwicklern geschätzt!
Müssen Sie die Reihenfolge der Elemente in der Quelle beibehalten, wenn Sie sie in das Ziel einfügen? – Farzad
Nein, ich muss die Reihenfolge der Elemente in der Quelle nicht beibehalten. – Phill
..keine Idee, warum dies zweimal abgelehnt wurde. – Phill