diff --git a/base/linalg/matmul.jl b/base/linalg/matmul.jl index b1e777142e660..a8d18032112b1 100644 --- a/base/linalg/matmul.jl +++ b/base/linalg/matmul.jl @@ -203,23 +203,18 @@ function copytri!(A::StridedMatrix, uplo::Char, conjugate::Bool=false) A end -if Base.blas_vendor() == :openblas - ## Avoid calling BLAS.gemv! when OpenBLAS is being used until #6941 is fixed. - gemv!{T<:BlasFloat}(y::StridedVector{T}, tA::Char, A::StridedMatrix{T}, x::StridedVector{T}) = generic_matvecmul!(y, tA, A, x) -else - function gemv!{T<:BlasFloat}(y::StridedVector{T}, tA::Char, A::StridedMatrix{T}, x::StridedVector{T}) - stride(A, 1)==1 || return generic_matvecmul!(y, tA, A, x) - if tA != 'N' - (nA, mA) = size(A) - else - (mA, nA) = size(A) - end - nA==length(x) || throw(DimensionMismatch("")) - mA==length(y) || throw(DimensionMismatch("")) - mA == 0 && return zeros(T, 0) - nA == 0 && return zeros(T, mA) - return BLAS.gemv!(tA, one(T), A, x, zero(T), y) +function gemv!{T<:BlasFloat}(y::StridedVector{T}, tA::Char, A::StridedMatrix{T}, x::StridedVector{T}) + stride(A, 1)==1 || return generic_matvecmul!(y, tA, A, x) + if tA != 'N' + (nA, mA) = size(A) + else + (mA, nA) = size(A) end + nA==length(x) || throw(DimensionMismatch("")) + mA==length(y) || throw(DimensionMismatch("")) + mA == 0 && return zeros(T, 0) + nA == 0 && return zeros(T, mA) + return BLAS.gemv!(tA, one(T), A, x, zero(T), y) end function syrk_wrapper!{T<:BlasFloat}(C::StridedMatrix{T}, tA::Char, A::StridedMatrix{T}) diff --git a/deps/Makefile b/deps/Makefile index db4350a2b5091..d375c0ec2c95b 100644 --- a/deps/Makefile +++ b/deps/Makefile @@ -799,13 +799,6 @@ openblas-$(OPENBLAS_VER)/config.status: openblas-$(OPENBLAS_VER).tar.gz mkdir -p openblas-$(OPENBLAS_VER) && \ $(TAR) -C openblas-$(OPENBLAS_VER) --strip-components 1 -xf $< perl -i -ple 's/^\s*(EXTRALIB\s*\+=\s*-lSystemStubs)\s*$$/# $$1/g' openblas-$(OPENBLAS_VER)/Makefile.system -ifeq ($(OPENBLAS_VER),v0.2.8) - cd openblas-$(OPENBLAS_VER)/lapack-netlib/SRC && \ - patch < ../../../dlasd4-lapack-3.4.2.patch && \ - patch < ../../../slasd4-lapack-3.4.2.patch - cd openblas-$(OPENBLAS_VER)/exports && \ - patch < ../../openblas-link-osx109.patch -endif echo 1 > $@ $(OPENBLAS_OBJ_SOURCE): openblas-$(OPENBLAS_VER)/config.status $(MAKE) -C openblas-$(OPENBLAS_VER) $(OPENBLAS_BUILD_OPTS) || (echo "*** Clean the OpenBLAS build with 'make -C deps clean-openblas'. Rebuild with 'make OPENBLAS_USE_THREAD=0 if OpenBLAS had trouble linking libpthread.so, and with 'make OPENBLAS_TARGET_ARCH=NEHALEM' if there were errors building SandyBridge support. Both these options can also be used simultaneously. ***" && false) @@ -930,7 +923,6 @@ lapack-$(LAPACK_VER).tgz: lapack-$(LAPACK_VER)/Makefile: lapack-$(LAPACK_VER).tgz $(JLCHECKSUM) $< $(TAR) zxf $< - cd lapack-$(LAPACK_VER)/SRC && patch < ../../dlasd4-lapack-3.4.2.patch && patch < ../../slasd4-lapack-3.4.2.patch touch -c $@ ifeq ($(USE_SYSTEM_BLAS), 0) lapack-$(LAPACK_VER)/liblapack.a: | $(OPENBLAS_OBJ_TARGET) diff --git a/deps/Versions.make b/deps/Versions.make index 91a105c720b13..fdcd79caf2237 100644 --- a/deps/Versions.make +++ b/deps/Versions.make @@ -3,12 +3,8 @@ LLVM_LIB_SUFFIX = PCRE_VER = 8.31 GRISU_VER = 1.1.1 DSFMT_VER = 2.2 -ifeq ($(OS),WINNT) -OPENBLAS_VER = v0.2.9.rc1 -else -OPENBLAS_VER = v0.2.8 -endif -LAPACK_VER = 3.4.2 +OPENBLAS_VER = v0.2.9 +LAPACK_VER = 3.5.0 ARPACK_VER = 3.1.5 FFTW_VER = 3.3.3 SUITESPARSE_VER = 4.2.1 diff --git a/deps/checksums/lapack-3.5.0.tgz/md5 b/deps/checksums/lapack-3.5.0.tgz/md5 new file mode 100644 index 0000000000000..a1e6c43f2278d --- /dev/null +++ b/deps/checksums/lapack-3.5.0.tgz/md5 @@ -0,0 +1 @@ +b1d3e3e425b2e44a06760ff173104bdf diff --git a/deps/checksums/lapack-3.5.0.tgz/sha512 b/deps/checksums/lapack-3.5.0.tgz/sha512 new file mode 100644 index 0000000000000..de7df8cb34518 --- /dev/null +++ b/deps/checksums/lapack-3.5.0.tgz/sha512 @@ -0,0 +1 @@ +b948a0a0db032bda455ec4f519d4e89e4c29e29cecb5b6258ca61f68faaeeac9fdf4ece5c39ffcd0154c5505facbc392c7d09c8348b1d60bdd2685153ab2543f diff --git a/deps/checksums/openblas-v0.2.9.rc1.tar.gz/md5 b/deps/checksums/openblas-v0.2.9.rc1.tar.gz/md5 deleted file mode 100644 index 1471a06fcac33..0000000000000 --- a/deps/checksums/openblas-v0.2.9.rc1.tar.gz/md5 +++ /dev/null @@ -1 +0,0 @@ -34b03e26a7240c640978a4d3b87849a3 diff --git a/deps/checksums/openblas-v0.2.9.rc1.tar.gz/sha512 b/deps/checksums/openblas-v0.2.9.rc1.tar.gz/sha512 deleted file mode 100644 index f5fc22fa73957..0000000000000 --- a/deps/checksums/openblas-v0.2.9.rc1.tar.gz/sha512 +++ /dev/null @@ -1 +0,0 @@ -db1fa3ac4572869dbdf4c887fa6112419464accbfb311d9c9ca8bcde8882208001963dbbeb6afa350ca0d72c13fdda0ab7c6bc464de93d9af0889a0b361c0f97 diff --git a/deps/checksums/openblas-v0.2.9.tar.gz/md5 b/deps/checksums/openblas-v0.2.9.tar.gz/md5 new file mode 100644 index 0000000000000..11f315b5b8156 --- /dev/null +++ b/deps/checksums/openblas-v0.2.9.tar.gz/md5 @@ -0,0 +1 @@ +b3af3bed5f353d1fc024cab1b836ac3e diff --git a/deps/checksums/openblas-v0.2.9.tar.gz/sha512 b/deps/checksums/openblas-v0.2.9.tar.gz/sha512 new file mode 100644 index 0000000000000..ee26eac411508 --- /dev/null +++ b/deps/checksums/openblas-v0.2.9.tar.gz/sha512 @@ -0,0 +1 @@ +26675d3f66121e1be1b1ab149883afb392fa40f313380416d2e56093cf88c64e5d36dab366c734b9d5e9a4bd49085235cb73d819e9b559e924039cd2b42aa2f9 diff --git a/deps/dlasd4-lapack-3.4.2.patch b/deps/dlasd4-lapack-3.4.2.patch deleted file mode 100644 index 90d5dc91eb663..0000000000000 --- a/deps/dlasd4-lapack-3.4.2.patch +++ /dev/null @@ -1,36 +0,0 @@ ---- openblas-v0.2.8/lapack-netlib/SRC/dlasd4.f 2013-08-13 12:26:35.000000000 +0530 -+++ dlasd4.f.new 2013-08-13 12:25:32.000000000 +0530 -@@ -223,6 +223,7 @@ - * - EPS = DLAMCH( 'Epsilon' ) - RHOINV = ONE / RHO -+ TAU2= ZERO - * - * The case I = N - * -@@ -275,6 +276,7 @@ - ELSE - TAU2 = ( A+SQRT( A*A+FOUR*B*C ) ) / ( TWO*C ) - END IF -+ TAU = TAU2 / ( D( N )+SQRT( D( N )*D( N )+TAU2 ) ) - END IF - * - * It can be proved that -@@ -293,6 +295,8 @@ - ELSE - TAU2 = ( A+SQRT( A*A+FOUR*B*C ) ) / ( TWO*C ) - END IF -+ TAU = TAU2 / ( D( N )+SQRT( D( N )*D( N )+TAU2 ) ) -+ - * - * It can be proved that - * D(N)^2 < D(N)^2+TAU2 < SIGMA(N)^2 < D(N)^2+RHO/2 -@@ -301,7 +305,7 @@ - * - * The following TAU is to approximate SIGMA_n - D( N ) - * -- TAU = TAU2 / ( D( N )+SQRT( D( N )*D( N )+TAU2 ) ) -+* TAU = TAU2 / ( D( N )+SQRT( D( N )*D( N )+TAU2 ) ) - * - SIGMA = D( N ) + TAU - DO 30 J = 1, N diff --git a/deps/openblas-link-osx109.patch b/deps/openblas-link-osx109.patch deleted file mode 100644 index c99b64f1a9036..0000000000000 --- a/deps/openblas-link-osx109.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- Makefile.orig 2013-08-01 11:53:12.000000000 -0400 -+++ Makefile 2013-10-25 15:08:04.000000000 -0400 -@@ -107,7 +107,7 @@ - perl ./gensymbol win2khpl $(ARCH) dummy $(EXPRECISION) $(NO_CBLAS) $(NO_LAPACK) $(NO_LAPACKE) $(NEED2UNDERSCORES) > $(@F) - - $(LIBDYNNAME) : ../$(LIBNAME) osx.def -- $(CC) $(CFLAGS) -all_load -headerpad_max_install_names -install_name $(CURDIR)/../$(LIBDYNNAME) -dynamiclib -o ../$(LIBDYNNAME) $< -Wl,-exported_symbols_list,osx.def $(FEXTRALIB) -+ $(FC) $(FFLAGS) -all_load -headerpad_max_install_names -install_name $(CURDIR)/../$(LIBDYNNAME) -dynamiclib -o ../$(LIBDYNNAME) $< -Wl,-exported_symbols_list,osx.def $(FEXTRALIB) - - symbol.$(SUFFIX) : symbol.S - $(CC) $(CFLAGS) -c -o $(@F) $^ diff --git a/deps/slasd4-lapack-3.4.2.patch b/deps/slasd4-lapack-3.4.2.patch deleted file mode 100644 index 3e28fc8be36ef..0000000000000 --- a/deps/slasd4-lapack-3.4.2.patch +++ /dev/null @@ -1,36 +0,0 @@ ---- openblas-v0.2.8/lapack-netlib/SRC/slasd4.f 2013-08-01 21:23:12.000000000 +0530 -+++ slasd4.f.new 2013-08-13 11:58:06.000000000 +0530 -@@ -223,6 +223,7 @@ - * - EPS = SLAMCH( 'Epsilon' ) - RHOINV = ONE / RHO -+ TAU2= ZERO - * - * The case I = N - * -@@ -275,6 +276,7 @@ - ELSE - TAU2 = ( A+SQRT( A*A+FOUR*B*C ) ) / ( TWO*C ) - END IF -+ TAU = TAU2 / ( D( N )+SQRT( D( N )*D( N )+TAU2 ) ) - END IF - * - * It can be proved that -@@ -293,6 +295,8 @@ - ELSE - TAU2 = ( A+SQRT( A*A+FOUR*B*C ) ) / ( TWO*C ) - END IF -+ TAU = TAU2 / ( D( N )+SQRT( D( N )*D( N )+TAU2 ) ) -+ - * - * It can be proved that - * D(N)^2 < D(N)^2+TAU2 < SIGMA(N)^2 < D(N)^2+RHO/2 -@@ -301,7 +305,7 @@ - * - * The following TAU is to approximate SIGMA_n - D( N ) - * -- TAU = TAU2 / ( D( N )+SQRT( D( N )*D( N )+TAU2 ) ) -+* TAU = TAU2 / ( D( N )+SQRT( D( N )*D( N )+TAU2 ) ) - * - SIGMA = D( N ) + TAU - DO 30 J = 1, N diff --git a/test/linalg1.jl b/test/linalg1.jl index 04c450d10569d..bb6b2a67990bd 100644 --- a/test/linalg1.jl +++ b/test/linalg1.jl @@ -266,3 +266,7 @@ debug && println("Matrix square root") end end end + +#6941 +#@test (ones(10^7,4)*ones(4))[3] == 4.0 +