2

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すべての要素を削除し、必要な要素にもメモリを割り当てるため、あまり効率的ではありませんが、メモリは既に割り当てられているため、これを行う意味がわかりません。

4

1 に答える 1