값이 vector<uint2> results (size)
인 경우 results.y 값만 vector<int> count (size)
에 복사하고 싶습니다. thrust::transform
기능을 사용하여 어떻게하면됩니까?추력시 uint2에서 하나의 벡터로 값을 복사하는 방법은 무엇입니까?
답변
당신은 함수 객체의 어떤 종류를 선언 할 필요가 (이 될 수 있습니다 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);
그리고 @Anbu이 사이트에 처음 오신 분은 - 제가 도와 주신다면 제 대답을 해결책으로 표시하십시오. – pSoLT
예. 감사합니다. 하지만 한 가지 더 명확한 설명이 필요합니다. 결과 벡터가 다음과 같이 장치에 있으면 uint2 results = NULL; cudaMalloc ((void *) & results, sizeof (uint2) * size); 부호없는 카운트 = NULL; cudaMalloc ((void **) & count, sizeof (unsigned) * size); 그러면이 변환 함수가 어떻게 'count'에 복사 할 수 있습니까? @pSoLT – Anbu
에 오신 것을 환영합니다! 질문 [편집]하여 [지금까지 시도한 내용] (http://whathaveyoutried.com)을 보여주십시오. 문제가있는 코드의 [mcve]를 포함시켜야 특정 문제를 해결할 수 있습니다. 또한 [ask]를 읽어야합니다. –