From 908cc55b46f5791a4b2923b0861f00877a7d79f1 Mon Sep 17 00:00:00 2001 From: Daniel Date: Tue, 20 May 2025 18:52:26 +0200 Subject: [PATCH] evaluation: added evaluation information for second transpiler run --- thesis/chapters/evaluation.tex | 2 +- thesis/main.pdf | Bin 924279 -> 924423 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/thesis/chapters/evaluation.tex b/thesis/chapters/evaluation.tex index 1d28846..67d92a0 100644 --- a/thesis/chapters/evaluation.tex +++ b/thesis/chapters/evaluation.tex @@ -76,7 +76,7 @@ Document the process of performance tuning Initial: no cache; 256 blocksize; exprs pre-processed and transpiled on every call; vars sent on every call; frontend + transpilation + dispatch are multithreaded 1.) Done before parameter optimisation loop: Frontend, transmitting Exprs and Variables (improved runtime) -2.) All expressions to execute are transpiled first (before they were transpiled for every execution, even in parameter optimisation scenarios). Compilation is still done every time, because too little RAM was available (compilation takes the most time, so this is only a minor boost) +2.) All expressions to execute are transpiled first (before they were transpiled for every execution, even in parameter optimisation scenarios). Compilation is still done every time, because too little RAM was available (compilation takes the most time, so this is only a minor boost). Also tried blocksize of 121. However, kernel itself is very fast anyway, so this didn't make a difference (further proof that the CPU is the bottleneck here) \subsection{Comparison} Comparison of Interpreter and Transpiler as well as Comparing the two with CPU interpreter diff --git a/thesis/main.pdf b/thesis/main.pdf index 7eefe640c9403616eab3aa87c74e54aab34b15bb..3111a0314f24040a53f955390080c93886fa91e8 100644 GIT binary patch delta 7935 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