1 | # Usage
|
---|
2 | # $cfabuild/driver/cfa -nodebug -quiet -c -x c /dev/null && rm null.o || echo Need to fix \$cfabuild
|
---|
3 | # make CFABUILD=$cfabuild -j8 # compile
|
---|
4 | # make measurement CFA_APILEVELS=ll OPERATIONS='pta peq pbv' CORPORI='corpus-100-*-1.txt corpus-1-*-1.txt' # append-pbv
|
---|
5 | # make measurement2 CFA_APILEVELS=ll OPERATIONS='pall' PLATFORMS=cfa CFA_SHARINGS=share CORPORI='corpus-1-*-1.txt' # allocate-speed-cfa
|
---|
6 | # make measurement2 CFA_APILEVELS=ll OPERATIONS='pall' PLATFORMS=stl CFA_EXPANSIONS=-1.0 CORPORI='corpus-1-*-1.txt' # allocate-speed-stl
|
---|
7 | # make measurement3 CFA_APILEVELS=ll OPERATIONS='pall' PLATFORMS=cfa CFA_SHARINGS=share CORPORI='corpus-1-*-1.txt' # allocate-space-cfa
|
---|
8 | # make measurement3 CFA_APILEVELS=ll OPERATIONS='pall' PLATFORMS=stl CFA_EXPANSIONS=-1.0 CORPORI='corpus-1-*-1.txt' # allocate-space-stl
|
---|
9 | # make measurement4 CFA_APILEVELS=ll OPERATIONS='pall' PLATFORMS=cfa CFA_EXPANSIONS=0.2 CFA_SHARINGS=share CORPORI='corpus-1-*-1.txt' # allocate-attrib-cfa
|
---|
10 | # make measurement4 CFA_APILEVELS=ll OPERATIONS='pall' PLATFORMS=stl CFA_EXPANSIONS=-1.0 CORPORI='corpus-1-*-1.txt' # allocate-attrib-stl
|
---|
11 |
|
---|
12 | LIBCFA = $(cfabuild)/libcfa/*/src/.libs/libcfa.so
|
---|
13 |
|
---|
14 | CFA = $(cfabuild)/driver/cfa
|
---|
15 | PERFFLAGS_CFA = -nodebug -O2
|
---|
16 | PERFFLAGS_CXX = -DNDEBUG -O2 -Wl,--no-as-needed -ldl
|
---|
17 |
|
---|
18 |
|
---|
19 | # function: convert to upper case
|
---|
20 | define uc
|
---|
21 | $(shell echo $1 | tr '[:lower:]' '[:upper:]')
|
---|
22 | endef
|
---|
23 |
|
---|
24 | # function: project numbered element of filename named by any-delimited tuple
|
---|
25 | # (call proj,q-w-e-r.txt,-,4) is 4.txt
|
---|
26 | # (call proj,q-w-e-r.foo.txt,.,1) is q-w-e-r
|
---|
27 | define proj
|
---|
28 | $(word $3,$(subst $2, ,$1))
|
---|
29 | endef
|
---|
30 |
|
---|
31 | # function: project numbered element of filename named by hyphen-delimited tuple
|
---|
32 | # (call hyphProj,q-w-e-r.txt,4) is r.txt
|
---|
33 | define hyphProj
|
---|
34 | $(call proj,$1,-,$2)
|
---|
35 | endef
|
---|
36 |
|
---|
37 | # function: drop file extension and project element
|
---|
38 | # (call bnHyphProj,q-w-e-r.txt,4) is r
|
---|
39 | define bnHyphProj
|
---|
40 | $(call hyphProj,$(basename $1),$2)
|
---|
41 | endef
|
---|
42 |
|
---|
43 | # function: drop file extension, project element and uppercase it
|
---|
44 | # (call ucBnhyphProj,q-w-e-r.txt,4) is R
|
---|
45 | define ucBnHyphProj
|
---|
46 | $(call uc,$(call bnHyphProj,$1,$2))
|
---|
47 | endef
|
---|
48 |
|
---|
49 | # function: cross two lists, adding given delimiters
|
---|
50 | # (call delCross,+,a b c,1 2) is a+1 a+2 b+1 b+2 c+1 c+2
|
---|
51 | define delCross
|
---|
52 | $(foreach x,$2,$(foreach xs,$3,$(x)$1$(xs)))
|
---|
53 | endef
|
---|
54 |
|
---|
55 | define delCross3
|
---|
56 | $(call delCross,$1,$2,$(call delCross,$1,$3,$4))
|
---|
57 | endef
|
---|
58 |
|
---|
59 | define delCross4
|
---|
60 | $(call delCross,$1,$2,$(call delCross3,$1,$3,$4,$5))
|
---|
61 | endef
|
---|
62 |
|
---|
63 | define delCross5
|
---|
64 | $(call delCross,$1,$2,$(call delCross4,$1,$3,$4,$5,$6))
|
---|
65 | endef
|
---|
66 |
|
---|
67 | # function: cross two lists, adding hyphen delimiters
|
---|
68 | # (call hyphCross,a b c,1 2) is a-1 a-2 b-1 b-2 c-1 c-2
|
---|
69 | define hyphCross
|
---|
70 | $(call delCross,-,$1,$2)
|
---|
71 | endef
|
---|
72 |
|
---|
73 | define hyphCross3
|
---|
74 | $(call delCross3,-,$1,$2,$3)
|
---|
75 | endef
|
---|
76 |
|
---|
77 | define hyphCross4
|
---|
78 | $(call delCross4,-,$1,$2,$3,$4)
|
---|
79 | endef
|
---|
80 |
|
---|
81 | define hyphCross5
|
---|
82 | $(call delCross5,-,$1,$2,$3,$4,$5)
|
---|
83 | endef
|
---|
84 |
|
---|
85 | OPERATIONS?=pta peq pbv pall #pno
|
---|
86 | ALLOCS?=reuse fresh
|
---|
87 | CFA_APILEVELS?=hl ll
|
---|
88 | CFA_SHARINGS?=share noshare
|
---|
89 | PLATFORMS?=cfa stl #buhr94
|
---|
90 |
|
---|
91 | ifneq ($(filter cfa,$(PLATFORMS)),)
|
---|
92 | CFA_APIS=$(call hyphCross,$(CFA_APILEVELS),$(CFA_SHARINGS))
|
---|
93 | endif
|
---|
94 |
|
---|
95 | ifneq ($(filter stl,$(PLATFORMS)),)
|
---|
96 | STL_APIS=na-na
|
---|
97 | endif
|
---|
98 |
|
---|
99 | ifneq ($(filter buhr94,$(PLATFORMS)),)
|
---|
100 | BUHR94_APIS=na-na
|
---|
101 | endif
|
---|
102 |
|
---|
103 | APIS = $(CFA_APIS) $(STL_APIS) $(BUHR94_APIS)
|
---|
104 |
|
---|
105 | OPERATIONS_USING_ALLOCS=pta peq
|
---|
106 | define enrichOperationsAllocs
|
---|
107 | $(call hyphCross3,$(filter peq pta,$(OPERATIONS)),$1,$(ALLOCS)) $(call hyphCross3,$(filter-out peq pta,$(OPERATIONS)),$1,na)
|
---|
108 | endef
|
---|
109 |
|
---|
110 | CFA_PERFPROGS=$(call hyphCross,perfexp-cfa,$(call enrichOperationsAllocs,$(CFA_APIS)))
|
---|
111 | STL_PERFPROGS=$(call hyphCross,perfexp-stl,$(call enrichOperationsAllocs,$(STL_APIS)))
|
---|
112 | BUHR94_PERFPROGS=$(call hyphCross,perfexp-buhr94,$(call enrichOperationsAllocs,$(BUHR94_APIS)))
|
---|
113 |
|
---|
114 | PERFPROGS = $(CFA_PERFPROGS) $(STL_PERFPROGS) $(BUHR94_PERFPROGS)
|
---|
115 |
|
---|
116 | all : $(PERFPROGS)
|
---|
117 |
|
---|
118 | PP_SPLIT := $(shell echo "${PERFPROGS}" | sed -e 's/ /\\n/g')
|
---|
119 | echoPerfProgs:
|
---|
120 | echo -e '$(PP_SPLIT)'
|
---|
121 |
|
---|
122 | perfexp-%.o: API=$(call ucBnHyphProj,$@,2)
|
---|
123 | perfexp-%.o: OPERATION=$(call ucBnHyphProj,$@,3)
|
---|
124 | perfexp-%.o: CFA_APILEVEL=$(call ucBnHyphProj,$@,4)
|
---|
125 | perfexp-%.o: CFA_SHARING=$(call ucBnHyphProj,$@,5)
|
---|
126 | perfexp-%.o: ALLOC=$(call ucBnHyphProj,$@,6)
|
---|
127 | perfexp-%.o: SCENARIO_SWITCH=-DIMPL_$(API)_$(CFA_APILEVEL)_$(CFA_SHARING) -DOP_$(OPERATION) -DALLOC_$(ALLOC)
|
---|
128 |
|
---|
129 | perfexp-cfa-%.o: CMD=$(CFA) -c $(PERFFLAGS_CFA) $< -o $@ $(SCENARIO_SWITCH)
|
---|
130 | perfexp-stl-%.o: CMD=$(CXX) -c -xc++ $(PERFFLAGS_CXX) $< -o $@ $(SCENARIO_SWITCH)
|
---|
131 | perfexp-buhr94-%.o: CMD=$(CXX) -xc++ -c $(PERFFLAGS_CXX) $< -o $@ $(SCENARIO_SWITCH)
|
---|
132 |
|
---|
133 | perfexp-cfa-peq-%.o: prog.cfa $(LIBCFA)
|
---|
134 | $(CMD)
|
---|
135 | perfexp-cfa-pta-%.o: prog.cfa $(LIBCFA)
|
---|
136 | $(CMD)
|
---|
137 | perfexp-cfa-pbv-%.o: prog-passbyval.cfa $(LIBCFA)
|
---|
138 | $(CMD)
|
---|
139 | perfexp-cfa-pb%.o: prog-passbyX.cfa $(LIBCFA)
|
---|
140 | $(CMD)
|
---|
141 | perfexp-cfa-pfi-%.o: prog-find.cfa $(LIBCFA)
|
---|
142 | $(CMD)
|
---|
143 | perfexp-cfa-pall-%.o: prog-allocn.cfa $(LIBCFA)
|
---|
144 | $(CMD)
|
---|
145 | perfexp-cfa-pno-%.o: prog-normalize.cfa $(LIBCFA)
|
---|
146 | $(CMD)
|
---|
147 | perfexp-stl-peq-%.o: prog.cfa
|
---|
148 | $(CMD)
|
---|
149 | perfexp-stl-pta-%.o: prog.cfa
|
---|
150 | $(CMD)
|
---|
151 | perfexp-stl-pbv-%.o: prog-passbyval.cfa
|
---|
152 | $(CMD)
|
---|
153 | perfexp-stl-pfi-%.o: prog-find.cfa
|
---|
154 | $(CMD)
|
---|
155 | perfexp-stl-pall-%.o: prog-allocn.cfa
|
---|
156 | $(CMD)
|
---|
157 | perfexp-stl-pno-%.o: prog-normalize.cfa
|
---|
158 | $(CMD)
|
---|
159 | perfexp-buhr94-peq-%.o: prog.cfa buhr94-string.o buhr94-VbyteSM.o
|
---|
160 | $(CMD)
|
---|
161 | perfexp-buhr94-pta-%.o: prog.cfa buhr94-string.o buhr94-VbyteSM.o
|
---|
162 | $(CMD)
|
---|
163 | perfexp-buhr94-pta-%.o: prog-passbyval.cfa buhr94-string.o buhr94-VbyteSM.o
|
---|
164 | $(CMD)
|
---|
165 | perfexp-buhr94-pall-%.o: prog-allocn.cfa buhr94-string.o buhr94-VbyteSM.o
|
---|
166 | $(CMD)
|
---|
167 | perfexp-buhr94-pno-%.o: prog-normalize.cfa buhr94-string.o buhr94-VbyteSM.o
|
---|
168 | $(CMD)
|
---|
169 |
|
---|
170 | # one of the pbx cases also needs to link with not_string_res.o (handling manually)
|
---|
171 | perfexp-cfa-%: perfexp-cfa-%.o $(LIBCFA)
|
---|
172 | $(CFA) $(PERFFLAGS_CFA) $< -o $@
|
---|
173 | perfexp-stl-%: perfexp-stl-%.o $(LIBCFA)
|
---|
174 | $(CFA) $(PERFFLAGS_CFA) $< /lib/x86_64-linux-gnu/libstdc++.so.6 -o $@
|
---|
175 | perfexp-buhr94-% : perfexp-buhr94-%.o buhr94-string.o buhr94-VbyteSM.o
|
---|
176 | $(CXX) $(PERFFLAGS_CXX) $^ -o $@
|
---|
177 |
|
---|
178 | buhr94-string.o:
|
---|
179 | $(CXX) -xc++ -c $(PERFFLAGS_CXX) ~/usys1/sm/string/StringSharing/src/string.cc -o $@
|
---|
180 |
|
---|
181 | buhr94-VbyteSM.o:
|
---|
182 | $(CXX) -xc++ -c $(PERFFLAGS_CXX) ~/usys1/sm/string/StringSharing/src/VbyteSM.cc -o $@
|
---|
183 |
|
---|
184 | clean:
|
---|
185 | rm -f *.o perfexp*
|
---|
186 |
|
---|
187 | MEASURE = $(PERFPROGS)
|
---|
188 |
|
---|
189 | CORPUS_MEANLEN_MODE?=auto #manual
|
---|
190 | CORPUS_MEANLEN_START?=1
|
---|
191 | CORPUS_MEANLEN_END?=500
|
---|
192 | CORPUS_MEANLEN_STEPS_PER_DOUBLE?=1
|
---|
193 | CORPUS_MEANLEN_MANVALS?=20 50 100 200 500
|
---|
194 | COPRUS_NSTRSS?=100
|
---|
195 | CORPUS_RELSCALES?=1.0
|
---|
196 | CORPUS_SEEDS?=9876
|
---|
197 | CORPUS_OFFSET_INSTRS?=t0
|
---|
198 |
|
---|
199 | CORPUS_MEANLENS_AUTO=${shell python3 gen-size-steps.py ${CORPUS_MEANLEN_START} ${CORPUS_MEANLEN_END} ${CORPUS_MEANLEN_STEPS_PER_DOUBLE}}
|
---|
200 | CORPUS_MEANLENS=\
|
---|
201 | $(if $(filter auto,$(CORPUS_MEANLEN_MODE)),$(CORPUS_MEANLENS_AUTO), \
|
---|
202 | $(if $(filter manual,$(CORPUS_MEANLEN_MODE)),$(CORPUS_MEANLEN_MANVALS), \
|
---|
203 | ERROR))
|
---|
204 | CORPUS_SERIES_IDS=$(call delCross3,+,$(CORPUS_RELSCALES),$(CORPUS_SEEDS),$(CORPUS_OFFSET_INSTRS))
|
---|
205 | CORPUS_SLUGS=$(call hyphCross4,corpus,$(COPRUS_NSTRSS),$(CORPUS_MEANLENS),$(CORPUS_SERIES_IDS))
|
---|
206 | CORPORI=$(call delCross,.,$(CORPUS_SLUGS),txt)
|
---|
207 |
|
---|
208 | # function to interpret an offset instruction for a given mean-length,
|
---|
209 | # producing the pair of arguments for locn and offset
|
---|
210 | #
|
---|
211 | # An offset instruction is an opcode and natural-number argument.
|
---|
212 | # The opcode is either (t)ake or (l)eave.
|
---|
213 | # The argument is how much length to take from / leave behind.
|
---|
214 | # The resulting amount is deducted from the mean-length and returned in offset.
|
---|
215 | # The remaining mean-length is returned in locn.
|
---|
216 | #
|
---|
217 | # $(call interpOffsetInstr,20,l1) = 1 19 (i.e. constant-length 20)
|
---|
218 | # $(call interpOffsetInstr,20,l5) = 5 15
|
---|
219 | # $(call interpOffsetInstr,20,t5) = 15 5
|
---|
220 | # $(call interpOffsetInstr,20,t0) = 20 0 (i.e. full variability)
|
---|
221 | define interpOffsetInstr
|
---|
222 | $(strip
|
---|
223 | $(eval qty := $(subst t,,$(subst l,,$2)))
|
---|
224 | $(if $(filter t%,$2), $(shell expr $1 - $(qty)) $(qty),
|
---|
225 | $(if $(filter l%,$2), $(qty) $(shell expr $1 - $(qty)),
|
---|
226 | ERROR))
|
---|
227 | )
|
---|
228 | endef
|
---|
229 |
|
---|
230 | corpori: $(CORPORI)
|
---|
231 |
|
---|
232 | make-corpus: make-corpus.cfa
|
---|
233 | $(CFA) $< -o $@
|
---|
234 |
|
---|
235 | corpus-%.txt: COPRUS_NSTRS=$(call bnHyphProj,$@,2)
|
---|
236 | corpus-%.txt: CORPUS_MEANLEN=$(call bnHyphProj,$@,3)
|
---|
237 | corpus-%.txt: CORPUS_SERIES_ID=$(call bnHyphProj,$@,4)
|
---|
238 | corpus-%.txt: CORPUS_RELSCALE=$(call proj,$(CORPUS_SERIES_ID),+,1)
|
---|
239 | corpus-%.txt: CORPUS_SEED=$(call proj,$(CORPUS_SERIES_ID),+,2)
|
---|
240 | corpus-%.txt: CORPUS_OFFSET_INSTR=$(call proj,$(CORPUS_SERIES_ID),+,3)
|
---|
241 | corpus-%.txt: make-corpus
|
---|
242 | $(eval CORPUS_OFFSET_INTERPD := $(call interpOffsetInstr,$(CORPUS_MEANLEN),$(CORPUS_OFFSET_INSTR)))
|
---|
243 | $(eval CORPUS_LOCN := $(word 1,$(CORPUS_OFFSET_INTERPD)))
|
---|
244 | $(eval CORPUS_OFFSET := $(word 2,$(CORPUS_OFFSET_INTERPD)))
|
---|
245 | ./$< $(COPRUS_NSTRS) $(CORPUS_LOCN) $(CORPUS_RELSCALE) $(CORPUS_SEED) $(CORPUS_OFFSET) > $@
|
---|
246 |
|
---|
247 | RUN_TASKSET_CPULIST=6
|
---|
248 |
|
---|
249 | # both ?= and :=
|
---|
250 | ifeq ($(origin MEASUREMENT_TOFILE), undefined)
|
---|
251 | MEASUREMENT_TOFILE:=measurement-$(shell date '+%F--%H-%M-%S').output
|
---|
252 | endif
|
---|
253 |
|
---|
254 | # General timing
|
---|
255 | # Output file gets concatenation of program outputs (one line per run)
|
---|
256 | measurement: $(MEASURE) corpori
|
---|
257 | @echo "running $(words $(MEASURE)) programs:" $(MEASURE)
|
---|
258 | @echo "... on $(words $(CORPORI)) corpori:" $(CORPORI)
|
---|
259 | @echo "... for $(shell expr $(words $(MEASURE)) "*" $(words $(CORPORI))) rows into:" $(MEASUREMENT_TOFILE)
|
---|
260 | @for prog in $(MEASURE) ; do \
|
---|
261 | for corpus in $(CORPORI) ; do \
|
---|
262 | corpusbody=`cat $$corpus` ; \
|
---|
263 | resulttext=`taskset --cpu-list $(RUN_TASKSET_CPULIST) ./$$prog 100 10 $$corpusbody` ; \
|
---|
264 | echo $$prog,$$corpus,$$resulttext >> $(MEASUREMENT_TOFILE) ; \
|
---|
265 | echo $$prog,$$corpus,$$resulttext ; \
|
---|
266 | done ; \
|
---|
267 | done
|
---|
268 |
|
---|
269 | CFA_EXPANSIONS?=0.02 0.05 0.1 0.2 0.4 0.5 0.9 0.98
|
---|
270 |
|
---|
271 | # Special-case timing with extra IV for CFA_EXPANSIONS
|
---|
272 | # Output file gets concatenation of program outputs (one line per run)
|
---|
273 | measurement2: $(MEASURE) corpori
|
---|
274 | @echo "running $(words $(MEASURE)) programs:" $(MEASURE)
|
---|
275 | @echo "... on $(words $(CORPORI)) corpori:" $(CORPORI)
|
---|
276 | @echo "... with $(words $(CFA_EXPANSIONS)) expansions:" $(CFA_EXPANSIONS)
|
---|
277 | @echo "... for $(shell expr $(words $(MEASURE)) "*" $(words $(CORPORI)) "*" $(words $(CFA_EXPANSIONS))) rows into:" $(MEASUREMENT_TOFILE)
|
---|
278 | @for prog in $(MEASURE) ; do \
|
---|
279 | for corpus in $(CORPORI) ; do \
|
---|
280 | for expansion in $(CFA_EXPANSIONS) ; do \
|
---|
281 | corpusbody=`cat $$corpus` ; \
|
---|
282 | printed=`taskset --cpu-list $(RUN_TASKSET_CPULIST) ./$$prog 1000 1.006 $$expansion 10 $$corpusbody` ; \
|
---|
283 | echo $$prog,$$corpus,$$expansion,$$printed >> $(MEASUREMENT_TOFILE) ; \
|
---|
284 | echo $$prog,$$corpus,$$expansion,$$printed ; \
|
---|
285 | done ; \
|
---|
286 | done ; \
|
---|
287 | done
|
---|
288 |
|
---|
289 | # Space, with the IV for CFA_EXPANSIONS
|
---|
290 | # Runs Mubeen's malloc interceptor to get malloc-request stats
|
---|
291 | # Output file gets concatenation of the interceptor's output (one line per run); program's output ignorred
|
---|
292 | # Expect and ignore crashes; they're during shutdown, after everything we care about is over
|
---|
293 | measurement3: $(MEASURE) corpori
|
---|
294 | @echo "running $(words $(MEASURE)) programs:" $(MEASURE)
|
---|
295 | @echo "... on $(words $(CORPORI)) corpori:" $(CORPORI)
|
---|
296 | @echo "... with $(words $(CFA_EXPANSIONS)) expansions:" $(CFA_EXPANSIONS)
|
---|
297 | @echo "... for $(shell expr $(words $(MEASURE)) "*" $(words $(CORPORI))) rows into:" $(MEASUREMENT_TOFILE)
|
---|
298 | @for prog in $(MEASURE) ; do \
|
---|
299 | for corpus in $(CORPORI) ; do \
|
---|
300 | for expansion in $(CFA_EXPANSIONS) ; do \
|
---|
301 | corpusbody=`cat $$corpus` ; \
|
---|
302 | LD_PRELOAD=~/plg2/mubeen-stat-shim/malloc/mallocWrappers.so ./$$prog 1000 1.006 $$expansion 10 $$corpusbody ; \
|
---|
303 | printed=`tail -n 1 preload_dump.txt` ; \
|
---|
304 | echo $$prog $$corpus $$expansion $$printed >> $(MEASUREMENT_TOFILE) ; \
|
---|
305 | echo $$prog $$corpus $$expansion $$printed ; \
|
---|
306 | rm preload_dump.txt ; \
|
---|
307 | done ; \
|
---|
308 | done ; \
|
---|
309 | done
|
---|
310 |
|
---|
311 | # Time attribution, with the IV for CFA_EXPANSIONS
|
---|
312 | # Runs the SUT under perf, then crunches the perf result
|
---|
313 | # Output file gets concatenation of perf summaries (several lines per run); program's output ignorred
|
---|
314 | # Expect and ignore output "addr2line: DWARF error: section .debug_info is larger than its filesize!"
|
---|
315 | measurement4: $(MEASURE) corpori
|
---|
316 | @echo "running $(words $(MEASURE)) programs:" $(MEASURE)
|
---|
317 | @echo "... on $(words $(CORPORI)) corpori:" $(CORPORI)
|
---|
318 | @echo "... with $(words $(CFA_EXPANSIONS)) expansions:" $(CFA_EXPANSIONS)
|
---|
319 | @echo "... for $(shell expr $(words $(MEASURE)) "*" $(words $(CORPORI))) rows into:" $(MEASUREMENT_TOFILE)
|
---|
320 | @RUNID=`date '+%F--%H-%M-%S'` ; \
|
---|
321 | for prog in $(MEASURE) ; do \
|
---|
322 | for corpus in $(CORPORI) ; do \
|
---|
323 | for expansion in $(CFA_EXPANSIONS) ; do \
|
---|
324 | SLUG=measurement--$$prog--$$corpus--$$expansion--$$RUNID ; \
|
---|
325 | corpusbody=`cat $$corpus` ; \
|
---|
326 | perf record --call-graph dwarf -m16M ./$$prog 1000 1.006 $$expansion 10 $$corpusbody ; \
|
---|
327 | mv perf.data $$SLUG.data ; \
|
---|
328 | perf script -i $$SLUG.data > $$SLUG.perf ; \
|
---|
329 | ~/flamegraph/FlameGraph/stackcollapse-perf.pl $$SLUG.perf > $$SLUG.folded ; \
|
---|
330 | ~/flamegraph/FlameGraph/flamegraph.pl $$SLUG.folded > $$SLUG.svg ; \
|
---|
331 | python3 process-allocn-attrib.py $$SLUG.folded | xargs -L1 echo $$prog $$corpus $$expansion >> $(MEASUREMENT_TOFILE) ; \
|
---|
332 | done ; \
|
---|
333 | done ; \
|
---|
334 | done
|
---|
335 |
|
---|
336 |
|
---|
337 | #
|
---|
338 | # Experiment-specific "summary" targets
|
---|
339 | #
|
---|
340 |
|
---|
341 | # These all use recursive make invocations, after setting the scoping variables.
|
---|
342 | # Recursive invocation necessary to recompute dependencies like corpori -> $(CORPORI).
|
---|
343 | # In the top-level make, the extent of the dependency is computed upfront, using
|
---|
344 | # default values, overridden by CLI-provided values.
|
---|
345 | # Setting the value per-target makes it available to other targets' bodies, but it
|
---|
346 | # does not affect the previously-computed dependencies.
|
---|
347 | # Exporting the values and working through a child make has the child intialize its
|
---|
348 | # dependencies using the summary-target-provided values.
|
---|
349 | # For that to work, the exported variable default values given above must use ?=.
|
---|
350 |
|
---|
351 | .PHONY: result-append-pbv.csv result-allocate-speed-%.csv result-allocate-speed-cfa.csv
|
---|
352 |
|
---|
353 | export OPERATIONS
|
---|
354 | export ALLOCS
|
---|
355 | export CFA_APILEVELS
|
---|
356 | export CFA_SHARINGS
|
---|
357 | export PLATFORMS
|
---|
358 | export CFA_EXPANSIONS
|
---|
359 |
|
---|
360 | export CORPUS_MEANLEN_MODE
|
---|
361 | export CORPUS_MEANLEN_START
|
---|
362 | export CORPUS_MEANLEN_END
|
---|
363 | export CORPUS_MEANLEN_STEPS_PER_DOUBLE
|
---|
364 | export CORPUS_MEANLEN_MANVALS
|
---|
365 | export COPRUS_NSTRSS
|
---|
366 | export CORPUS_RELSCALES
|
---|
367 | export CORPUS_SEEDS
|
---|
368 | export CORPUS_OFFSET_INSTRS
|
---|
369 |
|
---|
370 |
|
---|
371 | export MEASUREMENT_TOFILE
|
---|
372 |
|
---|
373 | result-ANY:
|
---|
374 | $(MAKE) $(SUBTARGET)
|
---|
375 |
|
---|
376 | result-append-pbv.csv: CFA_APILEVELS=ll
|
---|
377 | result-append-pbv.csv: OPERATIONS=pta peq pbv
|
---|
378 | result-append-pbv.csv: CORPUS_OFFSET_INSTRS=t0 l1
|
---|
379 | result-append-pbv.csv: CORPUS_MEANLEN_STEPS_PER_DOUBLE=4
|
---|
380 | result-append-pbv.csv: CORPUS_SEEDS=501 502
|
---|
381 | result-append-pbv.csv: SUBTARGET=measurement
|
---|
382 | result-append-pbv.csv: result-ANY
|
---|
383 | cp $(MEASUREMENT_TOFILE) $@
|
---|
384 |
|
---|
385 | result-allocate-ANY: OPERATIONS=pall
|
---|
386 | result-allocate-ANY: CORPUS_OFFSET_INSTRS=l15
|
---|
387 | result-allocate-ANY: CORPUS_MEANLEN_MODE=manual
|
---|
388 | result-allocate-ANY: CFA_SHARINGS=share
|
---|
389 | result-allocate-ANY: CORPUS_SEEDS=101 102 103 104 105
|
---|
390 | result-allocate-ANY: CFA_APILEVELS=ll
|
---|
391 | result-allocate-ANY: result-ANY
|
---|
392 |
|
---|
393 | result-allocate-ANY-cfa: PLATFORMS=cfa
|
---|
394 | result-allocate-ANY-cfa: result-allocate-ANY
|
---|
395 |
|
---|
396 | result-allocate-ANY-stl: PLATFORMS=stl
|
---|
397 | result-allocate-ANY-stl: CFA_EXPANSIONS=-1.0
|
---|
398 | result-allocate-ANY-stl: result-allocate-ANY
|
---|
399 |
|
---|
400 |
|
---|
401 |
|
---|
402 |
|
---|
403 |
|
---|
404 |
|
---|
405 | result-allocate-speed-cfa.csv: SUBTARGET=measurement2
|
---|
406 | result-allocate-speed-cfa.csv: result-allocate-ANY-cfa
|
---|
407 | cp $(MEASUREMENT_TOFILE) $@
|
---|
408 |
|
---|
409 | result-allocate-speed-stl.csv: SUBTARGET=measurement2
|
---|
410 | result-allocate-speed-stl.csv: result-allocate-ANY-stl
|
---|
411 | cp $(MEASUREMENT_TOFILE) $@
|
---|
412 |
|
---|
413 | # result-allocate-space-cfa.ssv: SUBTARGET=measurement3
|
---|
414 | # result-allocate-space-cfa.ssv: result-allocate-ANY-cfa
|
---|
415 | # cp $(MEASUREMENT_TOFILE) $@
|
---|
416 |
|
---|
417 | # result-allocate-space-stl.ssv: SUBTARGET=measurement3
|
---|
418 | # result-allocate-space-stl.ssv: result-allocate-ANY-stl
|
---|
419 | # cp $(MEASUREMENT_TOFILE) $@
|
---|
420 |
|
---|
421 | # result-allocate-attrib-cfa.ssv: SUBTARGET=measurement4
|
---|
422 | # result-allocate-attrib-cfa.ssv: result-allocate-ANY-cfa
|
---|
423 | # cp $(MEASUREMENT_TOFILE) $@
|
---|
424 |
|
---|
425 | # result-allocate-attrib-stl.ssv: SUBTARGET=measurement4
|
---|
426 | # result-allocate-attrib-stl.ssv: result-allocate-ANY-stl
|
---|
427 | # cp $(MEASUREMENT_TOFILE) $@
|
---|
428 |
|
---|
429 |
|
---|
430 |
|
---|
431 |
|
---|
432 |
|
---|
433 |
|
---|
434 |
|
---|
435 | # result-allocate-speed-%.csv: SUBTARGET=measurement2
|
---|
436 | # result-allocate-speed-%.csv: result-allocate-ANY-%
|
---|
437 | # cp $(MEASUREMENT_TOFILE) $@
|
---|
438 |
|
---|
439 | result-allocate-space-%.ssv: SUBTARGET=measurement3
|
---|
440 | result-allocate-space-%.ssv: result-allocate-ANY-%
|
---|
441 | cp $(MEASUREMENT_TOFILE) $@
|
---|
442 |
|
---|
443 | result-allocate-attrib-%.ssv: SUBTARGET=measurement4
|
---|
444 | result-allocate-attrib-%.ssv: result-allocate-ANY-%
|
---|
445 | cp $(MEASUREMENT_TOFILE) $@
|
---|
446 |
|
---|
447 |
|
---|
448 |
|
---|
449 |
|
---|
450 |
|
---|
451 |
|
---|
452 | # .PHONY result-append-pbv.csv result-allocate-ANY-cfa result-allocate-speed-stl.csv
|
---|
453 | # result-allocate-space-cfa.csv
|
---|
454 | # result-allocate-space-stl.csv
|
---|
455 | # result-allocate-attrib-cfa.csv
|
---|
456 | # result-allocate-attrib-stl.csv
|
---|