This repository was archived by the owner on Dec 16, 2022. It is now read-only.
forked from JuliaLang/julia
-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathMakefile
123 lines (96 loc) · 3.11 KB
/
Makefile
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
JULIAHOME = $(abspath ../../..)
include $(JULIAHOME)/Make.inc
include $(JULIAHOME)/deps/Versions.make
ifeq ($(OS), WINNT)
MATHEMATICABIN = MathKernel
else ifeq ($(OS), Darwin)
MATHEMATICABIN = MathKernel
else
MATHEMATICABIN = math
endif
#Which BLAS library am I using?
ifeq ($(USE_SYSTEM_BLAS), 0)
BLASDIR=$(JULIAHOME)/deps/openblas-$(OPENBLAS_VER)/
LIBBLAS=$(BLASDIR)libopenblas.a
endif
FFLAGS=-fexternal-blas
ifeq ($(findstring gfortran, $(FC)), gfortran)
ifeq ($(USE_BLAS64), 1)
#gfortran cannot multiply matrices using 64-bit external BLAS.
#External BLAS usage is turned OFF.
FFLAGS=
endif
FFLAGS+= -static-libgfortran
endif
#Which libm library am I using?
LIBMDIR = $(JULIAHOME)/deps/openlibm/
ifeq ($(USE_SYSTEM_LIBM), 0)
ifeq ($(USE_SYSTEM_OPENLIBM), 0)
LIBM = $(LIBMDIR)libopenlibm.a
endif
endif
default: benchmarks.html
export OMP_NUM_THREADS=1
export GOTO_NUM_THREADS=1
export OPENBLAS_NUM_THREADS=1
perf.h: $(JULIAHOME)/deps/Versions.make
echo '#include "$(BLASDIR)cblas.h"' > $@
echo '#include "$(JULIAHOME)/deps/random/dsfmt-$(DSFMT_VER)/dSFMT.c"' >> $@
bin/perf%: perf.c perf.h
$(CC) -std=c99 -O$* $< -o $@ -L$(BLASDIR) $(LIBBLAS) -L$(LIBMDIR) $(LIBM) -lpthread
bin/fperf%: perf.f90
mkdir -p mods/$@ #Modules for each binary go in separate directories
$(FC) $(FFLAGS) -Jmods/$@ -O$* $< -o $@ -L$(BLASDIR) $(LIBBLAS) -L$(LIBMDIR) $(LIBM) -lpthread
benchmarks/c.csv: \
benchmarks/c0.csv \
benchmarks/c1.csv \
benchmarks/c2.csv \
benchmarks/c3.csv
cat $^ > $@
benchmarks/fortran.csv: \
benchmarks/fortran0.csv \
benchmarks/fortran1.csv \
benchmarks/fortran2.csv \
benchmarks/fortran3.csv
cat $^ > $@
benchmarks/c%.csv: bin/perf%
for t in 1 2 3 4 5; do $<; done >$@
benchmarks/fortran%.csv: bin/fperf%
for t in 1 2 3 4 5; do $<; done >$@
benchmarks/go.csv: perf.go
for t in 1 2 3 4 5; do go run $<; done >$@
benchmarks/julia.csv: perf.jl
for t in 1 2 3 4 5; do ../../../julia $<; done >$@
benchmarks/python.csv: perf.py
for t in 1 2 3 4 5; do python $<; done >$@
benchmarks/matlab.csv: perf.m
for t in 1 2 3 4 5; do matlab -nosplash -nodesktop -nojvm -r 'perf;exit' 2>/dev/null | grep '^matlab,'; done >$@
benchmarks/octave.csv: perf.m
for t in 1 2 3 4 5; do octave -q --eval perf 2>/dev/null; done >$@
benchmarks/r.csv: perf.R
for t in 1 2 3 4 5; do cat $< | R --vanilla --slave 2>/dev/null; done >$@
benchmarks/javascript.csv: perf.js
for t in 1 2 3 4 5; do node $<; done >$@
benchmarks/mathematica.csv: perf.nb
for t in 1 2 3 4 5; do $(MATHEMATICABIN) -noprompt -run "<<$<; Exit[]"; done >$@
benchmarks/lua.csv: perf.lua
for t in 1 2 3 4 5; do gsl-shell $<; done >$@
BENCHMARKS = \
benchmarks/c.csv \
benchmarks/fortran.csv \
benchmarks/go.csv \
benchmarks/julia.csv \
benchmarks/python.csv \
benchmarks/matlab.csv \
benchmarks/octave.csv \
benchmarks/r.csv \
benchmarks/lua.csv \
benchmarks/javascript.csv \
benchmarks/mathematica.csv
benchmarks.csv: bin/collect.pl $(BENCHMARKS)
@$(call PRINT_PERL, $^ >$@)
benchmarks.html: bin/table.pl benchmarks.csv
@$(call PRINT_PERL, $^ >$@)
clean:
@rm -rf perf.h bin/perf* bin/fperf* benchmarks/*.csv benchmarks.csv mods *~ octave-core
.PHONY: all perf clean