CN108920412B - 针对异构计算机体系结构的算法自动调优方法 - Google Patents
针对异构计算机体系结构的算法自动调优方法 Download PDFInfo
- Publication number
- CN108920412B CN108920412B CN201810632636.6A CN201810632636A CN108920412B CN 108920412 B CN108920412 B CN 108920412B CN 201810632636 A CN201810632636 A CN 201810632636A CN 108920412 B CN108920412 B CN 108920412B
- Authority
- CN
- China
- Prior art keywords
- version
- algorithm
- data
- aligned
- priority
- 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
- 238000000034 method Methods 0.000 title claims abstract description 42
- 238000004364 calculation method Methods 0.000 claims abstract description 61
- 241001409283 Spartina mottle virus Species 0.000 description 19
- 230000006870 function Effects 0.000 description 17
- 238000010586 diagram Methods 0.000 description 5
- 230000001133 acceleration Effects 0.000 description 4
- 230000005540 biological transmission Effects 0.000 description 3
- 230000008901 benefit Effects 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 238000011773 genetically engineered mouse model Methods 0.000 description 2
- 239000011159 matrix material Substances 0.000 description 2
- 238000005457 optimization Methods 0.000 description 2
- 238000007781 pre-processing Methods 0.000 description 2
- 230000008569 process Effects 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000005538 encapsulation Methods 0.000 description 1
- 230000005012 migration Effects 0.000 description 1
- 238000013508 migration Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 239000013307 optical fiber Substances 0.000 description 1
- 238000004806 packaging method and process Methods 0.000 description 1
- 238000002203 pretreatment Methods 0.000 description 1
- 238000012545 processing Methods 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/16—Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
- G06F15/177—Initialisation or configuration control
-
- 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)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Computer Hardware Design (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Executing Machine-Instructions (AREA)
- Stored Programmes (AREA)
Abstract
本发明提供一种针对异构计算机体系结构的算法自动调优方法,其中所述异构计算机体系结构中存储有算法的多个版本,所述方法包括:步骤1)对于待执行的算法,在节点适用的并且能够获得的算法版本中依据算法版本的效率来确定最优的算法版本;步骤2)执行所述最优的算法版本。本发明结合计算机体系结构特征和参与计算的数据特征对算法进行自动调优,无需用户干预,用户无需知道算法的每个版本,降低了用户使用异构集群的门槛。
Description
技术领域
本发明涉及计算机体系结构领域,特别涉及异构环境下的算法自动调优技术。
背景技术
过去几十年来,计算机体系结构经历了CPU主导阶段和众核处理器主导阶段,现在已经步入异构集群时代。异构集群中的每个计算节点(后文简称节点)的体系结构都有可能不同,例如,有些节点上含有Intel MIC,有些节点上含有GPU,有些节点则支持不同的SIMD指令集,节点的计算能力因体系结构的不同而各异。
复杂的计算机体系结构特别是异构集群的出现给算法的优化和移植带来了新的挑战,当前大多数算法库或工具包还没有针对不同的计算机体系机构提供不同的优化算法版本。尽管有些算法库或工具包提供了针对不同计算机体系结构的优化算法版本,但是这些优化的算法版本依赖于用户的手动选择,节点不能自动地选择最优的算法版本,这种执行模式很难充分利用异构集群的优势。
发明内容
为解决上述现有技术中存在的问题,根据本发明的一个实施例,提供一种针对异构计算机体系结构的算法自动调优方法,其中所述异构计算机体系结构中存储有算法的多个版本,所述方法包括:
步骤1)对于待执行的算法,依据算法版本的效率来选择节点适用的最优的算法版本;
步骤2)执行所述最优的算法版本。
上述方法中,所述算法版本包括普通版本,以及适用SIMT架构的算法版本或者一个或多个适用SIMD架构的算法版本,所述普通版本是适用于异构环境下各个计算机体系结构并且适用于各种类型的参与计算的数据的算法版本,步骤1)包括:
步骤11)对于待执行的算法,在节点适用的并且能够获得的算法版本中查找所述适用SIMT架构的算法版本,若找到则将所述适用SIMT架构的算法版本作为最优的算法版本,否则执行步骤12);
步骤12)在节点适用的并且能够获得的算法版本中,根据参与计算的数据确定最优的算法版本。
上述方法中,所述适用SIMD架构的算法版本和所述普通版本根据所使用的指令集一次处理的数据位数区分不同的优先级,相同优先级对应的算法版本所使用的指令集一次处理的数据位数相同,并且优先级越高,对应的算法版本所使用的指令集一次处理的数据位数越多;其中每个适用SIMD架构的算法版本进一步划分为子类别为对齐的对齐版本以及子类别为非对齐的非对齐版本;步骤12)包括:
步骤121)根据参与计算的数据中的一个或者多个数据确定优先级;
步骤122)如果所确定的优先级对应的算法版本为普通版本,则将所述普通版本作为最优的算法版本并且跳过步骤123)-125),否则,所确定的优先级对应的算法版本为适用SIMD架构的算法版本并且执行步骤123);步骤123)根据所述参与计算的数据中的一个或者多个数据确定子类别是对齐还是非对齐;
步骤124)根据所确定的优先级、所确定的子类别以及所述参与计算的数据中的一个或多个数据的类型确定待定的算法版本;
步骤125)在节点适用的并且能够获得的算法版本中查找所述待定的算法版本,若找到则将所述待定的算法版本作为最优的算法版本,否则
当所确定的子类别为对齐时,将所确定的子类别更新为非对齐并且返回步骤124);
当所确定的子类别为非对齐时,将所确定的优先级降低一级并且返回步骤122)。
上述方法中,根据参与计算的数据中的一个数据确定优先级包括:按照优先级从高到低的顺序找到第一个与所述数据的主维对齐位数匹配的优先级;其中,所述数据的主维对齐位数是将所述数据的主维长度与所述数据的类型大小相乘得到的,与所述数据的主维对齐位数匹配的优先级指的是该优先级对应的算法版本所使用的指令集一次处理的数据位数整除所述主维对齐位数。
上述方法中,根据参与计算的数据中的多个数据确定优先级包括:对于所述参与计算的数据中的多个数据中的每一个数据,按照优先级从高到低的顺序找到第一个与该数据的主维对齐位数匹配的优先级,从而得到与所述参与计算的数据中的多个数据中的每一个数据对应的优先级;从与所述参与计算的数据中的多个数据中的每一个数据对应的优先级中,选择最低的优先级。
上述方法中,根据所述参与计算的数据中的一个数据确定子类别是对齐还是非对齐包括:如果所述数据的首地址被所确定的优先级对应的算法版本所使用的指令集一次处理的数据位数整除,则将子类别确定为对齐,否则确定为非对齐。
上述方法中,根据所述参与计算的数据中的多个数据确定子类别是对齐还是非对齐包括:如果所述多个数据中的每一个数据的首地址都被所确定的优先级对应的算法版本所使用的指令集一次处理的数据位数整除,则将子类别确定为对齐,否则确定为非对齐。
上述方法中,步骤1)包括:获得算法的多个版本,所述多个版本包括普通版本,并且包括适用SIMT架构的算法版本或者一个或多个适用SIMD架构的算法版本;其中,每个适用SIMD架构的算法版本还进一步划分为子类别为对齐的对齐版本以及子类别为非对齐的非对齐版本;根据节点的计算机体系结构特征选择得到节点适用的算法版本;对于待执行的算法,依据算法版本的效率来选择节点适用的最优的算法版本。
上述方法中,还根据参与计算的数据的类型或主维对所述每个适用SIMD架构的算法版本进行进一步的划分。
本发明具有如下的有益效果:
1.结合计算机体系结构特征和参与计算的数据特征对算法进行自动调优,无需用户干预,为用户提供了便利;用户可以使用针对不同计算机体系结构的算法的不同版本,提高了算法在异构环境下的性能。
2.需要执行算法的用户无需知道该算法的每个版本(本发明通过将经过抽象的简洁接口开放给用户,使得底层针对不同计算机体系结构的算法实现对用户透明),因此降低了用户编程的复杂度,并且降低了用户使用异构集群的门槛。
附图说明
将通过参考附图对示例性实施例进行详细描述,附图意在描绘示例性实施例而不应被解释为对权利要求的预期范围加以限制。除非明确指出,否则附图不被认为依比例绘制。
图1是根据本发明一个实施例的针对异构计算机体系结构的算法自动调优方法的流程图;
图2示例性地示出SpMV算法接口的封装示意图;
图3是采用本发明提供的针对异构计算机体系结构的算法自动调优方法进行算法自动调优的运行时间与加速比,以及未使用算法自动调优的运行时间的示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图通过具体实施例对本发明进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
异构环境下的每个节点的体系结构都有可能不同,出于篇幅的考虑,本发明不对目前所有的计算机体系结构进行穷举,仅以当前常见的含有GPU的计算机体系结构、含有Intel MIC的计算机体系结构、支持SSE的计算机体系结构以及支持AVX的计算机体系结构为例来描述本发明的实施例。其中,含有GPU的计算机体系结构属于SIMT架构,其支持SIMT(单指令多线程)技术;另外几种体系结构属于SIMD架构,其支持SIMD(单指令多数据)技术。
根据本发明的一个实施例,提供一种针对异构计算机体系结构的算法自动调优方法,该方法包括预处理阶段和运行阶段。在预处理阶段,异构环境下的节点获得适用于本节点的算法的多个版本;在运行阶段,当用户要执行算法时,节点结合本节点的体系结构特征以及参与计算的数据特征(依据算法版本的效率)自动选择最优的算法版本来执行。下面参照图1对该方法展开描述。
预处理阶段
在本阶段,异构环境下的一个或多个节点获得适用于本节点的算法的多个版本,包括如下的子步骤:
步骤11.用户编写算法(如SpMV算法或GEMM算法等)的普通版本(Plain版本)并针对不同的计算机体系结构对该算法进行优化,从而得到该算法的、适用不同的计算机体系结构的优化版本。其中,普通版本指的是未经优化的算法版本,其适用于异构环境下的各个计算机体系结构并且对参与计算的数据的类型和对齐情况没有特定要求,用于确保当算法所有的优化版本都不可用时程序仍能继续执行。优化版本可以根据其适用的计算机体系结构分为GPU版本、MIC版本、AVX版本和SSE版本,分别适用于包含GPU的计算机体系结构、包含Intel MIC的计算机体系结构、支持AVX指令集的计算机体系结构以及支持SSE的计算机体系结构。这些优化版本的逻辑实质上相同,而语句有所区别。
算法的各个版本根据其适用的计算机体系结构划分优先级,其中适用SIMT架构的算法版本(如GPU版本)的优先级最高(应理解,适用SIMT架构的算法版本对参与计算的数据的对齐情况没有要求,并且对参与计算的数据的类型也没有要求),其次是适用SIMD架构的算法版本,而普通版本的优先级最低(如上文所述,普通版本对参与计算的数据的对齐情况和类型也没有要求)。在适用SIMD架构的多个算法版本(如MIC版本、AVX版本和SSE版本)中,算法版本的优先级与算法版本使用的指令集一次可以处理的数据位数有关,指令集一次可以处理的数据位数越高,相应的算法版本的优先级也越高,相同优先级对应的算法版本所使用的指令集一次可以处理的数据位数也相同。表1示出了GPU版本、MIC版本、AVX版本、SSE版本和Plain版本的优先级,并且示出了MIC版本、AVX版本、SSE版本和Plain版本使用的指令集一次能够处理的数据位数(简称为数据对齐位数)。如表1所示,支持SIMT技术的GPU版本的优先级最高,其次根据数据对齐位数,优先级从高到低分别为MIC版本(其使用的指令集一次可以处理的数据位数为512)、AVX版本(其使用的指令集一次可以处理的数据位数为256)和SSE版本(其使用的指令集一次可以处理的数据位数为128),Plain版本的优先级最低(Plain版本使用的指令集一次可以处理的数据位数为1,因此其能够适用于各种计算机体系结构)。对于适用SIMD架构的算法版本以及Plain版本来说,MIC版本要求一个或多个参与计算的数据的主维(即主要维度,LAD)对齐位数能够被512整除,AVX版本要求一个或多个参与计算的数据的主维对齐位数能够被256整除,SSE版本要求一个或多个参与计算的数据的主维对齐位数能够被128整除并且Plain版本仅要求一个或多个参与计算的数据的主维对齐位数能够被1整除,其中,参与计算的数据的主维对齐位数是将该参与计算的数据的主维长度与该参与计算的数据的类型大小相乘得到的。上述的这种优先级排序体现了用户编写的各个算法版本所适用的计算机体系结构的计算能力,优先级越高,对应的计算能力也越高;并且优先级越高,对应的算法版本的效率也越高。
表1
根据本发明的一个实施例,对于适用SIMD架构的算法版本,如MIC版本、AVX版本和SSE版本,还可以进一步划分子类别。例如,MIC版本可以进一步划分为MIC版本的对齐版本和MIC版本的非对齐版本,另外也可以对AVX版本和SSE版本进行这样的划分。其中,算法版本的对齐版本适用于以下情况——即一个或多个参与计算的数据的首地址能够被该算法版本使用的指令集一次可以处理的数据位数整除(例如,MIC版本的对齐版本适用于一个或多个参与计算的数据的首地址能够被512整除),如果不能整除,则适用该算法版本的非对齐版本。应理解,算法版本的对齐版本的性能(如效率)要好于对应的非对齐版本。由于(在运行阶段)用户输入的参与计算的数据的类型可能不是固定的,例如输入的数据可能是双精度浮点型、单精度浮点型等等,因此根据本发明的一个实施例,在编写算法版本时,可以按参与计算的数据的类型来进一步划分算法版本。例如,以SpMV算法的MIC版本的对齐版本为例,如果其中一个或多个参与计算的数据的类型是单精度浮点型,则对应有一个算法版本,如果其中一个或多个参与计算的数据的类型是双精度浮点型,则对应另一个算法版本。另外,由于(在运行阶段)用户输入的参与计算的数据的主维可能不是固定的,因此,可以按参与计算的数据的主维来进一步划分算法版本。以参与计算的数据的类型是双精度浮点型的SpMV算法的MIC版本的对齐版本为例,其中一个参与计算的数据为二维数组,如果主维是列,则对应一个算法版本;如果主维是行,则对应另一个算法版本。
步骤12.用户向异构环境下的一个或多个节点输入所编写的算法版本,每个算法版本对应一个文件。文件的扩展名遵循常规标准,例如,普通版本、SSE版本、AVX版本以及MIC版本对应的文件通常采用.c的扩展名,而GPU版本对应的文件通常采用.cu的扩展名。根据本发明的一个实施例,文件的命名规则如下所示:
其中,算法名称_体系结构标识_子类别_参数1的数据类型_参数1的主维_参数2的数据类型_参数2的主维…也是算法版本的函数名,括号内的省略号代表该函数的参数(这里的参数对应的是参与计算的数据)。可见,上述文件名/函数名可以唯一地标识算法版本。本领域技术人员应理解,由于适用SIMT架构的算法版本(如GPU版本)和Plain版本没有子类别并且对参与计算的数据的类型和主维不做要求,因此可以省略子类别、参数的数据类型和主维。表2示出了体系结构标识、子类别、参数的数据类型、参数的主维以及文件扩展名的一些选项,如表2所示,算法名称表示对应哪种算法(如SpMV、GEMM等);体系结构标识表示算法版本适用哪种计算机体系结构,该标识例如可以是sse,用于表示适用支持SSE的计算机体系结构的算法版本(即SSE版本);子类别为对齐a和非对齐u;参数的数据类型可以是s(单精度浮点类型)、d(双精度浮点类型)、c(单精度复数类型)以及z(双精度复数类型)等,参数的主维可以是ro(行)以及co(列)等(应理解,参与计算的数据也可能具有更高的维度,在这种情况下,主维并非以行列来表示,而是可以用数字或者其他预先约定的字母来表示)。在文件名/函数名中,用户可以列出所有参与计算的数据的类型以及相应的主维,用户也可以选择性地列出其中的一个或多个参与计算的数据的类型(如省略掉标量)和相应的主维,这样可以使后面运行阶段的处理更为简便。对于维度为1的数据,用户也可以在文件名/函数名中省略其主维。举例而言,用户向异构环境下的一个或多个节点输入SpMV算法的SSE版本的对齐版本,其中三个参与计算的数据的类型均为双精度浮点类型,并且(三个参与计算的数据中的)一个二维矩阵的主维是列,则该算法版本对应的文件名为spmv_sse_a__d_co_d__d(double alpha,sparsemat*mat,double*x,double beta,double*y).c。该文件名中省略了标量(alpha、beta),即该参数的数据类型位置处置空。如果用户向异构环境下的一个或多个节点输入SpMV算法的GPU版本,则该算法对应的文件名可以是spmv_gpu(doublealpha,sparsemat*mat,double*x,double beta,double*y).c。
表2
步骤13.异构环境下的节点选择适用于本节点的算法版本
在本步骤中,异构环境下的一个或多个节点接收用户输入的算法的多个版本对应的多个文件并且解析接收到的文件。其中,节点根据算法版本对应的文件名(或者其函数名)生成定义键结构的代码,其中键结构包括算法名称、体系结构标识、子类别、参数的数据类型以及主维字段。例如,根据算法版本的文件名spmv_sse_a__d_co_d__d(double alpha,sparsemat*mat,double*x,double beta,double*y).c得到的键结构可以表示为{name:spmv,arc:sse,align:a,mat:d,lda:co,x:d,y:d},可将该键结构对应的值设置为指向一个算法版本,该算法版本即——三个参与计算的数据(mat、x、y)的类型均为double型并且其中的二维矩阵(mat)主维为列的SpMV算法的SSE版本的对齐版本。
接着,节点收集本节点的计算机体系结构特征。具体地,包括检测CPU型号和架构等信息,以获得当前支持的SIMD信息(例如,确定是否支持SSE、AVX等),节点还检测当前的IO信息以判断是否包含GPU和Intel MIC。
随后,节点根据收集到的计算机体系结构特征,从用户输入的算法版本中选择并存储适用于本节点的算法版本。举例而言,对于支持SSE的计算机体系结构,节点可以选择并存储算法的SSE版本(例如,包括参与计算的数据为double型且主维为列的SSE版本的对齐版本,参与计算的数据为double型且主维为列的SSE版本的非对齐版本,参与计算的数据为double型且主维为行的SSE版本的对齐版本等等)以及Plain版本。节点还将适用于本节点的算法版本的键值对(即上文描述的键结构和对应的值)写入算法版本注册表。
运行阶段
在本阶段,当用户要执行算法时,节点以算法版本的效率为依据确定并且执行算法的最优版本。其中,如果节点具有该算法的GPU版本则将该GPU版本作为最优版本,否则根据用户输入的参与计算的数据的对齐特征和类型来确定算法的最优版本。本阶段包括如下子步骤:
步骤14.用户指示其想要在异构环境下的节点上执行的算法(如SpMV算法),同时向该节点输入参与计算的数据以及参与计算的数据中一个或多个数据的主维。如果用户指定了具体的算法版本,则节点在算法版本注册表中查找本节点是否存在用户指定的具体算法版本(例如,查找算法版本注册表中的键,如找到对应的键,则该键对应的值指向具体的算法版本),如果找到则将用户指定的算法版本作为最优版本(或称最优的算法版本或算法的最优版本),并且执行步骤19;否则执行下一步。
步骤15.对于用户指示的要执行的算法,节点在其算法版本注册表中查找本节点是否存在该算法的GPU版本,如果找到则将该GPU版本作为最优版本并且执行步骤19;否则执行下一步(在没有GPU版本的情况下,在以下的步骤中,如果有适用SIMD架构的算法版本和Plain版本,则在适用SIMD架构的算法版本和Plain版本中查找算法的最优版本)。
步骤16.根据参与计算的数据确定算法版本的优先级。
如上文所述,算法的各个版本依据其适用的计算机体系结构划分优先级。每一优先级可以对应有一个或多个算法版本,除了GPU版本,每个优先级对应的算法版本使用的指令集一次可以处理的数据位数相同。简单而言,除了GPU版本,不同的优先级对应有不同的数据对齐位数。按数据对齐位数从高到低的顺序(即优先级从高到低的顺序)将参与计算的数据的主维对齐位数对该数据对齐位数取余,如果余数为0(即该数据对齐位数能够整除所述参与计算的数据的主维对齐位数)则将该数据对齐位数对应的优先级作为算法版本的优先级。如上文所述,参与计算的数据的主维对齐位数是该参与计算的数据的主维长度与该参与计算的数据的类型大小的乘积。例如,假设参与计算的数据是8×8的二维数组,主维是列且数据的类型是double型,则该参与计算的数据的主维长度是8,double类型的大小为64位,并且该参与计算的数据的主维对齐位数是8×64=512,根据该参与计算的数据以及参考表1,所确定的算法版本的优先级应该为4(该优先级对应有MIC版本,例如包括:参与计算的数据的类型为double且主维为列的MIC版本的对齐版本,参与计算的数据的类型为double且主维为列的MIC版本的非对齐版本等等)。
参与计算的数据可能不止一个,如上文所述,根据本发明的一个实施例,可以根据参与计算的数据中的一个或多个数据来确定算法版本的优先级。其中,如果根据参与计算的数据中的多个数据(即多个参与计算的数据)来确定优先级,则首先需要根据其中的每一个数据来确定对应的优先级,然后选择最低的优先级作为算法版本的优先级。
在本步骤中,如果所确定的优先级对应的算法版本是Plain版本,则将Plain版本作为最优版本并且执行步骤19,否则执行下一步。
步骤17.根据参与计算的数据确定算法版本的子类别。
步骤16中已经确定了算法版本的优先级,该优先级对应有一个数据对齐位数(参见表1),该数据对齐位数即该优先级对应的算法版本所使用的指令集一次可以处理的数据位数。如果参与计算的数据的首地址能够被该数据对齐位数整除,则将算法版本的子类别确定为对齐;如果不能整除则将算法版本的子类别确定为非对齐。
另外,根据步骤16中的描述,可以根据多个参与计算的数据来确定优先级,因此在本步骤中,如果所述多个参与计算的数据中的每个数据的首地址都能够被所确定的优先级对应的数据对齐位数整除,则将算法版本的子类别确定为对齐;如果其中有一个数据的首地址不能被该数据对齐位数整除,就将算法版本的子类别确定为非对齐。
步骤18.节点根据所确定的优先级、子类别以及参与计算的数据类型获得待定的算法版本。在一个实施例中,节点在算法版本注册表中查找是否存在该待定的算法版本,如果找到,则将该待定的算法版本作为最优版本并且执行步骤19;如果没有找到,并且如果所确定的子类别为对齐,则将该子类别更新为非对齐并且重复步骤18;如果所确定的子类别为非对齐,则将所确定的优先级降低一级,如果降级后的优先级对应的算法版本为Plain版本,则将Plain版本作为最优版本并且执行步骤19,否则返回步骤17。
需要注意的是,如果参与计算的数据不止一个,可以利用其中的一个或多个数据的类型来确定待定的算法版本。这些参与计算的数据可以与步骤16和17中利用到的那些参与计算的数据一样,也可以不一样。
步骤19.执行算法的最优版本。
在上文描述的实施例中,仅以GPU版本(即适用于包含GPU的计算机体系结构的算法版本)为例描述了适用SIMT架构的算法版本,然而本领域技术人员应理解,适用SIMT架构的算法版本也可以不止一个。若节点找到不止一个适用SIMT架构的算法版本(参见步骤15),则可以从中随机选择一个作为最优版本,或者根据预定规则选择一个最优版本。
在上文描述的实施例中,算法的多个版本存储在节点本地,在其他实施例中,可以将算法的各个版本存储在异构环境下的共享存储上,并且仅在节点本地保留算法版本注册表。在其他实施例中,也可以用其他索引形式代替算法版本注册表来记录本节点适用的算法版本以及该算法版本的地址。
此外,除了上文中给出的文件名的命名规则,在其他实施例中,也可以采用其他的命名规则。
上述方法可以通过硬件、软件、固件、中间件、伪代码、硬件描述语言或者它们的任意组合来实现。当以软件、固件、中间件或伪代码实施时,用来执行任务的程序代码或代码分段可以被存储在计算机可读介质中,诸如存储介质,处理器可以执行该任务。
在一个实施方式中,节点可以基于所生成的定义键结构的代码和算法版本注册表,根据模板自动地生成自动调优函数。其中,该自动调优函数的内容为算法自动调优的相关代码(自动调优函数的运行用于实现上文运行阶段中的步骤),自动调优函数名称可以为本领域技术人员应理解,用户输入的算法版本中每个算法版本对应的参数列表都是一致的,该自动调优函数的参数列表也应与每个算法版本对应的参数列表相一致。图2示例性地示出了SpMV算法接口的封装示意图,其中自动调优函数spmv_selector隐藏了SpMV算法的各个版本,如GPU版本、SSE版本、AVX版本、MIC版本和Plain版本。因此,实际使用时,用户仅需要调用SpMV_selector函数即可自动地获得最优的算法版本,而无需关注与各个计算机体系结构相关的各个算法版本。
在生成自动调优函数之后,节点根据收集得到的本节点的体系结构特征来编译所生成的代码(键结构、算法版本注册表和自动调优函数),以得到动态库。之后,用户可以通过链接该动态库来调用自动调优函数(即调用spmv_selector函数),以实现算法的自动调优。
为验证本发明提供的针对异构计算机体系结构的算法自动调优方法的性能,发明人以SpMV算法为例进行了试验。图3示出了使用本发明提供的算法自动调优技术和未使用算法自动调优技术的算法运行时间和加速比的结果示意图,其中横坐标用于表示不同的矩阵,纵坐标分别表示运行时间和加速比。从图3可见,本发明提供的算法自动调优方法为算法的运行带来了平均1.84的加速并且运行时间较短,这表明SpMV算法在异构环境下的性能较好。
应注意到一些示例性方法被描绘为流程图。虽然流程图将操作表述为顺序执行,但可以理解的是,许多操作可以并行、同时或同步地执行。另外,可以重新排列操作的顺序。处理可以在操作完成时终止,但是也可以具有并未包括在图中或实施例中的另外的步骤。
应理解,软件实现的示例性实施例通常在一些形式的程序存储介质上进行编码或者在一些类型的传输介质上实现。程序存储介质可以是任意的非瞬态存储介质,诸如磁盘(例如,软盘或硬盘)或光盘(例如,紧凑盘只读存储器或“CD ROM”),并且可以是只读的或者随机访问的。类似地,传输介质可以是双绞线、同轴线缆、光纤,或者本领域已知的一些其它适用的传输介质。
虽然本发明已经通过优选实施例进行了描述,然而本发明并非局限于这里所描述的实施例,在不脱离本发明范围的情况下还包括所做出的各种改变以及变化。
Claims (10)
1.一种针对异构计算机体系结构的算法自动调优方法,其中所述异构计算机体系结构中存储有算法的多个算法版本,所述方法包括:
步骤1)对于待执行的算法,依据算法版本的效率来选择节点适用的最优的算法版本;其中,若存在节点适用的并且能够获得的适用SIMT架构的算法版本则将所述适用SIMT架构的算法版本作为最优的算法版本,否则在节点适用的并且能够获得的算法版本中根据参与计算的数据确定最优的算法版本;
步骤2)执行所述最优的算法版本。
2.根据权利要求1所述的方法,其中所述算法版本包括普通版本,以及适用SIMT架构的算法版本或者一个或多个适用SIMD架构的算法版本,所述普通版本是适用于异构环境下各个计算机体系结构并且适用于各种类型的参与计算的数据的算法版本,步骤1)包括:
步骤11)对于待执行的算法,在节点适用的并且能够获得的算法版本中查找所述适用SIMT架构的算法版本,若找到则将所述适用SIMT架构的算法版本作为最优的算法版本,否则执行步骤12);
步骤12)在节点适用的并且能够获得的算法版本中,根据参与计算的数据确定最优的算法版本。
3.根据权利要求2所述的方法,其中所述适用SIMD架构的算法版本和所述普通版本根据所使用的指令集一次处理的数据位数区分不同的优先级,相同优先级对应的算法版本所使用的指令集一次处理的数据位数相同,并且优先级越高,对应的算法版本所使用的指令集一次处理的数据位数越多;其中每个适用SIMD架构的算法版本进一步划分为子类别为对齐的对齐版本以及子类别为非对齐的非对齐版本,算法版本的对齐版本适用于参与计算的数据的首地址能够被该算法版本使用的指令集一次处理的数据位数整除,算法版本的非对齐版本适用于参与计算的数据的首地址不能被该算法版本使用的指令集一次处理的数据位数整除;步骤12)包括:
步骤121)根据参与计算的数据中的一个或者多个数据确定优先级;
步骤122)如果所确定的优先级对应的算法版本为普通版本,则将所述普通版本作为最优的算法版本并且跳过步骤123)-125),否则,所确定的优先级对应的算法版本为适用SIMD架构的算法版本并且执行步骤123);
步骤123)根据所述参与计算的数据中的一个或者多个数据确定子类别是对齐还是非对齐;
步骤124)根据所确定的优先级、所确定的子类别以及所述参与计算的数据中的一个或多个数据的类型确定待定的算法版本;
步骤125)在节点适用的并且能够获得的算法版本中查找所述待定的算法版本,若找到则将所述待定的算法版本作为最优的算法版本,否则
当所确定的子类别为对齐时,将所确定的子类别更新为非对齐并且返回步骤124);
当所确定的子类别为非对齐时,将所确定的优先级降低一级并且返回步骤122)。
4.根据权利要求3所述的方法,其中,根据参与计算的数据中的一个数据确定优先级包括:
按照优先级从高到低的顺序找到第一个与所述数据的主维对齐位数匹配的优先级;其中,所述数据的主维对齐位数是将所述数据的主维长度与所述数据的类型大小相乘得到的,与所述数据的主维对齐位数匹配的优先级指的是该优先级对应的算法版本所使用的指令集一次处理的数据位数整除所述主维对齐位数。
5.根据权利要求4所述的方法,其中,根据参与计算的数据中的多个数据确定优先级包括:
对于所述参与计算的数据中的多个数据中的每一个数据,按照优先级从高到低的顺序找到第一个与该数据的主维对齐位数匹配的优先级,从而得到与所述参与计算的数据中的多个数据中的每一个数据对应的优先级;
从与所述参与计算的数据中的多个数据中的每一个数据对应的优先级中,选择最低的优先级。
6.根据权利要求3-5中任一项所述的方法,其中,根据所述参与计算的数据中的一个数据确定子类别是对齐还是非对齐包括:
如果所述数据的首地址被所确定的优先级对应的算法版本所使用的指令集一次处理的数据位数整除,则将子类别确定为对齐,否则确定为非对齐。
7.根据权利要求6所述的方法,其中,根据所述参与计算的数据中的多个数据确定子类别是对齐还是非对齐包括:
如果所述多个数据中的每一个数据的首地址都被所确定的优先级对应的算法版本所使用的指令集一次处理的数据位数整除,则将子类别确定为对齐,否则确定为非对齐。
8.根据权利要求1所述的方法,其中,步骤1)包括:
获得算法的多个算法版本,所述多个算法版本包括普通版本,并且包括适用SIMT架构的算法版本或者一个或多个适用SIMD架构的算法版本;其中,每个适用SIMD架构的算法版本还进一步划分为子类别为对齐的对齐版本以及子类别为非对齐的非对齐版本,算法版本的对齐版本适用于参与计算的数据的首地址能够被该算法版本使用的指令集一次处理的数据位数整除,算法版本的非对齐版本适用于参与计算的数据的首地址不能被该算法版本使用的指令集一次处理的数据位数整除;
根据节点的计算机体系结构特征选择得到节点适用的算法版本;
对于待执行的算法,依据算法版本的效率来选择节点适用的最优的算法版本。
9.根据权利要求8所述的方法,其中,还根据参与计算的数据的类型或主维对所述每个适用SIMD架构的算法版本进行进一步的划分。
10.一种计算设备,包括处理器和存储器,其中所述存储器存储有能够被所述处理器执行的指令,当所述处理器执行所述指令时,使得所述设备实现如权利要求1-9中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810632636.6A CN108920412B (zh) | 2018-06-20 | 2018-06-20 | 针对异构计算机体系结构的算法自动调优方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810632636.6A CN108920412B (zh) | 2018-06-20 | 2018-06-20 | 针对异构计算机体系结构的算法自动调优方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108920412A CN108920412A (zh) | 2018-11-30 |
CN108920412B true CN108920412B (zh) | 2020-12-29 |
Family
ID=64419435
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810632636.6A Active CN108920412B (zh) | 2018-06-20 | 2018-06-20 | 针对异构计算机体系结构的算法自动调优方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108920412B (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110428872B (zh) * | 2019-09-26 | 2020-03-10 | 深圳华大基因科技服务有限公司 | 一种基因比对指令集的转换方法及装置 |
CN111026443B (zh) * | 2019-11-18 | 2023-05-05 | 中国航空工业集团公司西安航空计算技术研究所 | 一种基于算法特征的simt系统 |
CN111586144A (zh) * | 2020-04-30 | 2020-08-25 | 中科院计算所西部高等技术研究院 | 具有ooda分形机制的计算机群构建方法 |
CN114491404B (zh) * | 2022-01-28 | 2022-12-06 | 北京理工大学 | 应用于计算设备的混合精度SpMV优化系统及方法 |
CN116383803B (zh) * | 2023-03-14 | 2024-07-19 | 成都海泰方圆科技有限公司 | 数据处理方法、装置、计算机设备和存储介质 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102609393A (zh) * | 2012-02-08 | 2012-07-25 | 浪潮(北京)电子信息产业有限公司 | 一种线性方程组的数据处理方法及装置 |
EP2483787A1 (en) * | 2009-09-28 | 2012-08-08 | Nvidia Corporation | Efficient predicated execution for parallel processors |
CN103164839A (zh) * | 2013-03-07 | 2013-06-19 | 华为技术有限公司 | 一种绘图方法、装置及终端 |
CN103279327A (zh) * | 2013-04-28 | 2013-09-04 | 中国人民解放军信息工程大学 | 面向异构simd扩展部件的自动向量化方法 |
CN104536938A (zh) * | 2015-01-27 | 2015-04-22 | 浪潮(北京)电子信息产业有限公司 | 一种地震叠前时间偏移的计算方法及系统 |
CN104536937A (zh) * | 2014-12-30 | 2015-04-22 | 深圳先进技术研究院 | 基于cpu-gpu异构集群的大数据一体机实现方法 |
-
2018
- 2018-06-20 CN CN201810632636.6A patent/CN108920412B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP2483787A1 (en) * | 2009-09-28 | 2012-08-08 | Nvidia Corporation | Efficient predicated execution for parallel processors |
CN102609393A (zh) * | 2012-02-08 | 2012-07-25 | 浪潮(北京)电子信息产业有限公司 | 一种线性方程组的数据处理方法及装置 |
CN103164839A (zh) * | 2013-03-07 | 2013-06-19 | 华为技术有限公司 | 一种绘图方法、装置及终端 |
CN103279327A (zh) * | 2013-04-28 | 2013-09-04 | 中国人民解放军信息工程大学 | 面向异构simd扩展部件的自动向量化方法 |
CN104536937A (zh) * | 2014-12-30 | 2015-04-22 | 深圳先进技术研究院 | 基于cpu-gpu异构集群的大数据一体机实现方法 |
CN104536938A (zh) * | 2015-01-27 | 2015-04-22 | 浪潮(北京)电子信息产业有限公司 | 一种地震叠前时间偏移的计算方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN108920412A (zh) | 2018-11-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108920412B (zh) | 针对异构计算机体系结构的算法自动调优方法 | |
US20180157711A1 (en) | Method and apparatus for processing query based on heterogeneous computing device | |
JP5950285B2 (ja) | 予め決められた複数のビット幅のデータに対して操作を行う命令を使用してツリーの検索を行うための方法、並びに、当該命令を使用してツリーの検索を行うためのコンピュータ及びそのコンピュータ・プログラム | |
EP3432157B1 (en) | Data table joining mode processing method and apparatus | |
JP6432450B2 (ja) | 並列計算装置、コンパイル装置、並列処理方法、コンパイル方法、並列処理プログラムおよびコンパイルプログラム | |
US20180300146A1 (en) | Database operating method and apparatus | |
Lambert et al. | rFSA: an R package for finding best subsets and interactions | |
CN114420215B (zh) | 基于生成树的大规模生物数据聚类方法及系统 | |
CN111858651A (zh) | 一种数据处理方法以及数据处理装置 | |
Yabuta et al. | Relational joins on gpus: A closer look | |
Ekanayake et al. | Dryadlinq for scientific analyses | |
US11226798B2 (en) | Information processing device and information processing method | |
CN111292805A (zh) | 一种三代测序数据重叠检测方法及系统 | |
Jørgensen et al. | GPU-FAST-PROCLUS: a fast GPU-parallelized approach to projected clustering | |
Xin et al. | Fast sparse deep neural network inference with flexible spmm optimization space exploration | |
Almasri et al. | Parallelizing maximal clique enumeration on gpus | |
CN116089022A (zh) | 一种日志搜索引擎的参数配置调整方法、系统及存储介质 | |
Bağbaba et al. | Improving the mpi-io performance of applications with genetic algorithm based auto-tuning | |
Welton et al. | The anatomy of mr. scan: a dissection of performance of an extreme scale gpu-based clustering algorithm | |
CN110415162B (zh) | 大数据中面向异构融合处理器的自适应图划分方法 | |
CN110059378B (zh) | 一种基于GPU并行计算的自动制造系统Petri网状态生成方法 | |
CN112100446B (zh) | 搜索方法、可读存储介质和电子设备 | |
US9489246B2 (en) | Method and device for determining parallelism of tasks of a program | |
CN118502964B (zh) | 托卡马克新经典环向粘滞力矩cuda模拟实现方法 | |
US20230214375A1 (en) | Relationship analysis using vector representations of database tables |
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 |