具有保密功能的集成电路仿真多线程管理并行方法及装置与流程

文档序号:25543462发布日期:2021-06-18 20:40
具有保密功能的集成电路仿真多线程管理并行方法及装置与流程

本发明涉及集成电路仿真技术领域,特别涉及一种具有保密功能的集成电路仿真多线程管理并行方法及装置。



背景技术:

基于云计算平台的超大规模并行计算是未来多用户、多任务、以及多模型大规模仿真模拟的趋势。在云计算平台下,需要不同用户在不同时段通过网络提交不同模型的多个计算任务,这些计算任务形成计算队列,最终按顺序分配在千核、以及万核以上的集群上运行,对于如何减少计算节点的等待时间、高效率的运行用户提交的计算任务,从而减少计算任务在队列中的等待时间不仅是提交计算任务的用户最为关心的问题,而且是建设云计算平台需要解决的最为核心的问题。针对多层超大规模集成电路的仿真,也可基于云计算平台来实现。不同用户通过云计算平台提交不同的集成电路模型,提出不同的仿真需求,如集成电路的直流压降分析、集成电路的电热耦合分析、集成电路的电磁干扰和电磁兼容分析、以及集成电路的等效电路参数提取等,这些计算模型和计算任务,也将形成计算队列被分配在集群上进行并行计算。而如何更快而不失精准的获得每个集成电路模型、每个计算任务的计算结果是集成电路设计和优化提出的最大需求,也是超大规模集成电路仿真所追求的最终目标。

在千核、万核以上的集群上对多模型、多计算任务的集成电路问题进行仿真时,最直接、最基本的提高仿真效率的方法是并行计算。其基本思路是将所有计算任务分割成小的、独立的计算任务,然后将这些计算任务分配到不同的cpu核上进行计算,最终,将不同cpu核的计算结果进行收集,形成不同计算模型、以及不同计算任务的计算结果。在并行计算中,将计算任务进行分割的分割方法、以及分割顺序等因素将直接影响并行计算的计算效率,理想的计算任务分割方法将使得所有模型、所有计算任务的计算速度提高n倍,这里的n为所用集群的cpu核数。然而,由于计算过程中有些计算的顺序性、非独立性、以及不可分割性等,将导致计算任务的实际分割和计算过程中不可避免的出现不同进程的等待和不同进程之间大量通信等现象,这些现象将导致最终的计算速度不能提高n倍,甚至远远低于n倍。

由于目前网络技术越来越成熟,很多芯片设计客户都不希望自己设计的集成电路模型通过互联网泄露出去,因此部分芯片设计客户选择自己搭建并行计算环境,将所有的仿真均在局域网内并行计算。但是搭建运算能力强的并行计算环境需要较大的建设成本,且需要专人维护,因此,亟需设计既能保证设计的集成电路模型不泄露出去,又能通过云计算的方式低成本、快速进行仿真的方法。

因此,现有技术中迫切地需要一种具有保密功能的集成电路仿真多线程管理并行方法及装置,为用户提供一种高效的基于云平台的集成电路仿真,其计算效率逼近理想计算效率,且具有保密功能。



技术实现要素:

(一)发明目的

为克服上述现有技术存在的至少一种缺陷,本发明提供了一种具有保密功能的集成电路仿真多线程管理并行方法及装置,为一种高效的并行计算方法,其计算效率逼近理想计算效率,且具有保密功能。

(二)技术方案

作为本发明的第一方面,本发明公开了一种具有保密功能的集成电路仿真多线程管理并行方法,包括:

在客户端读取所有需要仿真的集成电路模型,将需要云平台进行计算的集成电路模型信息、计算条件提取出来,形成并行粗颗粒发送到云平台;

在云平台创建管理进程,通过管理进程读取客户端发送的所有需要仿真的并行粗颗粒,定义对象存储所述集成电路模型对应的并行粗颗粒的计算条件、计算状态,以及管理进程与计算进程的消息内容存储;

管理进程创建互斥体和线程,线程依据互斥体的状态创建计算进程,对计算粗颗粒进行分发并管理;所述互斥体为防止多个线程同时对同一对象进行操作的机制,其状态包括:互斥体等待状态:表示此时处于堵塞状态,线程只能等待;互斥体空闲状态:表示此时线程可进入工作;

计算进程发送查询指令,管理进程创建线程对查询指令进行查询并应答,计算进程依据线程的应答进行响应,完成分发的计算粗颗粒;

当所有并行粗颗粒的计算任务都完成时,管理进程收集计算结果并将所有计算任务的计算结果整理生成最终计算结果。

将云平台的最终计算结果传送到客户端,由客户端对最终计算结果进行显示。

一种可能的实施方式中,所述将需要云平台进行计算的集成电路模型信息、计算条件提取出来,形成并行粗颗粒,具体包括:

在客户端将所有读取的集成电路模型的信息转化为实际计算的输入参数,删去所有与集成电路电磁仿真无关但对用户来说需要保密的信息,包括:集成电路模型中版图名称、元器件名称、功能、集成电路模型所用材料的名称,以及集成电路的外部电路名称;

依据实际计算的输入参数,划分出每个待仿真的集成电路模型的电磁仿真中多次重复执行的计算单元作为计算颗粒,将各计算颗粒的加权cpu时间按照从大到小的顺序排序并依次累加直到累加和超过90%的所述总cpu时间,将进行累加和的每个计算颗粒作为一个并行粗颗粒;

所述计算颗粒的加权cpu时间的计算公式为:

式中:表示为第i个计算颗粒的加权cpu时间,表示为第i个计算颗粒单次计算的cpu时间,表示为第i个计算颗粒执行的计算任务数;

所述整个计算过程的总cpu时间的计算公式为:

其中,t表示为整个计算过程的总cpu时间,m表示为整个计算程序被划分的计算颗粒数。

一种可能的实施方式中,所述定义对象存储所述集成电路模型对应的并行粗颗粒的计算条件、计算状态,以及管理进程与计算进程的消息内容存储包括:

针对所有的集成电路模型对应的并行粗颗粒,定义对象m,所述对象m包含以下字段:

集成电路模型对应的并行粗颗粒存储字段,记为data,该字段存储集成电路模型与电磁仿真计算相关的所有信息,包括定义集成电路模型的层坐标信息、集成电路各层的版图坐标信息、集成电路各层的介质参数信息、集成电路各层的连接关系以及集成电路的外部电路提取出来的电路模型;

