2012-04-26 2 views
0

CPU와 GPU의 차이점은 GPU가 범용 프로세서가 아니기 때문에 비디오 카드에 GPU가 10 개 있으면 실제 GPU가 동일한 프로그램 포인터를 공유하고 GPU 각 GPU가 실제로 동일한 코드를 실행하는지 확인해야합니다.OpenCL 및 다중 비디오 카드

각 GPU가 물리적으로 병렬로 실행되기 때문에 동일한 카드에서 동기화가 문제가되지 않으므로 모두 동시에 완료해야합니다.

제 질문은 여러 카드에서 어떻게 작동합니까? 그들이 작동하는 속도에서 하드웨어가 실행 시간에 약간의 차이를 만들어 하나의 카드에있는 하나의 GPU에 대한 계산이 다른 카드의 다른 GPU에 대한 동일한 계산보다 빠르거나 느릴 수 있습니다. 각각의 GPU가 물리적으로 병렬로 실행되기 때문에

답변

2

동기화가 같은 카드에 문제가되지 않습니다

감사 때문에 같은 시간에 모두 완료해야합니다.

이것은 사실이 아닙니다. 예를 들어 메모리 액세스 대기 시간의 차이로 인해 GPU의 다른 스레드가 다른 시간에 완료 될 수 있습니다. 이것이 OpenCL에서 barrier 명령과 같은 동기화 기본 요소가있는 이유입니다. 스레드가 정확히 병렬로 실행되고 있다고 가정 할 수는 없습니다.

여러 GPU에서도 마찬가지입니다. 동기화가되어 있다고 보장 할 수 없으므로 명시 적으로 작업을 동기화하기 위해 clFinish와 같은 API 호출에 의존해야합니다.

2

GPU에서 스레드가 작동하는 방식에 대해 혼란 스러울 수도 있습니다. 여러 GPU 문제를 먼저 해결합니다. 여러 GPU는 프로그램 포인터를 공유하지 않으므로 동시에 거의 동시에 커널을 완성하지 못합니다.

단일 GPU에서 동일한 컴퓨터 단위 (또는 NVIDIA 용어로 SM)에서 실행 중이며 동일한 워프/파면의 일부인 스레드 만 동기화되어 실행되도록 보장됩니다. 당신은 실제로 이것에 의지 할 수 없지만, 어떤 장치의 경우 컴파일러는 그 경우를 결정할 수 있습니다 (worgroup 크기가 64로 하드 코드 된 한, AMD 장치에 대해 특별히 생각하고 있습니다).

@vocaro가 지적했듯이 로컬 메모리에는 장벽을 사용해야하는 이유가 있습니다. 동일한 GPU에서도 스레드는 병렬 처리로 실행되지 않고 모든 컴퓨팅 장치에서만 실행됩니다.

+0

안녕 루카스, 나는 혼란 스러울지도 모른다 : o) .. 나를 위해 하나의 점을 명확히 해 주시겠습니까? GPU를 참조 할 때 카드에있는 계산 단위 (clGetDeviceInfo를 사용하는 CL_DEVICE_MAX_COMPUTE_UNITS) 또는 GPU가 많은 계산 단위를 포함 할 수있는 물리적 카드 자체를 참조합니까? – mfc

+0

@mfc, GPU는 전체 그래픽 칩 (카드)입니다. GPU는 하나 이상의 계산 단위로 구성됩니다. 각 계산 단위는 여러 처리 요소 (또는 코어)로 구성됩니다. 아키텍처를 잘 이해하려면 AMD, NVIDIA 및 Intel의 프로그래밍 가이드를 읽어야합니다. –