デバイスベクトルに特定の値を与えるために、それぞれに推力を使用しようとしています。ここにコードがあります
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 関数の実際のインデックスを取得する方法を知りたいだけです。ありがとう!