<?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>Blocks</title>
    <meta name="generator" content="DocBook XSL Stylesheets V1.78.1" />
    <meta name="keywords" content="Blocks" />
  </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="Blocks"></a>
        <h1>Blocks</h1>
        <p>
            OpenCL C 2.0 adds support for the clang block syntax.
        </p>
      </div>
      <div class="refsect2">
        <a id="synopsis"></a>
        <h3>
        </h3>
        <div class="informaltable">
          <table border="0">
            <colgroup>
              <col align="left" class="col1" />
            </colgroup>
            <tbody>
              <tr>
                <td align="left">
Example:
int multiplier = 7;
int (^myBlock)(int) = ^(int num) { return num * multiplier; };
                        </td>
              </tr>
            </tbody>
          </table>
        </div>
      </div>
      <div class="refsect1">
        <a id="description"></a>
        <h2>Description</h2>
        <p>
            OpenCL C 2.0 adds support for the clang block syntax. 
            Like function types, the Block type is a 
            pair consisting of a result value type and a list of 
            parameter types very similar to a function type. 
            Blocks are intended to be used much like functions 
            with the key distinction being that in addition 
            to executable code they also contain various 
            variable bindings to automatic (stack) or global
            memory.
        </p>
        <p>
            This syntax is already part of the clang source tree 
            on which most vendors have based their OpenCL 
            implementations. Additionally, blocks based closures 
            are supported by the clang open source C compiler as well as 
            Mac OS X’s C and Objective C compilers. Specifically, 
            Mac OS X’s Grand Central Dispatch allows applications to 
            queue tasks as a block.
        </p>
        <h4><a id="id-1.5.4"></a>Declaring and Using a Block</h4>
        <p>
            You use the ^ operator to declare a Block 
            variable and to indicate the beginning of a Block 
            literal. The body of the Block itself is contained 
            within {}, as shown in the example (as usual 
            with C, ; indicates the end of the statement).
        </p>
        <p>
            The Block is able to make use of variables from 
            the same scope in which it was defined.
        </p>
        <p>
            If you declare a Block as a variable, you can 
            then use it just as you would a function:
        </p>
        <p>
<code class="code"><div class="literallayout"><p><br />
    int multiplier = 7;<br />
    int (^myBlock)(int) = ^(int num) {<br />
        return num * multiplier;<br />
    };<br />
<br />
    printf(“%d\n”, myBlock(3));<br />
    // prints 21<br />
</p></div></code>
        </p>
        <h4><a id="id-1.5.9"></a>Declaring a Block Reference</h4>
        <p>
            Block variables hold references to Blocks. You 
            declare them using syntax similar to that you use 
            to declare a pointer to a function, except that 
            you use ^ instead of *. The Block type fully 
            interoperates with the rest of the C type system. 
            The following are valid Block variable 
            declarations:
        </p>
        <div class="literallayout">
          <p>
            <code class="code"><br />
    void (^blockReturningVoidWithVoidArgument)(void);<br />
    int (^blockReturningIntWithIntAndCharArguments)(int, char);<br />
</code>
          </p>
        </div>
        <p>
            A Block that takes no arguments must specify void 
            in the argument list. A Block reference may 
            not be dereferenced via the pointer dereference 
            operation *, and thus a Block’s size may not be 
            computed at compile time.
        </p>
        <p>
            Blocks are designed to be fully type safe by giving 
            the compiler a full set of metadata to use to 
            validate use of Blocks, parameters passed to blocks, 
            and assignment of the return value.
        </p>
        <p>
            You can also create types for Blocks—doing so 
            is generally considered to be best practice when 
            you use a block with a given signature in multiple places:
        </p>
        <div class="literallayout">
          <p>
            <code class="code"><br />
    typedef float (^MyBlockType)(float, float);<br />
<br />
    MyBlockType myFirstBlock = // …;<br />
    MyBlockType mySecondBlock = // …;<br />
