source: trunk/Softwares/Makefile.Workload

Last change on this file was 124, checked in by rosiere, 17 years ago

1) Add test and configuration
2) Fix Bug
3) Add log file in load store unit
4) Fix Bug in environment

  • Property svn:keywords set to Id
File size: 18.4 KB
Line 
1#
2# $Id: Makefile.Workload 124 2009-06-17 12:11:25Z rosiere $
3#
4# [ Description ]
5#
6# Makefile
7#
8
9ifeq ($(origin BENCHS), undefined)
10 $(error "variable BENCHS is undefined")
11endif
12
13ifeq ($(origin NB_THREAD_MAX),, undefined)
14 $(error "variable NB_THREAD_MAX is undefined")
15endif
16
17#-----[ Variables ]---------------------------------------------------------------
18FILE_WORKLOAD_LOG = workload.txt
19FILE_WORKLOAD_SCRIPT = workload.sh
20FILE_BENCH = $(DIR_INC)/workload.h
21FILE_BENCH_SED = $(DIR_INC)/workload.h.sed
22
23#-----[ Rules ]-------------------------------------------------------------------
24
25list :
26 @\
27 for bench in $(BENCHS); do \
28 $(ECHO) $${bench}; \
29 done;
30
31print :
32 @$(CAT) $(FILE_BENCH);
33
34define :
35 @ \
36 $(ECHO) "Give a Number of thread (1 by default, Max : $(NB_THREAD_MAX)) : "; \
37 declare -i NB_THREAD=0; \
38 $(READ) NB_THREAD; \
39 \
40 if $(TEST) "$$NB_THREAD" -ge "$(NB_THREAD_MAX)"; \
41 then \
42 NB_THREAD=$(NB_THREAD_MAX); \
43 else \
44 if $(TEST) "$$NB_THREAD" -eq 0; \
45 then \
46 NB_THREAD=1; \
47 fi; \
48 fi; \
49 \
50 $(ECHO) "You want $$NB_THREAD thread(s)"; \
51 $(ECHO) ""; \
52 declare -i NUM_THREAD=0; \
53 declare WORKLOAD=""; \
54 declare -i PREVIOUS=1; \
55 declare -i CPT=2; \
56 declare -a BENCHS; \
57 \
58 BENCHS[0]="previous choose"; \
59 BENCHS[1]="none"; \
60 for benchs in $(BENCHS); do \
61 BENCHS[$$CPT]=$${benchs/"."/"_"}; \
62 CPT=$$(($$CPT+1)); \
63 done; \
64 \
65 $(ECHO) "For each Thread, you must select a number of benchmark (0 by default)";\
66 $(ECHO) ""; \
67 \
68 while [ $$NUM_THREAD -lt $$NB_THREAD ]; \
69 do \
70 if $(TEST) $$NUM_THREAD -ne 0; \
71 then \
72 WORKLOAD=$$WORKLOAD",\n"; \
73 fi; \
74 \
75 $(ECHO) "For Thread[$$NUM_THREAD] ....."; \
76 declare -i NUM_BENCH; \
77 \
78 $(ECHO) "0) previous choose : $${BENCHS[$$PREVIOUS]}"; \
79 CPT=1; \
80 while [ $$CPT -lt $${#BENCHS[*]} ]; \
81 do \
82 $(ECHO) "$$CPT) $${BENCHS[$$CPT]}"; \
83 CPT=$$(($$CPT+1)); \
84 done; \
85 $(READ) NUM_BENCH; \
86 \
87 if $(TEST) "$$NUM_BENCH" -ge "$$CPT"; \
88 then \
89 NUM_BENCH=0; \
90 fi; \
91 \
92 if $(TEST) "$$NUM_BENCH" -eq "0"; \
93 then \
94 NUM_BENCH=$$PREVIOUS; \
95 else \
96 PREVIOUS=$$NUM_BENCH; \
97 fi; \
98 \
99 $(ECHO) "Benchmark selected : $${BENCHS[$$NUM_BENCH]}"; \
100 $(ECHO) ""; \
101 \
102 WORKLOAD=$$WORKLOAD"\t(void *) run_$${BENCHS[$$NUM_BENCH]}"; \
103 NUM_THREAD=$$(($$NUM_THREAD+1)); \
104 done; \
105 $(ECHO) ""; \
106 $(ECHO) "Generate the file : $(FILE_BENCH)"; \
107 $(CAT) $(FILE_BENCH_SED) |$(SED) "s/@WORKLOAD/$$WORKLOAD/" > $(FILE_BENCH); \
108 $(RM) $$$$; \
109 $(ECHO) "";
110
111
112workload :
113 @ \
114 $(ECHO) "Give a Number of thread (1 by default, Max : $(NB_THREAD_MAX)) : "; \
115 declare -i NB_THREAD=0; \
116 $(READ) NB_THREAD; \
117 \
118 if $(TEST) "$$NB_THREAD" -ge "$(NB_THREAD_MAX)"; \
119 then \
120 NB_THREAD=$(NB_THREAD_MAX); \
121 else \
122 if $(TEST) "$$NB_THREAD" -eq 0; \
123 then \
124 NB_THREAD=1; \
125 fi; \
126 fi; \
127 \
128 $(ECHO) " * You want $$NB_THREAD thread(s)"; \
129 $(ECHO) ""; \
130 $(ECHO) "List of all Benchmark"; \
131 declare -i CPT=1; \
132 declare -a BENCHS; \
133 \
134 for benchs in $(BENCHS); do \
135 $(ECHO) " $$CPT) $$benchs"; \
136 BENCHS[$$CPT]=$${benchs/"."/"_"}; \
137 CPT=$$(($$CPT+1)); \
138 done; \
139 $(ECHO) ""; \
140 $(ECHO) "Enter the list benchmark (0 to stop)"; \
141 declare -i NUM_BENCH; \
142 CPT=1; \
143 declare -a -i WORKLOAD; \
144 \
145 rm -f $(FILE_WORKLOAD_SCRIPT); \
146 $(ECHO) -n "$(ECHO) -e \"$$NB_THREAD\n" > $(FILE_WORKLOAD_SCRIPT); \
147 \
148 while $(TEST) 1; do \
149 $(READ) NUM_BENCH; \
150 \
151 $(ECHO) -n "$$NUM_BENCH\n" >> $(FILE_WORKLOAD_SCRIPT); \
152 \
153 if $(TEST) $$NUM_BENCH -eq 0; then \
154 break; \
155 fi; \
156 \
157 if $(TEST) $$NUM_BENCH -gt $${#BENCHS[*]}; then \
158 $(ECHO) " * Out of limit, retry ..."; \
159 else \
160 echo " * $${BENCHS[$$NUM_BENCH]}"; \
161 WORKLOAD[$$CPT]=$$NUM_BENCH; \
162 CPT=$$(($$CPT+1)); \
163 fi; \
164 done; \
165 \
166 $(ECHO) "\" | $(MAKE) $@" >> $(FILE_WORKLOAD_SCRIPT); \
167 $(CHMOD) +x $(FILE_WORKLOAD_SCRIPT); \
168 \
169 if $(TEST) $$NB_THREAD -gt $${#WORKLOAD[*]}; then \
170 $(ECHO) "Error : The number of bench in the workload ($${#WORKLOAD[*]}) is < at the number of thread ($$NB_THREAD)"; \
171 exit; \
172 fi; \
173 $(ECHO) ""; \
174 $(ECHO) "Generate the workload"; \
175 \
176 declare -i NB_ITERATION=1; \
177 CPT=$$(($$NB_THREAD+1)); \
178 while $(TEST) $$CPT -le $${#WORKLOAD[*]}; do \
179 NB_ITERATION=$$(($$NB_ITERATION*$$CPT)); \
180 CPT=$$(($$CPT+1)); \
181 done; \
182 CPT=$$(($${#WORKLOAD[*]}-$$NB_THREAD)); \
183 while $(TEST) $$CPT -gt 0; do \
184 NB_ITERATION=$$(($$NB_ITERATION/$$CPT)); \
185 CPT=$$(($$CPT-1)); \
186 done; \
187 $(ECHO) " * $$NB_ITERATION Workloads (n!/(p!*(n-p)!))"; \
188 \
189 declare -a -i PTR; \
190 CPT=1; \
191 while $(TEST) $$CPT -le $$NB_THREAD; do \
192 PTR[$$CPT]=$$(($$NB_THREAD-$$CPT+1)); \
193 CPT=$$(($$CPT+1)); \
194 done; \
195 \
196 CPT=0; \
197 declare -i IT; \
198 declare -a -i OVF; \
199 declare -a -i NB_OVF; \
200 rm -f $(FILE_WORKLOAD_LOG); \
201 \
202 while $(TEST) $$CPT -lt $$NB_ITERATION; do \
203 declare COMMAND="$$NB_THREAD\n"; \
204 $(ECHO) -ne " - [$$CPT]\t"; \
205 \
206 OVF[0]=0; \
207 NB_OVF=0; \
208 if $(TEST) $${PTR[1]} -ge $${#WORKLOAD[*]}; then \
209 OVF[0]=1; \
210 fi; \
211 \
212 declare WORKLOAD_CURRENT=""; \
213 IT=1; \
214 while $(TEST) $$IT -le $$NB_THREAD; do \
215 WORKLOAD_CURRENT="$${WORKLOAD_CURRENT} $${BENCHS[$${WORKLOAD[$${PTR[$$IT]}]}]}";\
216 $(ECHO) -ne " $${BENCHS[$${WORKLOAD[$${PTR[$$IT]}]}]}\t"; \
217 \
218 COMMAND="$${COMMAND}$$(($${WORKLOAD[$${PTR[$$IT]}]}+1))\n"; \
219 OVF[$$(($$IT))]=0; \
220 if $(TEST) $${OVF[$$(($$IT-1))]} -eq 1 ; then \
221 if $(TEST) $$(($${PTR[$$IT]}+$$NB_OVF)) -ge $${#WORKLOAD[*]}; then \
222 OVF[$$IT]=1; \
223 NB_OVF=$$(($$NB_OVF+1)); \
224 fi; \
225 fi; \
226 \
227 IT=$$(($$IT+1)); \
228 done; \
229 echo ""; \
230 \
231 $(ECHO) "$(EXE)_$${CPT}.x : $${WORKLOAD_CURRENT}" >> $(FILE_WORKLOAD_LOG); \
232 $(MAKE) clean; \
233 $(ECHO) -e $${COMMAND} | $(MAKE) define; \
234 $(MAKE) $(DIR_BIN)/$(EXE)_$${CPT}.x; \
235 \
236 PTR[1]=$$(($${PTR[1]}+1)); \
237 IT=$$NB_THREAD; \
238 while $(TEST) $$IT -ge 1; do \
239 if $(TEST) $${OVF[$$IT]} -eq 1 ; then \
240 PTR[$$(($$IT))]=$${PTR[$$(($$IT+1))]}; \
241 fi; \
242 \
243 if $(TEST) $${OVF[$$(($$IT-1))]} -eq 1 ; then \
244 PTR[$$(($$IT))]=$$(($${PTR[$$IT]}+1)); \
245 fi; \
246 IT=$$(($$IT-1)); \
247 done; \
248 \
249 CPT=$$(($$CPT+1)); \
250 done;
Note: See TracBrowser for help on using the repository browser.