두 개의 벡터 (oldvector
및 newvector
)가 있습니다. 나는 다음과 같은 의사에 의해 정의 된 잔류의 값을 계산해야합니다CUDA를 사용한 잔여 계산
forall i : oldvector[i] = oldvector[i] - newvector[i]
a로 다음 : 현재
residual = 0;
forall i : residual += (oldvector[i] - newvector[i])^2
을, 나는 기본적으로하고있는 두 개의 CUDA 추력 운영과이를 계산하고
residual = 0;
forall i : residual += oldvector[i]^2;
이의 문제는 분명히 글로벌 MEM에 중간 저장소입니다
:하고있다 단항 연산자로 사각형과 thrust::transform_reduce
ory 전에 transform_reduce
. 이 두 단계를 통합하는이 문제에 대한보다 효율적인 접근 방법이 있습니까? 내 자신의 CUDA 커널을 작성하는 것 외에 다른 옵션이 있습니까?
내가 생각했던 접근법은 zip 반복기가있는 thrust::reduce
을 작성하는 것이 었습니다. 이 문제는 연산자의 반환 유형이 입력과 동일한 유형이어야한다는 점입니다. 이것은 나에게 환원 연산자가 여분의 추가를 의미하는 튜플을 반환한다는 것을 의미합니다.
감소 CUDA 커널을 작성한 경우, 감소 커널에 대한 CUDA 1.1 예제가 개선 되었습니까?
[추력 :: inner_product] (http://thrust.github.io/doc/group__transformed__reductions.html#gad9df36f7648745ca572037727b66b48d) 당신이 원하는 것을 할 것입니다. 차이 제곱을 계산하는'binary_op2'를 제공하십시오. 당신의'binary_op1'은 단지'thrust :: plus' 일 수 있습니다. –