CN104603755A - 循环向量化方法和设备 - Google Patents

循环向量化方法和设备 Download PDF

Info

Publication number
CN104603755A
CN104603755A CN201280075455.9A CN201280075455A CN104603755A CN 104603755 A CN104603755 A CN 104603755A CN 201280075455 A CN201280075455 A CN 201280075455A CN 104603755 A CN104603755 A CN 104603755A
Authority
CN
China
Prior art keywords
index
array
register
mask
circulation
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.)
Granted
Application number
CN201280075455.9A
Other languages
English (en)
Other versions
CN104603755B (zh
Inventor
C.J.休斯
M.普罗特尼科夫
A.纳赖金
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.)
Intel Corp
Original Assignee
Intel Corp
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 Intel Corp filed Critical Intel Corp
Priority to CN201710947606.XA priority Critical patent/CN107729018A/zh
Publication of CN104603755A publication Critical patent/CN104603755A/zh
Application granted granted Critical
Publication of CN104603755B publication Critical patent/CN104603755B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • G06F8/4441Reducing the execution time required by the program code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/45Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
    • G06F8/451Code distribution
    • G06F8/452Loops
    • 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/30018Bit or string instructions
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Complex Calculations (AREA)
  • Computer Hardware Design (AREA)
  • Computing Systems (AREA)

Abstract

公开了循环向量化方法和设备。示例方法包含通过评估循环条件来生成循环迭代的集合的第一控制掩码,其中生成第一控制掩码包含:当条件指示循环操作要被执行时将控制掩码的位设置成第一值,而当条件指示循环操作要被绕过时将第一控制掩码的位设置成第二值。示例方法还包含根据第一控制掩码压缩对应于循环迭代的第一集合的索引。

Description

