2017-02-13 2 views
0

값이 vector<uint2> results (size) 인 경우 results.y 값만 vector<int> count (size)에 복사하고 싶습니다. thrust::transform 기능을 사용하여 어떻게하면됩니까?추력시 uint2에서 하나의 벡터로 값을 복사하는 방법은 무엇입니까?

+0

에 오신 것을 환영합니다! 질문 [편집]하여 [지금까지 시도한 내용] (http://whathaveyoutried.com)을 보여주십시오. 문제가있는 코드의 [mcve]를 포함시켜야 특정 문제를 해결할 수 있습니다. 또한 [ask]를 읽어야합니다. –

답변

1

당신은 함수 객체의 어떤 종류를 선언 할 필요가 (이 될 수 있습니다 UnaryFunction 또는 uint2에서 두 번째 요소를 선택합니다 BinaryFunction 당신이 NVCC에서 --expt-extended-lambda을 사용하는 경우 당신은 람다를 사용할 수 있습니다.

auto selector = [&] __device__ (const uint2& pair) { return pair.y; };

당신을 대신에 함수 객체를 사용할 수 있습니다 다음

struct Selector 
{ 
    __host__ __device__ unsigned int operator()(const uint2& pair) 
    { 
     return pair.y; 
    } 
}; 

을 그리고 thrust::transform에서 사용 :

를 스택 오버플로

thrust::transform(results.begin(), results.end(), count.begin(), selector);

또는

Selector selectorObject; 
thrust::transform(results.begin(), results.end(), count.begin(), selectorObject); 
+0

그리고 @Anbu이 사이트에 처음 오신 분은 - 제가 도와 주신다면 제 대답을 해결책으로 표시하십시오. – pSoLT

+0

예. 감사합니다. 하지만 한 가지 더 명확한 설명이 필요합니다. 결과 벡터가 다음과 같이 장치에 있으면 uint2 results = NULL; cudaMalloc ((void *) & results, sizeof (uint2) * size); 부호없는 카운트 = NULL; cudaMalloc ((void **) & count, sizeof (unsigned) * size); 그러면이 변환 함수가 어떻게 'count'에 복사 할 수 있습니까? @pSoLT – Anbu