blob: 5e095ed641420b861f6924004dacc191b958ae06 [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>cl_khr_fp16</title>
<meta name="generator" content="DocBook XSL Stylesheets V1.78.1" />
<meta name="keywords" content="cl_khr_fp16" />
</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="cl_khr_fp16"></a>
<h1>cl_khr_fp16</h1>
<p>
Optional half floating-point support.
</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">
#pragma OPENCL EXTENSION cl_khr_fp16 : enable
</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="refsect1">
<a id="description"></a>
<h2>Description</h2>
<p>
This extension adds support for half scalar and vector types as built-in types that
can be used for arithmetic operations, conversions, etc. An application that wants
to use <span class="type">half</span> and <span class="type">half<em class="replaceable"><code>n</code></em></span> types will
need to include the directive shown above.
</p>
<p>
The list of built-in scalar and vector data types are extended to include the types
in the table below.
</p>
<p>
The built-in vector data types for
<span class="type">half<em class="replaceable"><code>n</code></em></span> are also declared as
appropriate types in the OpenCL API (and header files) that can be used by an
application. The following table describes the built-in vector data types for
<span class="type">half<em class="replaceable"><code>n</code></em></span> as defined in the OpenCL C programming
language and the corresponding data type available to the application:
</p>
<p>
</p>
<div class="informaltable">
<table border="1">
<colgroup>
<col align="left" class="col1" />
<col align="left" class="col2" />
<col align="left" class="col3" />
</colgroup>
<thead>
<tr>
<th align="left">Type in OpenCL Language</th>
<th align="left">Description</th>
<th align="left">API type for application</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left">half2</td>
<td align="left">2-component half-precision floating-point
vector</td>
<td align="left">cl_half2</td>
</tr>
<tr>
<td align="left">half3</td>
<td align="left">3-component half-precision floating-point vector</td>
<td align="left">cl_half3</td>
</tr>
<tr>
<td align="left">half4</td>
<td align="left">4-component half-precision floating-point
vector</td>
<td align="left">cl_half4</td>
</tr>
<tr>
<td align="left">half8</td>
<td align="left">8-component half-precision floating-point
vector</td>
<td align="left">cl_half8</td>
</tr>
<tr>
<td align="left">half16</td>
<td align="left">16-component half-precision floating-point
vector</td>
<td align="left">cl_half16</td>
</tr>
</tbody>
</table>
</div>
<p>
</p>
<p>
The relational, equality, logical and logical unary
<a class="citerefentry" href="operators.html"><span class="citerefentry"><span class="refentrytitle">operators</span></span></a> can be used
with <span class="type">half</span> scalar and <span class="type">half<em class="replaceable"><code>n</code></em></span>
vector types and shall produce a scalar <span class="type">int</span> and vector
<span class="type">short<em class="replaceable"><code>n</code></em></span> result respectively.
</p>
<p>
The OpenCL compiler accepts an <code class="constant">h</code> and <code class="constant">H</code> suffix
on floating point literals, indicating the literal is typed as a <span class="type">half</span>.
</p>
<p>
The macro names given in the following list must use the values specified. These constant
expressions are suitable for use in <code class="constant">#if</code> preprocessing directives.
</p>
<p>
The following table also describes the corresponding macro names available to the
application.
</p>
<div class="informaltable">
<table border="0">
<colgroup>
<col align="left" class="col1" />
<col align="left" class="col2" />
<col align="left" class="col3" />
</colgroup>
<thead>
<tr>
<th align="left">Macro in OpenCL Language</th>
<th align="left">value</th>
<th align="left">Macro for application</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left">
<code class="code">#define HALF_DIG</code>
</td>
<td align="left">
<code class="code">3</code>
</td>
<td align="left">
<code class="constant">HALF_DIG</code>
</td>
</tr>
<tr>
<td align="left">
<code class="code">#define HALF_MANT_DIG</code>
</td>
<td align="left">
<code class="code">11</code>
</td>
<td align="left">
<code class="constant">HALF_MANT_DIG</code>
</td>
</tr>
<tr>
<td align="left">
<code class="code">#define HALF_MAX_10_EXP</code>
</td>
<td align="left">
<code class="code">+4</code>
</td>
<td align="left">
<code class="constant">HALF_MAX_10_EXP</code>
</td>
</tr>
<tr>
<td align="left">
<code class="code">#define HALF_MAX_EXP</code>
</td>
<td align="left">
<code class="code">+16</code>
</td>
<td align="left">
<code class="constant">HALF_MAX_EXP</code>
</td>
</tr>
<tr>
<td align="left">
<code class="code">#define HALF_MIN_10_EXP</code>
</td>
<td align="left">
<code class="code">-4</code>
</td>
<td align="left">
<code class="constant">HALF_MIN_10_EXP</code>
</td>
</tr>
<tr>
<td align="left">
<code class="code">#define HALF_MIN_EXP</code>
</td>
<td align="left">
<code class="code">-13</code>
</td>
<td align="left">
<code class="constant">HALF_MIN_EXP</code>
</td>
</tr>
<tr>
<td align="left">
<code class="code">#define HALF_RADIX</code>
</td>
<td align="left">
<code class="code">2</code>
</td>
<td align="left">
<code class="constant">HALF_RADIX</code>
</td>
</tr>
<tr>
<td align="left">
<code class="code">#define HALF_MAX</code>
</td>
<td align="left">
<code class="code">0x1.ffcp15h</code>
</td>
<td align="left">
<code class="constant">HALF_MAX</code>
</td>
</tr>
<tr>
<td align="left">
<code class="code">#define HALF_MIN</code>
</td>
<td align="left">
<code class="code">0x1.0p-14h</code>
</td>
<td align="left">
<code class="constant">HALF_MIN</code>
</td>
</tr>
<tr>
<td align="left">
<code class="code">#define HALF_EPSILON</code>
</td>
<td align="left">
<code class="code">0x1.0p-10h</code>
</td>
<td align="left">
<code class="constant">HALF_EPSILON</code>
</td>
</tr>
</tbody>
</table>
</div>
<p>
The following constants are also available. They are of type <span class="type">half</span> and
are accurate within the precision of the <span class="type">half</span> type.
</p>
<div class="informaltable">
<table border="1">
<colgroup>
<col align="left" class="col1" />
<col align="left" class="col2" />
</colgroup>
<thead>
<tr>
<th align="left">Constant</th>
<th align="left">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left">
<code class="code">M_E_H</code>
</td>
<td align="left">Value of e</td>
</tr>
<tr>
<td align="left">
<code class="code">M_LOG2E_H</code>
</td>
<td align="left"> Value of log2 e</td>
</tr>
<tr>
<td align="left">
<code class="code">M_LOG10E_H</code>
</td>
<td align="left">Value of log10 e</td>
</tr>
<tr>
<td align="left">
<code class="code">M_LN2_H</code>
</td>
<td align="left">Value of ln 2</td>
</tr>
<tr>
<td align="left">
<code class="code">M_LN10_H</code>
</td>
<td align="left"> Value of ln 10</td>
</tr>
<tr>
<td align="left">
<code class="code">M_PI_H</code>
</td>
<td align="left"> Value of π</td>
</tr>
<tr>
<td align="left">
<code class="code">M_PI_2_H</code>
</td>
<td align="left">Value of π / 2</td>
</tr>
<tr>
<td align="left">
<code class="code">M_PI_4_H</code>
</td>
<td align="left">Value of π / 4</td>
</tr>
<tr>
<td align="left">
<code class="code">M_1_PI_H</code>
</td>
<td align="left">Value of 1 / π</td>
</tr>
<tr>
<td align="left">
<code class="code">M_2_PI_H</code>
</td>
<td align="left">Value of 2 / π</td>
</tr>
<tr>
<td align="left">
<code class="code">M_2_SQRTPI_H</code>
</td>
<td align="left">Value of 2 / √π</td>
</tr>
<tr>
<td align="left">
<code class="code">M_SQRT2_H</code>
</td>
<td align="left">Value of √2</td>
</tr>
<tr>
<td align="left">
<code class="code">M_SQRT1_2_H</code>
</td>
<td align="left">Value of 1 / √2</td>
</tr>
</tbody>
</table>
</div>
<p>
Ann application may query the configuration information using
the op-code <code class="constant">CL_DEVICE_HALF_FP_CONFIG</code> with
<a class="citerefentry" href="clGetDeviceInfo.html"><span class="citerefentry"><span class="refentrytitle">clGetDeviceInfo</span></span></a> for an
OpenCL device that supports half precision floating-point.
</p>
<h4><a id="id-1.5.14"></a>Conversions</h4>
<p>
The implicit conversion rules specified in section 6.2.1
now include the <span class="type">half</span> scalar and
<span class="type">half<em class="replaceable"><code>n</code></em></span>
vector data types.
</p>
<p>
The explicit casts described in section 6.2.2 are
extended to take a <span class="type">half</span> scalar data type and a
<span class="type">half<em class="replaceable"><code>n</code></em></span> vector data type.
</p>
<p>
The explicit conversion functions described in section
6.2.3 are extended to take a <span class="type">half</span> scalar
data type and a <span class="type">half<em class="replaceable"><code>n</code></em></span>
vector data type.
</p>
<p>
The as_typen()
function for re-interpreting types as described in section
6.2.4.2 is extended to allow conversion-free casts between
<span class="type">short<em class="replaceable"><code>n</code></em></span>,
<span class="type">ushort<em class="replaceable"><code>n</code></em></span> and
<span class="type">half<em class="replaceable"><code>n</code></em></span>
scalar and vector data types.
</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.1-extensions.pdf#page=12" target="OpenCL Spec">OpenCL Specification</a>
</p>
</div>
<div class="refsect1">
<a id="seealso"></a>
<h2>Also see</h2>
<p>
<a class="citerefentry" href="EXTENSION.html"><span class="citerefentry"><span class="refentrytitle">EXTENSION</span></span></a>,
<a class="citerefentry" href="clGetDeviceInfo.html"><span class="citerefentry"><span class="refentrytitle">clGetDeviceInfo</span></span></a>,
<a class="citerefentry" href="mathFunctions.html"><span class="citerefentry"><span class="refentrytitle">mathFunctions</span></span></a>,
<a class="citerefentry" href="commonFunctions.html"><span class="citerefentry"><span class="refentrytitle">commonFunctions</span></span></a>,
<a class="citerefentry" href="geometricFunctions.html"><span class="citerefentry"><span class="refentrytitle">geometricFunctions</span></span></a>,
<a class="citerefentry" href="relationalFunctions.html"><span class="citerefentry"><span class="refentrytitle">relationalFunctions</span></span></a>,
<a class="citerefentry" href="vectorDataLoadandStoreFunctions.html"><span class="citerefentry"><span class="refentrytitle">vectorDataLoadandStoreFunctions</span></span></a>,
<a class="citerefentry" href="asyncCopyFunctions.html"><span class="citerefentry"><span class="refentrytitle">asyncCopyFunctions</span></span></a>,
<a class="citerefentry" href="imageFunctions.html"><span class="citerefentry"><span class="refentrytitle">imageFunctions</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>