diff --git a/report/report.tex b/report/report.tex index e1be200..93cb1a1 100644 --- a/report/report.tex +++ b/report/report.tex @@ -350,6 +350,11 @@ The ``IO adjacency'' term is an additional term in the signatures of order above $0$, indicating what input and output pins of the circuit group containing the current gate are adjacent to it. +The default order of signature used in all computations, unless more is useful, +is 2, after a few benchmarks. + +\todo{explain range of $n$} + \paragraph{Efficiency.} Every circuit memoizes all it can concerning its signature: the inner signature, the IO adjacency, the signatures of order $n$ already computed, etc. @@ -373,7 +378,33 @@ would be to try to multithread this computation. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \section{Group equality} -\todo{} + +Given two circuit group gates, the task of group equality is to determine +whether the two groups are structurally equivalent, as discussed above. + +Group equality itself is handled as a simple backtracking algorithm, trying to +establish a match (an isomorphism, that is, a permutation of the gates of one +of the groups) between the two groups given. + +The gates of the two groups are matched by equal signatures, equal number of +inputs and outputs, based on the signature of default order (that is, 2). A few +checks are made, \eg{} every matching group must have the same size on both +sides (if not, then, necessary, the two groups won't match). Then, the worst +case of number of permutations to check is evaluated. + +If this number is too high, the signature order will be incremented, and the +matching groups re-created accordingly, until a satisfyingly low number of +permutations is reached (or the diameter of the circuit is reached, meaning +that increasing the order of signature won't have any additional impact). This +order increase ``on-demand'' proved itself very efficient, effectively lowering +the number of permutations examined to no more than $4$ in studied cases. + +Once a permutation is judged worth to be examined, the group equality is run +recursively on all its matched gates. If this step succeeds, the graph +structure is then checked. If both steps succeeds, the permutation is correct +and an isomorphism has been found; if not, we move on to the next permutation. + +\todo{Anything more to tell here?} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \section{Pattern-match} @@ -381,6 +412,11 @@ would be to try to multithread this computation. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \section{Performance} + +\todo{} + +\subsection{Corner cases} + \todo{} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%