集成电路模型对应的并行粗颗粒类型存储字段,记为type,该字段存储所述集成电路模型的仿真类型和集成电路模型的规模;所述集成电路模型的仿真类型包括:多层pcb版图模型、ic封装模型、多层尺度更小的芯片设计模型,以及多个集成电路模型的联合仿真;所述集成电路模型的规模包括:层数在4层以下的小规模集成电路模型、层数在4层以上20层以下的中等规模集成电路模型以及层数在20层以上的大规模集成电路模型;

将所述集成电路模型对应的网格剖分文件路径存储字段,记为path;

集成电路模型对应的并行粗颗粒计算条件存储字段,记为net,该字段存储不同集成电路模型的计算参数,包括:集成电路的直流压降分析和集成电路的电热耦合分析的端口参数、集成电路电源完整性分析参数、集成电路信号完整性分析参数、集成电路电源完整性与信号完整性优化参数、集成电路的电磁干扰和电磁兼容分析的仿真频率参数与仿真端口参数、集成电路的等效电路参数提取的端口参数与端口电压参数;

集成电路模型对应的并行粗颗粒计算状态存储字段,记为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泛指存储介质中的内存区。

一种可能的实施方式中,所述管理进程创建互斥体和线程,线程依据互斥体的状态创建计算进程,对计算粗颗粒进行分发并管理,包括:

步骤1.1,在客户端建立一个管理进程mk,若建立成功,进入步骤1.2,若建立失败,进入步骤1.7;

步骤1.2,定义并建立互斥体mutexdata和mutexexit,设置mutexwork=互斥体空闲,设置mutexexit=互斥体等待,定义对象m[data][type][path][net][state][message];将集成电路模型对应的并行粗颗粒存入对象m的[data];将归类集成电路模型对应的并行粗颗粒的类型存入对象m的[type];将集成电路模型对应的并行粗颗粒对应的生产网格剖分文件路径存入对象m的[path]中;将集成电路模型对应的并行粗颗粒的计算条件存入对象m中的[net];初始化对象m的state=c0_m0;初始化对象m的message为空;初始化进程号ki=1;

步骤1.3:管理进程mk建立第ki个计算进程,如果第ki个计算进程建立失败,暂停预定时间,进入步骤1.3;如果第ki个计算进程建立成功,将第ki个计算进程置于挂起状态;,如果ki=允许创建的最大进程数,进入步骤1.4,否则进入步骤1.3;ki为自然数;

步骤1.4:如果mutexexit=互斥体空闲,管理进程mk进入步骤1.7;否则管理进程mk进入http网络服务应答状态,查询所有计算进程的工作状态及进程池中的计算进程数,如果进程池中的计算进程数小于允许创建的最大计算进程数,进入步骤1.3,否则激活所有挂起状态的计算进程进入就绪状态并进入步骤1.5;

步骤1.5:如果管理进程mk收到任意计算进程kj发送的其元素的字段message=inquire,进入步骤1.6;否则直接进入步骤1.4;1≤j≤允许创建的最大进程数;

步骤1.6:管理进程mk建立一个线程tj进行应答工作,进入步骤1.4;

步骤1.7:删除互斥体mutexwork和mutexexit,向所有计算进程发送p_nn指令,关闭所有计算进程,销毁管理进程mk建立的所有线程,结束管理进程mk。

一种可能的实施方式中,所述步骤1.6包括:

步骤1.6.1,线程tj就绪进入指令分析阶段,若指令为message=inquire,进入步骤1.6.3;若指令为message=update,进入步骤1.6.2;

步骤1.6.2,若互斥体mutexwork=互斥体等待,线程tj进入等待状态;若互斥体mutexwork=互斥体空闲,线程tj设置互斥体mutexwork=互斥体等待,线程tj更新数据区元素mi,线程tj设置互斥体mutexwork=互斥体空闲,线程tj自我销毁;

步骤1.6.3,若互斥体mutexwork=互斥体等待,线程tj进入等待状态;若互斥体mutexwork=互斥体空闲,线程tj设置互斥体mutexwork=互斥体等待,线程tj查询对象m的数据区,若对象m的所有元素的mutexwork,说明对象m的数据区所有计算任务都计算完毕,线程tj设置互斥体mutexwork=互斥体空闲,设置互斥体mutexexit=互斥体空闲,线程tj销毁;否则线程tj进入步骤1.6.4;

步骤1.6.4,如果对象m的某个元素mi的state=c0_m0,更新该元素mi的state=c0_m1,管理进程mk回复计算进程kj的指令为该元素mi的字段message=p_y;

如果对象m的某个元素mi的state=c0_m,更新该元素mi的state=c1_m,管理进程mk回复计算进程kj的指令为该元素mi的字段message=p_n;

如果对象m的某个元素mi的state=c1_m或state=c_m,查询标记指向对象m的字段net的下一个元素,继续查询属于同一集成电路模型的并行粗颗粒,如果已遍历对象m的字段net的所有元素,则进入步骤1.6.3,否则进入步骤1.6.4;

如果对象m的某个元素mi的state=c0_m1,查询标记指向对象m的字段data的下一个元素,继续查询下一个集成电路模型的并行粗颗粒,如果已遍历对象m的字段data的所有元素,进入步骤1.6.3,否则进入步骤1.6.4。

一种可能的实施方式中,所述计算进程发送查询指令,管理进程创建线程对查询指令进行查询并应答,计算进程依据线程的应答进行响应,完成分发的计算粗颗粒,包括:

步骤2.1:计算进程ki发送该元素的字段message=inquire到管理进程mk;

步骤2.2:如果计算进程ki超过预定时间没收到管理进程mk返回的消息,进入步骤2.4;

如果计算进程ki收到的指令为该元素的字段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,进入步骤2.4;

如果计算进程ki收到的指令为元素mi的字段message=p_y,进入步骤2.3;

步骤2.3:计算进程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;

步骤2.4:中断预定时间,进入步骤2.1。

作为本发明的第二方面,本发明公开了一种具有保密功能的多线程粗颗粒并行计算装置,包括:

第一模块,用于在客户端读取所有需要仿真的集成电路模型,将需要云平台进行计算的集成电路模型信息、计算条件提取出来,形成并行粗颗粒发送到云平台;

第二模块,用于将所有待仿真的集成电路模型的电磁仿真分割成多个计算颗粒,获取各计算颗粒的加权cpu时间和总cpu时间,依据所述加权cpu时间和所述总cpu时间的占比确定出计算粗颗粒;所述计算颗粒为需要多次重复执行的计算单元;

