2011-07-01 2 views
7

내가 수행 할 프로젝트에 대한 조언이 필요합니다. CUDA 4.0을 사용하는 Multi-GPU 노드에서 간단한 커널을 실행할 계획입니다. (아직 결정하지는 않았지만, 당황스럽고 병렬적인 것들에 대해 힌팅을하고 있습니다.) 아래의 전략을 따르면됩니다. CUDA가 멀티 GPU 환경에서 제공하는 다양한 전략으로 커널을 시작하여 노드를 프로파일 링합니다.CUDA를 사용한 멀티 GPU 프로그래밍 전략

  1. 단일 호스트 스레드 - 여러 장치 (공유 컨텍스트)
  2. 단일 호스트 스레드 - 단일 장치 커널의 동시 실행 (공유 컨텍스트)
  3. 여러 호스트 스레드 - (같음) 여러 장치 (독립 문맥)
  4. 단일 호스트 스레드 - 하나 개의 장치에 순차 커널 실행
  5. 여러 호스트 스레드 - 하나 개의 장치에 커널의 동시 실행 (독립 컨텍스트)
  6. 여러 호스트 스레드 - 하나의 장치에서 커널을 순차적으로 실행 (독립적 인 컨텍스트)

나는 어떤 누락 되었습니까? 내가 선택한 테스트 카테고리와 멀티 GPU 프로그래밍에 대한 일반적인 조언을 환영합니다.

감사합니다,


사얀

편집 :

내가 그렇게 수정, 이전 분류가 일부 중복을 포함 생각했다.

+2

"다중 호스트 스레드 - (Equal) Multiple devices, Independent Contexts"와 같이 갈 것입니다.이 접근법은 가능한 한 데이터 공유가 거의 없기 때문에 병렬 처리를 극대화 할 수 있기 때문입니다. 그러나 GPGPU를 수행하지 않기 때문에 일반적인 관찰 일뿐입니다. –

답변

2

대부분의 작업 부하는 CPU 작업에서 충분히 가볍기 때문에 단일 스레드에서 여러 GPU를 저글링 할 수 있지만 CUDA 4.0부터는 쉽게 시작할 수 있습니다. CUDA 4.0 이전에 cuCtxPopCurrent()/cuCtxPushCurrent()을 호출하여 현재 주어진 스레드에 대한 컨텍스트를 변경할 수 있습니다. 그러나 CUDA 4.0부터는 cudaSetDevice()을 호출하면 현재 컨텍스트를 해당 장치에 맞게 설정할 수 있습니다.

GPU 컨텍스트는 여전히 분리되어 있으며 장치 메모리와 CUDA 스트림 및 CUDA 이벤트와 같은 개체는 GPU 컨텍스트와 관련이 있습니다. 만들어졌습니다.

+0

SLI 설정에서 (1)은 무엇입니까? – osgx

+1

SLI는 별도로 열거하도록 GPU를 설정했다고 가정 할 때 멀티 GPU의 특별한 경우입니다. 기본적으로 SLI는 여러 GPU를 단일의 더 빠른 GPU처럼 보이게합니다. CUDA는 시스템을 그렇게 구성 할 때 GPU 중 하나만 사용할 수 있습니다. – ArchaeaSoftware

1

다수의 호스트 스레드 - 여러 장치가 같을 때 독립적 인 컨텍스트는 얻을 수있는 경우 승자입니다. 이것은 진정으로 독립적 인 작업 단 위를 얻을 수 있다고 가정합니다. 당신의 문제가 곤혹 스럽기 때문에 이것은 사실이어야합니다.

경고 : 나는 개인적으로 대규모 멀티 GPU 시스템을 구축하지 않았습니다. 필자는 CPU에 비해 ​​3 배의 가속도를 가진 성공적인 단일 GPU 시스템을 구축했습니다. 따라서 조언은 멀티 GPU 시스템을 구축 한 동료와 토론 한 것뿐만 아니라 필자가 본 동기화 비용의 일반화입니다.

+0

멀티 GPU 시스템은 2 개의 CPU와 4 개의 GPU가있는 Appro 1U입니다. 위의 모든 카테고리를 테스트하고 프로파일 링하고 싶습니다 ... 예, 지금까지이 카테고리에서 더 나은 결과를 보았습니다. 그런 문제가 GPU에 이상적이라는 생각을 가지고 있습니다."여러 호스트 스레드 - 하나의 장치 독립적 컨텍스트에서 커널을 동시에 실행"은 특정 문제 크기에 대해 전력을 소비하는 것이 유리할 수 있습니다. – Sayan

관련 문제