From 876a3c1b221e29191e50531ab5c9dec80763fe93 Mon Sep 17 00:00:00 2001
From: Andreas Westerwick <westerwick@pconas.de>
Date: Sun, 11 Aug 2019 20:19:08 +0200
Subject: [PATCH] parallel processing

---
 Tools/python/split_layers.py | 30 +++++++++++++++++++-----------
 1 file changed, 19 insertions(+), 11 deletions(-)

diff --git a/Tools/python/split_layers.py b/Tools/python/split_layers.py
index 58557cc..c1172d9 100755
--- a/Tools/python/split_layers.py
+++ b/Tools/python/split_layers.py
@@ -4,6 +4,9 @@ import sys
 import os
 import gdspy
 
+import multiprocessing
+from joblib import Parallel, delayed
+
 orig_box_width=10.
 orig_box_spacing=10.
 
@@ -126,17 +129,8 @@ def generate_gds_file(layout_path,cellname):
 		cell=cell.add(gdspy.Rectangle(p11, p12, 1))
 		cell=cell.add(gdspy.Rectangle(p21, p22, 1))
 		cell=cell.flatten()
-
-		for layername in layer_mapping:
-			ncell=cell.copy(layername,deep_copy=True)
-			thelayers=layer_mapping[layername]
-			ncell=ncell.remove_polygons(lambda pts, layer, datatype: layer not in thelayers)
-			ncell=ncell.add(gdspy.Rectangle(p11, p12, 1))
-			ncell=ncell.add(gdspy.Rectangle(p21, p22, 1))
-			ncell=ncell.flatten(single_layer=1,single_datatype=1)
-			newgdsii=gdspy.GdsLibrary("mask_"+layername)
-			newgdsii.add(ncell)
-			newgdsii.write_gds(layout_path+"/gds/mask_"+layername+".gds")
+		num_cores = multiprocessing.cpu_count() - 2
+		Parallel(n_jobs=num_cores, verbose=50)(delayed(split_task)(p11,p12,p21,p22,cell,layername)for layername in layer_mapping)
 
 	except Exception as e:
 		print("Can't do this:"+e)
@@ -144,6 +138,20 @@ def generate_gds_file(layout_path,cellname):
 	if '-s' in sys.argv:
 		gdspy.LayoutViewer()
 
+
+def split_task(p11,p12,p21,p22,cell,layername):
+	ncell=cell.copy(layername,deep_copy=True)
+	thelayers=layer_mapping[layername]
+	ncell=ncell.remove_polygons(lambda pts, layer, datatype: layer not in thelayers)
+	ncell=ncell.add(gdspy.Rectangle(p11, p12, 1))
+	ncell=ncell.add(gdspy.Rectangle(p21, p22, 1))
+	ncell=ncell.flatten(single_layer=1,single_datatype=1)
+	newgdsii=gdspy.GdsLibrary("mask_"+layername)
+	newgdsii.add(ncell)
+	newgdsii.write_gds(layout_path+"/gds/mask_"+layername+".gds")
+	print(layername)
+
+
 def show_help():
 	print("-n cellname:\tname of the cell to export")
 	print("-l:\t\tswitch to render library cells because default is layout cells")
-- 
GitLab