一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

卸载服务器、卸载控制方法和卸载程序与流程

2023-06-15 18:08:12 来源:中国专利 TAG:
applicationsloopstatements,"the7thannualconferenceonengineeringandinformationtechnology(aceait2020),pp.111-123,2020。非专利文献4:y.yamato,"proposalofautomaticoffloadingforfunctionblocksofapplications,"the8thiiaeinternationalconferenceonindustrialapplicationengineering2020(iciae2020),pp.4-11,mar.2020。技术实现要素:[发明要解决的技术问题][0007]近年来,cuda作为用于执行在非图像处理中也使用gpu的并行计算能力的gpgpu(generalpurposegpu)的环境正在普及。cuda是由nvidia公司开发而面向gpgpu的环境。[0008]此外,opencl作为用于以相同的方式处理fpga、众核cpu、gpu等的异构设备的规范出现,并且其开发环境也已出现。cuda、opencl通过明示进行fpga等内核和cpu的主机之间的存储器数据的拷贝、释放的记载等、c语言的扩展来编程,程序的难度高。[0009]为了比cuda、opencl更简单地利用异构设备,存在一种技术,在指示行中指定执行并行处理等的部分,并且按照指示行,编译器面向gpu、众核cpu等制作执行文件。作为规范,存在openacc(注册商标)(openaccelerators)、openmp等,作为编译器,存在pgi编译器、gcc等。此外,关于openacc(注册商标),在此之后省略(注册商标)的记载。[0010]可以通过使用cuda、opencl、openacc、openmp等的技术规范向fpga、gpu、众核cpu进行卸载。但是,即使加速器处理本身能够进行,但在高速化方面也存在技术问题。[0011]例如,作为面向众核cpu具有自动并行化功能的编译器,存在intel编译器等。这些在自动并行化时,在代码中的loop语句中提取可并行处理的部分进行并行化。但是,由于存储器处理等的影响,即使仅将可并行化loop语句并行化,也大多情况下不能发挥性能。此外,在此,loop语句是指,在c/c 源代码中为for/while/do-while。[0012]具体而言,当在fpga、gpu等中进行高速化时,opencl、cuda的技术人员重复调优,或者通过使用openacc编译器等搜索适当的并行处理范围且试行该并行处理范围。因此,缺乏技术技能的程序员难以通过使用fpga、gpu、众核cpu来使应用程序高速化。另外,在使用自动并行化技术等的情况下,需要并行处理部位搜索的试行错误等的工作。[0013]目前,对于异构设备的卸载主要通过手动操作。发明人提出了环境适配软件的概念,并研究了自动卸载。然而,没有设想向gpu单体的卸载等、gpu、fpga、众核cpu等的各种加速器混合的移行目标环境。[0014]因此,本发明的技术问题在于,在卸载服务器、卸载控制方法和卸载程序中,即使多种加速器混合的环境是移行目标,也能够自动地高性能化。[用于解决技术问题的技术方案][0015]为了解决上述技术问题,本发明的卸载服务器的特征在于,具有代码分析部、处理模式制作部、性能测定部和控制部,其中,所述代码分析部分析软件程序的源代码是否包含能由加速器执行的功能模块;所述处理模式制作部制作将所述功能模块卸载给所述加速器的模式;所述性能测定部在验证环境中部署对所述功能模块进行卸载的各所述模式,以测定性能;所述控制部构成为,在所述性能测定部测定出的性能是所期望的性能的情况下,通过所述处理模式制作部制作对所述软件程序中的除所述功能模块之外的剩余的loop语句进行卸载的模式,通过所述性能测定部在所述验证环境中部署各所述模式以测定性能,在所述性能测定部测定出的性能不是所期望的性能的情况下,通过所述处理模式制作部制作对所述软件程序的loop语句进行卸载的模式,并通过所述性能测定部在所述验证环境中部署各所述模式以测定性能。关于其他的技术方案,在用于实施发明的方式中进行说明。[发明效果][0016]根据本发明,即使是多种加速器混合的环境为移行目标,也能够自动地高性能化。此外,当移行目标在同一节点具有多种加速器时,通过同时对多种加速器进行卸载,能够实现比利用单一加速器时更高速的卸载。附图说明[0017]图1是表示卸载服务器的结构例的功能框图。图2是表示实现卸载服务器的功能的计算机的一例的硬件结构图。图3a是卸载给加速器的模式的选择处理的流程图。图3b是卸载给加速器的模式的选择处理的流程图。图3c是卸载给加速器的模式的选择处理的流程图。图4a是将功能模块卸载给一个节点的处理的流程图。图4b是将loop语句卸载给一个节点的处理的流程图。图5a是将功能模块向加速器卸载的模式的选择处理的流程图。图5b是将功能模块向加速器卸载的模式的选择处理的流程图。图6是表示卸载服务器的自动卸载处理的图。图7是表示基于卸载服务器的单纯遗传算法的控制部的搜索样子的图。图8表示loop语句到众核cpu的基因序列映射的图。图9a是将loop语句向众核cpu卸载的模式的选择处理的流程图。图9b是将loop语句向众核cpu卸载的模式的选择处理的流程图。图10是表示loop语句向gpu的基因序列映射的图。图11a是将loop语句向gpu卸载的模式的选择处理的流程图。图11b是将loop语句向gpu卸载的模式的选择处理的流程图。图12a是将loop语句向fpga卸载的模式的选择处理的流程图。图12b是将loop语句向fpga卸载的模式的选择处理的流程图。具体实施方式[0018]下面参照各图详细说明用于实施本发明的方式。为了具体化环境适配软件的概念,发明人到目前为止提出了程序的loop语句的gpu自动卸载、fpga自动卸载、程序的功能模块的自动卸载的方式。在研究这些要素技术的基础上,针对移行目标环境定义对象,记述了即使在对象多样化的情况下也沿袭的基本思想,进而提出向各个移行目标环境的自动卸载和移行目标环境多样化时的自动卸载方式。[0019]《多种移行目标环境时的基本思想》在本实施方式中,作为对象多种化的移行目标环境包括gpu、fpga、众核cpu这三种。gpu和fpga作为与cpu不同的异构硬件具有很长的历史,并且基于使用cuda、opencl的手动卸载的高速化的事例也很多,并且市场也很大。另外,关于众核cpu,近年来搭载了16核以上的多个核的cpu以千美元至数千美元的低价格上市,出现了通过使用openmp等技术规范进行并行化,以手动进行调优,从而进行高速化的事例。[0020]在移行目标环境不仅仅是cpu的情况下,为了自动高速卸载,在验证环境的实机上测定性能,结合进化计算方法等方法,采用逐步发现高速卸载模式的方法。[0021]这与目前为止发明人提出的gpu卸载等的情况相同。其理由是,关于性能,认为不仅是代码结构,还根据处理的硬件的规格、数据大小、循环次数等实际处理的内容而变化很大,因此难以静态地预测,需要动态的测定。在市场中,存在发现loop语句并在编译阶段进行并行化的自动并行化编译器,但如果仅通过可并行化loop语句的并行化来测量性能,则成为低速的情况也较多,因此考虑需要测量性能。[0022]另外,对于卸载的对象,设为程序的loop语句和功能模块。这与目前为止研究的gpu、fpga卸载等的情况相同。关于loop语句,由于花费处理时间的程序的大部分处理在循环中被耗费的现状,因此考虑loop语句作为卸载的目标。[0023]另一方面,对于功能模块,由于在使特定处理高速化时,大多使用适合于处理内容和处理硬件的算法,因此,与各个loop语句的并行处理等相比,有时能够实现大幅度地高速化。在本实施方式中,以矩阵累计、傅立叶转换等频繁使用的功能模块为单位,替换为通过与众核cpu、fpga、gpu等的加速器对应的算法安装的处理(ip核、cuda库等),从而进行高速化。[0024]图1是表示卸载服务器1的结构例的功能框图。卸载服务器1是将应用程序的特定处理自动卸载给gpu、fpga、众核cpu等加速器的装置。如图1所述,卸载服务器1构成为包括控制部11、输入输出部12、存储部13和验证设备14(加速器验证装置)。[0025]输入输出部12由通信接口950(参照图2)和输入输出接口960(参照图2)构成,其中,所述通信接口用于与属于云层2、网络层3和设备层4的各设备等之间进行信息的收发;所述输入输出接口用于与触摸屏、键盘等输入装置、监视器等输出装置之间进行信息的收发。[0026]存储部13由硬盘、闪存存储器、ram(randomaccessmemory)等构成。在该存储部13中,存储试验案例数据库131和代码模式数据库133,并且暂时性存储用于执行控制部11的各功能的程序(卸载程序)、控制部11的处理所需的信息、例如中间语言文件132等。[0027]试验案例数据库131存储与验证对象软件对应的试验项目的数据。例如,如果是mysql等数据库系统,则是tpc-c等事务处理试验等。代码模式数据库133存储对应于程序库名的可替换的加速器库或加速器用ip核。验证设备14包括gpu、fpga、众核cpu等加速器,作为环境适配软件系统的验证环境。[0028]控制部11是负责卸载服务器1整体的控制的自动卸载功能部。控制部11例如通过图2的cpu910执行存储部13所存储的程序(卸载程序)来实现。[0029]控制部11包括代码指定部111、代码分析部112、处理指定部114、处理模式制作部115、性能测定部116、可执行文件制作部117、正式环境配置部118、性能测定试验提取执行部119和用户提供部120。[0030]《代码指定部111》代码指定部111进行所输入的源代码的指定。具体而言,代码指定部111将所接收的文件中记载的源代码传递给代码分析部分112。[0031]《代码分析部112》代码分析部112分析软件程序的源代码,掌握for/do-while/while等loop语句、fft库、矩阵运算、随机数生成等功能模块。这些loop语句、功能模块能够通过加速器来执行。[0032]《处理指定部114》处理指定部114对各功能模块替换为向加速器卸载的处理来进行编译,并且对各loop语句指定向加速器卸载的并行处理指定语句来进行编译。处理指定部114包括卸载范围提取部114a和中间语言文件输出部114b。[0033]卸载范围提取部114a如for/do-while/while等的loop语句、fft、矩阵运算、随机数生成等的功能模块那样,确定可向众核cpu、gpu、fpga卸载的处理,提取卸载范围。中间语言文件输出部114b输出所提取的可卸载处理的中间语言文件132。中间语言提取不是一次就结束,为了搜索合适的卸载区域、且为了通过试行来优化执行而反复进行中间语言提取。[0034]《处理模式制作部115》处理模式制作部115基于所提取的卸载范围制作向加速器卸载功能模块、loop语句的模式。[0035]当gpu被用作针对loop语句的加速器时,处理模式制作部115制作并行处理模式,该并行处理模式是指,将出现编译错误的loop语句(循环语句)排除在卸载对象外,并且指定是否对没有出现编译错误的loop语句进行并行处理。[0036]《性能测定部116》性能测定部116编译处理模式的源代码,将其配置于验证设备14,执行向加速器卸载时的性能测定处理。性能测定部116具有二进制文件配置部116a。二进制文件配置部116a在具有众核cpu、gpu和fpga的验证设备14中部署(配置)由中间语言导出的可执行文件。[0037]性能测定部116执行所配置的二进制文件,测定卸载时的性能,并且将性能测定结果返回给处理模式制作部115。在该情况下,处理模式制作部115制作另一卸载模式。性能测定部116试行所制作的另一卸载模式的性能测定。[0038]《可执行文件制作部117》可执行文件制作部117根据重复规定次数的性能测定结果,从多种卸载模式中选择最高处理性能的卸载模式,编译最高处理性能的卸载模式而制作可执行文件。[0039]《正式环境配置部118》正式环境配置部118将制作的可执行文件配置在面向用户的正式环境中(“最终二进制文件向正式环境的配置”)。正式环境配置部118确定指定了最终的卸载区域的模式,且将其部署在面向用户的正式环境中。[0040]《性能测定试验提取执行部119》在配置了可执行文件之后,性能测定试验提取执行部119从试验案例数据库131中提取性能试验项目,执行性能试验(“最终二进制文件向正式环境的配置”)。在配置了可执行文件之后,为了向用户示出性能,性能测定试验提取执行部119从试验案例数据库131中提取性能试验项目,自动执行提取出的性能试验。[0041]《用户提供部120》用户提供部120向用户提示基于性能试验结果的价格和性能等信息(“价格和性能等信息向用户的提供”)。试验案例数据库131存储与验证对象软件对应的试验项目的数据。用户提供部120向用户提示执行存储在试验案例数据库131中的试验项目而获得的性能等数据、以及配置用户软件的资源(虚拟机、gpu等)的价格信息等数据。用户基于被提示的价格和性能等信息来判断服务的付费使用的开始。[0042][遗传算法的适用]卸载服务器1在卸载的优化中能够使用遗传算法。使用遗传算法的情况下的卸载服务器1的结构如下所述。即,处理指定部114根据遗传算法,将loop语句(循环语句)的数量作为基因长度。处理模式制作部115设进行加速器处理的情况为1或0中的任一方、且设没有进行加速器处理的情况为另一方的0或1,将能否加速器处理映射到基因模式。[0043]处理模式制作部115在使用遗传算法的情况下,准备将基因的各值随机地制作为1或0的指定个体数的基因模式。性能测定部116按照各个体,编译指定了加速器中的并行处理指定语句的源代码,且配置在验证设备14中。性能测定部116在验证设备14中执行性能测定处理。[0044]在此,在使用遗传算法的情况、在中间代中生成了与以前相同的并行处理模式的基因的情况下,性能测定部116使用相同的值作为性能测定值,而无需进行符合该并行处理模式的源代码的编译、以及性能测定。另外,性能测定部116将发生编译错误的源代码、和性能测定没有在规定时间内结束的源代码,作为超时来对待,而将其性能测定值设定为规定的时间(长时间)。[0045]可执行文件制作部117对全部个体进行性能测定,以越是处理时间短的个体则适合度越高的方式进行评价。可执行文件制作部117从全部个体中选择适合度比规定值(例如,全部个数的上位n%,或者全部个数的上位m个:n,m为自然数)高的个体作为性能高的个体,对所选择的个体进行交叉、突然变异的处理,制作下一代的个体。可执行文件制作部117在指定代数的处理结束后,选择最高性能的并行处理模式作为解。[0046]图3是表示实现卸载服务器的功能的计算机的一例的硬件结构图。计算机900具有cpu910、ram920、rom930、hdd940、通信接口950、输入输出接口960、和媒体接口970。[0047]cpu910基于存储在rom930或hdd940中的程序进行动作,进行各部的控制。rom930存储计算机900启动时由cpu910执行的引导程序、依存于计算机900的硬件的程序等。[0048]hdd940存储由cpu910执行的程序以及由该程序使用的数据等。通信接口950经由通信网80从其他设备接收数据并向cpu910发送,将cpu910生成的数据经由通信网80向其他设备发送。[0049]cpu910经由输入输出接口960控制显示器、打印机等输出装置以及键盘、鼠标等输入装置。cpu910经由输入输出接口960从输入装置获取数据。另外,cpu910将生成的数据通过输入输出接口960输出给输出装置。[0050]媒体接口970读取存储在记录介质980中的程序或数据,并通过ram920将程序或数据提供给cpu910。cpu910通过媒体接口970将该程序从记录介质980加载到ram920上,并执行所加载的程序。记录介质980是例如dvd(digitalversatiledisc:数字通用光盘)等光学记录介质、mo(magnetoopticaldisk:磁光盘)等磁光记录介质、带介质、磁记录介质、或半导体存储器等。[0051]例如,在计算机900作为本实施方式所涉及的卸载服务器1而发挥功能的情况下,计算机900的cpu910通过执行被加载到ram920上的程序,来实现卸载服务器1的各部的功能。另外,在hdd940中存储有卸载服务器1的各部内的数据。计算机900的cpu910从记录介质980读取并执行这些程序,但作为其他例子,也可以从其他装置经由通信网80获取这些程序。[0052]图3a、图3b和图3c是卸载给加速器的模式的选择处理的流程图。卸载服务器1通过功能模块和loop语句这两种方法,对于gpu、fpga、众核cpu的三个移行目标环境研究自动卸载。[0053]控制部11在输入c/c 源代码时(s200),执行一系列的卸载模式的选择处理。控制部11调用图5a和图5b中的选择处理,检查功能模块向众核cpu的卸载(s201),并且判定是否获得了所期望的性能(s202)。如果获得了所期望的性能(是),则控制部11从全部测定中选择最高性能模式(s208),结束该图的处理。如果没有获得所期望的性能(否),则控制部11进入步骤s203。[0054]在步骤s203中,控制部11调用图5a和图5b中的选择处理,并且检查功能模块向gpu的卸载。然后,控制部11判定是否获得了所期望的性能(s204)。如果获得了所期望的性能(是),则控制部11从全部测定中选择最高性能模式(s208),结束该图的处理。如果没有获得所期望的性能(否),则控制部11进入步骤s205。[0055]在步骤s205中,控制部11调用图5a和图5b的选择处理,检查功能模块向fpga的卸载。然后,控制部11判定是否获得了所期望的性能(s206)。如果获得了所期望的性能(是),则控制部11从全部测定中选择最高性能模式(s208),结束该图的处理。如果没有获得所期望的性能(否),则控制部11从代码中去除已经卸载功能模块的部分,并且处理进行到图3b中的步骤s209。通过这些步骤s201~s208的处理,即使多种加速器混合的环境是移行目标,也能够自动地使功能模块高性能化。此外,控制部11通过按众核cpu、gpu、fpga的顺序进行试行,能够高效地搜索可高速化的模式。[0056]在步骤s209中,控制部11调用图9a和图9b中的选择处理,检查loop语句向众核cpu的卸载。然后,控制部11判定是否获得了所期望的性能(s210)。如果获得了所期望的性能(是),则控制部11从全部测定中选择最高性能模式(s208),结束该图的处理。如果没有获得所期望的性能(否),则控制部11进入步骤s211。[0057]在步骤s211中,控制部11调用图11a和图11b中的选择处理,检查loop语句向gpu的卸载。然后,控制部11判定是否获得了所期望的性能(s212)。如果获得了所期望的性能(是),则控制部11从全部测定中选择最高性能模式(s208),结束该图的处理。如果没有获得所期望的性能(否),则控制部11进入步骤s213。[0058]在步骤s213中,控制部11调用图12a和图12b的选择处理,检查loop语句向fpga的卸载。然后,控制部11判定是否获得了所期望的性能(s214)。如果获得了所期望的性能(是),则控制部11从全部测定中选择最高性能模式(s208),结束该图的处理。如果没有获得所期望的性能(否),则控制部11从对各个移行目标的6个验证中选择最高性能的模式(s215)。[0059]通过这些步骤s209~s215的处理,即使多种加速器混合的环境是移行目标,也能够自动地使loop语句高性能化。此外,控制部11通过按众核cpu、gpu、fpga的顺序进行试行,能够高效地搜索可高速化模式。控制部在试行功能模块之后试行loop语句作为向加速器的卸载对象,从而能够高效地搜索可高速化模式。[0060]然后,控制部11判定是否存在可向一个节点进行多个卸载的候选(s216)。如果不存在可向一个节点进行多个卸载的候选(否),则控制部11结束图中的处理。如果存在可向一个节点进行多个卸载的候选(是),则控制部11进入到图3c的步骤s217。[0061]在图3c的步骤s217中,控制部11判定是否存在能够卸载多个功能模块的候选。如果存在能够卸载多个功能模块的候选(是),则控制部11进入步骤s218。如果不存在能够卸载多个功能模块的候选(否),则进入步骤s223。[0062]在步骤s218中,控制部11制作多个功能模块的卸载的组合模式。控制部11测定该组合模式的性能(s219)。然后,控制部11判定是否能通过功能模块的卸载的组合来实现高速化(s220)。[0063]在步骤s220中,如果在组合功能模块的卸载的情况下更快,则控制部11从源代码中去除组合的功能模块(s221),并且进入步骤s223的处理。如果在不组合功能模块的卸载的情况下更快,则控制部11从源代码的卸载对象中去除能够实现更快的一个功能模块(s222),并且进入步骤s223的处理。[0064]在步骤s223中,控制部11判定是否存在能够高速化的loop语句卸载模式,并判定其是单个加速器还是多个加速器。如果没有能够高速化的loop语句卸载模式,则进入步骤s227,当控制部11从全部测定中选择最高性能的模式时,结束该选择处理。在此,在loop语句卸载模式b将30个for语句卸载给gpu、loop语句卸载模式c将50个for语句卸载给众核cpu的例子中,将仅loop语句卸载模式b能够高速化的情况记载为单个加速器,将loop语句卸载模式b、loop语句卸载模式c双方均能够高速化的情况记载为多个加速器。[0065]如果步骤s223的判定结果为能够高速化的单个加速器的loop语句的卸载模式,则控制部11制作除去的功能模块的卸载与单个加速器的loop语句的卸载的组合(s224)。然后,控制部11测定组合模式的性能(s226),当从全部测定中选择最高性能的模式时(s227),结束该选择处理。[0066]如果步骤s223的判定结果为能够高速化的多个加速器的loop语句的卸载模式,则控制部11制作除去的功能模块的卸载与多个加速器的loop语句的卸载的组合(s225)。例如,在能够使向gpu的功能模块卸载a、向gpu的loop语句卸载模式b和向众核cpu的loop语句卸载模式c能高速化的情况下,能够考虑a b c、a b、a c、b c的四种组合。然后,控制部11测定组合模式的性能(s226),当从全部测定中选择最高性能的模式时(s227),结束该选择处理。通过这些步骤s217~s227的处理,在移行目标在同一节点具有多种加速器的情况下,通过对多种加速器同时进行卸载,能够实现比利用单一加速器时更高速的卸载。[0067]《卸载试行的验证顺序》研究在多种移行目标的自动卸载。即使执行的处理相同,性能也会根据处理硬件的规格、处理内容(数据大小、循环次数等)而显著变化,因此,需要通过验证环境的实机进行测定。由于对于移行目标环境gpu、fpga、众核cpu这三种环境,存在通过loop语句和功能模块这两种方法进行的卸载,因此能够考虑合计3×2共6个卸载。[0068]首先,当比较功能模块的卸载和loop语句的卸载时,按照包括算法在内的处理内容进行卸载的功能模块的卸载能够高速化。[0069]接着,在不执行虚拟化等的情况下,在gpu、fpga和众核cpu中,众核cpu的中心价格范围比gpu高,fpga比它们更高。另外,众核cpu和gpu的一个模式的验证时间大致相同,fpga的一个模式的验证时间比众核cpu和gpu长。现状是,fpga的电路设定需要多个小时,性能测定需要花费时间。[0070]考虑到这些现状,提出以下方案:以面向众核cpu的功能模块的卸载、面向gpu的功能模块的卸载、面向fpga的功能模块的卸载、面向众核cpu的loop语句的卸载、面向gpu的loop语句的卸载、面向fpga的loop语句的卸载的顺序作为通过6个卸载进行验证顺序。以该顺序试行卸载,来搜索为高性能的模式。[0071]设前一半的三个卸载和后一半的三个卸载可以改变作为对象的代码。具体而言,在前一半的三个卸载中可卸载功能模块的情况下,后一半的三个loop语句卸载对已去除了能卸载的功能模块部分的代码进行试行。[0072]此外,在卸载试行中,用户能够指定目标性能和价格,如果在用户指定的范围内在6次试行的前方侧发现足够高速且低价的卸载模式,则也可以不进行之后的试行。这是因为,与loop语句卸载相比,功能模块卸载的能卸载的对象更少,但在能够卸载的情况下,能够实现更高速。[0073]此外,在自动卸载时,优选能够搜索尽可能廉价且在短时间内高速的模式。因此,将花费验证时间的fpga作为最后,如果在其之前的阶段中发现了充分满足用户要求的模式,则不验证面向fpga的卸载模式。[0074]虽然gpu和众核cpu在价格和验证时间方面没有大的差别,但与内存为不同空间且设备本身不同的gpu相比,众核cpu与通常cpu的差别更小。因此,验证顺序以众核cpu为前,如果在众核cpu中发现充分满足用户要求的模式,则不验证面向gpu的卸载模式。由于cpu和gpu的设备不同,因此即使能够正确地进行卸载,也存在由于舍入误差的不同等而计算结果不同的情况。[0075]《制作基于多个卸载的组合的高性能模式》在制作成为解的模式时也需要试行错误。在6个卸载试行中,在只有一个比通常cpu更快的情况下,可将该模式的可执行文件配置在商业环境中。[0076]此外,在可执行文件配置时,除了选择最高性能的模式以外,也可以根据所利用的设备的价格,选择性价比高的模式。此外,在验证中存在多个能够高速化的情况下,需要研究成为解的模式。[0077]在进行卸载时,虽然同一节点的gpu、fpga、众核cpu的卸载易于高速化,但在其他节点进行卸载的情况下,需要mpi等技术规范,另外,由于通信开销而难以高速化。另外,服务器一般是包含众核cpu和gpu的结构,或者是包含众核cpu和fpga的结构,但是少有包含众核cpu、gpu和fpga的结构。[0078]能够进行多个加速器的高速化的情况以能够在同一节点卸载为初始条件。同一节点的众核cpu和gpu可以是候选,但不同节点的gpu和fpga不能是候选。[0079]首先,研究功能模块卸载。在功能模块卸载中,采用以下规则。(a)在能够将相同功能模块卸载给多种加速器的情况下,选择高性能化的效果更高的卸载目标。(b)在能够将不同的功能模块卸载给不同种类的加速器且无法卸载给同一节点的情况下,将高性能化的效果更高的功能模块作为卸载对象。(c)在能够将不同的功能模块卸载给不同种类的加速器且能够卸载给同一节点的情况下,将这些功能模块作为卸载对象。[0080]作为规则(a)的例子,考虑当将在单核cpu中需要10秒的fft处理卸载给gpu时需要2秒,卸载给fpga时需要1秒,卸载给众核cpu时需要5秒的情况。在该情况下,可以选择fpga作为卸载目标的加速器。[0081]作为规则(b)的例子,考虑当将在单核cpu中需要20秒的随机数处理卸载给gpu时需要2秒,当将在单核cpu中需要100秒的fft处理卸载给fpga时需要1秒,当将在单核cpu中需要50秒的矩阵计算卸载给众核cpu时需要10秒的情况。在该情况下,可以选择将效果最好的fft处理卸载给fpga的模式。[0082]关于规则(c),将不同的功能模块卸载给同一节点的多个加速器来验证性能,将比单体卸载更快的情况作为解。作为规则(c)的例子,考虑当将在单核cpu中需要20秒的随机数处理卸载给gpu时需要20秒,当将在单核cpu中需要10秒的fft处理卸载给fpga时需要1秒,当将在单核cpu中需要50秒的矩阵计算卸载给众核cpu时需要10秒的情况。而且,假设存在搭载了gpu和众核cpu的双方的节点。在该情况下,在同一节点上,随机数处理可选择卸载给gpu的模式,矩阵计算可选择卸载给众核cpu的模式。[0083]在进行卸载给同一节点上的多种加速器的情况下,也不一定通过同时卸载给多种加速器就可靠地实现高速化。因此,卸载服务器1同时卸载给多种加速器来验证性能,确认比以单体进行卸载更快。据此,对于多种加速器混合的环境,能够搜索可使功能模块高效地加速化的模式。[0084]此外,可以将利用频率高的处理即功能模块以高优先级进行卸载。在该情况下,在先进行的6个卸载验证中,在性能测定的样本试验中,采用以优先级高的处理为中心进行的样本试验即可。[0085]图4a是将功能模块卸载给一个节点的处理的流程图。卸载服务器1的控制部11判定是否能够将相同的功能模块卸载给多种加速器(s50)。如果能够将相同的功能模块卸载给多种加速器(是),则控制部11选择高性能化的效果更高的卸载目标(s51),结束图4a的处理。如果无法将相同的功能模块卸载给多种加速器(否),则控制部11的处理进入步骤s52。[0086]在步骤s52中,控制部11判定不同的功能模块是否能够卸载给不同种类的加速器。如果能够将不同的功能模块卸载给不同种类的加速器(是),则控制部11将这些功能模块作为卸载对象,结束图4a的处理。如果无法将不同的功能模块卸载给不同种类的加速器(否),则控制部11将高性能化的效果更高的功能模块作为卸载对象(s54),结束图4a的处理。[0087]接着,研究loop语句的卸载。在能够进行功能模块卸载的情况下,对除了能卸载的功能模块部分以外的代码进行loop语句的卸载。在loop语句卸载中的高速化为对在功能模块卸载中的卸载目标和其他节点的卸载,且高性能化的效果也小的情况下,不进行loop语句卸载。[0088]作为例子,在单核cpu中卸载需要100秒的fft处理而在fpga中能够1秒处理的情况下,即使知道能够将剩余的loop语句卸载给gpu时20秒被高速化为5秒,由于高性能化效果小,因此对于其他节点的gpu不进行卸载。[0089]loop语句的卸载采用以下规则。(d)在能够将相同loop语句卸载给多种加速器的情况下,选择高性能效果更高的卸载目标。[0090](e)在能够将不同的loop语句卸载给不同种类的加速器且无法卸载给同一节点的情况下,将高性能化的效果更高的loop语句群作为卸载对象。[0091](f)在能够将不同的loop语句卸载给不同种类的加速器且能够卸载给同一节点的情况下,优先卸载高性能化效果高的loop语句,并且将未被卸载的剩余的loop语句群卸载给高性能化效果低的卸载目标。[0092]作为规则(d)的例子,考虑当将在单核cpu中需要20秒的abcde的loop语句卸载给gpu时需要2秒,卸载给fpga需要1秒,卸载给众核cpu需要5秒的情况。在该情况下,可以选择将abcde的loop语句卸载给fpga的模式。[0093]作为规则(e)的例子,考虑当将在单核cpu中需要50秒的abc的loop语句卸载给gpu时需要2秒,当将在单核cpu中需要100秒的bcd的循环卸载给fpga时需要1秒,当将在单核cpu中需要50秒的cde的loop语句卸载给众核cpu时需要10秒的情况。在该情况下,可以选择将bcd的loop语句卸载给fpga的模式。[0094]关于规则(f),将不同的循环卸载给同一节点的多种加速器来验证性能,在比单体高速的情况下,选择该模式作为解。然而,对在同一文件中被定义的多个loop语句进行限制,以使其不能被其他的加速器分开处理。这是为了避免由于加速器将关联度较深的同一文件上多个loop语句分开而导致复杂度增加。[0095]作为规则(f)的例子,考虑假设当将在单核cpu中需要50秒的abc的loop语句卸载给gpu时需要2秒,当将在单核cpu中需要10秒的bcd的loop语句卸载给fpga时需要1秒,当将在单核cpu中需要50秒的cde的loop语句卸载给众核cpu时需要10秒,且存在搭载了gpu和众核cpu的双方的节点的情况。在该情况下,在同一节点上,试行abc的loop语句卸载给gpu,de的loop语句卸载给众核cpu。[0096]图4b是将loop语句卸载给一个节点的处理的流程图。卸载服务器1的控制部11判定是否能够将相同的loop语句卸载给多种加速器(s60)。如果能够将相同的loop语句卸载给多种加速器(是),则控制部11选择高性能化的效果更高的卸载目标(s61),结束图4b的处理。如果无法将相同的loop语句卸载给多种加速器(否),则控制部11的处理进入步骤s62。[0097]在步骤s62,控制部11判定不同的loop语句是否能够卸载给不同种类的加速器。如果能够将不同的loop语句卸载给不同种类的加速器(是),则控制部11将这些loop语句作为卸载对象,结束图4b的处理。如果无法将不同的loop语句卸载给不同种类的加速器(否),则控制部11将高性能化的效果更高的loop语句作为卸载对象(s64),结束图4b的处理。[0098]在卸载给同一节点上的多种加速器的情况下,也不一定能可靠地实现高速化,因此,在实际卸载后进行性能验证,确认比以单体进行卸载更快。据此,对于多种加速器混合的环境,能够搜索能高效地使loop语句高速化的模式。[0099]如此,在6个性能测定中,以能够高速化的模式为基础,制作成为最高性能的模式。对于同一节点,虽然也可以卸载给多个加速器,但在组合多个卸载模式时,通过利用性能测定来确认该组合是否能够比单体的情况更高性能化,来制作最高性能的模式,因此需要多次测定。[0100]图5a和图5b是将功能模块向加速器卸载的模式的选择处理的流程图。该选择处理使用非专利文献4的方法。首先,代码分析部112进行c/c 源代码的卸载分析(s30)。具体而言,代码分析部112使用clang等的语法分析工具来调用代码中包括的库、分析功能处理。[0101]卸载范围提取部114a检测该源代码的外部库调用(s31),从代码模式数据库133中获取将库名作为键能够进行替换的加速器库或加速器用ip核(s32)。在此,加速器是指,众核cpu、gpu和fpga中的任一个。具体而言,卸载范围提取部114a将被调用的库作为键,从登记在代码模式数据库133中的记录中获取可高速化的可执行文件、opencl等。[0102]在此,卸载范围提取部114a针对所掌握的外部库调用,以被调用的库名为键,与代码模式数据库133进行对照,由此获取可替换的加速器库或加速器用ip核。在此,加速器库是指,面向众核cpu、gpu的可执行文件。加速器用ip核是指opencl等。[0103]此外,对于功能模块,是否存在高速化的库、ip核的搜索除了库等的名称一致之外,还通过相似性检测工具进行检测。相似性检测工具是指,deckard等用于检测拷贝码或拷贝后变更的代码的在软件工程中使用的工具。相似性检测工具观察abstractsyntaxtree相似性等,判定代码的相似性,在由cpu进行计算的情况下,能够检测记述相同的处理、拷贝其他人的参照代码并进行变更的情况等。[0104]处理模式制作部115按照替换目标的加速器,将源代码的替换源的处理记述,替换为面向众核cpu、gpu的库或面向fpga的ip核的处理记述(s33)。而且,处理模式制作部115将替换的加速器库或加速器ip核的处理记述作为卸载对象的功能模块卸载给加速器(s34)。此时,由于不知道能够卸载的处理实际上是否会实现高速化,或者成本效果是否充分,因此通过验证环境下的性能测定来试行卸载和不卸载,由此自动提取更快的卸载模式。[0105]处理模式制作部115记述用于调用加速器库或加速器ip核的接口处理(s35)。该接口处理例如是针对fpga的openclapi等。接着,可执行文件制作部117编译已制作的模式(s36)。性能测定部116在验证环境下对已制作的模式进行性能测定(s37)。这是第一次性能测定。[0106]在第一次性能测定之后,可执行文件制作部117制作在第一次测定时能够高速化的模式的组合模式(s38),并且编译已制作的组合模式(s39)。然后,性能测定部116在验证环境下对已制作的组合模式进行性能测定(s40)。这是第二次性能测定。[0107]在第二次性能测定之后,正式环境配置部118在第一次和第二次测定中选择最高性能的模式(s41),结束本流程的处理。[0108]如在非专利文献4中所评价的那样,与各个loop语句的卸载相比,面向以包含多个loop语句的功能模块单位进行处理的加速器,已调校的功能模块的卸载的高速化程度高。[0109]《安装》卸载服务器1通过代码解析来掌握被调用的库或被定义的类、结构体等程序结构。[0110]接着,卸载服务器1进行能够使被调用的库高速化的gpu用库、fpga用ip核等的检测。卸载服务器1以被调用的库为键,从登记在代码模式数据库133中的记录中获取可高速化的可执行文件、opencl等。当检测到能够高速化的替换功能时,卸载服务器1制作该可执行文件。[0111]在众核cpu、gpu用库的情况下,删除原来的部分进行替换记述,以调用替换用库(cuda库等)。在fpga用ip核的情况下,在从主机代码中删除原来的部分之后,用内核代码替换记述获得的opencl代码。当完成了替换记述后,分别为,面向众核cpu用gcc进行编译、面向gpu用pgi编译器进行编译、面向fpga用intelaccelerationstack进行编译。[0112]虽然记载了库调用的情况,但在使用相似性检测的情况下也并行地执行处理。使用deckard进行检测到的类、结构体等的部分代码和登记在db中的比较用代码之间的相似性检测,发现相似性超过阈值的功能模块、相应的gpu用库、fpga用ip核等。特别是,在与替换源的代码进行替换的库、ip核的自变量、返回值、类型等接口不同的情况下,卸载服务器1向委托卸载的用户确认是否可以按照替换目标库、ip核来变更接口,在确认后制作可执行用文件。[0113]在此,卸载服务器1制作能够由验证环境的gpu、fpga进行性能测定的可执行用文件。在功能模块卸载中,卸载服务器1逐个对替换功能模块测定执行和不执行卸载的性能,来确认是否能够高速化。在6个卸载试行中,在比通常cpu速度高的模式仅为一个的情况下选择该模式,但在为多个时通过以下的逻辑来制作成为解的模式。[0114][自动卸载动作]本实施方式的卸载服务器1是作为环境适配软件系统的要素技术,适用于将用户应用逻辑自动卸载给加速器的技术的例子。[0115]图6是表示卸载服务器1的自动卸载处理的图。如图6所示,卸载服务器1被适用于环境适配软件系统的要素技术。卸载服务器1具有控制部11、试验案例数据库131、中间语言文件132和验证设备14。卸载服务器1获取用户所使用的源代码130。[0116]用户利用资源15。资源15例如是装置151、具有cpu和gpu的装置152、具有cpu和fpga的装置153、具有cpu的装置154。卸载服务器1将功能处理自动卸载给具有cpu和gpu的装置152、具有cpu和fpga的装置153的加速器。[0117]下面,参照图6的步骤编号来说明各部的动作。《步骤s11:指定源代码》在步骤s11中,代码指定部111(参照图1)确定向用户提供的服务的处理功能(图像分析等)。具体而言,代码指定部111指定所输入的源代码。[0118]《步骤s12:分析源代码》在步骤s12中,代码分析部112(参照图1)分析处理功能的源代码,掌握loop语句、fft库调用等的结构。[0119]《步骤s13:提取卸载范围》在步骤s13中,处理指定部114(参照图1)确定应用的源代码中所包含的loop语句,针对各loop语句,指定加速器中的并行处理指定语句进行编译。具体而言,卸载范围提取部114a(参照图1)提取loop语句、fft等能向gpu和fpga卸载的范围。[0120]《步骤s14:输出中间语言文件》在步骤s14中,处理指定部114(参照图1)通过中间语言文件输出部114b输出中间语言文件132。中间语言的输出不是一次就结束,为了搜索合适的卸载区域、且为了通过试行来优化执行而重复进行中间语言的输出。[0121]《步骤s15:编译错误时的处理》在步骤s15中,处理模式制作部115(参照图1)制作并行处理模式,该并行处理模式是指,将出现编译错误的loop语句排除在卸载对象外,并且指定是否对没有出现编译错误的loop语句进行并行处理。[0122]《步骤s21:配置可执行文件》在步骤s21中,可执行文件配置部116a(参照图1)在具有众核cpu、gpu和fpga的验证设备14中部署由中间语言导出的可执行文件。[0123]《步骤s22:性能的测定》在步骤s22中,性能测定部116(参照图1)执行所配置的文件,测定卸载时的性能。为了使卸载的区域更合适,该性能测定结果被返回处理模式制作部115,处理模式制作部115制作另一卸载模式。然后,性能测定部116测定另一卸载模式的性能(参照图6的附图标记e)。[0124]如图6的箭头e所示,控制部11反复执行从步骤s12至步骤s22的处理。[0125]总结控制部11的自动卸载功能如下。即,处理指定部114确定源代码的loop语句,对各loop语句指定并行处理指定语句且进行编译。然后,处理模式制作部115制作并行处理模式,该并行处理模式是指,将出现编译错误的loop语句排除在卸载对象外,并且指定对没有出现编译错误的loop语句是否进行并行处理。然后,性能测定部116对该并行处理模式的源代码进行编译,且配置于验证设备14,在验证设备14中执行性能测定处理。可执行文件制作部117根据重复规定次数的性能测定结果,从多种并行处理模式中选择最高处理性能的模式,对选择模式进行编译来制作可执行文件。[0126]《步骤s23:向正式环境的配置》在步骤s23中,正式环境配置部118确定指定了最终的卸载区域的模式,且部署在面向用户的正式环境中。[0127]《步骤s24:性能测定试验和执行》在步骤s24中,在配置了可执行文件之后,为了向用户示出性能,性能测定试验提取执行部119从试验案例数据库131中提取性能试验项目,自动执行所提取出的性能试验。[0128]《步骤s25:向用户提供价格和性能等》在步骤s25中,用户提供部120向用户提示基于性能试验结果的价格和性能等信息。用户根据所提示的价格和性能等信息来判断服务的付费使用的开始。[0129]假设上述步骤s11~步骤s25在用户使用服务的后台进行,例如在暂时使用的第一天的期间进行等。[0130]如上所述,卸载服务器1的控制部11在适用于环境适配软件系统的要素技术的情况下,为了进行功能处理的卸载,从用户所使用的应用程序的源代码中提取卸载的区域且输出中间语言(s11~s15)。控制部11将由中间语言导出的可执行文件配置在验证设备14中并执行,且验证卸载效果(s21~s22)。在重复进行验证,确定了适宜的卸载区域之后,控制部11在实际向用户提供的正式环境中部署可执行文件,作为服务来提供(s23~s25)。[0131][使用遗传算法的loop语句自动卸载]向gpu、众核cpu的loop语句自动卸载是用于重复图6的步骤s12~步骤s22、最终得到在步骤s23中部署的卸载代码的处理。[0132]gpu是一般不保证潜伏(latency),但适合通过并行处理提高生产量的设备。面向gpu的应用程序多种各样。数据的加密处理、用于摄像头影像分析的图像处理、用于大量传感器数据分析的机械学习处理等具有代表性,这些处理多为重复性处理。因此,卸载服务器1通过将应用程序的源代码中包含的loop语句自动向gpu卸载来实现高速化。[0133]但是,如现有技术所记载的那样,高速化需要适宜的并行处理。尤其是,在使用gpu的情况下,由于cpu与gpu之间的转储,大多数情况下如果数据量小或循环次数少则性能并不好。另外,根据存储器数据传输的时间等,有时能并行高速化的各个loop语句(循环语句)的组合不是最快的。例如,在10个loop语句(循环语句)中第1个、第5个、第10个这3个与cpu相比能够高速化的情况下,第1个、第5个、第10个这3个的组合不一定最快等。[0134]为了指定适宜的并行区域,有时试行使用pgi编译器,对loop语句能否并行进行试错来优化。但是,试错花费大量的工作量,当作为服务来提供时,有导致用户使用开始的延迟,成本也提高的问题。[0135]因此,在本实施方式中,从没有假想并行化的通用程序中自动提取适宜的卸载区域。因此,卸载服务器1按照众核cpu→gpu→fpga的顺序检查功能模块的卸载,然后按照众核cpu→gpu→fpga的顺序检查loop语句的卸载。通过在loop语句之前检查卸载效果高的功能模块,并且按照验证成本低的顺序即众核cpu→gpu→fpga的顺序进行检查卸载效果高的功能模块,能够高效地搜索可高速化的模式。[0136][基于单纯遗传算法的控制部11的搜索样子]图7是表示基于卸载服务器的单纯遗传算法的控制部11的搜索样子的图。遗传算法是模仿生物的进化过程的组合优化方法之一。遗传算法的流程图为,初始化→评价→选择→交叉→突然变异→结束判定。[0137]在本实施方式中,在遗传算法中,使用使处理简化的简化遗传算法。简化遗传算法是基因仅为1、0,轮盘赌选择、一点交叉、突然变异使一个位置的基因的值变为与其相反的值等的、简化的遗传算法。[0138]《初始化》在初始化中,检查源代码的全部loop语句能否并行之后,将能并行的loop语句映射到基因序列。在进行gpu处理的情况下设为1,在不进行gpu处理的情况下设为0。对基因准备指定的个体数m,对1个loop语句随机地进行1、0的分配。[0139]具体而言,控制部11(参照图1)获取用户所使用的源代码130(参照图6),根据源代码130的代码模式141检查loop语句能否并行。如图8所示,在从代码模式141d中检查到3个loop语句的情况下,对各loop语句随机地分配1位,在此对3个loop语句随机地分配3位的1或0。例如,在由单核cpu进行处理的情况下设为0,在输出给众核gpu的情况下设为1。但是,在该阶段中随机地分配1或0。相当于基因长度的代码为3位,3位的基因长度的代码为23=8模式,例如为100、110、…。另外,在图7中,示出代码模式141中的圆形标记(○标记)作为代码的样子。[0140]《评价》在步骤s300的评价中,进行部署和性能的测定。即,性能测定部116(参照图1)对相当于基因的代码进行编译且部署在验证设备14中来执行。性能测定部116进行标准测试性能测定。提高性能好的模式(并行处理模式)的基因的适合度。[0141]《选择》在步骤s301的选择中,根据适合度,选择高性能代码模式。性能测定部116(参照图1)根据适合度,仅选择指定的个体数的高适合度的基因。在本实施方式中,进行与适合度对应的轮盘赌选择和最高适合度基因的精英选择。在图7中,示出所选择的代码模式142中的圆形标记(○标记)减少到3个作为搜索样子。[0142]《交叉》在交叉中,按一定的交叉率pc,在所选择的个体间在某一点更换一部分基因,制作子个体。使轮盘赌选择的某一模式(并行处理模式)和另一模式的基因交叉。一点交叉的位置是任意的,例如在上述3位的代码中的第2位进行交叉。[0143]《突然变异》在突然变异中,按一定的突然变异率pm,将个体基因的各值从0变为1或者从1变为0。另外,为了避免局部解而导入突然变异。另外,也可以是为了削减运算量而不进行突然变异的方式。然后,如步骤s302所示那样,将这些实施了交叉、突然变异的各代码作为下一代的代码。[0144]《结束判定》生成交叉和突然变异后的下一代代码模式。在结束判定中,重复进行指定的代数t次之后结束处理,将最高适合度的基因作为解。例如,进行性能测定,选择三个处理速度快的个体、例如基因110、010、001的个体。下一代通过遗传算法将这三个进行重组,例如创建新的模式(并行处理模式)011(一例)。此时,将从0变为1等的突然变异任意地插入重组后的模式中。重复上述操作,找到处理速度最快的模式。确定指定代(例如,20代)等,将最后一代中剩余的模式作为最后的解。[0145]《部署(配置)》以相当于最高适合度的基因的、最高处理性能的并行处理模式,重新部署在正式环境中,且提供给用户。[0146]《补充说明》对存在相当数量的无法向gpu卸载的loop语句(loop语句;循环语句)的情况进行说明。例如,尽管loop语句有200个,但能向gpu卸载的loop语句为30个左右。在此,排除错误的loop语句,对这30个进行遗传算法。[0147]在openacc中有编译器,该编译器提取并执行由指令“#pragmaacckernels”指定且面向gpu的字节码,由此能够进行gpu卸载。通过在该“#pragma”中写入loop语句的命令,能够判定该loop语句在gpu中是否运转。[0148]例如在使用了c/c 的情况下,分析c/c 的代码,检测loop语句。当检测出loop语句时,在openacc中使用作为并行处理的文法的“#pragmaacckernels”对loop语句进行写入。详细而言,在空的“#pragmaacckernels”一个个地加入loop语句进行编译,如果出现错误,则该loop语句本身无法进行gpu处理,因此将其排除。这样检测剩余的loop语句。并且,将没有出现错误的loop语句作为长度(基因长度)。如果没有错误的loop语句为5个,则基因长度为5,如果没有错误的loop语句为10,则基因长度为10。此外,无法进行并行处理的是将以前的处理用于下一次的处理这样的与数据有依存关系的情况。以上是准备阶段。接着进行遗传算法处理。[0149]得到了具有与loop语句的数量对应的基因长度的代码模式。首先随机地分配并行处理的模式10010、01001、00101、…等。进行遗传算法处理,且进行编译。此时,尽管是能卸载的loop语句,但有时会出现错误。其是loop语句为分层结构(指定任一个均能进行gpu处理)的情况。在该情况下,可以留下错误的loop语句。具体而言,有使其成为处理时间变长的形态而使其超时的方法。[0150]在验证设备14进行部署,进行标准测试,例如如果是图像处理则通过该图像处理进行标准测试,其处理时间越短,则评价为适配度越高。例如,设为处理时间的倒数,设处理时间花费10秒的个体的适配度为1。设处理时间花费100秒的个体的适配度为0.1。设处理时间花费1秒的个体的适配度为10。[0151]卸载服务器1选择适配度高的loop语句。卸载服务器1例如从10个个体中选择3~5个,进行重组来创作新的代码模式。在制作途中,有时制作出与以前相同的代码模式。在该情况下,无需进行相同的标准测试,因此卸载服务器1使用与以前相同适配度的数据。本实施方式的卸载服务器1,将代码模式和其处理时间存储在存储部13中。[0152]以上,说明了基于单纯遗传算法的控制部11的搜索样子。[0153]图8是表示loop语句向众核cpu的基因序列映射的图。代码模式141d包含3个loop语句。在此,对各loop语句分配1位二进制数,对3个loop语句随机分配3位的1或0。[0154]在代码模式141d的最初forloop语句中,被赋予了指令“#pragmaompparallelfor”。此时,编译最初forloop语句以卸载给众核。此外,在代码模式141d的左侧示出代码模式141d的基因序列100。[0155]图9a和图9b是将loop语句向众核cpu卸载的模式的选择处理的流程图。首先,代码分析部112解析c/c 源代码的loop语句(s90)。处理指定部114确定c/c 源代码的loop语句、参照关系(s91)。[0156]处理指定部114使标准测试工具工作以掌握各loop语句的循环次数,并且在用阈值分配各循环时(s92),检查各loop语句的并行处理的可能性(s93)。[0157]此外,在gpu的自动卸载中使用的pgi编译器,在不能并行化时编译器输出错误。但是,gcc等的openmp编译器视为上述的错误为程序员的责任。因此,为了实现自动化,利用openmp指示句进行的处理仅简单化为是否利用众核cpu对loop语句进行并行处理,并且在性能测定时还进行并行处理后时的最终计算结果是否正确的检查,从而成为在进化计算中仅留下得到正确的计算结果的模式的结构。[0158]接着,处理指定部114对具有并行处理可能性的loop语句的数量进行计数而作为基因长度(s94),作为初始值,准备指定个体数的基因序列(s95)。在此,处理指定部114仅制作规定个体数的随机分配0和1的基因序列。[0159]处理指定部114将c/c 源代码映射到基因上,准备指定个体数的模式(s96)。具体而言,处理指定部114根据所准备的基因序列,在基因的值为1的情况下,将指定并行处理的指令插入c/c 代码(例如参照图8的#pragma指令)。[0160]控制部11将步骤s100~s108的处理重复进行指定代数的次数。另外,在重复进行指定代数的次数的过程中,进一步对步骤s101~s104的处理重复进行指定个体数。即,在重复进行指定代数的次数的过程中,以嵌套状态进行指定个体数的重复处理。[0161]在重复进行指定个体数的过程中,处理模式制作部115(参照图1),利用gcc编译器编译按照基因模式而指令指定的c/c 源代码、即各卸载模式(s102)。即,处理模式制作部115使用在具有众核cpu的验证设备14上的gcc编译器来编译所制作的c/c 代码。在此,在对嵌套的多个loop语句指定并行处理等情况下,有时会成为编译错误。在该情况下,与性能测定时的处理时间超时的情况同样地进行处理。[0162]性能测定部116(参照图1)将通过编译卸载模式而获得的可执行文件、即编译的卸载模式部署在搭载有众核cpu的验证设备14上(s103),执行被配置的可执行文件,并且测定卸载时的标准测试性能(s104)。[0163]在此,在中间代中,对与以前相同模式的基因不进行测定,而使用相同的值。即,在遗传算法处理中,在产生与以前相同的模式的基因的情况下,不对该个体进行编译或性能测定,而使用与以前相同的测定值。[0164]在步骤s105中,如果指定个体数的重复没有完成,则控制部11返回步骤s101的处理,如果重复了所有指定个体数,则进入步骤s106。[0165]在步骤s106中,可执行文件制作部117(参照图1)以越是处理时间短的个体则适合度越高的方式进行评价,选择性能高的个体。可执行文件制作部117(参照图1)评价各个个体的计算结果与单核cpu的计算结果的差,选择容许范围内的个体(s107)。可执行文件制作部117在性能测定时,将最终计算结果与不进行并行处理时相同的结果、与利用通常cpu处理原始码的情况进行比较,如果差分大到不能允许的程度时,将该模式的适配度作为0,在下一代中不选择。可执行文件制成部117在性能测定时还进行并行处理时的最终计算结果是否正确的检查,从而能够在进化计算中缩减到得出正确计算结果的模式。[0166]可执行文件制作部117对所选择的个体进行交叉、突然变异的处理,制作下一代的个体(s108)。这是为了对下一代的个体进行编译、性能测定、适合度设定、选择、交叉、突然变异处理。[0167]即,针对全部个体,在测定了标准测试性能之后,可执行文件制作部117按照标准测试处理时间设定各基因序列的适合度。可执行文件制作部117按照设定的适合度,选择剩下的个体。然后,可执行文件制作部117对所选择的个体进行交叉、突然变异、直接拷贝处理的遗传算法处理,来制作下一代的个体群。[0168]在步骤s109中,如果未完成重复进行指定代数的次数,则控制部11返回步骤s100的处理,如果重复了所有指定代数的次数,则进入步骤s110。[0169]在步骤s110,可执行文件制作部117在完成指定代数的次数的遗传算法处理之后,当将与最高性能的基因序列相对应的c/c 代码(最高性能的并行处理模式)作为解时,结束图9b的处理。通过这种方式,即使众核cpu的环境是移行目标,也能够搜索可高效地使loop语句高速化的模式。[0170]与gpu同样,众核cpu也利用多个计算核,通过并行化处理来进行高速化。与gpu的不同之处在于,在众核cpu的情况下,存储器是共用的,因此不需要考虑在向gpu卸载时经常成为问题的cpu与gpu的存储器之间的数据传输所导致的开销。另外,在众核cpu中的程序处理的并行化中,频繁地利用openmp规格。openmp是以“#pragmaompparallelfor”等指示句对程序指定并行处理等的规格。openmp中的处理并行化是openmp程序员负责,在将无法并行化的处理并行化的情况下,编译器不进行错误输出,而是错误地输出计算结果。[0171]有鉴于此,在本实施方式中,loop语句的面向众核cpu的自动卸载采用如下的进化计算方法:在openmp中制作多个用“#pragma”指定可否进行循环的并行处理的模式,在验证环境下反复进行实际的性能测定,从而逐渐高速化。[0172]《安装》卸载服务器1解析c/c 源代码,发现loop语句,并且掌握在loop语句内使用的变量数据、该变量的处理等的程序结构。[0173]由于需要排除不能进行并行处理本身的loop语句,因此,卸载服务器1针对各loop语句,试行通过gpu进行处理的指令插入,将出现错误的loop语句排除在遗传算法的对象之外。在此,没有出现错误的loop语句的数量是基因长度。[0174]接着,作为初始值,卸载服务器1准备指定个体数的基因序列。基因的各值随机地分配0和1来制作。卸载服务器1按照所准备的基因序列,在基因的值为1的情况下,将指定gpu、众核cpu处理的指令插入c/c 代码。[0175]卸载服务器1通过gcc编译被插入了指令的c/c 代码,并部署编译出的可执行文件来测定性能。在性能测定中,卸载服务器1检查在使用处理时间和例如pgi编译器的pcast功能进行并行处理的情况下的计算结果与原始代码的差分是否很大,并且在差分在允许范围之外的情况下,将适配度设为0。[0176]卸载服务器1针对全部个体,在性能测定后,按照处理时间来设定各个个体的适合度。按照所设定的适合度,选择剩余的个体。针对所选择的个体,进行基于交叉、突然变异、直接拷贝的遗传算法处理,制作下一代的个体群。[0177]卸载服务器1对下一代的个体进一步进行指示插入、编译、性能测定、适合度设定、选择、交叉、突然变异处理,并重复指定其的代数。在指定代数的次数的遗传算法处理结束后,卸载服务器1将相当于最高性能的基因序列的带有指令的c/c 代码作为解。[0178]图10是表示loop语句向gpu的基因序列映射的图。将“#pragmaacckernels”添加到代码模式141e的最初forloop语句。此时,最初forloop语句被编译以卸载给gpu。此外,代码模式141e的基因序列100显示在代码模式141e的左侧。[0179]图11a和图11b是将loop语句向gpu卸载的模式的选择处理的流程图。该选择处理使用非专利文献2的方法。卸载服务器1使用面向c/c 的openacc编译器进行以下处理。[0180]代码分析部112(参照图1)通过对c/c 源代码的代码解析来分析loop语句(s120)。然后,当确定c/c 源代码的loop语句及其参照关系时(s121),处理指定部114(参照图1)使标准测试工具动作,掌握各loop语句的循环次数,通过阈值进行分配(s122)。然后,处理指定部114检查各loop语句的并行处理可能性(s123)。[0181]接着,控制部11将步骤s124~s127的处理,重复loop语句的数量。处理指定部114对各loop语句指定并行处理并进行编译(s125)。如图10所示,openacc中的并行处理的指定为“#pragmaacckernels”。当编译错误时,处理指定部114删除并行处理的指定,并将该loop语句从卸载对象中排除(s126)。然后,如果已经对所有loop语句重复了处理,则控制部11进入步骤s128。[0182]处理指定部114对没有出现编译错误的loop语句的数量进行计数,作为基因长度(s128),准备指定个体数的基因序列。在此,制作将0和1作为初始值随机地分配的指定个体数的基因序列。接着,处理指定部114将c/c 源代码映射到基因,准备指定个体数的模式(s129)。具体而言,处理指定部114按照所准备的基因序列,将在基因的值为1的情况下指定并行处理的指令插入c/c 代码(例如,参照图10中的#pragma指令)。[0183]控制部11将步骤s130~s137的处理重复进行指定代数的次数。另外,在重复进行指定代数的次数的过程中,进一步对步骤s131~s134的处理重复进行指定个体数的次数。即,在重复进行指定代数的次数的过程中,以嵌套状态进行指定个体数的次数的重复处理。[0184]在指定个体数的次数的重复处理中,处理模式制作部115(参照图1)通过pgi编译器对按照基因模式指定了指令的c/c 源代码、即各卸载模式进行编译(s132)。即,处理模式制作部115通过具有gpu的验证设备14上的pgi编译器对所制作的c/c 代码进行编译。在此,在并行指定多个嵌套loop语句的情况下等,有时出现编译错误。在该情况下,与超出性能测定时的处理时间的情况同样地对待。[0185]性能测定部116(参照图1)在搭载有cpu和gpu的验证设备14上部署通过编译卸载模式而获得的可执行文件、即编译的卸载模式(s133),执行配置的可执行文件,并且测定卸载时的标准测试性能(s134)。[0186]在此,在中间代中,对与以前相同模式的基因不进行测定,而使用相同的值。即,在遗传算法处理中,在产生与以前相同的模式的基因的情况下,不对该个体进行编译或性能测定,而使用与以前相同的测定值。[0187]在步骤s135中,如果没有完成指定个体数的重复,则控制部11返回步骤s131的处理,如果完成了所有指定个体数的重复,则进入步骤s136。[0188]在步骤s136中,可执行文件制作部117(参照图1)以越是处理时间短的个体则适合度越高的方式进行评价,选择性能高的个体。然后,可执行文件制作部117对所选择的个体进行交叉、突然变异的处理,制作下一代的个体(s137)。这是因为,对下一代的个体进行编译、性能测定、适合度设定、选择、交叉、突然变异处理。即,针对全部个体,在测定了标准测试性能之后,可执行文件制作部117按照标准测试处理时间来设定各基因序列的适合度。而且,可执行文件制作部117按照设定的适合度选择剩余的个体。并且,可执行文件制作部117对所选择的个体进行交叉、突然变异、直接拷贝的遗传算法处理,制作下一代的个体群。[0189]在步骤s138中,如果没有完成指定代数的次数的重复,则控制部11返回步骤s130的处理,如果完成了所有指定代数的次数的重复,则进入步骤s139。[0190]在指定代数的次数的遗传算法处理结束后的步骤s139中,执行文件制作部117将相当于最高性能的基因序列的c/c 代码(最高性能的并行处理模式)作为解,结束图11b的处理。[0191]作为基本技术问题,编译器能够发现该loop语句无法在gpu中进行并行处理的限制,但难以发现该loop语句适合gpu的并行处理的适合性。[0192]一般而言,循环次数多等的循环被认为适于gpu卸载,但在没有实测的情况下难以预测实际上卸载给gpu会成为何种程度的性能。因此,通过手动作业进行将该循环卸载给gpu的指示,频繁地进行性能测定的试行错误。[0193]在非专利文献2中提出了通过作为进化计算方法之一的遗传算法自动发现卸载给gpu的合适的loop语句。根据没有设想gpu处理的面向通常cpu的通用程序,最初进行能并行loop语句的检查,接着对能并行loop语句组,将gpu执行时设为1并将cpu执行时设为0来进行基因化,在验证环境下反复进行性能验证来搜索适当的区域。[0194]在集中到能并行loop语句的基础上,以基因部分的形式来保持和重组能高速化的并行处理模式,据此,从能取得的庞大的并行处理模式中高效地搜索可高速化的模式。[0195]在非专利文献2中,除了适当提取loop语句以外,关于在嵌套loop语句中利用的变量提出了如下方案:在将loop语句卸载给gpu时,若在嵌套的下位进行cpu-gpu传输,则在每个下位的循环进行传输而效率不高,因此对于即使在上位进行cpu-gpu传输也没有问题的变量,在上位一并进行传输。对于loop语句的gpu自动卸载,通过使用进化计算方法的最优化和减少cpu-gpu传输,能够自动进行卸载。[0196]图12a和图12b是将loop语句向fpga卸载的模式的选择处理的流程图。该选择处理使用非专利文献3的方法。首先,代码分析部112分析要卸载的源代码(s150),并且按照源代码的语言来分析loop语句和变量的信息。[0197]然后,卸载范围提取部114a在确定源代码的loop语句和参照关系后(s151),针对所确定的loop语句,缩减是否试行fpga卸载的候选范围。算术强度对于loop语句是否具有卸载效果为一个指标。[0198]卸载范围提取部114a使用算术强度分析工具来计算应用的loop语句的算术强度(s152)。算术强度是当计算数量多时增加,当访问数量多时减少的指标。对于处理器而言,算术强度高的处理是重的处理。因此,卸载范围提取部114a使用算术强度分析工具来分析loop语句的算术强度,并将算术强度高的loop语句缩减为卸载候选。[0199]即使是高算术强度的loop语句,在fpga中处理该loop语句时也存在过度消耗fpga资源的问题。因此,在此叙述fpga处理高算术强度loop语句时的资源量的计算。[0200]作为在fpga中进行编译时的处理,从opencl等高级语言转换为硬件记述的hdl等的级别,并基于此进行实际的配线处理等。此时,配线处理等需要很多时间,但到hdl等的中间状态的阶段为止的时间仅以分钟为单位。即使在hdl等的中间状态的阶段,也知道在fpga中利用的flipflop、lookuptable等资源。因此,如果观察hdl等的中间状态的阶段,即使编译没有结束,也能够在短时间内知道所利用的资源量。[0201]因此,在本实施方式中,处理模式制作部115将对象loop语句进行opencl等高位语言化,首先计算资源量。此外,由于确定了在卸载loop语句时的算术强度和资源量,因此,将算术强度/资源量或算术强度×循环次数/资源量作为资源效率。然后,将高资源效率的loop语句进一步缩减为卸载候选。[0202]返回图12a的流程继续进行说明。处理模式制作部115使用gcov、gprof等分析工具(profilingtool)来测定应用的loop语句的循环次数(s153),并且从loop语句中以高算术强度缩减高循环次数的loop语句(s154)。[0203]处理模式制作部115制作用于将被缩减后的各loop语句卸载给fpga的opencl(s155)。[0204]在此,补充说明loop语句的opencl化。即,在通过opencl等将loop语句高位语言化时,需要2个处理。一个处理是,根据opencl等的高级语言语法将cpu处理程序分割到内核(fpga)和主机(cpu)。另一个处理是,在分割时加入用于高速化的技法。一般而言,为了使用fpga进行高速化,存在本地高速缓存、流处理、多个实例化、loop语句的展开处理、嵌套loop语句的集合、存储器交叉处理等。根据loop语句的不同,这些并不是绝对有效的,但作为用于高速化的方法而被广泛利用。[0205]接着,由于选择了几个高资源效率的loop语句,因此使用它们制作对实测性能的卸载模式进行实测的数量。在fpga中的高速化有将fpga资源量集中在一个处理中进行高速化的形式,或者将fpga资源分布在多个处理中进行高速化的形式。卸载服务器1制作一定数量的被选择的单loop语句的模式,作为在fpga实际设备中进行工作的前阶段进行预编译。[0206]处理模式制作部115对制作成的opencl进行预编译而计算利用的资源量(s156),缩减高资源效率的loop语句(s157)。[0207]然后,可执行文件制作部117编译用于卸载所缩减的loop语句的opencl(s158)。性能测定部116测定被编译的程序的性能(s159)。这是第一次性能测定。[0208]处理模式制作部115列出性能测定中比cpu高性能化的loop语句(s160),并且制作组合列表的loop语句进行卸载的opencl(s161)。处理模式制作部115利用组合的卸载opencl进行预编译并计算利用的资源量(s162)。这是资源量的第二次计算。此外,处理模式制作部115可以不进行预编译,而是在第一次测定之前的预编译中的资源量之和。如果这样,能够减少预编译的次数。[0209]可执行文件制作部117编译组合的卸载opencl(s163)。性能测定部116测定编译的程序的性能(s164)。这是第二次性能测定。[0210]正式环境配置部118在第一次和第二次测定中选择最高性能的模式(s165),结束本流程的处理。[0211]如此,loop语句的fpga自动卸载集中于算术强度和循环次数高且资源效率高的loop语句,制作卸载模式,在验证环境下通过实测进行高速的模式搜索。[0212]在fpga中,在考虑将处理时间花费长时间的特定的loop语句卸载给fpga而进行高速化时,难以预测在哪个循环卸载会更快,因此,提出了与gpu同样在验证环境下自动地进行性能测定。然而,fpga需要花费几个小时以上才能编译opencl并在实际设备上工作,因此使用gpu自动卸载的遗传算法反复多次进行性能测定,处理时间变得庞大而变得不现实。[0213]因此,在本实施方式中,采取缩减卸载给fpga的候选的loop语句之后,进行性能测定试行的形式。具体而言,首先,使用rose框架等的算术强度分析工具从所发现的loop语句提取算术强度高的loop语句。此外,使用gcov、gprof等的分析工具也提取循环次数多的loop语句。[0214]然后,将算术强度、循环次数多的loop语句作为候选,进行opencl化。对于算术强度、循环次数多的卸载候选loop语句,预编译所制作的opencl来发现资源效率高的loop语句。因为在编译的过程中知道制作的flipflop、lookuptable等资源,因此进一步缩减利用的资源量少的loop语句。[0215]由于选择了几个loop语句,因此使用它们来实测性能。在fpga中的高速化有将fpga资源量集中在一个处理中进行高速化的形式,或者将fpga资源分布在多个处理中进行高速化的形式。因此,对所选择的单loop语句进行编译并进行性能测定,以使其在fpga实际设备中进行工作,对于能够进一步高速化的单loop语句也制作其组合的模式,进行第二次性能测定。卸载服务器1在验证环境下进行性能测定的多个模式中,选择最高速的模式作为解。[0216]对于loop语句的fpga自动卸载,使用算术强度、循环次数、资源量来缩减候选loop语句,然后进行验证环境下的多个模式性能测定,从而能够进行自动地卸载。[0217]《安装》卸载服务器1解析c/c 源代码,发现loop语句,并且掌握在loop语句内使用的变量数据等的程序结构。接着,卸载服务器1执行rose,获取各loop语句的算术强度,使用gcov获取各loop语句的循环次数。[0218]接着,卸载服务器1生成将高算术强度、高循环次数的各个loop语句卸载给fpga的opencl代码。opencl代码是将该loop语句作为fpga核心,将剩余的作为cpu主机程序进行分割的代码。[0219]接着,卸载服务器1对生成的opencl代码进行预编译,计算所利用的flipflop等资源量。使用资源量以整体资源量的比例来表示。在此,卸载服务器1根据算术强度、循环次数和资源量,来选定高算术强度、高循环次数且低资源量(高资源效率)的loop语句。[0220]接着,卸载服务器1将所选定的loop语句作为候选,制作实测的模式并进行编译。卸载服务器1对每个所选定的loop语句进行卸载时的性能测定,来确认能否实现高速化。其结果,在多个能够实现高速化的情况下,卸载服务器1还制作其组合opencl来进行性能测定,来确认与单体相比能否实现高速化。但是,由于fpga的资源量有限,因此,在多个卸载时资源量未达到上限值的情况下,卸载服务器1不进行制作。最后,卸载服务器1从多个测定模式中选择高速的模式作为解。[0221]《本发明及其作用效果》在技术方案1记载的发明中,提供一种卸载服务器,其特征在于,具有代码分析部、处理模式制作部、性能测定部和控制部,其中,所述代码分析部分析软件程序的源代码是否包含能由加速器执行的功能模块;所述处理模式制作部制作将所述功能模块卸载给所述加速器的模式;所述性能测定部在验证环境中部署对所述功能模块进行卸载的各所述模式,以测定性能;所述控制部构成为,在所述性能测定部测定出的性能是所期望的性能的情况下,通过所述处理模式制作部制作对所述软件程序中的除所述功能模块之外的剩余的loop语句进行卸载的模式,通过所述性能测定部在所述验证环境中部署各所述模式以测定性能,在所述性能测定部测定出的性能不是所期望的性能的情况下,通过所述处理模式制作部制作对所述软件程序的loop语句进行卸载的模式,通过所述性能测定部在所述验证环境中部署各所述模式以测定性能。[0222]据此,即使是多种加速器混合的环境为移行目标,也能够自动地高性能化。此外,当移行目标在同一节点具有多种加速器时,通过同时对多种加速器进行卸载,能够实现比利用单一加速器时更高速的卸载。[0223]基于技术方案1记载的卸载服务器,在技术方案2所记载的发明中,其特征在于,所述加速器是多种,所述控制部选择卸载给各所述加速器的模式中的最高速的模式。[0224]据此,即使是多种加速器混合的环境为移行目标,也能够自动地高性能化。[0225]基于技术方案1或2记载的卸载服务器,在技术方案3所记载的发明中,其特征在于,所述控制部在试行所述功能模块之后试行所述loop语句作为向所述加速器卸载的卸载对象,并且作为所述功能模块和/或所述loop语句的卸载目标的所述加速器按照众核cpu、gpu、fpga的顺序进行试行。[0226]据此,对于多种加速器混合的环境,能够高效地搜索能高速化的模式。[0227]基于技术方案1记载的卸载服务器,在技术方案4所记载的发明中,其特征在于,所述控制部构成为,在所述功能模块或所述loop语句的卸载中,在对多个加速器发现比原来的处理更高速的模式、且相同的功能模块或loop语句能够卸载给所述多个加速器的情况下,将性能变得更高的加速器设为卸载目标,在能够将不同的功能模块或不同的loop语句卸载给不同的加速器、且无法卸载给同一节点的加速器的情况下,将性能变得更高的加速器设为卸载目标,在能够将不同的功能模块或不同的loop语句卸载给不同的加速器、且能够卸载给同一节点的加速器的情况下,将所述功能模块或所述loop语句的卸载目标分别设为不同的加速器。[0228]据此,对于多种加速器混合的环境,能够搜索能高效地使功能模块或loop语句高速化的模式。[0229]基于技术方案1记载的卸载服务器,在技术方案5所记载的发明中,其特征在于,所述控制部构成为,在所述功能模块和所述loop语句的卸载中,在所述loop语句的卸载目标为与所述功能模块的卸载目标不同的节点的情况下,如果基于loop语句的卸载所带来的性能提高在基于所述功能模块的卸载所带来的性能提高以下,则不试行卸载所述loop语句的模式,并且试行卸载所述功能模块的模式,如果基于所述loop语句的卸载所带来的性能提高超过基于所述功能模块的卸载所带来的性能提高,则不试行卸载所述功能模块的模式,并且试行卸载所述loop语句的模式,在所述loop语句的卸载目标与所述功能模块的卸载目标为同一节点的情况下,试行卸载所述功能模块和所述loop语句的模式。[0230]据此,对于多种加速器混合的环境,能够搜索能高效地使功能模块或loop语句高速化的模式。[0231]在技术方案6记载的发明中,提供一种卸载服务器,其特征在于,具有代码分析部、处理模式制作部和性能测定部,其中,所述代码分析部分析软件程序的源代码是否包含能由众核cpu执行的loop语句;所述处理模式制作部制作将所述loop语句卸载给所述众核cpu的模式;所述性能测定部将各所述loop语句映射到基因模式,在验证环境中部署卸载各所述loop语句的各所述模式,以测定性能,将高性能设定为高适配度,并且重复通过遗传算法的精英选择、交叉和突然变异处理来制作下一代模式,所述性能测定部在所述验证环境中的性能测定中,比较所述众核cpu处理时的计算结果和原来处理的计算结果,在所述众核cpu处理时的计算结果的误差超出允许阈值的情况下,设定基因模式的适配度低。[0232]据此,即使是众核cpu的环境为移行目标,也能够搜索能高效地使loop语句高速化的模式。[0233]在技术方案7记载发明中,提供一种卸载控制方法,其特征在于,执行以下步骤:代码分析部分析软件程序的源代码是否包含能由加速器执行的功能模块;处理模式制作部制作将所述功能模块卸载给所述加速器的模式;性能测定部在验证环境中部署对所述功能模块进行卸载的各所述模式,以测定性能,还执行以下步骤:在所述性能测定部测定出的性能是所期望的性能的情况下,所述处理模式制作部制作对所述软件程序中的除所述功能模块之外的剩余的loop语句进行卸载的模式;所述性能测定部在所述验证环境中部署各所述模式以测定性能,还执行以下步骤:在所述性能测定部测定出的性能不是所期望的性能的情况下,所述处理模式制作部制作对所述软件程序的loop语句进行卸载的模式;所述性能测定部在所述验证环境中部署各所述模式以测定性能。[0234]据此,即使是多种加速器混合的环境为移行目标,也能够自动地高性能化。此外,当移行目标在同一节点具有多种加速器时,通过同时对多种加速器进行卸载,能够实现比利用单一加速器时更高速的卸载。[0235]在技术方案8记载的发明中,提供一种卸载程序,其用于使计算机执行以下步骤:分析软件程序的源代码是否包含能由加速器执行的功能模块;制作将所述功能模块卸载给所述加速器的模式;在验证环境中部署对所述功能模块进行卸载的各所述模式,以测定性能;在测定出的性能是所期望的性能的情况下,制作对所述软件程序中的除所述功能模块之外的剩余的loop语句进行卸载的模式,在所述验证环境中部署各所述模式以测定性能;在测定出的性能不是所期望的性能的情况下,制作对所述软件程序的loop语句进行卸载的模式,在所述验证环境中部署各所述模式以测定性能。[0236]据此,即使是多种加速器混合的环境为移行目标,也能够自动地高性能化。此外,当移行目标在同一节点具有多种加速器时,通过同时对多种加速器进行卸载,能够实现比利用单一加速器时更高速的卸载。[附图标记说明][0237]1:卸载服务器;2:云层;3:网络层;4:设备层;10:网关;20:网络边缘;30:数据中心;11:控制部;12:输入输出部;13:存储部;14:验证设备;15:资源;111:代码指定部;112:代码分析部;114:处理指定部;114a:卸载范围提取部;114b:中间语言文件输出部;115:处理模式制作部;116:性能测定部;116a:可执行文件配置部;117:可执行文件制作部;118:正式环境配置部;119:性能测定试验提取执行部;120:用户提供部;130:源代码;131:试验案例数据库;132:中间语言文件;133:代码模式数据库;141、142:代码模式;151~154:装置;80:通信网;900:计算机;910:cpu;920:ram;930:rom;940:hdd;950:通信接口;960:输入输出接口;970:媒体接口;980:记录介质。当前第1页12当前第1页12
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表