<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "xhtml1-transitional.dtd">
<!-- saved from url=(0013)about:internet -->
<?xml-stylesheet type="text/xsl" href="mathml.xsl"?><html xmlns="http://www.w3.org/1999/xhtml" xmlns:pref="http://www.w3.org/2002/Math/preference" xmlns:xlink="http://www.w3.org/1999/xlink" pref:renderer="mathplayer-dl">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <style xmlns="" type="text/css">
    /* This style sets a margin around the entire page */
        html, body {
            margin: 10px;
        }

        p {
            font: normal 16px verdana, sans-serif;
            margin: 0;
            padding-bottom:12px;
        }

        h1 {
            font: bold 25px verdana, sans-serif;
            margin-top: 0;
            margin-bottom: 3px;
            padding-top: 0;
            padding-bottom: 0;
        }

        h2 {
            font: bold 19px verdana, sans-serif;
            margin-top: 28px;
            margin-bottom: 3px;
            padding-top: 0;
            padding-bottom: 0;
        }

        h3 {
            font: bold 19px verdana, sans-serif !important;
            margin-top: 28px;
            margin-bottom: 3px;
            padding-top: 0;
            padding-bottom: 0;
        }

        li {
            font: normal 16px verdana, sans-serif;
            margin-top: 0;
            margin-bottom: 18px;
            padding-top: 0;
            padding-bottom: 0;
        }

        .pdparam {
            font: italic 16px verdana, sans-serif;
        }

                .term {
                        font: italic 16px verdana, sans-serif;
                        font-weight: normal;
                }

                .type {
                        font: normal 16px verdana, sans-serif !important;
                }

                .parameter {
                        font-style: italic;
                        }

        a:link, a:visited {
            color: blue;
            text-decoration: none;
            font: normal 16px;
        }

        a:hover {
            background-color: #FFFF99;
            font: normal 16px;
        }

        div.funcsynopsis {
            text-align: left;
            background-color: #e6e6e6;
            font: normal 16px verdana, sans-serif;
                        padding-top: 10px;
                        padding-bottom: 10px;
        }

        div.funcsynopsis table {
            border-collapse: separate;
            font: normal 16px verdana, sans-serif;
        }

        div.funcsynopsis td {
            background-color: #e6e6e6;
            border: 0 solid #000;
            padding: 1px;
            font: normal 16px verdana, sans-serif;
        }

        div.refsect1 {
            font-family: verdana, sans-serif;
            font-size: 16px;
        }

        code.constant {
            font: normal 16px courier new, monospace !important;
        }

                span.errorname {
            font: normal 16px verdana, sans-serif !important;
        }

        code.function {
            font: bold 16px verdana, sans-serif !important;
        }

        b.fsfunc {
            font: bold 16px verdana, sans-serif !important;
        }

        code.varname {
            font: italic 16px verdana, sans-serif;
        }

        code.replaceable {
            font: italic 16px courier new, monospace;
        }

        code.funcdef {
            font: normal 16px verdana, sans-serif !important;
        }

        .citerefentry {
            font: normal 16px verdana, sans-serif !important;
        }

        .parameter {
            font-style: italic;
        }

        code.fsfunc {
            font: normal 16px verdana, sans-serif !important;
        }

        /* PARAMETER: This style controls spacing between the terms in Parameter section */
        dt {
            margin-top: 15px;
        }

        /* TABLES: These styles apply to all tables OTHER than the Synopsis and Example tables */
        div.refsect1 table {
            width: 100%;
                        margin-top: 10px;
            background-color: #FFF;
                        border-collapse: collapse;
                        border-color: #000;
            border-width: 1px;
                        font: normal 16px verdana, sans-serif;
        }

        div.refsect1 th {
                        border-collapse: collapse;
                        border-color: #000;
            border-width: 1px;
            font: bold 16px verdana, sans-serif;
        }

        div.refsect1 td {
            background-color: #FFF;
            padding: 5px;
            vertical-align: text-top;
                        border-collapse: collapse;
                        border-color: #000;
            border-width: 1px;
            font: normal 16px verdana, sans-serif;
        }

                  div.refsect1 p{
            font: normal 16px verdana, sans-serif;
            margin-top: 8px;
            margin-bottom: 8px;
            padding-top: 0;
            padding-bottom: 0;
        }


        /* EXAMPLE: These styles apply only to the Example section */
        div.refsect2 {
            font: normal 16px courier new, monospace !important;
        }

        div.refsect2 table {
            margin-top: 0;
            background-color: #e6e6e6;
            width: 100%;
            border: 0 solid #000;
            padding: 2px;
            font: normal 16px courier new, monospace !important;
        }

        div.refsect2 td {
            background-color: #e6e6e6;
            font: normal 16px courier new, monospace !important;
                        white-space:pre;
        }

        /* COPYRIGHT: This style formats the text of the copyright statement at the bottom of the page */
        div.refsect3 {
            font: normal 11px verdana, sans-serif;
            margin-top: 50px;
            margin-bottom: 20px;
            padding-top: 0;
            padding-bottom: 0;
        }

