CN116049036B - 一种面向蒙特卡罗粒子输运的处理器缓存配置方法 - Google Patents
一种面向蒙特卡罗粒子输运的处理器缓存配置方法 Download PDFInfo
- Publication number
- CN116049036B CN116049036B CN202211348042.5A CN202211348042A CN116049036B CN 116049036 B CN116049036 B CN 116049036B CN 202211348042 A CN202211348042 A CN 202211348042A CN 116049036 B CN116049036 B CN 116049036B
- Authority
- CN
- China
- Prior art keywords
- core
- cache
- shared
- processor
- access
- 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.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0877—Cache access modes
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0806—Multiuser, multiprocessor or multiprocessing cache systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0893—Caches characterised by their organisation or structure
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本发明公开了一种面向蒙特卡罗粒子输运的处理器缓存配置方法,目的是解决现有技术无法快速配置缓存容量的问题。技术方案是:确定面向蒙特卡罗粒子输运的多核处理器即目标处理器设计指标;选择参考处理器;将蒙特卡罗粒子输运程序分为6个核心子程序;采集参考处理器多核执行时核心子程序访存历史;遍历目标处理器的处理器核私有缓存容量,预测处理器核私有缓存缺失率,确定处理器核最优私有缓存容量M;遍历共享缓存容量,预测目标处理器共享缓存缺失率,确定最优共享缓存容量Ms;根据M和Ms配置目标处理器私有和共享缓存。本发明可快速获得目标缓存缺失率时处理器私有和共享缓存的最优容量,并根据最优容量快速配置目标处理器缓存容量。
Description
技术领域
本发明涉及一种面向蒙特卡罗粒子输运的处理器私有缓存和共享缓存配置方法,属于计算机体系结构领域。
背景技术
蒙特卡罗粒子输运程序被广泛应用于核模拟、生物医学等领域,其通过大量中子、电子、质子等粒子的统计行为求得问题的解,由于粒子的独立性,蒙特卡罗粒子输运程序具有天然的并行性,可以很好地在多核处理器上实现线程级并行,然而由于其非规则访存、分支多等特征,很难实现数据级并行,从而难以发挥通用处理器和高性能协处理器内部向量单元的性能,使得在这些处理器上蒙特卡罗粒子输运程序的执行效率特别低。改进当前X86、ARM等处理器是提高蒙特卡罗粒子输运程序执行效率的重要途径,业界主要通过gem5、McPAT等模拟器探索处理器的前端、流水线、缓存等参数,通过改变处理器配置,观测程序的性能,进而选择最优的参数配置以提高执行效率。缓存配置是面向蒙特卡罗粒子输运程序的处理器设计的重要部分,缓存通常包含多个层次,主流的多核处理器大都采用3级缓存,越靠近处理器核,延迟越低容量也越小。处理器在访问内存获取需要的数据时,首先从一级缓存(L1 Cache)中寻找,如果发生缺失则从二级缓存(L2 Cache)中寻找,如果L2发生缺失则从三级缓存(L3 Cache)中寻找,若仍缺失则访问内存。通常L1 Cache和L2 Cache为各个处理器核私有,L3 Cache为所有处理器共享,由于主流多核处理器通常采用总线监听(Snoopy)一致性协议,写回操作可能会作废L1 Cache和L2 Cache中的数据。因此缓存缺失次数越多,数据访问时间越长。
为了确定每一级缓存最优的配置(即缓存的容量),可通过模拟器直接测得程序的缓存缺失次数(即请求数据未在缓存中的访存次数),然后不断改变缓存配置参数以达到降低缺失次数的目的。然而单纯依赖模拟器会引入极大的时间开销,为了更快地确定缓存容量,需要快速得到不同缓存配置时蒙特卡罗粒子输运程序的缓存缺失次数。此外,蒙特卡罗粒子输运程序包含多个核心子程序,包括粒子初始化、宏观截面计算等,不同子程序的访存特征不同,因此缓存缺失次数有较大差别,为了更细粒度地分析缓存配置对不同核心子程序的影响,有必要同时获得不同核心子程序的缓存缺失次数。当前除了模拟器方法,另一类获得不同缓存配置时程序的缓存缺失次数的方法为基于访存特征的预测方法,访存特征可以通过对程序的纯理论分析或者分析目标程序特征(即访存序列)获得,但蒙特卡罗粒子输运程序的随机性使得纯理论分析不可行。访存特征通常指时间重用距离和堆栈距离,时间重用距离为连续访问同一地址之间访问过的地址的数目,而堆栈距离为连续访问同一地址之间访问过的不同地址的数目。现有基于访存特征对不同缓存配置时预测程序缓存缺失次数的方法(即分析程序的访存序列方法)存在两个缺陷:一方面,这些方法只针对整个程序,无法获得多核执行时蒙特卡罗粒子输运核心子程序的私有缓存缺失次数和共享缓存缺失次数,因此无法根据缓存缺失次数进行私有缓存和共享缓存容量配置;另一方面,当前蒙特卡罗粒子输运程序主要运行在通用处理器上,通用处理器的私有缓存和共享缓存通常采用组相联映射,图1为4路组相联私有缓存与内存映射关系的示意图,共享缓存映射关系与之类似。其中左列为缓存(cache),右列为内存(memory,简称mem)。左列包括2个缓存组即组0和组1,每组包含4个缓存行(Cache Line),缓存容量为8个缓存行;右列包含X个内存块block,内存分为2个内存组,每个内存组包含X/2个内存块(mem block序号模2为0的内存块为一组,mem block序号模2为1的内存块为另一组)。内存组与缓存组之间采用直接映射(如图1中mem block序号模2为0的内存块到缓存组0的映射,mem block序号模2为1的内存块到缓存组1的映射),映射到同一缓存组内的内存块采用全相联映射(如图1中映射到组0中的内存块(mem block0、mem block2、mem block4、mem block6、mem block8、mem block10、memblockX)之间的映射)。然而现有分析目标程序的访存序列方法均未考虑组相联映射,只能预测全相联缓存的缺失,不能预测组相联缓存缺失,因此无法根据缓存缺失进行组相联缓存的容量配置。
因此如何对面向蒙特卡罗粒子输运的处理器的缓存缺失进行快速预测,并根据组相联私有缓存和共享缓存缺失率对容量进行快速配置,是本领域技术人员极为关注的技术问题。
发明内容
本发明要解决的技术问题是针对模拟器方法测量程序的缓存缺失次数时间开销特别大而无法快速配置缓存容量,现有基于访存特征的缓存缺失次数预测方法无法适用于组相联缓存、且无法获得多核执行时蒙特卡罗不同核心子程序的私有缓存缺失次数和共享缓存缺失次数从而无法配置缓存容量的问题,提供一种面向蒙特卡罗粒子输运的处理器缓存配置方法,该方法可快速预测蒙特卡罗粒子输运在不同缓存容量下的缺失次数和缺失率,给出获得目标缓存缺失率时处理器私有和共享缓存的最优容量,根据私有和共享缓存的最优容量对蒙特卡罗粒子输运专用处理器配置缓存容量,辅助面向蒙特卡罗粒子输运的处理器设计。
本发明基于的蒙特卡罗粒子输运程序Quicksilver具有以下特性:多核执行时每个线程的访存行为一致,每个线程的缓存缺失次数近似相等;当粒子数超过一个阈值A(A通常满足100≤A≤1000)时,线程的访存行为保持稳定,缓存缺失次数和粒子数的比值近似保持固定,因此只需采用粒子数规模不超过A的缓存缺失次数即可确定每个线程的缓存缺失次数,大大降低时间开销。
本发明的目标是配置面向蒙特卡罗粒子输运的多核处理器(令为目标处理器)的私有缓存和共享缓存,私有缓存和共享缓存均采用组相联映射。技术方案包括以下步骤:
第一步,确定针对蒙特卡罗粒子输运的处理器即目标处理器的关键设计指标,包括确定目标处理器的核数Ncore,Ncore为正整数;确定目标处理器的私有缓存的组相联缓存结构中每组中的缓存行数W(即W路组相联,W一般为4或8或16);确定私有缓存的缺失率设计目标(一般为60%-80%)、私有缓存容量设计上限(容量一般为16KB-256KB);确定目标处理器的共享缓存的组相联结构中每组缓存行数Q(即Q路组相联,Q一般为8或16或32);确定共享缓存的缓存缺失率设计目标(一般为20%-40%)和共享缓存容量上限(容量一般为Ncore×2MB至Ncore×8MB)。确定目标处理器的私有缓存和共享缓存的缓存行大小H,H一般为64字节即64B。
第二步,选择Intel公司或AMD公司的X86多核处理器(要求支持运行Intel pin工具)作为参考处理器。参考处理器主要用于执行蒙特卡罗粒子输运程序,并获得执行过程中的访存历史。在不同处理器执行得到访存历史存在微小差异,不会影响后续目标处理器缓存配置结果。
第三步,将蒙特卡罗粒子输运程序按照粒子输运的核心过程分为6个核心子程序,方法是:
将蒙特卡罗粒子输运程序按照输运的6个核心过程分为6个核心子程序,将每个粒子经过的粒子初始化(PI)、宏观截面计算(XS)、移动粒子(AD)、穿越表面(CF)、碰撞(CL)、死亡(DT)6个核心过程作为6个核心子程序。
第四步,使用Pin工具采集参考处理器上多核执行时所有线程的核心子程序的访存历史,将所有线程的访存记录存储到访存历史表,方法是:
4.1初始化访存记录序号tt=1;令蒙特卡罗粒子输运程序正在执行的指令为当前指令;令访存历史表为空;令Intel X86处理器多核执行时的线程数为T,T为大于等于Ncore的正整数。
4.2若蒙特卡罗粒子输运程序运行结束,转4.4;若蒙特卡罗粒子输运程序运行未结束,利用pin工具(Intel公司,3.13及以上版本)跟踪蒙特卡罗粒子输运程序的当前指令,如果当前指令是Read或Write指令,转到4.3;否则,跳过该指令,令蒙特卡罗粒子输运程序执行的下一条指令为当前指令,转4.2。
4.3将Read或Write类型访存指令存储在访存历史表的第tt个访存记录中,每个访存记录包括四个域,分别为访存类型m、访存地址x、所属核心子程序的序号e以及所属线程号t。访存类型包含读数据Read、写数据Write 2种。令访存历史表的序号tt=tt+1;令蒙特卡罗粒子输运程序执行的下一条指令为当前指令,转4.2。
4.4完成对蒙特卡罗粒子输运程序全部指令的跟踪,令访存历史表的访存记录条数II=tt;
第五步,从小到大遍历目标处理器中Ncore个处理器核的私有缓存容量,预测Ncore个处理器核的私有缓存缺失率,确定Ncore个处理器核的最优私有缓存容量。方法是:
5.1将Ncore个处理器核的私有缓存容量M初始化为16KB,令缓存行大小等于目标处理器的私有缓存的缓存行大小H,此时的私有缓存共包含M/H个缓存行。初始化Ncore个处理器核私有缓存为S组W行相联结构,S为私有缓存的组数,W为每组中缓存行数,满足S×W=M/H。
5.2初始化Ncore个处理器核的共享访存记录表为空,令共享访存记录表的表项序号q=1。令CMRp[Ncore]为记录处理器核私有缓存缺失率的数组,包含Ncore个元素,第ncore个元素记录第ncore个处理器核私有缓存缺失率,1≤ncore≤Ncore,初始化CMRp[Ncore]各元素为0。令CMp[Ncore][6]为记录处理器核私有缓存缺失次数的二维数组,包含Ncore×6个元素,CMp[ncore][e]记录第ncore个处理器核第e种核心子程序的私有缓存缺失次数,0≤e≤5,e表示第i个访存记录所属的核心子程序序号,初始化CMp[Ncore][6]各元素为0。初始化记录处理器核访存数量的数组MA[Ncore]中各元素为0,MA[ncore]记录第ncore个处理器核的访存指令数量;
5.3初始化处理器核序号ncore=1;
5.4初始化访存历史表的访存记录序号i=1,其中,i表示访存历史表中第i个访存记录;
5.5初始化私有访存哈希表Hinv(访存地址)的值为(1,Null,Null),其中Null表示值为“空”,Hinv(访存地址)表示根据访存地址找到访存私有缓存三元组,访存私有缓存三元组为(有效标志,上次访问Hinv(访存地址)中访存地址的线程号,当前处理器核上次访问Hinv(访存地址)中访存地址的访存记录序号),有效标志使用0或1表示,1表示该地址的内容在私有缓存中失效,0表示该地址的内容在私有缓存中有效。
5.6若第i个访存记录所属线程分配在第ncore个处理器核上,即ncore=ti modNcore,ti为第i个访存记录中的线程号,转步骤5.8;若访存历史表中第i个访存记录的线程不在第ncore个处理器核上,即ncore≠ti mod Ncore,且访存类型为写数据Write,转步骤5.7;
5.7令Hinv(xi)=(1,ti,Null),1表示第i个访存记录中的访存地址xi的数据在序号为ncore的处理器核失效,xi为第i个访存记录中的访存地址;转步骤5.13。
5.8令序号为ncore的处理器核的访存指令数量增加1,即令MA[ncore]=MA[ncore]+1。若访存历史表中第i个访存记录对应的Hinv(xi)的有效标志为0,转步骤5.10。若访存历史表中第i个访存记录对应的Hinv(xi)的有效标志为1,说明序号为ncore的处理器核私有缓存中xi失效,即该缓存内容首次访问或已经被其他线程更改,转步骤5.9;
5.9此时第i个访存记录对内存地址xi的私有缓存发生访存缺失,记录和处理私有缓存访存缺失,方法是:
5.9.1令CMp[ncore][e]=CMp[ncore][e]+1;e为第i个访存记录所属的子程序序号。
5.9.2令访存历史表中第i个访存记录的私有堆栈重用距离PSD(i)为0,并令Hinv(xi)=(0,ti,i),即更新上次访问xi的线程号和上次访问xi的访存记录序号;
5.9.3将第i个访存记录的访存地址xi、所属核心子程序的序号e存储到共享访存记录表的第q个表项中,令q=q+1;转步骤5.13;
5.10计算第i个访存记录关于访存地址xi的私有时间重用距离PRD(i),PRD(i)=序号为ncore的处理器核上次访问xi的访存记录序号(即访存记录序列中在第i个访存记录之前最近一次访问xi的访存记录的序号),该访存记录序号为Hinv(xi)得到的三元组的第三个域的值。令Hinv(xi)=(0,ti,i),即更新Hinv(xi)中记录的上次访问xi的线程号和上次访问xi的访存记录序号。
5.11令s=xi%S,即将第i个访存记录的访存地址xi映射到第ncore个处理器核私有缓存的第s组。根据第i个访存记录的私有时间重用距离PRD(i)计算私有堆栈距离PSD(i),即针对序号为ncore的处理器核的私有缓存第s组的访存记录中,上次访问同一地址的访存记录的私有时间重用距离PRD(i)与第i个访存记录之间不同访存地址的数量,具体公式为:
其中,PSD(i)为第i个访存记录的私有堆栈距离,PRD(j)为第j个访存记录的私有时间重用距离,F(x)为指示函数,当表达式x为真时取值为1,否则为0。PRD(j)<PRD(i)表示PRD(j)不在PRD(i)与第i个访存记录之间,PRD(i)是第i个访存记录关于访存地址xi的私有时间重用距离。xj%S=s表示第j个访存记录的地址xj映射到私有缓存的第s组。tj modNcore=ncore表示第j个访存记录所属线程被分配在序号为ncore的处理器核上。
5.12若PSD(i)≤第ncore个处理器核私有缓存每组中缓存行数W,表示缓存命中,转步骤5.13;若PSD(i)>W,则发生私有缓存访存缺失,则记录和处理私有缓存访存缺失:
5.12.1令CMp[ncore][e]=CMp[ncore][e]+1。
5.12.2令访存历史表中第i个访存记录的PSD(i)为0,并更新Hinv(xi)中记录的上次访问xi的线程号和上次访问xi的访存记录序号,即令Hinv(xi)=(0,ti,i)。
5.12.3将发生缺失的第i个访存记录的访存地址xi、所属核心子程序的序号e存储到共享访存记录表的第q个表项中,令q=q+1;
5.13若i<II,令i=i+1,转步骤5.6;若i=II,转步骤5.14;
5.14计算序号为ncore的处理器核上蒙特卡罗粒子输运核心程序的私有缓存缺失率CMRp[ncore],即:
5.15若ncore<Ncore,令ncore=ncore+1,返回步骤5.4;若ncore=Ncore,则执行步骤5.16;
5.16计算Ncore个处理器核上蒙特卡罗粒子输运核心程序的平均私有缓存缺失率ACMRp,即:
5.17判断私有缓存容量M的私有缓存缺失率ACMRp是否降低到了私有缓存的缓存缺失率设计目标,若达到设计目标值或私有缓存容量已经达到私有缓存容量设计上限,则选择M作为最优的私有缓存容量,令共享访存记录的访存记录总数IIs=q,转第六步。若未达到私有缓存的缓存缺失率设计目标且缓存容量未达到私有缓存容量设计上限,则令私有缓存容量M=M+16KB,转步骤5.2。
第六步,从小到大遍历目标处理器的共享缓存容量,预测目标处理器的共享缓存缺失率,确定目标处理器的最优共享缓存容量。方法是:
6.1将目标处理器的共享缓存容量Ms初始化为Ncore×2MB,令缓存行大小等于H,因此共包含Ms/H个缓存行。初始化处理器核共享缓存采用P组Q行组相联结构,其中P为共享缓存的组数,Q为每组中缓存行数,满足P×Q×H=Ms。
6.2令CMRs记录目标处理器共享缓存缺失率,初始化CMRs为0。令CMs[6]为记录目标处理器共享缓存缺失次数的数组,包含6个元素,CMs[e]记录第e种核心子程序的共享缓存缺失次数,初始化CMs[6]各元素为0;
6.3初始化共享访存记录序号ii=1,其中,ii表示共享访存历史表中第ii个共享访存记录。共享访存记录表共IIs项共享访存记录;
6.4初始化共享访存哈希表SHinv(访存地址)的值为(1,Null),SHinv(访存地址)表示根据SHinv(访存地址)中访存地址找到访存共享缓存二元组,访存共享缓存二元组为(有效标志,处理器上次访问SHinv(访存地址)中访存地址的共享访存记录序号),有效标志使用0或1表示,1表示该地址的内容在私有缓存中失效,0表示该地址的内容在私有缓存中有效。
6.5若共享访存历史表中第ii个共享访存记录对应的SHinv(xii)的有效标志为0,转步骤6.7。若共享访存历史表中第ii个共享访存记录对应的SHinv(xii)的有效标志为1,说明共享缓存中xii失效,即该缓存内容首次访问,转步骤6.6;
6.6此时第ii个共享访存记录对xii的共享缓存发生访存缺失,则记录和处理共享缓存访存缺失:
6.6.1令CMs[e]=CMs[e]+1;。
6.6.2令共享访存历史表中第ii个共享访存记录的共享堆栈重用距离SSD(ii)为0,并令SHinv(xii)=(0,ii),即更新第ii次访问xii的线程号和第ii次访问xii的访存记录序号。转步骤6.10;
6.7计算第ii个共享访存记录关于访存地址xii的共享时间重用距离SRD(ii),SRD(ii)=处理器上次访问xii的共享访存记录序号(即共享访存记录序列中第ii个共享访存记录之前最近一次访问xii的共享访存记录的序号),该共享访存记录序号为SHinv(xii)得到的二元组的第二个域的值。令SHinv(xii)=(0,ii),即更新SHinv(xi)中记录的第ii次访问xii的线程号和第ii次访问xii的共享访存记录序号。
6.8令p=xii%P,即将第ii个共享访存记录的访存地址xii映射到共享缓存的第p组。根据第ii个共享访存记录的共享时间重用距离SRD(ii)计算第ii个访存记录的共享堆栈距离SSD(ii),即共享缓存第p组的共享访存记录中,第ii次访问同一地址的共享访存记录的共享时间重用距离SRD(ii)与第ii个共享访存记录之间不同访存地址的数量,具体公式为:
其中,SRD(jj)为第jj个共享访存记录的共享时间重用距离。SRD(jj)<SRD(ii)表示SRD(jj)不在SRD(ii)与第ii个共享访存记录之间。xjj%P=p表示第jj个共享访存记录的地址xjj映射到私有缓存的第p组。
6.9若SSD(ii)≤共享缓存每组中缓存行数Q,表示缓存命中,转步骤6.10;若SSD(ii)>Q,则发生共享缓存访存缺失,记录和处理共享缓存访存缺失:
6.9.1令CMs[e]=CMs[e]+1。
6.9.2令共享访存历史表中SSD(ii)为0,并更新SHinv(xii)中记录的第ii次访问xii的访存记录序号,即令SHinv(xii)=(0,ii)。
6.10若ii<IIs,令ii=ii+1,转步骤6.5;若ii=IIs,转步骤6.11;
6.11计算目标处理器上蒙特卡罗粒子输运核心程序的共享缓存缺失率CMRs,即:
6.12判断共享缓存容量Ms的共享缓存缺失率CMRs是否降低到了共享缓存的缓存缺失率设计目标,若达到设计目标值或共享缓存容量已经达到共享缓存容量设计上限,则选择Ms作为最优的缓存容量,转第七步。若未达到共享缓存的缓存缺失率设计目标且缓存容量未达到共享缓存容量设计上限,则令共享缓存容量Ms=Ms+(Ncore×2MB),转步骤6.2。
第七步,根据M和Ms配置目标处理器的私有缓存和共享缓存。
7.1将目标处理器的每个处理器核的私有缓存配置为:每个缓存行大小为H字节,采用S组W行组相联结构,其中S为私有缓存的组数,W为每组中缓存行数,满足S×W×H=M。
7.2将目标处理器共享缓存配置为:每个缓存行大小为H字节,采用P组Q行组相联结构,其中P为共享缓存的组数,Q为每组中缓存行数,满足P×Q×H=Ms。
采用本发明可以达到以下技术效果:
本发明给出了一种面向蒙特卡罗粒子输运的处理器缓存配置方法,该方法的第三步针对处理器核私有缓存快速预测蒙特卡罗粒子输运在不同缓存容量下的缺失次数和缺失率,并给出了获得目标缓存缺失率时处理器私有缓存的最优容量;第四步针对处理器核共享缓存快速预测蒙特卡罗粒子输运在不同缓存容量下的缺失次数和缺失率,给出了获得目标缓存缺失率时处理器共享缓存的最优容量,并根据私有缓存和共享缓存的最优容量实现了对蒙特卡罗粒子输运专用处理器缓存容量配置。
1.本发明未使用模拟器,避免了模拟器方法测量程序缓存缺失率开销大无法快速配置缓存容量的问题。
2.本发明分别预测了蒙特卡罗粒子输运的6个核心子程序的缺失次数,解决了已有方法只针对整个程序,无法获得多核执行时蒙特卡罗粒子输运核心子程序的私有缓存缺失次数和共享缓存缺失次数的问题。
3.本发明可预测组相联映射缓存缺失率并配置缓存容量,解决了已有方法只能预测全相联缓存的缺失,不能预测组相联缓存缺失,因此无法根据缓存缺失进行组相联缓存的容量配置的问题。
附图说明
图1是背景技术所述的X86处理器中4路组相联缓存示意图。
图2是蒙特卡罗粒子输运程序的核心过程示意图。
图3是本发明总体流程图。
图4是本发明第二步构建的访存历史表的结构示意图。
具体实施方式
下面结合附图和一个具体实施例对本发明进行详细说明。
本实施例假设用户的设计目标是配置面向蒙特卡罗粒子输运的Ncore=2核处理器(目标处理器)的私有缓存和共享缓存,已知该目标处理器的私有缓存采用8路组相联结构,即每组中的缓存行数W=8;私有缓存的缓存缺失率设计目标为40%,私有缓存容量设计上限为256KB;共享缓存采用16路组相联结构,即共享缓存的每组缓存行数Q=16,共享缓存的缓存缺失率设计目标为20%,共享缓存容量上限为128MB。缓存行大小H为64字节。根据本发明给出的缓存容量配置方法确定私有缓存最优缓存容量M和共享缓存最优缓存容量Ms,以及私有缓存组数S和共享缓存组数P。
采用本发明进行缓存容量配置的流程如图3所示,本实施例包括以下步骤:
第一步,确定针对蒙特卡罗粒子输运的处理器即目标处理器的关键设计指标,包括按照设计目标确定目标处理器的核数Ncore=2;确定目标处理器的私有缓存是采用8路组相联缓存,私有缓存的每组缓存行数W=8;确定私有缓存的缓存缺失率设计目标为40%、私有缓存容量设计上限为256KB;确定目标处理器的共享缓存是采用16路组相联缓存,共享缓存的组数每组缓存行数Q=16;确定共享缓存的缓存缺失率设计目标为20%,共享缓存容量上限为2×8MB。确定目标处理器的缓存行大小H为64字节。
第二步,选择Intel公司或AMD公司的X86多核处理器作为参考处理。本实施例选择Intel公司的i7-12900K(含8个性能核和8个效能核,共16个处理器核)作为参考处理器。
第三步,将蒙特卡罗粒子输运程序Quicksilver按照粒子输运的核心过程分为6个核心子程序,方法是:
将蒙特卡罗粒子输运程序按照输运的6个核心过程分为6个核心子程序,如图2所示,将每个粒子经过的粒子初始化(PI)、宏观截面计算(XS)、移动粒子(AD)、穿越表面(CF)、碰撞(CL)、死亡(DT)6个核心过程作为6个核心子程序。
第四步,使用Pin工具采集在参考处理器上多核执行时所有线程的核心子程序的访存历史,将所有线程的访存记录存储到访存历史表,方法是:
4.1初始化访存记录序号tt=1;令蒙特卡罗粒子输运程序正在执行的指令为当前指令;令访存历史表为空;令参考处理器多核执行时的线程数为T,T为2(如图4所示)。
4.2若蒙特卡罗粒子输运程序运行结束,转4.4;若蒙特卡罗粒子输运程序运行未结束,利用用3.13版本pin工具跟踪蒙特卡罗粒子输运程序的当前指令,如果当前指令是Read或Write指令,转到4.3;否则,跳过该指令,令蒙特卡罗粒子输运程序执行的下一条指令为当前指令,转4.2。
4.3将Read或Write类型访存指令存储在访存历史表的第tt个访存记录中,如图4所示,每个访存记录包括四个域,分别为访存类型m、访存地址x、所属核心子程序的序号e以及所属线程号t。访存类型包含读数据Read、写数据Write 2种。图4中线程号为0~1,表示本实施例共有2个线程。所属子程序为粒子初始化(PI)、宏观截面计算(XS)、移动粒子(AD)、穿越表面(CF)、碰撞(CL)、死亡(DT)6个核心令访存历史表的序号tt=tt+1;令蒙特卡罗粒子输运程序执行的下一条指令为当前指令,转4.2。
4.4完成对蒙特卡罗粒子输运程序全部指令的跟踪,令访存历史表的访存记录条数II=tt;
第五步,从小到大遍历目标处理器中Ncore(=2)个处理器核的私有缓存容量,预测Ncore个处理器核的私有缓存缺失率,确定Ncore个处理器核的最优私有缓存容量。方法是:
5.1将Ncore个处理器核的私有缓存容量M初始化为16KB,令缓存行大小H为64B,此时共包含256个缓存行。初始化Ncore个处理器核的私有缓存采用S组W行组相联结构,S为私有缓存的组数,W为每组中缓存行数,W为8,为了满足S×W=M/H=256,S需等于32。
5.2初始化Ncore个处理器核的共享访存记录表为空,令共享访存记录表的表项序号q=1。令CMRp[Ncore]为记录处理器核私有缓存缺失率的数组,包含Ncore个元素,第ncore个元素记录第ncore个处理器核私有缓存缺失率,1≤ncore≤Ncore,初始化CMRp[Ncore]各元素为0。令CMp[Ncore][6]为记录处理器核私有缓存缺失次数的二维数组,包含Ncore×6个元素,CMp[ncore][e]记录第ncore个处理器核第e种核心子程序的私有缓存缺失次数,0≤e≤5,e表示第i个访存记录所属的核心子程序的序号,初始化CMp[Ncore][6]各元素为0。初始化记录处理器核访存数量的数组MA[Ncore]中各元素为0,MA[ncore]记录第ncore个处理器核的访存指令数量;
5.3初始化处理器核序号ncore=1;
5.4初始化访存记录序号i=1,其中,i表示访存历史表中第i个访存记录;
5.5初始化私有访存哈希表Hinv(访存地址)的值为(1,Null,Null),其中Null表示值为“空”,Hinv(访存地址)表示根据访存地址找到访存私有缓存三元组,访存私有缓存三元组为(有效标志,上次访问Hinv(访存地址)中访存地址的线程号,当前处理器核上次访问Hinv(访存地址)中访存地址的访存记录序号)。有效标志使用0或1表示,1表示该地址的内容在私有缓存中失效,0表示该地址的内容在私有缓存中有效。
5.6若第i个访存记录所属线程分配在第ncore个处理器核上,即ncore=ti modNcore,ti为第i个访存记录中的线程号,转步骤5.8;若访存历史表中第i个访存记录的线程不在第ncore个处理器核上,即ncore≠ti mod Ncore,且访存类型为写数据Write,转步骤5.7;
5.7令Hinv(xi)=(1,ti,Null),1表示第i个访存记录中的访存地址xi的数据在序号为ncore的处理器核失效,xi为第i个访存记录中的访存地址;转步骤5.13。
5.8令序号为ncore的处理器核的访存指令数量增加1,即令MA[ncore]=MA[ncore]+1。若访存历史表中第i个访存记录对应的Hinv(xi)的有效标志为0,转步骤5.10。若访存历史表中第i个访存记录对应的Hinv(xi)的有效标志为1,说明序号为ncore的处理器核私有缓存中xi失效,即该缓存内容首次访问或已经被其他线程更改,转步骤5.9;
5.9此时第i个访存记录对内存地址xi的私有缓存访存发生缺失,记录和处理私有缓存访存缺失:
5.9.1令CMp[ncore][e]=CMp[ncore][e]+1;e为第i个访存记录所属的子程序序号。
5.9.2令访存历史表中第i个访存记录的私有堆栈重用距离PSD(i)为0,并令Hinv(xi)=(0,ti,i),即更新上次访问xi的线程号和上次访问xi的访存记录序号;
5.9.3将第i个访存记录的访存地址xi、所属核心子程序的序号e存储到共享访存记录表的第q个表项中,令q=q+1;转步骤5.13;
5.10计算第i个访存记录关于访存地址xi的私有时间重用距离PRD(i),PRD(i)=序号为ncore的处理器核上次访问xi的访存记录序号(即访存记录序列中在第i个访存记录之前最近一次访问xi的访存记录的序号),该访存记录序号为Hinv(xi)得到的三元组的第三个域的值。令Hinv(xi)=(0,ti,i),即更新Hinv(xi)中记录的上次访问xi的线程号和上次访问xi的访存记录序号。
5.11令s=xi%S,即将第i个访存记录的访存地址xi映射到第ncore个处理器核私有缓存的第s组。根据第i个访存记录的私有时间重用距离PRD(i)计算私有堆栈距离PSD(i),即针对序号为ncore的处理器核的私有缓存第s组的访存记录中,上次访问同一地址的访存记录的私有时间重用距离PRD(i)与第i个访存记录之间不同访存地址的数量,具体公式为:
其中,PSD(i)为第i个访存记录的私有堆栈距离,PRD(j)为第j个访存记录的私有时间重用距离,F(x)为指示函数,当表达式x为真时取值为1,否则为0。PRD(j)<PRD(i)表示PRD(j)不在PRD(i)与第i个访存记录之间,PRD(i)是第i个访存记录关于访存地址xi的私有时间重用距离。xj%S=s表示第j个访存记录的地址xj映射到私有缓存的第s组。tj modNcore=ncore表示第j个访存记录所属线程被分配在序号为ncore的处理器核上。
5.12若PSD(i)≤第ncore个处理器核私有缓存每组中缓存行数W,表示缓存命中,转步骤5.13;若PSD(i)>W,则发生私有缓存访存缺失,则记录和处理私有缓存访存缺失:
5.12.1令CMp[ncore][e]=CMp[ncore][e]+1。
5.12.2令访存历史表中第i个访存记录的PSD(i)为0,并更新Hinv(xi)中记录的上次访问xi的线程号和上次访问xi的访存记录序号,即令Hinv(xi)=(0,ti,i)。
5.12.3将发生缺失的第i个访存记录的访存地址xi、所属核心子程序的序号e存储到共享访存记录表的第q个表项中,令q=q+1;
5.13若i<II,令i=i+1,转步骤5.6;若i=II,转步骤5.14;
5.14计算序号为ncore的处理器核上蒙特卡罗粒子输运核心程序的私有缓存缺失率CMRp[ncore],即:
5.15若ncore<Ncore,令ncore=ncore+1,返回步骤3.4;若ncore=Ncore,则执行步骤5.16;
5.16计算Ncore个处理器核上蒙特卡罗粒子输运核心程序的平均私有缓存缺失率ACMRp,即:
5.17判断私有缓存容量M的私有缓存缺失率ACMRp是否降低到了设计目标40%,若达到设计目标值或私有缓存容量已经达到私有缓存容量设计上限(256KB),则选择此时的M作为最优的私有缓存容量,令共享访存记录的访存记录总数IIs=q,转第六步。若未达到设计目标值且缓存容量未达到设计上限,则令私有缓存容量M=M+16KB,转步骤5.2。
经过第五步循环,最终缓存缺失率ACMRp降低到了34%,达到了设计目标,循环结束,得到此时最优私有缓存容量M为256KB,此时共享访存记录的访存记录总数IIs=3632300。
第六步,从小到大遍历目标处理器的共享缓存容量,预测目标处理器的共享缓存缺失率,确定目标处理器的最优共享缓存容量。方法是:
6.1将目标处理器的共享缓存容量Ms初始化为2×2MB,令缓存行大小H为64字节,因此共包含个缓存行,即2×32K×64B=2×2MB。初始化处理器核共享缓存采用P组Q行组相联结构,其中P为共享缓存的组数,Q为每组中缓存行数,Q=16,为满足P×Q×H=Ms=P×Q×64B=4MB,P需要等于4K。
6.2令CMRs记录目标处理器共享缓存缺失率,初始化CMRs为0。令CMs[6]为记录目标处理器共享缓存缺失次数的数组,包含6个元素,CMs[e]记录第e种核心子程序的共享缓存缺失次数,初始化CMs[6]各元素为0;
6.3初始化共享访存记录序号ii=1,其中,ii表示共享访存历史表中第ii个共享访存记录。共享访存记录表共IIs项共享访存记录;
6.4初始化共享访存哈希表SHinv(访存地址)的值为(1,Null),SHinv(访存地址)表示根据SHinv(访存地址)中访存地址找到访存共享缓存二元组,访存共享缓存二元组为(有效标志,处理器上次访问SHinv(访存地址)中访存地址的共享访存记录序号)访存二元组,有效标志使用0或1表示,1表示该地址的内容在私有缓存中失效,0表示该地址的内容在私有缓存中有效。
6.5若共享访存历史表中第ii个共享访存记录对应的SHinv(xii)的有效标志为0,转步骤6.7。若共享访存历史表中第ii个共享访存记录对应的SHinv(xii)的有效标志为1,说明共享缓存中xii失效,即该缓存内容首次访问,转步骤6.6;
6.6此时第ii个共享访存记录对xii的共享缓存发生访存缺失,则记录和处理共享缓存访存缺失:
6.6.1令CMs[e]=CMs[e]+1;。
6.6.2令共享访存历史表中第ii个共享访存记录的共享堆栈重用距离SSD(ii)为0,并令SHinv(xii)=(0,ii),即更新第ii次访问xii的线程号和第ii次访问xii的访存记录序号。转步骤6.10;
6.7计算第ii个共享访存记录关于访存地址xii的共享时间重用距离SRD(ii),SRD(ii)=处理器上次访问xii的共享访存记录序号(即共享访存记录序列中第ii个共享访存记录之前最近一次访问xii的共享访存记录的序号),该共享访存记录序号为SHinv(xii)得到的二元组的第二个域的值。令SHinv(xii)=(0,ii),即更新SHinv(xi)中记录的第ii次访问xii的线程号和第ii次访问xii的共享访存记录序号。
6.8令p=xii%P,即将第ii个共享访存记录的访存地址xii映射到共享缓存的第p组。根据第ii个共享访存记录的共享时间重用距离SRD(ii)计算第ii个访存记录的共享堆栈距离SSD(ii),即共享缓存第p组的共享访存记录中,第ii次访问同一地址的共享访存记录的共享时间重用距离SRD(ii)与第ii个共享访存记录之间不同访存地址的数量,具体公式为:
其中,SRD(jj)为第jj个共享访存记录的共享时间重用距离。SRD(jj)<SRD(ii)表示SRD(jj)不在SRD(ii)与第ii个共享访存记录之间。xjj%P=p表示第jj个共享访存记录的地址xjj映射到私有缓存的第p组。
6.9若SSD(ii)≤共享缓存每组中缓存行数Q,表示缓存命中,转步骤6.10;若SSD(ii)>Q,则发生共享缓存访存缺失,记录和处理共享缓存访存缺失:
6.9.1令CMs[e]=CMs[e]+1。
6.9.2令共享访存历史表中SSD(ii)为0,并更新SHinv(xii)中记录的第ii次访问xii的访存记录序号,即令SHinv(xii)=(0,ii)。
6.10若ii<IIs,令ii=ii+1,转步骤6.5;若ii=IIs,转步骤6.11;
6.11计算目标处理器上蒙特卡罗粒子输运核心程序的共享缓存缺失率CMRs,即:
6.12判断共享缓存容量Ms的共享缓存缺失率CMRs是否降低到了共享缓存的缓存缺失率设计目标20%,若达到设计目标或共享缓存容量已经达到共享缓存容量设计上限(2×8MB),则选择此时的Ms作为最优的缓存容量,转第七步。若未达到共享缓存的缓存缺失率设计目标值且缓存容量未达到设计上限,则令共享缓存容量Ms=Ms+(Ncore×2MB),转步骤6.2。
经过第六步循环,最终共享缓存的缓存缺失率CMRS降低到了19%,达到缺失率设计目标,循环结束,此时最优私有缓存容量Ms为2x2MB。
第七步,根据M和Ms确定针对蒙特卡罗粒子输运的处理器缓存配置。
7.1将目标处理器的每个处理器核的私有缓存按M=256KB设置:每个缓存行大小为64字节,采用S组W行组相联结构,W=8,此时私有缓存的组数需要S=512,才能满足M=512×8×64=256K即满足S×W×H=M
7.2将目标处理器的共享缓存按Ms=4MB设置:的每个缓存行大小为64字节,采用P组Q行组相联结构,Q=16,P=4096,即4096组16行,其中4096为私有缓存的组数,16为每组中缓存行数,满足4096×16×64=4M。
以上实施方案给出了采用本发明进行面向蒙特卡罗粒子输运的处理器缓存配置的步骤,第三步针对处理器核私有缓存快速预测蒙特卡罗粒子输运在不同缓存容量下的缺失次数和缺失率,并给出了获得目标缓存缺失率时处理器私有缓存的最优容量M;第四步针对处理器核共享缓存快速预测蒙特卡罗粒子输运在不同缓存容量下的缺失次数和缺失率,给出了获得目标缓存缺失率时处理器共享缓存的最优容量Ms,并根据私有缓存和共享缓存的最优容量实现了对蒙特卡罗粒子输运专用处理器缓存容量配置。由此可见,采用本发明可快速预测蒙特卡罗粒子输运在不同缓存容量下的缺失次数和缺失率,给出获得目标缓存缺失率时处理器私有和共享缓存的最优容量,根据私有和共享缓存的最优容量对蒙特卡罗粒子输运专用处理器配置缓存容量,辅助面向蒙特卡罗粒子输运的处理器设计。
Claims (4)
1.一种面向蒙特卡罗粒子输运的处理器缓存配置方法,其特征在于包括以下步骤:
第一步,确定针对蒙特卡罗粒子输运的处理器的关键设计指标,包括确定目标处理器的核数Ncore,Ncore为正整数,蒙特卡罗粒子输运的处理器为目标处理器;确定目标处理器的私有缓存的组相联缓存结构中每组中的缓存行数W;确定私有缓存的缺失率设计目标、私有缓存容量设计上限;确定目标处理器的共享缓存的组相联结构中每组缓存行数Q;确定共享缓存的缓存缺失率设计目标和共享缓存容量上限;确定目标处理器的私有缓存和共享缓存的缓存行大小H;
第二步,选择支持运行Intel pin工具的X86多核处理器作为参考处理器;参考处理器用于执行蒙特卡罗粒子输运程序,并获得执行过程中的访存历史;
第三步,将蒙特卡罗粒子输运程序按照粒子输运的核心过程分为6个核心子程序:
将蒙特卡罗粒子输运程序按照输运的6个核心过程分为6个核心子程序,将每个粒子经过的粒子初始化、宏观截面计算、移动粒子、穿越表面、碰撞、死亡6个核心过程作为6个核心子程序;
第四步,使用Pin工具采集参考处理器上多核执行时所有线程的核心子程序的访存历史,将所有线程的访存记录存储到访存历史表,访存历史表共有II个访存记录,每个访存记录包括四个域,分别为访存类型m、访存地址x、所属核心子程序的序号e以及所属线程号t;访存类型包含读数据Read、写数据Write2种;II为正整数;
第五步,从小到大遍历目标处理器中Ncore个处理器核的私有缓存容量,预测Ncore个处理器核的私有缓存缺失率,确定Ncore个处理器核的最优私有缓存容量:
5.1将Ncore个处理器核的私有缓存容量M初始化为16KB,令缓存行大小等于目标处理器的私有缓存的缓存行大小H,初始化Ncore个处理器核私有缓存为S组W行组相联结构,S为私有缓存的组数,W为每组中缓存行数,满足S×W=M/H;
5.2初始化Ncore个处理器核的共享访存记录表为空,令共享访存记录表的表项序号q=1;令CMRp[Ncore]为记录处理器核私有缓存缺失率的数组,包含Ncore个元素,第ncore个元素记录第ncore个处理器核私有缓存缺失率,1≤ncore≤Ncore,初始化CMRp[Ncore]各元素为0;令CMp[Ncore][6]为记录处理器核私有缓存缺失次数的二维数组,包含Ncore×6个元素,CMp[ncore][e]记录第ncore个处理器核第e种核心子程序的私有缓存缺失次数,0≤e≤5,e表示第i个访存记录所属的核心子程序的序号,初始化CMp[Ncore][6]各元素为0;初始化记录处理器核访存数量的数组MA[Ncore]中各元素为0,MA[ncore]记录第ncore个处理器核的访存指令数量;
5.3初始化处理器核序号ncore=1;
5.4初始化访存历史表的访存记录序号i=1;
5.5初始化私有访存哈希表Hinv(访存地址)的值为(1,Null,Null),其中Null表示值为“空”,Hinv(访存地址)表示根据访存地址找到访存私有缓存三元组,访存私有缓存三元组为(有效标志,上次访问Hinv(访存地址)中访存地址的线程号,当前处理器核上次访问Hinv(访存地址)中访存地址的访存记录序号),有效标志使用0或1表示,1表示该地址的内容在私有缓存中失效,0表示该地址的内容在私有缓存中有效;
5.6若ncore=ti mod Ncore,ti为第i个访存记录中的线程号,转步骤5.8;若ncore≠ti modNcore,且访存类型为写数据Write,转步骤5.7;
5.7令Hinv(xi)=(1,ti,Null),1表示第i个访存记录中的访存地址xi的数据在序号为ncore的处理器核失效,xi为第i个访存记录中的访存地址;转步骤5.13;
5.8令MA[ncore]=MA[ncore]+1;若访存历史表中第i个访存记录对应的Hinv(xi)的有效标志为0,转步骤5.10;若访存历史表中第i个访存记录对应的Hinv(xi)的有效标志为1,说明序号为ncore的处理器核私有缓存中xi失效,转步骤5.9;
5.9记录和处理私有缓存访存缺失,方法是:
5.9.1令CMp[ncore][e]=CMp[ncore][e]+1;为
5.9.2令访存历史表中第i个访存记录的私有堆栈重用距离PSD(i)为0,并令Hinv(xi)=(0,ti,i),;
5.9.3将第i个访存记录的访存地址xi、所属核心子程序的序号e存储到共享访存记录表的第q个表项中,令q=q+1;转步骤5.13;
5.10计算第i个访存记录关于访存地址xi的私有时间重用距离PRD(i),PRD(i)=序号为ncore的处理器核上次访问xi的访存记录序号,该访存记录序号为Hinv(xi)得到的三元组的第三个域的值;令Hinv(xi)=(0,ti,i);
5.11令s=xi%S,;根据第i个访存记录的私有时间重用距离PRD(i)计算私有堆栈距离PSD(i),具体公式为:
其中,PSD(i)为第i个访存记录的私有堆栈距离,PRD(j)为第j个访存记录的私有时间重用距离,F(x)为指示函数,当表达式x为真时取值为1,否则为0;PRD(j)<PRD(i)表示PRD(j)不在PRD(i)与第i个访存记录之间,PRD(i)是第i个访存记录关于访存地址xi的私有时间重用距离;xj%S=s表示第j个访存记录的地址xj映射到私有缓存的第s组;tj mod Ncore=ncore表示第j个访存记录所属线程被分配在序号为ncore的处理器核上;
5.12若PSD(i)≤W,表示缓存命中,转步骤5.13;若PSD(i)>W,则发生私有缓存访存缺失,则记录和处理私有缓存访存缺失:
5.12.1令CMp[ncore][e]=CMp[ncore][e]+1;
5.12.2令访存历史表中第i个访存记录的PSD(i)为0,并令Hinv(xi)=(0,ti,i);
5.12.3将发生缺失的第i个访存记录的访存地址xi、所属核心子程序的序号e存储到共享访存记录表的第q个表项中,令q=q+1;
5.13若i<II,令i=i+1,转步骤5.6;若i=II,转步骤5.14;
5.14计算序号为ncore的处理器核上蒙特卡罗粒子输运核心程序的私有缓存缺失率CMRp[ncore],即:
5.15若ncore<Ncore,令ncore=ncore+1,返回步骤5.4;若ncorw=Ncore,则执行步骤5.16;
5.16计算Ncorw个处理器核上蒙特卡罗粒子输运核心程序的平均私有缓存缺失率ACMRp,即:
5.17判断ACMRp是否降低到了私有缓存的缓存缺失率设计目标,若达到设计目标值或私有缓存容量已经达到私有缓存容量设计上限,则选择M作为最优的私有缓存容量,令共享访存记录的访存记录总数IIs=q,转第六步;若未达到私有缓存的缓存缺失率设计目标且缓存容量未达到私有缓存容量设计上限,则令私有缓存容量M=M+16KB,转步骤5.2;
第六步,从小到大遍历目标处理器的共享缓存容量,预测目标处理器的共享缓存缺失率,确定目标处理器的最优共享缓存容量;方法是:
6.1将目标处理器的共享缓存容量Ms初始化为Ncore×2MB,令缓存行大小等于H,因此共包含Ms/H个缓存行;初始化处理器核共享缓存采用P组Q行组相联结构,其中P为共享缓存的组数,Q为每组中缓存行数,满足P×Q×H=Ms;
6.2令CMRs记录目标处理器共享缓存缺失率,初始化CMRs为0;令CMs[6]为记录目标处理器共享缓存缺失次数的数组,包含6个元素,CMs[e]记录第e种核心子程序的共享缓存缺失次数,初始化CMs[6]各元素为0;
6.3初始化共享访存记录序号ii=1,其中,ii表示共享访存历史表中第ii个共享访存记录;共享访存记录表共IIs项共享访存记录;
6.4初始化共享访存哈希表SHinv(访存地址)的值为(1,Null),SHinv(访存地址)表示根据SHinv(访存地址)中访存地址找到访存共享缓存二元组,访存共享缓存二元组为(有效标志,处理器上次访问SHinv(访存地址)中访存地址的共享访存记录序号),有效标志使用0或1表示,1表示该地址的内容在私有缓存中失效,0表示该地址的内容在私有缓存中有效;
6.5若共享访存历史表中第ii个共享访存记录对应的SHinv(xii)的有效标志为0,转步骤6.7;若共享访存历史表中第ii个共享访存记录对应的SHinv(xii)的有效标志为1,说明共享缓存中xii失效,转步骤6.6;
6.6记录和处理共享缓存访存缺失:
6.6.1令CMs[e]=CMs[e]+1;;
6.6.2令共享访存历史表中第ii个共享访存记录的共享堆栈重用距离SSD(ii)为0,并令SHinv(xii)=(0,ii),即更新;转步骤6.10;
6.7计算第ii个共享访存记录关于访存地址xii的共享时间重用距离SRD(ii),SRD(ii)=处理器上次访问xii的共享访存记录序号,该共享访存记录序号为SHinv(xii)得到的二元组的第二个域的值;令SHinv(xii)=(0,ii);
6.8令p=xii%P,;根据SRD(ii)计算第ii个访存记录的共享堆栈距离SSD(ii),具体公式为:
其中,SRD(jj)为第jj个共享访存记录的共享时间重用距离;SRD(jj)<SRD(ii)表示SRD(jj)不在SRD(ii)与第ii个共享访存记录之间;xjj%P=p表示第jj个共享访存记录的地址xjj映射到私有缓存的第p组;
6.9若SSD(ii)≤Q,表示缓存命中,转步骤6.10;若SSD(ii)>Q,则发生共享缓存访存缺失,记录和处理共享缓存访存缺失:
6.9.1令CMs[e]=CMs[e]+1;
6.9.2令共享访存历史表中SSD(ii)为0,并令SHinv(xii)=(0,ii);
6.10若ii<IIs,令ii=ii+1,转步骤6.5;若ii=IIs,转步骤6.11;
6.11计算目标处理器上蒙特卡罗粒子输运核心程序的共享缓存缺失率CMRs,即:
6.12判断共享缓存容量Ms的共享缓存缺失率CMRs是否降低到了共享缓存的缓存缺失率设计目标,若达到设计目标值或共享缓存容量已经达到共享缓存容量设计上限,则选择Ms作为最优的缓存容量,转第七步;若未达到共享缓存的缓存缺失率设计目标且缓存容量未达到共享缓存容量设计上限,则令共享缓存容量Ms=Ms+(Ncore×2MB),转步骤6.2;
第七步,根据M和Ms配置目标处理器的私有缓存和共享缓存;
7.1将目标处理器的每个处理器核的私有缓存配置为:每个缓存行大小为H字节,采用S组W行组相联结构,其中S为私有缓存的组数,W为每组中缓存行数,满足S×W×H=M;
7.2将目标处理器共享缓存配置为:每个缓存行大小为H字节,采用P组Q行组相联结构,其中P为共享缓存的组数,Q为每组中缓存行数,满足P×Q×H=Ms。
2.如权利要求1所述的一种面向蒙特卡罗粒子输运的处理器缓存配置方法,其特征在于第一步所述目标处理器的私有缓存组相联缓存结构中每组中缓存行数W设置为4或8或16,私有缓存的缺失率设计目标设置为60%-80%,私有缓存容量设计上限设置为16KB-256KB;目标处理器的共享缓存的组相联结构中每组缓存行数Q设置为8或16或32;共享缓存的缓存缺失率设计目标设置为20%-40%,共享缓存容量上限设置为Ncore×2MB至Ncore×8MB;目标处理器的私有缓存和共享缓存的缓存行大小H设置为64字节。
3.如权利要求1所述的一种面向蒙特卡罗粒子输运的处理器缓存配置方法,其特征在于第四步所述pin工具要求3.13及以上版本。
4.如权利要求1所述的一种面向蒙特卡罗粒子输运的处理器缓存配置方法,其特征在于第四步所述使用Pin工具采集参考处理器上多核执行时所有线程的核心子程序的访存历史,将所有线程的访存记录存储到访存历史表的方法是:
4.1初始化访存记录序号tt=1;令蒙特卡罗粒子输运程序正在执行的指令为当前指令;令访存历史表为空;令IntelX86处理器多核执行时的线程数为T,T为大于等于Ncore的正整数;
4.2若蒙特卡罗粒子输运程序运行结束,转4.4;若蒙特卡罗粒子输运程序运行未结束,利用pin工具跟踪蒙特卡罗粒子输运程序的当前指令,如果当前指令是Read或Write指令,转到4.3;否则,跳过该指令,令蒙特卡罗粒子输运程序执行的下一条指令为当前指令,转4.2;
4.3将Read或Write类型访存指令存储在访存历史表的第tt个访存记录中,每个访存记录包括四个域,分别为访存类型m、访存地址x、所属核心子程序的序号e以及所属线程号t;访存类型包含读数据Read、写数据Write 2种;令访存历史表的序号tt=tt+1;令蒙特卡罗粒子输运程序执行的下一条指令为当前指令,转4.2;
4.4完成对蒙特卡罗粒子输运程序全部指令的跟踪,令访存历史表的访存记录条数II=tt。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211348042.5A CN116049036B (zh) | 2022-10-31 | 2022-10-31 | 一种面向蒙特卡罗粒子输运的处理器缓存配置方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211348042.5A CN116049036B (zh) | 2022-10-31 | 2022-10-31 | 一种面向蒙特卡罗粒子输运的处理器缓存配置方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN116049036A CN116049036A (zh) | 2023-05-02 |
CN116049036B true CN116049036B (zh) | 2023-07-21 |
Family
ID=86132170
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211348042.5A Active CN116049036B (zh) | 2022-10-31 | 2022-10-31 | 一种面向蒙特卡罗粒子输运的处理器缓存配置方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116049036B (zh) |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103065056A (zh) * | 2013-01-22 | 2013-04-24 | 中国科学院合肥物质科学研究院 | 一种基于数据场分割的移动人体剂量蒙特卡罗模拟方法 |
CN103065330A (zh) * | 2013-01-15 | 2013-04-24 | 南京师范大学 | 基于流水线并行处理技术的粒子滤波目标跟踪方法及装置 |
CN108363865A (zh) * | 2018-02-09 | 2018-08-03 | 北京应用物理与计算数学研究所 | 粒子输运区域分解并行计算的异步输运模拟方法和系统 |
CN108549582A (zh) * | 2018-03-30 | 2018-09-18 | 北京应用物理与计算数学研究所 | 匹配于高性能计算机结构的组合几何数据结构及并行方法 |
-
2022
- 2022-10-31 CN CN202211348042.5A patent/CN116049036B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103065330A (zh) * | 2013-01-15 | 2013-04-24 | 南京师范大学 | 基于流水线并行处理技术的粒子滤波目标跟踪方法及装置 |
CN103065056A (zh) * | 2013-01-22 | 2013-04-24 | 中国科学院合肥物质科学研究院 | 一种基于数据场分割的移动人体剂量蒙特卡罗模拟方法 |
CN108363865A (zh) * | 2018-02-09 | 2018-08-03 | 北京应用物理与计算数学研究所 | 粒子输运区域分解并行计算的异步输运模拟方法和系统 |
CN108549582A (zh) * | 2018-03-30 | 2018-09-18 | 北京应用物理与计算数学研究所 | 匹配于高性能计算机结构的组合几何数据结构及并行方法 |
Also Published As
Publication number | Publication date |
---|---|
CN116049036A (zh) | 2023-05-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Mutlu et al. | Processing data where it makes sense: Enabling in-memory computation | |
Jevdjic et al. | Unison cache: A scalable and effective die-stacked DRAM cache | |
San Miguel et al. | The bunker cache for spatio-value approximation | |
Pichai et al. | Architectural support for address translation on gpus: Designing memory management units for cpu/gpus with unified address spaces | |
Wang et al. | Adaptive placement and migration policy for an STT-RAM-based hybrid cache | |
Gulur et al. | Bi-modal dram cache: Improving hit rate, hit latency and bandwidth | |
Seshadri et al. | The dirty-block index | |
US20080320228A1 (en) | Method and apparatus for efficient replacement algorithm for pre-fetcher oriented data cache | |
Basu et al. | Scavenger: A new last level cache architecture with global block priority | |
Zebchuk et al. | A framework for coarse-grain optimizations in the on-chip memory hierarchy | |
Mittal et al. | AYUSH: A technique for extending lifetime of SRAM-NVM hybrid caches | |
CN111258927B (zh) | 一种基于采样的应用程序cpu末级高速缓存缺失率曲线的预测方法 | |
Gaur et al. | Base-victim compression: An opportunistic cache compression architecture | |
Prihozhy | Simulation of direct mapped, k-way and fully associative cache on all pairs shortest paths algorithms | |
Baruah et al. | Valkyrie: Leveraging inter-tlb locality to enhance gpu performance | |
Chang et al. | To move or not to move? page migration for irregular applications in over-subscribed GPU memory systems with DynaMap | |
CN116049036B (zh) | 一种面向蒙特卡罗粒子输运的处理器缓存配置方法 | |
Zhang et al. | Design and optimization of large size and low overhead off-chip caches | |
Abumwais et al. | Shared Cache Based on Content Addressable Memory in a Multi-Core Architecture. | |
Kokolis et al. | Cloak: Tolerating non-volatile cache read latency | |
Li et al. | A self-learning pattern adaptive prefetching method for big data applications | |
Gulur et al. | Bi-modal dram cache: A scalable and effective die-stacked dram cache | |
Manthey et al. | Towards Improving the Resource Usage of SAT-solvers. | |
Khan | Brief overview of cache memory | |
Yoon et al. | Self-learnable cluster-based prefetching method for DRAM-flash hybrid main memory architecture |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |