C Specification

To create a host or device command-queue on a specific device, call the function

cl_command_queue clCreateCommandQueueWithProperties(
    cl_context context,
    cl_device_id device,
    const cl_queue_properties* properties,
    cl_int* errcode_ret);


  • context must be a valid OpenCL context.

  • device must be a device or sub-device associated with context. It can either be in the list of devices and sub-devices specified when context is created using clCreateContext or be a root device with the same device type as specified when context is created using clCreateContextFromType.

  • properties specifies a list of properties for the command-queue and their corresponding values. Each property name is immediately followed by the corresponding desired value. The list is terminated with 0. The list of supported properties is described in the table below. If a supported property and its value is not specified in properties, its default value will be used. properties can be NULL in which case the default values for supported command-queue properties will be used.


Table 1. List of supported queue creation properties by https://www.khronos.org/registry/OpenCL/specs/2.2/html/OpenCL_API.html#clCreateCommandQueueWithProperties
Queue Properties Property Value Description



This is a bitfield and can be set to a combination of the following values:

CL_​QUEUE_​OUT_​OF_​ORDER_​EXEC_​MODE_​ENABLE - Determines whether the commands queued in the command-queue are executed in-order or out-of-order. If set, the commands in the command-queue are executed out-of-order. Otherwise, commands are executed in-order.

CL_​QUEUE_​PROFILING_​ENABLE - Enable or disable profiling of commands in the command-queue. If set, the profiling of commands is enabled. Otherwise profiling of commands is disabled.

CL_​QUEUE_​ON_​DEVICE - Indicates that this is a device queue. If CL_​QUEUE_​ON_​DEVICE is set, CL_​QUEUE_​OUT_​OF_​ORDER_​EXEC_​MODE_​ENABLE1 must also be set. Missing before version 2.0.

CL_​QUEUE_​ON_​DEVICE_​DEFAULT2 - indicates that this is the default device queue. This can only be used with CL_​QUEUE_​ON_​DEVICE. Missing before version 2.0.

If CL_​QUEUE_​PROPERTIES is not specified an in-order host command queue is created for the specified device


Missing before version 2.0.


Specifies the size of the device queue in bytes.

This can only be specified if CL_​QUEUE_​ON_​DEVICE is set in CL_​QUEUE_​PROPERTIES. This must be a value ≤ CL_​DEVICE_​QUEUE_​ON_​DEVICE_​MAX_​SIZE.

For best performance, this should be ≤ CL_​DEVICE_​QUEUE_​ON_​DEVICE_​PREFERRED_​SIZE.

If CL_​QUEUE_​SIZE is not specified, the device queue is created with CL_​DEVICE_​QUEUE_​ON_​DEVICE_​PREFERRED_​SIZE as the size of the queue.


Only out-of-order device queues are supported.


The application must create the default device queue if any kernels containing calls to get_default_queue are enqueued. There can only be one default device queue for each device within a context. clCreateCommandQueueWithProperties with CL_​QUEUE_​PROPERTIES set to CL_​QUEUE_​ON_​DEVICE or CL_​QUEUE_​ON_​DEVICE_​DEFAULT will return the default device queue that has already been created and increment its retain count by 1.

  • errcode_ret will return an appropriate error code. If errcode_ret is NULL, no error code is returned.

clCreateCommandQueueWithProperties returns a valid non-zero command-queue and errcode_ret is set to CL_​SUCCESS if the command-queue is created successfully. Otherwise, it returns a NULL value with one of the following error values returned in errcode_ret:

  • CL_​INVALID_​CONTEXT if context is not a valid context.

  • CL_​INVALID_​DEVICE if device is not a valid device or is not associated with context.

  • CL_​INVALID_​VALUE if values specified in properties are not valid.

  • CL_​INVALID_​QUEUE_​PROPERTIES if values specified in properties are valid but are not supported by the device.

  • CL_​OUT_​OF_​RESOURCES if there is a failure to allocate resources required by the OpenCL implementation on the device.

  • CL_​OUT_​OF_​HOST_​MEMORY if there is a failure to allocate resources required by the OpenCL implementation on the host.

See Also

Document Notes

For more information, see the OpenCL Specification

This page is extracted from the OpenCL Specification. Fixes and changes should be made to the Specification, not directly.

Copyright (c) 2014-2020 Khronos Group. This work is licensed under a Creative Commons Attribution 4.0 International License.