2011-08-11 3 views
6

동일한 작업을 여러 번 미리 수행하는 알고리즘을 연구 중입니다. 연산이 일부 선형 대수 (BLAS)로 구성되어 있기 때문에 GPAS를 사용해 보겠습니다.opencl 명령 대기열은 어떻게 작동하며 무엇을 요청할 수 있습니까?

커널을 작성하고 명령 대기열에서 커널을 시작하기 시작했습니다. 각 통화가 끝날 때까지 기다리지 않으려 고하기 때문에 이벤트를 통해 통화를 데이지 체인으로 연결하고 대기열에 넣기 시작합니다.

call kernel1(return event1) 
call kernel2(wait for event 1, return event 2) 
... 
call kernel1000000(vait for event 999999) 

이제 내 질문은,이 모든 것이 드라이버의 큐를 저장하는 그래픽 칩으로 푸시됩니까? 거기에 사용할 수있는 이벤트의 수 또는 명령 대기열의 길이에 경계가 있습니다. 둘러 보았지만 찾을 수 없었습니다.

나는 내 GPU의 사용률을 확인하기 위해 atMonitor를 사용하고 있는데, 20 % 이상으로 밀어내는 것은 꽤 어렵다. 이것은 단순히 호출을 충분히 빨리 푸시 할 수 없기 때문일까? 내 데이터는 이미 GPU에 저장되어 있으며 실제로 전달되는 모든 것은 실제 호출입니다.

답변

4

다음 커널이 이전 커널에 데이터 종속성이 없으면 먼저 이전 커널에서 이벤트를 기다리지 않아야합니다. 장치 사용률 (일반적으로)은 항상 대기열에 준비가되어있는 항목에 따라 달라집니다. 이벤트를 기다릴 필요가있을 때만 이벤트를 기다립니다.

"이 모든 것이 드라이버가 큐를 저장하는 그래픽 칩으로 푸시됩니까?"

구현 정의입니다. OpenCL은 GPU 이상에서 작동합니다. CUDA 스타일의 장치/호스트 이분법에서 "호스트"에 명령 대기열 작업 (대부분의 구현에서)을 고려해야합니다.

사이에 대기없이 여러 커널 호출 대기열에 넣어보십시오. 또한 최적의 작업 그룹 크기를 사용하고 있는지 확인하십시오. 이 두 가지를 모두 수행하면 기기를 최대한 활용할 수 있어야합니다.

1

불행히도 모든 질문에 대한 답을 모르겠지만 지금도 똑같은 것에 대해 궁금해하고 있습니다. GPL이 실행을 완료해야하므로 OpenCL 대기열이 가득 차게 될지 의심 스럽습니다. 20 개 이상의 명령이 제출되기 전에 마지막으로 대기 된 명령. GPU가 "워치 독 (watchdog)"을 가지고 있다면 말 그대로 엄청나게 긴 커널 (5 초 이상)이 실행되는 것을 막을 수 있기 때문입니다.

+0

좋아, 이걸 어디서 알 수 있니? 나는 opencl의 실제 사양을 알아 내려고 노력하고 있지만 그다지 쉽지는 않다. (나는 실제로 CUDA 로의 전환을 고려하고있다.) 드라이버가 명령을 묶어서 큰 덩어리로 gpu로 보냈다는 말은 무엇입니까? –

+1

나는 OpenCL 문서 clFinish에 따라 명령이 전달 될 때까지 모든 명령이 완료 될 때까지 명령을 번들로 처리한다고 생각합니다. OpenCL은 명령 실행시기를 결정할 것입니다. 그러나 clFinish에 대한 호출은 비싸고 피해야합니다. GPU가 100 %의 전력을 필요로하지 않고 계산을 실행할만큼 빠르다고 생각 했습니까? 내가 생각할 수있는 유일한 다른 점은 OpenCL이 GPU 사용을 제한하므로 컴퓨터 디스플레이가 잠기지 않을 것입니다. –