koblas

backendFor

The backend currently filling slot.

isAccelerated

Whether slot is filled by something other than koblas's own portable implementation.

Determined by what the backend is, not by Backend.priority: priority is an ordering hint a backend declares about itself, and koblas's routed vector kernels have no meaningful one to report. For the vector slot, accelerated means a registered backend is being consulted for long runs — the compiled-in SIMD kernels are still portable koblas, however fast they are, since they are what you get with no host library present.

portableSlots

The slots still running koblas's own portable implementation, in declaration order.

Empty means everything is accelerated. Print it at startup, or assert on it — see requireAccelerated for the failing-fast version.

Note what this will report today on every target: all three sparse slots. koblas has the sparse seams but no host sparse backend behind them yet, so SparseBlas and friends being portable is the current state of the library rather than anything wrong with the machine.

requireAccelerated

Throws unless every one of slots is filled by an accelerated backend.

The point of this function is that koblas's fallback is silent by design. Discovery finds no host library, registration stays empty, the portable kernels answer correctly, and nothing says so. A deployment that expected OpenBLAS and did not get it therefore looks healthy and runs several times slower. Call this at startup when that is not acceptable:

koblas.requireAccelerated(BackendSlot.Blas, BackendSlot.Lapack)

The slots are explicit on purpose, with no "all of them" default. Which slots can be accelerated is a property of the target and of what koblas currently ships — no host sparse backend exists yet, so a default covering all six would fail everywhere, and a default covering "the dense three" would quietly rot the day a sparse one lands. Naming what you depend on keeps the check meaningful.

Throws

naming each unaccelerated slot and what is filling it.