동일한 작업을 여러 번 미리 수행하는 알고리즘을 연구 중입니다. 연산이 일부 선형 대수 (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에 저장되어 있으며 실제로 전달되는 모든 것은 실제 호출입니다.
좋아, 이걸 어디서 알 수 있니? 나는 opencl의 실제 사양을 알아 내려고 노력하고 있지만 그다지 쉽지는 않다. (나는 실제로 CUDA 로의 전환을 고려하고있다.) 드라이버가 명령을 묶어서 큰 덩어리로 gpu로 보냈다는 말은 무엇입니까? –
나는 OpenCL 문서 clFinish에 따라 명령이 전달 될 때까지 모든 명령이 완료 될 때까지 명령을 번들로 처리한다고 생각합니다. OpenCL은 명령 실행시기를 결정할 것입니다. 그러나 clFinish에 대한 호출은 비싸고 피해야합니다. GPU가 100 %의 전력을 필요로하지 않고 계산을 실행할만큼 빠르다고 생각 했습니까? 내가 생각할 수있는 유일한 다른 점은 OpenCL이 GPU 사용을 제한하므로 컴퓨터 디스플레이가 잠기지 않을 것입니다. –