67 lines
2.1 KiB
Python
67 lines
2.1 KiB
Python
|
|
import os
|
||
|
|
import re
|
||
|
|
import matplotlib.pyplot as plt
|
||
|
|
from matplotlib.pyplot import MultipleLocator
|
||
|
|
import argparse
|
||
|
|
|
||
|
|
|
||
|
|
def parse_file(file):
|
||
|
|
with open(file, 'r') as f:
|
||
|
|
lines = [line.strip() for line in f.readlines()]
|
||
|
|
|
||
|
|
data = []
|
||
|
|
pattern = "Average elasped time: \((.*?)\) second, performance: \((.*?)\) GFLOPS. size: \((.*?)\)."
|
||
|
|
for line in lines:
|
||
|
|
r = re.match(pattern, line)
|
||
|
|
if r:
|
||
|
|
gflops = float(r.group(2))
|
||
|
|
data.append(gflops)
|
||
|
|
return data
|
||
|
|
|
||
|
|
|
||
|
|
def plot(num1, num2, y1, y2, save_dir):
|
||
|
|
x = [(i + 1) * 256 for i in range(len(y1))]
|
||
|
|
fig = plt.figure(figsize=(12, 10))
|
||
|
|
if num1 == 0:
|
||
|
|
num1 = "culas"
|
||
|
|
|
||
|
|
plt.plot(x, y1, c='k', linewidth=2, label=f"kernel_{num1}")
|
||
|
|
plt.plot(x, y2, c='b', linewidth=2, label=f"kernel_{num2}")
|
||
|
|
plt.legend()
|
||
|
|
|
||
|
|
plt.scatter(x, y1, marker="s", s=60, c='', edgecolors='k', linewidth=2)
|
||
|
|
plt.scatter(x, y2, marker="^", s=60, c='', edgecolors='b', linewidth=2)
|
||
|
|
|
||
|
|
plt.tick_params(labelsize=10)
|
||
|
|
plt.xlabel("Matrix size (M=N=K)", fontsize=12, fontweight='bold')
|
||
|
|
plt.ylabel("Performance (GFLOPS)", fontsize=12, fontweight='bold')
|
||
|
|
|
||
|
|
plt.title(f"Comparison bewteen: kernel_{num1} and kernel_{num2}", fontsize=16, fontweight='bold')
|
||
|
|
|
||
|
|
x_major_locator = MultipleLocator(256)
|
||
|
|
plt.gca().xaxis.set_major_locator(x_major_locator)
|
||
|
|
|
||
|
|
plt.savefig(f"{save_dir}/kernel_{num1}_vs_{num2}.png")
|
||
|
|
|
||
|
|
|
||
|
|
def main(args):
|
||
|
|
root = os.path.dirname(os.path.abspath(__file__))
|
||
|
|
data1 = parse_file(os.path.join(root, f'test/test_kernel_{args.one}.txt'))
|
||
|
|
data2 = parse_file(os.path.join(root, f'test/test_kernel_{args.another}.txt'))
|
||
|
|
plot(args.one, args.another, data1, data2, args.save_dir)
|
||
|
|
|
||
|
|
|
||
|
|
def parse_args():
|
||
|
|
parser = argparse.ArgumentParser(description='plot kernel performance')
|
||
|
|
parser.add_argument('one', type=int, help='one kernel num')
|
||
|
|
parser.add_argument('another', type=int, help='another kernel num')
|
||
|
|
parser.add_argument('--save_dir', default='images')
|
||
|
|
return parser.parse_args()
|
||
|
|
|
||
|
|
|
||
|
|
if __name__ == "__main__":
|
||
|
|
args = parse_args()
|
||
|
|
main(args)
|
||
|
|
|
||
|
|
# python plot.py 0 1
|