Skip to content

Commit 70488d3

Browse files
maxcapodi78maxcapodi78
authored andcommitted
Improve multithread speed and other minor stuff
1 parent fb3a189 commit 70488d3

File tree

3 files changed

+69
-9
lines changed

3 files changed

+69
-9
lines changed

src/pyedb/__init__.py

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33
import sys
44
import warnings
55

6-
if os.name == "nt":
7-
os.environ["PYTHONMALLOC"] = "malloc"
6+
# if os.name == "nt":
7+
# os.environ["PYTHONMALLOC"] = "malloc"
88

99
# By default we use pyedb legacy implementation
1010
if "PYEDB_USE_DOTNET" not in os.environ:
@@ -75,4 +75,19 @@ def custom_show_warning(message, category, filename, lineno, file=None, line=Non
7575

7676
#
7777

78+
import atexit
79+
7880
from pyedb.generic.design_types import Edb, Siwave
81+
82+
83+
def at_the_end():
84+
if bool(os.getenv("PYEDB_USE_DOTNET", "1")):
85+
from pythonnet import unload
86+
87+
unload()
88+
import gc
89+
90+
gc.collect(5)
91+
92+
93+
atexit.register(at_the_end)

src/pyedb/dotnet/edb.py

Lines changed: 44 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2280,6 +2280,22 @@ def _create_cutout_multithread(
22802280
i.delete()
22812281
elif net_name in reference_list and id not in pins_to_preserve:
22822282
reference_pinsts.append(i)
2283+
pins_to_delete = []
2284+
2285+
def check_instances(item):
2286+
net_name = item.net_name
2287+
id = item.id
2288+
if net_name not in all_list and id not in pins_to_preserve:
2289+
pins_to_delete.append(item)
2290+
elif net_name in reference_list and id not in pins_to_preserve:
2291+
reference_pinsts.append(item)
2292+
2293+
with ThreadPoolExecutor(number_of_threads) as pool:
2294+
pool.map(lambda item: check_instances(item), self.padstacks.instances.values())
2295+
2296+
for i in pins_to_delete:
2297+
i.delete()
2298+
22832299
for i in self.modeler.primitives:
22842300
if i:
22852301
net_name = i.net_name
@@ -2290,6 +2306,26 @@ def _create_cutout_multithread(
22902306
reference_paths.append(i)
22912307
else:
22922308
reference_prims.append(i)
2309+
2310+
prim_to_delete = []
2311+
2312+
def check_prims(item):
2313+
if item:
2314+
net_name = item.net_name
2315+
if net_name not in all_list:
2316+
prim_to_delete.append(item)
2317+
elif net_name in reference_list and not item.is_void:
2318+
if keep_lines_as_path and item.type == "Path":
2319+
reference_paths.append(item)
2320+
else:
2321+
reference_prims.append(item)
2322+
2323+
with ThreadPoolExecutor(number_of_threads) as pool:
2324+
pool.map(lambda item: check_prims(item), self.modeler.primitives)
2325+
2326+
for i in prim_to_delete:
2327+
i.delete()
2328+
22932329
self.logger.info_timer("Net clean up")
22942330
self.logger.reset_timer()
22952331

@@ -2424,11 +2460,14 @@ def pins_clean(pinst):
24242460

24252461
# with ThreadPoolExecutor(number_of_threads) as pool:
24262462
# pool.map(lambda item: clip_path(item), reference_paths)
2427-
2428-
for item in reference_paths:
2429-
clip_path(item)
2430-
for prim in reference_prims: # removing multithreading as failing with new layer from primitive
2431-
clean_prim(prim)
2463+
with ThreadPoolExecutor(number_of_threads) as pool:
2464+
pool.map(lambda item: clip_path(item), reference_paths)
2465+
with ThreadPoolExecutor(number_of_threads) as pool:
2466+
pool.map(lambda item: clean_prim(item), reference_prims)
2467+
# for item in reference_paths:
2468+
# clip_path(item)
2469+
# for prim in reference_prims: # removing multithreading as failing with new layer from primitive
2470+
# clean_prim(prim)
24322471
# with ThreadPoolExecutor(number_of_threads) as pool:
24332472
# pool.map(lambda item: clean_prim(item), reference_prims)
24342473

src/pyedb/dotnet/edb_core/cell/primitive/primitive.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,6 @@ class Primitive(Connectable):
4343
def __init__(self, pedb, edb_object):
4444
super().__init__(pedb, edb_object)
4545
self._app = self._pedb
46-
self._core_stackup = pedb.stackup
47-
self._core_net = pedb.nets
4846
self.primitive_object = self._edb_object
4947

5048
bondwire_type = self._pedb._edb.Cell.Primitive.BondwireType
@@ -62,6 +60,14 @@ def __init__(self, pedb, edb_object):
6260
"rectangle": bondwire_cross_section_type.BondwireRectangle,
6361
}
6462

63+
@property
64+
def _core_stackup(self):
65+
return self._app.stackup
66+
67+
@property
68+
def _core_net(self):
69+
return self._app.nets
70+
6571
@property
6672
def type(self):
6773
"""Return the type of the primitive.

0 commit comments

Comments
 (0)