blob: e600270a34e9082b26aa6359266a91c4f05dbfe6 [file] [log] [blame]
<?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>Atomic Functions</title>
<meta name="generator" content="DocBook XSL Stylesheets V1.79.1" />
<meta name="keywords" content="Atomic Functions" />
</head>
<body>
<div class="refentry">
<a id="id-1"></a>
<div class="titlepage"></div>
<div xmlns="" class="refnamediv">
<h1>Atomic Functions</h1>
<p>
The atomic functions are shown below.
Click an item in the table below for details about that function.
</p>
</div>
<div class="refsect1">
<a id="springboard"></a>
<h2></h2>
<div class="informaltable">
<table class="informaltable" border="1">
<colgroup>
<col align="left" class="col1" />
<col align="left" class="col2" />
</colgroup>
<tbody>
<tr>
<td align="left">
<a class="citerefentry" href="atomic_init.html"><span class="citerefentry"><span class="refentrytitle">atomic_init</span></span></a>
</td>
<td align="left">
<a class="citerefentry" href="atomic_work_item_fence.html"><span class="citerefentry"><span class="refentrytitle">atomic_work_item_fence</span></span></a>
</td>
</tr>
<tr>
<td align="left">
<a class="citerefentry" href="atomic_store.html"><span class="citerefentry"><span class="refentrytitle">atomic_store</span></span></a>
</td>
<td align="left">
<a class="citerefentry" href="atomic_store.html"><span class="citerefentry"><span class="refentrytitle">atomic_store_explicit</span></span></a>
</td>
</tr>
<tr>
<td align="left">
<a class="citerefentry" href="atomic_exchange.html"><span class="citerefentry"><span class="refentrytitle">atomic_exchange</span></span></a>
</td>
<td align="left">
<a class="citerefentry" href="atomic_exchange.html"><span class="citerefentry"><span class="refentrytitle">atomic_exchange_explicit</span></span></a>
</td>
</tr>
<tr>
<td align="left">
<a class="citerefentry" href="atomic_compare_exchange.html"><span class="citerefentry"><span class="refentrytitle">atomic_compare_exchange_strong</span></span></a>
</td>
<td align="left">
<a class="citerefentry" href="atomic_compare_exchange.html"><span class="citerefentry"><span class="refentrytitle">atomic_compare_exchange_strong_explicit</span></span></a>
</td>
</tr>
<tr>
<td align="left">
<a class="citerefentry" href="atomic_compare_exchange.html"><span class="citerefentry"><span class="refentrytitle">atomic_compare_exchange_weak</span></span></a>
</td>
<td align="left">
<a class="citerefentry" href="atomic_compare_exchange.html"><span class="citerefentry"><span class="refentrytitle">atomic_compare_exchange_weak_explicit</span></span></a>
</td>
</tr>
<tr>
<td align="left">
<a class="citerefentry" href="atomic_fetch_key.html"><span class="citerefentry"><span class="refentrytitle">atomic_fetch_key</span></span></a>
</td>
<td align="left">
<a class="citerefentry" href="atomic_fetch_key.html"><span class="citerefentry"><span class="refentrytitle">atomic_fetch_key_explicit</span></span></a>
</td>
</tr>
<tr>
<td align="left">
<a class="citerefentry" href="atomic_flag_test_and_set.html"><span class="citerefentry"><span class="refentrytitle">atomic_flag_test_and_set</span></span></a>
</td>
<td align="left">
<a class="citerefentry" href="atomic_flag_test_and_set.html"><span class="citerefentry"><span class="refentrytitle">atomic_flag_test_and_set_explicit</span></span></a>
</td>
</tr>
<tr>
<td align="left">
<a class="citerefentry" href="atomic_flag_clear.html"><span class="citerefentry"><span class="refentrytitle">atomic_flag_clear</span></span></a>
</td>
<td align="left">
<a class="citerefentry" href="atomic_flag_clear.html"><span class="citerefentry"><span class="refentrytitle">atomic_flag_clear_explicit</span></span></a>
</td>
</tr>
</tbody>
</table>
</div>
<h4><a id="id-1.4.3"></a>64-bit Atomics</h4>
<p>
The optional extension
<a class="citerefentry" href="cl_khr_int64_base_atomics.html"><span class="citerefentry"><span class="refentrytitle">cl_khr_int64_base_atomics</span></span></a>
implements atomic operations on 64-bit signed
and unsigned integers to locations in <code class="code">__global</code>
and <code class="code">__local</code> memory.
</p>
<div class="informaltable">
<table class="informaltable" border="1">
<colgroup>
<col align="left" class="col1" />
<col align="left" class="col2" />
</colgroup>
<tbody></tbody>
</table>
</div>
<p>
The <a class="citerefentry" href="cl_khr_int64_extended_atomics.html"><span class="citerefentry"><span class="refentrytitle">cl_khr_int64_extended_atomics</span></span></a>
extension enables additional atomic functions using types <span class="type">long</span>
and <span class="type">unsigned long</span>. An application that wants to use
this extension will need to include the <code class="code">#pragma OPENCL EXTENSION
<a class="citerefentry" href="cl_khr_int64_extended_atomics.html"><span class="citerefentry"><span class="refentrytitle">cl_khr_int64_extended_atomics</span></span></a>
: enable</code> in the OpenCL program source.
</p>
<div class="informaltable">
<table class="informaltable" border="1">
<colgroup>
<col align="left" class="col1" />
<col align="left" class="col2" />
<col align="left" class="col3" />
</colgroup>
<tbody></tbody>
</table>
</div>
</div>
<div class="refsect1">
<a id="description"></a>
<h2>Description</h2>
<p>
As of OpenCL version 1.1,
<code class="code">cl_khr_global_int32_base_atomics</code>,
<code class="code">cl_khr_global_int32_extended_atomics</code>,
<code class="code">cl_khr_local_int32_base_atomics</code> and
<code class="code">cl_khr_local_int32_extended_atomics</code>
extensions are core features. The built-in atomic function names are changed to use the
<code class="code">atomic_ prefix</code> instead of <code class="code">atom_</code>.
</p>
<p>
The list of supported atomic type names are:
</p>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: disc; ">
<li class="listitem">
<span class="type">atomic_int</span>
</li>
<li class="listitem">
<span class="type">atomic_uint</span>
</li>
<li class="listitem">
<span class="type">atomic_long</span>
</li>
<li class="listitem">
<span class="type">atomic_ulong</span>
</li>
<li class="listitem">
<span class="type">atomic_float</span>
</li>
<li class="listitem">
<span class="type">atomic_double</span>
</li>
<li class="listitem">
<span class="type">atomic_intptr_t</span>
</li>
<li class="listitem">
<span class="type">atomic_uintptr_t</span>
</li>
<li class="listitem">
<span class="type">atomic_size_t</span>
</li>
<li class="listitem">
<span class="type">atomic_ptrdiff_t</span>
</li>
</ul>
</div>
<p>
The <span class="type">atomic_long</span> and <span class="type">atomic_ulong</span> types are supported if the
<a class="citerefentry" href="cl_khr_int64_base_atomics.html"><span class="citerefentry"><span class="refentrytitle">cl_khr_int64_base_atomics</span></span></a> and
<a class="citerefentry" href="cl_khr_int64_extended_atomics.html"><span class="citerefentry"><span class="refentrytitle">cl_khr_int64_extended_atomics</span></span></a>
extensions are supported.
</p>
<p>
The <span class="type">atomic_double</span> type is only supported if double precision is supported and the
<a class="citerefentry" href="cl_khr_int64_base_atomics.html"><span class="citerefentry"><span class="refentrytitle">cl_khr_int64_base_atomics</span></span></a> and
<a class="citerefentry" href="cl_khr_int64_extended_atomics.html"><span class="citerefentry"><span class="refentrytitle">cl_khr_int64_extended_atomics</span></span></a>
extensions are supported.
</p>
<p>
If the device address space is 64-bits, the data types
<span class="type">atomic_intptr_t</span>, <span class="type">atomic_uintptr_t</span>,
<span class="type">atomic_size_t</span> and <span class="type">atomic_ptrdiff_t</span> are supported if the
<a class="citerefentry" href="cl_khr_int64_base_atomics.html"><span class="citerefentry"><span class="refentrytitle">cl_khr_int64_base_atomics</span></span></a> and
<a class="citerefentry" href="cl_khr_int64_extended_atomics.html"><span class="citerefentry"><span class="refentrytitle">cl_khr_int64_extended_atomics</span></span></a>
extensions are supported.
</p>
<p>
Arguments to a kernel can be declared to be a pointer to the above atomic types or the
<span class="type">atomic_flag</span> type.
</p>
<p>
The representation of atomic integer, floating-point
and pointer types have the same size as their
corresponding regular types. The <span class="type">atomic_flag</span>
type must be implemented as a 32-bit integer.
</p>
</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.0-openclc.pdf#namedest=atomicFunctions" target="OpenCL Spec">OpenCL Specification</a>
</p>
</div>
<div class="refsect1">
<a id="seealso"></a>
<h2>Also see</h2>
<p>
<a class="citerefentry" href="memory_order.html"><span class="citerefentry"><span class="refentrytitle">memory_order</span></span></a>,
<a class="citerefentry" href="memory_scope.html"><span class="citerefentry"><span class="refentrytitle">memory_scope</span></span></a>,
<a class="citerefentry" href="atomic_flag.html"><span class="citerefentry"><span class="refentrytitle">atomic_flag type</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>