3

タイトルが言うように.reserve()、STLベクトルを介してホスト上のメモリをいくつか計画し、次にcudaMemcpyデバイスからホストへの配列(つまり、その予約されたホストメモリへ)を計画しています。

STL ベクターは、(外部メソッドによって) 新しいデータをベクターにコピーしたという事実を認識しますか? すなわちそれは正しく

  • あるべき新しいサイズを特定しますか?
  • [i]-indexing または iteratorsを介してデータにアクセスできますか?
  • 一般的に期待どおりに動作しますか?つまり、通常のベクトルのように動作しますか?
4

1 に答える 1

2

STL ベクターは、(外部メソッドによって) 新しいデータをベクターにコピーしたという事実を認識しますか? つまり、正しくなります。

いいえ、reserved実際にベクトルのサイズを変更せずに . reserveメモリ割り当てのオーバーヘッドを減らし、イテレータの無効化を防ぐために、内部ストレージを予約するための単なる要求です。外から見た容器の大きさは変わりません。

resizeの代わりに呼び出すことですが、うまくいきますreserve。この場合、そのストレージは連続していて適切なサイズであることが保証されているため、データをベクターに直接自由にコピーできます。この場合、すべてのポイントが保持されます。ただし、要素に書き込むためのデータをデフォルトで構築するというオーバーヘッドが発生resizeする可能性resizeがあることに注意してください。ただし、このオーバーヘッドを防ぐことは別の問題です.ベクトルを使用することは、目的を達成するための唯一の方法です.

于 2013-05-12T00:17:05.173 に答える