第三模块,用于在云平台创建管理进程,通过管理进程读取客户端发送的所有需要仿真的并行粗颗粒,定义对象存储所述集成电路模型对应的并行粗颗粒的计算条件、计算状态,以及管理进程与计算进程的消息内容存储;第四模块,用于管理进程创建互斥体和线程,线程依据互斥体的状态创建计算进程,对计算粗颗粒进行分发并管理;所述互斥体为防止多个线程同时对同一对象进行操作的机制,其状态包括:互斥体等待状态:表示此时处于堵塞状态,线程只能等待;互斥体空闲状态:表示此时线程可进入工作;

第五模块,用于计算进程发送查询指令,管理进程创建线程对查询指令进行查询并应答,计算进程依据线程的应答进行响应,完成分发的计算粗颗粒;

第六模块,用于当所有并行粗颗粒的计算任务都完成时,管理进程收集计算结果并将所有计算任务的计算结果整理生成最终计算结果。

第七模块,用于将云平台的最终计算结果传送到客户端,由客户端对最终计算结果进行显示。

一种可能的实施方式中,所述将需要云平台进行计算的集成电路模型信息、计算条件提取出来,形成并行粗颗粒,具体包括:

在客户端将所有读取的集成电路模型的信息转化为实际计算的输入参数,删去所有与集成电路电磁仿真无关但对用户来说需要保密的信息,包括:集成电路模型中版图名称、元器件名称、功能、集成电路模型所用材料的名称,以及集成电路的外部电路名称;

依据实际计算的输入参数,划分出每个待仿真的集成电路模型的电磁仿真中多次重复执行的计算单元作为计算颗粒,将各计算颗粒的加权cpu时间按照从大到小的顺序排序并依次累加直到累加和超过90%的所述总cpu时间,将进行累加和的每个计算颗粒作为一个并行粗颗粒;

所述计算颗粒的加权cpu时间的计算公式为:

式中:表示为第i个计算颗粒的加权cpu时间,表示为第i个计算颗粒单次计算的cpu时间,表示为第i个计算颗粒执行的计算任务数;

所述整个计算过程的总cpu时间的计算公式为:

其中,t表示为整个计算过程的总cpu时间,m表示为整个计算程序被划分的计算颗粒数。

一种可能的实施方式中,所述定义对象存储所述集成电路模型对应的并行粗颗粒的计算条件、计算状态,以及管理进程与计算进程的消息内容存储包括:

针对所有的集成电路模型对应的并行粗颗粒,定义对象m,所述对象m包含以下字段:

集成电路模型对应的并行粗颗粒存储字段,记为data,该字段存储集成电路模型与电磁仿真计算相关的所有信息,包括定义集成电路模型的层坐标信息、集成电路各层的版图坐标信息、集成电路各层的介质参数信息、集成电路各层的连接关系以及集成电路的外部电路提取出来的电路模型;

集成电路模型对应的并行粗颗粒类型存储字段,记为type,该字段存储所述集成电路模型的仿真类型和集成电路模型的规模;所述集成电路模型的仿真类型包括:多层pcb版图模型、ic封装模型、多层尺度更小的芯片设计模型,以及多个集成电路模型的联合仿真;所述集成电路模型的规模包括:层数在4层以下的小规模集成电路模型、层数在4层以上20层以下的中等规模集成电路模型以及层数在20层以上的大规模集成电路模型;

将所述集成电路模型对应的网格剖分文件路径存储字段,记为path;

集成电路模型对应的并行粗颗粒计算条件存储字段,记为net,该字段存储不同集成电路模型的计算参数,包括:集成电路的直流压降分析和集成电路的电热耦合分析的端口参数、集成电路电源完整性分析参数、集成电路信号完整性分析参数、集成电路电源完整性与信号完整性优化参数、集成电路的电磁干扰和电磁兼容分析的仿真频率参数与仿真端口参数、集成电路的等效电路参数提取的端口参数与端口电压参数;

集成电路模型对应的并行粗颗粒计算状态存储字段,记为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泛指存储介质中的内存区。

一种可能的实施方式中,所述管理进程创建互斥体和线程,线程依据互斥体的状态创建计算进程,对计算粗颗粒进行分发并管理,包括:

第一单元:用于在云平台建立一个管理进程mk,如果建立成功,进入第二单元;如果建立失败,进入第七单元;

第二单元:用于定义并建立互斥体mutexwork和mutexexit,设置mutexwork=互斥体空闲,设置mutexexit=互斥体等待,定义对象m[data][type][path][net][state][message];将集成电路模型对应的并行粗颗粒存入对象m的[data];将归类集成电路模型对应的并行粗颗粒的类型存入对象m的[type];将集成电路模型对应的并行粗颗粒对应的生产网格剖分文件路径存入对象m的[path]中;将集成电路模型对应的并行粗颗粒的计算条件存入对象m中的[net];初始化对象m的state=c0_m0;初始化对象m的message为空;初始化进程号ki=1;

第三单元:用于管理进程mk建立第ki个计算进程,如果第ki个计算进程建立失败,暂停预定时间,第三单元;如果第ki个计算进程建立成功,将第ki个计算进程置于挂起状态;,如果ki=允许创建的最大进程数,进入第四单元,否则进入第三单元;ki为自然数;

第四单元:用于在mutexexit=互斥体空闲时,管理进程mk进入第七单元;否则管理进程mk进入http网络服务应答状态,查询所有计算进程的工作状态及进程池中的计算进程数,如果进程池中的计算进程数小于允许创建的最大计算进程数,进入第三单元,否则激活所有挂起状态的计算进程进入就绪状态并进入第五单元;

第五单元:用于在管理进程mk收到任意计算进程kj发送的其元素的字段message=inquire时,进入第六单元;否则直接进入第四单元;1≤j≤允许创建的最大进程数;

第六单元:用于管理进程mk建立一个线程tj进行应答工作,进入第四单元;

第七单元:用于删除互斥体mutexwork和mutexexit,向所有计算进程发送p_nn指令,关闭所有计算进程,销毁管理进程mk建立的所有线程,结束管理进程mk。

一种可能的实施方式中,所述第六单元包括:

第一子单元,用于在线程tj就绪进入指令分析阶段后,若指令为message=inquire,进入第三子单元;若指令为message=update,进入第二子单元;

第二子单元,用于在互斥体mutexwork=互斥体等待时,线程tj进入等待状态;若互斥体mutexwork=互斥体空闲,线程tj设置互斥体mutexwork=互斥体等待,线程tj更新数据区元素mi,线程tj设置互斥体mutexwork=互斥体空闲,线程tj自我销毁;

