Changelog
No release is tagged yet; the version in the build files is 0.1.0. The entries dated before
2026-09-07 were reshaped to one line each on 2026-10-05, and their original text is frozen in
docs/archive/CHANGELOG.md.
Unreleased
- 2026-10-07 — cli: Pinned with tests that
sb docs bundlewrites the archive of the checkout and reads the XML folder of the Doxyfile (cli/tests/test_cli.py). - 2026-10-07 — ci: Fixed the release job to pass the sibling token to the called CI, and ignored the generated API XML (
.github/workflows/release.yml,.gitignore). - 2026-10-07 — ci: Added the release job that builds the documentation bundle after CI and attaches it to the tag’s release (
.github/workflows/release.yml,ci.yml). - 2026-10-07 — cli: Added
sb docs bundle, madedocsa command group registered from SushiCore, and added the publish list (cli/sushiblas/cli.py,docs/publish.toml,Doxyfile). - 2026-10-07 — docs: Added the frequently asked questions page (
docs/guides/FAQ.md). - 2026-10-07 — tools: Added a checker that holds every copy of the version to
project()and set the Doxyfile to 0.1.0 (tools/versioning/check_version.py). - 2026-10-07 — licence: Listed the third-party works that ship and where each licence text lives (
NOTICE.md). - 2026-10-07 — build: Made the library follow the device targets SushiRuntime resolved, so a CUDA build of the runtime carries SushiBLAS kernels for the same card (
cmake/SyclTarget.cmake). - 2026-10-07 — random: Made the dtype arm of execute_random a named class, which fixed the undefined HostKernel symbols that stopped the test executable from linking (
engine/math/random/dispatch.hpp). - 2026-10-07 — logic: Made all and any of an empty tensor write their identity instead of dividing by zero in the SYCL reduction (
src/engine/logic/all.cpp,any.cpp). - 2026-10-06 — random: Rejected invalid distribution parameters at record time, clamped truncated_normal bounds to 40 and made RngStream hand out the seed with the offset under one lock (
engine/rng_stream.hpp). - 2026-10-06 — random: Rejected poisson on a device without fp64 and orthogonal on a tensor without storage (
src/engine/math/random/poisson.cpp,orthogonal.cpp). - 2026-10-06 — math: Made elementwise max and min propagate NaN, made clamp reject an inverted range and fixed complex sqrt and log at the edges (
max.cpp,clamp.cpp,safe_math.hpp). - 2026-10-06 — math: Fixed max and min returning the lowest finite value for an infinite input and the HALF level 1 reference kernels summing in HALF (
max.cpp,kernels/reference/blas/level1/). - 2026-10-06 — io: Copied through the tensor’s own device queue, rejected malformed .npy headers and refused column-major rank 3 the same way on save and load (
src/io.cpp). - 2026-10-06 — blas: Ran the five level 1 reductions on many work-items through one shared reduction and a
ScratchBuffer(support/reduce_1d.hpp,engine/scratch.hpp). - 2026-10-06 — blas: Accumulated HALF in FLOAT32 in GEMM, SYRK, TRMV, GER, SYR, SYR2 and the reductions through one trait (
support/accumulator.hpp). - 2026-10-06 — blas: Gave GEMV and SYMV a work-group per row for long rows (
kernels/sycl/blas/level2/row_reduction.hpp). - 2026-10-06 — engine: Moved the execution mode and a host-pointer guard for FORCE_REFERENCE into the dispatch seam (
engine/task.hpp). - 2026-10-06 — engine: Moved the RNG stream out of Engine into its own class (
engine/rng_stream.hpp,engine.hpp). - 2026-10-06 — layout: Moved the helper headers shared by kernels and engine into a support layer (
include/SushiBLAS/support/). - 2026-10-06 — math: Made empty tensors no-ops, added INT32 and INT64 arithmetic and took scalar parameters as double (
engine/math/elementwise/). - 2026-10-06 — math: Made max and min propagate NaN and rewrote the complex math of the kernels without std::complex functions (
max.cpp,safe_math.hpp). - 2026-10-06 — random: Added PTRS Poisson up to lambda 1e7, a parallel orthogonal and four values per Philox block, which changes every stream (
kernels/sycl/random/). - 2026-10-06 — api: Added vector shapes, host transfer through IO, a full .npy header check and const-correct tensor accessors (
io.hpp,tensor.hpp). - 2026-10-06 — api: Removed the global namespace alias sb (
include/SushiBLAS/core/common.hpp). - 2026-10-06 — cli: Validated -D before deleting the build tree, verified clean and rejected unknown run options (
cli/sushiblas/services/). - 2026-10-06 — bench: Added four benchmark programs, built with
sb build --benchmarks(benchmarks/,cli/sushiblas/cli.py). - 2026-10-06 — tests: Strengthened the shared helpers and the normal, uniform, symv, trmv, trsv and elementary-function tests (
tests/common/test_utils.hpp). - 2026-10-06 — licence: Restored the three-section license box and named both holders in the copyright line of every source file (
tools/licensing/write_license_block.py,tools/documentation/check_source_comments.py). - 2026-10-05 — storage: Ported Storage and create_tensor to RuntimeContext allocation and Residency, and rejected negative and overflowing sizes (
storage.hpp,src/engine.cpp). - 2026-10-05 — engine: Made set_mode throw std::logic_error for VERIFY, which applied in-place operations twice (
src/engine.cpp,engine/task.hpp). - 2026-10-05 — engine: Added operand checks that reject missing storage, shape or layout mismatch and non-contiguous views at record time (
engine/operand_check.hpp). - 2026-10-05 — tensor: Rejected negative dimensions, overflowing sizes and bad
transposeindices, and checked the rank before writing strides (include/SushiBLAS/tensor.hpp). - 2026-10-05 — blas: Checked GEMM, SYRK and TRSM shapes, batch axes and layouts through one matrix operand, and rejected level 2 matrices above rank 2 (
engine/blas/matrix_operand.hpp,dispatch.hpp). - 2026-10-05 — blas: Validated the result tensor of dot, asum, nrm2 and iamax and rejected vectors with stride 0 (
engine/blas/utils.hpp,src/engine/blas/level1/). - 2026-10-05 — math: Made the elementwise, logic, nonlinear and reduction executors reject mismatched or strided operands, and limited six nonlinear operations to real dtypes (
engine/math/*/dispatch.hpp). - 2026-10-05 — math: Fixed
softplusoverflow,CompensatedSumturning infinity into NaN, and the missing result of var, std, logsumexp, argmax and argmin on an empty tensor (softplus.cpp,reduce_1d.hpp). - 2026-10-05 — spatial: Validated
ConvGeometry, rejected all-padding pool windows and madepool_maxpropagate NaN and require contiguous indices (engine/spatial/window.hpp,pool_max.cpp). - 2026-10-05 — random: Built
uniform01from 24 or 53 bits so it never returns 1, which changes every seeded stream, and rejected a poisson lambda above 700 (kernels/sycl/random/philox.hpp,poisson.cpp). - 2026-10-05 — io: Zeroed the
.sushiheader, checked writes, removed partial files and read strided views by stride into_string(src/io.cpp). - 2026-10-05 — tools: Made
check_layering.pycheck this repository’s kernel, engine and operation layers, with 62 known violations in one table (tools/layering/check_layering.py). - 2026-10-05 — tests: Added reference tests for BLAS levels 1 and 2 and TRSM, SYRK and TRSM parity tests, validation tests, and real assertions in both integration tests (
tests/functional/). - 2026-10-05 — docs: Moved design reasoning out of source comments into folder READMEs and gave every source file its file block (
include/SushiBLAS/,src/,kernels/,tests/,cli/). - 2026-10-05 — random: Made
truncated_normaldraw inside its bounds by inverting the normal distribution, and reject unordered or zero-mass bounds and complex dtypes at record time (src/engine/math/random/truncated_normal.cpp). - 2026-10-05 — core: Made
SB_ASSERTflush the asynchronous logger before it aborts (include/SushiBLAS/core/logger.hpp,tests/functional/regression/test_logger.cpp). - 2026-10-05 — core: Set the asynchronous logger’s stop flag under its mutex and wrote every queued line before the worker exits (
include/SushiBLAS/core/logger.hpp). - 2026-10-05 — io: Checked every read for short input and the version, dtype and layout of a
.sushiheader, and copied device storage through the queue insave_binandload_bin(src/io.cpp). - 2026-10-05 — docs: Built the documentation tree, moved the loose pages into it, reshaped the changelog and added the checkers (
README.md,docs/README.md,docs/reference/CHANGELOG.md,tools/). - 2026-10-05 — licence: Relicensed from Apache-2.0 to PolyForm Noncommercial 1.0.0 and removed
docs/LICENSE(LICENSE,COMMERCIAL.md,NOTICE.md,third_party/licenses/Apache-2.0.txt). - 2026-10-05 — cli: Renamed the
doxygencommand todocsand keptsb doxygenas a hidden alias until 2027-03-25 (cli/sushiblas/cli.py,cli/sushiblas/aliases.py). - 2026-10-05 — cli: Added
--versionand--describe(cli/sushiblas/cli.py). - 2026-10-05 — cli: Took
configandenvfrom sushicore, which addsenv -a(cli/sushiblas/cli.py,cli/sushiblas/services/diag.py). - 2026-10-05 — cli: Added a
main()entry point that reports a malformed config file or an unknown theme as one line and exit code 1 (cli/sushiblas/cli.py,cli/sushiblas/__main__.py). - 2026-10-05 — cli: Returned 130 on Ctrl+C and announced the build tree that a change of
sb build --typeremoves (cli/sushiblas/services/project.py). - 2026-10-05 — docs: Removed the
pipx install ./clipath and corrected the toolchain lookup and--suite alldescriptions (docs/CLI_GUIDE.md,docs/README.md). - 2026-10-04 — cli: Added setup, doctor, link and unlink from sushicore (
cli/sushiblas/cli.py,cli/sushiblas/config.py). - 2026-10-04 — cli: Raised the
sushicorelower bound to 0.7.0 (cli/pyproject.toml). - 2026-09-22 — build: Described this module in its own
sushi-module.toml, sohubknows it from the checkout (sushi-module.toml). - 2026-09-22 — build: Raised the
sushicorelower bound to 0.4.0 for the help page (cli/pyproject.toml). - 2026-09-22 — build: Took
sushicorefrom PyPI instead of a sibling checkout (cli/pyproject.toml). - 2026-09-22 — cli: Drew
sb --helpand each command’s help through sushicore’s help page, in three groups with examples (cli/sushiblas/cli.py,cli/sushiblas/console.py). - 2026-09-22 — cli: Replaced the raw
[dim]markup with the theme’s[muted](cli/sushiblas/services/project.py). - 2026-09-07 — docs: Renamed the hub’s command from
sstohubin the manual (docs/). - 2026-08-09 — spatial: Added the
spatialengine domain with im2col, col2im, pooling, upsampling, channel and layout operations (Engine::spatial(),SpatialOps,Spatial::WindowSpan). - 2026-08-09 — spatial: Wrote every spatial backward as a gather and pinned bit-reproducibility with five overlapping-window cases (
tests/functional/regression/test_spatial_determinism.cpp). - 2026-08-09 — reductions: Added a second segment axis to
Reduce::AxisSpanand its first caller (segments2,segment_stride2,ReductionOps::mean_spatial). - 2026-08-09 — gemm: Added
Kernels::ChannelBiasEpilogue, a per-channel bias for the GEMM epilogue seam with a stride pair set on the host. - 2026-08-09 — cli: Added
sb test --suite package, which installs the package and builds and runstests/package/against it, outside--suite all. - 2026-08-09 — engine: Moved
Internal::execute_typed_taskandInternal::dispatch_with_modetoengine/task.hppand keptInternal::execute_blas_taskas a forwarder. - 2026-08-09 — docs: Documented that
ExecutionMode::VERIFYruns the reference kernel over the SYCL kernel’s output and does not compare the two. - 2026-08-04 — cli: Committed the root
Doxyfileanddocs/api/mainpage.mdand stopped.gitignorefrom ignoring the Doxyfile, which madesb doxygenrun. - 2026-08-03 — reductions: Added
reductions().count_nonfinite, which counts the infinite and NaN elements of a tensor into an INT64 scalar (src/engine/math/reductions/count_nonfinite.cpp). - 2026-08-03 — reductions: Added
Dispatch::execute_counting_reduction, theReduce::ExactSumaccumulator and an accumulation type parameter onReduce::reduce. - 2026-08-03 — elementwise: Added
elementwise().convert, a dtype-converting copy over the nine real dtype pairs that throws on any other pair (src/engine/math/elementwise/convert.cpp). - 2026-08-03 — blas: Named both dtypes in the mismatch message of
Level1::copy. - 2026-08-03 — gemm: Let a GEMM epilogue declare the tensors it reads and writes (
Dispatch::GemmEpilogue,Dispatch::gemm_epilogue,include/SushiBLAS/engine/blas/dispatch.hpp). - 2026-08-03 — reductions: Added the axis reductions
reductions().max_alongandsum_alongover a segmented launch shape (include/SushiBLAS/engine/reduce_axis.hpp). - 2026-08-03 — reductions: Added
Dispatch::axis_span_for,Reduce::RunningMaxand the publicDispatch::execute_folding_axis_reduction, with 26 tests (tests/functional/unit/test_axis_reductions.cpp). - 2026-08-03 — core: Made
SushiBLAS::Core::formatpublic and added fill, alignment and the integer presentation types to its grammar (include/SushiBLAS/core/format.hpp). - 2026-08-03 — gemm: Added the
Detail::gemm_no_localkernel besideDetail::gemm_local_tiledand chose between them from the device profile (include/SushiBLAS/kernels/sycl/blas/level3/gemm.hpp). - 2026-08-03 — gemm: Added an
Epiloguetemplate parameter toKernels::SYCL::gemm, defaulting toGemmIdentityEpilogueand applied to each element before the store. - 2026-08-03 — engine: Added
SushiBLAS::Device::Profilewithhas_dedicated_local_memory,plan_1dandvector_width, probed once per device (include/SushiBLAS/engine/device_policy.hpp). - 2026-08-03 — build: Added the
SB_SYCL_TARGETSandSB_SYCL_DEVICE_FLAGSoptions for ahead-of-time device targets and printed the active targets at configure. - 2026-08-03 — cli: Added the repeatable
sb build -D VAR=VALUE, appended after the defaults the CLI sets. - 2026-08-03 — dispatch: Made the op-dispatch seam public as
namespace SushiBLAS::Dispatchand installed the fivedispatch.hpphelpers withengine/dispatch.hppandengine/math/safe_math.hpp. - 2026-08-03 — tests: Called
Dispatch::execute_binaryfrom the package consumer against an installed package (tests/package/main.cpp). - 2026-08-03 — random: Implemented
RandomOps::shuffleas a Fisher-Yates permutation over the Philox stream (Kernels::SYCL::Random::draw_index). - 2026-08-03 — random: Implemented
RandomOps::orthogonalby modified Gram-Schmidt for FLOAT32 and FLOAT64 rank-2 tensors (kernels/sycl/random/orthonormalize.hpp). - 2026-08-03 — elementwise: Computed add, sub, mul, div, neg, exp, log, sqrt, square, reciprocal and abs on COMPLEX32 and COMPLEX64.
- 2026-08-03 — logic: Computed equal, not_equal, and, or, xor, not and where on COMPLEX32 and COMPLEX64.
- 2026-08-03 — core: Added
Core::to_string(DataType)andCore::is_complex_dtype(DataType)(core/common.hpp). - 2026-08-03 — build: Built the library at C++17 in place of C++20 with no API change and kept
tests/package/at C++20. - 2026-08-03 — core: Replaced
std::formatwithSushiBLAS::Core::formatandstd::source_locationwithCore::Detail::SourceLocation(include/SushiBLAS/core/format.hpp). - 2026-08-03 — core: Replaced
__VA_OPT__, templated lambdas andstd::bit_castwith C++17 forms and acceptedDispatch::ElementTag<T>arms inDispatch::with_element_type. - 2026-08-03 — tests: Added
SB_TYPED_TEST_SUITE, which names the default type-name generator (tests/common/test_utils.hpp). - 2026-08-03 — gemm: Resolved GEMM’s layout and transpose handling into two strides on the host (
Detail::strides_for). - 2026-08-03 — gemm: Derived GEMM’s register block from the element size, 8x8 for 4-byte and narrower types and 4x4 for wider ones (
Detail::register_block_dim). - 2026-08-03 — gemm: Padded GEMM’s A tile to a leading dimension of
tile_k + 1and gave each work-item a strided lattice of the tile. - 2026-08-03 — gemm: Used 32-bit integers for GEMM’s tile-local indices and kept 64-bit for global coordinates, strides and batch offsets.
- 2026-08-03 — gemm: Qualified only GEMM’s output pointer with
__restrict__. - 2026-08-03 — syrk: Gave SYRK its own tile geometry (
Detail::SyrkTileConfig). - 2026-08-03 — gemm: Recorded in the kernel that the tiled GEMM omits double buffering.
- 2026-08-03 — gemm: Fixed column-major GEMM and SYRK, which read A and B with row-major indexing and past the end of A when m exceeded k (
Regression_Sentinel.GemmColumnMajorOperandsUseColumnStrides). - 2026-08-03 — dispatch: Replaced seven silent
default: break;dtype arms in the elementwise, nonlinear and logic helpers with throws that name the operation and the dtype. - 2026-08-03 — logic: Removed the lexicographic complex overloads of less, less_equal, greater and greater_equal and declared the ordering operations
Domain::REAL. - 2026-08-03 — elementwise: Rejected complex operands of max, min, clamp, floor, ceil, round, fmod and remainder at record time.
- 2026-08-03 — core: Collapsed three declarations of
is_complexintoSushiBLAS::Core::is_complex(include/SushiBLAS/core/traits.hpp). - 2026-08-03 — random: Stored the RNG seed and offset in task-metadata slots 6 and 7 as raw
uint64_t(Dispatch::K_RNG_SEED_PARAM,K_RNG_OFFSET_PARAM,Dispatch::set_task_params). - 2026-08-03 — dispatch: Removed
using namespace SushiRuntime::Graph::Literals;from the public dispatch headers. - 2026-08-03 — docs: Closed the release-mode test compile failure reported on 2026-08-02 as not reproducible.
- 2026-08-02 — docs: Added
ARCHITECTURE.md,CLI_GUIDE.md,INTEGRATION.md,CODE_OF_CONDUCT.mdandSECURITY.mdand rewrote the README and the contributing guide. - 2026-08-02 — docs: Folded
LAYOUT.md,STYLE_GUIDE.mdandTODO.mdintoARCHITECTURE.mdandCONTRIBUTING.md. - 2026-08-02 — cli: Resolved the SushiRuntime sibling and the bundled
clang++the way the CMake build does and pointedCMAKE_C_COMPILERat the siblingclang(cli/sushiblas/services/project.py). - 2026-08-01 — blas: Moved every BLAS level, TRSM and TRSV included, onto SushiBLAS’s own SYCL kernels and removed the oneMKL dependency.
- 2026-08-01 — blas: Implemented HALF, FLOAT32, FLOAT64, COMPLEX32 and COMPLEX64 across all 17 BLAS operations.
- 2026-08-01 — build: Added
install(EXPORT SushiBLASTargets)and a generatedSushiBLASConfig.cmake, which madefind_package(SushiBLAS)work out of tree (tests/package/). - 2026-08-01 — core: Added
include/SushiBLAS/version.hppwith theSUSHIBLAS_VERSION_*macros, checked against the CMake project version at configure. - 2026-08-01 — random: Added a Philox4x32-10 counter-based SYCL generator in place of oneMKL’s VSL backend for the 11 distribution operations (
kernels/sycl/random/philox.hpp). - 2026-08-01 — blas: Added
Internal::execute_blas_taskandInternal::dispatch_with_mode, the shared dispatch helpers of every BLAS operation (engine/blas/utils.hpp). - 2026-08-01 — tests: Restructured
tests/intotests/common/andtests/functional/{unit,integration,regression}/and prefixed every GoogleTest suite name with its kind. - 2026-08-01 — cli: Added the
--suiteoption ofsb test, which selects a CTest label group. - 2026-08-01 — licence: Added
NOTICE.mdwith the Apache-2.0 attribution of the portBLAS-derived GEMM tiling. - 2026-08-01 — licence: Relicensed from MIT to Apache-2.0 (
LICENSE). - 2026-08-01 — build: Resolved SushiRuntime through a superproject target,
find_package(SushiRuntime)or a sibling checkout and removed the vendored snapshot (cmake/Runtime.cmake,include/SushiRuntime/,lib/). - 2026-08-01 — build: Dropped the Intel oneAPI DPC++ requirement and defaulted to the bundled intel-llvm
clang++(cmake/Vcpkg.cmake,cmake/Toolchain.cmake,cmake/SyclTarget.cmake). - 2026-08-01 — engine: Followed SushiRuntime’s API to the
IAllocatorStrategysingletons and toTaskGraph::compile()withIExecutionEngine::execute(). - 2026-08-01 — build: Moved the directory-scope compile options into the policy targets
sushiblas_warnings,sushiblas_perfandsushiblas_sanitizers, applied privately bysushiblas_apply_build_policy(). - 2026-08-01 — engine: Moved
LinalgOpsandTransformsOpstoinclude/SushiBLAS/experimental/and removed them from theEnginefacade. - 2026-08-01 — gemm: Fixed NaN propagation in GEMM and SYRK when beta is zero with an explicit branch in all four kernels (
kernels/{reference,sycl}/blas/level3/{gemm,syrk}.hpp). - 2026-08-01 — tests: Fixed
fill_randomandassert_tensor_near, which computed a zero element count for every tensor below rank 6 (Tensor::num_elements). - 2026-08-01 — blas: Moved
Internal::is_complex_vintoengine/blas/utils.hppafterlevel1_internal.hppwas removed (dot.cpp). - 2026-08-01 — blas: Fixed the silent HALF gaps of
gemvandIO::to_string(). - 2026-08-01 — cmake: Renamed the build policy, warning, optimisation and sanitizer modules to
SushiBLAS-prefixed file names and added anEXISTScheck to theSUSHISTACK_HOMEdefault (cmake/Runtime.cmake). - 2026-08-01 — cmake: Fixed
find_dependency(IntelSYCL)and the exported alias case in SushiRuntime’sSushiRuntimeConfig.cmake.in. - 2026-08-01 — build: Removed the
scripts/win/andscripts/linux/build scripts.

