The-OpenROAD-Project / OpenROAD

OpenROAD's unified application implementing an RTL-to-GDS Flow. Documentation at https://openroad.readthedocs.io/en/latest/
https://theopenroadproject.org/
BSD 3-Clause "New" or "Revised" License
1.56k stars 544 forks source link

OpenRoad fails to route ispd19_test6 with 1 macro pin corner spacing violation. #1888

Closed stefanottili closed 1 year ago

stefanottili commented 2 years ago

OpenRoad fails to route ispd19_test6 with a macro pin corner spacing violation. There is plenty of space to solve this pin access as can be seen on all the other pins of all the other macros.

get input lef/def from https://www.ispd.cc/contests/19/

OpenROAD-flow-scripts/tools/install/OpenROAD/bin/openroad -threads 8 -log log -gui ispd19_test6.or

ispd19_test6.or:

read_lef ispd19_test6.input.lef.gz read_def ispd19_test6.input.def.gz

set_thread_count 8

global_route -verbose detailed_route -output_drc 5_route_drc.rpt -verbose 1 write_db route.db exit

OpenROAD v2.0-3644-gc852a71d0 .... [INFO DRT-0195] Start 64th optimization iteration. [INFO DRT-0199] Number of violations = 1. [INFO DRT-0267] cpu time = 02:30:36, elapsed time = 00:20:51, memory = 8211.41 (MB), peak = 8287.22 (MB)

5_route_drc.rpt:

violation type: CornerSpc srcs: net:net49701 inst:inst8396 bbox = ( 1207.35, 483.185 ) - ( 1207.63, 483.265 ) on Layer Metal6

maliberty commented 2 years ago

We run this design nightly and it ends with 0 DRVs. See https://jenkins.openroad.tools/job/OpenROAD-Nightly-Public/654/execution/node/478/log/

I'm not sure why you see a violation.

maliberty commented 2 years ago

The tests are run with https://github.com/The-OpenROAD-Project/OpenROAD/blob/master/src/drt/test/run-ispd.py

stefanottili commented 2 years ago

I'm running on a M1 with 16GB and logs using 4,6,8 cores look nearly identical.

But comparing the 32-thread nightly log to my M1 logs, these are the differences I can spot:

a) OpenROAD v2.0-3644-gc852a71d0 vs OpenROAD v2.0-3674-g6bcd930ce b) global_route was run without -verbose vs I ran with c) Number of guides: 4718916 vs Number of guides: 1906703 d) [INFO DRT-0176] GCELLGRID X -1 DO 905 STEP 3000 ; vs [INFO DRT-0176] GCELLGRID X -100 DO 905 STEP 3000 ; [INFO DRT-0177] GCELLGRID Y -1 DO 883 STEP 3000 ; vs [INFO DRT-0177] GCELLGRID Y 0 DO 883 STEP 3000 ; e) "no mention of this" vs [INFO DRT-0185] Post process initialize RPin region query.
f) [INFO DRT-0184] Done with 1360212 vertical wires in 19 frboxes and 949165 vs 1286915 vertical wires in 19 frboxes and 852326
Done with 145885 vertical wires in 19 frboxes and 122642 vs 174782 vertical wires in 19 frboxes and 175988

I get completely different guides/offset from groute and the "Post process initialize RPin region query" message is new.

maliberty commented 2 years ago

The ispd benchmark comes with guides so you shouldn't be running global route at all.

stefanottili commented 2 years ago

Why not ? Starting point is a legal placement that is known to route. And it’s not a congestion problem, just pin access to one of the macro pins. The pin is even wide enough to be covered by multiple tracks, so no offgrid pin access necessary.

maliberty commented 2 years ago

That contest was for detailed routing so the global routing was fixed. We run it as it was run in the contest. We could try to do what you are doing but that would be a separate effort and isn't currently a priority (more of a grt test at that point).

stefanottili commented 2 years ago

loading the guide still leaves me with this one macro pin access violation, even with --latest OpenROAD v2.0-3684-ga120f938e

read_lef ispd19_test6/ispd19_test6.input.lef.gz read_def ispd19_test6/ispd19_test6.input.def.gz detailed_route -guide ispd19_test6/ispd19_test6.guide -output_drc 5_route_drc.rpt -verbose 1 exit

comparing the 32-thread linux regression log file against the 8-thread M1 Mac log shows that the first discrepancies are in the "guide region query size" messages.

PS: It would be very helpful if the log file would contain [CMD] lines showing which commands were run and the runtime of these that can be easily grep'ed for. Let me know whether I should make that a feature request.

log25.gz

