一种面向蒙特卡罗粒子输运的处理器缓存配置方法技术

技术编号:37457383 阅读:9 留言:0更新日期:2023-05-06 09:29
本发明专利技术公开了一种面向蒙特卡罗粒子输运的处理器缓存配置方法,目的是解决现有技术无法快速配置缓存容量的问题。技术方案是:确定面向蒙特卡罗粒子输运的多核处理器即目标处理器设计指标;选择参考处理器;将蒙特卡罗粒子输运程序分为6个核心子程序;采集参考处理器多核执行时核心子程序访存历史;遍历目标处理器的处理器核私有缓存容量,预测处理器核私有缓存缺失率,确定处理器核最优私有缓存容量M;遍历共享缓存容量,预测目标处理器共享缓存缺失率,确定最优共享缓存容量M

【技术实现步骤摘要】
一种面向蒙特卡罗粒子输运的处理器缓存配置方法


[0001]本专利技术涉及一种面向蒙特卡罗粒子输运的处理器私有缓存和共享缓存配置方法,属于计算机体系结构领域。

技术介绍

[0002]蒙特卡罗粒子输运程序被广泛应用于核模拟、生物医学等领域,其通过大量中子、电子、质子等粒子的统计行为求得问题的解,由于粒子的独立性,蒙特卡罗粒子输运程序具有天然的并行性,可以很好地在多核处理器上实现线程级并行,然而由于其非规则访存、分支多等特征,很难实现数据级并行,从而难以发挥通用处理器和高性能协处理器内部向量单元的性能,使得在这些处理器上蒙特卡罗粒子输运程序的执行效率特别低。改进当前X86、ARM等处理器是提高蒙特卡罗粒子输运程序执行效率的重要途径,业界主要通过gem5、McPAT等模拟器探索处理器的前端、流水线、缓存等参数,通过改变处理器配置,观测程序的性能,进而选择最优的参数配置以提高执行效率。缓存配置是面向蒙特卡罗粒子输运程序的处理器设计的重要部分,缓存通常包含多个层次,主流的多核处理器大都采用3级缓存,越靠近处理器核,延迟越低容量也越小。处理器在访问内存获取需要的数据时,首先从一级缓存(L1 Cache)中寻找,如果发生缺失则从二级缓存(L2 Cache)中寻找,如果L2发生缺失则从三级缓存(L3 Cache)中寻找,若仍缺失则访问内存。通常L1 Cache和L2 Cache为各个处理器核私有,L3 Cache为所有处理器共享,由于主流多核处理器通常采用总线监听(Snoopy)一致性协议,写回操作可能会作废L1 Cache和L2 Cache中的数据。因此缓存缺失次数越多,数据访问时间越长。
[0003]为了确定每一级缓存最优的配置(即缓存的容量),可通过模拟器直接测得程序的缓存缺失次数(即请求数据未在缓存中的访存次数),然后不断改变缓存配置参数以达到降低缺失次数的目的。然而单纯依赖模拟器会引入极大的时间开销,为了更快地确定缓存容量,需要快速得到不同缓存配置时蒙特卡罗粒子输运程序的缓存缺失次数。此外,蒙特卡罗粒子输运程序包含多个核心子程序,包括粒子初始化、宏观截面计算等,不同子程序的访存特征不同,因此缓存缺失次数有较大差别,为了更细粒度地分析缓存配置对不同核心子程序的影响,有必要同时获得不同核心子程序的缓存缺失次数。当前除了模拟器方法,另一类获得不同缓存配置时程序的缓存缺失次数的方法为基于访存特征的预测方法,访存特征可以通过对程序的纯理论分析或者分析目标程序特征(即访存序列)获得,但蒙特卡罗粒子输运程序的随机性使得纯理论分析不可行。访存特征通常指时间重用距离和堆栈距离,时间重用距离为连续访问同一地址之间访问过的地址的数目,而堆栈距离为连续访问同一地址之间访问过的不同地址的数目。现有基于访存特征对不同缓存配置时预测程序缓存缺失次数的方法(即分析程序的访存序列方法)存在两个缺陷:一方面,这些方法只针对整个程序,无法获得多核执行时蒙特卡罗粒子输运核心子程序的私有缓存缺失次数和共享缓存缺失次数,因此无法根据缓存缺失次数进行私有缓存和共享缓存容量配置;另一方面,当前蒙特卡罗粒子输运程序主要运行在通用处理器上,通用处理器的私有缓存和共享缓存通常采用
组相联映射,图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、mem blockX)之间的映射)。然而现有分析目标程序的访存序列方法均未考虑组相联映射,只能预测全相联缓存的缺失,不能预测组相联缓存缺失,因此无法根据缓存缺失进行组相联缓存的容量配置。
[0004]因此如何对面向蒙特卡罗粒子输运的处理器的缓存缺失进行快速预测,并根据组相联私有缓存和共享缓存缺失率对容量进行快速配置,是本领域技术人员极为关注的技术问题。

