Name Strings

    cl_intel_device_partition_by_names

Contributors

    Yariv Aridor (Intel)
    
    Evgeny Fiksman (Intel)
    
    Doron Singer(Intel)

Contact

    Yariv.Aridor(at)Intel.Com

IP Status

    N/A

Version

    Version 2, August 15, 2013
   
Number

    OpenCL Extension #20

Status

    Complete. 

Extension Type

    OpenCL device extension

Dependencies

    OpenCL 1.2 is required

Overview

    This extension allows the user to create non-overlapping sub-devices containing specific
    compute units. CL_DEVICE_PARTITION_BY_NAMES_INTEL is a
    cl_device_partition_property that is followed by a list of compute unit
    names, teminated by CL_PARTITION_BY_NAMES_LIST_END_INTEL Compute unit
    names are integers that count up from zero to the number of compute
    units minus one. Only one sub-device may be created at a time with this
    selector. An individual compute unit name may not appear more than once
    in the sub-device description. A sub-device created with
    CL_DEVICE_PARTITION_BY_NAMES_INTEL cannot be further sub-divided. A
    sub-device created with another partitioning mode cannot be further
    sub-divided by CL_DEVICE_PARTITION_BY_NAMES_INTEL.
    Sub-devices created by different calls to clCreatesubDevices using CL_DEVICE_PARTITION_BY_NAMES_INTEL
    cannot overlap. An attempt to create a command queue on a sub-device which overlaps with a sub-device 
    for which a command queue already exists will fail with CL_OUT_OF_RESOURCES.

    Example: To create a three compute unit sub-device using compute units,
    { 0, 1, 3 }, pass:
    
    { CL_DEVICE_PARTITION_BY NAMES_INTEL, 0, 1, 3, CL_PARTITION_BY_NAMES_LIST_END_INTEL, CL_PROPERTIES_LIST_END }

    The meaning of these numbers are, in order:
    0 the name of the first compute unit in the sub-device
    1 the name of the second compute unit in the sub-device
    3 the name of the third compute unit in the sub-device
    CL_PROPERTIES_LIST_END list terminator for the list of properties

Header File

    cl_ext.h

New Procedures and Functions

    None

New Tokens

    CL_DEVICE_PARTITION_BY_NAMES_INTEL          0x4052
    CL_PARTITION_BY_NAMES_LIST_END_INTEL        -1

Additions to Chapter NNN / Appendix AAA of the OpenCL <version> Specification

    Add CL_DEVICE_PARTITION_BY_NAMES_INTEL to table 4.4 in chapter 4.3
    (Partitioning a device), with the explanation in the overview.

Interactions with other extensions

    None

Issues

    N/A

Sample Code

    cl_device_id                     subdevice_id;
    cl_uint                          num_entries  = 1;
    cl_uint                          num_devices  = 1;
    cl_device_partition_property properties[] = {CL_DEVICE_PARTITION_BY_NAMES_INTEL, 0, CL_PARTITION_BY_NAMES_LIST_END_INTEL, 0};

    err = clCreateSubDevices(device, properties, num_entries, &subdevice_id, &num_devices);

Conformance Tests

    N/A

Revision History

    Revision 1, March 25, 2012. Yariv Aridor.  First revision.
    Revision 2, August 15, 2013. Doron Singer. Expand on the overlap restriction. 
