CN116795515A - 循环任务的执行方法、设备、芯片和存储介质 - Google Patents

循环任务的执行方法、设备、芯片和存储介质 Download PDF

Info

Publication number
CN116795515A
CN116795515A CN202310802422.XA CN202310802422A CN116795515A CN 116795515 A CN116795515 A CN 116795515A CN 202310802422 A CN202310802422 A CN 202310802422A CN 116795515 A CN116795515 A CN 116795515A
Authority
CN
China
Prior art keywords
loop
instruction
memory
loop body
processor
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.)
Pending
Application number
CN202310802422.XA
Other languages
English (en)
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.)
Kunlun Core Beijing Technology Co ltd
Original Assignee
Kunlun Core Beijing Technology Co ltd
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 Kunlun Core Beijing Technology Co ltd filed Critical Kunlun Core Beijing Technology Co ltd
Priority to CN202310802422.XA priority Critical patent/CN116795515A/zh
Publication of CN116795515A publication Critical patent/CN116795515A/zh
Pending legal-status Critical Current

Links

Landscapes

  • Advance Control (AREA)

Abstract

本公开提供了一种循环任务的执行方法、设备、芯片、存储介质以及程序产品,涉及计算机技术领域,尤其涉及芯片技术领域。具体实现方案为:响应于循环任务执行请求,将与循环任务对应的初始循环结构转换为目标循环结构,初始循环结构为循环执行单指令单数据指令的运算结构,目标循环结构包括第一循环体和第二循环体,第一循环体为循环执行单指令单数据指令的运算结构,第二循环体为循环执行单指令多数据指令的运算结构;在确定第一循环体和第二循环体存在访存冲突的情况下,在目标循环结构中设置访存控制指令;以及基于访存控制指令,顺序执行第一循环体和第二循环体。

Description

