デバイスベクトルに特定の値を与えるために、それぞれに推力を使用しようとしています。ここにコードがあります
const uint N = 222222; 
struct assign_functor
{
  template <typename Tuple>
  __device__ 
  void operator()(Tuple t)
  {  
    uint x = threadIdx.x + blockIdx.x * blockDim.x;
    uint y = threadIdx.y + blockIdx.y * blockDim.y;
    uint offset = x + y * blockDim.x * gridDim.x; 
    thrust::get<0>(t) = offset; 
  }
};
int main(int argc, char** argv)
{ 
  thrust::device_vector <float> d_float_vec(N);  
  thrust::for_each(
    thrust::make_zip_iterator( 
      thrust::make_tuple(d_float_vec.begin()) 
    ), 
    thrust::make_zip_iterator( 
      thrust::make_tuple(d_float_vec.end())
    ), 
    assign_functor()
  );
  std::cout<<d_float_vec[10]<<" "<<d_float_vec[N-2] 
}
d_float_vec[N-2] の出力は 222220 になるはずです。しかし、それは1036であることが判明しました。私のコードの何が問題なのですか??
私は、thrust::sequence を使用して、ベクトルにシーケンス値を与えることができることを知っています。スラスト foreach 関数の実際のインデックスを取得する方法を知りたいだけです。ありがとう!