OpenCL Wrong Note: event wait list를 많이 걸면 더 안전하고 빠르다?
한동안 clEnqueueNDRangeKernel(..., wait_list=...)를 넉넉하게 걸수록 “안전하고 효율적”이라고 생각했다.
실제로는 반대가 되기 쉽다. event wait list는 GPU가 알아서 최적 순서를 찾는 힌트가 아니라, host가 만든 명시적 실행 의존성이다.
즉 필요 없는 이벤트까지 wait list에 넣으면, 원래 병렬로 돌 수 있던 커널까지 직렬화될 수 있다.
핵심 정리:
- event wait list = 실행 순서 제약을 추가하는 장치
- “안전빵”으로 과하게 묶으면 병렬성이 줄어듦
- 의존성은 데이터/리소스 충돌이 있는 지점에만 최소로 선언하는 편이 좋음
실무 체크 포인트:
- 정말 같은 버퍼/이미지 영역을 읽고 쓰는가?
- queue가 in-order인지 out-of-order인지 구분했는가?
- host 편의 때문에 불필요한 전역 이벤트를 재사용하고 있지 않은가?
의존성을 정확히 좁히면, correctness를 유지하면서도 queue overlap과 디바이스 활용률을 더 쉽게 확보할 수 있다.
관련 글
관련 용어
- [[command-queue]], [[barrier]], [[work-group]]