Commit 3b26002
authored
Use Arc instead of Box for internal expression nodes in SymbolExpr (Qiskit#14660)
This commit updates the internal construction of the SymbolExpr struct
use a reference counting pointer instead of a regular pointer to a heap
allocated object. The way the binary tree gets constructed internally
using a normal pointer results in a lot of a copies of elements on the
tree. This creates a large performance overhead for the symbol expr as
we end up copying and freeing elements on the binary tree a large
amount. This was the root cause of the regression reported in Qiskit#14653
as the expression that gets generated by the transpiler internally ends
up adding a lot of elements to global phase expression and that results
in a lot of memory allocation and deallocation overhead. By using a
reference counting pointer instead of creating and freeing copies of
the expressions on the tree we instead only keep a single copy and
just increment or decrement the reference count.
Fixes Qiskit#146531 parent f59779d commit 3b26002
File tree
4 files changed
+89
-79
lines changed- crates/circuit/src
- releasenotes/notes
4 files changed
+89
-79
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
21 | 21 | | |
22 | 22 | | |
23 | 23 | | |
| 24 | + | |
24 | 25 | | |
25 | 26 | | |
26 | 27 | | |
| |||
84 | 85 | | |
85 | 86 | | |
86 | 87 | | |
87 | | - | |
| 88 | + | |
88 | 89 | | |
89 | 90 | | |
90 | 91 | | |
| |||
0 commit comments