2017-05-15 1 views
-3

Je voudrais fusionner plusieurs device_vectors en un seul, comme ceci:Comment insérer/fusionner efficacement dans thrust :: device_vector?

thrust::device_vector<int>   allinput = input0; 
allinput.insert(allinput.end(),input1.begin(),input1.end()); 
allinput.insert(allinput.end(),input2.begin(),input2.end()); 
allinput.insert(allinput.end(),input3.begin(),input3.end()); 

Mais évidemment, je voudrais le faire efficacement. Je travaille avec la clé device_vectors et la valeur device_vectors et j'aimerais faire cela pour les deux.

Quel est le moyen le plus efficace pour y parvenir?

Un autre problème que j'ai est que je sais seulement combien de clé & valeur device_vectors je vais avoir jusqu'à l'exécution. Y at-il un moyen de faire un device_vector<device_vector> ou d'accéder à plusieurs vecteurs par pointeur en quelque sorte?

Merci!

+0

Définir le terme "efficace". – talonmies

+0

@talonmies Je voulais dire du temps. J'aimerais le faire en parallèle. Normalement, j'utiliserais un vecteur de pointeurs pour boucler toutes les entrées, mais ce n'est pas le sens d'utiliser la poussée, afaik. – hsvar

Répondre

1

Vous pouvez utiliser reserve (size_type n) avant insertion afin d'accélérer les insertions suivantes:

thrust::device_vector<int>   allinput = input0; 

allinput.reserve(input1.size()+input2.size()+input3.size()); 

allinput.insert(allinput.end(),input1.begin(),input1.end()); 
allinput.insert(allinput.end(),input2.begin(),input2.end()); 
allinput.insert(allinput.end(),input3.begin(),input3.end()); 
... 
+0

Merci pour la réponse! Je vais mettre en œuvre cela. Avez-vous une idée de la façon dont je pourrais paralléliser ce processus? – hsvar