diff --git a/Makefile b/Makefile index 9d6812b..54527fd 100644 --- a/Makefile +++ b/Makefile @@ -8,6 +8,7 @@ Q ?= @ #DO NOT EDIT BELOW include $(MAKE_DIR)/config.mk include $(MAKE_DIR)/include_$(TAG).mk +include $(MAKE_DIR)/include_LIKWID.mk INCLUDES += -I./src/includes VPATH = $(SRC_DIR) @@ -30,7 +31,7 @@ asm: $(BUILD_DIR) $(ASM) $(BUILD_DIR)/%.o: %.c @echo "===> COMPILE $@" $(CC) -c $(CPPFLAGS) $(CFLAGS) $< -o $@ - $(Q)$(CC) $(CPPFLAGS) -MT $(@:.d=.o) -MM $< > $(BUILD_DIR)/$*.d + $(Q)$(GCC) $(CPPFLAGS) -MT $(@:.d=.o) -MM $< > $(BUILD_DIR)/$*.d $(BUILD_DIR)/%.s: %.c @echo "===> GENERATE ASM $@" diff --git a/config.mk b/config.mk index b5c5f15..78cc540 100644 --- a/config.mk +++ b/config.mk @@ -1,6 +1,7 @@ # Supported: GCC, CLANG, ICC TAG ?= GCC ENABLE_OPENMP ?= false +ENABLE_LIKWID ?= false #Feature options OPTIONS = -DSIZE=40000000ull diff --git a/include_CLANG.mk b/include_CLANG.mk index 43328ee..30945f6 100644 --- a/include_CLANG.mk +++ b/include_CLANG.mk @@ -1,4 +1,5 @@ -CC = clang +CC = clang +GCC = gcc LINKER = $(CC) ifeq ($(ENABLE_OPENMP),true) diff --git a/include_GCC.mk b/include_GCC.mk index d85fe65..4ce8210 100644 --- a/include_GCC.mk +++ b/include_GCC.mk @@ -1,4 +1,5 @@ -CC = gcc +CC = gcc +GCC = gcc LINKER = $(CC) ifeq ($(ENABLE_OPENMP),true) diff --git a/include_ICC.mk b/include_ICC.mk index dd1cb99..210e0c3 100644 --- a/include_ICC.mk +++ b/include_ICC.mk @@ -1,4 +1,5 @@ -CC = icc +CC = icc +GCC = gcc LINKER = $(CC) ifeq ($(ENABLE_OPENMP),true) diff --git a/include_LIKWID.mk b/include_LIKWID.mk new file mode 100644 index 0000000..4ca5456 --- /dev/null +++ b/include_LIKWID.mk @@ -0,0 +1,10 @@ +LIKWID_INC ?= -I/usr/local/include +LIKWID_DEFINES ?= -DLIKWID_PERFMON +LIKWID_LIB ?= -L/usr/local/lib + +ifeq ($(strip $(ENABLE_LIKWID)),true) +INCLUDES += ${LIKWID_INC} +DEFINES += ${LIKWID_DEFINES} +LIBS += -llikwid +LFLAGS += ${LIKWID_LIB} +endif diff --git a/src/affinity.c b/src/affinity.c index cc361c2..787705c 100644 --- a/src/affinity.c +++ b/src/affinity.c @@ -53,7 +53,6 @@ getProcessorID(cpu_set_t* cpu_set) return processorId; } - int affinity_getProcessorId() { @@ -85,5 +84,5 @@ affinity_pinProcess(int processorId) CPU_SET(processorId, &cpuset); sched_setaffinity(0, sizeof(cpu_set_t), &cpuset); } -#endif /*__linux__*/ #endif /*_OPENMP*/ +#endif /*__linux__*/ diff --git a/src/copy.c b/src/copy.c index 7e31a0c..360a388 100644 --- a/src/copy.c +++ b/src/copy.c @@ -26,6 +26,7 @@ */ #include +#include double copy( double * restrict a, @@ -36,9 +37,14 @@ double copy( double S, E; S = getTimeStamp(); -#pragma omp parallel for - for (int i=0; i +#include double daxpy( double * restrict a, @@ -37,9 +38,14 @@ double daxpy( double S, E; S = getTimeStamp(); -#pragma omp parallel for - for (int i=0; i +#else +#define LIKWID_MARKER_INIT +#define LIKWID_MARKER_THREADINIT +#define LIKWID_MARKER_SWITCH +#define LIKWID_MARKER_REGISTER(regionTag) +#define LIKWID_MARKER_START(regionTag) +#define LIKWID_MARKER_STOP(regionTag) +#define LIKWID_MARKER_CLOSE +#define LIKWID_MARKER_GET(regionTag, nevents, events, time, count) +#endif + +#endif /*LIKWID_MARKERS_H*/ diff --git a/src/init.c b/src/init.c index f2164a8..373466e 100644 --- a/src/init.c +++ b/src/init.c @@ -26,6 +26,7 @@ */ #include +#include double init( double * restrict a, @@ -36,9 +37,14 @@ double init( double S, E; S = getTimeStamp(); -#pragma omp parallel for - for (int i=0; i #include #include +#include #define HLINE "----------------------------------------------------------------------------\n" @@ -89,8 +90,8 @@ int main (int argc, char** argv) double E, S; double avgtime[NUMBENCH], - maxtime[NUMBENCH], - mintime[NUMBENCH]; + maxtime[NUMBENCH], + mintime[NUMBENCH]; double times[NUMBENCH][NTIMES]; @@ -105,6 +106,19 @@ int main (int argc, char** argv) {"SDaxpy: ", 4, 2} }; + LIKWID_MARKER_INIT; +#pragma omp parallel + { + LIKWID_MARKER_REGISTER("INIT"); + LIKWID_MARKER_REGISTER("SUM"); + LIKWID_MARKER_REGISTER("COPY"); + LIKWID_MARKER_REGISTER("UPDATE"); + LIKWID_MARKER_REGISTER("TRIAD"); + LIKWID_MARKER_REGISTER("DAXPY"); + LIKWID_MARKER_REGISTER("STRIAD"); + LIKWID_MARKER_REGISTER("SDAXPY"); + } + a = (double*) allocate( ARRAY_ALIGNMENT, N * bytesPerWord ); b = (double*) allocate( ARRAY_ALIGNMENT, N * bytesPerWord ); c = (double*) allocate( ARRAY_ALIGNMENT, N * bytesPerWord ); @@ -200,6 +214,7 @@ int main (int argc, char** argv) printf(HLINE); check(a, b, c, d, N); + LIKWID_MARKER_CLOSE; return EXIT_SUCCESS; } diff --git a/src/sdaxpy.c b/src/sdaxpy.c index 46f2626..a7c45da 100644 --- a/src/sdaxpy.c +++ b/src/sdaxpy.c @@ -26,6 +26,7 @@ */ #include +#include double sdaxpy( double * restrict a, @@ -37,9 +38,14 @@ double sdaxpy( double S, E; S = getTimeStamp(); -#pragma omp parallel for - for (int i=0; i +#include double striad( double * restrict a, @@ -38,9 +39,14 @@ double striad( double S, E; S = getTimeStamp(); -#pragma omp parallel for - for (int i=0; i +#include double sum( double * restrict a, @@ -36,9 +37,14 @@ double sum( double sum = 0.0; S = getTimeStamp(); -#pragma omp parallel for reduction(+:sum) - for (int i=0; i +#include double triad( double * restrict a, @@ -38,9 +39,14 @@ double triad( double S, E; S = getTimeStamp(); -#pragma omp parallel for - for (int i=0; i +#include double update( double * restrict a, @@ -36,9 +37,14 @@ double update( double S, E; S = getTimeStamp(); -#pragma omp parallel for - for (int i=0; i