<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook MathML Module V1.1b1//EN"
              "http://www.oasis-open.org/docbook/xml/mathml/1.1CR1/dbmathml.dtd" [
<!ENTITY multipleHostThreads SYSTEM "multipleHostThreadsInc.xml">
]>

<refentry>
    <refentryinfo>
        <keywordset>
            <keyword>clSetKernelExecInfo</keyword>
        </keywordset>
    </refentryinfo>

    <refmeta>
        <refentrytitle>
            clSetKernelExecInfo
        </refentrytitle>

        <refmiscinfo>
            <copyright>
                <year>2007-2013</year>
                <holder>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.</holder>
            </copyright>
        </refmiscinfo>
        <manvolnum>3</manvolnum>
    </refmeta>

<!-- ================================ SYNOPSIS -->

    <refnamediv id="clSetKernelExecInfo">
        <refname>
            clSetKernelExecInfo
        </refname>

        <refpurpose>
            Pass additional information other than argument values to a kernel.
        </refpurpose>
    </refnamediv>

    <refsynopsisdiv xmlns:xlink="http://www.w3.org/1999/xlink"><title></title>
        <funcsynopsis>
            <funcprototype>
                <funcdef>
                    <link xlink:href="scalarDataTypes.html">cl_int</link>
                    <function>clSetKernelExecInfo</function>
                </funcdef>

                <paramdef>
                    <link xlink:href="abstractDataTypes.html">cl_kernel</link>
                    <parameter>kernel</parameter>
                </paramdef>

                <paramdef>
                    cl_kernel_exec_info
                    <parameter>param_name</parameter>
                </paramdef>

                <paramdef>
                    <link xlink:href="scalarDataTypes.html">size_t</link>
                    <parameter>param_value_size</parameter>
                </paramdef>

                <paramdef>
                    const <link xlink:href="scalarDataTypes.html">void</link>
                    <parameter>*param_value</parameter>
                </paramdef>
            </funcprototype>
        </funcsynopsis>
    </refsynopsisdiv>

<!-- ================================ PARAMETERS -->

    <refsect1 id="parameters">
        <title>Parameters</title>
        <variablelist>
            <varlistentry>
                <term> <varname> kernel </varname> </term>
                <listitem>
                    <para>
                        Specifies the kernel object being queried.
                    </para>
               </listitem>
            </varlistentry>

            <varlistentry>
                <term> <varname> param_name </varname> </term>
                <listitem>
                    <para>
                        Specifies the information to be passed to 
                        <varname>kernel</varname>. The list of supported
                        <varname>param_name</varname> types and the corresponding values passed in
                        <varname>param_value</varname> is described in the table below.
                    </para>
               </listitem>
            </varlistentry>

            <varlistentry>
                <term> <varname>param_value_size</varname> </term>
                <listitem>
                    <para>
                        Specifies the size in bytes of the memory pointed to by 
                        <varname>param_value</varname>.
                    </para>
               </listitem>
            </varlistentry>

            <varlistentry>
                <term> <varname> param_value </varname> </term>
                <listitem>
                    <para>
                        A pointer to memory where the appropriate values 
                        determined by <varname>param_name</varname> are specified.
                    </para>

                    <!-- table 5.18 -->
                    <informaltable frame="all"><anchor id="cl_kernel_info"/>
                    <tgroup cols="2" align="left" colsep="1" rowsep="1">
                        <colspec colname="col1" colnum="1" />
                        <colspec colname="col2" colnum="2" />
                        <thead>
                            <row>
                                <entry>cl_kernel_exec_info</entry>
                                <entry>Type and Description</entry>
                            </row>
                        </thead>

                        <tbody>
                            <row>
                                <entry><constant>CL_KERNEL_EXEC_INFO_SVM_PTRS</constant></entry>
                                <entry>
                                    <para>Type: void *[]</para>
                                    <para>
                                        SVM pointers used by a kernel which
                                        are not passed as arguments to <varname>kernel</varname>.
                                        These addresses may be defined in 
                                        SVM buffer(s) that are passed as 
                                        arguments to <varname>kernel</varname>.
                                    </para>

                                    <para>
                                        These non-argument SVM pointers 
                                        must be specified using 
                                        <function>clSetKernelExecInfo</function> 
                                        for coarse-grain and fine-grain buffer SVM 
                                        allocations but not for fine-grain 
                                        system SVM allocations.
                                    </para>
                                </entry>
                            </row>

                            <row>
                                <entry><constant>CL_KERNEL_EXEC_INFO_SVM_-
FINE_GRAIN_SYSTEM</constant></entry>
                                <entry>
                                    <para>Type: cl_bool</para>
                                    <para>
                                        This flag indicates whether the kernel 
                                        uses pointers that are fine grain 
                                        system SVM allocations. These fine 
                                        grain system SVM pointers may be 
                                        passed as arguments or defined in 
                                        SVM buffers that are passed as 
                                        argumentsto <varname>kernel</varname>.
                                    </para>
                                </entry>
                            </row>

                        </tbody>
                    </tgroup>
                    </informaltable>
               </listitem>
            </varlistentry>

        </variablelist>
    </refsect1>

<!-- ================================ NOTES  -->
    <refsect1 id="notes"><title>Notes</title>

        <para>
            1. Coarse-grain or fine-grain buffer SVM pointers 
            used by a kernel which are not passed as a 
            kernel arguments must be specified using 
            <function>clSetKernelExecInfo</function> with 
            <constant>CL_KERNEL_EXEC_INFO_SVM_PTRS</constant>. 
            For example, if SVM buffer A contains a pointer to 
            another SVM buffer B, and the kernel dereferences 
            that pointer, then a pointer to B must either 
            be passed as an argument in the call to that 
            kernel or it must be made available to the kernel 
            using <function>clSetKernelExecInfo</function>. 
            For example, we might pass extra SVM pointers as follows:
        </para>

        <para>
<literallayout><code>
clSetKernelExecInfo(kernel,
     CL_KERNEL_EXEC_INFO_SVM_PTRS,
     num_ptrs * sizeof(void *),
     extra_svm_ptr_list);
</code></literallayout>
        </para>

        <para>
            Here <code>num_ptrs</code> specifies the number 
            of additional SVM pointers while 
            <code>extra_svm_ptr_list</code> specifies a 
            pointer to memory containing those SVM pointers.
        </para>

        <para>
            When calling <function>clSetKernelExecInfo</function> with 
            <constant>CL_KERNEL_EXEC_INFO_SVM_PTRS</constant> to specify 
            pointers to non-argument SVM buffers as extra arguments 
            to a kernel, each of these pointers can 
            be the SVM pointer returned by 
            <citerefentry><refentrytitle>clSVMAlloc</refentrytitle></citerefentry> 
            or can be a pointer + offset into the SVM region.
            It is sufficient to provide one pointer for each SVM buffer used.
        </para>

        <para>
            2. <constant>CL_KERNEL_EXEC_INFO_SVM_FINE_GRAIN_SYSTEM</constant> 
            is used to indicate whether SVM 
            pointers used by a kernel will refer to system allocations or not.
        </para>

        <para>
            <constant>CL_KERNEL_EXEC_INFO_SVM_FINE_GRAIN_SYSTEM</constant> = 
            <constant>CL_FALSE</constant> indicates that the 
            OpenCL implementation may assume that system pointers 
            are not passed as kernel arguments 
            and are not stored inside SVM allocations 
            passed as kernel arguments. 
        </para>

        <para>
            <constant>CL_KERNEL_EXEC_INFO_SVM_FINE_GRAIN_SYSTEM</constant> = 
            <constant>CL_TRUE</constant> indicates that the OpenCL 
            implementation must assume that system pointers might 
            be passed as kernel arguments and/or 
            stored inside SVM allocations passed as kernel arguments. 
            In this case, if the device to which 
            the kernel is enqueued does not support system SVM pointers, 
            <citerefentry><refentrytitle>clEnqueueNDRangeKernel</refentrytitle></citerefentry> will 
            return a <errorname>CL_INVALID_OPERATION</errorname> error. 
            If none of the devices in the context 
            associated with kernel support fine-grain 
            system SVM allocations, <function>clSetKernelExecInfo</function> 
            will return a <errorname>CL_INVALID_OPERATION</errorname> error.
        </para>

        <para>
            If <function>clSetKernelExecInfo</function> has not been called 
            with a value for 
            <constant>CL_KERNEL_EXEC_INFO_SVM_FINE_GRAIN_SYSTEM</constant>
            the default value is used for this kernel attribute. 
            The defaule value depends on whether the device on which 
            the kernel is enqueued supports fine-grain system SVM 
            allocations. If so, the default value used is 
            <constant>CL_TRUE</constant> (system pointers might 
            be passed); otherwise, the default is <constant>CL_FALSE</constant>.
        </para>

        <para>
            3. A call to <function>clSetKernelExecInfo</function> for a given value of 
            <varname>param_name</varname> replaces any prior value
            passed for that value of <varname>param_name</varname>. Only one 
            <varname>param_value</varname> will be stored for each value of
            <varname>param_name</varname>.
        </para>

        &multipleHostThreads;

    </refsect1>