</style>
    <title>clGetDeviceInfo</title>
    <meta name="generator" content="DocBook XSL Stylesheets V1.78.1" />
    <meta name="keywords" content="clGetDeviceInfo" />
  </head>
  <body>
    <div class="refentry">
      <a id="id-1"></a>
      <div class="titlepage"></div>
      <div xmlns="" class="refnamediv">
        <a xmlns="http://www.w3.org/1999/xhtml" id="clGetDeviceInfo"></a>
        <h1>clGetDeviceInfo</h1>
        <p>Get information about an OpenCL device.</p>
      </div>
      <div class="refsynopsisdiv">
        <h2></h2>
        <div class="funcsynopsis">
          <table xmlns="" border="0" summary="Function synopsis" cellspacing="0" cellpadding="0">
            <tr valign="bottom">
              <td>
                <code xmlns="http://www.w3.org/1999/xhtml" class="funcdef">
                    <a class="link" href="scalarDataTypes.html" target="pagedisplay">cl_int</a>
                    <strong class="fsfunc">clGetDeviceInfo</strong>
                (</code>
                <td>
                    <a xmlns="http://www.w3.org/1999/xhtml" class="link" href="abstractDataTypes.html" target="pagedisplay">cl_device_id</a>
                     <var xmlns="http://www.w3.org/1999/xhtml" class="pdparam">device</var>
                , </td>
              </td>
            </tr>
            <tr valign="top">
              <td> </td>
              <td>
                    <a xmlns="http://www.w3.org/1999/xhtml" class="link" href="enums.html#cl_device_info" target="pagedisplay">cl_device_info</a>
                     <var xmlns="http://www.w3.org/1999/xhtml" class="pdparam">param_name</var>
                , </td>
            </tr>
            <tr valign="top">
              <td> </td>
              <td>
                    <a xmlns="http://www.w3.org/1999/xhtml" class="link" href="scalarDataTypes.html" target="pagedisplay">size_t</a>
                     <var xmlns="http://www.w3.org/1999/xhtml" class="pdparam">param_value_size</var>
                , </td>
            </tr>
            <tr valign="top">
              <td> </td>
              <td>
                    <a xmlns="http://www.w3.org/1999/xhtml" class="link" href="scalarDataTypes.html" target="pagedisplay">void</a>
                     <var xmlns="http://www.w3.org/1999/xhtml" class="pdparam">*param_value</var>
                , </td>
            </tr>
            <tr valign="top">
              <td> </td>
              <td>
                    <a xmlns="http://www.w3.org/1999/xhtml" class="link" href="scalarDataTypes.html" target="pagedisplay">size_t</a>
                     <var xmlns="http://www.w3.org/1999/xhtml" class="pdparam">*param_value_size_ret</var>
                <code>)</code></td>
            </tr>
          </table>
        </div>
      </div>
      <div class="refsect1">
        <a id="parameters"></a>
        <h2>Parameters</h2>
        <div class="variablelist">
          <dl class="variablelist">
            <dt>
              <span class="term">
                <code class="varname">device</code>
              </span>
            </dt>
            <dd>
              <p> 
                  A device returned by 
                  <a class="citerefentry" href="clGetDeviceIDs.html"><span class="citerefentry"><span class="refentrytitle">clGetDeviceIDs</span></span></a>.
                </p>
              <p>
                  May be a device returned by
                  <a class="citerefentry" href="clGetDeviceIDs.html"><span class="citerefentry"><span class="refentrytitle">clGetDeviceIDs</span></span></a>
                  or a sub-device created by
                  <a class="citerefentry" href="clCreateSubDevices.html"><span class="citerefentry"><span class="refentrytitle">clCreateSubDevices</span></span></a>.
                  If <code class="varname">device</code> is a sub-device, the specific information for
                  the sub-device will be returned. The information that can be queried using
                  <code class="function">clGetDeviceInfo</code> is specified in the table below (Table 4.3).
                </p>
            </dd>
            <dt>
              <span class="term">
                <code class="varname">param_value</code>
              </span>
            </dt>
            <dd>
              <p>
                  A pointer to memory location where appropriate values for a given
                  <code class="varname">param_name</code> as specified in the table below will be
                  returned. If <code class="varname">param_value</code> is NULL, it is ignored.
                </p>
            </dd>
            <dt>
              <span class="term">
                <code class="varname">param_value_size</code>
              </span>
            </dt>
            <dd>
              <p>
                  Specifies the size in bytes of memory pointed to by
                  <code class="varname">param_value</code>.  This size in bytes must be ≥ size of
                  return type specified in the table below.
                </p>
            </dd>
            <dt>
              <span class="term">
                <code class="varname">param_value_size_ret</code>
              </span>
            </dt>
            <dd>
              <p>
                  Returns the actual size in bytes of data being queried by
                  <code class="varname">param_value</code>. If <code class="varname">param_value_size_ret</code>
                  is NULL, it is ignored.
                </p>
            </dd>
            <dt>
              <span class="term">
                <code class="varname">param_name</code>
              </span>
            </dt>
            <dd>
              <p>
                  An enumeration constant that identifies the device information being queried. It
                  can be one of the values as specified in the table below.
                </p>
            </dd>
            <dt>
              <span class="term"></span>
            </dt>
            <dd>
              <p>
                Table 4.3:
            </p>
              <div class="informaltable">
                <table border="1">
                  <colgroup>
                    <col align="left" class="col1" />
                    <col align="left" class="col2" />
                  </colgroup>
                  <thead>
                    <tr>
                      <th align="left">cl_device_info</th>
                      <th align="left">Return Type</th>
                      <th align="left">Description</th>
                    </tr>
                  </thead>
                  <tbody>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_ADDRESS_BITS</code>
                      </td>
                      <td align="left">cl_uint</td>
                      <td align="left">
                       The default compute device address space 
                       size of the global address space specified 
                       as an unsigned integer value in bits.
                       Currently supported values are 32 or 64 bits.
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_AVAILABLE</code>
                      </td>
                      <td align="left">cl_bool</td>
                      <td align="left">
                      Is <code class="constant">CL_TRUE</code> if the device is available and
                      <code class="constant">CL_FALSE</code> otherwise. A device is 
                        considered to be available if the device can 
                        be expected to successfully execute 
                        commands enqueued to the device
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_BUILT_IN_KERNELS</code>
                      </td>
                      <td align="left">char[]</td>
                      <td align="left">
                      A semi-colon separated list of built-in kernels supported by the device.
                      An empty string is returned if no built-in kernels are supported by
                      the device.
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_COMPILER_AVAILABLE</code>
                      </td>
                      <td align="left">cl_bool</td>
                      <td align="left">
                      Is <code class="constant">CL_FALSE</code> if the implementation does
                      not have a compiler available to compile the program source.
                      Is <code class="constant">CL_TRUE</code> if the compiler is available. This can
                      be <code class="constant">CL_FALSE</code> for the embedded platform profile only.
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_DOUBLE_FP_CONFIG</code>
                      </td>
                      <td align="left">
                        <p>cl_device_-</p>
                        <p>fp_config</p>
                      </td>
                      <td align="left">
                      Describes double precision floating-point capability of the
                      OpenCL device.  This is a bit-field that describes one or more of the following values:
                      <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem" style="list-style-type: disc"><code class="constant">CL_FP_DENORM</code> - denorms are supported.</li><li class="listitem" style="list-style-type: disc"><code class="constant">CL_FP_INF_NAN</code> - INF and NaNs are supported.</li><li class="listitem" style="list-style-type: disc"><code class="constant">CL_FP_ROUND_TO_NEAREST</code> - round to nearest even rounding mode supported.</li><li class="listitem" style="list-style-type: disc"><code class="constant">CL_FP_ROUND_TO_ZERO</code> - round to zero rounding mode supported.</li><li class="listitem" style="list-style-type: disc"><code class="constant">CL_FP_ROUND_TO_INF</code> -
                            round to positive and negative infinity rounding modes supported.</li><li class="listitem" style="list-style-type: disc"><code class="constant">CL_FP_FMA</code> - IEEE754-2008 fused multiply-add is supported. </li><li class="listitem" style="list-style-type: disc"><code class="constant">CL_FP_SOFT_FLOAT</code> -  Basic floating-point operations (such as
                            addition, subtraction, multiplication) are implemented in software.</li></ul></div>

                      <p>
                        Double precision is an optional feature so the mandated minimum double
                        precision floating-point capability is 0.
                      </p>

                      <p>
                        If double precision is supported by the device, then the minimum double
                        precision floating-point capability must be: <code class="constant">CL_FP_FMA</code>
                        |  <code class="constant">CL_FP_ROUND_TO_NEAREST</code> |
                        <code class="constant">CL_FP_INF_NAN</code> | <code class="constant">CL_FP_DENORM</code>.
                      </p>
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_ENDIAN_LITTLE</code>
                      </td>
                      <td align="left">cl_bool</td>
                      <td align="left">
                      Is <code class="constant">CL_TRUE</code> if the OpenCL device is a little endian
                      device and <code class="constant">CL_FALSE</code> otherwise.
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_ERROR_
CORRECTION_SUPPORT</code>
                      </td>
                      <td align="left">cl_bool</td>
                      <td align="left">
                      Is <code class="constant">CL_TRUE</code> if the device implements error correction
                      for all accesses to compute device memory (global and constant).
                      Is <code class="constant">CL_FALSE</code> if the device does not implement such
                      error correction.
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_EXECUTION_CAPABILITIES</code>
                      </td>
                      <td align="left"> <p>cl_device_-</p><p>exec_capabilities</p> </td>
                      <td align="left">
                      Describes the execution capabilities of the device. This is
                      a bit-field that describes one or more of the following values:
                      <p><code class="constant">CL_EXEC_KERNEL</code> - The OpenCL device can execute
                      OpenCL kernels.</p> <p><code class="constant">CL_EXEC_NATIVE_KERNEL</code>
                      - The OpenCL device can execute native kernels.</p> <p>The mandated
                      minimum capability is <code class="constant">CL_EXEC_KERNEL</code>.</p>
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_EXTENSIONS</code>
                      </td>
                      <td align="left">char[]</td>
                      <td align="left">
                      Returns a space separated list of extension names (the extension names themselves do
                      not contain any spaces) supported by the device. The list of extension names returned
                      can be vendor supported extension names and one or more of  the following Khronos
                      approved extension names:

                      <p>
                        </p><div class="literallayout"><p><br />
<a class="citerefentry" href="cl_khr_int64_base_atomics.html"><span class="citerefentry"><span class="refentrytitle">cl_khr_int64_base_atomics</span></span></a><br />
<a class="citerefentry" href="cl_khr_int64_extended_atomics.html"><span class="citerefentry"><span class="refentrytitle">cl_khr_int64_extended_atomics</span></span></a><br />
<a class="citerefentry" href="cl_khr_fp16.html"><span class="citerefentry"><span class="refentrytitle">cl_khr_fp16</span></span></a><br />
<a class="citerefentry" href="cl_khr_gl_sharing.html"><span class="citerefentry"><span class="refentrytitle">cl_khr_gl_sharing</span></span></a><br />
<a class="citerefentry" href="cl_khr_gl_event.html"><span class="citerefentry"><span class="refentrytitle">cl_khr_gl_event</span></span></a><br />
<a class="citerefentry" href="cl_khr_d3d10_sharing.html"><span class="citerefentry"><span class="refentrytitle">cl_khr_d3d10_sharing</span></span></a><br />
<a class="citerefentry" href="cl_khr_dx9_media_sharing.html"><span class="citerefentry"><span class="refentrytitle">cl_khr_dx9_media_sharing</span></span></a><br />
<a class="citerefentry" href="cl_khr_d3d11_sharing.html"><span class="citerefentry"><span class="refentrytitle">cl_khr_d3d11_sharing</span></span></a><br />
<a class="citerefentry" href="cl_khr_gl_depth_images.html"><span class="citerefentry"><span class="refentrytitle">cl_khr_gl_depth_images</span></span></a><br />
<a class="citerefentry" href="cl_khr_gl_msaa_sharing.html"><span class="citerefentry"><span class="refentrytitle">cl_khr_gl_msaa_sharing</span></span></a><br />
<a class="citerefentry" href="cl_khr_initialize_memory.html"><span class="citerefentry"><span class="refentrytitle">cl_khr_initialize_memory</span></span></a><br />
cl_khr_context_abort<br />
<a class="citerefentry" href="cl_khr_spir.html"><span class="citerefentry"><span class="refentrytitle">cl_khr_spir</span></span></a><br />
<a class="citerefentry" href="cl_khr_srgb_image_writes.html"><span class="citerefentry"><span class="refentrytitle">cl_khr_srgb_image_writes</span></span></a><br />
                        </p></div><p>
                      </p>

                      <p>
                          The following approved Khronos extension names 
                          must be returned by all device that support OpenCL C 2.0:</p>
                      <p>
                        </p><div class="literallayout"><p><br />
cl_khr_byte_addressable_store<br />
<a class="citerefentry" href="cl_khr_fp64.html"><span class="citerefentry"><span class="refentrytitle">cl_khr_fp64</span></span></a> (for backward compatibility if double precision is supported)<br />
<a class="citerefentry" href="cl_khr_3d_image_writes.html"><span class="citerefentry"><span class="refentrytitle">cl_khr_3d_image_writes</span></span></a><br />
cl_khr_image2d_from_buffer<br />
cl_khr_depth_images<br />
                        </p></div><p>
                      </p>

                      <p>
                       Please refer to the OpenCL 2.0 Extension Specification for a detailed description of these extensions.
                      </p>
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_GLOBAL_MEM_CACHE_SIZE</code>
                      </td>
                      <td align="left">cl_ulong</td>
                      <td align="left">Size of global memory cache in bytes.</td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_GLOBAL_MEM_CACHE_TYPE</code>
                      </td>
                      <td align="left"> <p>cl_device_mem-</p><p>_cache_type</p> </td>
                      <td align="left">
                      Type of global memory cache supported. Valid values are:
                      <code class="constant">CL_NONE</code>, <code class="constant">CL_READ_ONLY_CACHE</code>,
                      and <code class="constant">CL_READ_WRITE_CACHE</code>.
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_GLOBAL_
MEM_CACHELINE_SIZE</code>
                      </td>
                      <td align="left">cl_uint</td>
                      <td align="left">Size of global memory cache line in bytes.</td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_GLOBAL_MEM_SIZE</code>
                      </td>
                      <td align="left">cl_ulong</td>
                      <td align="left">Size of global device memory in bytes.</td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_GLOBAL_VARIABLE_
PREFERRED_TOTAL_SIZE</code>
                      </td>
                      <td align="left">size_t</td>
                      <td align="left">
                       Maximum preferred total size, in bytes, of 
                       all program variables in the global address 
                       space. This is a performance hint. An 
                       implementation may place such variables 
                       in storage with optimized device access. 
                       This query returns the capacity of such 
                       storage. The minimum value is 0.
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_IL_VERSION</code>
                      </td>
                      <td align="left">char []</td>
                      <td align="left">
                        The intermediate languages that can be
                        supported by 
                        <a class="citerefentry" href="clCreateProgramWithIL.html"><span class="citerefentry"><span class="refentrytitle">clCreateProgramWithIL</span></span></a>
                        for this device. Returns a space-separated
                        list of IL version strings of the form
                        &lt;IL_Prefix&gt;_&lt;Major_Version&gt;.&lt;Minor_Version&gt;. 
                        For OpenCL 2.1, "SPIR-V" is a
                        required IL prefix.
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_IMAGE2D_MAX_HEIGHT</code>
                      </td>
                      <td align="left">size_t</td>
                      <td align="left">
                      Max height of 2D image in pixels. The minimum value is 16384 if
                      <code class="constant">CL_DEVICE_IMAGE_SUPPORT</code> is <code class="constant">CL_TRUE</code>.
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_IMAGE2D_MAX_WIDTH</code>
                      </td>
                      <td align="left">size_t</td>
                      <td align="left">
                      Max width of 2D image or 1D image not created from a buffer object in pixels.
                      The minimum value is 16384 if <code class="constant">CL_DEVICE_IMAGE_SUPPORT</code>
                      is <code class="constant">CL_TRUE</code>.
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_IMAGE3D_MAX_DEPTH</code>
                      </td>
                      <td align="left">size_t</td>
                      <td align="left">
                      Max depth of 3D image in pixels. The minimum value is 2048 if
                      <code class="constant">CL_DEVICE_IMAGE_SUPPORT</code> is <code class="constant">CL_TRUE</code>.</td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_IMAGE3D_MAX_HEIGHT</code>
                      </td>
                      <td align="left">size_t</td>
                      <td align="left">
                      Max height of 3D image in pixels. The minimum value is 2048 if
                      <code class="constant">CL_DEVICE_IMAGE_SUPPORT</code> is <code class="constant">CL_TRUE</code>.
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_IMAGE3D_MAX_WIDTH</code>
                      </td>
                      <td align="left">size_t</td>
                      <td align="left">
                      Max width of 3D image in pixels. The minimum value is 2048 if
                      <code class="constant">CL_DEVICE_IMAGE_SUPPORT</code> is <code class="constant">CL_TRUE</code>.
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_IMAGE_BASE_
ADDRESS_ALIGNMENT</code>
                      </td>
                      <td align="left">cl_uint</td>
                      <td align="left">
                      This query should be used when a 2D
                        image is created from a buffer which was 
                        created using <code class="constant">CL_MEM_USE_HOST_PTR</code>. 
                        The value returned must be a power of 2.
                        This query specifies the minimum 
                        alignment in pixels of the <code class="varname">host_ptr</code>
                        specified to <a class="citerefentry" href="clCreateBuffer.html"><span class="citerefentry"><span class="refentrytitle">clCreateBuffer</span></span></a>.
                        If the device does not support images, this 
                        value must be 0.
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_IMAGE_MAX_ARRAY_SIZE</code>
                      </td>
                      <td align="left">size_t</td>
                      <td align="left">
                      Max number of images in a 1D or 2D image array.  The minimum value is 2048 if
                      <code class="constant">CL_DEVICE_IMAGE_SUPPORT</code> is <code class="constant">CL_TRUE</code>
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_IMAGE_MAX_BUFFER_SIZE</code>
                      </td>
                      <td align="left">size_t</td>
                      <td align="left">
                      Max number of pixels for a 1D image created from a buffer object.
                      The minimum value is 65536 if <code class="constant">CL_DEVICE_IMAGE_SUPPORT</code>
                      is <code class="constant">CL_TRUE</code>.
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_IMAGE_PITCH_ALIGNMENT</code>
                      </td>
                      <td align="left">cl_uint</td>
                      <td align="left">
                      The row pitch alignment size in pixels for 
                        2D images created from a buffer. The 
                        value returned must be a power of 2.
                        If the device does not support images, this 
                        value must be 0.
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_IMAGE_SUPPORT</code>
                      </td>
                      <td align="left">cl_bool</td>
                      <td align="left">
                      Is <code class="constant">CL_TRUE</code> if images are supported by the OpenCL
                      device and <code class="constant">CL_FALSE</code> otherwise.
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_LINKER_AVAILABLE</code>
                      </td>
                      <td align="left">cl_bool</td>
                      <td align="left">
                      Is <code class="constant">CL_FALSE</code> if the implementation does not
                      have a linker available.  Is <code class="constant">CL_TRUE</code> if the
                      linker is available. This can be <code class="constant">CL_FALSE</code> for the embedded
                      platform profile only. This must be <code class="constant">CL_TRUE</code> if
                      <code class="constant">CL_DEVICE_COMPILER_AVAILABLE</code> is <code class="constant">CL_TRUE</code>
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_LOCAL_MEM_SIZE</code>
                      </td>
                      <td align="left">cl_ulong</td>
                      <td align="left">
                      Size of local memory region in bytes. The minimum value is 32 KB for
                      devices that are not of type <code class="constant">CL_DEVICE_TYPE_CUSTOM</code>.
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_LOCAL_MEM_TYPE</code>
                      </td>
                      <td align="left"> <p>cl_device_-</p><p>local_mem_type</p></td>
                      <td align="left">
                      Type of local memory supported. This can be set to
                      <code class="constant">CL_LOCAL</code> implying dedicated local memory storage
                      such as SRAM, or <code class="constant">CL_GLOBAL</code>.  For custom devices,
                      <code class="constant">CL_NONE</code> can also be returned indicating no local
                      memory support.
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_MAX_CLOCK_FREQUENCY</code>
                      </td>
                      <td align="left">cl_uint</td>
                      <td align="left">Maximum configured clock frequency of the device in MHz.</td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_MAX_COMPUTE_UNITS</code>
                      </td>
                      <td align="left">cl_uint</td>
                      <td align="left">
                      The number of parallel compute units on the OpenCL device.  A work-group executes
                      on a single compute unit. The minimum value is 1.
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_MAX_CONSTANT_ARGS</code>
                      </td>
                      <td align="left">cl_uint</td>
                      <td align="left">
                      Max number of arguments declared with the <a class="citerefentry" href="constant.html"><span class="citerefentry"><span class="refentrytitle">__constant</span></span></a>
                      qualifier in a kernel. The minimum value is 8 for devices that are not
                      of type <code class="constant">CL_DEVICE_TYPE_CUSTOM</code>.
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_MAX_CONSTANT_
BUFFER_SIZE</code>
                      </td>
                      <td align="left">cl_ulong</td>
                      <td align="left">
                      Max size in bytes of a constant buffer allocation.  The
                      minimum value is 64 KB for devices that are not of type
                      <code class="constant">CL_DEVICE_TYPE_CUSTOM</code>.
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_MAX_GLOBAL_
VARIABLE_SIZE</code>
                      </td>
                      <td align="left">size_t</td>
                      <td align="left">
                      The maximum number of bytes of storage 
                        that may be allocated for any single 
                        variable in program scope or inside a 
                        function in OpenCL C declared in the 
                        global address space.
                        The minimum value is 64 KB.
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_MAX_MEM_ALLOC_SIZE</code>
                      </td>
                      <td align="left">cl_ulong</td>
                      <td align="left">
                      Max size of memory object allocation in bytes. The minimum value is 
                        max(min(1024*1024*1024, 1/4th of 
                        <code class="constant">CL_DEVICE_GLOBAL_MEM_SIZE</code>), 32*1024*1024) for devices
                      that are not of type <code class="constant">CL_DEVICE_TYPE_CUSTOM</code>.
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_MAX_NUM_SUB_GROUPS</code>
                      </td>
                      <td align="left">cl_uint</td>
                      <td align="left">
                        Maximum number of sub-groups in a
                        work-group that a device is capable of
                        executing on a single compute unit, for any
                        given kernel-instance running on the
                        device. The minimum value is 1. (Refer
                        also to 
                        <a class="citerefentry" href="clGetKernelSubGroupInfo.html"><span class="citerefentry"><span class="refentrytitle">clGetKernelSubGroupInfo</span></span></a>.)
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_MAX_ON_DEVICE_EVENTS</code>
                      </td>
                      <td align="left">cl_uint</td>
                      <td align="left">
                      The maximum number of events in use by 
                        a device queue. These refer to events 
                        returned by the <code class="function">enqueue_</code> built-in 
                        functions to a device queue or user events 
                        returned by the 
                        <a class="citerefentry" href="create_user_event.html"><span class="citerefentry"><span class="refentrytitle">create_user_event</span></span></a>
                        built-in function that have not been 
                        released.
                        The minimum value is 1024.
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_MAX_ON_DEVICE_QUEUES</code>
                      </td>
                      <td align="left">cl_uint</td>
                      <td align="left">
                      The maximum number of device queues 
                        that can be created per context.
                        The minimum value is 1.
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_MAX_PARAMETER_SIZE</code>
                      </td>
                      <td align="left">size_t</td>
                      <td align="left">
                      Max size in bytes of all arguments that can be passed to a
                      kernel. The minimum value is 1024 for devices that are not of type
                      <code class="constant">CL_DEVICE_TYPE_CUSTOM</code>.  For this minimum value,
                      only a maximum of 128 arguments can be passed to a kernel.
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_MAX_PIPE_ARGS</code>
                      </td>
                      <td align="left">cl_uint</td>
                      <td align="left">
                      The maximum number of pipe objects that 
                        can be passed as arguments to a kernel. 
                        The minimum value is 16.
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_MAX_READ_IMAGE_ARGS</code>
                      </td>
                      <td align="left">cl_uint</td>
                      <td align="left">
                      Max number of image objects arguments 
                        of a kernel declared with the <code class="code">read_only</code>
                        qualifier. The
                      minimum value is 128 if <code class="constant">CL_DEVICE_IMAGE_SUPPORT</code>
                      is <code class="constant">CL_TRUE</code>.
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_MAX_READ_
WRITE_IMAGE_ARGS</code>
                      </td>
                      <td align="left">cl_uint</td>
                      <td align="left">
                      Max number of image objects arguments 
                        of a kernel declared with the <code class="code">write_only</code> or <code class="code">read_write</code>
                        qualifier. The
                      minimum value is 64 if <code class="constant">CL_DEVICE_IMAGE_SUPPORT</code>
                      is <code class="constant">CL_TRUE</code>.
                        NOTE: <code class="constant">CL_DEVICE_MAX_WRITE_IMAGE_ARGS</code> 
                        is only there for backward compatibility. 
                        <code class="constant">CL_DEVICE_MAX_READ_WRITE_IMAGE_ARGS</code> 
                        should be used instead.
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_MAX_SAMPLERS</code>
                      </td>
                      <td align="left">cl_uint</td>
                      <td align="left">
                      Maximum number of samplers that can be used in a kernel.  The minimum
                      value is 16 if <code class="constant">CL_DEVICE_IMAGE_SUPPORT</code>
                      is <code class="constant">CL_TRUE</code>.  (Also see
                      <a class="citerefentry" href="sampler_t.html"><span class="citerefentry"><span class="refentrytitle">sampler_t</span></span></a>.)
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_MAX_WORK_GROUP_SIZE</code>
                      </td>
                      <td align="left">size_t</td>
                      <td align="left">
                      Maximum number of work-items in a
                      work-group that a device is capable of
                      executing on a single compute unit, for any
                      given kernel-instance running on the device.
                      (Refer also to 
                      <a class="citerefentry" href="clEnqueueNDRangeKernel.html"><span class="citerefentry"><span class="refentrytitle">clEnqueueNDRangeKernel</span></span></a>)
                      and <code class="constant">CL_KERNEL_WORK_GROUP_SIZE</code>).
                      The minimum value is 1.
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_MAX_WORK_ITEM_
DIMENSIONS</code>
                      </td>
                      <td align="left">cl_uint</td>
                      <td align="left">
                      Maximum dimensions that specify the global and local
                      work-item IDs used by the data parallel execution model. (Refer to
                      <a class="citerefentry" href="clEnqueueNDRangeKernel.html"><span class="citerefentry"><span class="refentrytitle">clEnqueueNDRangeKernel</span></span></a>).
                      The minimum value is 3 for devices that are not of type
                      <code class="constant">CL_DEVICE_TYPE_CUSTOM</code>.
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_MAX_WORK_ITEM_SIZES</code>
                      </td>
                      <td align="left">size_t[]</td>
                      <td align="left">
                      <p>
                        Maximum number of work-items that can be
                        specified in each dimension of the work-group to
                        <a class="citerefentry" href="clEnqueueNDRangeKernel.html"><span class="citerefentry"><span class="refentrytitle">clEnqueueNDRangeKernel</span></span></a>.
                      </p>

                      <p>
                        Returns <code class="varname">n</code> <span class="type">size_t</span> entries, where
                        <code class="varname">n</code> is the value returned by the query for
                        <code class="constant">CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS</code>.
                      </p>

                      <p>
                        The minimum value is (1, 1, 1) for devices that are not of type
                        <code class="constant">CL_DEVICE_TYPE_CUSTOM</code>.
                      </p>
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_MAX_WRITE_IMAGE_ARGS</code>
                      </td>
                      <td align="left">cl_uint</td>
                      <td align="left">
                        Max number of image objects arguments 
                        of a kernel declared with the 
                        <code class="code">write_only</code> qualifier. 
                        The minimum value is 64 if
                        <code class="constant">CL_DEVICE_IMAGE_SUPPORT</code> is <code class="constant">CL_TRUE</code>.
                        NOTE: <code class="constant">CL_DEVICE_MAX_WRITE_IMAGE_ARGS</code> 
                        is only there for backward compatibility. 
                        <code class="constant">CL_DEVICE_MAX_READ_WRITE_IMAGE_ARGS</code> 
                        should be used instead.
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_MEM_BASE_ADDR_ALIGN</code>
                      </td>
                      <td align="left">cl_uint</td>
                      <td align="left">
                      Alignment requirement (in bits) for sub-buffer offsets.
                      The minimum value is the size (in bits) of the largest OpenCL built-in
                      data type supported by the device (<span class="type">long16</span> in FULL profile,
                      <span class="type">long16</span> or <span class="type">int16</span> in EMBEDDED profile) for devices
                      that are not of type <code class="constant">CL_DEVICE_TYPE_CUSTOM</code>.
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_NAME</code>
                      </td>
                      <td align="left">char[]</td>
                      <td align="left">Device name string.</td>
                    </tr>
                    <tr>
                      <td align="left"><code class="constant">CL_DEVICE_NATIVE_
