Skip to content

OpenCL:WorkItem

Opencl execution model

Opencl-execution-model.JPG

SIMT
SIMT 는 SINGLE INSTRUCTION MULTIPLE THREAD의 약자이며 이는 어떻게 host에서 명령어가 실행되는지 보여줍니다. 이름에서 알 수 있듯이, 같은 코드가 다른 스레드(thread)에서 병렬적으로 실행 되고, 각각의 thread는 각기 다른 데이터를 가지고 코드를 실행합니다.
Work-item
work-items은 CUDA threads와 같은 의미인데, 가장 작은 단위의 실행 객체(entity)입니다. 매시간 커널이 실행(launched)되면, 많은 work-items(프로그래머에 의해 수가 정해집니다)이 실행(launched)되고, 각각은 같은 코드를 실행합니다. 각각의 work-items는 커널에서 접근가능한 ID를 가지고 이를 통해 work-item들이 어떤 데이터를 처리하는지 구별할 수 있습니다.
Work-group
work-groups는 work-item들끼리 서로 통신하고, 협력(coorperation)하기 위해 존재합니다. 그것들은 work-items들이 어떻게 구성되어 있는지 보여줍니다(N차원의 격자모양인데, 1,2,3 차원이 될 수 있습니다). Work-groups는 CUDA thread blocks와 같은 말입니다. work-items처럼 work-groups 또한 kernel에서 참조 할 수 있는 고유의 ID를 가집니다.
ND-Range
ND-Range는 다음 레벨의 구성단위입니다. work-groups들이 어떻게 구성되는지 정의합니다(똑같이, N차원의 격자모양의 work-groups로써, 1,2 또는 3차원을 가집니다);

Work-Item Built-In Functions

  • get_work_dim(): Number of dimensions in use
  • get_global_size(): Number of global work items
  • get_global_id(): Global work item ID value
  • get_local_size(): Number of local work items
  • get_local_id(): Local work item ID
  • get_num_groups(): Number of work groups
  • get_group_id(): Work group ID

Kernels Indexing

CUDA

OpenCL

gridDim

get_num_groups()

blockDim

get_local_size()

blockIdx

get_group_id()

threadIdx

get_local_id()

blockIdx * blockDim + threadIdx

get_global_id()

gridDim * blockDim

get_global_size()

See also

Favorite site