octave-bug-tracker
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Octave-bug-tracker] [bug #33073] EIGS is inefficient when run from SVD


From: anonymous
Subject: [Octave-bug-tracker] [bug #33073] EIGS is inefficient when run from SVD [patch included]
Date: Thu, 14 Apr 2011 15:13:41 +0000
User-agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.204 Safari/534.16

URL:
  <http://savannah.gnu.org/bugs/?33073>

                 Summary: EIGS is inefficient when run from SVD [patch
included]
                 Project: GNU Octave
            Submitted by: None
            Submitted on: Thu 14 Apr 2011 03:13:40 PM UTC
                Category: Libraries
                Severity: 3 - Normal
                Priority: 5 - Normal
              Item Group: Improvement/Optimization
                  Status: None
             Assigned to: None
         Originator Name: Andrew Janowczyk
        Originator Email: address@hidden
             Open/Closed: Open
         Discussion Lock: Any
                 Release: 3.4.0
        Operating System: GNU/Linux

    _______________________________________________________

Details:

hey all,

i have a 12 core machine with 64bit ACML libraries linked into a 64bit
octave.

when running:

A=rand(1000,10000);
[u,s,v]=svds(A,2);

a single core is used for the first stage of the computation. i tracked it
down using gdb and came to the following:

on line 410 of eigs.cc:

symmetric = asmm.is_symmetric();

is computed by brute force (i.e. checking every single value to its transpose
value), and when the matrix is large, this takes a very long time.

In actuality, if we look at the SVDS code (which is a nice wrapper around the
eigs code), the computation which is performed is:


[V, s, flag] = eigs ([sparse(m,m), b; b', sparse(n,n)], ....


but:

[sparse(m,m), b; b', sparse(n,n)]

is _always_ a symmetric matrix, making the asmm.is_symmetric() check redundant
(and extremely time consuming). 

this should have been taken care of by a flag which can be passed from svd to
eigs in the opts.issym (which is even mentioned in the documentation), but
alas it was not. even if it was, eigs.cc _always_ performed the check.

i rewrote it to take these things to account. find two attached patches, one
for eigs.cc and one for svds.m




    _______________________________________________________

File Attachments:


-------------------------------------------------------
Date: Thu 14 Apr 2011 03:13:40 PM UTC  Name: eigs-patch  Size: 2kB   By: None

<http://savannah.gnu.org/bugs/download.php?file_id=23243>
-------------------------------------------------------
Date: Thu 14 Apr 2011 03:13:40 PM UTC  Name: svds-patch  Size: 508B   By: None

<http://savannah.gnu.org/bugs/download.php?file_id=23244>

    _______________________________________________________

Reply to this item at:

  <http://savannah.gnu.org/bugs/?33073>

_______________________________________________
  Message sent via/by Savannah
  http://savannah.gnu.org/




reply via email to

[Prev in Thread] Current Thread [Next in Thread]