blob: 1b53195e58cdd97c6c351dee892308ddb2b14f7e [file] [log] [blame]
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
# Load the CSV data
no_chunk_file = "nochunk-jmh-result.csv"
chunk_file = "chunk-jmh-result.csv"
# Read the CSV files
no_chunk_df = pd.read_csv(no_chunk_file)
chunk_df = pd.read_csv(chunk_file)
# Function to plot the figures
def plot_benchmark(ax, data1, data2, operation, struct, datatype, title):
# Filter data
filtered_data1 = data1[
(data1["Benchmark"] == (operation))
& (data1["struct"] == struct)
& (data1["datatype"] == datatype)
]
filtered_data2 = data2[
(data2["Benchmark"] == (operation))
& (data2["struct"] == struct)
& (data2["datatype"] == datatype)
]
# Sort data according to 'mapSize'
filtered_data1 = filtered_data1.sort_values("mapSize")
filtered_data2 = filtered_data2.sort_values("mapSize")
# Plotting
x_labels = filtered_data1["mapSize"].astype(str).tolist()
x = np.arange(len(x_labels))
width = 0.35
ax.bar(
x - width / 2,
filtered_data1["Score"],
width,
yerr=filtered_data1["ScoreError"],
label="No Chunk",
)
ax.bar(
x + width / 2,
filtered_data2["Score"],
width,
yerr=filtered_data2["ScoreError"],
label="Chunk",
)
ax.set_xlabel("Map Size")
ax.set_ylabel("Score (ops/s)")
ax.set_title(title)
ax.set_xticks(x)
ax.set_xticklabels(x_labels)
ax.legend()
# Create the subplots for datatype "int"
fig1, axs1 = plt.subplots(2, 2, figsize=(10, 8))
plot_benchmark(
axs1[0, 0],
no_chunk_df,
chunk_df,
"serialize",
True,
"int",
"Serialize | Datatype: Int",
)
plot_benchmark(
axs1[0, 1],
no_chunk_df,
chunk_df,
"serialize",
True,
"string",
"Serialize | Datatype: String",
)
plot_benchmark(
axs1[1, 0],
no_chunk_df,
chunk_df,
"deserialize",
True,
"int",
"Deserialize | Datatype: Int",
)
plot_benchmark(
axs1[1, 1],
no_chunk_df,
chunk_df,
"deserialize",
True,
"string",
"Deserialize | Datatype: String",
)
plt.tight_layout()
plt.suptitle("Benchmarks for codegen", y=1.05)
# Create the subplots for datatype "string"
fig2, axs2 = plt.subplots(2, 2, figsize=(10, 8))
plot_benchmark(
axs2[0, 0],
no_chunk_df,
chunk_df,
"serialize",
False,
"int",
"Serialize | Datatype: Int",
)
plot_benchmark(
axs2[0, 1],
no_chunk_df,
chunk_df,
"serialize",
False,
"string",
"Serialize | Datatype: String",
)
plot_benchmark(
axs2[1, 0],
no_chunk_df,
chunk_df,
"deserialize",
False,
"int",
"Deserialize | Datatype: Int",
)
plot_benchmark(
axs2[1, 1],
no_chunk_df,
chunk_df,
"deserialize",
False,
"string",
"Deserialize | Datatype: String",
)
plt.tight_layout()
plt.suptitle("Benchmarks for no codegen", y=1.05)
plt.show()