# DBDIR 
DBDIR = .
KLIC = klic -dp -v -g -O2 -x $(DBDIR)
#KLIC = /home2/yamauchi/bin/klic -dp -v -g -O2 -x $(DBDIR)

# runtime option for test programs
RUNOPT= -e -noitimer	# for pvm-tcp version
RUNOPT= -e -S -I10000	# for pvm version


# for dp_st_check 
RUNOPT2=  -S -I10000	# for pvm version

# command prefix to run
CMD=./

#---------------------------------------------------------
# Select your dpool here
# Candidates: owner-migration, owner-fixed, access-info
#---------------------------------------------------------
# for owner-fixed
#DPOOLSRCDIR = ../src/owner-fixed
# for owner-migration
DPOOLSRCDIR = ../src/owner-migration
# for access-info
# DPOOLSRCDIR = ../src/access-info
#---------------------------------------------------------
POOLSRCDIR =  ../src/owner-fixed
#---------------------------------------------------------
DPOOLSRC =  $(DPOOLSRCDIR)/cache.kl1 $(DPOOLSRCDIR)/directory.kl1 \
	$(DPOOLSRCDIR)/manager.kl1 \
	$(DPOOLSRCDIR)/pool.kl1 $(DPOOLSRCDIR)/hash.kl1 \
	dp_bench.kl1 timer.kl1
#---------------------------------------------------------
POOLSRC =  $(POOLSRCDIR)/pool.kl1 $(POOLSRCDIR)/hash.kl1 \
	p_bench.kl1 timer.kl1
#---------------------------------------------------------

ALLOBJS = $(TSTOBJ1) $(TSTOBJ2) $(TSTOBJ3) $(TSTOBJ4)

TSTOBJ1 = dp_bench_int dp_bench_list10 dp_bench_intCong
TSTOBJ2 = p_bench_int p_bench_list10 p_bench_intCong
TSTOBJ3 = dp_st_check
TSTOBJ4 = mgtp_bench
	
#---------------------------------------------------------
# rules for making sample programs 
#---------------------------------------------------------
default: $(ALLOBJS)

dp_bench: $(TSTOBJ1)

p_bench:  $(TSTOBJ2)

#---------------------------------------------------------
# rules for measuring the performance of dpool
#---------------------------------------------------------
all-tests: dp_bench.tst p_bench.tst mgtp_bench.tst

all-measure: 	dp_bench.tst p_bench.tst

dp_bench.tst:	dp_bench_int.tst dp_bench_list10.tst dp_bench_intCong.tst

p_bench.tst:	p_bench_int.tst p_bench_list10.tst p_bench_intCong.tst

dp_bench_int.tst:	dp_bench_int	
	@echo Reference time is 2287+-182 msec
	$(CMD)dp_bench_int -dp2 $(RUNOPT) 0
	@echo Reference time is 1954+-47 msec
	$(CMD)dp_bench_int -dp2 $(RUNOPT) 10
	@echo Reference time is 1740+-91 msec
	$(CMD)dp_bench_int -dp2 $(RUNOPT) 20
	@echo Reference time is 1574+-105 msec
	$(CMD)dp_bench_int -dp2 $(RUNOPT) 30
	@echo Reference time is 1335+-71 msec
	$(CMD)dp_bench_int -dp2 $(RUNOPT) 40
	@echo Reference time is 1099+-10 msec
	$(CMD)dp_bench_int -dp2 $(RUNOPT) 50
	@echo Reference time is 890+-6 msec
	$(CMD)dp_bench_int -dp2 $(RUNOPT) 60
	@echo Reference time is 676+-6 msec
	$(CMD)dp_bench_int -dp2 $(RUNOPT) 70
	@echo Reference time is 472+-10 msec
	$(CMD)dp_bench_int -dp2 $(RUNOPT) 80
	@echo Reference time is 254+-10 msec
	$(CMD)dp_bench_int -dp2 $(RUNOPT) 90
	@echo Reference time is 39+-0 msec
	$(CMD)dp_bench_int -dp2 $(RUNOPT) 100
	@echo Reference time is 28+-5 msec
	$(CMD)dp_bench_int -dp1 $(RUNOPT) 101
