From a89f6ed47e139b33f19ffc500d1cebe0f100d43a Mon Sep 17 00:00:00 2001 From: Avril Date: Mon, 30 Nov 2020 13:02:51 +0000 Subject: [PATCH] added pgo target --- Makefile | 62 ++++++++++++++++++++++++++++++++++++-- profiling/arm-fullrun.png | Bin 0 -> 5205 bytes 2 files changed, 59 insertions(+), 3 deletions(-) create mode 100644 profiling/arm-fullrun.png diff --git a/Makefile b/Makefile index 900aa11..dd44e21 100644 --- a/Makefile +++ b/Makefile @@ -39,6 +39,16 @@ OBJ_C = $(addprefix obj/c/,$(SRC_C:.c=.o)) OBJ_CXX = $(addprefix obj/cxx/,$(SRC_CXX:.cpp=.o)) OBJ = $(OBJ_C) $(OBJ_CXX) +PGO_OBJ_C = $(addprefix obj/pgo/c/,$(SRC_C:.c=.o)) +PGO_OBJ_CXX = $(addprefix obj/pgo/cxx/,$(SRC_CXX:.cpp=.o)) +PGO_OBJ = $(PGO_OBJ_C) $(PGO_OBJ_CXX) + +PGO_ITERATIONS=5 +PGO_SET_LOC?=/tmp/$(PROJECT)-pgo + +PGO_FLAGS = -fprofile-generate +PGO_LDFLAGS= + # Phonies .PHONY: release @@ -47,14 +57,16 @@ release: | dirs $(PROJECT)-release .PHONY: debug debug: | dirs $(PROJECT)-debug +.PHONY: pgo +pgo: | dirs $(PROJECT)-pgo + .PHONY: test test: test-all # Targets dirs: - @mkdir -p obj/c{,xx}/src - @mkdir -p obj/cxx/src/rng + @mkdir -p obj/{pgo/,}c{,xx}/src{,/rng} obj/c/%.o: %.c $(CC) -c $< $(CFLAGS) -o $@ $(LDFLAGS) @@ -62,6 +74,12 @@ obj/c/%.o: %.c obj/cxx/%.o: %.cpp $(CXX) -c $< $(CXXFLAGS) -o $@ $(LDFLAGS) +obj/pgo/c/%.o: %.c + $(CC) -c $< $(CFLAGS) $(PGO_FLAGS) -o $@ $(LDFLAGS) $(PGO_LDFLAGS) + +obj/pgo/cxx/%.o: %.cpp + $(CXX) -c $< $(CXXFLAGS) $(PGO_FLAGS) -o $@ $(LDFLAGS) $(PGO_LDFLAGS) + $(PROJECT)-release: CFLAGS+= $(RELEASE_CFLAGS) $(PROJECT)-release: CXXFLAGS += $(RELEASE_CXXFLAGS) @@ -76,11 +94,49 @@ $(PROJECT)-debug: LDFLAGS += $(DEBUG_LDFLAGS) $(PROJECT)-debug: $(OBJ) $(CXX) $^ $(CXXFLAGS) -o $@ $(LDFLAGS) +pgo-generate: CFLAGS+= $(RELEASE_CFLAGS) +pgo-generate: CXXFLAGS += $(RELEASE_CXXFLAGS) +pgo-generate: LDFLAGS += $(RELEASE_LDFLAGS) +pgo-generate: $(PGO_OBJ) + $(CXX) $^ $(CXXFLAGS) $(PGO_FLAGS) -o $@ $(LDFLAGS) $(PGO_LDFLAGS) + +pgo-reset: + find ./obj/pgo -name \*.gcda -exec rm {} + + +pgo-profile: | pgo-reset pgo-generate + mkdir -p $(PGO_SET_LOC) + for i in {1..$(PGO_ITERATIONS)}; do \ + dd if=/dev/urandom of=$(PGO_SET_LOC)/small bs=1024 count=1 >> /dev/null 2>&1; \ + printf "Iteration $$i / $(PGO_ITERATIONS)\r"; \ + ./pgo-generate -s $(PGO_SET_LOC)/small >>/dev/null; \ + ./pgo-generate -u $(PGO_SET_LOC)/small >>/dev/null; \ + ./pgo-generate -h >> /dev/null; \ + FCNT=1 ./test.sh ./pgo-generate >>/dev/null; \ + FCNT=2 ./test.sh ./pgo-generate >>/dev/null; \ + FCNT=3 ./test.sh ./pgo-generate >>/dev/null; \ + FCNT=4 ./test.sh ./pgo-generate >>/dev/null; \ + done + rm -rf $(PGO_SET_LOC) + rm pgo-generate + +pgo-use: PGO_FLAGS = -fprofile-use +pgo-use: PGO_LDFLAGS = -lgcov -fprofile-use +pgo-use: CFLAGS+= $(RELEASE_CFLAGS) +pgo-use: CXXFLAGS += $(RELEASE_CXXFLAGS) +pgo-use: LDFLAGS += $(RELEASE_LDFLAGS) +pgo-use: $(PGO_OBJ) + $(CXX) $^ $(CXXFLAGS) $(PGO_FLAGS) -o $@ $(LDFLAGS) $(PGO_LDFLAGS) + +$(PROJECT)-pgo: | pgo-profile + find ./obj/pgo -name \*.o -exec rm {} + + $(MAKE) pgo-use + mv pgo-use $@ + clean-rebuild: rm -rf obj clean: clean-rebuild - rm -f $(PROJECT)-{release,debug} + rm -f $(PROJECT)-{release,debug,pgo} test-all: @./test.sh ./$(PROJECT)-* diff --git a/profiling/arm-fullrun.png b/profiling/arm-fullrun.png new file mode 100644 index 0000000000000000000000000000000000000000..53971c954e17678124daf45d7bd22717da614204 GIT binary patch literal 5205 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