VECTOR_WIDTH_CHAR</code>
                      <p><code class="constant">CL_DEVICE_NATIVE_
VECTOR_WIDTH_SHORT</code></p>
                      <p><code class="constant">CL_DEVICE_NATIVE_
VECTOR_WIDTH_INT</code></p>
                      <p><code class="constant">CL_DEVICE_NATIVE_
VECTOR_WIDTH_LONG</code></p>
                      <p><code class="constant">CL_DEVICE_NATIVE_
VECTOR_WIDTH_FLOAT</code></p>
                      <p><code class="constant">CL_DEVICE_NATIVE_
VECTOR_WIDTH_DOUBLE</code></p>
                      <p><code class="constant">CL_DEVICE_NATIVE_
VECTOR_WIDTH_HALF</code></p></td>
                      <td align="left">cl_uint</td>
                      <td align="left">
                      <p>
                        Returns the native ISA vector width. The vector width is defined as
                        the number of scalar elements that can be stored in the vector.
                      </p>

                      <p>
                        If double precision is not supported,
                        <code class="constant">CL_DEVICE_NATIVE_VECTOR_WIDTH_DOUBLE</code> must return 0.
                      </p>

                      <p>
                        If the
                        <a class="citerefentry" href="cl_khr_fp16.html"><span class="citerefentry"><span class="refentrytitle">cl_khr_fp16</span></span></a>
                        extension is not supported,
                        <code class="constant">CL_DEVICE_NATIVE_VECTOR_WIDTH_HALF</code> must return 0.
                      </p>
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_OPENCL_C_VERSION</code>
                      </td>
                      <td align="left">char[]</td>
                      <td align="left">
                      <p>
                        OpenCL C version string. Returns the highest OpenCL C version
                        supported by the compiler for this device that is not of type
                        <code class="constant">CL_DEVICE_TYPE_CUSTOM</code>. This version string has
                        the following format:
                      </p>

                      <p>
                        <code class="varname">
                        OpenCL&lt;space&gt;C&lt;space&gt;&lt;major_version.minor_version&gt;&lt;space&gt;&lt;vendor-specific
                        information&gt; </code>
                      </p>

                      <p>
                        The <code class="varname">major_version.minor_version</code> value returned must
                        be 2.0 if <code class="constant">CL_DEVICE_VERSION</code> is OpenCL 2.0.
                      </p>

                      <p>
                        The <code class="varname">major_version.minor_version</code> value returned must
                        be 1.2 if <code class="constant">CL_DEVICE_VERSION</code> is OpenCL 1.2.
                      </p>

                      <p>
                        The <code class="varname">major_version.minor_version</code> value returned must
                        be 1.1 if <code class="constant">CL_DEVICE_VERSION</code> is OpenCL 1.1.
                      </p>

                      <p>
                        The <code class="varname">major_version.minor_version</code> value returned can
                        be 1.0 or 1.1 if <code class="constant">CL_DEVICE_VERSION</code> is OpenCL 1.0.
                      </p>
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_PARENT_DEVICE</code>
                      </td>
                      <td align="left">cl_device_id</td>
                      <td align="left">
                      Returns the <span class="type">cl_device_id</span> of the parent device to which this sub-device
                      belongs. If <code class="varname">device</code> is a root-level device, a NULL value is returned.
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_PARTITION_
AFFINITY_DOMAIN</code>
                      </td>
                      <td align="left"><p>cl_device_aff-</p>
                           <p>inity_domain</p></td>
                      <td align="left">
                      Returns the list of supported affinity domains for partitioning the <code class="varname">device</code> using
                      <code class="constant">CL_DEVICE_PARTITION_BY_AFFINITY_DOMAIN</code>.
                      This is a bit-field that describes one or more of the following values:
                      <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem" style="list-style-type: disc"><code class="constant">CL_DEVICE_AFFINITY_DOMAIN_NUMA</code></li><li class="listitem" style="list-style-type: disc"><code class="constant">CL_DEVICE_AFFINITY_DOMAIN_L4_CACHE</code></li><li class="listitem" style="list-style-type: disc"><code class="constant">CL_DEVICE_AFFINITY_DOMAIN_L3_CACHE</code></li><li class="listitem" style="list-style-type: disc"><code class="constant">CL_DEVICE_AFFINITY_DOMAIN_L2_CACHE</code></li><li class="listitem" style="list-style-type: disc"><code class="constant">CL_DEVICE_AFFINITY_DOMAIN_L1_CACHE</code></li><li class="listitem" style="list-style-type: disc"><code class="constant">CL_DEVICE_AFFINITY_DOMAIN_NEXT_PARTITIONABLE</code></li></ul></div>
                      If the device does not support any affinity domains, a value of 0 will be returned.
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_PARTITION_MAX_
SUB_DEVICES</code>
                      </td>
                      <td align="left">cl_uint</td>
                      <td align="left">
                      Returns the maximum number of sub-devices that can be created
                      when a device is partitioned. The value returned cannot exceed
                      <code class="constant">CL_DEVICE_MAX_COMPUTE_UNITS</code>.
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_PARTITION_PROPERTIES</code>
                      </td>
                      <td align="left">
                        <p>cl_device_partit-</p>
                        <p>ion_property[]</p>
                      </td>
                      <td align="left">
                      Returns the list of partition types supported by <code class="varname">device</code>. This is an array of
                      <span class="type">cl_device_partition_property</span> values drawn from the following list:
                      <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem" style="list-style-type: disc"><code class="constant">CL_DEVICE_PARTITION_EQUALLY</code></li><li class="listitem" style="list-style-type: disc"><code class="constant">CL_DEVICE_PARTITION_BY_COUNTS</code></li><li class="listitem" style="list-style-type: disc"><code class="constant">CL_DEVICE_PARTITION_BY_AFFINITY_DOMAIN</code></li></ul></div>
                      If the device cannot be partitioned (i.e. 
                        there is no partitioning scheme supported 
                        by the device that will return at least two 
                        subdevices), a value of 0 will be returned.
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_PARTITION_TYPE</code>
                      </td>
                      <td align="left"><p>cl_device_part-</p>
                           <p>ition_property[]</p></td>
                      <td align="left">
                      Returns the <code class="varname">properties</code> argument specified in
                      <a class="citerefentry" href="clCreateSubDevices.html"><span class="citerefentry"><span class="refentrytitle">clCreateSubDevices</span></span></a>
                      if <code class="varname">device</code> is a subdevice. In the case where the <code class="varname">properties</code>
                        argument to <a class="citerefentry" href="clCreateSubDevices.html"><span class="citerefentry"><span class="refentrytitle">clCreateSubDevices</span></span></a> is
                        <code class="constant">CL_DEVICE_PARTITION_BY_AFFINITY_DOMAIN</code>,
                        <code class="constant">CL_DEVICE_AFFINITY_DOMAIN_NEXT_PARTITIONABLE</code>, the affinity domain used to 
                        perform the partition will be returned. This 
                        can be one of the following values:
                      <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem" style="list-style-type: disc"><code class="constant">CL_DEVICE_AFFINITY_DOMAIN_NUMA</code></li><li class="listitem" style="list-style-type: disc"><code class="constant">CL_DEVICE_AFFINITY_DOMAIN_L4_CACHE</code></li><li class="listitem" style="list-style-type: disc"><code class="constant">CL_DEVICE_AFFINITY_DOMAIN_L3_CACHE</code></li><li class="listitem" style="list-style-type: disc"><code class="constant">CL_DEVICE_AFFINITY_DOMAIN_L2_CACHE</code></li><li class="listitem" style="list-style-type: disc"><code class="constant">CL_DEVICE_AFFINITY_DOMAIN_L1_CACHE</code></li></ul></div>
                        Otherwise the implementation may either 
                        return a <code class="varname">param_value_size_ret</code> of 0 i.e. 
                        there is no partition type associated with 
                        <code class="varname">device</code> or can return a property value of 0 
                        (where 0 is used to terminate the partition 
                        property list) in the memory that 
                        <code class="varname">param_value</code> points to.
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_PIPE_MAX_
ACTIVE_RESERVATIONS</code>
                      </td>
                      <td align="left">cl_uint</td>
                      <td align="left">
                       The maximum number of reservations that 
                       can be active for a pipe per work-item in a 
                       kernel. A work-group reservation is 
                       counted as one reservation per work-item. 
                       The minimum value is 1.
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_PIPE_MAX_PACKET_SIZE</code>
                      </td>
                      <td align="left">cl_uint</td>
                      <td align="left">The maximum size of pipe packet in bytes. 
                            The minimum value is 1024 bytes.
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_PLATFORM</code>
                      </td>
                      <td align="left">
                        <a class="link" href="abstractDataTypes.html" target="pagedisplay">cl_platform_id</a>
                      </td>
                      <td align="left">The platform associated with this device.</td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_PREFERRED_
