2011-03-10 6 views
2

주어진 숫자 세트에 대해 최대 값 을 찾기 위해 CUDA에서 코드를 작성하려고합니다.CUDA에서 최대 값 찾기

숫자가 20이고 커널이 5 개의 스레드로 구성된 2 개의 블록에서 실행된다고 가정하십시오. 이제 10 개의 스레드가 처음 10 개의 값을 동시에 비교한다고 가정하고 스레드 2이 최대 값을 찾으면 스레드 2가 전역 메모리의 최대 값 변수를 업데이트합니다. 스레드 2가 업데이트되는 동안 이전 값을 사용하여 비교할 나머지 스레드 (1,3-10)는 어떻게됩니까?

atomicCAS()를 사용하여 전역 변수를 잠그면 스레드 (1,3-10)가 이전 최대 값을 사용하여 비교됩니까? 이 문제를 어떻게 극복 할 수 있습니까?

답변

11

이것은 순전히 감소 문제입니다. GPU에서 최적화를 최적화하기 위해 NVIDIA의 presentation을 사용해보십시오. 동일한 기술을 사용하여 모든 요소의 최소, 최대 또는 합계를 찾을 수 있습니다.

0

환원 커널을 작성하지 않는 한 가장 간단한 방법은 CUBLAS을 사용하는 것입니다.

2

추력 라이브러리에 대한 링크가 끊어집니다.
이 경우에 유용하게 사용하면 다음 페이지에서 문서를 찾을 수 있습니다.
Thrust, extrema reductions