第三子单元,用于在互斥体mutexwork=互斥体等待时,线程tj进入等待状态;若互斥体mutexwork=互斥体空闲,线程tj设置互斥体mutexwork=互斥体等待,线程tj查询对象m的数据区,若对象m的所有元素的state=c_m,说明对象m的数据区所有计算任务都计算完毕,线程tj设置互斥体mutexwork=互斥体空闲,设置互斥体mutexexit=互斥体空闲,线程tj销毁;否则线程tj进入第四子单元;

第四子单元,用于对象m的某个元素mi的state=c0_m0时,更新该元素mi的state=c0_m1,管理进程mk回复计算进程kj的指令为该元素mi的字段message=p_y;

如果对象m的某个元素mi的state=c0_m,更新该元素mi的state=c1_m,管理进程mk回复计算进程kj的指令为该元素mi的字段message=p_n;

如果对象m的某个元素mi的state=c1_m或state=c_m,查询标记指向对象m的字段net的下一个元素,继续查询属于同一集成电路模型的并行粗颗粒,如果已遍历对象m的字段net的所有元素,则进入第三子单元,否则进入第四子单元;

如果对象m的某个元素mi的state=c0_m1,查询标记指向对象m的字段data的下一个元素,继续查询下一个集成电路模型的并行粗颗粒,如果已遍历对象m的字段data的所有元素,进入第三子单元,否则进入第四子单元。

一种可能的实施方式中,所述计算进程发送查询指令,管理进程创建线程对查询指令进行查询并应答,计算进程依据线程的应答进行响应,完成分发的计算粗颗粒,包括:

第一计算单元:用于计算进程ki发送该元素的字段message=inquire到管理进程mk;

第二计算单元:用于计算进程ki超过预定时间没收到管理进程mk返回的消息,进入第四计算单元;

如果计算进程ki收到的指令为该元素的字段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,进入第四计算单元;

如果计算进程ki收到的指令为元素mi的字段message=p_y,进入第三计算单元;

第三计算单元:用于计算进程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;

第四计算单元:用于中断预定时间,进入第一计算单元。

(三)有益效果

本发明提供的一种具有保密功能的集成电路仿真多线程管理并行方法及装置,将整个集成电路云平台电磁仿真分为两部分:云计算平台和客户端;客户端将需要计算的集成电路模型信息、计算条件提取出来,形成并行粗颗粒发送到云平台;云平台建立管理进程,管理进程创建互斥体和线程,线程依据工作互斥体的状态创建计算进程,对计算粗颗粒进行分发并管理;计算进程与管理进程创建的线程实现查询和应答的通信,完成分发的计算粗颗粒。本发明只将客户端提取的并行粗颗粒发送到云平台,而不是将整个集成电路模型的所有信息发送到云平台,从而避免了将集成电路模型通过互联网泄露出去;采用互斥体和线程对计算粗颗粒进行分发并管理,提高并行计算效率。

附图说明

以下参考附图描述的实施例是示例性的,旨在用于解释和说明本发明,而不能理解为对本发明的保护范围的限制。

图1是本发明提供的一种具有保密功能的集成电路仿真多线程管理并行方法的结构示意图。

图2是本发明提供的一种具有保密功能的集成电路仿真多线程管理并行方法的云平台管理进程的工作流程图。

图3是本发明提供的一种具有保密功能的集成电路仿真多线程管理并行方法的云平台管理进程创建的线程的工作流程图。

图4是本发明提供的一种具有保密功能的集成电路仿真多线程管理并行方法的云平台管理进程创建的计算进程的工作流程图。

图5是本发明提供的一种具有保密功能的多线程粗颗粒并行计算装置的结构示意图。

具体实施方式

为使本发明实施的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行更加详细的描述。

需要说明的是:在附图中,自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。所描述的实施例是本发明一部分实施例,而不是全部的实施例,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

在本发明的描述中,需要理解的是,术语“中心”、“纵向”、“横向”、“前”、“后”、“左”、“右”、“竖直”、“水平”、“顶”、“底”、“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,均仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明保护范围的限制。

下面参考图1详细描述本发明提供的一种具有保密功能的集成电路仿真多线程管理并行方法的第一实施例。如图1所示,本实施例提供的具有保密功能的集成电路仿真多线程管理并行方法主要包括有:

粗颗粒并行计算是一种高效的并行计算方法,由于其分割计算任务时仅对占绝对多的cpu计算时间的计算任务进行粗颗粒的分割,分割次数少,尽可能的减少了不同进程的通信时间;其次,结合计算任务随机动态分配的粗颗粒并行则进一步减少了不同进程的等待时间,因为不同计算任务所用的cpu时间不同,传统并行计算方法固定的给每个计算进程分配相同多的计算模型或计算任务,导致最终部分或大部分计算进程处于等待状态,直到最慢的进程计算完所有分配的计算任务。而计算任务随机动态分配的并行计算策略则并不固定事先给每个计算进程分配相同多的计算模型或计算任务,而是事先将计算任务随机打乱,并且按照先申请先分配的动态分配策略对各进程分配计算任务,同时,每个进程计算完成一个计算任务,即按照事先约定的格式将计算结果写入临时文件,无需等待立即申请分配下一个计算任务。这种计算任务随机动态分配的并行计算策略最大程度的避免了进程之间的通信和等待,最后进程等待时间最多为一个最基本的计算任务的时间,从而保证了并行计算效率最接近理想状态。

在超大规模集成电路仿真中还存在这样一个问题,在超大规模集成电路计算模型不变的情况下,在研究集成电路的频率响应和电压-电流响应曲线等问题时,不同的网格剖分会对计算场域带来不同的离散;即使每次生成的网格剖分是合理、高质量的,在完全相同的集成电路模型和条件下,由于生成的网格剖分不同,计算的结果也会有细微的差异,这些细微的结果差异本应作为计算误差不予考虑,但却对集成电路的频率响应曲线和电压-电流响应曲线有很大影响。从集成电路的电磁响应原理来说,其响应曲线应该是分段光滑的,其不光滑位置为集成电路的谐振点,但如果不光滑位置在计算集成电路的频率响应曲线和电压-电流响应曲线时,每个计算点采用了不同的网格剖分,则将导致计算出的响应曲线出现抖动,这些抖动正是由于不同网格带来的随机误差造成的。在对复杂的多尺度结构的超大规模集成电路进行网格剖分时,不可避免的采用非结构网格进行剖分,由于被剖分的集成电路版图模型具有非常强的多尺度结构,网格剖分的顺序、以及网格剖分过程中新节点插入产生的误差等都足以改变复杂的多尺度结构的超大规模集成电路剖分的网格,因此,通过不同时间以及不同计算进程对同一个集成电路模型剖分出的网格都是不一样的。为了避免不同网格剖分对集成电路的频率响应曲线和电压-电流响应曲线等曲线带来的抖动,本发明提出的一种分级粗颗粒并行计算策略,其基本思想是:将云计算平台带来的计算任务队列分为不同的计算任务级别,凡是集成电路模型不同的计算任务,作为第一并行级别;带有相同集成电路模型的计算任务,作为第二并行级别,第二并行计算级别包含了同一个集成电路模型的所有计算任务;采用某种控制策略,在基本不降低基于计算任务随机动态分配的并行计算策略的粗颗粒并行的计算效率的情况下,确保第二并行级别的所有计算任务都采用相同的计算网格,从而确保集成电路的频率响应曲线和电压-电流响应曲线等曲线的分段光滑特性。

