4

推力::device_vector の値

推力::device_vector キー;

初期化後、keys には -1 に等しいいくつかの要素が含まれます。キーと値の同じ位置にある要素を削除したかったのです。

しかし、私はそれを並行して処理する方法がわかりませんか?

4

1 に答える 1

4

これを行うには、おそらく多くの方法があります。考えられる方法の 1 つ:

  1. thrust::remove_if(ドキュメント)のステンシル バージョンを使用し、キーをステンシルとして使用し、対応するキーが -1 である値の要素を削除します。述語テスト用のファンクターを作成する必要があります。
  2. -1 の値を削除するには、キーでthrust::remove(ドキュメント) を使用します。

次に例を示します。

#include <iostream>
#include <thrust/device_vector.h>
#include <thrust/copy.h>
#include <thrust/remove.h>
#include <thrust/sequence.h>

#define N 12
typedef thrust::device_vector<int>::iterator dintiter;

struct is_minus_one
{
  __host__ __device__
  bool operator()(const int x)
  {
    return (x == -1);
  }
};

int main(){

  thrust::device_vector<int> keys(N);
  thrust::device_vector<int> values(N);

  thrust::sequence(keys.begin(), keys.end());
  thrust::sequence(values.begin(), values.end());

  keys[3] = -1;
  keys[9] = -1;

  dintiter nve = thrust::remove_if(values.begin(), values.end(), keys.begin(), is_minus_one());
  dintiter nke = thrust::remove(keys.begin(), keys.end(), -1);

  std::cout << "results  values:" << std::endl;
  thrust::copy(values.begin(), nve, std::ostream_iterator<int>( std::cout, " "));
  std::cout << std::endl << "results keys:" << std::endl;
  thrust::copy(keys.begin(), nke, std::ostream_iterator<int>( std::cout, " "));
  std::cout << std::endl;

  return 0;
}
于 2013-07-11T13:44:57.160 に答える