asammdf relies heavily on dict objects. Starting with Python 3.6 the dict objects are more compact and ordered (implementation detail); asammdf uses takes advantage of those changes so for best performance it is advised to use Python >= 3.6.
The benchmarks were done using two test files (available here #14) (for mdf version 3 and 4) of around 170MB. The files contain 183 data groups and a total of 36424 channels.
asamdf 3.0.0 was compared against mdfreader 2.7.5. mdfreader seems to be the most used Python package to handle MDF files, and it also supports both version 3 and 4 of the standard.
The three benchmark cathegories are file open, file save and extracting the data for all channels inside the file(36424 calls). For each cathegory two aspect were noted: elapsed time and peak RAM usage.
You will need the following packages to be able to run the benchmark script
- psutil
- mdfreader
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 )
Benchmark environment
- 3.6.4 (default, Jan 5 2018, 02:35:40) [GCC 7.2.1 20171224]
- Linux-4.15.0-1-MANJARO-x86_64-with-arch-Manjaro-Linux
- 4GB installed RAM
Notations used in the results
- full = asammdf MDF object created with memory=full (everything loaded into RAM)
- low = asammdf MDF object created with memory=low (raw channel data not loaded into RAM, but metadata loaded to RAM)
- minimum = asammdf MDF object created with memory=full (lowest possible RAM usage)
- compress = mdfreader mdf object created with compression=blosc
- noDataLoading = mdfreader mdf object read with noDataLoading=True
Files used for benchmark:
- 183 groups
- 36424 channels
Open file | Time [ms] | RAM [MB] |
---|---|---|
asammdf 3.0.0 full mdfv3 |
|
|
asammdf 3.0.0 low mdfv3 |
|
|
asammdf 3.0.0 minimum mdfv3 |
|
|
mdfreader 2.7.5 mdfv3 |
|
|
mdfreader 2.7.5 compress mdfv3 |
|
|
mdfreader 2.7.5 noDataLoading mdfv3 |
|
|
asammdf 3.0.0 full mdfv4 |
|
|
asammdf 3.0.0 low mdfv4 |
|
|
asammdf 3.0.0 minimum mdfv4 |
|
|
mdfreader 2.7.5 mdfv4 |
|
|
mdfreader 2.7.5 compress mdfv4 |
|
|
mdfreader 2.7.5 noDataLoading mdfv4 |
|
|
Save file | Time [ms] | RAM [MB] |
---|---|---|
asammdf 3.0.0 full mdfv3 |
|
|
asammdf 3.0.0 low mdfv3 |
|
|
asammdf 3.0.0 minimum mdfv3 |
|
|
mdfreader 2.7.5 mdfv3 |
|
|
mdfreader 2.7.5 noDataLoading mdfv3 |
|
|
mdfreader 2.7.5 compress mdfv3 |
|
|
asammdf 3.0.0 full mdfv4 |
|
|
asammdf 3.0.0 low mdfv4 |
|
|
asammdf 3.0.0 minimum mdfv4 |
|
|
mdfreader 2.7.5 mdfv4 |
|
|
mdfreader 2.7.5 noDataLoading mdfv4 |
|
|
mdfreader 2.7.5 compress mdfv4 |
|
|
Get all channels (36424 calls) | Time [ms] | RAM [MB] |
---|---|---|
asammdf 3.0.0 full mdfv3 |
|
|
asammdf 3.0.0 low mdfv3 |
|
|
asammdf 3.0.0 minimum mdfv3 |
|
|
mdfreader 2.7.5 mdfv3 |
|
|
mdfreader 2.7.5 noDataLoading mdfv3 |
|
|
mdfreader 2.7.5 compress mdfv3 |
|
|
asammdf 3.0.0 full mdfv4 |
|
|
asammdf 3.0.0 low mdfv4 |
|
|
asammdf 3.0.0 minimum mdfv4 |
|
|
mdfreader 2.7.5 mdfv4 |
|
|
mdfreader 2.7.5 noDataLoading mdfv4 |
|
|
mdfreader 2.7.5 compress mdfv4 |
|
|
Convert file | Time [ms] | RAM [MB] |
---|---|---|
asammdf 3.0.0 full v3 to v4 |
|
|
asammdf 3.0.0 low v3 to v4 |
|
|
asammdf 3.0.0 minimum v3 to v4 |
|
|
asammdf 3.0.0 full v4 to v3 |
|
|
asammdf 3.0.0 low v4 to v3 |
|
|
asammdf 3.0.0 minimum v4 to v3 |
|
|
Merge files | Time [ms] | RAM [MB] |
---|---|---|
asammdf 3.0.0 full v3 |
|
|
asammdf 3.0.0 low v3 |
|
|
asammdf 3.0.0 minimum v3 |
|
|
mdfreader 2.7.5 mdfv3 |
|
|
mdfreader 2.7.5 compress mdfv3 |
|
|
mdfreader 2.7.5 noDataLoading mdfv3 |
|
|
asammdf 3.0.0 full v4 |
|
|
asammdf 3.0.0 low v4 |
|
|
asammdf 3.0.0 minimum v4 |
|
|
mdfreader 2.7.5 mdfv4 |
|
|
mdfreader 2.7.5 noDataLoading mdfv4 |
|
|
mdfreader 2.7.5 compress mdfv4 |
|
|
import matplotlib.pyplot as plt import numpy as np
res = '../benchmarks/results/x64_asammdf_3.0.0_mdfreader_2.7.5.txt' 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]], 'convert' : [idx[10] + 1, idx[11]], 'merge' : [idx[13] + 1, idx[14]]}
start, stop = table_spans[topic.lower()]
cat = [l[:50].strip(' tnr0') for l in lines[start: stop]] time = np.array([int(l[50:61].strip(' tnr0')) for l in lines[start: stop]]) ram = np.array([int(l[61:].strip(' tnr0*')) 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()
import matplotlib.pyplot as plt import numpy as np
res = '../benchmarks/results/x64_asammdf_3.0.0_mdfreader_2.7.5.txt' 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(' tnr0') for l in lines[start: stop]] time = np.array([int(l[50:61].strip(' tnr0')) for l in lines[start: stop]]) ram = np.array([int(l[61:].strip(' tnr0*')) 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()
import matplotlib.pyplot as plt import numpy as np
res = '../benchmarks/results/x64_asammdf_3.0.0_mdfreader_2.7.5.txt' 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(' tnr0') for l in lines[start: stop]] time = np.array([int(l[50:61].strip(' tnr0')) for l in lines[start: stop]]) ram = np.array([int(l[61:].strip(' tnr0*')) 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()
import matplotlib.pyplot as plt import numpy as np
res = '../benchmarks/results/x64_asammdf_3.0.0_mdfreader_2.7.5.txt' 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(' tnr0') for l in lines[start: stop]] time = np.array([int(l[50:61].strip(' tnr0')) for l in lines[start: stop]]) ram = np.array([int(l[61:].strip(' tnr0*')) 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()
import matplotlib.pyplot as plt import numpy as np
res = '../benchmarks/results/x64_asammdf_3.0.0_mdfreader_2.7.5.txt' 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(' tnr0') for l in lines[start: stop]] time = np.array([int(l[50:61].strip(' tnr0')) for l in lines[start: stop]]) ram = np.array([int(l[61:].strip(' tnr0*')) 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()
import matplotlib.pyplot as plt import numpy as np
res = '../benchmarks/results/x64_asammdf_3.0.0_mdfreader_2.7.5.txt' 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(' tnr0') for l in lines[start: stop]] time = np.array([int(l[50:61].strip(' tnr0')) for l in lines[start: stop]]) ram = np.array([int(l[61:].strip(' tnr0*')) 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()
import matplotlib.pyplot as plt import numpy as np
res = '../benchmarks/results/x64_asammdf_3.0.0_mdfreader_2.7.5.txt' 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(' tnr0') for l in lines[start: stop]] time = np.array([int(l[50:61].strip(' tnr0')) for l in lines[start: stop]]) ram = np.array([int(l[61:].strip(' tnr0*')) 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()
import matplotlib.pyplot as plt import numpy as np
res = '../benchmarks/results/x64_asammdf_3.0.0_mdfreader_2.7.5.txt' 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(' tnr0') for l in lines[start: stop]] time = np.array([int(l[50:61].strip(' tnr0')) for l in lines[start: stop]]) ram = np.array([int(l[61:].strip(' tnr0*')) 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()
import matplotlib.pyplot as plt import numpy as np
res = '../benchmarks/results/x64_asammdf_3.0.0_mdfreader_2.7.5.txt' 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(' tnr0') for l in lines[start: stop]] time = np.array([int(l[50:61].strip(' tnr0')) for l in lines[start: stop]]) ram = np.array([int(l[61:].strip(' tnr0*')) 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()
import matplotlib.pyplot as plt import numpy as np
res = '../benchmarks/results/x64_asammdf_3.0.0_mdfreader_2.7.5.txt' 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(' tnr0') for l in lines[start: stop]] time = np.array([int(l[50:61].strip(' tnr0')) for l in lines[start: stop]]) ram = np.array([int(l[61:].strip(' tnr0*')) 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()