将整个集成电路云平台电磁仿真分为两部分:第一部分为客户端,用于将客户提交需要云平台进行计算的集成电路模型信息、计算条件提取出来,形成并行粗颗粒发送到云平台;第二部分为云计算平台,其完成所有待仿真集成电路模型的粗颗粒并行,所述粗颗粒通过以下方法确定:将整个集成电路模型的电磁仿真分割成多个计算颗粒,获取各计算颗粒的加权cpu时间和总cpu时间,依据所述加权cpu时间和所述总cpu时间的占比确定出计算粗颗粒;所述计算颗粒为需要多次重复执行的计算单元;

在客户端读取所有需要仿真的集成电路模型,将需要云平台进行计算的集成电路模型信息、计算条件提取出来,形成并行粗颗粒发送到云平台,而不是将整个集成电路模型的所有信息发送到云平台;

在云平台创建管理进程,通过管理进程读取客户端发送的所有需要仿真的并行粗颗粒,定义对象存储所述集成电路模型对应的并行粗颗粒的计算条件、计算状态,以及管理进程与计算进程的消息内容存储;

管理进程创建互斥体和线程,线程依据互斥体的状态创建计算进程,对计算粗颗粒进行分发并管理;所述互斥体为防止多个线程同时对同一对象进行操作的机制,其状态包括:建立互斥体、互斥体等待、删除互斥对象和互斥体空闲。互斥体等待状态:表示此时处于堵塞状态,线程只能等待;互斥体空闲状态:表示此时线程可进入工作;

互斥体适用于进程同步和多线程同步;

互斥体只能唯一建立,只能删除互斥体后才能重新建立。

本申请的互斥体类似文件的只读,如果存在一个只读文件,那么新建或写入这个文件都会失败。基于文件进行的粗颗粒并行,其隐含的将判断计算任务是否可以进行交于“文件管理器”判定,通过判断文件是否存在或者只读等方式确定计算任务是否已经被其他进程占用,这种方法在计算任务达到数万或者数十万个的时候导致“文件管理器”任务很重,可能出现死机的问题。采用互斥体管理,不再需要文件标识,则避免了这一问题。

计算进程发送查询指令,管理进程创建线程对查询指令进行查询并应答,计算进程依据线程的应答进行响应,完成分发的计算粗颗粒;

当所有并行粗颗粒的计算任务都完成时,管理进程收集计算结果并将所有计算任务的计算结果整理生成最终计算结果。

将云平台的最终计算结果传送到客户端,由客户端对最终计算结果进行显示。

其中,所述将需要云平台进行计算的集成电路模型信息、计算条件提取出来,形成并行粗颗粒,具体包括:

在客户端将所有读取的集成电路模型的信息转化为实际计算的输入参数,删去所有与集成电路电磁仿真无关但对用户来说需要保密的信息,包括:集成电路模型中版图名称、元器件名称、功能、集成电路模型所用材料的名称,以及集成电路的外部电路名称;

依据实际计算的输入参数,划分出每个待仿真的集成电路模型的电磁仿真中多次重复执行的计算单元作为计算颗粒,将各计算颗粒的加权cpu时间按照从大到小的顺序排序并依次累加直到累加和超过90%的所述总cpu时间,将进行累加和的每个计算颗粒作为一个并行粗颗粒;

所述计算颗粒的加权cpu时间的计算公式为:

式中:表示为第i个计算颗粒的加权cpu时间,表示为第i个计算颗粒单次计算的cpu时间,表示为第i个计算颗粒执行的计算任务数;

所述整个计算过程的总cpu时间的计算公式为:

其中,t表示为整个计算过程的总cpu时间,m表示为整个计算程序被划分的计算颗粒数。

其中,所述定义对象存储所述集成电路模型对应的并行粗颗粒的计算条件、计算状态,以及管理进程与计算进程的消息内容存储包括:

针对所有的集成电路模型对应的并行粗颗粒,定义对象m,所述对象m包含以下字段:

集成电路模型对应的并行粗颗粒存储字段,记为data,该字段存储集成电路模型与电磁仿真计算相关的所有信息,包括定义集成电路模型的层坐标信息、集成电路各层的版图坐标信息、集成电路各层的介质参数信息、集成电路各层的连接关系以及集成电路的外部电路提取出来的电路模型;

集成电路模型对应的并行粗颗粒类型存储字段,记为type,该字段存储所述集成电路模型的仿真类型和集成电路模型的规模;所述集成电路模型的仿真类型包括:多层pcb版图模型、ic封装模型、多层尺度更小的芯片设计模型,以及多个集成电路模型的联合仿真;所述集成电路模型的规模包括:层数在4层以下的小规模集成电路模型、层数在4层以上20层以下的中等规模集成电路模型以及层数在20层以上的大规模集成电路模型;

将所述集成电路模型对应的网格剖分文件路径存储字段,记为path;

集成电路模型对应的并行粗颗粒计算条件存储字段,记为net,该字段存储不同集成电路模型的计算参数,包括:集成电路的直流压降分析和集成电路的电热耦合分析的端口参数、集成电路电源完整性分析参数、集成电路信号完整性分析参数、集成电路电源完整性与信号完整性优化参数、集成电路的电磁干扰和电磁兼容分析的仿真频率参数与仿真端口参数、集成电路的等效电路参数提取的端口参数与端口电压参数;

集成电路模型对应的并行粗颗粒计算状态存储字段,记为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文件。

其中,所述管理进程创建互斥体和线程,线程依据互斥体的状态创建计算进程,对计算粗颗粒进行分发并管理,包括:

步骤1.1,在云平台建立一个管理进程mk,若建立成功,进入步骤1.2,若建立失败,进入步骤1.7;

