OpenCL Architecture
메모리 모델(Memory Model)
4개의 메모리 영역
- 글로벌 메모리
- 컨스탄트 메모리
- 로컬 메모리
- 프라이빗 메모리
글로벌 메모리(global memory)
- 모든 워크 그룹의 모든 워크 아이템이 접근 가능한 메모리
- 워크 아이템은 메모리의 임의의 위치에 읽기/쓰기 가능
- 글로벌 메모리 캐싱
- 디바이스의 캐시 메모리 유무에 따라
컨스탄트 메모리(constant memory)
- 커널 실행동안 변하지 않는 값(상수)으로 남아있는 글로벌 메모리 영역
- 호스트가 할당하고 초기화
로컬 메모리(local memory)
- 워크 그룹별로 각각 존재하는 메모리
- 한 워크 그룹 내의 워크 아이템들만 접근 가능
- 워크 그룹 내의 워크 아이템들간 공유를 위해 사용
프라이빗 메모리(private memory)
- 워크 아이템별로 갖는 메모리
- 한 워크 아이템의 프라이빗 메모리는 다른 워크 아이템이 접근할 수 없음
메모리 오브젝트
- 버퍼 오브젝트
- 일차원 데이터
- 스칼라 타입, 벡터 타입, 사용자 정의 타입
- 메모리에 순차적으로 데이터 저장
- 커널에서 포인터로 접근 가능
- 서브 버퍼
- 버퍼 오브젝트의 일부 영역으로부터 생성
- 일차원 데이터
- 이미지 오브젝트
- 2차원또는 3차원의 데이터
- 텍스처, 프레임 버퍼, 이미지
- 포인터로 직접 접근할 수 없음
- 2차원또는 3차원의 데이터
메모리 컨시스턴시
- 릴렉스드 메모리 컨시스턴시 모델 사용
- 메모리의 내용이 서로 다른 워크 아이템에게 항상 같게 보일 필요는 없음
- 동기화 시 같게 보임
- 워크 아이템 하나가 사용하는 메모리
- 로컬 메모리
- 워크 그룹 배리어에서 워크 그룹 내의 모든 워크 아이템간에 컨시스턴시 보장
- 글로벌 메모리
- 워크 그룹 배리어에서 워크 그룹 내의 모든 워크 아이템간에 컨시스턴시 보장
- 서로 다른 워크 그룹 사이에는 메모리 컨시스턴시를 보장하지 않음
- 커맨드 간 공유되는 메모리
- 동기화 포인트에서 메모리 컨시스턴시 보장
- clFinish()
- 워크 그룹 배리어
- 이벤트 동기화
- 동기화 포인트에서 메모리 컨시스턴시 보장
반응형
'멀티코어 프로그래밍 > OpenCL' 카테고리의 다른 글
OpenCL Architecture(6) (18) | 2022.04.15 |
---|---|
OpenCL Architecture(5) (19) | 2022.04.14 |
OpenCL Architecture(3) (41) | 2022.04.12 |
OpenCL Architecture(2) (22) | 2022.04.11 |
OpenCL Architecture(1) (11) | 2022.04.10 |
댓글