diff --git a/tests/benchmarking/__init__.py b/tests/benchmarking/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/tests/benchmarking/plot_time_speedup.py b/tests/benchmarking/plot_time_speedup.py index 5ec61414..2cec59bc 100644 --- a/tests/benchmarking/plot_time_speedup.py +++ b/tests/benchmarking/plot_time_speedup.py @@ -3,37 +3,31 @@ import numpy as np import matplotlib.pyplot as plt import matplotlib.gridspec as gridspec +from gprMax._version import __version__ + moduledirectory = os.path.dirname(os.path.abspath(__file__)) # Machine identifier platformID = platform.platform() -platformlongID = 'iMac (Retina 5K, 27-inch, Late 2014); 4GHz Intel Core i7; Mac OS X 10.11.3' +#machineID = 'MacPro1,1' +#machineIDlong = machineID + ' (2006); 2 x 2.66 GHz Quad-Core Intel Xeon; Mac OS X 10.11.3' +machineID = 'iMac15,1' +machineIDlong = machineID + ' (Retina 5K, 27-inch, Late 2014); 4GHz Intel Core i7; Mac OS X 10.11.3' -# Nmber of physical CPU cores on machine -phycores = psutil.cpu_count(logical=False) - -# Number of threads (0 signifies serial compiled code) -threads = np.array([0, 1, 2, 4]) - -# 100 x 100 x 100 cell model execution times (seconds) -bench1 = np.array([40, 48, 37, 32]) -bench1c = np.array([76, 77, 46, 32]) - -# 150 x 150 x 150 cell model execution times (seconds) -bench2 = np.array([108, 133, 93, 75]) -bench2c = np.array([220, 220, 132, 94]) +# Load results +results = np.load(os.path.join(moduledirectory, machineID + '.npz')) # Plot colours from http://tools.medialab.sciences-po.fr/iwanthue/index.php colors = ['#5CB7C6', '#E60D30', '#A21797', '#A3B347'] -fig, ax = plt.subplots(num=platformID, figsize=(20, 10), facecolor='w', edgecolor='w') -fig.suptitle(platformlongID) +fig, ax = plt.subplots(num=machineIDlong, figsize=(20, 10), facecolor='w', edgecolor='w') +fig.suptitle(machineIDlong) gs = gridspec.GridSpec(1, 2, hspace=0.5) ax = plt.subplot(gs[0, 0]) -ax.plot(threads, bench1, color=colors[1], marker='.', ms=10, lw=2, label='1e6 cells (gprMax v3b21)') -ax.plot(threads, bench1c, color=colors[0], marker='.', ms=10, lw=2, label='1e6 cells (gprMax v2)') -ax.plot(threads, bench2, color=colors[1], marker='.', ms=10, lw=2, ls='--', label='3.375e6 cells (gprMax v3b21)') -ax.plot(threads, bench2c, color=colors[0], marker='.', ms=10, lw=2, ls='--', label='3.375e6 cells (gprMax v2)') +ax.plot(results['threads'], results['bench1'], color=colors[1], marker='.', ms=10, lw=2, label='1e6 cells (v' + __version__ + ')') +ax.plot(results['threads'], results['bench1c'], color=colors[0], marker='.', ms=10, lw=2, label='1e6 cells (v2)') +ax.plot(results['threads'], results['bench2'], color=colors[1], marker='.', ms=10, lw=2, ls='--', label='3.375e6 cells (v' + __version__ + ')') +ax.plot(results['threads'], results['bench2c'], color=colors[0], marker='.', ms=10, lw=2, ls='--', label='3.375e6 cells (v2)') ax.set_xlabel('Number of threads') ax.set_ylabel('Time [s]') @@ -43,15 +37,15 @@ legend = ax.legend(loc=1) frame = legend.get_frame() frame.set_edgecolor('white') -ax.set_xlim([0, phycores]) -ax.set_xticks(threads) -ax.set_ylim(top=ax.get_ylim()[1] * 1.1) +ax.set_xlim([0, results['threads'][-1] * 1.1]) +ax.set_xticks(results['threads']) +ax.set_ylim(0, top=ax.get_ylim()[1] * 1.1) ax = plt.subplot(gs[0, 1]) -ax.plot(threads, bench1[1] / bench1, color=colors[1], marker='.', ms=10, lw=2, label='1e6 cells (gprMax v3b21)') -ax.plot(threads, bench1c[1] / bench1c, color=colors[0], marker='.', ms=10, lw=2, label='1e6 cells (gprMax v2)') -ax.plot(threads, bench2[1] / bench2, color=colors[1], marker='.', ms=10, lw=2, ls='--', label='3.375e6 cells (gprMax v3b21)') -ax.plot(threads, bench2c[1] / bench2c, color=colors[0], marker='.', ms=10, lw=2, ls='--', label='3.375e6 cells (gprMax v2)') +ax.plot(results['threads'], results['bench1'][1] / results['bench1'], color=colors[1], marker='.', ms=10, lw=2, label='1e6 cells (v' + __version__ + ')') +ax.plot(results['threads'], results['bench1c'][1] / results['bench1c'], color=colors[0], marker='.', ms=10, lw=2, label='1e6 cells (v2)') +ax.plot(results['threads'], results['bench2'][1] / results['bench2'], color=colors[1], marker='.', ms=10, lw=2, ls='--', label='3.375e6 cells (v' + __version__ + ')') +ax.plot(results['threads'], results['bench2c'][1] / results['bench2c'], color=colors[0], marker='.', ms=10, lw=2, ls='--', label='3.375e6 cells (v2)') ax.set_xlabel('Number of threads') ax.set_ylabel('Speed-up factor') @@ -61,12 +55,12 @@ legend = ax.legend(loc=1) frame = legend.get_frame() frame.set_edgecolor('white') -ax.set_xlim([0, phycores]) -ax.set_xticks(threads) -ax.set_ylim(top=ax.get_ylim()[1] * 1.1) +ax.set_xlim([0, results['threads'][-1] * 1.1]) +ax.set_xticks(results['threads']) +ax.set_ylim(bottom=1, top=ax.get_ylim()[1] * 1.1) # Save a pdf of the plot -fig.savefig(os.path.join(moduledirectory, platformID + '.png'), dpi=150, format='png', bbox_inches='tight', pad_inches=0.1) +fig.savefig(os.path.join(moduledirectory, machineID + '.png'), dpi=150, format='png', bbox_inches='tight', pad_inches=0.1) plt.show() diff --git a/tests/benchmarking/results/MacOSX/Darwin-15.3.0-x86_64-i386-64bit.png b/tests/benchmarking/results/MacOSX/Darwin-15.3.0-x86_64-i386-64bit.png deleted file mode 100644 index 70979034..00000000 Binary files a/tests/benchmarking/results/MacOSX/Darwin-15.3.0-x86_64-i386-64bit.png and /dev/null differ diff --git a/tests/benchmarking/results/MacOSX/MacPro1,1.npz b/tests/benchmarking/results/MacOSX/MacPro1,1.npz new file mode 100644 index 00000000..12723e72 Binary files /dev/null and b/tests/benchmarking/results/MacOSX/MacPro1,1.npz differ diff --git a/tests/benchmarking/results/MacOSX/MacPro1,1.png b/tests/benchmarking/results/MacOSX/MacPro1,1.png new file mode 100644 index 00000000..9e2fcc5e Binary files /dev/null and b/tests/benchmarking/results/MacOSX/MacPro1,1.png differ diff --git a/tests/benchmarking/results/MacOSX/iMac15,1+Ccode.png b/tests/benchmarking/results/MacOSX/iMac15,1+Ccode.png new file mode 100644 index 00000000..e796ad95 Binary files /dev/null and b/tests/benchmarking/results/MacOSX/iMac15,1+Ccode.png differ diff --git a/tests/benchmarking/results/MacOSX/iMac15,1.npz b/tests/benchmarking/results/MacOSX/iMac15,1.npz new file mode 100644 index 00000000..b0c6d7ed Binary files /dev/null and b/tests/benchmarking/results/MacOSX/iMac15,1.npz differ diff --git a/tests/benchmarking/results/MacOSX/iMac15,1.png b/tests/benchmarking/results/MacOSX/iMac15,1.png new file mode 100644 index 00000000..793ba312 Binary files /dev/null and b/tests/benchmarking/results/MacOSX/iMac15,1.png differ diff --git a/tests/benchmarking/save_results.py b/tests/benchmarking/save_results.py new file mode 100644 index 00000000..e00a4fd1 --- /dev/null +++ b/tests/benchmarking/save_results.py @@ -0,0 +1,25 @@ +import os, platform +import numpy as np + +moduledirectory = os.path.dirname(os.path.abspath(__file__)) + +# Machine identifier +platformID = platform.platform() +machineID = 'MacPro1,1' +machineIDlong = machineID + ' (2006); 2 x 2.66 GHz Quad-Core Intel Xeon; Mac OS X 10.11.3' +#machineID = 'iMac15,1' +#machineIDlong = machineID + ' (Retina 5K, 27-inch, Late 2014); 4GHz Intel Core i7; Mac OS X 10.11.3' + +# Number of threads (0 signifies serial compiled code) +threads = np.array([1, 2, 4, 8]) + +# 100 x 100 x 100 cell model execution times (seconds) +bench1 = np.array([149, 115, 100, 107]) + +# 150 x 150 x 150 cell model execution times (seconds) +bench2 = np.array([393, 289, 243, 235]) + +# Save to file +np.savez(os.path.join(moduledirectory, machineID), threads=threads, bench1=bench1, bench2=bench2) + +