URI:
       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