2016-08-20 2 views
0

GPGPU에서 영구 스레드를 사용하는 것과 디바이스 측 엔벌 로프/네 스티드 병렬 처리를 적용 할 수있는 경우 여전히 이점이 있습니까?지속적 스레드 대 장치 측 큐 삽입/중첩 병렬 처리

필자는 이전 성능을 얻기 위해 구형 하드웨어에 지속적인 스레드가 필요한 몇 가지 오래된 문서를 읽었으며 장치 측 엔큐/네 스티드 병렬 처리를 사용하면 관련 기술과 관련성이 없는지 확실하지 않습니다.

자식 작업이 부모로부터 시작된 후에 완전히 독립적 인 경우 영구 스레드가 계속 가치가 있다고 생각합니까?

답변

3

프로그래밍 방법론으로 지속되는 스레드는 아마 잠시 동안 계속 관심을 가질 것입니다. 지속성 스레드는 중첩 된 병렬 처리보다 몇 가지 이점을 제공합니다. 여기서 2는 다음과 같습니다 출시 지연의

  1. 제거 : 그것은 적어도 CUDA 동적 병렬 처리 (CDP)의 경우, (몇 마이크로 초 아마도) 작지만 모두와 연관된 발사 대기 시간이있다 호스트 커널 시작 및 하위 커널 시작 극히 짧은 대기 시간의 요구 (예 : 네트워크 패킷 처리)의 경우, 지속적인 스레드를 사용하는 생산자/고객 작업 큐 모델은 새로운 작업 수신과 관련된 출시를 포함하는 메커니즘보다 짧은 대기 시간과 빠른 처리 시간을 제공 할 수 있습니다.

  2. 메모리 사용을위한 최적화 : 지속적인 스레드의 새로운 새로운 사용 사례는 커널 시작과 관련된로드/저장 패턴을 피하는 것입니다. 예를 잘 설명하면 here입니다. 기본 아이디어는 비슷한 작업 부하를 반복적으로 처리하기 위해 데이터/매개 변수를로드 할 필요가 없도록 (공유 메모리를 비롯하여 특히 GPU 레지스터 공간의 사용을 포함하여) 온칩 데이터 저장 장치의 사용을 신중하게 최적화 할 수 있다는 것입니다 예를 들어 커널을 시작할 때 (아마도) 업데이트 된 매개 변수를 커널의 결론에 따라 전역 메모리에 저장합니다. 이것은 많은 매개 변수 사용량이있는 특정 작업 부하에 대해 극적인 처리 이점을 가질 수 있으며, 매개 변수 공간을 온칩에 "적합"시킬 수 있습니다. 새로운 GPU는 점점 더 많은 온 - 칩 레지스 터 저장 공간을 가지기 때문에 더 큰 워크로드에 대해서도 계속 관심을 가질 것입니다.

퍼시 스턴트 쓰레드 접근 방식이 런치 - 온 - 작업 방식보다 명확한 이점을 제공하는 다른 특정 사용 사례가있을 가능성이 큽니다. 이것들은 단지 두 가지 예입니다. 간단히 말해서, 영속 커널은 다른 유형의 GPU 처리 패러다임을 대체하기위한 일반적인 전략은 아니지만 특정 경우 반복적으로 커널을 시작하는 방법보다 이점을 제공 할 수 있습니다. 따라서 지속적인 커널에 대한 관심은 어느 정도 지속될 것입니다.

+0

이것은 내가 stackoverflow에서 질문 한 적이있는 가장 유익한 답변입니다! 이상하게도 가장 빠르다. 데이터 캐싱을 최적화하는 데 도움이되는 요점과 예가 매우 유용했습니다. 실행 사이에 register/shared-mem 상태를 어떻게 든 유지할 수있는 nVidia의 Pascal CUDA 8 멀티 블록 그룹을 사용하여 상황이 전혀 변경되지 않는지 알고 있습니까? 정말 고맙습니다. – iam

+0

Pascal/CUDA 8은 하나의 커널 실행에서 다음 커널 실행까지 온칩 레지스터 또는 공유 메모리의 상태를 유지할 수 있다는 것을 알지 못합니다. 내가 아는 그러한 시설이 존재하지 않습니다. 그 주장에 대한 언급을 인용 할 수 있습니까? –

+0

임의로 인터넷을 검색 한 결과이 문서의 끝 부분에 https://asc.llnl.gov/DOE-COE-Mtg-2016/talks/1-10_NVIDIA.pdf에 대한 언급이있었습니다. 하지만 정확히 어떻게 작동하는지 분명하지 않습니다. – iam