[SciPy-user] problems with scipy.test() on Opteron 64-bit

Nils Wagner nwagner at mecha.uni-stuttgart.de
Thu Nov 25 09:17:49 EST 2004


Pearu Peterson wrote:

>
>
> On Thu, 25 Nov 2004, Giovanni Samaey wrote:
>
>> Pearu Peterson wrote:
>>
>>>
>>>
>>> On Thu, 25 Nov 2004, Giovanni Samaey wrote:
>>>
>>>> What is remarkable is that, the error is the same in the 3 cases. 
>>>> Moreover, if you add up the first two components of array1 you get 
>>>> the first component of array2.
>>>
>>>
>>>
>>> It would look like atlas bug but since the same results are obtained 
>>> with Fortran blas/lapack, then I don't know what is happening. I 
>>> presume that
>>> you did
>>>   rm -rf build
>>
>>
>> Of course. If I would forget, I would notice that nothing would be 
>> built, anyway...
>>
>>> What happens when you call geev routine directly? Try for example:
>>>
>>> In [1]: import scipy
>>>
>>> In [2]: scipy.linalg.flapack.dgeev([[1,2,3],[1,2,3],[2,5,6]],0,0)
>>> Out[2]:
>>> (array([  9.32182538e+00,  -6.03426271e-16,  -3.21825380e-01]),
>>>  array([ 0.,  0.,  0.]),
>>>  array([       [ 0.,  0.,  0.]]),
>>>  array([       [ 0.,  0.,  0.]]),
>>>  0)
>>>
>>> In [3]: scipy.linalg.flapack.sgeev([[1,2,3],[1,2,3],[2,5,6]],0,0)
>>> Out[3]:
>>> (array([  9.32182503e+00,  -2.82419336e-07,  -3.21825117e-01],'f'),
>>>  array([ 0.,  0.,  0.],'f'),
>>>  array([       [ 0.,  0.,  0.]],'f'),
>>>  array([       [ 0.,  0.,  0.]],'f'),
>>>  0)
>>>
>>> In [4]: scipy.linalg.calc_lwork.geev('d',3)
>>> Out[4]: (12, 102)
>>
>
> This was obtained on a 32-bit system.
>
>>> Is there any difference in your case?
>>
>>
>> Yes there is; in fact there is a difference in all three.
>>
>> In[1]: import scipy
>> In[2]: scipy.linalg.flapack.dgeev([[1,2,3],[1,2,3],[2,5,6]],0,0)
>> Out[2]: (array([ 9.43719064, -0.11536526, -0.32182538]),
>> array([ 0.,  0.,  0.]),
>> array([       [ 0.,  0.,  0.]]),
>> array([       [ 0.,  0.,  0.]]),
>> 0)
>
>
> Hmm, try also
>
> scipy.linalg.flapack.zgeev([[1,2,3],[1,2,3],[2,5,6]],0,0)
> scipy.linalg.flapack.dgeev(scipy.array([[1,2,3],[1,2,3],[2,5,6]],'d'),0,0) 
>
> scipy.linalg.flapack.dgeev(Numeric.array([[1,2,3],[1,2,3],[2,5,6]],'d'),0,0) 
>
>
> If those fail as well then try a C program that uses dgeev to solve 
> the same eigenvalue problem:
>
> /* main.c */
> #include <stdio.h>
> extern 
> dgeev_(char*,char*,int*,double*,int*,double*,double*,double*,int*,double*,int*,double*,int*,int*); 
>
> main() {
>   int n=3,lwork=12,info=0;
>   double a[] = {1,1,2,2,2,5,3,3,6};
>   double wr[]={0,0,0},wi[]={0,0,0},*vl,*vr,work[lwork];
>   dgeev_("N","N",&n,a,&n,wr,wi,vl,&n,vr,&n,work,&lwork,&info);
>   
> printf("wr=%g,%g,%g,wi=%g,%g,%g\n",wr[0],wr[1],wr[2],wi[0],wi[1],wi[2]);
> }
> /*eof*/
>
> $ gcc main.c -llapack
> $ ./a.out
> wr=9.32183,-6.20979e-16,-0.321825,wi=0,0,0
>
>
How can I enforce the usage of a static library *.a instead of *.so ?

/home/nwagner> gcc main.c -L/usr/local/lib -llapack
/usr/lib/gcc-lib/i586-suse-linux/3.3.3/../../../liblapack.so: undefined 
reference to `e_wsfe'
/usr/lib/gcc-lib/i586-suse-linux/3.3.3/../../../liblapack.so: undefined 
reference to `z_abs'
/usr/lib/gcc-lib/i586-suse-linux/3.3.3/../../../liblapack.so: undefined 
reference to `c_sqrt'
/usr/lib/gcc-lib/i586-suse-linux/3.3.3/../../../liblapack.so: undefined 
reference to `s_cmp'
/usr/lib/gcc-lib/i586-suse-linux/3.3.3/../../../liblapack.so: undefined 
reference to `z_exp'
/usr/lib/gcc-lib/i586-suse-linux/3.3.3/../../../liblapack.so: undefined 
reference to `c_exp'
/usr/lib/gcc-lib/i586-suse-linux/3.3.3/../../../liblapack.so: undefined 
reference to `etime_'
/usr/lib/gcc-lib/i586-suse-linux/3.3.3/../../../liblapack.so: undefined 
reference to `do_fio'
/usr/lib/gcc-lib/i586-suse-linux/3.3.3/../../../liblapack.so: undefined 
reference to `z_sqrt'
/usr/lib/gcc-lib/i586-suse-linux/3.3.3/../../../liblapack.so: undefined 
reference to `s_cat'
/usr/lib/gcc-lib/i586-suse-linux/3.3.3/../../../liblapack.so: undefined 
reference to `s_stop'
/usr/lib/gcc-lib/i586-suse-linux/3.3.3/../../../liblapack.so: undefined 
reference to `c_abs'
/usr/lib/gcc-lib/i586-suse-linux/3.3.3/../../../liblapack.so: undefined 
reference to `s_wsfe'
/usr/lib/gcc-lib/i586-suse-linux/3.3.3/../../../liblapack.so: undefined 
reference to `s_copy'
collect2: ld returned 1 exit status

Nils

>> In[3]: scipy.linalg.flapack.sgeev([[1,2,3],[1,2,3],[2,5,6]],0,0)
>> Out[3]: (array([ 0.,  0.,  0.],'f'),
>> array([ 0.,  0.,  0.],'f'),
>> array([       [ 0.,  0.,  0.]],'f'),
>> array([       [ 0.,  0.,  0.]],'f'), 3)
>
>
> Here info==3 which means that the QR algorithm  failed  to  compute  
> all the eigenvalues and 0:info of eigenvalues are such that converged. 
> But
> that does not makes sense because info==n...
>
>> In[4]: scipy.linalg.calc_lwork.geev('d',3)
>> Out[4]: (12, 174)
>
>
> I get the same result on an Opteron box.
>
> Pearu
>
> _______________________________________________
> SciPy-user mailing list
> SciPy-user at scipy.net
> http://www.scipy.net/mailman/listinfo/scipy-user



 




More information about the SciPy-User mailing list