[INFO DRT-0036] FR_MASTERSLICE guide region query size = 0. [INFO DRT-0036] FR_MASTERSLICE guide region query size = 0. [INFO DRT-0036] FR_VIA guide region query size = 0. [INFO DRT-0036] FR_VIA guide region query size = 0. [INFO DRT-0036] Metal1 guide region query size = 763939. | [INFO DRT-0036] Metal1 guide region query size = 764122. [INFO DRT-0036] Via1 guide region query size = 0. [INFO DRT-0036] Via1 guide region query size = 0. [INFO DRT-0036] Metal2 guide region query size = 774176. | [INFO DRT-0036] Metal2 guide region query size = 774169. [INFO DRT-0036] Via2 guide region query size = 0. [INFO DRT-0036] Via2 guide region query size = 0. [INFO DRT-0036] Metal3 guide region query size = 509727. | [INFO DRT-0036] Metal3 guide region query size = 509715. [INFO DRT-0036] Via3 guide region query size = 0. [INFO DRT-0036] Via3 guide region query size = 0. [INFO DRT-0036] Metal4 guide region query size = 71887. | [INFO DRT-0036] Metal4 guide region query size = 71901. [INFO DRT-0036] Via4 guide region query size = 0. [INFO DRT-0036] Via4 guide region query size = 0. [INFO DRT-0036] Metal5 guide region query size = 9673. [INFO DRT-0036] Metal5 guide region query size = 9673. [INFO DRT-0036] Via5 guide region query size = 0. [INFO DRT-0036] Via5 guide region query size = 0. [INFO DRT-0036] Metal6 guide region query size = 4591. [INFO DRT-0036] Metal6 guide region query size = 4591. [INFO DRT-0036] Via6 guide region query size = 0. [INFO DRT-0036] Via6 guide region query size = 0. [INFO DRT-0036] Metal7 guide region query size = 3429. | [INFO DRT-0036] Metal7 guide region query size = 3431. [INFO DRT-0036] Via7 guide region query size = 0. [INFO DRT-0036] Via7 guide region query size = 0. [INFO DRT-0036] Metal8 guide region query size = 1672. | [INFO DRT-0036] Metal8 guide region query size = 1671. [INFO DRT-0036] Via8 guide region query size = 0. [INFO DRT-0036] Via8 guide region query size = 0. [INFO DRT-0036] Metal9 guide region query size = 147. [INFO DRT-0036] Metal9 guide region query size = 147. [INFO DRT-0179] Init gr pin query. [INFO DRT-0179] Init gr pin query.

maliberty commented 2 years ago

You can always file an issue if you think something needs improving.

vijayank88 commented 1 year ago

Please re-open if you're facing an issue with test case again.

stefanottili commented 1 year ago

I kept this bug open because OR failed to fix 1 violation both with and without guides. It shouldn't just be closed because it's "old", but thanks for reminding me to revisit this. Detail route doesn't have the option to load guides any more, so I just reran with groute/detail-route.

With a June 18 OR executable detailed routing finishes with 0 violations after the 8th iteration. Great !!

But .... the runtime increased from 20min to 2h40min !! 8x the runtime to fix 1 violation ...

I'm curious whether you would consider that a regression or just a side effect of the router checking more rules. Is ispd16_test6 still part of the nightly regression and if so is this runtime to be expected ? This seems excessive for 170k instances and a very routable design (according to the GRT congestion report).

May 22 2022:
[INFO DRT-0195] Start 64th optimization iteration.
[INFO DRT-0199] Number of violations = 1.
[INFO DRT-0267] cpu time = 02:30:36, elapsed time = 00:20:51, memory = 8211.41 (MB), peak = 8287.22 (MB)

June 19 20223:
[INFO DRT-0195] Start 6th optimization iteration.
    Completing 10% with 21 violations. ....
[INFO DRT-0195] Start 7th optimization iteration
    Completing 10% with 1 violations. ....
[INFO DRT-0195] Start 8th optimization iteration.
[INFO DRT-0199]   Number of violations = 0.
[INFO DRT-0267] cpu time = 16:41:41, elapsed time = 02:40:50, memory = 7391.95 (MB), peak = 9197.98 (MB)

[INFO GRT-0096] Final congestion report:
Layer         Resource        Demand        Usage (%)    Max H / Max V / Total Overflow
---------------------------------------------------------------------------------------
Metal1         4325352        361063            8.35%             0 /  0 /  0
Metal2         6412381       1743220           27.19%             0 /  0 /  0
Metal3         7418829       1524345           20.55%             0 /  0 /  0
Metal4         7423116        496914            6.69%             0 /  0 /  0
Metal5         4807805        120909            2.51%             0 /  0 /  0
Metal6         3316595         50165            1.51%             0 /  0 /  0
Metal7         5444456         60756            1.12%             0 /  0 /  0
Metal8         5578624          4261            0.08%             0 /  0 /  0
Metal9          799092            84            0.01%             0 /  0 /  0
---------------------------------------------------------------------------------------
Total         45526250       4361717            9.58%             0 /  0 /  0
maliberty commented 1 year ago

There is a read_guides command. I think the runtime is worth looking at.

stefanottili commented 1 year ago

1) Using read_guides the runtime of 50min is much better then the 2h40min with groute. But drt is still 2.5x slower then in May 2022.

2) This is also a groute test case, the M1-M2 wire length is a lot larger than with the read_guides.

groute

1402 Total wire length on LAYER Metal1 = 96338 um.
1403 Total wire length on LAYER Metal2 = 2552239 um.
1404 Total wire length on LAYER Metal3 = 2780384 um.

read_guide

338 Total wire length on LAYER Metal1 = 3895 um.
339 Total wire length on LAYER Metal2 = 1566612 um.
340 Total wire length on LAYER Metal3 = 2240879 um.

