Name

    ARM_core_id

Name Strings

    cl_arm_core_id

Contributors

    Robert Elliott
    Hui Chen

Contacts

    Robert Elliott, ARM (robert.elliott 'at' ARM.com)

Status

    Shipping.

Version

    Revision: #1, April 2nd, 2013

Number

    OpenCL Extension #26

Dependencies

    Requires OpenCL version 1.0 or later.

Overview

    This extension provides a built-in function which returns the physical core
    id (OpenCL Compute Unit) that a work-group is running on. This value is
    uniform for a work-group.

    This value can be used for a core-specific cache or atomic pool where the
    storage is required to be in global memory and persistent (but not ordered)
    between work-groups. This does not provide any additional ordering on top
    of the existing guarantees between workgroups, nor does it provide any
    guarantee of concurrent execution.

    The extension string cl_arm_core_id is returned for devices and platforms
    which support this extension.

Glossary

    No new terminology is introduced by this extension.

New Types

    None

New Procedures and Functions

    Built-in Function

      uint arm_get_core_id( void )

    Description

      Returns a uint that represents the physical core id, in the range 0 to
      CL_DEVICE_MAX_COMPUTE_UNITS-1

    Example

      // Host code, size pool based on required_instance_size * number_of_compute_units
      size_t required_instance_size = 1024; 
      cl_mem core_pool = clCreateBuffer( ctx, CL_MEM_READ_WRITE, required_instance_size * CL_DEVICE_MAX_COMPUTE_UNITS, NULL, NULL );

      // Device/Kernel code, select memory instance
      kernel void test( global char *per_core_pool, global char *input, uint required_instance_size  )
      {
        global char *core_pool_instance = per_core_pool[ arm_get_core_id() * required_instance_size ];
        ...
      }

New Tokens

    OpenCL kernel code Now has access to:

      #pragma OPENCL EXTENSION cl_arm_core_id : enable
      The define cl_arm_core_id is also present