循环任务的执行方法、设备、芯片和存储介质
技术领域
本公开涉及计算机技术领域,尤其涉及芯片技术领域。
背景技术
在由高级语言编写的程序中,程序的循环运算部分通常包括大量的串行指令,这些串行指令会降低指令流水的效率。此外,当执行指令的处理器具有并行执行能力时,执行串行指令会浪费硬件的并行执行能力,降低执行效率。
发明内容
本公开提供了一种循环任务的执行方法、设备、芯片、存储介质以及程序产品。
根据本公开的一方面,提供了一种循环任务的执行方法,包括:响应于循环任务执行请求,将与循环任务对应的初始循环结构转换为目标循环结构,初始循环结构为循环执行单指令单数据指令的运算结构,目标循环结构包括第一循环体和第二循环体,第一循环体为循环执行单指令单数据指令的运算结构,第二循环体为循环执行单指令多数据指令的运算结构;在确定第一循环体和第二循环体存在访存冲突的情况下,在目标循环结构中设置访存控制指令;以及基于访存控制指令,顺序执行第一循环体和第二循环体。
根据本公开的另一方面,提供了一种循环任务的执行设备,包括:存储器,配置为存储初始循环结构;以及处理器,配置为:响应于循环任务执行请求,从存储器中获取与循环任务对应的初始循环结构,将初始循环结构转换为目标循环结构,初始循环结构为处理器循环执行单指令单数据指令的运算结构,目标循环结构包括第一循环体和第二循环体,第一循环体为处理器循环执行单指令单数据指令的运算结构,第二循环体为处理器循环执行单指令多数据指令的运算结构;在确定第一循环体和第二循环体存在访存冲突的情况下,在目标循环结构中设置访存控制指令;以及基于访存控制指令,顺序执行第一循环体和第二循环体。
根据本公开的另一方面,提供了一种芯片,包括:本公开实施例所示的循环任务的执行设备。根据本公开的另一方面,提供了一种电子设备,包括:至少一个处理器;以及与至少一个处理器通信连接的存储器;其中,存储器存储有可被至少一个处理器执行的指令,指令被至少一个处理器执行,以使至少一个处理器能够执行本公开实施例所示的循环任务的执行方法。
根据本公开的另一方面,提供了一种存储有计算机指令的非瞬时计算机可读存储介质,其中,计算机指令用于使计算机执行本公开实施例所示的循环任务的执行方法。
根据本公开的另一方面,提供了一种计算机程序产品,包括计算机程序/指令,其特征在于,该计算机程序/指令被处理器执行时实现本公开实施例所示循环任务的执行方法的步骤。
应当理解,本部分所描述的内容并非旨在标识本公开的实施例的关键或重要特征,也不用于限制本公开的范围。本公开的其它特征将通过以下的说明书而变得容易理解。
附图说明
附图用于更好地理解本方案,不构成对本公开的限定。其中:
图1示意性示出了根据本公开的实施例的循环任务的执行方法的场景示意图;
图2示意性示出了根据本公开的实施例的循环任务的执行方法的流程图;
图3示意性示出了根据本公开的实施例的确定访存冲突的流程图;
图4示意性示出了根据本公开的实施例的执行循环任务的示意图;
图5示意性示出了根据本公开实施例的循环任务的执行设备的结构框图;
图6示意性示出了根据本公开实施例的芯片的结构框图;以及
图7示出了可以用来实施本公开实施例的方法的示例电子设备700的示意性框图。
具体实施方式
以下结合附图对本公开的示范性实施例做出说明,其中包括本公开实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本公开的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
本公开的技术方案中,所涉及的用户个人信息的收集、存储、使用、加工、传输、提供和公开等处理,均符合相关法律法规的规定,且不违背公序良俗。
在本公开的技术方案中,在获取或采集用户个人信息之前,均获取了用户的授权或同意。
以下将结合图1对本公开提供的循环任务的执行方法的应用场景进行描述。
图1示意性示出了根据本公开的实施例的循环任务的执行方法的场景示意图。
如图1所示,应用场景100包括处理器110和存储器120。例如,存储器120可以包括第一存储单元121、第二存储单元122和第三存储单元123。例如,第一存储单元121存储循环任务的执行指令,第二存储单元122存储循环任务的执行数据,第三存储单元123可以存储处理器110执行循环任务的结构。
如图1所示,应用场景100可以包括场景100a和场景100b。
在场景100a中,处理器100执行单指令单数据(Single instruction Singledata,SISD)指令。例如,在程序算法的编译过程中,循环结构为常见的运算结构。例如,在对大量的数据执行相同的运算时,可以采用循环结构对大量的数据执行重复的运算过程。在循环结构中,会执行大量的串行指令,例如,SISD指令和条件跳转指令。
例如,在第一执行周期中,处理器110从第一存储单元121获取一个执行指令,以及从第二存储单元122中获取一个执行数据。处理器110基于该执行指令对执行数据进行运算,得到一个运算结果,并将运算结果输入到第三存储单元123中。基于循环结构,在第二执行周期中,处理器110再次从第一存储单元121获取一个执行指令,以及再次从第二存储单元122中获取一个执行数据。处理器110基于该执行指令对执行数据进行运算,得到一个运算结果,并再次将运算结果输入到第三存储单元123中。基于循环结构依次对全部的执行数据进行运算。
在场景100a中,处理器110串行执行SISD指令的过程效率低。在程序算法中存在大量的循环结构时,处理器110执行循环结构的效率也会大大降低。
为了提高循环结构的性能表现,优化处理器110的执行效率。本公开提供了一种循环任务的执行方法应用于场景100b中。
在场景100a中,可以处理器110可以将SISD指令转换成单指令多数据(Singleinstruction Multi data,SIMD)指令,从而提高处理器110的并行执行能力。在SIMD指令中,处理器可以基于同一指令对多个执行数据进行运算。
例如,在第一执行周期中,处理器110从第一存储单元121获取一个执行指令,以及从第二存储单元122中获取两个执行数据。处理器110基于该执行指令对两个执行数据进行并行运算,得到两个运算结果,并将两个运算结果输入到第三存储单元123中。基于循环结构,在第二执行周期中,处理器110再次从第一存储单元121获取一个执行指令,以及再次从第二存储单元122中获取两个执行数据。处理器110基于该执行指令对执行数据进行并行运算,得到两个运算结果,并再次将两个运算结果输入到第三存储单元123中。基于循环结构依次对全部的执行数据进行运算。
在场景100b中,处理器110执行SIMD指令,可以对待处理的执行数据进行并行运算,从而提高处理器110的执行效率低。在程序算法中存在大量的循环结构时,处理器110执行循环结构的效率也会极大提升。
在一些实施例中,在处理器110自己具有并行执行能力,但执行对象为SISD时,会无法发挥出处理器110的并行执行能力,降低处理器110的执行效率。因此,处理器110将SISD指令转换成SIMD指令,可以充分发挥自身的并行执行能力,避免造成资源浪费。
以下将结合图2对本公开提供的循环任务的执行方法进行描述。
图2示意性示出了根据本公开的实施例的测试方法的流程图。
如图2所示,该循环任务的执行方法200包括操作S210至操作S230。接下来将参考图2来描述根据本公开实施例的循环任务的执行方法。
在操作S210,响应于循环任务执行请求,将与循环任务对应的初始循环结构转换为目标循环结构。
根据本公开的实施例,初始循环结构为循环执行单指令单数据SISD指令的运算结构。例如,初始循环结构可以为预先编译并存储在存储器里中的运算代码。
根据本公开的实施例,循环任务执行请求可以为操作人员输入计算设备的请求。例如,循环任务可以为对10组数据执行求和运算,操作人员向计算设备输入数据求和请求,计算设备的处理器接收到数据求和请求,解析数据求和请求,得到求和指令。
根据本公开的实施例,处理器可以将用于处理SISD指令的循环结构转换为用于处理SIMD指令的循环结构。
根据本公开实施例,循环任务中基于SISD指令被执行的待执行数据可能被无法被全部转换成基于SIMD指令被执行的待执行数据,因此处理器可以将处理SISD指令的循环结构转换成用于处理SIMD指令和SISD指令的循环结构。例如,目标循环结构可以包括第一循环体和第二循环体,第一循环体为处理器循环执行单指令单数据SISD指令的运算结构,第二循环体为处理器循环执行单指令多数据SIMD指令的运算结构
例如,基于SIMD指令,处理器可以基于一个执行指令对4组待执行数据进行求和运算。由于循环任务为对10组数据执行求和运算,在此种情况下,处理器可以基于第一循环体循环执行两个SIMD指令,从而实现对第1~8组待执行数据的求和运行。处理器基于第二循环体循环执行两个SISD指令,从而实现对第9和10组待执行数据的求和运行。
然后,在操作S220,在确定第一循环体和第二循环体存在访存冲突的情况下,在目标循环结构中设置访存控制指令。
根据本公开的实施例,在第一循环体中,处理器可以对SIMD指令涉及的多组数据进行并行执行和乱序执行。
例如,处理器可以包括多个处理单元,例如处理器可以包括第一处理单元和第二处理单元。第一处理单元基于指令从存储器中读取第1组数据,并对第1组数据进行求和运算,在第一处理器开始对第1组数据进行运算后,第二处理单元可以基于该指令从存储器中读取第2组数据,并开始对第2组数据进行运算,在此种情况下,第二处理单元可能先于第一处理单元完成运算。
例如,处理器还可以包括第三处理单元,第三处理单元执行第二循环体中的SISD指令。第三处理单元可以与第一处理单元以及第二处理单元并行处理数据。例如,处理器可以为异构处理器,第一处理单元和第二处理单元可以属于图形处理器(graphicsprocessing unit,GPU),第三处理单元可以属于中央处理器(central processing unit,CPU)。
但是在此种情况下,第三处理单元与第一处理单元以及第二处理单元可能出现访存冲突。
例如,在第一处理单元基于指令从存储器的地址D中读取第1组数据,并对第1组数据进行求和运算。在第一处理单元还未完成对第1组数据的运算的情况下,第三处理单元接收到指令为从存储器的地址D中读取第8组数据,此时第三处理单元与第一处理单元出现访存冲突,从而会造成处理器的运行异常。
为了避免执行第一循环体的处理单元和执行第二循环体的循环单元之间出现访存冲突,处理器可以在目标循环体中为内存读写部分增加运行检查,在确定第一处理单元和第三处理单元会产生数据冲突时,处理器可以在目标循环结构中设置访存控制指令,使第一处理单元和第三处理单元可以顺序执行第一循环体和第二循环体。
然后,在操作S230,基于访存控制指令,顺序执行第一循环体和第二循环体。
根据本公开的实施例,目标循环体可以被存储在存储器中,目标循环体可以为由高级编程语言编写的程序代码,程序代码可以包括第一部分代码和第二部分代码。第一部分代码为第一循环体的程序代码,第二部分代码为第二循环体的程序代码。
例如,在循环任务的执行过程中,处理器可以先从存储器中读取第一部分代码,并运行第一部分代码。基于访存控制指令,在处理器完成对第一部分代码的运行后,再从存储器中读取第二部分代码,并运行第二部分代码。
例如,在循环任务的执行过程中,处理器也可以先从存储器中读取第二部分代码,并运行第二部分代码。基于访存控制指令,在处理器完成对第二部分代码的运行后,再从存储器中读取第一部分代码,并运行第一部分代码。
基于访存控制指令,处理器可以实现对第一循环体和第二循环体的顺序执行,从而避免处理器因为第一循环体和第二循环体之间的访存冲突而出现运行异常。
根据本公开实施例中,将用于串行执行的SISD指令的初始循环结构转换成用于并行执行和乱序执行的SIMD指令的目标循环结构,可以实现在一次SMID指令的执行过程中处理多个待执行数据,从而缩短处理器执行循环任务的计算时间,节省执行循环任务所需的计算资源和提升处理器的运行效率。对于具有异构处理器的计算设备,执行用于处理SMID指令的目标循环结构,可以充分发挥计算设备的并行能力和乱序执行能力,提升计算设备的运行性能。此外,通过访存控制指令,对SIMD指令的执行过程和SISD指令的执行过程进行隔离,可以避免由于SIMD指令和SISD指令的执行过程之间的访问冲突而出现计算设备运行异常的现象,从而优化计算设备的运行过程。
在一些实施例中,操作S210处理器将初始循环结构转换为目标循环结构可以包括:确定初始循环结构包括的多个单指令单数据指令的数量;处理器根据数量,确定第一循环次数M和第二循环次数N,其中将多个单指令单数据指令转换为M个单指令多数据指令和N个单指令单数据指令,M和N均为正整数;以及根据第一循环次数生成第一循环体,根据第二循环次数生成第二循环体。
例如,基于一个SIMD指令一次能够处理的数据数量为SIMD指令的并行度。根据SIMD指令的并行度,初始循环结构包括的多个SISD指令不是恰好能够全部被转换成SIMD指令,处理器将多个SISD指令的部分多个SISD指令转换成SIMD指令,剩余的多个SISD指令被保留。
例如,循环任务对应的初始循环结构包括90个SISD指令,SIMD指令的并行度为4,此时SISD指令的数量不是SIMD指令并行度的整数倍数。处理器可以将88个SISD指令转换成22个SIMD指令,此时第一循环次数M为22次,第二循环次数N为90-88=2次。
在此种情况下,可以基于第一循环体执行22次循环运算,完成对88组数据的运算,并基于第二循环体执行2次循环运算,完成两组数据的运算,从而完成循环任务包括的90组数据运算。
操作S210将初始循环结构转换为目标循环结构可以包括:获取初始循环结构中多个单指令单数据指令对应的多个初始访存地址;根据单指令多数据指令的访存条件,将多个初始访存地址转换为多个目标访存地址;以及根据多个目标访存地址,将初始循环结构转换为目标循环结构。
例如,由于基于SISD指令可以对单个数据(一组数据)依次进行运算,在初始循环体中,处理器可以每次从存储器的一个目的地址中读取单个数据。
根据本公开的实施例,访存条件可以为SIMD指令的并行度,在SIMD指令的并行度为4时,处理器可以从存储器中每次读取4组数据。因此,处理器对访存地址进行偏移,使得处理器每次可以读取到4个SISD指令对应的4组数据,从而实现初始循环体的访存地址与目标循环体的访存地址的对齐。
例如,根据SIMD指令架构处理器的硬件要求,SIMD指令的访存地址是8整数倍。例如SIMD指令架构处理器可以从地址0、8、16等读取数据。根据SISD指令架构处理器的访存地址可以是连续的,例如SISD指令架构处理器可以从地址0、1、2、3、4、5、6、7等读取数据。
处理器可以将SISD指令的访存地址进行映射,使得处理器基于地址0读取存储器地址0的数据,基于地址1读取存储器地址8的数据。
在一些实施例中,在确定初始循环体为逆向循环的情况下,还可以将逆向循环调整为正向循环。由于正向循环生成的运行结果的顺序与输入的待执行数据的顺序相同,相比于逆向循环,处理器运行正向循环生成的运行结果更加便于统计和处理,也便于定位运行异常。
在一些实施例中,将初始循环结构转换为目标循环结构还包括将对初始循环体中的分支语句、归纳变量和归约变量进行转换。
例如,分支运算可以为条件判断语句。在循环体中存在条件判断语句时,可能会存在在执行判断后,跳出循环体的现象。例如,在判断为是的情况下,继续执行循环体内的语句。在判断为否的情况下,执行循环体外的语句。在循环完成之前,跳出循环体可能会造成循环任务无法正常完成。因此,可以将分支语句移到循环体外,或者还可以通过位掩码将分支语句转换成无分支语句。
例如,在循环体中存在归纳变量和归约变量时,待执行数据之间可能存在相关性。
例如,可以根据SIMD指令的并行度对归纳变量的归纳操作进行修改。例如,归纳变量涉及的操作可以为对每次循环运算得到的运算结果进行累加。在SISD的循环中,累加操作为在每一周期的循环运算结束后进行1次累加操作。由于SIMD指令的并行度为4,可以将累加操作修改为在每一周期的循环运算结束后进行4次累加操作。
例如,对于循环体的归约变量,可以设置在循环运算全部完成后,对所有的运算结果统一进行归约,减少循环过程中的归约操作。
根据本公开实施例中,通过对初始循环体中指令数量、访存地址、分支语句、归纳变量和归约变量的处理,可以对目标循环体实现正规化。此外,对目标循环体的正规化过程可以充分挖掘循环体中相互不依赖的计算操作,提高并行度,简化循环结构。
以下将结合图3对本公开提供的确定访存冲突的过程进行描述。
图3示意性示出了根据本公开的实施例的确定访存冲突的流程图。
如图3所示,操作S220在确定第一循环体和第二循环体存在访存冲突的情况下,在目标循环结构中设置访存控制指令中确定访存冲突的操作包括操作S321至操作S323。接下来将参考图3来描述根据本公开实施例的确定访存冲突的过程。
在操作S321,获取与第一循环体相关的多个第一访存地址和与第二循环体相关的多个第二访存地址。
然后,在操作S322,分别确定多个第一访存地址的多个第一生命周期和分别确定多个第二访存地址的多个第二生命周期。
然后,在操作S323,在确定多个第一生命周期中任一第一生命周期与多个第二生命周期中任一第二生命周期存在重叠的情况下,确定第一循环体和第二循环体存在访存冲突。
根据本公开的实施例,多个第一访存地址为处理器执行第一循环体时从存储器中读取多个数据的多个地址。多个第二访存地址为处理器执行第二循环体时从存储器中读取多个数据的多个地址。生命周期为每个访存地址被使用的时间周期。在第一循环体和第二循环体的编译过程中,处理器会定义每个地址的参与运算过程的时间周期。
根据每个访存地址的生命周期,可以确定在同一时间段内是否存在异构处理器的两个处理单元对同一地址进行访存。在确定多个第一生命周期中任一第一生命周期与多个第二生命周期中任一第二生命周期存在重叠的情况下,可认为在同一时间段内存在异构处理器的两个处理单元对同一地址进行访存,存在访存冲突现象。
例如,编译器可以第一循环体和第二循环体进行扫描,确认第一循环体和第二循环体包括的每个访存操作涉及的全部地址变量,并记录每个地址变量被初始化的位置和最终被使用的位置,可以将这两个位置记为这一访存地址的生命周期。例如,在编译器中,可以确定第一循环体和第二循环体对应的程序代码的编写行数。地址变量被初始化的位置可以为生命周期起点,最终被使用的位置可以为生命周期终点。在确定某一访存地址的生命周期同时覆盖了第一循环体和第二循环体的情况下,可认为这一访存地址可能会造成访存冲突。
在此种情况下,可以在第一循环体和第二循环体的程序代码之间设置访存控制指令。例如,处理器从第一循环中确定指定单指令单数据指令和从第二循环中确定指定单指令多数据指令。在存储器中指定单指令单数据指令和指定单指令多数据指令之间设置访存控制指令,访存控制指令控制指定单指令单数据指令与指定单指令多数据指令之间的执行顺序。
根据本公开的实施例,指定单指令单数据指令与指定单指令多数据指令之间存在访存冲突。例如,处理器执行指定单指令单数据指令与指定单指令多数据指令时,处理器会对同一地址进行访存。
例如,循环任务包括在GPU的处理单元执行SIMD指令A对地址D执行写操作后,CPU的处理单元执行SISD指令B对地址D执行读操作。由于异构处理器中GPU和CPU可以并行执行指令A和指令B,这会导致GPU的处理单元在执行指令A完成写操作之前,CPU的处理单元已经开始执行指令B的读操作,从而产生访存冲突。
处理器可以提供一条访存控制指令,控制编译器将该访存控制指令插入在SIMD指令A和SISD指令B之间。这使得CPU的处理单元会等待GPU的处理单元将SIMD指令A执行完毕后,再去执行SISD指令B,从而解决访存冲突。
根据本公开的实施例,在第一循环体和第二循环体中仅SIMD指令A和SISD指令B存在访存冲突的情况下,在确定基于访存控制指令SIMD指令A和SISD指令B均被执行完毕后,GPU的处理单元和CPU的处理单元可以并行执行剩余的指令,提高处理器的执行效率。
以下将结合图4对本公开提供的循环任务的执行过程进行描述。
图4示意性示出了根据本公开的实施例的循环任务的执行方法的示意图。
如图4所示,循环任务的执行过程400包括:处理器对目标循环体进行适应性检查410;在确定通过适应性检查的情况下,处理器构建第一循环头420;处理器基于第一循环头420生成第一循环体430,并执行第一循环体430,实现M次循环;在执行第一循环体430后,进行循环后处理,确定循环任务包括的数据是否被完全执行完毕;在确定不存在剩余数据的情况下,处理器执行循环退出470;在确定存在剩余数据的情况下,处理器构建第二循环头450,处理器基于第二循环头450生成第二循环体460,执行第二循环体460,实现N次循环;以及在执行第二循环体460后,处理器执行循环退出470。
根据本公开的实施例,在适应性检查410中,处理器对第一循环体进行适用性检查。
例如,检查初始循环体处理的循环次数与SIMD指令并行度之间的倍数。例如,初始循环体处理的待执行数据的数量为100,循环次数为100次,SIMD指令并行度为4,初始循环体处理的待执行数据的数量为SIMD指令并行度的25倍。例如,初始循环体处理的待执行数据的数量为90,循环次数为90次,SIMD指令并行度为4,初始循环体处理的待执行数据的数量为SIMD指令并行度的22倍且剩余两个待执行数据。
例如,检查初始循环体是否存在分支语句。当第一循环体中存在分支语句时,可能会造成循环任务无法被全部执行。在确定初始循环体存在分支语句的情况下,处理器确认是否可以对分支语句进行转换,使循环体中不存在分支语句
例如,检查初始循环体是否存在产生异常的指令。例如,在初始循环体存在硬件中断指令时,会造成循环任务提前结束。
例如,检查初始循环体是否存在归约变量和归纳变量。由于归约变量和归纳变量存在数据依赖,初始循环体存在归约变量和归纳变量会造成运算异常。在确定存在归约变量和归纳变量的情况下,处理器确认是否可以会对归约变量和归纳变量进行转换,使循环体中不存在归约变量和归纳变量
例如,检查退出循环的判断语句是否仅存在完成最后一次循环运算之后,可以避免循环任务提前结束。
通过适应性检查的条件包括:初始循环体处理的循环次数可以转换为SIMD指令并行度的倍数,可以分支语句、归约变量和归纳变量进行转换、不存在异常指令,且退出循环的判断语句仅存在完成最后一次循环运算之后。
在通过适应性检查的情况下,处理器执行后续操作,将初始循环体转换成目标循环体。
在构建第一循环头420中,处理器将SIMD指令的访存地址与SISD指令的地址对齐。在初始循环体为逆向循环时,处理器还可以将循环方向调整为正向循环。
在生成第一循环体430之前,处理器确定执行初始循环结构时使用存储器产生的初始运行开销和执行目标循环结构时使用存储器产生的目标运行开销;以及在确定目标运行开销小于初始运行开销的情况下,处理器执行目标循环结构。
例如,处理器计算目标循环体对存储空间的开销,避免由于运行目标循环体造成存储空间不足。
例如,处理器根据初始循环体中的运算操作和数据类型,选择等价硬件支持的SIMD指令,生成第一循环体,从而在一次循环中完成多次无相互依赖的循环的计算操作,从而减少循环次数。在确定利用等价硬件运行SIMD指令的开销小于运行SISD指令的开销时,可以将SISD指令转换为SIMD指令。
但是,在确定循环体中的SISD指令不存在等价的SIMD指令,放弃将SISD指令转换为SIMD指令。在确定利用等价硬件运行SIMD指令的开销大于运行SISD指令的开销时,放弃将SISD指令转换为SIMD指令。在确定利用等价硬件运行SIMD指令的开销小于运行SISD指令的开销时,为减少循环次数,可以将SISD指令转换为SIMD指令。
例如,处理器可以使用乱序的SIMD访存操作替换SISD访存操作,在一次循环中完成多次无相互依赖的循环的访存操作,从而减少循环次数。在确定处理器执行乱序的SIMD访存操作的开销等于执行SISD访存操作的开销的情况下,可以将SISD指令转换为SIMD指令。
但是,在确定处理器执行乱序的SIMD访存操作的开销大于执行SISD访存操作的开销的情况下,放弃将SISD指令转换为SIMD指令。在确定处理器执行乱序的SIMD访存操作的开销等于执行SISD访存操作的开销的情况下,为减少循环次数,可以将SISD指令转换为SIMD指令。
在生成第一循环体430时,处理器对第一循环体430内的内存读写进行检查,确定第一循环体430内与第一循环体430外是否存在访存冲突。在确定第一循环体430内与第一循环体430之前的程序部分存在访存冲突的情况下,可以在第一循环体430之前设置访存控制指令。在确定第一循环体430内与第一循环体430之后的程序部分存在访存冲突的情况下,可以在第一循环体430之后设置访存控制指令。
处理器还将归纳变量,归纳至新的循环体中,展开循环体中的条件判断,以及设置在循环退出后对归约变量统一进行归约。操作过程与图2所示实施例中操作S210类似,为了简明,在此处不再赘述。
在未通过适应性检查的情况下,处理器执行循环后处理440,放弃将初始循环体转换成目标循环体。
在循环后处理440中,确定循环任务包括的还未处理的数据。在存在剩余数据的情况下,剩余数据为无法转换成对应SIMD指令的数据。在此种情况下,处理器构建第二循环头450。
在构建第二循环头450中,处理器确定SISD指令的访存地址。在执行第二循环体460中,处理器执行基于SIMD指令未被执行的剩余数据。
根据本公开实施例中,在第一循环体430和第二循环体460之间存在访存控制指令的情况下,处理器执行循环任务的过程包括:从存储器中读取第一循环体、第二循环体和访存控制指令;在执行第二循环体460之前,基于访存控制指令,获取第一循环体430的执行过程;以及在确定第一循环体执行完毕的情况下,执行第二循环体。
在访存控制指令的控制下,第一循环体430和第二循环体460之间存在执行隔离,从而可以在并行执行中,防止出现访存冲突。例如,处理器在确定对第一循环体430执行完毕的情况下,再执行第二循环体460。例如,处理器也可以在确定对第二循环体460第一循环体430执行完毕的情况下,再执行第一循环体430。这可以使得第一循环体430和第二循环体460被顺序执行,第一循环体430保持乱序执行。
在一些实施例中,在确定第一循环体430的访存地址和第二循环体460的访存地址不存在冲突的情况下,处理器并行执行第一循环体430和第二循环体460。
根据本公开的实施例,在将初始循环体转换成第一循环体430和第二循环体460时,在确定SIMD指令和SISD指令之间不存在访存冲突的情况下,可认为第一循环体430和第二循环体460之间的计算操作不存在数据依赖,可以并行执行第一循环体430和第二循环体460,从而可以进一步提高处理的执行效率,缩短执行时间。
根据本公开的实施例,通过将SISD指令转换成SIMD指令,可以提升具有SIMD系统的异构并行计算设备对循环运算的执行效率。此外,还可以降低异构并行计算设备程序的编程难度,提升代码的可复用性与多种硬件适配。
基于本公开提供的循环任务的执行方法,本公开还提供了一种循环任务的执行设备,以下将结合图5对该执行设备进行详细描述。
图5示意性示出了根据本公开实施例的循环任务的执行设备的结构框图。
如图5所示,该实施例的循环任务的执行设备500可以包括处理器510和存储器520。
根据本公开的实施例,存储器520配置为存储初始循环结构。
处理器510响应于循环任务执行请求,从存储器中获取与循环任务对应的初始循环结构,将初始循环结构转换为目标循环结构。在确定第一循环体和第二循环体存在访存冲突的情况下,在目标循环结构中设置访存控制指令;以及基于访存控制指令,顺序执行第一循环体和第二循环体。处理器510可以用于执行上文描述的操作S210-S230,在此不再赘述。
根据本公开的实施例,初始循环结构为处理器循环执行单指令单数据指令的运算结构,目标循环结构包括第一循环体和第二循环体,第一循环体为处理器循环执行单指令单数据指令的运算结构,第二循环体为处理器循环执行单指令多数据指令的运算结构。
根据本公开的实施例,处理器520还配置为:从存储器中获取与第一循环体相关的多个第一访存地址和与第二循环体相关的多个第二访存地址;分别确定多个第一访存地址的多个第一生命周期和分别确定多个第二访存地址的多个第二生命周期;以及在确定多个第一生命周期中任一第一生命周期与多个第二生命周期中任一第二生命周期存在重叠的情况下,确定第一循环体和第二循环体存在访存冲突。
根据本公开的实施例,处理器520还配置为:从第一循环中确定指定单指令单数据指令和从第二循环中确定指定单指令多数据指令,指定单指令单数据指令与指定单指令多数据指令之间存在访存冲突;以及在存储器中指定单指令单数据指令和指定单指令多数据指令之间设置访存控制指令,访存控制指令控制指定单指令单数据指令与指定单指令多数据指令之间的执行顺序。
根据本公开的实施例,处理器520还配置为:从存储器中读取第一循环体、第二循环体和访存控制指令;在执行第二循环体之前,基于访存控制指令,获取第一循环体的执行过程;以及在确定第一循环体执行完毕的情况下,执行第二循环体。
根据本公开的实施例,处理器520还配置为:确定执行初始循环结构时使用存储器产生的初始运行开销和执行目标循环结构时使用存储器产生的目标运行开销;以及在确定目标运行开销小于初始运行开销的情况下,执行目标循环结构。
根据本公开的实施例,处理器520还配置为:在确定第一循环体的访存地址和第二循环体的访存地址不存在冲突的情况下,并行执行第一循环体和第二循环体。
需要说明的是,本公开的技术方案中,所涉及的用户个人信息的收集、存储、使用、加工、传输、提供、公开和应用等处理,均符合相关法律法规的规定,采取了必要保密措施,且不违背公序良俗。在本公开的技术方案中,在获取或采集用户个人信息之前,均获取了用户的授权或同意。
基于本公开提供的循环任务的执行设备,本公开还提供了一种芯片,以下将结合图6对该芯片进行详细描述。
图6示意性示出了根据本公开实施例的芯片的结构框图。
如图6所示,该实施例的芯片600可以包括执行设备610。
根据本公开的实施例,执行设备610可以为本公开实施例提供的循环任务的执行设备。例如,循环任务的执行设备610可以为图5所示的循环任务的执行设备500。
根据本公开的实施例,本公开还提供了一种电子设备、一种可读存储介质和一种计算机程序产品。
图7示出了可以用来实施本公开实施例的方法的示例电子设备700的示意性框图。电子设备旨在表示各种形式的数字计算机,诸如,膝上型计算机、台式计算机、工作台、个人数字助理、服务器、刀片式服务器、大型计算机、和其它适合的计算机。电子设备还可以表示各种形式的移动装置,诸如,个人数字处理、蜂窝电话、智能电话、可穿戴设备和其它类似的计算装置。本文所示的部件、它们的连接和关系、以及它们的功能仅仅作为示例,并且不意在限制本文中描述的和/或者要求的本公开的实现。如图7所示,设备700包括计算单元701,其可以根据存储在只读存储器(ROM)702中的计算机程序或者从存储单元708加载到随机访问存储器(RAM)703中的计算机程序,来执行各种适当的动作和处理。在RAM 703中,还可存储设备700操作所需的各种程序和数据。计算单元701、ROM 702以及RAM 703通过总线704彼此相连。输入/输出(I/O)接口705也连接至总线704。
设备700中的多个部件连接至I/O接口705,包括:输入单元706,例如键盘、鼠标等;输出单元707,例如各种类型的显示器、扬声器等;存储单元708,例如磁盘、光盘等;以及通信单元709,例如网卡、调制解调器、无线通信收发机等。通信单元709允许设备700通过诸如因特网的计算机网络和/或各种电信网络与其他设备交换信息/数据。
计算单元701可以是各种具有处理和计算能力的通用和/或专用处理组件。计算单元701的一些示例包括但不限于中央处理单元(CPU)、图形处理单元(GPU)、各种专用的人工智能(AI)计算芯片、各种运行机器学习模型算法的计算单元、数字信号处理器(DSP)、以及任何适当的处理器、控制器、微控制器等。计算单元701执行上文所描述的循环任务的执行方法。例如,在一些实施例中,循环任务的执行方法可被实现为计算机软件程序,其被有形地包含于机器可读介质,例如存储单元708。在一些实施例中,计算机程序的部分或者全部可以经由ROM 702和/或通信单元709而被载入和/或安装到设备700上。当计算机程序加载到RAM 703并由计算单元701执行时,可以执行上文描述的循环任务的执行方法的一个或多个步骤。备选地,在其他实施例中,计算单元701可以通过其他任何适当的方式(例如,借助于固件)而被配置为执行循环任务的执行方法。
本文中以上描述的系统和技术的各种实施方式可以在数字电子电路系统、集成电路系统、场可编程门阵列(FPGA)、专用集成电路(ASIC)、专用标准产品(ASSP)、芯片上系统的系统(SOC)、复杂可编程逻辑设备(CPLD)、计算机硬件、固件、软件、和/或它们的组合中实现。这些各种实施方式可以包括:实施在一个或者多个计算机程序中,该一个或者多个计算机程序可在包括至少一个可编程处理器的可编程系统上执行和/或解释,该可编程处理器可以是专用或者通用可编程处理器,可以从存储系统、至少一个输入装置、和至少一个输出装置接收数据和指令,并且将数据和指令传输至该存储系统、该至少一个输入装置、和该至少一个输出装置。
用于实施本公开的方法的程序代码可以采用一个或多个编程语言的任何组合来编写。这些程序代码可以提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器或控制器,使得程序代码当由处理器或控制器执行时使流程图和/或框图中所规定的功能/操作被实施。程序代码可以完全在机器上执行、部分地在机器上执行,作为独立软件包部分地在机器上执行且部分地在远程机器上执行或完全在远程机器或服务器上执行。
在本公开的上下文中,机器可读介质可以是有形的介质,其可以包含或存储以供指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合地使用的程序。机器可读介质可以是机器可读信号介质或机器可读储存介质。机器可读介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体系统、装置或设备,或者上述内容的任何合适组合。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或快闪存储器)、光纤、便捷式紧凑盘只读存储器(CD-ROM)、光学储存设备、磁储存设备、或上述内容的任何合适组合。
为了提供与用户的交互,可以在计算机上实施此处描述的系统和技术,该计算机具有:用于向用户显示信息的显示装置(例如,CRT(阴极射线管)或者LCD(液晶显示器)监视器);以及键盘和指向装置(例如,鼠标或者轨迹球),用户可以通过该键盘和该指向装置来将输入提供给计算机。其它种类的装置还可以用于提供与用户的交互;例如,提供给用户的反馈可以是任何形式的传感反馈(例如,视觉反馈、听觉反馈、或者触觉反馈);并且可以用任何形式(包括声输入、语音输入或者、触觉输入)来接收来自用户的输入。
可以将此处描述的系统和技术实施在包括后台部件的计算系统(例如,作为数据服务器)、或者包括中间件部件的计算系统(例如,应用服务器)、或者包括前端部件的计算系统(例如,具有图形用户界面或者网络浏览器的用户计算机,用户可以通过该图形用户界面或者该网络浏览器来与此处描述的系统和技术的实施方式交互)、或者包括这种后台部件、中间件部件、或者前端部件的任何组合的计算系统中。可以通过任何形式或者介质的数字数据通信(例如,通信网络)来将系统的部件相互连接。通信网络的示例包括:局域网(LAN)、广域网(WAN)和互联网。
计算机系统可以包括客户端和服务器。客户端和服务器一般远离彼此并且通常通过通信网络进行交互。通过在相应的计算机上运行并且彼此具有客户端-服务器关系的计算机程序来产生客户端和服务器的关系。其中,服务器可以是云服务器,又称为云计算服务器或云主机,是云计算服务体系中的一项主机产品,以解决了传统物理主机与VPS服务(″Virtual Private Server″,或简称″VPS″)中,存在的管理难度大,业务扩展性弱的缺陷。服务器也可以为分布式系统的服务器,或者是结合了区块链的服务器。应该理解,可以使用上面所示的各种形式的流程,重新排序、增加或删除步骤。例如,本发公开中记载的各步骤可以并行地执行也可以顺序地执行也可以不同的次序执行,只要能够实现本公开公开的技术方案所期望的结果,本文在此不进行限制。
上述具体实施方式,并不构成对本公开保护范围的限制。本领域技术人员应该明白的是,根据设计要求和其他因素,可以进行各种修改、组合、子组合和替代。任何在本公开的精神和原则之内所作的修改、等同替换和改进等,均应包含在本公开保护范围之内。

