Name Strings

    cl_qcom_ext_host_ptr_iocoherent

Contributors

    Balaji Calidas, Qualcomm Technologies, Inc.
    Manali Torpe, Qualcomm Innovation Center, Inc.
    Sreelakshmi Haridas Maruthur, Qualcomm Innovation Center, Inc.

Contact

    bcalidas at qti dot qualcomm dot com

Version

    Version 4, 2018/03/06

Number

    OpenCL Extension #53

Status

    Shipping

Extension Type

    OpenCL device extension

Dependencies

    OpenCL 1.1 is required.
    cl_qcom_ext_host_ptr is required.

    This extension extends the functionality of cl_qcom_ext_host_ptr.

Overview

    This extension extends the functionality provided by cl_qcom_ext_host_ptr by
    adding a new host cache policy. It allows applications to specify a new
    value, CL_MEM_HOST_IOCOHERENT_QCOM, for
    cl_mem_ext_host_ptr::host_cache_policy. When the application selects this
    value for host cache policy, the imported allocation is mapped as
    io-coherent for the GPU. This in turn avoids the need for the OpenCL driver
    to explicitly issue CPU cache operation calls. Although GPU performance can
    be slower in some cases for io-coherent allocations, the overall performance
    can improve due to the elimination of explicit CPU cache operations.

Header File

    cl_ext.h

New Tokens

    Modification to handling of <host_ptr> argument of clCreateBuffer,
    clCreateImage2D and clCreateImage3D when CL_MEM_EXT_HOST_PTR_QCOM is
    specified in the <flags> argument.

    New accepted value for cl_mem_ext_host_ptr::host_cache_policy:

        CL_MEM_HOST_IOCOHERENT_QCOM                0x40A9

    As described in the cl_qcom_ext_host_ptr spec, when CL_MEM_EXT_HOST_PTR_QCOM
    is enabled in the <flags> argument, then <host_ptr> is interpreted as a
    pointer to cl_mem_ext_host_ptr. The application must initialize
    cl_mem_ext_host_ptr::host_cache_policy to one of CL_MEM_HOST_UNCACHED_QCOM,
    CL_MEM_HOST_WRITEBACK_QCOM, or CL_MEM_HOST_IOCOHERENT_QCOM according to the
    cache policy used in the host for this memory allocation.
    CL_MEM_HOST_IOCOHERENT_QCOM can only be specified when the memory was
    originally allocated as cached. Use of this value with an uncached
    allocation will lead to undefined results.

Revision History

    Revision 1, 2018/01/03: Initial version.
    Revision 2, 2018/01/15: Minor edits.
    Revision 3, 2018/01/19: Formatting and misc changes. No functional changes.
    Revision 4, 2018/03/06: Corrected token value.

