CN110673877B - 一种基于手动向量化的并行计算方法 - Google Patents

一种基于手动向量化的并行计算方法 Download PDF

Info

Publication number
CN110673877B
CN110673877B CN201910780790.2A CN201910780790A CN110673877B CN 110673877 B CN110673877 B CN 110673877B CN 201910780790 A CN201910780790 A CN 201910780790A CN 110673877 B CN110673877 B CN 110673877B
Authority
CN
China
Prior art keywords
functions
program
function
hot spot
vectorization
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
Application number
CN201910780790.2A
Other languages
English (en)
Other versions
CN110673877A (zh
Inventor
杨昊
唐旭东
吴济良
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Chengdu University of Information Technology
Original Assignee
Chengdu University of Information Technology
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Chengdu University of Information Technology filed Critical Chengdu University of Information Technology
Priority to CN201910780790.2A priority Critical patent/CN110673877B/zh
Publication of CN110673877A publication Critical patent/CN110673877A/zh
Application granted granted Critical
Publication of CN110673877B publication Critical patent/CN110673877B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

本发明涉及一种基于手动向量化的并行计算方法,方法包括分析程序中的热点部分,并记录热点部分数组元素字长;根据任务精度要求,对热点部分的数组进行対界操作;对热点程序中核心函数中的不同精度的函数进行合并,对核心函数调用的函数进行降精度处理,将标准数学库函数改写成自定义数学库函数;对热点程序中的变量和自定义数学库函数进行手动向量化。通过对函数进行降精度,对变量、数组和函数进行手动向量化,使得基本数学函数也能一次指令对多个数据进行运算,大大提高了运算效率。

Description

一种基于手动向量化的并行计算方法
技术领域
本发明涉及高性能计算领域,尤其涉及一种基于手动向量化的并行计算方法。
背景技术
并行计算中的向量化的方法目前一般以优化循环结构为主,循环体中有复杂的关键字、操作、数据访问和内存操作等,都会影响对程序的相关性分析和向量化分析,从而不利于用户或编译器对程序进行向量化。例如,在if-else或switch-case等结构中一般优化效果不好。且程序中一般含有大量函数调用,一般只能在最内层函数做相关性分析后进行手动向量化,在改变程序相关性后,可将函数内的变量替换、操作替换,数组扩展等优化方法使函数展开或合并的方式进行优化。以上所有操作执行之前都需要进行向量对界操作,并人工确认算法正确性之后,才能进行SIMD扩展操作。
现有技术方案有:
方案1:对for循环结构中的变量替换方式进行手动向量化,一般将循环展开成向量寄存器的倍数进行优化。该方案可有效优化循环结构中的计算部分,但如果循环中有函数调用则实现起来比较复杂。
方案2:操作替换的方式进行手动向量化。虽然能解决更多的循环结构优化问题,可以减少一些不必要的重复计算,但对于有if-else结构出现或switch-case结构出现的情况依然性能提升不明显,方案1的问题不能得到根本解决。
方案3:对静态数组扩展进行手动向量化。静态数组可以很方便的进行SIMD扩展,而实际程序中有大量动态数组,和函数调用,不能有效解决动态数组问题,因对界操作难以进行。
方案4:将所调用函数展开或合并之后,在更外层使用SIMD扩展技术(即手动向量化)。该技术方案存在工作量太大,展开函数调用本就与最初程序编写人员本意相悖,且展开后难免还会有函数调用。因此此种方案难以有一个确定的标准,即函数展开到什么程度,才能得到有效的性能提升。
方案5:基于SW26010芯片的SW编译器自动向量化。关于自动向量化是一个发展方向,基于SW编译器的自动向量化,目前只能优化简单循环数组计算。程序中若有迭代计算则编译器将直接跳过,自动向量化目前效果不佳。
综上所述,现有技术普遍存在计算量大、算法实现复杂、性能不理想的问题。
发明内容
针对现有技术之不足,一种基于手动向量化的并行计算方法,所述方法包括:
步骤1:运用分析工具分析程序的热点程序,分析工具包括Intel平台的Vtune工具或神威·太湖之光系统中的Gprof工具,并记录热点程序中所有数组元素字长;
步骤2:根据任务精度要求,采用降精度或扩大精度的方式对热点程序中的数组进行对界操作,便于后续进行向量化优化;
步骤3:找到热点程序中核心函数调用的位置,若程序中有按宏条件处理不同函数,则在不影响性能的情况下先合并不同精度函数,简化后续向量化操作,然后在各个宏之下对各个函数分别进行向量扩展;
步骤4:将热点程序中的核心函数所调用的标准数学库函数中的库函数进行降精度处理,将其改写成步骤2调整后的精度的自定义数学函数,改写后的全部自定义数学函数构成自定义数学库函数,并将热点程序中的核心函数所调用的数学标准库函数替换为自定义数学库函数;
步骤5:使用SWCC编译器提供的SIMD扩展接口对热点程序部分的变量根据需要进行全局手动向量化或部分手动向量化,用于将多个变量封装成向量并使用SIMD接口对向量进行原来变量的运算;
步骤6:对步骤4改写的所述自定义数学库函数运用SWCC编译器的SIMD扩展接口进行手动向量化,封装变量成向量扩展每次运算的数据长度,并将数学库函数中需要用到的常数扩展为向量长度以対界。
本发明的有益效果在于:
1、利用SIMD技术加速串行程序的性能。
2、通过对热点程序中核心函数调用的标准数学库函数进行降精度处理,在保证性能的前提下,改写成较低精度的自定义数学函数,减少了计算量,提高了运算性能。
3、对热点程序中的变量和自定义数学库函数进行手动向量化,单次指令完成多个数据的计算,有效提升计算效率。
附图说明
图1是本发明方法的流程图;
图2是扩展一般变量为向量;
图3是基础数学函数降精度处理;
图4是定义自定义函数接口,并传入向量参数;
图5是对exp()标准库函数进行手动向量化示例;和
图6是采用本发明技术方案优化前后的效果对比。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚明了,下面结合具体实施方式并参照附图,对本发明进一步详细说明。应该理解,这些描述只是示例性的,而并非要限制本发明的范围。此外,在以下说明中,省略了对公知结构和技术的描述,以避免不必要地混淆本发明的概念。
下面结合附图进行详细说明。
本发明中的AOS数据指;数组结构体。
本发明中的SOA数据指:结构体数组。
本发明中的対界操作指:向量化操作限制,需统一等式两边的数据类型或字长,否则无法计算。
自定义数学函数:并非特定哪个,而是基础数学函数exp(),sqrt(),sin(),log()等数值计算函数进行手动向量化后的统称,也可成为“向量化数学函数”。
本发明中的手动向量化指的是:手动SIMD向量化,也就是单次指令完成多个数据的运算。一次运算的运算符左边和右边所使用的变量不再是单个变量,而是4个或8个相同数据类型长度的变量,这些变量可称为向量,包含4个或8个相同数据类型的不同数据,一次运算同时得到4个或8个数据结果。
举例来说比如SWCC编译器中封装接口的运用,simd_add(var1, var2)向量加法操作,所谓扩展也就是将多个单独存在的变量封装到一个向量寄存器中,如图2所示,var1的定义可以是floatv4 var1;var1就是一个可存放4个float数据的向量寄存器,floatv4是神威编译器提供的向量寄存器,图1下方的中的varia1,varia2,varia3,varia4四个变量封装到一个向量var1,同理,var2也是向量寄存器;simd_add(var1, var2)一条指令就可完成8个变量两两之间的加法操作。
本发明解决的技术问题是:利用SIMD扩展接口,本发明提出了一种对现有的标准数学库函数进行SIMD向量化的方法,重写为自定义精度的扩展的向量数学库函数,有效的提升手动向量化时的性能。
对于并行算法,有多种技术方法可以对程序进行优化。SW26010处理器是神威·太湖超级计算机采用的主要计算芯片。对于在神威·太湖之光上的并行计算方法主要有MPI,OpenMP, Athread,OpenAcc, DMA intrinsic ,寄存器通信,自动向量化,以及SW26010处理器上的SIMD扩展支持接口实现的手动向量化。在这些方法中,除了手动向量化,其余的并行技术在不同的程序情况下将获得不同的加速比,而对于手动向量化,只要程序中有大量计算部分,都能对其进行相应的优化,且可获得稳定的加速比。程序优化时代码段的手动向量化是一个较为复杂的问题。需要有经验的工程师和大量的人力进行全局或部分的手动向量化,但在实际操作中,一方面是程序算法的复杂性,另一方面是程序很大时,大量的中间向量寄存器极易导致错误将导致程序的优化工作不能及时准确完成。虽未解决以上问题但本发明结合手动向量化从库的角度提出了一种改写标准数学库函数建立自定义精度向量数学库函数的方法,应用手动向量化到标准数学库,提升调用数学库时程序的性能。
在SW26010芯片中,1个主核的运算控制核心和64个从核的运算核心内部都增加了对SIMD扩展的支持。SW26010芯片的运算控制核心和运算核心支持相同宽度的SIMD扩展结构,均为256位的SIMD的设计。神威·太湖之光超级计算机的SWCC编译器在C语言上扩展了一些新的数据类型和函数,让用户用C语言编程来使用SIMD功能部件。SIMD编程接口支持256位的数据进行单指令多数据并行,可以一次操作处理4个单精度、数据类型floatv4或双精度、数据类型doublev4的浮点运算,也可一次操作处理8个32位(intv8)的定点运算或一次操作直接处理一个256位的长整形int256运算。而扩展的函数,如simd_load()、simd_store()、simd_vextf()、simd_set_floatv4()等,大多数都能直接映射到SIMD的指令,在编译的时候由编译器inline进来。使用这些扩展编程接口可以在C语言一级获得与汇编编程一样的性能。下面结合附图1对本发明技术方案进行详细阐述。
步骤1:运用分析工具分析程序的热点程序,分析工具包括Intel平台的Vtune工具或神威·太湖之光系统中的Gprof工具,并记录热点程序中所有数组元素字长。记录字长的作用是:方便后续对界操作.
本发明中的热点程序指一个程序最耗时的部分,一般为函数。数组元素字长也就是数据类型。热点程序分析,即采用各个平台提供或支持的分析工具进行程序热点分析,如Intel平台可以使用Vtune工具,神威·太湖之光系统可以使用Gprof等工具进行分析,或以手动插桩计时的方式计时,后续将针对热点部分进行优化。然后分析热点程序中的数据类型,可进行对界操作,以及可以进行AOS数据转换为SOA数据的优化过程,这一过程将使数据访存得到优化,也方便后续向量化操作。
步骤2:根据任务精度要求,采用降精度或扩大精度的方式对热点程序中的数组进行对界操作,便于后续进行向量化优化。
対界操作是指:向量化操作限制,需统一等式两边的数据类型或字长,否则无法计算。
降精度进行対界操作的步骤为:一,如原本程序使用double类型变量,发现更低精度的float已经可以满足计算精度,则统一降低精度使用float作为变量类型。二,或者对于基础数学函数,降精度意味着减少变量重复计算次数,重复计算,是提升其精度,是标准库为了满足精度的写法,如exp()函数,sqrt()函数等。
扩大精度进行対界操作的步骤为:如原本程序有使用int类型变量,向量化操作一般无法对两种类型的变量进行运算操作,则在混合计算的地方将int扩大精度使用float作为变量类型。
对于不同的任务不同的程序会要求不同的精度,而精度上的调整也是程序优化效果较为明显的方法。精度调整配合SIMD扩展接口将极大提升性能。因此需要预先确定使用的精度范围,即数据类型,SWCC编译器提供四种数据类型,intv8,uintv8, int256,uint256, floatv4, doublev4六种表示形式。这样操作也是对界各个向量寄存器,方便后续手动向量化。
例如:选择一种数据类型,如int, long, double, float等,需计算的数组统一使用相同数据类型,当然精度越高则存储数据有效位数越多,元素字长也就越多,如float为4字节,有效小数位6~7位,而double一般为8字节,有效小数位15~16位;方便后续进行向量化优化。
步骤3:找到热点程序中核心函数调用的位置,若程序中有按宏条件处理不同函数,则在不影响性能的情况下先合并不同精度函数,简化后续向量化操作,然后在各个宏之下对各个函数分别进行向量扩展。
若程序中没有按宏条件处理不同函数,则直接跳过步骤3。
合并不同精度函数操作完全是为了性能考虑,若程序无需再未来做其他变动则可确定一个合适的精度,从而不需要不用精度的处理函数,即对界后合并,对界后变量类型或字长都相同则可合并为一个函数,另一函数可注释。合并后则手动向量化工作量减少。
对宏下的各个函数进行向量扩展意思就是手动向量化,作用也是使函数具有SIMD的功能,即手动赋予函数SIMD技术的计算能力。
例如4个float数据装入一个系统库给出的4个float长度的向量寄存器中,则一次运算相当于进行了4个不同数据的加减乘除等操作。
步骤4:将热点程序中的核心函数所调用的标准数学库函数中的库函数进行降精度处理,将其改写成步骤2调整后的精度的自定义数学函数,改写后的全部自定义数学函数构成自定义数学库函数,并将热点程序中的核心函数所调用的数学标准库函数替换为自定义数学库函数。
通过对热点程序中核心函数调用的函数进行改写降低精度,减少计算量,达到提升计算性能的目的。
扩大精度一般是为了向量计算需要,一般是个别的局部的,因为程序的变量在并行化前已经确立好,其结果必然是正确的情况下才会做并行化。总体上看肯定是降精度或不变的,若局部扩大精度也不会太影响计算性能,因为同样是SIMD操作。
步骤3和步骤4,分析热点程序部分所调用的函数,特别是标准数学库函数,一般的大型计算程序会重复调用某个核心函数,这个核心函数内部一般就会调用标准数学库函数,如C语言数学库函数。将其所调用的库函数以及其他函数进行降精度,一般而言就是改写成满足一定精度的函数。
如对C语言标准库函数exp函数进行降精度,可进行如图3所示的改写。
在程序中有宏条件时,则先分析合并不同宏条件的函数,不能合并则分别降精度重写然后SIMD扩展处理,如图4所示,调用了SWCC编译器提供的simd_vsqrts();simd_vdivs等SIMD扩展函数代替原代码中的自定义精度的sqrt()库函数。
重写之后将源程序中所调函数名,更换为自定义函数的函数名。并将热点程序部分所调用的库函数替换为自定义实现的数学库函数。
步骤5:使用SWCC编译器提供的SIMD扩展接口对热点程序部分的变量根据需要进行全局手动向量化或部分手动向量化,用于将多个变量封装成向量并使用SIMD接口对向量进行原来变量的运算。变量个数取决于SIMD扩展接口以及数据类型,变量个数完全取决于程序本身和程序员,个数并不影响。
是否进行全局手动向量化或部分手动向量化,具体情况完全视情况而定,循环中变量相关性低则可能可以全局手动向量化,部分手动向量化则是代码依赖性高只能尽可能的做向量化。
初始数据的变量是手动封装到向量,中间计算结果以及最后的是直接存到向量的。
SIMD扩展接口包括一些向量寄存器的定义函数和向量寄存器的基础运算封装函数。部分手动向量化也就是某些程序可能会有特殊操作部分不能进行手动向量化,如移位操作,对于移位操作一般不能进行手动向量化,这将会影响计算性能。
步骤6:对步骤4改写的自定义数学库函数运用SWCC编译器的SIMD扩展接口进行手动向量化,封装变量成向量扩展每次运算的数据长度,并将数学库函数中需要用到的常数扩展为向量长度以対界。本发明技术方案的核心就在于向量化基本数学函数。
対界,就是统一数组字长以便进行计算,若不対界,不能使用SIMD扩展接口进行运算。
传入参数需要在传入自定义数学函数之前进行向量対界操作,传入参数需要使用自定义数学库函数进行计算的数据,传入的是一个向量数据,自定义数学库函数处理完成后返回相同向量长度的返回值。
返回值也就是自定义数学库计算的结果,这也是一个向量,同样方便后续的手动向量化。变量扩展为向量,对自定义数学函数中的基本运算操作(如加减乘除)全部替换调用SIMD扩展接口(系统提供),最后将返回值也设置为向量返回值,这一过程即函数手动向量化。
传入参数取决于程序计算什么数据,将需计算数据手动扩展为向量作为参数传入向量化后的数学函数。完成程序任务中的基础函数计算,可以是exp(A),sqrt(B),sin(C),log(D)等,其中参数A,B,C,D等是向量。
向量化数学函数完成计算后得到的结果,返回值同样是一个向量,返回给程序,程序下面的计算中会用到。
步骤5、6开始对热点核心函数进行手动向量化。对于调用函数之外使用全局向量化还是部分向量化取决于项目要求。使用SWCC编译器提供的SIMD扩展接口对程序进行手动向量化优化之后,在内部调用其他自定义函数的地方,将函数单步所需的向量寄存器作为参数传入自定义函数。
如图5所示例子为对exp()标准库函数进行自定义函数的SIMD扩展改写。自定义函数的传入参数,函数内部使用数据,以及函数返回值均为对界的向量寄存器。采用対界的向量寄存器,一次可处理多个数据,大大提高了计算效率,减少运算时间。
在SW 26010处理器架构中,不对界的Load/Store会引发异常,或会导致性能降低。
图6所示是在神威·太湖之光上对GROMACS(Groningen Machine for ChemicalSimulations)程序进行了优化,这是一种模拟分子动力学的仿真软件。我们只针对其核心函数进行了SIMD扩展向量化优化,并应用了本发明的标准库函数SIMD扩展技术。可以看到不同的进程及不同的介质条件分子结构模拟加速比都能获得稳定的提升,由于只向量化优化了内部核函数,最终加速比大概为136%。
需要注意的是,上述具体实施例是示例性的,本领域技术人员可以在本发明公开内容的启发下想出各种解决方案,而这些解决方案也都属于本发明的公开范围并落入本发明的保护范围之内。本领域技术人员应该明白,本发明说明书及其附图均为说明性而并非构成对权利要求的限制。本发明的保护范围由权利要求及其等同物限定。

Claims (1)

1.一种基于手动向量化的并行计算方法,其特征在于,所述方法包括:
步骤1:运用分析工具分析程序的热点程序,分析工具包括Intel平台的Vtune工具或神威·太湖之光系统中的Gprof工具,并记录热点程序中所有数组元素字长;
步骤2:根据任务精度要求,采用降精度或扩大精度的方式对热点程序中的数组进行对界操作,便于后续进行向量化优化;
步骤3:找到热点程序中核心函数调用的位置,若程序中有按宏条件处理不同函数,则在不影响性能的情况下先合并不同精度函数,简化后续向量化操作,然后在各个宏之下对各个函数分别进行向量扩展;
步骤4:将热点程序中的核心函数所调用的标准数学库函数中的库函数进行降精度处理,将其改写成步骤2调整后的精度的自定义数学函数,改写后的全部自定义数学函数构成自定义数学库函数,并将热点程序中的核心函数所调用的数学标准库函数替换为自定义数学库函数;
步骤5:使用SWCC编译器提供的SIMD扩展接口对热点程序中的变量根据需要进行全局手动向量化或部分手动向量化,用于将多个变量封装成向量并使用SIMD接口对向量进行所述变量原来的运算;
步骤6:对步骤4改写的所述自定义数学库函数运用SWCC编译器的SIMD扩展接口进行手动向量化,封装变量成向量扩展每次运算的数据长度,并将所述自定义数学库函数中需要用到的常数扩展为向量长度以対界。
CN201910780790.2A 2019-08-22 2019-08-22 一种基于手动向量化的并行计算方法 Active CN110673877B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910780790.2A CN110673877B (zh) 2019-08-22 2019-08-22 一种基于手动向量化的并行计算方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910780790.2A CN110673877B (zh) 2019-08-22 2019-08-22 一种基于手动向量化的并行计算方法

Publications (2)

Publication Number Publication Date
CN110673877A CN110673877A (zh) 2020-01-10
CN110673877B true CN110673877B (zh) 2020-09-01

Family

ID=69075527

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910780790.2A Active CN110673877B (zh) 2019-08-22 2019-08-22 一种基于手动向量化的并行计算方法

Country Status (1)

Country Link
CN (1) CN110673877B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112989683A (zh) * 2021-04-19 2021-06-18 中国人民解放军国防科技大学 一种sph的向量化并行计算方法及装置

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103440229A (zh) * 2013-08-12 2013-12-11 浪潮电子信息产业股份有限公司 一种基于mic架构处理器的向量化优化方法
CN105808309A (zh) * 2016-03-08 2016-07-27 中国科学院软件研究所 一种基于申威平台的基础线性代数库blas三级函数gemm的高性能实现方法
CN109002659A (zh) * 2018-09-07 2018-12-14 西安交通大学 一种基于超级计算机的流体机械仿真程序优化方法

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6666554B2 (ja) * 2016-05-23 2020-03-18 富士通株式会社 情報処理装置、変換プログラム、及び変換方法

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103440229A (zh) * 2013-08-12 2013-12-11 浪潮电子信息产业股份有限公司 一种基于mic架构处理器的向量化优化方法
CN105808309A (zh) * 2016-03-08 2016-07-27 中国科学院软件研究所 一种基于申威平台的基础线性代数库blas三级函数gemm的高性能实现方法
CN109002659A (zh) * 2018-09-07 2018-12-14 西安交通大学 一种基于超级计算机的流体机械仿真程序优化方法

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
向量数学库的向量化方法研究;周蓓等;《计算机科学》;20190131;第46卷(第1期);全文 *
基于神威蓝光处理器的向量数学软件包;解庆春等;《软件学报》;20140313;第2卷(第25期);全文 *

Also Published As

Publication number Publication date
CN110673877A (zh) 2020-01-10

Similar Documents

Publication Publication Date Title
Windh et al. High-level language tools for reconfigurable computing
EP2710467B1 (en) Automatic kernel migration for heterogeneous cores
US5774727A (en) Parallel processing system for virtual processor implementation of machine-language instructions
Krommydas et al. Opendwarfs: Characterization of dwarf-based benchmarks on fixed and reconfigurable architectures
de Fine Licht et al. StencilFlow: Mapping large stencil programs to distributed spatial computing systems
Hormati et al. Macross: Macro-simdization of streaming applications
US11733983B2 (en) Method and apparatus for generating metadata by a compiler
Mikushin et al. KernelGen--The Design and Implementation of a Next Generation Compiler Platform for Accelerating Numerical Models on GPUs
CN109408867B (zh) 一种基于mic协处理器的显式r-k时间推进加速方法
Araujo et al. NAS Parallel Benchmarks with CUDA and beyond
Vinas et al. Improving OpenCL programmability with the heterogeneous programming library
CN114416045A (zh) 自动生成算子的方法和装置
Mammeri et al. Vcomputebench: A vulkan benchmark suite for gpgpu on mobile and embedded gpus
US20230004365A1 (en) Multistage compiler architecture
CN110673877B (zh) 一种基于手动向量化的并行计算方法
Lanzagorta et al. Introduction to reconfigurable supercomputing
Snyder Foundations of practical parallel programming languages
CN113326137B (zh) 深度学习计算方法、装置、芯片及介质
Kessler et al. Skeleton Programming for Portable Many‐Core Computing
WO2022047423A1 (en) Memory processing unit architecture mapping techniques
Akimova et al. Algorithm of Automatic Parallelization of Generalized Matrix Multiplication
CN110210046B (zh) 应用程序及专用指令集处理器一体化敏捷设计方法
Doroshenko et al. Automated design of parallel programs for heterogeneous platforms using algebra-algorithmic tools
Garanina et al. Model Checking Meets Auto-Tuning of High-Performance Programs
Ivutin et al. Low-level Code Auto-tuning for State-of-the-art Multicore Architectures

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