</code>
          </p>
        </div>
        <h4><a id="id-1.5.16"></a>Block Literal Expressions</h4>
        <p>
            A Block literal expression produces a reference 
            to a Block. It is introduced by the use of the ^
            token as a unary operator.
        </p>
        <div class="literallayout">
          <p>
            <code class="code"><br />
    Block_literal_expression ::= ^ block_decl compound_statement_body<br />
    block_decl ::=<br />
    block_decl ::= parameter_list<br />
    block_decl ::= type_expression<br />
</code>
          </p>
        </div>
        <p>
            where type expression is extended to allow ^ as 
            a Block reference where * is allowed as a 
            function reference.
        </p>
        <p>
            The following Block literal:
        </p>
        <div class="literallayout">
          <p>
            <code class="code"><br />
    ^ void (void) { printf("hello world\n"); }<br />
</code>
          </p>
        </div>
        <p>
            produces a reference to a Block with no arguments with no return value.
        </p>
        <p>
            The return type is optional and is inferred from 
            the return statements. If the return statements 
            return a value, they all must return a value of 
            the same type. If there is no value returned the 
            inferred type of the Block is void; otherwise it 
            is the type of the return statement value. If the 
            return type is omitted and the argument list is 
            ( <span class="type">void</span> ), 
            the ( <span class="type">void</span> ) argument list may also be 
            omitted.
        </p>
        <p>
            So:
        </p>
        <div class="literallayout">
          <p>
            <code class="code"><br />
    ^ ( void ) { printf("hello world\n"); }<br />
</code>
          </p>
        </div>
        <p>
            and:
        </p>
        <div class="literallayout">
          <p>
            <code class="code"><br />
    ^ { printf("hello world\n"); }<br />
</code>
          </p>
        </div>
        <p>
            are exactly equivalent constructs for the same expression.
        </p>
        <p>
            The compound statement body establishes a new 
            lexical scope within that of its parent. Variables 
            used within the scope of the compound statement 
            are bound to the Block in the normal manner 
            with the exception of those in automatic (stack) 
            storage. Thus one may access functions and 
            global variables as one would expect, as well as 
            static local variables. 
        </p>
        <p>
            Local automatic (stack) variables referenced within 
            the compound statement of a Block are 
            imported and captured by the Block as const copies. 
            The capture (binding) is performed at the 
            time of the Block literal expression evaluation.
        </p>
        <p>
            The compiler is not required to capture a variable if 
            it can prove that no references to the variable 
            will actually be evaluated.
        </p>
        <p>
            The lifetime of variables declared in a Block is that of a function.
        </p>
        <p>
            Block literal expressions may occur within Block 
            literal expressions (nested) and all variables 
            captured by any nested blocks are implicitly also 
            captured in the scopes of their enclosing 
            Blocks.
        </p>
        <p>
            A Block literal expression may be used as the initialization 
            value for Block variables at global or 
            local static scope.
        </p>
        <p>
            You can also declare a Block as a global literal in program scope.
        </p>
        <div class="literallayout">
          <p>
            <code class="code"><br />
    int GlobalInt = 0;<br />
<br />
    int (^getGlobalInt)(void) = ^{ return GlobalInt; };<br />
</code>
          </p>
        </div>
        <p>
</p>
        <h4><a id="id-1.5.37.1"></a>Control Flow</h4>
        <p>
        </p>
        <p>
            The compound statement of a Block is treated much 
            like a function body with respect to control 
            flow in that continue, break and goto do not escape the Block.
        </p>
        <h4><a id="id-1.5.39"></a>Restrictions</h4>
        <p>
            The following Blocks features are currently not supported in OpenCL C.
        </p>
        <div class="itemizedlist">
          <ul class="itemizedlist" style="list-style-type: disc; ">
            <li class="listitem">
              <p>The __block storage type.</p>
            </li>
            <li class="listitem">
              <p>The Block_copy() and Block_release() functions that copy and release Blocks.</p>
            </li>
            <li class="listitem">
              <p>Blocks with variadic arguments.</p>
            </li>
            <li class="listitem">
              <p>Arrays of Blocks.</p>
            </li>
            <li class="listitem">
              <p>Blocks as structures and union members.</p>
            </li>
          </ul>
        </div>
        <p>
            Block literals are assumed to allocate memory at the point of
