diff options
author | Eric Bavier <bavier@cray.com> | 2018-04-06 10:53:06 -0500 |
---|---|---|
committer | Eric Bavier <bavier@member.fsf.org> | 2018-04-17 16:24:42 -0500 |
commit | 65bb22796f854cbc3eae053a80b1d64365dad376 (patch) | |
tree | b28d3b62a897b7345725088536c14acdf5c291f7 | |
parent | 38039b4fa917c7516535167fb082ea63850ee578 (diff) | |
download | patches-65bb22796f854cbc3eae053a80b1d64365dad376.tar patches-65bb22796f854cbc3eae053a80b1d64365dad376.tar.gz |
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.scm | 63 |
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") |