技术实现思路

[0005]本专利技术要解决的技术问题是针对模拟器方法测量程序的缓存缺失次数时间开销特别大而无法快速配置缓存容量,现有基于访存特征的缓存缺失次数预测方法无法适用于组相联缓存、且无法获得多核执行时蒙特卡罗不同核心子程序的私有缓存缺失次数和共享缓存缺失次数从而无法配置缓存容量的问题,提供一种面向蒙特卡罗粒子输运的处理器缓存配置方法,该方法可快速预测蒙特卡罗粒子输运在不同缓存容量下的缺失次数和缺失率,给出获得目标缓存缺失率时处理器私有和共享缓存的最优容量,根据私有和共享缓存的最优容量对蒙特卡罗粒子输运专用处理器配置缓存容量,辅助面向蒙特卡罗粒子输运的处理器设计。
[0006]本专利技术基于的蒙特卡罗粒子输运程序Quicksilver具有以下特性:多核执行时每个线程的访存行为一致,每个线程的缓存缺失次数近似相等;当粒子数超过一个阈值A(A通常满足100≤A≤1000)时,线程的访存行为保持稳定,缓存缺失次数和粒子数的比值近似保持固定,因此只需采用粒子数规模不超过A的缓存缺失次数即可确定每个线程的缓存缺失次数,大大降低时间开销。
[0007]本专利技术的目标是配置面向蒙特卡罗粒子输运的多核处理器(令为目标处理器)的私有缓存和共享缓存,私有缓存和共享缓存均采用组相联映射。技术方案包括以下步骤:
[0008]第一步,确定针对蒙特卡罗粒子输运的处理器即目标处理器的关键设计指标,包括确定目标处理器的核数N
core
,N
core
为正整数;确定目标处理器的私有缓存的组相联缓存结构中每组中的缓存行数W(即W路组相联,W一般为4或8或16);确定私有缓存的缺失率设计目标(一般为60%

80%)、私有缓存容量设计上限(容量一般为16KB

256KB);确定目标处理器的共享缓存的组相联结构中每组缓存行数Q(即Q路组相联,Q一般为8或16或32);确定共享缓存的缓存缺失率设计目标(一般为20%

40%)和共享缓存容量上限(容量一般为N
core
×
2MB至N
core
×
8MB)。确定目标处理器的私有缓存和共享缓存的缓存行大小H,H一般为64字节即64B。
[0009]第二步,选择Intel公司或AMD公司的X86多核处理器(要求支持运行Intel pin工具)作为参考处理器。参考处理器主要用于执行蒙特卡罗粒子输运程序,并获本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种面向蒙特卡罗粒子输运的处理器缓存配置方法,其特征在于包括以下步骤:第一步,确定针对蒙特卡罗粒子输运的处理器即目标处理器的关键设计指标,包括确定目标处理器的核数N
core
,N
core
为正整数;确定目标处理器的私有缓存的组相联缓存结构中每组中的缓存行数W;确定私有缓存的缺失率设计目标、私有缓存容量设计上限;确定目标处理器的共享缓存的组相联结构中每组缓存行数Q;确定共享缓存的缓存缺失率设计目标和共享缓存容量上限;确定目标处理器的私有缓存和共享缓存的缓存行大小H;第二步,选择支持运行Intel pin工具的X86多核处理器作为参考处理器;参考处理器用于执行蒙特卡罗粒子输运程序,并获得执行过程中的访存历史;第三步,将蒙特卡罗粒子输运程序按照粒子输运的核心过程分为6个核心子程序,方法是:将蒙特卡罗粒子输运程序按照输运的6个核心过程分为6个核心子程序,将每个粒子经过的粒子初始化、宏观截面计算、移动粒子、穿越表面、碰撞、死亡6个核心过程作为6个核心子程序;第四步,使用Pin工具采集参考处理器上多核执行时所有线程的核心子程序的访存历史,将所有线程的访存记录存储到访存历史表,访存历史表的共有II个访存记录,每个访存记录包括四个域,分别为访存类型m、访存地址x、所属核心子程序的名字e以及所属线程号t;访存类型包含读数据Read、写数据Write2种;第五步,从小到大遍历目标处理器中N
core
个处理器核的私有缓存容量,预测N
core
个处理器核的私有缓存缺失率,确定N
core
个处理器核的最优私有缓存容量,方法是:5.1将N
core
个处理器核的私有缓存容量M初始化为16KB,令缓存行大小等于目标处理器的私有缓存的缓存行大小H,初始化N
core
个处理器核私有缓存为W路组相联结构,即S组W行,S为私有缓存的组数,W为每组中缓存行数,满足S
×
W=M/H;5.2初始化N
core
个处理器核的共享访存记录表为空,令共享访存记录表的表项序号q=1;令CMR
p
[N
core
]为记录处理器核私有缓存缺失率的数组,包含N
core
个元素,第n
core
个元素记录第n
core
个处理器核私有缓存缺失率,1≤n
core
≤N
core
,初始化CMR
p
[N
core
]各元素为0;令CM
p
[N
core
][6]为记录处理器核私有缓存缺失次数的二维数组,包含N
core
×
6个元素,CM
p
[n
core
][e]记录第n
core
个处理器核第e种核心子程序的私有缓存缺失次数,0≤e≤5,e表示第i个访存记录所属的子程序序号,初始化CM
p
[N
core
][6]各元素为0;初始化记录处理器核访存数量的数组MA[N
core
]中各元素为0,MA[n
core
]记录第n
core
个处理器核的访存指令数量;5.3初始化处理器核序号n
core
=1;5.4初始化访存记录序号i=1,其中,i表示访存历史表中第i个访存记录;5.5初始化私有访存哈希表H
inv
(访存地址)的值为(1,Null,Null),其中Null表示值为“空”,H
inv
(访存地址)表示根据访存地址找到访存私有缓存三元组,访存私有缓存三元组为(有效标志,上次访问H
inv
(访存地址)中访存地址的线程号,当前处理器核上次访问H
inv
(访存地址)中访存地址的访存记录编号),有效标志使用0或1表示,1表示该地址的内容在私有缓存中失效,0表示该地址的内容在私有缓存中有效;5.6若第i个访存记录所属线程分配在第n
core
个处理器核上,即n
core
=t
i mod N
core
,t
i
为第i个访存记录中的线程号,转步骤5.8;若访存历史表中第i个访存记录的线程不在第n
core
个处理器核上,即n
core
≠t
i mod N
core
,且访存类型为写数据Write,转步骤5.7;
5.7令H
inv
(x
i
)=(1,t
i
,Null),1表示第i个访存记录中的访存地址x
i
的数据在序号为n
core
的处理器核失效,x
i
为第i个访存记录中的访存地址;转步骤5.13;5.8令序号为n
core
的处理器核的访存指令数量增加1,即令MA[n
core
]=MA[n
core
]+1;若访存历史表中第i个访存记录对应的H
inv
(x
i
)的有效标志为0,转步骤5.10;若访存历史表中第i个访存记录对应的H
inv
(x
i
)的有效标志为1,说明序号为n
core
的处理器核私有缓存中x
i
失效,即该缓存内容首次访问或已经被其他线程更改,转步骤5.9;5.9此时第i个访存记录对内存地址x
i
的私有缓存发生访存缺失,记录和处理私有缓存访存缺失,方法是:5.9.1令CM
p
[n
core
][e]=CM
p
[n
core
][e]+1;e为第i个访存记录所属的子程序序号;5.9.2令访存历史表中第i个访存记录的私有堆栈重用距离PSD(i)为0,并令H
inv
(x
i
)=(0,t
i
,i),即更新上次访问x
i
的线程号和上次访问x
i
的访存记录编号;5.9.3将第i个访存记录的访存地址x
i
、所属核心子程序的名字存储到共享访存记录表的第q个表项中,令q=q+1;转步骤5.13;5.10计算第i个访存记录关于访存地址x
i
的私有时间重用距离PRD(i),PRD(i)=序号为n
core
的处理器核上次访问x
i
的访存记录序号,该访存记录序号为H
inv
(x
i
)得到的三元组的第三个域的值;令H
inv
(x
i
)=(0,t
i
,i),即更新H
inv
(x
i
)中记录的上次访问x
i
的线程号和上次访问x
i
的访存记录编号;5.11令s=x
i
%S,即将第i个访存记录的访存地址x
i
映射到第n
core
个处理器核私有缓存的第s组;根据第i个访存记录的私有时间重用距离PRD(i)计算私有堆栈距离PSD(i),即针对序号为n
core
的处理器核的私有缓存第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个访存记录的私有时间重用距离;x
j
%S=s表示第j个访存记录的地址x
j
映射到私有缓存的第s组;t
j mod N
core
=n
core
表示第j个访存记录所属线程被分配在序号为n
core
的处理器核上;5.12若PSD(t)≤W,表示缓存命中,转步骤5.13;若PSD(i)>W,则发生私有缓存访存缺失,则记录和处理私有缓存访存缺失:5.12.1令CM
p
[n
core
][e]=C
p
[n
core
][e]+1;5.12.2令访存历史表中PSD(i)为0,并更新H
inv
(x
i
)中记录的上次访问x
i
的线程号和上次访问x
i
的访存记录编号,即令H
inv
(x
i
)=(0,t
i
,i);5.12.3将发生缺失的第i个访存记录的访存地址x
i
、所属核心子程序的名字存储到共享访存记录表的第q个表项中,令q=q+1;5.13若i<II,令i=i...

【专利技术属性】
技术研发人员:杨博马东辉刘杰王庆林张庆阳陈琳龚春叶陈旭光肖调杰潘冬梅
申请(专利权)人:中国人民解放军国防科技大学
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1