thrust는 cuda를 C++로 사용할 떄 사용하면 좋다.
thrust 함수를 호출할 땐, 가능하면 cu파일에서 호출하는 것이 좋다. (h,cpp파일에서 동작하지 않는 함수들이 있다)
for_each의 경우 쿠다 커널 함수를 짜지 않고 쿠다에서 실행시킬 수 있는 좋은 함수이다. 게다가 블록, 그리드 수를 고민할 필요도 없고 성능은 완벽하게 동일하다.
thrust::for_each(
thrust::counting_iterator<int>(0),
thrust::counting_iterator<int>(N*MB),
[=] __host__ __device__ (const int& idx)->void {
int oh = static_cast<float>((idx % N) == y[idx / N]);
error[idx] = input[idx] - oh;
}
);