基于管理进程的集成电路仿真粗颗粒并行方法及装置与流程

文档序号:25543465发布日期:2021-06-18 20:40
基于管理进程的集成电路仿真粗颗粒并行方法及装置与流程
本发明涉及集成电路电磁仿真
技术领域
,具体涉及一种基于管理进程的集成电路电磁仿真粗颗粒并行计算方法及装置。
背景技术
:针对复杂的集成电路模型进行电磁仿真时,传输线法等简单的计算方法不再适用,需要采用数值计算方法以场的方式进行较为精确的模拟,这就需要将集成电路模型所在的复杂的计算场域进行离散,形成离散单元,以离散单元为基础对场进行求解。总体上,离散的单元尺寸越小,仿真结果越精确,但这导致计算的复杂度增加,因此在单元数量和计算精度上需要达到一种最优。另一方面,针对多尺度结构的复杂集成电路进行网格剖分时,不可避免地会采用非结构网格进行剖分,由于被剖分的集成电路模型具有非常强的多尺度结构,网格剖分时集成电路版图多边形顶点插入的顺序的随机性、网格剖分过程中新节点插入坐标产生的误差等都足以改变多尺度结构的复杂集成电路剖分的网格,因此,不同时间、不同计算进程对同一个集成电路模型剖分出的网格都是不一样的。现有的集成电路电磁仿真并行计算方法大多是将每个最基本的计算任务作为完全独立的计算单元,不同的计算任务之间无任何通信或联系,导致同一集成电路模型不同计算任务使用不同的剖分网格进行计算,从而为集成电路模型的电磁仿真带来随机误差;此外,现有的集成电路电磁仿真并行计算方法大多一次性发起多个对等的计算进程,每个计算进程都完成相同类型的计算粗颗粒,不同计算进程之间需要进行通信,相互之间采用某种方式约定方式判断计算粗颗粒是否已经被某个计算进程处理,避免重复计算,这将大大降低并行计算效率。在研究同一集成电路模型的频率响应曲线、电压-电流响应曲线等问题时,针对不同的计算点采用不同的网格剖分,会因为不同网格带来的随机误差导致计算的响应曲线出现抖动。因此,在采用并行计算方法批量计算大规模集成电路电磁仿真提高计算速度的同时,还需要确保不同计算任务对应的相同的集成电路模型使用的是同样的剖分网格,这样可以消除由于不同计算任务对同一集成电路模型进行网格剖分产生的网格差异带来的随机误差,从而避免集成电路的电磁响应曲线出现抖动。技术实现要素:针对现有技术存在的上述不足,本发明的目的在于:提供一种基于管理进程的集成电路仿真粗颗粒并行方法及装置,建立管理进程,专门用于对各个并行独立的计算进程进行管理及仿真计算,各个计算进程分别和管理进程通信连接,各个计算进程之间不传递任何消息。这样,可以确保处理同一集成电路模型的不同进程使用相同的网格进行仿真计算,解决了因为不同网格带来的随机误差导致计算的响应曲线出现抖动;还能避免不同进程之间因为通信而带来的计算进程间的等待,提高集成电路仿真并行计算效率。一种基于管理进程的集成电路仿真粗颗粒并行方法,包括:将整个集成电路模型的电磁仿真分割成多个计算颗粒,获取各计算颗粒的加权cpu时间和总cpu时间,依据所述加权cpu时间和所述总cpu时间的占比确定出计算粗颗粒;所述计算颗粒为需要多次重复执行的计算单元;建立管理进程,所述管理进程读取所有需要仿真的集成电路模型,定义对象存储所述集成电路模型的模型信息、计算条件、计算状态以及管理进程与计算进程的消息内容存储;通过所述管理进程并行发起多个独立的计算进程,所述管理进程与各计算进程进行通信实现对计算进程的管理,各计算进程之间不进行任何通信;每个被发起的计算进程根据收到的管理进程的应答信息,执行完成分配的一个计算粗颗粒或结束该计算进程;当所有并行粗颗粒的计算任务都完成时,所述管理进程收集计算结果并将所有计算任务的计算结果整理生成最终计算结果。进一步地,所述将整个集成电路模型的电磁仿真分割成多个计算颗粒,获取各计算颗粒的加权cpu时间和总cpu时间,依据所述加权cpu时间和所述总cpu时间的占比确定出计算粗颗粒,具体包括:划分出整个集成电路模型的电磁仿真中多次重复执行的计算单元作为计算颗粒,将各计算颗粒的加权cpu时间按照从大到小的顺序排序并依次累加直到累加和超过90%的所述总cpu时间,将所述累加和之中的每个计算颗粒作为一个并行粗颗粒;所述计算颗粒的加权cpu时间的计算公式为:tweight,i=ntask,i*ti式中:tweight,i为第i个计算颗粒的加权cpu时间,ti为第i个计算颗粒单次计算的cpu时间,ntask,i为第i个计算颗粒执行的计算任务数;所述整个计算过程的总cpu时间的计算公式为:其中,t为整个计算过程的总cpu时间,m为整个计算过程被划分的计算颗粒数,tweight,i为第i个计算颗粒的加权cpu时间。进一步地,所述定义对象存储所述集成电路模型的模型信息、计算条件、计算状态以及管理进程与计算进程的消息内容存储,具体包括:针对所有的集成电路模型,定义对象m,所述对象m包括集成电路模型存储字段、集成电路模型类型存储字段、集成电路模型文件路径存储字段及所述集成电路模型对应的剖分的网格数据文件路径存储字段、集成电路模型计算条件存储字段、集成电路模型计算状态存储字段和进程的消息内容存储字段;所述集成电路模型存储字段记为data,该字段存储集成电路模型的所有信息,包括定义集成电路模型的层信息、集成电路各层的版图信息、集成电路各层的介质信息、集成电路各层的连接关系以及集成电路的外部电路;所述集成电路模型类型存储字段记为type,该字段存储所述集成电路模型的仿真类型和集成电路模型的规模;所述集成电路模型的仿真类型包括:多层pcb版图模型、ic封装模型、多层厘米级至纳米级尺度范围的多尺度的芯片设计模型,以及多个集成电路模型的联合仿真;所述集成电路模型的规模包括:层数在4层以下的小规模集成电路模型、层数在4层以上20层以下的中等规模集成电路模型以及层数在20层以上的大规模集成电路模型;所述集成电路模型文件路径存储字段及所述集成电路模型对应的剖分的网格数据文件路径存储字段记为path;所述集成电路模型计算条件存储字段记为net,该字段存储不同集成电路模型的计算参数,包括:集成电路的直流压降分析和集成电路的电热耦合分析的端口与端口初始温度信息、集成电路电源完整性分析初始条件与仿真频率信息、集成电路信号完整性分析初始条件与仿真频率信息、集成电路电源完整性与信号完整性优化指标与仿真频率信息、集成电路的电磁干扰和电磁兼容分析的仿真频率与仿真端口信息、集成电路的等效电路参数提取的待分析端口信息与集成电路的ibis模型提取的待分析端口信息;所述集成电路模型计算状态存储字段记为state,该字段存储集成电路模型计算状态,包括以下5种计算状态:未计算且未生成网格,可用c0_m0表示;未计算且正在生成网格,可用c0_m1表示;未计算且生成网格完毕,可用c0_m表示;正在计算且生成网格完毕,可用c1_m表示;完成计算,可用c_m表示;所述进程的消息内容存储字段记为message,该字段存储管理进程与计算进程之间发送的消息,发送的消息包括:查询指令,可用inquire表示;结果更新指令,可用update表示;进入网格生成指令,可用p_y表示;不生成网格而是直接读取网格进行计算指令,可用p_n表示;关闭进程指令,可用p_nn表示;所述针对所有的集成电路模型定义的对象m可以用m[data][type][path][net][state][message]完整表示,所述对象m泛指存储介质中的内存区,对象m可以是连续的或者非连续的,可以是远程数据库记录或者是一个字符串,也可以是json,xml,ini文件。进一步地,所述通过管理进程并行发起多个独立的计算进程,所述管理进程与各计算进程进行通信实现对计算进程的管理,各计算进程之间不进行任何通信,具体包括:s101:建立一个管理进程mk,如果建立成功,进入步骤s102,如果建立失败,进入步骤s109;s102:定义对象m[data][type][path][net][state][message],定义对象m的元素mi为与并行粗颗粒对应的对象m字段data、type、path、net、state、message的具体实例;将集成电路模型存入对象m的[data];归类集成电路模型的类型,将其存入对象m的[type];将集成电路模型的路径以及所述集成电路模型对应的生产剖分的网格数据文件路径存入对象m的[path]中;将集成电路模型的计算条件存入对象m中的[net];初始化对象m的字段state=c0_m0;初始化对象m的message为空;初始化进程号ki=1;s103:管理进程mk建立第ki个计算进程,如果第ki个计算进程建立失败,暂停时间tpause,进入步骤s103;如果第ki个计算进程建立成功,将第ki个计算进程置于挂起状态;ki=ki+1,如果ki=允许创建的最大计算进程数,进入步骤s104,否则进入步骤s103;s104:管理进程mk进入http网络服务应答状态,查询所有计算进程的工作状态(包括挂起、就绪、退出)及进程池中的计算进程数,如果进程池中的计算进程数小于允许创建的最大计算进程数,进入步骤s103,否则激活所有挂起状态的计算进程进入就绪状态并进入步骤s105;s105:如果管理进程mk收到任意计算进程kj(1≤kj≤允许创建的最大进程数)发的其元素的字段message=inquire,进入步骤s106;如果管理进程mk收到任意计算进程kn(1≤kn≤允许创建的最大进程数)发的其元素的字段message=update,更新该计算进程发送的并行粗颗粒的对象m的计算状态state,进入步骤s104;否则直接进入步骤s104;s106:管理进程mk查询对象m的所有元素的计算状态,如果对象m的所有元素的字段state=c_m,说明所有计算任务都计算完毕,进入步骤s109;否则进入步骤s107;s107:如果对象m的某个元素mi的字段state=c0_m0,更新该元素mi的字段state=c0_m1,管理进程mk回复计算进程kj的指令为该元素mi的字段message=p_y,进入步骤s108;如果对象m的某个元素mi的字段state=c0_m,更新该元素mi的字段state=c1_m,管理进程mk回复计算进程kj的指令为该元素mi的字段message=p_n,进入步骤s108;如果对象m的某个元素mi的字段state=c1_m或state=c_m,查询标记指向对象m的字段net的下一个元素,继续查询属于同一集成电路模型的并行粗颗粒,如果已遍历对象m的字段net的所有元素,进入步骤s106,否则进入步骤s107;如果对象m的某个元素mi的字段state=c0_m1,查询标记指向对象m的字段data的下一个元素,继续查询下一个集成电路模型的并行粗颗粒,如果已遍历对象m的字段data的所有元素,进入步骤s106,否则进入步骤s107;s108:进入步骤s104;s109:向所有计算进程发送p_nn指令,关闭所有计算进程,结束管理进程mk。进一步地,所述每个被发起的计算进程根据收到的管理进程的应答信息,执行完成分配的一个计算粗颗粒或结束该计算进程,具体包括:s201:计算进程ki发送该元素的字段message=inquire到管理进程mk;s202:如果计算进程ki超过时间ttimeout没收到mk返回的消息,进入步骤s204;如果计算进程ki收到的指令为元素mi的字段message=p_nn,该计算进程结束;如果计算进程ki收到的指令为元素mi的字段message=p_n,计算进程ki基于path字段定义的路径读取当前集成电路的剖分的网格数据文件,基于type字段定义的集成电路模型计算条件,进入计算模式,完成type字段定义的规定计算,计算完毕后更新m的元素mi的字段state=c_m,发送该元素的字段message=update到管理进程mk,将更新后的m的元素mi的字段state=c_m发送到管理进程mk,进入步骤s204;如果计算进程ki收到的指令为元素mi的字段message=p_y,进入步骤s203;s203:计算进程ki针对当前集成电路模型进行网格剖分,如果成功剖分网格,将网格数存储在path字段定义的网格路径的位置,更新m的元素mi的字段state=c0_m,发送该元素的字段message=update到管理进程mk,将更新后的m的元素mi的字段state=c0_m发送到管理进程mk;如果网格剖分失败,更新m的元素mi的字段state=c0_m0,发送该元素的字段message=update到管理进程mk,将更新后的m的元素mi的字段state=c0_m0发送到管理进程mk;步骤s204:中断时间tpause,进入步骤s201。一种基于管理进程的集成电路仿真粗颗粒并行装置,包括:计算颗粒划分模块,用于将整个集成电路模型的电磁仿真分割成多个计算颗粒,获取各计算颗粒的加权cpu时间和总cpu时间,依据所述加权cpu时间和所述总cpu时间的占比确定出计算粗颗粒;所述计算颗粒为需要多次重复执行的计算单元;管理进程构建模块,用于建立管理进程,所述管理进程读取所有需要仿真的集成电路模型,定义对象存储所述集成电路模型的模型信息、计算条件、计算状态以及管理进程与计算进程的消息内容存储;粗颗粒并行计算模块,用于通过所述管理进程并行发起多个独立的计算进程,所述管理进程与各计算进程进行通信实现对计算进程的管理,各计算进程之间不进行任何通信;每个被发起的计算进程根据收到的管理进程的应答信息,执行完成分配的一个计算粗颗粒或结束该计算进程;计算结果收集与整理模块,用于当所有并行粗颗粒的计算任务都完成时,所述管理进程收集计算结果并将所有计算任务的计算结果整理生成最终计算结果。进一步地,所述将整个集成电路模型的电磁仿真分割成多个计算颗粒,获取各计算颗粒的加权cpu时间和总cpu时间,依据所述加权cpu时间和所述总cpu时间的占比确定出计算粗颗粒,具体包括:划分出整个集成电路模型的电磁仿真中多次重复执行的计算单元作为计算颗粒,将各计算颗粒的加权cpu时间按照从大到小的顺序排序并依次累加直到累加和超过90%的所述总cpu时间,将所述累加和之中的每个计算颗粒作为一个并行粗颗粒;所述计算颗粒的加权cpu时间的计算公式为:tweight,i=ntask,i*ti式中:tweight,i为第i个计算颗粒的加权cpu时间,ti为第i个计算颗粒单次计算的cpu时间,ntask,i为第i个计算颗粒执行的计算任务数;所述整个计算过程的总cpu时间的计算公式为:其中,t为整个计算过程的总cpu时间,m为整个计算过程被划分的计算颗粒数,tweight,i为第i个计算颗粒的加权cpu时间。进一步地,所述定义对象存储所述集成电路模型的模型信息、计算条件、计算状态以及管理进程与计算进程的消息内容存储,具体包括:针对所有的集成电路模型,定义对象m,所述对象m包括集成电路模型存储字段、集成电路模型类型存储字段、集成电路模型文件路径存储字段及所述集成电路模型对应的剖分的网格数据文件路径存储字段、集成电路模型计算条件存储字段、集成电路模型计算状态存储字段和进程的消息内容存储字段;所述集成电路模型存储字段记为data,该字段存储集成电路模型的所有信息,包括定义集成电路模型的层信息、集成电路各层的版图信息、集成电路各层的介质信息、集成电路各层的连接关系以及集成电路的外部电路;所述集成电路模型类型存储字段记为type,该字段存储所述集成电路模型的仿真类型和集成电路模型的规模;所述集成电路模型的仿真类型包括:多层pcb版图模型、ic封装模型、多层厘米级至纳米级尺度范围的多尺度芯片设计模型,以及多个集成电路模型的联合仿真;所述集成电路模型的规模包括:层数在4层以下的小规模集成电路模型、层数在4层以上20层以下的中等规模集成电路模型以及层数在20层以上的大规模集成电路模型;所述集成电路模型文件路径存储字段及所述集成电路模型对应的剖分的网格数据文件路径存储字段记为path;所述集成电路模型计算条件存储字段记为net,该字段存储不同集成电路模型的计算参数,包括:集成电路的直流压降分析和集成电路的电热耦合分析的端口与端口初始温度信息、集成电路电源完整性分析初始条件与仿真频率信息、集成电路信号完整性分析初始条件与仿真频率信息、集成电路电源完整性与信号完整性优化指标与仿真频率信息、集成电路的电磁干扰和电磁兼容分析的仿真频率与仿真端口信息、集成电路的等效电路参数提取的待分析端口信息与集成电路的ibis模型提取的待分析端口信息;所述集成电路模型计算状态存储字段记为state,该字段存储集成电路模型计算状态,包括以下5种计算状态:未计算且未生成网格,可用c0_m0表示;未计算且正在生成网格,可用c0_m1表示;未计算且生成网格完毕,可用c0_m表示;正在计算且生成网格完毕,可用c1_m表示;完成计算,可用c_m表示;所述进程的消息内容存储字段记为message,该字段存储管理进程与计算进程之间发送的消息,发送的消息包括:查询指令,可用inquire表示;结果更新指令,可用update表示;进入网格生成指令,可用p_y表示;不生成网格而是直接读取网格进行计算指令,可用p_n表示;关闭进程指令,可用p_nn表示;所述针对所有的集成电路模型定义的对象m可以用m[data][type][path][net][state][message]完整表示,所述对象m泛指存储介质中的内存区,对象m可以是连续的或者非连续的,可以是远程数据库记录或者是一个字符串,也可以是json,xml,ini文件。进一步地,所述通过管理进程并行发起多个独立的计算进程,所述管理进程与各计算进程进行通信实现对计算进程的管理,各计算进程之间不进行任何通信,具体包括:s101:建立一个管理进程mk,如果建立成功,进入步骤s102,如果建立失败,进入步骤s109;s102:定义对象m[data][type][path][net][state][message],定义对象m的元素mi为与并行粗颗粒对应的对象m字段data、type、path、net、state、message的具体实例;将集成电路模型存入对象m的[data];归类集成电路模型的类型,将其存入对象m的[type];将集成电路模型的路径以及所述集成电路模型对应的生产剖分的网格数据文件路径存入对象m的[path]中;将集成电路模型的计算条件存入对象m中的[net];初始化对象m的字段state=c0_m0;初始化对象m的message为空;初始化进程号ki=1;s103:管理进程mk建立第ki个计算进程,如果第ki个计算进程建立失败,暂停时间tpause,进入步骤s103;如果第ki个计算进程建立成功,将第ki个计算进程置于挂起状态;ki=ki+1,如果ki=允许创建的最大计算进程数,进入步骤s104,否则进入步骤s103;s104:管理进程mk进入http网络服务应答状态,查询所有计算进程的工作状态(包括挂起、就绪、退出)及进程池中的计算进程数,如果进程池中的计算进程数小于允许创建的最大计算进程数,进入步骤s103,否则激活所有挂起状态的计算进程进入就绪状态并进入步骤s105;s105:如果管理进程mk收到任意计算进程kj(1≤kj≤允许创建的最大进程数)发的其元素的字段message=inquire,进入步骤s106;如果管理进程mk收到任意计算进程kn(1≤kn≤允许创建的最大进程数)发的其元素的字段message=update,更新该计算进程发送的并行粗颗粒的对象m的计算状态state,进入步骤s104;否则直接进入步骤s104;s106:管理进程mk查询对象m的所有元素的计算状态,如果对象m的所有元素的字段state=c_m,说明所有计算任务都计算完毕,进入步骤s109;否则进入步骤s107;s107:如果对象m的某个元素mi的字段state=c0_m0,更新该元素mi的字段state=c0_m1,管理进程mk回复计算进程kj的指令为该元素mi的字段message=p_y,进入步骤s108;如果对象m的某个元素mi的字段state=c0_m,更新该元素mi的字段state=c1_m,管理进程mk回复计算进程kj的指令为该元素mi的字段message=p_n,进入步骤s108;如果对象m的某个元素mi的字段state=c1_m或state=c_m,查询标记指向对象m的字段net的下一个元素,继续查询属于同一集成电路模型的并行粗颗粒,如果已遍历对象m的字段net的所有元素,进入步骤s106,否则进入步骤s107;如果对象m的某个元素mi的字段state=c0_m1,查询标记指向对象m的字段data的下一个元素,继续查询下一个集成电路模型的并行粗颗粒,如果已遍历对象m的字段data的所有元素,进入步骤s106,否则进入步骤s107;s108:进入步骤s104;s109:向所有计算进程发送p_nn指令,关闭所有计算进程,结束管理进程mk。进一步地,所述每个被发起的计算进程根据收到的管理进程的应答信息,执行完成分配的一个计算粗颗粒或结束该计算进程,具体包括:s201:计算进程ki发送该元素的字段message=inquire到管理进程mk;s202:如果计算进程ki超过时间ttimeout没收到mk返回的消息,进入步骤s204;如果计算进程ki收到的指令为元素mi的字段message=p_nn,该计算进程结束;如果计算进程ki收到的指令为元素mi的字段message=p_n,计算进程ki基于path字段定义的路径读取当前集成电路的剖分的网格数据文件,基于type字段定义的集成电路模型计算条件,进入计算模式,完成type字段定义的规定计算,计算完毕后更新m的元素mi的字段state=c_m,发送该元素的字段message=update到管理进程mk,将更新后的m的元素mi的字段state=c_m发送到管理进程mk,进入步骤s204;如果计算进程ki收到的指令为元素mi的字段message=p_y,进入步骤s203;s203:计算进程ki针对当前集成电路模型进行网格剖分,如果成功剖分网格,将网格数存储在path字段定义的网格路径的位置,更新m的元素mi的字段state=c0_m,发送该元素的字段message=update到管理进程mk,将更新后的m的元素mi的字段state=c0_m发送到管理进程mk;如果网格剖分失败,更新m的元素mi的字段state=c0_m0,发送该元素的字段message=update到管理进程mk,将更新后的m的元素mi的字段state=c0_m0发送到管理进程mk;s204:中断时间tpause,进入步骤s201。相比于现有技术,本发明具有以下优点:本发明提供了一种基于管理进程的集成电路仿真粗颗粒并行方法及装置,建立一个管理进程,专门用于对各个并行独立的计算进程进行管理及仿真计算,各个计算进程分别和管理进程通信连接,各个计算进程之间不传递任何消息。这样,可以确保处理同一集成电路模型的不同进程使用相同的网格进行仿真计算,解决了因为不同网格带来的随机误差导致计算的响应曲线出现抖动;还能避免不同进程之间因为通信而带来的计算进程间的等待,提高集成电路仿真并行计算效率。附图说明图1为本发明实施例一中基于管理进程的集成电路仿真粗颗粒并行方法的流程图;图2为本发明实施例一中管理进程mk的管理方法流程图;图3为本发明实施例一中所有并行独立计算进程的计算方法流程图;图4为本发明实施例二中基于管理进程的集成电路粗颗粒并行装置的框图。具体实施方式下面将结合附图对本发明技术方案的实施例进行详细的描述。以下实施例仅用于更加清楚地说明本发明的技术方案,因此只是作为示例,而不能以此来限制本发明的保护范围。实施例一:一种基于管理进程的集成电路仿真粗颗粒并行方法及装置,下面以具体集成电路模型的电磁仿真为实例来说明本申请的并行计算方法,表1为某个电源完整性不达标的集成电路模型,设计工程师基于该不达标的集成电路模型前期的定义的阻抗网络端口的仿真结果,在原来不达标的集成电路模型的基础上进行了不同的修改,给出了10个可能的整改方案,形成了10个新的集成电路模型。表1集成电路模型整改方案分析列表模型名称模型存储(data)模型类型(type)模型路径(path)计算条件(net)ic_design1ic_design1.dat多层pcb版图模型;中等规模path;path\ic_design1电源完整性分析,频率范围:10khz~10mhzic_design2ic_design2.dat多层pcb版图模型;中等规模path;path\ic_design2电源完整性分析,频率范围:10khz~10mhzic_design3ic_design3.dat多层pcb版图模型;中等规模path;path\ic_design3电源完整性分析,频率范围:10khz~10mhzic_design4ic_design4.dat多层pcb版图模型;中等规模path;path\ic_design4电源完整性分析,频率范围:10khz~10mhzic_design5ic_design5.dat多层pcb版图模型;中等规模path;path\ic_design5电源完整性分析,频率范围:10khz~10mhzic_design6ic_design6.dat多层pcb版图模型;中等规模path;path\ic_design6电源完整性分析,频率范围:10khz~10mhzic_design7ic_design7.dat多层pcb版图模型;中等规模path;path\ic_design7电源完整性分析,频率范围:10khz~10mhzic_design8ic_design8.dat多层pcb版图模型;中等规模path;path\ic_design8电源完整性分析,频率范围:10khz~10mhzic_design9ic_design9.dat多层pcb版图模型;中等规模path;path\ic_design9电源完整性分析,频率范围:10khz~10mhzic_design10ic_design10.dat多层pcb版图模型;中等规模path;path\ic_design10电源完整性分析,频率范围:10khz~10mhz从上表可以看出,10个集成电路模型的模型类型和计算条件都相同,针对每个集成电路模型的频率范围,拟采用对数刻度进行采样,每10倍频采样20个频率点,由此可以看出每个集成电路模型需要计算58个频率点,则整个计算的对象m的data字段有10个,net字段有58个。参照图1~图3,第一步,划分出所述所有集成电路模型的整改方案分析中多次重复执行的计算单元作为计算颗粒,将各计算颗粒的加权cpu时间按照从大到小的顺序排序并依次累加直到累加和超过90%的所述总cpu时间,将所述累加和之中的每个计算颗粒作为一个并行粗颗粒;所述计算颗粒的加权cpu时间的计算公式为:tweight,i=ntask,i*ti式中:tweight,i为第i个计算颗粒的加权cpu时间,ti为第i个计算颗粒单次计算的cpu时间,ntask,i为第i个计算颗粒执行的计算任务数;所述整个计算过程的总cpu时间的计算公式为:其中,t为整个计算过程的总cpu时间,m为整个计算过程被划分的计算颗粒数,tweight,i为第i个计算颗粒的加权cpu时间。依据以上原则,将整个集成电路模型的整改方案分析划分为580个并行粗颗粒,每个并行粗颗粒对应一个集成电路的一个频率点的电磁响应分析。第二步,针对所有的集成电路模型,定义对象m,所述对象m包含以下字段:集成电路模型存储字段,记为data,该字段存储集成电路模型的所有信息,包括定义集成电路模型的层信息、集成电路各层的版图信息、集成电路各层的介质信息、集成电路各层的连接关系以及集成电路的外部电路;该字段存储于表1的data字段对应的数据文件中,字段data包含10个元素;集成电路模型类型存储字段,记为type,该字段存储所述集成电路模型的仿真类型和集成电路模型的规模;所述集成电路模型的仿真类型包括:多层pcb版图模型、ic封装模型、多层厘米级至纳米级尺度范围的多尺度芯片设计模型,以及多个集成电路模型的联合仿真;所述集成电路模型的规模包括:层数在4层以下的小规模集成电路模型、层数在4层以上20层以下的中等规模集成电路模型以及层数在20层以上的大规模集成电路模型;如表1所示,所有对象的字段type均为“多层pcb版图模型;中等规模”;集成电路模型文件路径存储字段及所述集成电路模型对应的剖分的网格数据文件路径存储字段,记为path;所有对象的字段path;如表1所示;集成电路模型计算条件存储字段,记为net,该字段存储不同集成电路模型的计算参数,包括:集成电路的直流压降分析和集成电路的电热耦合分析的端口与端口初始温度信息、集成电路电源完整性分析初始条件与仿真频率信息、集成电路信号完整性分析初始条件与仿真频率信息、集成电路电源完整性与信号完整性优化指标与仿真频率信息、集成电路的电磁干扰和电磁兼容分析的仿真频率参数与仿真端口信息、集成电路的等效电路参数提取的待分析端口信息与集成电路的ibis模型提取的待分析端口信息;如表1所示,所有对象的字段net均为“电源完整性分析,频率范围:10khz~10mhz”,在此基础上,定义仿真的频率点数为58个,因此字段net包含58个频率点的元素;集成电路模型计算状态存储字段,记为state,该字段存储集成电路模型计算状态,包括以下5种计算状态:未计算且未生成网格,可用c0_m0表示;未计算且正在生成网格,可用c0_m1表示;未计算且生成网格完毕,可用c0_m表示;正在计算且生成网格完毕,可用c1_m表示;完成计算,可用c_m表示;进程的消息内容存储字段,记为message,该字段存储管理进程与计算进程之间发送的消息,发送的消息包括:查询指令,可用inquire表示;结果更新指令,可用update表示;进入网格生成指令,可用p_y表示;不生成网格而是直接读取网格进行计算指令,可用p_n表示;关闭进程指令,可用p_nn表示;所述针对所有的集成电路模型定义的对象m可以用m[data][type][path][net][state][message]完整表示,所述对象m泛指存储介质中的内存区,可以是连续的,也可以是非连续的,可以是远程数据库记录也可以是一个字符串,也可能是常用的json,xml,ini文件。第三步,通过所述管理进程并行发起多个独立的计算进程,基于与计算进程建立的通信实现对计算进程进行管理,包括以下步骤:步骤s101:建立一个管理进程mk,如果建立成功,进入步骤s102,如果建立失败,进入步骤s109;步骤s102:定义对象m[data][type][path][net][state][message],定义对象m的元素mi为与并行粗颗粒对应的对象m字段data、type、path、net、state、message的具体实例;将集成电路模型存入对象m的[data];归类集成电路模型的类型,将其存入对象m的[type];将集成电路模型的路径以及所述集成电路模型对应的生产剖分的网格数据文件路径存入对象m的[path]中;将集成电路模型的计算条件存入对象m中的[net];初始化对象m的字段state=c0_m0;初始化对象m的message为空;初始化进程号ki=1;步骤s103:管理进程mk建立第ki个计算进程,如果第ki个计算进程建立失败,暂停时间tpause,进入步骤s103;如果第ki个计算进程建立成功,将第ki个计算进程置于挂起状态;ki=ki+1,如果ki=允许创建的最大计算进程数,进入步骤s104,否则进入步骤s103;步骤s104:管理进程mk进入http网络服务应答状态,查询所有计算进程的工作状态(包括挂起、就绪、退出)及进程池中的计算进程数,如果进程池中的计算进程数小于允许创建的最大计算进程数,进入步骤s103,否则激活所有挂起状态的计算进程进入就绪状态并进入步骤s105;步骤s105:如果管理进程mk收到任意计算进程kj(1≤kj≤允许创建的最大进程数)发的其元素的字段message=inquire,进入步骤s106;如果管理进程mk收到任意计算进程kn(1≤kn≤允许创建的最大进程数)发的其元素的字段message=update,更新该计算进程发送的并行粗颗粒的对象m的计算状态state,进入步骤s104;否则直接进入步骤s104;步骤s106:管理进程mk查询对象m的所有元素的计算状态,如果对象m的所有元素的字段state=c_m,说明所有计算任务都计算完毕,进入步骤s109;否则进入步骤s107。步骤s107:如果对象m的某个元素mi的字段state=c0_m0,更新该元素mi的字段state=c0_m1,管理进程mk回复计算进程kj的指令为该元素mi的字段message=p_y,进入步骤s108;如果对象m的某个元素mi的字段state=c0_m,更新该元素mi的字段state=c1_m,管理进程mk回复计算进程kj的指令为该元素mi的字段message=p_n,进入步骤s108;如果对象m的某个元素mi的字段state=c1_m或state=c_m,查询标记指向对象m的字段net的下一个元素,继续查询属于同一集成电路模型的并行粗颗粒,如果已遍历对象m的字段net的所有元素,进入步骤s106,否则进入步骤s107;如果对象m的某个元素mi的字段state=c0_m1,查询标记指向对象m的字段data的下一个元素,继续查询下一个集成电路模型的并行粗颗粒,如果已遍历对象m的字段data的所有元素,进入步骤s106,否则进入步骤s107;步骤s108:进入步骤s104;步骤s109:向所有计算进程发送p_nn指令,关闭所有计算进程,结束管理进程mk。第四步,每个被发起的计算进程与管理进程进行通信,根据收到的管理进程的应答信息,执行完成分配的一个计算粗颗粒或结束该计算进程,包括以下步骤:步骤s201:计算进程ki发送该元素的字段message=inquire到管理进程mk;步骤s202:如果计算进程ki超过时间ttimeout没收到mk返回的消息,进入步骤s204;如果计算进程ki收到的指令为元素mi的字段message=p_nn,该计算进程结束;如果计算进程ki收到的指令为元素mi的字段message=p_n,计算进程ki基于path字段定义的路径读取当前集成电路的剖分的网格数据文件,基于type字段定义的集成电路模型计算条件,进入计算模式,完成type字段定义的规定计算,计算完毕后更新m的元素mi的字段state=c_m,发送该元素的字段message=update到管理进程mk,将更新后的m的元素mi的字段state=c_m发送到管理进程mk,进入步骤s204;如果计算进程ki收到的指令为元素mi的字段message=p_y,进入步骤s203;步骤s203:计算进程ki针对当前集成电路模型进行网格剖分,如果成功剖分网格,将网格数存储在path字段定义的网格路径的位置,更新m的元素mi的字段state=c0_m,发送该元素的字段message=update到管理进程mk,将更新后的m的元素mi的字段state=c0_m发送到管理进程mk;如果网格剖分失败,更新m的元素mi的字段state=c0_m0,发送该元素的字段message=update到管理进程mk,将更新后的m的元素mi的字段state=c0_m0发送到管理进程mk;步骤s204:中断时间tpause,进入步骤s201。第五步,当所有并行粗颗粒的计算任务都完成时,管理进程收集计算结果并将所有计算任务的计算结果整理生成最终计算结果。上述基于管理进程的集成电路仿真粗颗粒并行方法,建立一个单线的管理进程,采用管理进程管理各计算进程独立计算不同计算任务,各计算进程只和管理进程实现通信,计算进程之间不传递任何消息,基于单个管理进程mk建立关于集成电路模型的消息异步传递机制,从而对各个并行独立的计算进程进行管理及仿真计算率。这样,可以确保处理同一集成电路模型的不同进程使用相同的网格进行仿真计算,解决了因为不同网格带来的随机误差导致计算的响应曲线出现抖动;还能避免不同进程之间因为通信而带来的计算进程间的等待,提高集成电路仿真并行计算效率。上述基于管理进程的集成电路仿真粗颗粒并行方法,针对并行粗颗粒的计算方法为:将各计算颗粒的加权cpu时间按照从大到小的顺序排序并依次累加直到累加和超过90%的所述总cpu时间,将所述累加和之中的每个计算颗粒作为一个并行粗颗粒。具体的,若将集成电路模型的仿真计算划分为c1、c2、c3共3个计算颗粒,3个计算颗粒可执行整个计算过程的计算任务;若c1执行500个计算任务,c2执行200个计算任务,c3执行5个计算任务;那么共705个计算任务构成整个计算过程,上述整个计算过程只需c1、c2、c3共3个计算颗粒来实现。其中执行整个计算过程依次需要c1、c2、c3这3个计算颗粒执行。根据各计算颗粒计算所得的加权cpu时间进行大小排序,若c1加权cpu时间为1s,c2加权cpu时间为100s,c3加权cpu时间为20s,则最终排序结果为c2>c3>c1;3个计算颗粒的加权cpu时间从大到小依次相加,即t(c2)+t(c3)+…直到时间和大于总cpu时间的90%为止;如果t(c2)+t(c3)>90%,那就是c2、c3分别作为一个并行粗颗粒;如果t(c2)>90%总cpu时间,那么c2为并行粗颗粒。这样,采用管理进程对各个并行独立的计算进程进行管理及仿真计算,极大程度减少进程之间的通信及因为同步而产生的等待时间,同时,基于单个管理进程mk建立关于集成电路模型的消息异步传递机制,可以保证处理同一集成电路模型的不同进程使用相同的网格进行仿真计算,解决了因为不同网格带来的随机误差导致计算的响应曲线出现抖动。实施例二:参照图4,一种基于管理进程的集成电路仿真粗颗粒并行装置,包括:计算颗粒划分模块,用于将整个集成电路模型的电磁仿真分割成多个计算颗粒,获取各计算颗粒的加权cpu时间和总cpu时间,依据所述加权cpu时间和所述总cpu时间的占比确定出计算粗颗粒;所述计算颗粒为需要多次重复执行的计算单元.管理进程构建模块,用于建立管理进程,所述管理进程读取所有需要仿真的集成电路模型,定义对象存储所述集成电路模型的模型信息、计算条件、计算状态以及管理进程与计算进程的消息内容存储。粗颗粒并行计算模块,用于通过所述管理进程并行发起多个独立的计算进程,所述管理进程与各计算进程进行通信实现对计算进程的管理,各计算进程之间不进行任何通信;每个被发起的计算进程根据收到的管理进程的应答信息,执行完成分配的一个计算粗颗粒或结束该计算进程;具体地,假设有n个模型,共有x个计算任务,并行发起k个计算进程,k个并行的计算进程对应k个并行的计算颗粒。计算结果收集与整理模块,用于当所有并行粗颗粒的计算任务都完成时,所述管理进程收集计算结果并将所有计算任务的计算结果整理生成最终计算结果。具体地,将所述管理进程定义为管理进程mk,其中,k表示管理进程通信管理的各个计算进程,对象m泛指存储介质中的内存区,可以是连续的,也可以是非连续的,可以是远程数据库记录也可以是一个字符串,也可能是常用的json,xml,ini等文件。对象m包括数据区[mtype]、数据区[mname]、数据区[net]、数据区[state]和数据区[data];其中,数据区[mtype]表示集成电路模型类型存储字段,这个集成电路模型类型,如多层pcb版图模型,ic封装模型,多层厘米级至纳米级尺度范围的多尺度芯片设计模型,或者是多个模型的联合仿真,也可以包括集成电路模型的规模信息。数据区[mname]表示集成电路模型文件路径存储字段及网格文件路径存储字段。数据区[net]表示计算条件存储字段,计算条件存储字段主要存储不同集成电路模型的计算参数,包括:如集成电路的直流压降分析和集成电路的电热耦合分析的端口参数、集成电路的电磁干扰和电磁兼容分析的仿真频率参数与仿真端口参数、集成电路的等效电路参数提取的端口参数与端口电压参数等。数据区[state]表示状态存储字段,数据区[state]包括五个存储状态,分别为未计算且未生成网格、未计算且正在生成网格、生成网格完毕且未计算、生成网格完毕且正在计算和计算完毕;初始化的对象m中的数据区[state]为未计算且未生成网格,初始化的对象m中的数据区[data]为0。数据区[data]表示消息内容存储字段,这个消息内容为管理进程与计算进程之间发送的消息,发送的消息包括:进入网格生成指令,可用p_y表示;不生成网格而是直接读取网格进行计算指令,可用p_n表示;关闭进程指令,可用p_nn表示。粗颗粒并行计算模块,用于基于管理进程对各个并行粗颗粒进行管理及仿真计算,当所有并行粗颗粒的计算任务都完成时,收集计算结果并将所有计算任务的计算结果整理生成最终计算结果。上述基于管理进程的集成电路仿真粗颗粒并行装置,建立管理进程,专门用于对各个并行独立的计算进程进行管理及仿真计算,各个计算进程分别和管理进程通信连接,各个计算进程之间不传递任何消息。这样,可以确保处理同一集成电路模型的不同进程使用相同的网格进行仿真计算,解决了因为不同网格带来的随机误差导致计算的响应曲线出现抖动;还能避免不同进程之间因为通信而带来的计算进程间的等待,提高集成电路仿真并行计算效率。最后说明的是,以上实施例仅用以说明本发明的技术方案而非限制,尽管参照实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明技术方案的宗旨和范围,其均应涵盖在本发明的保护范围当中。当前第1页1 2 3 
再多了解一些
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1