Skip to content

oneAPI DPC++ Compiler 2020-12

Compare
Choose a tag to compare
@tfzhu tfzhu released this 25 Dec 08:36
· 193669 commits to sycl since this release
5eebd1e

New features

SYCL Compiler

  • Allow for multiple build options for opencl-aot [5e5703f]

SYCL Library

Documentation

Improvements

SYCL Compiler

  • (ESIMD only) Remove wrapping of buffer objects into images which caused
    problems like incorrect work of scatter/gather of 1- and 2-byte values
    [d2d20d6]
  • Rename FPGA kernel attribute [[intel::stall_enable]] to
    [[intel::use_stall_enable_clusters]] [dab9deb]
  • Add template parameter support for [[intel::max_global_work_dim]] and
    [[intel::no_global_work_offset]] attributes [bd8fcc7, a5fde5a]
  • Remove partial-link path when dealing with fat static archives [f1aa7f4]
  • Remove unused device library function definitions from linked program
    [e9423ff]
  • Don't dump IR and dot files by default in the LowerWGScope [9d0e352]
  • Support LLVM floating-point intrinsics in llvm-spirv and frontend
    [a5065ab]
  • Add template parameter support for [[intel::no_global_work_offset()]]
    attribute [a5fde5a]
  • Improve group size selection by adjusting parallel_for execution range
    global size [74a68b7]
  • Add clang support for FPGA loop fusion function attributes [23926b0]
  • Reword some compiler diagnostics [50b81c3]

SYCL Library

  • Eliminate performance overhead on devices without host unified memory support
    [a4f0924]
  • Optimize discard_write access mode for host accessor [6733c8b]
  • Add support for composite specialization constants
    [c62860f, d4251e3, 3ec4594]
  • Enhance PI tracing with printing output arguments [19f5ad6]
  • Introduce pi_map_flags in lieu of cl_map_flags [f0e7606]
  • Implement robust error handling in LevelZero plugin [65c719d]
  • Add new device descriptors as SYCL extensions [51ac08c]
  • Remove redundant dependencies for in-order queues [6327221]

Documentation

  • Add information on AOT to GetStartedGuide [71942fb]
  • Add notice on alignemnt checks in ABI policy [4326b95]
  • Updated design of specialization contants on using of POD types
    [81963d1]
  • Document linked allocation commands [929a764]
  • Improve ESIMD documentation rendering [079597d]
  • Improved device library documentation [f24e2a9]

Bug fixes

SYCL Compiler

  • Do not customize optimizations for non-SPIR targets [cb069fe]
  • Fix address space assertion with templates [8905a8c]
  • Link libm-fp64 device library by default [ac93d6f]
  • Add support for specialization constants' typenames declared in namespaces
    [f64f835]
  • Fix loosing OpenMP device binary when program uses both OpenMP and SYCL
    offloading models [eb89f5e]

SYCL Library

  • Add missing interoperability API to construct SYCL classes with Level-Zero
    handles [10b4e8a]
  • Fix several builtins implementation for host device
    [8b82c67, 7867089]
  • Fix possible hang upon application finish if streams were used [bd5893a]
  • Fix failure when employing interoperability host task on queue constructed
    with reused context [9cff6c9]
  • Fix "instantiation after specialization" warnings
    [56b9a1d, eadce94]
  • Support copying of stream by value within a kernel without loss of output
    information [8d37cba]
  • Fix handling of big and/or non-uniform work-groups in reduction kernels. The
    solution may change when reduction kernels precompilation/query approach is
    implemented [78e2599]
  • Fix memory leak in event pool in Level Zero plugin [68fc780]
  • Fixed issue with finalizing context of Level Zero plugin [6cfa921]
  • Fix backend selection for SYCL_DEVICE_FILTER=* case [c54da15]
  • Restore AccessorImplHost layout [a08eeb4]

Documentation

  • Updated source checkout instruction for Windows in GetStartedGuide
    [9cde152]

API/ABI breakages

Known issues

  • GlobalWorkOffset is not supported by Level Zero backend [6f9e9a7]
  • The code with function pointer is hanging on Level Zero [d384295]
  • User-defined functions with the same name and signature (exact match of
    arguments, return type doesn't matter) as of an OpenCL C built-in
    function, can lead to Undefined Behavior.
  • A DPC++ system that has FPGAs installed does not support multi-process
    execution. Creating a context opens the device associated with the context
    and places a lock on it for that process. No other process may use that
    device. Some queries about the device through device.get_info<>() also
    open up the device and lock it to that process since the runtime needs
    to query the actual device to obtain that information.
  • On Windows, DPC++ compiler enforces using dynamic C++ runtime for
    application linked with SYCL library by:
    • linking with msvcrt[d].dll when -fsycl switch is used;
    • emitting an error on attempts to compile a program with static C++ RT
      using -fsycl and /MT or /MTd.
      That protects you from complicated runtime errors caused by C++ objects
      crossing sycl[d].dll boundary and not always handled properly by different
      versions of C++ RT used on app and sycl[d].dll sides.
  • The format of the object files produced by the compiler can change between
    versions. The workaround is to rebuild the application.
  • 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 and user specifies -std=c++14 or /std:c++14.
  • Employing read sampler for image accessor may result in sporadic issues with
    Level Zero plugin/backend [2c50c03]
  • Printing internal defines isn't supported on Windows [50628db]
  • Group algorithms for MUL/AND/OR/XOR cannot be enabled for group scope due to
    SPIR-V limitations, and are not enabled for sub-group scope yet as the
    SPIR-V version isn't automatically raised from 1.1 to 1.3 [96da39e]
  • We cannot run Dead Argument Elimination for ESIMD since the pointers to SPIR
    kernel functions are saved in !genx.kernels metadata [cf10351]