步骤1.2,定义并建立互斥体mutexdata和mutexexit,设置mutexwork=互斥体空闲,设置mutexexit=互斥体等待,定义对象m[data][type][path][net][state][message],定义对象m的元素mi为与并行粗颗粒对应的对象m字段data、type、path、net的具体实例;将集成电路模型对应的并行粗颗粒存入对象m的[data];将归类集成电路模型对应的并行粗颗粒的类型存入对象m的[type];将集成电路模型对应的并行粗颗粒对应的生产网格剖分文件路径存入对象m的[path]中;将集成电路模型对应的并行粗颗粒的计算条件存入对象m中的[net];初始化对象m的state=c0_m0;初始化对象m的message为空;初始化进程号ki=1;

步骤1.3:管理进程mk建立第ki个计算进程,如果第ki个计算进程建立失败,暂停预定时间,进入步骤1.3;如果第ki个计算进程建立成功,将第ki个计算进程置于挂起状态;,如果ki=允许创建的最大进程数,进入步骤1.4,否则进入步骤1.3;ki为自然数;

步骤1.4:如果mutexexit=互斥体空闲,管理进程mk进入步骤1.7;否则管理进程mk进入http网络服务应答状态,查询所有计算进程的工作状态(包括挂起、就绪和退出状态)及进程池中的计算进程数,如果进程池中的计算进程数小于允许创建的最大计算进程数,进入步骤1.3,否则激活所有挂起状态的计算进程进入就绪状态并进入步骤1.5;

步骤1.5:如果管理进程mk收到任意计算进程kj发送的其元素的字段message=inquire,进入步骤1.6;否则直接进入步骤1.4;1≤j≤允许创建的最大进程数;

步骤1.6:管理进程mk建立一个线程tj进行应答工作,进入步骤1.4;

步骤1.7:删除互斥体mutexwork和mutexexit,向所有计算进程发送p_nn指令,关闭所有计算进程,销毁管理进程mk建立的所有线程,结束管理进程mk。

其中,所述步骤1.6包括:

步骤1.6.1,线程tj就绪进入指令分析阶段,若指令为message=inquire,进入步骤1.6.3;若指令为message=update,进入步骤1.6.2;

步骤1.6.2,若互斥体mutexwork=互斥体等待,线程tj进入等待状态;若互斥体mutexwork=互斥体空闲,线程tj设置互斥体mutexwork=互斥体等待,线程tj更新数据区元素mi,线程tj设置互斥体mutexwork=互斥体空闲,线程tj自我销毁;

步骤1.6.3,若互斥体mutexwork=互斥体等待,线程tj进入等待状态;若互斥体mutexwork=互斥体空闲,线程tj设置互斥体mutexwork=互斥体等待,线程tj查询对象m的数据区,若对象m的所有元素的mutexwork,说明对象m的数据区所有计算任务都计算完毕,线程tj设置互斥体mutexwork=互斥体空闲,设置互斥体mutexexit=互斥体空闲,线程tj销毁;否则线程tj进入步骤1.6.4;

步骤1.6.4,如果对象m的某个元素mi的state=c0_m0,更新该元素mi的state=c0_m1,管理进程mk回复计算进程kj的指令为该元素mi的字段message=p_y;

如果对象m的某个元素mi的state=c0_m,更新该元素mi的state=c1_m,管理进程mk回复计算进程kj的指令为该元素mi的字段message=p_n;

如果对象m的某个元素mi的state=c1_m或state=c_m,查询标记指向对象m的字段net的下一个元素,继续查询属于同一集成电路模型的并行粗颗粒,如果已遍历对象m的字段net的所有元素,则进入步骤1.6.3,否则进入步骤1.6.4;

如果对象m的某个元素mi的state=c0_m1,查询标记指向对象m的字段data的下一个元素,继续查询下一个集成电路模型的并行粗颗粒,如果已遍历对象m的字段data的所有元素,进入步骤1.6.3,否则进入步骤1.6.4。

其中,所述计算进程发送查询指令,管理进程创建线程对查询指令进行查询并应答,计算进程依据线程的应答进行响应,完成分发的计算粗颗粒,包括:

步骤2.1:计算进程ki发送该元素的字段message=inquire到管理进程mk;

步骤2.2:如果计算进程ki超过预定时间没收到管理进程mk返回的消息,进入步骤2.4;

如果计算进程ki收到的指令为该元素的字段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,进入步骤2.4;

如果计算进程ki收到的指令为元素mi的字段message=p_y,进入步骤2.3;

步骤2.3:计算进程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;

步骤2.4:中断预定时间,进入步骤2.1。

本发明将整个集成电路云平台电磁仿真分为两部分:云计算平台和客户端;客户端将需要计算的集成电路模型信息、计算条件提取出来,形成并行粗颗粒发送到云平台;云平台建立管理进程,管理进程创建互斥体和线程,线程依据工作互斥体的状态创建计算进程,对计算粗颗粒进行分发并管理;计算进程与管理进程创建的线程实现查询和应答的通信,完成分发的计算粗颗粒。本发明只将客户端提取的并行粗颗粒发送到云平台,而不是将整个集成电路模型的所有信息发送到云平台,从而避免了将集成电路模型通过互联网泄露出去;采用互斥体和线程对计算粗颗粒进行分发并管理,提高并行计算效率。

下面参考图2详细描述本发明提供的一种具有保密功能的多线程粗颗粒并行计算装置的第一实施例。如图2所示,本实施例提供的具有保密功能的多线程粗颗粒并行计算装置主要包括有:第一模块、第二模块、第三模块、第四模块、第五模块、第六模块和第七模块。

粗颗粒并行计算是一种高效的并行计算方法,由于其分割计算任务时仅对占绝对多的cpu计算时间的计算任务进行粗颗粒的分割,分割次数少,尽可能的减少了不同进程的通信时间;其次,结合计算任务随机动态分配的粗颗粒并行则进一步减少了不同进程的等待时间,因为不同计算任务所用的cpu时间不同,传统并行计算方法固定的给每个计算进程分配相同多的计算模型或计算任务,导致最终部分或大部分计算进程处于等待状态,直到最慢的进程计算完所有分配的计算任务。而计算任务随机动态分配的并行计算策略则并不固定事先给每个计算进程分配相同多的计算模型或计算任务,而是事先将计算任务随机打乱,并且按照先申请先分配的动态分配策略对各进程分配计算任务,同时,每个进程计算完成一个计算任务,即按照事先约定的格式将计算结果写入临时文件,无需等待立即申请分配下一个计算任务。这种计算任务随机动态分配的并行计算策略最大程度的避免了进程之间的通信和等待,最后进程等待时间最多为一个最基本的计算任务的时间,从而保证了并行计算效率最接近理想状态。

