Skip to content

oneAPI DPC++ Compiler 2020-06

Choose a tag to compare

@tfzhu tfzhu released this 25 Jun 07:18
67fdb04

New features

Improvements

SYCL Compiler

  • Now when -fintelfpga option is passed, the dependency file is created in
    the temporary files location instead of input source file location [7df381a]
  • Made -std=c++17 the default for DPC++ [3192ee7]
  • Added support for kernel name types templated using enumerations
    [e7020a1][f9226d2][125b05c][07e8d8f]
  • Added a diagnostic on attempt to use host built-in functions inside device
    code [2a4c1c8]
  • Added diagnostics on attempt to use sycl::accessor created for
    unsupported types in the device code [6da42a0]
  • Aligned sizeof(long double) between host and device code [87e6240]
  • The pragma spelling for SYCL-specific attributes except
    cl::reqd_work_group_size are rejected now [8fe2846]
  • Added template parameter support for cl::intel_reqd_sub_group_size
    attribute [0ae9729]
  • Added support for more math builtins for PTX target [9370549]
  • Added support for struct members and pointers in intelfpga::ivdep
    attribute [358ec04]
  • Added support for all builtins from integer and shared categories for PTX
    target [f0a4fe2]
  • Improved handling of linker inputs for static lib processing [ed2846f]
  • Dependency files are not generated by default when compiling using
    -fsycl -fintelfpga options now [24726df]

SYCL Library

  • Updated the implementation to align with changes in
    SubGroup extension [9d4c284]
  • sycl::ordered_queue class has been removed [875347a]
  • Added support of rounding modes for floating and integer types in
    sycl::vec::convert [096d0a0]
  • Added support for USM vars and placeholder accessors passed to reduction
    version of sycl::handler::parallel_for [94cb022][2e73da7]
  • Added support of sycl::intel::sub_group::load/store which take
    sycl::multi_ptr with sycl::access::address_space::local_space [0f5b55b]
  • Added a diagnostic on attempt to recompile an AOT compiled program using
    sycl::program API [b031186]
  • Started using custom CUDA context by default as it shows better performance
    results [9d45ead]
  • Prevented NVIDIA OpenCL platform to be selected by a SYCL application
    [7146426]
  • Adjusted the diagnostic message on attempt to use local size which is
    greater than global size to be more informative [894c10d]
  • Added a cache for PI plugins, so subsequent calls for sycl::device
    creation should be cheaper [03dd60d]
  • A SYCL program will be aborted now if program linking is requested when
    using L0 plugin. This is done because L0 doesn't support program linking
    [d4a5b71]
  • Added a diagnostic on attempt to use sycl::program::set_spec_constant when
    the program is already in compiled or linked state [e2e3d3d]
  • Improved sycl::stream class implementation on the device side in order to
    reduce local memory consumption [b838f0e]

Documentation

Bug fixes

SYCL Compiler

  • Fixed device code compile options passing which could lead to
    CL_INVALID_COMPILER_OPTIONS error [57bad9e]
  • Fixed a problem with creating a queue for FPGA device as a global inline
    variable [357e9c8]
  • Fixed an issue with that functions which are marked with SYCL_EXTERNAL are
    not participate in attribute propogation and conflicting attributes checking
    [0098eab]
  • Fixed an issue which could lead to problems when a kernel name contains a
    CVR qualified type [62e2f3b]
  • Fixed file processing when using -fsycl-link, now the generated object
    file can be linked by a non-SYCL enabled compiler/linker [2623abe]

SYCL Library

  • Fixed an issue with map/unmap events which caused problems with read only
    buffer accessors in CUDA backend [bf1b5b6]
  • Fixed errors happened when using sycl::handler::copy with const void*,
    void* or a sycl::accessor for a type with const qualifier [ddc0c9d]
  • Fixed an issue with copying memory to itself during sycl::buffer copyback
    [4bf22cc]
  • Fixed a possible deadlock which could happen when simultaneously submitting
    and waiting for kernels from multiple threads on Windows [ebace77]
  • Fixed a problem which caused device with a negative score to be still
    selected [7146426][855d214]
  • Fixed memleak which happened when using sycl::program::get_kernel
    [ccefc93]
  • Fixed memory copy being wrongly asynchronous which could cause data races
    on CUDA backend [4f0a3df]
  • Fixed a race which could happen when waiting for the same event from
    multiple threads [5737ad9]
  • Fixed errors which happened when using half or double types in reduction
    version of sycl::handler::parallel_for
  • Fixed sycl::device::get_info<sycl::info::device::mem_base_addr_align>
    query which was returning incorrect result for CUDA plugin [a6d03f3]
  • Fixed incorrect behavior of a sycl::buffer created with non-writable host
    data(e.g. const int *) on CUDA backend [49b6223]
  • A bunch of fixes to reduction version of sycl::handler::parallel_for:
    • Enabled operator*, operator+, operator|, operator&, operator^=
      for corresponding transparent functors used in reduction
    • Fixed the case when reduction object is passed as an R-value
    • Allowed identity-less constructors for reductions with transparent
      functors
    • Replaced some auto declarations with Reduction::result_type and added
      intermediate assignments/casts to avoid type ambiguities caused by using
      sycl::half type, and which may also be caused by custom/user types as
      well
    • Fixed compile time known identity values for MIN and MAX reductions

API/ABI breakages

  • All functions related to sycl::ordered_queue have been removed
  • Removed symbols corresponding to
    sycl::info::kernel_sub_group::max_sub_group_size_for_ndrange and
    sycl::info::kernel_sub_group::sub_group_count_for_ndrange queries

Known issues

  • [new] If there is an attribute cl::intel_reqd_sub_group_size with the
    same value for kernel and function called from the kernel there still can be
    compilation error.
  • The format of the object files produced by the compiler can change between
    versions. The workaround is to rebuild the application.
  • The SYCL library doesn't guarantee stable API/ABI, so applications compiled
    with older version of the SYCL library may not work with new one.
    The workaround is to rebuild the application.
    ABI policy guide
  • Using cl::sycl::program API to refer to a kernel defined in another
    translation unit leads to undefined behavior
  • Linkage errors with the following message:
    error LNK2005: "bool const std::_Is_integral<bool>" (??$_Is_integral@_N@std@@3_NB) already defined
    can happen when a SYCL application is built using MS Visual Studio 2019
    version below 16.3.0
    The workaround is to enable -std=c++17 for the failing MSVC version.