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

OpenCL Architecture(3)

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

OpenCL Architecture

실행 모델(Execution Model)

  • 호스트 프로그램이 커널 실행을 위해 "N-차원의 인덱스 공간"을 지정
    • 인덱스 공간은 같은 크기의 하나 이상의 그룹으로 분할됨
      • 그룹은 디바이스의 CU에서 실행됨
    • 커널은 인덱스 공간의 각 지점에서 실행됨
      • 각 지점은 하나 이상의 PE에서 실행됨

커널 인덱스 공간(Kernel Index Space)

  • NDRange

  • N 차원의 인덱스 공간(N : 1,2,3,)

  • 전체 워크 아이템(work-item)의 수를 지정

    • N 차원 튜플로 지정
    • 워크 아이템은 커널 인스턴스
    • 워크 아이템은 CUDA에서 스레드로 불림
  • 각 워크 아이템은 인덱스 공간의 각 지점에서 실행

    • 모든 워크 아이템은 병렬로 실행(모두 동시에 실행)

워크 그룹(Work-group)

  • 워크 아이템의 집합
    • 인덱스 공간을 분할하는 그룹
  • CU에서 실행됨
    • CPU의 경우
      • 하나의 코어가 각 워크 아이템을 루프 형태로 실행
    • GPU의 경우
      • 하나의 SM이 여러 워크 그룹을 문맥 교환하며 실행
  • 모양 및 크기
    • 모든 워크 그룹은 동일해야 함
    • 성능에 큰 영향을 미침
      • 알고리즘에 최적의 워크 그룹 차원과 크기를 찾는 것이 중요
    • 선택 방법
      • 프로그래머가 직접 코드에 지정
        • 디바이스의 아키텍처와 커널 코드의 특성 고려
      • OpenCL 런타임이 자동으로 선택
        • 구현에 따라 다름

워크 그룹과 워크 아이템 식별

  • 인덱스 공간 : (Gx, Gy)
  • 워크 그룹
    • 크기 : (Sx, Sy)
    • 워크 그룹 ID : (wx, wy)
    • 워크 그룹 개수
      • (Wx, Wy) = (Gx/Sx, Gy/Sy)
  • 워크 아이템
    • 글로벌 ID : (gx, gy)
      • 인덱스 공간 내의 전역 ID
    • 글로벌 ID 오프셋 : (Fx, Fy)
    • 로컬 ID : (sx, sy)
      • 워크 그룹 내에서의 ID
    • (gx, gy) = (wx * Sx + sx + Fx, wy * Sy + sy + Fy)

커널의 종류

  • OpenCL 커널
    • OpenCL C로 작성하고 OpenCL 컴파일러로 컴파일한 것
    • OpenCL 표준에서 필수
  • 네이티브 커널(Native kernel)
    • 어플리케이션 코드나 라이브러리의 함수
    • 호스트에서 함수 포인터를 이용해 접근
    • OpenCl 표준에서 옵션

커널 실행

  • 커널 코드가 커널 인텍스 공간의 모든 지점에서 실행됨
    • SPMD
  • 인덱스 공간
    • 데이터가 워크 아이템에 어떻게 매핑 되는지 정의하는 역할

컨텍스트(Context)

  • OpenCL 컨텍스트
    • 커널이 실행되는 환경
    • 동기화와 메모리 관리가 정의되는 도메인
    • 호스트 프로그램이 API clCreateContext()를 이용하여 생성
  • 포함하는 리소스
    • 디바이스
      • 호스트가 사용할 OpenCL 디바이스 목록
    • 커널
      • OpenCL 디바이스에서 실행할 OpenCL 함수들
    • 프로그램 오브젝트
      • 프로그램 소스 및 실행 오브젝트
    • 메모리 오브젝트
      • 호스트와 OpenCL 디바이스에서 접근 가능한 메모리 오브젝트 집합
      • 커널은 계산 과정에서 메모리 오브젝트 사용

커맨트 큐(Command Queue)

  • 호스트가 디바이스별로 생성

    • 하나의 디바이스에서 여러 개의 커맨드 큐 연결 가능
  • 호스트가 디바이스에서 실행될 커맨드를 enqueue

  • 커맨드의 종류

    • 커널 실행 커맨드
    • 메모리 커맨드
      • 데이터 이동, 호스트 메모리에 메모리 오브젝트의 map/unmap
    • 동기화 커맨드
  • 커맨드 실행 모드

    • In-order Execution
      • 삽입 순서대로
      • 기본 실행 모드
    • Out-of-order Execution
      • 커맨드 큐 생성시 지정 가능
반응형

'멀티코어 프로그래밍 > OpenCL' 카테고리의 다른 글

OpenCL Architecture(5)  (19) 2022.04.14
OpenCL Architecture(4)  (42) 2022.04.13
OpenCL Architecture(2)  (22) 2022.04.11
OpenCL Architecture(1)  (11) 2022.04.10
OpenCL 프로그래밍(3)  (2) 2015.08.06

댓글