循环向量化方法和设备
技术领域
本公开一般涉及计算平台,并且更具体地说,涉及循环向量化方法和设备。
背景技术
一些计算平台试图通过根据向量化技术转变代码来改进机器级代码执行。例如,对应于迭代循环的原始代码可被转换成向量化代码,以更好地利用计算平台的资源。
附图说明
图1是表示示例循环的伪代码。
图2是表示用于向量化图1示例的已知技术的伪代码。
图3是按照此公开的教导构造的示例循环向量化器的框图。
图4-6图示了与图3的示例循环向量化器关联的示例数据寄存器和示例阵列的示例内容。
图7是表示可执行以实现图3的示例循环向量化器的示例机器可读指令的流程图。
图8是表示由图3的示例循环向量化器生成的图1的循环的示例向量化的伪代码。
图9是按照此公开的教导构造的示例循环向量化器的框图。
图10是表示可执行以实现图9的示例循环向量化器的示例机器可读指令的流程图。
图11是表示由图9的示例循环向量化器生成的图1的循环的示例向量化的伪代码。
图12是能够执行图7的示例机器可读指令以实现图3的示例循环向量化器和/或图10的示例机器可读指令以实现图9的示例循环向量化器的示例处理系统的框图。
具体实施方式
要由处理器编译和执行的原始代码可包含一个或多个迭代循环。在此类实例中,数据被加载到一个或多个寄存器中,一个或多个操作在数据上执行,并且作为结果的信息存储在存储器中。计算平台可经由循环向量化改进原始代码的机器级执行。具体地说,通过对循环进行向量化使得同时执行循环的多个迭代可基本上减少循环的执行时间。循环迭代基本上同时执行被称为并行执行。循环向量化包含将循环的多个迭代的数据加载到单个向量中(例如经由向量寄存器实现的)并在整个向量上执行循环操作。作为包含循环的多个迭代数据的向量的结果,在整个向量上执行循环操作导致循环的多个迭代并行执行。
循环向量化有时在具有比要经由寄存器执行的原始代码(例如循环)所使用的数据类型大(例如根据系统的具体架构或硬件配置)的寄存器的系统中实现。例如,在具有128位寄存器的硬件上执行的循环可使用32位整数写或设计。为了向量化此类循环,与循环的第一迭代关联的数据被放入到寄存器中第一寄存器的较低位中,并且与循环的后面第二迭代(例如随后在循环定义中定义的一连串迭代中)关联的数据被加载到第一寄存器的较高位。在此类实例中,可同时执行的循环迭代的数量等于寄存器大小(例如硬件)与要加载的并且在循环内操作的数据类型的大小(例如软件)之比。例如,如果循环的原始代码将32位整数加载到变量中,并且循环要在具有128位寄存器的硬件上执行,则要在循环的第一迭代期间加载的整数被加载到128位整数的第一32位中。进一步说,要在循环的第二迭代期间加载的整数被加载到寄存器的第二32位中。进一步说,要在第三迭代期间加载的整数被加载到寄存器的第三32位中。进一步说,要在循环的第四迭代期间加载的整数被加载到寄存器的第四32位中。其中与循环的多个迭代关联的数据加载到单个寄存器中,在整个寄存器上执行循环的对应计算或操作。来自4个32位寄存器片段的结果被存储在适当存储器位置中。从而,在此类实例中,循环的执行时间减少了大致4倍(例如未将由向量化过程引起的开销考虑进去)。
在一些循环中,在循环的每个迭代开始时评估条件,并且仅在该条件被满足的情况下才执行循环的剩余命令。图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被绕过。
图2的伪代码200示出了用于对图1的示例循环100进行向量化的已知技术。如下面所描述的,图2的已知技术评估要向量化的循环100的不同迭代的条件104,并基于条件104的相应评估结果生成写掩码(在图2的附图标记202)。在图2的伪代码200中,写掩码由变量'kl'表示。进一步说,值'VL'表示寄存器可包含的元素数量(例如寄存器的向量长度,单位是字节、位、字等)。在图2的示例中,当条件104评估为真时,写掩码'kl'的位被设置成逻辑一(1)。进一步说,当条件104评估为假时,写掩码'kl'的位被设置成逻辑零('0')。在图2的伪代码200中,每个迭代的数据被加载到向量(v)中(在图2的附图标记204)。进一步说,在整个向量上同时执行图1的循环100的操作106-110(在图2的附图标记206)。伪代码200使用写掩码'kl'仅将条件104评估为真的循环迭代的循环操作106-110的结果存储在存储器中(在图2的附图标记208)。例如,仅对于在写掩码'kl'的对应位具有逻辑一(1)的迭代,保存循环操作106-110的结果。
值得注意的是,使用由图2的伪代码200表示的已知技术,甚至对于条件104评估为假的循环迭代,在数据上执行循环100的操作106-110(不过结果不存储在存储器中)。虽然图2的已知技术的写掩码'kl'确保仅适当数据存储在存储器中,但这个技术导致执行不必要的计算,这否定了由循环100的向量化提供的相当大部分的改进(例如在执行时间上)。因此,图2的已知向量化技术包含低效率。
循环向量化的效率(诸如图2中示出的)可被估计为如下比率:<条件为真的元素数量>/<执行计算的元素数量>。这个比率对于具有稀少计算的循环(例如很少满足先于操作的条件的循环(例如很少评估为真))可能接近0。对于此类循环,在图2中图示的已知向量化技术是高度低效率的,因为所执行的计算的相当大部分的结果实际上未存储在存储器中,并且从而没必要执行。一些已知技术试图通过当写掩码的所有剩余位都是0时增加中断计算执行的早期检查来避免不必要的技术。然而,这个附加检查给循环的向量化增加了开销,这也减少了从循环向量化提供的性能改进。
本文公开的示例方法、设备和/或制品提供了有效的循环向量化机制。具体地说,本文公开的示例通过提高系统资源的效率并防止执行不必要的循环操作(例如生成不会被存储的数据的操作)而改进了循环向量化性能。如本文下面更详细描述的,本文公开的示例通过评估循环的多个迭代的循环条件并根据控制掩码中的那些评估结果设置控制掩码位而生成控制掩码。本文公开的示例使用控制掩码压缩对应于寄存器中循环迭代的数据。比如,本文公开的示例通过从寄存器中移除在控制掩码中的对应位是逻辑零(0)的数据元素来压缩数据。本文公开的示例将剩余数据元素存储在阵列中。本文公开的示例以与用数据元素填充阵列直到阵列中的元素数量达到阈值(例如基于寄存器大小和/或数据元素与寄存器大小之间的大小比率)类似的方式处理附加循环迭代。本文公开的示例将阵列中的某些数据元素拷贝、移动或者以其它方式提供到寄存器,并且在寄存器的所提供数据上执行循环的计算。根据本文公开的示例,通过移位阵列的位从阵列中移除从阵列拷贝到寄存器的数据元素。本文公开的示例对于循环迭代重复这些过程。
例如作为根据本文公开的示例的阵列的重复压缩和填充的结果,系统资源被更好地利用。例如,寄存器空间和/或存储器未填充有不必要的数据。进一步说,通过用数据元素填充阵列并在阵列中的元素数量到达阈值之后将阵列位移位,可预先设置阵列的大小(例如提前配置),由此避免了对于存储器动态分配的需要。此外,本文公开的示例大大减少了与数据要被丢弃(例如未存储在存储器中)的迭代关联的浪费的计算执行的量。本文公开的示例所提供的浪费的计算执行的减少对于具有稀少计算的循环特别显著。从而,通过使用控制掩码压缩向量的数据元素并通过防止执行不必要的计算,增大了对应循环向量化的效率。
图3是按照此公开的教导构造的示例循环向量化器300的框图。下面结合图1的示例循环100描述图3的示例循环向量化器300。然而,可关于附加和/或备选循环利用图3的示例循环向量化器300。下面关于具有指示可被加载到寄存器之一中的数据元素(例如字节、字等)数量的向量长度(VL)的寄存器描述图3的示例循环向量化器300。示例循环向量化器300假定要向量化的循环迭代的数量是VL的倍数。VL的值可被计算为寄存器的大小与循环中数据类型的大小之间的比率(例如当寄存器大小是128位并且循环操作在32位整数上时,VL=4)。
图4-6图示了图3的示例循环向量化器300所使用的示例寄存器以及在由图3的示例循环向量化器300提供的向量化阶段寄存器的示例内容。具体地说,图4的示例图示了在图3的示例循环向量化器300已经处理了图1的循环100的迭代的第一集合之后的示例寄存器和阵列的内容。图5图示了在图3的示例循环向量化器300已经处理了循环100的迭代的第二集合之后的示例寄存器和阵列的内容。图6图示了在图3的示例循环向量化器300已经处理了循环100的迭代的第三集合之后的示例寄存器和阵列的内容。下面结合图3进一步讨论图4-6。
图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的迭代零(0)、一(1)、二(2)和三(3)的数据(在图4中由数据元素a、b、c和d表示)之后的图3数据寄存器320的内容。
进一步说,图3的示例索引加载器301将对应于图1的循环100的VL迭代的索引加载到索引寄存器322中。在所图示的示例中,索引寄存器322的索引使数据寄存器320的数据元素能够在执行计算之后恰当地存储在正确存储器位置中。换句话说,索引寄存器322中的索引指示数据寄存器320中的数据元素表示循环100的哪个(哪些)迭代。因而,索引寄存器322的索引还指示数据寄存器320的数据元素根据图1的循环100的存储操作110要存储的存储器中的相应位置。例如,图4图示了在索引加载器301对于循环100的第一四(4)个迭代加载索引零(0)、一(1)、二(2)和三(3)之后索引寄存器322的内容。
图3的示例循环向量化器300包含控制掩码生成器304以生成在图1的循环100的向量化中要使用的控制掩码。由图3的示例控制掩码生成器304生成的控制掩码的每个位被设置成逻辑一(1)或逻辑零(0)。为了设置控制掩码的各个位,图3的示例控制掩码生成器304在循环100的不同迭代中评估循环100的条件104。对于条件评估引起根据循环代码执行对应计算的值的迭代,图3的示例控制掩码生成器304将控制掩码的对应位设置成逻辑一(1)。对于条件评估引起根据循环代码不执行对应计算的值的迭代,图3的示例控制掩码生成器304将控制掩码的对应位设置成逻辑零(0)。
在所图示的示例中,控制掩码生成器304生成具有对应于数据寄存器320大小的位数的控制掩码。在示例中,要由图3的示例循环向量化器300使用的数据寄存器320可由四(4)个数据元素填充,每一个数据元素对应于图1的循环100的相应迭代。也就是说,数据寄存器320的大小(VL)是四(4)。因而,由数据寄存器320的示例控制掩码生成器304生成的图4的示例控制掩码400的第一示例实例具有四(4)位。如图4所示的,循环100的迭代零(0)的条件104评估为真,并且从而,控制掩码400的第一位被设置成逻辑一(1)。循环100的迭代一(0)的条件104评估为真,并且从而,控制掩码400的第二位被设置成逻辑零(1)。对于循环100的剩余迭代执行类似计算以完成控制掩码400。
图3的示例循环向量化器300包含数据压缩器306以使用由控制掩码生成器304生成的控制掩码400压缩数据寄存器320中的数据和索引寄存器322中的索引。在所图示的示例中,不应该在条件评估为假的循环迭代上执行计算。因而,图3的示例数据压缩器306压缩数据寄存器320中的数据,并将压缩结果存储在压缩数据寄存器324中。进一步说,示例数据压缩器306压缩索引寄存器322中的数据,并将压缩结果存储在压缩索引寄存器326中。为了压缩数据,示例数据压缩器306将在控制掩码400中具有一(1)对应值的数据元素从数据寄存器320拷贝到压缩数据寄存器324,而不从压缩数据寄存器324拷贝(例如省略)在控制掩码400中具有零(0)对应值的数据元素。类似地,为了压缩索引,示例数据压缩器306将在控制掩码400中具有一(1)对应值的索引从索引寄存器322拷贝到压缩索引寄存器326,而不拷贝(例如省略)在控制掩码400中具有零(0)对应值的数据元素。
图4的示例示出了在数据压缩器306使用示例控制掩码400压缩之后的压缩数据寄存器324的内容和压缩索引寄存器326的内容。在图4的示例中,因为与循环100的迭代零(0)和三(3)关联的控制掩码400的位被设置成逻辑一(1),因此示例数据压缩器306将对应数据元素拷贝到压缩数据寄存器324。数据压缩器306不拷贝对应于循环100的迭代一(1)和二(2)的数据元素,因为控制掩码400的对应位被设置成逻辑零(0)。从而,数据元素a和d被放在压缩数据寄存器324中,并且数据元素b和c从压缩数据寄存器324中省略。在一些实施例中,循环向量化器300不包含压缩数据寄存器324,并且压缩数据被存储在数据寄存器320中(例如在数据寄存器320的较低的两个数据元素位置中)。在一些示例中,循环向量化器300不包含压缩索引寄存器322,并且压缩索引信息被存储在索引寄存器322中(例如在索引寄存器322的较低的两个数据元素位置中)。
图3的示例循环向量化器300包含阵列填充器308以将数据输入到数据阵列328中并将索引输入到索引阵列330中。在数据压缩器306将压缩数据存储在压缩数据寄存器324中并将压缩索引存储在压缩索引寄存器326中之后,图3的示例阵列填充器308将数据从压缩数据寄存器324加载到数据阵列328中并从压缩索引寄存器326加载到索引阵列330中。为了继续以上示例,图4图示了数据元素a和d已经由数据阵列328接收,并且对应索引(零(0)和三(3))已经在索引阵列330中接收。
在所图示的示例中,数据阵列328的大小和索引阵列330的大小被设置成2*VL以避免溢出。在一些示例中,例如当循环展开、数据管道输送和/或附加或备选特征被合并时,数据阵列328和索引阵列330的大小更大。在图4中示出的示例中,VL是四(4),并且从而,阵列328和330的大小是八(8)。
图3的示例循环向量化器300包含阵列评估器310来分析阵列328、330以确定阈值数量的数据元素是否已经被填充在阵列328、330中。在所图示的示例中,阵列评估器310确定至少VL数据元素是否已经被填充在阵列328、330中以确定是否继续处理循环100的迭代和填充阵列328、300,或使用已经被输入到阵列328、330中的迭代执行循环100的计算或操作108-110。如果少于VL的数据元素已经被输入到阵列328、330中,则示例阵列评估器310指令示例循环向量化器300处理循环100的后续VL迭代(例如通过将循环100的迭代的后续集合加载到数据寄存器320中,如下面结合图5所描述的)。否则,如果VL或更多的元素已经被输入到阵列328、330中,则示例阵列评估器310指令示例循环向量化器300执行在已经被输入到阵列328、330中的迭代上的循环100的操作108-110(如下面结合图6所描述的)。在图4的所图示示例中,其中VL是四(4)并且迭代零(0)至三(3)已经被处理了,阵列328、330包含两(2)个元素,其小于四(4)。因此,在图4中图示的阶段,图3的示例阵列评估器310确定小于VL的元素已经被输入到阵列328、330中。因而,示例阵列评估器310生成循环100的另外迭代(例如后续四(4)个迭代)要由图3的示例循环向量化器300处理。
图5图示了与和处理循环100的迭代有关的第二集合的示例循环向量化器300关联的数据寄存器320、索引寄存器322、控制掩码400、压缩数据寄存器324、压缩索引寄存器326和阵列328、330的内容。在VL是四(4)的所图示示例中,数据加载器302加载对应于循环100的后续四(4)个迭代(它们是图1的循环100的迭代四(4)、五(5)、六(6)和七(7))的数据(在图5中由数据元素e、f、g和h表示)。在图5的示例中,循环100的条件104对于迭代四(4)、五(5)和七(7)评估为真。进一步说,在图5的示例中,条件104对于循环100的迭代六(6)评估为假。在图5的示例中,索引加载器301将对应于数据寄存器320中数据的索引加载到索引寄存器322中。
根据与数据寄存器320关联的条件评估信息,示例控制掩码生成器304生成具有图5中示出的值的控制掩码400。如上所述,图3的示例数据压缩器306使用控制掩码400压缩数据寄存器320的数据和索引寄存器326的索引。在图5的示例中,因为与循环100的迭代六(6)关联的控制掩码400的位被设置成逻辑零(0),因此示例数据压缩器306从压缩数据寄存器324中省略对应数据元素。进一步说,示例数据压缩器306将对应于设置成逻辑一(1)的控制掩码400的位的数据元素拷贝到压缩数据寄存器324。从而,在图5的示例中,数据元素e、f和h被放在压缩数据寄存器324中,并且数据元素g从压缩数据寄存器324中省略。示例数据压缩器306在索引寄存器322和压缩索引寄存器326上执行类似操作。
图3的示例阵列填充器308将数据从压缩数据寄存器324输入到数据阵列328的后续变量(例如NULL)位置。进一步说,示例阵列填充器308将索引从压缩索引寄存器326输入到索引阵列330的后续变量(例如NULL)位置。如图5的示例中所示,示例阵列328、330的两个较低阶位置保留关于循环迭代的第一集合(对应于图4的迭代零(0)至三(3))输入到阵列328、330中的值,而阵列328、330的较高阶位置已经从示例压缩寄存器324、326接收到关于循环100迭代的第二集合(对应于图5的迭代四(4)至七(7))的数据元素。在图5的示例中,阵列评估器310评估阵列328、330,并确定至少VL(例如四(4))个数据元素已经被输入到阵列328、330中。具体地说,阵列328、330包含对应于循环100的迭代零(0)、三(3)、四(4)、五(5)和七(7)的五(5)个数据元素。
因为VL或更多数据元素已经填充了阵列328、330,因此示例阵列评估器310指令循环向量化器300执行阵列328、330的第一VL元素上的循环100的操作108-110。在所图示的示例中,为了执行循环100的操作108-110,寄存器加载器303将数据阵列328的第一VL元素加载到数据寄存器320中。也就是说,在所图示的示例中,对于循环计算目的,将数据寄存器320从便于查看循环100的条件104重新赋予目的到托管数据,使得可执行循环100的操作108-110。在一些实施例中,对于循环计算目的,寄存器加载器303将数据阵列328的第一VL元素加载到压缩数据寄存器324中(即而不是数据寄存器320中)。
图6在附图标记600处示出在寄存器加载器303已经加载数据阵列328的第一VL数据元素之后但在执行循环100的操作108-110之前的数据寄存器320的内容。如图6所示,数据寄存器320包含数据元素a、d、e和f,它们对应于存储在图5的阵列328中的第一VL数据元素。进一步说,示例寄存器加载器303将索引阵列330的第一VL索引加载到压缩索引寄存器326中。在所图示的示例中,索引阵列330的第一VL索引被加载到压缩索引寄存器326中,使得保存索引寄存器322的内容(例如至少直到执行循环100的操作108-110为止)。如在图6在附图标记602所示出的,压缩索引寄存器326包含索引零(0)、三(3)、四(4)和五(5),它们对应于图5中索引阵列330的第一VL索引。
图3的示例循环向量化器300包含计算执行器312以执行在当前加载在数据寄存器320中的数据上循环100的操作。在循环100的代码中规定了由示例计算执行器312要执行的特定计算(例如在图1中的操作108)。在图1示出的示例中,操作108的内容由示例计算执行器312执行。操作108的结果存储在数据寄存器320中。例如,假定循环100的操作108共计值一(1)加上相应数据元素(例如computation(data_tmp)=data_tmp+l )。图6图示了在附图标记604处计算执行器312执行循环100的操作108之后的数据寄存器320的内容。
在操作108已经被执行到由循环100的代码所规定的存储器332中(即写操作110)之后,图3的示例循环向量化器300的存储器写入器314存储来自数据寄存器320的数据元素。具体地说,示例存储器写入器314使用压缩索引寄存器326的值将数据元素放在存储器332中的恰当位置。图6图示了在示例存储器写入器314使用来自压缩索引寄存器326的索引将数据从数据寄存器320写到存储器332中之后的某些存储器位置的内容。
图3的示例循环向量化器300包含阵列位移位器316以将数据阵列328和索引阵列330的最高阶VL元素移位到相应阵列328、330的较低阶VL位置。在所图示的示例中,在示例寄存器加载器303将较低阶VL元素从阵列328、330加载到寄存器320、326以从阵列328、330中清除那些VL元素之后,执行位移位。图6分别图示了在图3的示例阵列位移位器316移位阵列328、330的位之后的数据阵列328和索引阵列330的内容。
图3的示例循环向量化器300包含循环评估器318以确定是否已经处理了循环100的每个迭代(例如通过评估图1的循环定义102)。如果否,则示例循环评估器318指令循环向量化器300继续进行循环100的后续VL迭代。如果循环的每个迭代都已经被处理了,则循环向量化器300处理在阵列328、330中保留的任何数据元素。保留器元素由如下事实引起:数据元素仅从阵列328、330发送到寄存器320、326,并且在阵列评估器310之后执行的计算确定在每一个阵列328、330中已经填充了至少VL元素。然而,有可能,循环评估器318可以确定,当仍存在比阵列328、330中剩余的VL少的某一数量元素时,已经达到循环100的结尾。这些迭代的操作108-110仍需要例如由图3的计算执行器312执行。因而,在循环评估器318确定已经达到循环100结尾之后,控制掩码生成器304生成VL元素的剩余掩码,其中对应于阵列328、330中剩余的元素的较低阶位被设置成逻辑一(1),而对应于阵列328、330中不存在的元素的剩余较高阶位被设置成逻辑零(0)。图3的示例寄存器加载器303将剩余数据元素从数据阵列328加载到数据寄存器320,并将剩余索引从索引阵列330加载到压缩索引寄存器326。图3的示例计算执行器312在数据寄存器320的数据上执行操作108。图3的示例存储器写入器314使用压缩索引寄存器326的相应值将操作108的结果从数据寄存器320存储到存储器332中的适当位置。存储器写入器314还使用剩余掩码确保来自数据寄存器320的在剩余掩码中具有对应零(0)的元素不存储在存储器332中。
虽然在图3中已经图示了实现循环向量化器300的示例方式,但在图3中图示的元素、过程和/或装置中的一个或多个可以任何其它方式组合、划分、重新布置、省略、消除和/或实现。进一步说,图3的示例索引加载器301、示例数据加载器302、示例寄存器加载器303、示例控制掩码生成器304、示例数据压缩器306、示例阵列填充器308、示例阵列评估器310、示例计算执行器312、示例存储器写入器314、示例阵列位移位器316、示例循环评估器318和/或更一般地示例循环向量化器300可由硬件、软件、固件和/或硬件、软件和/或固件的任何组合实现。从而,例如,图3的示例索引加载器301、示例数据加载器302、示例寄存器加载器303、示例控制掩码生成器304、示例数据压缩器306、示例阵列填充器308、示例阵列评估器310、示例计算执行器312、示例存储器写入器314、示例阵列位移位器316、示例循环评估器318和/或更一般地示例循环向量化器300中的任一个可由一个或多个电路、可编程处理器、专用集成电路(ASIC)、可编程逻辑器件(PLD)、微处理器、硬件处理器和/或现场可编程逻辑器件(FPLD)等实现。当此专利的任何系统或设备权利要求被读成涵盖纯软件和/或固件实现时,图3的示例索引加载器301、示例数据加载器302、示例寄存器加载器303、示例控制掩码生成器304、示例数据压缩器306、示例阵列填充器308、示例阵列评估器310、示例计算执行器312、示例存储器写入器314、示例阵列位移位器316、示例循环评估器318和/或更一般地示例循环向量化器300中的至少一个由此被明确定义成包含存储软件和/或固件的有形计算机可读存储介质,诸如存储器、DVD、CD、蓝光等。更进一步说,图3的示例循环向量化器300除了或代替图3中图示的那些还可包含一个或多个元素、过程和/或装置,和/或可包含多于一个的任何或所有所图示的元素、过程和装置。
图7是表示用于实现图3的示例循环向量化器300的示例机器可读指令的流程图。在图7的示例流程图中,机器可读指令包括由处理器(诸如在下面结合图12讨论的示例计算机1200中示出的处理器1212)执行的程序。程序可用存储在有形计算机可读存储介质(诸如CD-ROM、软盘、硬驱、数字多功能盘(DVD)、蓝光盘或与处理器1212关联的存储器)上的软件实施,但整个程序和/或其部分备选地可由不同于处理器1212的装置执行和/或用固件和/或专用硬件实施。进一步说,尽管参考在图7中图示的流程图描述了示例程序,但备选地可使用实现图3的示例循环向量化器300的许多其它方法。例如,块的执行次序可被改变,和/或其中一些所描述的块可被改变、消除或组合。
如上面所提到的,图7的示例过程可使用存储在有形计算机可读存储介质(诸如硬盘驱动器、闪存、只读存储器(ROM)、压缩盘(CD)、数字多功能盘(DVD)、高速缓存、随机存取存储器(RAM)和/或信息被存储任何持续时间(例如延长的时间段、永久、短暂时刻、信息的暂时缓冲和/或高速缓存)的任何其它存储介质)上的编码指令(例如计算机可读指令)实现。本文所使用的术语有形计算机可读存储介质被明确定义成包含任何类型的计算机可读存储装置和/或盘,并且排除了传播信号。附加地或备选地,图7的示例过程可使用存储在非暂态计算机可读介质(诸如硬盘驱动器、闪存、只读存储器、压缩盘、数字多功能盘、高速缓存、随机存取存储器和/或信息被存储任何持续时间(例如延长的时间段、永久、短暂时刻、信息的暂时缓冲和/或高速缓存)的任何其它存储介质)上的编码指令(例如计算机可读指令)实现。本文所使用的术语非暂态计算机可读存储介质被明确定义成包含任何类型的计算机可读存储装置和/或盘,并且排除了传播信号。如本文所使用的,当在权利要求的前序部分中使用短语“至少”作为过渡术语时,它是开放式的,与术语“包括”是开放式的方式相同。从而,在其前序部分使用“至少”作为过渡术语的权利要求可包含除在权利要求中明确阐述的元素之外的元素。
图7开始于调用图3的示例循环向量化器300开始图1的示例循环100的向量化(块700)。如上所述,示例循环100包含多个迭代,每个迭代都具有指示是否应该对于循环100的相应迭代执行操作106-110的条件104。图3的示例控制掩码生成器304生成循环100的第一VL迭代的控制掩码,其中VL对应于可被输入到图3的数据寄存器320中的数据元素的数量(块702)。控制掩码指示条件104评估为真的迭代(例如通过将对应位设置成逻辑一(1))。图3的示例数据加载器302将对应于循环100的第一VL迭代的第一VL数据元素加载到数据寄存器320中。示例索引加载器301将对应于循环100的第一VL迭代的第一VL索引加载到索引寄存器322中(块704)。如上所述,图3的示例数据压缩器306使用控制掩码400将数据寄存器320的数据元素压缩到压缩数据寄存器324中,并将索引寄存器322中的索引压缩到压缩索引寄存器326中(块706)。
在已经压缩了数据和索引之后,图3的示例阵列填充器308将数据元素从压缩数据寄存器324输入到数据阵列328中,并将索引从压缩索引寄存器326输入到索引阵列330中(块708)。图3的示例阵列评估器310评估阵列328、330以确定是否至少VL元素已经被输入到阵列328、330中(块710)。如果否,则控制传到块720,这在下面描述。否则,如果图3的示例阵列评估器310确定至少VL元素已经被输入到阵列328、330(块710),则寄存器加载器303将第一VL元素从数据阵列328加载到数据寄存器320,并将第一VL索引从索引阵列330加载到压缩索引寄存器326中(块712)。示例计算执行器312在数据寄存器320上执行在如图1所示的循环100中规定的操作108(块714)。当已经执行了操作108时,图3的示例存储器写入器314将数据寄存器320的作为结果的数据元素写到存储器332中的适当位置(块716)。在所图示的示例中,使用来自压缩索引寄存器326的索引确定存储器332中的适当位置。在计算结果被写到存储器332之后,图3的示例阵列位移位器316将阵列328、330的较高阶VL位移位到阵列328、330的较低阶位(块718)。
控制然后到达块720。当阵列评估器310确定至少VL元素尚未被输入到阵列328、330中时,控制备选地可从块710到达块720。图3的示例循环评估器318确定是否已经处理了循环100的所有迭代(块720)。如果否,则控制传到块702。否则,为了处理循环100的剩余迭代,控制掩码生成器304生成剩余掩码(块722)。示例寄存器加载器303将剩余数据元素从数据阵列328加载到数据寄存器320,并将剩余索引从索引阵列330加载到压缩索引寄存器326(块724)。计算执行器312在数据寄存器320的数据元素上执行循环100的操作108(块726)。存储器写入器314使用剩余掩码和压缩索引寄存器326中的索引将作为结果的数据从数据寄存器320写到存储器332中,以确保适当数据被存储在适当存储器位置(块728)。图7的示例然后结束(块730)。
图8图示了对应于图7的流程图的表示由图3的示例循环向量化器实现的图1的示例循环100的向量化的示例伪代码800。在图8的向量化代码800中,循环向量化开始于行802,其对应于图7的块700。在图8的示例中,行804-810对应于某些变量的初始化。具体地说,在行804中,变量'i'跟踪循环100的当前迭代。行810中的变量'n'跟踪多少数据元素已经被输入(例如累积)在阵列328、330中。在示例伪代码800的行806中,第一VL索引被加载到向量'v_index'中,其由图3的索引寄存器322表示。在示例伪代码800的行808中,用具有值VL的向量的每个数据元素创建向量'v_VL',使得在循环100的每个VL迭代(即向量化的循环的一个迭代)之后,这个向量'v_VL'可用于使向量'v_index'递增。如上所述,变量'VL'表示寄存器320-326在给定时间可托管的数据元素数量。在示例伪代码800的行812中,设置循环定义(例如图1的定义102)。
在示例伪代码800的行814,其对应于图7的块702,控制掩码生成器304生成VL元素的控制掩码'kl'。在示例伪代码800的行816,其对应于图7的块704,数据加载器302将VL数据元素加载到向量'v1'中。在图8的示例中,在此阶段不需要加载索引,与在图7的块704中一样,因为索引被加载在行806中。
在示例伪代码800的行818中,数据压缩器306使用控制掩码'kl'压缩向量'v1'中的数据元素,并且压缩的结果被存储在向量'v2'中。在示例伪代码800的行820中,数据压缩器306使用控制掩码'kl'压缩向量'v_index'中的索引,并且压缩的结果被存储在向量'v3'中。图8的行818和820中的数据元素和索引的压缩对应于图7的块706。
在示例伪代码800的行822中,阵列填充器308将向量'v2'的数据元素输入到阵列'A'中。在图8的行824中,阵列填充器308将向量'v3'的数据元素输入到阵列'B'中。图8的行822和824对应于图7的块708。
在示例伪代码800的行826中,变量'n'增大了在行822和824中累积在阵列中的元素数量。在示例伪代码800的行828中,变量'i'增大了VL,因为已经处理了附加VL迭代。在示例伪代码800的行830中,索引加载器301生成对应于VL迭代的索引值。换句话说,向量'v_index'增大了向量'v_VL'。这增大了向量'v_index'的元素值,并有效地将后续VL索引加载到向量'v_index'中。
在示例伪代码800的行832,其对应于图7的块710,示例阵列评估器310确定在阵列328、330中是否已经累积了至少VL元素。如果在阵列328、330中已经累积了VL元素,则将VL数据元素从阵列'A'移动到图8的行834中的向量'v1'。进一步说,在示例伪代码800的行836中,将VL索引从阵列'B'移动到向量'v2'。图8的行834和836对应于图7的块712。
在示例伪代码800的行838,其对应于图7的块714,在向量'v1'上执行循环100的操作108。在图8的行840,其对应于图7的块716,存储器写入器314将计算结果写到存储器332。在示例伪代码800的行842和844,其对应于图7的块718,阵列位移位器316移位阵列'A'和'B'的位。在示例伪代码800的行846中,变量'n'减小了VL以指示在阵列328、330中的元素现在少了VL。
在示例伪代码800的行848,其对应于图7的块720,示例循环评估器318确定输入流是否在结尾(例如是否已经处理(例如向量化或丢弃)了循环100的所有迭代)。一旦输入流在结尾,在示例伪代码800的行850,其对应于图7的块722,掩码生成器304就生成剩余掩码'k2'。在示例伪代码800的行852中,剩余数据元素被加载到向量'v1',并且在行854中,剩余索引被加载到向量'v3'。行852和854对应于图7的块724。在示例伪代码800的行856,其对应于图7的块726,计算执行器312在剩余数据上执行操作108。在图8的行858,其对应于图7的块728,存储器写入器314使用剩余掩码'k2'将剩余操作108的结果写到存储器332。图8的示例伪代码800然后结束。
图9是按照此公开的教导构造的另一示例循环向量化器900的框图。下面结合图1的示例循环100描述图9的示例循环向量化器900。然而,可关于附加和/或备选循环利用图9的示例循环向量化器900。下面关于具有指示可被加载到寄存器之一中的数据元素(例如字节、字等)数量的向量长度(VL)的寄存器描述图9的示例循环向量化器900。示例循环向量化器900假定要向量化的循环迭代的数量是VL的倍数。VL的值可被计算为寄存器的大小与循环中数据类型的大小之间的比率(例如当寄存器大小是128位并且循环操作在32位整数上时,VL=4)。
图9的示例循环向量化器900包含将索引加载到索引寄存器922中的索引加载器901。图9的索引加载器901和索引寄存器922以与图3的索引加载器301和索引寄存器322类似的方式操作。图9的示例循环向量化器900包含以与图3的控制掩码生成器304类似方式操作的控制掩码生成器904。图9的示例循环向量化器900包含使用由控制掩码生成器904生成的控制掩码将索引寄存器922中的索引压缩到压缩索引寄存器926中的数据压缩器906。图9的数据压缩器906以与图3的数据压缩器306类似的方式压缩索引。图9的压缩索引寄存器926以与图3的压缩索引寄存器326类似的方式操作。图9的示例循环向量化器900包含将索引加载到索引阵列930中的阵列填充器908。图9的阵列填充器908和索引阵列930以与图3的阵列填充器308和索引阵列330类似的方式操作。然而,图9的示例循环向量化器900不包含数据阵列(例如图3的示例数据阵列328)。相反,如下所述,图9的示例循环向量化器900利用索引阵列930的索引确定或标识对应数据值。图9的示例循环向量化器900包含阵列评估器910,以与图3的阵列评估器310类似的方式评估在索引阵列930中是否已经累积了VL或更多的元素。图9的示例循环向量化器900包含寄存器加载器903,以与图3的寄存器加载器303类似的方式将索引从索引阵列930加载到压缩索引寄存器926中。图9的示例循环向量化器900包含将数据值加载到数据寄存器920中的数据搜集器902。
在图9的所图示示例中,在寄存器加载器903已经将索引从索引阵列930加载到压缩索引寄存器926之后,图9的示例数据搜集器902标识对应于压缩索引寄存器926的索引的数据值,并将标识的数据值加载到数据寄存器920中。从而,在图9的示例中,利用压缩索引寄存器926的索引标识对应数据值,并且在这么做时,避免了不得不利用压缩数据寄存器(例如图3的压缩数据寄存器324)。此外,使用索引标识适当数据值使图9的示例循环向量化器900能够利用索引阵列930,无需必须填充或保持对应数据阵列(例如图3的数据阵列328)。
图9的示例循环向量化器900包含以与图3的计算执行器312类似方式操作的计算执行器912。图9的示例循环向量化器900包含阵列位移位器916,其以与图3的阵列位移位器316类似的方式移位索引阵列930的位。图9的示例循环向量化器900包含以与图3的循环评估器318类似的方式操作的循环评估器918。图9的示例循环向量化器900包含以与图3的存储器写入器314类似的方式操作的存储器写入器914。图9的示例循环向量化器900包含以与图3的存储器332类似的方式操作的存储器932。
虽然在图9中已经图示了实现循环向量化器900的示例方式,但图9中图示的元素、过程和/或装置中的一个或多个可以任何其它方式组合、划分、重新布置、省略、消除和/或实现。进一步说,图9的示例索引加载器901、示例数据搜集器902、示例寄存器加载器903、示例控制掩码生成器904、示例数据压缩器906、示例阵列填充器908、示例阵列评估器910、示例计算执行器912、示例存储器写入器914、示例阵列位移位器916、示例循环评估器918和/或更一般地示例循环向量化器900可由硬件、软件、固件和/或硬件、软件和/或固件的任何组合实现。从而,例如,图9的示例索引加载器901、示例数据搜集器902、示例寄存器加载器903、示例控制掩码生成器904、示例数据压缩器906、示例阵列填充器908、示例阵列评估器910、示例计算执行器912、示例存储器写入器914、示例阵列位移位器916、示例循环评估器918和/或更一般地示例循环向量化器900中的任一个可由一个或多个电路、可编程处理器、专用集成电路(ASIC)、可编程逻辑器件(PLD)、微处理器、硬件处理器和/或现场可编程逻辑器件(FPLD)等实现。当此专利的任何系统或设备权利要求被读成涵盖纯软件和/或固件实现时,图9的示例索引加载器901、示例数据搜集器902、示例寄存器加载器903、示例控制掩码生成器904、示例数据压缩器906、示例阵列填充器908、示例阵列评估器910、示例计算执行器912、示例存储器写入器914、示例阵列位移位器916、示例循环评估器918和/或更一般地示例循环向量化器900中的至少一个由此被明确定义成包含存储软件和/或固件的有形计算机可读存储介质,诸如存储器、DVD、CD、蓝光等。更进一步说,图9的示例循环向量化器900除了或代替图3中图示的那些还可包含一个或多个元素、过程和/或装置,和/或可包含多于一个的任何或所有所图示的元素、过程和装置。
图10是表示用于实现图9的示例循环向量化器900的示例机器可读指令的流程图。在图10的示例流程图中,机器可读指令包括由处理器(诸如在下面结合图12讨论的示例计算机1200中示出的处理器1212)执行的程序。程序可用存储在有形计算机可读存储介质(诸如CD-ROM、软盘、硬驱、数字多功能盘(DVD)、蓝光盘或与处理器1212关联的存储器)上的软件实施,但整个程序和/或其部分备选地可由不同于处理器1212的装置执行和/或用固件和/或专用硬件实施。进一步说,尽管参考在图10中图示的流程图描述了示例程序,但备选地可使用实现图9的示例循环向量化器900的许多其它方法。例如,块的执行次序可被改变,和/或其中一些所描述的块可被改变、消除或组合。
如上面所提到的,图10的示例过程可使用存储在有形计算机可读存储介质(诸如硬盘驱动器、闪存、只读存储器(ROM)、压缩盘(CD)、数字多功能盘(DVD)、高速缓存、随机存取存储器(RAM)和/或信息被存储任何持续时间(例如延长的时间段、永久、短暂时刻、信息的暂时缓冲和/或高速缓存)的任何其它存储介质)上的编码指令(例如计算机可读指令)实现。本文所使用的术语有形计算机可读存储介质被明确定义成包含任何类型的计算机可读存储装置和/或盘,并且排除了传播信号。附加地或备选地,图10的示例过程可使用存储在非暂态计算机可读介质(诸如硬盘驱动器、闪存、只读存储器、压缩盘、数字多功能盘、高速缓存、随机存取存储器和/或信息被存储任何持续时间(例如延长的时间段、永久、短暂时刻、信息的暂时缓冲和/或高速缓存)的任何其它存储介质)上的编码指令(例如计算机可读指令)实现。本文所使用的术语非暂态计算机可读存储介质被明确定义成包含任何类型的计算机可读存储装置和/或盘,并且排除了传播信号。如本文所使用的,当在权利要求的前序部分中使用短语“至少”作为过渡术语时,它是开放式的,与术语“包括”是开放式的方式相同。从而,在其前序部分使用“至少”作为过渡术语的权利要求可包含除在权利要求中明确阐述的元素之外的元素。
图10开始于调用图9的示例循环向量化器900开始图1的示例循环100的向量化(块1000)。图9的示例索引加载器901将对应于图1的循环100的第一VL迭代的第一VL索引加载到索引寄存器922中,其中VL对应于可被输入到图9的数据寄存器920中的数据元素的数量(块1002)。图9的示例控制掩码生成器904生成循环100的第一VL迭代的控制掩码(块1004)。图9的示例数据压缩器906使用控制掩码将索引寄存器922中的索引压缩到压缩索引寄存器926中(块1006)。
在索引已经被压缩了之后,图9的示例阵列填充器908将索引从压缩索引寄存器926输入到索引阵列930(块1008)。图9的示例阵列评估器910评估索引阵列930以确定是否至少VL元素已经被输入到索引阵列930中(块1010)。如果否,则控制传到块1022,这在下面描述。否则,如果图9的示例阵列评估器910确定至少VL元素已经被输入到索引阵列930(块1010),则寄存器加载器903将第一VL索引从索引阵列930加载到压缩索引寄存器926(块1012)。示例数据搜集器902然后标识对应于压缩索引寄存器926的索引值的数据值,并将对应于压缩索引寄存器926中索引的那些VL数据元素加载到数据寄存器920中(块1014)。
示例计算执行器912在数据寄存器920上执行在如图1所示的循环100中规定的操作108(块1016)。当已经执行了操作108时,图9的示例存储器写入器914将数据寄存器920的作为结果的数据元素写到存储器932中的适当位置(块1018)。在所图示的示例中,使用来自压缩索引寄存器926的索引确定存储器932中的适当位置。在计算结果被写到存储器932之后,图9的示例阵列位移位器916将索引阵列930的较高阶VL位移位到索引阵列930的较低阶位(块1020)。
控制然后到达块1022。当阵列评估器910确定至少VL元素尚未被输入到索引阵列930中时,控制备选地可从块1010到达块1022。图9的示例循环评估器918确定是否已经处理了循环100的所有迭代(块1022)。如果否,则控制传到块1002。否则,为了处理循环100的剩余迭代,控制掩码生成器904生成剩余掩码(块1024)。寄存器加载器903将剩余索引从索引阵列930加载到压缩索引寄存器926(块1026)。数据搜集器902然后将对应于压缩索引寄存器926中索引的数据元素加载到数据寄存器920中(块1028)。计算执行器912在数据寄存器920的数据元素上执行循环100的操作108(块1030)。存储器写入器914使用剩余掩码和压缩索引寄存器926中的索引将作为结果的数据从数据寄存器920写到存储器932中,以确保适当数据被存储在适当存储器位置(块1032)。图9的示例然后结束(块1034)。
图11图示了对应于图10的流程图的表示由图9的示例循环向量化器900实现的图1的示例循环100的向量化的示例伪代码1100。在图11的示例伪代码1100中,循环向量化开始于行1102,其对应于图10的块1000。在图11的示例中,行1104-1110对应于某些变量的初始化。具体地说,在行1104中,变量'i'跟踪循环100的当前迭代。行1110中的变量'n'跟踪多少数据元素已经被输入(例如累积)在索引阵列930中。在示例伪代码1100的行1106中,第一VL索引被加载到向量'v_index'中,其由图9的索引寄存器922表示。在示例伪代码1100的行1108中,用具有值VL的向量的每个数据元素创建向量'v_VL',使得在循环100的每个VL迭代(即向量化的循环的一个迭代)之后,这个向量'v_VL'可由索引加载器901用于调整(例如递增)向量'v_index'。如上所述,变量'VL'表示寄存器920-926在给定时间可托管的数据元素数量。在示例伪代码1100的行1112中,设置循环定义(例如图1的定义102)。在行1106加载第一VL索引对应于图10的块1002。
在示例伪代码1100的行1114,其对应于图10的块1004,控制掩码生成器904生成VL元素的控制掩码'k1'。在示例伪代码1100的行1116中,数据压缩器906使用控制掩码'kl'压缩向量'v_index'中的索引,并且压缩的结果被存储在向量'v3'中。图11的行1116中的数据元素和索引的压缩对应于图10的块1006。在示例伪代码1100的行1118中,阵列填充器908将向量'v3'的元素输入到阵列'B'中,这对应于图10的块1008。
在示例伪代码1100的行1120中,变量'n'增大了在行1118中累积在阵列中的元素数量。在示例伪代码1100的行1122中,变量'i'增加了VL,因为已经处理了附加VL迭代。在示例伪代码1100的行1124中,索引加载器901生成后续VL迭代的索引。换句话说,向量'v_index'增大了向量'v_VL'。这增大了向量'v_index'的元素值,并有效地将后续VL索引加载到向量'v_index'中。
在示例伪代码1100的行1126,其对应于图10的块1010,示例阵列评估器910确定在阵列930中是否已经累积了至少VL元素。如果VL元素已经被累积在索引阵列930中,则示例寄存器加载器903在行1128将VL索引从阵列'B'加载到向量'v3'中。图11的行1128对应于图10的块1012。在示例伪代码1100的行1130,其对应于图10的块1014,示例数据搜集器902使用向量'v3'中的索引搜集向量'v1'中的VL数据元素。
在示例伪代码1100的行1132,其对应于图10的块1016,在向量'v1'上执行循环100的操作108-110。在图11的行1134,其对应于图10的块1018,存储器写入器914将计算结果写到存储器932。在示例伪代码1100的行1136,其对应于图10的块1020,阵列位移位器916移位阵列'B'的位。在示例伪代码1100的行1138中,变量'n'减小了VL以指示在索引阵列930中的元素现在少了VL。
在示例伪代码1100的行1140,其对应于图10的块1022,示例循环评估器318确定输入流是否在结尾(例如是否已经处理(例如向量化或丢弃)了循环100的所有迭代)。一旦输入流在结尾,在示例伪代码1100的行1142,其对应于图10的块1024,控制掩码生成器904就生成剩余掩码'k2'。在示例伪代码1100的行1144,其对应于图10的块1026,剩余索引被加载到向量'v3'中。在示例伪代码1100的行1146,其对应于图10的块1028,数据搜集器902搜集对应于向量'v3'中的索引的向量'v1'中的数据元素,并存储写掩码'k2'下的结果。在示例伪代码1100的行1148,其对应于图10的块1030,计算执行器912在剩余数据上执行操作108。在图11的行1150,其对应于图10的块1032,存储器写入器914使用剩余掩码'k2'将剩余操作108的结果写到存储器932。图11的示例伪代码1100然后结束。
图12是能够执行图7或图9的指令以分别实现图3的示例循环向量化器300或图9的示例循环向量化器900的处理器平台1200的框图。处理器平台1200例如可以是服务器、个人计算机、因特网设施、DVD播放器、CD播放器、蓝光播放器、游戏控制台、个人视频记录器、移动装置(例如智能电话、平板电脑等)、打印机或任何其它类型的计算装置。
即时示例的处理器平台1200包含处理器1212。本文所使用的术语“处理器”是指能够执行机器可读指令的逻辑电路。例如,处理器1212可由来自任何期望系列或制造商的一个或多个微处理器或控制器实现。
处理器1212包含本地存储器1213(例如高速缓存),并且经由总线1218与主存储器(包含易失性存储器1214和非易失性存储器1216)通信。易失性存储器1214可由同步动态随机存取存储器(SDRAM)、动态随机存取存储器(DRAM)、RAMBUS动态随机存取存储器(RDRAM)和/或任何其它类型随机存取存储器件。非易失性存储器1216可由闪存和/或任何其它期望类型的存储器件实现。对主存储器1214、1216的存取可由存储器控制器控制。
处理器平台1200还包含接口电路1220。接口电路1220可由任何类型的接口标准(诸如以太网接口、通用串行总线(USB)和/或PIC快速接口)实现。
一个或多个输入装置1222连接到接口电路1220。输入装置1222允许用户将数据和命令输入到处理器1212中。输入装置例如可由键盘、鼠标、触摸屏、跟踪垫、跟踪球、iso-point和/或语音识别系统实现。
一个或多个输出装置1224还连接到接口电路1220。输出装置1224例如可由显示装置(例如液晶显示器、阴极射线管显示器(CRT)、打印机和/或扬声器)实现。从而,接口电路1220通常包含图形驱动卡。
接口电路1220还包含通信装置诸如调制解调器或网络接口卡以便于经由网络1226(例如以太网连接、数字订户线(DSL)、电话线、同轴电缆、蜂窝电话系统等)与外部计算机交换数据。
处理器平台1200还包含用于存储软件和数据的一个或多个大容量存储装置1228。此类大容量存储装置1228的示例包含软盘驱动器、硬盘驱动器、压缩盘驱动器和数字多功能盘(DVD)驱动器。
图12的编码指令1232可存储在大容量存储装置1228中、易失性存储器1214中、非易失性存储器1216中和/或可拆卸存储介质诸如CD或DVD上。
示例方法包含:通过评估循环条件来生成循环迭代的第一集合的第一控制掩码,其中生成第一控制掩码包括:当条件指示循环操作要被执行时将第一控制掩码的位设置成第一值;以及当条件指示循环操作要被旁路时将第一控制掩码的位设置成第二值;以及用处理器根据第一控制掩码压缩对应于循环迭代的第一集合的索引,通过:当与第一索引关联的第一控制掩码的第一位具有第一值时,保持索引中的第一索引;以及当与第二索引关联的第一控制掩码的第二位具有第二值时,在执行操作之前,丢弃索引中的第二索引。
一些示例方法进一步包含:压缩对应于索引的数据元素,其中索引指示对于数据元素的相应数据元素操作的结果要存储在哪些存储器位置。
一些示例方法进一步包含:将数据元素加载到第一寄存器中;以及将对应于循环迭代的第一集合的索引加载到第二寄存器中。
一些示例进一步包含:用压缩的索引填充阵列,循环操作要在对应于阵列的压缩索引的数据元素上执行。
一些示例方法进一步包含:当已经被输入到阵列中的索引数量满足阈值时,将对应于阵列的索引量的数据元素加载到要在其上执行所述操作的寄存器中。
一些示例方法进一步包含:当已经被输入阵列中的索引数量不满足阈值时,评估循环迭代的第二集合的条件,而不在对应于阵列的索引的数据元素上执行操作。
一些示例方法进一步包含:当已经在对应于在阵列的较低阶位置的索引的数据元素上执行循环操作时,将在阵列的较高阶位置的索引移位到阵列的较低阶位置。
示例有形机器可读存储介质具有指令,质量当执行时使机器通过评估循环条件至少生成循环迭代的第一集合的第一控制掩码,其中生成第一控制掩码包括:当条件指示循环操作要被执行时将第一控制掩码的位设置成第一值;以及当条件指示循环操作要被旁路时将第一控制掩码的位设置成第二值;以及根据第一控制掩码压缩对应于循环迭代的第一集合的索引,通过:当与第一索引关联的第一控制掩码的第一位具有第一值时,保持索引中的第一索引;以及当与第二索引关联的第一控制掩码的第二位具有第二值时,在执行操作之前,丢弃索引中的第二索引。
在一些示例存储介质中,指令使机器将数据元素加载到第一寄存器中;以及将对应于循环迭代的第一集合的索引加载到第二寄存器中。
在一些示例存储介质中,指令使机器压缩对应于索引的数据元素,其中索引指示对于数据元素的相应数据元素操作的结果要存储在哪些存储器位置。
在一些示例存储介质中,指令使机器用压缩的索引填充阵列,循环的操作要在对应于阵列的压缩索引的数据元素上执行。
在一些示例存储介质中,指令使机器:当已经被输入到阵列中的索引数量满足阈值时,将对应于阵列的索引量的数据元素加载到要在其上执行所述操作的寄存器中。
在一些示例存储介质中,指令使机器:当已经被输入阵列中的索引数量不满足阈值时,评估循环迭代的第二集合的条件,而不在对应于阵列的索引的数据元素上执行操作。
在一些示例存储介质中,指令使机器:当已经在对应于在阵列的较低阶位置的索引的数据元素上执行循环的操作时,将在阵列的较高阶位置的索引移位到阵列的较低阶位置。
示例设备包含:控制掩码生成器,其通过评估循环条件来生成循环迭代的第一集合的第一控制掩码,控制掩码生成器生成第一控制掩码通过:当条件指示循环操作要被执行时将第一控制掩码的位设置成第一值;以及当条件指示循环操作要被旁路时将第一控制掩码的位设置成第二值;索引加载器,将对应于循环迭代的第一集合的索引加载到第一寄存器中;数据压缩器,根据第一控制掩码压缩第一寄存器中的索引通过:当与第一索引关联的第一控制掩码的第一位具有第一值时,保持索引中的第一索引;以及当与第二索引关联的第一控制掩码的第二位具有第二值时,在执行操作之前,丢弃第二索引。
一些示例设备进一步包含:数据加载器,将对应于索引的数据元素加载到第二寄存器,其中数据压缩器根据第一控制掩码压缩第二寄存器中的数据元素,并且索引指示对于数据元素的相应数据元素操作的结果要存储的存储器位置。
一些示例设备进一步包含:阵列填充器,用压缩的索引填充阵列,循环的操作要在对应于阵列的压缩索引的数据元素上执行。
一些示例设备进一步包含:阵列评估器,确定已经被输入到阵列中的索引数量是否满足阈值;以及寄存器加载器,当索引数量满足阈值时,将对应于阵列的索引量的数据元素加载到要在其上执行所述操作的寄存器中。
在一些示例设备中,当已经被输入阵列中的索引数量不满足阈值时,控制掩码生成器评估循环迭代的第二集合的条件,而不在对应于阵列的索引的数据元素上执行操作。
一些示例设备进一步包含:阵列位移位器,当已经在对应于在阵列的较低阶位置的索引的数据元素上执行循环的操作时,将在阵列的较高阶位置的索引移位到阵列的较低阶位置。
尽管本文已经公开了某些示例设备、方法和制品,但是本专利的覆盖范围不限于此。相反,本专利覆盖完全落入本专利的权利要求范围内的所有设备、方法和制品。

