Skip to content

Commit e3fc16e

Browse files
committed
Pre-compile Julia sysimage
1 parent 363e057 commit e3fc16e

6 files changed

Lines changed: 50 additions & 21 deletions

File tree

TestBaseModelica/Manifest.toml

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -366,9 +366,9 @@ version = "1.16.0"
366366

367367
[[deps.DataFrames]]
368368
deps = ["Compat", "DataAPI", "DataStructures", "Future", "InlineStrings", "InvertedIndices", "IteratorInterfaceExtensions", "LinearAlgebra", "Markdown", "Missings", "PooledArrays", "PrecompileTools", "PrettyTables", "Printf", "Random", "Reexport", "SentinelArrays", "SortingAlgorithms", "Statistics", "TableTraits", "Tables", "Unicode"]
369-
git-tree-sha1 = "a37ac0840a1196cd00317b57e39d6586bf0fd6f6"
369+
git-tree-sha1 = "c967271c27a95160e30432e011b58f42cd7501b5"
370370
uuid = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0"
371-
version = "1.7.1"
371+
version = "1.8.0"
372372

373373
[[deps.DataStructures]]
374374
deps = ["Compat", "InteractiveUtils", "OrderedCollections"]
@@ -706,9 +706,9 @@ version = "1.11.0"
706706

707707
[[deps.FillArrays]]
708708
deps = ["LinearAlgebra"]
709-
git-tree-sha1 = "6a70198746448456524cb442b8af316927ff3e1a"
709+
git-tree-sha1 = "173e4d8f14230a7523ae11b9a3fa9edb3e0efd78"
710710
uuid = "1a297f60-69ca-5386-bcde-b61e274b549b"
711-
version = "1.13.0"
711+
version = "1.14.0"
712712
weakdeps = ["PDMats", "SparseArrays", "Statistics"]
713713

714714
[deps.FillArrays.extensions]
@@ -717,9 +717,9 @@ weakdeps = ["PDMats", "SparseArrays", "Statistics"]
717717
FillArraysStatisticsExt = "Statistics"
718718

719719
[[deps.FindFirstFunctions]]
720-
git-tree-sha1 = "670e1d9ceaa4a3161d32fe2d2fb2177f8d78b330"
720+
git-tree-sha1 = "544bdc2902fa966900d354510be775f8668a57bd"
721721
uuid = "64ca27bc-2ba2-4a57-88aa-44e436879224"
722-
version = "1.4.1"
722+
version = "1.4.2"
723723

724724
[[deps.FiniteDiff]]
725725
deps = ["ArrayInterface", "LinearAlgebra", "Setfield"]
@@ -2077,9 +2077,9 @@ weakdeps = ["PrettyTables"]
20772077

20782078
[[deps.SymbolicLimits]]
20792079
deps = ["SymbolicUtils"]
2080-
git-tree-sha1 = "fabf4650afe966a2ba646cabd924c3fd43577fc3"
2080+
git-tree-sha1 = "f75c7deb7e11eea72d2c1ea31b24070b713ba061"
20812081
uuid = "19f23fe9-fdab-4a78-91af-e7b7767979c3"
2082-
version = "0.2.2"
2082+
version = "0.2.3"
20832083

20842084
[[deps.SymbolicUtils]]
20852085
deps = ["AbstractTrees", "ArrayInterface", "Bijections", "ChainRulesCore", "Combinatorics", "ConstructionBase", "DataStructures", "DocStringExtensions", "DynamicPolynomials", "ExproniconLite", "LinearAlgebra", "MultivariatePolynomials", "NaNMath", "Setfield", "SparseArrays", "SpecialFunctions", "StaticArrays", "SymbolicIndexingInterface", "TaskLocalValues", "TermInterface", "TimerOutputs", "Unityper"]

