v0.10.0
ExaModels v0.10.0
Release Notes
This is a feature-and-API release. The legacy variable / parameter /
objective / constraint / constraint! / subexpr API still works (now
routed through a deprecation wrapper) but is scheduled for removal in v0.11.
Breaking changes
- New functional builder API. Each
add_*call returns
(new_core, handle)and theExaCoreis immutable:
c, x = add_var(c, 10),c, _ = add_obj(c, x[i]^2 for i in 1:10).
Macro forms (@add_var,@add_par,@add_obj,@add_con,
@add_con!,@add_expr) rebind the localcorefor the same effect. ExaCore()now returns aLegacyExaCoremutable wrapper and emits a
deprecation warning. UseExaCore(concrete = Val(true))to obtain the
immutable core required for the new API and for AOT compilation.- Naming change:
Par→Data(e.g.ParSource→DataSource,
ParIndexed→DataIndexed). - Removed extensions:
ExaModelsCUDA,ExaModelsAMDGPU,
ExaModelsLinearAlgebra. CUDA / AMDGPU now run through
ExaModelsKernelAbstractions+Adapt; loadCUDAorAMDGPUin your
own project as before.
See docs/src/upgrade.md for line-by-line migration recipes.
New features
- Oracle subsystem for callback-defined nonlinear blocks:
VectorNonlinearOracle,ScalarNonlinearOracle,OracleEvaluator,
add_eval, and the high-levelembed_oraclewrapper. Supports both
explicit (jac!/hess!) and matrix-free (jvp!/vjp!/hvp!)
derivatives, withadapt::Valrouting for GPU- vs. CPU-only callbacks. - Two-stage optimization via
TwoStageExaCore(ns)and the
EachScenario()marker onadd_var/add_par/add_con. All
scenarios fuse into a single GPU-friendly model; per-scenario layout is
exposed viaget_nscen,get_var_scen,get_con_scen. - Apple Metal backend through the new
ExaModelsMetalextension. - AOT compilation via
juliac --trim=safe:ExaModel(core)is now
type-stable and dispatches toExaModelorExaModelWithOracle
depending on whether oracles are registered. - New constraint augmentation syntax:
g[idx] += exprinsideadd_con!,
plus multi-dim empty-constraint construction viaadd_con(core, dims...). add_parnow supports a dims API matchingadd_var.- Pretty-printing for AST node types and the model/core summary.
Tooling and infrastructure
Adapt.jlis now a direct dependency and powers cross-backend array
conversion (replaces the per-backend extensions).- Benchmark workflow runs on PRs across CPU / CUDA / AMDGPU / oneAPI and
posts a comparison table back to the PR. - New
[compat]entries:Adapt = "4",Metal = "1.9".
Compat
julia ≥ 1.9. Other compat bounds unchanged from v0.9.7 except the
additions above and the removal of AMDGPU / CUDA weakdeps.
Merged pull requests:
- Change naming convention: Par → Data (#234) (@sshin23)
- Use Adapt.jl for backend array conversion (#236) (@michel2323)
- Add Metal support (#242) (@sshin23)
- Add vector nonlinear oracle (#243) (@andrewrosemberg)
- Two-stage model (#244) (@michel2323)
- Fix codecov (#251) (@michel2323)
- AOT compilation (#256) (@sshin23)
- Add benchmark workflow (#257) (@sshin23)
- Revise benchmark CI to run on test pass and post results on PR (#260) (@sshin23)
- Add pretty printing for node types (#261) (@sshin23)
- No 2d/3d specialization (#263) (@sshin23)
- New constraint augmentation syntax (#264) (@sshin23)
- CI improve (#265) (@sshin23)
- Some changes in #261 reverted (#266) (@sshin23)
- CI: restrict benchmark compare job to PRs only (#267) (@sshin23)
- Missing renaming ParSource -> DataSource (#268) (@blegat)
- Add tag infrastructure, add_par dims API, and non-unit indexing fixes (#269) (@sshin23)
- Fix DataIndexed display and add operator precedence (#270) (@sshin23)
- benchmark: reduce timing noise with minimum-based estimator (#271) (@sshin23)
- CI adds backend to test environment (#276) (@michel2323)
- Release v0.10 (#278) (@michel2323)
Closed issues: