tMakefile - numeric - C++ library with numerical algorithms
HTML git clone git://src.adamsgaard.dk/numeric
DIR Log
DIR Files
DIR Refs
DIR 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-arrofarrs.dat luajit-linarr.dat c-arrofarrs.dat c-linarr.dat c-omp-arrofarrs.dat c-omp-linarr.dat c-gsl-cblas.dat julia.dat cpp-vectorofvectors.dat cpp-linvectors.dat cpp-armadillo.dat cpp-eigen.dat python-numpy.dat octave.dat cuda-cublas.dat cputhreads.sh cpumodel.sh
22 gnuplot -e "platform='$(shell uname -norm)'; threads='$(shell ./cputhreads.sh)'; cpumodel='$(shell ./cpumodel.sh)'" plot.gp
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 $< -o $@
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