1% @brief MATLAB Coder script to generate MEX functions
for cache_
module.
3% This script generates MEX (MATLAB Executable) versions of cache_ functions
4% for improved performance. Cache functions compute hit/miss probabilities
5% and normalizing constants for cache replacement models.
7% Skipped functions (Coder-incompatible):
8% cache_mva - State.cartesian() OOP dependency
9% cache_t_hlru - fsolve() + function handles
10% cache_t_lrum - fsolve() + function handles
11% cache_ttl_lrua - fsolve() + rng() + function handles
12% cache_rrm_meanfield - ode23s() script (not a function)
14% See also CODER, CODER.CONFIG, CODER.TYPEOF, CODEGEN.
16%% Create configuration object of class 'coder.CodeConfig'.
17cfg = coder.config('mex','ecoder',false);
18cfg.GenerateReport =
false;
19cfg.ReportPotentialDifferences =
false;
20cfg.GenCodeOnly =
false;
23scal_type = coder.typeof(0);
24vec_type = coder.typeof(0,[1 Inf],[0 1]);
25mat_type = coder.typeof(0,[Inf Inf],[1 1]);
27%% ===== Group: Normalizing constant computations =====
29% cache_erec(gamma, m) -> E
30codegen -config cfg cache_erec -args {vec_type, scal_type}
32% cache_is(gamma, m, samples) -> [E, lE]
33codegen -config cfg cache_is -args {vec_type, scal_type, scal_type}
35% cache_spm(gamma, m, xi0) -> [Z, lZ, xi]
36codegen -config cfg cache_spm -args {vec_type, scal_type, vec_type}
38%% ===== Group: Hit probability computations =====
40% cache_prob_erec - Skipped (cache_erec compile-time recursion exceeds codegen limit)
41% codegen -config cfg cache_prob_erec -args {vec_type, scal_type}
43% cache_prob_fpi(gamma, m) -> prob
44codegen -config cfg cache_prob_fpi -args {vec_type, scal_type}
46% cache_prob_spm - Skipped (calls cache_spm with reduced gamma, triggers cache_erec recursion limit)
47% codegen -config cfg cache_prob_spm -args {vec_type, scal_type, vec_type}
49% cache_prob_is - Skipped (calls cache_is which uses randperm, not codegen-compatible)
50% codegen -config cfg cache_prob_is -args {vec_type, scal_type, scal_type}
52%% ===== Group: Miss rate computations =====
54% cache_miss - Skipped (calls cache_erec directly, recursion limit)
55% codegen -config cfg cache_miss -args {vec_type, scal_type, vec_type}
57% cache_miss_fpi - Skipped (calls cache_miss -> cache_erec)
58% codegen -config cfg cache_miss_fpi -args {vec_type, scal_type, vec_type}
60% cache_miss_spm - Skipped (calls cache_miss -> cache_erec)
61% codegen -config cfg cache_miss_spm -args {vec_type, scal_type, vec_type}
63% cache_miss_is - Skipped (calls cache_miss -> cache_erec)
64% codegen -config cfg cache_miss_is -args {vec_type, scal_type, vec_type, scal_type}
66%% ===== Group: MVA miss computation =====
68% cache_mva_miss(p, m, R) -> [M, Mk]
69codegen -config cfg cache_mva_miss -args {vec_type, scal_type, mat_type}
71%% ===== Group: Parameter computation =====
73% cache_gamma_lp(lambda, R) -> [gamma, u, n, h]
74codegen -config cfg cache_gamma_lp -args {vec_type, mat_type}
76%% ===== Group: Fixed-point iterations =====
78% cache_xi_fp(gamma, m, xi) -> [xi, pi0, pij, it]
79codegen -config cfg cache_xi_fp -args {vec_type, scal_type, vec_type}
81% cache_xi_iter(gamma, m, tmax) -> z
82codegen -config cfg cache_xi_iter -args {vec_type, scal_type, scal_type}
84%% ===== Group: TTL approximations =====
86% cache_ttl_hlru - Skipped (uses fsolve with
'MaxFunEvals', not codegen-compatible)
87% codegen -config cfg cache_ttl_hlru -args {vec_type, scal_type}
89% cache_ttl_lrum - Skipped (uses fsolve, not codegen-compatible)
90% codegen -config cfg cache_ttl_lrum -args {vec_type, scal_type}
92%% ===== Group: ODE helper =====
94% cache_rrm_meanfield_ode(t, x, lambda, m, n, h) -> dxdt
95codegen -config cfg cache_rrm_meanfield_ode -args {scal_type, vec_type, vec_type, scal_type, scal_type, scal_type}