diff --git a/Makefile b/Makefile index 3cf988cfb57c553dc87e9c6339ac9f8ce3e37f2a..6b2f69069c9be44a06bad6f72dc89f9ee80d4d4f 100644 --- a/Makefile +++ b/Makefile @@ -1,16 +1,15 @@ CC=mpicc CXX=mpicxx + + FLAGS=-Wall -Wextra -Werror -fPIC -fno-rtti -TEST_FLAGS=-Wall -Wextra -fPIC #-Werror +TEST_FLAGS=-Wall -Wextra LDFLAGS=-shared INCLUDE=-I ./include PLUGIN_INCLUDE=$(INCLUDE) -I $(shell $(CC) -print-file-name=plugin)/include -PLUGIN_FLAGS=-fplugin=$(LIBD)/libplugin.so - - # Options dependant flags OPTI_FLAGS=-O2 DEBUG_FLAGS=-g -Og @@ -22,6 +21,8 @@ FLAGS+=$(DEBUG_FLAGS) #GDB_GCC=-wrapper gdb,--args +PLUGIN_NAME=mpicoll_check + # Directories SRCD=src OBJD=obj @@ -34,7 +35,10 @@ DOTD=dot # Files SRCS=$(notdir $(wildcard $(SRCD)/*.cpp)) OBJS=$(addprefix $(OBJD)/, $(SRCS:cpp=o)) +TARGET=$(LIBD)/$(PLUGIN_NAME).so + +PLUGIN_FLAGS=-fplugin=$(TARGET) #-fplugin-arg-$(PLUGIN_NAME)-dumpgraph -fplugin-arg-$(PLUGIN_NAME)-showinfo .PHONY: all @@ -47,7 +51,7 @@ all: plugin: mkdir -p $(OBJD) mkdir -p $(LIBD) - $(MAKE) $(LIBD)/libplugin.so + $(MAKE) $(TARGET) .PHONY: test test: @@ -70,7 +74,8 @@ test: .PHONY: dots dots: touch $(DOTD)/lock.dot - $(MAKE) $(shell find $(DOTD) -name "*.dot" | sed 's/\.dot/\.svg/') + $(MAKE) $(shell find $(DOTD) -name "*.dot" | sed 's/\.dot/\.svg/') \ + $(DOTD)/lock.svg $(TESTD)/%: $(TESTSRCD)/%.c $(CC) $(GDB_GCC) $(TEST_FLAGS) $(PLUGIN_FLAGS) $^ -o $@ || echo "(exit 1)" @@ -78,7 +83,7 @@ $(TESTD)/%: $(TESTSRCD)/%.c $(OBJD)/%.o: $(SRCD)/%.cpp $(CXX) $(FLAGS) $(PLUGIN_INCLUDE) -c $^ -o $@ -$(LIBD)/libplugin.so: $(OBJS) +$(TARGET): $(OBJS) $(CXX) $(FLAGS) $(LDFLAGS) $^ -o $@ # removing test scince plugin was rebuild rm -rf $(TESTD) diff --git a/include/mpi_collective.hpp b/include/mpi_collective.hpp index 8df09a722926a00988b2cfb49158c9e5607f7e87..5153901291fa553b353bb865d6555af4a7fea02d 100644 --- a/include/mpi_collective.hpp +++ b/include/mpi_collective.hpp @@ -160,4 +160,6 @@ void verify_mpicoll_list(void *event_data, void *data); extern vec<tree> *fun_vec; //function vector in pragma. extern vec<location_t> *loc_vec; //function of the location of the token +extern bool dumpgraph; + #endif diff --git a/src/mpi_collective_pass.cpp b/src/mpi_collective_pass.cpp index dcb23d204bed3eef7b0bdabdd14504d1e8e3f22d..a851f23a043ff0e6089c8c681a25acde9c10bd48 100644 --- a/src/mpi_collective_pass.cpp +++ b/src/mpi_collective_pass.cpp @@ -85,10 +85,14 @@ unsigned int pass_mpi_collective::execute(function *fun) calc_dom_data(); label_collec(fun); - label_dom(fun); - label_post_dom(fun); - label_dom_front(fun); - label_post_dom_front(fun); + + if(dumpgraph) + { + label_dom(fun); + label_post_dom(fun); + label_dom_front(fun); + label_post_dom_front(fun); + } mark_edge(fun); rank_collective(fun); @@ -101,8 +105,11 @@ unsigned int pass_mpi_collective::execute(function *fun) //bitmap_head pdf = get_frontier_from_pds(fun, &pdbitmap); //debug_bitmap(&pdf); - cfgviz_dump(fun, "_split"); - + if(dumpgraph) + { + cfgviz_dump(fun, "_split"); + } + raise_warning_mpi_rank(fun); raise_warning_mpi_order(fun); diff --git a/src/plugin.cpp b/src/mpi_collective_plugin.cpp similarity index 87% rename from src/plugin.cpp rename to src/mpi_collective_plugin.cpp index 0a7cf05b0cce73ad1c40cc4922e30dc2e45c4832..96d61128956ea66da22cc7d5ea9c020ea17f254d 100644 --- a/src/plugin.cpp +++ b/src/mpi_collective_plugin.cpp @@ -36,15 +36,29 @@ void print_plugin_infos(struct plugin_name_args *plugin_info, vec<tree> *fun_vec; vec<location_t> *loc_vec; +bool dumpgraph; +bool showinfo; + + /* Main entry point for plugin */ int plugin_init(struct plugin_name_args *plugin_info, struct plugin_gcc_version *version) { - bool debug; - debug = false; + dumpgraph = false; + showinfo = false; - if (debug) + for(int i = 0; i < plugin_info->argc ; ++i) + { + if(strcmp(plugin_info->argv[i].key, "dumpgraph") == 0){ + dumpgraph = true; + } + if(strcmp(plugin_info->argv[i].key, "showinfo") == 0){ + showinfo = true; + } + } + + if (showinfo) { print_plugin_infos(plugin_info, version); }