<?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>clSVMAlloc</title>
    <meta name="generator" content="DocBook XSL Stylesheets V1.78.1" />
    <meta name="keywords" content="clSVMAlloc" />
  </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="clSVMAlloc"></a>
        <h1>
            clSVMAlloc
        </h1>
        <p>
            Allocates a shared virtual memory (SVM) buffer that can be shared by the host and all devices in an OpenCL context that support shared virtual memory.
        </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="abstractDataTypes.html" target="pagedisplay">void</a> <strong class="fsfunc"> * clSVMAlloc</strong>
                (</code>
                <td><a xmlns="http://www.w3.org/1999/xhtml" class="link" href="abstractDataTypes.html" target="pagedisplay">cl_context</a> <var xmlns="http://www.w3.org/1999/xhtml" class="pdparam">context</var>, </td>
              </td>
            </tr>
            <tr valign="top">
              <td> </td>
              <td><a xmlns="http://www.w3.org/1999/xhtml" class="link" href="enums.html#cl_svm_mem_flags" target="pagedisplay">cl_svm_mem_flags</a> <var xmlns="http://www.w3.org/1999/xhtml" class="pdparam">flags</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">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">cl_uint</a> <var xmlns="http://www.w3.org/1999/xhtml" class="pdparam">alignment</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">context</code>
              </span>
            </dt>
            <dd>
              <p>A valid OpenCL context used to create the SVM buffer.</p>
            </dd>
            <dt>
              <span class="term"> <code class="varname">flags</code> </span>
            </dt>
            <dd>
              <p>
                      A bit-field that is used to specify
                      allocation and usage information. The following
                      table describes the possible values for <code class="varname">flags</code>.
                    </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_svm_mem_flags</th>
                      <th align="left">Description</th>
                    </tr>
                  </thead>
                  <tbody>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_MEM_READ_WRITE</code>
                      </td>
                      <td align="left">
                            This flag specifies that the SVM buffer will be read 
                            and written by a kernel. This is the default.
                        </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_MEM_WRITE_ONLY</code>
                      </td>
                      <td align="left">
                            <p>
                                This flag specifies that the SVM buffer will be written 
                                but not read by a kernel.
                            </p>
                            <p>
                                Reading from a SVM buffer created with 
                                <code class="constant">CL_MEM_WRITE_ONLY</code> inside a kernel is undefined.
                            </p>
                            <p>
                                <code class="constant">CL_MEM_READ_WRITE</code> and 
                                <code class="constant">CL_MEM_WRITE_ONLY</code> are mutually exclusive.
                            </p>
                        </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_MEM_READ_ONLY</code>
                      </td>
                      <td align="left">
                            <p>
                                This flag specifies that the SVM buffer object is a 
                                read-only memory object when used inside a kernel.
                            </p>
                            <p>
                                Writing to a SVM buffer created with 
                                <code class="constant">CL_MEM_READ_ONLY</code> inside a kernel is undefined.
                            </p>
                            <p>
                                <code class="constant">CL_MEM_READ_WRITE</code> or <code class="constant">CL_MEM_WRITE_ONLY</code> and 
                                <code class="constant">CL_MEM_READ_ONLY</code> are mutually exclusive.
                            </p>
                        </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_MEM_SVM_FINE_GRAIN_BUFFER</code>
                      </td>
                      <td align="left">
                            This specifies that the application wants the OpenCL 
                            implementation to do a fine-grained allocation. 
                        </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_MEM_SVM_ATOMICS</code>
                      </td>
                      <td align="left">
                            This flag is valid only if 
                            <code class="constant">CL_MEM_SVM_FINE_GRAIN_BUFFER</code> is specified in 
                            <code class="varname">flags</code>. It is used to indicate that SVM atomic 
                            operations can control visibility of memory accesses 
                            in this SVM buffer.
                        </td>
                    </tr>
                  </tbody>
                </table>
              </div>
            </dd>
            <dt>
              <span class="term">
                <code class="varname">size</code>
              </span>
            </dt>
            <dd>
              <p>The size in bytes of the SVM buffer to be allocated.</p>
            </dd>
            <dt>
              <span class="term">
                <code class="varname">alignment</code>
              </span>
            </dt>
            <dd>
              <p>
                        The minimum alignment in bytes that is required for 
                        the newly created buffer’s 
                        memory region. It must be a power of two up to the 
                        largest data type supported by the OpenCL 
                        device. For the full profile, the largest data type 
                        is <span class="type">long16</span>. For the embedded profile, it is 
                        <span class="type">long16</span> if the device supports 64-bit 
                        integers; otherwise it is <span class="type">int16</span>. If 
                        alignment is 0, a 
                        default alignment will be used that is equal to 
                        the size of largest data type supported by the 
                        OpenCL implementation.
                    </p>
            </dd>
          </dl>
        </div>
      </div>
      <div class="refsect1">
        <a id="notes"></a>
        <h2>Notes</h2>
        <p>
            If <code class="constant">CL_MEM_SVM_FINE_GRAIN_BUFFER</code> is not 
            specified, the buffer can be created as a coarse 
            grained SVM allocation. Similarly, if <code class="constant">CL_MEM_SVM_ATOMICS</code> 
            is not specified, the buffer can be 
            created without support for SVM atomic 
            operations (refer to the OpenCL C++ kernel language and IL specifications).
        </p>
        <p>
            Calling <code class="function">clSVMAlloc</code> does not itself 
            provide consistency for the shared memory region. When 
            the host can’t use the SVM atomic operations, it 
            must rely on OpenCL’s guaranteed memory 
            consistency at synchronization points.
        </p>
        <p>
            For SVM to be used efficiently, the host and any 
            devices sharing a buffer containing virtual 
            memory pointers should have the same endianness. 
            If the context passed to <code class="function">clSVMAlloc</code> has 
            devices with mixed endianness and the OpenCL 
            implementation is unable to implement SVM 
            because of that mixed endianness, 
            <code class="function">clSVMAlloc</code> will fail and return NULL.
        </p>
        <p>
            Although SVM is generally not supported for image objects, 
            <a class="citerefentry" href="clCreateImage.html"><span class="citerefentry"><span class="refentrytitle">clCreateImage</span></span></a> 
            may create an image from a buffer (a 1D image from a buffer 
            or a 2D image from buffer) if the buffer specified
            in its image description parameter is a SVM 
            buffer. Such images have a linear memory 
            representation so their memory can be 
            shared using SVM. However, fine grained sharing and 
            atomics are not supported for image reads and writes in a kernel. 
        </p>
        <p>
            If <a class="citerefentry" href="clCreateBuffer.html"><span class="citerefentry"><span class="refentrytitle">clCreateBuffer</span></span></a> 
            is called with a pointer returned by 
            <code class="function">clSVMAlloc</code> as its 
            <code class="varname">host_ptr</code> argument, and 
            <code class="constant">CL_MEM_USE_HOST_PTR</code> is set in its <code class="varname">flags</code> argument, 
            <a class="citerefentry" href="clCreateBuffer.html"><span class="citerefentry"><span class="refentrytitle">clCreateBuffer</span></span></a> 
            will succeed and return a 
            valid non-zero buffer object as long as the <code class="varname">size</code> 
            argument to 
            <a class="citerefentry" href="clCreateBuffer.html"><span class="citerefentry"><span class="refentrytitle">clCreateBuffer</span></span></a> 
            is no larger than the 
            <code class="varname">size</code> argument passed in the original 
            <code class="function">clSVMAlloc</code> call. The new buffer object returned has the
            shared memory as the underlying storage. Locations in 
            the buffer's underlying shared memory
            can be operated on using atomic operations to the device's 
            level of support as defined in the
            memory model.
        </p>
      </div>
      <div class="refsect1">
        <a id="errors"></a>
        <h2>Errors</h2>
        <p>
          Returns a valid non-NULL shared virtual memory address if the SVM buffer is 
            successfully allocated. Otherwise, like malloc, it returns a NULL pointer 
            value. <code class="function">clSVMAlloc</code> will fail if:
        </p>
        <div class="itemizedlist">
          <ul class="itemizedlist" style="list-style-type: disc; ">
            <li class="listitem" style="list-style-type: disc"><code class="varname">context</code> is not a valid context.
            </li>
            <li class="listitem" style="list-style-type: disc"><code class="varname">flags</code> does not contain 
                <code class="constant">CL_MEM_SVM_FINE_GRAIN_BUFFER</code> but does contain
                <code class="constant">CL_MEM_SVM_ATOMICS</code>.
            </li>
            <li class="listitem" style="list-style-type: disc">
                Values specified in <code class="varname">flags</code> do not follow 
                rules described for supported values in the table above.
            </li>
            <li class="listitem" style="list-style-type: disc"><code class="constant">CL_MEM_SVM_FINE_GRAIN_BUFFER</code> or 
                <code class="constant">CL_MEM_SVM_ATOMICS</code> is specified in 
                <code class="varname">flags</code> and these are not supported 
                by at least one device in <code class="varname">context</code>.
            </li>
            <li class="listitem" style="list-style-type: disc">
                The values specified in <code class="varname">flags</code> are 
                not valid i.e. don’t match those defined in the table above.
            </li>
            <li class="listitem" style="list-style-type: disc"><code class="varname">size</code> is 0 or &gt; <code class="constant">CL_DEVICE_MAX_MEM_ALLOC_SIZE</code> 
                value for any device in <code class="varname">context</code>.
            </li>
            <li class="listitem" style="list-style-type: disc"><code class="varname">alignment</code> is not a power of two 
                or the OpenCL implementation cannot support the 
                specified alignment for at least one device in <code class="varname">context</code>.
            </li>
            <li class="listitem" style="list-style-type: disc">
                There was a failure to allocate resources.
            </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=175" target="OpenCL Spec">OpenCL Specification</a>
        </p>
      </div>
      <div class="refsect1">
        <a id="seealso"></a>
        <h2>Also see</h2>
        <p>
            <a class="citerefentry" href="clSVMFree.html"><span class="citerefentry"><span class="refentrytitle">clSVMFree</span></span></a>,
            <a class="citerefentry" href="sharedVirtualMemory.html"><span class="citerefentry"><span class="refentrytitle">Shared Virtual Memory 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>
