Gibt es eine Cuda-Funktion zum Kopieren einer Zeile aus einer Matrix in Hauptspalte?

StackOverflow https://stackoverflow.com//questions/21002621

  •  20-12-2019
  •  | 
  •  

Frage

Ich habe eine Gerätematrix U mit den Abmessungen MxN in der Hauptreihenfolge der Spalten.Jetzt möchte ich die Zeile K in einen Vektor u extrahieren.Gibt es eine Funktion, um dies zu erreichen?Beachten Sie, dass die Kopie einen Versatz von K und einen Schritt von M berücksichtigen müsste.

Ich habe mir die Funktion angesehen cudaMemcpy2D aber es klingelt nichts, da es von einer eher LAPACK-ähnlichen API stammt. Ich verstehe nicht, was diese Tonhöhenparameter sind. Warum heißen sie nicht einfach Zeilen und Spalten oder M und N?

War es hilfreich?

Lösung

Sie können verwenden

generasacodicetagpre.

wie

generasacodicetagpre.

Andere Tipps

Die Antwort auf den ersten Teil ist nein.Der Speicher innerhalb der GPU ist wie auf der Hostseite linear.Wenn Sie nur auf Zeilenelemente einer 2D-Matrix zugreifen möchten, die in der Reihenfolge der Hauptspalten gespeichert ist, wäre dies aufgrund nicht zusammengeführter Zugriffe kostspielig.Da der GPU-Speicher in Segmenten konfiguriert ist, muss bei jedem Zugriff auf ein Element nicht nur das Element selbst, sondern auch die benachbarten Elemente im Segment abgerufen werden, bei denen es sich bei der Reihenfolge nach Hauptspalten hauptsächlich um Elemente der Spalte handelt, in der sich das Element befindet.Wenn Sie hingegen Ihre Matrix in Zeilenreihenfolge speichern und auf Elemente einer Zeile zugreifen, versucht die GPU, gleichzeitige Speicheranforderungen mit minimalen Segmenttransaktionen zusammenzuführen.
cudaMallocPitch, das zum Speichern von 2D-Daten bevorzugt wird, füllt die Speicherzuweisung auf, sodass die Startadresse jeder einzelnen Zeile/Spalte mit der Länge versehen wird width befinden sich in der Startadresse eines Segments.Wenn Sie auf alle Elemente einer Zeile/Spalte zugreifen, werden daher die abgerufenen Segmente minimiert.Die Kosten für die Verwendung dieser Methode sind die Verschwendung von Speicherplatz.

AS @Farzad ist darauf hingewiesen, das Memory Access-Muster für den gewünschten Betrieb ist ineffizient, aber andermals, was Sie möchten, was Sie möchten, können mit einem Anruf an cudamemcpy2d erreicht werden (vorausgesetzt, u und u von Typ int):

. generasacodicetagpre.

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