remap.py code-comments
authorLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Thu, 1 Jul 2021 12:26:00 +0000 (13:26 +0100)
committerLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Thu, 1 Jul 2021 12:26:00 +0000 (13:26 +0100)
openpower/sv/remap.py
openpower/sv/remapyield.py

index 2b5c4f373ee823dd86a78f04fa6748ecf9610c15..387b90ae26e320afacea9a35b91e7b8a28165e4d 100644 (file)
@@ -1,3 +1,7 @@
+# Finite State Machine version of the REMAP system.  much more likely
+# to end up being actually used in actual hardware
+
+# up to three dimensions permitted
 xdim = 3
 ydim = 2
 zdim = 1
@@ -5,17 +9,20 @@ zdim = 1
 VL = xdim * ydim * zdim # set total (can repeat, e.g. VL=x*y*z*4)
 
 lims = [xdim, ydim, zdim]
-idxs = [0,0,0] # starting indices
-order = [1,0,2] # experiment with different permutations, here
-offset = 0     # experiment with different offsetet, here
-invxyz = [0,1,0]
+idxs = [0,0,0]   # starting indices
+order = [1,0,2]  # experiment with different permutations, here
+offset = 0       # experiment with different offsetet, here
+invxyz = [0,1,0] # inversion allowed
 
+# pre-prepare the index state: run for "offset" times before
+# actually starting.  this algorithm can also be used for re-entrancy
+# if exceptions occur and a REMAP has to be started from where the
+# interrupt left off.
 for idx in range(offset):
     for i in range(3):
         idxs[order[i]] = idxs[order[i]] + 1
         if (idxs[order[i]] != lims[order[i]]):
             break
-        print
         idxs[order[i]] = 0
 
 break_count = 0 # for pretty-printing
@@ -32,6 +39,10 @@ for idx in range(VL):
     if break_count == lims[order[0]]:
         print ("")
         break_count = 0
+    # this is the exact same thing as the pre-preparation stage
+    # above.  step 1: count up to the limit of the current dimension
+    # step 2: if limit reached, zero it, and allow the *next* dimension
+    # to increment.  repeat for 3 dimensions.
     for i in range(3):
         idxs[order[i]] = idxs[order[i]] + 1
         if (idxs[order[i]] != lims[order[i]]):
index ff492f444a7a7c529c79d7d0c0e89fada352f4b4..c3a5f530199d637ffe31b445399902b5859f02a3 100644 (file)
@@ -15,7 +15,6 @@ order = [1,0,2]  # experiment with different permutations, here
 offset = 0       # experiment with different offset, here
 invxyz = [0,1,0] # inversion if desired
 
-
 # python "yield" can be iterated. use this to make it clear how
 # the indices are generated by using natural-looking nested loops
 def iterate_indices():
@@ -39,7 +38,6 @@ def iterate_indices():
                     # construct the (up to) 3D remap schedule
                     yield (x + y * xd + z * xd * yd)
 
-
 # enumerate over the iterator function, getting new indices
 for idx, new_idx in enumerate(iterate_indices()):
     if idx < offset: