본문 바로가기
멀티코어 프로그래밍/OpenCL

OpenCL 메모리 오브젝트

by 기리의 개발로그 2022. 4. 25.

OpenCL 메모리 오브젝트

메모리 모델(Memory Model)

  • 글로벌 메모리(global memory)

    • 모든 워크 그룹의 모든 워크 아이템이 접근 가능한 메모리
    • 워크 아이템은 메모리의 임의의 위치에 읽기/쓰기 가능
    • 글로벌 메모리 캐싱
      • 디바이스의 캐시 메모리 유무에 따라
  • 컨스탄트 메모리(constant memory)

    • 커널의 실행동안 변하지 않는 값(상수)으로 남아 있는 글로벌 메모리 영역(읽기만 가능)
    • 호스트가 할당하고 초기화
  • 로컬 메모리(local memory)

    • 워크 그룹별로 각각 존재하는 메모리
    • 한 워크 그룹 내의 워크 아이템들만 접근 가능
      • 워크 그룹 내의 워크 아이템들간 공유를 위해 사용
  • 프라이빗 메모리(private memory)

    • 워크 아이템별로 갖는 메모리
    • 한 워크 아이템의 프라이빗 메모리는 다른 워크 아이템이 접근할 수 없음

메모리 오브젝트

  • 버퍼 오브젝트

    • 일차원 데이터
      • 스칼라, 벡터, 사용자 정의 타입
    • 메모리에 순차적으로 데이터를 저장
    • 커널에서 포인터로 접근 가능
    • 서브 버퍼
  • 이미지 오브젝트

    • 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\_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

댓글