当前位置: 首页 > 专利查询>英特尔公司专利>正文

使用混洗表和混合表经由矢量指令优化程序循环的方法技术

技术编号:10351997 阅读:128 留言:0更新日期:2014-08-25 10:56
根据一种实施例,一种代码优化器被配置为接收第一代码,该第一代码具有以标量指令实现的程序循环,用于基于第三数组的值把第一数组的值存储到第二数组,并生成第二代码,该第二代码用至少一个矢量指令来表示程序循环。该第二代码包括混洗指令、混合指令和存储指令,该混洗指令以矢量方式使用混洗表基于第三数组混洗第一数组的元素,该混合指令以矢量方式使用混合表混合第一数组的已混洗的元素,该存储指令把第一数组的已混合元素存储在第二数组中。

【技术实现步骤摘要】
【国外来华专利技术】使用混洗表和混合表经由矢量指令优化程序循环的方法
本专利技术的各实施例通常涉及程序循环的优化。尤其,本专利技术的各实施例涉及使用混洗表和混合表经由矢量指令优化程序循环。
技术介绍
几乎所有数据处理应用都涉及必须对数据集合迭代地执行的操作。这样的程序循环可以包括任何数量的指令,且可以迭代根据计算机程序确定的任何次数。很常见的情况是,基于第三数组的条件把第一数组的值赋值给第二数组。通常,为了实现这样的操作,取决于第三数组的相应元素,利用程序循环来把第一数组的元素迭代地赋值给第二数组的元素,以标量方式每次一个元素地进行,如图3中所示的。在如图3中所示出的示例中,基于数组b[]的相应元素的值或条件,在程序循环中每次一个元素地把数组a[]的元素赋值给数组dest[]。然而,因为由处理器执行的大量的迭代和指令,这样的实现是低效的。附图说明作为示例而非限制,在附图的各图中阐释本专利技术的各实施例,附图中,类似的标号指示相似的元素。图1是阐释根据一种实施例的代码优化器的框图。图2是阐释根据一种实施例优化程序代码的方法的流程图。图3是表示典型程序循环的伪代码。图4是根据一种实施例用高级矢量指令表示程序循环的伪代码。图5是阐释根据一种实施例存储混洗表和掩码存储表的数据结构的图。图6是阐释根据一种实施例用于优化程序循环的方法的流程图。图7是根据另一实施例用高级矢量指令表示程序循环的伪代码。图8是阐释根据一种实施例存储混洗表和混合表的数据结构的图。图9是阐释根据另一实施例用于优化程序循环的方法的流程图。图10是阐释根据一种实施例的数据处理系统的示例的框图。图11是阐释根据另一实施例的数据处理系统的示例的框图。具体实施方式将参考下面讨论的细节描述本专利技术的各种实施例和各方面,且附图将阐释各种实施例。下列的描述和附图阐释本专利技术,且不应被解释成限制本专利技术。描述了众多特定细节,以便提供对本专利技术的各种实施例的透彻理解。然而,在某些实例中,不描述公知的或常规的细节,以便提供对本专利技术的各实施例的简练讨论。本说明书中对“一种实施例”或“一个实施例”的引用意味着,结合该实时例描述的具体的特征、结构或特性可以被包括在本专利技术的至少一种实施例中。在本说明书中各个地方出现“在一个实施例中”的短语不一定都是指相同的实施例。根据一些实施例,通过使用矢量指令以矢量方式执行程序循环的迭代,代码优化器(例如,编译器)用于优化程序循环的标量指令。通过由诸如单指令多数据(SIMD)处理器等的具有矢量能力的处理器执行矢量指令或打包指令(Packedinstruction),执行程序循环的迭代。通过使用矢量或打包指令,基于矢量指令的矢量长度或打包在SIMD指令内的指令的数量,可以减少或缩小程序循环的迭代的数量。可以由具有矢量能力的处理器使用矢量指令来并行执行典型程序循环的某些迭代。结果,程序循环的执行效率可以得到极大改善。根据一种实施例,代码优化器接收到第一代码,该第一代码具有用于基于第三数组(例如,条件数组)的元素的值或条件把第一数组(例如,源数组)的元素赋值给第二数组(例如,目的地数组)的元素的程序循环。作为响应,代码优化器被配置为生成第二代码,该第二代码具有执行与程序循环相同的操作的矢量指令。在一种实施例中,在程序循环的每次迭代中,第二代码包括VECTOR_SHUFLE指令和VECTOR_MASKSTORE指令,VECTOR_SHUFLE指令基于第三数组的相应元素的值或条件使用混洗表混洗第一数组的元素,VECTOR_MASKSTORE指令以矢量方式把第一数组的已混洗的元素存储在第二数组中。在另一实施例中,在程序循环的每次迭代中,第二代码包括VECTOR_SHUFLE指令和VECTOR_BLEND指令,VECTOR_SHUFLE指令基于第三数组的相应元素的值或条件使用混洗表混洗第一数组的元素,VECTOR_BLEND指令以矢量方式混合第一数组的已混洗的元素。取决于矢量长度,一旦已经经由混合操作积聚了第一数组的元素,那么,就把第一数组的已混合的元素存储在第二数组中。图1是阐释根据一种实施例的代码优化器的框图。参见图1,系统100包括接收第一代码101的代码优化器102,第一代码101具有带有标量指令(例如图3中所示出的那些标量指令)的程序循环。第一代码101中的程序循环包括标量指令,这些标量指令基于第三数组的元素的值或条件,分别迭代地把第一数组的元素的值赋值给第二数组的元素。响应于第一代码101,代码优化器102被配置为把第一代码101的标量指令转换成第二代码103,第二代码103具有至少一个矢量指令以便代替第一代码101的一些标量指令。在一种实施例中,代码优化器被配置为把多个标量迭代的多个数据打包成单个SIMD指令。第二代码103的至少一个矢量指令允许具有矢量能力的处理器104(例如,具有SIMD能力的处理器)执行至少一个矢量指令,以便在程序循环中并行执行某些步骤,例如在单个指令循环期间。在一种实施例中,在每次迭代期间,第二代码103包括在此称为VECTOR_SHUFFLE指令的混洗指令,该混洗指令基于根据第三数组的相应元素的值或条件生成的掩码使用混洗表105混洗第一数组的元素。第二代码103还包括在此称为VECTOR_MASKSTORE指令的存储指令,该存储指令基于掩码将第一数组的已混洗的元素存储在第二数组中。在另一实施例中,在每次迭代期间,第二代码103包括VECTOR_SHUFFLE指令,VECTOR_SHUFFLE指令基于根据第三数组的相应元素的值或条件生成的掩码使用混洗表105混洗第一数组的元素。第二代码103还包括在此称为VECTOR_BLEND指令的混合指令,该混合指令将第一数组的已混洗的元素与先前已混洗的元素混合。在已经混洗并混合第一数组的所有元素时,然后,把第一数组的已混合的元素存储在第二数组中。应注意,代码优化器102可以以硬件、软件或其组合实现。在一种实施例中,代码优化器102可以是编译器的一部分,且处理器104可以是可从加利福尼亚州圣克拉拉市的公司得到的高级矢量扩展(AVX)兼容的处理器。在一种实施例中,VECTOR_SHUFFLE指令可以是流式SIMD扩展(SSE)和/或AVX兼容的指令的PSHUFB、PSHUFD、PSHUFHW和PSHUFLW中的一种。VECTOR_MASKSTORE指令可以是SSE/AVX兼容的指令的MASKMOVDQU、VMASKMOV和MASKMOVQ中的一种。VECTOR_BLEND指令可以是SSE/AVX兼容的指令的BLENDPD、BLENDPS、BLENDVPD和BLENDVPS中的一种。图2是阐释根据一种实施例优化程序代码的方法的流程图。例如,方法200可以由图1的代码优化器102执行。参见图2,在框201,处理逻辑接收第一代码,该第一代码具有程序循环,该程序循环具有基于第三数组的值或条件把第一数组的值存储到第二数组的标量指令。在框202,处理逻辑生成第二代码,该第二代码具有诸如VECTOR_SHUFFLE、VECTOR_MASKSTORE和VECTOR_BLEND指令等的至少一个矢量指令,从而以矢量方式执行程序循环的一些迭代。矢量指令可以与基于AVX的矢量指令兼容。在框203,将第二代码存储在存储器本文档来自技高网...
使用混洗表和混合表经由矢量指令优化程序循环的方法

【技术保护点】
一种计算机实现的方法,包括:接收第一代码,所述第一代码具有以标量指令实现的程序循环,用于基于第三数组的值把第一数组的值存储到第二数组中;以及生成第二代码,所述第二代码用至少一个矢量指令表示所述程序循环,所述第二代码包括混洗指令,用于以矢量方式使用混洗表基于所述第三数组混洗所述第一数组的元素,混合指令,用于以矢量方式使用混合表混合所述第一数组的已混洗的元素,以及存储指令,用于将所述第一数组的已混洗的元素存储在所述第二数组中。

【技术特征摘要】
【国外来华专利技术】1.一种计算机实现的方法,包括:接收第一代码,所述第一代码具有以标量指令实现的程序循环,用于基于第三数组的值把第一数组的值存储到第二数组中;以及生成第二代码,所述第二代码用至少一个矢量指令表示所述程序循环,所述第二代码包括混洗指令,用于以矢量方式使用混洗表基于所述第三数组混洗所述第一数组的元素,混合指令,用于以矢量方式使用混合表混合所述第一数组的已混洗的元素,以及存储指令,用于将所述第一数组的已混洗的元素存储在所述第二数组中。2.如权利要求1所述的方法,其特征在于,所述第二代码进一步包括用于将所述第三数组的元素与预先确定的阈值进行比较,从而生成比较结果的指令,以及用于基于所述比较结果生成掩码的指令,基于所述掩码混洗所述第一数组的所述元素。3.如权利要求2所述的方法,其特征在于,所述第二代码进一步包括用于加载基于所述掩码选择的所述混洗表的元素的指令,基于所述混洗表的已选择的元素经由所述混洗指令混洗所述第一数组的所述元素。4.如权利要求2所述的方法,其特征在于,所述第二代码进一步包括用于加载基于所述掩码选择的所述混合表的元素的指令,基于所述混合表的已选择的元素经由所述混合指令混合所述第一数组的已混洗的元素。5.如权利要求4所述的方法,其特征在于,所述混合表的已选择的元素是基于所述掩码的具有预先确定的逻辑值的比特的数量确定的。6.如权利要求2所述的方法,其特征在于,所述第二代码进一步包括用于将所述预先确定的阈值存储在矢量寄存器中的指令,使用矢量比较指令把所述第一数组的所述元素与存储在所述矢量寄存器中的值进行比较。7.如权利要求2所述的方法,其特征在于,所述掩码是基于存储在矢量寄存器中的所述比较结果的符号位生成的。8.一种代码优化器,包括:接收装置,被配置成接收第一代码,所述第一代码具有以标量指令实现的程序循环,用于基于第三数组的值把第一数组的值存储到第二数组中;以及生成装置,被配置成生成第二代码,所述第二代码使用至少一个矢量指令表示所述程序循环,所述第二代码包括混洗指令,用于以矢量方式基于所述第三数组使用混洗表混洗所述第一数组的元素,混合指令,用于以矢量方式使用混合表混合所述第一数组的已混洗的元素,以及存储指令,用于将所述第一数组的已混洗的元素存储在所述第二数组中。9.如权利要求8所述的代码优化器,其特征在于,所述第二代码进一步包括用于将所述第三数组的元素与预先确定的阈值进行比较,从而生成比较结果的指令,以及用于基于所述比较结果生成掩码的指令,基于所述掩码混洗所述第一数组的所述元素。10.如权利要求9所述的代码优化器,其特征在于,所述第二代码进一步包...

【专利技术属性】
技术研发人员:T·尤里尔E·乌尔德阿迈德瓦尔B·T·托尔
申请(专利权)人:英特尔公司
类型:发明
国别省市:美国;US

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1