在超大规模集成电路仿真中还存在这样一个问题,在超大规模集成电路计算模型不变的情况下,在研究集成电路的频率响应和电压-电流响应曲线等问题时,不同的网格剖分会对计算场域带来不同的离散;即使每次生成的网格剖分是合理、高质量的,在完全相同的集成电路模型和条件下,由于生成的网格剖分不同,计算的结果也会有细微的差异,这些细微的结果差异本应作为计算误差不予考虑,但却对集成电路的频率响应曲线和电压-电流响应曲线有很大影响。从集成电路的电磁响应原理来说,其响应曲线应该是分段光滑的,其不光滑位置为集成电路的谐振点,但如果不光滑位置在计算集成电路的频率响应曲线和电压-电流响应曲线时,每个计算点采用了不同的网格剖分,则将导致计算出的响应曲线出现抖动,这些抖动正是由于不同网格带来的随机误差造成的。在对复杂的多尺度结构的超大规模集成电路进行网格剖分时,不可避免的采用非结构网格进行剖分,由于被剖分的集成电路版图模型具有非常强的多尺度结构,网格剖分的顺序、以及网格剖分过程中新节点插入产生的误差等都足以改变复杂的多尺度结构的超大规模集成电路剖分的网格,因此,通过不同时间以及不同计算进程对同一个集成电路模型剖分出的网格都是不一样的。为了避免不同网格剖分对集成电路的频率响应曲线和电压-电流响应曲线等曲线带来的抖动,本发明提出的一种分级粗颗粒并行计算策略,其基本思想是:将云计算平台带来的计算任务队列分为不同的计算任务级别,凡是集成电路模型不同的计算任务,作为第一并行级别;带有相同集成电路模型的计算任务,作为第二并行级别,第二并行计算级别包含了同一个集成电路模型的所有计算任务;采用某种控制策略,在基本不降低基于计算任务随机动态分配的并行计算策略的粗颗粒并行的计算效率的情况下,确保第二并行级别的所有计算任务都采用相同的计算网格,从而确保集成电路的频率响应曲线和电压-电流响应曲线等曲线的分段光滑特性。

第一模块,用于在客户端读取所有需要仿真的集成电路模型,将需要云平台进行计算的集成电路模型信息、计算条件提取出来,形成并行粗颗粒发送到云平台,而不是将整个集成电路模型的所有信息发送到云平台;

第二模块,用于将所有待仿真的集成电路模型的电磁仿真分割成多个计算颗粒,获取各计算颗粒的加权cpu时间和总cpu时间,依据所述加权cpu时间和所述总cpu时间的占比确定出计算粗颗粒;所述计算颗粒为需要多次重复执行的计算单元;

第三模块,用于在云平台创建管理进程,通过管理进程读取客户端发送的所有需要仿真的并行粗颗粒,定义对象存储所述集成电路模型对应的并行粗颗粒的计算条件、计算状态,以及管理进程与计算进程的消息内容存储;

第四模块,用于管理进程创建互斥体和线程,线程依据互斥体的状态创建计算进程,对计算粗颗粒进行分发并管理;所述互斥体为防止多个线程同时对同一对象进行操作的机制,其状态包括:建立互斥体、互斥体等待、删除互斥对象和互斥体空闲。

互斥体适用于进程同步和多线程同步;

互斥体等待状态,表示此时处于堵塞状态,线程只能等待;

互斥体空闲状态,表示此时线程可以进入工作;

互斥体只能唯一建立,只能删除互斥体后才能重新建立。

本申请的互斥体类似文件的只读,如果存在一个只读文件,那么新建或写入这个文件都会失败。基于文件进行的粗颗粒并行,其隐含的将判断计算任务是否可以进行交于“文件管理器”判定,通过判断文件是否存在或者只读等方式确定计算任务是否已经被其他进程占用,这种方法在计算任务达到数万或者数十万个的时候导致“文件管理器”任务很重,可能出现死机的问题。采用互斥体管理,不再需要文件标识,则避免了这一问题。

第五模块,用于计算进程发送查询指令,管理进程创建线程对查询指令进行查询并应答,计算进程依据线程的应答进行响应,完成分发的计算粗颗粒;

第六模块,用于当所有并行粗颗粒的计算任务都完成时,管理进程收集计算结果并将所有计算任务的计算结果整理生成最终计算结果。

第七模块,用于将云平台的最终计算结果传送到客户端,由客户端对最终计算结果进行显示。

其中,所述将需要云平台进行计算的集成电路模型信息、计算条件提取出来,形成并行粗颗粒,具体包括:

在客户端将所有读取的集成电路模型的信息转化为实际计算的输入参数,删去所有与集成电路电磁仿真无关但对用户来说需要保密的信息,包括:集成电路模型中版图名称、元器件名称、功能、集成电路模型所用材料的名称,以及集成电路的外部电路名称;

依据实际计算的输入参数,划分出每个待仿真的集成电路模型的电磁仿真中多次重复执行的计算单元作为计算颗粒,将各计算颗粒的加权cpu时间按照从大到小的顺序排序并依次累加直到累加和超过90%的所述总cpu时间,将进行累加和的每个计算颗粒作为一个并行粗颗粒;

所述计算颗粒的加权cpu时间的计算公式为:

式中:表示为第i个计算颗粒的加权cpu时间,表示为第i个计算颗粒单次计算的cpu时间,表示为第i个计算颗粒执行的计算任务数;

所述整个计算过程的总cpu时间的计算公式为:

其中,t表示为整个计算过程的总cpu时间,m表示为整个计算程序被划分的计算颗粒数。

其中,所述定义对象存储所述集成电路模型对应的并行粗颗粒的计算条件、计算状态,以及管理进程与计算进程的消息内容存储包括:

针对所有的集成电路模型对应的并行粗颗粒,定义对象m,所述对象m包含以下字段:

集成电路模型对应的并行粗颗粒存储字段,记为data,该字段存储集成电路模型与电磁仿真计算相关的所有信息,包括定义集成电路模型的层坐标信息、集成电路各层的版图坐标信息、集成电路各层的介质参数信息、集成电路各层的连接关系以及集成电路的外部电路提取出来的电路模型;

集成电路模型对应的并行粗颗粒类型存储字段,记为type,该字段存储所述集成电路模型的仿真类型和集成电路模型的规模;所述集成电路模型的仿真类型包括:多层pcb版图模型、ic封装模型、多层尺度更小的芯片设计模型,以及多个集成电路模型的联合仿真;所述集成电路模型的规模包括:层数在4层以下的小规模集成电路模型、层数在4层以上20层以下的中等规模集成电路模型以及层数在20层以上的大规模集成电路模型;

