From bc717360ecb6e1a15bdff31b616109fc4ea358cc Mon Sep 17 00:00:00 2001 From: Georg Hager Date: Thu, 14 Mar 2019 13:14:42 +0100 Subject: [PATCH 1/7] removed -qopt-report from Intel flags --- include_ICC.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include_ICC.mk b/include_ICC.mk index dd1cb99..5ba42bc 100644 --- a/include_ICC.mk +++ b/include_ICC.mk @@ -5,7 +5,7 @@ ifeq ($(ENABLE_OPENMP),true) OPENMP = -qopenmp endif -CFLAGS = -qopt-report -Ofast -xHost -std=c99 -ffreestanding $(OPENMP) +CFLAGS = -Ofast -xHost -std=c99 -ffreestanding $(OPENMP) LFLAGS = $(OPENMP) DEFINES = -D_GNU_SOURCE INCLUDES = From 4e39aab88a1ad4a49463c213d253182d1c8154ea Mon Sep 17 00:00:00 2001 From: Georg Hager Date: Thu, 14 Mar 2019 13:30:22 +0100 Subject: [PATCH 2/7] Markers for init and copy to investigate deviations --- config.mk | 2 +- include_ICC.mk | 4 ++-- src/copy.c | 14 +++++++++++++- src/init.c | 15 ++++++++++++++- src/main.c | 13 +++++++++++++ 5 files changed, 43 insertions(+), 5 deletions(-) diff --git a/config.mk b/config.mk index b5c5f15..9ca4a89 100644 --- a/config.mk +++ b/config.mk @@ -3,7 +3,7 @@ TAG ?= GCC ENABLE_OPENMP ?= false #Feature options -OPTIONS = -DSIZE=40000000ull +OPTIONS = -DSIZE=100000000ull OPTIONS += -DNTIMES=10 OPTIONS += -DARRAY_ALIGNMENT=64 #OPTIONS += -DVERBOSE_AFFINITY diff --git a/include_ICC.mk b/include_ICC.mk index 5ba42bc..7d70792 100644 --- a/include_ICC.mk +++ b/include_ICC.mk @@ -5,8 +5,8 @@ ifeq ($(ENABLE_OPENMP),true) OPENMP = -qopenmp endif -CFLAGS = -Ofast -xHost -std=c99 -ffreestanding $(OPENMP) -LFLAGS = $(OPENMP) +CFLAGS = -DLIKWID -DLIKWID_PERFMON -Ofast -xHost -std=c99 -ffreestanding $(OPENMP) $(LIKWID_INC) +LFLAGS = $(OPENMP) $(LIKWID_LIB) -llikwid DEFINES = -D_GNU_SOURCE INCLUDES = LIBS = diff --git a/src/copy.c b/src/copy.c index 7e31a0c..04c07d4 100644 --- a/src/copy.c +++ b/src/copy.c @@ -26,6 +26,9 @@ */ #include +#ifdef LIKWID +#include +#endif double copy( double * restrict a, @@ -36,10 +39,19 @@ double copy( double S, E; S = getTimeStamp(); -#pragma omp parallel for +#pragma omp parallel +{ +#ifdef LIKWID + LIKWID_MARKER_START("COPY"); +#endif +#pragma omp for for (int i=0; i +#ifdef LIKWID +#include +#endif double init( double * restrict a, @@ -36,10 +39,20 @@ double init( double S, E; S = getTimeStamp(); -#pragma omp parallel for +#pragma omp parallel +{ +#ifdef LIKWID + LIKWID_MARKER_START("INIT"); +#endif +#pragma omp for +#pragma vector nontemporal for (int i=0; i #include +#ifdef LIKWID +#include +#endif + #define HLINE "----------------------------------------------------------------------------\n" #ifndef MIN @@ -105,6 +109,11 @@ int main (int argc, char** argv) {"SDaxpy: ", 4, 2} }; +#ifdef LIKWID + LIKWID_MARKER_INIT; + LIKWID_MARKER_REGISTER("INIT"); +#endif + a = (double*) allocate( ARRAY_ALIGNMENT, N * bytesPerWord ); b = (double*) allocate( ARRAY_ALIGNMENT, N * bytesPerWord ); c = (double*) allocate( ARRAY_ALIGNMENT, N * bytesPerWord ); @@ -201,6 +210,10 @@ int main (int argc, char** argv) check(a, b, c, d, N); +#ifdef LIKWID + LIKWID_MARKER_CLOSE; +#endif + return EXIT_SUCCESS; } From 3e1fe39dfe17b584e72b39ad86c1148ab95605e6 Mon Sep 17 00:00:00 2001 From: Thomas Roehl Date: Thu, 14 Mar 2019 17:10:10 +0100 Subject: [PATCH 3/7] Register regions for each thread when running with OpenMP --- src/main.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/main.c b/src/main.c index 7a5f212..858e8a2 100644 --- a/src/main.c +++ b/src/main.c @@ -111,7 +111,15 @@ int main (int argc, char** argv) #ifdef LIKWID LIKWID_MARKER_INIT; +#ifdef _OPENMP +#pragma omp parallel +{ +#endif LIKWID_MARKER_REGISTER("INIT"); + LIKWID_MARKER_REGISTER("COPY"); +#ifdef _OPENMP +} +#endif #endif a = (double*) allocate( ARRAY_ALIGNMENT, N * bytesPerWord ); From e6958c8581525a0e0e5a1487859fbdef8368bc5e Mon Sep 17 00:00:00 2001 From: Thomas Roehl Date: Thu, 14 Mar 2019 17:11:28 +0100 Subject: [PATCH 4/7] Add config option for MarkerAPI to config.mk and integrate it in the build system --- Makefile | 1 + config.mk | 1 + include_ICC.mk | 4 ++-- include_LIKWID.mk | 11 +++++++++++ 4 files changed, 15 insertions(+), 2 deletions(-) create mode 100644 include_LIKWID.mk diff --git a/Makefile b/Makefile index 14d3e8f..d687e7e 100644 --- a/Makefile +++ b/Makefile @@ -9,6 +9,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) diff --git a/config.mk b/config.mk index 9ca4a89..19765ea 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=100000000ull diff --git a/include_ICC.mk b/include_ICC.mk index 7d70792..5ba42bc 100644 --- a/include_ICC.mk +++ b/include_ICC.mk @@ -5,8 +5,8 @@ ifeq ($(ENABLE_OPENMP),true) OPENMP = -qopenmp endif -CFLAGS = -DLIKWID -DLIKWID_PERFMON -Ofast -xHost -std=c99 -ffreestanding $(OPENMP) $(LIKWID_INC) -LFLAGS = $(OPENMP) $(LIKWID_LIB) -llikwid +CFLAGS = -Ofast -xHost -std=c99 -ffreestanding $(OPENMP) +LFLAGS = $(OPENMP) DEFINES = -D_GNU_SOURCE INCLUDES = LIBS = diff --git a/include_LIKWID.mk b/include_LIKWID.mk new file mode 100644 index 0000000..f16561b --- /dev/null +++ b/include_LIKWID.mk @@ -0,0 +1,11 @@ +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 += -DLIKWID ${LIKWID_DEFINES} +LIBS += -llikwid +LFLAGS += ${LIKWID_LIB} +endif From 60133e48c1db9cd235f605f520af43cd6232a324 Mon Sep 17 00:00:00 2001 From: Jan Eitzinger Date: Fri, 15 Mar 2019 09:33:48 +0100 Subject: [PATCH 5/7] Introduce minimal likwid header. Add markers to more benchmarks --- config.mk | 2 +- include_LIKWID.mk | 3 +-- src/copy.c | 10 ++-------- src/daxpy.c | 8 +++++++- src/init.c | 8 +------- src/main.c | 10 +--------- src/triad.c | 14 ++++++++++---- src/update.c | 8 +++++++- 8 files changed, 30 insertions(+), 33 deletions(-) diff --git a/config.mk b/config.mk index 19765ea..7cbeca9 100644 --- a/config.mk +++ b/config.mk @@ -1,5 +1,5 @@ # Supported: GCC, CLANG, ICC -TAG ?= GCC +TAG ?= ICC ENABLE_OPENMP ?= false ENABLE_LIKWID ?= false diff --git a/include_LIKWID.mk b/include_LIKWID.mk index f16561b..4ca5456 100644 --- a/include_LIKWID.mk +++ b/include_LIKWID.mk @@ -2,10 +2,9 @@ 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 += -DLIKWID ${LIKWID_DEFINES} +DEFINES += ${LIKWID_DEFINES} LIBS += -llikwid LFLAGS += ${LIKWID_LIB} endif diff --git a/src/copy.c b/src/copy.c index 04c07d4..edf2ecd 100644 --- a/src/copy.c +++ b/src/copy.c @@ -26,9 +26,7 @@ */ #include -#ifdef LIKWID -#include -#endif +#include double copy( double * restrict a, @@ -41,16 +39,12 @@ double copy( S = getTimeStamp(); #pragma omp parallel { -#ifdef LIKWID LIKWID_MARKER_START("COPY"); -#endif -#pragma omp for +#pragma omp for for (int i=0; i +#include double daxpy( double * restrict a, @@ -37,10 +38,15 @@ double daxpy( double S, E; S = getTimeStamp(); -#pragma omp parallel for +#pragma omp parallel +{ + LIKWID_MARKER_START("DAXPY"); +#pragma omp for for (int i=0; i -#ifdef LIKWID -#include -#endif +#include double init( double * restrict a, @@ -41,17 +39,13 @@ double init( S = getTimeStamp(); #pragma omp parallel { -#ifdef LIKWID LIKWID_MARKER_START("INIT"); -#endif #pragma omp for #pragma vector nontemporal for (int i=0; i #include #include - -#ifdef LIKWID -#include -#endif +#include #define HLINE "----------------------------------------------------------------------------\n" @@ -109,7 +106,6 @@ int main (int argc, char** argv) {"SDaxpy: ", 4, 2} }; -#ifdef LIKWID LIKWID_MARKER_INIT; #ifdef _OPENMP #pragma omp parallel @@ -119,7 +115,6 @@ int main (int argc, char** argv) LIKWID_MARKER_REGISTER("COPY"); #ifdef _OPENMP } -#endif #endif a = (double*) allocate( ARRAY_ALIGNMENT, N * bytesPerWord ); @@ -217,10 +212,7 @@ int main (int argc, char** argv) printf(HLINE); check(a, b, c, d, N); - -#ifdef LIKWID LIKWID_MARKER_CLOSE; -#endif return EXIT_SUCCESS; } diff --git a/src/triad.c b/src/triad.c index 04914be..bf9650b 100644 --- a/src/triad.c +++ b/src/triad.c @@ -26,6 +26,7 @@ */ #include +#include double triad( double * restrict a, @@ -38,11 +39,16 @@ double triad( double S, E; S = getTimeStamp(); -#pragma omp parallel for - for (int i=0; i +#include double update( double * restrict a, @@ -36,10 +37,15 @@ double update( double S, E; S = getTimeStamp(); -#pragma omp parallel for +#pragma omp parallel +{ + LIKWID_MARKER_START("UPDATE"); +#pragma omp for for (int i=0; i Date: Fri, 15 Mar 2019 09:34:07 +0100 Subject: [PATCH 6/7] Introduce minimal likwid header. --- src/includes/likwid_markers.h | 44 +++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 src/includes/likwid_markers.h diff --git a/src/includes/likwid_markers.h b/src/includes/likwid_markers.h new file mode 100644 index 0000000..76351d2 --- /dev/null +++ b/src/includes/likwid_markers.h @@ -0,0 +1,44 @@ +/* + * ======================================================================================= + * + * Author: Jan Eitzinger (je), jan.treibig@gmail.com + * Copyright (c) 2019 RRZE, University Erlangen-Nuremberg + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * ======================================================================================= + */ + +#ifndef LIKWID_MARKERS_H +#define LIKWID_MARKERS_H + +#ifdef LIKWID_PERFMON +#include +#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*/ From 717478869c817799281f1a7ac6517957667b0f24 Mon Sep 17 00:00:00 2001 From: Georg Hager Date: Fri, 15 Mar 2019 09:50:06 +0100 Subject: [PATCH 7/7] moved time stamp call out of parallel region, removed NT dirctive --- src/init.c | 1 - src/triad.c | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/init.c b/src/init.c index 5af1151..904ce72 100644 --- a/src/init.c +++ b/src/init.c @@ -41,7 +41,6 @@ double init( { LIKWID_MARKER_START("INIT"); #pragma omp for -#pragma vector nontemporal for (int i=0; i