<?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>work_group_commit_write_pipe</title>
    <meta name="generator" content="DocBook XSL Stylesheets V1.78.1" />
    <meta name="keywords" content="work_group_commit_write_pipe" />
  </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="work_group_commit_write_pipe"></a>
        <h1>work_group_commit_write_pipe</h1>
        <p>
            Indicates that all writes to <code xmlns="http://www.w3.org/1999/xhtml" class="varname">num_packets</code> associated with a reservation are completed.
        </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">void</a>
                    <strong class="fsfunc">
                        work_group_commit_write_pipe
                    </strong>
                (</code>
                <td>pipe gentype  <var xmlns="http://www.w3.org/1999/xhtml" class="pdparam">p</var>, </td>
              </td>
            </tr>
            <tr valign="top">
              <td> </td>
              <td><a xmlns="http://www.w3.org/1999/xhtml" class="link" href="enums.html#reserve_id_t" target="pagedisplay">reserve_id_t</a> <var xmlns="http://www.w3.org/1999/xhtml" class="pdparam">reserve_id</var><code>)</code></td>
            </tr>
          </table>
        </div>
      </div>
      <div class="refsect1">
        <a id="description"></a>
        <h2>Description</h2>
        <p>
            Indicates that all writes to <code class="varname">num_packets</code>
            associated with reservation <code class="varname">reserve_id</code> are
            completed.
        </p>
        <p>
            This built-in function must be encountered by all work-items in 
            a work-group executing the kernel with the 
            same argument values; otherwise the behavior is 
            undefined.
        </p>
        <p>
    We use the generic type name gentype to indicate the built-in 
    OpenCL C scalar or vector integer or floating-point data types or any user defined type built 
    from these scalar and vector data types can be used as the type for the arguments to the pipe 
    functions listed in this section.
    The half scalar and vector types can only be used if the 
    <a class="citerefentry" href="cl_khr_fp16.html"><span class="citerefentry"><span class="refentrytitle">cl_khr_fp16</span></span></a> 
    extension is supported. The <span class="type">double</span> scalar 
    and vector types can only be used if double precision is supported.
</p>
        <h4><a id="id-1.5.5"></a>General information about pipes</h4>
        <p>
    A pipe is identified by specifying the <code class="code">pipe</code> 
    keyword with a type. The data type specifies the 
    size of each packet in the pipe. The <code class="code">pipe</code> 
    keyword is a type modifier. When it is applied to 
    another type <code class="code">T</code>, the result is a pipe type 
    whose elements (or packets) are of type <code class="code">T</code>. The packet 
    type <code class="code">T</code> may be any supported OpenCL C scalar 
    and vector integer or floating-point data types, or 
    a user-defined type built from these scalar and vector data types.
</p>
        <p>
    The 
    <a class="citerefentry" href="qualifiers.html"><span class="citerefentry"><span class="refentrytitle">read_only</span></span></a> 
    (or <code class="code">__read_only</code>) and 
    <a class="citerefentry" href="qualifiers.html"><span class="citerefentry"><span class="refentrytitle">write_only</span></span></a>
    (or <code class="code">__write_only</code>) qualifiers
    must be used with the pipe qualifier when a pipe 
    is a parameter of a kernel or of a user-defined
    function to identify if a pipe can be read from 
    or written to by a kernel and its callees and
    enqueued child kernels. If no qualifier is specified, 
    <a class="citerefentry" href="qualifiers.html"><span class="citerefentry"><span class="refentrytitle">read_only</span></span></a> 
    is assumed.
</p>
        <p>
    A kernel cannot read from and write to the same pipe object. Using the 
    <a class="citerefentry" href="qualifiers.html"><span class="citerefentry"><span class="refentrytitle">read_write </span></span></a>
    (or <code class="code">__read_write</code>) qualifier with the pipe qualifier is a compilation error.
</p>
        <p>
    The macro <code class="constant">CLK_NULL_RESERVE_ID</code> refers to an invalid reservation ID.
