Atlas binaries require SSE3 extensions
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
atlas (Ubuntu) |
New
|
Undecided
|
Unassigned | ||
python-numpy (Ubuntu) |
Invalid
|
Undecided
|
Unassigned |
Bug Description
With stock ATLAS, Python, numpy from natty on x86-32, I get the following behavior when trying to solve this least-squares problem: http://
$ python -c 'import cPickle; import gzip; import numpy as np; x, y = cPickle.
Illegal instruction
(Note that while this matrix is sparse, I have it stored in a dense numpy array. The file 'well1850.
Expected behavior: I wouldn't think you should ever get a SIGILL from BLAS, no matter what you do.
I can't seem to find any dbgsym packages for ATLAS, but gdb says:
(gdb) r
Starting program: /usr/bin/python -c import\ cPickle\;\ import\ gzip\;\ import\ numpy\ as\ np\;\ x,\ y\ =\ cPickle.
[Thread debugging using libthread_db enabled]
Program received signal SIGILL, Illegal instruction.
0x00704e89 in ATL_dupMBmm0_4_0_b0 () from /usr/lib/
(gdb) bt
#0 0x00704e89 in ATL_dupMBmm0_4_0_b0 () from /usr/lib/
#1 0x000002c8 in ?? ()
#2 0x0087b4f8 in ?? () from /usr/lib/
Backtrace stopped: previous frame inner to this frame (corrupt stack?)
(gdb)
ProblemType: Bug
DistroRelease: Ubuntu 11.04
Package: libatlas3gf-base 3.8.3-29
ProcVersionSign
Uname: Linux 2.6.38-8-generic i686
Architecture: i386
Date: Thu May 5 17:05:48 2011
InstallationMedia: Ubuntu 9.10 "Karmic Koala" - Release i386 (20091028.5)
ProcEnviron:
LANGUAGE=en_US:en
PATH=(custom, user)
LANG=en_US.UTF-8
SHELL=/usr/bin/zsh
SourcePackage: atlas
UpgradeStatus: Upgraded to natty on 2011-05-05 (0 days ago)
Worksforme with libatlas3gf-base, but I have a processor with SSE3.
I'm seeing this with libatlas3gf-base: (based on opcodes in the assembler dump of the binaries)
$ detect_ cpu_extensions /usr/lib/ atlas-base/ *.so atlas-base/ libatlas. so: 3dnow mmx pentium_pro sse sse2 sse3 atlas-base/ libcblas. so: pentium_pro sse sse2 atlas-base/ libf77blas. so: pentium_pro sse sse2 atlas-base/ liblapack_ atlas.so: pentium_pro sse sse2
/usr/lib/
/usr/lib/
/usr/lib/
/usr/lib/
IIRC, Atlas does not have runtime CPU extension detection, so this apparently means the binary shipped with Ubuntu will only work on modern processors with SSE3. I note that currently it seems that te libatlas3gf-base is the only ATLAS package --- the *-sse* versions seem to have been removed.