2

xを使用して初期化した場合、にまたがるを作成することは可能thrust::device_vector<double> x(10)ですか?device_vector yx[2]x[5]

注:メモリをコピーしたくありません。これは、のようなものを使用した場合に発生しますthrust::device_vector<double> y(x.begin(), x.end())

4

1 に答える 1

4

スラスト device_vector には割り当てコンストラクターまたはコピー コンストラクターしかないため、別の device_vector を構築して既存のベクターまたはデバイス ポインターに直接エイリアスを設定する方法はありません。しかし、コメントで指摘されているように、実際には必要ありません。スラスト アルゴリズムは常にイテレータで機能し、イテレータ演算を使用して同じ結果を得ることができます。たとえば、次の例では、コピー構築によって新しいベクターを作成します。

thrust::device_vector<double> x(10);
thrust::device_vector<double> y(x.begin()+2, x.begin()+5);

double val = thrust::reduce(y.begin(), y.end());

一方、これはそれなしで同じ答えを返します:

thrust::device_vector<double> x(10);

double val = thrust::reduce(x.begin()+2, x.begin()+5);

どちらの場合も結果は同じで、2 つ目は、入力ベクトルのサブセットにエイリアスを作成することと同じです。

于 2012-10-02T17:23:33.547 に答える