From 04528a928a3e88ce72d6370d14fdb2078d0ff26f Mon Sep 17 00:00:00 2001 From: "Casper V. Kristensen" Date: Fri, 13 Dec 2019 19:19:06 +0100 Subject: [PATCH] Graphs and results. Here we go bro. Wait, are we actually done? --- graph/collect.py | 19 +- graph/graph.py | 309 +- .../results_final_1bs_8kbs_all.log | 173 ++ graph/old_results/results_final_1bs_all.log | 168 + .../results_only_with_8_bs.log | 0 graph/{ => old_results}/results_overflow.log | 0 graph/{ => old_results}/results_small.log | 0 .../Computation_Time___1_bit_Block_Size.pdf | Bin 0 -> 14614 bytes .../Network_Traffic___1_bit_Block_Size.pdf | Bin 0 -> 15710 bytes ...atabase_Size_and_Block_Size___10Mbit_s.pdf | Bin 0 -> 23300 bytes ...atabase_Size_and_Block_Size___10Mbit_s.pdf | Bin 0 -> 23888 bytes ...tabase_Size_and_Block_Size___10_Mbit_s.pdf | Bin 0 -> 28312 bytes ...atabase_Size_and_Block_Size___10Mbit_s.pdf | Bin 0 -> 22435 bytes ...tabase_Size_and_Block_Size___10_Mbit_s.pdf | Bin 0 -> 28442 bytes ...Simulated_Bandwidth___1_bit_Block_Size.pdf | Bin 0 -> 15761 bytes graph/results/results_all_1-bs_var-db.log | 168 + graph/results/results_all_var-bs_2-db.log | 167 + graph/results/results_combined.log | 2689 +++++++++++++++++ graph/results/results_fast_var-bs_var-db.log | 2354 +++++++++++++++ graph/util.py | 141 + 20 files changed, 6149 insertions(+), 39 deletions(-) create mode 100644 graph/old_results/results_final_1bs_8kbs_all.log create mode 100644 graph/old_results/results_final_1bs_all.log rename graph/{ => old_results}/results_only_with_8_bs.log (100%) rename graph/{ => old_results}/results_overflow.log (100%) rename graph/{ => old_results}/results_small.log (100%) create mode 100644 graph/plots/Computation_Time___1_bit_Block_Size.pdf create mode 100644 graph/plots/Network_Traffic___1_bit_Block_Size.pdf create mode 100644 graph/plots/Total_Simulated_Time_Heatmap__Balanced_XOR___Varying_Database_Size_and_Block_Size___10Mbit_s.pdf create mode 100644 graph/plots/Total_Simulated_Time_Heatmap__Send_All___Varying_Database_Size_and_Block_Size___10Mbit_s.pdf create mode 100644 graph/plots/Total_Simulated_Time_Heatmap__Send_All_vs_Balanced_XOR___Varying_Database_Size_and_Block_Size___10_Mbit_s.pdf create mode 100644 graph/plots/Total_Simulated_Time_Heatmap__XOR___Varying_Database_Size_and_Block_Size___10Mbit_s.pdf create mode 100644 graph/plots/Total_Simulated_Time_Heatmap__XOR_vs_Balanced_XOR___Varying_Database_Size_and_Block_Size___10_Mbit_s.pdf create mode 100644 graph/plots/Total_Time_with_Simulated_Bandwidth___1_bit_Block_Size.pdf create mode 100644 graph/results/results_all_1-bs_var-db.log create mode 100644 graph/results/results_all_var-bs_2-db.log create mode 100644 graph/results/results_combined.log create mode 100644 graph/results/results_fast_var-bs_var-db.log create mode 100644 graph/util.py diff --git a/graph/collect.py b/graph/collect.py index 322c88a..29ba31c 100644 --- a/graph/collect.py +++ b/graph/collect.py @@ -1,12 +1,21 @@ import subprocess -def main(): +def simple_collect(): for num_servers in [2]: - for database_size in [2, 64, 512, 2048, 8192, 32_768, 65_536, 131_072, 262_144, 524_288, 1_048_576, 2_097_152, 4_194_304, 8_388_608]: - for block_size in [2, 64, 512, 1024, 4096, 8192, 16_384]: - subprocess.run(["java", "dk.au.pir.Driver", "-Xmx60G", str(num_servers), str(database_size), str(block_size)]) + for block_size in [1]: + for database_size in [2, 4, 8, 16, 32, 64, 128, 256, 512, 1_024, 2_048, 4_096, 8_192, 16_384, 32_768, 65_536, 131_072, 262_144, 524_288, 1_048_576, 2_097_152, 4_194_304, 8_388_608]: + subprocess.run(["java", "dk.au.pir.Driver", "-Xmx250G", str(num_servers), str(database_size), str(block_size)]) + + +def smarter_but_still_not_very_smart_collect(): + combinations = set() + for block_size in [1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1_024, 2_048, 4_096, 8_192, 16_384, 32_768, 65_536, 131_072, 262_144, 524_288, 1_048_576]: + for database_size in [2, 4, 8, 16, 32, 64, 128, 256, 512, 1_024, 2_048, 4_096, 8_192, 16_384, 32_768, 65_536, 131_072, 262_144, 524_288, 1_048_576, 2_097_152, 4_194_304, 8_388_608, 16_777_216, 33_554_432, 67_108_864, 134_217_728, 268_435_456, 536_870_912]: + combinations.add((block_size, database_size)) + for block_size, database_size in sorted(combinations, key=lambda c: c[0] * c[1]): + subprocess.run(["java", "dk.au.pir.Driver", "-Xmx250G", "2", str(database_size), str(block_size)]) if __name__ == '__main__': - main() + smarter_but_still_not_very_smart_collect() diff --git a/graph/graph.py b/graph/graph.py index 86bc3c8..acf569a 100644 --- a/graph/graph.py +++ b/graph/graph.py @@ -1,13 +1,19 @@ import math +import re import statistics from collections import defaultdict +import matplotlib.cm as cm import matplotlib.pyplot as plt +import numpy as np +from matplotlib.artist import setp + +import util def load_results(filename) -> dict: results = defaultdict(list) - with open(filename, "r") as file: + with open(f"results/{filename}", "r") as file: for line in file: if "error" in line: continue @@ -18,8 +24,8 @@ def load_results(filename) -> dict: ("block_size", int), ("protocol_name", str), ("total_cpu_time", int), - ("bytes_sent", int), - ("bytes_received", int) + ("bits_sent", int), + ("bits_received", int) ] d = dict([(a[0], a[1](b)) for a, b in zip(keys, values)]) results[(d["num_servers"], d["database_size"], d["block_size"], d["protocol_name"])].append(d) @@ -29,60 +35,295 @@ def load_results(filename) -> dict: def clean_results(results) -> dict: cleaned_results = defaultdict(list) for test, result in results.items(): - cpu_time = statistics.mean(sorted([int(r["total_cpu_time"]) for r in result])) # [1:-1] - cleaned_results[result[0]["protocol_name"]].append({**result[0], "total_cpu_time": cpu_time}) + cpu_time = statistics.mean(sorted([int(r["total_cpu_time"]) for r in result])) + bits_sent = statistics.mean(sorted([int(r["bits_sent"]) for r in result])) + bits_received = statistics.mean(sorted([int(r["bits_received"]) for r in result])) + cleaned_results[result[0]["protocol_name"]].append({ + **result[0], + "total_cpu_time": cpu_time, + "bits_sent": bits_sent, + "bits_received": bits_received + }) return cleaned_results -def plot(all_results: dict, y_func: callable, x_func: callable, title=None, y_label=None, x_label=None): +def filter_results(results: dict, func: callable): + return {protocol_name: [r for r in results if func(r)] + for protocol_name, results in results.items()} + + +def save_fig(plt, title): + clean_title = re.sub(r"\W", r"_", title) + plt.savefig(f"plots/{clean_title}.pdf") + + +def with_bandwidth(result: dict, bandwidth=10): + return max(1, result["total_cpu_time"] + ((result["bits_sent"] + result["bits_received"]) / (bandwidth * 1000))) # 1000 bits/ms = 1 Mbit/s + + +def plot(all_results: dict, y_func: callable, x_func: callable, title=None, y_label=None, x_label=None, + logx=False, logy=False, scatter=False): fig, ax = plt.subplots() for protocol_name, results in all_results.items(): sorted_results = sorted(results, key=lambda r: x_func(r)) - ax.plot( + if scatter: + plot_func = ax.scatter + else: + plot_func = ax.plot + plot_func( [x_func(r) for r in sorted_results], [y_func(r) for r in sorted_results], + label=protocol_name.replace("_", " ") ) - ax.set_xscale("log", basex=2) - #ax.set_yscale("log", basey=10) + #for results in all_results.values(): + # for r in results: + # ax.annotate(f"{r['database_size']}, {r['block_size']}", (x_func(r), y_func(r)), fontsize=3) + + if logx: + ax.set_xscale("log", basex=2) + if logy: + ax.set_yscale("log", basey=2) if x_label is not None: plt.xlabel(x_label) if y_label is not None: plt.ylabel(y_label) - plt.legend(all_results.keys(), loc="upper left") - if title is not None: - plt.title(title) + plt.legend(loc="upper left") + #if title is not None: + # plt.title(title) - plt.savefig(title.replace(" ", "_").replace("/", "") + ".pdf") + save_fig(plt, title) #plt.show() -if __name__ == '__main__': +def plot_3x_with_simulated_bandwidth(all_results: dict, title: str): + ax1 = plt.subplot(121) + ax2 = plt.subplot(122, sharex=ax1, sharey=ax1) + + ax1.set_ylabel("Time (ms)") + setp(ax2.get_yticklabels(), visible=False) + ax1.set_xlabel("Total Database Size (bits)") + ax2.set_xlabel("Total Database Size (bits)") + + for ax in (ax1, ax2): + ax.tick_params("y") + ax.set_xscale("log", basex=2) + ax.set_yscale("log", basey=2) + + ax1.set_title("10 Mbit/s)") + ax2.set_title("100 Mbit/s") + + for protocol_name, results in all_results.items(): + x_func = lambda r: r["database_size"] * r["block_size"] + sorted_results = sorted(results, key=lambda r: x_func(r)) + ax1.plot( + [x_func(r) for r in sorted_results], + [with_bandwidth(r, 10) for r in sorted_results], + label=protocol_name.replace("_", " ") + ) + ax2.plot( + [x_func(r) for r in sorted_results], + [with_bandwidth(r, 100) for r in sorted_results], + label=protocol_name.replace("_", " ") + ) + + ax1.legend(loc="upper left") + # fig.subplots_adjust(wspace=0) + save_fig(plt, title) + #plt.show() + + +def plot_send_receive(all_results: dict, title: str): + ax1 = plt.subplot(121) + ax2 = plt.subplot(122, sharex=ax1) + + ax1.set_ylabel("Sent (bits)") + ax2.set_ylabel("Received (bits)") + setp(ax2.get_yticklabels(), visible=False) + ax2.yaxis.set_label_position("left") + + for ax in (ax1, ax2): + ax.set_xlabel("Total Database Size (bits)") + ax.tick_params("y") + ax.set_xscale("log", basex=2) + ax.set_yscale("log", basey=2) + + for protocol_name, results in all_results.items(): + x_func = lambda r: r["database_size"] * r["block_size"] + sorted_results = sorted(results, key=lambda r: x_func(r)) + ax1.plot( + [x_func(r) for r in sorted_results], + [max(1, r["bits_sent"]) for r in sorted_results], + label=protocol_name.replace("_", " ") + ) + ax2.plot( + [x_func(r) for r in sorted_results], + [max(1, r["bits_received"]) for r in sorted_results], + label=protocol_name.replace("_", " ") + ) + + ax1.legend(loc="upper left") + # fig.subplots_adjust(wspace=0) + save_fig(plt, title) + #plt.show() + + +def matrixify(results: list, x_func: callable, y_func: callable, z_func: callable): + x_labels = list(sorted(set(x_func(r) for r in results))) + y_labels = list(sorted(set(y_func(r) for r in results))) + + data = {y: {x: 1 for x in x_labels} + for y in y_labels} + + for r in results: + data[y_func(r)][x_func(r)] = z_func(r) + + return np.array([list(y.values()) for y in data.values()]), x_labels, y_labels + + +def plot_scheme_heatmap(results: list, title: str, bandwidth: int): + data, x_labels, y_labels = matrixify( + results, + x_func=lambda r: r["database_size"], + y_func=lambda r: r["block_size"], + z_func=lambda r: with_bandwidth(r, bandwidth) + ) + + im, cbar = util.heatmap( + data, + [f"$2^{{{int(math.log2(y))}}}$" for y in y_labels], + [f"$2^{{{int(math.log2(x))}}}$" for x in x_labels], + xlabel="Database Size (bits)", + ylabel="Block Size (bits)", + cbarlabel="Time (ms)", + logcolor=True, + origin="lower", + cmap=cm.gray + ) + save_fig(plt, title) + + +def plot_old_vs_new_heatmap(all_results: dict, old_func: callable, new_func: callable, title: str): + data_old, x_labels, y_labels = matrixify( + old_func(all_results), + x_func=lambda r: r["database_size"], + y_func=lambda r: r["block_size"], + z_func=lambda r: with_bandwidth(r, 10) + ) + data_new, x_labels, y_labels = matrixify( + new_func(all_results), + x_func=lambda r: r["database_size"], + y_func=lambda r: r["block_size"], + z_func=lambda r: with_bandwidth(r, 10) + ) + + def calc(i, j): + try: + return data_new[i, j] - data_old[i, j] + except IndexError: + return 0 + + im, cbar = util.heatmap( + np.array([[calc(i, j) for j, y in enumerate(x)] for i, x in enumerate(data_new)]), + [f"$2^{{{int(math.log2(y))}}}$" for y in y_labels], + [f"$2^{{{int(math.log2(x))}}}$" for x in x_labels], + xlabel="Database Size (bits)", + ylabel="Block Size (bits)", + cbarlabel="Time Difference (ms)", + sym_logcolor=True, + origin="lower", + ) + save_fig(plt, title) + + +def main(): + # Simple CPU Time plot( - clean_results(load_results("results_only_with_8_bs.log")), - y_label="Time", - x_label="Total Database Size", - title="Fixed 8-bit block size", + filter_results(clean_results(load_results("results_combined.log")), lambda r: r["block_size"] == 1), + y_label="Time (ms)", + x_label="Total Database Size (bits)", + title="Computation Time - 1-bit Block Size", y_func=lambda r: max(1, r["total_cpu_time"]), - x_func=lambda r: r["database_size"] * r["block_size"] - ) - - plot( - clean_results(load_results("results_only_with_8_bs.log")), - y_label="Time", - x_label="Total Database Size", - title="Fixed 8-bit block size - simulated 1MiB/s tx, 5MiB/s rx", - y_func=lambda r: r["total_cpu_time"] + (r["bytes_sent"]/(1*1024)) + (r["bytes_received"]/(5*1024)), # 1024 B/ms = 1MiB/s - x_func=lambda r: r["database_size"] * r["block_size"] + x_func=lambda r: r["database_size"] * r["block_size"], + logx=True, + logy=True + ) + plt.close() + # ... with simulated bandwidth, e.g. estimated total real time + plot_3x_with_simulated_bandwidth( + filter_results(clean_results(load_results("results_combined.log")), lambda r: r["block_size"] == 1), + title="Total Time with Simulated Bandwidth - 1-bit Block Size" ) + # CPU Time per bit as a function of block/database-ratio #plot( - # {n: [r for r in rs if r["block_size"] == 2] for n, rs in clean_results(load_results("results_overflow.log")).items()}, - # y_label="Time", - # x_label="Total Database Size", - # title="lol", - # y_func=lambda r: r["total_cpu_time"] + (r["bytes_sent"]/(1*1024)) + (r["bytes_received"]/(10*1024)), # 1024 B/ms = 1MiB/s - # x_func=lambda r: r["database_size"] * r["block_size"] + # filter_results(clean_results(load_results("results_combined.log")), + # lambda r: r["protocol_name"] != "Interpolation" and r["database_size"] * r["block_size"] > 1024), + # y_label="Time (ms)", + # x_label="Block Size / Database Size (ratio)", + # title="Computation Time per bit - Block Size / Database Size Ratio", + # y_func=lambda r: max(1, r["total_cpu_time"] / (r["database_size"] * r["block_size"])), + # x_func=lambda r: r["block_size"] / r["database_size"], + # logx=True #) + plt.close() + + # Simple Network Traffic + plot_send_receive( + filter_results(clean_results(load_results("results_combined.log")), lambda r: r["block_size"] == 1), + title="Network Traffic - 1-bit Block Size" + ) + + # Scatter-plot of total real-time (cpu + simulated bandwidth), varying both block size and database size + #plot( + # clean_results(load_results("results_fast_var-bs_var-db.log")), + # y_label="Time (ms)", + # x_label="Total Database Size (bits)", + # title="Total Time with Simulated Bandwidth - Varying Block and Database Size", + # y_func=lambda r: max(1, r["total_cpu_time"] + ((r["bits_sent"]+r["bits_received"])/(10*1000))), # 1000 bits/ms = 1 Mbit/s + # x_func=lambda r: r["database_size"] * r["block_size"], + # scatter=True + #) + plt.close() + + # 2D Heatmap of CPU time for Simple/XOR/Balanced XOR - varying both database size and block size + plot_scheme_heatmap( + clean_results(load_results("results_fast_var-bs_var-db.log"))["Send_All"], + title="Total Simulated Time Heatmap: Send All - Varying Database Size and Block Size - 10Mbit/s", + bandwidth=10 + ) + plt.close() + plot_scheme_heatmap( + clean_results(load_results("results_fast_var-bs_var-db.log"))["XOR"], + title="Total Simulated Time Heatmap: XOR - Varying Database Size and Block Size - 10Mbit/s", + bandwidth=10 + ) + plt.close() + plot_scheme_heatmap( + clean_results(load_results("results_fast_var-bs_var-db.log"))["Balanced_XOR"], + title="Total Simulated Time Heatmap: Balanced XOR - Varying Database Size and Block Size - 10Mbit/s", + bandwidth=10 + ) + plt.close() + + # 2D Heatmaps of Schemes Versus (CPU + simulated bandwidth), varying both block size and database size + plot_old_vs_new_heatmap( + clean_results(load_results("results_fast_var-bs_var-db.log")), + old_func=lambda rs: rs["Send_All"], + new_func=lambda rs: rs["Balanced_XOR"], + title="Total Simulated Time Heatmap: Send All vs Balanced XOR - Varying Database Size and Block Size - 10 Mbit/s" + ) + plt.close() + plot_old_vs_new_heatmap( + clean_results(load_results("results_fast_var-bs_var-db.log")), + old_func=lambda rs: rs["XOR"], + new_func=lambda rs: rs["Balanced_XOR"], + title="Total Simulated Time Heatmap: XOR vs Balanced XOR - Varying Database Size and Block Size - 10 Mbit/s" + ) + plt.close() + + +if __name__ == '__main__': + main() diff --git a/graph/old_results/results_final_1bs_8kbs_all.log b/graph/old_results/results_final_1bs_8kbs_all.log new file mode 100644 index 0000000..16bed8a --- /dev/null +++ b/graph/old_results/results_final_1bs_8kbs_all.log @@ -0,0 +1,173 @@ +2 2 1 SendAllScheme 0 0 2 +2 2 1 XORScheme 0 4 2 +2 2 1 SqrtXORScheme 0 4 4 +2 2 1 SendAllScheme 0 0 2 +2 2 1 XORScheme 0 4 2 +2 2 1 SqrtXORScheme 0 4 4 +2 2 1 SendAllScheme 0 0 2 +2 2 1 XORScheme 0 4 2 +2 2 1 SqrtXORScheme 0 4 4 +2 64 1 SendAllScheme 0 0 64 +2 64 1 XORScheme 1 128 2 +2 64 1 SqrtXORScheme 1 16 16 +2 64 1 SendAllScheme 0 0 64 +2 64 1 XORScheme 0 128 2 +2 64 1 SqrtXORScheme 0 16 16 +2 64 1 SendAllScheme 0 0 64 +2 64 1 XORScheme 0 128 2 +2 64 1 SqrtXORScheme 0 16 16 +2 512 1 SendAllScheme 0 0 512 +2 512 1 XORScheme 0 1024 2 +2 512 1 SqrtXORScheme 0 46 46 +2 512 1 SendAllScheme 0 0 512 +2 512 1 XORScheme 0 1024 2 +2 512 1 SqrtXORScheme 0 46 46 +2 512 1 SendAllScheme 0 0 512 +2 512 1 XORScheme 0 1024 2 +2 512 1 SqrtXORScheme 0 46 46 +2 2048 1 SendAllScheme 0 0 2048 +2 2048 1 XORScheme 1 4096 2 +2 2048 1 SqrtXORScheme 0 92 92 +2 2048 1 SendAllScheme 0 0 2048 +2 2048 1 XORScheme 1 4096 2 +2 2048 1 SqrtXORScheme 0 92 92 +2 2048 1 SendAllScheme 0 0 2048 +2 2048 1 XORScheme 1 4096 2 +2 2048 1 SqrtXORScheme 0 92 92 +2 8192 1 SendAllScheme 1 0 8192 +2 8192 1 XORScheme 3 16384 2 +2 8192 1 SqrtXORScheme 1 182 182 +2 8192 1 SendAllScheme 0 0 8192 +2 8192 1 XORScheme 2 16384 2 +2 8192 1 SqrtXORScheme 1 182 182 +2 8192 1 SendAllScheme 0 0 8192 +2 8192 1 XORScheme 2 16384 2 +2 8192 1 SqrtXORScheme 1 182 182 +2 32768 1 SendAllScheme 0 0 32768 +2 32768 1 XORScheme 8 65536 2 +2 32768 1 SqrtXORScheme 4 364 364 +2 32768 1 SendAllScheme 0 0 32768 +2 32768 1 XORScheme 4 65536 2 +2 32768 1 SqrtXORScheme 1 364 364 +2 32768 1 SendAllScheme 0 0 32768 +2 32768 1 XORScheme 2 65536 2 +2 32768 1 SqrtXORScheme 1 364 364 +2 65536 1 SendAllScheme 0 0 65536 +2 65536 1 XORScheme 12 131072 2 +2 65536 1 SqrtXORScheme 5 512 512 +2 65536 1 SendAllScheme 0 0 65536 +2 65536 1 XORScheme 2 131072 2 +2 65536 1 SqrtXORScheme 1 512 512 +2 65536 1 SendAllScheme 0 0 65536 +2 65536 1 XORScheme 2 131072 2 +2 65536 1 SqrtXORScheme 2 512 512 +2 131072 1 SendAllScheme 0 0 131072 +2 131072 1 XORScheme 16 262144 2 +2 131072 1 SqrtXORScheme 6 726 726 +2 131072 1 SendAllScheme 0 0 131072 +2 131072 1 XORScheme 5 262144 2 +2 131072 1 SqrtXORScheme 0 726 726 +2 131072 1 SendAllScheme 0 0 131072 +2 131072 1 XORScheme 4 262144 2 +2 131072 1 SqrtXORScheme 0 726 726 +2 262144 1 SendAllScheme 0 0 262144 +2 262144 1 XORScheme 20 524288 2 +2 262144 1 SqrtXORScheme 9 1024 1024 +2 262144 1 SendAllScheme 0 0 262144 +2 262144 1 XORScheme 5 524288 2 +2 262144 1 SqrtXORScheme 4 1024 1024 +2 262144 1 SendAllScheme 0 0 262144 +2 262144 1 XORScheme 7 524288 2 +2 262144 1 SqrtXORScheme 1 1024 1024 +2 524288 1 SendAllScheme 0 0 524288 +2 524288 1 XORScheme 29 1048576 2 +2 524288 1 SqrtXORScheme 10 1450 1450 +2 524288 1 SendAllScheme 0 0 524288 +2 524288 1 XORScheme 15 1048576 2 +2 524288 1 SqrtXORScheme 1 1450 1450 +2 524288 1 SendAllScheme 0 0 524288 +2 524288 1 XORScheme 10 1048576 2 +2 524288 1 SqrtXORScheme 2 1450 1450 +2 1048576 1 SendAllScheme 0 0 1048576 +2 1048576 1 XORScheme 43 2097152 2 +2 1048576 1 SqrtXORScheme 19 2048 2048 +2 1048576 1 SendAllScheme 0 0 1048576 +2 1048576 1 XORScheme 25 2097152 2 +2 1048576 1 SqrtXORScheme 2 2048 2048 +2 1048576 1 SendAllScheme 0 0 1048576 +2 1048576 1 XORScheme 21 2097152 2 +2 1048576 1 SqrtXORScheme 2 2048 2048 +2 2097152 1 SendAllScheme 0 0 2097152 +2 2097152 1 XORScheme 67 4194304 2 +2 2097152 1 SqrtXORScheme 25 2898 2898 +2 2097152 1 SendAllScheme 0 0 2097152 +2 2097152 1 XORScheme 46 4194304 2 +2 2097152 1 SqrtXORScheme 4 2898 2898 +2 2097152 1 SendAllScheme 0 0 2097152 +2 2097152 1 XORScheme 42 4194304 2 +2 2097152 1 SqrtXORScheme 5 2898 2898 +2 4194304 1 SendAllScheme 0 0 4194304 +2 4194304 1 XORScheme 112 8388608 2 +2 4194304 1 SqrtXORScheme 37 4096 4096 +2 4194304 1 SendAllScheme 0 0 4194304 +2 4194304 1 XORScheme 89 8388608 2 +2 4194304 1 SqrtXORScheme 9 4096 4096 +2 4194304 1 SendAllScheme 0 0 4194304 +2 4194304 1 XORScheme 84 8388608 2 +2 4194304 1 SqrtXORScheme 10 4096 4096 +2 8388608 1 SendAllScheme 0 0 8388608 +2 8388608 1 XORScheme 196 16777216 2 +2 8388608 1 SqrtXORScheme 46 5794 5794 +2 8388608 1 SendAllScheme 0 0 8388608 +2 8388608 1 XORScheme 170 16777216 2 +2 8388608 1 SqrtXORScheme 28 5794 5794 +2 8388608 1 SendAllScheme 0 0 8388608 +2 8388608 1 XORScheme 164 16777216 2 +2 8388608 1 SqrtXORScheme 36 5794 5794 +2 2 8192 SendAllScheme 1 0 16384 +2 2 8192 XORScheme 2835 268435456 16384 +2 2 8192 SqrtXORScheme 347 2097152 2097152 +2 2 8192 SendAllScheme 1 0 16384 +2 2 8192 XORScheme 2831 268435456 16384 +2 2 8192 SqrtXORScheme 329 2097152 2097152 +2 2 8192 SendAllScheme 1 0 16384 +2 2 8192 XORScheme 2761 268435456 16384 +2 2 8192 SqrtXORScheme 328 2097152 2097152 +2 64 8192 SendAllScheme 1 0 524288 +2 64 8192 XORScheme 84464 8589934592 16384 +2 64 8192 SqrtXORScheme 9673 11878400 11878400 +2 64 8192 SendAllScheme 1 0 524288 +2 64 8192 XORScheme 83689 8589934592 16384 +2 64 8192 SqrtXORScheme 11038 11878400 11878400 +2 64 8192 SendAllScheme 1 0 524288 +2 64 8192 XORScheme 83580 8589934592 16384 +2 64 8192 SqrtXORScheme 11040 11878400 11878400 +2 512 8192 SendAllScheme 1 0 4194304 +2 512 8192 XORScheme error:oom +2 512 8192 SqrtXORScheme 88384 33554432 33554432 +2 512 8192 SendAllScheme 1 0 4194304 +2 512 8192 XORScheme error:oom +2 512 8192 SqrtXORScheme 78220 33554432 33554432 +2 512 8192 SendAllScheme 1 0 4194304 +2 512 8192 XORScheme error:oom +2 512 8192 SqrtXORScheme 78214 33554432 33554432 +2 2048 8192 SendAllScheme 2 0 16777216 +2 2048 8192 XORScheme error:oom +2 2048 8192 SqrtXORScheme 410902 67108864 67108864 +2 2048 8192 SendAllScheme 1 0 16777216 +2 2048 8192 XORScheme error:oom +2 2048 8192 SqrtXORScheme 403634 67108864 67108864 +2 2048 8192 SendAllScheme 1 0 16777216 +2 2048 8192 XORScheme error:oom +2 2048 8192 SqrtXORScheme 403194 67108864 67108864 +2 8192 8192 SendAllScheme 1 0 67108864 +2 8192 8192 XORScheme error:oom +2 8192 8192 SqrtXORScheme 2129871 134217728 134217728 +2 8192 8192 SendAllScheme 1 0 67108864 +2 8192 8192 XORScheme error:oom +2 8192 8192 SqrtXORScheme 2117438 134217728 134217728 +2 8192 8192 SendAllScheme 1 0 67108864 +2 8192 8192 XORScheme error:oom +2 8192 8192 SqrtXORScheme 2116519 134217728 134217728 +2 32768 8192 SendAllScheme 1 0 268435456 +2 32768 8192 XORScheme error:oom diff --git a/graph/old_results/results_final_1bs_all.log b/graph/old_results/results_final_1bs_all.log new file mode 100644 index 0000000..a21262d --- /dev/null +++ b/graph/old_results/results_final_1bs_all.log @@ -0,0 +1,168 @@ +2 2 1 SendAllScheme 0 0 2 +2 2 1 XORScheme 0 4 2 +2 2 1 SqrtXORScheme 0 4 4 +2 2 1 InterPolyScheme 2 9 9 +2 2 1 SendAllScheme 0 0 2 +2 2 1 XORScheme 0 4 2 +2 2 1 SqrtXORScheme 0 4 4 +2 2 1 InterPolyScheme 1 18 10 +2 2 1 SendAllScheme 0 0 2 +2 2 1 XORScheme 0 4 2 +2 2 1 SqrtXORScheme 0 4 4 +2 2 1 InterPolyScheme 1 18 9 +2 64 1 SendAllScheme 0 0 64 +2 64 1 XORScheme 0 128 2 +2 64 1 SqrtXORScheme 0 16 16 +2 64 1 InterPolyScheme 7 482 9 +2 64 1 SendAllScheme 0 0 64 +2 64 1 XORScheme 0 128 2 +2 64 1 SqrtXORScheme 0 16 16 +2 64 1 InterPolyScheme 3 514 0 +2 64 1 SendAllScheme 0 0 64 +2 64 1 XORScheme 0 128 2 +2 64 1 SqrtXORScheme 0 16 16 +2 64 1 InterPolyScheme 2 508 9 +2 512 1 SendAllScheme 0 0 512 +2 512 1 XORScheme 1 1024 2 +2 512 1 SqrtXORScheme 0 46 46 +2 512 1 InterPolyScheme 23 4112 3 +2 512 1 SendAllScheme 0 0 512 +2 512 1 XORScheme 0 1024 2 +2 512 1 SqrtXORScheme 0 46 46 +2 512 1 InterPolyScheme 6 3905 9 +2 512 1 SendAllScheme 0 0 512 +2 512 1 XORScheme 0 1024 2 +2 512 1 SqrtXORScheme 0 46 46 +2 512 1 InterPolyScheme 6 4082 7 +2 2048 1 SendAllScheme 0 0 2048 +2 2048 1 XORScheme 1 4096 2 +2 2048 1 SqrtXORScheme 0 92 92 +2 2048 1 InterPolyScheme 69 16092 10 +2 2048 1 SendAllScheme 0 0 2048 +2 2048 1 XORScheme 1 4096 2 +2 2048 1 SqrtXORScheme 0 92 92 +2 2048 1 InterPolyScheme 45 16018 9 +2 2048 1 SendAllScheme 0 0 2048 +2 2048 1 XORScheme 1 4096 2 +2 2048 1 SqrtXORScheme 0 92 92 +2 2048 1 InterPolyScheme 40 16047 10 +2 8192 1 SendAllScheme 0 0 8192 +2 8192 1 XORScheme 3 16384 2 +2 8192 1 SqrtXORScheme 1 182 182 +2 8192 1 InterPolyScheme 684 64567 7 +2 8192 1 SendAllScheme 0 0 8192 +2 8192 1 XORScheme 2 16384 2 +2 8192 1 SqrtXORScheme 1 182 182 +2 8192 1 InterPolyScheme 363 64206 3 +2 8192 1 SendAllScheme 0 0 8192 +2 8192 1 XORScheme 2 16384 2 +2 8192 1 SqrtXORScheme 1 182 182 +2 8192 1 InterPolyScheme 342 64668 9 +2 32768 1 SendAllScheme 0 0 32768 +2 32768 1 XORScheme 8 65536 2 +2 32768 1 SqrtXORScheme 4 364 364 +2 32768 1 InterPolyScheme 4771 258217 9 +2 32768 1 SendAllScheme 0 0 32768 +2 32768 1 XORScheme 5 65536 2 +2 32768 1 SqrtXORScheme 0 364 364 +2 32768 1 InterPolyScheme 5704 257927 7 +2 32768 1 SendAllScheme 0 0 32768 +2 32768 1 XORScheme 2 65536 2 +2 32768 1 SqrtXORScheme 1 364 364 +2 32768 1 InterPolyScheme 5129 257162 9 +2 65536 1 SendAllScheme 0 0 65536 +2 65536 1 XORScheme 12 131072 2 +2 65536 1 SqrtXORScheme 5 512 512 +2 65536 1 InterPolyScheme 29591 515270 9 +2 65536 1 SendAllScheme 0 0 65536 +2 65536 1 XORScheme 2 131072 2 +2 65536 1 SqrtXORScheme 0 512 512 +2 65536 1 InterPolyScheme 17770 515170 8 +2 65536 1 SendAllScheme 0 0 65536 +2 65536 1 XORScheme 2 131072 2 +2 65536 1 SqrtXORScheme 0 512 512 +2 65536 1 InterPolyScheme 28930 515357 10 +2 131072 1 SendAllScheme 0 0 131072 +2 131072 1 XORScheme 15 262144 2 +2 131072 1 SqrtXORScheme 7 726 726 +2 131072 1 InterPolyScheme 71549 1030490 9 +2 131072 1 SendAllScheme 0 0 131072 +2 131072 1 XORScheme 3 262144 2 +2 131072 1 SqrtXORScheme 1 726 726 +2 131072 1 InterPolyScheme 26342 1030046 10 +2 131072 1 SendAllScheme 0 0 131072 +2 131072 1 XORScheme 2 262144 2 +2 131072 1 SqrtXORScheme 1 726 726 +2 131072 1 InterPolyScheme 26159 1030650 9 +2 262144 1 SendAllScheme 0 0 262144 +2 262144 1 XORScheme 21 524288 2 +2 262144 1 SqrtXORScheme 9 1024 1024 +2 262144 1 InterPolyScheme error:oom +2 262144 1 SendAllScheme 0 0 262144 +2 262144 1 XORScheme 8 524288 2 +2 262144 1 SqrtXORScheme 3 1024 1024 +2 262144 1 InterPolyScheme error:oom +2 262144 1 SendAllScheme 0 0 262144 +2 262144 1 XORScheme 5 524288 2 +2 262144 1 SqrtXORScheme 1 1024 1024 +2 262144 1 InterPolyScheme error:oom +2 524288 1 SendAllScheme 0 0 524288 +2 524288 1 XORScheme 29 1048576 2 +2 524288 1 SqrtXORScheme 10 1450 1450 +2 524288 1 InterPolyScheme error:oom +2 524288 1 SendAllScheme 0 0 524288 +2 524288 1 XORScheme 10 1048576 2 +2 524288 1 SqrtXORScheme 2 1450 1450 +2 524288 1 InterPolyScheme error:oom +2 524288 1 SendAllScheme 0 0 524288 +2 524288 1 XORScheme 10 1048576 2 +2 524288 1 SqrtXORScheme 1 1450 1450 +2 524288 1 InterPolyScheme error:oom +2 1048576 1 SendAllScheme 0 0 1048576 +2 1048576 1 XORScheme 43 2097152 2 +2 1048576 1 SqrtXORScheme 17 2048 2048 +2 1048576 1 InterPolyScheme error:oom +2 1048576 1 SendAllScheme 0 0 1048576 +2 1048576 1 XORScheme 26 2097152 2 +2 1048576 1 SqrtXORScheme 2 2048 2048 +2 1048576 1 InterPolyScheme error:oom +2 1048576 1 SendAllScheme 0 0 1048576 +2 1048576 1 XORScheme 31 2097152 2 +2 1048576 1 SqrtXORScheme 3 2048 2048 +2 1048576 1 InterPolyScheme error:oom +2 2097152 1 SendAllScheme 0 0 2097152 +2 2097152 1 XORScheme 67 4194304 2 +2 2097152 1 SqrtXORScheme 22 2898 2898 +2 2097152 1 InterPolyScheme error:oom +2 2097152 1 SendAllScheme 0 0 2097152 +2 2097152 1 XORScheme 53 4194304 2 +2 2097152 1 SqrtXORScheme 5 2898 2898 +2 2097152 1 InterPolyScheme error:oom +2 2097152 1 SendAllScheme 0 0 2097152 +2 2097152 1 XORScheme 47 4194304 2 +2 2097152 1 SqrtXORScheme 5 2898 2898 +2 2097152 1 InterPolyScheme error:oom +2 4194304 1 SendAllScheme 0 0 4194304 +2 4194304 1 XORScheme 109 8388608 2 +2 4194304 1 SqrtXORScheme 35 4096 4096 +2 4194304 1 InterPolyScheme error:oom +2 4194304 1 SendAllScheme 0 0 4194304 +2 4194304 1 XORScheme 90 8388608 2 +2 4194304 1 SqrtXORScheme 9 4096 4096 +2 4194304 1 InterPolyScheme error:oom +2 4194304 1 SendAllScheme 0 0 4194304 +2 4194304 1 XORScheme 223 8388608 2 +2 4194304 1 SqrtXORScheme 9 4096 4096 +2 4194304 1 InterPolyScheme error:oom +2 8388608 1 SendAllScheme 0 0 8388608 +2 8388608 1 XORScheme 195 16777216 2 +2 8388608 1 SqrtXORScheme 45 5794 5794 +2 8388608 1 InterPolyScheme error:oom +2 8388608 1 SendAllScheme 0 0 8388608 +2 8388608 1 XORScheme 287 16777216 2 +2 8388608 1 SqrtXORScheme 28 5794 5794 +2 8388608 1 InterPolyScheme error:oom +2 8388608 1 SendAllScheme 0 0 8388608 +2 8388608 1 XORScheme 306 16777216 2 +2 8388608 1 SqrtXORScheme 35 5794 5794 +2 8388608 1 InterPolyScheme error:oom diff --git a/graph/results_only_with_8_bs.log b/graph/old_results/results_only_with_8_bs.log similarity index 100% rename from graph/results_only_with_8_bs.log rename to graph/old_results/results_only_with_8_bs.log diff --git a/graph/results_overflow.log b/graph/old_results/results_overflow.log similarity index 100% rename from graph/results_overflow.log rename to graph/old_results/results_overflow.log diff --git a/graph/results_small.log b/graph/old_results/results_small.log similarity index 100% rename from graph/results_small.log rename to graph/old_results/results_small.log diff --git a/graph/plots/Computation_Time___1_bit_Block_Size.pdf b/graph/plots/Computation_Time___1_bit_Block_Size.pdf new file mode 100644 index 0000000000000000000000000000000000000000..1716fbaae6a04cdc70af5ece7310a6c4812418b1 GIT binary patch literal 14614 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 literal 0 HcmV?d00001 diff --git a/graph/plots/Total_Simulated_Time_Heatmap__Balanced_XOR___Varying_Database_Size_and_Block_Size___10Mbit_s.pdf b/graph/plots/Total_Simulated_Time_Heatmap__Balanced_XOR___Varying_Database_Size_and_Block_Size___10Mbit_s.pdf new file mode 100644 index 0000000000000000000000000000000000000000..3233059d8ea80c7ebdd67d11a9ee579b99d8640b GIT binary patch literal 23300 zcmeIaby!tR^gl|7q;!ZP9znVe=g^%Z(hVX?Bi-Fdh$1Bo5)vXx2+}F2AfO;6NQoc_ zNO%8cAM}0I*ZY0^{qDWb{pa#Lo4xnUnl)=avucLTFsRC0;^5}w!DDzj0((+}#|?wS z?2WDPL_}a*szw%O&M*WhQHOD9dODcFxTK9-jBM;JU}9o;W_G3!p}GiQ5OCldf8gwsDTLdgDvAtcfdnJ-z| z0GME0muvuzGG-?BrT}(DGdl~Hn=o!@cGRJU&Mr=7Mz(k!X>T7Wm91;X1aIw9)CXgg zHi#z(h)f!~os=s%tsB4{AYy=aeN)!1@V*hw4a z*ov}GJzRMtx3$f8uysD_$Y-DLVCg*V!Q|TdxHzxD$5`{LHEs$=>!Uj=lRT9QALokv zcZ>6OOxE6X^zX$ijP*SOXZKBbWI0r0>$kr#-&%a$-_K`t?ZV7#Z}rB;i27XD`3#@Ujq%2v zx%nG@hqIGU&i8yXn*Yd|VZ3#E+UH8-kk0D%6xG3GS))k9%?6MC@zuBt=MOm<{fLT= z8ji`$qy)E=t@?~!qNfFG1DppRmwb2io;ugwa~^BanGaqXsh&~k6_sjRx3%5!?L7MS zL||0K$-_$yCwa`>V7SX*7ac)8v!_R>vqhYB@}N6%v_=_u|9#*~!F%;4!9oNY!W_>0 z>x$a1{nC2}g)il|R6Xy26YRYv5l6W8s*IQz_&E`e`>V%QF*k&M)ZFCvy2(bG(XC{?yio6MZBHRT)wmZ58+2y z!^1mOreu1rR(lh4=MjaYb+#=e_)wkd(S^~CP{-3ujM?Jy`o{66dw-NW+Ef;%?xnwB zO~}~1(_c8uvpKn=5d8La26LbILhrr#nnFeGXZz0?26)`}2JY?sQ)j!rH^M=7UyEJb zHk`MpMPy+#xxkM1P$X;7dXA-R=hgLsJ5x*?F}tf6;)oaKlZ52v4X12(SsvLkK2f#n zi=Ev!+vteF1+rzT?)h3JnhkA+zhR9(zZns~xtJlIZqcHhdQV&}>1dF{)@!LDxUc~4 ziv>s4D#hB)s+iO$~Q=RF$@6FuPg24O%*>6>X&Vilb#K1bpZDE1z%Y(@T1EjO;zA2H< z-B5sP$-llH17Md2kqM$nGiVz1ti@wNh~@i3GBv5@KldgJ*}WkbIwvp|ST$6I8It^g zR(Z;syyx7IsAj%e;iwFuLziQ=YZS?x10vuNR>^e9dW!g}gqKlnX=?5HP1_rcyh z2w`1XGFwIdMW-`lpWA_<0K9GkSY%@SzA2MW6Ul=4x>&R8xYMNzk*>FbU zp{l&wNjzk+L0a3Egp2Fc8lCIv2>_-<)@FGGP#778ft6dyk;8;Gz%q;$%Oe25x38zv zI_JYvKfVn2AriB&-6ABhQk@6#xR`iA3UmLI2nQNZah+-_jO&~8u&sB|&B0b*id)++ zSK9Hv&Z-pKj_53TPRCPq_ht|(fsSQNJkV{EB_SYG?@gdokp!rswNysOG9%tbG4F#m z^sl&2MZDL7Yd+wqOra5n)I3BDa#@D(QxC;_mB0IpIt`=)0JvrVoW_ z0CZ(TdEz*@^JRfRw1}Lni0~G9igZeeES;WwlW3k@JKJ7i5gmr7t1_>d#R}_6Pu9e) zl(&=Zq=#O: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 Z9H-buPA({Sf&dBy$75iSRk?)szW}w2`se@v literal 0 HcmV?d00001 diff --git a/graph/plots/Total_Simulated_Time_Heatmap__Send_All___Varying_Database_Size_and_Block_Size___10Mbit_s.pdf b/graph/plots/Total_Simulated_Time_Heatmap__Send_All___Varying_Database_Size_and_Block_Size___10Mbit_s.pdf new file mode 100644 index 0000000000000000000000000000000000000000..d1e70d309c019b48836139f5774d860809a25e65 GIT binary patch literal 23888 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 literal 0 HcmV?d00001 diff --git a/graph/plots/Total_Simulated_Time_Heatmap__XOR___Varying_Database_Size_and_Block_Size___10Mbit_s.pdf b/graph/plots/Total_Simulated_Time_Heatmap__XOR___Varying_Database_Size_and_Block_Size___10Mbit_s.pdf new file mode 100644 index 0000000000000000000000000000000000000000..ec53c2fbbd5c09921e10a95dd0de5a611f650a75 GIT binary patch literal 22435 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 uaGuCY;Ds3 literal 0 HcmV?d00001 diff --git a/graph/plots/Total_Simulated_Time_Heatmap__XOR_vs_Balanced_XOR___Varying_Database_Size_and_Block_Size___10_Mbit_s.pdf b/graph/plots/Total_Simulated_Time_Heatmap__XOR_vs_Balanced_XOR___Varying_Database_Size_and_Block_Size___10_Mbit_s.pdf new file mode 100644 index 0000000000000000000000000000000000000000..afc5cea1ebf2b1f9b2baebff5742b67acc1f5685 GIT binary patch literal 28442 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 literal 0 HcmV?d00001 diff --git a/graph/plots/Total_Time_with_Simulated_Bandwidth___1_bit_Block_Size.pdf b/graph/plots/Total_Time_with_Simulated_Bandwidth___1_bit_Block_Size.pdf new file mode 100644 index 0000000000000000000000000000000000000000..18abcfaa9cc335705a1e3bd5d36079ca72b2a74e GIT binary patch literal 15761 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 threshold)]) + text = im.axes.text(j, i, valfmt(data[i, j], None), **kw) + texts.append(text) + + return texts \ No newline at end of file