Statistiques
| Révision :

root / BLAS / xGEMM / Makefile @ 265

Historique | Voir | Annoter | Télécharger (3,97 ko)

1 250 equemene
# Makefile designed for Debian Buster
2 250 equemene
3 1 equemene
SOURCE=xGEMM.c
4 1 equemene
5 146 equemene
CC=gcc
6 146 equemene
FC=gfortran
7 53 equemene
CFLAGS=-Wall -O3 -ffast-math
8 1 equemene
LDFLAGS=-lm
9 250 equemene
10 146 equemene
CLBLASINC=/usr/include
11 245 equemene
CLBLASLIB=/usr/lib/x86_64-linux-gnu
12 1 equemene
13 250 equemene
CUDALIB?=/usr/lib/x86_64-linux-gnu/
14 250 equemene
CUDAINC?=/usr/include
15 264 equemene
CUDASRC?=/usr/share/doc/nvidia-cuda-toolkit/examples/libcublas
16 250 equemene
THUNKING=fortran_thunking.c
17 250 equemene
CUDASRCINC=fortran_common.h
18 1 equemene
19 1 equemene
GSLINC=/usr/include/gsl
20 1 equemene
21 250 equemene
# OPENBLAS=/usr/lib/x86_64-linux-gnu
22 250 equemene
# ATLAS=/usr/lib/x86_64-linux-gnu
23 1 equemene
24 1 equemene
ACML=/opt/acml
25 1 equemene
ACMLINC=$(ACML)/gfortran64_mp/include
26 1 equemene
ACMLLIB=$(ACML)/gfortran64_mp/lib
27 1 equemene
28 250 equemene
#EXECUTABLE=gsl cblas fblas openblas clblas cublas acml thunking
29 250 equemene
EXECUTABLE=gsl cblas fblas openblas clblas cublas thunking
30 1 equemene
31 250 equemene
# FORMAT define the precision of Floating Point numbers
32 250 equemene
# FP32 for simple of 32 bits size
33 250 equemene
# FP64 for double of 64 bits size
34 250 equemene
FORMAT=FP64
35 250 equemene
#FORMAT=FP32
36 1 equemene
37 1 equemene
#DIRECTIVES=-D$(FORMAT) -DPRINT -DUNIT
38 1 equemene
#DIRECTIVES=-D$(FORMAT) -DUNIT -DRESULTS -DQUIET
39 1 equemene
DIRECTIVES=-DUNIT -DQUIET
40 1 equemene
41 1 equemene
all: $(EXECUTABLE)
42 1 equemene
43 1 equemene
cblas: $(SOURCE)
44 1 equemene
45 250 equemene
	$(CC) $(CFLAGS) $(DIRECTIVES) -DFP32 -DCBLAS $(LDFLAGS) \
46 7 equemene
		$(SOURCE) -latlas -lcblas -o $(SOURCE:.c=)_SP_$@
47 1 equemene
48 250 equemene
	$(CC) $(CFLAGS) $(DIRECTIVES) -DFP64 -DCBLAS $(LDFLAGS) \
49 7 equemene
		$(SOURCE) -latlas -lcblas -o $(SOURCE:.c=)_DP_$@
50 1 equemene
51 6 equemene
openblas: $(SOURCE)
52 6 equemene
53 250 equemene
	$(CC) $(CFLAGS) $(DIRECTIVES) -DFP32 -DCBLAS $(LDFLAGS) \
54 250 equemene
		$(SOURCE) -lopenblas -lpthread -o $(SOURCE:.c=)_SP_$@
55 6 equemene
56 250 equemene
	$(CC) $(CFLAGS) $(DIRECTIVES) -DFP64 -DCBLAS $(LDFLAGS) \
57 250 equemene
		$(SOURCE) -lopenblas -lpthread -o $(SOURCE:.c=)_DP_$@
58 6 equemene
59 1 equemene
acml: $(SOURCE)
60 1 equemene
61 250 equemene
	$(CC) -I$(ACMLINC) $(CFLAGS) $(DIRECTIVES) -DFP32 -DACML $(LDFLAGS) \
62 51 equemene
		$(SOURCE) -L$(ACMLLIB) -lacml_mp \
63 1 equemene
		-lgomp -lgfortran -lpthread -o $(SOURCE:.c=)_SP_$@
64 1 equemene
65 250 equemene
	$(CC) -I$(ACMLINC) $(CFLAGS) $(DIRECTIVES) -DFP64 -DACML $(LDFLAGS) \
66 51 equemene
		$(SOURCE) -L$(ACMLLIB) -lacml_mp \
67 1 equemene
		-lgomp -lgfortran -lpthread -o $(SOURCE:.c=)_DP_$@
68 1 equemene
69 1 equemene
fblas: $(SOURCE)
70 1 equemene
71 250 equemene
	# ATLAS version
72 250 equemene
	# $(CC) -L$(ATLAS) $(CFLAGS) $(DIRECTIVES) -DFP32 -DFBLAS $(LDFLAGS) \
73 250 equemene
	# 	$(SOURCE) -latlas -lf77blas -o $(SOURCE:.c=)_SP_$@
74 1 equemene
75 250 equemene
	# $(CC) -L$(ATLAS) $(CFLAGS) $(DIRECTIVES) -DFP64 -DFBLAS $(LDFLAGS) \