Claims (18)

1.一种循环任务的执行方法,包括:
响应于循环任务执行请求,将与所述循环任务对应的初始循环结构转换为目标循环结构,所述初始循环结构为循环执行单指令单数据指令的运算结构,所述目标循环结构包括第一循环体和第二循环体,所述第一循环体为循环执行单指令单数据指令的运算结构,所述第二循环体为循环执行单指令多数据指令的运算结构;
在确定所述第一循环体和所述第二循环体存在访存冲突的情况下,在所述目标循环结构中设置访存控制指令;以及
基于所述访存控制指令,顺序执行所述第一循环体和所述第二循环体。
2.根据权利要求1所述的方法,其中,所述确定所述第一循环体和所述第二循环体存在访存冲突包括:
获取与所述第一循环体相关的多个第一访存地址和与所述第二循环体相关的多个第二访存地址;
分别确定所述多个第一访存地址的多个第一生命周期和分别确定所述多个第二访存地址的多个第二生命周期;以及
在确定所述多个第一生命周期中任一第一生命周期与所述多个第二生命周期中任一第二生命周期存在重叠的情况下,确定所述第一循环体和所述第二循环体存在访存冲突。
3.根据权利要求1所述的方法,其中,在所述目标循环结构中设置访存控制指令包括:
从所述第一循环中确定指定单指令单数据指令和从所述第二循环中确定指定单指令多数据指令,所述指定单指令单数据指令与所述指定单指令多数据指令之间存在访存冲突;以及
在所述指定单指令单数据指令和所述指定单指令多数据指令之间设置所述访存控制指令,所述访存控制指令控制所述指定单指令单数据指令与所述指定单指令多数据指令之间的执行顺序。
4.根据权利要求1所述的方法,其中,所述基于所述访存控制指令,顺序执行所述第一循环体和所述第二循环体包括:
读取所述第一循环体、所述第二循环体和所述访存控制指令;
在执行所述第二循环体之前,基于所述访存控制指令,获取所述第一循环体的执行过程;以及
在确定所述第一循环体执行完毕的情况下,执行所述第二循环体。
5.根据权利要求1所述的方法,还包括:
确定执行所述初始循环结构时产生的初始运行开销和执行所述目标循环结构时产生的目标运行开销;以及
在确定所述目标运行开销小于所述初始运行开销的情况下,执行所述目标循环结构。
6.根据权利要求1所述的方法,还包括:
在确定所述第一循环体的访存地址和所述第二循环体的访存地址不存在冲突的情况下,并行执行所述第一循环体和所述第二循环体。
7.根据权利要求1所述的方法,其中,所述将初始循环结构转换为目标循环结构包括:
从中获取所述初始循环结构中多个单指令单数据指令对应的多个初始访存地址;
根据所述单指令多数据指令的访存条件,将所述多个初始访存地址转换为多个目标访存地址;以及
根据所述多个目标访存地址,将初始循环结构转换为目标循环结构。
8.根据权利要求1所述的方法,其中,所述将初始循环结构转换为目标循环结构包括:
确定所述初始循环结构包括的多个单指令单数据指令的数量;
根据所述数量,确定第一循环次数M和第二循环次数N,其中将所述多个单指令单数据指令转换为M个单指令多数据指令和N个单指令单数据指令,M和N均为正整数;以及
根据所述第一循环次数生成所述第一循环体,根据所述第二循环次数生成所述第二循环体。
9.一种循环任务的执行设备,包括:
存储器,配置为存储初始循环结构;以及
处理器,配置为:
响应于循环任务执行请求,从所述存储器中获取与所述循环任务对应的所述初始循环结构,将所述初始循环结构转换为目标循环结构,所述初始循环结构为所述处理器循环执行单指令单数据指令的运算结构,所述目标循环结构包括第一循环体和第二循环体,所述第一循环体为所述处理器循环执行单指令单数据指令的运算结构,所述第二循环体为所述处理器循环执行单指令多数据指令的运算结构;
在确定所述第一循环体和所述第二循环体存在访存冲突的情况下,在所述目标循环结构中设置访存控制指令;以及
基于所述访存控制指令,顺序执行所述第一循环体和所述第二循环体。
10.根据权利要求9所述的设备,其中,所述处理器还配置为:
从所述存储器中获取与所述第一循环体相关的多个第一访存地址和与所述第二循环体相关的多个第二访存地址;
分别确定所述多个第一访存地址的多个第一生命周期和分别确定所述多个第二访存地址的多个第二生命周期;以及
在确定所述多个第一生命周期中任一第一生命周期与所述多个第二生命周期中任一第二生命周期存在重叠的情况下,确定所述第一循环体和所述第二循环体存在访存冲突。
11.根据权利要求9所述的设备,其中,所述处理器还配置为:
从所述第一循环中确定指定单指令单数据指令和从所述第二循环中确定指定单指令多数据指令,所述指定单指令单数据指令的访存地址与所述指定单指令多数据指令的访存地址存在访存冲突;以及
在所述存储器中所述指定单指令单数据指令和所述指定单指令多数据指令之间设置所述访存控制指令,所述访存控制指令控制所述指定单指令单数据指令与所述指定单指令多数据指令之间的执行顺序。
12.根据权利要求9所述的设备,其中,所述处理器还配置为:
从所述存储器中读取所述第一循环体、所述第二循环体和所述访存控制指令;
在执行所述第二循环体之前,基于所述访存控制指令,获取所述第一循环体的执行过程;以及
在确定所述第一循环体执行完毕的情况下,执行所述第二循环体。
13.根据权利要求9所述的设备,其中,所述处理器还配置为:
确定执行所述初始循环结构时使用所述存储器产生的初始运行开销和执行所述目标循环结构时使用所述存储器产生的目标运行开销;以及
在确定所述目标运行开销小于所述初始运行开销的情况下,执行所述目标循环结构。
14.根据权利要求9所述的设备,其中,所述处理器还配置为:
在确定所述第一循环体的访存地址和所述第二循环体的访存地址不存在冲突的情况下,并行执行所述第一循环体和所述第二循环体。
15.一种芯片,包括:
权利要求9-14中任一项所述的执行设备。
16.一种电子设备,包括:
至少一个处理器;以及
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行权利要求1-8中任一项所述的方法。
17.一种存储有计算机指令的非瞬时计算机可读存储介质,其中,所述计算机指令用于使所述计算机执行根据权利要求1-8中任一项所述的方法。
18.一种计算机程序产品,包括计算机程序/指令,其特征在于,该计算机程序/指令被处理器执行时实现权利要求1-8中任一项所述方法的步骤。
CN202310802422.XA 2023-06-30 2023-06-30 循环任务的执行方法、设备、芯片和存储介质 Pending CN116795515A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310802422.XA CN116795515A (zh) 2023-06-30 2023-06-30 循环任务的执行方法、设备、芯片和存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310802422.XA CN116795515A (zh) 2023-06-30 2023-06-30 循环任务的执行方法、设备、芯片和存储介质

Publications (1)

Publication Number Publication Date
CN116795515A true CN116795515A (zh) 2023-09-22

Family

ID=88041910

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310802422.XA Pending CN116795515A (zh) 2023-06-30 2023-06-30 循环任务的执行方法、设备、芯片和存储介质

Country Status (1)

Country Link
CN (1) CN116795515A (zh)

Similar Documents

Publication Publication Date Title
JP5643345B2 (ja) アグレッシブ最適化によって施された変更をロールバック可能なアグレッシブ・コード最適化を実行する装置、方法及びコンピュータ・プログラム
US20230035910A1 (en) Method, system and device for parallel processing of data, and storage medium
US8972702B2 (en) Systems and methods for power management in a high performance computing (HPC) cluster
JP2015084251A (ja) ソフトウェア・アプリケーションの性能向上
CN110633200A (zh) 用于测试智能合约的方法和设备
US20150277876A1 (en) Compiling device, compiling method, and storage medium storing compiler program
CN112925587A (zh) 用于初始化应用的方法和装置
TW201935332A (zh) 分布式事務處理方法及裝置
US20150227351A1 (en) Changing de-optimization guard representation during the compilation process
WO2007105309A1 (ja) 並列化プログラム生成プログラム、並列化プログラム生成装置、及び並列化プログラム生成方法
US9910650B2 (en) Method and apparatus for approximating detection of overlaps between memory ranges
CN116795515A (zh) 循环任务的执行方法、设备、芯片和存储介质
CN116243983A (zh) 处理器、集成电路芯片、指令处理方法、电子设备和介质
US9229698B2 (en) Method and apparatus for compiler processing for a function marked with multiple execution spaces
US20230236878A1 (en) Efficiently launching tasks on a processor
CN113051173B (zh) 测试流程的编排执行方法、装置、计算机设备和存储介质
US10802854B2 (en) Method and apparatus for interpreting bytecode instruction stream
WO2008041442A1 (fr) Procédé de création de programme par parallélisation, dispositif de création de programme par parallélisation, et programme de création de programme par parallélisation
CN113918225A (zh) 指令预测方法、指令数据处理装置、处理器以及存储介质
CN112445587A (zh) 一种任务处理的方法以及任务处理装置
CN112114817A (zh) 基于cobol语言的数据字典字段信息获取方法及装置
CN114327643B (zh) 机器指令预处理方法、电子设备及计算机可读存储介质
JP2010140233A (ja) エミュレーションシステム及びエミュレーション方法
US10169181B2 (en) Efficient validation of transactional memory in a computer processor
EP3495960A1 (en) Program, apparatus, and method for communicating data between parallel processor cores

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
CB03 Change of inventor or designer information
CB03 Change of inventor or designer information

Inventor after: Wu Zeng

Inventor after: Lu Yaosong

Inventor before: Lu Yaosong

Inventor before: Wu Zeng