| <?xml version="1.0" encoding="UTF-8"?> | 
 | <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook MathML Module V1.1b1//EN" | 
 |               "http://www.oasis-open.org/docbook/xml/mathml/1.1CR1/dbmathml.dtd"> | 
 |  | 
 | <refentry> | 
 |     <refentryinfo> | 
 |         <keywordset> | 
 |             <keyword>cl_khr_fp16</keyword> | 
 |         </keywordset> | 
 |     </refentryinfo> | 
 |  | 
 |     <refmeta> | 
 |         <refentrytitle>cl_khr_fp16</refentrytitle> | 
 |  | 
 |         <refmiscinfo> | 
 |             <copyright> | 
 |                 <year>2007-2013</year> | 
 |                 <holder>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.</holder> | 
 |             </copyright> | 
 |         </refmiscinfo> | 
 |         <manvolnum>3</manvolnum> | 
 |     </refmeta> | 
 |  | 
 | <!-- ================================ SYNOPSIS --> | 
 |  | 
 |     <refnamediv id="cl_khr_fp16"> | 
 |         <refname>cl_khr_fp16</refname> | 
 |  | 
 |         <refpurpose> | 
 |             Optional half floating-point support. | 
 |         </refpurpose> | 
 |     </refnamediv> | 
 |  | 
 |     <refsect2 id="synopsis"> | 
 |         <title> | 
 |         </title> | 
 |  | 
 |         <informaltable frame="none"> | 
 |             <tgroup cols="1" align="left" colsep="0" rowsep="0"> | 
 |                 <colspec colname="col1" colnum="1" /> | 
 |                 <tbody> | 
 |                     <row> | 
 |                         <entry> | 
 | #pragma OPENCL EXTENSION cl_khr_fp16 : enable | 
 |                         </entry> | 
 |                     </row> | 
 |                 </tbody> | 
 |             </tgroup> | 
 |         </informaltable> | 
 |     </refsect2> | 
 |  | 
 | <!-- ================================ DESCRIPTION  --> | 
 |  | 
 |     <refsect1 id="description"><title>Description</title> | 
 |         <para> | 
 |           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 <type>half</type> and <type>half<replaceable>n</replaceable></type> types will | 
 |           need to include the directive shown above. | 
 |         </para> | 
 |  | 
 |         <para> | 
 |           The list of built-in scalar and vector data types are extended to include the types | 
 |           in the table below. | 
 |         </para> | 
 |  | 
 |         <para> | 
 |           The built-in vector data types for  | 
 |           <type>half<replaceable>n</replaceable></type> 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 | 
 |           <type>half<replaceable>n</replaceable></type> as defined in the OpenCL C programming | 
 |           language and the corresponding data type available to the application: | 
 |         </para> | 
 |  | 
 |         <para> | 
 |           <informaltable frame="all"> <tgroup cols="3" align="left" colsep="1" rowsep="1"> | 
 |           <colspec colname="col1" colnum="1" /> <colspec colname="col2" colnum="2" /> <colspec | 
 |           colname="col3" colnum="3" /> | 
 |           <thead> <row> <entry>Type in OpenCL Language</entry> <entry>Description</entry> | 
 |           <entry>API type for application</entry> </row> </thead> | 
 |           <tbody> <row> <entry>half2</entry> <entry>2-component half-precision floating-point | 
 |           vector</entry> <entry>cl_half2</entry> </row> <row> <entry>half3</entry> | 
 |           <entry>3-component half-precision floating-point vector</entry> <entry>cl_half3</entry> | 
 |           </row> <row> <entry>half4</entry> <entry>4-component half-precision floating-point | 
 |           vector</entry> <entry>cl_half4</entry> </row> | 
 |           <row> <entry>half8</entry> <entry>8-component half-precision floating-point | 
 |           vector</entry> <entry>cl_half8</entry> </row> | 
 |           <row> <entry>half16</entry> <entry>16-component half-precision floating-point | 
 |           vector</entry> <entry>cl_half16</entry> </row> | 
 |           </tbody> </tgroup> </informaltable> | 
 |         </para> | 
 |  | 
 |         <para> | 
 |           The relational, equality, logical and logical unary | 
 |           <citerefentry><refentrytitle>operators</refentrytitle></citerefentry> can be used | 
 |           with <type>half</type> scalar and <type>half<replaceable>n</replaceable></type> | 
 |           vector types and shall produce a scalar <type>int</type> and vector | 
 |           <type>short<replaceable>n</replaceable></type> result respectively. | 
 |         </para> | 
 |  | 
 |         <para> | 
 |           The OpenCL compiler accepts an <constant>h</constant> and <constant>H</constant> suffix | 
 |           on floating point literals, indicating the literal is typed as a <type>half</type>. | 
 |         </para> | 
 |  | 
 |         <para> | 
 |           The macro names given in the following list must use the values specified. These constant | 
 |           expressions are suitable for use in <constant>#if</constant> preprocessing directives. | 
 |         </para> | 
 |  | 
 |         <para> | 
 |           The following table also describes the corresponding macro names available to the | 
 |           application. | 
 |         </para> | 
 |  | 
 |         <informaltable frame="none"> | 
 |             <tgroup cols="3" align="left" colsep="0" rowsep="0"> | 
 |                 <colspec colname="col1" colnum="1" /> | 
 |                 <colspec colname="col2" colnum="2" /> | 
 |                 <colspec colname="col3" colnum="3" /> | 
 |  | 
 |                 <thead> | 
 |                     <row> | 
 |                         <entry>Macro in OpenCL Language</entry> | 
 |                         <entry>value</entry> | 
 |                         <entry>Macro for application</entry> | 
 |                     </row> | 
 |                 </thead> | 
 |  | 
 |                 <tbody> | 
 |                     <row> | 
 |                       <entry><code>#define HALF_DIG</code></entry> | 
 |                       <entry><code>3</code></entry> | 
 |                       <entry><constant>HALF_DIG</constant></entry> | 
 |                     </row> | 
 |  | 
 |                     <row> | 
 |                       <entry><code>#define HALF_MANT_DIG</code></entry> | 
 |                       <entry><code>11</code></entry> | 
 |                       <entry><constant>HALF_MANT_DIG</constant></entry> | 
 |                     </row> | 
 |  | 
 |                     <row> | 
 |                       <entry><code>#define HALF_MAX_10_EXP</code></entry> | 
 |                       <entry><code>+4</code></entry> | 
 |                       <entry><constant>HALF_MAX_10_EXP</constant></entry> | 
 |                     </row> | 
 |  | 
 |                     <row> | 
 |                       <entry><code>#define HALF_MAX_EXP</code></entry> | 
 |                       <entry><code>+16</code></entry> | 
 |                       <entry><constant>HALF_MAX_EXP</constant></entry> | 
 |                     </row> | 
 |  | 
 |                     <row> | 
 |                       <entry><code>#define HALF_MIN_10_EXP</code></entry> | 
 |                       <entry><code>-4</code></entry> | 
 |                       <entry><constant>HALF_MIN_10_EXP</constant></entry> | 
 |                     </row> | 
 |  | 
 |                     <row> | 
 |                       <entry><code>#define HALF_MIN_EXP</code></entry> | 
 |                       <entry><code>-13</code></entry> | 
 |                       <entry><constant>HALF_MIN_EXP</constant></entry> | 
 |                     </row> | 
 |  | 
 |                     <row> | 
 |                       <entry><code>#define HALF_RADIX</code></entry> | 
 |                       <entry><code>2</code></entry> | 
 |                       <entry><constant>HALF_RADIX</constant></entry> | 
 |                     </row> | 
 |  | 
 |                     <row> | 
 |                       <entry><code>#define HALF_MAX</code></entry> | 
 |                       <entry><code>0x1.ffcp15h</code></entry> | 
 |                       <entry><constant>HALF_MAX</constant></entry> | 
 |                     </row> | 
 |  | 
 |                     <row> | 
 |                       <entry><code>#define HALF_MIN</code></entry> | 
 |                       <entry><code>0x1.0p-14h</code></entry> | 
 |                       <entry><constant>HALF_MIN</constant></entry> | 
 |                     </row> | 
 |  | 
 |                     <row> | 
 |                       <entry><code>#define HALF_EPSILON</code></entry> | 
 |                       <entry><code>0x1.0p-10h</code></entry> | 
 |                       <entry><constant>HALF_EPSILON</constant></entry> | 
 |                     </row> | 
 |                 </tbody> | 
 |             </tgroup> | 
 |         </informaltable> | 
 |  | 
 |         <para> | 
 |           The following constants are also available. They are of type <type>half</type> and | 
 |           are accurate within the precision of the <type>half</type> type. | 
 |         </para> | 
 |  | 
 |         <informaltable frame="all"> | 
 |             <tgroup cols="2" align="left" colsep="1" rowsep="1"> | 
 |                 <colspec colname="col1" colnum="1" /> | 
 |                 <colspec colname="col2" colnum="2" /> | 
 |  | 
 |                 <thead> | 
 |                     <row> | 
 |                         <entry>Constant</entry> | 
 |                         <entry>Description</entry> | 
 |                     </row> | 
 |                 </thead> | 
 |  | 
 |                 <tbody> | 
 |                     <row><entry><code>M_E_H</code></entry>       <entry>Value of e</entry></row> | 
 |                     <row><entry><code>M_LOG2E_H</code></entry>   <entry> Value of log2 e</entry></row> | 
 |                     <row><entry><code>M_LOG10E_H</code></entry>  <entry>Value of log10 e</entry></row> | 
 |                     <row><entry><code>M_LN2_H</code></entry>     <entry>Value of ln 2</entry></row> | 
 |                     <row><entry><code>M_LN10_H</code></entry>    <entry> Value of ln 10</entry></row> | 
 |                     <row><entry><code>M_PI_H</code></entry>      <entry> Value of π</entry></row> | 
 |                     <row><entry><code>M_PI_2_H</code></entry>    <entry>Value of π / 2</entry></row> | 
 |                     <row><entry><code>M_PI_4_H</code></entry>    <entry>Value of π / 4</entry></row> | 
 |                     <row><entry><code>M_1_PI_H</code></entry>    <entry>Value of 1 / π</entry></row> | 
 |                     <row><entry><code>M_2_PI_H</code></entry>    <entry>Value of 2 / π</entry></row> | 
 |                     <row><entry><code>M_2_SQRTPI_H</code></entry><entry>Value of 2 / √π</entry></row> | 
 |                     <row><entry><code>M_SQRT2_H</code></entry>   <entry>Value of √2</entry></row> | 
 |                     <row><entry><code>M_SQRT1_2_H</code></entry> <entry>Value of 1 / √2</entry></row> | 
 |                 </tbody> | 
 |             </tgroup> | 
 |         </informaltable> | 
 |  | 
 |         <para> | 
 |           Ann application may query the configuration information using | 
 |           the op-code <constant>CL_DEVICE_HALF_FP_CONFIG</constant> with | 
 |           <citerefentry><refentrytitle>clGetDeviceInfo</refentrytitle></citerefentry> for an | 
 |           OpenCL device that supports half precision floating-point. | 
 |         </para> | 
 |  | 
 |         <bridgehead>Conversions</bridgehead> | 
 |  | 
 |         <para> | 
 |             The implicit conversion rules specified in section 6.2.1  | 
 |             now include the <type>half</type> scalar and  | 
 |             <type>half<replaceable>n</replaceable></type> | 
 |             vector data types. | 
 |         </para> | 
 |  | 
 |         <para> | 
 |             The explicit casts described in section 6.2.2 are  | 
 |             extended to take a <type>half</type> scalar data type and a  | 
 |             <type>half<replaceable>n</replaceable></type> vector data type. | 
 |         </para> | 
 |  | 
 |         <para> | 
 |             The explicit conversion functions described in section  | 
 |             6.2.3 are extended to take a <type>half</type> scalar  | 
 |             data type and a <type>half<replaceable>n</replaceable></type>  | 
 |             vector data type. | 
 |         </para> | 
 |  | 
 |         <para> | 
 |             The as_typen()  | 
 |             function for re-interpreting types as described in section  | 
 |             6.2.4.2 is extended to allow conversion-free casts between  | 
 |             <type>short<replaceable>n</replaceable></type>,  | 
 |             <type>ushort<replaceable>n</replaceable></type> and  | 
 |             <type>half<replaceable>n</replaceable></type>  | 
 |             scalar and vector data types. | 
 |         </para> | 
 |  | 
 |     </refsect1> | 
 |  | 
 | <!-- ================================ EXAMPLE  --> | 
 | <!-- DO NOT DELETE IN CASE AN EXAMPLE IS ADDED IN THE FUTURE --> | 
 | <!-- | 
 |     <refsect2 id="example1"> | 
 |         <title> | 
 |             Example | 
 |         </title> | 
 |  | 
 |         <informaltable frame="none"> | 
 |             <tgroup cols="1" align="left" colsep="0" rowsep="0"> | 
 |                 <colspec colname="col1" colnum="1" /> | 
 |                 <tbody> | 
 |                     <row> | 
 |                         <entry> | 
 |                             Example goes here - it will be set in "code" type with white space preserved. | 
 |                         </entry> | 
 |                     </row> | 
 |                 </tbody> | 
 |             </tgroup> | 
 |         </informaltable> | 
 |     </refsect2> | 
 | --> | 
 |  | 
 | <!-- ================================ SPECIFICATION  --> | 
 | <!-- Set the "uri" attribute in the <olink /> element to the "named destination" for the PDF page | 
 | --> | 
 |     <refsect1 id="specification"><title>Specification</title> | 
 |         <para> | 
 |             <imageobject> | 
 |                 <imagedata fileref="pdficon_small1.gif" format="gif" /> | 
 |             </imageobject> | 
 |  | 
 |             <olink uri="cl_khr_fp16">OpenCL Specification</olink> | 
 |         </para> | 
 |     </refsect1> | 
 |  | 
 | <!-- ================================ ALSO SEE  --> | 
 |  | 
 |     <refsect1 id="seealso"><title>Also see</title> | 
 |         <para> | 
 |             <citerefentry><refentrytitle>EXTENSION</refentrytitle></citerefentry>, | 
 |             <citerefentry><refentrytitle>clGetDeviceInfo</refentrytitle></citerefentry>, | 
 |             <citerefentry><refentrytitle>mathFunctions</refentrytitle></citerefentry>, | 
 |             <citerefentry><refentrytitle>commonFunctions</refentrytitle></citerefentry>, | 
 |             <citerefentry><refentrytitle>geometricFunctions</refentrytitle></citerefentry>, | 
 |             <citerefentry><refentrytitle>relationalFunctions</refentrytitle></citerefentry>, | 
 |             <citerefentry><refentrytitle>vectorDataLoadandStoreFunctions</refentrytitle></citerefentry>, | 
 |             <citerefentry><refentrytitle>asyncCopyFunctions</refentrytitle></citerefentry>, | 
 |             <citerefentry><refentrytitle>imageFunctions</refentrytitle></citerefentry> | 
 |         </para> | 
 |     </refsect1> | 
 |  | 
 | <!-- ============================== COPYRIGHT --> | 
 | <!-- Content included from copyright.inc.xsl --> | 
 |  | 
 |     <refsect3 id="Copyright"><title></title> | 
 |         <imageobject> | 
 |                 <imagedata fileref="KhronosLogo.jpg" format="jpg" /> | 
 |         </imageobject> | 
 |         <para /> | 
 |     </refsect3> | 
 |  | 
 | <!-- 20-Dec-2013, rev. 19 --> | 
 | </refentry> | 
 |  |