2013-02-11 2 views
0

OpenCL을 처음 사용했습니다. 예를 들어 내 GPU 아키텍처는 다음과 같이 가정 : 멀티 프로세서의내 GPU에서 특정 클러스터를 제어 할 수 있습니까?

수 : 14

워프의 크기 :

(32)는 지금은 작업의 병렬 처리를 수행 할를. 14 개의 스트리밍 멀티 프로세서가 있습니다

1) 14 개의 다른 작업을 동시에 실행할 수 있습니까?

2) 그렇다면 어떻게해야합니까 ?? 어떻게 글로벌 ID, 그룹 ID, 지역 ID와 모두를 언급하는 ..

감사합니다 사전에) 일부 스레드 수와 (예를 명확하게 설명

3) .. :)

답변

0

GPU는 CPU와 다릅니다. CPU는 "작업 병렬"모드에서 작동 할 수 있지만 각 코어에서 다른 코드를 실행할 수 있습니다. 그러나 GPU는 "데이터 병렬"이며 SIMT (단일 명령어 다중 스레드)입니다.

이 모든 것은 한 번에 하나의 커널 만 실행할 수 있지만 커널은 모든 코어에서 실행되며 각 커널은 동시에 데이터 조각에서 작동 함을 의미합니다.

This question 그리고 그 대답에는 SIMT를 설명하는 많은 정보가 있으며 여기에 중복되지 않는 유용한 정보가 많이 있습니다.

GPU에서 작업 병렬 처리를 수행하는 유일한 방법은 실제로 여러 개의 GPU/장치가있는 것입니다.

기술적으로 OpenCL API는 clCreateCommandQueue을 사용하여 명령 대기열을 만들 때 CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE을 사용하여 여러 커널을 한 번에 실행할 수 있습니다. 그러나 커널이 동시에 실행된다는 보장은 없지만이 모드에서는 모든 GPU OpenCL 구현이 각 커널을 하나씩 실행한다는 것을 알 수 있습니다. CPU 기반 OpenCL 구현을 사용하는 경우에는 그렇지 않을 수도 있으며 동시에 커널을 실행시킬 수도 있습니다 (필자는 직접 시도하지 않았습니다).

+0

대답 해 주셔서 감사합니다 .. 의미있는 .. 그럼 실행 모드의 순서가 어긋나게 clEnqueueTask를 사용하는 것입니다. 제 생각에 적어도 minm 시간 간격과 동시에 실행되지만 순차적으로 실행되지는 않습니다. 맞습니까? 그래서 우리는 GPU에서 작업 병렬 처리를 할 수 있습니다 .. 하단의 작업 병렬 다이어그램에서이 링크를 체크 아웃하십시오 .. http://www.fixstars.com/en/opencl/book/OpenCLProgrammingBook/calling-the-kernel/ – Fakruddeen

+0

@Fakruddeen 하드웨어가 작업 병렬 처리를 지원한다면 OpenCL은 커널을 동시에 실행할 수 있지만 현재 GPU 하드웨어는이를 수행 할 수 없습니다. – prunge

관련 문제