- Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathnumpy_benchmark.py
More file actions
Latest commit
58 lines (44 loc) · 1.95 KB
/
Copy pathnumpy_benchmark.py
File metadata and controls
58 lines (44 loc) · 1.95 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
importnumpyasnp
importtime
defrun_benchmark():
num_vectors=1_000_000
dim=128
num_queries=10000
print("GENERATING SYNTHETIC DATA...")
print(f"Database: {num_vectors} vectors, {dim} dimensions")
db=np.random.random((num_vectors, dim)).astype(np.float32)
queries=np.random.random((num_queries, dim)).astype(np.float32)
print("WARMING UP CPU/BLAS...")
foriinrange(10):
_=np.dot(db, queries[i])
print("STARTING SEARCH QUERIES...")
latencies= []
foriinrange(num_queries):
q=queries[i]
t1=time.perf_counter()
scores=np.dot(db, q)
top_k_idx=np.argpartition(scores, -100)[-100:]
t2=time.perf_counter()
latencies.append((t2-t1) *1_000_000)
latencies=np.sort(latencies)
total_time_ms=np.sum(latencies) /1000.0
throughput=num_queries/ (total_time_ms/1000.0)
print("\n===========================================")
print(" NUMPY BRUTE-FORCE BENCHMARK ")
print("===========================================")
print(f"VECTORS: {num_vectors} | DIMENSION: {dim} | QUERIES: {num_queries}")
print(f"TOTAL SEARCH TIME: {total_time_ms:.2f} ms")
print(f"SEARCH THROUGHPUT: {throughput:.2f} queries/sec")
print("-------------------------------------------")
print("LATENCY PERCENTILES (Microseconds):")
print(f" Min: {latencies[0]:.2f} us")
print(f" Avg: {np.mean(latencies):.2f} us")
print(f" Median: {np.median(latencies):.2f} us")
print(f" p90: {np.percentile(latencies, 90):.2f} us")
print(f" p95: {np.percentile(latencies, 95):.2f} us")
print(f" p99: {np.percentile(latencies, 99):.2f} us")
print(f" p99.9: {np.percentile(latencies, 99.9):.2f} us")
print(f" Max: {latencies[-1]:.2f} us")
print("===========================================")
if__name__=="__main__":
run_benchmark()