OpenCL 메모리 오브젝트
메모리 모델(Memory Model)
글로벌 메모리(global memory)
- 모든 워크 그룹의 모든 워크 아이템이 접근 가능한 메모리
- 워크 아이템은 메모리의 임의의 위치에 읽기/쓰기 가능
- 글로벌 메모리 캐싱
- 디바이스의 캐시 메모리 유무에 따라
컨스탄트 메모리(constant memory)
- 커널의 실행동안 변하지 않는 값(상수)으로 남아 있는 글로벌 메모리 영역(읽기만 가능)
- 호스트가 할당하고 초기화
로컬 메모리(local memory)
- 워크 그룹별로 각각 존재하는 메모리
- 한 워크 그룹 내의 워크 아이템들만 접근 가능
- 워크 그룹 내의 워크 아이템들간 공유를 위해 사용
프라이빗 메모리(private memory)
- 워크 아이템별로 갖는 메모리
- 한 워크 아이템의 프라이빗 메모리는 다른 워크 아이템이 접근할 수 없음
메모리 오브젝트
버퍼 오브젝트
- 일차원 데이터
- 스칼라, 벡터, 사용자 정의 타입
- 메모리에 순차적으로 데이터를 저장
- 커널에서 포인터로 접근 가능
- 서브 버퍼
- 일차원 데이터
이미지 오브젝트
- 2차원 또는 3차원의 데이터
- 텍스처, 프레임 버퍼, 이미지
- 포인터로 직접 접근 불가능
- 2차원 또는 3차원의 데이터
OpenCL 메모리 오브젝트(버퍼 오브젝트, 버퍼)
OpenCL 플랫폼 위의 추상적인 메모리 영역
호스트 프로세서가 접근 가능한 호스트 메모리와 계산 디바이스가 접근 가능한 디바이스 메모리 사이의 매개체 역할
버퍼 오브젝트
cl\_mem clCreateBuffer(cl\_context context, cl\_mem\_flags flags, size\_t size, void \*host\_ptr, cl\_int \*errcode\_ret)
버퍼 오브젝트를 생성
size
- 버퍼 오브젝트의 크기
host_ptr
- 호스트 프로세서에 존재하는 메모리 주소
cl\_mem clCreateSubBuffer(cl\_mem buffer, cl\_mem\_flags flags, cl\_buffer\_create\_type buffer\_create\_type, const void \*buffer\_create\_info, cl\_int \*errcode\_ret) |
buffer로부터 서브 버퍼 오브젝트를 생성
flags
- clCreateBuffer()에서의 flags와 동일
buffer_create_type
- 버퍼 오브젝트의 타입으로 현재 다음의 한가지만 지원
- CL_BUFFER_CREATE_TYPE_REGION
- 지정한 영역을 버퍼 오브젝트로 생성
- CL_BUFFER_CREATE_TYPE_REGION
- 버퍼 오브젝트의 타입으로 현재 다음의 한가지만 지원
cl\_int clGetMemObjectInfo(cl\_mem memobj, cl\_mem\_info param\_name, size\_t param\_value\_size, void \*param\_value, size\_t \*param\_value\_size\_ret)
- 메모리 오브젝트(버퍼 또는 이미지)의 param_name 정보를 얻어 옴
- memobj
- 정보를 얻어 올 메모리 오브젝트
- param_name
- 얻어 올 정보 이름
- param_value_size
- param_value가 가리키는 메모리의 크기(byte)
- param_value
- 얻어 올 정보가 저장될 메모리의 포인터
- param_value_size_ret
- 정보의 실제 크기
반응형
'멀티코어 프로그래밍 > OpenCL' 카테고리의 다른 글
OpenCL 메모리 오브젝트(2) (14) | 2022.04.26 |
---|---|
OpenCL 컨텍스트 (13) | 2022.04.22 |
OpenCL 디바이스 (9) | 2022.04.21 |
OpenCL 플랫폼 (10) | 2022.04.20 |
커널, 커맨드큐 (9) | 2022.04.19 |
댓글