2013-04-30 2 views
3

OpenCL API를 통해 실행중인 OpenCL 커널을 종료 할 수있는 방법이 있습니까? 사양에서 아무 것도 찾지 못했습니다.OpenCL 커널 강제 종료

내가 해결할 수있는 유일한 해결책은 1) 커널을 멈추고 자 할 때 호스트가 쓰는 플래그를 주기적으로 검사하거나 2) 커널을 별도의 프로세스로 실행하고 전체 프로세스를 종료하는 것입니다 . 나는 그것들 중 하나가 매우 우아한 해결책이라고 생각하지 않으며 # 1이 확실하게 작동 할 지 확신하지 못합니다.

+0

두 번째 옵션이 너무 좋지 않은지 잘 모르겠습니다. 프로세스를 종료하더라도 커널은 여전히 ​​GPU에서 실행됩니다. 나는 레이 트레이서에서 비슷한 것을하려고 노력했다. 커널과는 별도의 스레드에서 키보드를 검사했습니다. 사용자가 'ESCAPE'를 누르면 프로그램이 즉시 종료되기를 원합니다. 마지막으로 프로그래밍 된 끝 부분을 보았을 때 코어 덤프가 발생했습니다. –

+0

나는 완전히 동의한다, 그들은 모두 나쁜 선택이다. 거기에는 더 나은 표준 옵션이 있기를 바라고 있습니다. – agrippa

+0

플러그를 빼내십시오. 커널을 잘 정의 된 (그리고 짧은 시간) 계산 부분으로 분리하고 호스트 측에 제어 결정을 맡기는 것이 좋습니다. 예를 들어 nvidia 드라이버가 몇 초 안에 끝내지 않으면 gpu가 디스플레이에 연결되면 커널이 죽습니다. –

답변

1

아니요, 아니요, OpenCL API는 실행중인 커널을 인터럽트 할 수 없습니다. 일부 시스템에서는 몇 초 이상 실행되는 커널이 드라이버에 의해 종료됩니다.

Ref. Windows의 경우 : Timeout Detection and Recovery of GPUs through WDDM, Linux + NVidia의 경우 : Using CUDA and X.

표준의 어떤 것도 옵션 1이 작동한다는 것을 보장하지 않습니다. 거의 확실하지 않습니다. 옵션 2가 작동하지만 다른 프로세스와 통신해야합니다.

의견에서 제안한 것처럼 작은 커널로 커널을 분할하는 것이 가장 좋은 방법 일 것입니다.