Closed stefanottili closed 1 year 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.
The tests are run with https://github.com/The-OpenROAD-Project/OpenROAD/blob/master/src/drt/test/run-ispd.py
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.
The ispd benchmark comes with guides so you shouldn't be running global route at all.
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.
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).
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.
[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.
You can always file an issue if you think something needs improving.
Please re-open if you're facing an issue with test case again.
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
There is a read_guides command. I think the runtime is worth looking at.
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)
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.
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.
When you ran grt what did you set for the min routing layer?
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
I just ran with your script and no crash using aed70e329e5b7c072efcc92a370c68dfe5b5a54d
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)
I'm closing this since drt 2023 does route without violations. Filed two follow up issues.
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