CN103198177A - 基于gpu的集成电路电容参数提取系统及方法 - Google Patents
基于gpu的集成电路电容参数提取系统及方法 Download PDFInfo
- Publication number
- CN103198177A CN103198177A CN2013100761741A CN201310076174A CN103198177A CN 103198177 A CN103198177 A CN 103198177A CN 2013100761741 A CN2013100761741 A CN 2013100761741A CN 201310076174 A CN201310076174 A CN 201310076174A CN 103198177 A CN103198177 A CN 103198177A
- Authority
- CN
- China
- Prior art keywords
- gpu
- walking
- conductor
- leading body
- capacitance
- 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.)
- Granted
Links
Images
Abstract
一种基于GPU的集成电路电容参数提取系统及方法,该系统包括随机行走开始模块、随机行走跳转模块及随机行走统计模块。各模块在GPU的全局存储器上进行数据交换。每个模块并行运行多个GPU线程。随机行走开始模块中,每个GPU线程生成指定数量的行走起始点并获得行走起始点对应的权值。随机行走跳转模块中,每个GPU线程进行指定次数随机行走,获得每次行走击中导体的编号。随机行走统计模块中,每个GPU线程读取指定数量的击中导体的编号及相应的行走起始点对应的权值用以计算累计电容值及累计电容平方和。若主导体自电容的相对误差未达到目标精度,则估算还需行走的路径数。本发明能够实现集成电路电容参数的快速提取。
Description
技术领域
本发明涉及VLSI(Very Large Scale Integrated circuits,超大规模集成电路)物理设计领域,特别是关于集成电路互连电容参数的提取与电路时延分析。
背景技术
集成电路的设计流程中首先要提出功能描述,然后经过逻辑设计、版图设计得到描述半导体工艺尺寸、结构的版图,最后进行版图验证,即通过计算机软件模拟来验证上述设计是否满足要求。若满足要求,则进行下一步的生产制造。否则,若不满足要求,则返回逻辑设计、版图设计进行必要的修正。在版图验证中,一个重要的环节是“互连寄生参数提取”。
随着集成电路制造技术的发展,电路规模不断增大、特征尺寸不断缩小,当今很多芯片已含有几千万乃至上亿个器件。然而,集成电路中互连线的寄生效应造成互连线对电路延时的影响已超过了器件对电路延时的影响。因此,需要对互连线的电容、电阻等参数进行准确的计算,以保证电路模拟与验证的正确有效性。为了提高计算精度,互连线之间的电容参数提取需要使用三维提取方法,即利用三维场求解器进行求解。场求解器的计算往往耗时较多,对其算法的优化与加速研究意义很大。
在集成电路电容参数提取的场求解器方法中,随机行走电容提取算法是一种比较流行的方法。申请人在第十七届国际会议Asia and South Pacific Design Automation Conference 2012发表的论文“Fast Floating Random Walk Algorithm for Capacitance Extraction with Numerical Characterization of Green's Function”中,公开了一种集成电路多层介质工艺随机行走电容提取方法。该方法在给定集成电路多层介质工艺的条件下(即导体周围为多层介质),预计算随机行走算法中需要的信息(如多层介质层转移区域的转移概率分布以及相应权值分布数据)并应用于随机行走算法中,从而在多层介质情况下进行电容参数提取时能进行跨介质层的跳转操作。然而,所述论文中提取电容参数的方法仍然耗时较多,因此,其效率有待提高。
发明内容
鉴于以上内容,有必要提供一种基于GPU的集成电路电容参数提取系统与方法,能够快速计算集成电路中主导体与每个环境导体之间的电容参数。
一种基于GPU的集成电路电容参数提取系统,运行于计算设备中,该计算设备包括存储设备、CPU及GPU,所述存储设备存储集成电路版图、预先建立的格林函数库及权值向量,该系统包括:初始化模块,用于(a)设置目标精度q、GPU线程数threadNum、GPU线程块的数目blockNum及总目标路径数pathGoal,其中blockNum是threadNum的约数;(b)从所述存储设备中读取集成电路版图、格林函数库及权值向量;(c)在CPU的内存及GPU的全局存储器中分配电容参数提取所需的存储空间并初始化变量;(d)在所述集成电路版图中建立一个包围主导体的高斯面,高斯面内仅包含主导体并且不与任何环境导体相交;及(e)根据GPU线程数threadNum、GPU线程块的数目blockNum及总目标路径数pathGoal,计算每个GPU线程块的最小目标路径数blockWalkMin与每个GPU线程的最大目标路径数threadWalkMax;随机行走开始模块,用于(f)并行地运行threadNum个GPU线程,每个GPU线程根据建立的高斯面及读取的格林函数库生成threadWalkMax个行走起始点,根据读取的权值向量查找行走起始点对应的权值,并将行走起始点的坐标及行走起始点对应的权值存储到GPU的全局存储器中;随机行走跳转模块,用于(g)并行地运行blockNum个GPU线程块,GPU线程块中的每个GPU线程不断地从GPU的全局存储器中读取行走起始点进行随机行走,直到GPU线程执行了threadWalkMax次行走,或者整个GPU线程块执行了blockWalkMin次行走,每次行走从一个行走起始点开始,直到击中某一导体,将每次行走击中导体的编号存储到GPU的全局存储器中,当所有GPU线程块都执行了blockWalkMin次行走,本模块结束;随机行走统计模块,用于(h)并行地运行threadNum个GPU线程,从GPU的全局存储器中读取随机行走跳转模块存储的击中导体的编号及相应的行走起始点对应的权值,根据读取的击中导体的编号及相应的行走起始点对应的权值计算主导体与每个环境导体的累计电容值及累计电容平方和,并将计算的主导体与每个环境导体的累计电容值及累计电容平方和存储到GPU的全局存储器中;及控制模块,用于(i)将GPU的全局存储器中存储的主导体与每个环境导体的累计电容值及累计电容平方和复制到CPU的内存中;及(j)根据CPU的内存中存储的主导体与每个环境导体的累计电容值及累计电容平方和计算主导体的自电容的相对误差relError,若relError小于等于目标精度q,则计算主导体与每个环境导体之间的耦合电容及主导体的自电容,否则,若relError大于目标精度q,则更新总目标路径数pathGoal,更新后的总目标路径数即达到目标精度还需行走的路径数。
一种基于GPU的集成电路电容参数提取方法,应用于计算设备中,该计算设备包括存储设备、CPU及GPU,所述存储设备存储集成电路版图、预先建立的格林函数库及权值向量,该方法包括:(a)设置目标精度q、GPU线程数threadNum及总目标路径数pathGoal,其中blockNum是threadNum的约数;(b)从所述存储设备中读取集成电路版图、格林函数库及权值向量;(c)在CPU的内存及GPU的全局存储器中分配电容参数提取所需的存储空间并初始化变量;(d)在所述集成电路版图中建立一个包围主导体的高斯面,高斯面内仅包含主导体并且不与任何环境导体相交;(e)根据GPU线程数threadNum、GPU线程块的数目blockNum及总目标路径数pathGoal,计算每个GPU线程块的最小目标路径数blockWalkMin与GPU线程的最大目标路径数threadWalkMax;(f)并行地运行threadNum个GPU线程,每个GPU线程根据建立的高斯面及读取的格林函数库生成threadWalkMax个行走起始点,根据读取的权值向量查找行走起始点对应的权值,并将行走起始点的坐标及行走起始点对应的权值存储到GPU的全局存储器中;(g)并行地运行blockNum个GPU线程块,GPU线程块中的每个GPU线程不断地从GPU的全局存储器中读取行走起始点进行随机行走,每次行走从一个行走起始点开始,直到击中某一导体,将每次行走击中导体的编号存储到GPU的全局存储器中,直到GPU线程执行了threadWalkMax次行走,或者整个GPU线程块执行了blockWalkMin次行走,当所有GPU线程块都执行了blockWalkMin次行走,本步骤结束;(h)并行地运行threadNum个GPU线程,从GPU的全局存储器中读取步骤(g)中存储的击中导体的编号及相应的行走起始点对应的权值,根据读取的击中导体的编号及相应的行走起始点对应的权值计算主导体与每个环境导体的累计电容值及累计电容平方和,并将计算的主导体与每个环境导体的累计电容值及累计电容平方和存储到GPU的全局存储器中;(i)将GPU的全局存储器中存储的主导体与每个环境导体的累计电容值及累计电容平方和复制到CPU的内存中;(j)根据CPU的内存中存储的主导体与每个环境导体的累计电容值及累计电容平方和计算主导体的自电容的相对误差relError,若relError小于等于目标精度q,则计算主导体与每个环境导体之间的耦合电容及主导体的自电容,否则,若relError大于目标精度q,则更新总目标路径数pathGoal,然后返回步骤(e),更新后的总目标路径数即达到目标精度还需行走的路径数。
本发明利用GPU(Graphic Processing Unit,图形处理器)的并行处理能力来加快随机行走电容提取算法的计算速度。目前,GPU已成为具有众多计算核心的通用计算设备,GPU采用单指令多数据(SIMD)的并行计算方式。使用GPU进行并行计算时,多个线程被组织成线程块(thread block),整个线程块中的线程按SIMD方式并行执行。而且,在并行计算资源调度中,GPU线程块是基本单元。
本发明将随机行走算法分成三个不同的模块,不同的模块之间通过在GPU全局存储器上的存储空间进行数据交换。通过模块分割,本发明能够有效减少GPU上不同线程的指令分歧,从而有效提高并行计算效率。此外,本发明通过整体迭代与估算剩余的随机行走路径数目,能根据所设目标精度自动确定所需的随机行走路径数,达到了加快收敛过程、减少总计算时间的效果。
附图说明
图1是本发明基于GPU的集成电路电容参数提取系统较佳实施例的运行环境示意图。
图2是集成电路的导体分布示意图。
图3是本发明基于GPU的集成电路电容参数提取方法的示意图。
图4是图1中基于GPU的集成电路电容参数提取系统的功能模块图。
图5是本发明基于GPU的集成电路电容参数提取方法较佳实施例的流程图。
图6是图5中步骤S506的细化流程图。
图7是图5中步骤S507的细化流程图。
图8是图5中步骤S508的细化流程图。
图9是图5中步骤S510的细化流程图。
主要元件符号说明
计算设备 | 1 |
基于GPU的集成电路电容参数提取系统 | 10 |
存储设备 | 11 |
CPU | 12 |
GPU | 13 |
初始化模块 | 400 |
随机行走开始模块 | 410 |
随机行走跳转模块 | 420 |
随机行走统计模块 | 430 |
控制模块 | 440 |
如下具体实施方式将结合上述附图进一步说明本发明。
具体实施方式
参阅图1所示,是本发明基于GPU的集成电路电容参数提取系统较佳实施例的运行环境示意图。所述基于GPU的集成电路电容参数提取系统10运行于计算设备1中。该计算设备1还包括存储设备11、CPU(Central Processing Unit,中央处理器)12及GPU(Graphic Processing Unit,图形处理器)13。所述存储设备11存储集成电路版图,该集成电路版图描述集成电路的导体(包括主导体与环境导体)在空间的分布情况。所述存储设备11还存储预先建立的格林函数库和权值向量。所述格林函数库描述随机行走过程中转移区域的转移概率分布,所述权值向量存储行走起始点对应的权值。所述格林函数库可以描述单一介质转移区域的转移概率分布,用于提取单一介质条件下集成电路电容参数。所述格林函数库还可以描述多层介质转移区域的转移概率分布,用于提取多层介质条件下集成电路电容参数。格林函数库与权值向量的建立方法可参考申请人在第十七届国际会议Asia and South Pacific Design Automation Conference 2012发表的论文“Fast Floating Random Walk Algorithm for Capacitance Extraction with Numerical Characterization of Green's Function”(以下称ASP-DAC2012)。所述存储设备11还存储基于GPU的集成电路电容参数提取系统10的程序代码及运行过程中所需的数据。所述CPU 12及GPU 13执行基于GPU的集成电路电容参数提取系统10的程序代码,以快速计算集成电路中主导体与每个环境导体之间电容参数。
参阅图2所示,是集成电路的导体分布示意图。如图所示,集成电路包含上下两个金属布线层,每层包含4根导体,分别用数字21~28表示。导体之间间隔一定距离,同层导体相互平行,不同层导体相互垂直。假设导体22为主导体,导体21、23~28为环境导体,本发明可快速计算主导体22与每个环境导体21、23~28的电容参数。
参阅图3所示,是本发明基于GPU的集成电路电容参数提取方法的示意图,图中仅画出一条随机行走路径。21~25对应于图2中相同编号的导体,表示图2中相同编号的导体的横截面,其中,导体22是主导体,导体21、23~25是环境导体。30是包围主导体22的高斯面,31、32、33、34是行走点。35、36、37分别对应行走点31、32、33构造的极大的不包含任何导体的立方体转移区域。行走开始时,首先在高斯面30上取点31,以点31为中心构造一个极大的不包含任何导体的立方体转移区域35。根据预先建立的格林函数库,在立方体转移区域35上取点32,32又称行走起始点。根据行走起始点32与点31的坐标,从预先建立的权值向量中查找行走起始点32对应的权值。由于行走起始点32不与任何导体接触,构造包围32的极大的不包含任何导体的立方体转移区域36,并根据格林函数库在36上取点33。由于点33不与任何导体接触,构造包围33的极大的不包含任何导体的立方体转移区域37,并根据格林函数库在37上取点34。由于点34与导体25接触,本次行走结束。其中,导体25为本次行走击中导体。将行走起始点32对应的权值记录为对主导体22与环境导体25的耦合电容的一个采样估计。
参阅图4所示,是图1中基于GPU的集成电路电容参数提取系统的功能模块图。所述基于GPU的集成电路电容参数提取系统10包括初始化模块400、随机行走开始模块410、随机行走跳转模块420、随机行走统计模块430及控制模块440。其中,初始化模块400及控制模块440运行于CPU 12中,随机行走开始模块410、随机行走跳转模块420及随机行走统计模块430运行于GPU 13中。图5将对功能模块400-440进行详细描述。
参阅图5所示,是本发明基于GPU的集成电路电容参数提取方法较佳实施例的流程图。
步骤S501,初始化模块400设置目标精度q(例如0.5%)、GPU线程数threadNum、GPU线程块的数目blockNum及总目标路径数pathGoal,其中blockNum是threadNum的约数。
步骤S502,初始化模块400从存储设备11中读取集成电路版图、预先建立的格林函数库及权值向量。如前所述,所述集成电路版图描述集成电路的导体(包括主导体与环境导体)在空间的分布情况,所述格林函数库描述随机行走过程中转移区域的转移概率分布,所述权值向量存储行走起始点对应的权值。
步骤S503,初始化模块400在CPU 12的内存及GPU 13的全局存储器(global memory)中分配电容参数提取所需的存储空间并初始化变量。
在本实施例中,假设所述集成电路版图中包含condNum个导体,初始化模块400使用c语言中的malloc指令在CPU 12的内存上创建大小为condNum的浮点数组h_cap、h_cap_sq、h_error,并将数组h_cap、h_cap_sq、h_error中所有元素的值设置为0。使用CUDA语言中的cudaMalloc语句在GPU 13的全局存储器中创建大小为condNum的浮点数组 d_cap、d_cap_sq,并将数组d_cap、d_cap_sq中所有元素的值设置为0。其中,数组h_cap、d_cap用于存储主导体与每个环境导体的累计电容值,数组h_cap_sq、d_cap_sq用于存储主导体与每个环境导体的累计电容平方和,数组h_error用于存储主导体与每个环境导体之间的耦合电容的误差。
初始化模块400还使用cudaMalloc指令在GPU 13的全局存储器中创建大小为pathGoal的数组ptX、ptY、ptZ和ptW。其中,ptX、ptY、ptZ用于存储每个行走起始点在空间中的x、y、z方向坐标,ptW用于存储每个行走起始点对应的权值。此外,初始化模块400使用cudaMalloc指令在GPU 13的全局存储器中创建大小为pathGoal的整型数组hitCond,用来记录每次行走击中导体的编号。
步骤S504,初始化模块400在集成电路版图中建立一个包围主导体的高斯面。所述高斯面内仅包含主导体并且不与任何环境导体相交。如图3所示,22是主导体,21、23、24、25是环境导体,30是包围主导体22的高斯面,30内仅包含主导体22,并且不与环境导体21、23、24、25相交。
步骤S505,初始化模块400根据GPU线程数threadNum、GPU线程块的数目blockNum及总目标路径数pathGoal,计算每个GPU线程块的最小目标路径数blockWalkMin与每个GPU线程的最大目标路径数threadWalkMax。在本实施例中,所述blockWalkMin与threadWalkMax根据以下公式计算:
步骤S506,随机行走开始模块410并行地运行threadNum个GPU线程,每个GPU线程根据建立的高斯面及读取的格林函数库生成threadWalkMax个行走起始点,根据读取的权值向量查找行走起始点对应的权值,并将行走起始点的坐标及行走起始点对应的权值存储到GPU 13的全局存储器中。步骤S506的细化流程图参见图6。
步骤S507,随机行走跳转模块420并行地运行blockNum个GPU线程块,GPU线程块中的每个GPU线程不断地从GPU 13的全局存储器中读取行走起始点进行随机行走,直到GPU线程执行了threadWalkMax次行走,或者整个GPU线程块执行了blockWalkMin次行走。每次行走从一个行走起始点开始,直到击中某一导体,将每次行走击中导体的编号存储到GPU 13的全局存储器中。当所有GPU线程块都至少执行了blockWalkMin次行走,本步骤结束。步骤S507的细化流程图参见图7。
步骤S508,随机行走统计模块430并行地运行threadNum个GPU线程,从GPU 13的全局存储器中读取击中导体的编号及相应的行走起始点对应的权值,根据读取的击中导体的编号及相应的行走起始点对应的权值,计算主导体与每个环境导体的累计电容值及累计电容平方和,并将计算的主导体与每个环境导体的累计电容值及累计电容平方和存储到GPU 13的全局存储器中。步骤S508的细化流程图参见图8。
步骤S509,控制模块440将GPU 13的全局存储器中存储的主导体与每个环境导体的累计电容值及累计电容平方和复制到CPU 12的内存中。在本实施例中,控制模块440使用cudaMemcpy指令,将GPU 13的全局存储器中的数组d_cap, d_cap_sq分别复制到CPU 12的内存中对应的数组h_cap, h_cap_sq中。
步骤S510,控制模块440根据CPU 12的内存中存储的主导体与每个环境导体的累计电容值及累计电容平方和计算主导体的自电容的相对误差,若主导体的自电容的相对误差小于等于目标精度,则计算主导体与每个环境导体之间的耦合电容及主导体的自电容,流程结束。否则,若主导体的自电容的相对误差大于目标精度,则更新总目标路径数pathGoal,并返回步骤S505。步骤S510的细化流程图参见图9。
参阅图6所示,是图5中步骤S506的细化流程图。
步骤S601,随机行走开始模块410为每个GPU线程设置一个变量threadCurrentWalk1,用来记录该GPU线程生成的行走起始点的个数,并将其初始化为0;为每个GPU线程设置一个唯一的线程编号tid1,tid1的范围从1到threadNum之间。
步骤S602,随机行走开始模块410判断该GPU线程生成的行走起始点的个数是否达到该GPU线程的最大目标路径数,即判断threadCurrentWalk1>threadWalkMax是否成立。若该GPU线程生成的行走起始点的个数达到该GPU线程的最大目标路径数,即threadCurrentWalk1>threadWalkMax成立,跳转到步骤S607。
否则,若该GPU线程生成的行走起始点的个数未达到该GPU线程的最大目标路径数,即threadCurrentWalk1 > threadWalkMax不成立,步骤S603,随机行走开始模块410从建立的高斯面上随机选取一个点,以从高斯面上选取的点为中心,构造一个极大的不包含任何导体的立方体转移区域。在本实施例中,随机行走开始模块410利用八叉树找到距离从高斯面上选取的点最近的导体,从而确定从高斯面上选取的点对应的转移区域。八叉树的实现算法可参照ASP-DAC2012。
步骤S604,随机行走开始模块410在从高斯面上选取的点的转移区域的表面,根据读取的格林函数库,选取一个点作为行走起始点。行走起始点的坐标表示为(sx, sy, sz)。根据行走起始点及从高斯面上选取的点的坐标,从读取的权值向量中查找该行走起始点对应的权值Weight。
步骤S605,随机行走开始模块410将选取的行走起始点的坐标及行走起始点对应的权值存储到GPU 13的全局存储器中。在本实施例中,选取的行走起始点的坐标及行走起始点对应的权值存储到数组ptX、ptY、ptZ、ptW中。例如,设置整型变量stride1,用来表示行走起始点在数组ptX、ptY、ptZ中的位置,并将其赋值为:stride1=tid1×threadNum+threadCurrentWalk1,执行以下指令将行走起始点的坐标及其对应的权值记录到数组ptX、ptY、ptZ、ptW中:
ptX[stride1]=sx;
ptY[stride1]=sy;
ptZ[stride1]=sz;
ptW[stride1]=Weight。
步骤S606,随机行走开始模块410计算该GPU线程生成的起始点的数量:threadCurrentWalk1 = threadCurrentWalk1 + 1,返回步骤S602。
步骤S607,等待,直到所有GPU线程都抵达该步骤。
参阅图7所示,是图5中步骤S507的细化流程图。
步骤S701,随机行走跳转模块420在GPU 13的共享存储器中为整个GPU线程块设置变量blockCurWalk并初始化为0。所述blockCurWalk用来记录整个GPU线程块执行行走的次数。
步骤S702,随机行走跳转模块420在GPU 13的局部存储器中为GPU线程设置变量threadCurWalk2并初始化为0。所述threadCurWalk2用来记录GPU线程执行行走的次数。
步骤S703,随机行走跳转模块420判断GPU线程是否执行了threadWalkMax次行走或整个GPU线程块是否执行了blockWalkMin次行走,即判断threadCurWalk2> threadWalkMax或blockCurWalk> blockWalkMin是否成立。若GPU线程执行了threadWalkMax次行走或整个GPU线程块执行了blockWalkMin次行走,流程结束。
否则,若GPU线程未执行threadWalkMax次行走且整个GPU线程块未执行blockWalkMin次行走,步骤S704,随机行走跳转模块420从GPU 13的全局存储器中读取一个行走起始点作为当前行走点(px, py, pz)。在本实施例中,设置变量stride2,用来表示该GPU线程读取的行走起始点在数组ptX、ptY、ptZ中的位置,并为其赋值为:stride2=tid2×threadNum+threadCurWalk2;从全局存储器中读取一个行走起始点作为当前行走点(px, py, pz),所执行的指令为:
px=ptX[stride2];
py=ptY[stride2];
pz=ptZ[stride2]。
步骤S705,随机行走跳转模块420以当前行走点(px, py, pz)为中心,构造一个极大的不包含导体的立方体转移区域。在本实施例中,随机行走跳转模块420利用八叉树找到距离当前行走点最近的导体,从而确定当前行走点对应的转移区域。
步骤S706,随机行走跳转模块420根据读取的格林函数库,在当前行走点(px, py, pz)的转移区域的表面随机选取一个点作为下一个行走点。
步骤S707,随机行走跳转模块420判断下一个行走点是否击中导体,若未击中导体,则跳转到步骤S704继续行走。所述行走点击中导体是指该行走点落在导体的表面。
否则,若下一个行走点击中导体,步骤S708,随机行走跳转模块420将本次行走击中导体的编号存储到GPU 13的全局存储器中。在本实施例中,设本次行走击中导体的编号为cid1,将该编号记录到数组hitCond中:hitCond[stride2]=cid1。
步骤S709,随机行走跳转模块420更新threadCurWalk2及blockCurWalk的值:threadCurWalk2 = threadCurWalk2+1,blockCurWalk = blockCurWalk+1并跳转到步骤S703。
参阅图8所示,是图5中步骤S508的细化流程图。
步骤S801,每个GPU线程从GPU 13的全局存储器中读取一个击中导体的编号及相应的行走起始点对应的权值。在本实施例中,为每个GPU线程分配整型变量stride3,用来表示该GPU线程所应读取的击中导体的编号及相应的行走起始点对应的权值在数组hitCond及ptW中的位置;为每个GPU线程设置一个唯一的线程编号tid3,其范围在1到threadNum之间。
步骤S802,随机行走统计模块430判断读取的击中导体的编号及相应的行走起始点对应的权值的数量是否达到GPU 13实际执行的总行走次数。若读取的击中导体的编号及相应的行走起始点对应的权值的数量达到GPU 13实际执行的总行走次数,流程结束。
若读取的击中导体的编号及相应的行走起始点对应的权值的数量未达到GPU 13实际执行的总行走次数,步骤S803,随机行走统计模块430根据读取的击中导体的编号及相应的行走起始点对应的权值,计算主导体与对应的环境导体的累计电容值及累计电容平方和,并将计算的主导体与对应的环境导体的累计电容值及累计电容平方和存储到GPU 13的全局存储器中。在本实施例中,分配整型变量cid2,用来表示读取的走击中导体的编号,给cid2赋值:cid2=hitCond[stride3],并更新结果数组d_cap及d_cap_sq的值:
d_cap[cid2]= d_cap[cid2]+ptW[stride3];
d_cap_sq[cid2]= d_cap_sq [cid2]+(ptW[stride3])2。
步骤S804,随机行走统计模块430更新该GPU线程读取的击中导体的编号及相应的行走起始点对应的权值的数量,并返回步骤S802。在本实施例中,更新变量stride3的值:stride3=stride3+threadNum。
参阅图9所示,是图5中步骤S510的细化流程图。
步骤S901,控制模块440计算累计已行走的路径数pathNum。
步骤S903,控制模块440根据CPU 12的内存中存储的主导体与每个环境导体的累计电容值(h_cap)及主导体与每个环境导体之间的耦合电容的误差(h_error)计算主导体的自电容的相对误差relError。假设主导体的编号为masterId,则主导体的自电容的相对误差为:。
若主导体的自电容的相对误差小于等于目标精度(即成立),步骤S905,控制模块440计算主导体与每个环境导体之间的耦合电容及主导体的自电容,并输出主导体和每个环境导体之间的耦合电容的误差、主导体的自电容的相对误差、主导体与每个环境导体之间的耦合电容及主导体的自电容。主导体与每个环境导体之间的耦合电容:,当i等于主导体的编号masterId时,其结果为主导体的自电容。
若主导体的自电容的相对误差大于目标精度(即不成立),步骤S906,控制模块440根据当前累计已行走的路径数及主导体的自电容的相对误差更新总目标路径数:,并跳转到步骤S505。其中,pathNum是累计已行走的路径数,(是大于等于1的实数,是下取整符号。更新后的总目标路径数即达到目标精度还需行走的路径数。上述公式可准确估算出达到目标精度还需行走的路径数。本发明通过迭代的方式逐步增大求解精度,使得达到目标精度所需行走的总路径数最小,减小了集成电路电容参数提取的运算量。
在一个实施例中,所使用的GPU 13包含512个流处理器和1.5GB全局存储器。在目标精度为0.5%的要求下,单独使用CPU计算的时间约为3.52秒,而采用本发明提出的方法,计算时间约为0.047秒,加速比达到74倍。利用本发明,加速比一般可达到20倍到100倍之间。
Claims (10)
1.一种基于GPU的集成电路电容参数提取系统,运行于计算设备中,该计算设备包括存储设备、CPU及GPU,所述存储设备存储集成电路版图、预先建立的格林函数库及权值向量,其特征在于,该系统包括:
初始化模块,用于(a)设置目标精度q、GPU线程数threadNum、GPU线程块的数目blockNum及总目标路径数pathGoal,其中blockNum是threadNum的约数;(b)从所述存储设备中读取集成电路版图、格林函数库及权值向量;(c)在CPU的内存及GPU的全局存储器中分配电容参数提取所需的存储空间并初始化变量;(d)在所述集成电路版图中建立一个包围主导体的高斯面,高斯面内仅包含主导体并且不与任何环境导体相交;及(e)根据GPU线程数threadNum、GPU线程块的数目blockNum及总目标路径数pathGoal,计算每个GPU线程块的最小目标路径数blockWalkMin与每个GPU线程的最大目标路径数threadWalkMax;
随机行走开始模块,用于(f)并行地运行threadNum个GPU线程,每个GPU线程根据建立的高斯面及读取的格林函数库生成threadWalkMax个行走起始点,根据读取的权值向量查找行走起始点对应的权值,并将行走起始点的坐标及行走起始点对应的权值存储到GPU的全局存储器中;
随机行走跳转模块,用于(g)并行地运行blockNum个GPU线程块,GPU线程块中的每个GPU线程不断地从GPU的全局存储器中读取行走起始点进行随机行走,直到GPU线程执行了threadWalkMax次行走,或者整个GPU线程块执行了blockWalkMin次行走,每次行走从一个行走起始点开始,直到击中某一导体,将每次行走击中导体的编号存储到GPU的全局存储器中,当所有GPU线程块都执行了blockWalkMin次行走,本模块结束;
随机行走统计模块,用于(h)并行地运行threadNum个GPU线程,从GPU的全局存储器中读取随机行走跳转模块存储的击中导体的编号及相应的行走起始点对应的权值,根据读取的击中导体的编号及相应的行走起始点对应的权值计算主导体与每个环境导体的累计电容值及累计电容平方和,并将计算的主导体与每个环境导体的累计电容值及累计电容平方和存储到GPU的全局存储器中;及
控制模块,用于(i)将GPU的全局存储器中存储的主导体与每个环境导体的累计电容值及累计电容平方和复制到CPU的内存中;及(j)根据CPU的内存中存储的主导体与每个环境导体的累计电容值及累计电容平方和计算主导体的自电容的相对误差relError,若relError小于等于目标精度q,则计算主导体与每个环境导体之间的耦合电容及主导体的自电容,否则,若relError大于目标精度q,则更新总目标路径数pathGoal,更新后的总目标路径数即达到目标精度还需行走的路径数。
2.如权利要求1所述的基于GPU的集成电路电容参数提取系统,其特征在于,所述(f)中每个行走起始点的生成包括步骤:
(f1)从建立的高斯面上随机选取一个点,以选取的点为中心,构造一个极大的不包含任何导体的立方体转移区域;及
(f2)在转移区域的表面,根据读取的格林函数库,选取一个点作为行走起始点。
5.一种基于GPU的集成电路电容参数提取方法,应用于计算设备中,该计算设备包括存储设备、CPU及GPU,所述存储设备存储集成电路版图、预先建立的格林函数库及权值向量,其特征在于,该方法包括:
(a)设置目标精度q、GPU线程数threadNum及总目标路径数pathGoal,其中blockNum是threadNum的约数;
(b)从所述存储设备中读取集成电路版图、格林函数库及权值向量;
(c)在CPU的内存及GPU的全局存储器中分配电容参数提取所需的存储空间并初始化变量;
(d)在所述集成电路版图中建立一个包围主导体的高斯面,高斯面内仅包含主导体并且不与任何环境导体相交;
(e)根据GPU线程数threadNum、GPU线程块的数目blockNum及总目标路径数pathGoal,计算每个GPU线程块的最小目标路径数blockWalkMin与GPU线程的最大目标路径数threadWalkMax;
(f)并行地运行threadNum个GPU线程,每个GPU线程根据建立的高斯面及读取的格林函数库生成threadWalkMax个行走起始点,根据读取的权值向量查找行走起始点对应的权值,并将行走起始点的坐标及行走起始点对应的权值存储到GPU的全局存储器中;
(g)并行地运行blockNum个GPU线程块,GPU线程块中的每个GPU线程不断地从GPU的全局存储器中读取行走起始点进行随机行走,每次行走从一个行走起始点开始,直到击中某一导体,将每次行走击中导体的编号存储到GPU的全局存储器中,直到GPU线程执行了threadWalkMax次行走,或者整个GPU线程块执行了blockWalkMin次行走,当所有GPU线程块都执行了blockWalkMin次行走,本步骤结束;
(h)并行地运行threadNum个GPU线程,从GPU的全局存储器中读取步骤(g)中存储的击中导体的编号及相应的行走起始点对应的权值,根据读取的击中导体的编号及相应的行走起始点对应的权值计算主导体与每个环境导体的累计电容值及累计电容平方和,并将计算的主导体与每个环境导体的累计电容值及累计电容平方和存储到GPU的全局存储器中;
(i)将GPU的全局存储器中存储的主导体与每个环境导体的累计电容值及累计电容平方和复制到CPU的内存中;
(j)根据CPU的内存中存储的主导体与每个环境导体的累计电容值及累计电容平方和计算主导体的自电容的相对误差relError,若relError小于等于目标精度q,则计算主导体与每个环境导体之间的耦合电容及主导体的自电容,否则,若relError大于目标精度q,则更新总目标路径数pathGoal,然后返回步骤(e),更新后的总目标路径数即达到目标精度还需行走的路径数。
7.如权利要求5所述的基于GPU的集成电路电容参数提取方法,其特征在于,步骤(f)中每个行走起始点的生成包括步骤:
(f1)从建立的高斯面上随机选取一个点,以选取的点为中心,构造一个极大的不包含任何导体的立方体转移区域;及
(f2)在转移区域的表面,根据读取的格林函数库,选取一个点作为行走起始点。
8.如权利要求5所述的基于GPU的集成电路电容参数提取方法,其特征在于,步骤(g)中每次行走包括步骤:
(g1)从GPU的全局存储器中读取一个行走起始点作为当前行走点;
(g2)以当前行走点为中心,构造一个极大的不包含导体的立方体转移区域;
(g3)根据读取的格林函数库,在当前行走点的转移区域的表面随机选取一个点作为下一个行走点;
(g4)判断下一个行走点是否击中导体,若未击中导体,则跳转到步骤(g2);及
(g5)否则,若下一个行走点击中导体,将本次行走击中导体的编号存储到GPU的全局存储器中。
9.如权利要求5所述的基于GPU的集成电路电容参数提取方法,其特征在于,所述步骤(j)包括:
(j1)计算累计已行走的路径数pathNum;
(j2)根据CPU的内存中存储的主导体与每个环境导体的累计电容值及累计电容平方和计算主导体和每个环境导体之间的耦合电容的误差;
(j3)根据主导体与每个环境导体的累计电容值及主导体和每个环境导体之间的耦合电容的误差计算主导体的自电容的相对误差relError;
(j4)判断主导体的自电容的相对误差relError是否小于等于目标精度q;
(j5)若relError小于等于目标精度q,则计算主导体与每个环境导体之间的耦合电容及主导体的自电容,并输出主导体和每个环境导体之间的耦合电容的误差、主导体的自电容的相对误差relError、主导体与每个环境导体之间的耦合电容及主导体的自电容;及
(j6)若relError大于目标精度q,根据当前累计已行走的路径数pathNum及主导体的自电容的相对误差relError更新总目标路径数pathGoal。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310076174.1A CN103198177B (zh) | 2013-03-11 | 2013-03-11 | 基于gpu的集成电路电容参数提取系统及方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310076174.1A CN103198177B (zh) | 2013-03-11 | 2013-03-11 | 基于gpu的集成电路电容参数提取系统及方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103198177A true CN103198177A (zh) | 2013-07-10 |
CN103198177B CN103198177B (zh) | 2015-08-12 |
Family
ID=48720732
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310076174.1A Active CN103198177B (zh) | 2013-03-11 | 2013-03-11 | 基于gpu的集成电路电容参数提取系统及方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103198177B (zh) |
Cited By (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103473402A (zh) * | 2013-08-30 | 2013-12-25 | 清华大学 | 面向集成电路互连电容参数提取的空间管理数据生成方法 |
CN103793557A (zh) * | 2014-01-14 | 2014-05-14 | 清华大学 | 面向集成电路互连电容提取的线网高斯面采样方法及系统 |
CN103793561A (zh) * | 2014-01-18 | 2014-05-14 | 清华大学 | 用于芯片热分析的混合随机行走方法 |
CN104008255A (zh) * | 2014-06-13 | 2014-08-27 | 清华大学 | 面向集成电路电容提取的多介质随机行走计算方法及系统 |
CN105335567A (zh) * | 2015-11-05 | 2016-02-17 | 清华大学 | 适应非曼哈顿形体的随机行走电容参数提取方法及系统 |
CN105701307A (zh) * | 2016-01-18 | 2016-06-22 | 武汉理工大学 | 基于随机行走电容提取的保证准确度的线网时延计算方法 |
CN107346350A (zh) * | 2016-05-06 | 2017-11-14 | 中国科学院微电子研究所 | 集成电路版图数据处理任务的分配方法、装置和集群系统 |
US10776334B2 (en) | 2017-10-10 | 2020-09-15 | Alibaba Group Holding Limited | Random walking and cluster-based random walking method, apparatus and device |
CN111797584A (zh) * | 2019-03-21 | 2020-10-20 | 复旦大学 | 基于fpga和cpu异构计算的随机行走寄生电容参数提取方法 |
US10901971B2 (en) | 2017-10-10 | 2021-01-26 | Advanced New Technologies Co., Ltd. | Random walking and cluster-based random walking method, apparatus and device |
CN114036892A (zh) * | 2022-01-08 | 2022-02-11 | 青岛展诚科技有限公司 | 随机行走在电容抽取中单细粒度的并行处理方法和系统 |
WO2023193812A1 (zh) * | 2022-04-08 | 2023-10-12 | 杭州行芯科技有限公司 | 寄生电容提取方法、电子装置和存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1403966A (zh) * | 2002-10-11 | 2003-03-19 | 清华大学 | 一种用于虚拟多介质电容提取中最优切割数的生成方法 |
CN1696941A (zh) * | 2005-06-17 | 2005-11-16 | 清华大学 | 基于开路环境导体的三维互连寄生电感快速提取方法 |
CN102651047A (zh) * | 2012-04-11 | 2012-08-29 | 清华大学 | 集成电路设计中基于随机行走的电容参数提取计算方法 |
-
2013
- 2013-03-11 CN CN201310076174.1A patent/CN103198177B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1403966A (zh) * | 2002-10-11 | 2003-03-19 | 清华大学 | 一种用于虚拟多介质电容提取中最优切割数的生成方法 |
CN1696941A (zh) * | 2005-06-17 | 2005-11-16 | 清华大学 | 基于开路环境导体的三维互连寄生电感快速提取方法 |
CN102651047A (zh) * | 2012-04-11 | 2012-08-29 | 清华大学 | 集成电路设计中基于随机行走的电容参数提取计算方法 |
Non-Patent Citations (2)
Title |
---|
HAO ZHUANG等: ""Fast Floating Random Walk Algorithm for Capacitance Extraction with Numerical Characterization of Green’s Function"", 《ASIA AND SOUTH PACIFIC DESIGN AUTOMATION CONFERENCE 2012》 * |
薛金涛 等: "集成电路互连线寄生电容提取的软件", 《计算机工程与应用》 * |
Cited By (20)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103473402B (zh) * | 2013-08-30 | 2016-08-10 | 清华大学 | 面向集成电路互连电容参数提取的空间管理数据生成方法 |
CN103473402A (zh) * | 2013-08-30 | 2013-12-25 | 清华大学 | 面向集成电路互连电容参数提取的空间管理数据生成方法 |
CN103793557A (zh) * | 2014-01-14 | 2014-05-14 | 清华大学 | 面向集成电路互连电容提取的线网高斯面采样方法及系统 |
CN103793557B (zh) * | 2014-01-14 | 2016-08-17 | 清华大学 | 面向集成电路互连电容提取的线网高斯面采样方法及系统 |
CN103793561A (zh) * | 2014-01-18 | 2014-05-14 | 清华大学 | 用于芯片热分析的混合随机行走方法 |
CN103793561B (zh) * | 2014-01-18 | 2016-09-21 | 清华大学 | 用于芯片热分析的混合随机行走方法 |
CN104008255A (zh) * | 2014-06-13 | 2014-08-27 | 清华大学 | 面向集成电路电容提取的多介质随机行走计算方法及系统 |
CN104008255B (zh) * | 2014-06-13 | 2017-01-18 | 清华大学 | 面向集成电路电容提取的多介质随机行走方法及系统 |
CN105335567A (zh) * | 2015-11-05 | 2016-02-17 | 清华大学 | 适应非曼哈顿形体的随机行走电容参数提取方法及系统 |
CN105335567B (zh) * | 2015-11-05 | 2018-08-03 | 清华大学 | 适应非曼哈顿形体的随机行走电容参数提取方法及系统 |
CN105701307B (zh) * | 2016-01-18 | 2018-11-23 | 武汉理工大学 | 基于随机行走电容提取的保证准确度的线网时延计算方法 |
CN105701307A (zh) * | 2016-01-18 | 2016-06-22 | 武汉理工大学 | 基于随机行走电容提取的保证准确度的线网时延计算方法 |
CN107346350A (zh) * | 2016-05-06 | 2017-11-14 | 中国科学院微电子研究所 | 集成电路版图数据处理任务的分配方法、装置和集群系统 |
CN107346350B (zh) * | 2016-05-06 | 2020-08-28 | 中国科学院微电子研究所 | 集成电路版图数据处理任务的分配方法、装置和集群系统 |
US10776334B2 (en) | 2017-10-10 | 2020-09-15 | Alibaba Group Holding Limited | Random walking and cluster-based random walking method, apparatus and device |
US10901971B2 (en) | 2017-10-10 | 2021-01-26 | Advanced New Technologies Co., Ltd. | Random walking and cluster-based random walking method, apparatus and device |
CN111797584A (zh) * | 2019-03-21 | 2020-10-20 | 复旦大学 | 基于fpga和cpu异构计算的随机行走寄生电容参数提取方法 |
CN111797584B (zh) * | 2019-03-21 | 2024-03-19 | 复旦大学 | 基于fpga和cpu异构计算的随机行走寄生电容参数提取方法 |
CN114036892A (zh) * | 2022-01-08 | 2022-02-11 | 青岛展诚科技有限公司 | 随机行走在电容抽取中单细粒度的并行处理方法和系统 |
WO2023193812A1 (zh) * | 2022-04-08 | 2023-10-12 | 杭州行芯科技有限公司 | 寄生电容提取方法、电子装置和存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN103198177B (zh) | 2015-08-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103198177A (zh) | 基于gpu的集成电路电容参数提取系统及方法 | |
JP7413580B2 (ja) | ニューラルネットワークを使用した集積回路フロアプランの生成 | |
CN110781765A (zh) | 一种人体姿态识别方法、装置、设备及存储介质 | |
CN108594816A (zh) | 一种通过改进orb-slam算法实现定位与构图的方法和系统 | |
CN112784002B (zh) | 一种虚拟场景生成方法、装置、设备和存储介质 | |
CN105469445B (zh) | 一种步长可变地图生成方法 | |
CN105718245B (zh) | 可重构计算循环映射优化方法 | |
US11568098B2 (en) | Designing convective cooling channels | |
CN103177414A (zh) | 一种基于结构的图节点相似度并行计算方法 | |
CN104008255A (zh) | 面向集成电路电容提取的多介质随机行走计算方法及系统 | |
CN103793557B (zh) | 面向集成电路互连电容提取的线网高斯面采样方法及系统 | |
CN109583329A (zh) | 基于道路语义路标筛选的回环检测方法 | |
CN103473402B (zh) | 面向集成电路互连电容参数提取的空间管理数据生成方法 | |
CN110110017A (zh) | 一种兴趣点数据关联方法、装置及服务器 | |
CN109961516B (zh) | 表面获取方法、装置及非暂态电脑可读取记录媒体 | |
CN105095567B (zh) | 电容参数提取方法 | |
Teng et al. | SISE: Self-updating of indoor semantic floorplans for general entities | |
CN109840598B (zh) | 一种深度学习网络模型的建立方法及装置 | |
CN104572588A (zh) | 矩阵求逆处理方法和装置 | |
Lee et al. | Fast and Accurate Visual Place Recognition Using Street‐View Images | |
CN102339329B (zh) | 一种物理版图分割的方法 | |
CN109857886A (zh) | 一种基于极小极大值博弈理论视图逼近的三维模型检索方法 | |
Chen et al. | Macrorank: Ranking macro placement solutions leveraging translation equivariancy | |
KR102190100B1 (ko) | 인공 신경망 학습 방법 | |
CN105335567B (zh) | 适应非曼哈顿形体的随机行走电容参数提取方法及系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right | ||
TR01 | Transfer of patent right |
Effective date of registration: 20200511 Address after: No. 0501-80, floor 5, building 4, yard 1, Wangzhuang Road, Haidian District, Beijing 100084 Patentee after: Beijing chaoyida Technology Co., Ltd Address before: 100084-82 box 100084, Haidian District, Beijing, Beijing Patentee before: TSINGHUA University |