2017-11-15 3 views
1

Ich habe eine Matrix (Reihe orientiert) innerhalb einer thrust::device_vector<T>. Gibt es eine Möglichkeit, ein Stück/eine Ansicht dieses Vektors zu erhalten (das wäre auch vom Typ thrust::device_vector<T>)? Ich bin nicht an Kopierkonstruktoren interessiert, da diese neue Vektoren erstellen und Speicher verwenden.Schubvektor Scheibe/Ansicht

Also im Grunde nehmen wir einen Vektor thrust::device_vector<int> vec = {1,2,3,4,5,6} Ich würde gerne thrust::device_vector<int> vec_view = vec.slice(2,4) tun, die eine Ansicht sein würde, die auf {3,4} zeigt.

Müssen bestimmte Berechnungen in Batches ausführen und die Methode, die ich verwende, dauert nur thrust:device_vector<T> (keine Iteratoren usw.).

Antwort

1

Es gibt keine Möglichkeit, die mir bekannt ist.

Schub stellt keinen device_vector Konstruktor zur Verfügung, der einen vorhandenen device_pointer akzeptiert. Wäre dies der Fall, könnten Sie möglicherweise Ihren eigenen device_pointer implementieren, der schrittweisen Zugriff oder Slicing usw. unterstützt. Aber ich kenne keinen Weg, um das zu erreichen, was Sie sich vorstellen, ohne auf ausgefallene Iteratoren zurückzugreifen, und diese sind offensichtlich nicht für Ihre Verwendung geeignet Fall.

+0

Ja, genau davor hatte ich Angst. Ich denke, ich muss einfach irgendwie darauf verzichten. Sie fragen sich, ob das nur ein 'Schub'-Mangel ist oder ob es aufgrund anderer Bedenken nicht getan wurde. –

+0

Alle Schubcontainer wurden nach der SGI STL/C++ - Standardbibliothek modelliert, und sie bieten so etwas nicht. Das naheliegende Modell wäre etwas wie "boost :: range", aber das ist immer noch ein Iterator, kein Container. Es scheint mir, dass das Problem wirklich mit der API ist, die Sie verwenden. Wenn es geschrieben wurde, um Iteratoren zu akzeptieren, würden wir diese Konversation nicht haben ..... – talonmies