-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathMakefile
183 lines (161 loc) · 5.91 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
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
# Project: Paralel Reinforcement Evolutionary Artificial Neural Networks
# --------------- VARIABLES ---------------------
# for emulation cuda v2.3
# make 3.81
SHELL = /bin/sh
MODULES = common factory neural genetic game tasks loop loopTest
SRC_DIR = $(addprefix src/,$(MODULES))
BUILD_DIR = bin build $(addprefix build/,$(MODULES)) build/test/ build/sse2 build/cuda
OUTPUT_DIR = $(CURDIR)/output/
LOG_DIR = $(CURDIR)/output/log/
SRC = $(foreach sdir,$(SRC_DIR),$(wildcard $(sdir)/*.cpp))
OBJ = $(patsubst src/%.cpp,build/%.o,$(SRC))
SSE2_SRC = $(foreach sdir,src/sse2,$(wildcard $(sdir)/*.asm))
SSE2_OBJ = $(patsubst src/sse2/%.asm,build/sse2/%.o,$(SSE2_SRC))
CUDA_SRC = $(foreach sdir,src/cuda,$(wildcard $(sdir)/*.cu))
CUDA_OBJ = $(patsubst src/cuda/%.cu,build/cuda/%.o,$(CUDA_SRC))
FULL_OBJ = $(SSE2_OBJ) $(CUDA_OBJ)
#INCLUDES = $(addprefix -I , $(addprefix src/,$(MODULES)))
INCLUDES = -I src/
PROGRAMS = $(wildcard src/test/*.cpp)
EXE = $(foreach main, $(PROGRAMS), $(patsubst src/test/%.cpp,bin/%.exe,$(main)))
LOGS = $(foreach main, $(PROGRAMS), $(patsubst src/test/%.cpp,output/log/%.log,$(main)))
CXX = $(CXX_BASE) -ggdb $(INCLUDES)
CXX_LINK = $(CXX_BASE)
NVCC = /usr/local/cuda/bin/nvcc $(INCLUDES)
NVCC_LINK = $(NVCC) -lcudart
NVCC_COMPILE = $(NVCC) -g -G -c -arch sm_11
NASM = nasm -f elf
ifeq (cpp, $(MAKECMDGOALS))
CXX_BASE = g++
NVCC_LINK = $(CXX_LINK)
FACT_FLAGS = -DCPP_IMPL
endif
ifeq (sse2, $(MAKECMDGOALS))
CXX_BASE = g++
NVCC_LINK = $(CXX_LINK)
FACT_OBJ = $(SSE2_OBJ)
FACT_FLAGS += -DCPP_IMPL -DSSE2_IMPL
endif
ifeq (cuda, $(MAKECMDGOALS))
CXX_BASE = g++
NVCC_LINK += -L/usr/local/cuda/lib
FACT_OBJ = $(CUDA_OBJ)
FACT_FLAGS += -DCPP_IMPL -DCUDA_IMPL
endif
ifeq (cuda_emu, $(MAKECMDGOALS))
CXX_BASE = g++-4.3
NVCC_COMPILE += --device-emulation
NVCC_LINK += -L/usr/local/cuda/lib
FACT_OBJ = $(CUDA_OBJ)
FACT_FLAGS += -DCPP_IMPL -DCUDA_IMPL
endif
ifeq (all, $(MAKECMDGOALS))
CXX_BASE = g++
NVCC_LINK += -L/usr/local/cuda/lib
FACT_OBJ = $(FULL_OBJ)
FACT_FLAGS += -DCPP_IMPL -DSSE2_IMPL -DCUDA_IMPL
endif
ifeq (all_emu, $(MAKECMDGOALS))
CXX_BASE = g++-4.3
NVCC_COMPILE += --device-emulation
NVCC_LINK += -L/usr/local/cuda/lib
FACT_OBJ = $(FULL_OBJ)
FACT_FLAGS += -DCPP_IMPL -DSSE2_IMPL -DCUDA_IMPL
endif
ifeq (cpp_64, $(MAKECMDGOALS))
CXX_BASE = g++ -m32 -fpermissive
NVCC_LINK = $(CXX_LINK)
FACT_FLAGS = -DCPP_IMPL
endif
ifeq (sse2_64, $(MAKECMDGOALS))
CXX_BASE = g++ -m32 -fpermissive
NVCC_LINK = $(CXX_LINK)
FACT_OBJ = $(SSE2_OBJ)
FACT_FLAGS += -DCPP_IMPL -DSSE2_IMPL
endif
ifeq (cuda_64, $(MAKECMDGOALS))
CXX_BASE = g++ -m32 -fpermissive
NVCC += -m32
NVCC_LINK += -L/opt/cuda-toolkit/lib
FACT_OBJ = $(CUDA_OBJ)
FACT_FLAGS += -DCPP_IMPL -DCUDA_IMPL
endif
ifeq (all_64, $(MAKECMDGOALS))
CXX_BASE = g++ -m32 -fpermissive
NVCC += -m32
NVCC_LINK += -L/opt/cuda-toolkit/lib
FACT_OBJ = $(FULL_OBJ)
FACT_FLAGS += -DCPP_IMPL -DSSE2_IMPL -DCUDA_IMPL
endif
OBJ += $(FACT_OBJ)
.PHONY: all clean checkdirs cpp sse2 cuda cuda_emu all_emu cpp_64 sse2_64 cuda_64 all_64
.SECONDARY:
cpp_64 sse2_64 cuda_64 all_64 cuda_emu all_emu all cpp sse2 cuda: checkdirs $(EXE) $(FACT_OBJ)
# cat /proc/cpuinfo > $(OUTPUT_DIR)info/cpu.txt
# lspci -vv > $(OUTPUT_DIR)info/device.txt
# cat /proc/meminfo > $(OUTPUT_DIR)info/mem.txt
# g++ -v 2> $(OUTPUT_DIR)info/g++.txt
# cat /proc/version > $(OUTPUT_DIR)info/OS.txt
# cat /etc/*release > $(OUTPUT_DIR)info/OS2.txt
# cat /etc/*version > $(OUTPUT_DIR)info/OS3.txt
# uname -a > $(OUTPUT_DIR)info/OS4.txt
# ./bin/chronoMutations.exe $(OUTPUT_DIR)
# ./bin/chronoInterface.exe $(OUTPUT_DIR)
# ./bin/chronoActivation.exe $(OUTPUT_DIR)
# ./bin/chronoCrossover.exe $(OUTPUT_DIR)
# ./bin/chronoCalculateAndAdd.exe $(OUTPUT_DIR)
# ./bin/testMemoryLosses.exe
# ./bin/testBuffers.exe $(CURDIR)/
# ./bin/testConnections.exe
# ./bin/testConnections2.exe
# ./bin/testLayers.exe $(CURDIR)/
# ./bin/testPlot.exe $(OUTPUT_DIR)
# ./bin/chronoGenIndividual.exe $(OUTPUT_DIR)
# ./bin/chronoGenPopulation.exe $(OUTPUT_DIR)
# ./bin/learnFunctionTypes.exe $(OUTPUT_DIR)
# ./bin/learnBufferType.exe $(OUTPUT_DIR)
# ./bin/learnSelection.exe $(OUTPUT_DIR)
# ./bin/learnCrossover.exe $(OUTPUT_DIR)
# ./bin/learnCrossoverAlgorithm.exe $(OUTPUT_DIR)
# ./bin/learnCrossoverLevel.exe $(OUTPUT_DIR)
# ./bin/learnMutation.exe $(OUTPUT_DIR)
# ./bin/learnReset.exe $(OUTPUT_DIR)
# ./bin/learnTasks.exe $(OUTPUT_DIR)
# ./bin/testMemoryLosses.exe > $(LOG_DIR)testMemoryLosses.log
# ./bin/testBuffers.exe > $(LOG_DIR)testBuffers.log
# ./bin/testConnections.exe > $(LOG_DIR)testConnections.log
# ./bin/testLayers.exe > $(LOG_DIR)testLayers.log
# ./bin/chronoBuffers.exe > $(LOG_DIR)chronoBuffers.log
# ./bin/chronoConnections.exe > $(LOG_DIR)chronoConnections.log
# ./bin/chronoIndividual.exe > $(LOG_DIR)chronoIndividual.log
# ./bin/chronoBinaryTasks.exe > $(LOG_DIR)chronoBinaryTasks.log
# ./bin/learnTasks.exe > $(LOG_DIR)learnTasks.log
#all: $(LOGS)
checkdirs: $(BUILD_DIR)
$(BUILD_DIR):
mkdir -p $@
output/log/%.log: bin/%.exe
./$< > $@
bin/%.exe: build/test/%.o $(OBJ)
$(NVCC_LINK) $^ -o $@
# ./$@ > $(patsubst bin/%.exe,output/log/%.log,$@)
build/test/%.o: src/test/%.cpp
$(CXX) -c $< -o $@
build/%.o: src/%.cpp src/%.h
$(CXX) -c $< -o $@
build/common/chronometer.o: src/common/chronometer.cpp src/common/chronometer.h
$(CXX) $(FACT_FLAGS) -c $< -o $@
build/factory/factory.o: src/factory/factory.cpp src/factory/*.h src/factory/cpp/*.h src/factory/sse2/*.h src/factory/cuda/*.h $(FACT_OBJ)
$(CXX) $(FACT_FLAGS) -c $< -o $@
build/cuda/%.o : src/cuda/%.cu src/cuda/cuda.h src/common/util.h
$(NVCC_COMPILE) $< -o $@
build/sse2/%.o : src/sse2/%.asm src/sse2/sse2.h
$(NASM) $< -o $@
# TODO dependencias dinamicas
build/common/loop/joinEnumLoop.o build/common/loop/enumLoop.o build/common/loop/rangeLoop.o : build/common/loop/loop.o
clean:
rm -rf $(BUILD_DIR)
# Only use these programs directly
# awk cat cmp cp diff echo egrep expr false grep install-info ln ls
# mkdir mv printf pwd rm rmdir sed sleep sort tar test touch tr true