天天看点

异构硬件与验证顺序分析,环境自适应软件的创新应用与实现方法

作者:不诉青史

引言

环境自适应软件是指能够根据外部环境的变化,和用户需求的变化,来自动调整其行为和功能的软件系统。

在如今快节奏的社会中,环境自适应软件的需求越来越大,为了提供高效、可靠的环境自适应功能,异构硬件和验证顺序分析等创新技术,被广泛应用于环境自适应软件的开发和实现中。

异构硬件与验证顺序分析,环境自适应软件的创新应用与实现方法

异构硬件在环境自适应软件中的应用

随着摩尔定律的放缓,中央处理器的晶体管密度,不再能够每1.5年翻倍一次,为了弥补这一点,越来越多的系统采用异构硬件,如图形处理器、现场可编程门阵列和多核CPU,微软的搜索引擎Bing使用现场可编程门阵列(FPGA),亚马逊网络服务则利用云技术提供图形处理器(GPU)和FPGA实例。

要在这些系统中,正确利用除了小核心CPU以外的设备,需要进行一些配置和编程工作,考虑到设备特性,如开放多处理、开放计算语言和计算统一设备架构,对于大多数程序员来说,技术门槛很高,物联网技术在这些系统中的使用越来越普遍,对所需技能的要求也在增加。

异构硬件与验证顺序分析,环境自适应软件的创新应用与实现方法

对于使用异构硬件的应用程序的期望越来越高,目前使用它们的技术障碍很高,为了克服这些障碍,应用程序员只需编写要处理的逻辑,然后软件应该适应具备异构硬件的环境,以便轻松使用这些硬件。

Java,于1995年出现,引起了环境适应方面的范式转变,使得一次编写的软件可以在其他CPU机器上运行,在移植目标上没有考虑应用程序性能的问题,先前提出了一种环境自适应软件,通过自动执行代码转换和配置,有效地运行一次编写的应用程序,以便在部署环境中适当地使用GPU、FPGA、多核CPU等各种设备。

异构硬件与验证顺序分析,环境自适应软件的创新应用与实现方法

作为环境自适应软件的基本技术,还提出了一种将循环语句和函数块,自动迁移到GPU或FPGA的方法,研究目的是在存在各种GPU、FPGA,以及多核CPU设备的混合迁移目标环境中,自动迁移具有高性能的应用程序。

异构硬件与验证顺序分析,环境自适应软件的创新应用与实现方法

提出了一种自动迁移到单个GPU、FPGA,或多核CPU设备的方法,接下来,提出了一种在具有各种设备的混合迁移目标环境中,适当迁移的方法,对现有应用程序中,提出的方法的有效性进行评估。

对于混合环境的迁移,还使用了先前提出的将循环语句迁移到GPU、FPGA,和函数块迁移到FPGA的方法作为基本技术,目标是使用先前的单独设备迁移技术,在混合环境中适当地进行迁移。

异构硬件与验证顺序分析,环境自适应软件的创新应用与实现方法

实现环境自适应软件的方法

为了实现环境自适应软件,提出了一种将程序循环语句自动迁移到GPU和FPGA,将程序函数块自动迁移到GPU和FPGA的方法,基于这些基本技术,介绍了针对各种设备的基本思想,并提出了一种自动迁移到混合迁移目标环境的方法。

涉及的迁移目标环境包括GPU、FPGA和多核CPU,GPU和FPGA作为异构硬件,已经被长时间使用,有许多使用CUDA和OpenCL进行手动迁移的加速实例,可以以几百美元购买具有16个,或更多核心的多核CPU。

异构硬件与验证顺序分析,环境自适应软件的创新应用与实现方法

并且还有32到64个核心的更多核CPU,可以使用OpenMP等技术规范进行并行化,在许多情况下,通过手动调优进行并行化可以提高速度,为了实现高速自动卸载,通过在验证环境中测量物理机器的性能,逐步搜索高速卸载模式,并使用进化计算进行优化。

这与以前提出的GPU卸载类似,其原因在于性能的变化在很大程度上,取决于代码结构以及实际处理内容,如处理硬件规格、数据大小和循环次数,性能很难静态预测,需要进行动态测量。

