mailr23936 - /branches/frame_order_cleanup/test_suite/shared_data/frame_order/timings/


Others Months | Index by Date | Thread Index
>>   [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Header


Content

Posted by edward on June 13, 2014 - 15:25:
Author: bugman
Date: Fri Jun 13 15:25:28 2014
New Revision: 23936

URL: http://svn.gna.org/viewcvs/relax?rev=23936&view=rev
Log:
Added another timing script for RDC and PCS calculation timings.

This time, the calculation for multiple alignments is now being timed.  An 
addition set of methods
for calculating the values via tensor projections have been added.  For 5 
alignments and 200
vectors, this demonstrates a potential 20x speed up for this part of the 
RDC/PCS calculation.  Most
of this speed up should be obtainable for the numerical PCS integration in 
the frame order models.


Added:
    
branches/frame_order_cleanup/test_suite/shared_data/frame_order/timings/multi_tensor_projections.log
    
branches/frame_order_cleanup/test_suite/shared_data/frame_order/timings/multi_tensor_projections.py
      - copied, changed from r23935, 
branches/frame_order_cleanup/test_suite/shared_data/frame_order/timings/tensor_projections.py

Added: 
branches/frame_order_cleanup/test_suite/shared_data/frame_order/timings/multi_tensor_projections.log
URL: 
http://svn.gna.org/viewcvs/relax/branches/frame_order_cleanup/test_suite/shared_data/frame_order/timings/multi_tensor_projections.log?rev=23936&view=auto
==============================================================================
--- 
branches/frame_order_cleanup/test_suite/shared_data/frame_order/timings/multi_tensor_projections.log
        (added)
+++ 
branches/frame_order_cleanup/test_suite/shared_data/frame_order/timings/multi_tensor_projections.log
        Fri Jun 13 15:25:28 2014
@@ -0,0 +1,66 @@
+Original vectors:
+[[ 1.  2.  3.]
+ [ 2.  2.  2.]]
+Shape: (200, 3)
+
+Tensors:
+[[[  1.42219822e+00  -7.07796212e+00  -6.01619494e+00]
+  [ -7.07796212e+00  -1.44543002e+00   2.02008007e+00]
+  [ -6.01619494e+00   2.02008007e+00   2.32317940e-02]]
+
+ [[  2.84439644e+00  -1.41559242e+01  -1.20323899e+01]
+  [ -1.41559242e+01  -2.89086003e+00   4.04016014e+00]
+  [ -1.20323899e+01   4.04016014e+00   4.64635880e-02]]
+
+ [[  4.26659467e+00  -2.12338863e+01  -1.80485848e+01]
+  [ -2.12338863e+01  -4.33629005e+00   6.06024021e+00]
+  [ -1.80485848e+01   6.06024021e+00   6.96953819e-02]]
+
+ [[  5.68879289e+00  -2.83118485e+01  -2.40647798e+01]
+  [ -2.83118485e+01  -5.78172006e+00   8.08032028e+00]
+  [ -2.40647798e+01   8.08032028e+00   9.29271759e-02]]
+
+ [[  7.11099111e+00  -3.53898106e+01  -3.00809747e+01]
+  [ -3.53898106e+01  -7.22715008e+00   1.01004004e+01]
+  [ -3.00809747e+01   1.01004004e+01   1.16158970e-01]]]
+
+
+1st projection - per align, element by element r[j].A[i].r[j].
+Proj1&2: [-44.31849296 -88.59261589], [ -88.63698591 -177.18523179]
+Timing (s): 22.8432860374
+
+2nd projection - per align, diag of double tensordot.
+Proj1&2: [-44.31849296 -88.59261589], [ -88.63698591 -177.18523179]
+Timing (s): 12.9692270756
+
+3rd projection - per align, diag of double tensordot, no transpose.
+Proj1&2: [-44.31849296 -88.59261589], [ -88.63698591 -177.18523179]
+Timing (s): 12.6006851196
+
+4th projection - per align, mixed tensordot() and per-vector dot().
+Proj1&2: [-44.31849296 -88.59261589], [ -88.63698591 -177.18523179]
+Timing (s): 26.5787680149
+
+5th projection - per align, expansion and sum.
+Proj1&2: [-44.31849296 -88.59261589], [ -88.63698591 -177.18523179]
+Timing (s): 59.1453728676
+
+6th projection - per align, expansion.
+Proj1&2: [-44.31849296 -88.59261589], [ -88.63698591 -177.18523179]
+Timing (s): 2.79704904556
+
+7th projection - per align, expansion with pre-calculation.
+Proj1&2: [-44.31849296 -88.59261589], [ -88.63698591 -177.18523179]
+Timing (s): 1.90192103386
+
+8th projection - expansion with pre-calculation (outer() and transpose()).
+Proj1&2: [-44.31849296 -88.59261589], [ -88.63698591 -177.18523179]
+Timing (s): 1.25152587891
+
+9th projection - expansion with pre-calculation (only outer()).
+Proj1&2: [-44.31849296 -88.59261589], [ -88.63698591 -177.18523179]
+Timing (s): 1.13539600372
+
+10th projection - expansion with pre-calculation (outer() and add()).
+Proj1&2: [-44.31849296 -88.59261589], [ -88.63698591 -177.18523179]
+Timing (s): 1.11668395996

Copied: 
branches/frame_order_cleanup/test_suite/shared_data/frame_order/timings/multi_tensor_projections.py
 (from r23935, 
branches/frame_order_cleanup/test_suite/shared_data/frame_order/timings/tensor_projections.py)
URL: 
http://svn.gna.org/viewcvs/relax/branches/frame_order_cleanup/test_suite/shared_data/frame_order/timings/multi_tensor_projections.py?p2=branches/frame_order_cleanup/test_suite/shared_data/frame_order/timings/multi_tensor_projections.py&p1=branches/frame_order_cleanup/test_suite/shared_data/frame_order/timings/tensor_projections.py&r1=23935&r2=23936&rev=23936&view=diff
==============================================================================
--- 
branches/frame_order_cleanup/test_suite/shared_data/frame_order/timings/tensor_projections.py
       (original)
+++ 
branches/frame_order_cleanup/test_suite/shared_data/frame_order/timings/multi_tensor_projections.py
 Fri Jun 13 15:25:28 2014
@@ -14,72 +14,120 @@
 
 
 def proj1(vect, A, N=1, verb=True):
-    d = zeros(len(vect), float64)
-    for i in range(N):
-        for j in xrange(len(vect)):
-            d[j] = dot(vect[j], dot(A, vect[j]))
+    d = zeros((len(A), len(vect)), float64)
+    for iter in range(N):
+        for j in range(len(vect)):
+            for i in range(len(A)):
+                d[i, j] = dot(vect[j], dot(A[i], vect[j]))
     if verb:
-        print("\n1st projection - element by element r[i].A.r[i].")
-        print("Proj: %s" % d[:2])
+        print("\n1st projection - per align, element by element 
r[j].A[i].r[j].")
+        print("Proj1&2: %s, %s" % (d[0, :2], d[1, :2]))
 
 
 def proj2(vect, A, N=1, verb=True):
-    for i in range(N):
-        d = diagonal(tensordot(vect, tensordot(A, transpose(vect), axes=1), 
axes=1))
+    d = zeros((len(A), len(vect)), float64)
+    for iter in range(N):
+        for i in range(len(A)):
+            d[i] = diagonal(tensordot(vect, tensordot(A[i], transpose(vect), 
axes=1), axes=1))
     if verb:
-        print("\n2nd projection - diag of double tensordot.")
-        print("Proj: %s" % d[:2])
+        print("\n2nd projection - per align, diag of double tensordot.")
+        print("Proj1&2: %s, %s" % (d[0, :2], d[1, :2]))
 
 
 def proj3(vect, A, N=1, verb=True):
-    for i in range(N):
-        d = diagonal(tensordot(tensordot(A, vect, axes=([0],[1])), vect, 
axes=([0],[1])))
+    d = zeros((len(A), len(vect)), float64)
+    for iter in range(N):
+        for i in range(len(A)):
+            d[i] = diagonal(tensordot(tensordot(A[i], vect, axes=([0],[1])), 
vect, axes=([0],[1])))
     if verb:
-        print("\n3rd projection - diag of double tensordot, no transpose.")
-        print("Proj: %s" % d[:2])
+        print("\n3rd projection - per align, diag of double tensordot, no 
transpose.")
+        print("Proj1&2: %s, %s" % (d[0, :2], d[1, :2]))
 
 
 def proj4(vect, A, N=1, verb=True):
-    d = zeros(len(vect), float64)
-    for i in range(N):
-        a = tensordot(A, vect, axes=([0],[1]))
-        for j in range(len(vect)):
-            d[j] = dot(vect[j], a[:,j])
+    d = zeros((len(A), len(vect)), float64)
+    for iter in range(N):
+        for i in range(len(A)):
+            a = tensordot(A[i], vect, axes=([0],[1]))
+            for j in range(len(vect)):
+                d[i, j] = dot(vect[j], a[:,j])
     if verb:
-        print("\n4th projection - mixed tensordot() and per-vector dot().")
-        print("Proj: %s" % d[:2])
+        print("\n4th projection - per align, mixed tensordot() and 
per-vector dot().")
+        print("Proj1&2: %s, %s" % (d[0, :2], d[1, :2]))
 
 
 def proj5(vect, A, N=1, verb=True):
-    d = zeros(len(vect), float64)
-    for i in range(N):
+    d = zeros((len(A), len(vect)), float64)
+    for iter in range(N):
         vect2 = vect**2
         double_vect = 2.0 * vect
-        for j in xrange(len(vect)):
-            d[j] = vect2[j][0]*A[0, 0] + vect2[j][1]*A[1, 1] + 
vect2[j][2]*(A[2, 2]) + double_vect[j][0]*vect[j][1]*A[0, 1] + 
double_vect[j][0]*vect[j][2]*A[0, 2] + double_vect[j][1]*vect[j][2]*A[1, 2]
+        for i in range(len(A)):
+            for j in range(len(vect)):
+                d[i, j] = vect2[j][0]*A[i, 0, 0] + vect2[j][1]*A[i, 1, 1] + 
vect2[j][2]*(A[i, 2, 2]) + double_vect[j][0]*vect[j][1]*A[i, 0, 1] + 
double_vect[j][0]*vect[j][2]*A[i, 0, 2] + double_vect[j][1]*vect[j][2]*A[i, 
1, 2]
     if verb:
-        print("\n5th projection - expansion and sum.")
-        print("Proj: %s" % d[:2])
+        print("\n5th projection - per align, expansion and sum.")
+        print("Proj1&2: %s, %s" % (d[0, :2], d[1, :2]))
 
 
 def proj6(vect, A, N=1, verb=True):
-    d = zeros(len(vect), float64)
-    for i in range(N):
-        d = vect[:,0]**2*A[0, 0] + vect[:,1]**2*A[1, 1] + vect[:,2]**2*(A[2, 
2]) + 2.0*vect[:,0]*vect[:,1]*A[0, 1] + 2.0*vect[:,0]*vect[:,2]*A[0, 2] + 
2.0*vect[:,1]*vect[:,2]*A[1, 2]
+    d = zeros((len(A), len(vect)), float64)
+    for iter in range(N):
+        for i in range(len(A)):
+            d[i] = vect[:, 0]**2*A[i, 0, 0] + vect[:, 1]**2*A[i, 1, 1] + 
vect[:, 2]**2*(A[i, 2, 2]) + 2.0*vect[:, 0]*vect[:, 1]*A[i, 0, 1] + 
2.0*vect[:, 0]*vect[:, 2]*A[i, 0, 2] + 2.0*vect[:, 1]*vect[:, 2]*A[i, 1, 2]
     if verb:
-        print("\n6th projection - expansion.")
-        print("Proj: %s" % d[:2])
+        print("\n6th projection - per align, expansion.")
+        print("Proj1&2: %s, %s" % (d[0, :2], d[1, :2]))
 
 
 def proj7(vect, A, N=1, verb=True):
-    d = zeros(len(vect), float64)
-    for i in range(N):
+    d = zeros((len(A), len(vect)), float64)
+    for iter in range(N):
         vect2 = vect**2
         double_vect = 2.0 * vect
-        d = vect2[:,0]*A[0, 0] + vect2[:,1]*A[1, 1] + vect2[:,2]*(A[2, 2]) + 
double_vect[:,0]*vect[:,1]*A[0, 1] + double_vect[:,0]*vect[:,2]*A[0, 2] + 
double_vect[:,1]*vect[:,2]*A[1, 2]
+        for i in range(len(A)):
+            d[i] = vect2[:, 0]*A[i, 0, 0] + vect2[:, 1]*A[i, 1, 1] + 
vect2[:, 2]*(A[i, 2, 2]) + double_vect[:, 0]*vect[:, 1]*A[i, 0, 1] + 
double_vect[:, 0]*vect[:, 2]*A[i, 0, 2] + double_vect[:, 1]*vect[:, 2]*A[i, 
1, 2]
     if verb:
-        print("\n7th projection - expansion with pre-calculation.")
-        print("Proj: %s" % d[:2])
+        print("\n7th projection - per align, expansion with 
pre-calculation.")
+        print("Proj1&2: %s, %s" % (d[0, :2], d[1, :2]))
+
+
+def proj8(vect, A, N=1, verb=True):
+    d = zeros((len(A), len(vect)), float64)
+    for iter in range(N):
+        vect2 = vect**2
+        double_vect = 2.0 * vect
+        d[:] = transpose(outer(vect2[:, 0], A[:, 0, 0]) + outer(vect2[:, 1], 
A[:, 1, 1]) + outer(vect2[:, 2], A[:, 2, 2]) + outer(double_vect[:, 
0]*vect[:, 1], A[:, 0, 1]) + outer(double_vect[:, 0]*vect[:, 2], A[:, 0, 2]) 
+ outer(double_vect[:, 1]*vect[:, 2], A[:, 1, 2]))
+    if verb:
+        print("\n8th projection - expansion with pre-calculation (outer() 
and transpose()).")
+        print("Proj1&2: %s, %s" % (d[0, :2], d[1, :2]))
+
+
+def proj9(vect, A, N=1, verb=True):
+    d = zeros((len(A), len(vect)), float64)
+    for iter in range(N):
+        vect2 = vect**2
+        double_vect = 2.0 * vect
+        d[:] = outer(A[:, 0, 0], vect2[:, 0]) + outer(A[:, 1, 1], vect2[:, 
1]) + outer(A[:, 2, 2], vect2[:, 2]) + outer(A[:, 0, 1], double_vect[:, 
0]*vect[:, 1]) + outer(A[:, 0, 2], double_vect[:, 0]*vect[:, 2]) + outer(A[:, 
1, 2], double_vect[:, 1]*vect[:, 2])
+    if verb:
+        print("\n9th projection - expansion with pre-calculation (only 
outer()).")
+        print("Proj1&2: %s, %s" % (d[0, :2], d[1, :2]))
+
+
+def proj10(vect, A, N=1, verb=True):
+    d = zeros((len(A), len(vect)), float64)
+    for iter in range(N):
+        d[:] = 0.0
+        vect2 = vect**2
+        double_vect = 2.0 * vect
+        add(outer(A[:, 0, 0], vect2[:, 0]), d, d)
+        add(outer(A[:, 1, 1], vect2[:, 1]), d, d)
+        add(outer(A[:, 2, 2], vect2[:, 2]), d, d)
+        add(outer(A[:, 0, 1], double_vect[:, 0]*vect[:, 1]), d, d)
+        add(outer(A[:, 0, 2], double_vect[:, 0]*vect[:, 2]), d, d)
+        add(outer(A[:, 1, 2], double_vect[:, 1]*vect[:, 2]), d, d)
+    if verb:
+        print("\n10th projection - expansion with pre-calculation (outer() 
and add()).")
+        print("Proj1&2: %s, %s" % (d[0, :2], d[1, :2]))
 
 
 # Some 200 vectors.
@@ -88,7 +136,7 @@
 if __name__ == '__main__':
     print("Original vectors:\n%s\nShape: %s" % (vect[:2], vect.shape))
 
-# Init the alignment tensor.
+# Init the 5 alignment tensors.
 A = zeros((3, 3), float64)
 A_5D = [1.42219822168827662867e-04, -1.44543001566521341940e-04, 
-7.07796211648713973798e-04, -6.01619494082773244303e-04, 
2.02008007072950861996e-04]
 A[0, 0] = A_5D[0]
@@ -97,31 +145,45 @@
 A[0, 1] = A[1, 0] = A_5D[2]
 A[0, 2] = A[2, 0] = A_5D[3]
 A[1, 2] = A[2, 1] = A_5D[4]
-A *= 1e4
+A = tile(A, (5, 1, 1))
+A[0] *= 1e4
+A[1] *= 2e4
+A[2] *= 3e4
+A[3] *= 4e4
+A[4] *= 5e4
 if __name__ == '__main__':
-    print("\nTensor:\n%s\n" % A)
+    print("\nTensors:\n%s\n" % A)
 
 # Projections.
 N = 100
 M = 100
 if __name__ == '__main__':
     proj1(vect=vect, A=A, N=1, verb=True)
-    print("Timing (s): %s" % timeit("proj1(vect=vect, A=A, N=N, 
verb=False)", setup="from tensor_projections import proj1, vect, A, N", 
number=M))
+    print("Timing (s): %s" % timeit("proj1(vect=vect, A=A, N=N, 
verb=False)", setup="from multi_tensor_projections import proj1, vect, A, N", 
number=M))
 
     proj2(vect=vect, A=A, N=1, verb=True)
-    print("Timing (s): %s" % timeit("proj2(vect=vect, A=A, N=N, 
verb=False)", setup="from tensor_projections import proj2, vect, A, N", 
number=M))
+    print("Timing (s): %s" % timeit("proj2(vect=vect, A=A, N=N, 
verb=False)", setup="from multi_tensor_projections import proj2, vect, A, N", 
number=M))
 
     proj3(vect=vect, A=A, N=1, verb=True)
-    print("Timing (s): %s" % timeit("proj3(vect=vect, A=A, N=N, 
verb=False)", setup="from tensor_projections import proj3, vect, A, N", 
number=M))
+    print("Timing (s): %s" % timeit("proj3(vect=vect, A=A, N=N, 
verb=False)", setup="from multi_tensor_projections import proj3, vect, A, N", 
number=M))
 
     proj4(vect=vect, A=A, N=1, verb=True)