dp_bench_list10.tst:	dp_bench_list10
	@echo Reference time is 2263+-34 msec
	$(CMD)dp_bench_list10 -dp2 $(RUNOPT) 0
	@echo Reference time is 1983+-54 msec
	$(CMD)dp_bench_list10 -dp2 $(RUNOPT) 10
	@echo Reference time is 1808+-119 msec
	$(CMD)dp_bench_list10 -dp2 $(RUNOPT) 20
	@echo Reference time is 1546+-28 msec
	$(CMD)dp_bench_list10 -dp2 $(RUNOPT) 30
	@echo Reference time is 1377+-69 msec
	$(CMD)dp_bench_list10 -dp2 $(RUNOPT) 40
	@echo Reference time is 1105+-9 msec
	$(CMD)dp_bench_list10 -dp2 $(RUNOPT) 50
	@echo Reference time is 919+-26 msec
	$(CMD)dp_bench_list10 -dp2 $(RUNOPT) 60
	@echo Reference time is 700+-16 msec
	$(CMD)dp_bench_list10 -dp2 $(RUNOPT) 70
	@echo Reference time is 500+-15 msec
	$(CMD)dp_bench_list10 -dp2 $(RUNOPT) 80
	@echo Reference time is 273+-29 msec
	$(CMD)dp_bench_list10 -dp2 $(RUNOPT) 90
	@echo Reference time is 42+-4 msec
	$(CMD)dp_bench_list10 -dp2 $(RUNOPT) 100
	@echo Reference time is 21+-0 msec
	$(CMD)dp_bench_list10 -dp1 $(RUNOPT) 101
dp_bench_intCong.tst:	dp_bench_intCong
	@echo Reference time is 27+-1 msec
	$(CMD)dp_bench_intCong -dp2 $(RUNOPT) 1
	@echo Reference time is 780+-82 msec
	$(CMD)dp_bench_intCong -dp4 $(RUNOPT) 3
	@echo Reference time is 1020+-129 msec
	$(CMD)dp_bench_intCong -dp6 $(RUNOPT) 5
	@echo Reference time is 1193+-98 msec
	$(CMD)dp_bench_intCong -dp8 $(RUNOPT) 7
	@echo Reference time is 1338+-57 msec
	$(CMD)dp_bench_intCong -dp10 $(RUNOPT) 9
	@echo Reference time is 1510+-97 msec
	$(CMD)dp_bench_intCong -dp12 $(RUNOPT) 11
	@echo Reference time is 1648+-90 msec
	$(CMD)dp_bench_intCong -dp14 $(RUNOPT) 13
	@echo Reference time is 2194+-286 msec
	$(CMD)dp_bench_intCong -dp16 $(RUNOPT) 15
				
p_bench_int.tst: 	p_bench_int	
	@echo Reference time is 871+-77 msec
	$(CMD)p_bench_int -dp1 $(RUNOPT) 0
	@echo Reference time is 2096+-121 msec
	$(CMD)p_bench_int -dp2 $(RUNOPT) 1
p_bench_list10.tst: 	p_bench_list10
	@echo Reference time is 843+-12 msec
	$(CMD)p_bench_list10 -dp1 $(RUNOPT) 0
	@echo Reference time is 2049+-61 msec
	$(CMD)p_bench_list10 -dp2 $(RUNOPT) 1
p_bench_intCong.tst: 	p_bench_intCong
	@echo Reference time is 2084+-95 msec
	$(CMD)p_bench_intCong -dp2 $(RUNOPT) 1
	@echo Reference time is 2776+-310 msec
	$(CMD)p_bench_intCong -dp4 $(RUNOPT) 3
	@echo Reference time is 3694+-278 msec
	$(CMD)p_bench_intCong -dp6 $(RUNOPT) 5
	@echo Reference time is 4851+-468 msec
	$(CMD)p_bench_intCong -dp8 $(RUNOPT) 7
	@echo Reference time is 5974+-330 msec
	$(CMD)p_bench_intCong -dp10 $(RUNOPT) 9
	@echo Reference time is 6853+-524 msec
	$(CMD)p_bench_intCong -dp12 $(RUNOPT) 11
	@echo Reference time is 8080+-1656 msec
	$(CMD)p_bench_intCong -dp14 $(RUNOPT) 13
	@echo Reference time is 9200+-1153 msec
	$(CMD)p_bench_intCong -dp16 $(RUNOPT) 15

#---------------------------------------------------------
# CAUTION:
#	dp_st_check is only for owner-fixed.
#---------------------------------------------------------
dp_st_check.tst:	dp_st_check	
	@echo Reference time is 8174+-160 msec
	$(CMD)dp_st_check -dp3  $(RUNOPT2) 

mgtp_bench.tst:	mgtp_bench
	@echo Reference time is 111861+-1097 msec
	$(CMD)mgtp_bench -dp1  $(RUNOPT) 
	@echo Reference time is 153687+-2894 msec
	$(CMD)mgtp_bench -dp2  $(RUNOPT) 
	@echo Reference time is 99908+-2104 msec
	$(CMD)mgtp_bench -dp4  $(RUNOPT) 
	@echo Reference time is 75653+-2780 msec
	$(CMD)mgtp_bench -dp8  $(RUNOPT) 

		
#---------------------------------------------------------
# rules for making object files of sample programs
#---------------------------------------------------------
mgtp_bench:	$(DPOOLSRC)  mgtp_bench.kl1 mgtp_bench_main.kl1 rlib.kl1
	$(KLIC) -o mgtp_bench $(DPOOLSRC) mgtp_bench.kl1 mgtp_bench_main.kl1
dp_st_check: $(DPOOLSRC) dp_st_check.kl1 dp_st_check_main.kl1 
	$(KLIC) -o dp_st_check $(DPOOLSRC) dp_st_check.kl1 dp_st_check_main.kl1
dp_bench_int:	$(DPOOLSRC)  rlib.kl1 dp_bench_main_int.kl1
	$(KLIC) -o dp_bench_int $(DPOOLSRC) rlib.kl1 dp_bench_main_int.kl1
dp_bench_list10: $(DPOOLSRC) rlib.kl1 dp_bench_main_list10.kl1
	$(KLIC) -o dp_bench_list10 $(DPOOLSRC) rlib.kl1 dp_bench_main_list10.kl1
dp_bench_intCong:$(DPOOLSRC) rlib.kl1 dp_bench_main_intCong.kl1
	$(KLIC) -o dp_bench_intCong $(DPOOLSRC) rlib.kl1 dp_bench_main_intCong.kl1
p_bench_int: $(POOLSRC) rlib.kl1 p_bench_main_int.kl1
	$(KLIC) -o p_bench_int $(POOLSRC) rlib.kl1 p_bench_main_int.kl1
p_bench_list10: $(POOLSRC) rlib.kl1 p_bench_main_list10.kl1
	$(KLIC) -o p_bench_list10 $(POOLSRC) rlib.kl1 p_bench_main_list10.kl1
p_bench_intCong: $(POOLSRC) rlib.kl1 p_bench_main_intCong.kl1
	$(KLIC) -o p_bench_intCong $(POOLSRC) rlib.kl1 p_bench_main_intCong.kl1
#---------------------------------------------------------
# clean up rule
#---------------------------------------------------------
clean:
	/bin/rm -f *.c *.o *.h *.ext *.db  $(ALLOBJS)
	/bin/rm -f $(DPOOLSRCDIR)/*.c $(DPOOLSRCDIR)/*.o $(DPOOLSRCDIR)/*.ext
	/bin/rm -f $(POOLSRCDIR)/*.c $(POOLSRCDIR)/*.o $(POOLSRCDIR)/*.ext






