From 3cda1ce50aa4a5243461ddb2cb0b474a4b3d4f5b Mon Sep 17 00:00:00 2001 From: Martin Kroeker Date: Tue, 13 Feb 2018 22:44:45 +0100 Subject: [PATCH 1/2] Revert insiduous suppression of the -fopenmp flag in the LAPACK subtree This was added in #1046 citing a problem with mingw, but in effect it quietly reduces thread safety on all non-Windows platforms (while -fopenmp is already disabled for Windows builds through the toplevel Makefile.system). Removing the filter fixes #1425 --- lapack-netlib/SRC/Makefile | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/lapack-netlib/SRC/Makefile b/lapack-netlib/SRC/Makefile index 9cc2ea51b..531cb51fc 100644 --- a/lapack-netlib/SRC/Makefile +++ b/lapack-netlib/SRC/Makefile @@ -533,7 +533,9 @@ ZLASRC = $(filter-out $(ZLAPACKOBJS),$(ZLASRC_O)) DSLASRC = $(filter-out $(SLAPACKOBJS),$(DSLASRC_O)) ZCLASRC = $(filter-out $(CLAPACKOBJS),$(ZCLASRC_O)) -OPTS1 = $(filter-out -fopenmp, $(OPTS)) +#from commit 1046, supposedly related to mingw but breaks thread safety +#in insiduous ways on all platforms when used in place of OPTS below +#OPTS1 = $(filter-out -fopenmp, $(OPTS)) #end filter out @@ -597,10 +599,10 @@ clean: rm -f *.o DEPRECATED/*.o .f.o: - $(FORTRAN) $(OPTS1) -c -o $@ $< + $(FORTRAN) $(OPTS) -c -o $@ $< .F.o: - $(FORTRAN) $(OPTS1) -c $< -o $@ + $(FORTRAN) $(OPTS) -c $< -o $@ slaruv.o: slaruv.f ; $(FORTRAN) $(NOOPT) -c -o $@ $< dlaruv.o: dlaruv.f ; $(FORTRAN) $(NOOPT) -c -o $@ $< From eaab622f0393590e5ad12298b9fd8739553c591f Mon Sep 17 00:00:00 2001 From: Martin Kroeker Date: Wed, 14 Feb 2018 22:58:14 +0100 Subject: [PATCH 2/2] Make "OMP task depend" sections conditional on OpenMP4, not just OpenMP To allow compiling with gcc versions older than 4.9 --- lapack-netlib/SRC/chetrd_hb2st.F | 2 +- lapack-netlib/SRC/dsytrd_sb2st.F | 2 +- lapack-netlib/SRC/ssytrd_sb2st.F | 2 +- lapack-netlib/SRC/zhetrd_hb2st.F | 3 ++- 4 files changed, 5 insertions(+), 4 deletions(-) diff --git a/lapack-netlib/SRC/chetrd_hb2st.F b/lapack-netlib/SRC/chetrd_hb2st.F index b96e5db95..6645121c1 100644 --- a/lapack-netlib/SRC/chetrd_hb2st.F +++ b/lapack-netlib/SRC/chetrd_hb2st.F @@ -512,7 +512,7 @@ C END IF * * Call the kernel * -#if defined(_OPENMP) +#if defined(_OPENMP) && _OPENMP >= 201307L IF( TTYPE.NE.1 ) THEN !$OMP TASK DEPEND(in:WORK(MYID+SHIFT-1)) !$OMP$ DEPEND(in:WORK(MYID-1)) diff --git a/lapack-netlib/SRC/dsytrd_sb2st.F b/lapack-netlib/SRC/dsytrd_sb2st.F index 1e860004e..d1ccc1a89 100644 --- a/lapack-netlib/SRC/dsytrd_sb2st.F +++ b/lapack-netlib/SRC/dsytrd_sb2st.F @@ -481,7 +481,7 @@ * * Call the kernel * -#if defined(_OPENMP) +#if defined(_OPENMP) && _OPENMP >= 201307L IF( TTYPE.NE.1 ) THEN !$OMP TASK DEPEND(in:WORK(MYID+SHIFT-1)) !$OMP$ DEPEND(in:WORK(MYID-1)) diff --git a/lapack-netlib/SRC/ssytrd_sb2st.F b/lapack-netlib/SRC/ssytrd_sb2st.F index 891ec9b53..bd645327e 100644 --- a/lapack-netlib/SRC/ssytrd_sb2st.F +++ b/lapack-netlib/SRC/ssytrd_sb2st.F @@ -481,7 +481,7 @@ * * Call the kernel * -#if defined(_OPENMP) +#if defined(_OPENMP) && _OPENMP >= 201307 IF( TTYPE.NE.1 ) THEN !$OMP TASK DEPEND(in:WORK(MYID+SHIFT-1)) !$OMP$ DEPEND(in:WORK(MYID-1)) diff --git a/lapack-netlib/SRC/zhetrd_hb2st.F b/lapack-netlib/SRC/zhetrd_hb2st.F index 07390623a..7b623481b 100644 --- a/lapack-netlib/SRC/zhetrd_hb2st.F +++ b/lapack-netlib/SRC/zhetrd_hb2st.F @@ -512,7 +512,8 @@ C END IF * * Call the kernel * -#if defined(_OPENMP) +#if defined(_OPENMP) && _OPENMP >= 201307L + IF( TTYPE.NE.1 ) THEN !$OMP TASK DEPEND(in:WORK(MYID+SHIFT-1)) !$OMP$ DEPEND(in:WORK(MYID-1))