I was able to WA the overlapp issue by tweaking th...
# openlane
u
I was able to WA the overlapp issue by tweaking the utilization, now is in detailed routing, however, it doesn’t seem to blow much steam, I think openroad was using multiple cores in this step, can it be enabled ? Currently using only 10% of CPU
Ahá, there is a threads parameter that needs to be passed to TritonRoute.params
Copy code
lef:./objects/sw130/copperv/merged_spacing.lef
def:./results/sw130/copperv/4_cts.def
guide:./results/sw130/copperv/route.guide
output:./results/sw130/copperv/5_route.def
outputTA:./objects/sw130/copperv/5_route_TA.def
outputguide:./results/sw130/copperv/output_guide.mod
outputDRC:./reports/sw130/copperv/5_route_drc.rpt
outputMaze:./results/sw130/copperv/maze.log
threads:16
cpxthreads:1
verbose:1
gap:0
timeout:2400
a
Hmm. Did it actually use 16 threads with that parameters file (i.e., if you check with
top
or similar)? Last time we tired it, threading wasn't yet implemented, but that was long ago.
u
Yes, top and the laptop FAN are in agreement
Copy code
PID    COMMAND      %CPU   TIME     #TH    #WQ  #PORTS MEM    PURG   CMPRS  PGRP  PPID  STATE    BOOSTS           %CPU_ME %CPU_OTHRS UID  FAULTS     COW         MSGSENT     MSGRECV
53016  TritonRoute  546.3  49:33.36 16/16  0    41     283M-  0B     0B     52845 52845 running  *0[1]            0.00000 0.00000    501  4200989+   99          281         90
a
Thanks! will add a config to control it then 👍
u
Btw I don’t know what that cpxthreads is about, do you?
a
It doesn't seem to be a valid parameter. From the source code, here are the valid ones:
Copy code
if (field == "lef")           { LEF_FILE = value; ++readParamCnt;}
        else if (field == "def")      { DEF_FILE = value; REF_OUT_FILE = DEF_FILE; ++readParamCnt;}
        else if (field == "guide")    { GUIDE_FILE = value; ++readParamCnt;}
        else if (field == "outputTA") { OUTTA_FILE = value; ++readParamCnt;}
        else if (field == "output")   { OUT_FILE = value; ++readParamCnt;}
        else if (field == "outputguide") { OUTGUIDE_FILE = value; ++readParamCnt;}
        else if (field == "outputMaze") { OUT_MAZE_FILE = value; ++readParamCnt;}
        else if (field == "outputDRC") { DRC_RPT_FILE = value; ++readParamCnt;}
        else if (field == "threads")  { MAX_THREADS = atoi(value.c_str()); ++readParamCnt;}
        else if (field == "verbose")    VERBOSE = atoi(value.c_str());
        else if (field == "dbProcessNode") { DBPROCESSNODE = value; ++readParamCnt;}
        else if (field == "drouteOnGridOnlyPrefWireBottomLayerNum") { ONGRIDONLY_WIRE_PREF_BOTTOMLAYERNUM = atoi(value.c_str()); ++readParamCnt;}
        else if (field == "drouteOnGridOnlyPrefWireTopLayerNum") { ONGRIDONLY_WIRE_PREF_TOPLAYERNUM = atoi(value.c_str()); ++readParamCnt;}
        else if (field == "drouteOnGridOnlyNonPrefWireBottomLayerNum") { ONGRIDONLY_WIRE_NONPREF_BOTTOMLAYERNUM = atoi(value.c_str()); ++readParamCnt;}
        else if (field == "drouteOnGridOnlyNonPrefWireTopLayerNum") { ONGRIDONLY_WIRE_NONPREF_TOPLAYERNUM = atoi(value.c_str()); ++readParamCnt;}
        else if (field == "drouteOnGridOnlyViaBottomLayerNum") { ONGRIDONLY_VIA_BOTTOMLAYERNUM = atoi(value.c_str()); ++readParamCnt;}
        else if (field == "drouteOnGridOnlyViaTopLayerNum") { ONGRIDONLY_VIA_TOPLAYERNUM = atoi(value.c_str()); ++readParamCnt;}
        else if (field == "drouteViaInPinBottomLayerNum") { VIAINPIN_BOTTOMLAYERNUM = atoi(value.c_str()); ++readParamCnt;}
        else if (field == "drouteViaInPinTopLayerNum") { VIAINPIN_TOPLAYERNUM = atoi(value.c_str()); ++readParamCnt;}
        else if (field == "drouteEndIterNum") { END_ITERATION = atoi(value.c_str()); ++readParamCnt;}
        else if (field == "OR_SEED") {OR_SEED = atoi(value.c_str()); ++readParamCnt;}
        else if (field == "OR_K") {OR_K = atof(value.c_str()); ++readParamCnt;}
      }
u
I see, probably legacy stuff, thanks