相关阅读Design Compilerhttps://blog.csdn.net/weixin_45791458/category_12738116.html?spm1001.2014.3001.5482DC Ultra引入的多核技术允许使用多个CPU核心来提高工具速度减少运行时间。例如在综合过程中多核处理会把大型的优化任务划分成较小的任务并分配到多个核心上处理如图1所示。需要注意的是每八个核心需要一套额外的License。图1 综合时的多核处理启用多核处理要启用多核处理可以使用set_host_options命令例如下面的命令设置最大CPU核心数为6-max_cores选项的指定范围是1到16的整数值。dcnxt_shell set_host_options -max_cores 6 dcnxt_shell compile_ultra ***** Information: Running optimization using a maximum of 6 cores. (OPT-1500) *****从2014版本开始该命令会检查执行主机上可用的核心数通过/proc/cpuinfo文件。如果指定的核心数大于实际可用核心数工具会将最大核心数限制为可用的核心数并发出以下警告。Warning: You requested 16 cores. However, the host *** only has 8 available cores. The tool will ignore the request and use -max_cores 8. (UIO-230)从2014版本开始该命令还会检查主机的当前负载情况通过/proc/loadavg文件。如果主机负载过重工具会自动使用更少的核心数以避免整体系统变慢并发出以下警告。Warning: You requested 14 cores. However, load on host *** is 10.150000. Tool will ignore the request and use 6 cores. (UIO-231)核心数自动调整的方式为首先将主机当前平均负载的平均值向下取整再用主机可用的核心数减去该值得到新的核心数上限。需要注意的是该调整只会在执行set_host_options命令时进行一次。如果之后机器负载发生了较大的变化则已经设置好的核心数不会随着负载变化而动态调整。若要禁用检查并强制使用指定的核心数可以将disable_multicore_resource_checks变量默认值为false设置为true该变量由2014版本引入但如果主机缺少必要的核心数或本身机器负载较高工具运行速度可能会变慢。如果某一个进程无论是主进程还是子进程异常退出则所有其他进程也会一起终止。使用report_host_options命令可以报告当前的多核运行设置情况使用remove_host_options命令可以关闭多核运行即将核心数设置为1。测量运行时间如果启用多核处理应使用wall clock时间来衡量加速效果而不是CPU时间如下报告所示。dcnxt_shell report_qor **************************************** Report : qor ... **************************************** ... Hostname: machine Compile CPU Statistics ----------------------------------------- Resource Sharing: 21.54 Logic Optimization: 182.63 Mapping Optimization: 230.79 ----------------------------------------- Overall Compile Time: 631.32 Overall Compile Wall Clock Time: 288.11进程核心数量自动调整即使set_host_options命令已经确定了可使用的核心数在综合过程中Design Compiler仍然需要不断创建新的子进程来完成并行优化。当系统内存不足或操作系统拒绝创建新的进程时这些并行进程可能无法正常启动。2019版本引入的compile_adjust_max_processes_used变量正是用于处理这种情况。当该变量设置为1默认值时且overcommit_memory参数为2即禁止内存过量分配如果系统资源不足无法并行运行新的进程工具不会立即终止运行而是自动减少并行进程核心的数量后继续执行并产生下面的警告Warning: There is insufficient memory to launch all jobs, reducing the number of parallel processes to *** for this session. Tool performance may be impacted. Please set overcommit_memory to 0. (UIO-306)当该变量设置为0时禁止自动调整并行进程数量。如果系统资源不足工具不会降低并行度而是按照用户指定的核心数尝试创建进程此时如果overcommit_memory参数为2即禁止内存过量分配操作系统可能错误地使用写时复制(Copy-on-WriteCOW)导致虚拟内存不足工具将并发出以下错误并中止。Error: Insufficient virtual memory. Please increase swap space, or reduce other processes on this host. (OPT-1603)当该变量设置为2时工具将无视overcommit_memory参数的设置无论其为0即启发式内存分配策略、1即始终允许内存过量分配还是2即禁止内存过量分配都根据资源情况动态减少实际使用的核心数。在多核处理中最小化峰值内存2022版本引入的-minimize_peak_mem选项是一项多核内存优化选项用于在多核综合过程中降低峰值内存占用。多核综合采用Master–Worker并行模式通过fork()创建多个工作进程Linux利用写时复制共享父进程内存。当系统启用透明大页(Transparent Huge PagesTHP)时工作进程对共享大页的修改可能触发整页复制而不是仅复制实际修改的数据从而导致峰值内存显著增加尤其在大规模设计中更为明显。启用该选项后工具会在综合期间动态限制透明大页的使用以减少写时复制引起的额外内存开销从而降低多核综合的峰值内存消耗提高大型设计综合的稳定性但运行时间通常会增加约3%。该选项仅适用于Design Compiler NXT并要求Linux内核版本不低于 3.1。否则综合结束后工具不会自动重新启用透明大页因此可能会对后续程序的运行性能产生更大的影响。% dcnxt_shell -minimize_peak_mem Information: Disabling Transparent Huge Page TLB optimization. (MEM-11)自适应多线程2022版本引入的dcnxt_adaptive_multithreading变量用于控制Design Compiler NXT的自适应多线程功能默认为true。工具会周期性监测主机当前可用的物理核心数和机器负载并根据实际可用的CPU资源动态调整多线程工作负载以提高多线程资源利用率。当机器负载持续高于物理核心数时自适应多线程能够避免因CPU资源竞争导致的线程调度开销从而改善综合运行时间当机器负载较低时则不会影响工具性能。该功能仅适用于Design Compiler NXT并会取代disable_multicore_resource_checks变量控制的资源检查机制工具不再依赖综合开始前的静态资源检查而是在运行过程中根据系统资源变化动态调整多线程行为从而获得更好的运行效率。禁止自适应多线程2024版本引入的dcnxt_adaptive_disable_for_sched_affinity变量用于控制当系统检测到CPU调度亲和性(Scheduling Affinity)设置时是否禁用自适应多线程功能默认为true。CPU调度亲和性通常由taskset、numactl或作业调度系统如Slurm、LSF设置用于将进程限制在指定的CPU核心上运行。在这种情况下操作系统提供的CPU利用率和负载信息可能无法准确反映工具实际能够使用的计算资源从而导致自适应多线程对可用核心数作出错误判断影响线程调度效果。因此默认情况下当检测到手动管理CPU核心分配时Design Compiler NXT会自动关闭自适应多线程以避免错误的动态调整如果用户确认当前调度亲和性配置不会影响资源统计也可以将该变量设置为false继续启用自适应多线程功能该功能仅适用于Design Compiler NXT。