Claims (20)

1. 一种方法,包括:
通过评估循环条件来生成所述循环的迭代的第一集合的第一控制掩码,其中生成所述第一控制掩码包括:
当所述条件指示所述循环的操作要被执行时将所述第一控制掩码的位设置成第一值;以及
当所述条件指示所述循环的所述操作要被绕过时将所述第一控制掩码的所述位设置成第二值;以及
通过以下步骤用处理器根据所述第一控制掩码压缩对应于所述循环的迭代的所述第一集合的索引:
  当与所述第一索引关联的所述第一控制掩码的第一位具有所述第一值时,保持所述索引中的第一索引;以及
  当与所述第二索引关联的所述第一控制掩码的第二位具有所述第二值时,在执行所述操作之前,丢弃所述索引中的第二索引。
2. 如权利要求1所述的方法,进一步包括:压缩对应于所述索引的数据元素,其中所述索引指示对于所述数据元素的相应数据元素所述操作的结果要存储在哪些存储器位置。
3. 如权利要求2所述的方法,进一步包括:
将所述数据元素加载到第一寄存器中;以及
将对应于所述循环迭代的所述第一集合的所述索引加载到第二寄存器中。
4. 如权利要求1所述的方法,进一步包括:用所述压缩的索引填充阵列,所述循环的操作要在对应于所述阵列的所述压缩索引的数据元素上执行。
5. 如权利要求4所述的方法,进一步包括:当已经被输入到所述阵列中的索引数量满足阈值时,将对应于所述阵列的所述索引的量的所述数据元素加载到要在其上执行所述操作的寄存器中。
6. 如权利要求5所述的方法,进一步包括:当已经被输入所述阵列中的索引数量不满足所述阈值时,评估所述循环迭代的第二集合的条件,而不在对应于所述阵列的所述索引的所述数据元素上执行所述操作。
7. 如权利要求4所述的方法,进一步包括:当已经在对应于在所述阵列的较低阶位置的索引的所述数据元素上执行所述循环的所述操作时,将在所述阵列的较高阶位置的索引移位到所述阵列的所述较低阶位置。
8. 至少一种有形机器可读存储介质,其包括指令,所述指令当执行时使机器至少:
通过评估循环条件来生成所述循环迭代的第一集合的第一控制掩码,其中生成所述第一控制掩码包括:
当所述条件指示所述循环的操作要被执行时将所述第一控制掩码的位设置成第一值;以及
当所述条件指示所述循环的所述操作要被绕过时将所述第一控制掩码的所述位设置成第二值;以及
通过以下步骤根据所述第一控制掩码压缩对应于所述循环迭代的所述第一集合的索引:
  当与所述第一索引关联的所述第一控制掩码的第一位具有所述第一值时,保持所述索引中的第一索引;以及
  当与所述第二索引关联的所述第一控制掩码的第二位具有所述第二值时,在执行所述操作之前,丢弃所述索引中的第二索引。
9. 如权利要求8中所述的至少一种存储介质,其中所述指令当执行时使所述机器将所述数据元素加载到第一寄存器中;以及
将对应于所述循环迭代的所述第一集合的所述索引加载到第二寄存器中。
10. 如权利要求8中所述的至少一种存储介质,其中所述指令当执行时使所述机器压缩对应于所述索引的数据元素,其中所述索引指示对于所述数据元素的相应数据元素所述操作的结果要存储在哪些存储器位置。
11. 如权利要求8中所述的至少一种存储介质,其中所述指令当执行时使所述机器用所述压缩的索引填充阵列,所述循环的操作要在对应于所述阵列的所述压缩索引的数据元素上执行。
12. 如权利要求11中所述的至少一种存储介质,其中所述指令当执行时使所述机器:当已经被输入到所述阵列中的索引数量满足阈值时,将对应于所述阵列的所述索引的量的所述数据元素加载到要在其上执行所述操作的寄存器中。
13. 如权利要求12中所述的至少一种存储介质,其中所述指令当执行时使所述机器:当已经被输入所述阵列中的索引数量不满足所述阈值时,评估所述循环迭代的第二集合的条件,而不在对应于所述阵列的所述索引的所述数据元素上执行所述操作。
14. 如权利要求11中所述的至少一种存储介质,其中所述指令当执行时使所述机器:当已经在对应于在所述阵列的较低阶位置的所述索引的所述数据元素上执行所述循环的所述操作时,将在所述阵列的较高阶位置的索引移位到所述阵列的所述较低阶位置。
15. 一种设备,包括:
控制掩码生成器,用于通过评估循环条件来生成所述循环迭代的第一集合的第一控制掩码,所述控制掩码生成器通过以下步骤生成所述第一控制掩码:
  当所述条件指示所述循环的操作要被执行时将所述第一控制掩码的位设置成第一值;以及
  当所述条件指示所述循环的所述操作要被绕过时将所述第一控制掩码的所述位设置成第二值;
索引加载器,用于将对应于所述循环迭代的所述第一集合的索引加载到第一寄存器中;
数据压缩器,用于通过以下步骤根据所述第一控制掩码压缩所述第一寄存器中的所述索引:
  当与所述第一索引关联的所述第一控制掩码的第一位具有所述第一值时,保持所述索引中的第一索引;以及
  当与所述第二索引关联的所述第一控制掩码的第二位具有所述第二值时,在执行所述操作之前,丢弃第二索引。
16. 如权利要求15所述的设备,进一步包括:数据加载器,用于将对应于索引的数据元素加载到第二寄存器,其中所述数据压缩器要根据所述第一控制掩码压缩所述第二寄存器中的所述数据元素,并且所述索引指示对于所述数据元素的相应数据元素所述操作的结果要存储的存储器位置。
17. 如权利要求15所述的设备,进一步包括:阵列填充器,用于用所述压缩的索引填充阵列,所述循环的操作要在对应于所述阵列的所述压缩索引的数据元素上执行。
18. 如权利要求17所述的设备,进一步包括:阵列评估器,用于确定已经被输入到所述阵列中的索引数量是否满足阈值;以及寄存器加载器,用于当所述索引数量满足阈值时,将对应于所述阵列的所述索引的量的数据元素加载到要在其上执行所述操作的寄存器中。
19. 如权利要求18所述的设备,其中当已经被输入所述阵列中的索引数量不满足所述阈值时,所述控制掩码生成器要评估所述循环迭代的第二集合的条件,而不在对应于所述阵列的所述索引的所述数据元素上执行所述操作。
20. 如权利要求17所述的设备,进一步包括:阵列位移位器,用于当已经在对应于在所述阵列的较低阶位置的所述索引的所述数据元素上执行所述循环的所述操作时,将在所述阵列的较高阶位置的索引移位到所述阵列的所述较低阶位置。
CN201280075455.9A 2012-09-28 2012-09-28 循环向量化方法和设备 Expired - Fee Related CN104603755B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201710947606.XA CN107729018A (zh) 2012-09-28 2012-09-28 循环向量化方法和设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/RU2012/000794 WO2014051459A1 (en) 2012-09-28 2012-09-28 Loop vectorization methods and apparatus

Related Child Applications (1)

Application Number Title Priority Date Filing Date
CN201710947606.XA Division CN107729018A (zh) 2012-09-28 2012-09-28 循环向量化方法和设备

Publications (2)

Publication Number Publication Date
CN104603755A true CN104603755A (zh) 2015-05-06
CN104603755B CN104603755B (zh) 2017-11-14

Family

ID=50386394

Family Applications (2)

Application Number Title Priority Date Filing Date
CN201710947606.XA Pending CN107729018A (zh) 2012-09-28 2012-09-28 循环向量化方法和设备
CN201280075455.9A Expired - Fee Related CN104603755B (zh) 2012-09-28 2012-09-28 循环向量化方法和设备

Family Applications Before (1)

Application Number Title Priority Date Filing Date
CN201710947606.XA Pending CN107729018A (zh) 2012-09-28 2012-09-28 循环向量化方法和设备

Country Status (4)

Country Link
US (2) US9740493B2 (zh)
EP (1) EP2901275A4 (zh)
CN (2) CN107729018A (zh)
WO (1) WO2014051459A1 (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111159784A (zh) * 2019-12-17 2020-05-15 飞天诚信科技股份有限公司 一种在芯片中防差分功率分析攻击的实现方法及装置

Families Citing this family (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6331865B2 (ja) * 2014-08-13 2018-05-30 富士通株式会社 プログラム最適化方法,プログラム最適化プログラム及びプログラム最適化装置
US20170177348A1 (en) * 2015-12-21 2017-06-22 Intel Corporation Instruction and Logic for Compression and Rotation
GB2548603B (en) 2016-03-23 2018-09-26 Advanced Risc Mach Ltd Program loop control
GB2548604B (en) 2016-03-23 2018-03-21 Advanced Risc Mach Ltd Branch instruction
GB2548602B (en) 2016-03-23 2019-10-23 Advanced Risc Mach Ltd Program loop control
US10162752B2 (en) * 2016-09-22 2018-12-25 Qualcomm Incorporated Data storage at contiguous memory addresses
JP2018124877A (ja) * 2017-02-02 2018-08-09 富士通株式会社 コード生成装置、コード生成方法、およびコード生成プログラム
US10171103B1 (en) * 2018-01-12 2019-01-01 Mellanox Technologies, Ltd. Hardware data compression architecture including shift register and method thereof
US11275562B2 (en) 2020-02-19 2022-03-15 Micron Technology, Inc. Bit string accumulation
US11853757B2 (en) * 2020-03-06 2023-12-26 Intel Corporation Vectorization of loops based on vector masks and vector count distances

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080092125A1 (en) * 2006-10-13 2008-04-17 Roch Georges Archambault Sparse vectorization without hardware gather / scatter

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4873630A (en) * 1985-07-31 1989-10-10 Unisys Corporation Scientific processor to support a host processor referencing common memory
US5901318A (en) * 1996-05-06 1999-05-04 Hewlett-Packard Company Method and system for optimizing code
US5903769A (en) * 1997-03-31 1999-05-11 Sun Microsystems, Inc. Conditional vector processing
US7340495B2 (en) * 2001-10-29 2008-03-04 Intel Corporation Superior misaligned memory load and copy using merge hardware
JP3801545B2 (ja) * 2002-08-02 2006-07-26 松下電器産業株式会社 コンパイラ用プログラム、コンパイラ装置及びコンパイル方法
US7171544B2 (en) * 2003-12-15 2007-01-30 International Business Machines Corporation Run-time parallelization of loops in computer programs by access patterns
US7590830B2 (en) * 2004-05-28 2009-09-15 Sun Microsystems, Inc. Method and structure for concurrent branch prediction in a processor
US8752032B2 (en) * 2007-02-23 2014-06-10 Irdeto Canada Corporation System and method of interlocking to protect software-mediated program and device behaviours
JP5328186B2 (ja) * 2008-03-21 2013-10-30 ルネサスエレクトロニクス株式会社 データ処理システム及びデータ処理方法

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080092125A1 (en) * 2006-10-13 2008-04-17 Roch Georges Archambault Sparse vectorization without hardware gather / scatter

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
DAVID PATTERSON: "<Lecture 7 Memory Hierachy -3Cs and 7 ways to reduce misses>", <WWW.CS.BERKELEY.EDU/~PATTRSN/252F96/LECTURE07.PDF> *
FUNG ET AL.: "<Thread Block Compaction for efficient SIMT control flow>", <HPCA 2011 IEEE> *
HENNESSY,PATTERSON: "《Computer Architecture A Quantitative Approach》", 30 July 2004 *

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111159784A (zh) * 2019-12-17 2020-05-15 飞天诚信科技股份有限公司 一种在芯片中防差分功率分析攻击的实现方法及装置
CN111159784B (zh) * 2019-12-17 2022-02-01 飞天诚信科技股份有限公司 一种在芯片中防差分功率分析攻击的实现方法及装置

Also Published As

Publication number Publication date
EP2901275A1 (en) 2015-08-05
US9740493B2 (en) 2017-08-22
CN104603755B (zh) 2017-11-14
US10884744B2 (en) 2021-01-05
CN107729018A (zh) 2018-02-23
US20180032342A1 (en) 2018-02-01
WO2014051459A1 (en) 2014-04-03
EP2901275A4 (en) 2016-06-08
US20140095850A1 (en) 2014-04-03

Similar Documents

Publication Publication Date Title
CN104603755A (zh) 循环向量化方法和设备
US9286074B2 (en) NOP instruction compressing apparatus and method in a VLIW machine
CN110728578A (zh) 区块链交易的并行执行方法、系统及存储介质
US11036507B2 (en) Processor testing using pairs of counter incrementing and branch instructions
CN105320469A (zh) 处理器和数据收集方法
KR20190113007A (ko) 합성곱 연산을 위한 장치 및 방법
CN106406972B (zh) 程序编译方法和编译器
US10628066B2 (en) Ensuring in-storage data atomicity and consistency at low cost
CN110795165A (zh) 一种神经网络模型数据的加载方法及相关装置
CN114924748A (zh) 编译方法、装置及设备
US20120102496A1 (en) Reconfigurable processor and method for processing a nested loop
US20180088948A1 (en) Efficient vectorization techniques for operands in non-sequential memory locations
CN115130672A (zh) 一种软硬件协同优化卷积神经网络计算的方法及装置
US11550574B2 (en) Generating a vector predicate summary
US8700887B2 (en) Register, processor, and method of controlling a processor using data type information
US9582410B2 (en) Testing software on a computer system
CN112308762A (zh) 一种数据处理方法及装置
Farkash et al. Mining coverage data for test set coverage efficiency
CN112580297B (zh) 一种编解码数据的方法、电子设备及存储介质
CN104503756A (zh) 应用加速方法和装置
RU2441272C2 (ru) Способ эмуляции компьютерных систем с гетерогенной памятью и устройство для реализации способа
CN104639981A (zh) 电视系统开启方法和电视
Hunter Overview of embedded DSP design
KR20230086275A (ko) 5G 통신시스템에의 응용을 고려한 딥러닝 가속기에서 global buffer에 대한 접근을 최소화하기 위해 재정렬된 연산 시퀀스를 기반으로 local register file을 사용하는 방법
US20200310970A1 (en) Permutation apparatus, permutation method, and program

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20171114

Termination date: 20210928