CN111158755A - 用于消除simd向量化程序中缓存缺失的多向量交错执行方法 - Google Patents
用于消除simd向量化程序中缓存缺失的多向量交错执行方法 Download PDFInfo
- Publication number
- CN111158755A CN111158755A CN201911198922.7A CN201911198922A CN111158755A CN 111158755 A CN111158755 A CN 111158755A CN 201911198922 A CN201911198922 A CN 201911198922A CN 111158755 A CN111158755 A CN 111158755A
- Authority
- CN
- China
- Prior art keywords
- state
- vector
- vectorization
- dvs
- rvs
- 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.)
- Pending
Links
- 239000013598 vector Substances 0.000 title claims abstract description 52
- 238000000034 method Methods 0.000 title claims abstract description 31
- 230000010354 integration Effects 0.000 claims description 11
- 230000008569 process Effects 0.000 claims description 9
- 230000009191 jumping Effects 0.000 claims description 2
- 238000004364 calculation method Methods 0.000 abstract description 2
- 238000010586 diagram Methods 0.000 description 8
- 239000000523 sample Substances 0.000 description 6
- 230000008901 benefit Effects 0.000 description 5
- 238000012545 processing Methods 0.000 description 5
- 230000008859 change Effects 0.000 description 3
- 230000001788 irregular Effects 0.000 description 3
- 230000001934 delay Effects 0.000 description 2
- 238000001514 detection method Methods 0.000 description 2
- PIGCSKVALLVWKU-UHFFFAOYSA-N 2-Aminoacridone Chemical compound C1=CC=C2C(=O)C3=CC(N)=CC=C3NC2=C1 PIGCSKVALLVWKU-UHFFFAOYSA-N 0.000 description 1
- 101000637792 Homo sapiens Solute carrier family 35 member G5 Proteins 0.000 description 1
- 102100032019 Solute carrier family 35 member G5 Human genes 0.000 description 1
- 230000008878 coupling Effects 0.000 description 1
- 238000010168 coupling process Methods 0.000 description 1
- 238000005859 coupling reaction Methods 0.000 description 1
- 238000001914 filtration Methods 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 238000004806 packaging method and process Methods 0.000 description 1
- 238000012856 packing Methods 0.000 description 1
- 238000005192 partition Methods 0.000 description 1
- 238000011160 research Methods 0.000 description 1
- 230000007704 transition Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
- G06F9/3887—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (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
本发明公开了一种用于消除SIMD向量化程序中缓存缺失的多向量交错执行方法,该方法交错地执行多个向量化代码的实例;当一个执行实例发生数据访问时,它只是发出数据预取指令,然后切换到其他的执行实例,以期望数据访问和多个执行实例的运算相重叠;针对向量化代码中的控制流分歧问题,使用残余向量状态来与分歧的向量状态整合,以消除向量中的气泡。本发明充分利用了SIMD向量的数据级别并行以及系统提供的内存级别并行,减少了缓存缺失、分支缺失和计算开销,从而显著提高了指针链式应用的性能,并且可以应用于整个查询流水线的执行。
Description
技术领域
本发明属于软件开发技术领域,尤其涉及一种用于消除SIMD向量化程序中缓存缺失的多向量交错执行方法多向量交错执行方法。
背景技术
为了提高处理性能,现代处理器提供了数据级别的并行,即SIMD(单指令多数据)指令。SIMD指令集被广泛用于加速数据库、图形和其他领域的操作,包括连接、分区、排序、布隆过滤器、选择、集合交和压缩。这些操作受益于SIMD中的向量化执行,以减少计算开销和分支误判。但是,当频繁且随机访问内存数据时,如探测哈希表、探测布隆过滤器和搜索树,SIMD的收益就会减少,甚至完全丧失。因为在处理无法放入内存缓存的大型数据集时,这些操作被内存访问延迟拖慢。即使SIMD可以在一个向量中同时发出多个内存访问的请求,使用SIMD也不能减少内存延迟。更糟糕的是,即使这些请求之中的大部分数据已经在缓存中(即缓存命中),也必须等待那些缓存缺失的数据全部加载到缓存中,因为一个向量中的数据是同步前进的。并且CPU的处理速度相对于内存访问速度的提升更快,这就形成内存墙问题。这样的墙使SIMD的收益更小,因为SIMD只是加速了CPU处理,而无助于内存访问。
面对向量化代码中的内存墙问题,现有工作的主要思路分为两类:第一类是通过组织数据的布局来提高数据的局部性并利用系统中自动的硬件预取功能;第二类则利用软件预取的方式来掩藏内存访问延迟。硬件预取虽然可以缓解内存墙问题,但是不够通用并且效果有限。这是因为在应对具有不规则内存访问特征的应用时,如指针链式应用,其访问模式无法被系统识别和预知,而一旦硬件无法准确感知程序访问数据的特征,那么硬件预取会加载无效的数据到缓存区,这会浪费内存带宽并且替换有效数据。软件预取是避免内存墙问题的一个有效途径,但是目前针对不规则内存访问模式的研究只在标量编程中开展,比如GP、SPP和AMAC,而没有一套将软件预取用于向量化的不规则内存访问的方法。如果直接将标量化的软件预取应用于向量化代码中,则会存在控制流分歧问题,即每个向量的槽位可能负责执行不同的步骤。控制流分歧问题会导致程序无法充分利用系统的内存级别并行,因为空闲的槽位不发出内存预取。
综上所述,向量化的代码受制于内存墙,而如果直接将标量代码中的避免内存墙的软件预取算法应用于向量化编码中,则会遭遇控制流分歧问题。所以需要探索如何有效地利用预取来避免向量化代码中存在的内存墙问题以及控制流分歧问题,以期能够充分利用SIMD向量化的数据级别的并行和系统提供的内存级别并行,从而减少程序运行时的缓存缺失,提高程序的运行性能。
发明内容
本发明目的是为解决上述技术问题而提出的一种用于消除SIMD向量化程序中缓存缺失的多向量交错执行方法多向量交错执行方法,该方法充分利用了SIMD向量的数据级别并行以及系统提供的内存级别并行,减少了缓存缺失、分支缺失和计算开销,从而显著提高了指针链式应用的性能。
实现本发明目的的具体技术方案是:
一种用于消除SIMD向量化程序中缓存缺失的多向量交错执行方法,其特征在于,向量化程序在遇到立即内存访问或控制流分歧时将向量化程序切分成多个向量化状态;其中,所述立即内存访问将向量化程序切分成多个状态,形成向量化有限状态机即FSM;所述控制流分歧将向量化状态切分成更小的状态;
对于一个状态内部的分歧问题,使用残余的向量化状态方法解决;然后交错地执行多个FSM运行实例的向量化状态。
所述立即内存访问即所访问的内存地址无法事先知晓;所述控制流分歧是指在向量中的数据元素面对分支语句和循环语句时而产生不同的结果。
所述残余的向量化状态方法为:给每个发生分歧的状态即DVS附加一个残余向量化状态即RVS,并在DVS继续下一个状态之前,DVS与RVS集成,形成一个新的独立的集成状态。
所述交错地执行为:当一个向量化状态通过预取的方式发出访问内存数据的请求后,切换到其他向量化FSM运行实例的状态继续执行;在一个向量化状态内部遇到分歧时,状态在当前FSM中切换。
所述DVS与RVS集成:如果DVS及其RVS中的有效向量槽位不小于SIMD向量的宽度,则RVS填充DVS,然后一个新的完整向量化状态继续前进到下一个状态,而剩余的有效槽位仍然驻留在RVS中;否则,当前DVS中的有效向量槽位将被移动到RVS,然后返回到最近的数据源状态。
所述DVS与RVS集成的过程:分支语句在条件判断之后依次处理每一个分支,在进入分支前,FSM中添加一个集成状态来更新由条件产生的分歧状态,在集成之后,如果分歧状态的向量已满,则该状态将继续切换到其原来的下一个状态,否则,该状态切换到下一个分支的执行;如果所有分支执行完成,则跳转到最近的数据源状态;循环语句中,一个向量中的数据面对循环条件时会产生不同的分歧状态,这些状态的集成过程跟分支语句中的一样。
所述切换到其他向量化FSM运行实例的状态:当前FSM通过将上下文存储在一个循环数组中继而被挂起,再通过从循环数组中恢复上下文来重启其他FSM的另一种状态。
本发明的有益效果是,通过上述一种多向量交错执行的方法,充分利用了SIMD的数据级别的并行和系统的内存级别并行,减少了缓存缺失、分支缺失和计算开销,提升了指针链式应用的性能,适用于整个查询流水线的执行。
附图说明
图1是本发明实施例中查询流水线样例图;
图2是本发明实施例中基于链式哈希表的连接探测示意图;
图3是本发明实施例中分支语句更新的FSM示意图;
图4是本发明实施例中循环语句更新的FSM示意图;
图5是本发明实施例中expand操作过程图;
图6是本发明实施例中compress操作过程图;
图7是本发明实施例中多向量交错执行方法的运行实例图;
图8是本发明实施例中查询流水线样例的状态机示意图。
具体实施方式
下面结合附图及实施例对本发明进行详细描述。
实施例
将本发明应用于查询流水线,该流水线面临控制流分歧和大量内存访问,流水线的示例如图1所示。在该流水线中,元组来自扫描算子,但是其中只有一些元组能够通过过滤算子中的条件,然后计算元组连接键值的哈希值并在探测算子中匹配哈希表,最后计算合格元组的数量。
在本实施例中的查询流水线中,计算元组连接键值的哈希值并在探测算子中匹配哈希表的过程如图2所示。该探测在一个链式哈希表上执行,由于哈希冲突,每个哈希桶可能包含多个节点,每个节点由几条元组(为了简单起见,这里仅放一条元组)及其下一个节点的指针组成。在哈希连接探测中,先从关系表中依次提取一条元组,然后分两步探测哈希表:(1)计算该元组连接键的哈希值,查找对应哈希桶的地址;(2)将该元组和哈希桶中的每个节点循环匹配连接键。
为了充分利用SIMD向量化和预取,本实施例中,首先将向量化的程序映射到FSM中,即将向量化程序分解为多个向量化状态。向量化的状态切分发生在遇到立即内存访问和控制流分歧时。
当向量化的程序发出内存访问,并且这些内存访问的地址事先不知道时,如果向量化的程序继续执行其代码,就会受到内存访问延迟的影响。本实施例中通过这些内存访问将向量化程序分裂成多个状态,形成向量化FSM。对于每个运行的向量化FSM的实例,当一个状态在发出内存数据预取的指令后,它不会继续它的下一个状态,而是切换到其他向量化FSM实例的状态去执行。这样,一批同时激活的FSM实例被交替挂起和恢复,每个FSM实例都有自己的运行上下文。这一批的FSM应该足够多,以便交错的计算可以与内存访问重叠。
当向量化程序在if和loop语句中遇到控制流分歧时,为了防止在向量化程序中发生分歧后SIMD向量中出现气泡,本实施例中将产生分歧的代码分成不同的状态。每个状态的分歧在状态内部通过残余的向量化状态解决,从而使得每个状态都可以充分利用向量的槽位。在这种情况下,状态只是在该FSM中切换,而不是与其他状态交错执行。
残余的向量化状态RVS依附于每个发生分歧的状态DVS,在分歧发生后,在它继续下一个状态之前,DVS和RVS集成。如果DVS及其RVS中的有效向量槽位不小于SIMD向量的宽度,则RVS填充DVS,然后一个新的完整向量化的状态继续前进到下一个状态,而剩余的有效槽位仍然驻留在RVS中。否则,当前DVS中的有效向量槽位将被移动到RVS,然后返回到最近的数据源状态。在这两种整合后,DVS中的向量变成完整的或者完全空的。
DVS和RVS的集成可以被抽象为一个独立的状态,称为集成状态。因此,原来的FSM有了一点变化。这里以if和loop语句为例。if语句在条件判断之后依次处理每一个分支,在进入分支之前,FSM中添加一个集成状态来更新由条件产生的分歧状态,此更改如图3所示。在集成之后,如果分歧状态的向量已满,则该状态将继续切换到其原来的下一个状态。否则,该状态切换到下一个分支的执行。如果所有分支执行完成,则跳转到最近的数据源状态。与if语句中的更改类似,在loop语句中,一个向量中的数据面对循环条件时会产生不同的分歧状态,这些状态的集成过程跟if语句中的一样,这种变化如图4所示。集成状态的操作如下代码清单所示,其中expand如图5所示,它可以将源向量寄存器中连续的数据加载到目标向量寄存器中不连续的位置,目标位置由掩码标识;compress是expand的逆操作,如图6所示,compress可以将源向量寄存器中不连续的位置打包到目标向量寄存器中连续的位置,目标位置通过掩码标识。集成状态有一个RVS的引用,当它得到DVS的输入时,它将移动DVS到RVS或用RVS填充DVS。
代码清单:
if ( DVS_active_lane_cnt + RVS_active_lane_cnt < vector_size ) {
DVS = compress(DVS); // 在DVS中打包剩余的有效槽位
RVS = expand(RVS, DVS); // 填充RVS
// 转到最近的数据源状态以重启新的执行
}else {
DVS = expand(DVS, RVS); // 填充DVS
RVS = compress(RVS); // 在RVS中打包剩余的有效槽位
// 转到其原来的下一个状态
}
将多向量交错执行的方法用于图2的哈希连接探测显示在图7中,假设其并发两个向量化探测的实例,每个向量有4个槽位来容纳4条元组,元组a-h在对应的哈希桶中分别有1,2,1,3,1,1,2和1个候选匹配节点。图7中,M2之后,Ta和Tc终止,而Tb和Td占用的两个向量槽位处于有效状态。此时,Tb和Td被移动到匹配状态的残余向量化状态中。然后原始向量加载后续元组继续处理。类似的情况发生在M4和M10之后。不同的是,在M8之后,Tj和Tl留下两个有效槽位,加上它的RVS中的三个有效槽位,可以完全填满一个向量,所以Tb和Td被重新加载到这个向量。然后发出预取指令,随后发生M12操作。M14也来自类似的情况。
本实施例中,图1所示的流水线被转换成图8中的FSM。由于一个向量中的元组在过滤算子后会出现分歧,因此在它之后添加一个集成状态。与之不同的是,哈希计算后的匹配循环不仅需要访问内存数据,而且在迭代后会面临分歧。因此在循环匹配之前,FSM中添加一个集成状态,并在循环匹配之后添加一个预取状态。在预取状态之后,将发生一次交错执行,即通过将上下文存储在一个循环数组中来暂停当前正在运行的FSM,并通过从循环数组中恢复上下文来恢复另一个FSM运行实例。与预取状态不同的是,那两个集成状态只是转移到当前FSM的其他状态,而不是与其他状态交错执行;特殊地,当集成状态中依然不能装满一个向量时,它们切换到数据源状态。
Claims (7)
1.一种用于消除SIMD向量化程序中缓存缺失的多向量交错执行方法,其特征在于,向量化程序在遇到立即内存访问或控制流分歧时将向量化程序切分成多个向量化状态;其中,所述立即内存访问将向量化程序切分成多个状态,形成向量化有限状态机即FSM;所述控制流分歧将向量化状态切分成更小的状态;
对于一个状态内部的分歧问题,使用残余的向量化状态方法解决;然后交错地执行多个FSM运行实例的向量化状态。
2.根据权利要求1所述的多向量交错执行方法,其特征在于,所述立即内存访问即所访问的内存地址无法事先知晓;所述控制流分歧是指在向量中的数据元素面对分支语句和循环语句时而产生不同的结果。
3.根据权利要求1所述的多向量交错执行方法,其特征在于,所述残余的向量化状态方法为:给每个发生分歧的状态即DVS附加一个残余向量化状态即RVS,并在DVS继续下一个状态之前,DVS与RVS集成,形成一个新的独立的集成状态。
4.根据权利要求1所述的多向量交错执行方法,其特征在于,所述交错地执行为:当一个向量化状态通过预取的方式发出访问内存数据的请求后,切换到其他向量化FSM运行实例的状态继续执行;在一个向量化状态内部遇到分歧时,状态在当前FSM中切换。
5.根据权利要求3所述的多向量交错执行方法,其特征在于,所述DVS与RVS集成:如果DVS及其RVS中的有效向量槽位不小于SIMD向量的宽度,则RVS填充DVS,然后一个新的完整向量化状态继续前进到下一个状态,而剩余的有效槽位仍然驻留在RVS中;否则,当前DVS中的有效向量槽位将被移动到RVS,然后返回到最近的数据源状态。
6.根据权利要求3所述的多向量交错执行方法,其特征在于,所述DVS与RVS集成的过程:分支语句在条件判断之后依次处理每一个分支,在进入分支前,FSM中添加一个集成状态来更新由条件产生的分歧状态,在集成之后,如果分歧状态的向量已满,则该状态将继续切换到其原来的下一个状态,否则,该状态切换到下一个分支的执行;如果所有分支执行完成,则跳转到最近的数据源状态;循环语句中,一个向量中的数据面对循环条件时会产生不同的分歧状态,这些状态的集成过程跟分支语句中的一样。
7.根据权利要求4所述的多向量交错执行方法,其特征在于,所述切换到其他向量化FSM运行实例的状态:当前FSM通过将上下文存储在一个循环数组中继而被挂起,再通过从循环数组中恢复上下文来重启其他FSM的另一种状态。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911198922.7A CN111158755A (zh) | 2019-11-29 | 2019-11-29 | 用于消除simd向量化程序中缓存缺失的多向量交错执行方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911198922.7A CN111158755A (zh) | 2019-11-29 | 2019-11-29 | 用于消除simd向量化程序中缓存缺失的多向量交错执行方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN111158755A true CN111158755A (zh) | 2020-05-15 |
Family
ID=70556244
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911198922.7A Pending CN111158755A (zh) | 2019-11-29 | 2019-11-29 | 用于消除simd向量化程序中缓存缺失的多向量交错执行方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111158755A (zh) |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103279327A (zh) * | 2013-04-28 | 2013-09-04 | 中国人民解放军信息工程大学 | 面向异构simd扩展部件的自动向量化方法 |
CN107408063A (zh) * | 2015-02-02 | 2017-11-28 | 优创半导体科技有限公司 | 配置成利用非对称多线程对可变长度向量进行操作的向量处理器 |
CN109074256A (zh) * | 2016-04-26 | 2018-12-21 | Arm有限公司 | 在执行向量操作时管理地址冲突的装置及方法 |
-
2019
- 2019-11-29 CN CN201911198922.7A patent/CN111158755A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103279327A (zh) * | 2013-04-28 | 2013-09-04 | 中国人民解放军信息工程大学 | 面向异构simd扩展部件的自动向量化方法 |
CN107408063A (zh) * | 2015-02-02 | 2017-11-28 | 优创半导体科技有限公司 | 配置成利用非对称多线程对可变长度向量进行操作的向量处理器 |
CN109074256A (zh) * | 2016-04-26 | 2018-12-21 | Arm有限公司 | 在执行向量操作时管理地址冲突的装置及方法 |
Non-Patent Citations (1)
Title |
---|
ZHUHE FANG ET AL.: "Interleaved MultiVectorizing", 《PROCEEDINGS OF THE VLDB ENDOWMENT》 * |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US4794521A (en) | Digital computer with cache capable of concurrently handling multiple accesses from parallel processors | |
US5664135A (en) | Apparatus and method for reducing delays due to branches | |
US4783736A (en) | Digital computer with multisection cache | |
US6721943B2 (en) | Compile-time memory coalescing for dynamic arrays | |
Ji et al. | Using shared memory to accelerate mapreduce on graphics processing units | |
US20240004666A1 (en) | Floating-point supportive pipeline for emulated shared memory architectures | |
EP3132347A1 (en) | Memory reference metadata for compiler optimization | |
WO2011131470A1 (en) | Gpu enabled database systems | |
Fang et al. | Interleaved multi-vectorizing | |
Ritson et al. | An evaluation of intel's restricted transactional memory for cpas | |
US6205544B1 (en) | Decomposition of instructions into branch and sequential code sections | |
Paul et al. | Revisiting hash join on graphics processors: A decade later | |
Wang et al. | Excavating the potential of GPU for accelerating graph traversal | |
Lan et al. | SWhybrid: a hybrid-parallel framework for large-scale protein sequence database search | |
Jiang et al. | CUDAMPF: a multi-tiered parallel framework for accelerating protein sequence search in HMMER on CUDA-enabled GPU | |
US20200183702A1 (en) | Arithmetic processing apparatus and memory apparatus | |
CN111158755A (zh) | 用于消除simd向量化程序中缓存缺失的多向量交错执行方法 | |
Haffner et al. | An analysis and comparison of database cracking kernels | |
Liu et al. | Lightscan: Faster scan primitive on CUDA compatible manycore processors | |
KR102269157B1 (ko) | 에뮬레이팅된 공유 메모리 아키텍처에서 긴 지연 연산을 위한 아키텍처 | |
Huang et al. | Optimizing B+-Tree searches on coupled CPU-GPU architectures | |
Wu et al. | Compiling SIMT Programs on Multi-and Many-Core Processors with Wide Vector Units: A Case Study with CUDA | |
Topham et al. | Performance of the decoupled ACRI-1 architecture: The perfect club | |
Santos et al. | Improved Computation of Database Operators via Vector Processing Near-Data | |
Choudhury et al. | A hybrid CPU+ GPU working-set dictionary |
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 | ||
WD01 | Invention patent application deemed withdrawn after publication | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20200515 |