异构硬件与验证顺序分析,环境自适应软件的创新应用与实现方法

市场上有一些自动并行编译器,可以在编译阶段查找循环语句并实现并行化,由于可并行化循环语句的并行化通常会导致速度较慢,因此常常需要进行性能测量,关于动态测量,所提出的方法能够递归地执行它。

它不会归纳出优化的方式,在模板计算的情况下,有优化的专门技巧,但是方法无法提取这些技巧,所提出的方法的一个主要特点是,它实际上执行并测量使用用户数据的所有迁移目标候选者的性能,并选择高速模式。

异构硬件与验证顺序分析,环境自适应软件的创新应用与实现方法

对于要卸载的对象,关注程序的循环语句和函数块,这与迄今为止提出GPU和FPGA卸载的情况类似,循环语句是卸载的首要目标,因为大多数耗时的程序处理都在循环中进行,另一方面,对于函数块。

当加速特定处理时,通常会使用适合处理内容和处理硬件的算法,因此与卸载单独的循环语句相比,处理速度可以大大加快,通过将傅里叶变换等经常使用的函数块,替换为基于适当算法的处理,可以提高性能,该算法适用于设备特性。

异构硬件与验证顺序分析,环境自适应软件的创新应用与实现方法

关于代码模式,有一些研究对循环的类型等施加限制,但是这项研究对代码模式没有特定的限制,在这项研究中,针对函数块的卸载和循环语句的卸载,尝试了所有代码模式,包括多核CPU、GPU和FPGA。

使用两种方法,描述了针对三个卸载目标的自动卸载,关于GPU和FPGA的卸载,提出了一种适用于循环语句的自动多核CPU卸载方法,与GPU类似,多核CPU利用许多计算核心并将处理并行化以加快速度。

异构硬件与验证顺序分析,环境自适应软件的创新应用与实现方法

与GPU不同,多核CPU具有共享内存,因此无需考虑CPU和GPU内存之间数据传输的开销,这通常是卸载到GPU时的一个问题,针对多核CPU上的程序处理并行化,通常使用开放多处理器(OpenMP)规范。

OpenMP是一种规范,通过诸如#pragma omp parallel for等指令,来指定程序的并行处理和其他处理,OpenMP程序员负责在OpenMP中进行处理的并行化,当试图并行化无法并行化的处理时,编译器不会输出错误,并且计算结果会变得错误。

异构硬件与验证顺序分析,环境自适应软件的创新应用与实现方法

采用渐进加速循环语句,自动卸载到多核CPU的遗传算法方法,研究人员介绍了使用GA在GPU上进行的代码优化,与GPU的区别在于,使用OpenMP的#pragma omp parallel for,来指示多核CPU执行循环语句。

而不是使用OpenACC的#pragma acc kernels,具体而言,创建了多个模式,使用OpenMP的#pragma指令,指定循环是否以并行方式处理,并在验证环境中重复实际性能测量,在此过程中,用于自动GPU卸载的PGI编译器,在无法并行化时会输出错误。

异构硬件与验证顺序分析,环境自适应软件的创新应用与实现方法

像gcc这样的OpenMP编译器不会输出此类错误,为了自动化错误输出,通过仅检查循环语句在多核CPU上,是否并行化来简化OpenMP指令执行的处理,通过检查每次测量的最终计算结果是否正确,只有产生正确计算结果的模式才会保留在进化计算中。

当输入代码时,使用诸如Clang的解析库分析语法,并确定循环语句,在这里,当多核CPU上执行并行处理时,基因模式设置为1,当不执行并行处理时,设置为0,如果值为1,该方法将在循环语句中添加#pragma omp parallel for,创建指定并行处理的OpenMP代码。

异构硬件与验证顺序分析,环境自适应软件的创新应用与实现方法

该方法使用诸如gcc的OpenMP编译器,编译准备好的多个OpenMP文件,并测量配备多核CPU的验证环境机器的性能,通过性能测量,高速处理的模式被认为具有较高的适应度,低速处理的模式被认为具有较低的适应度。

然后通过遗传算法的精英选择、交叉和突变等处理创建下一代的模式,在性能测量中,将最终计算结果,与使用CPU的单个核心处理原始代码的情况进行比较,如果差异过大,则将模式的适应度设置为足够低,以便在下一代中不被选择。

异构硬件与验证顺序分析,环境自适应软件的创新应用与实现方法

之前提出了一种针对循环语句的自动GPU卸载方法,在论文中,使用了该方法,通过使用遗传算法提取适当的循环语句,并减少CPU-GPU内存数据传输,实现了自动卸载,还需要减少CPU和GPU之间的通信延迟以提高性能。

在和其他论文中,考虑在嵌套循环中尽可能高地传输变量,并考虑批量传输变量,之前提出了一种针对循环语句的自动FPGA卸载方法,在研究中,使用了该方法,通过使用算术强度、循环次数和资源量来缩小候选循环语句范围。

异构硬件与验证顺序分析,环境自适应软件的创新应用与实现方法

缩小范围后,在验证环境中测量多种模式的性能,实现自动卸载,之前提出了一种函数块的自动卸载方法,在研究中使用了该方法,该方法在GPU和FPGA上进行了验证,但是对于可以通过名称匹配,和相似性检测卸载的函数块,处理方式是相同的。

因此也可以在多核CPU上采用,使用Deckard的抽象语法树相似性匹配,来进行函数块卸载,并不是所有的函数块都能够被卸载,根据基本思想和个体设备卸载方法,研究了在混合卸载目标环境中的自动卸载。

异构硬件与验证顺序分析,环境自适应软件的创新应用与实现方法

从单设备迁移到混合环境的主要区别在于,当同一节点上存在多个高速卸载模式时,会尝试组合,即使程序代码相同,性能也取决于处理硬件的规格和处理内容,需要进行实际的性能测量,由于有三种类型的卸载设备,和两种卸载重点的方法,至少需要进行六个种卸载验证。

与循环语句和函数块相比,如果存在可卸载的函数,函数块卸载可能更快,与一个模式的验证时间相比,多核CPU = GPU < FPGA,FPGA需要几个小时进行电路实现,测量其性能需要时间。

异构硬件与验证顺序分析,环境自适应软件的创新应用与实现方法

基于上述原因,提议按照以下顺序进行六种卸载验证,多核CPU函数块卸载,GPU函数块卸载,FPGA函数块卸载,多核CPU循环语句卸载,GPU循环语句卸载和FPGA循环语句卸载。

按照这个顺序进行卸载验证,以寻找高性能的模式,前三种和后三种的目标代码可能不同,具体来说,如果在前三种中可以进行函数块卸载,则在没有可卸载的函数块部分的代码中,验证后三种循环语句的卸载。

异构硬件与验证顺序分析,环境自适应软件的创新应用与实现方法

在卸载验证中,用户可以指定目标性能,如果在用户指定范围内的前六个验证中,找到足够快的卸载模式,则不会执行后续的验证,之所以这样做是因为函数块卸载可以更快,所以将提前进行验证。

在执行自动卸载时,期望尽快进行高速模式搜索,需要耗费较长验证时间的FPGA被放在最后,如果在之前的阶段找到了满足用户需求的模式,则不进行FPGA验证,多核CPU和GPU在验证时间上的差异很小,但多核CPU与具有单独内存空间的GPU相比更类似于小核心CPU。

异构硬件与验证顺序分析,环境自适应软件的创新应用与实现方法

验证顺序遵循上述描述,如果在多核CPU之前,找到了足够满足用户需求的模式,则不会进行GPU验证,接下来,确定最终模式,如果在六种卸载验证中,存在比单个CPU核心更快的模式,提议的方法将准备一个具有该模式的可执行文件。

在准备可执行文件时,除了选择性能最高的模式外,还可以根据所使用加速设备的价格,选择最具成本效益的模式,在六种验证中,当出现多种速度提升模式时,来考察最终的模式,在卸载到另一个节点时,需要使用消息传递接口等技术规范。

异构硬件与验证顺序分析,环境自适应软件的创新应用与实现方法

并且由于通信开销,加速变得困难,在通常的服务器机器配置中,有具有多核CPU和GPU的机器,具有多核CPU和FPGA的机器,但具有多核CPU、GPU和FPGA的机器很少,如果多个设备可以加速,则在文中,卸载到同一节点是必要条件。

