pub struct Rates {Show 16 fields
pub gemm_mac: Rate,
pub gemm_single: Rate,
pub block_apply_mac: Rate,
pub lu_full_pivot: Rate,
pub bunch_kaufman: Rate,
pub qr_col_pivot: Rate,
pub bidiag: Rate,
pub hessenberg: Rate,
pub tridiag: Rate,
pub matvec: Rate,
pub bidiag_svd_dc: Rate,
pub tridiag_evd_dc: Rate,
pub triangular_inverse: Rate,
pub sparse_matmul: Rate,
pub householder_rank_one: Rate,
pub lu_swap: Rate,
}Expand description
The serial throughput constants of the kernel families of one host class, one per family
(design record: threadteam docs/design/thresholds.md, section 2.3). The unit is what the
gate of the family counts. A step of a factorization is timed inside the whole serial
factorization, so the constant includes the serial parts of a step (pivot search, Householder
generation) and slightly overestimates the time of the part that is split.
The row of a class is Rates::for_class; rates is the row of the host. Sources:
x86_64-avx512: one thread on an AMD Ryzen AI 9 HX 470 (Zen 5) at 2.0 GHz, boost off, median over shapes and rounds (faer-benchmarkdata/probes/20261026-awake-team-linux/tables-consts-exec3.md); the divide and conquer and sparse product from the region constants of the same file (raw-exec3/rconsts-*.csv).aarch64-apple: one thread on an Apple M5 Max, QoSUserInitiated, L2 resident shapes, median over the shapes 96 to 768 and two processes (data/probes/20261026-threshold-recalibration).- every other class is unmeasured and takes the
genericrow: per entry the smaller of the measured rows, so that an unknown host keeps work serial a little longer than it must rather than dispatching too early.
A row’s rates and the dispatch costs of the same class must come from the same machine and
clock state (HostClass).
Fields§
§gemm_mac: RateGEMM and every kernel counted in multiply-adds (triangular products and solves), per multiply-add.
gemm_single: RateGEMM in single precision, per multiply-add: real is f32, cplx is c32.
block_apply_mac: RateThe multiply-adds of the block Householder apply, per multiply-add.
lu_full_pivot: RateFull-pivoting LU, one step: rank-one update fused with the pivot search, per element of
the trailing block (m-k-1)*(n-k-1).
bunch_kaufman: RateBunch-Kaufman with full pivoting, one step: rank-1 or rank-2 update fused with the pivot
search, per element of the trailing block rem*rem.
qr_col_pivot: RateQR with column pivoting, one step: fused update of the trailing block and the norms, per
element (m-k-1)*(n-k-1).
bidiag: RateBidiagonalization, one step: the fused two-sided update and the matrix-vector product, per
element (m-k-1)*(n-k-1).
hessenberg: RateHessenberg reduction (unblocked), one step: two matrix-vector products and a rank-one
update, per element n*n of the trailing block.
tridiag: RateTridiagonalization, one step: the symmetric fused update, per element rem*rem/2 of the
triangle.
matvec: RateMatrix-vector product, per matrix element (the mean of the column major and row major products).
bidiag_svd_dc: RateDivide and conquer bidiagonal SVD (bidiag_svd, both singular vectors, non deflating
data), the whole serial solve of size m per m^2; the join of size n has the two
halves as work, 2 (n/2)^2. The m^2 term (secular equation, deflation, permutations)
is larger than the merge products below m about 1900, so the unit is m^2; the
constant is the median over m 64 to 512 (it is size dependent: 48 to 62 on the M5 fit,
145 to 178 on the Zen 5). Real types only (the complex value repeats the real one).
tridiag_evd_dc: RateDivide and conquer symmetric tridiagonal EVD (tridiag_evd, eigenvectors on), the whole
serial solve of size m per m^2, used as bidiag_svd_dc (88 to 102 on the Zen 5 over
m 64 to 512). Real types only.
triangular_inverse: RateTriangular inverse (invert_*_triangular), the whole serial inverse of size m per
m^3; the join of size n has the two halves as work, 2 (n/2)^3. The constant is the
median over m 64 to 512 and falls with the size (on the Zen 5, f64 0.047 per m^3
at 64 to 0.0145 at 512), so a join near the floor is a little overestimated.
sparse_matmul: RateSparse by sparse numeric product, per multiply-add of the symbolic flop count
(SparseMatMulInfo, free to read); the median over the measured densities and sizes.
householder_rank_one: RateRank-one Householder apply (N == 1), per element of the target M*K.
lu_swap: RateOne row swap of one column in the LU swap stage (random pivot rows, columns of 64 to 1024
elements, cache resident, one thread; memory bound, so the c64 value is the larger
element width, not four times the f64 one).
Implementations§
Source§impl Rates
impl Rates
Sourcepub const X86_64_AVX512: Rates
pub const X86_64_AVX512: Rates
x86_64-avx512: Zen 5 at 2.0 GHz, boost off (see the type docs).
Sourcepub const AARCH64_APPLE: Rates
pub const AARCH64_APPLE: Rates
aarch64-apple: Apple M5 Max (the constants of the first calibration).
Trait Implementations§
impl Copy for Rates
impl StructuralPartialEq for Rates
Auto Trait Implementations§
impl Freeze for Rates
impl RefUnwindSafe for Rates
impl Send for Rates
impl Sync for Rates
impl Unpin for Rates
impl UnsafeUnpin for Rates
impl UnwindSafe for Rates
Blanket Implementations§
impl<T> Boilerplate for T
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> DistributionExt for Twhere
T: ?Sized,
impl<T> DistributionExt for Twhere
T: ?Sized,
impl<T, U> Imply<T> for U
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more