3) can somebody please explain the DRC violation number display for "completing xx%" to me ?

1370 [INFO DRT-0195] Start 0th optimization iteration.
1371     Completing 10% with 54891 violations.
...
1389     Completing 100% with 495540 violations.             <======
1390     elapsed time = 01:06:44, memory = 4796.30 (MB).
1391 [INFO DRT-0199]   Number of violations = 1080579.  <======
...
1428 [INFO DRT-0195] Start 1st optimization iteration.
1429     Completing 10% with 986059 violations.
...
1447     Completing 100% with 64751 violations.   <===========
1448     elapsed time = 00:34:46, memory = 6473.91 (MB).
1449 [INFO DRT-0199]   Number of violations = 452590. <=========

groute

1363 [INFO DRT-0184] Done with 982157 vertical wires in 19 frboxes and 631114 horizontal wires in 18 frboxes.
1364 [INFO DRT-0186] Done with 338675 vertical wires in 19 frboxes and 268880 horizontal wires in 18 frboxes.
1365 [INFO DRT-0182] Complete track assignment.
1366 [INFO DRT-0267] cpu time = 00:04:25, elapsed time = 00:00:56, memory = 3772.45 (MB), peak = 6942.59 (MB)
1367 [INFO DRT-0187] Start routing data preparation.
1368 [INFO DRT-0267] cpu time = 00:00:01, elapsed time = 00:00:01, memory = 4431.84 (MB), peak = 6942.59 (MB)
1369 [INFO DRT-0194] Start detail routing.
1370 [INFO DRT-0195] Start 0th optimization iteration.
1371     Completing 10% with 54891 violations.
1372     elapsed time = 00:08:11, memory = 5830.45 (MB).
1373     Completing 20% with 154296 violations.
1374     elapsed time = 00:14:11, memory = 4220.42 (MB).
1375     Completing 30% with 154320 violations.
1376     elapsed time = 00:18:59, memory = 5508.48 (MB).
1377     Completing 40% with 249650 violations.
1378     elapsed time = 00:26:17, memory = 4764.81 (MB).
1379     Completing 50% with 282048 violations.
1380     elapsed time = 00:29:40, memory = 5145.11 (MB).
1381     Completing 60% with 327995 violations.
1382     elapsed time = 00:39:49, memory = 6646.06 (MB).
1383     Completing 70% with 404091 violations.
1384     elapsed time = 00:46:52, memory = 4552.16 (MB).
1385     Completing 80% with 404102 violations.
1386     elapsed time = 00:52:55, memory = 6016.72 (MB).
1387     Completing 90% with 474020 violations.
1388     elapsed time = 01:02:26, memory = 4899.11 (MB).
1389     Completing 100% with 495540 violations.
1390     elapsed time = 01:06:44, memory = 4796.30 (MB).
1391 [INFO DRT-0199]   Number of violations = 1080579.
1392 Viol/Layer      Metal1   Via1 Metal2   Via2 Metal3   Via3 Metal4   Via4 Metal5   Via5 Metal6   Via6 Metal7 Metal8
1393 Corner Spacing       0      0   2597      0    199      0     21      0      3      0      2      0      0      0
1394 Cut Spacing          0  10303      0  14171      0   1729      0     22      0      0      0      0      0      0
1395 EOL Spacing      17325      0  48249      0   8801      0    111      0     11      0      0      0      0      0
1396 Metal Spacing    77336      0  25436      0    732      0     36      0     18      0      2      0      4      0
1397 NS Metal           494      0    263      0      1      0      0      0      0      0      0      0      0      0
1398 Recheck          79527      0 138785      0 358106      0   6611      0    681      0    991      0    337      1
1399 Short            88536   6016 169403   2639  19792    690    362      0    232      1      2      1      0      0
1400 [INFO DRT-0267] cpu time = 07:53:03, elapsed time = 01:06:51, memory = 7035.84 (MB), peak = 7750.91 (MB)
1401 Total wire length = 6723003 um.
1402 Total wire length on LAYER Metal1 = 96338 um.
1403 Total wire length on LAYER Metal2 = 2552239 um.
1404 Total wire length on LAYER Metal3 = 2780384 um.
1405 Total wire length on LAYER Metal4 = 928553 um.
1406 Total wire length on LAYER Metal5 = 188664 um.
1407 Total wire length on LAYER Metal6 = 75501 um.
1408 Total wire length on LAYER Metal7 = 91879 um.
1409 Total wire length on LAYER Metal8 = 9316 um.
1410 Total wire length on LAYER Metal9 = 125 um.
1411 Total number of vias = 2276784.
1412 Up-via summary (total 2276784):.
1413 
1414 --------------------------
1415  FR_MASTERSLICE          0
1416          Metal1     917934
1417          Metal2    1169308
1418          Metal3     175064
1419          Metal4       8932
1420          Metal5       2423
1421          Metal6       2280
1422          Metal7        840
1423          Metal8          3
1424 --------------------------
1425                    2276784
1426 
1427 
1428 [INFO DRT-0195] Start 1st optimization iteration.
1429     Completing 10% with 986059 violations.
1430     elapsed time = 00:05:14, memory = 5334.22 (MB).
1431     Completing 20% with 807463 violations.
1432     elapsed time = 00:08:51, memory = 4251.91 (MB).
1433     Completing 30% with 807222 violations.
1434     elapsed time = 00:11:19, memory = 6930.03 (MB).
1435     Completing 40% with 601871 violations.
1436     elapsed time = 00:16:40, memory = 5714.06 (MB).
1437     Completing 50% with 530863 violations.
1438     elapsed time = 00:18:51, memory = 6955.28 (MB).
1439     Completing 60% with 444600 violations.
1440     elapsed time = 00:23:05, memory = 8731.17 (MB).
1441     Completing 70% with 304975 violations.
1442     elapsed time = 00:26:26, memory = 6753.44 (MB).
1443     Completing 80% with 304808 violations.
1444     elapsed time = 00:28:37, memory = 7899.47 (MB).
1445     Completing 90% with 122028 violations.
1446     elapsed time = 00:32:47, memory = 6162.27 (MB).
1447     Completing 100% with 64751 violations.
1448     elapsed time = 00:34:46, memory = 6473.91 (MB).
1449 [INFO DRT-0199]   Number of violations = 452590.
...
1818 [INFO DRT-0195] Start 8th optimization iteration.
1819     Completing 10% with 1 violations.
...
1839 [INFO DRT-0199]   Number of violations = 0.
...
1896 [INFO DRT-0267] cpu time = 16:41:41, elapsed time = 02:40:50, memory = 7391.95 (MB), peak = 9197.98 (MB)

read_guides ...

299 [INFO DRT-0184] Done with 1305496 vertical wires in 19 frboxes and 999199 horizontal wires in 18 frboxes.
300 [INFO DRT-0186] Done with 177976 vertical wires in 19 frboxes and 225561 horizontal wires in 18 frboxes.
301 [INFO DRT-0182] Complete track assignment.
302 [INFO DRT-0267] cpu time = 00:03:52, elapsed time = 00:00:49, memory = 4423.42 (MB), peak = 7574.72 (MB)
303 [INFO DRT-0187] Start routing data preparation.
304 [INFO DRT-0267] cpu time = 00:00:01, elapsed time = 00:00:01, memory = 5165.14 (MB), peak = 7574.72 (MB)
305 [INFO DRT-0194] Start detail routing.
306 [INFO DRT-0195] Start 0th optimization iteration.
307     Completing 10% with 14536 violations.
308     elapsed time = 00:03:18, memory = 7266.25 (MB).
309     Completing 20% with 33851 violations.
310     elapsed time = 00:05:12, memory = 4856.77 (MB).
311     Completing 30% with 34055 violations.
312     elapsed time = 00:07:18, memory = 6298.84 (MB).
313     Completing 40% with 61202 violations.
314     elapsed time = 00:10:38, memory = 4895.59 (MB).
315     Completing 50% with 69197 violations.
316     elapsed time = 00:11:53, memory = 4337.89 (MB).
317     Completing 60% with 83373 violations.
318     elapsed time = 00:16:26, memory = 4011.81 (MB).
319     Completing 70% with 97451 violations.
320     elapsed time = 00:19:06, memory = 3839.62 (MB).
321     Completing 80% with 97633 violations.
322     elapsed time = 00:21:32, memory = 5952.70 (MB).
323     Completing 90% with 117724 violations.
324     elapsed time = 00:24:56, memory = 5307.31 (MB).
325     Completing 100% with 122778 violations.
326     elapsed time = 00:26:12, memory = 5687.27 (MB).
327 [INFO DRT-0199]   Number of violations = 593751.
328 Viol/Layer      Metal1   Via1 Metal2   Via2 Metal3   Via3 Metal4   Via4 Metal5   Via5 Metal6   Via6 Metal7   Via7 Metal8   Via8 Metal9
329 Corner Spacing       0      0    704      0    439      0     74      0     93      0      2      0      0      0      0      0      0
330 Cut Spacing          0    319      0   9608      0   7461      0   7148      0     28      0    108      0      2      0      9      0
331 EOL Spacing        804      0  11292      0  13199      0    887      0    944      0     67      0    645      0     45      0      0
332 Metal Spacing     1619      0   3989      0    747      0    290      0    251      0    234      0    988      0      9      0      0
333 NS Metal             0      0      8      0      0      0      2      0      1      0      2      0      0      0      0      0      0
334 Recheck           1683      0 145081      0 277783      0  24378      0   9254      0   4112      0   7543      0    882      0    257
335 Short               14     26  21072    737  24586    593   1975     95   6559    150    391    378   3942     91    117      0     34
336 [INFO DRT-0267] cpu time = 03:02:33, elapsed time = 00:26:18, memory = 7199.42 (MB), peak = 8340.83 (MB)
337 Total wire length = 6769430 um.
338 Total wire length on LAYER Metal1 = 3895 um.
339 Total wire length on LAYER Metal2 = 1566612 um.
340 Total wire length on LAYER Metal3 = 2240879 um.
341 Total wire length on LAYER Metal4 = 1537409 um.
342 Total wire length on LAYER Metal5 = 517076 um.
343 Total wire length on LAYER Metal6 = 215464 um.
344 Total wire length on LAYER Metal7 = 350481 um.
345 Total wire length on LAYER Metal8 = 330634 um.
346 Total wire length on LAYER Metal9 = 6976 um.
347 Total number of vias = 2255510.
348 Up-via summary (total 2255510):.
349 
350 --------------------------
351  FR_MASTERSLICE          0
352          Metal1     806101
353          Metal2    1073206
354          Metal3     257350
355          Metal4      87876
356          Metal5       7131
357          Metal6      16824
358          Metal7       6695
359          Metal8        327
360 --------------------------
361                    2255510
362 
363 
364 [INFO DRT-0195] Start 1st optimization iteration.
365     Completing 10% with 547571 violations.
366     elapsed time = 00:01:54, memory = 6716.70 (MB).
367     Completing 20% with 471035 violations.
368     elapsed time = 00:03:08, memory = 5254.16 (MB).
369     Completing 30% with 469728 violations.
370     elapsed time = 00:04:17, memory = 6347.81 (MB).
371     Completing 40% with 387890 violations.
372     elapsed time = 00:05:59, memory = 5570.33 (MB).
373     Completing 50% with 362815 violations.
374     elapsed time = 00:06:45, memory = 5455.14 (MB).
375     Completing 60% with 285777 violations.
376     elapsed time = 00:08:39, memory = 7027.81 (MB).
377     Completing 70% with 181594 violations.
378     elapsed time = 00:09:54, memory = 5361.25 (MB).
379     Completing 80% with 180133 violations.
380     elapsed time = 00:11:09, memory = 6346.08 (MB).
381     Completing 90% with 51215 violations.
382     elapsed time = 00:12:55, memory = 5671.92 (MB).
383     Completing 100% with 15418 violations.
384     elapsed time = 00:13:45, memory = 5138.62 (MB).
385 [INFO DRT-0199]   Number of violations = 556441.
386 Viol/Layer      Metal1   Via1 Metal2   Via2 Metal3   Via3 Metal4   Via4 Metal5 Metal6   Via6 Metal7 Metal8   Via8 Metal9
387 Corner Spacing       0      0     88      0    141      0     43      0     17      1      0      1      0      0      0
388 Cut Spacing          0     60      0    732      0   1113      0    505      0      0      1      0      0     12      0
389 EOL Spacing         20      0   1913      0    752      0     83      0    191      2      0    130      1      0      0
390 Metal Spacing       50      0    358      0    223      0     57      0     23      8      0    177      1      0      0
391 NS Metal             0      0      0      0      0      0      0      0      4      0      0      0      0      0      0
392 Recheck            620      0 212244      0 187358      0 130379      0   8139   2282      0     98      0      0      0
393 Short                4      0   2525      4   4615      4    397      4    598     17      0    432      7      0      7
394 [INFO DRT-0267] cpu time = 01:39:33, elapsed time = 00:13:50, memory = 6786.81 (MB), peak = 8340.83 (MB)
395 Total wire length = 6630154 um.
396 Total wire length on LAYER Metal1 = 2548 um.
397 Total wire length on LAYER Metal2 = 1521220 um.
398 Total wire length on LAYER Metal3 = 2213698 um.
399 Total wire length on LAYER Metal4 = 1478750 um.
400 Total wire length on LAYER Metal5 = 515545 um.
401 Total wire length on LAYER Metal6 = 211677 um.
402 Total wire length on LAYER Metal7 = 349754 um.
403 Total wire length on LAYER Metal8 = 330158 um.
404 Total wire length on LAYER Metal9 = 6800 um.
405 Total number of vias = 2061844.
406 Up-via summary (total 2061844):.
407 
408 --------------------------
409  FR_MASTERSLICE          0
410          Metal1     801343
411          Metal2    1005747
412          Metal3     192145
413          Metal4      38181
414          Metal5       5515
415          Metal6      12760
416          Metal7       5566
417          Metal8        587
418 --------------------------
419                    2061844
420 
421 
422 [INFO DRT-0195] Start 2nd optimization iteration.
423     Completing 10% with 498486 violations.
424     elapsed time = 00:01:12, memory = 7186.56 (MB).
425     Completing 20% with 412476 violations.
426     elapsed time = 00:02:00, memory = 5913.89 (MB).
427     Completing 30% with 412435 violations.
428     elapsed time = 00:02:41, memory = 7132.69 (MB).
429     Completing 40% with 287938 violations.
...
592 [INFO DRT-0195] Start 5th optimization iteration.
593     Completing 10% with 189 violations.
594     elapsed time = 00:00:00, memory = 7384.34 (MB).
595     Completing 20% with 8 violations.
596     elapsed time = 00:00:00, memory = 7384.48 (MB).
597     Completing 30% with 8 violations.
598     elapsed time = 00:00:00, memory = 7384.48 (MB).
599     Completing 40% with 7 violations.
600     elapsed time = 00:00:00, memory = 7384.52 (MB).
601     Completing 50% with 6 violations.
602     elapsed time = 00:00:00, memory = 7384.59 (MB).
603     Completing 60% with 6 violations.
604     elapsed time = 00:00:00, memory = 7384.59 (MB).
605     Completing 70% with 3 violations.
606     elapsed time = 00:00:00, memory = 7384.64 (MB).
607     Completing 80% with 3 violations.
608     elapsed time = 00:00:00, memory = 7384.64 (MB).
609     Completing 90% with 1 violations.
610     elapsed time = 00:00:00, memory = 7384.67 (MB).
611     Completing 100% with 0 violations.
612     elapsed time = 00:00:00, memory = 7384.67 (MB).
613 [INFO DRT-0199]   Number of violations = 0.
614 [INFO DRT-0267] cpu time = 00:00:01, elapsed time = 00:00:01, memory = 7384.67 (MB), peak = 8466.27 (MB)
....
670 [INFO DRT-0267] cpu time = 05:53:41, elapsed time = 00:50:15, memory = 7384.67 (MB), peak = 8466.27 (MB)
maliberty commented 1 year ago

If you don't use the guides then you should use the global router in OR and not rely on the one in drt without guides. It is more of an academic legacy.

stefanottili commented 1 year ago

I was using global_route. Given that the std cells are completely blocked in M1 for either PINS or OBS, it shouldn't be using any M1 routing ...

Both M1 and M2 use horizontal POWER, but M1 routing direction is vertical. I've seen M1/M2 both being horizontal for std cells that use M2 power pins.

   1 OpenROAD v2.0-8762-g8d56294a5
   2 This program is licensed under the BSD-3 license. See the LICENSE file for details.
   3 Components of this program may be licensed under more restrictive licenses which must be honored.
   4 [INFO ODB-0222] Reading LEF file: ispd19_test6/ispd19_test6.input.lef.gz
   5 [INFO ODB-0223]     Created 18 technology layers
   6 [INFO ODB-0224]     Created 67 technology vias
   7 [INFO ODB-0225]     Created 63 library cells
   8 [INFO ODB-0226] Finished LEF file:  ispd19_test6/ispd19_test6.input.lef.gz
   9 [INFO ODB-0127] Reading DEF file: ispd19_test6/ispd19_test6.input.def.gz
  10 [INFO ODB-0128] Design: ispd19_test6
  11 [INFO ODB-0094]                 Created 100000 Insts
  12 [INFO ODB-0097]                 Created 100000 Nets
  13 [INFO ODB-0130]     Created 1211 pins.
  14 [INFO ODB-0131]     Created 179881 components and 1152181 component-terminals.
  15 [INFO ODB-0132]     Created 2 special nets and 359762 connections.
  16 [INFO ODB-0133]     Created 179863 nets and 792078 connections.
  17 [INFO ODB-0134] Finished DEF file: ispd19_test6/ispd19_test6.input.def.gz
  18 [INFO ORD-0030] Using 8 thread(s).
  19 [INFO GRT-0020] Min routing layer: Metal1
  20 [INFO GRT-0021] Max routing layer: Metal9
  21 [INFO GRT-0022] Global adjustment: 0%
  22 [INFO GRT-0023] Grid origin: (0, 0)
  23 [INFO GRT-0043] No OR_DEFAULT vias defined.
  24 [INFO GRT-0088] Layer Metal1  Track-Pitch = 0.1000  line-2-Via Pitch: 0.1000
  25 [INFO GRT-0088] Layer Metal2  Track-Pitch = 0.1000  line-2-Via Pitch: 0.1000
  26 [INFO GRT-0088] Layer Metal3  Track-Pitch = 0.1000  line-2-Via Pitch: 0.1000
  27 [INFO GRT-0088] Layer Metal4  Track-Pitch = 0.1000  line-2-Via Pitch: 0.1000
  28 [INFO GRT-0088] Layer Metal5  Track-Pitch = 0.1500  line-2-Via Pitch: 0.1100
  29 [INFO GRT-0088] Layer Metal6  Track-Pitch = 0.2000  line-2-Via Pitch: 0.1500
  30 [INFO GRT-0088] Layer Metal7  Track-Pitch = 0.2000  line-2-Via Pitch: 0.1650
  31 [INFO GRT-0088] Layer Metal8  Track-Pitch = 0.2000  line-2-Via Pitch: 0.2000
  32 [INFO GRT-0088] Layer Metal9  Track-Pitch = 1.0000  line-2-Via Pitch: 0.2000
  33 [INFO GRT-0019] Found 0 clock nets.
  34 [INFO GRT-0001] Minimum degree: 2
  35 [INFO GRT-0002] Maximum degree: 1314
  36 [INFO GRT-0003] Macros: 16
  37 [INFO GRT-0004] Blockages: 6806721
  38 
  39 [INFO GRT-0053] Routing resources analysis:
  40           Routing      Original      Derated      Resource
  41 Layer     Direction    Resources     Resources    Reduction (%)
  42 ---------------------------------------------------------------
  43 Metal1     Vertical     11986725       4325352          63.92%
  44 Metal2     Horizontal   11986725       6412381          46.50%
  45 Metal3     Vertical     11986725       7418829          38.11%
  46 Metal4     Horizontal   11986725       7423116          38.07%
  47 Metal5     Vertical      7991150       4807805          39.84%
  48 Metal6     Horizontal    5593805       3316595          40.71%
  49 Metal7     Vertical      5593805       5444456          2.67%
  50 Metal8     Horizontal    5593805       5578624          0.27%
  51 Metal9     Vertical       799115        799092          0.00%
  52 ---------------------------------------------------------------
  53 
  54 [INFO GRT-0101] Running extra iterations to remove overflow.
  55 [INFO GRT-0197] Via related to pin nodes: 806171
  56 [INFO GRT-0198] Via related Steiner nodes: 113999
  57 [INFO GRT-0199] Via filling finished.
  58 [INFO GRT-0111] Final number of vias: 1224637
  59 [INFO GRT-0112] Final usage 3D: 8035628
  60 
  61 [INFO GRT-0096] Final congestion report:
  62 Layer         Resource        Demand        Usage (%)    Max H / Max V / Total Overflow
  63 ---------------------------------------------------------------------------------------
  64 Metal1         4325352        361063            8.35%             0 /  0 /  0
  65 Metal2         6412381       1743220           27.19%             0 /  0 /  0
  66 Metal3         7418829       1524345           20.55%             0 /  0 /  0
  67 Metal4         7423116        496914            6.69%             0 /  0 /  0
  68 Metal5         4807805        120909            2.51%             0 /  0 /  0
  69 Metal6         3316595         50165            1.51%             0 /  0 /  0
  70 Metal7         5444456         60756            1.12%             0 /  0 /  0
  71 Metal8         5578624          4261            0.08%             0 /  0 /  0
  72 Metal9          799092            84            0.01%             0 /  0 /  0
  73 ---------------------------------------------------------------------------------------
  74 Total         45526250       4361717            9.58%             0 /  0 /  0
  75 
  76 [INFO GRT-0018] Total wirelength: 8034669 um
  77 [INFO GRT-0014] Routed nets: 179703
  78 [INFO DRT-0149] Reading tech and libs.
