CN105068971A - 一种向量点积的OpenCL自动化实现方法 - Google Patents
一种向量点积的OpenCL自动化实现方法 Download PDFInfo
- Publication number
- CN105068971A CN105068971A CN201510446624.0A CN201510446624A CN105068971A CN 105068971 A CN105068971 A CN 105068971A CN 201510446624 A CN201510446624 A CN 201510446624A CN 105068971 A CN105068971 A CN 105068971A
- Authority
- CN
- China
- Prior art keywords
- dot product
- opencl
- vector
- code
- implementation method
- 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
Landscapes
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
Abstract
本发明公开了一种向量点积的OpenCL自动化实现方法,适用于支持OpenCL的处理器,包括如下步骤:(一)输入OpenCL内核代码实现向量点积所需的参数信息;(二)根据所输入的参数信息生成OpenCL内核代码。本发明通过获取向量点积的数据类型、向量长度、向量内存分布位置、向量点积次数、点积参数的数据类型以及具体数值,自动生成向量点积的OpenCL内核代码,适用于向量点积的各种情况,并达到OpenCL内核自动化设计的目的。
Description
技术领域
本发明涉及向量运算技术,具体涉及一种向量点积的OpenCL自动化实现方法。
背景技术
向量点积运算是使用较为普遍的向量运算,在图像处理、工业设计等领域被广泛使用。向量点积运算的形式是行向量与列向量相乘累加,最终得到一个标量结果。向量点积的计算量较大,对计算设备的性能要求较高,不过该运算具有很强的规律性,而且数据之间没有依赖关系,并行计算成为提高向量点积性能的一种有效手段。
OpenCL是一种面向计算设备的开放运算语言,可用于并行计算的设计。OpenCL符合C99标准,并且针对并行计算的特点进行了扩展,适合于通用计算的开发。OpenCL抽象了硬件特性,提供了统一的开发接口,具有良好的可移植性。
传统的向量点积OpenCL方法仅仅从某一特定的应用需求出发,完成了一次向量点积运算的OpenCL设计,并没有充分考虑向量点积的所有特点。传统的方法使用面非常有限,一旦向量点积的需求增加,就需要重新设计。而且传统方法没有规范地设计OpenCL程序,没有充分考虑设计的性能。因此,需要针对向量点积的特点,定制一套适用的OpenCL自动化实现方法,以充分适应向量点积的各种情况、实现OpenCL内核的自动化设计和规范设计。
发明内容
发明目的:为实现多种形式向量点积OpenCL内核代码的自动化设计,本发明提供一种向量点积的OpenCL自动化实现方法。
技术方案:为了实现上述目的,本发明采用的技术方案为:
一种向量点积的OpenCL自动化实现方法,包括如下步骤:
(1)输入OpenCL内核代码实现向量点积所需的参数信息,所述参数信息包括:向量数据类型、向量长度、向量内存分布位置、点积次数、点积后处理公式、与向量内存分布相对应的点积参数类型和数值;
(2)根据所输入的参数信息生成OpenCL内核代码。
进一步地,所述步骤(2)中包括:按照向量数据类型、向量长度生成向量定义代码;按照点积参数类型和数值,生成向量点积参数定义代码;按照向量内存分布位置,生成向量加载代码;若点积次数为1,生成一个向量与点积参数之间的点积计算代码;若点积次数大于1,则生成各个向量与其对应点积参数之间的点积计算代码,并按照所输入的点积后处理公式生成各点积结果值的处理代码。
进一步地,所述向量长度的范围为1-36,所述向量内存分布位置采用坐标的形式表示,横坐标和纵坐标的数值范围为0-35,内存数量与向量长度相等。
进一步地,所述步骤(2)中在生成代码之前还包括对输入的参数信息进行校验的步骤。所述校验包括数据类型匹配校验、向量长度匹配校验、点积次数与向量内存分布位置以及点积参数组数校验。
有益效果:本发明从应用角度出发,考虑向量数据类型、向量长度、向量内存分布位置、向量点积次数、点积参数数据类型和数值等向量点积的因素,是针对向量点积应用提出的OpenCL自动化实现方法,能够达到OpenCL内核自动化设计的目的。
与传统的向量点积的OpenCL方法相比,本方法具有如下优势:
(1)充分考虑了向量点积的各种情况。向量点积运算的情况有很多种,向量的数据类型、向量长度、点积参数的数据类型、点积参数等因素在不同的向量点积场景下都不相同。本发明充分考虑可上述影响因素,针对向量点积的特点,设计了向量信息输入的步骤,较为完整地涵盖了上述影响因素,可以满足绝大多数的向量点积需求。
(2)OpenCL代码生成自动化。传统的向量点积OpenCL方法根据特定的向量点积情况进行设计,但是向量点积的情况受到很多因素的影响,需要根据需求改动OpenCL代码。本发明根据向量信息,自动生成OpenCL代码,可以适用各种向量点积的情况,辅助OpenCL设计。
(3)OpenCL代码设计规范化。本发明严格按照向量点积的步骤生成OpenCL代码,完全分离的向量数据的加载与计算,可以充分利用内核指令特点,避免了访存与计算指令的冲突。
综上所述,对于向量点积的应用,与传统的OpenCL方法相比,本发明所提出的OpenCL自动化实现方法充分考虑了向量点积的各种影响因素,可以实现代码的自动化生成,而且设计更加规范。
附图说明
图1为本发明实施例的主要流程图;
图2为本发明实施例中参数信息输入流程图;
图3为本发明实施例中向量内存分布位置示意图;
图4为本发明实施例中内核代码生成流程图。
具体实施方式
下面结合附图进一步解释本发明。
如图1所示,本发明实施例公开的一种向量点积的OpenCL自动化实现方法,主要包括:输入OpenCL内核代码实现向量点积所需的参数信息和根据所输入的参数信息生成OpenCL内核代码两大步骤。其中,所输入的参数信息包括向量数据类型、向量长度、向量内存分布位置、点积次数、点积后处理公式、与向量内存分布相对应的点积参数类型和数值。
输入信息的主要流程如图2所示,可依次输入需要进行点积运算的向量的数据类型、长度M、内存分布位置、向量点积次数N、与向量进行点积运算的点积参数数据类型和点积参数的数值。当点积次数为1时,只需输入一个向量和一组对应的点积参数,当点积次数大于1时,如2次,需要输入两个向量和两组对应的点积参数,并同时提供点积后处理公式,以便得到两个点积结果后再进一步运算从而得到最终的运算结果。
输入向量的数据类型,可以是OpenCL标准支持的所有数据类型。输入向量长度的范围为1-36。向量的内存分布位置采用坐标的形式表示,以工作项位置为基准点,基准坐标(0,0),后续输入所需数据的坐标,横、纵坐标数值范围是0-35,需要注意的是输入的内存数量需要等于向量长度。如图3所示向量内存分布位置为两行两列,基准坐标为(0,0),输入后续输入坐标(0,1)、(1,0)、(1,1),输入的内存数量为4个。向量点积次数可以是1次或2次或更多次数,如果向量点积次数为2次,两次向量点积的结果分别为Gx、Gy,需要输入点积后处理公式F(Gx,Gy),确定各次向量点积的结果之间的运算关系。向量点积需要输入与向量内存分布中的每个元素所对应的点积参数,首先输入点积参数类型,然后按照向量内存分布的坐标位置依次输入点积参数的数值,并存储在数组中。点积参数的数据类型可以是短整型、整型、单精度浮点型或双精度浮点型,四种类型可以满足绝大多数向量点积的计算需求。点积参数的组数与点积次数相同,如果向量点积次数是2,需要输入两组参数。
如示例一,实现一个长度为4的整型向量的1次点积,输入的参数可分别为:向量数据类型为整型、向量长度为4、内存分布形式为2×2如图3所示,其位置以坐标(0,0)为基准,描述为(0,1)、(1,0)、(1,1)、向量点积次数为1、点积参数为整型、点积参数为(15、25、33、20);
如示例二,实现两个长度为4的整型向量的2次点积,求取2次点积结果的积,输入的参数可分别为:向量数据类型为整型、向量长度为4、内存分布形式为2×2如图3所示,同示例一(两个向量的位置分布相同)、向量点积次数为2、点积参数为整型、两组点积参数分别为(15、25、33、20)、(35、25、15、30)、后处理公式为F(Gx,Gy)=Gx×Gy,其中Gx、Gy分别为两次向量点积的结果。
生成OpenCL内核代码的主要流程如图3所示,主要包括:确定内核参数、确定工作项、确定向量点积参数、加载向量数据、点积计算、多次向量点积之间的计算以及输出点积结果。
内核的输入参数为原数据、目标数据的指针,无需输出参数。OpenCL将基准位置映射到具体的硬件计算单元,并且对应工作项(dx,dy)。向量点积运算需要明确点积参数,根据输入的点积参数类型和数值,生成向量点积参数定义代码,并输出到内核代码中,如示例一,当整型参数为(15、25、33、20)时,生成内核代码“intpara[4]={15,20,33,20}”。当点积次数为2时,需要确定两组点积参数,例如示例二,当两组整型参数分别为(15、25、33、20)、(35、25、15、30)时,生成内核代码“intpara_1[4]={15,20,33,20};intpara_2[4]={35,25,15,30}”。读取向量的数据类型、长度和坐标位置,加载向量数据,生成相应的向量定义和向量数据加载代码,如示例一满足图3所示元素分布,四个元素的位置分别为[dx][dy]、[dx][dy+1]、[dx+1][dy]、[dx+1][dy+1],按照该位置顺序加载向量数据。
int4vec_0=src[dx][dy],vec_1=src[dx][dy+1],vec_2=src[dx+1][dy],vec_3=src[dx+1][dy+1],其中src指原数据地址。
数据的加载完成后才可以进行点积计算,如示例一,
int4result=vec_0*para[0];
result+=vec_1*para[1];
result+=vec_2*para[2];
result+=vec_3*para[3];
数据的加载与计算需要完全分离,如果相互混杂,无法充分利用内核指令特点,导致访存与计算指令的冲突。
例如示例一的访存与计算代码为:
int4vec_0=src[dx][dy];
int4result=vec_0*para[0];
int4vec_1=src[dx][dy+1];
result+=vec_1*para[1];
int4vec_2=src[dx+1][dy];
result+=vec_2*para[2];
int4vec_3=src[dx+1][dy+1];
result+=vec_3*para[3];
数据访存与计算交替进行,导致访存与计算指令的冲突,内核效率下降。
当需要进行两次向量点积计算时,需要按照点积后处理公式F(Gx,Gy)进行点积之间的计算,例如示例二,计算公式为F(Gx,Gy)=Gx×Gy,生成内核代码“F=GX*GY”。完成上述步骤后,输出点积的结果。
为了更好的生成内核代码,可对输入的参数进行校验以防生成代码过程中或代码运行过程中出错。此处可以根据我们设计的各参数之间的约束关系进行校验,主要包括:数据类型匹配校验,如向量数据类型与点积参数数据类型是否支撑运算,点积参数类型与点积参数数值是否匹配;向量长度匹配校验,如向量内存分布位置包含的内存数目与向量长度是否匹配;参数组数与点积次数匹配校验,如点积次数与向量内存分布位置组数是否匹配,如点积次数与点积参数组数是否匹配;后处理公式中参数个数匹配等等。
以上所述仅是本发明的优选实施方式,应当指出:对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
Claims (6)
1.一种向量点积的OpenCL自动化实现方法,其特征在于,包括如下步骤:
(1)输入OpenCL内核代码实现向量点积所需的参数信息,所述参数信息包括:向量数据类型、向量长度、向量内存分布位置、点积次数、点积后处理公式、与向量内存分布相对应的点积参数类型和数值;
(2)根据所输入的参数信息生成OpenCL内核代码。
2.根据权利要求1所述的向量点积的OpenCL自动化实现方法,其特征在于,所述步骤(2)中包括:按照向量数据类型、向量长度生成向量定义代码;按照点积参数类型和数值,生成向量点积参数定义代码;按照向量内存分布位置,生成向量加载代码;若点积次数为1,生成一个向量与点积参数之间的点积计算代码;若点积次数大于1,则生成各个向量与其对应点积参数之间的点积计算代码,并按照所输入的点积后处理公式生成各点积结果值的处理代码。
3.根据权利要求1所述的向量点积的OpenCL自动化实现方法,其特征在于,所述向量长度的范围为1-36,所述向量内存分布位置采用坐标的形式表示,横坐标和纵坐标的数值范围为0-35,内存数量与向量长度相等。
4.根据权利要求1所述的向量点积的OpenCL自动化实现方法,其特征在于,所述步骤(2)中在生成代码之前还包括对输入的参数信息进行校验的步骤。
5.根据权利要求4所述的向量点积的OpenCL自动化实现方法,其特征在于,所述校验包括数据类型匹配校验、向量长度匹配校验、点积次数与向量内存分布位置以及点积参数组数校验。
6.根据权利要求1所述的向量点积的OpenCL自动化实现方法,其特征在于,所述点积次数为1次或2次。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510446624.0A CN105068971B (zh) | 2015-07-27 | 2015-07-27 | 一种向量点积的OpenCL自动化实现方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510446624.0A CN105068971B (zh) | 2015-07-27 | 2015-07-27 | 一种向量点积的OpenCL自动化实现方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105068971A true CN105068971A (zh) | 2015-11-18 |
CN105068971B CN105068971B (zh) | 2018-05-15 |
Family
ID=54498347
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510446624.0A Active CN105068971B (zh) | 2015-07-27 | 2015-07-27 | 一种向量点积的OpenCL自动化实现方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105068971B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2017143502A1 (en) * | 2016-02-23 | 2017-08-31 | Intel Corporation | Optimizing structures to fit into a complete cache line |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101980182A (zh) * | 2010-10-15 | 2011-02-23 | 清华大学 | 基于矩阵运算的并行计算方法 |
US20110314442A1 (en) * | 2010-06-17 | 2011-12-22 | International Business Machines Corporation | Reducing parallelism of computer source code |
CN102902514A (zh) * | 2012-09-07 | 2013-01-30 | 西安交通大学 | 半隐式类粒子法的大规模并行处理方法 |
US20130125100A1 (en) * | 2011-11-15 | 2013-05-16 | Advanced Micro Devices, Inc. | Computer system and method for compiling program code and assigning address spaces |
CN103853835A (zh) * | 2014-03-14 | 2014-06-11 | 西安电子科技大学 | 基于gpu加速的网络社区检测方法 |
-
2015
- 2015-07-27 CN CN201510446624.0A patent/CN105068971B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20110314442A1 (en) * | 2010-06-17 | 2011-12-22 | International Business Machines Corporation | Reducing parallelism of computer source code |
CN101980182A (zh) * | 2010-10-15 | 2011-02-23 | 清华大学 | 基于矩阵运算的并行计算方法 |
US20130125100A1 (en) * | 2011-11-15 | 2013-05-16 | Advanced Micro Devices, Inc. | Computer system and method for compiling program code and assigning address spaces |
CN102902514A (zh) * | 2012-09-07 | 2013-01-30 | 西安交通大学 | 半隐式类粒子法的大规模并行处理方法 |
CN103853835A (zh) * | 2014-03-14 | 2014-06-11 | 西安电子科技大学 | 基于gpu加速的网络社区检测方法 |
Non-Patent Citations (4)
Title |
---|
YAN LI,ET AL.: "《Automatic FFT Performance Tuning on OpenCL GPUs》", 《IEEE 17TH INTERNATIONAL CONFERENCE ON PARALLEL AND DISTRIBUTED SYSTEMS》 * |
卢风顺: "《面向CPU/GPU异构体系结构的并行计算关键技术研究》", 《中国博士学位论文全文数据库 信息科技辑》 * |
朱彤: "《基于GPU的TOUGHREACT并行化实现》", 《中国优秀硕士学位论文全文数据库 信息科技辑》 * |
李焱,等: "《异构平台上性能自适应FFT框架》", 《计算机研究与发展》 * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2017143502A1 (en) * | 2016-02-23 | 2017-08-31 | Intel Corporation | Optimizing structures to fit into a complete cache line |
US10761819B2 (en) | 2016-02-23 | 2020-09-01 | Intel Corporation | Optimizing structures to fit into a complete cache line |
Also Published As
Publication number | Publication date |
---|---|
CN105068971B (zh) | 2018-05-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP6977239B2 (ja) | 行列乗算器 | |
Gorenstin et al. | Stochastic optimization of a hydro-thermal system including network constraints | |
Klawonn et al. | Toward extremely scalable nonlinear domain decomposition methods for elliptic partial differential equations | |
CN103970720B (zh) | 基于大规模粗粒度嵌入式可重构系统及其处理方法 | |
Huang et al. | Predictive dynamic simulation for large-scale power systems through high-performance computing | |
SA517380878B1 (ar) | أنظمة وطرق ووسط كمبيوتر لتحسين محاكاة خزان هيدروكربون | |
US20160327936A1 (en) | Global optimal solution for a practical system modeled as a general constrained nonlinear optimization problem | |
CN102222285B (zh) | 多维度数据联动计算装置和多维度数据联动计算方法 | |
CN103473120A (zh) | 一种基于加速因子的多核实时系统任务划分方法 | |
US20240119114A1 (en) | Matrix Multiplier and Matrix Multiplier Control Method | |
CN109933574A (zh) | 一种唯一键生成方法、装置及终端设备 | |
CN108848125A (zh) | 区块链中提供共识服务的方法和装置及存储介质 | |
CN103942253A (zh) | 一种负载均衡的空间数据处理方法和系统 | |
CN104102549A (zh) | 一种实现多线程互斥操作的方法、装置和芯片 | |
CN104408019A (zh) | 一种基于mic平台实现gmres算法并行加速的方法 | |
Kawakami et al. | Toward a classification of four-dimensional Painlevé-type equations | |
CN109800857A (zh) | 一种空洞卷积加速系统及其方法 | |
CN105068971A (zh) | 一种向量点积的OpenCL自动化实现方法 | |
CN110175808A (zh) | 一种订单管理、查询方法、装置、设备及介质 | |
Wallach et al. | Parallel solutions of load flow problems | |
Daisaka et al. | Application of GRAPE9-MPX for high precision calculation in particle physics and performance results | |
Garcia et al. | GPU-accelerated Poincaré map method for harmonic-oriented analyses of power systems | |
Dixon et al. | Accelerating Value‐at‐Risk estimation on highly parallel architectures | |
Ingole et al. | Instruction set design for elementary set in tensilica xtensa | |
CN108322759A (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |