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

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

[Octave-bug-tracker] [bug #54005] kron performance affected by octave_qu


From: A.R. Burgers
Subject: [Octave-bug-tracker] [bug #54005] kron performance affected by octave_quit() calls
Date: Thu, 31 May 2018 17:22:20 -0400 (EDT)
User-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 Edge/16.16299

Follow-up Comment #3, bug #54005 (project octave):

Well, the initial diff was only meant to highlight the issue.
Moving the octave_quit one level up, in case nrb==1 leads to these timings:


Elapsed time is 2.35524 seconds. (column vectors)
Elapsed time is 3.62659 seconds. (row vectors)



diff -r cdaa884568b1 libinterp/corefcn/kron.cc                               

--- a/libinterp/corefcn/kron.cc Thu May 24 19:20:35 2018 -0700               

+++ b/libinterp/corefcn/kron.cc Thu May 31 23:16:56 2018 +0200               

@@ -63,15 +63,30 @@                                                          

   MArray<T> c (dim_vector (nra*nrb, nca*ncb));                              

   T *cv = c.fortran_vec ();                                                 

                                                                             

-  for (octave_idx_type ja = 0; ja < nca; ja++)                              

-    for (octave_idx_type jb = 0; jb < ncb; jb++)                            

-      for (octave_idx_type ia = 0; ia < nra; ia++)                          

-        {                                                                   

-          octave_quit ();                                                   

-          mx_inline_mul (nrb, cv, a(ia, ja), b.data () + nrb*jb);
-          cv += nrb;
-        }
-
+  if (nrb == 1)
+    {
+      for (octave_idx_type ja = 0; ja < nca; ja++)
+        for (octave_idx_type jb = 0; jb < ncb; jb++)
+          {
+            octave_quit ();
+            for (octave_idx_type ia = 0; ia < nra; ia++)
+              {
+                mx_inline_mul (nrb, cv, a(ia, ja), b.data () + nrb*jb);
+                cv += nrb;
+              }
+         }
+    }
+  else
+    {
+      for (octave_idx_type ja = 0; ja < nca; ja++)
+        for (octave_idx_type jb = 0; jb < ncb; jb++)
+          for (octave_idx_type ia = 0; ia < nra; ia++)
+            {
+              octave_quit ();
+              mx_inline_mul (nrb, cv, a(ia, ja), b.data () + nrb*jb);
+              cv += nrb;
+            }
+    }
   return c;
 }


    _______________________________________________________

Reply to this item at:

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

_______________________________________________
  Message sent via Savannah
  https://savannah.gnu.org/




reply via email to

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