循环向量化方法和设备的制造方法

文档序号:8287854阅读:393来源:国知局
循环向量化方法和设备的制造方法
【技术领域】
[0001]本公开一般涉及计算平台,并且更具体地说,涉及循环向量化方法和设备。
【背景技术】
[0002]一些计算平台试图通过根据向量化技术转变代码来改进机器级代码执行。例如,对应于迭代循环的原始代码可被转换成向量化代码,以更好地利用计算平台的资源。
【附图说明】
[0003]图1是表示示例循环的伪代码。
[0004]图2是表示用于向量化图1示例的已知技术的伪代码。
[0005]图3是按照此公开的教导构造的示例循环向量化器的框图。
[0006]图4-6图示了与图3的示例循环向量化器关联的示例数据寄存器和示例阵列的示例内容。
[0007]图7是表示可执行以实现图3的示例循环向量化器的示例机器可读指令的流程图。
[0008]图8是表示由图3的示例循环向量化器生成的图1的循环的示例向量化的伪代码。
[0009]图9是按照此公开的教导构造的示例循环向量化器的框图。
[0010]图10是表示可执行以实现图9的示例循环向量化器的示例机器可读指令的流程图。
[0011]图11是表示由图9的示例循环向量化器生成的图1的循环的示例向量化的伪代码。
[0012]图12是能够执行图7的示例机器可读指令以实现图3的示例循环向量化器和/或图10的示例机器可读指令以实现图9的示例循环向量化器的示例处理系统的框图。
【具体实施方式】
[0013]要由处理器编译和执行的原始代码可包含一个或多个迭代循环。在此类实例中,数据被加载到一个或多个寄存器中,一个或多个操作在数据上执行,并且作为结果的信息存储在存储器中。计算平台可经由循环向量化改进原始代码的机器级执行。具体地说,通过对循环进行向量化使得同时执行循环的多个迭代可基本上减少循环的执行时间。循环迭代基本上同时执行被称为并行执行。循环向量化包含将循环的多个迭代的数据加载到单个向量中(例如经由向量寄存器实现的)并在整个向量上执行循环操作。作为包含循环的多个迭代数据的向量的结果,在整个向量上执行循环操作导致循环的多个迭代并行执行。
[0014]循环向量化有时在具有比要经由寄存器执行的原始代码(例如循环)所使用的数据类型大(例如根据系统的具体架构或硬件配置)的寄存器的系统中实现。例如,在具有128位寄存器的硬件上执行的循环可使用32位整数写或设计。为了向量化此类循环,与循环的第一迭代关联的数据被放入到寄存器中第一寄存器的较低位中,并且与循环的后面第二迭代(例如随后在循环定义中定义的一连串迭代中)关联的数据被加载到第一寄存器的较高位。在此类实例中,可同时执行的循环迭代的数量等于寄存器大小(例如硬件)与要加载的并且在循环内操作的数据类型的大小(例如软件)之比。例如,如果循环的原始代码将32位整数加载到变量中,并且循环要在具有128位寄存器的硬件上执行,则要在循环的第一迭代期间加载的整数被加载到128位整数的第一 32位中。进一步说,要在循环的第二迭代期间加载的整数被加载到寄存器的第二 32位中。进一步说,要在第三迭代期间加载的整数被加载到寄存器的第三32位中。进一步说,要在循环的第四迭代期间加载的整数被加载到寄存器的第四32位中。其中与循环的多个迭代关联的数据加载到单个寄存器中,在整个寄存器上执行循环的对应计算或操作。来自4个32位寄存器片段的结果被存储在适当存储器位置中。从而,在此类实例中,循环的执行时间减少了大致4倍(例如未将由向量化过程引起的开销考虑进去)。
[0015]在一些循环中,在循环的每个迭代开始时评估条件,并且仅在该条件被满足的情况下才执行循环的剩余命令。图1示出了此类循环100的示例伪代码。图1的示例循环100包含循环定义或声明102以及在循环100的迭代开始时要评估的条件104。在循环100被初始化之后,评估条件104。为了图示和简洁的目的,当要检查的条件评估引起要执行的代码中的随后计算的值时,那个值在本文被称为“真”。进一步说,为了图示和简洁的目的,当要检查的条件评估引起未执行的代码中的随后计算的值时,那个值在本文被称为“假”。从而,如果条件104对于具体迭代评估为真,则执行数据加载操作106,使用在加载操作106期间加载的数据执行计算操作108,并且计算操作108的结果经由写操作110存储。备选地,如果条件104对于具体迭代评估为假,则对于那个迭代不执行循环100的操作106、108和110,并且循环100跳到随后迭代(如果仍然存在任何迭代的话)。换句话说,当条件104评估为假时,操作106、108和110被绕过。
[0016]图2的伪代码200示出了用于对图1的示例循环100进行向量化的已知技术。如下面所描述的,图2的已知技术评估要向量化的循环100的不同迭代的条件104,并基于条件104的相应评估结果生成写掩码(在图2的附图标记202)。在图2的伪代码200中,写掩码由变量’kl’表示。进一步说,值’VL’表示寄存器可包含的元素数量(例如寄存器的向量长度,单位是字节、位、字等)。在图2的示例中,当条件104评估为真时,写掩码’ kl’的位被设置成逻辑一(I)。进一步说,当条件104评估为假时,写掩码’ kl’的位被设置成逻辑零(’O’)。在图2的伪代码200中,每个迭代的数据被加载到向量(V)中(在图2的附图标记204)。进一步说,在整个向量上同时执行图1的循环100的操作106-110(在图2的附图标记206)。伪代码200使用写掩码’ kl’仅将条件104评估为真的循环迭代的循环操作106-110的结果存储在存储器中(在图2的附图标记208)。例如,仅对于在写掩码’ kl’的对应位具有逻辑一(I)的迭代,保存循环操作106-110的结果。
[0017]值得注意的是,使用由图2的伪代码200表示的已知技术,甚至对于条件104评估为假的循环迭代,在数据上执行循环100的操作106-110(不过结果不存储在存储器中)。虽然图2的已知技术的写掩码’ kl’确保仅适当数据存储在存储器中,但这个技术导致执行不必要的计算,这否定了由循环100的向量化提供的相当大部分的改进(例如在执行时间上)。因此,图2的已知向量化技术包含低效率。
[0018]循环向量化的效率(诸如图2中示出的)可被估计为如下比率:〈条件为真的元素数量>/〈执行计算的元素数量〉。这个比率对于具有稀少计算的循环(例如很少满足先于操作的条件的循环(例如很少评估为真))可能接近O。对于此类循环,在图2中图示的已知向量化技术是高度低效率的,因为所执行的计算的相当大部分的结果实际上未存储在存储器中,并且从而没必要执行。一些已知技术试图通过当写掩码的所有剩余位都是O时增加中断计算执行的早期检查来避免不必要的技术。然而,这个附加检查给循环的向量化增加了开销,这也减少了从循环向量化提供的性能改进。
[0019]本文公开的示例方法、设备和/或制品提供了有效的循环向量化机制。具体地说,本文公开的示例通过提高系统资源的效率并防止执行不必要的循环操作(例如生成不会被存储的数据的操作)而改进了循环向量化性能。如本文下面更详细描述的,本文公开的示例通过评估循环的多个迭代的循环条件并根据控制掩码中的那些评估结果设置控制掩码位而生成控制掩码。本文公开的示例使用控制掩码压缩对应于寄存器中循环迭代的数据。比如,本文公开的示例通过从寄存器中移除在控制掩码中的对应位是逻辑零(O)的数据元素来压缩数据。本文公开的示例将剩余数据元素存储在阵列中。本文公开的示例以与用数据元素填充阵列直到阵列中的元素数量达到阈值(例如基于寄存器大小和/或数据元素与寄存器大小之间的大小比率)类似的方式处理附加循环迭代。本文公开的示例将阵列中的某些数据元素拷贝、移动或者以其它方式提供到寄存器,并且在寄存器的所提供数据上执行循环的计算。根据本文公开的示例,通过移位阵列的位从阵列中移除从阵列拷贝到寄存器的数据元素。本文公开的示例对于循环迭代重复这些过程。
[0020]例如作为根据本文公开的示例的阵列的重复压缩和填充的结果,系统资源被更好地利用。例如,寄存器空间和/或存储器未填充有不必要的数据。进一步说,通过用数据元素填充阵列并在阵列中的元素数量到达阈值之后将阵列位移位,可预先设置阵列的大小(例如提前配置),由此避免了对于存储器动态分配的需要。此外,本文公开的示例大大减少了与数据要被丢弃(例如未存储在存储器中)的迭代关联的浪费的计算执行的量。本文公开的示例所提供的浪费的计算执行的减少对于具有稀少计算的循环特别显著。从而,通过使用控制掩码压缩向量的数据元素并通过防止执行不必要的计算,增大了对应循环向量化的效率。
[0021]图3是按照此公开的教导构造的示例循环向量化器300的框图。下面结合图1的示例循环100描述图3的示例循环向量化器300。然而,可关于附加和/或备选循环利用图3的示例循环向量化器300。下面关于具有指示可被加载到寄存器之一中的数据元素(例如字节、字等)数量的向量长度(VL)的寄存器描述图3的示例循环向量化器300。示例循环向量化器300假定要向量化的循环迭代的数量是VL的倍数。VL的值可被计算为寄存器的大小与循环中数据类型的大小之间的比率(例如当寄存器大小是128位并且循环操作在32位整数上时,VL=4)。
[0022]图4-6图示了图3的示例循环向量化器300所使用的示例寄存器以及在由图3的示例循环向量化器300提供的向量化阶段寄存器的示例内容。具体地说,图4的示例图示了在图3的示例循环向量化器300已经处理了图1的循环100的迭代的第一集合之后的示例寄存器和阵列的内容。图5图示了在图3的示例循环向量化器300已经处理了循环100的迭代的第二集合之后的示例寄存器和阵列的内容。图6图示了在图3的示例循环向量化器300已经处理了循环100的迭代的第三集合之后的示例寄存器和阵列的内容。下面结合图3进一步讨论图4-6。
[0023]图3的示例循环向量化器300包含索引加载器301、数据加载器302和寄存器加载器303以在适当时将元素加载到寄存器中(根据由循环向量化器300生成的指令,如下面详细描述的)。图3的示例数据加载器302将循环的VL迭代的数据加载到数据寄存器320中。在所图示的示例中,要由示例循环向量化器300使用的数据寄存器320由四(4)个数据元素填充,每一个数据元素对应于图1的循环100的迭代。也就是说,数据寄存器320的大小(VL)是四(4),并且从而,图3的示例数据加载器302在用于处理的时间加载对应于循环100的四(4)个迭代的数据。例如,图4图示了示例数据加载器302加载对应于循环100的迭代零(O)、一⑴、二(2)和三(3)的数据(在图4中由数据元素a、b、c和d表示)之后的图3数据寄存器320的内容。
[0024]进一步说,图3的示例索引加载器301将对应于图1的循环100的VL迭代的索引加载到索引寄存器322中。在所图示的示例中,索引寄存器322的索引使数据寄存器320的数据元素能够在执行计算之后恰当地存储在正
当前第1页1 2 3 4 5 6 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1