점 (x, y)을 포함하는 특정 배열의 평균을 계산하려고합니다.
추력을 사용하여 (x, y) 점으로 표시된 평균 점을 찾을 수 있습니까? 또한 평균 숫자가 평균 셀을 나타내는 지 확신 할 수 없지만 각 셀에 점의 절대 위치가 포함되어있을 때 i*numColumns + j
을 의미 할 때 배열을 thrust::device_vector<int>
으로 나타낼 수 있습니다.
감사합니다.추력을 사용하여 int2 배열에서 평균을 계산하는 방법
5
A
답변
8
#include <iostream>
#include <thrust/device_vector.h>
#include <thrust/reduce.h>
struct add_int2 {
__device__
int2 operator()(const int2& a, const int2& b) const {
int2 r;
r.x = a.x + b.x;
r.y = a.y + b.y;
return r;
}
};
#define N 20
int main()
{
thrust::host_vector<int2> a(N);
for (unsigned i=0; i<N; ++i) {
a[i].x = i;
a[i].y = i+1;
}
thrust::device_vector<int2> b = a;
int2 init;
init.x = init.y = 0;
int2 ave = thrust::reduce(b.begin(), b.end(), init, add_int2());
ave.x /= N;
ave.y /= N;
std::cout << ave.x << " " << ave.y << std::endl;
return 0;
}
6
Keveman의 대답은 정확합니다. 코드를 필요로하는 유용한 팁을 추가하고 싶습니다. 코멘트가 아닌 여기에 넣을 것입니다.
Thrust 1.5에는 λ placeholder가 추가되어 @ keveman의 접근 방식을 더욱 단순하게 만들 수 있습니다. 펑터 대신 을 int2
으로 정의한 다음 펑터의 인스턴스를 _1 + _2
람다 자리 표시 자 식으로 바꿉니다. 명시 적 선언 인 init
을 make_int2()
(CUDA 제공)으로 바꿀 수도 있습니다. 참고 : int2 operator+
은 CUDA 코드 샘플 SDK의 "vector_math.h"헤더에 정의되어 있지만이 파일은 CUDA의 표준 부품이 아니므로이를 명확하게하기 위해 아래에 정의합니다.
#include <iostream>
#include <thrust/device_vector.h>
#include <thrust/reduce.h>
using namespace thrust::placeholders;
__device__
int2 operator+(const int2& a, const int2& b) {
return make_int2(a.x+b.x, a.y+b.y);
}
#define N 20
int main()
{
thrust::host_vector<int2> a(N);
for (unsigned i=0; i<N; ++i) {
a[i].x = i;
a[i].y = i+1;
}
thrust::device_vector<int2> b = a;
int2 ave = thrust::reduce(b.begin(), b.end(), make_int2(0, 0), _1 + _2);
ave.x /= N;
ave.y /= N;
std::cout << ave.x << " " << ave.y << std::endl;
return 0;
}
관련 문제
- 1. CUDA 추력을 사용하여 여러 1D 이동 평균을 병렬로 수행
- 2. 간단한 이동 평균을 계산하는 방법
- 3. R에서 가중 평균을 계산하는 방법?
- 4. 데이터 배열에서 계산하는 방법?
- 5. C# .NET에서 CPU로드 평균을 계산하는 방법
- 6. SQL 쿼리의 결과 열 평균을 계산하는 방법
- 7. 2 줄마다 평균을 계산하는 SP
- 8. 평균을 계산하는 간단한 수학 공식
- 9. 추력을 사용하여 배열 구조 정렬
- 10. JavaScript의 배열 배열에서 발생 횟수를 계산하는 방법
- 11. R을 사용하여 칼럼별로 주간 데이터의 평균을 계산하는 방법은 무엇입니까?
- 12. AWK를 사용하여 매 10 라인을 합산하고 평균을 계산하는 방법은 무엇입니까?
- 13. 포스트그레스에서 지수 이동 평균을 계산하는 방법은 무엇입니까?
- 14. 여러 정수 값의 평균을 계산하는 bash 스크립트
- 15. 테이블의 td 안에있는 값의 평균을 계산하는 jQuery
- 16. 대용량 행렬에서 대각선을 벗어난 평균을 더 빨리 계산하는 방법
- 17. 데이터 프레임의 행에서 0 값을 제외하면서 행의 평균을 계산하는 방법
- 18. 레일 : 생성 후 여러 데이터베이스 항목의 평균을 계산하는 방법
- 19. 평균을 계산하는 효율적인 방법, txt 파일의 표준 편차
- 20. PHP에서 여러 날짜를 비교하고 평균을 구하는 방법
- 21. LINQ를 사용하여 평균을 얻으십시오.
- 22. PHP를 사용하여 날짜 배열의 평균을 구하는 방법
- 23. 파이썬에서 while 루프를 사용하여 평균을 계산합니다.
- 24. 상관 하위 쿼리에서 MySQL의 이동 평균을 계산하는 방법은 무엇입니까?
- 25. SQL을 사용하여 순위를 계산하는 방법
- 26. jquery를 사용하여 Href를 계산하는 방법
- 27. 보수계를 사용하여 발걸음을 계산하는 방법
- 28. Python을 사용하여 시간을 계산하는 방법
- 29. DataGridView를 사용하여 셀을 계산하는 방법
- 30. 문자열 배열에서 중복을 계산하는 방법은 무엇입니까?
'int2'유형 (즉, 'a + b = {a.x + bx, a.y + by}')에 대해 더하기 연산자를 정의 할 수는 없습니까? reduce를 사용하여 입력에 대한 합계를 계산 한 다음 요소 수로 나누십시오. – talonmies
Thrust 1.5 +의 람다 자리 표시자를 사용하는 경우 연산자를 사용할 수 있습니다 (아래에서 추가 답변을 참조하십시오). – harrism