2017-02-17 9 views
0

새로 생성 된 프로세스에서 CUDA를 초기화하는 것은 오늘날의 많은 서버급 시스템에서 상당 시간 (as long as a half-second) 이상 걸릴 수 있습니다. @RobertCrovella explains처럼 CUDA 초기화에는 대개 장치 및 호스트 메모리 맵의 조화가 포함 된 통합 메모리 모델 설정이 포함됩니다. 이것은 많은 메모리를 가진 머신에 꽤 오랜 시간이 걸릴 수 있습니다. 이 긴 지연에 기여하는 다른 요소가있을 수 있습니다.CUDA의 매우 긴 초기화 지연을 완화하려면 어떻게해야합니까?

복잡한 가상 메모리 매핑을 사용하지 않는 CUDA 활용 프로세스를 실행하려면이 효과가 매우 귀찮습니다. 각 프로세스는 "본질적으로"사실에도 불구하고 오래 기다려야합니다. CUDA가 마지막으로 초기화 한 초기화 코드 (아마도 약간의 정리 코드 포함)를 다시 사용할 수 있습니다.

이제 분명히, 모든 프로세스가 단일 프로세스 내에서 실행되도록 코드를 다시 작성하면 긴 초기화 비용을 절약 할 수 있습니다. 그러나 더 간단한 접근법이 아닌가? 정보 :

  • 프로세스간에 동일한 상태 정보/CUDA 컨텍스트를 전달합니까?
  • 대부분의 호스트 메모리를 모두 무시하도록 CUDA에 알려 주시겠습니까?
  • 통합 메모리 조화를 지금보다 더 게으 르기 때문에 실제로 필요한 정도로만 발생합니다.
  • 통합 메모리가있는 CUDA를 사용할 수 없으십니까?
  • 사이드에 데몬 프로세스를 유지하고 이미 초기화 된 CUDA 상태를 래치하는 중입니까?

답변

2

당신이 묻는 것은 이미 있습니다. 그것은 MPS (MULTI-PROCESS SERVICE)라고 불리며 기본적으로 드라이버 API를 에뮬레이트하는 데몬 프로세스로 항상 단일 GPU 컨텍스트를 유지합니다. 초기 대상 응용 프로그램은 MPI이지만 근본적으로 사용자가 생각하는 것입니다. 자세한 내용은 여기

읽기 :

https://docs.nvidia.com/deploy/pdf/CUDA_Multi_Process_Service_Overview.pdf

http://on-demand.gputechconf.com/gtc/2015/presentation/S5584-Priyanka-Sah.pdf

+0

흠이 가지 무거운 중량 및 오버 헤드 - 라덴 소리. 항상 IPC를하고 싶지는 않지만 ... FOSS입니까? 아마도 그 중 하나의 하위 레이어 만 가져올 수 있고 더 간단한 대안을 함께 해킹 할 수 있습니다. – einpoklum

+0

이것은 NVIDIA에서 제공 한 코드베이스입니다. 나는 그것이 폐쇄 된 소스라고 기대할 것이다. – talonmies

+1

MPS는 폐쇄 소스입니다. 여러 GPU가있는 시스템의 일부 시나리오에서 일부 완화를 제공 할 수있는 또 다른 방법은 CUDA 런타임이 'CUDA_VISIBLE_DEVICES' [환경 변수] (http://docs.nvidia.com/cuda)를 통해 필요한 GPU 만 사용하도록 제한하는 것입니다 /cuda-c-programming-guide/index.html#env-vars). 이것은 프로세스별로 지정할 수 있습니다. 이 방법론은 특정 사전 파스칼 UM 시나리오에서 몇 가지 이점을 제공 할 수도 있습니다. –