Name Strings

    cl_amd_fp64

Contributors

    Benedict Gaster, AMD
    Michael Houston, AMD
    Brian Sumner, AMD
    Micah Villmow, AMD
    Bixia Zheng, AMD

Contact

    Brian Sumner, brian 'dot' sumner 'at' amd 'dot' com

IP Status

    No known IP issues.

Version

    Version 0, March 26, 2010

Number

    OpenCL Extension #8

Status

    Complete, shipping as part of ATi Stream SDK 2.1

Extension Type

    OpenCL device extension

Dependencies

    OpenCL 1.0 is required

Overview

    This extension provides a subset of the functionality of that provided
    by the cl_khr_fp64 extension.  When enabled, the compiler recognizes
    the double scalar and vector types, compiles expressions involving
    those types, and accepts calls to all builtin functions enabled by
    the cl_khr_fp64 extension.  However, this extension does not guarantee
    that all cl_khr_fp64 built in functions are implemented and does not
    guarantee that the built in functions that have been implemented would
    be considered conformant to the cl_khr_fp64 extension.

Header File

    None

New Procedures and Functions

    None

New Tokens

    None

Additions to Chapter 9 of the OpenCL 1.0 Specification

    A new section is added to chapter 9 which replicates the content of
    section 9.3 with cl_khr_fp64 replaced with cl_amd_fp64 everywhere
    it appears, a statment in the introduction that not all built in
    functions may be implemented, and that the set of implemented
    functions will differ depending on the AMD Stream Release version,
    and the omission of subsections corresponding to 9.3.8 IEEE754
    compliance and 9.3.9 Relative Error as ULPs.

Interactions with other extensions

    None

Issues

    None

Sample Code

    None

Conformance Tests

    None

Revision History

    Version 1, March 26, 2010 - Initial revision
