From f61a26e959d0e7df88e6da672fd973b020618507 Mon Sep 17 00:00:00 2001 From: Avril Date: Mon, 23 Nov 2020 12:32:37 +0000 Subject: [PATCH] added PGO target --- Makefile | 32 ++++++++++++++++++-------------- profile/gen | 4 ++-- 2 files changed, 20 insertions(+), 16 deletions(-) diff --git a/Makefile b/Makefile index 3b93fe7..b8fdd62 100644 --- a/Makefile +++ b/Makefile @@ -19,7 +19,7 @@ LDFLAGS+= $(FEAT_LDFLAGS) # PGO specific vars -PROF_ITERATIONS=1000 +PROF_ITERATIONS=10 PROF_LARGE_BOUND= $$(( 1024 * 1024 * 10 )) PROF_SMALL_BOUND= $$(( 1024 * 10 )) PROF_LOCATION?=/tmp/fcmp-pgo @@ -59,26 +59,30 @@ $(PROJECT)-debug: LDFLAGS := $(DEBUG_LDFLAGS) $(LDFLAGS) $(PROJECT)-debug: $(OBJ) $(CC) $^ $(CFLAGS) -o $@ $(LDFLAGS) +pgo-generate: CFLAGS := $(RELEASE_CFLAGS) $(CFLAGS) +pgo-generate: LDFLAGS := $(RELEASE_LDFLAGS) $(LDFLAGS) pgo-generate: $(PGO_OBJ) - $(CC) -c $< $(CFLAGS) $(PROF_FLAGS) -o $@ $(LDFLAGS) $(PROF_FLAGS) + $(CC) $^ $(CFLAGS) $(PROF_FLAGS) -o $@ $(LDFLAGS) $(PROF_FLAGS) pgo-reset: find ./prof -name \*.gcda -exec rm {} + -pgo-profile: | pgo-reset pgo-generate - @mkdir -p $(PROF_LOCATION)/{large,small} +pgo-profile: pgo-reset pgo-generate #./profile/gen $(PROF_LARGE_BOUND) "$(PROF_LOCATION)/large" #./profile/gen $(PROF_SMALL_BOUND) "$(PROF_LOCATION)/small" for i in {1..$(PROF_ITERATIONS)}; do \ - ./profile/gen $(PROF_LARGE_BOUND) "$(PROF_LOCATION)/large"; \ - ./profile/gen $(PROF_SMALL_BOUND) "$(PROF_LOCATION)/small"; \ - ./pgo-generate $(PROF_LOCATION)/large/matching > $(PROF_LOCATION)/stdout; \ - ./pgo-generate $(PROF_LOCATION)/large/unmatching > $(PROF_LOCATION)/stdout; \ - ./pgo-generate $(PROF_LOCATION)/small/matching > $(PROF_LOCATION)/stdout; \ - ./pgo-generate $(PROF_LOCATION)/small/unmatching > $(PROF_LOCATION)/stdout; \ - #TODO: More combinations - rm -rf $(PROF_LOCATION)/{large,small} \ + rm -rf $(PROF_LOCATION); \ + mkdir -p $(PROF_LOCATION)/{large,small}; \ + printf "Iteration $$i of $(PROF_ITERATIONS)\r"; \ + ./profile/gen $(PROF_LARGE_BOUND) "$(PROF_LOCATION)/large" >> /dev/null; \ + ./profile/gen $(PROF_SMALL_BOUND) "$(PROF_LOCATION)/small" >> /dev/null; \ + ./pgo-generate $(PROF_LOCATION)/large/matching/* > $(PROF_LOCATION)/stdout; \ + ./pgo-generate $(PROF_LOCATION)/large/unmatching/* > $(PROF_LOCATION)/stdout; \ + ./pgo-generate $(PROF_LOCATION)/small/matching/* > $(PROF_LOCATION)/stdout; \ + ./pgo-generate $(PROF_LOCATION)/small/unmatching/* > $(PROF_LOCATION)/stdout; \ + rm -rf $(PROF_LOCATION)/{large,small}; \ done + @echo "" rm -rf $(PROF_LOCATION) rm pgo-generate @@ -86,7 +90,7 @@ pgo-use: CFLAGS := $(RELEASE_CFLAGS) $(CFLAGS) pgo-use: LDFLAGS := $(RELEASE_LDFLAGS) $(LDFLAGS) pgo-use: PROF_FLAGS = -fprofile-use pgo-use: $(PGO_OBJ) - $(CC) -c $< $(CFLAGS) $(PROF_FLAGS) -o $@ $(LDFLAGS) $(PROF_FLAGS) + $(CC) $^ $(CFLAGS) $(PROF_FLAGS) -o $@ $(LDFLAGS) $(PROF_FLAGS) $(PROJECT)-pgo: CFLAGS := $(RELEASE_CFLAGS) $(CFLAGS) $(PROJECT)-pgo: LDFLAGS := $(RELEASE_LDFLAGS) $(LDFLAGS) @@ -98,4 +102,4 @@ $(PROJECT)-pgo: pgo-profile clean: rm -rf {obj,prof} - rm -f $(PROJECT)-{release,debug} + rm -f $(PROJECT)-{release,debug,pgo} diff --git a/profile/gen b/profile/gen index e6563d8..2185fdc 100755 --- a/profile/gen +++ b/profile/gen @@ -8,7 +8,7 @@ BREAK_AT=50 cd $2 || exit 1 -echo ">>> Generating ${ITERATIONS} matching files" +echo ">>> Generating ${ITERATIONS} matching files at $2/matching" mkdir matching dd if=/dev/urandom of=./matching/0 bs=$bound count=1 >> /dev/null 2>&1 || exit 1 pushd matching >>/dev/null @@ -17,7 +17,7 @@ pushd matching >>/dev/null done popd >>/dev/null -echo ">>> Generatig ${ITERATIONS} with unmatching file" +echo ">>> Generatig ${ITERATIONS} with unmatching files at $2/unmatching" mkdir unmatching dd if=/dev/urandom of=./unmatching/0 bs=$bound count=1 >> /dev/null 2>&1 || exit 1 pushd unmatching >> /dev/null