TestBaseModelica/README.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,12 @@ To speed up the execution of the test and reduce the TTFP-overhad of Julia there
2727
julia> create_sysimage(["TestBaseModelica"]; sysimage_path="TestBaseModelica.so", precompile_execution_file="precompile_skript.jl" )
2828
```
2929

30+
```bash
31+
time julia --project=$(pwd) -e 'using TestBaseModelica; solver_settings=SolverSettings(start_time=0.0, stop_time=1.0, interval=0.02, tolerance=1e-6); test_settings=TestSettings(modelname="ExampleFirstOrder", output_directory="ExampleFirstOrder", solver_settings=solver_settings); run_test(joinpath("examples", "ExampleFirstOrder.mo"); settings=test_settings)'
32+
33+
time julia --sysimage=TestBaseModelica.so -e 'using .TestBaseModelica; solver_settings=SolverSettings(start_time=0.0, stop_time=1.0, interval=0.02, tolerance=1e-6); test_settings=TestSettings(modelname="ExampleFirstOrder", output_directory="ExampleFirstOrder", solver_settings=solver_settings); run_test(joinpath("examples", "ExampleFirstOrder.mo"); settings=test_settings)'
34+
```
35+
3036
2. Keep a Julia daemon running in the background for all tests by using
3137
[DaemonMode.jl](https://github.com/dmolina/DaemonMode.jl)
3238

TestBaseModelica/precompile_skript.jl

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,12 @@ solver_settings = SolverSettings(
77
tolerance = 1e-6
88
)
99

10+
output_directory = "tmp_out_dir"
1011
test_settings = TestSettings(
1112
modelname = "ExampleFirstOrder",
12-
output_directory = "ExampleFirstOrder",
13-
solver_settings = solver_settings)
14-
15-
run_test(joinpath("examples", "ExampleFirstOrder.mo"); settings = test_settings)
13+
output_directory = output_directory,
14+
solver_settings = solver_settings
15+
)
1616

17-
rm("ExampleFirstOrder", force=true, recursive=true)
17+
run_test(joinpath(@__DIR__, "examples", "ExampleFirstOrder.mo"); settings = test_settings)
18+
rm(output_directory, force=true, recursive=true)

basemodelica.py

Lines changed: 26 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
1+
import monotonic
2+
import os.path
13
import subprocess
4+
25
from juliacall import Main as jl
6+
from omcommon import friendlyStr
37

4-
def print_julia_version():
8+
def print_julia_version() -> None:
59

610
julia = None
711
try:
@@ -13,10 +17,27 @@ def print_julia_version():
1317

1418
jl.seval("using InteractiveUtils; versioninfo()")
1519

16-
def dev_testbasemodelica_jl():
20+
def precompile_testbaesmodelica(systemImage: os.path) -> None:
21+
"""Update and pre-compile TestBaseModelica to `sysimage`.
1722
18-
jl.seval('import Pkg; Pkg.develop(path="TestBaseModelica")')
23+
Update dependencies of TestBaseModelica to get the latest version of
24+
BaseModelica.jl from branch main. Create a pre-compile system image of package
25+
TestBaseModelica with PackageCompiler.jl. This might take a wile!
26+
"""
1927

20-
def update_testbasemodelica():
28+
start = monotonic.monotonic()
29+
print("Updating and pre-compiling Julia package TestBaseModelica. This might take a while, hang tight!")
30+
jl.seval('import Pkg;'
31+
"Pkg.activate();"
32+
'Pkg.add("PackageCompiler");'
33+
'using PackageCompiler;'
34+
'Pkg.activate("TestBaseModelica");'
35+
'Pkg.update();'
36+
'Pkg.status();'
37+
'create_sysimage(["TestBaseModelica"]; sysimage_path="%s", precompile_execution_file="TestBaseModelica/precompile_skript.jl")'
38+
% systemImage)
39+
execTime = monotonic.monotonic() - start
40+
print("Done pre-compiling in %s." % friendlyStr(execTime))
2141

22-
jl.seval('import Pkg; Pkg.activate("TestBaseModelica"); Pkg.update(); Pkg.status()')
42+
if not os.path.isfile(systemImage):
43+
raise FileNotFoundError("Something went wrong, couldn't find %s" % systemImage)

test.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -314,10 +314,10 @@ def timeSeconds(f):
314314
sys.stdout.flush()
315315

316316
# Print Julia versions for BaseModelica.jl import
317+
julia_sysimage = os.path.abspath("TestBaseModelica.so")
317318
if basemodelica_mtk_import:
318319
basemodelica.print_julia_version()
319-
basemodelica.dev_testbasemodelica_jl()
320-
basemodelica.update_testbasemodelica()
320+
basemodelica.precompile_testbaesmodelica(julia_sysimage)
321321

322322
try:
323323
os.unlink("HelloWorld"+exeExt)
@@ -516,6 +516,7 @@ def testHelloWorld(cmd):
516516
if basemodelica_mtk_import:
517517
c["basemodelica-export"] = True
518518
c["basemodelica-mtk-import"] = True
519+
c["julia-system-image"] = julia_sysimage
519520

520521
# Create mos-files
521522

testmodel.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -546,7 +546,7 @@ def sendExpressionOldOrNew(cmd):
546546
fp.write("test_settings = TestSettings(modelname=\"%s\", solver_settings=solver_settings)\n" % (conf["fileName"]))
547547
fp.write("run_test(\"%s.mo\"; settings = test_settings)\n" % (conf["modelName"]))
548548

549-
cmd = "julia %s" % juliaCallFile
549+
cmd = "julia --sysimage=%s %s" % (conf["julia-system-image"], juliaCallFile)
550550
with open(simFile,"w") as fp:
551551
fp.write("%s\n" % (cmd))
552552
res = checkOutputTimeout(

0 commit comments

Comments
 (0)