add docs and fix suprious detects in incremental
This commit is contained in:
1 parent
13d847b833
commit
3d25b50a13
3 files changed
+14
-4
No files matched your search
@@ -40,13 +40,14 @@ Choose `uv-env` as kernel in Jupyter Lab.
|
|||||||
|
|
||||||
Numbers are given in `gfs/s` = `gates * faults * patterns / second`.
|
Numbers are given in `gfs/s` = `gates * faults * patterns / second`.
|
||||||
|
|
||||||
`SAFSimSimple` on 1024 patterns (baseline):
|
Single-core `SAFSimSimple` on 1024 patterns (baseline):
|
||||||
|
|
||||||
| OS, CPU, RAM | `tests/c6288.bench` | `polito-itc99-b15-sky130` |
|
| OS, CPU, RAM | `tests/c6288.bench` | `polito-itc99-b15-sky130` |
|
||||||
|--------------|---------------------|---------------------------|
|
|--------------|---------------------|---------------------------|
|
||||||
| MacOS, M3 Max, 32GiB (Stefan) | 1.52G | 1.97G |
|
| MacOS, M3 Max, 32GiB (Stefan) | 1.52G | 1.97G |
|
||||||
| WSL, i7-14650HX, 15GiB (Zhang) | 1.68G | 2.03G |
|
| WSL, i7-14650HX, 15GiB (Zhang) | 1.68G | 2.03G |
|
||||||
|
| Ubuntu, Xeon E5-1650, 251GiB (Nosaka) | 0.94G | 1.18G |
|
||||||
|
| WSL2, ?, ? (Kawachi) | 0.82G | ? |
|
||||||
|
|
||||||
## Notes
|
## Notes
|
||||||
|
|
||||||
|
|||||||
@@ -8,6 +8,10 @@ from kyupy.circuit import Circuit
|
|||||||
from kyupy.logic_sim import LogicSim2V
|
from kyupy.logic_sim import LogicSim2V
|
||||||
|
|
||||||
class SAFSimIncremental:
|
class SAFSimIncremental:
|
||||||
|
"""A stuck-at fault simulator that uses incremental simulation.
|
||||||
|
|
||||||
|
After priming the circuit with a batch of patterns, faults are injected and only the gates in its fan-out cone are re-simulated.
|
||||||
|
"""
|
||||||
|
|
||||||
def __init__(self, circuit_resolved: Circuit, batch_size: int):
|
def __init__(self, circuit_resolved: Circuit, batch_size: int):
|
||||||
self.sim = LogicSim2V(circuit_resolved, sims=batch_size)
|
self.sim = LogicSim2V(circuit_resolved, sims=batch_size)
|
||||||
@@ -21,6 +25,7 @@ class SAFSimIncremental:
|
|||||||
fclass_DS = set()
|
fclass_DS = set()
|
||||||
nbatches = cdiv(patterns.shape[1], self.sim.sims)
|
nbatches = cdiv(patterns.shape[1], self.sim.sims)
|
||||||
nfaults = len(faults)
|
nfaults = len(faults)
|
||||||
|
obs_mask = np.packbits(np.full(patterns.shape[1], 1, dtype=np.uint8), bitorder='little')[np.newaxis, np.newaxis]
|
||||||
|
|
||||||
with self.timers['sim'], log.progress() as p:
|
with self.timers['sim'], log.progress() as p:
|
||||||
for bidx, (bo, bs) in enumerate(batchrange(patterns.shape[1], self.sim.sims)):
|
for bidx, (bo, bs) in enumerate(batchrange(patterns.shape[1], self.sim.sims)):
|
||||||
@@ -30,7 +35,7 @@ class SAFSimIncremental:
|
|||||||
with self.timers['sim_full_prop']:
|
with self.timers['sim_full_prop']:
|
||||||
self.sim.c_prop()
|
self.sim.c_prop()
|
||||||
c_golden[...] = self.sim.c
|
c_golden[...] = self.sim.c
|
||||||
c_golden_poppo = c_golden[self.sim.poppo_c_locs]
|
c_golden_poppo = c_golden[self.sim.poppo_c_locs] & obs_mask
|
||||||
for fidx, fault in enumerate(faults):
|
for fidx, fault in enumerate(faults):
|
||||||
fault_site = fault//2
|
fault_site = fault//2
|
||||||
fault_polarity = fault&1
|
fault_polarity = fault&1
|
||||||
@@ -38,7 +43,7 @@ class SAFSimIncremental:
|
|||||||
with self.timers['sim_incr_prop']:
|
with self.timers['sim_incr_prop']:
|
||||||
self.sim.c_prop(fault_line=fault_site, fault_model=fault_polarity)
|
self.sim.c_prop(fault_line=fault_site, fault_model=fault_polarity)
|
||||||
with self.timers['sim_incr_eval']:
|
with self.timers['sim_incr_eval']:
|
||||||
if not np.all(c_golden_poppo == self.sim.c[self.sim.poppo_c_locs]):
|
if not np.all(c_golden_poppo == (self.sim.c[self.sim.poppo_c_locs] & obs_mask)):
|
||||||
fclass_DS.add(fault)
|
fclass_DS.add(fault)
|
||||||
with self.timers['sim_incr_reset']:
|
with self.timers['sim_incr_reset']:
|
||||||
self.sim.c[...] = c_golden # clear fault
|
self.sim.c[...] = c_golden # clear fault
|
||||||
|
|||||||
@@ -8,6 +8,10 @@ from kyupy.circuit import Circuit
|
|||||||
from kyupy.logic_sim import LogicSim2V
|
from kyupy.logic_sim import LogicSim2V
|
||||||
|
|
||||||
class SAFSimSimple:
|
class SAFSimSimple:
|
||||||
|
"""A simple stuck-at fault simulator.
|
||||||
|
|
||||||
|
Simplest brute-force simulation of all given stuck-at faults.
|
||||||
|
"""
|
||||||
|
|
||||||
def __init__(self, circuit_resolved: Circuit, batch_size: int):
|
def __init__(self, circuit_resolved: Circuit, batch_size: int):
|
||||||
self.sim = LogicSim2V(circuit_resolved, sims=batch_size)
|
self.sim = LogicSim2V(circuit_resolved, sims=batch_size)
|
||||||
|
|||||||
Reference in new issue
Block a user