Skip to content

Releases: hfp/libxstream

Version 1.0

Choose a tag to compare

@hfp hfp released this 26 Jun 06:37

Library and accelerator backend

LIBXSTREAM is a portable OpenCL-based GPU offloading library that implements the DBCSR ACC interface, enabling CP2K to run on Intel, AMD, and NVIDIA GPUs through a single backend. This is the first formal release.

Documentation

Highlights

  • Drop-in DBCSR/CP2K backend - implements the c_dbcsr_acc_* and CP2K offload* interfaces; link against LIBXSTREAM to add OpenCL GPU support to CP2K.

  • Header-only mode - include libxstream_source.h or compile with -DLIBXSTREAM_SOURCE for zero-library-dependency integration; also builds as static/shared library with pkg-config support.

  • USM and SVM memory models - configurable Unified Shared Memory (Intel) and Shared Virtual Memory (coarse/fine) support alongside classic buffer-based transfers.

  • CMake and GNU Make - both build systems supported; make install with pkg-config, CMake package export with SOVERSION.

Samples

  • SMM (Small Matrix Multiplication) - batched small GEMM and transpose for DBCSR with auto-tuning framework and pre-tuned parameter sets for 9 GPU architectures (A100, BMG, GH200, H100-PCI, H100-SXM, MI250, P100, PVC, V100). Fingerprint-based parameter prediction for unseen problem sizes.

  • Ozaki (High-Precision GEMM) - Ozaki-scheme GEMM emulation fully offloaded to OpenCL; mantissa-slicing and CRT variants with automatic detection of Intel XMX matrix engines (DPAS).

  • Stencil (BF16-DPAS Finite Difference) - seismic RTM/FWI wave propagation computed as batched small GEMMs on BF16 tensor units; FP32 accuracy via Dekker splitting; isotropic and TTI operators.

Requirements

  • OpenCL 1.2+ runtime (Intel, AMD, or NVIDIA)
  • C99 compiler (GCC, Clang, or ICX)
  • LIBXS (sibling directory or installed)

Version 0.9.1

Choose a tag to compare

@hfp hfp released this 01 Sep 12:46

This release (better called a version-tag) closes the 0-series of versions and prepares for a version 1-series. This release does not fix or extents functionality nor it intends to update anything beyond the status quo (like ten years of quietness).

Version 0.9

Choose a tag to compare

@hfp hfp released this 15 May 17:36

As promised in the previous release note and in the (already removed) roadmap statement, this release delivers proper internal work scheduling and is cleaning up the "demux" legacy parameter (one less argument for libxstream_stream_create).

For similar reasons, a few more interfaces have been changed: libxstream_stream_sync is now just synchronizing the given stream(s) and represents a (re-)scheduling point for stream-local queues in presence of multiple threads (pushing into a single stream). In order to wait for pending work in a stream, the function libxstream_stream_wait has been provided (it does what libxstream_stream_sync previously did). Similarly, libxstream_event_synchronize has been renamed to libxstream_event_wait (however a separate libxstream_event_sync is neither existing nor sensible).

Creating and destroying function signatures has been removed from the API. The functionality is superseded by libxstream_fn_signature which is receiving a thread-local signature of LIBXSTREAM_MAX_NARGS capacity. This is not only avoiding the practice to construct/destruct a signature on a per function call basis but is also avoiding confusion (or locking threads) with the signature's state in presence of multiple threads. This obviously requires to always construct all function arguments every call rather than "bundling" them in advance.

Feature-wise, libxstream_get_autotype now supports a "start" argument determining a type category (to map types of a known size to the library's type enumeration). The previously implemented execution trace (were only enabled in "debug" builds) is now available in general. An environment variable (LIBXSTREAM_VERBOSITY or LIBXSTREAM_VERBOSE) takes the level of verbosity. The latter can be controlled on an API level as well (libxstream_set_verbosity, and libxstream_get_verbosity). The execution trace is muted by default however client code may use the new libxstream_print function (stderr output).

In addition to the API level and internal changes, two new code samples are provided ("copy", and "entropy") and the documentation is showing some more performance results (copy benchmark).

Version 0.8.2

Choose a tag to compare

@hfp hfp released this 05 May 15:45

This release is mainly about code cleanup and revised documentation. It is the last release before addressing the roadmap issue "Work scheduling and legacy cleanup (demux)".

Version 0.8.1

Choose a tag to compare

@hfp hfp released this 20 Mar 18:17

Minor adjustments allowing a project (e.g., CP2K) to use the library as an optional dependency while still having a build system which collects all potential translation units (without knowing about "optional"). The mechanism relies on the include guards LIBXSTREAM_EXPORTED (or __LIBXSTREAM); this mechanism is similar to what is already in place for the implementation headers.

Version 0.8

Choose a tag to compare

@hfp hfp released this 20 Mar 18:20

Initial release featuring a stable programming interface (API). The (1) work scheduling with legacy cleanup, and a (2) native FORTRAN interface are the next upcoming features towards version 1.0.