2013-07-25 2 views
2

세 개의 gpus가 있고 이들 모두에 거대한 버퍼를 전송해야하는 경우 각각의 CUDA 스트림을 사용하면 각자의 복사본 엔진이 동시에 전송을 수행 할 수 있습니까? 내 말은 : PCI-E 버스가 3 개 모두에 도달한다는 것은 똑같지 않은가?CUDA - 버퍼를 여러 장치로 전송

+0

적어도 다음 질문 중 하나에 대답해야합니다. http://on-demand.gputechconf.com/gtc-express/2011/presentations/cuda_webinars_multi_gpu.pdf – sj755

+2

질문의 마지막 부분은 PCI-e에 완전히 달려 있습니다. 호스트 시스템의 토폴로지. 일반적인 대답은 없습니다. – talonmies

+1

@ sj755 아마도 나는 뭔가를 놓치고 있습니다. 링크 된 프리젠 테이션은 '스트림'과 'P2P memcpy'를 악용하는 데 사용되는 지침을 설명합니다. 사용자의 주요 질문은 다음과 같습니다. 모든 GPU가 비동기 적으로 데이터를 교환하는 경우 (그리고 사용자가 이미이를 수행하는 방법을 이미 알고있는 경우) 메커니즘이 PCI-E 버스에서 대역폭을두고 경쟁 할 것인가? talonmies가 지적한 호스트 시스템의 PCI-E 토폴로지 – JackOLantern

답변

1

PCIe는 다양한 프로세서 아키텍처를 사용하여 CUDA에서 this text book으로 다루는 영역 중 하나를 확장합니다.

예, 전송할 때마다 별도의 스트림을 사용해야합니다. 이렇게하면 기본 직렬화 된 스트림 0에서 멀리 이동하게됩니다. 다양한 대역폭 제한에 부딪 힐 수도 있지만, 동시에 실행될 것이므로 순차적으로 전송하는 것보다 속도가 빨라집니다.

그러나 프로세서/메모리/pcie 컨트롤러가 동시 (PCIe 2) 5GB/s 스트림을 제공하는 기능으로 인해 제한됩니다. 더 많은 카드를 추가해도 PCIe 레인 수를 줄일 수없는 경우 대개 상당한 이점이 있습니다. 일반적으로 2 장의 카드는 잘 작동하지만 더 많은 카드를 추가 할 때 대역폭 문제가 발생함에 따라 3 장 이상의 카드로 급속히 떨어집니다. 특히 2 장 이상의 카드를 사용하면 많은 시스템에서 16 개의 PCIe 레인 전체를 사용할 수 없습니다.

Nsight 도구는 달성 된 실제 전송 속도를 보여주는 것뿐만 아니라 전송과 관련된 상황을 보여주는 타임 라인을 표시하는 데 매우 뛰어납니다. 따라서 실제로 발생하는 상황을 볼 수 있도록 해보는 것이 좋습니다.

관련 문제