From e321903ff1afd9c607d5fae6a975196cb05cb3a8 Mon Sep 17 00:00:00 2001 From: Peter Simons Date: Thu, 23 Feb 2012 11:33:26 +0000 Subject: [PATCH] Atlas aborts the build some kind of CPU frequency scaling is detected on the build machine because that feature offsets the performance timings. We ignore that check, however, because with binaries being pre-built on Hydra those timings aren't accurate for the local machine in the first place. The build log might show something such as the following: | It appears you have cpu throttling enabled, which makes timings | unreliable and an ATLAS install nonsensical. Aborting. | See ATLAS/INSTALL.txt for further information | Ignoring CPU throttling by user override! svn path=/nixpkgs/trunk/; revision=32506 --- .../libraries/science/math/atlas/default.nix | 35 ++++++++++++++----- pkgs/top-level/all-packages.nix | 8 ++++- 2 files changed, 34 insertions(+), 9 deletions(-) diff --git a/pkgs/development/libraries/science/math/atlas/default.nix b/pkgs/development/libraries/science/math/atlas/default.nix index 12ee83ca88de..74d206210898 100644 --- a/pkgs/development/libraries/science/math/atlas/default.nix +++ b/pkgs/development/libraries/science/math/atlas/default.nix @@ -1,27 +1,46 @@ -{ stdenv, fetchurl, gfortran }: +{ stdenv, fetchurl, gfortran, tolerateCpuTimingInaccuracy ? true }: + +let + optionalString = stdenv.lib.optionalString; +in stdenv.mkDerivation { name = "atlas-3.9.67"; - + src = fetchurl { url = mirror://sf/math-atlas/atlas3.9.67.tar.bz2; sha256 = "06xxlv440z8a3qmfrh17p28girv71c6awvpw5vhpspr0pcsgk1pa"; }; - # configure outside of the source directory + # Configure outside of the source directory. preConfigure = '' mkdir build; cd build; configureScript=../configure; ''; - # the manual says you should pass -fPIC as configure arg .. It works - configureFlags = "-Fa alg -fPIC" + - (if stdenv.isi686 then " -b 32" else ""); + # * The manual says you should pass -fPIC as configure arg. Not sure why, but + # it works. + # + # * Atlas aborts the build if it detects that some kind of CPU frequency + # scaling is active on the build machine because that feature offsets the + # performance timings. We ignore that check, however, because with binaries + # being pre-built on Hydra those timings aren't accurate for the local + # machine in the first place. + configureFlags = "-Fa alg -fPIC" + + optionalString stdenv.isi686 " -b 32" + + optionalString tolerateCpuTimingInaccuracy " -Si cputhrchk 0"; buildInputs = [ gfortran ]; doCheck = true; meta = { - description = "Atlas library"; + homepage = "http://math-atlas.sourceforge.net/"; + description = "Automatically Tuned Linear Algebra Software (ATLAS)"; license = "GPL"; - homepage = http://math-atlas.sourceforge.net/; + + longDescription = '' + The ATLAS (Automatically Tuned Linear Algebra Software) project is an ongoing + research effort focusing on applying empirical techniques in order to provide + portable performance. At present, it provides C and Fortran77 interfaces to a + portably efficient BLAS implementation, as well as a few routines from LAPACK. + ''; }; } diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 57f73fb43fc5..635b918d3a96 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -8296,7 +8296,13 @@ let ### SCIENCE/MATH - atlas = callPackage ../development/libraries/science/math/atlas { }; + atlas = callPackage ../development/libraries/science/math/atlas { + # The build process measures CPU capabilities and optimizes the + # library to perform best on that particular machine. That is a + # great feature, but it's of limited use with pre-built binaries + # coming from a central build farm. + tolerateCpuTimingInaccuracy = true; + }; blas = callPackage ../development/libraries/science/math/blas { };