将所述集成电路模型对应的网格剖分文件路径存储字段,记为path;

本申请采用管理进程将集成电路模型文件中需要计算的信息提取出来,管理进程只发送需要计算的信息到云平台而不是整个集成电路模型的文件,以此实现保密的功能。

集成电路模型对应的并行粗颗粒计算条件存储字段,记为net,该字段存储不同集成电路模型的计算参数,包括:集成电路的直流压降分析和集成电路的电热耦合分析的端口参数、集成电路电源完整性分析参数、集成电路信号完整性分析参数、集成电路电源完整性与信号完整性优化参数、集成电路的电磁干扰和电磁兼容分析的仿真频率参数与仿真端口参数、集成电路的等效电路参数提取的端口参数与端口电压参数;

集成电路模型对应的并行粗颗粒计算状态存储字段,记为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文件。

其中,所述管理进程创建互斥体和线程,线程依据互斥体的状态创建计算进程,对计算粗颗粒进行分发并管理,包括:

第一单元:用于在云平台建立一个管理进程mk,如果建立成功,进入第二单元;如果建立失败,进入第七单元;

第二单元:用于定义并建立互斥体mutexwork和mutexexit,设置mutexwork=互斥体空闲,设置mutexexit=互斥体等待,定义对象m[data][type][path][net][state][message],定义对象m的元素mi为与并行粗颗粒对应的对象m字段data、type、path、net的具体实例;从客户端读取所有需要仿真的集成电路模型,将集成电路模型对应的并行粗颗粒存入对象m的[data];将归类集成电路模型对应的并行粗颗粒的类型存入对象m的[type];将集成电路模型的对应的并行粗颗粒对应的生产网格剖分文件路径存入对象m的[path]中;将集成电路模型对应的并行粗颗粒的计算条件存入对象m中的[net];初始化对象m的state=c0_m0;初始化对象m的message为空;初始化进程号ki=1;计算相关信息包括:不包括原始集成电路模型信息的集成电路模型的每个多边形数字编号、数字层编号、多边形顶点坐标、不同金属层、介质层厚度、不同介质层电磁参数以及外部电路。

第三单元:用于管理进程mk建立第ki个计算进程,如果第ki个计算进程建立失败,暂停预定时间,第三单元;如果第ki个计算进程建立成功,将第ki个计算进程置于挂起状态;,如果ki=允许创建的最大进程数,进入第四单元,否则进入第三单元;ki为自然数;

第四单元:用于在mutexexit=互斥体空闲时,管理进程mk进入第七单元;否则管理进程mk进入http网络服务应答状态,查询所有计算进程的工作状态(包括挂起、就绪和退出状态)及进程池中的计算进程数,如果进程池中的计算进程数小于允许创建的最大计算进程数,进入第三单元,否则激活所有挂起状态的计算进程进入就绪状态并进入第五单元;

第五单元:用于在管理进程mk收到任意计算进程kj发送的其元素的字段message=inquire时,进入第六单元;否则直接进入第四单元;1≤j≤允许创建的最大进程数;

第六单元:用于管理进程mk建立一个线程tj进行应答工作,进入第四单元;

第七单元:用于删除互斥体mutexwork和mutexexit,向所有计算进程发送p_nn指令,关闭所有计算进程,销毁管理进程mk建立的所有线程,结束管理进程mk。

其中,所述第六单元包括:

第一子单元,用于在线程tj就绪进入指令分析阶段后,若指令为message=inquire,进入第三子单元;若指令为message=update,进入第二子单元;

第二子单元,用于在互斥体mutexwork=互斥体等待时,线程tj进入等待状态;若互斥体mutexwork=互斥体空闲,线程tj设置互斥体mutexwork=互斥体等待,线程tj更新数据区元素mi,线程tj设置互斥体mutexwork=互斥体空闲,线程tj自我销毁;

第三子单元,用于在互斥体mutexwork=互斥体等待时,线程tj进入等待状态;若互斥体mutexwork=互斥体空闲,线程tj设置互斥体mutexwork=互斥体等待,线程tj查询对象m的数据区,若对象m的所有元素的state=c_m,说明对象m的数据区所有计算任务都计算完毕,线程tj设置互斥体mutexwork=互斥体空闲,设置互斥体mutexexit=互斥体空闲,线程tj销毁;否则线程tj进入第四子单元;

第四子单元,用于对象m的某个元素mi的state=c0_m0时,更新该元素mi的state=c0_m1,管理进程mk回复计算进程kj的指令为该元素mi的字段message=p_y;

如果对象m的某个元素mi的state=c0_m,更新该元素mi的state=c1_m,管理进程mk回复计算进程kj的指令为该元素mi的字段message=p_n;

如果对象m的某个元素mi的state=c1_m或state=c_m,查询标记指向对象m的字段net的下一个元素,继续查询属于同一集成电路模型的并行粗颗粒,如果已遍历对象m的字段net的所有元素,则进入第三子单元,否则进入第四子单元;

如果对象m的某个元素mi的state=c0_m1,查询标记指向对象m的字段data的下一个元素,继续查询下一个集成电路模型的并行粗颗粒,如果已遍历对象m的字段data的所有元素,进入第三子单元,否则进入第四子单元。

其中,所述计算进程发送查询指令,管理进程创建线程对查询指令进行查询并应答,计算进程依据线程的应答进行响应,完成分发的计算粗颗粒,包括:

第一计算单元:用于计算进程ki发送该元素的字段message=inquire到管理进程mk;

第二计算单元:用于计算进程ki超过预定时间没收到管理进程mk返回的消息,进入第四计算单元;

如果计算进程ki收到的指令为该元素的字段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,进入第四计算单元;

如果计算进程ki收到的指令为元素mi的字段message=p_y,进入第三计算单元;

第三计算单元:用于计算进程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;

第四计算单元:用于中断预定时间,进入第一计算单元。

本发明将整个集成电路云平台电磁仿真分为两部分:云计算平台和客户端;客户端将需要计算的集成电路模型信息、计算条件提取出来,形成并行粗颗粒发送到云平台;云平台建立管理进程,管理进程创建互斥体和线程,线程依据工作互斥体的状态创建计算进程,对计算粗颗粒进行分发并管理;计算进程与管理进程创建的线程实现查询和应答的通信,完成分发的计算粗颗粒。本发明只将客户端提取的并行粗颗粒发送到云平台,而不是将整个集成电路模型的所有信息发送到云平台,从而避免了将集成电路模型通过互联网泄露出去;采用互斥体和线程对计算粗颗粒进行分发并管理,提高并行计算效率。

以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。

再多了解一些
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1