tMakefile - numeric - C++ library with numerical algorithms | |
git clone git://src.adamsgaard.dk/numeric | |
Log | |
Files | |
Refs | |
LICENSE | |
--- | |
tMakefile (5230B) | |
--- | |
1 # Compare speed of different programming languages | |
2 # in a matrix multiplication algorithm: AB=C. | |
3 # A is uniform with the cell values '2', B should contain | |
4 # pseudorandom numbers. | |
5 # Initialization of A, B and C in the same loop is allowed, | |
6 # but the multiplication should be done in a separate loop. | |
7 # Matrix dimensions are specified as a command line argument. | |
8 | |
9 MATRIXDIMS_SLOW = 8 16 32 64 128 256 | |
10 MATRIXDIMS = $(MATRIXDIMS_SLOW) 512 1024 | |
11 MATRIXDIMS_FAST = $(MATRIXDIMS) 2048 4096 | |
12 #PREFIXCMD = nice -n 10 \gtime -ao # For OSX with GNU Time | |
13 #PREFIXCMD = nice -n -10 time -ao # For Linux | |
14 PREFIXCMD = time -ao # For Linux | |
15 | |
16 CC=gcc | |
17 CXX=g++ | |
18 CFLAGS=-Wall -O2 -march=native -ffast-math | |
19 CXXFLAGS=-Wall -O2 -march=native -ffast-math | |
20 | |
21 performance.png: plot.gp lua-arrofarrs.dat lua-linarr.dat luajit-arrofar… | |
22 gnuplot -e "platform='$(shell uname -norm)'; threads='$(shell ./… | |
23 | |
24 # Lua: Matrices as arrays of arrays | |
25 lua-arrofarrs.dat: lua-arrofarrs.lua | |
26 # lua-arrofars.lua | |
27 @rm -f $@ | |
28 @for dims in $(MATRIXDIMS_SLOW); do \ | |
29 $(PREFIXCMD) $@ -f "$$dims %e" lua $< $$dims; \ | |
30 echo $$dims; \ | |
31 done | |
32 | |
33 # Lua: Matrices as linear arrays | |
34 lua-linarr.dat: lua-linarr.lua | |
35 # lua-linarr.lua | |
36 @rm -f $@ | |
37 @for dims in $(MATRIXDIMS_SLOW); do \ | |
38 $(PREFIXCMD) $@ -f "$$dims %e" lua $< $$dims; \ | |
39 echo $$dims; \ | |
40 done | |
41 | |
42 # LuaJIT: Matrices as arrays of arrays | |
43 luajit-arrofarrs.dat: lua-arrofarrs.lua | |
44 # luajit-arrofars.lua | |
45 @rm -f $@ | |
46 @for dims in $(MATRIXDIMS); do \ | |
47 $(PREFIXCMD) $@ -f "$$dims %e" luajit $< $$dims; \ | |
48 echo $$dims; \ | |
49 done | |
50 | |
51 # LuaJIT: Matrices as linear arrays | |
52 luajit-linarr.dat: lua-linarr.lua | |
53 # LuaJIT lua-linarr.lua | |
54 @rm -f $@ | |
55 @for dims in $(MATRIXDIMS); do \ | |
56 $(PREFIXCMD) $@ -f "$$dims %e" luajit $< $$dims; \ | |
57 echo $$dims; \ | |
58 done | |
59 | |
60 # C: Array of arrays | |
61 c-arrofarrs.dat: c-arrofarrs | |
62 # c-arrofarrs | |
63 @rm -f $@ | |
64 @for dims in $(MATRIXDIMS); do \ | |
65 $(PREFIXCMD) $@ -f "$$dims %e" ./$< $$dims; \ | |
66 echo $$dims; \ | |
67 done | |
68 | |
69 # C: Matrices as linear arrays | |
70 c-linarr.dat: c-linarr | |
71 # c-linarr | |
72 @rm -f $@ | |
73 @for dims in $(MATRIXDIMS); do \ | |
74 $(PREFIXCMD) $@ -f "$$dims %e" ./$< $$dims; \ | |
75 echo $$dims; \ | |
76 done | |
77 | |
78 # C: Array of arrays, OpenMP | |
79 c-omp-arrofarrs.dat: c-omp-arrofarrs | |
80 # c-omp-arrofarrs | |
81 @rm -f $@ | |
82 @for dims in $(MATRIXDIMS_FAST); do \ | |
83 $(PREFIXCMD) $@ -f "$$dims %e" ./$< $$dims; \ | |
84 echo $$dims; \ | |
85 done | |
86 | |
87 # C: Matrices as linear arrays, OpenMP | |
88 c-omp-linarr.dat: c-omp-linarr | |
89 # c-omp-linarr | |
90 @rm -f $@ | |
91 @for dims in $(MATRIXDIMS_FAST); do \ | |
92 $(PREFIXCMD) $@ -f "$$dims %e" ./$< $$dims; \ | |
93 echo $$dims; \ | |
94 done | |
95 | |
96 c-omp-arrofarrs: c-arrofarrs.c | |
97 $(CC) $(CFLAGS) -fopenmp $< -o $@ | |
98 | |
99 c-omp-linarr: c-linarr.c | |
100 $(CC) $(CFLAGS) -fopenmp $< -o $@ | |
101 | |
102 # C: GSL CBLAS library | |
103 c-gsl-cblas.dat: c-gsl-cblas | |
104 # c-gsl-cblas | |
105 @rm -f $@ | |
106 @for dims in $(MATRIXDIMS_FAST); do \ | |
107 $(PREFIXCMD) $@ -f "$$dims %e" ./$< $$dims; \ | |
108 echo $$dims; \ | |
109 done | |
110 | |
111 c-gsl-cblas: c-gsl-cblas.c | |
112 $(CC) $(CFLAGS) -lgslcblas $< -o $@ | |
113 | |
114 # Julia, native arrays | |
115 julia.dat: julia.jl | |
116 # julia.jl | |
117 @rm -f $@ | |
118 @for dims in $(MATRIXDIMS_FAST); do \ | |
119 $(PREFIXCMD) $@ -f "$$dims %e" julia $< $$dims; \ | |
120 echo $$dims; \ | |
121 done | |
122 | |
123 # C++: Vector of vectors | |
124 cpp-vectorofvectors.dat: cpp-vectorofvectors | |
125 # cpp-vectorofvectors | |
126 @rm -f $@ | |
127 @for dims in $(MATRIXDIMS); do \ | |
128 $(PREFIXCMD) $@ -f "$$dims %e" ./$< $$dims; \ | |
129 echo $$dims; \ | |
130 done | |
131 | |
132 # C++: Linear vectors | |
133 cpp-linvectors.dat: cpp-linvectors | |
134 # cpp-linvectors | |
135 @rm -f $@ | |
136 @for dims in $(MATRIXDIMS); do \ | |
137 $(PREFIXCMD) $@ -f "$$dims %e" ./$< $$dims; \ | |
138 echo $$dims; \ | |
139 done | |
140 | |
141 # C++: Eigen | |
142 cpp-eigen.dat: cpp-eigen | |
143 # cpp-eigen | |
144 @rm -f $@ | |
145 @for dims in $(MATRIXDIMS_FAST); do \ | |
146 $(PREFIXCMD) $@ -f "$$dims %e" ./$< $$dims; \ | |
147 echo $$dims; \ | |
148 done | |
149 | |
150 # C++: Armadillo | |
151 cpp-armadillo.dat: cpp-armadillo | |
152 # cpp-armadillo | |
153 @rm -f $@ | |
154 @for dims in $(MATRIXDIMS_FAST); do \ | |
155 $(PREFIXCMD) $@ -f "$$dims %e" ./$< $$dims; \ | |
156 echo $$dims; \ | |
157 done | |
158 | |
159 cpp-armadillo: cpp-armadillo.cpp | |
160 $(CXX) $(CXXFLAGS) -larmadillo $< -o $@ | |
161 | |
162 # Python: Numpy module | |
163 python-numpy.dat: python-numpy.py | |
164 # python-numpy.py | |
165 @rm -f $@ | |
166 @for dims in $(MATRIXDIMS_FAST); do \ | |
167 $(PREFIXCMD) $@ -f "$$dims %e" python $< $$dims; \ | |
168 echo $$dims; \ | |
169 done | |
170 | |
171 # Octave | |
172 octave.dat: octave.m | |
173 # octave.m | |
174 @rm -f $@ | |
175 @for dims in $(MATRIXDIMS_FAST); do \ | |
176 $(PREFIXCMD) $@ -f "$$dims %e" octave -qf $< $$dims; \ | |
177 echo $$dims; \ | |
178 done | |
179 | |
180 # CUDA using CUBLAS | |
181 cuda-cublas.dat: cuda-cublas | |
182 @rm -f $@ | |
183 @for dims in $(MATRIXDIMS_FAST); do \ | |
184 $(PREFIXCMD) $@ -f "$$dims %e" ./$< $$dims; \ | |
185 echo $$dims; \ | |
186 done | |
187 | |
188 cuda-cublas: cuda-cublas.cu | |
189 nvcc -lcublas -lcudart -m64 -gencode arch=compute_20,code=sm_20 … | |
190 | |
191 # Fortran 90 | |
192 fortran90.dat: fortran90 | |
193 # fortran90.f | |
194 | |
195 fortran90: fortran90.f | |
196 gfortran -Wall -O3 $< -o $@ | |
197 | |
198 clean: | |
199 $(RM) *.o | |
200 $(RM) *.dat | |
201 $(RM) *.png | |
202 $(RM) c-arrofarrs c-linarr | |
203 $(RM) c-omp-arrofarrs c-omp-linarr | |
204 $(RM) c-gsl-cblas | |
205 $(RM) cpp-vectorofvectors cpp-linvectors | |
206 | |
207 edit: | |
208 vim -p Makefile plot.gp |