GLOBAL_ATOMIC_ALIGNMENT</code>
                      </td>
                      <td align="left">cl_uint</td>
                      <td align="left">
                       Returns the value representing the 
                       preferred alignment in bytes for OpenCL
                       2.0 atomic types to global memory. This 
                       query can return 0 which indicates that the 
                       preferred alignment is aligned to the 
                       natural size of the type.
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_PREFERRED_
INTEROP_USER_SYNC</code>
                      </td>
                      <td align="left">cl_bool</td>
                      <td align="left">
                      Is <code class="constant">CL_TRUE</code> if the device's preference is for the user
                      to be responsible for synchronization, when sharing memory objects between
                      OpenCL and other APIs such as DirectX, <code class="constant">CL_FALSE</code> if the
                      device / implementation has a performant path for performing synchronization
                      of memory object shared between OpenCL and other APIs such as DirectX
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_PREFERRED_
LOCAL_ATOMIC_ALIGNMENT</code>
                      </td>
                      <td align="left">cl_uint</td>
                      <td align="left">
                       Returns the value representing the 
                       preferred alignment in bytes for OpenCL
                       2.0 atomic types to local memory. This 
                       query can return 0 which indicates that the 
                       preferred alignment is aligned to the 
                       natural size of the type.
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_PREFERRED_
PLATFORM_ATOMIC_ALIGNMENT</code>
                      </td>
                      <td align="left">cl_uint</td>
                      <td align="left">
                       Returns the value representing the 
                       preferred alignment in bytes for OpenCL
                       2.0 fine-grained SVM atomic types. This 
                       query can return 0 which indicates that the 
                       preferred alignment is aligned to the 
                       natural size of the type.
                    </td>
                    </tr>
                    <tr>
                      <td align="left"><code class="constant">CL_DEVICE_PREFERRED_
VECTOR_WIDTH_CHAR</code>
                      <p><code class="constant">CL_DEVICE_PREFERRED_
VECTOR_WIDTH_SHORT</code></p>
                      <p><code class="constant">CL_DEVICE_PREFERRED_
VECTOR_WIDTH_INT</code></p>
                      <p><code class="constant">CL_DEVICE_PREFERRED_
VECTOR_WIDTH_LONG</code></p>
                      <p><code class="constant">CL_DEVICE_PREFERRED_
VECTOR_WIDTH_FLOAT</code></p>
                      <p><code class="constant">CL_DEVICE_PREFERRED_
VECTOR_WIDTH_DOUBLE</code></p>
                      <p><code class="constant">CL_DEVICE_PREFERRED_
VECTOR_WIDTH_HALF</code></p></td>
                      <td align="left">cl_uint</td>
                      <td align="left">
                      <p>
                        Preferred native vector width size for built-in scalar types that can
                        be put into vectors. The vector width is defined as the number of scalar
                        elements that can be stored in the vector.
                      </p>

                      <p>
                        If double precision is not supported,
                        <code class="constant">CL_DEVICE_PREFERRED_VECTOR_WIDTH_DOUBLE</code> must return 0.
                      </p>

                      <p>
                        If the
                        <a class="citerefentry" href="cl_khr_fp16.html"><span class="citerefentry"><span class="refentrytitle">cl_khr_fp16</span></span></a>
                        extension is not supported,
                        <code class="constant">CL_DEVICE_PREFERRED_VECTOR_WIDTH_HALF</code> must return 0.
                      </p>

                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_PRINTF_BUFFER_SIZE</code>
                      </td>
                      <td align="left">size_t</td>
                      <td align="left">
                      Maximum size in bytes of the internal buffer that holds the output of <a class="citerefentry" href="printfFunction.html"><span class="citerefentry"><span class="refentrytitle">printf</span></span></a>
                      calls from a kernel. The minimum value for the FULL profile is 1 MB.
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_PROFILE</code>
                      </td>
                      <td align="left">char[]</td>
                      <td align="left">
                      <p>
                        OpenCL profile string. Returns the profile name supported by the device
                        (see note).  The profile name returned can be one of the following strings:
                      </p>

                      <p>
                        FULL_PROFILE - if the device supports the OpenCL specification
                        (functionality defined as part of the core specification and does not
                        require any extensions to be supported).
                      </p>

                      <p>
                        EMBEDDED_PROFILE - if the device supports the OpenCL embedded profile.
                      </p>

                      <p>
                        The platform profile returns the profile that is 
                        implemented by the OpenCL framework. If the 
                        platform profile 
                        returned is <code class="constant">FULL_PROFILE</code>, 
                        the OpenCL framework will support devices that 
                        are <code class="constant">FULL_PROFILE</code> and may also 
                        support devices that are <code class="constant">EMBEDDED_PROFILE</code>. 
                        The compiler must be available for all devices i.e.
                        <code class="constant">CL_DEVICE_COMPILER_AVAILABLE</code> 
                        is <code class="constant">CL_TRUE</code>. If the 
                        platform profile returned is 
                        <code class="constant">EMBEDDED_PROFILE</code>, then 
                        devices that are only <code class="constant">EMBEDDED_PROFILE</code> are supported.
                      </p>
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_PROFILING_
TIMER_RESOLUTION</code>
                      </td>
                      <td align="left">size_t</td>
                      <td align="left">Describes the resolution of device timer. This is measured in nanoseconds.</td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_QUEUE_ON_
