diff --git a/SOURCES/atlas-memleak.patch b/SOURCES/atlas-memleak.patch new file mode 100644 index 0000000..f4e1372 --- /dev/null +++ b/SOURCES/atlas-memleak.patch @@ -0,0 +1,57 @@ +From 5ef079e305fdfe7275e6a241704fb071f7c9345d Mon Sep 17 00:00:00 2001 +From: "R. Clint Whaley" +Date: Sat, 2 Nov 2013 13:04:29 -0500 +Subject: [PATCH] fixed possible memory leek in threaded QR + +--- + AtlasBase/Students/qr.base | 12 ++++++------ + 1 file changed, 6 insertions(+), 6 deletions(-) + +diff --git a/src/threads/lapack/ATL_tgeqr2.c b/src/threads/lapack/ATL_tgeqr2.c +index 2263042..daf44a9 100644 +--- a/src/threads/lapack/ATL_tgeqr2.c ++++ b/src/threads/lapack/ATL_tgeqr2.c +@@ -10372,7 +10372,7 @@ int ATL_tgexx2(int M, int N, TYPE *A, int LDA, TYPE *TAU, TYPE *WORK, + /* We use a data-owner split, each thread gets 1/p of the data, */ + /* and does all computation related to it. */ + /*----------------------------------------------------------------------------*/ +- TYPE *myA = A, *myOldA = A, *allMem, *workMem; ++ TYPE *myA = A, *myOldA = A, *allMem=NULL, *workMem; + int i, j, k, b0, b, th; + long unsigned int CPU; + size_t mem[ATL_NTHREADS], totmem, workSize; +@@ -10523,9 +10523,8 @@ int ATL_tgexx2(int M, int N, TYPE *A, int LDA, TYPE *TAU, TYPE *WORK, + ATL_goparallel(th, ATL_geqr2Worker, ts, NULL); + + +- #if defined(local_copy) +- free(allMem); /* release copied area. */ +- #endif /* defined(local_copy) */ ++ if (allMem) ++ free(allMem); /* release copied area. */ + free(workMem); /* release work area. */ + return(0); /* Done with dgeqr2. */ + } /* END ATL_t_dgeqr2. */ +diff --git a/src/threads/lapack/ATL_tgeql2.c b/src/threads/lapack/ATL_tgeql2.c +index 2263042..daf44a9 100644 +--- a/src/threads/lapack/ATL_tgeql2.c ++++ b/src/threads/lapack/ATL_tgeql2.c +@@ -11660,7 +11659,7 @@ int ATL_tgexx2(int M, int N, TYPE *A, int LDA, TYPE *TAU, TYPE *WORK, + /* We use a data-owner split, each thread gets 1/p of the data, */ + /* and does all computation related to it. */ + /*----------------------------------------------------------------------------*/ +- TYPE *myA = A, *allMem, *workMem; ++ TYPE *myA = A, *allMem=NULL, *workMem; + int i, j, k, b0, b, th; + long unsigned int CPU; + size_t mem[ATL_NTHREADS], totmem, workSize; +@@ -11823,7 +11822,8 @@ int ATL_tgexx2(int M, int N, TYPE *A, int LDA, TYPE *TAU, TYPE *WORK, + ATL_goparallel(th, ATL_geql2Worker, ts, NULL); + + +- if (myCopy) free(allMem); /* release copied area. */ ++ if (allMem) ++ free(allMem); /* release copied area. */ + free(workMem); /* release work area. */ + return(0); /* Done with dgeql2. */ + } /* END ATL_t_dgeql2 */ diff --git a/SPECS/atlas.spec b/SPECS/atlas.spec index 6a352d4..a97e4fa 100644 --- a/SPECS/atlas.spec +++ b/SPECS/atlas.spec @@ -5,7 +5,7 @@ Version: 3.10.1 %if "%{?enable_native_atlas}" != "0" %define dist .native %endif -Release: 10%{?dist} +Release: 12%{?dist} Summary: Automatically Tuned Linear Algebra Software Group: System Environment/Libraries @@ -44,6 +44,7 @@ Patch6: atlas-affinity.patch Patch7: atlas-aarch64port.patch Patch8: atlas-genparse.patch +Patch9: atlas-memleak.patch # ppc64le patches Patch95: initialize_malloc_memory.invtrsm.wms.oct23.patch Patch96: xlf.command.not.found.patch @@ -329,6 +330,7 @@ ix86 architecture. %patch7 -p1 -b .aarch64 %endif %patch8 -p1 -b .genparse +%patch9 -p1 -b .memleak cp %{SOURCE1} CONFIG/ARCHS/ #cp %{SOURCE2} CONFIG/ARCHS/ cp %{SOURCE3} doc @@ -340,6 +342,14 @@ cp %{SOURCE14} CONFIG/ARCHS/ #cp %{SOURCE8} CONFIG/ARCHS/ #cp %{SOURCE9} CONFIG/ARCHS/ +%ifarch ppc ppc64 +%patch99 -p2 +#%patch98 -p2 +#%patch95 -p2 +#%patch100 -p2 +%patch110 -p1 +%endif + %ifarch ppc64le %patch99 -p2 %patch98 -p2 @@ -367,6 +377,8 @@ for type in %{types}; do --libdir=%{buildroot}%{_libdir}/${libname} \ --with-netlib-lapack-tarfile=%{SOURCE10} +sed -i 's#F77FLAGS =\(.*\)#F77FLAGS=\1 -frecursive#' Make.inc + %if "%{?enable_native_atlas}" == "0" %ifarch x86_64 if [ "$type" = "base" ]; then @@ -374,18 +386,18 @@ for type in %{types}; do # sed -i 's#ARCH =.*#ARCH = HAMMER64SSE3#' Make.inc sed -i 's#ARCH =.*#ARCH = P4E64SSE3#' Make.inc # sed -i 's#-DATL_SSE3##' Make.inc - sed -i 's#-DATL_AVX##' Make.inc -# sed -i 's#-msse3#-msse2#' Make.inc - sed -i 's#-mavx#-msse3#' Make.inc - echo 'base makefile edited' -# sed -i 's#PMAKE = $(MAKE) .*#PMAKE = $(MAKE) -j 1#' Make.inc + sed -i 's#-DATL_AVX\b##' Make.inc +# sed -i 's#-msse3#-msse2#' Make.inc + sed -i 's#-mavx\b#-msse3#' Make.inc + echo 'base makefile edited' +# sed -i 's#PMAKE = $(MAKE) .*#PMAKE = $(MAKE) -j 1#' Make.inc elif [ "$type" = "sse3" ]; then # sed -i 's#ARCH =.*#ARCH = Corei264AVX#' Make.inc # sed -i 's#PMAKE = $(MAKE) .*#PMAKE = $(MAKE) -j 1#' Make.inc - sed -i 's#-DATL_AVX##' Make.inc + sed -i 's#-DATL_AVX\b##' Make.inc sed -i 's#-DATL_SSE2##' Make.inc - sed -i 's#-mavx#-msse2#' Make.inc - sed -i 's#-msse3#-msse2#' Make.inc + sed -i 's#-mavx\b#-msse2#' Make.inc + sed -i 's#-msse3#-msse2#' Make.inc echo 'sse makefile edited' %define pr_sse3 %(echo $((%{__isa_bits}+4))) fi @@ -437,16 +449,16 @@ for type in %{types}; do sed -i 's#ARCH =.*#ARCH = POWER332#' Make.inc sed -i 's#-DATL_ARCH_POWER7#-DATL_ARCH_POWER3#g' Make.inc sed -i 's#power7#power3#g' Make.inc - sed -i 's#-DATL_VSX##g' Make.inc - sed -i 's#-mvsx##g' Make.inc + sed -i 's#-DATL_VSX\b##g' Make.inc + sed -i 's#-mvsx\b##g' Make.inc sed -i 's#-DATL_AltiVec##g' Make.inc sed -i 's#-m64#-m32#g' Make.inc %endif %ifarch ppc64le sed -i 's#-mvsx##g' Make.inc - sed -i 's#-DATL_VSX##g' Make.inc - sed -i 's#-DATL_AltiVec##g' Make.inc + sed -i 's#-DATL_VSX\b##g' Make.inc + sed -i 's#-DATL_AltiVec\b##g' Make.inc sed -i 's#-maltivec##g' Make.inc sed -i 's#ARCH =.*#ARCH = POWER464#' Make.inc %endif @@ -785,6 +797,19 @@ fi %endif %changelog +* Wed Mar 15 2017 Jakub Martisko - 3.10.1-12 +- cleanup: merge the application of ppc patches from previous commit + into single block +- Related: rhbz#1350536 + +* Mon Feb 27 2017 Jakub Martisko - 3.10.1-11 +- apply patches 99 and 110 to all ppc variants +- build lapack with -frecursive flag (#1176026) +- fix possible memory leak (#1350536) +- fix wrong sed substitutions (#1402627) +- Resolves: rhbz#1350536 +- Related: rhbz#1176026 + * Thu Oct 23 2014 Jaromir Capik - 3.10.1-10 - patching for Power8 to pass performance tunings and tests on P8 builders - re-enabling tests on ppc64le