Package: guix-patches;
Reported by: Eric Bavier <bavier <at> cray.com>
Date: Tue, 12 Dec 2017 22:41:01 UTC
Severity: normal
Tags: patch
Done: Efraim Flashner <efraim <at> flashner.co.il>
Bug is archived. No further changes may be made.
To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 29681 in the body.
You can then email your comments to 29681 AT debbugs.gnu.org in the normal way.
Toggle the display of automated, internal messages from the tracker.
View this report as an mbox folder, status mbox, maintainer mbox
guix-patches <at> gnu.org
:bug#29681
; Package guix-patches
.
(Tue, 12 Dec 2017 22:41:01 GMT) Full text and rfc822 format available.Eric Bavier <bavier <at> cray.com>
:guix-patches <at> gnu.org
.
(Tue, 12 Dec 2017 22:41:01 GMT) Full text and rfc822 format available.Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):
From: Eric Bavier <bavier <at> cray.com> To: guix-patches <at> gnu.org Cc: Eric Bavier <bavier <at> cray.com> Subject: [PATCH] gnu: eigen: Update to 3.3.4. Date: Tue, 12 Dec 2017 16:39:38 -0600
* gnu/packages/patches/eigen-arm-neon-fixes.patch: New patch. * gnu/packages/algebra.scm (eigen): Update to 3.3.4. [source]: Use patch. Disable svd-preallocation test for BDCSVD. [arguments]: Set "EIGEN_SEED" environment variable in check phase. * gnu/local.mk (dist_patch_DATA): Add patch. --- gnu/local.mk | 1 + gnu/packages/algebra.scm | 27 ++- gnu/packages/patches/eigen-arm-neon-fixes.patch | 245 ++++++++++++++++++++++++ 3 files changed, 264 insertions(+), 9 deletions(-) create mode 100644 gnu/packages/patches/eigen-arm-neon-fixes.patch diff --git a/gnu/local.mk b/gnu/local.mk index e1d578f1e..d02cb3449 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -608,6 +608,7 @@ dist_patch_DATA = \ %D%/packages/patches/dtc-format-modifier.patch \ %D%/packages/patches/dtc-32-bits-check.patch \ %D%/packages/patches/dvd+rw-tools-add-include.patch \ + %D%/packages/patches/eigen-arm-neon-fixes.patch \ %D%/packages/patches/elfutils-tests-ptrace.patch \ %D%/packages/patches/elixir-disable-failing-tests.patch \ %D%/packages/patches/einstein-build.patch \ diff --git a/gnu/packages/algebra.scm b/gnu/packages/algebra.scm index a7336066e..7e26e76f4 100644 --- a/gnu/packages/algebra.scm +++ b/gnu/packages/algebra.scm @@ -7,6 +7,7 @@ ;;; Copyright © 2017 Efraim Flashner <efraim <at> flashner.co.il> ;;; Copyright © 2017 Tobias Geerinckx-Rice <me <at> tobias.gr> ;;; Copyright © 2017 Marius Bakke <mbakke <at> fastmail.com> +;;; Copyright © 2017 Eric Bavier <bavier <at> member.fsf.org> ;;; ;;; This file is part of GNU Guix. ;;; @@ -577,27 +578,34 @@ cosine/ sine transforms or DCT/DST).") (define-public eigen (package (name "eigen") - (version "3.2.9") + (version "3.3.4") (source (origin (method url-fetch) (uri (string-append "https://bitbucket.org/eigen/eigen/get/" version ".tar.bz2")) (sha256 (base32 - "1zs5b210mq7nyanky07li6456rrd0xv2nxf6sl2lhkzdq5p067jd")) + "19m4406jvqnwh7kpcvx1lfx2vdc5zwia5q9ayv89bimg1gmln9fx")) (file-name (string-append name "-" version ".tar.bz2")) + (patches (search-patches "eigen-arm-neon-fixes.patch")) (modules '((guix build utils))) (snippet ;; There are 3 test failures in the "unsupported" directory, ;; but maintainers say it's a known issue and it's unsupported ;; anyway, so just skip them. - '(substitute* "CMakeLists.txt" - (("add_subdirectory\\(unsupported\\)") - "# Do not build the tests for unsupported features.\n") - ;; Work around - ;; <http://eigen.tuxfamily.org/bz/show_bug.cgi?id=1114>. - (("\"include/eigen3\"") - "\"${CMAKE_INSTALL_PREFIX}/include/eigen3\""))))) + '(begin + (substitute* "CMakeLists.txt" + (("add_subdirectory\\(unsupported\\)") + "# Do not build the tests for unsupported features.\n") + ;; Work around + ;; <http://eigen.tuxfamily.org/bz/show_bug.cgi?id=1114>. + (("\"include/eigen3\"") + "\"${CMAKE_INSTALL_PREFIX}/include/eigen3\"")) + (substitute* "test/bdcsvd.cpp" + ;; See + ;; https://bitbucket.org/eigen/eigen/commits/ea8c22ce6920e982d15245ee41d0531a46a28e5d + ((".*svd_preallocate[^\n]*" &) + (string-append "//" & " // Not supported by BDCSVD"))))))) (build-system cmake-build-system) (arguments '(;; Turn off debugging symbols to save space. @@ -608,6 +616,7 @@ cosine/ sine transforms or DCT/DST).") (lambda _ (let* ((cores (parallel-job-count)) (dash-j (format #f "-j~a" cores))) + (setenv "EIGEN_SEED" "1") ;for reproducibility ;; First build the tests, in parallel. See ;; <http://eigen.tuxfamily.org/index.php?title=Tests>. (and (zero? (system* "make" "buildtests" dash-j)) diff --git a/gnu/packages/patches/eigen-arm-neon-fixes.patch b/gnu/packages/patches/eigen-arm-neon-fixes.patch new file mode 100644 index 000000000..0838f3046 --- /dev/null +++ b/gnu/packages/patches/eigen-arm-neon-fixes.patch @@ -0,0 +1,245 @@ +# HG changeset patch +# User Gael Guennebaud <g.gael <at> free.fr> +# Date 1497514590 -7200 +# Node ID d781c1de98342c5ca29c2fe719d8d3c96a35dcd4 +# Parent 48cd83b2b459aa9f3f5dca135d38760fe0b02a2f +Bug 1436: fix compilation of Jacobi rotations with ARM NEON, some specializations of internal::conj_helper were missing. + +diff --git a/Eigen/Core b/Eigen/Core +--- a/Eigen/Core ++++ b/Eigen/Core +@@ -371,6 +371,7 @@ + #include "src/Core/MathFunctions.h" + #include "src/Core/GenericPacketMath.h" + #include "src/Core/MathFunctionsImpl.h" ++#include "src/Core/arch/Default/ConjHelper.h" + + #if defined EIGEN_VECTORIZE_AVX512 + #include "src/Core/arch/SSE/PacketMath.h" +diff --git a/Eigen/src/Core/arch/AVX/Complex.h b/Eigen/src/Core/arch/AVX/Complex.h +--- a/Eigen/src/Core/arch/AVX/Complex.h ++++ b/Eigen/src/Core/arch/AVX/Complex.h +@@ -204,23 +204,7 @@ + } + }; + +-template<> struct conj_helper<Packet8f, Packet4cf, false,false> +-{ +- EIGEN_STRONG_INLINE Packet4cf pmadd(const Packet8f& x, const Packet4cf& y, const Packet4cf& c) const +- { return padd(c, pmul(x,y)); } +- +- EIGEN_STRONG_INLINE Packet4cf pmul(const Packet8f& x, const Packet4cf& y) const +- { return Packet4cf(Eigen::internal::pmul(x, y.v)); } +-}; +- +-template<> struct conj_helper<Packet4cf, Packet8f, false,false> +-{ +- EIGEN_STRONG_INLINE Packet4cf pmadd(const Packet4cf& x, const Packet8f& y, const Packet4cf& c) const +- { return padd(c, pmul(x,y)); } +- +- EIGEN_STRONG_INLINE Packet4cf pmul(const Packet4cf& x, const Packet8f& y) const +- { return Packet4cf(Eigen::internal::pmul(x.v, y)); } +-}; ++EIGEN_MAKE_CONJ_HELPER_CPLX_REAL(Packet4cf,Packet8f) + + template<> EIGEN_STRONG_INLINE Packet4cf pdiv<Packet4cf>(const Packet4cf& a, const Packet4cf& b) + { +@@ -400,23 +384,7 @@ + } + }; + +-template<> struct conj_helper<Packet4d, Packet2cd, false,false> +-{ +- EIGEN_STRONG_INLINE Packet2cd pmadd(const Packet4d& x, const Packet2cd& y, const Packet2cd& c) const +- { return padd(c, pmul(x,y)); } +- +- EIGEN_STRONG_INLINE Packet2cd pmul(const Packet4d& x, const Packet2cd& y) const +- { return Packet2cd(Eigen::internal::pmul(x, y.v)); } +-}; +- +-template<> struct conj_helper<Packet2cd, Packet4d, false,false> +-{ +- EIGEN_STRONG_INLINE Packet2cd pmadd(const Packet2cd& x, const Packet4d& y, const Packet2cd& c) const +- { return padd(c, pmul(x,y)); } +- +- EIGEN_STRONG_INLINE Packet2cd pmul(const Packet2cd& x, const Packet4d& y) const +- { return Packet2cd(Eigen::internal::pmul(x.v, y)); } +-}; ++EIGEN_MAKE_CONJ_HELPER_CPLX_REAL(Packet2cd,Packet4d) + + template<> EIGEN_STRONG_INLINE Packet2cd pdiv<Packet2cd>(const Packet2cd& a, const Packet2cd& b) + { +diff --git a/Eigen/src/Core/arch/AltiVec/Complex.h b/Eigen/src/Core/arch/AltiVec/Complex.h +--- a/Eigen/src/Core/arch/AltiVec/Complex.h ++++ b/Eigen/src/Core/arch/AltiVec/Complex.h +@@ -224,23 +224,7 @@ + } + }; + +-template<> struct conj_helper<Packet4f, Packet2cf, false,false> +-{ +- EIGEN_STRONG_INLINE Packet2cf pmadd(const Packet4f& x, const Packet2cf& y, const Packet2cf& c) const +- { return padd(c, pmul(x,y)); } +- +- EIGEN_STRONG_INLINE Packet2cf pmul(const Packet4f& x, const Packet2cf& y) const +- { return Packet2cf(internal::pmul<Packet4f>(x, y.v)); } +-}; +- +-template<> struct conj_helper<Packet2cf, Packet4f, false,false> +-{ +- EIGEN_STRONG_INLINE Packet2cf pmadd(const Packet2cf& x, const Packet4f& y, const Packet2cf& c) const +- { return padd(c, pmul(x,y)); } +- +- EIGEN_STRONG_INLINE Packet2cf pmul(const Packet2cf& x, const Packet4f& y) const +- { return Packet2cf(internal::pmul<Packet4f>(x.v, y)); } +-}; ++EIGEN_MAKE_CONJ_HELPER_CPLX_REAL(Packet2cf,Packet4f) + + template<> EIGEN_STRONG_INLINE Packet2cf pdiv<Packet2cf>(const Packet2cf& a, const Packet2cf& b) + { +@@ -416,23 +400,8 @@ + return pconj(internal::pmul(a, b)); + } + }; +-template<> struct conj_helper<Packet2d, Packet1cd, false,false> +-{ +- EIGEN_STRONG_INLINE Packet1cd pmadd(const Packet2d& x, const Packet1cd& y, const Packet1cd& c) const +- { return padd(c, pmul(x,y)); } + +- EIGEN_STRONG_INLINE Packet1cd pmul(const Packet2d& x, const Packet1cd& y) const +- { return Packet1cd(internal::pmul<Packet2d>(x, y.v)); } +-}; +- +-template<> struct conj_helper<Packet1cd, Packet2d, false,false> +-{ +- EIGEN_STRONG_INLINE Packet1cd pmadd(const Packet1cd& x, const Packet2d& y, const Packet1cd& c) const +- { return padd(c, pmul(x,y)); } +- +- EIGEN_STRONG_INLINE Packet1cd pmul(const Packet1cd& x, const Packet2d& y) const +- { return Packet1cd(internal::pmul<Packet2d>(x.v, y)); } +-}; ++EIGEN_MAKE_CONJ_HELPER_CPLX_REAL(Packet1cd,Packet2d) + + template<> EIGEN_STRONG_INLINE Packet1cd pdiv<Packet1cd>(const Packet1cd& a, const Packet1cd& b) + { +diff --git a/Eigen/src/Core/arch/Default/ConjHelper.h b/Eigen/src/Core/arch/Default/ConjHelper.h +new file mode 100644 +--- /dev/null ++++ b/Eigen/src/Core/arch/Default/ConjHelper.h +@@ -0,0 +1,29 @@ ++ ++// This file is part of Eigen, a lightweight C++ template library ++// for linear algebra. ++// ++// Copyright (C) 2017 Gael Guennebaud <gael.guennebaud <at> inria.fr> ++// ++// This Source Code Form is subject to the terms of the Mozilla ++// Public License v. 2.0. If a copy of the MPL was not distributed ++// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. ++ ++#ifndef EIGEN_ARCH_CONJ_HELPER_H ++#define EIGEN_ARCH_CONJ_HELPER_H ++ ++#define EIGEN_MAKE_CONJ_HELPER_CPLX_REAL(PACKET_CPLX, PACKET_REAL) \ ++ template<> struct conj_helper<PACKET_REAL, PACKET_CPLX, false,false> { \ ++ EIGEN_STRONG_INLINE PACKET_CPLX pmadd(const PACKET_REAL& x, const PACKET_CPLX& y, const PACKET_CPLX& c) const \ ++ { return padd(c, pmul(x,y)); } \ ++ EIGEN_STRONG_INLINE PACKET_CPLX pmul(const PACKET_REAL& x, const PACKET_CPLX& y) const \ ++ { return PACKET_CPLX(Eigen::internal::pmul<PACKET_REAL>(x, y.v)); } \ ++ }; \ ++ \ ++ template<> struct conj_helper<PACKET_CPLX, PACKET_REAL, false,false> { \ ++ EIGEN_STRONG_INLINE PACKET_CPLX pmadd(const PACKET_CPLX& x, const PACKET_REAL& y, const PACKET_CPLX& c) const \ ++ { return padd(c, pmul(x,y)); } \ ++ EIGEN_STRONG_INLINE PACKET_CPLX pmul(const PACKET_CPLX& x, const PACKET_REAL& y) const \ ++ { return PACKET_CPLX(Eigen::internal::pmul<PACKET_REAL>(x.v, y)); } \ ++ }; ++ ++#endif // EIGEN_ARCH_CONJ_HELPER_H +diff --git a/Eigen/src/Core/arch/NEON/Complex.h b/Eigen/src/Core/arch/NEON/Complex.h +--- a/Eigen/src/Core/arch/NEON/Complex.h ++++ b/Eigen/src/Core/arch/NEON/Complex.h +@@ -265,6 +265,8 @@ + } + }; + ++EIGEN_MAKE_CONJ_HELPER_CPLX_REAL(Packet2cf,Packet4f) ++ + template<> EIGEN_STRONG_INLINE Packet2cf pdiv<Packet2cf>(const Packet2cf& a, const Packet2cf& b) + { + // TODO optimize it for NEON +@@ -456,6 +458,8 @@ + } + }; + ++EIGEN_MAKE_CONJ_HELPER_CPLX_REAL(Packet1cd,Packet2d) ++ + template<> EIGEN_STRONG_INLINE Packet1cd pdiv<Packet1cd>(const Packet1cd& a, const Packet1cd& b) + { + // TODO optimize it for NEON +diff --git a/Eigen/src/Core/arch/SSE/Complex.h b/Eigen/src/Core/arch/SSE/Complex.h +--- a/Eigen/src/Core/arch/SSE/Complex.h ++++ b/Eigen/src/Core/arch/SSE/Complex.h +@@ -229,23 +229,7 @@ + } + }; + +-template<> struct conj_helper<Packet4f, Packet2cf, false,false> +-{ +- EIGEN_STRONG_INLINE Packet2cf pmadd(const Packet4f& x, const Packet2cf& y, const Packet2cf& c) const +- { return padd(c, pmul(x,y)); } +- +- EIGEN_STRONG_INLINE Packet2cf pmul(const Packet4f& x, const Packet2cf& y) const +- { return Packet2cf(Eigen::internal::pmul<Packet4f>(x, y.v)); } +-}; +- +-template<> struct conj_helper<Packet2cf, Packet4f, false,false> +-{ +- EIGEN_STRONG_INLINE Packet2cf pmadd(const Packet2cf& x, const Packet4f& y, const Packet2cf& c) const +- { return padd(c, pmul(x,y)); } +- +- EIGEN_STRONG_INLINE Packet2cf pmul(const Packet2cf& x, const Packet4f& y) const +- { return Packet2cf(Eigen::internal::pmul<Packet4f>(x.v, y)); } +-}; ++EIGEN_MAKE_CONJ_HELPER_CPLX_REAL(Packet2cf,Packet4f) + + template<> EIGEN_STRONG_INLINE Packet2cf pdiv<Packet2cf>(const Packet2cf& a, const Packet2cf& b) + { +@@ -430,23 +414,7 @@ + } + }; + +-template<> struct conj_helper<Packet2d, Packet1cd, false,false> +-{ +- EIGEN_STRONG_INLINE Packet1cd pmadd(const Packet2d& x, const Packet1cd& y, const Packet1cd& c) const +- { return padd(c, pmul(x,y)); } +- +- EIGEN_STRONG_INLINE Packet1cd pmul(const Packet2d& x, const Packet1cd& y) const +- { return Packet1cd(Eigen::internal::pmul<Packet2d>(x, y.v)); } +-}; +- +-template<> struct conj_helper<Packet1cd, Packet2d, false,false> +-{ +- EIGEN_STRONG_INLINE Packet1cd pmadd(const Packet1cd& x, const Packet2d& y, const Packet1cd& c) const +- { return padd(c, pmul(x,y)); } +- +- EIGEN_STRONG_INLINE Packet1cd pmul(const Packet1cd& x, const Packet2d& y) const +- { return Packet1cd(Eigen::internal::pmul<Packet2d>(x.v, y)); } +-}; ++EIGEN_MAKE_CONJ_HELPER_CPLX_REAL(Packet1cd,Packet2d) + + template<> EIGEN_STRONG_INLINE Packet1cd pdiv<Packet1cd>(const Packet1cd& a, const Packet1cd& b) + { +diff --git a/Eigen/src/Core/arch/ZVector/Complex.h b/Eigen/src/Core/arch/ZVector/Complex.h +--- a/Eigen/src/Core/arch/ZVector/Complex.h ++++ b/Eigen/src/Core/arch/ZVector/Complex.h +@@ -336,6 +336,9 @@ + } + }; + ++EIGEN_MAKE_CONJ_HELPER_CPLX_REAL(Packet2cf,Packet4f) ++EIGEN_MAKE_CONJ_HELPER_CPLX_REAL(Packet1cd,Packet2d) ++ + template<> EIGEN_STRONG_INLINE Packet1cd pdiv<Packet1cd>(const Packet1cd& a, const Packet1cd& b) + { + // TODO optimize it for AltiVec -- 2.15.0
guix-patches <at> gnu.org
:bug#29681
; Package guix-patches
.
(Thu, 14 Dec 2017 14:40:01 GMT) Full text and rfc822 format available.Message #8 received at 29681 <at> debbugs.gnu.org (full text, mbox):
From: Eric Bavier <ericbavier <at> centurylink.net> To: 29681 <at> debbugs.gnu.org Subject: Re: [bug#29701] [PATCH] gnu: ceres-solver: Update to 1.13.0. Date: Thu, 14 Dec 2017 03:39:55 -0600
On Wed, 13 Dec 2017 16:52:43 -0600 Eric Bavier <bavier <at> cray.com> wrote: > * gnu/packages/maths.scm (ceres-solver): Update to 1.13.0. Note, this update is needed for compatibility with the updated eigen package from https://debbugs.gnu.org/cgi/bugreport.cgi?bug=29681 `~Eric
guix-patches <at> gnu.org
:bug#29681
; Package guix-patches
.
(Thu, 14 Dec 2017 17:22:01 GMT) Full text and rfc822 format available.Message #11 received at 29681 <at> debbugs.gnu.org (full text, mbox):
From: ludo <at> gnu.org (Ludovic Courtès) To: Eric Bavier <bavier <at> cray.com> Cc: 29681 <at> debbugs.gnu.org Subject: Re: [bug#29681] [PATCH] gnu: eigen: Update to 3.3.4. Date: Thu, 14 Dec 2017 18:21:24 +0100
Eric Bavier <bavier <at> cray.com> skribis: > * gnu/packages/patches/eigen-arm-neon-fixes.patch: New patch. > * gnu/packages/algebra.scm (eigen): Update to 3.3.4. > [source]: Use patch. Disable svd-preallocation test for BDCSVD. > [arguments]: Set "EIGEN_SEED" environment variable in check phase. > * gnu/local.mk (dist_patch_DATA): Add patch. Awesome work. Go for it! Ludo’.
Efraim Flashner <efraim <at> flashner.co.il>
to control <at> debbugs.gnu.org
.
(Mon, 01 Jan 2018 09:37:02 GMT) Full text and rfc822 format available.Debbugs Internal Request <help-debbugs <at> gnu.org>
to internal_control <at> debbugs.gnu.org
.
(Mon, 29 Jan 2018 12:24:05 GMT) Full text and rfc822 format available.
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.