GPU에서 여러 변수의 "수학"기능을 계산하는 함수가 필요합니다. 나는 추력과 그것의 zip_iterator
을 사용하여 튜플에서 변수를 묶고, 함수기를 for_each
으로 구현했습니다. 하지만 다른 "수학"기능을 계산할 수있는 보편적 인 기능을 원합니다. 그래서 함수에서이 펑터를 전달해야합니다.추력의 함수 안에 다형성 펑터 사용
이 작업을 수행하기 위해 나는 operator()(Tuple t)
의 다른 버전을 가진 펑터의 간단한 계층 구조 (기본 클래스 만있는)를 구현해야합니다. 예를 들어, 펑을 다음과 같이 할 수있다 :
struct Func {
template <typename Tuple>
__host__ __device__
void operator()(Tuple arg) {
thrust::get<1>(arg) = 0;
}
};
strust f1 : public Func {
...
};
strust f2 : public Func {
...
};
문제는 내가 제대로 기능에 펑터를 요구 패스 할 수있는 방법이며, 어떻게 이러한 함수를 정의? 이 기능은 같이 할 수있다 :
thrust::host_vector evaluateFunction(Func func, thrust::host_vector point) {
thrust::host_vector result(point.size());
thrust::for_each(thrust::make_zip_iterator(thrust::make_tuple(point.begin(), result.begin())),
thrust::make_zip_iterator(thrust::make_tuple(point.end(), result.end())),
func);
return result;
}
그러나 이러한 정의와 나는 그것으로 f1
또는 f2
를 전달할 수 없습니다. 올바르게 정의하려면 어떻게해야합니까?
특정 시나리오에서 사용할 특히 "수학"기능을 식별하는 방법? 나는 당신이 * function *을 * functor *로 전달 (또는 식별)해야한다고 말할 것이다. –
필자는 필요한 "수학"함수를 펑터로 구현할 수 있고 주어진 벡터의 모든 요소에 대해이 '수학'함수를 계산하는 함수를 구현할 수 있다고 생각했습니다. 따라서이 함수는 보편적이지만 수학 함수 (functor로 구현 됨)를 전달해야합니다. – lexxa2000
펑터를'thrust :: for_each'에 넘겨 줄 것입니다.각 수학 함수에 대해 개별 (개별) 펑터를 전달하려는 경우 각 요소에 동일한 수학 함수를 적용하려는 경우 문제가 무엇인지 알 수 없습니다. 각 요소에 다른 펑터를 전달하려면이를 수행 할 수 없습니다. 그러나 각 요소에 대해 동일한 펑터를 전달하고 각 요소에 대해 다른 수학 계산을 할 수는 있지만 가능하면 원하는 요소를 식별 할 수있는 몇 가지 메소드가 있어야합니다. 계산하기. 나는 당신의 질문이 분명하다고 생각하지 않습니다. –