Python-Useful-Scripts/Matrix-based Benchmark/NumPy/MatrixBench-NumPy.py

59 lines
1.8 KiB
Python
Raw Normal View History

2024-06-16 10:06:22 +02:00
import numpy as np
from time import time
class MatrixBench():
def __init__(self, iters: int, size: int):
self.iters = iters
self.size = size
self.average = 0
self.start_time = 0
self.end_time = 0
self.elapsed_time = 0
self.flops:float = 0.0
def create_matrices(self):
# Create num x num matrix and an num x 1 vector with random floating point numbers
self.matrix_A = np.random.rand(self.size, self.size).astype(np.float32)
self.matrix_B = np.random.rand(self.size).astype(np.float32)
def do_operation(self):
# Do Floating Point Operation
self.start_time = time()
_ = np.linalg.solve(self.matrix_A, self.matrix_B)
self.end_time = time()
def do_calculate(self):
# Calculate Floating Point Operation per Second (FLOPS)
self.elapsed_time = self.end_time - self.start_time
self.num_operations = (2 / 3) * self.size **3
self.flops = self.num_operations / self.elapsed_time
self.average += self.flops
def run(self):
print("# Linpack-like Matrix-based Floating Point Benchmark #")
2024-06-16 15:13:17 +02:00
print("# Using NumPy as Core #")
2024-06-16 16:02:48 +02:00
print(f"# Matrix Size : {self.size} #")
print(f"# Iterations : {self.iters} #")
2024-06-19 00:23:45 +02:00
print("# Please Wait #")
2024-06-16 16:02:48 +02:00
2024-06-16 15:54:03 +02:00
for i in range(1, self.iters+1):
2024-06-16 10:06:22 +02:00
self.create_matrices()
self.do_operation()
self.do_calculate()
2024-06-19 00:23:45 +02:00
2024-06-16 10:06:22 +02:00
self.avg_flops: float = (self.average/self.iters) / 1000000
2024-06-19 00:23:45 +02:00
print(f"=> Result : {self.avg_flops:.2f} MFLOPS")
2024-06-16 10:06:22 +02:00
def main():
# Adjust Matrix Size
2024-06-16 16:02:48 +02:00
size = 512
2024-06-16 10:06:22 +02:00
# Adjust Iteration Time
2024-06-19 00:23:45 +02:00
iters = 1000
2024-06-16 10:06:22 +02:00
# Run Benchmark
bench = MatrixBench(iters=iters, size=size)
bench.run()
main()