102 lines
5.1 KiB
Python
102 lines
5.1 KiB
Python
import numpy as np
|
|
import matplotlib
|
|
import matplotlib.pyplot as plt
|
|
import seaborn as sns
|
|
from matplotlib.patches import Patch
|
|
matplotlib.rcParams['mathtext.fontset'] = 'cm'
|
|
matplotlib.rcParams['font.family'] = 'STIXGeneral'
|
|
|
|
|
|
def plot_dense(data, quantity, nqubits, fontsize=30, legend=True, save=False):
|
|
matplotlib.rcParams["font.size"] = fontsize
|
|
|
|
cpu_cp = sns.color_palette("Oranges", 4)
|
|
gpu_cp = sns.color_palette("Purples", 4)
|
|
|
|
data["is_gpu"] = data["device"].apply(lambda x: "GPU" in x)
|
|
base_condition = (data["nqubits"] == nqubits) & (data["dense"] == True)
|
|
|
|
plt.figure(figsize=(16, 9))
|
|
condition = base_condition & (data["backend"] == "numpy")
|
|
plt.semilogy(data[condition]["dt"], data[condition][quantity], marker="^", markersize=10,
|
|
color=cpu_cp[3], linewidth=3.0, label="numpy")
|
|
condition = base_condition & (data["backend"] == "tensorflow") & (data["is_gpu"] == False)
|
|
plt.semilogy(data[condition]["dt"], data[condition][quantity], marker="o", markersize=10,
|
|
color=cpu_cp[1], linewidth=3.0, label="tensorflow cpu")
|
|
|
|
condition = base_condition & (data["backend"] == "qibojit") & (data["platform"] == "cuquantum")
|
|
plt.semilogy(data[condition]["dt"], data[condition][quantity], marker="^", markersize=10,
|
|
color=gpu_cp[3], linewidth=3.0, label="cupy")
|
|
condition = base_condition & (data["backend"] == "tensorflow") & (data["is_gpu"] == True)
|
|
plt.semilogy(data[condition]["dt"], data[condition][quantity], marker="o", markersize=10,
|
|
color=gpu_cp[1], linewidth=3.0, label="tensorflow gpu")
|
|
|
|
plt.title(f"Dense adiabatic evolution, {nqubits} qubits, double precision")
|
|
plt.xlabel("$\delta t$")
|
|
if quantity == "total_dry_time":
|
|
plt.ylabel("Total dry run time (sec)")
|
|
elif quantity == "total_simulation_time":
|
|
plt.ylabel("Total simulation time (sec)")
|
|
|
|
if legend:
|
|
plt.legend()
|
|
|
|
if save:
|
|
plt.savefig(f"evolution_dense_{nqubits}qubits_{quantity}.pdf", bbox_inches="tight")
|
|
else:
|
|
plt.show()
|
|
|
|
|
|
def plot_trotter(data, quantity, nqubits, fontsize=30, yticks=None, legend=False, save=False):
|
|
matplotlib.rcParams["font.size"] = fontsize
|
|
|
|
cpu_cp = sns.color_palette("Oranges", 4)
|
|
gpu_cp = sns.color_palette("Purples", 4)
|
|
|
|
data["is_gpu"] = data["device"].apply(lambda x: "GPU" in x)
|
|
base_condition = (data["nqubits"] == nqubits) & (data["dense"] == False)
|
|
|
|
plt.figure(figsize=(16, 9))
|
|
condition = base_condition & (data["backend"] == "numpy")
|
|
plt.semilogy(data[condition]["dt"], data[condition][quantity], marker="s", markersize=10,
|
|
color=cpu_cp[0], linewidth=3.0, label="numpy")
|
|
condition = base_condition & (data["backend"] == "tensorflow") & (data["is_gpu"] == False)
|
|
plt.semilogy(data[condition]["dt"], data[condition][quantity], marker="o", markersize=10,
|
|
color=cpu_cp[1], linewidth=3.0, label="tensorflow cpu")
|
|
condition = base_condition & (data["backend"] == "qibotf") & (data["is_gpu"] == False)
|
|
plt.semilogy(data[condition]["dt"], data[condition][quantity], marker="D", markersize=10,
|
|
color=cpu_cp[2], linewidth=3.0, label="qibotf cpu")
|
|
condition = base_condition & (data["backend"] == "qibojit") & (data["platform"] == "numba")
|
|
plt.semilogy(data[condition]["dt"], data[condition][quantity], marker="^", markersize=10,
|
|
color=cpu_cp[3], linewidth=3.0, label="qibojit (numba) cpu")
|
|
|
|
condition = base_condition & (data["backend"] == "tensorflow") & (data["is_gpu"] == True)
|
|
plt.semilogy(data[condition]["dt"], data[condition][quantity], marker="o", markersize=10,
|
|
color=gpu_cp[1], linewidth=3.0, label="tensorflow gpu")
|
|
condition = base_condition & (data["backend"] == "qibotf") & (data["is_gpu"] == True)
|
|
plt.semilogy(data[condition]["dt"], data[condition][quantity], marker="D", markersize=10,
|
|
color=gpu_cp[2], linewidth=3.0, label="qibotf gpu")
|
|
condition = base_condition & (data["backend"] == "qibojit") & (data["platform"] == "cupy")
|
|
plt.semilogy(data[condition]["dt"], data[condition][quantity], marker="^", markersize=10,
|
|
color=gpu_cp[3], linewidth=3.0, label="qibojit (cupy) gpu")
|
|
condition = base_condition & (data["backend"] == "qibojit") & (data["platform"] == "cuquantum")
|
|
plt.semilogy(data[condition]["dt"], data[condition][quantity], marker="v", markersize=10, linestyle="--",
|
|
color=gpu_cp[3], linewidth=3.0, label="qibojit (cuquantum) gpu")
|
|
|
|
plt.title(f"Trotter adiabatic evolution, {nqubits} qubits, double precision")
|
|
plt.xlabel("$\delta t$")
|
|
if quantity == "total_dry_time":
|
|
plt.ylabel("Total dry run time (sec)")
|
|
elif quantity == "total_simulation_time":
|
|
plt.ylabel("Total simulation time (sec)")
|
|
|
|
if legend:
|
|
plt.legend(fontsize="small")
|
|
if yticks is not None:
|
|
plt.minorticks_off()
|
|
plt.yticks(yticks)
|
|
if save:
|
|
plt.savefig(f"evolution_trotter_{nqubits}qubits_{quantity}.pdf", bbox_inches="tight")
|
|
else:
|
|
plt.show()
|