maliberty commented 1 year ago

When you ran grt what did you set for the min routing layer?

stefanottili commented 1 year ago

I didn't set a min routing layer. I was (wrongly ?) assuming that global route would take M1 pins/obs of std cells into account when computing routing resources, but when I do set Metal2 as min layer I get a coredump ...

read_lef ispd19_test6/ispd19_test6.input.lef.gz
read_def ispd19_test6/ispd19_test6.input.def.gz
set_thread_count 8
set_routing_layers -signal Metal2-Metal9 -clock Metal2-Metal9
global_route -verbose
#read_guides ispd19_test6/ispd19_test6.guide 
detailed_route -output_drc 5_route_drc.rpt -verbose 1
write_db route.db
[INFO DRT-0195] Start 0th optimization iteration.
    Completing 10% with 29018 violations.
    elapsed time = 00:03:48, memory = 6417.78 (MB).
    Completing 20% with 80829 violations.
    elapsed time = 00:06:52, memory = 4275.94 (MB).
    Completing 30% with 80846 violations.
    elapsed time = 00:08:46, memory = 6192.88 (MB).
    Completing 40% with 131632 violations.
    elapsed time = 00:12:26, memory = 4434.80 (MB).
    Completing 50% with 150025 violations.
    elapsed time = 00:14:18, memory = 4577.17 (MB).