同一节点上的多核CPU和GPU可以成为候选项,但另一个节点上的GPU和FPGA则不行,研究了函数块卸载的组合方法,对于函数块卸载,有以下规则适用,如果同一个函数块可以卸载到多个设备上提议的方法,会选择性能改进最大的卸载目标。

异构硬件与验证顺序分析,环境自适应软件的创新应用与实现方法

如果不同的函数块可以卸载到不同的设备上,而不能卸载到同一节点上,那么会选择性能改进最大的函数块进行卸载,如果不同的函数块可以卸载到不同的设备上,并且可以卸载到同一节点上,那么这些函数块都会进行卸载。

请注意,频繁使用的处理或函数块,可能会以较高的优先级进行卸载,在这种情况下,应进行带有重点放在高优先级处理上的样本测试,执行六种卸载验证,以衡量性能,然后研究了循环语句卸载的组合。

异构硬件与验证顺序分析,环境自适应软件的创新应用与实现方法

当可以卸载函数块时,循环语句会卸载到代码中,排除了可以卸载的函数块部分的部分,如果循环语句只能卸载到,与函数块卸载目标不同的节点,并且性能改进很小,则不会进行循环语句的卸载。

当通过函数块卸载快速傅里叶变换处理,并且FPGA可以在100秒内处理1秒时,余下的循环语句可以使用GPU在100秒内处理30秒,不会将循环语句从另一个节点卸载到GPU上,如果可以卸载到同一节点上,提议的方法会检查将函数块,和循环语句都卸载到该节点上的模式的加速情况。

异构硬件与验证顺序分析,环境自适应软件的创新应用与实现方法

在循环语句卸载中,有以下规则适用,如果相同的循环语句组可以卸载到多个设备上,提出的方法会选择性能改进最大的卸载目标,如果不同的循环语句组,可以卸载到不同的设备上而不能卸载到同一节点上,那么会选择性能改进最大的循环语句组进行卸载。

如果不同的循环语句组可以卸载到不同的设备上,并且可以卸载到同一节点上,那么会优先卸载性能改进最大的循环语句组,而将其余的循环语句组卸载到性能改进较低的卸载目标上,当卸载到同一节点的多个设备上,同时卸载到多个设备上不一定能加速进程,需要同时卸载到多个设备上,并进行性能验证,以确定是否比单个设备的卸载更快。

异构硬件与验证顺序分析,环境自适应软件的创新应用与实现方法

结语

异构硬件和验证顺序分析等创新技术,为环境自适应软件的开发和实现,提供了重要的支持和保障,它们可以提高系统的自适应能力、性能和可靠性,满足不同用户和环境的需求。

未来,在不断推进技术发展的背景下,可以进一步探索和拓展环境自适应软件的创新应用,并提升其在实际生活和工作中的价值和意义。

参考文献

1.Alias, C., Darte, A., & Plesco, A. (2013, March). Optimizing remote accesses for offloaded kernels: Application to high-level synthesis for FPGA. 2013 Design, Automation and Test in Europe (DATE), 575–23. https://doi.org/10.7873/date.2013.127 [Google Scholar]

2.Bertolli, C., Antao, S. F., Bercea, G. T., Jacob, A. C., Eichenberger, A. E., Chen, T., Sura, Z., Sung, H., Rokos, G., Appelhans, D., & O’Brien, K., “Integrating GPU support for OpenMP offloading directives into Clang,” ACM Second Workshop on the LLVM Compiler Infrastructure in HPC (LLVM’15), November. 2015. [Crossref], [Google Scholar]

3.Chen, J., Joo, B., Watson, W., III, & Edwards, R., “Automatic offloading C++ expression templates to CUDA enabled GPUs,” 2012 IEEE 26th International Parallel and Distributed Processing Symposium Workshops & PhD Forum, pp.2359–2368, May 2012. [Crossref], [Google Scholar]

4.Deckard web site. 2021. http://github.com/skyhover/Deckard [Google Scholar]

5.DPC++ web site 2021. https://www.intel.com/content/www/us/en/developer/tools/oneapi/dpc-library.html#gs.flx6xq [Google Scholar]

继续阅读