Vector 如何将值从uint2复制到推力中的一个向量?

Vector 如何将值从uint2复制到推力中的一个向量?,vector,cuda,thrust,Vector,Cuda,Thrust,我在向量结果(大小)中有值,我只想将results.y的值单独复制到向量计数(大小)。如何使用推力::转换函数来实现这一点?您需要声明某种函数对象(它可以是一元函数或二元函数,将从uint2中选择第二个元素。如果在nvcc中启用--导出扩展lambda,则可以使用lambda: 自动选择器=[&]\uuuuuuu设备(const uint2&pair){return pair.y;}; 您可以改为使用函数对象: struct Selector { __host__ __device__

我在
向量结果(大小)
中有值,我只想将results.y的值单独复制到
向量计数(大小)
。如何使用
推力::转换
函数来实现这一点?

您需要声明某种函数对象(它可以是
一元函数
二元函数
,将从
uint2
中选择第二个元素。如果在nvcc中启用
--导出扩展lambda
,则可以使用lambda:

自动选择器=[&]\uuuuuuu设备(const uint2&pair){return pair.y;};

您可以改为使用函数对象:

struct Selector
{
    __host__ __device__ unsigned int operator()(const uint2& pair) 
    {
        return pair.y;
    }
};
然后在
推力::变换中使用它:

变换(results.begin(),results.end(),count.begin(),选择器);


和@Anbu,因为您是这个网站的新手-如果我帮助了您,请将我的答案标记为解决方案。是的,谢谢。但我需要进一步澄清。如果结果向量位于设备as中,uint2 results=NULL;cudamaloc((void*)和results,sizeof(uint2)*size;unsigned count=NULL;cudamaloc((void**)和count,sizeof(unsigned)*size);那么此转换函数如何工作以复制到此处的“count”?@psolt欢迎使用堆栈溢出!请显示您的问题。您应该包括一个您遇到问题的代码,然后我们可以尝试帮助解决特定问题。您还应该阅读。
Selector selectorObject;
thrust::transform(results.begin(), results.end(), count.begin(), selectorObject);