2017-05-15 21 views
-3

私はそうのように、一つにdevice_vectorsいくつかをマージしたい: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()); 

しかし、明らかに、私は効率的にそれを行うにしたいと思います。私はキーdevice_vectorsと値device_vectorsと一緒に働いています。私は両方のためにこれをしたいと思います。

これを達成する最も効率的な方法はどれですか?

もう1つの問題は、実行時までにどれくらいの数のキー&値device_vectorsがあるのか​​分かります。 device_vector<device_vector>を作成する方法や、何らかの方法でポインタでいくつかのベクトルにアクセスする方法はありますか?

ありがとうございます!

+0

は「効率的」を定義します。 – talonmies

+0

@talonmies私は時間効率的な意味です。私はそれを並行してやりたいのです。通常、私はすべての入力をループするポインタのベクトルを使用しますが、それは推力を使用する感覚ではありません。 – hsvar

答えて

1

あなたは、その後の挿入をスピードアップするために挿入する前にreserve (size_type n)を使用することができます。

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

答えをありがとう!私はそれを実装します。私はこのプロセスをどのように並列化できるか考えていますか? – hsvar

関連する問題