我試圖使用推力指數爲每個給設備矢量某些值 這裏是代碼如何獲得推力的foreach
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函數的真實指數。謝謝!
爲什麼輸出應該是N-2? – talonmies 2012-08-05 13:31:12
uint x = threadIdx.x + blockIdx.x * blockDim.x; uint y = threadIdx.y + blockIdx.y * blockDim.y; uint offset = x + y * blockDim.x * gridDim.x;偏移量是索引。我希望每個矢量都有自己的索引 – user1536720 2012-08-05 14:37:28
是的,但是您隱式假定每個線程正好處理數組中的1個輸出點,並且在您計算的2D線索索引與數組中的某個位置之間存在直接關係。這些事情都不一定是真的。 – talonmies 2012-08-05 15:11:39