.. raw:: html
.. role:: red
.. role:: blue
.. role:: green
.. role:: cyan
.. role:: magenta
.. role:: orange
.. role:: brown
----------
Benchmarks
----------
Test setup
==========
The benchmarks were done using two test files (available `here `_) (for mdf version 3 and 4) of around 170MB.
The files contain 183 data groups and a total of 36424 channels.
*asamdf 7.0.1* was compared against *mdfreader 4.1*.
For each category two aspect were noted: elapsed time and peak RAM usage.
Dependencies
------------
You will need the following packages to be able to run the benchmark script
* psutil
* mdfreader
Usage
-----
Extract the test files from the archive, or provide a folder that contains the files "test.mdf" and "test.mf4".
Run the module *bench.py* ( see --help option for available options )
x64 Python results
==================
Benchmark environment
* 3.9.4 (tags/v3.9.4:1f2e308, Apr 6 2021, 13:40:21) [MSC v.1928 64 bit (AMD64)]
* Windows-10-10.0.19041-SP0
* Intel64 Family 6 Model 158 Stepping 10, GenuineIntel
* numpy 1.21.2
* 16GB installed RAM
Notations used in the results
* compress = mdfreader mdf object created with compression=blosc
* nodata = mdfreader mdf object read with no_data_loading=True
Files used for benchmark:
* mdf version 3.10
* 167 MB file size
* 183 groups
* 36424 channels
* mdf version 4.00
* 183 MB file size
* 183 groups
* 36424 channels
================================================== ========= ========
Open file Time [ms] RAM [MB]
================================================== ========= ========
asammdf 7.0.1 mdfv3 369 186
mdfreader 4.1 mdfv3 1741 498
mdfreader 4.1 no_data_loading mdfv3 646 248
mdfreader 4.1 compress mdfv3 1463 365
asammdf 7.0.1 mdfv4 468 199
mdfreader 4.1 mdfv4 4350 520
mdfreader 4.1 no_data_loading mdfv4 2892 310
mdfreader 4.1 compress mdfv4 4105 391
================================================== ========= ========
================================================== ========= ========
Save file Time [ms] RAM [MB]
================================================== ========= ========
asammdf 7.0.1 mdfv3 378 186
mdfreader 4.1 mdfv3 4310 527
mdfreader 4.1 no_data_loading mdfv3 5070 586
mdfreader 4.1 compress mdfv3 4456 525
asammdf 7.0.1 mdfv4 331 366
mdfreader 4.1 mdfv4 2254 539
mdfreader 4.1 no_data_loading mdfv4 3591 618
mdfreader 4.1 compress mdfv4 2400 535
================================================== ========= ========
================================================== ========= ========
Get all channels (36424 calls) Time [ms] RAM [MB]
================================================== ========= ========
asammdf 7.0.1 mdfv3 3354 187
mdfreader 4.1 mdfv3 40 498
mdfreader 4.1 nodata mdfv3 12686 283
mdfreader 4.1 compress mdfv3 154 366
asammdf 7.0.1 mdfv4 5243 364
mdfreader 4.1 mdfv4 51 520
mdfreader 4.1 nodata mdfv4 20210 336
mdfreader 4.1 compress mdfv4 170 396
================================================== ========= ========
================================================== ========= ========
Convert file Time [ms] RAM [MB]
================================================== ========= ========
asammdf 7.0.1 v3 to v4 2186 232
asammdf 7.0.1 v4 to v410 2008 394
asammdf 7.0.1 v4 to v420 2359 438
================================================== ========= ========
================================================== ========= ========
Merge 3 files Time [ms] RAM [MB]
================================================== ========= ========
asammdf 7.0.1 v3 6449 224
mdfreader 4.1 v3 0* 0*
mdfreader 4.1 nodata v3 0* 0*
mdfreader 4.1 compress v3 0* 0*
asammdf 7.0.1 v4 6713 409
mdfreader 4.1 v4 34746 1156
mdfreader 4.1 nodata v4 37608 1266
mdfreader 4.1 compress v4 34184 1151
================================================== ========= ========
Graphical results
-----------------
.. plot::
import matplotlib.pyplot as plt
import numpy as np
res = '../benchmarks/results/x64_asammdf_7.0.1_mdfreader_4.1.rst'
topic = 'Open'
aspect = 'time'
for_doc = True
with open(res, 'r') as f:
lines = f.readlines()
platform = 'x86' if '32 bit' in lines[2] else 'x64'
idx = [i for i, line in enumerate(lines) if line.startswith('==')]
table_spans = {'open': [idx[1] + 1, idx[2]],
'save': [idx[4] + 1, idx[5]],
'get': [idx[7] + 1, idx[8]],
'mdf' : [idx[10] + 1, idx[11]],
'merge' : [idx[13] + 1, idx[14]]}
start, stop = table_spans[topic.lower()]
cat = [l[:50].strip(' \t\n\r\0*') for l in lines[start: stop]]
time = np.array([int(l[50:61].strip(' \t\n\r\0*')) for l in lines[start: stop]])
ram = np.array([int(l[61:].strip(' \t\n\r\0*')) for l in lines[start: stop]])
arr = ram if aspect == 'ram' else time
y_pos = list(range(len(cat)))
fig, ax = plt.subplots()
fig.set_size_inches(15, 3.8 / 12 * len(cat) + 1.2)
asam_pos = [i for i, c in enumerate(cat) if c.startswith('asam')]
mdfreader_pos = [i for i, c in enumerate(cat) if c.startswith('mdfreader')]
ax.barh(asam_pos, arr[asam_pos], color='green', ecolor='green')
ax.barh(mdfreader_pos, arr[mdfreader_pos], color='blue', ecolor='black')
ax.set_yticks(y_pos)
ax.set_yticklabels(cat)
ax.invert_yaxis() # labels read top-to-bottom
ax.set_xlabel('Time [ms]' if aspect == 'time' else 'RAM [MB]')
if topic == 'Get':
ax.set_title('Get all channels (36424 calls) - {}'.format('time' if aspect == 'time' else 'ram usage'))
else:
ax.set_title('{} test file - {}'.format(topic, 'time' if aspect == 'time' else 'ram usage'))
ax.xaxis.grid()
fig.subplots_adjust(bottom=0.72/fig.get_figheight(), top=1-0.48/fig.get_figheight(), left=0.4, right=0.9)
if aspect == 'time':
if topic == 'Get':
name = '{}_get_all_channels.png'.format(platform)
else:
name = '{}_{}.png'.format(platform, topic.lower())
else:
if topic == 'Get':
name = '{}_get_all_channels_ram_usage.png'.format(platform)
else:
name = '{}_{}_ram_usage.png'.format(platform, topic.lower())
plt.show()
.. plot::
import matplotlib.pyplot as plt
import numpy as np
res = '../benchmarks/results/x64_asammdf_7.0.1_mdfreader_4.1.rst'
topic = 'Open'
aspect = 'ram'
for_doc = True
with open(res, 'r') as f:
lines = f.readlines()
platform = 'x86' if '32 bit' in lines[2] else 'x64'
idx = [i for i, line in enumerate(lines) if line.startswith('==')]
table_spans = {'open': [idx[1] + 1, idx[2]],
'save': [idx[4] + 1, idx[5]],
'get': [idx[7] + 1, idx[8]],
'convert' : [idx[10] + 1, idx[11]],
'merge' : [idx[13] + 1, idx[14]]}
start, stop = table_spans[topic.lower()]
cat = [l[:50].strip(' \t\n\r\0*') for l in lines[start: stop]]
time = np.array([int(l[50:61].strip(' \t\n\r\0*')) for l in lines[start: stop]])
ram = np.array([int(l[61:].strip(' \t\n\r\0*')) for l in lines[start: stop]])
if aspect == 'ram':
arr = ram
else:
arr = time
y_pos = list(range(len(cat)))
fig, ax = plt.subplots()
fig.set_size_inches(15, 3.8 / 12 * len(cat) + 1.2)
asam_pos = [i for i, c in enumerate(cat) if c.startswith('asam')]
mdfreader_pos = [i for i, c in enumerate(cat) if c.startswith('mdfreader')]
ax.barh(asam_pos, arr[asam_pos], color='green', ecolor='green')
ax.barh(mdfreader_pos, arr[mdfreader_pos], color='blue', ecolor='black')
ax.set_yticks(y_pos)
ax.set_yticklabels(cat)
ax.invert_yaxis() # labels read top-to-bottom
ax.set_xlabel('Time [ms]' if aspect == 'time' else 'RAM [MB]')
if topic == 'Get':
ax.set_title('Get all channels (36424 calls) - {}'.format('time' if aspect == 'time' else 'ram usage'))
else:
ax.set_title('{} test file - {}'.format(topic, 'time' if aspect == 'time' else 'ram usage'))
ax.xaxis.grid()
fig.subplots_adjust(bottom=0.72/fig.get_figheight(), top=1-0.48/fig.get_figheight(), left=0.4, right=0.9)
if aspect == 'time':
if topic == 'Get':
name = '{}_get_all_channels.png'.format(platform)
else:
name = '{}_{}.png'.format(platform, topic.lower())
else:
if topic == 'Get':
name = '{}_get_all_channels_ram_usage.png'.format(platform)
else:
name = '{}_{}_ram_usage.png'.format(platform, topic.lower())
plt.show()
.. plot::
import matplotlib.pyplot as plt
import numpy as np
res = '../benchmarks/results/x64_asammdf_7.0.1_mdfreader_4.1.rst'
topic = 'Save'
aspect = 'time'
for_doc = True
with open(res, 'r') as f:
lines = f.readlines()
platform = 'x86' if '32 bit' in lines[2] else 'x64'
idx = [i for i, line in enumerate(lines) if line.startswith('==')]
table_spans = {'open': [idx[1] + 1, idx[2]],
'save': [idx[4] + 1, idx[5]],
'get': [idx[7] + 1, idx[8]],
'convert' : [idx[10] + 1, idx[11]],
'merge' : [idx[13] + 1, idx[14]]}
start, stop = table_spans[topic.lower()]
cat = [l[:50].strip(' \t\n\r\0*') for l in lines[start: stop]]
time = np.array([int(l[50:61].strip(' \t\n\r\0*')) for l in lines[start: stop]])
ram = np.array([int(l[61:].strip(' \t\n\r\0*')) for l in lines[start: stop]])
if aspect == 'ram':
arr = ram
else:
arr = time
y_pos = list(range(len(cat)))
fig, ax = plt.subplots()
fig.set_size_inches(15, 3.8 / 12 * len(cat) + 1.2)
asam_pos = [i for i, c in enumerate(cat) if c.startswith('asam')]
mdfreader_pos = [i for i, c in enumerate(cat) if c.startswith('mdfreader')]
ax.barh(asam_pos, arr[asam_pos], color='green', ecolor='green')
ax.barh(mdfreader_pos, arr[mdfreader_pos], color='blue', ecolor='black')
ax.set_yticks(y_pos)
ax.set_yticklabels(cat)
ax.invert_yaxis() # labels read top-to-bottom
ax.set_xlabel('Time [ms]' if aspect == 'time' else 'RAM [MB]')
if topic == 'Get':
ax.set_title('Get all channels (36424 calls) - {}'.format('time' if aspect == 'time' else 'ram usage'))
else:
ax.set_title('{} test file - {}'.format(topic, 'time' if aspect == 'time' else 'ram usage'))
ax.xaxis.grid()
fig.subplots_adjust(bottom=0.72/fig.get_figheight(), top=1-0.48/fig.get_figheight(), left=0.4, right=0.9)
if aspect == 'time':
if topic == 'Get':
name = '{}_get_all_channels.png'.format(platform)
else:
name = '{}_{}.png'.format(platform, topic.lower())
else:
if topic == 'Get':
name = '{}_get_all_channels_ram_usage.png'.format(platform)
else:
name = '{}_{}_ram_usage.png'.format(platform, topic.lower())
plt.show()
.. plot::
import matplotlib.pyplot as plt
import numpy as np
res = '../benchmarks/results/x64_asammdf_7.0.1_mdfreader_4.1.rst'
topic = 'Save'
aspect = 'ram'
for_doc = True
with open(res, 'r') as f:
lines = f.readlines()
platform = 'x86' if '32 bit' in lines[2] else 'x64'
idx = [i for i, line in enumerate(lines) if line.startswith('==')]
table_spans = {'open': [idx[1] + 1, idx[2]],
'save': [idx[4] + 1, idx[5]],
'get': [idx[7] + 1, idx[8]],
'convert' : [idx[10] + 1, idx[11]],
'merge' : [idx[13] + 1, idx[14]]}
start, stop = table_spans[topic.lower()]
cat = [l[:50].strip(' \t\n\r\0*') for l in lines[start: stop]]
time = np.array([int(l[50:61].strip(' \t\n\r\0*')) for l in lines[start: stop]])
ram = np.array([int(l[61:].strip(' \t\n\r\0*')) for l in lines[start: stop]])
if aspect == 'ram':
arr = ram
else:
arr = time
y_pos = list(range(len(cat)))
fig, ax = plt.subplots()
fig.set_size_inches(15, 3.8 / 12 * len(cat) + 1.2)
asam_pos = [i for i, c in enumerate(cat) if c.startswith('asam')]
mdfreader_pos = [i for i, c in enumerate(cat) if c.startswith('mdfreader')]
ax.barh(asam_pos, arr[asam_pos], color='green', ecolor='green')
ax.barh(mdfreader_pos, arr[mdfreader_pos], color='blue', ecolor='black')
ax.set_yticks(y_pos)
ax.set_yticklabels(cat)
ax.invert_yaxis() # labels read top-to-bottom
ax.set_xlabel('Time [ms]' if aspect == 'time' else 'RAM [MB]')
if topic == 'Get':
ax.set_title('Get all channels (36424 calls) - {}'.format('time' if aspect == 'time' else 'ram usage'))
else:
ax.set_title('{} test file - {}'.format(topic, 'time' if aspect == 'time' else 'ram usage'))
ax.xaxis.grid()
fig.subplots_adjust(bottom=0.72/fig.get_figheight(), top=1-0.48/fig.get_figheight(), left=0.4, right=0.9)
if aspect == 'time':
if topic == 'Get':
name = '{}_get_all_channels.png'.format(platform)
else:
name = '{}_{}.png'.format(platform, topic.lower())
else:
if topic == 'Get':
name = '{}_get_all_channels_ram_usage.png'.format(platform)
else:
name = '{}_{}_ram_usage.png'.format(platform, topic.lower())
plt.show()
.. plot::
import matplotlib.pyplot as plt
import numpy as np
res = '../benchmarks/results/x64_asammdf_7.0.1_mdfreader_4.1.rst'
topic = 'Get'
aspect = 'time'
for_doc = True
with open(res, 'r') as f:
lines = f.readlines()
platform = 'x86' if '32 bit' in lines[2] else 'x64'
idx = [i for i, line in enumerate(lines) if line.startswith('==')]
table_spans = {'open': [idx[1] + 1, idx[2]],
'save': [idx[4] + 1, idx[5]],
'get': [idx[7] + 1, idx[8]],
'convert' : [idx[10] + 1, idx[11]],
'merge' : [idx[13] + 1, idx[14]]}
start, stop = table_spans[topic.lower()]
cat = [l[:50].strip(' \t\n\r\0*') for l in lines[start: stop]]
time = np.array([int(l[50:61].strip(' \t\n\r\0*')) for l in lines[start: stop]])
ram = np.array([int(l[61:].strip(' \t\n\r\0*')) for l in lines[start: stop]])
if aspect == 'ram':
arr = ram
else:
arr = time
y_pos = list(range(len(cat)))
fig, ax = plt.subplots()
fig.set_size_inches(15, 3.8 / 12 * len(cat) + 1.2)
asam_pos = [i for i, c in enumerate(cat) if c.startswith('asam')]
mdfreader_pos = [i for i, c in enumerate(cat) if c.startswith('mdfreader')]
ax.barh(asam_pos, arr[asam_pos], color='green', ecolor='green')
ax.barh(mdfreader_pos, arr[mdfreader_pos], color='blue', ecolor='black')
ax.set_yticks(y_pos)
ax.set_yticklabels(cat)
ax.invert_yaxis() # labels read top-to-bottom
ax.set_xlabel('Time [ms]' if aspect == 'time' else 'RAM [MB]')
if topic == 'Get':
ax.set_title('Get all channels (36424 calls) - {}'.format('time' if aspect == 'time' else 'ram usage'))
else:
ax.set_title('{} test file - {}'.format(topic, 'time' if aspect == 'time' else 'ram usage'))
ax.xaxis.grid()
fig.subplots_adjust(bottom=0.72/fig.get_figheight(), top=1-0.48/fig.get_figheight(), left=0.4, right=0.9)
if aspect == 'time':
if topic == 'Get':
name = '{}_get_all_channels.png'.format(platform)
else:
name = '{}_{}.png'.format(platform, topic.lower())
else:
if topic == 'Get':
name = '{}_get_all_channels_ram_usage.png'.format(platform)
else:
name = '{}_{}_ram_usage.png'.format(platform, topic.lower())
plt.show()
.. plot::
import matplotlib.pyplot as plt
import numpy as np
res = '../benchmarks/results/x64_asammdf_7.0.1_mdfreader_4.1.rst'
topic = 'Get'
aspect = 'ram'
for_doc = True
with open(res, 'r') as f:
lines = f.readlines()
platform = 'x86' if '32 bit' in lines[2] else 'x64'
idx = [i for i, line in enumerate(lines) if line.startswith('==')]
table_spans = {'open': [idx[1] + 1, idx[2]],
'save': [idx[4] + 1, idx[5]],
'get': [idx[7] + 1, idx[8]],
'convert' : [idx[10] + 1, idx[11]],
'merge' : [idx[13] + 1, idx[14]]}
start, stop = table_spans[topic.lower()]
cat = [l[:50].strip(' \t\n\r\0*') for l in lines[start: stop]]
time = np.array([int(l[50:61].strip(' \t\n\r\0*')) for l in lines[start: stop]])
ram = np.array([int(l[61:].strip(' \t\n\r\0*')) for l in lines[start: stop]])
if aspect == 'ram':
arr = ram
else:
arr = time
y_pos = list(range(len(cat)))
fig, ax = plt.subplots()
fig.set_size_inches(15, 3.8 / 12 * len(cat) + 1.2)
asam_pos = [i for i, c in enumerate(cat) if c.startswith('asam')]
mdfreader_pos = [i for i, c in enumerate(cat) if c.startswith('mdfreader')]
ax.barh(asam_pos, arr[asam_pos], color='green', ecolor='green')
ax.barh(mdfreader_pos, arr[mdfreader_pos], color='blue', ecolor='black')
ax.set_yticks(y_pos)
ax.set_yticklabels(cat)
ax.invert_yaxis() # labels read top-to-bottom
ax.set_xlabel('Time [ms]' if aspect == 'time' else 'RAM [MB]')
if topic == 'Get':
ax.set_title('Get all channels (36424 calls) - {}'.format('time' if aspect == 'time' else 'ram usage'))
else:
ax.set_title('{} test file - {}'.format(topic, 'time' if aspect == 'time' else 'ram usage'))
ax.xaxis.grid()
fig.subplots_adjust(bottom=0.72/fig.get_figheight(), top=1-0.48/fig.get_figheight(), left=0.4, right=0.9)
if aspect == 'time':
if topic == 'Get':
name = '{}_get_all_channels.png'.format(platform)
else:
name = '{}_{}.png'.format(platform, topic.lower())
else:
if topic == 'Get':
name = '{}_get_all_channels_ram_usage.png'.format(platform)
else:
name = '{}_{}_ram_usage.png'.format(platform, topic.lower())
plt.show()
.. plot::
import matplotlib.pyplot as plt
import numpy as np
res = '../benchmarks/results/x64_asammdf_7.0.1_mdfreader_4.1.rst'
topic = 'Convert'
aspect = 'time'
for_doc = True
with open(res, 'r') as f:
lines = f.readlines()
platform = 'x86' if '32 bit' in lines[2] else 'x64'
idx = [i for i, line in enumerate(lines) if line.startswith('==')]
table_spans = {'open': [idx[1] + 1, idx[2]],
'save': [idx[4] + 1, idx[5]],
'get': [idx[7] + 1, idx[8]],
'convert' : [idx[10] + 1, idx[11]],
'merge' : [idx[13] + 1, idx[14]]}
start, stop = table_spans[topic.lower()]
cat = [l[:50].strip(' \t\n\r\0*') for l in lines[start: stop]]
time = np.array([int(l[50:61].strip(' \t\n\r\0*')) for l in lines[start: stop]])
ram = np.array([int(l[61:].strip(' \t\n\r\0*')) for l in lines[start: stop]])
if aspect == 'ram':
arr = ram
else:
arr = time
y_pos = list(range(len(cat)))
fig, ax = plt.subplots()
fig.set_size_inches(15, 3.8 / 12 * len(cat) + 1.2)
asam_pos = [i for i, c in enumerate(cat) if c.startswith('asam')]
mdfreader_pos = [i for i, c in enumerate(cat) if c.startswith('mdfreader')]
ax.barh(asam_pos, arr[asam_pos], color='green', ecolor='green')
ax.barh(mdfreader_pos, arr[mdfreader_pos], color='blue', ecolor='black')
ax.set_yticks(y_pos)
ax.set_yticklabels(cat)
ax.invert_yaxis() # labels read top-to-bottom
ax.set_xlabel('Time [ms]' if aspect == 'time' else 'RAM [MB]')
if topic == 'Get':
ax.set_title('Get all channels (36424 calls) - {}'.format('time' if aspect == 'time' else 'ram usage'))
else:
ax.set_title('{} test file - {}'.format(topic, 'time' if aspect == 'time' else 'ram usage'))
ax.xaxis.grid()
fig.subplots_adjust(bottom=0.72/fig.get_figheight(), top=1-0.48/fig.get_figheight(), left=0.4, right=0.9)
if aspect == 'time':
if topic == 'Get':
name = '{}_get_all_channels.png'.format(platform)
else:
name = '{}_{}.png'.format(platform, topic.lower())
else:
if topic == 'Get':
name = '{}_get_all_channels_ram_usage.png'.format(platform)
else:
name = '{}_{}_ram_usage.png'.format(platform, topic.lower())
plt.show()
.. plot::
import matplotlib.pyplot as plt
import numpy as np
res = '../benchmarks/results/x64_asammdf_7.0.1_mdfreader_4.1.rst'
topic = 'Convert'
aspect = 'ram'
for_doc = True
with open(res, 'r') as f:
lines = f.readlines()
platform = 'x86' if '32 bit' in lines[2] else 'x64'
idx = [i for i, line in enumerate(lines) if line.startswith('==')]
table_spans = {'open': [idx[1] + 1, idx[2]],
'save': [idx[4] + 1, idx[5]],
'get': [idx[7] + 1, idx[8]],
'convert' : [idx[10] + 1, idx[11]],
'merge' : [idx[13] + 1, idx[14]]}
start, stop = table_spans[topic.lower()]
cat = [l[:50].strip(' \t\n\r\0*') for l in lines[start: stop]]
time = np.array([int(l[50:61].strip(' \t\n\r\0*')) for l in lines[start: stop]])
ram = np.array([int(l[61:].strip(' \t\n\r\0*')) for l in lines[start: stop]])
if aspect == 'ram':
arr = ram
else:
arr = time
y_pos = list(range(len(cat)))
fig, ax = plt.subplots()
fig.set_size_inches(15, 3.8 / 12 * len(cat) + 1.2)
asam_pos = [i for i, c in enumerate(cat) if c.startswith('asam')]
mdfreader_pos = [i for i, c in enumerate(cat) if c.startswith('mdfreader')]
ax.barh(asam_pos, arr[asam_pos], color='green', ecolor='green')
ax.barh(mdfreader_pos, arr[mdfreader_pos], color='blue', ecolor='black')
ax.set_yticks(y_pos)
ax.set_yticklabels(cat)
ax.invert_yaxis() # labels read top-to-bottom
ax.set_xlabel('Time [ms]' if aspect == 'time' else 'RAM [MB]')
if topic == 'Get':
ax.set_title('Get all channels (36424 calls) - {}'.format('time' if aspect == 'time' else 'ram usage'))
else:
ax.set_title('{} test file - {}'.format(topic, 'time' if aspect == 'time' else 'ram usage'))
ax.xaxis.grid()
fig.subplots_adjust(bottom=0.72/fig.get_figheight(), top=1-0.48/fig.get_figheight(), left=0.4, right=0.9)
if aspect == 'time':
if topic == 'Get':
name = '{}_get_all_channels.png'.format(platform)
else:
name = '{}_{}.png'.format(platform, topic.lower())
else:
if topic == 'Get':
name = '{}_get_all_channels_ram_usage.png'.format(platform)
else:
name = '{}_{}_ram_usage.png'.format(platform, topic.lower())
plt.show()
.. plot::
import matplotlib.pyplot as plt
import numpy as np
res = '../benchmarks/results/x64_asammdf_7.0.1_mdfreader_4.1.rst'
topic = 'Merge'
aspect = 'time'
for_doc = True
with open(res, 'r') as f:
lines = f.readlines()
platform = 'x86' if '32 bit' in lines[2] else 'x64'
idx = [i for i, line in enumerate(lines) if line.startswith('==')]
table_spans = {'open': [idx[1] + 1, idx[2]],
'save': [idx[4] + 1, idx[5]],
'get': [idx[7] + 1, idx[8]],
'convert' : [idx[10] + 1, idx[11]],
'merge' : [idx[13] + 1, idx[14]]}
start, stop = table_spans[topic.lower()]
cat = [l[:50].strip(' \t\n\r\0*') for l in lines[start: stop]]
time = np.array([int(l[50:61].strip(' \t\n\r\0*')) for l in lines[start: stop]])
ram = np.array([int(l[61:].strip(' \t\n\r\0*')) for l in lines[start: stop]])
if aspect == 'ram':
arr = ram
else:
arr = time
y_pos = list(range(len(cat)))
fig, ax = plt.subplots()
fig.set_size_inches(15, 3.8 / 12 * len(cat) + 1.2)
asam_pos = [i for i, c in enumerate(cat) if c.startswith('asam')]
mdfreader_pos = [i for i, c in enumerate(cat) if c.startswith('mdfreader')]
ax.barh(asam_pos, arr[asam_pos], color='green', ecolor='green')
ax.barh(mdfreader_pos, arr[mdfreader_pos], color='blue', ecolor='black')
ax.set_yticks(y_pos)
ax.set_yticklabels(cat)
ax.invert_yaxis() # labels read top-to-bottom
ax.set_xlabel('Time [ms]' if aspect == 'time' else 'RAM [MB]')
if topic == 'Get':
ax.set_title('Get all channels (36424 calls) - {}'.format('time' if aspect == 'time' else 'ram usage'))
else:
ax.set_title('{} test file - {}'.format(topic, 'time' if aspect == 'time' else 'ram usage'))
ax.xaxis.grid()
fig.subplots_adjust(bottom=0.72/fig.get_figheight(), top=1-0.48/fig.get_figheight(), left=0.4, right=0.9)
if aspect == 'time':
if topic == 'Get':
name = '{}_get_all_channels.png'.format(platform)
else:
name = '{}_{}.png'.format(platform, topic.lower())
else:
if topic == 'Get':
name = '{}_get_all_channels_ram_usage.png'.format(platform)
else:
name = '{}_{}_ram_usage.png'.format(platform, topic.lower())
plt.show()
.. plot::
import matplotlib.pyplot as plt
import numpy as np
res = '../benchmarks/results/x64_asammdf_7.0.1_mdfreader_4.1.rst'
topic = 'Merge'
aspect = 'ram'
for_doc = True
with open(res, 'r') as f:
lines = f.readlines()
platform = 'x86' if '32 bit' in lines[2] else 'x64'
idx = [i for i, line in enumerate(lines) if line.startswith('==')]
table_spans = {'open': [idx[1] + 1, idx[2]],
'save': [idx[4] + 1, idx[5]],
'get': [idx[7] + 1, idx[8]],
'convert' : [idx[10] + 1, idx[11]],
'merge' : [idx[13] + 1, idx[14]]}
start, stop = table_spans[topic.lower()]
cat = [l[:50].strip(' \t\n\r\0*') for l in lines[start: stop]]
time = np.array([int(l[50:61].strip(' \t\n\r\0*')) for l in lines[start: stop]])
ram = np.array([int(l[61:].strip(' \t\n\r\0*')) for l in lines[start: stop]])
if aspect == 'ram':
arr = ram
else:
arr = time
y_pos = list(range(len(cat)))
fig, ax = plt.subplots()
fig.set_size_inches(15, 3.8 / 12 * len(cat) + 1.2)
asam_pos = [i for i, c in enumerate(cat) if c.startswith('asam')]
mdfreader_pos = [i for i, c in enumerate(cat) if c.startswith('mdfreader')]
ax.barh(asam_pos, arr[asam_pos], color='green', ecolor='green')
ax.barh(mdfreader_pos, arr[mdfreader_pos], color='blue', ecolor='black')
ax.set_yticks(y_pos)
ax.set_yticklabels(cat)
ax.invert_yaxis() # labels read top-to-bottom
ax.set_xlabel('Time [ms]' if aspect == 'time' else 'RAM [MB]')
if topic == 'Get':
ax.set_title('Get all channels (36424 calls) - {}'.format('time' if aspect == 'time' else 'ram usage'))
else:
ax.set_title('{} test file - {}'.format(topic, 'time' if aspect == 'time' else 'ram usage'))
ax.xaxis.grid()
fig.subplots_adjust(bottom=0.72/fig.get_figheight(), top=1-0.48/fig.get_figheight(), left=0.4, right=0.9)
if aspect == 'time':
if topic == 'Get':
name = '{}_get_all_channels.png'.format(platform)
else:
name = '{}_{}.png'.format(platform, topic.lower())
else:
if topic == 'Get':
name = '{}_get_all_channels_ram_usage.png'.format(platform)
else:
name = '{}_{}_ram_usage.png'.format(platform, topic.lower())
plt.show()