source: doc/theses/mike_brooks_MMath/plots/string-peq-cppemu.py@ edd11bd

Last change on this file since edd11bd was f85de47, checked in by Michael Brooks <mlbrooks@…>, 5 months ago

String chapter work.

General copy-editing throughout the chapter.

Rewrite and elaborate "RAII limitations."

Move "Logical overlap" up to features' section and integrate flow with assignment-semantics predecessor.

Re-brand "Memory management" as "General implementation," and move to front of "Storage Management."

Elaborate performance experiment descriptions, giving harness sketches.

Convert first performance experiment graph (peq-cppemu) to draw directly from benchmark result file, now included in git. Similar work on remaining graphs, and adding missing data, is forthcoming.

To build thesis may now require pip3 install pandas.

  • Property mode set to 100644
File size: 2.8 KB
RevLine 
[f85de47]1# Read thesis-append-pbv.csv
2# Output for string-graph-peq-cppemu.dat
3
4# Project details
5# Filter operation=peq
6# Split "series" goups of sut; only those in the "pretty" list
7# Assert one row per string-length
8# output:
9# string-len op-duration
10# in chunks, each headed by pertty(sut)
11
12import pandas as pd
13import numpy as np
14import os
15
16infile = os.path.dirname(os.path.abspath(__file__)) + '/../benchmarks/string/result-append-pbv.csv'
17
18prettyFieldNames = {
19 "cfa-ll-noshare-fresh": "{/Helvetica=15 C{/Symbol \\42} +=} noshare fresh",
20 "cfa-ll-noshare-reuse": "{/Helvetica=15 C{/Symbol \\42} +=} noshare reuse",
21 "stl-na-na-fresh": "STL {/Helvetica=15 +=} fresh",
22 "stl-na-na-reuse": "STL {/Helvetica=15 +=} reuse",
23}
24
25timings = pd.read_csv(
26 infile,
27 names=['test', 'corpus', 'concatsPerReset', 'corpusItemCount', 'corpusMeanLenChars', 'concatDoneActualCount', 'execTimeActualSec'],
28 dtype={'test': str,
29 'corpus': str,
30 'concatsPerReset': 'Int64', # allows missing; https://stackoverflow.com/a/70626154
31 'corpusItemCount': np.int64,
32 'corpusMeanLenChars': np.float64,
33 'concatDoneActualCount': np.int64,
34 'execTimeActualSec': np.float64},
35 na_values=['xxx'],
36)
37# print(timings.head())
38
39
40# project: parse executable and corpus names
41
42timings[['test-slug',
43 'sut-platform',
44 'operation',
45 'sut-cfa-level',
46 'sut-cfa-sharing',
47 'op-alloc']] = timings['test'].str.strip().str.split('-', expand=True)
48timings['sut'] = timings[['sut-platform',
49 'sut-cfa-level',
50 'sut-cfa-sharing',
51 'op-alloc']].agg('-'.join, axis=1)
52
53timings[['corpus-basename',
54 'corpus-ext']] = timings['corpus'].str.strip().str.split('.', expand=True)
55timings[['corpus-slug',
56 'corpus-nstrs',
57 'corpus-meanlen',
58 'corpus-runid']] = timings['corpus-basename'].str.strip().str.split('-', expand=True)
59timings["corpus-nstrs"] = pd.to_numeric(timings["corpus-nstrs"])
60timings["corpus-meanlen"] = pd.to_numeric(timings["corpus-meanlen"])
61timings["corpus-runid"] = pd.to_numeric(timings["corpus-runid"])
62
63
64# project: calculate fact
65
66timings['op-duration-s'] = timings['execTimeActualSec'] / timings['concatDoneActualCount']
67timings['op-duration-ns'] = timings['op-duration-s'] * 1000 * 1000 * 1000
68
69
70# Filter operation=peq
71
72groupedOp = timings.groupby('operation')
73tgtOpTimings = groupedOp.get_group('peq')
74
75
76# Emit in groups
77
78groupedSut = tgtOpTimings.groupby('sut')
79
80for sut, sgroup in groupedSut:
81
82 if sut in prettyFieldNames:
83
84 sgroup_sorted = sgroup.sort_values(by='corpus-meanlen')
85
86 print('"{header}"'.format(header=prettyFieldNames[sut]))
87 text = sgroup_sorted[['corpus-meanlen', 'op-duration-ns']].to_csv(header=False, index=False, sep='\t')
88 print(text)
89 print()
Note: See TracBrowser for help on using the repository browser.