<!-- ================================ ERRORS  -->

    <refsect1 id="errors"><title>Errors</title>
        <para>
            Returns <errorname>CL_SUCCESS</errorname> if the function 
            is executed successfully. Otherwise,
            it returns one of the following errors:
        </para>

        <itemizedlist mark="disc">
            <listitem>
                <errorname>CL_INVALID_KERNEL</errorname> if <varname>kernel</varname>
                is not a valid kernel object.
            </listitem>

            <listitem>
                <errorname>CL_INVALID_VALUE</errorname>
                    if <varname>param_name</varname> 
                    is not valid, if <varname>param_value</varname> 
                    is NULL or if the size 
                    specified by <varname>param_value_size</varname> 
                    is not valid.
            </listitem>

            <listitem>
                <errorname>CL_INVALID_OPERATION</errorname> 
                    if <varname>param_name</varname> = 
                    <constant>CL_KERNEL_EXEC_INFO_SVM_FINE_GRAIN_SYSTEM</constant> 
                    and <varname>param_value</varname> = <constant>CL_TRUE</constant>
                    but no devices in context 
                    associated with <varname>kernel</varname> support 
                    fine-grain system SVM allocations.
            </listitem>

            <listitem>
              <errorname>CL_OUT_OF_RESOURCES</errorname> if there is a failure to allocate
              resources required by the OpenCL implementation on the device.
            </listitem>

            <listitem>
              <errorname>CL_OUT_OF_HOST_MEMORY</errorname> if there is a failure to allocate
              resources required by the OpenCL implementation on the host.
            </listitem>

        </itemizedlist>
    </refsect1>

<!-- ================================ EXAMPLE  -->
<!-- DO NOT DELETE IN CASE AN EXAMPLE IS ADDED IN THE FUTURE -->
<!--
    <refsect2 id="example1">
        <title>
            Example
        </title>

        <informaltable frame="none">
            <tgroup cols="1" align="left" colsep="0" rowsep="0">
                <colspec colname="col1" colnum="1" />
                <tbody>
                    <row>
                        <entry>
                            Example goes here - it will be set in "code" type with white space preserved.
                        </entry>
                    </row>
                </tbody>
            </tgroup>
        </informaltable>
    </refsect2>
-->

<!-- ================================ SPECIFICATION  -->
<!-- Set the "uri" attribute in the <olink /> element to the "named destination" for the PDF page
-->
    <refsect1 id="specification"><title>Specification</title>
        <para>
            <imageobject>
                <imagedata fileref="pdficon_small1.gif" format="gif" />
            </imageobject>

            <olink uri="clSetKernelExecInfo">OpenCL Specification</olink>
        </para>
    </refsect1>

<!-- ================================ ALSO SEE  -->

    <refsect1 id="seealso"><title>Also see</title>
        <para>
            <citerefentry><refentrytitle>clCreateKernel</refentrytitle></citerefentry>,
            <citerefentry><refentrytitle>clGetKernelInfo</refentrytitle></citerefentry>,
            <citerefentry><refentrytitle>clGetKernelArgInfo</refentrytitle></citerefentry>,
            <citerefentry><refentrytitle>clCreateKernelsInProgram</refentrytitle></citerefentry>,
            <citerefentry><refentrytitle>clSetKernelArg</refentrytitle></citerefentry>,
            <citerefentry><refentrytitle>clGetKernelWorkGroupInfo</refentrytitle></citerefentry>,
            <citerefentry><refentrytitle>clEnqueueNDRangeKernel</refentrytitle></citerefentry>
        </para>
    </refsect1>

<!-- ================================ COPYRIGHT  -->
<!-- Content included from copyright.inc.xsl -->

    <refsect3 id="Copyright"><title></title>
        <imageobject>
                <imagedata fileref="KhronosLogo.jpg" format="jpg" />
        </imageobject>
        <para />
    </refsect3>

 <!-- 27-Oct-2015, API ver 2.1 rev. 19 -->
</refentry>

