device_vector
ユーザー入力データの配列に関する情報を保存するために を使用しています。この情報は、メイン アルゴリズムを実行する 2 番目のカーネルを呼び出すときに速度を上げるために必要です。
最初のカーネルの終了後は、device_vector
少量の重要な要素のみが含まれます。たとえば、最初のdevice_vector
サイズが 10000 の場合、最終的には 10 ~ 20 個の要素のみがユーザー入力データを記述します。
私が今行っているのはthrust::remove
、不要な値を削除するために関数を使用することですが、正しく理解すれば、この関数は不要な値を実際に削除するのではなく、最後の必要な値に反復子を返します。
たとえば、次の配列があるとします。
0 0 0 0 0 5 0 0 8 0 0 0 0 13 0 0
値 0を呼び出すとremove
、次のようになります。
5 8 13 0 0 0 0 0 0 0 0 0 0 0 0 0
end
そして、最後の必要な要素 (私の場合は 13) への反復子を返します。
しかし、この情報を2番目のカーネルに使用したいのですが、正しく理解すれば、まだ不要な要素が割り当てられているため、必要のないメモリを使用していることになります。
私の質問は、end
最後の必要な要素へのイテレータを使用することで、不要な要素を使用せずに削除できresize
ますか?
resize
すべての要素を削除し、必要な要素にもメモリを割り当てるため、あまり効率的ではありませんが、メモリは既に割り当てられているため、これを行う意味がわかりません。