summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Bavier <bavier@cray.com>2018-04-06 10:53:06 -0500
committerEric Bavier <bavier@member.fsf.org>2018-04-17 16:24:42 -0500
commit65bb22796f854cbc3eae053a80b1d64365dad376 (patch)
treeb28d3b62a897b7345725088536c14acdf5c291f7
parent38039b4fa917c7516535167fb082ea63850ee578 (diff)
gnu: fftw: Build SIMD codelets.
* gnu/packages/algebra.scm (fftw)[arguments]: Remove 'no-native phase; use configure cache value instead. Add configure flags for SIMD codelets. (fftwf)[arguments]: Add neon configuration flag for 32-bit arm. (fftw-avx): Remove variable.
-rw-r--r--gnu/packages/algebra.scm63
1 files changed, 26 insertions, 37 deletions
diff --git a/gnu/packages/algebra.scm b/gnu/packages/algebra.scm
index 6494438e9f..57cf583e44 100644
--- a/gnu/packages/algebra.scm
+++ b/gnu/packages/algebra.scm
@@ -531,19 +531,28 @@ a C program.")
"0wsms8narnbhfsa8chdflv2j9hzspvflblnqdn7hw8x5xdzrnq1v"))))
(build-system gnu-build-system)
(arguments
- '(#:configure-flags
- '("--enable-shared" "--enable-openmp" "--enable-threads")
- #:phases
- (modify-phases %standard-phases
- (add-before 'build 'no-native
- (lambda _
- ;; By default '-mtune=native' is used. However, that may
- ;; cause the use of ISA extensions (SSE2, etc.) that are
- ;; not necessarily available on the user's machine when
- ;; that package is built on a different machine.
- (substitute* (find-files "." "Makefile$")
- (("-mtune=native") ""))
- #t)))))
+ `(#:configure-flags
+ `("--enable-shared" "--enable-openmp" "--enable-threads"
+ ,,@(let ((system (or (%current-target-system) (%current-system))))
+ ;; Enable SIMD extensions for codelets. See details at:
+ ;; <http://fftw.org/fftw3_doc/Installation-on-Unix.html>.
+ (cond
+ ((string-prefix? "x86_64" system)
+ '("--enable-sse2" "--enable-avx" "--enable-avx2"
+ "--enable-avx512" "--enable-avx-128-fma"))
+ ((string-prefix? "i686" system)
+ '("--enable-sse2"))
+ ((string-prefix? "aarch64" system)
+ '("--enable-neon" "--enable-armv8-cntvct-el0"))
+ ((string-prefix? "arm" system) ;neon only for single-precision
+ '("--enable-armv7a-cntvct")) ;on 32-bit arm
+ ((string-prefix? "mips" system)
+ '("--enable-mips-zbus-timer"))))
+ ;; By default '-mtune=native' is used. However, that may cause the
+ ;; use of ISA extensions (e.g. AVX) that are not necessarily
+ ;; available on the user's machine when that package is built on a
+ ;; different machine.
+ "ax_cv_c_flags__mtune_native=no")))
(native-inputs `(("perl" ,perl)))
(home-page "http://fftw.org")
(synopsis "Computing the discrete Fourier transform")
@@ -560,7 +569,10 @@ cosine/ sine transforms or DCT/DST).")
(arguments
(substitute-keyword-arguments (package-arguments fftw)
((#:configure-flags cf)
- `(cons "--enable-float" ,cf))))
+ (if (string-prefix? "arm" (or (%current-target-system)
+ (%current-system)))
+ `(cons "--enable-neon" ,cf)
+ cf))))
(description
(string-append (package-description fftw)
" Single-precision version."))))
@@ -579,29 +591,6 @@ cosine/ sine transforms or DCT/DST).")
(string-append (package-description fftw)
" With OpenMPI parallelism support."))))
-(define-public fftw-avx
- (package
- (inherit fftw)
- (name "fftw-avx")
- (arguments
- (substitute-keyword-arguments (package-arguments fftw)
- ((#:configure-flags flags ''())
- ;; Enable AVX & co. See details at:
- ;; <http://fftw.org/fftw3_doc/Installation-on-Unix.html>.
- `(append '("--enable-avx" "--enable-avx2" "--enable-avx512"
- "--enable-avx-128-fma")
- ,flags))
- ((#:substitutable? _ #f)
- ;; To run the tests, we must have a CPU that supports all these
- ;; extensions. Since we cannot be sure that machines in the build
- ;; farm support them, disable substitutes altogether.
- #f)
- ((#:phases _)
- ;; Since we're not providing binaries, let '-mtune=native' through.
- '%standard-phases)))
- (synopsis "Computing the discrete Fourier transform (AVX2-optimized)")
- (supported-systems '("x86_64-linux"))))
-
(define-public java-la4j
(package
(name "java-la4j")