2013-10-23 1 views
1

2 개의 GTX 590 카드 (4 GPU)가있는 리눅스 박스가 있습니다. CUDA 4.0 드라이버를 사용하면 GPUDirect 메모리 액세스를 호출하고 가능한 모든 4 개의 GPU 쌍 사이의 성공적인 복사본을 확인할 수 있습니다.멀티 GPU 엔비디아 GTX 590과의 GPUDirect 피어 투 피어 통신 문제

그러나 CUDA 4.1 드라이버 (또는 후속 드라이버)로 업그레이드 한 후 GPUDirect 액세스 쌍이 제한됩니다. 예를 들어 피어 - 투 - 피어

사이 활성화되어 CUDA 4.0에서 다음

GPU0 < -> GPU1

GPU0 < -> GPU2

GPU0 < -> GPU3

GPU1 < -> GPU2

GPU1 < -> GPU3

GPU2 < ->

하지만 CUDA 4.1 (또는 이상) 난 단지 사이에 액세스를 제한하고 아래 GPU3

:

GPU0에게 < -> GPU1 (같은 카드)

GPU2 < -> GPU3 (같은 카드)

GPU1 < -> GPU3

사람이 t을 설명 할 수 최신 CUDA 5.x 드라이버를 사용할 때 해결 방법을 알고 있습니까? $ lspci를 -tv (흥미로운 부분)


이 제공 : 모든 경로가 (구조 같은 트리) 물리적으로 사용할 수 있으며, CUDA 4.0을 사용하는 경우가있는 것처럼 나에게

-[0000:00]-+-00.0 ATI Technologies Inc RD890 Northbridge only single slot PCI-e GFX Hydra part 
     +-02.0-[0c-0f]----00.0-[0d-0f]--+-00.0-[0f]--+-00.0 nVidia Corporation Device 1088 
     |        |   \-00.1 nVidia Corporation GF110 High Definition Audio Controller 
     |        \-02.0-[0e]--+-00.0 nVidia Corporation Device 1088 
     |           \-00.1 nVidia Corporation GF110 High Definition Audio Controller 
     : 
     +-0b.0-[04-07]----00.0-[05-07]--+-00.0-[07]--+-00.0 nVidia Corporation Device 1088 
     |        |   \-00.1 nVidia Corporation GF110 High Definition Audio Controller 
     |        \-02.0-[06]--+-00.0 nVidia Corporation Device 1088 
     |           \-00.1 nVidia Corporation GF110 High Definition Audio Controller 

이 보이지만, cuda 4.1 이상을 사용하는 경우 cudaDeviceCanAccessPeer()는 "교차 카드"통신에 대해 false를 제공합니다. 모든 호스트 - 장치 경로는 항상 사용할 수 있습니다 (물론).

답변

4

CUDA 피어 투 피어 액세스를 사용하도록 설정하면 GPU 드라이버가 시스템 구성을 검사하여 피어 투 피어 액세스가 작동하는지 확인합니다.

예를 들어 here과 같이 두 장치 간 직접 통신이 QPI 링크를 통해 이동해야하는 경우 피어 액세스가 사용되지 않습니다.

따라서 GPU 드라이버는 시스템 구성을 검사하고 시스템 토폴로지를 인식 할 수 있는지 여부와 인식 된 토폴로지가 피어 투 피어인지 여부를 결정할 수있는 몇 가지 휴리스틱에 적합한 지 여부에 따라 피어 액세스를 사용할지 여부를 결정합니다 지원이 성공할 것입니다.

동일한 카드에있는 장치간에 통신 할 수있는 경우 GPU 드라이버 토폴로지 인식 경험적 발견 방법은 간섭 장치가 카드의 PCIE 스위치 일 때 피어 투 피어가 성공할 것임을 나타냅니다 따라서 활성화됩니다 (cudaDeviceCanAccessPeer이 true를 반환합니다).

동일한 카드의 장치간에 피어 액세스가 가능하지만 다른 시나리오에서는 성공적으로 액세스 할 수없는 경우 시스템 토폴로지가 일종의 "인식 할 수없는"시나리오 또는 아마도 블랙리스트 된 시나리오. 다른 말로 표현하자면 예상 된 행동 일 것입니다.

동일한 카드에있는 장치와 다른 카드에있는 일부 장치 쌍 사이에서 피어 액세스를 가능하게 할 수 있지만 다른 장치에있는 다른 장치 쌍이 아니라면 컴퓨터 구성 문제 또는 버그 일 수 있습니다.

드라이버가 관리하는 휴리스틱 및 화이트리스트 및 블랙리스트가 드라이버 버전에서 드라이버 버전으로 변경 될 수 있습니다. 따라서 이전 버전에서 최신 버전으로 이동할 때 동작의 차이가 나타나는 이유를 설명합니다. 예를 들어, 휴리스틱 스가 원래 CUDA 4.0과 함께 제공되는 270.41.19 드라이버에서 정의 된 경우, 해당 휴리스틱 스가 더 커질 수 있습니다 (예 : 새로운 버전으로 이동할 때 경험적 방법이 더 제한적이 될 수 있습니다). RD890 칩셋은 PCIE P2P의 "안전"으로 간주되었습니다. 나중에 테스트 또는 고객 보고서를 기반으로 RD890이 장착 된 마더 보드의 일부 모델에는 P2P와 관련된 문제가 있음을 발견 할 수 있습니다. 따라서 P2P는 RD890 기반 시스템의 드라이버에서 "차단"되었을 수 있습니다. RD890의 경우이 사실을 알지 못합니다. 시간이 지남에 따라 휴리스틱이 더 제한적이 될 수있는 이유에 대한 근거를 보여주기 위해 발생했을 수있는 일을 예로 들었습니다. 당신이 다른 카드를 다른 카드 다른 GPU를 사이하지만 일부의 GPU 사이의 P2P를 사용할 수있는 경우 때문에

는 그때 나에게 예기치 않은 동작이 같은 소리가, 아닌 사건의 자세한 설명과 위의를 제공 . 내 설명의 나머지 부분은 배경 정보입니다. 첫 번째 인스턴스에서 당신이 표시하기 때문에

귀하의 설명은, 나에게 완전히 명확하지 않은 경우 :

GPU0 < -> GPU1 (같은 카드)

GPU2 < -> GPU3 (같은 카드)

GPU1 < -> GPU3

는 성공적인 경로입니다. 이것은 GPU1 <-> GPU3이 "교차 카드"통신을 나타내는 것으로 가정 할 때 예기치 않은 행동입니다.

나중에 표시 :

을하지만, CUDA 4.1을 사용하는 경우와 cudaDeviceCanAccessPeer까지() "크로스 카드"통신을위한 거짓 제공합니다.

그리고 이것이 사실이라면 드라이버의 휴리스틱 스 수정을 기반으로 한 동작이 기대 될 수 있습니다.