DEVICE_MAX_SIZE</code>
                      </td>
                      <td align="left">cl_uint</td>
                      <td align="left">
                      The max. size of the device queue in bytes. The minimum value is 256 KB for the full 
                        profile and 64 KB for the embedded profile
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_QUEUE_ON_
DEVICE_PREFERRED_SIZE</code>
                      </td>
                      <td align="left">cl_uint</td>
                      <td align="left">
                      The size of the device queue in bytes
                        preferred by the implementation. 
                        Applications should use this size for the 
                        device queue to ensure good performance.
                        The minimum value is 16 KB.
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_QUEUE_
ON_DEVICE_PROPERTIES</code>
                      </td>
                      <td align="left">
                      <p>cl_command_-</p>
                      <p>queue_properties</p>
                    </td>
                      <td align="left">
                      <p>
                        Describes the on device command-queue properties supported by the device. This is
                        a bit-field that describes one or more of the following values:
                      </p>

                      <p><code class="constant">CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE</code></p>
                      <p><code class="constant">CL_QUEUE_PROFILING_ENABLE</code></p>
                      <p>
                        These properties are described in the table for
                        <a class="citerefentry" href="clCreateCommandQueueWithProperties.html"><span class="citerefentry"><span class="refentrytitle">clCreateCommandQueueWithProperties</span></span></a>.
                        The mandated minimum capability is
                        <code class="constant">CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE</code>
                        | <code class="constant">CL_QUEUE_PROFILING_ENABLE</code>.
                      </p>
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_QUEUE_ON_
HOST_PROPERTIES</code>
                      </td>
                      <td align="left">
                      <p>cl_command_-</p>
                      <p>queue_properties</p>
                    </td>
                      <td align="left">
                      <p>
                        Describes the on host command-queue properties supported by the device.  This is
                        a bit-field that describes one or more of the following values:
                      </p>

                      <p><code class="constant">CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE</code></p>
                      <p><code class="constant">CL_QUEUE_PROFILING_ENABLE</code></p>
                      <p>
                        These properties are described in the table for
                        <a class="citerefentry" href="clCreateCommandQueueWithProperties.html"><span class="citerefentry"><span class="refentrytitle">clCreateCommandQueueWithProperties</span></span></a>.
                        The mandated minimum capability is
                        <code class="constant">CL_QUEUE_PROFILING_ENABLE</code>.
                      </p>
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_REFERENCE_COUNT</code>
                      </td>
                      <td align="left">cl_uint</td>
                      <td align="left">
                      Returns the <code class="varname">device</code> reference count. If the device is a root-level device,
                      a reference count of one is returned.
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_SINGLE_FP_CONFIG</code>
                      </td>
                      <td align="left">
                        <p>cl_device_-</p>
                        <p>fp_config</p>
                      </td>
                      <td align="left">
                      <p>
                        Describes single precision floating-point capability of the device. This
                        is a bit-field that describes one or more of the following values:
                      </p>

                      <p><code class="constant">CL_FP_DENORM</code> - denorms are supported</p>
                      <p><code class="constant">CL_FP_INF_NAN</code> - INF and quiet NaNs are supported</p>
                      <p><code class="constant">CL_FP_ROUND_TO_NEAREST</code> - round to nearest even rounding mode supported</p>
                      <p><code class="constant">CL_FP_ROUND_TO_ZERO</code> - round to zero rounding mode supported</p>
                      <p><code class="constant">CL_FP_ROUND_TO_INF</code> - round to +ve and -ve infinity rounding modes supported</p>
                      <p><code class="constant">CL_FP_FMA</code> - IEEE754-2008 fused multiply-add is supported</p>

                      <p>
                        <code class="constant">CL_FP_CORRECTLY_ROUNDED_DIVIDE_SQRT</code> - divide and
                        sqrt are correctly rounded as defined by the IEEE754 specification.
                      </p>

                      <p>
                        <code class="constant">CL_FP_SOFT_FLOAT</code> - Basic floating-point operations
                        (such as addition, subtraction, multiplication) are implemented in
                        software.
                      </p>

                      <p>
                        For the full profile, the mandated minimum 
                        floating-point capability for devices that
                        are not of type <code class="constant">CL_DEVICE_TYPE_CUSTOM</code>
                        is <code class="constant">CL_FP_ROUND_TO_NEAREST</code> |
                        <code class="constant">CL_FP_INF_NAN</code>.
                        For the embedded profile, see section 10.
                      </p>
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_SPIR_VERSIONS</code>
                      </td>
                      <td align="left">char []</td>
                      <td align="left">
                        If the <a class="citerefentry" href="cl_khr_spir.html"><span class="citerefentry"><span class="refentrytitle">cl_khr_spir</span></span></a>
                        extension is enabled,
                        a space separated list of SPIR versions 
                        supported by the device.
                        For example returning “1.2 2.0” in this 
                        query implies that SPIR version 1.2 and 
                        2.0 are supported by the implementation.
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_SUBGROUP_
INDEPENDENT_
FORWARD_PROGRESS</code>
                      </td>
                      <td align="left">cl_bool</td>
                      <td align="left">
                        Is <code class="constant">CL_TRUE</code> if this device supports
                        independent forward progress of sub-groups, 
                        <code class="constant">CL_FALSE</code> otherwise. If
                        <a class="citerefentry" href="cl_khr_subgroups.html"><span class="citerefentry"><span class="refentrytitle">cl_khr_subgroups</span></span></a> 
                        is supported by the
                        device this must return <code class="constant">CL_TRUE</code>.
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_SVM_CAPABILITIES</code>
                      </td>
                      <td align="left">
                        <p>cl_device_svm_-</p>
                        <p>capabilities</p>
                      </td>
                      <td align="left"><p>
                      Describes the various shared virtual 
                        memory (a.k.a. SVM) memory allocation 
                        types the device supports. Coarse-grain 
                        SVM allocations are required to be 
                        supported by all OpenCL 2.0 devices. This 
                        is a bit-field that describes a combination 
                        of the following values:</p>

                        <p><code class="constant">CL_DEVICE_SVM_COARSE_GRAIN_BUFFER</code> – 
                        Support for coarse-grain buffer 
                        sharing using <a class="citerefentry" href="clSVMAlloc.html"><span class="citerefentry"><span class="refentrytitle">clSVMAlloc</span></span></a>. Memory 
                        consistency is guaranteed at 
                        synchronization points and the host must 
                        use calls to 
                        <a class="citerefentry" href="clEnqueueMapBuffer.html"><span class="citerefentry"><span class="refentrytitle">clEnqueueMapBuffer</span></span></a> and 
                        <a class="citerefentry" href="clEnqueueUnmapMemObject.html"><span class="citerefentry"><span class="refentrytitle">clEnqueueUnmapMemObject</span></span></a>.</p>

                        <p><code class="constant">CL_DEVICE_SVM_FINE_GRAIN_BUFFER</code>
                        – Support for fine-grain buffer sharing 
                        using <a class="citerefentry" href="clSVMAlloc.html"><span class="citerefentry"><span class="refentrytitle">clSVMAlloc</span></span></a>. Memory consistency 
                        is guaranteed atsynchronization points 
                        without need for <a class="citerefentry" href="clEnqueueMapBuffer.html"><span class="citerefentry"><span class="refentrytitle">clEnqueueMapBuffer</span></span></a>
                        and <a class="citerefentry" href="clEnqueueUnmapMemObject.html"><span class="citerefentry"><span class="refentrytitle">clEnqueueUnmapMemObject</span></span></a>.</p>

                        <p><code class="constant">CL_DEVICE_SVM_FINE_GRAIN_SYSTEM</code>
                        – Support for sharing the host’s entire 
                        virtual memory including memory 
                        allocated using malloc. Memory 
                        consistency is guaranteed at 
                        synchronization points.</p>

                        <p><code class="constant">CL_DEVICE_SVM_ATOMICS</code> – Support 
                        for the OpenCL 2.0 atomic operations that 
                        provide memory consistency across the 
                        host and all OpenCL devices supporting 
                        fine-grain SVM allocations.</p>

                        <p>
                            The mandated minimum capability is 
                            <code class="constant">CL_DEVICE_SVM_COARSE_GRAIN_BUFFER</code>.
                        </p>

                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_TERMINATE_CAPABILITY_KHR</code>
                      </td>
                      <td align="left">cl_device_terminate_capability_khr</td>
                      <td align="left">
                        If the 
                        <a class="citerefentry" href="cl_khr_terminate_context.html"><span class="citerefentry"><span class="refentrytitle">cl_khr_terminate_context</span></span></a> 
                        extension is enabled, describes the termination capability of the OpenCL 
                        device. This is a bitfield where a value of 
                        <code class="constant">CL_DEVICE_TERMINATE_CAPABILITY_CONTEXT_KHR</code>
                        indicates that context termination is supported.
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_TYPE</code>
                      </td>
                      <td align="left">cl_device_type</td>
                      <td align="left">
                      The OpenCL device type. Currently supported values are:
                      <code class="constant">CL_DEVICE_TYPE_CPU</code>,
                      <code class="constant">CL_DEVICE_TYPE_GPU</code>,
                      <code class="constant">CL_DEVICE_TYPE_ACCELERATOR</code>,
                      <code class="constant">CL_DEVICE_TYPE_DEFAULT</code>, a combination of the above
                      types, or <code class="constant">CL_DEVICE_TYPE_CUSTOM</code>.
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_VENDOR</code>
                      </td>
                      <td align="left">char[]</td>
                      <td align="left">Vendor name string.</td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_VENDOR_ID</code>
                      </td>
                      <td align="left">cl_uint</td>
                      <td align="left">
                      A unique device vendor identifier. An example of a unique device identifier
                      could be the PCIe ID.
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_VERSION</code>
                      </td>
                      <td align="left">char[]</td>
                      <td align="left">
                      <p>
                        OpenCL version string. Returns the OpenCL version supported by the
                        device. This version string has the following format:
                      </p>

                      <p>
                        <code class="varname">
                        OpenCL&lt;space&gt;&lt;major_version.minor_version&gt;&lt;space&gt;&lt;vendor-specific
                        information&gt; </code>
                      </p>

                      <p>
                        The <code class="varname">major_version.minor_version</code> value returned will
                        be 2.1.
                      </p>
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DRIVER_VERSION</code>
                      </td>
                      <td align="left">char[]</td>
                      <td align="left">
                      OpenCL software driver version string in the form
                      <code class="varname">major_number.minor_number</code>.
                    </td>
                    </tr>
                  </tbody>
                </table>
              </div>
            </dd>
          </dl>
        </div>
      </div>
      <div class="refsect1">
        <a id="notes"></a>
        <h2>Notes</h2>
        <p>
          <code class="constant">CL_DEVICE_PROFILE</code>: The platform profile returns the profile
          that is implemented by the OpenCL framework. If the platform profile returned is
          <code class="constant">FULL_PROFILE</code>, the OpenCL framework will support devices 
          that are <code class="constant">FULL_PROFILE</code> and may
          also support devices that are <code class="constant">EMBEDDED_PROFILE</code>. The compiler must
          be available for all devices i.e. <code class="constant">CL_DEVICE_COMPILER_AVAILABLE</code>
          is <code class="constant">CL_TRUE</code>. If the platform profile returned
          is <code class="constant">EMBEDDED_PROFILE</code>, then devices that are only
          <code class="constant">EMBEDDED_PROFILE</code> are supported.
        </p>
        <p>
          The device queries described in the table above should return the
          same information for a root-level device i.e. a device returned by
          <a class="citerefentry" href="clGetDeviceIDs.html"><span class="citerefentry"><span class="refentrytitle">clGetDeviceIDs</span></span></a> and any
          sub-devices created from this device except for the following queries:

            </p>
        <div class="itemizedlist">
          <ul class="itemizedlist" style="list-style-type: disc; ">
            <li class="listitem" style="list-style-type: disc">
              <code class="constant">CL_DEVICE_GLOBAL_MEM_CACHE_SIZE</code>
            </li>
            <li class="listitem" style="list-style-type: disc">
              <code class="constant">CL_DEVICE_BUILT_IN_KERNELS</code>
            </li>
            <li class="listitem" style="list-style-type: disc">
              <code class="constant">CL_DEVICE_PARENT_DEVICE</code>
            </li>
            <li class="listitem" style="list-style-type: disc">
              <code class="constant">CL_DEVICE_PARTITION_TYPE</code>
            </li>
            <li class="listitem" style="list-style-type: disc">
              <code class="constant">CL_DEVICE_REFERENCE_COUNT</code>
            </li>
          </ul>
        </div>
        <p>
        </p>
      </div>
      <div class="refsect1">
        <a id="errors"></a>
        <h2>Errors</h2>
        <p>
      <code class="function">clGetDeviceInfo</code> returns <span class="errorname">CL_SUCCESS</span> if the
      function is executed successfully. Otherwise, it returns the following:
    </p>
        <div class="itemizedlist">
          <ul class="itemizedlist" style="list-style-type: disc; ">
            <li class="listitem" style="list-style-type: disc"><span class="errorname">CL_INVALID_DEVICE</span> if <code class="varname">device</code> is not valid.
        </li>
            <li class="listitem" style="list-style-type: disc"><span class="errorname">CL_INVALID_VALUE</span> if <code class="varname">param_name</code>
          is not one of the supported values or if size in bytes specified by
          <code class="varname">param_value_size</code> is less than size of return type as shown in the
          table above and <code class="varname">param_value</code> is not a <span class="errorname">NULL</span>
          value or if <code class="varname">param_name</code> is a value that is available as an extension and the corresponding
          extension is not supported by the device.
        </li>
            <li class="listitem" style="list-style-type: disc"><span class="errorname">CL_OUT_OF_RESOURCES</span> if there is a failure to allocate resources
          required by the OpenCL implementation on the device.
        </li>
            <li class="listitem" style="list-style-type: disc"><span class="errorname">CL_OUT_OF_HOST_MEMORY</span> if there is a failure to allocate
          resources required by the OpenCL implementation on the host.
        </li>
          </ul>
        </div>
      </div>
      <div class="refsect1">
        <a id="specification"></a>
        <h2>Specification</h2>
        <p><img src="pdficon_small1.gif" />
            <a href="https://www.khronos.org/registry/cl/specs/opencl-2.1.pdf#page=66" target="OpenCL Spec">OpenCL Specification</a>
        </p>
      </div>
      <div class="refsect1">
        <a id="seealso"></a>
        <h2>Also see</h2>
        <p>
            <a class="citerefentry" href="clGetDeviceIDs.html"><span class="citerefentry"><span class="refentrytitle">clGetDeviceIDs</span></span></a>,
            <a class="citerefentry" href="cl_khr_fp64.html"><span class="citerefentry"><span class="refentrytitle">cl_khr_fp64</span></span></a>,
            <a class="citerefentry" href="constant.html"><span class="citerefentry"><span class="refentrytitle">__constant</span></span></a>,
            <a class="citerefentry" href="clCreateCommandQueueWithProperties.html"><span class="citerefentry"><span class="refentrytitle">clCreateCommandQueueWithProperties</span></span></a>,
            <a class="citerefentry" href="clRetainCommandQueue.html"><span class="citerefentry"><span class="refentrytitle">clRetainCommandQueue</span></span></a>,
            <a class="citerefentry" href="clEnqueueNDRangeKernel.html"><span class="citerefentry"><span class="refentrytitle">clEnqueueNDRangeKernel</span></span></a>
        </p>
      </div>
      <div xmlns="" class="refsect3" lang="en" xml:lang="en"><a xmlns="http://www.w3.org/1999/xhtml" id="Copyright"></a><h4 xmlns="http://www.w3.org/1999/xhtml"></h4><img xmlns="http://www.w3.org/1999/xhtml" src="KhronosLogo.jpg" /><p xmlns="http://www.w3.org/1999/xhtml"></p>Copyright © 2007-2015 The Khronos Group Inc.
Permission is hereby granted, free of charge, to any person obtaining a
copy of this software and/or associated documentation files (the
"Materials"), to deal in the Materials without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Materials, and to
permit persons to whom the Materials are furnished to do so, subject to
the condition that this copyright notice and permission notice shall be included
in all copies or substantial portions of the Materials.
</div>
    </div>
  </body>
</html>
