1. # Project: Paralel Reinforcement Evolutionary Artificial Neural Networks
  2. # --------------- VARIABLES ---------------------
  3. CXX_BASE = g++ -fpermissive -L/opt/cuda-toolkit/lib64
  4. SHELL = /bin/sh
  5. MODULES = common optimization neural genetic game tasks loop loopTest
  6. LIB_MODULES = $(MODULES) template
  7. SRC_DIR = $(addprefix src/,$(MODULES))
  8. BUILD_DIR = $(addprefix build/,$(MODULES)) build/test/
  9. OUTPUT_DIR = $(CURDIR)/output/
  10. SRC = $(foreach sdir,$(SRC_DIR),$(wildcard $(sdir)/*.cpp))
  11. SSE2_OBJ = build/optimization/sse2_code.o
  12. CUDA_OBJ = build/optimization/cuda_code.o
  13. FULL_OBJ = $(SSE2_OBJ) $(CUDA_OBJ)
  14. OBJ = $(patsubst src/%.cpp,build/%.o,$(SRC))
  15. #INCLUDES = $(addprefix -I , $(addprefix src/,$(LIB_MODULES)))
  16. INCLUDES = -I src/
  17. PROGRAMS = $(wildcard src/test/*.cpp)
  18. EXE = $(foreach main, $(PROGRAMS), $(patsubst src/test/%.cpp,bin/%.exe,$(main)))
  19. LOGS = $(foreach main, $(PROGRAMS), $(patsubst src/test/%.cpp,output/log/%.log,$(main)))
  20. CXX = $(CXX_BASE) -ggdb $(INCLUDES) $(FACT_FLAGS)
  21. CXX_LINK = $(CXX_BASE)
  22. NVCC = /usr/local/cuda/bin/nvcc $(INCLUDES) $(FACT_FLAGS)
  23. NVCC_LINK = $(NVCC) -L/opt/cuda-toolkit/lib64 -lcudart
  24. NVCC_COMPILE = $(NVCC) -g -G -c -arch sm_11
  25. NASM = nasm -f elf
  26. ifeq (cpp, $(MAKECMDGOALS))
  27. CXX_BASE = g++
  28. NVCC_LINK = $(CXX_LINK)
  29. FACT_FLAGS = -DCPP_IMPL
  30. endif
  31. ifeq (sse2, $(MAKECMDGOALS))
  32. CXX_BASE = g++
  33. NVCC_LINK = $(CXX_LINK)
  34. FACT_OBJ = $(SSE2_OBJ)
  35. FACT_FLAGS += -DCPP_IMPL -DSSE2_IMPL
  36. endif
  37. ifeq (cuda, $(MAKECMDGOALS))
  38. CXX_BASE = g++
  39. FACT_OBJ = $(CUDA_OBJ)
  40. FACT_FLAGS += -DCPP_IMPL -DCUDA_IMPL
  41. endif
  42. ifeq (cuda_emu, $(MAKECMDGOALS))
  43. CXX_BASE = g++-4.3
  44. NVCC_COMPILE += --device-emulation
  45. FACT_OBJ = $(CUDA_OBJ)
  46. FACT_FLAGS += -DCPP_IMPL -DCUDA_IMPL
  47. endif
  48. ifeq (all, $(MAKECMDGOALS))
  49. CXX_BASE = g++
  50. FACT_OBJ = $(FULL_OBJ)
  51. FACT_FLAGS += -DCPP_IMPL -DSSE2_IMPL -DCUDA_IMPL
  52. endif
  53. ifeq (all_emu, $(MAKECMDGOALS))
  54. CXX_BASE = g++-4.3
  55. NVCC_COMPILE += --device-emulation
  56. FACT_OBJ = $(FULL_OBJ)
  57. FACT_FLAGS += -DCPP_IMPL -DSSE2_IMPL -DCUDA_IMPL
  58. endif
  59. OBJ += $(FACT_OBJ)
  60. .PHONY: all clean checkdirs cpp sse2 cuda cuda_emu all_emu
  61. .SECONDARY:
  62. cuda_emu all_emu all cpp sse2 cuda: checkdirs $(EXE) $(FACT_OBJ)
  63. # ./bin/testMemoryLosses.exe
  64. # ./bin/testBuffers.exe $(CURDIR)/
  65. # ./bin/testConnections.exe
  66. # ./bin/testLayers.exe $(CURDIR)/
  67. # ./bin/testPlot.exe $(OUTPUT_DIR)
  68. ./bin/chronoBuffers.exe $(OUTPUT_DIR)
  69. ./bin/chronoConnections.exe $(OUTPUT_DIR)
  70. ./bin/chronoFunctions.exe $(OUTPUT_DIR)
  71. # ./bin/chronoIndividual.exe $(OUTPUT_DIR)
  72. # ./bin/chronoPopulation.exe $(OUTPUT_DIR)
  73. # ./bin/learnBufferType.exe $(OUTPUT_DIR)
  74. # ./bin/learnFunctionTypes.exe $(OUTPUT_DIR)
  75. # ./bin/learnMutation.exe $(OUTPUT_DIR)
  76. # ./bin/learnReset.exe $(OUTPUT_DIR)
  77. # ./bin/learnCrossover.exe $(OUTPUT_DIR)
  78. # ./bin/learnTasks.exe $(OUTPUT_DIR)
  79. # ./bin/chronoConnectionsFiles.exe
  80. # ./bin/chronoBinaryTasks.exe
  81. # ./bin/chronoReversi.exe
  82. # ./bin/plotReversiSelection.exe
  83. # ./bin/plotBinaryTasks.exe
  84. # ./bin/plotCombBinaryTasks.exe
  85. # ./bin/plotTimeBinaryTasks.exe
  86. # ./bin/testMemoryLosses.exe > ./output/log/testMemoryLosses.log
  87. # ./bin/testBuffers.exe > ./output/log/testBuffers.log
  88. # ./bin/testConnections.exe > ./output/log/testConnections.log
  89. # ./bin/testLayers.exe > ./output/log/testLayers.log
  90. # ./bin/chronoBuffers.exe > ./output/log/chronoBuffers.log
  91. # ./bin/chronoConnections.exe > ./output/log/chronoConnections.log
  92. # ./bin/chronoIndividual.exe > ./output/log/chronoIndividual.log
  93. # ./bin/chronoBinaryTasks.exe > ./output/log/chronoBinaryTasks.log
  94. # ./bin/learnTasks.exe > ./output/log/learnTasks.log
  95. #all: $(LOGS)
  96. checkdirs: $(BUILD_DIR)
  97. $(BUILD_DIR):
  98. mkdir -p $@
  99. output/log/%.log: bin/%.exe
  100. ./$< > $@
  101. bin/%.exe: build/test/%.o $(OBJ)
  102. $(NVCC_LINK) $^ -o $@
  103. # ./$@ > $(patsubst bin/%.exe,output/log/%.log,$@)
  104. build/test%.o: src/test%.cpp
  105. $(CXX) -c $< -o $@
  106. build/%.o: src/%.cpp src/%.h
  107. $(CXX) -c $< -o $@
  108. build/optimization/factory.o: src/optimization/factory.cpp src/optimization/factory.h src/optimization/configFactory.h src/template/*.h $(FACT_OBJ)
  109. $(CXX) -c $< -o $@
  110. build/optimization/cuda_code.o : src/optimization/cuda_code.cu src/optimization/cuda_code.h src/common/util.h
  111. $(NVCC_COMPILE) $< -o $@
  112. build/optimization/sse2_code.o : src/optimization/sse2_code.asm src/optimization/sse2_code.h
  113. $(NASM) $< -o $@
  114. # TODO dependencias dinamicas
  115. build/common/loop/joinEnumLoop.o build/common/loop/enumLoop.o build/common/loop/rangeLoop.o : build/common/loop/loop.o
  116. clean:
  117. rm -rf $(BUILD_DIR)
  118. rm bin/*.exe
  119. # Only use these programs directly
  120. # awk cat cmp cp diff echo egrep expr false grep install-info ln ls
  121. # mkdir mv printf pwd rm rmdir sed sleep sort tar test touch tr true