Skip to content

=== v1.19.0 === (28 February 2023)

Compare
Choose a tag to compare
@dbabokin dbabokin released this 28 Feb 10:14
· 592 commits to main since this release

ISPC release with long-awaited function templates technical preview; new hardware support for 4th generation Intel® Xeon® Scalable (codename Sapphire Rapids) CPUs, Intel® Data Center GPU Max (codename Ponte Vecchio), and updated support for Intel® Arc™ GPUs; improved performance and compile time; an enhanced ISPC Runtime; a bunch of stability fixes and more. The release is based on patched LLVM 14.0.6.

Language changes:

Function templates support was introduced in ISPC and it's currently in technical preview, meaning that current language definition might change in future versions. For more details please refer to Function Templates section of documentation.

ISPC has got several other language changes needed for ISPC/SYCL interoperability (an experimental feature):

  1. Support of __regcall attribute.
  2. A new language construct invoke_sycl which is used to call SYCL function from ISPC. The function must be declared on ISPC side with extern "SYCL" __regcall qualifiers.
  3. Support of extern "C" functions definitions.

New hardware support:

  1. Targets for 4th generation Intel® Xeon® Scalable (codename Sapphire Rapids) CPUs were introduced: avx512spr-x4, avx512spr-x8,avx512spr-x16, avx512spr-x32, avx512spr-x64. The key difference with other AVX512 targets is native support for FP16.
  2. New xehpc-x16/xehpc-x32 targets were added for Intel® Data Center GPU Max (codename Ponte Vecchio). A new pvc device name was introduced.
  3. New device names acm-g10, acm-g11, and acm-g12 were added for Intel® Arc™ Graphics. The dg2 device name has been removed.
  4. Support for Aarch64 targets was enabled on Windows.

ISPC Runtime:

  1. A chunking allocator was introduced that can be enabled with ISPCRT_MEM_POOL (see details are here).
  2. An API was added to link input modules through ispcrtStaticLinkModules (using linking on vISA level under the hood) and ispcrtDynamicLinkModules (using binary linking under the hood).
  3. Support for creating multiple devices within a single context was added, and an API was added to get a function pointer from a module. It's also possible to construct ISPC RT objects from native handlers now.
  4. ISPC RT verbose mode was added that can be enabled through ISPCRT_VERBOSE.

Performance:

There's a significant performance boost on Xe targets caused by updates in the ISPC optimization pipeline and the usage of the new spill-cost IGC finalizer function, which dramatically reduces spill size.

Utilities:

  1. ISPC link mode has been introduced, allowing to link several LLVM bitcode or SPIR-V files and output the result as LLVM bitcode or SPIR-V. For example:
    ispc link test_a.bc test_b.bc --emit-spirv -o test.spv
    
  2. CMake utilities was improved, and support was added for building an ISPC GPU target from multiple ISPC files, linking them with ispc --link. An application's ISPC CMakeLists would look like this:
    add_ispc_library(my_ispc_lib filea.ispc fileb.ispc)
    ispc_target_include_directories(my_ispc_lib <some directory path>)
    ispc_target_compile_definitions(my_ispc_lib -DMY_DEFINE=1)
    
    add_ispc_library(my_ispc_kernel filec.ispc)
    ispc_target_link_libraries(my_ispc_kernel my_ispc_lib)

Runtime Dependencies when targeting GPU:

Linux:

Windows:

Components revisions used in GPU-enabled build:

UPDATE: macOS packages were updated on June 12, 2023 - *dylib were not signed and notarized, it was fixed.