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

OpenCL Architecture(5)

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

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

댓글