-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmakefile
More file actions
166 lines (140 loc) · 6.67 KB
/
makefile
File metadata and controls
166 lines (140 loc) · 6.67 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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
#==============================================================================
# GEOMETRIC DATA STRUCTURES BENCHMARK MAKEFILE
#
# This makefile provides targets for testing and benchmarking various
# spatial data structures (KD-Tree, Ball*-Tree, Brute Force) on different
# datasets with varying dimensionality and size.
#
# Main targets:
# - unit_tests: Run unit tests
# - run_dif_size: Compare performance across datasets of different sizes
# - run_dif_dim: Compare performance across datasets of different dimensions
#==============================================================================
#==============================================================================
# CONFIGURATION VARIABLES
#==============================================================================
# Python and environment settings
PYTHON3 = python3
CONDA_ENV = myenv
CONDA_PREFIX = /data/ugrad/rostj/miniforge
# Directories for the tests
SCRIPTS_DIR = src/scripts
UNIT_TESTS = $(SCRIPTS_DIR)/unit_tests.py
BENCHMARK_TESTS = $(SCRIPTS_DIR)/benchmark_tests.py
#==============================================================================
# TEST PARAMETERS
#==============================================================================
# Default parameters for benchmark tests
K = 5
TRIALS = 1
NUM_OPERATIONS = 200
RADIUS = 3.0
# USE_MAX_QUERIES = false
USE_MAX_QUERIES = true
CAP_DATASET = true # Add this line
# Options for data structures, datasets, and operations
DATA_STRUCTURES = KDTree BallTree BruteForce
DATASETS = cifar audio deep enron glove imageNet millionSong MNIST notre nuswide sift sun trevi ukbench
DIF_SIZE_DATASETS = cifar sun gauss
DIF_DIM_DATASETS = sift enron trevi
OPERATIONS = get_knn insert construction nearest space delete
# Default target
.PHONY: all
all: unit_tests
.PHONY: show_pwd
show_pwd:
@echo "PWD is: $(PWD)"
# Run unit tests
.PHONY: unit_tests
unit_tests:
$(PYTHON3) $(UNIT_TESTS)
# Run benchmark tests with arguments
.PHONY: benchmark_tests
benchmark_tests:
$(PYTHON3) $(BENCHMARK_TESTS) --data_structure=$(data_structure) --dataset=$(dataset) --operation=$(operation) --k=$(k) --trials=$(trials) --num_operations=$(num_operations) --radius=$(radius) $(if $(filter true,$(use_max_queries)),--use_max_queries) $(if $(filter true,$(cap_dataset)),--cap_dataset)
# dif size
# KDTree with different datasets
.PHONY: run_kdtree_dif_size
run_kdtree_dif_size:
@for dataset in $(DIF_SIZE_DATASETS); do \
for operation in $(OPERATIONS); do \
$(MAKE) benchmark_tests data_structure=KDTree dataset=$$dataset operation=$$operation k=$(K) trials=$(TRIALS) num_operations=$(NUM_OPERATIONS) radius=$(RADIUS) use_max_queries=$(USE_MAX_QUERIES); \
done; \
done;
# BallTree with different datasets
.PHONY: run_balltree_dif_size
run_balltree_dif_size:
@for dataset in $(DIF_SIZE_DATASETS); do \
for operation in $(OPERATIONS); do \
$(MAKE) benchmark_tests data_structure=BallTree dataset=$$dataset operation=$$operation k=$(K) trials=$(TRIALS) num_operations=$(NUM_OPERATIONS) radius=$(RADIUS) use_max_queries=$(USE_MAX_QUERIES); \
done; \
done;
# BruteForce with different datasets
.PHONY: run_bruteforce_dif_size
run_bruteforce_dif_size:
@for dataset in $(DIF_SIZE_DATASETS); do \
for operation in $(OPERATIONS); do \
$(MAKE) benchmark_tests data_structure=BruteForce dataset=$$dataset operation=$$operation k=$(K) trials=$(TRIALS) num_operations=$(NUM_OPERATIONS) radius=$(RADIUS) use_max_queries=$(USE_MAX_QUERIES); \
done; \
done;
# dif dim
# KDTree with different dimensions
.PHONY: run_kdtree_dif_dim
run_kdtree_dif_dim:
@for dataset in $(DIF_DIM_DATASETS); do \
for operation in $(OPERATIONS); do \
$(MAKE) benchmark_tests data_structure=KDTree dataset=$$dataset operation=$$operation k=$(K) trials=$(TRIALS) num_operations=$(NUM_OPERATIONS) radius=$(RADIUS) use_max_queries=$(USE_MAX_QUERIES) cap_dataset=$(CAP_DATASET); \
done; \
done;
# BallTree with different dimensions
.PHONY: run_balltree_dif_dim
run_balltree_dif_dim:
@for dataset in $(DIF_DIM_DATASETS); do \
for operation in $(OPERATIONS); do \
$(MAKE) benchmark_tests data_structure=BallTree dataset=$$dataset operation=$$operation k=$(K) trials=$(TRIALS) num_operations=$(NUM_OPERATIONS) radius=$(RADIUS) use_max_queries=$(USE_MAX_QUERIES) cap_dataset=$(CAP_DATASET); \
done; \
done;
# BruteForce with different dimensions
.PHONY: run_bruteforce_dif_dim
run_bruteforce_dif_dim:
@for dataset in $(DIF_DIM_DATASETS); do \
for operation in $(OPERATIONS); do \
$(MAKE) benchmark_tests data_structure=BruteForce dataset=$$dataset operation=$$operation k=$(K) trials=$(TRIALS) num_operations=$(NUM_OPERATIONS) radius=$(RADIUS) use_max_queries=$(USE_MAX_QUERIES) cap_dataset=$(CAP_DATASET); \
done; \
done;
# Run all data structures with different size datasets
.PHONY: run_dif_size
run_dif_size:
@for data_structure in $(DATA_STRUCTURES); do \
for dataset in $(DIF_SIZE_DATASETS); do \
for operation in $(OPERATIONS); do \
$(MAKE) benchmark_tests data_structure=$$data_structure dataset=$$dataset operation=$$operation k=$(K) trials=$(TRIALS) num_operations=$(NUM_OPERATIONS) radius=$(RADIUS) use_max_queries=$(USE_MAX_QUERIES) ; \
done; \
done; \
done;
# Run all data structures with different dimension datasets
.PHONY: run_dif_dim
run_dif_dim:
@for data_structure in $(DATA_STRUCTURES); do \
for dataset in $(DIF_DIM_DATASETS); do \
for operation in $(OPERATIONS); do \
$(MAKE) benchmark_tests data_structure=$$data_structure dataset=$$dataset operation=$$operation k=$(K) trials=$(TRIALS) num_operations=$(NUM_OPERATIONS) radius=$(RADIUS) use_max_queries=$(USE_MAX_QUERIES) cap_dataset=$(CAP_DATASET) ; \
done; \
done; \
done;
# Help target to provide the correct format for benchmark_tests
.PHONY: help
help:
@echo "To run the benchmark tests manually, use the following format:"
@echo " make benchmark_tests data_structure=<data_structure> dataset=<dataset> operation=<operation> k=<k> trials=<trials> num_operations=<num_operations> radius=<radius> [use_max_queries=true] [cap_dataset=true]"
@echo ""
@echo "Examples:"
@echo " make benchmark_tests data_structure=KDTree dataset=cifar operation=get_knn k=$(K) trials=$(TRIALS) num_operations=$(NUM_OPERATIONS) radius=$(RADIUS) use_max_queries=true"
@echo " make benchmark_tests data_structure=BallTree dataset=sift operation=insert k=$(K) trials=$(TRIALS) num_operations=$(NUM_OPERATIONS) radius=$(RADIUS) cap_dataset=true"
@echo " make benchmark_tests data_structure=BruteForce dataset=MNIST operation=delete k=$(K) trials=$(TRIALS) num_operations=$(NUM_OPERATIONS) radius=$(RADIUS)"
@echo ""
@echo "For more details on each parameter, refer to the 'benchmark_tests' section in the Makefile."
# Clean up any generated files (if any)
.PHONY: clean
clean:
rm -rf results