CN114115887A - 具有用于快速分区编译的动态分区负载均衡的自适应调度 - Google Patents
具有用于快速分区编译的动态分区负载均衡的自适应调度 Download PDFInfo
- Publication number
- CN114115887A CN114115887A CN202110997383.4A CN202110997383A CN114115887A CN 114115887 A CN114115887 A CN 114115887A CN 202110997383 A CN202110997383 A CN 202110997383A CN 114115887 A CN114115887 A CN 114115887A
- Authority
- CN
- China
- Prior art keywords
- hardware resources
- amount
- estimate
- eda
- job
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
- G06F9/505—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering the load
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
- G06F9/5044—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering hardware capabilities
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/4881—Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5016—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/50—Indexing scheme relating to G06F9/50
- G06F2209/503—Resource availability
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本文公开了具有用于快速分区编译的动态分区负载均衡的自适应调度的方法、系统和计算机可读存储介质实施例。一个实施例包括:通过至少一个处理器,针对设计说明,经由多个计算元件检测可由电子设计自动化(EDA)进程使用的可用硬件资源量,并分析设计说明以生成将被EDA进程使用的硬件资源量的估计值。在一些进一步的实施例中,至少一个处理器可将估计值与可用硬件资源量进行比较,并调整用于EDA进程的存储器分配或者被EDA进程并行使用的多个计算元件中指定数目的计算元件。此外,根据一些附加实施例,至少一个处理器可计算多个计算元件的加权负载平均。
Description
相关申请的交叉参考
本申请要求于2020年8月31日提交的标题为“Adaptive Scheduling withDynamic Load Balancing for Fast Partition Compilation”的美国临时专利申请第63/072,401号的利益,其通过引用全部并入本文。
技术领域
本发明总体上涉及提高电子设计自动化(EDA)工具的性能。更具体地,本发明涉及根据设计说明提高分区编译的效率和速度。
背景技术
现代EDA工具可允许使用多个分区(partition)来编译硬件设计说明或描述(例如,来自更高级别的硬件描述语言)。尽管使用多个分区可允许工具管理复杂和并行化的工作负载,但对于可能相对较大且特别复杂的设计,最终的资源使用和总体性能通常不是最佳。
因此,尝试并行化工作负载,即使使用分布式的基于云的系统,也可能导致计算资源的低效使用,对使用相同计算资源池的其他处理产生不利影响。这种影响可包括总体编译时间的减慢,或者甚至是可使编译处理停滞的死锁。然而,对于工具的用户来说,如何将计算资源分配给复杂的编译作业以提高编译的效率和速度往往并不明显。
通过更改编译参数来提高性能的用户尝试可能会随机影响性能指标,或者可导致性能进一步降低,从而进一步恶化性能。类似地,传统的自动化技术缺乏足够的成熟度,并且它们会产生类似的有问题的结果。
发明内容
为解决上述问题,本公开的一个方面提供了一种方法,该方法包括:通过至少一个处理器,将设计说明划分成多个分区;通过所述至少一个处理器,检测可被电子设计自动化EDA进程使用的可用硬件资源量,以经由多个计算元件编译所述设计说明;通过所述至少一个处理器,确定实际硬件资源量以编译所述多个分区中的至少一个分区;通过所述至少一个处理器,确定将被所述EDA进程使用的硬件资源量的估计值,以基于所述实际硬件资源量编译所述多个分区中的剩余分区;通过所述至少一个处理器,将所述估计值与所述可用硬件资源量进行比较;以及通过所述至少一个处理器,基于所述估计值和所述可用硬件资源量之间的差值并且至少部分地基于所述剩余分区的数目来调整所述多个计算元件中指定数目的计算元件,其中所述指定数目的计算元件可被所述EDA进程并行使用。
本公开的另一方面提供了一种系统,包括:存储器;以及至少一个处理器,耦合到所述存储器,并且被配置为执行包括以下项的操作:将设计说明划分成多个分区;检测可被电子设计自动化EDA进程使用的可用硬件资源量,以经由多个计算元件编译所述设计说明;确定编译所述多个分区中的至少一个分区的实际硬件资源量;基于所述实际硬件资源量确定将被所述EDA进程使用的、用于编译所述多个分区中的剩余分区的硬件资源量的估计值;将所述估计值与所述可用硬件资源量进行比较;以及基于所述估计值和所述可用硬件资源量之间的差值并且至少部分地基于所述剩余分区的数目来调整所述多个计算元件中指定数目的计算元件,其中所述指定数目的计算元件可被所述EDA进程并行使用。
本公开的又一方面提供了一种非暂态计算机可读存储介质,存储有当被至少一个处理器执行时使所述至少一个处理器执行包括以下项的操作的指令:将设计说明划分成多个分区;检测可被电子设计自动化EDA进程使用的可用硬件资源量,以经由多个计算元件编译所述设计说明;确定编译所述多个分区中的至少一个分区的实际硬件资源量;基于所述实际硬件资源量确定将被所述EDA进程使用的、用于编译所述多个分区中的剩余分区硬件资源量的估计值;将所述估计值与所述可用硬件资源量进行比较;以及基于所述估计值和所述可用硬件资源量之间的差值并且至少部分地基于所述剩余分区的数目来调整所述多个计算元件中指定数目的计算元件,其中所述指定数目的计算元件可被所述EDA进程并行使用。
附图说明
通过下面给出的详细描述和本公开实施例的附图,将更全面地理解本公开。附图用于提供对本公开实施例的认知和理解,并且不将本公开的范围限于这些具体实施例。此外,附图不需要按比例绘制。
图1示出了根据本公开的一些实施例的如何将设计划分成多个部分以分别进行编译、在细化处理之前或期间将多个结果拼接回到一起的示例。
图2示出了根据本公开的一些实施例的显示快速分区编译结果的报告的示例。
图3示出了根据本公开的一些实施例的使用三种不同的并行设置来实施应用于四种不同设计的快速分区编译的实验结果。
图4示出了根据本公开的一些实施例的包括动态分区负载均衡以及用于分区编译的自适应调度的考虑的示例设计流程。
图5示出了根据本公开的一些实施例的从动态分区负载均衡处理登入的示例输出消息。
图6示出了根据本公开的一些实施例的使用不同分区编译方法(包括快速分区编译的配置)测量峰值存储消耗和时间的实验结果。
图7示出了根据本公开的一些实施例的作为使用具有用于快速分区编译的动态分区负载均衡的自适应调度和存储器分配的实验结果、在编译多个分区的过程中的存储使用情况。
图8示出了根据本公开的一些实施例的作为使用具有用于快速分区编译的动态分区负载均衡的自适应调度和存储器分配的实验的后续迭代结果、随时间推移正在运行的任务和已完成的任务。
图9示出了根据本公开的一些实施例的示例性分区编译处理及其对应模型集的流程图和相应概念图。
图10示出了根据本公开的一些实施例的实施本文所述的一些增强技术的方法的流程图。
图11示出了根据本公开的一些实施例的在集成电路的设计和制造期间使用的各种处理的流程图。
图12示出了根据本公开的一些实施例的示例仿真系统的示图。
图13示出了本公开的实施例可在其中操作的示例计算机系统的示图。
在附图中,类似的参考标号通常表示相同或相似的元件。此外,参考标号最左边的数字通常也可以识别参考标号首次出现的附图。
具体实施方式
本公开的各个方面涉及具有快速分区编译的自适应调度。本公开的进一步方面涉及用于快速分区编译的动态分区负载均衡。
如上所述,硬件设计说明或说明书可分为多个部分,它们将别单独编译。硬件设计说明或描述的多个部分可以被称为多个分区。使用多个分区可允许EDA工具管理复杂和并行化工作负载。当使用传统的EDA工具来管理复杂和并行化工作负载时,对于可能相对较大且特别复杂的设计来说,由此产生的资源使用和总体性能可能存在问题。此外,在存在时间约束和/或资源约束的情况下,用于大型或复杂设计的特定编译可能无法及时完成,从而拖延进度并延迟项目交付。
本公开的各个方面可单独使用或相互结合使用以解决这些问题,提高并行性和操作速度,智能地响应编译、细化、仿真、测试等的目标设计。附加地或备选地,本公开的方面可响应于设计说明的参数和运行上述操作的底层主机来实施。目标设计可划分成多个分区进行编译。可以动态地平衡计算资源来编译多个分区,从而减少多个分区的总编译时间并实现快速分区编译。例如,根据一些实施例,在可能的情况下,分配更多CPU核可以可伸缩地提高编译多个分区的性能,至少直到所分配核的数目与将别编译的分区的数目匹配为止。
本公开的这些方面和其他方面中的每一方面都带来了技术优势,能够使组织和用户高效地使用可用的硬件资源,同时避免或缓解例如潜在过载或底层主机利用不足的影响。其他技术优势也从贯穿本公开的描述和附图中显而易见。
图1示出了根据本公开的一些实施例的如何将设计划分为多个部分以单独编译,在细化处理之前或期间将多个结果拼接回到一起的示例图100。尽管可以串行地执行编译,但在一些默认情况下,其他配置可允许使用标志(诸如-fastpartcomp=j<X>,其中<X>表示将要生成的并行处理的数目,例如使用系统调用)来并行执行(也被称为“激发”)各种作业。在具有fastpartcomp标志的快速分区编译中,可将多个X并行处理分配给fastpartcomp标志以编译多个分区。以这种方式,当分析完整设计(“完整设计解析”)并且并行地编译单独分区(“子设计解析”)时,可以减少总体编译时间。在完整设计解析中,可以分析整个硬件设计说明或描述,以识别和创建多个分区。在子设计解析中,硬件设计说明或描述的多个分区可被加载到存储器中进行并行编译。根据一些实施例,如图1的示图100所示,在后续细化步骤之前或期间,在将完整设计划分为多个分区并且编译每个分区之后,可在拼接阶段将多个分区的编译结果拼接到一起,以创建整个硬件设计说明或说明书的共享库和仿真二进制文件的组合集。
性能可能不会显著受益于相对较小值的并行处理(即,如上文所述,fastpartcomp标志中的小<X>参数(自变数))。另一方面,较大值可使主机系统过载。如果用户盲目地签出工作站、集群机构建集群、远程或基于云的虚拟机(VM)等,则用户可能不容易或不可能确定与操纵作业的并行处理的计算元素的改进数目相对应的并行处理的有效值。
考虑到当前的机器负载并且分解给定目标设计的特定系统要求,EDA工具可通过应用自动检测系统参数的增强技术来解决该未知值,从而确定改进的参数,使得在给定目标构建系统的当前负载和配置的情况下,编译生成与机器可处理一样多的子分区处理(但不会显著增加)。EDA工具自动检测到的系统参数可包括硬件资源(包括物理或虚拟机资源),并且可附加地考虑为在相同硬件资源上运行的其他处理、线程、作业、任务等保留的资源。
这种配置甚至对专用机器也很有用,在专用机器中,分区编译可自动分配给大多数可用核,而不是将分区编译限于用户特定的悲观值(pessimistic value)。
在一些实施例中,用户可以不为快速分区编译指定并行处理的值。通过非限制性示例,用户可以为标志fastpartcomp指定字母“N”,或-fastpartcomp=jN,其中,“N”字面上是N(字母表的第十四个字母)以指示未指定任何值。一旦该标志被处理,可以调用自适应调度器。附加地或备选地,在一些实施例中,自适应调度器可通过单独的标志、配置模式或环境变量(例如,诸如-partcomp=adaptive_sched的示例性调用,利用值为adaptive_sched的标志partcomp,可以调用自适应调度器进行快速分区编译)来设置。
对于确定将要生成的并行处理的数目的自适应调度器,自适应调度器可考虑机器负载(例如,通过可用CPU核的数目进行缩放,下面将进一步详细描述)以及为并发代码生成指定的值(例如,使用诸如-jM的标志来指定由子分区用于并发代码生成或分区编译的M个线程的值,下面将进一步详细描述)。
CPU(计算元件)的机器负载和可用性
在一些实施例中,负载是机器的计算参与度的测量,例如,由机器执行的计算工作量或处理量。负载可表示为数字,其中0为空闲,1为100%占用。负载还可以测量等待机器和其他系统资源执行计算工作或处理的计算工作或处理量。
例如,负载为5可意味着5个处理正在等待机器和其他系统资源来执行这5个处理。对于单CPU机器来说,负载为1表示CPU被完全占用,没有空闲时间。然而,对于具有N个CPU核的机器来说,完全占用数变得等于N。因此,虽然单CPU机器上的负载为1可表示它已被完全占用,但双CPU(或双核)机器上的负载为1可表示机器被占用50%。
用户可能需要知道当前系统的CPU负载信息,以便为分区编译分配计算资源。用户可利用uptime命令查询CPU负载信息。查询结果或uptime命令可显示当前系统的CPU负载平均。一个样例输出是:21:18:09up 107days,23:52,650users,load average:3.12,4.31,4.11。以上uptime输出末尾处示出的平均负载(load average)表示为三个数字:平均1分钟、平均5分钟和平均15分钟。在这种情况下,在该机器具有20个计算元件(例如,CPU核(nproc))的情况下,负载平均为3-4意味着该机器相对自由。
使用nproc和uptime的输出,进一步可以应用启发式(heuristic),例如找到有效值N。在一个实施例中,根据一些实施例,可以使用三个负载的加权平均值,其中最大权重被给予一分钟平均值,而最小权重被给予十五分钟平均值。
用于计算N1(N基于机器负载)的示例启发式可如下:N1=NPROC-(X*LoadAverage15+Y*LoadAverage5+Z*LoadAverage1)/(X+Y+Z),其中,NPROC是机器中的计算元件(例如,CPU核)的数目,LoadAverage15是机器的15分钟负载平均值,LoadAverage5是机器的五分钟负载平均值,LoadAverage1是机器的一分钟负载平均值,以及X、Y和Z是表示用于各自负载平均值的权重的数字。在一个示例中,对于加权负载平均值,X可以是1,Y可以是2,以及Z可以是3。
一旦获得N1,就可以检查并行或并发代码生成标志的值。如果已经提供针对并发代码生成或分区编译由子分区使用的线程值(例如,已经提供-jM的值M),则N1除以M以查找实际的CPU计数,因为子分区可使用M个线程进行代码生成(编译)。
报告变化
例如,当调用自适应调度器或使用-fastpartcomp=jN时,在快速分区编译处理中可以向用户显示以下消息:“在分析机器负载和可用计算资源之后,fastpartcomp已被设置为-fastpartcomp=j5”。在分析机器负载和可用计算资源之后,该消息可以向用户通知五个并行处理可用于快速分区编译。
图2示出了根据本公开的一些实施例的示出快速分区编译结果的报告200的示例。当使用自适应fastpartcomp时,还可以在输出报告中显示包含其上执行作业的CPU的附加列(图2所示最右边的列)。以这种方式,用户可以看到如何调度不同的作业。图2示出了具有fastpartcomp的示例报告。
即使该报告可能不显示确切的处理器定义(例如,分配给快速分区编译处理的处理器的实际数目,也称为“亲和力(affinity)”,其可在处理执行期间发生变化),该报告也可以给出快速分区编译处理使用的处理器的指示信息。其他报告机制可通过这种方式重新配置来获得类似输出。
自适应调度性能结果
图3示出了根据本发明的一些实施例的使用三种不同的并行设置来实施应用于四种不同设计的快速分区编译的实验结果300。作为性能测试,具有多个分区的若干基准已被用于验证该更改(例如,自动选择N的值)。运行每个基准三次,每次使用不同的并行设置(例如,j2、j4和jN,其中,j2表示两个并行处理用于快速分区编译,j4表示两个并行处理用于快速分区编译,jN表示调用自适应调度器并且使用动态数目的并行处理进行快速分区编译),如图3所示,可以看到性能的差异。
在这些实验中,可利用命令(诸如使用命令qrsh)在远程机器上执行作业,以在负载共享设施(LSF)处随机选择的机器上执行作业,从而拥有广泛的机器。LSF跨现有计算系统资源分配工作,以创建共享、可扩展和容错的基础架构,这提供了更快、更可靠的工作负载性能并降低了成本。自适应负载调度器(jN)一致地给出更快的结果,即使在机器被加载时(如图3最右边的“设计D”所见)。由jN产生的并行处理的数目由分别与设计A-D的每个设计相对应的每个条形图中的右侧条所示。
可选的下一步可包括添加动态分区负载均衡器(DPB),这可以具有积极地即时减少或增加作业运行时的并行调用次数的效果。这一方面可进一步考虑存储消耗的维度,使得至少在机器上的空闲存储相对于测试中的特定设计的给定工作负载或给定机器上运行的总工作负载相对受限时的低存储情况下,主机可调用合理大小的分区。
动态分区负载均衡
图4示出了根据本公开的一些实施例的示例设计流程400,包括动态分区负载均衡以及用于分区编译的自适应调度的考虑。如上所述,用于快速分区编译的自适应调度可加快编译时间,但是可能会对峰值存储产生负面影响,因为多个分区可同时达到峰值,例如在一些用例中使得机器存储使用率攀升到不希望的高水平。
在一些实施例中,动态分区负载均衡可以避免、缓解或解决该潜在问题,例如通过使用学习-监控-均衡方法。图4中示出了考虑DPB实施的示例流程。
与自适应调度器一样,动态分区负载均衡器可使用诸如-partcomp=dpb的标志来调用,其中,partcomp标志被分配有dpb以调用动态分区负载均衡器。此外,可以在调试模式下调用DPB,其中其可以打印调度决策或其他信息,例如通过指定诸如-partcomp=dpb:dbg的附加子标志,其中dbg的子标志可调用动态分区负载均衡器的调试模式。
DPB可遵循各种流(诸如划痕流和增量流)以利于做出不同的决策。例如,在划痕流中,可以执行前几组作业的分区编译。保守的计算资源(例如,被使用的可用CPU的多达三分之一)可用于执行前几组作业或分区。在划痕流之后的增量流中,在划痕流中的分区编译期间每个分区的存储使用数据已经可用。该数据可能是分区在重新编译期间可占用的峰值存储的合理起始假设。在增量流中,在一个实施例中,为达到该决策而遵循的步骤可以如下执行:
步骤1:在调用完整设计解析之前,DPB可在划痕流中的分区编译期间研究每个分区的存储使用数据。
步骤2:在运行完整设计解析后,代替生成脚本或配置来构建每个分区的分区编译规则或者处理用于分区编译的makefiles,可以将执行传递给DPB。
步骤3:DPB可捕获将被重新编译的分区。
步骤4:DPB可计算供DPB使用的核的数目(例如,根据自适应调度器或类似自适应调度算法)。
步骤5:DPB可逐个或并行地生成分区,但是也可以等待直到满足以下任一条件:
条件A:所使用CPU的数目小于可用核的数目;或者
条件B:预期存储消耗小于可用存储。
可用存储可使用以下公式计算:
Mavail={Msysfree–(Manticipated–Mactual)}*Celastic,其中
Mavail=可用目标存储
Msysfree=系统自由存储
Manticipated=已生成作业的预期存储(使用划痕数据)
Mactual=已生成作业的实际存储
Celastic=基于当前机器配置动态确定的参数,可进行调整以允许机器上空闲CPU的净空(headroom),其在机器之间可以是弹性的,但对于一个特定的机器说明(基于可用存储和交换空间)或上述因素的组合是恒定的,除其他考虑外。例如,Celastic的可具有0.95的默认值。
因此,对于将被执行的作业,其预期存储使用可小于可用存储(例如,如果预期存储不足,则可以不执行作业)。
条件C:如果将被执行的作业占用太多的计算资源(例如,负载)并且无法生成,则DPB可以尝试从挂起作业中生成下一个作业,该作业占用的计算资源少于当前在尝试生成时确定占用太多计算资源的作业。
条件D:如果无法激发作业,并且当前或下一预期循环中没有正在运行的作业,DPB可激发占用最少计算资源的作业,以保持至少一个作业运行,从而避免空闲时间。这样,利用DPB的编译时性能的最坏情况可能不会比串行的单线程编译更糟。
使用DPB的上述步骤和条件,可以看到以下结果:
可以使用可用CPU的最大数目;
机器可安全地消耗更多存储;和/或
任何机器的吞吐量都可以增加。
这可以称为学习-监控-均衡方法,其中
DPB可以从划痕编译学习分区存储使用,
DPB可密切注意已经生成的分区如何允许,由此跟踪划痕和增量分区之间可增加的任何差异,以及
DPB可调整Celastic并接管make,以继续在给定机器上的负载和存储之间保持平衡。
在划痕流中,除了“预期存储”值可丢失或省略外,步骤可与增量存储保持相同,因为历史信息可能不可用。在这种情况下,可以适当地激发前几组作业,例如利用多达三分之一的可用CPU。
一旦任一个作业完成,DPB可检查其分区权重(例如,执行分区所需的计算资源)和实际分区存储使用,并且启发式地更新其他挂起分区的估计存储使用,以减少实际和估计存储使用之间的差异。在此之后,作业可能会以不太保守的“完整模式”进行处理,其中可使用大部分或所有的可用CPU。
每个完成的分区可返回到DPB,并且可以计算估计和实际存储使用。如果估计存储使用和实际存储使用相差太远,则使用从所有已完成分区中获得的知识重新计算估计值。以这种方式,DPB可基于输入设计以及基于可用硬件和机器负载来自动地适应(例如,通过自学习)而变得更智能或以其他方式更加有效。本文其他地方进一步描述了这些处理的附加细节。
报告和调试
图5示出了根据本公开的一些实施例的从动态分区负载均衡处理记录的示例输出消息500。报告机制可与包括自适应调度、动态分区负载均衡或其任何组合的分区编译集成。
当输出此类消息时,任何此类消息都可存储在日志文件中,例如,创建或附加到名为“dpb.log”或任何其他合适名称的文件。例如,输出消息可打印具有类似于regrun输出消息的时间戳的调度的任何步骤。图5中示出了一个样例输出,在一个实施例中,用于至少三个不同的分区,分别命名为partition_A、partition_B和partition_C。
DPB性能结果
图6示出了根据本公开的一个实施例的使用不同的分区编译方法(包括快速分区编译的配置)测量峰值存储消耗和时间的实验结果600。从结果观察如下:DPB将总编译时间(CT)和分区CT提高了30%,将每个CT度量减少大约25分钟。
本文所述的DPB算法已经使用实验基准和实际场景进行了测试。对于实验基准,DPB在不增加峰值存储的情况下,根据经验减少了编译时间。在具有94个分区的给定场景中,在给定服务器场(例如,构建集群)随机选择的机器上激发编译作业。获得的结果如图6所示。
图7示出了根据本公开的一些实施例的在作为使用具有用于快速分区编译的动态分区负载均衡的自适应调度和存储器分配的实验结果、在编译多个分区的过程中的存储使用。在该特定用例中,DPB的存储消耗更高,在共享机器上以LSF运行,该共享机器具有为本示例中描述的分区编译的特定测试提供的100GB的存储。
比较这些测试,结果表明DPB通过增加CPU的数目、增加占用的存储但没有使系统过载而如预期一样工作。图7在此示出了该特定实施例的使用模式的存储使用,随着完成分区的数目在编译多个分区的过程中增加,DPB使用不超过90%的可用存储。
图8示出了根据本公开的一些实施例的作为使用具有用于快速分区编译的动态分区负载均衡的自适应调度和存储器分配的实验的后续迭代结果800,随时间推移正在运行的任务和已完成的任务。
在图8所示的示例中,保守地激发任务,首先使用八个并行CPU。随着DPB在设计复杂性方面改进了其对编译器负载的猜测,DPB根据本文描述的算法和技术针对该用例将并行CPU的数目增加到24个。
在该特定实例中,当只剩下相对较大的分区进行处理时,并发CPU使用降低。如图8所示,90%的分区在总运行时间的20%内完成。
DPB的附加考虑包括可存在运行时间相对较长(耗时)的分区的用例,该分区通过使用硬件资源量的估计的较高比例值来识别,并且该部分将在一组作业的开始而不是结束时调度。如果这种长时间运行的作业可以在分区编译处理开始时或接近开始时进行调度(使所识别的作业优先于其他作业),则DPB和/或自适应调度的总体性能可由此产生进一步的增益。
此外,可选择其他值来改进加权与存储的相关性。为了更早调度长时间运行的分区(优先于其他作业),即使它们需要更多的存储,也可以考虑用于例如度量和启发式的编译时间维度。这方面也可以产生进一步的改善回报。
图9示出了根据本公开的一些实施例的示例分区编译处理及其对应模型集的相应概念图900内的流程图。可以利用应用于任何其他设计的初始特征或元素创建基础模型,作为改进进一步启发式的起点。设计模型可利用基于基础模型提供的估计的特定特征来构建。概念图900经由流程图示出了设计模型和基础模型之间的关系,还映射基础模型元素的子元素(包括构造、复杂性和连接性),作为基础模型的其他可能元素的非穷举采样。
构造的示例包括以下数字和/或尺寸:块(例如,语法元素,诸如Verilog的HDL中的always和/或initial)、类(例如,SystemVerilog)、任务和/或函数,或者用于一些用例的其他HDL内部构造。作为非限制性示例,复杂性可根据基础模型的内部重构或优化(稍后发生以改善基础模型)的概率和/或基于基础模型的理论测量改进基础模型的概率来进行测量。可通过大量信号外部参考、任务调用或函数调用、外部参数定义、包导入或导出等来测量连接性。元素和子元素的该列表并非详尽无遗,仅用于说明目的,而不应被解释为限制。
在902中,在分区期间,可针对每个分区评估基础模型(例如,如图1所示并在本文其他地方描述)。基础模型的评估结果可用作存储估计。例如,根据一些实施例,基础模型的各种元素的客观评估(例如,在其他可能元素中,量化特定结构、复杂性和/或连接性)可指示在给定分区的编译作业的每个线程或任务的代码生成(编译)中可花费多少存储或其他计算资源或时间。
在904中,902的评估结果可用作存储使用估计的“理论”值。存储使用估计的这些理论值与基础值的任何集合一起可形成初始值,作为在904和906之间用于确定所需计算资源并激发将由所需计算资源编译的第一分区集合的起点。
在906中,根据一些实施例,一旦编译了第一分区集合,还可以记录“实际”值(与相应的理论值相对,根据资源或时间测量的性能)。
在908中,可以向设计模型提供任何实际、理论和/或基础参数。出于设计模型的目的,可根据至少一个误差模型(例如,立方、线性、其他统计回归或其他插值技术)分析至少一个给定度量,以确定理论值和实际值之间的差异、相关性或其他关系。这种模型可用于计算“理论”值和“实际”值之间的德尔塔或其他关系或预测。
例如,可以拟合模型来估计给定分区的编译存储使用,诸如使用以下公式:
Pmem=f(Pweight,Pcomplexity,Pconnectivity)+ε,其中
Pmem=用于给定分区P的编译的估计存储使用
Pweight=∑(内部构造、成员类、任务、函数等的权重)
Pcomplexity=∑(每个优化阶段的优化措施的测量)
Pconnectivity=∑(向/从本模块的交叉模块参考的测量)
可以对每个分区成员(例如,类、构造、连接等)执行这种求和,或者使用概率度量来说明复杂性。Epsilon(ε)表示基于用户环境的来自基础模型的错误,诸如针对分区编译的用户设计,也称为设计特定模型(错误模型),对于一些用例可以是立方模型。来自基础模型的错误可使用利用特定用户设计的“理论”值和“实际”值之间的差值创建的设计特定错误模型来进行估计。
对于操作906-914的任何迭代和/或在每个分区完成编译/代码生成之后,与根据每个已完成分区编译的结果确定的任何方差一起,可以动态地更新设计模型(错误模型、立方模型等,从基础模型估计错误),进一步改善任何剩余分区的存储估计的精度。此外,对于增量编译,可以从先前的增量编译回收错误模型,使得先前的错误模型可成为后续增量编译的新启动错误模型。
在910中,可检查任何剩余分区的存在或不存在。假设剩余任何分区(例如,因为并非所有分区都已编译),执行可转到912。否则,如果所有分区都已编译,则执行可继续到916,其中可生成任何报告并停止全部编译处理。
在912中,与上文参照908提到的设计模型处理相关,可根据设计模型计算差值或其他关系、回归、预测等,以确定可在914中激发的后续分区集合(下一集合)。
在914中,一旦激发下一分区集合,执行可再次到达906,可记录对应的下一集合的实际值。每次重新执行(迭代)908,可再次向设计模型提供任何附加值。
在916中,可生成任何报告(例如,如图2所示且在本文别处描述)。为了停止编译处理,可进一步包括任何日志文件的输出,例如包括任何附加消息、代码、报告或作为任何中间值或表示而报告或依赖的信息的其他副本。
并非在所有情况下都需要图9所示流程图的所有步骤来执行本文公开的增强技术。此外,如本领域普通技术人员将理解的,一些步骤可同时执行,或者以与图9所示不同的顺序执行。
图10是示出根据一些实施例的方法1000(处理)的流程图,该方法1000用于操作本文所述的增强技术来实现具有用于快速分区编译的动态分区负载均衡的自适应调度。方法1000可由处理逻辑执行,该处理逻辑可包括硬件(例如,电路、专用逻辑、可编程逻辑、微码等)、软件(例如,在处理设备上执行的指令)或它们的组合。
并非在所有情况下都需要方法1000的所有步骤来执行本文公开的增强技术。此外,如本领域普通技术人员将理解的,方法1000的一些步骤可以同时执行,或者以与图10所示不同的顺序执行。
应参考图1-图9和图11-图13描述方法1000。然而,方法1000不仅限于那些示例实施例。方法1000的步骤可由耦合到至少一个存储设备的至少一个计算机处理器执行。上面参考图13描述了示例处理器和存储设备。在一些实施例中,方法1000可由图13所示的系统部件执行,该系统可包括至少一个处理器和存储器,诸如图13所示的那些。
在1002中,针对设计说明,至少一个处理器1302可被配置(例如,经由存储在非暂态计算机可读存储介质或设备中/上的程序代码或指令)以经由多个计算元件检测将由EDA进程使用的可用硬件资源量。例如,设计说明可包括集成电路设计的硬件描述、设计规则等,诸如本文别处描述的那些。仅举几个非限制性示例,可用硬件资源的检测可经由清单、日志文件、配置文件、按需轮询或探测、检测或发现协议、模型、基础架构即代码系统或框架或等效物中的任一种来提供。
在1004中,例如,至少一个处理器1302可被配置为分析设计说明,以执行包括生成1002中由EDA进程使用的硬件资源量的估计值的操作。根据一些实施例,如何可生成估计的硬件资源量的进一步示例包括对图9所示且在本文别处描述的基础模型和/或设计模型的各种元素或子元素的评估。估计可基于从基础模型得出的“理论”值。附加地或备选地,对于一些用例,可以从经验数据(性能度量或“实际”值)或者理论计算或经验数据的任何混合中得出估计值。
在1006中,至少一个处理器1302可被配置为将估计值与可用硬件资源量进行比较,例如与上面描述的在1002中检测到的量和在1004中生成的估计值相对应。除了在1006中执行的任何比较或者代替在1006中执行的任何比较,可以创建、更新或引用启发式、回归、预测或其他模型,诸如用于确定与预期值的接近度和/或拟合度,和/或为了匹配下一预期值而进行的调整的大小。下面将针对1008讨论进一步的示例。
在1008中,至少一个处理器1302可被配置为至少部分地基于上述1002、1004和/或1006中任一个的结果,调整EDA进程的存储器分配和/或EDA进程并行使用的指定数目的计算元件。为了预测或调整并行处理或存储器分配,至少一个人工智能(AI)处理(包括任何机器学习(ML)处理)可被配置为适应和进化具有用于快速分区编译的动态分区负载均衡的自适应调度的一些方面,以响应可能无法提前确定的日益复杂的情况。本文其他部分描述了适用的数据结构、算法和相关处理。
可以利用为给定分区编译的不同模块或数据包的特征创建ML模型。ML模型的特征稍后可累积到用于正在编译的至少一个分区的所有模块和数据包上。因此,模块可通过对诸如构造和连接的元素进行计数、调整大小和/或加权来进行特征化。
例如,语法块的数目/大小、从/向给定模块的交叉模块引用(XMR)的数目,针对成员类、任务、函数等迭代地计算权重,向XMR添加权重,在编译器的每次内部优化后重新计算权重等等。根据一些实施例,对于数据包、成员类、函数、任务等,可以不同于模块的权重进行加权(例如,相等的权重代替偏向XMR),但是可以进一步为导入和导出的数目提供不同的缩放。对于每个分区编译,可以在分区级别聚合特征。
在这种特征化之后,可以跨内部基准收集特征,考虑包括每个分区编译的编译时间和存储利用率的度量。对于一些用例,可以创建支持向量机或网络(SVM/SVN)并应用于任何其他设计,作为进一步改善启发式的起点。
为了说明方法1000的好处,下文进一步描述了一些需要解决的问题。作为执行方法1000的操作的结果,可以提高计算机器的效率和性能。然而,至少根据本文提供的经验示例,除了已经证明显著的性能收益外,还可以实现其他显著的收益。
例如,在时间和/或计算资源(处理器数目、存储量或两者)的特定约束内,可有足够资源对足够大和/或复杂的设计执行分区编译的作业能够在更严格的约束内完成。因此,在资源使用和总体性能对于可能相对较大且特别复杂的设计可存在问题的情况下,本文公开的增强技术(包括图9和图10的那些)可用于防止大型构建和EDA工作流的进度和项目交付出现成本高昂的延迟和停滞。当面临时间和/或资源约束时,该优势可能更加显著,否则如果仅使用传统工具而不使用本文所述的增强技术,则这些约束可能无法克服。
图11示出了在诸如集成电路的制造品的设计、验证和制造期间用于转换和验证表示集成电路的设计数据和指令的处理1100的示例集合。这些处理中的每一个都可以作为多个模块或操作进行结构化和启用。术语“EDA”表示术语“电子设计自动化”。这些处理从产品理念1110的创建开始,由设计者提供信息,这些信息被转换以创建使用一组EDA进程1112的制造品。当完成设计时,设计被下线1134,即,集成电路的艺术品(例如,几何图案)被发送到制造设施以制造掩模集,然后用于制造集成电路。在下线之后,半导体管芯被制造1136并且封装和组装处理被执行1138,以制造成品集成电路1140。
电路设计或电子结构的规范范围可从低级晶体管材料布局到高级描述语言。使用硬件描述语言(“HDL”)(诸如VHDL、Verilog、SystemVerilog、SystemC、MyHDL或OpenVera),可以使用高级抽象来设计电路和系统。HDL描述可转换为逻辑级寄存器传输级(“RTL”)描述、门级描述、布局级描述或掩模级描述。每个较低的抽象级别(即,抽象程度较低的描述)在设计描述中添加更多有用的细节,例如包括描述的模块的更多细节。抽象程度较低的抽象描述可由计算机生成、从设计库派生或由另一设计自动化处理创建。用于指定更详细描述的较低抽象级别的规范语言的一个示例是SPICE,其用于具有许多模拟组件的电路的详细描述。每个抽象级别的描述能够被该层的相应工具(例如,正式验证工具)使用。设计处理可使用图11所示的序列。本文描述的处理能够被EDA产品(或工具)启用。
在系统设计1114期间,指定将被制造的集成电路的功能。可针对期望特性(诸如功耗、性能、面积(物理和/或代码行)和成本降低等)对设计进行优化。可在此阶段将设计划分为不同类型的模块或组件。
在逻辑设计和功能验证1116期间,用一种或多种描述语言指定电路中的模块或组件,并检查说明的功能精度。例如,可验证电路的组件以生成与所设计的电路或系统的说明要求相匹配的输出。功能验证可使用仿真器和其他程序,诸如测试台发生器、静态HDL检查器和正式验证器。在一些实施例中,称为“仿真器”或“原型系统”的特殊组件系统被用于加速功能验证。
在用于测试的合成和设计1118期间,HDL代码被转换为网表。在一些实施例中,网表可以是图形结构,其中图形结构的边缘表示电路的组件,并且图形结构的节点表示组件如何互连。HDL代码和网表是分层制品,其可被EDA产品用于验证集成电路在制造时是否根据指定设计执行。可针对目标半导体制造技术优化网表。此外,可对成品集成电路进行测试,以验证集成电路是否满足本规范的要求。
在网表验证1120期间,检查网表是否符合定时约束以及是否与HDL代码对应。在设计规划1122期间,构建集成电路的总体平面图,并对定时和顶层布线进行分析。
在布局或物理实施1124期间,发生物理放置(诸如晶体管或电容器的电路组件的定位)和布线(电路组件通过多个导体连接),并且可以执行从库中选择单元以实现特定逻辑功能。如本文所使用的,术语“单元”可指定晶体管、其他组件和互连的集合,其提供布尔逻辑功能(例如,AND、OR、NOT、XOR)或存储功能(诸如触发器或锁存器)。如本文所使用的,电路“块”可指两个或更多个单元。单元和电路块都可以称为模块或组件,并且能够以物理结构和仿真启用。为选定单元(基于“标准单元”)指定参数(诸如大小),并在数据库中可供EDA产品访问。
在分析和提取1126期间,电路功能在布局级别进行验证,这允许对布局设计进行细化。在物理验证1128期间,检查布局设计以确保制造约束是正确的,诸如DRC约束、电气约束、光刻约束,并且电路装置功能与HDL设计说明匹配。在分辨率增强1130期间,布局的几何图形被转换以改进电路设计的制造方式。
在下线期间,创建数据以用于(适当应用光刻增强后)生产光刻掩模。在掩模数据准备1132期间,“下线”数据用于生产光刻掩模,从而用于生产成品集成电路。
计算机系统(诸如图13的计算机系统1300或图12的主机系统1207)的存储子系统可用于存储本文所述的部分或全部EDA产品使用的程序和数据结构以及用于开发库的单元和使用库的物理和逻辑设计的产品。
图12示出了示例仿真环境1200的示图。仿真环境1200可被配置为验证电路设计的功能。仿真环境1200可包括主机系统1207(例如,作为EDA系统一部分的计算机)和仿真系统1202(例如,可编程设备集合,诸如现场可编程门阵列(FPGA)或处理器)。主机系统通过使用编译器1210构造仿真系统来生成数据和信息,以仿真电路设计。待仿真的电路设计也称为待测设计(“DUT”),其中来自仿真的数据和信息用于验证DUT的功能。
主机系统1207可包括一个或多个处理器。在主机系统包括多个处理器的实施例中,本文描述的由主机系统执行的功能可分布在多个处理器之间。主机系统1207可包括编译器1210,以转换以表示DUT的描述语言编写的规范并且生成用于构造仿真系统1202以仿真DUT的数据(例如,二进制数据)和信息。编译器1210可转换、改变、重构DUT、向DUT添加新函数和/或控制DUT的定时。
主机系统1207和仿真系统1202使用由仿真连接承载的信号交换数据和信息。连接可以是但不限于一条或多条电缆,诸如具有与推荐标准232(RS232)或通用串行总线(USB)协议兼容的引脚结构的电缆。连接可以是有线通信介质或网络(诸如局域网)或广域网(诸如因特网)。连接可以是无线通信介质或具有使用诸如蓝牙或IEEE802.11的无线协议的一个或多个接入点的网络。主机系统1207和仿真系统1202可通过诸如网络服务器的第三设备交换数据和信息。
仿真系统1202包括多个FPGA(或其他模块),诸如FPGA 12041和12042以及附加FPGA1204N。每个FPGA可包括一个或多个FPGA接口,FPGA通过该接口连接到其他FPGA(以及可能的其他仿真组件)来用于FPGA交换信号。FPGA接口可称为输入/输出引脚或FPGA焊盘。虽然仿真器可包括FPGA,但仿真器的实施例可包括其他类型的逻辑块来代替用于仿真DUT的FPGA或者与FPGA一起使用。例如,仿真系统1202可包括定制FPGA、用于仿真或原型化的专用ASIC、存储器和输入/输出设备。
可编程设备可包括可编程逻辑块阵列和互连层级,可根据HDL代码中的描述互连可编程逻辑块。每个可编程逻辑块能够实现复杂的组合功能或者能够实现逻辑门,诸如AND和XOR逻辑块。在一些实施例中,逻辑块还可以包括存储元件/设备,其可以是简单的锁存器、触发器或其它存储块。根据不同逻辑块之间互连的长度,信号可在不同时间到达逻辑块的输入端子,由此可临时存储在存储元件/设备中。
FPGA 12041-1204N可放置在一个或多个板12121和12122直到附加板1212M上。可将多个板放置在仿真单元12141中。可以使用仿真单元的背板或任何其他类型的连接来连接仿真单元中的板。此外,多个仿真单元(例如,12141和12142到1214K)可通过电缆或任何其他方式相互连接,以形成多仿真单元系统。
对于将被仿真的DUT,主机系统1207向仿真系统1202发送一个或多个位文件。位文件可指定DUT的描述,并且可进一步利用跟踪和注入逻辑、分区到仿真器的FPGA的映射以及设计约束指定由主机系统1207创建的DUT的分区。使用位文件,仿真器构造FPGA以执行DUT的功能。在一些实施例中,仿真器的一个或多个FPGA可具有内置于FPGA的硅中的跟踪和注入逻辑。在这样的实施例中,可不由主机系统构造FPGA来仿真跟踪和注入逻辑。
主机系统1207接收将被仿真的DUT的描述。在一些实施例中,DUT描述采用描述语言,例如寄存器传输语言(RTL)。在一些实施例中,DUT描述在网表级文件中,或者在网表级文件和HDL文件的混合中。如果部分DUT描述或整个DUT描述在HDL中,则主机系统可合成DUT描述,以使用DUT描述创建门级网表。主机系统可使用DUT的网表将DUT划分为多个分区,其中一个或多个分区包括跟踪和注入逻辑。跟踪和注入逻辑跟踪经由FPGA的接口交换的接口信号。此外,跟踪和注入逻辑可将跟踪的接口信号注入FPGA的逻辑。主机系统将每个分区映射到仿真器的FPGA。在一些实施例中,跟踪和注入逻辑包括在一组FPGA的选择分区中。跟踪和注入逻辑可以内置到仿真器的一个或多个FPGA中。主机系统可合成多路复用器以映射到FPGA。跟踪和注入逻辑可使用多路复用器将接口信号注入DUT逻辑。
主机系统创建描述DUT的每个分区以及分区到FPGA的映射的位文件。对于包括跟踪和注入逻辑的分区,位文件还描述了包括的逻辑。位文件可包括位置和布线信息以及设计约束。主机系统存储描述哪个FPGA将仿真DUT的每个组件(例如,每个组件映射到哪个FPGA)的位文件和信息。
根据请求,主机系统将位文件传输到仿真器。主机系统向仿真器发出信号,以启动DUT的仿真。在DUT仿真期间或仿真结束时,主机系统通过仿真连接从仿真器接收仿真结果。仿真结果是仿真器在DUT仿真期间生成的数据和信息,包括由每个FPGA的跟踪和注入逻辑跟踪的接口信号和接口信号的状态。主机系统可存储仿真结果和/或将仿真结果传输到另一处理系统。
在DUT的仿真之后,电路设计者可以请求调试DUT的组件。如果发出这样的请求,电路设计者可指定要调试的仿真的时间段。主机系统使用存储的信息识别哪些FPGA正在仿真组件。主机系统检索与时间段相关联并由每个已识别FPGA的跟踪和注入逻辑跟踪的存储接口信号。主机系统向仿真器发送信号,以重新仿真已识别的FPGA。主机系统将检索到的接口信号传输到仿真器,以便在指定时间段内重新仿真组件。每个已识别FPGA的跟踪和注入逻辑将其从主机系统接收的对应接口信号注入映射到FPGA的DUT的逻辑中。在FPGA多次重新仿真的情况下,合并结果产生完整的调试视图。
主机系统从仿真系统接收在组件的重新仿真期间由已识别FPGA的逻辑跟踪的信号。主机系统存储从仿真器接收的信号。重新仿真期间跟踪的信号的采样率可高于初始仿真期间的采样率。例如,在初始仿真中,跟踪信号可以每X毫秒包括组件的保存状态。然而,在重新仿真中,跟踪信号可以每Y毫秒包括保存状态,其中Y小于X。如果电路设计者要求查看在重新仿真期间跟踪的信号波形,则主机系统可检索存储的信号并显示信号的曲线。例如,主机系统可生成信号的波形。之后,电路设计者可请求在不同的时间段内重新仿真同一组件,或者重新仿真另一组件。
主机系统1207和/或编译器1210可包括子系统,诸如但不限于设计合成器子系统、映射子系统、运行时间子系统、结果子系统、调试子系统、波形子系统和存储子系统。子系统可作为单个或多个模块来构造和启用,或者两个或多个子系统可作为模块来构造。这些子系统共同构成仿真器并监控仿真结果。
设计合成器子系统将表示DUT 1205的HDL转换为门级逻辑。对于将被仿真的DUT,设计合成器子系统接收DUT的描述。如果DUT的描述全部或部分采用HDL(例如,RTL或其他抽象级别),则设计合成器子系统合成DUT的HDL,以创建具有根据门级逻辑的DUT的门级网表。
映射子系统对DUT进行分区,并将分区映射到仿真器FPGA。映射子系统使用DUT的网表将门级DUT划分为多个分区。对于每个分区,映射子系统检索跟踪和注入逻辑的门级描述,并将逻辑添加到分区中。如上所述,包括在分区中的跟踪和注入逻辑用于跟踪经由分区所映射的FPGA的接口交换的信号(跟踪接口信号)。跟踪和注入逻辑可以在分区之前添加到DUT。例如,跟踪和注入逻辑可通过设计合成器子系统在合成DUT的HDL之前或之后添加。
除了包括跟踪和注入逻辑外,映射子系统还可以在分区中包括附加跟踪逻辑,以跟踪没有被跟踪和注入跟踪的特定DUT组件的状态。映射子系统可以在分区之前的DUT中或者分区之后的分区中包括附加跟踪逻辑。在合成HDL描述之前,设计合成器子系统可以在DUT的HDL描述中包括附加跟踪逻辑。
映射子系统将DUT的每个分区映射到仿真器的FPGA。对于分区和映射,映射子系统使用设计规则、设计约束(例如,定时或逻辑约束)以及有关仿真器的信息。对于DUT的组件,映射子系统在存储子系统中存储描述哪个FPGA仿真每个组件的信息。
使用分区和映射,映射子系统生成一个或多个位文件,描述创建的分区以及逻辑到仿真器的每个FPGA的映射。位文件可包括附加信息,诸如DUT的约束以及FPGA之间的连接和每个FPGA内的连接的路由信息。映射子系统可以为DUT的每个分区生成位文件,并将位文件存储在存储子系统中。根据电路设计者的要求,映射子系统将位文件传输到仿真器,并且仿真器可使用位文件构造FPGA以模拟DUT。
如果仿真器包括专用ASIC(其包括跟踪和注入逻辑),则映射子系统可生成将专用ASIC连接到DUT的特定结构。在一些实施例中,映射子系统可保存被跟踪/注入信号的信息,其中该信息存储在专用ASIC上。
运行时间子系统控制由仿真器执行的仿真。运行时间子系统可使得仿真器启动或停止执行仿真。此外,运行时间子系统可以向仿真器提供输入信号和数据。输入信号可通过连接直接提供给仿真器,或者通过其他输入信号设备间接提供给仿真器。例如,主机系统可控制输入信号设备向仿真器提供输入信号。例如,输入信号设备可以是测试板(直接或通过电缆)、信号发生器、另一仿真器或另一主机系统。
结果子系统处理由仿真器生成的仿真结果。在仿真期间和/或在完成仿真之后,结果子系统从仿真期间生成的仿真器接收仿真结果。仿真结果包括仿真期间跟踪的信号。具体地,仿真结果包括由每个FPGA仿真的跟踪和注入逻辑所跟踪的接口信号,并且可以包括由包括在DUT中的附加逻辑跟踪的信号。每个跟踪信号可跨越多个仿真循环。跟踪信号包括多个状态,并且每个状态都与仿真时间相关联。结果子系统将跟踪信号存储在存储子系统中。对于每个存储的信号,结果子系统可存储指示哪个FPGA生成跟踪信号的信息。
调试子系统允许电路设计者调试DUT组件。在仿真器仿真DUT并且结果子系统在仿真期间接收到跟踪和注入逻辑所跟踪的接口信号之后,电路设计者可请求通过在特定时间段内重新仿真DUT的组件来调试DUT的组件。在调试组件的请求中,电路设计者识别组件并指示要调试的仿真时间段。电路设计者的请求可包括采样率,该采样率指示应由跟踪信号的逻辑保存的已调试组件状态的频率。
调试子系统使用由映射子系统在存储子系统中存储的信息识别正在仿真的仿真器的一个或多个FPGA。对于每个已识别FPGA,调试子系统从存储子系统检索由FPGA的跟踪和注入逻辑在由电路设计者指示的时间段内跟踪的接口信号。例如,调试子系统检索与时间段相关联的由跟踪和注入逻辑跟踪的状态。
调试子系统将检索到的接口信号传输给仿真器。调试子系统指示调试子系统使用已识别FPGA,并针对每个已识别FPGA的跟踪和注入逻辑,将其对应的跟踪信号注入FPGA的逻辑,从而在请求的时间段内重新仿真组件。调试子系统可进一步将电路设计者提供的采样率传输到仿真器,使得跟踪逻辑以适当的间隔跟踪状态。
为了调试组件,仿真器可使用组件所映射的FPGA。此外,可以在电路设计者指定的任何点处执行组件的重新仿真。
对于已识别FPGA,调试子系统可向仿真器传输指令,以加载具有已识别FPGA的相同配置的多个仿真器FPGA。调试子系统还向仿真器发送信号,以并行地使用多个FPGA。来自多个FPGA的每个FPGA与接口信号的不同时间窗口一起使用,以在较短的时间内生成较大的时间窗口。例如,已识别FPGA可要求一小时或更长的时间来使用特定量的循环。然而,如果多个FPGA具有已识别FPGA的相同数据和结构,并且这些FPGA中的每一个都运行循环的子集,则仿真器可需要几分钟时间以使FPGA共同使用所有循环。
电路设计者可识别重新仿真的DUT信号的层级或列表。为了实现这一点,调试子系统确定仿真信号层级或列表所需的FPGA,检索必要的接口信号,并将检索到的接口信号传输到仿真器进行重新仿真。因此,电路设计者可识别DUT的任何元件(例如,组件、设备或信号)以进行调试/重新仿真。
波形子系统使用跟踪信号生成波形。如果电路设计者请求查看在仿真运行期间跟踪的信号的波形,则主机系统从存储子系统检索信号。波形子系统显示信号曲线。对于一个或多个信号,当从仿真器接收到信号时,波形子系统可自动生成信号曲线。
图13示出了计算机系统1300的示例机器,其中可以执行用于使机器执行本文讨论的任何一种或多种方法的指令集。在替代实施中,机器可连接(例如,联网)到LAN、内联网、外联网和/或因特网中的其他机器。该机器可以客户端-服务器网络环境中的服务器或客户端机器的能力操作,作为对等(或分布式)网络环境中的对等机,或者作为云计算架构或环境中的服务器或客户端机器。
该机器可以是个人计算机(PC)、平板PC、机顶盒(STB)、个人数字助理(PDA)、蜂窝电话、网络设备、服务器、网络路由器、交换机或网桥、或者能够执行指定将由机器采取的动作的指令集(顺序或其他方式)的任何机器。此外,虽然示出单个机器,但术语“机器”还应被视为包括单独或联合执行指令集(或多个集合)以执行本文所讨论的任何一种或多种方法的任何机器集合。
示例计算机系统1300包括处理设备1302、主存储器1304(例如,只读存储器(ROM)、闪存、动态随机存取存储器(DRAM),诸如同步DRAM(SDRAM))、静态存储器1306(例如,闪存、静态随机存取存储器(SRAM)等)和数据存储设备1318,它们经由总线1330相互通信。
处理设备1302表示一个或多个处理器,诸如微处理器、中央处理单元等。更具体地,处理设备可以是复杂指令集计算(CISC)微处理器、精简指令集计算(RISC)微处理器、超长指令字(VLIW)微处理器、或实施其他指令集的处理器或者实施指令集组合的处理器。处理设备1302还可以是一个或多个专用处理设备,诸如专用集成电路(ASIC)、现场可编程门阵列(FPGA)、数字信号处理器(DSP)、网络处理器等。处理设备1302可被配置为执行用于执行本文所述的操作和步骤的指令1326。
计算机系统1300还可以包括网络接口设备1308,以通过网络1320进行通信。计算机系统1300还可以包括视频显示单元1310(例如,液晶显示器(LCD)或阴极射线管(CRT))、字母数字输入设备1312(例如,键盘)、光标控制设备1314(例如,鼠标)、图形处理单元1322、信号生成设备1316(例如,扬声器)、图形处理单元1322、视频处理单元1328和音频处理单元1332。
数据存储设备1318可包括机器可读存储介质1324(也称为非暂态计算机可读介质),其上存储一组或多组指令1326或体现本文所述任何一种或多种方法或功能的软件。在被计算机系统1300执行期间,指令1326可以完全或至少部分地驻留在主存储器1304内和/或处理设备1302内,主存储器1304和处理设备1302还构成机器可读存储介质。
在一些实施中,指令1326包括实现与本发明相对应的功能的指令。虽然机器可读存储介质1324在示例实施中被示为单个介质,但术语“机器可读存储介质”应被视为包括存储一组或多组指令的单个介质或多个介质(例如,集中式或分布式数据库和/或相关联的缓存和服务器)。术语“机器可读存储介质”还应被视为包括能够存储或编码被机器执行并且使机器和处理设备1302执行本公开的任何一种或多种方法的指令集的任何介质。术语“机器可读存储介质”应相应地被视为包括但不限于固态存储器、光学介质和磁性介质。
前面详细描述的一些部分已经根据计算机存储器内的数据位操作的算法和符号表示给出。这些算法描述和表示是数据处理领域的技术人员用来最有效地将其工作实质传达给本领域其他技术人员的方法。算法可以是导致期望结果的一系列操作。这些操作需要对物理量进行物理操作。这些量可采取能够被存储、组合、比较和以其他方式操纵的电信号或磁信号的形式。这种信号可以被称为位、值、元素、符号、字符、术语、数字等。
然而,应记住,所有这些和类似的术语都与适当的物理量相关联,并且只是应用于这些量的方便标签。除非本公开另有明确说明,否则应理解,在整个描述中,特定术语指计算机系统或类似电子计算设备的动作和处理,将计算机系统的寄存器和存储器中表示为物理(电子)量的数据操纵并转换为计算机系统存储器或寄存器或其他此类信息存储设备中类似表示为物理量的其他数据。
本公开还涉及一种用于执行本文中操作的装置。该装置可针对预期目的而专门构造,或者其可包括由存储在计算机中的计算机程序选择性地激活或重新配置的计算机。这种计算机程序可存储在计算机可读存储介质中,诸如但不限于任何类型的盘(包括软盘、光盘、CD-ROM和磁光盘)、只读存储器(ROM)、随机存取存储器(RAM)、EPROM、EEPROM、磁卡或光卡或者适用于存储电子指令的任何类型的介质,它们均耦合到计算机系统总线。
本文介绍的算法和显示与任何特定计算机或其他设备没有内在联系。根据本文的教导,各种其他系统可与程序一起使用,或者可以证明构造更专用的设备来执行该方法是方便的。此外,本公开未参考任何特定编程语言进行描述。应当理解,可以使用各种编程语言来实施如本文所述的本公开的教导。
本公开可作为计算机程序产品或软件提供,其可包括在其上存储指令的机器可读介质,可用于编程计算机系统(或其他电子设备)以执行根据本公开的处理。机器可读介质包括用于以机器(例如,计算机)可读的形式存储信息的任何机制。例如,机器可读(例如,计算机可读)介质包括机器(例如,计算机)可读存储介质,诸如只读存储器(“ROM”)、随机存取存储器(“RAM”)、磁盘存储介质、光存储介质、闪存设备等。
在前述公开中,已参考本公开的具体示例实施来描述本公开的实施。显而易见,在不脱离如以下权利要求所述的本公开的实施范围的情况下,可以对其进行各种修改。在本公开涉及一些单数元件的情况下,可以在附图中示出多个元件。相似的元件用相似的数字标记。因此,本公开和附图应以说明性意义而非限制性意义来看待。
Claims (20)
1.一种方法,包括:
通过至少一个处理器,将设计说明划分成多个分区;
通过所述至少一个处理器,检测可被电子设计自动化EDA进程使用的可用硬件资源量,以经由多个计算元件编译所述设计说明;
通过所述至少一个处理器,确定用于编译所述多个分区中的至少一个分区的实际硬件资源量;
通过所述至少一个处理器,基于所述实际硬件资源量确定将被所述EDA进程使用的、用于编译所述多个分区中的剩余分区的硬件资源量的估计值;
通过所述至少一个处理器,将所述估计值与所述可用硬件资源量进行比较;以及
通过所述至少一个处理器,基于所述估计值和所述可用硬件资源量之间的差值并且至少部分地基于所述剩余分区的数目来调整所述多个计算元件中指定数目的计算元件,其中所述指定数目的计算元件可被所述EDA进程并行使用。
2.根据权利要求1所述的方法,还包括:
通过所述至少一个处理器,计算用于所述多个计算元件的加权负载平均。
3.根据权利要求2所述的方法,其中所述调整还包括:响应于所述加权负载平均的增加而减少所述指定数目的计算元件。
4.根据权利要求1所述的方法,其中所述调整还包括:响应于所述EDA进程期间的时间估计值而增加所述指定数目的计算元件。
5.根据权利要求1所述的方法,还包括:
通过所述至少一个处理器,调整用于所述EDA进程的存储器分配。
6.根据权利要求1所述的方法,还包括:
通过所述至少一个处理器,确定针对所述设计说明将由所述EDA进程执行的作业,其中所述作业进一步被确定为相对于所述EDA进程的其他作业具有将由所述EDA进程使用的硬件资源量的估计值的更高比例值;以及
通过所述至少一个处理器,相对于所述其他作业优先处理所述作业。
7.根据权利要求1所述的方法,还包括:
通过所述至少一个处理器,确定针对所述设计说明将由所述EDA进程执行的作业,其中所述作业进一步被确定为相对于所述EDA进程的其他作业具有将由所述EDA进程使用的硬件资源量的估计值的更低比例值;以及
通过所述至少一个处理器,在没有其他优先处理的作业的情况下执行所述作业。
8.一种系统,包括:
存储器;以及
至少一个处理器,耦合到所述存储器,并且被配置为执行包括以下项的操作:
将设计说明划分成多个分区;
检测可被电子设计自动化EDA进程使用的可用硬件资源量,以经由多个计算元件编译所述设计说明;
确定用于编译所述多个分区中的至少一个分区的实际硬件资源量;
基于所述实际硬件资源量确定将被所述EDA进程使用的、用于编译所述多个分区中的剩余分区的硬件资源量的估计值;
将所述估计值与所述可用硬件资源量进行比较;以及
基于所述估计值和所述可用硬件资源量之间的差值并且至少部分地基于所述剩余分区的数目来调整所述多个计算元件中指定数目的计算元件,其中所述指定数目的计算元件可被所述EDA进程并行使用。
9.根据权利要求8所述的系统,其中所述操作还包括:
计算用于所述多个计算元件的加权负载平均。
10.根据权利要求9所述的系统,其中所述调整还包括:响应于所述加权负载平均的增加而减少所述指定数目的计算元件。
11.根据权利要求8所述的系统,其中所述调整还包括:响应于所述EDA进程期间的时间估计值而增加所述指定数目的计算元件。
12.根据权利要求8所述的系统,其中所述操作还包括:
调整用于所述EDA进程的存储器分配。
13.根据权利要求8所述的系统,其中所述操作还包括:
确定针对所述设计说明将由所述EDA进程执行的作业,其中所述作业进一步被确定为相对于所述EDA进程的其他作业具有将由所述EDA进程使用的硬件资源量的估计值的更高比例值;以及
相对于所述其他作业优先处理所述作业。
14.根据权利要求8所述的系统,其中所述操作还包括:
确定针对所述设计说明将由所述EDA进程执行的作业,其中所述作业进一步被确定为相对于所述EDA进程的其他作业具有将由所述EDA进程使用的硬件资源量的估计值的更低比例值;以及
在没有其他优先处理的作业的情况下执行所述作业。
15.一种非暂态计算机可读存储介质,存储有当被至少一个处理器执行时使所述至少一个处理器执行包括以下项的操作的指令:
将设计说明划分成多个分区;
检测可被电子设计自动化EDA进程使用的可用硬件资源量,以经由多个计算元件编译所述设计说明;
确定用于编译所述多个分区中的至少一个分区的实际硬件资源量;
基于所述实际硬件资源量确定将被所述EDA进程使用的、用于编译所述多个分区中的剩余分区的硬件资源量的估计值;
将所述估计值与所述可用硬件资源量进行比较;以及
基于所述估计值和所述可用硬件资源量之间的差值并且至少部分地基于所述剩余分区的数目来调整所述多个计算元件中指定数目的计算元件,其中所述指定数目的计算元件可被所述EDA进程并行使用。
16.根据权利要求15所述的非暂态计算机可读存储介质,其中所述操作还包括:
计算用于所述多个计算元件的加权负载平均。
17.根据权利要求16所述的非暂态计算机可读存储介质,其中所述调整还包括:响应于所述加权负载平均的增加而减少所述指定数目的计算元件。
18.根据权利要求15所述的非暂态计算机可读存储介质,其中所述调整还包括:响应于所述EDA进程期间的时间估计值而增加所述指定数目的计算元件。
19.根据权利要求15所述的非暂态计算机可读存储介质,其中所述操作还包括:
确定针对所述设计说明将由所述EDA进程执行的作业,其中所述作业进一步被确定为相对于所述EDA进程的其他作业具有将由所述EDA进程使用的硬件资源量的估计值的更高比例值;以及
相对于所述其他作业优先处理所述作业。
20.根据权利要求15所述的非暂态计算机可读存储介质,其中所述操作还包括:
确定针对所述设计说明将由所述EDA进程执行的作业,其中所述作业进一步被确定为相对于所述EDA进程的其他作业具有将由所述EDA进程使用的硬件资源量的估计值的更低比例值;以及
在没有其他优先处理的作业的情况下执行所述作业。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US202063072401P | 2020-08-31 | 2020-08-31 | |
US63/072,401 | 2020-08-31 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114115887A true CN114115887A (zh) | 2022-03-01 |
Family
ID=80357688
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110997383.4A Pending CN114115887A (zh) | 2020-08-31 | 2021-08-27 | 具有用于快速分区编译的动态分区负载均衡的自适应调度 |
Country Status (2)
Country | Link |
---|---|
US (1) | US20220066824A1 (zh) |
CN (1) | CN114115887A (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116932174B (zh) * | 2023-09-19 | 2023-12-08 | 浙江大学 | Eda仿真任务动态资源调度方法、装置、终端及介质 |
-
2021
- 2021-08-24 US US17/410,517 patent/US20220066824A1/en active Pending
- 2021-08-27 CN CN202110997383.4A patent/CN114115887A/zh active Pending
Also Published As
Publication number | Publication date |
---|---|
US20220066824A1 (en) | 2022-03-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8990062B2 (en) | Method and program for estimating operation of program | |
US7076416B2 (en) | Method and apparatus for evaluating logic states of design nodes for cycle-based simulation | |
US8214195B2 (en) | Testing in a hardware emulation environment | |
US11853662B2 (en) | Machine-learning enhanced compiler | |
US20240094290A1 (en) | Integrating Machine Learning Delay Estimation in FPGA-Based Emulation Systems | |
WO2021188429A1 (en) | Machine learning-based prediction of metrics at early-stage circuit design | |
TW202236089A (zh) | 用於異質soc設計之使用者空間仿真框架 | |
Haris et al. | Secda: Efficient hardware/software co-design of fpga-based dnn accelerators for edge inference | |
US12015411B2 (en) | Testable time-to-digital converter | |
US6775810B2 (en) | Boosting simulation performance by dynamically customizing segmented object codes based on stimulus coverage | |
US20220066824A1 (en) | Adaptive scheduling with dynamic partition-load balancing for fast partition compilation | |
US11080446B2 (en) | Method to regulate clock frequencies of hybrid electronic systems | |
US20200371843A1 (en) | Framework for application driven exploration and optimization of hardware engines | |
Wicaksana et al. | Hybrid prototyping methodology for rapid system validation in HW/SW co-design | |
Alali et al. | Modeling and simulation of multiprocessor systems MPSoC by SystemC/TLM2 | |
Hu et al. | A performance prototyping approach to designing concurrent software architectures | |
Uddin et al. | Signature-based high-level simulation of microthreaded many-core architectures | |
Patil et al. | Survey of memory, timing, and power management verification methods for multi-core processors | |
Lu et al. | Removal of unnecessary context switches from the systemc simulation kernel for fast vp simulation | |
US11842132B1 (en) | Multi-cycle power analysis of integrated circuit designs | |
US11361135B2 (en) | Guiding sample size choice in analog defect or fault simulation | |
US20230071521A1 (en) | Detecting simulation, emulation and prototyping issues using static analysis tools | |
US20220300690A1 (en) | Incremental compilation for fpga-based systems | |
US11907630B1 (en) | Power validation based on power assertion specification | |
US20230351085A1 (en) | Detecting instability in combinational loops in electronic circuit designs |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |