silvic

How it works

Training

LightGBM and silvic both recover a sibling histogram by subtracting a built child’s histogram from its parent’s. LightGBM defaults to separate floating-point gradient and hessian sums. silvic’s CPU path quantizes and packs each pair into an integer, so one addition updates both sums in a bin. This reduces bin-update work; the training benchmark also includes binning, fitting and validation.

For a row and feature bin, LightGBM's default accumulates gradient and hessian values separately. silvic quantizes and packs the pair before one integer histogram addition.
Quantizing and packing the gradient–hessian pair lets silvic update a histogram bin with one integer addition, compared with two separate accumulations in LightGBM’s default.

Serving

lleaves compiles code for each model. silvic uses shared CPU SIMD kernels: one threshold rank covers several splits, while masks remove unreachable leaves across rows. The kernel finds the surviving leaf positions with SIMD and reads their values per lane. This reduces prediction work. The serving benchmark excludes compilation.

Several rows share a SIMD mask operation across leaf tiles. Unreachable leaves are hatched, a surviving leaf is selected in each row, and the kernel reads its corresponding value separately for that row.
The SIMD kernel applies masks across rows to find their surviving leaves, then reads the corresponding value for each row.