definition and to be destroyed at the
end of the same scope. To support these behaviors,
additional restrictions in addition to the
above feature restrictions are:
        </p>
        <div class="itemizedlist">
          <ul class="itemizedlist" style="list-style-type: disc; ">
            <li class="listitem">
              <p>
                    Block variables must be defined and used in a way that
                    allows them to be statically
                    determinable at build or "link to executable" time. In particular:
                </p>
              <div class="itemizedlist">
                <ul class="itemizedlist" style="list-style-type: circle; ">
                  <li class="listitem">Block variables assigned in one scope must be
                          used only with the same or any
                          nested scope.</li>
                  <li class="listitem">The "extern" storage-class specified cannot be
                          used with program scope block
                          variables.</li>
                  <li class="listitem">Block variable declarations must be qualified with
                          const. Therefore all block
                          variables must be initialized at declaration time and
                          may not be reassigned.</li>
                  <li class="listitem">A block cannot be the return value of a function.</li>
                </ul>
              </div>
            </li>
            <li class="listitem">
              <p>The unary operators (* and &amp;) cannot be used with a Block.</p>
            </li>
            <li class="listitem">
              <p>Blocks cannot be used as expressions of the ternary selection operator (?:).</p>
            </li>
            <li class="listitem">
              <p>A Block cannot reference another Block.</p>
            </li>
          </ul>
        </div>
        <p>
OpenCL C does not allow function pointers (see section 6.9) primarily because it is difficult or
expensive to implement generic indirections to executable code in many hardware architectures
that OpenCL targets. OpenCL C’s design of Blocks is intended to respect that same condition,
yielding the restrictions listed here. As such, Blocks allow a form of dynamically enqueued
function scheduling without providing a form of runtime synchronous dynamic dispatch
analogous to function pointers.
        </p>
      </div>
      <div class="refsect2"><a id="example1"></a><h3>
            Examples
        </h3>

Example 1:
<div class="literallayout"><p><code class="code"><br />
void foo(int *x, int (^bar)(int, int))<br />
{<br />
    *x = bar(*x, *x);<br />
}<br />
<br />
kernel<br />
void k(global int *x, global int *z)<br />
{<br />
    if (some expression)<br />
        *x = foo(x,<br />
                ^int(int x, int y){return x+y+*z;}); // legal<br />
    else<br />
        *x = foo(x,<br />
                ^int(int x, int y){return (x*y)-*z;}); // legal<br />
}<br />
</code></p></div>


Example 2:
<div class="literallayout"><p><code class="code"><br />
kernel<br />
void k(global int *x, global int *z)<br />
{<br />
    int ^(tmp)(int, int);<br />
    if (some expression)<br />
    {<br />
        tmp = ^int(int x, int y){return x+y+*z;}); // illegal<br />
    }<br />
    *x = foo(x, tmp);<br />
}<br />
</code></p></div>


Example 3:
<div class="literallayout"><p><code class="code"><br />
int GlobalInt = 0;<br />
int (^getGlobalInt)(void) = ^{ return GlobalInt; }; // legal<br />
int (^getAnotherGlobalInt)(void);                   // illegal<br />
extern int (^getExternGlobalInt)(void);             // illegal<br />
<br />
void foo()<br />
{<br />
    ...<br />
    getGlobalInt = ^{ return 0; }; // illegal – cannot assign to<br />
                                   // a global block variable<br />
    ...<br />
}<br />
</code></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=64" target="OpenCL Spec">OpenCL Specification</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>