-    print("Timing (s): %s" % timeit("proj4(vect=vect, A=A, N=N, 
verb=False)", setup="from tensor_projections import proj4, vect, A, N", 
number=M))
+    print("Timing (s): %s" % timeit("proj4(vect=vect, A=A, N=N, 
verb=False)", setup="from multi_tensor_projections import proj4, vect, A, N", 
number=M))
 
     proj5(vect=vect, A=A, N=1, verb=True)
-    print("Timing (s): %s" % timeit("proj5(vect=vect, A=A, N=N, 
verb=False)", setup="from tensor_projections import proj5, vect, A, N", 
number=M))
+    print("Timing (s): %s" % timeit("proj5(vect=vect, A=A, N=N, 
verb=False)", setup="from multi_tensor_projections import proj5, vect, A, N", 
number=M))
 
     proj6(vect=vect, A=A, N=1, verb=True)
-    print("Timing (s): %s" % timeit("proj6(vect=vect, A=A, N=N, 
verb=False)", setup="from tensor_projections import proj6, vect, A, N", 
number=M))
+    print("Timing (s): %s" % timeit("proj6(vect=vect, A=A, N=N, 
verb=False)", setup="from multi_tensor_projections import proj6, vect, A, N", 
number=M))
 
     proj7(vect=vect, A=A, N=1, verb=True)
-    print("Timing (s): %s" % timeit("proj7(vect=vect, A=A, N=N, 
verb=False)", setup="from tensor_projections import proj7, vect, A, N", 
number=M))
+    print("Timing (s): %s" % timeit("proj7(vect=vect, A=A, N=N, 
verb=False)", setup="from multi_tensor_projections import proj7, vect, A, N", 
number=M))
+
+    proj8(vect=vect, A=A, N=1, verb=True)
+    print("Timing (s): %s" % timeit("proj8(vect=vect, A=A, N=N, 
verb=False)", setup="from multi_tensor_projections import proj8, vect, A, N", 
number=M))
+
+    proj9(vect=vect, A=A, N=1, verb=True)
+    print("Timing (s): %s" % timeit("proj9(vect=vect, A=A, N=N, 
verb=False)", setup="from multi_tensor_projections import proj9, vect, A, N", 
number=M))
+
+    proj10(vect=vect, A=A, N=1, verb=True)
+    print("Timing (s): %s" % timeit("proj10(vect=vect, A=A, N=N, 
verb=False)", setup="from multi_tensor_projections import proj10, vect, A, 
N", number=M))




Related Messages


Powered by MHonArc, Updated Fri Jun 13 17:40:02 2014