Wie vermeidet man die Standardkonstruktion von Elementen in Schub :: device_vector?

8
  1. Beim Erstellen eines neuen Thrust-Vektors scheint standardmäßig 0 zu sein - ich möchte nur bestätigen, dass dies immer der Fall sein wird.

  2. Wenn ja, gibt es auch eine Möglichkeit, den für dieses Verhalten verantwortlichen Konstruktor für zusätzliche Geschwindigkeit zu umgehen (da für einige Vektoren ich nicht brauche, dass sie einen Anfangswert haben, z wenn ihre rohen Zeiger an CUBLAS als Ausgabe übergeben werden)?

mchen 05.05.2013, 22:13
quelle

1 Antwort

7

thrust::device_vector konstruiert die Elemente, die es enthält, mit Hilfe seines zugeteilten Zuordners, genau wie std::vector . Es ist möglich, zu steuern, was der Zuordner tut, wenn der Vektor ihn auffordert, ein Element zu konstruieren.

Verwenden Sie einen benutzerdefinierten Zuordner, um die Standardinitialisierung von Vektorelementen zu vermeiden:

%Vor%

Sie werden immer noch die Kosten für einen Kernel-Start auf sich nehmen, um uninitialized_allocator::construct aufzurufen, aber dieser Kernel wird ein No-Op sein, der schnell in den Ruhestand geht. Was Sie wirklich interessiert, ist das Vermeiden der Speicherbandbreite, die benötigt wird, um das Array zu füllen, was diese Lösung tut.

Es gibt einen vollständigen Beispielcode hier .

Beachten Sie, dass diese Technik Schub 1.7 oder besser erfordert.

    
Jared Hoberock 06.05.2013, 02:32
quelle

Tags und Links