OpenCL Architecture
프로그래밍 모델
데이터병렬 프로그래밍 모델
- OpenCL의 기본 프로그래밍 모델
- 메모리 오브젝트의 데이터에 적용되는 명령어의 순서를 정의
- SPMD
- 인덱스 공간은 워크 아이템과 데이터의 매핑을 정의
- 워크 아이템이 어떤 데이터를 이용해 계산을 수행하는지 정의
- clEnqueueNDRangeKernel
태스크 병렬 프로그래밍 모델
- 인덱스 공간에 관계없이 하나의 커널 인스턴스만 실행
- 하나의 워크 아이템만 갖는 워크 그룹 한개를 디바이스에서 실행하는 것과 같은 의미
- 사용할 수 있는 병렬성
- 커널에서 벡터 타입 사용
- 여러 태스크를 동시에 실행
- 인덱스 공간에 관계없이 하나의 커널 인스턴스만 실행
동기화
워크 아이템간의 동기화
- 하나의 워크 그룹 내에서만 가능
- 워크 그룹 배리어 이용
워크 그룹 간의 동기화
- 지원하지 않음
- 커널의 시작과 종료로는 가능
커맨드 간의 동기화
- 하나의 컨텍스트 내에서 커맨드 큐 내의 커맨드 사이에서 가능
- 하나 이상의 커맨드 큐
- 커맨드 큐 배리어 또는 이벤트 동기화 이용
- 하나의 컨텍스트 내에서 커맨드 큐 내의 커맨드 사이에서 가능
워크 그룹 배리어
- 커널에서 barrier()이용
- barrier는 빌트인 함수
- 워크 그룹 내의 모든 워크 아이템은 배리어를 동시에 통과
- 모든 워크 아이템이 배리어까지 코드를 실행 후 그 다음 코드 실행
- 배리어 이후 워크 아이템 간의 메모리 일관성 보장
- 모든 워크 아이템이 barrer()를 실행하거나 전체가 실행하지 않아야 함
- 일부의 워크 아이템만 barrier()를 실행하는 것은 잘못된 커널
커맨드 큐 배리어
- 하나의 커맨드 큐에서 커맨드 사이의 동기화 방법
- 호스트가 커맨드 큐에 커맨드 큐 배리어를 enqueue
- 배리어 이전의 모든 커맨드의 실행이 완료됨을 보장
- 배리어 이전의 메모리 오브젝트의 갱신이 완료됨을 보장
- 배리어 이후 커맨드는 최신의 메모리 상태를 볼 수 있음
이벤트 동기화
- 하나 이상의 커맨드 큐에서 커맨드 간의 동기화 방법
- 커맨드를 enqueue하는 모든 API함수는 이벤트를 리턴
- 커맨드와 메모리 오브젝트 등을 식별
- 이벤트와 관련된 커맨드가 종료되기를 기다림
- 메모리 오브젝트의 갱신이 완료됨을 보장
반응형
'멀티코어 프로그래밍 > OpenCL' 카테고리의 다른 글
OpenCL 프로그램 (7) | 2022.04.18 |
---|---|
OpenCL Architecture(6) (18) | 2022.04.15 |
OpenCL Architecture(4) (42) | 2022.04.13 |
OpenCL Architecture(3) (41) | 2022.04.12 |
OpenCL Architecture(2) (22) | 2022.04.11 |
댓글