성능면에서 모두 동일하지만 첫 번째 권장 사항은 권장되지 않습니다.
커널 내의 스레드를 반환하면 나머지 코드에서 예기치 않은 동작이 발생할 수 있습니다.
예상치 못한 동작이란 워프에서 그룹화 된 스레드의 최소 단위와 관련된 문제입니다. 예를 들어 커널에 if/else
블록이있는 경우이 상황을 스레드 분기라고하며, 정상적인 경우 스레드가 유휴 상태로 남아 있고 일부는 일부 명령을 실행합니다. 예 도서, 제 5 장, 스레드 협력하여
CUDA는 :
그러나 __syncthreads의 경우
(), 결과는 다소 비극적이다. 쿠다 아키텍처는 어떤 스레드가
그래서, 그것은 커널 내에서 스레드 동기화에 주로 관련이있다()을 __syncthreads를 실행 한 블록의 모든 스레드까지 __syncthreads()을 넘어 명령에 진출 없다는 것을 보장합니다. 여기에서이 주제에 대한 아주 좋은 질문/답을 찾을 수 있습니다 Can I use __syncthreads() after having dropped threads? 내가 마지막 주, 나는 또한 나쁜 관행와 아무 문제가 나타난 것을 사용했습니다으로
하지만 문제는 미래에 발생할 수있는 보장은 없습니다 . 그것은 내가 권하고 싶지 않은 것입니다
출처
2013-02-14 08:33:12
pQB
둘 다 당신에게 동일한 성능을 제공 할 것입니다. – sgarizvi