Files
2026-05-19 17:19:36 +08:00

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()