76 250 equemene
	# 	$(SOURCE) -latlas -lf77blas -o $(SOURCE:.c=)_DP_$@
77 1 equemene
78 250 equemene
	# OpenBLAS version
79 250 equemene
	$(CC) $(CFLAGS) $(DIRECTIVES) -DFP32 -DFBLAS $(LDFLAGS) \
80 250 equemene
		$(SOURCE) -lopenblas -lpthread -o $(SOURCE:.c=)_SP_$@
81 1 equemene
82 250 equemene
	$(CC) $(CFLAGS) $(DIRECTIVES) -DFP64 -DFBLAS $(LDFLAGS) \
83 250 equemene
		$(SOURCE) -lopenblas -lpthread -o $(SOURCE:.c=)_DP_$@
84 250 equemene
85 250 equemene
86 1 equemene
gsl: $(SOURCE)
87 1 equemene
88 250 equemene
	$(CC) -I$(GSLINC) $(CFLAGS) $(DIRECTIVES) -DFP32 \
89 1 equemene
		-DGSL $(LDFLAGS) \
90 1 equemene
		$(SOURCE) -lgslcblas -o $(SOURCE:.c=)_SP_$@
91 1 equemene
92 250 equemene
	$(CC) -I$(GSLINC) $(CFLAGS) $(DIRECTIVES) -DFP64 \
93 1 equemene
		-DGSL $(LDFLAGS) \
94 1 equemene
		$(SOURCE) -lgslcblas -o $(SOURCE:.c=)_DP_$@
95 1 equemene
96 51 equemene
clblas: $(SOURCE)
97 51 equemene
98 250 equemene
	$(CC) -I$(CLBLASINC) -L$(CLBLASLIB) $(CFLAGS) -DFP32 \
99 51 equemene
		-DCLBLAS $(LDFLAGS) \
100 51 equemene
		$(DIRECTIVES) $(SOURCE) -lclBLAS -lOpenCL -o $(SOURCE:.c=)_SP_$@
101 51 equemene
102 250 equemene
	$(CC) -I$(CLBLASINC) -L$(CLBLASLIB) $(CFLAGS) -DFP64 \
103 51 equemene
		-DCLBLAS $(LDFLAGS) \
104 51 equemene
		$(DIRECTIVES) $(SOURCE) -lclBLAS -lOpenCL -o $(SOURCE:.c=)_DP_$@
105 51 equemene
106 1 equemene
cublas: $(SOURCE)
107 1 equemene
108 250 equemene
	$(CC) -I$(CUDAINC) -L$(CUDALIB) $(CFLAGS) -DFP32 \
109 1 equemene
		-DCUBLAS $(LDFLAGS) \
110 1 equemene
		$(DIRECTIVES) $(SOURCE) -lcublas -o $(SOURCE:.c=)_SP_$@
111 1 equemene
112 250 equemene
	$(CC) -I$(CUDAINC) -L$(CUDALIB) $(CFLAGS) -DFP64 \
113 1 equemene
		-DCUBLAS $(LDFLAGS) \
114 1 equemene
		$(DIRECTIVES) $(SOURCE) -lcublas -o $(SOURCE:.c=)_DP_$@
115 1 equemene
116 1 equemene
thunking: $(SOURCE)
117 1 equemene
118 1 equemene
	# Copy of source for thunking CUBLAS approach
119 1 equemene
	cp $(CUDASRC)/$(THUNKING) $(CUDASRC)/$(THUNKING:.c=.h) \
120 1 equemene
		$(CUDASRC)/$(CUDASRCINC) .
121 1 equemene
	# Patch Thunking prototypes to compile on Debian Lenny
122 7 equemene
	$(CC) -DCUBLAS_GFORTRAN -I$(CUDAINC) $(CFLAGS) -c $(THUNKING)
123 1 equemene
124 7 equemene
	$(CC) -DCUBLAS_GFORTRAN \
125 250 equemene
		-I$(CUDAINC) -L$(CUDALIB) $(CFLAGS) -DFP32 -DTHUNKING \
126 1 equemene
		$(LDFLAGS) $(DIRECTIVES) $(SOURCE) \
127 1 equemene
		$(THUNKING:.c=.o) -lcublas -o $(SOURCE:.c=)_SP_$@
128 1 equemene
129 7 equemene
	$(CC) -DCUBLAS_GFORTRAN \
130 250 equemene
		-I$(CUDAINC) -L$(CUDALIB) $(CFLAGS) -DFP64 -DTHUNKING \
131 1 equemene
		$(LDFLAGS) $(DIRECTIVES) $(SOURCE) \
132 1 equemene
		$(THUNKING:.c=.o) -lcublas -o $(SOURCE:.c=)_DP_$@
133 1 equemene
134 1 equemene
clean: $(SOURCE)
135 1 equemene
	find . -name "$(SOURCE:.c=)_*" -exec rm {} \;
136 1 equemene
	find . -name "$(THUNKING:.c=)*" -exec rm {} \;
137 1 equemene
	find . -name "*~" -exec rm {} \;
138 1 equemene
	find . -name "$(CUDASRCINC)" -exec rm {} \;
139 1 equemene
140 1 equemene
check: $(EXECUTABLE)
141 1 equemene
142 1 equemene
	$(SOURCE:.c=)_SP_$(EXECUTABLE) 2 1