Signal 11 received
Thread 17 Crashed:
0   libunwind.dylib                        0x19d6f12e0 libunwind::UnwindCursor<libunwind::LocalAddressSpace, libunwind::Registers_arm64>::step() + 672
1   libunwind.dylib                        0x19d6f3f00 _Unwind_Backtrace + 348
2   openroad                               0x1000eb16c boost::stacktrace::detail::this_thread_frames::collect(void const**, unsigned long, unsigned long) + 56
3   openroad                               0x1000eafbc boost::stacktrace::basic_stacktrace<std::__1::allocator<boost::stacktrace::frame>>::init(unsigned long, unsigned long) + 84
4   openroad                               0x1000e9fac handler(int) + 144
5   libsystem_platform.dylib               0x191dcaa24 _sigtramp + 56
6   ???                             0xffff8001007bd5dc ???
7   openroad                               0x1007b83b4 fr::FlexDRWorker::routeNet(fr::drNet*) + 452
8   openroad                               0x1007b69c0 fr::FlexDRWorker::route_queue_main(std::__1::queue<fr::FlexDRWorker::RouteQueueEntry, std::__1::deque<fr::FlexDRWorker::RouteQueueEntry, std::__1::allocator<fr::FlexDRWorker::RouteQueueEntry>>>&) + 648
9   openroad                               0x1007b6274 fr::FlexDRWorker::route_queue() + 456
10  openroad                               0x100776c64 fr::FlexDRWorker::main(fr::frDesign*) + 2668
maliberty commented 1 year ago

I just ran with your script and no crash using aed70e329e5b7c072efcc92a370c68dfe5b5a54d

stefanottili commented 1 year ago

OpenROAD v2.0-8799-gfb20dbe66 (Jun 21 2023) finishes. Merge pull request https://github.com/The-OpenROAD-Project/OpenROAD/pull/3487 from The-OpenROAD-Project-staging/gui-race seems to have done the trick for OR on Apple Silicon too.

So I this ticket can be closed, since OR routes ispd16_test6, but should there be new issues opened ? Please comment.