</p>
        <p>
    NOTE: The 
    <a class="citerefentry" href="read_pipe.html"><span class="citerefentry"><span class="refentrytitle">read_pipe</span></span></a> and 
    <a class="citerefentry" href="write_pipe.html"><span class="citerefentry"><span class="refentrytitle">write_pipe</span></span></a> 
    functions that take a reservation ID as an argument can 
    be used to read from or write to a packet index. These built-ins can be used to read from or write 
    to a packet index one or multiple times. If a packet index that is reserved for writing is not 
    written to using the 
    <a class="citerefentry" href="write_pipe.html"><span class="citerefentry"><span class="refentrytitle">write_pipe</span></span></a> 
    function, the contents of that packet in the pipe are undefined. 
    <a class="citerefentry" href="commit_read_pipe.html"><span class="citerefentry"><span class="refentrytitle">commit_read_pipe</span></span></a> and 
    <a class="citerefentry" href="work_group_commit_read_pipe.html"><span class="citerefentry"><span class="refentrytitle">work_group_commit_read_pipe</span></span></a>
    remove the entries reserved for reading from the pipe. 
    <a class="citerefentry" href="commit_write_pipe.html"><span class="citerefentry"><span class="refentrytitle">commit_write_pipe</span></span></a> and 
    <a class="citerefentry" href="work_group_commit_write_pipe.html"><span class="citerefentry"><span class="refentrytitle">work_group_commit_write_pipe</span></span></a> 
    ensures that the entries reserved for writing are all added in-order 
    as one contiguous set of packets to the pipe.
</p>
        <p>
    There can only be <code class="constant">CL_DEVICE_PIPE_MAX_ACTIVE_RESERVATIONS</code> 
    (refer to the list of possible values for <code class="varname">parame_name</code>
    for <a class="citerefentry" href="clGetDeviceInfo.html"><span class="citerefentry"><span class="refentrytitle">clGetDeviceInfo</span></span></a>(table 4.3)) 
    reservations active (i.e. reservation IDs that have been reserved 
    but not committed) per work-item or work-group for a 
    pipe in a kernel executing on a device.
</p>
        <p>
    Work-item based reservations made by a work-item are ordered in the pipe as they are ordered in 
    the program. Reservations made by different work-items that belong to the same work-group 
    can be ordered using the work-group barrier function. The order of work-item based 
    reservations that belong to different work-groups is implementation defined.
</p>
        <p>
    Work-group based reservations made by a work-group are ordered in the pipe as they are ordered 
    in the program. The order of work-group based reservations by different work-groups is
    implementation defined.
</p>
        <h4><a id="id-1.5.14"></a>Restrictions</h4>
        <p>
    Pipes can only be passed as arguments to a function 
    (including kernel functions). The C 
    <a class="citerefentry" href="operators.html"><span class="citerefentry"><span class="refentrytitle">operators</span></span></a> 
    (refer to section 6.3 of the OpenCL 2.0 specification) cannot be used with 
    variables declared with the <code class="code">pipe</code> qualifier.
</p>
        <p>
    The <code class="code">pipe</code> qualifier cannot be used with 
    variables declared inside a kernel, a structure or 
    union field, a pointer type, an array, global variables 
    declared in program scope or the return type of a function.
</p>
        <p>
    The following behavior is undefined:
</p>
        <p>
    </p>
        <div class="itemizedlist">
          <ul class="itemizedlist" style="list-style-type: disc; ">
            <li class="listitem">
            A kernel fails to call 
            <code class="function">reserve_pipe</code>
            before calling 
            <a class="citerefentry" href="read_pipe.html"><span class="citerefentry"><span class="refentrytitle">read_pipe</span></span></a> or 
            <a class="citerefentry" href="write_pipe.html"><span class="citerefentry"><span class="refentrytitle">write_pipe</span></span></a> that take a 
            reservation ID.
        </li>
            <li class="listitem">
            A kernel calls 
            <a class="citerefentry" href="read_pipe.html"><span class="citerefentry"><span class="refentrytitle">read_pipe</span></span></a>, 
            <a class="citerefentry" href="write_pipe.html"><span class="citerefentry"><span class="refentrytitle">write_pipe</span></span></a>, 
            <a class="citerefentry" href="commit_read_pipe.html"><span class="citerefentry"><span class="refentrytitle">commit_read_pipe</span></span></a> or 
            <a class="citerefentry" href="commit_write_pipe.html"><span class="citerefentry"><span class="refentrytitle">commit_write_pipe</span></span></a> with 
            an invalid reservation ID.
        </li>
            <li class="listitem">
            A kernel calls 
            <a class="citerefentry" href="read_pipe.html"><span class="citerefentry"><span class="refentrytitle">read_pipe</span></span></a> or 
            <a class="citerefentry" href="write_pipe.html"><span class="citerefentry"><span class="refentrytitle">write_pipe</span></span></a> 
            with an valid reservation ID but with an <code class="varname">index</code>
            that is not a value from 0 ... <code class="varname">num_packets</code> - 1 
            specified to the corresponding call to 
            <code class="function">reserve_pipe</code>.
        </li>
            <li class="listitem">
            A kernel calls 
            <a class="citerefentry" href="read_pipe.html"><span class="citerefentry"><span class="refentrytitle">read_pipe</span></span></a> or 
            <a class="citerefentry" href="write_pipe.html"><span class="citerefentry"><span class="refentrytitle">write_pipe</span></span></a> 
            with a reservation ID that has already been committed (i.e. a 
            <a class="citerefentry" href="commit_read_pipe.html"><span class="citerefentry"><span class="refentrytitle">commit_read_pipe</span></span></a> or 
            <a class="citerefentry" href="commit_write_pipe.html"><span class="citerefentry"><span class="refentrytitle">commit_write_pipe</span></span></a>
            with this reservation ID has 
            already been called).
        </li>
            <li class="listitem">
            A kernel fails to call 
            <a class="citerefentry" href="commit_read_pipe.html"><span class="citerefentry"><span class="refentrytitle">commit_read_pipe</span></span></a> 
            for any reservation ID obtained by a prior call 
            to <a class="citerefentry" href="reserve_read_pipe.html"><span class="citerefentry"><span class="refentrytitle">reserve_read_pipe</span></span></a>.
        </li>
            <li class="listitem">
            A kernel fails to call 
            <a class="citerefentry" href="commit_write_pipe.html"><span class="citerefentry"><span class="refentrytitle">commit_write_pipe</span></span></a> 
            for any reservation ID obtained by a prior call 
            to <a class="citerefentry" href="reserve_write_pipe.html"><span class="citerefentry"><span class="refentrytitle">reserve_write_pipe</span></span></a>.
        </li>
            <li class="listitem">
            The contents of the reserved data packets in the pipe are undefined if the kernel does not 
            call <a class="citerefentry" href="write_pipe.html"><span class="citerefentry"><span class="refentrytitle">write_pipe</span></span></a> 
            for all entries that were reserved by the corresponding call to 
            <code class="function">reserve_pipe</code>.
        </li>
            <li class="listitem">
            Calls to 
            <a class="citerefentry" href="read_pipe.html"><span class="citerefentry"><span class="refentrytitle">read_pipe</span></span></a> 
            that takes a reservation ID and 
            <a class="citerefentry" href="commit_read_pipe.html"><span class="citerefentry"><span class="refentrytitle">commit_read_pipe</span></span></a> or 
            <a class="citerefentry" href="write_pipe.html"><span class="citerefentry"><span class="refentrytitle">write_pipe</span></span></a> that 
            takes a reservation ID and 
            <a class="citerefentry" href="commit_write_pipe.html"><span class="citerefentry"><span class="refentrytitle">commit_write_pipe</span></span></a> 
            for a given reservation ID must be called 
            by the same kernel that made the reservation using 
            <a class="citerefentry" href="reserve_read_pipe.html"><span class="citerefentry"><span class="refentrytitle">reserve_read_pipe</span></span></a> or 
            <a class="citerefentry" href="reserve_write_pipe.html"><span class="citerefentry"><span class="refentrytitle">reserve_write_pipe</span></span></a>. 
            The reservation ID cannot be passed to another kernel including 
            child kernels.
        </li>
          </ul>
        </div>
        <p>
</p>
        <div class="refsect2">
          <a id="example1"></a>
          <h3>
            Example
        </h3>
          <p>
In the following example
        </p>
          <div class="informaltable">
            <table border="0">
              <colgroup>
                <col align="left" class="col1" />
              </colgroup>
              <tbody>
                <tr>
                  <td align="left">
kernel void
foo (read_only pipe fooA_t pipeA, 
     write_only pipe fooB_t pipeB)
{
...
}
                        </td>
                </tr>
              </tbody>
            </table>
          </div>
          <p>
            <code class="code">pipeA</code> is a read-only pipe object, 
            and <code class="code">pipeB</code> is a write-only pipe object.
        </p>
        </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-openclc.pdf#page=159" target="OpenCL Spec">OpenCL Specification</a>
        </p>
      </div>
      <div class="refsect1">
        <a id="seealso"></a>
        <h2>Also see</h2>
        <p>
            <a class="citerefentry" href="pipeFunctions.html"><span class="citerefentry"><span class="refentrytitle">Pipe Functions</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>
