CUDA 응용 프로그램 (this if you must know)을 OpenCL로 변환하려고합니다. 원래 응용 프로그램은 C 스타일 CUDA API를 사용하며 결과를 읽을 때 자동 대기 중 대기를 피하기 위해 단일 스트림을 사용합니다.OpenCL 이벤트 및 명령 대기열
이제 OpenCL 명령 대기열이 CUDA 스트림처럼 보입니다. 그러나 the device read command에서 write 및 kernel 명령을 실행하는 것과 마찬가지로 이벤트에 대한 매개 변수도 인식합니다. 그래서 장치 쓰기, 여러 커널 (예 : 하나의 커널 호출 한 다음 다른 커널 호출 100) 및 장치 읽기를 순차적으로 실행하려면 무엇이 필요합니까?
- 큐를 큐에 순차적으로 큐에 넣으면 CUDA와 같이 순차적으로 실행됩니까?
- 그래도 문제가 해결되지 않으면 이벤트의 데이지 체인을 통해 각 통화 대기 목록에 이전 통화의 일정을 표시 할 수 있습니까?
- 또는 N^2 의존성 검색과 같은 모든 이전 이벤트를 각 통화 대기 목록에 추가해야합니까?
- AMD's tutorial에있는 것처럼 각 통화마다 event.wait()를 개별적으로 수행해야합니까?
고마워요!
한 곳으로 생각하지 않았습니다. 감사! –
"대부분 받아 들였습니다"라고 제 진술을 수정해야합니다. 순서대로 대기열에있는 여러 커널이 순서대로 계산한다는 것은 사실입니다. 그러나 버퍼 읽기 및 쓰기는 이벤트 * 및 * 대기를 모두 사용하지 않는 한 순서가 잘못된 것처럼 보입니다. 아마도 읽기/쓰기가 동기식으로 지정되어 있어도 가능합니다. 작업 예제는 BOINC (boinc.berkeley.edu)의 atiopencl 예제를 참조하십시오. –
CL이 작동하는 방식이 아닙니다. 명령 대기열 생성에 대한 OpenCL 사양 섹션 5.1을 참조하십시오. 다른 동작이 보이는 경우 구현 오류입니다 (버그). –