A) the 2.5x detailed router runtime regression (compared to May 2022) B) the 8x (7x blocking M1) router regression compared to "other tool route guides"

1) OR May 2022, "other tools" route guide: 20min, 1 Violation (lets take this a baseline) 2) OR June 2023, "other tools" route guide: 50min, 0 Violations (2.5x slowdown) 3) OR June 2023, groute: 2h40, 0 Violations (8x slowdown) 4) OR June 2023, groute M2-M9: 2h15, 0 Violations (7x slowdown)

a) the detailed router slowed down by 2.5x from May 2022 to June 2023, finishes without the 1 violation. b) the global router doesn't seem to take the M1/M2 std cell PIN/OBS into account, so the detail router starts with a lot more routes/violations on these layers then by loading "other tools" route guides. c) not using M1 at all helps, but speeds up the overall runtime from 2:40 to 2:15.

While looking at the logs I was slightly confused by the # of violations being reported: It seems to me that the "Recheck" (violations ?) get added to the # of violations counting down.

391     Completing 100% with 275348 violations.    
...
393 [INFO DRT-0199]   Number of violations = 711042.        
...
400 Recheck           2864      0 108070      0 315882      0   6426      0    751      0   1182      0    516      3
...
430 [INFO DRT-0195] Start 1st optimization iteration.
431     Completing 10% with 649708 violations.

d) What are Recheck violations ? Why are they added to the # of violations for the next iteration ?

read_lef ispd19_test6/ispd19_test6.input.lef.gz
read_def ispd19_test6/ispd19_test6.input.def.gz
set_thread_count 8
set_routing_layers -signal Metal2-Metal9 -clock Metal2-Metal9
global_route -verbose
#read_guides ispd19_test6/ispd19_test6.guide 
detailed_route -output_drc 5_route_drc.rpt -verbose 1
write_db route.db
 61 [INFO GRT-0096] Final congestion report:
 62 Layer         Resource        Demand        Usage (%)    Max H / Max V / Total Overflow
 63 ---------------------------------------------------------------------------------------
 64 Metal1               0             0            0.00%             0 /  0 /  0
 65 Metal2         6412381       1755855           27.38%             0 /  0 /  0
 66 Metal3         7418829       1834935           24.73%             0 /  0 /  0
 67 Metal4         7423116        480628            6.47%             0 /  0 /  0
 68 Metal5         4807805        150773            3.14%             0 /  0 /  0
 69 Metal6         3316595         51309            1.55%             0 /  0 /  0
 70 Metal7         5444456         77481            1.42%             0 /  0 /  0
 71 Metal8         5578624          6766            0.12%             0 /  0 /  0
 72 Metal9          799092           826            0.10%             0 /  0 /  0
 73 ---------------------------------------------------------------------------------------
 74 Total         41200898       4358573           10.58%             0 /  0 /  0
 75 
 76 [INFO GRT-0018] Total wirelength: 8001264 um

372 [INFO DRT-0195] Start 0th optimization iteration.

393 [INFO DRT-0199]   Number of violations = 711042.
394 Viol/Layer      Metal1   Via1 Metal2   Via2 Metal3   Via3 Metal4   Via4 Metal5   Via5 Metal6   Via6 Metal7 Metal8
395 Corner Spacing       0      0   2612      0    201      0      9      0      8      0      0      0      0      0
396 Cut Spacing          0    641      0   6973      0   1214      0     59      0      0      0      0      0      0
397 EOL Spacing        604      0  38542      0   7872      0     92      0      5      0      1      0      0      0
398 Metal Spacing     1749      0  15726      0    456      0     31      0     95      0      1      0      9      0
399 NS Metal             2      0      9      0      0      0      0      0      0      0      0      0      0      0
400 Recheck           2864      0 108070      0 315882      0   6426      0    751      0   1182      0    516      3
401 Short              125     22 172727   1400  22716    417    462      5    468     12     17      2     64      0
402 [INFO DRT-0267] cpu time = 04:22:31, elapsed time = 00:57:24, memory = 7106.08 (MB), peak = 8475.70 (MB)
403 Total wire length = 6707639 um.

789 [INFO DRT-0199]   Number of violations = 0.
790 [INFO DRT-0267] cpu time = 00:00:00, elapsed time = 00:00:00, memory = 6361.03 (MB), peak = 8475.70 (MB)
791 Total wire length = 6674246 um.
792 Total wire length on LAYER Metal1 = 8373 um.
793 Total wire length on LAYER Metal2 = 2343428 um.
794 Total wire length on LAYER Metal3 = 2768303 um.
795 Total wire length on LAYER Metal4 = 1095236 um.
796 Total wire length on LAYER Metal5 = 249966 um.
797 Total wire length on LAYER Metal6 = 77871 um.
798 Total wire length on LAYER Metal7 = 116688 um.
799 Total wire length on LAYER Metal8 = 13146 um.
800 Total wire length on LAYER Metal9 = 1231 um.
801 Total number of vias = 2166082.

846 [INFO DRT-0267] cpu time = 13:50:26, elapsed time = 02:15:52, memory = 6361.03 (MB), peak = 8475.70 (MB)
stefanottili commented 1 year ago

I'm closing this since drt 2023 does route without violations. Filed two follow up issues.