This avoids a dependency on the non-standard libxml2 module. --- testsuites/smptests/smpopenmp01/init.c | 36 +++-- .../smptests/smpopenmp01/smpopenmp01.py | 71 +++++---- .../smptests/smpopenmp01/smpopenmp01.scn | 137 ++++++++---------- 3 files changed, 118 insertions(+), 126 deletions(-)
diff --git a/testsuites/smptests/smpopenmp01/init.c b/testsuites/smptests/smpopenmp01/init.c index 46577ff4b2..d37fe852cf 100644 --- a/testsuites/smptests/smpopenmp01/init.c +++ b/testsuites/smptests/smpopenmp01/init.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017 embedded brains GmbH & Co. KG + * Copyright (C) 2017, 2024 embedded brains GmbH & Co. KG * * The license and distribution terms for this file may be * found in the file LICENSE in this distribution or at @@ -143,21 +143,31 @@ static void do_bench(const char *name, void (*bench)(void), int n) (*bench)(); } delta = omp_get_wtime() - start; - printf("\t\t<%sBench unit=\"s\">%f</%sBench>\n", name, delta, name); + printf(",\n \"%s-bench\": %f", name, delta); } +static const char *test_sep = ""; + static void microbench(int num_threads, int n) { - printf("\t<Microbench numThreads=\"%i\" majorLoopCount=\"%i\">\n", num_threads, n); omp_set_num_threads(num_threads); - do_bench("Barrier", barrier_bench, n); - do_bench("Parallel", parallel_bench, n); - do_bench("Static", static_bench, n); - do_bench("Dynamic", dynamic_bench, n); - do_bench("Guided", guided_bench, n); - do_bench("Runtime", runtime_bench, n); - do_bench("Single", single_bench, n); - printf("\t</Microbench>\n"); + printf( + "%s{\n" + " \"num-threads\": %i,\n" + " \"major-loop-count\": %i", + test_sep, + num_threads, + n + ); + test_sep = ", "; + do_bench("barrier", barrier_bench, n); + do_bench("parallel", parallel_bench, n); + do_bench("static", static_bench, n); + do_bench("dynamic", dynamic_bench, n); + do_bench("guided", guided_bench, n); + do_bench("runtime", runtime_bench, n); + do_bench("single", single_bench, n); + printf("\n }"); } static int estimate_3s_runtime_with_one_proc(void) @@ -186,7 +196,7 @@ static void test(void) int num_procs; int n; - printf("<SMPOpenMP01>\n"); + printf("*** BEGIN OF JSON DATA ***\n[\n "); n = estimate_3s_runtime_with_one_proc(); num_procs = omp_get_num_procs(); @@ -196,7 +206,7 @@ static void test(void) microbench(i, n); } - printf("</SMPOpenMP01>\n"); + printf("\n]\n*** END OF JSON DATA ***\n"); } #ifdef __rtems__ diff --git a/testsuites/smptests/smpopenmp01/smpopenmp01.py b/testsuites/smptests/smpopenmp01/smpopenmp01.py index 8545d2d91f..227b089926 100644 --- a/testsuites/smptests/smpopenmp01/smpopenmp01.py +++ b/testsuites/smptests/smpopenmp01/smpopenmp01.py @@ -1,9 +1,6 @@ -#!/usr/bin/env python - # SPDX-License-Identifier: BSD-2-Clause -# -# Copyright (c) 2017 embedded brains GmbH & Co. KG +# Copyright (C) 2017, 2024 embedded brains GmbH & Co. KG # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -25,37 +22,39 @@ # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. -# +import json import re -import libxml2 -from libxml2 import xmlNode -import matplotlib.pyplot as plt -data = open('smpopenmp01.scn').read() -data = re.sub(r'\*\*\*.*', '', data) -doc = libxml2.parseDoc(data) -ctx = doc.xpathNewContext() - -plt.title('OpenMP Microbench') -plt.xlabel('Number of Threads') -plt.ylabel('Relative Duration') - -def m(n): - return float(n.getContent()) - -def p(bench): - d = map(m, ctx.xpathEval('/SMPOpenMP01/Microbench/' + bench)) - y = [x / d[0] for x in d] - x = range(1, len(y) + 1) - plt.xticks(x) - plt.plot(x, y, label = bench, marker = 'o') - -p('BarrierBench') -p('ParallelBench') -p('StaticBench') -p('DynamicBench') -p('GuidedBench') -p('RuntimeBench') -p('SingleBench') -plt.legend(loc = 'best') -plt.show() +import matplotlib.pyplot as plt # type: ignore +from matplotlib import ticker # type: ignore + + +def _plot(data: dict) -> None: + _, axes = plt.subplots() + axes.set_title("OpenMP Microbench") + axes.set_xlabel("Number of Threads") + axes.set_ylabel("Relative Duration") + x = list(range(1, len(data) + 1)) + axes.xaxis.set_major_locator(ticker.FixedLocator(x)) + for key in [ + "barrier-bench", "dynamic-bench", "guided-bench", "parallel-bench", + "runtime-bench", "single-bench", "static-bench" + ]: + d = [results[key] for results in data] + y = [x / d[0] for x in d] + axes.plot(x, y, label=key.replace("-bench", ""), marker="o") + axes.legend(loc="best") + plt.savefig("smpopenmp01.png") + plt.savefig("smpopenmp01.pdf") + plt.close() + + +_JSON_DATA = re.compile( + r"\*\*\* BEGIN OF JSON DATA \*\*\*(.*)" + r"\*\*\* END OF JSON DATA \*\*\*", re.DOTALL) + +with open("smpopenmp01.scn", "r", encoding="utf-8") as src: + match = _JSON_DATA.search(src.read()) + data = json.loads(match.group(1)) + +_plot(data) diff --git a/testsuites/smptests/smpopenmp01/smpopenmp01.scn b/testsuites/smptests/smpopenmp01/smpopenmp01.scn index 6f63ddca1d..2d6c944d3f 100644 --- a/testsuites/smptests/smpopenmp01/smpopenmp01.scn +++ b/testsuites/smptests/smpopenmp01/smpopenmp01.scn @@ -1,81 +1,64 @@ + + SIS - SPARC/RISCV instruction simulator 2.30, copyright Jiri Gaisler 2020 + Bug-reports to j...@gaisler.se + + GR740/LEON4 emulation enabled, 4 cpus online, delta 50 clocks + + Loaded build/sparc/gr740/testsuites/smptests/smpopenmp01.exe, entry 0x00000000 + + *** BEGIN OF TEST SMPOPENMP 1 *** -*** TEST VERSION: 5.0.0.4c8cffc19865eaa3b033ce2776bcce9992f24b18 +*** TEST VERSION: 6.0.0.43eecff0b1b2915b87d5324ae562888851cabdaf *** TEST STATE: EXPECTED_PASS -*** TEST BUILD: RTEMS_POSIX_API RTEMS_SMP -*** TEST TOOLS: 7.3.0 20180125 (RTEMS 5, RSB 6d9c77c77d271d1fc2dfe8493d6713930b52a6dd, Newlib 3.0.0) -<SMPOpenMP01> - <Microbench numThreads="1" majorLoopCount="20"> - <BarrierBench unit="s">0.720318</BarrierBench> - <ParallelBench unit="s">1.121403</ParallelBench> - <StaticBench unit="s">0.059288</StaticBench> - <DynamicBench unit="s">0.440113</DynamicBench> - <GuidedBench unit="s">0.003230</GuidedBench> - <RuntimeBench unit="s">0.440121</RuntimeBench> - <SingleBench unit="s">0.116486</SingleBench> - </Microbench> - <Microbench numThreads="2" majorLoopCount="20"> - <BarrierBench unit="s">0.416734</BarrierBench> - <ParallelBench unit="s">0.259013</ParallelBench> - <StaticBench unit="s">0.015311</StaticBench> - <DynamicBench unit="s">0.196751</DynamicBench> - <GuidedBench unit="s">0.002367</GuidedBench> - <RuntimeBench unit="s">0.199640</RuntimeBench> - <SingleBench unit="s">0.077629</SingleBench> - </Microbench> - <Microbench numThreads="3" majorLoopCount="20"> - <BarrierBench unit="s">0.748332</BarrierBench> - <ParallelBench unit="s">0.387318</ParallelBench> - <StaticBench unit="s">0.021244</StaticBench> - <DynamicBench unit="s">0.141558</DynamicBench> - <GuidedBench unit="s">0.001544</GuidedBench> - <RuntimeBench unit="s">0.142693</RuntimeBench> - <SingleBench unit="s">0.117683</SingleBench> - </Microbench> - <Microbench numThreads="4" majorLoopCount="20"> - <BarrierBench unit="s">0.552830</BarrierBench> - <ParallelBench unit="s">0.323241</ParallelBench> - <StaticBench unit="s">0.017796</StaticBench> - <DynamicBench unit="s">0.099475</DynamicBench> - <GuidedBench unit="s">0.001259</GuidedBench> - <RuntimeBench unit="s">0.100053</RuntimeBench> - <SingleBench unit="s">0.091069</SingleBench> - </Microbench> - <Microbench numThreads="5" majorLoopCount="20"> - <BarrierBench unit="s">0.882791</BarrierBench> - <ParallelBench unit="s">0.452561</ParallelBench> - <StaticBench unit="s">0.023620</StaticBench> - <DynamicBench unit="s">0.094107</DynamicBench> - <GuidedBench unit="s">0.000989</GuidedBench> - <RuntimeBench unit="s">0.093911</RuntimeBench> - <SingleBench unit="s">0.130070</SingleBench> - </Microbench> - <Microbench numThreads="6" majorLoopCount="20"> - <BarrierBench unit="s">0.670385</BarrierBench> - <ParallelBench unit="s">0.393587</ParallelBench> - <StaticBench unit="s">0.021141</StaticBench> - <DynamicBench unit="s">0.072322</DynamicBench> - <GuidedBench unit="s">0.000937</GuidedBench> - <RuntimeBench unit="s">0.069804</RuntimeBench> - <SingleBench unit="s">0.104107</SingleBench> - </Microbench> - <Microbench numThreads="7" majorLoopCount="20"> - <BarrierBench unit="s">1.031511</BarrierBench> - <ParallelBench unit="s">0.466571</ParallelBench> - <StaticBench unit="s">0.024944</StaticBench> - <DynamicBench unit="s">0.069194</DynamicBench> - <GuidedBench unit="s">0.000814</GuidedBench> - <RuntimeBench unit="s">0.069596</RuntimeBench> - <SingleBench unit="s">0.133137</SingleBench> - </Microbench> - <Microbench numThreads="8" majorLoopCount="20"> - <BarrierBench unit="s">0.761015</BarrierBench> - <ParallelBench unit="s">0.452577</ParallelBench> - <StaticBench unit="s">0.023979</StaticBench> - <DynamicBench unit="s">0.061193</DynamicBench> - <GuidedBench unit="s">0.000799</GuidedBench> - <RuntimeBench unit="s">0.061519</RuntimeBench> - <SingleBench unit="s">0.114285</SingleBench> - </Microbench> -</SMPOpenMP01> +*** TEST BUILD: RTEMS_SMP +*** TEST TOOLS: 13.2.0 20230727 (RTEMS 6, RSB d3d738c35a71ca05f675b188539225099401ac79, Newlib a021448) +*** BEGIN OF JSON DATA *** +[ + { + "num-threads": 1, + "major-loop-count": 1, + "barrier-bench": 0.269517, + "parallel-bench": 1.277477, + "static-bench": 0.073541, + "dynamic-bench": 0.118271, + "guided-bench": 0.008089, + "runtime-bench": 0.142307, + "single-bench": 0.034294 + }, { + "num-threads": 2, + "major-loop-count": 1, + "barrier-bench": 0.269345, + "parallel-bench": 0.557423, + "static-bench": 0.033622, + "dynamic-bench": 0.059762, + "guided-bench": 0.004065, + "runtime-bench": 0.072107, + "single-bench": 0.033129 + }, { + "num-threads": 3, + "major-loop-count": 1, + "barrier-bench": 0.271522, + "parallel-bench": 0.631576, + "static-bench": 0.036074, + "dynamic-bench": 0.039981, + "guided-bench": 0.002757, + "runtime-bench": 0.049072, + "single-bench": 0.033129 + }, { + "num-threads": 4, + "major-loop-count": 1, + "barrier-bench": 0.272048, + "parallel-bench": 0.705746, + "static-bench": 0.039061, + "dynamic-bench": 0.030069, + "guided-bench": 0.002095, + "runtime-bench": 0.037570, + "single-bench": 0.033176 + } +] +*** END OF JSON DATA *** *** END OF TEST SMPOPENMP 1 *** + +cpu 0 in error mode (tt = 0x80) + 706370700 0000cac0: 91d02000 ta 0x0 -- 2.35.3 _______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel