CN107873091B - 用于滑动窗口运算的方法和设备 - Google Patents

用于滑动窗口运算的方法和设备 Download PDF

Info

Publication number
CN107873091B
CN107873091B CN201680039649.1A CN201680039649A CN107873091B CN 107873091 B CN107873091 B CN 107873091B CN 201680039649 A CN201680039649 A CN 201680039649A CN 107873091 B CN107873091 B CN 107873091B
Authority
CN
China
Prior art keywords
lane
register
input data
data element
data elements
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.)
Active
Application number
CN201680039649.1A
Other languages
English (en)
Other versions
CN107873091A (zh
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.)
Qualcomm Inc
Original Assignee
Qualcomm Inc
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 Qualcomm Inc filed Critical Qualcomm Inc
Publication of CN107873091A publication Critical patent/CN107873091A/zh
Application granted granted Critical
Publication of CN107873091B publication Critical patent/CN107873091B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

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/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/82Architectures of general purpose stored program computers data or demand driven
    • 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
    • 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/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/30134Register stacks; shift registers
    • 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
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3887Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • G06F15/8007Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors single instruction multiple data [SIMD] multiprocessors
    • 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/30021Compare instructions, e.g. Greater-Than, Equal-To, MINMAX
    • 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/30029Logical and Boolean instructions, e.g. XOR, NOT
    • 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/30032Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
    • 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/30098Register arrangements
    • G06F9/30105Register structure
    • 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/30098Register arrangements
    • G06F9/30105Register structure
    • G06F9/30112Register structure comprising data of variable length

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Mathematical Physics (AREA)
  • Computational Mathematics (AREA)
  • Pure & Applied Mathematics (AREA)
  • Mathematical Optimization (AREA)
  • Mathematical Analysis (AREA)
  • Executing Machine-Instructions (AREA)
  • Advance Control (AREA)
  • Complex Calculations (AREA)

Abstract

第一寄存器具有存储第一输入数据的通路,并且第二寄存器具有存储第二输入数据元素的通路。所述第二寄存器的所述通路的宽度等于所述第一寄存器的所述通路的宽度。单指令多数据SIMD通路具有与所述第一寄存器的所述通路的所述宽度相等的通路宽度。所述SIMD通路经配置以在所述第一寄存器的所述通路中的所述第一输入数据元素和所述第二寄存器的所述通路中的所述第二输入数据元素上执行滑动窗口运算。执行所述滑动窗口运算包含基于存储在所述第一寄存器的第一位置中的第一输入数据元素和存储在所述第二寄存器的第二位置中的第二输入数据元素来确定结果。所述第二位置不同于所述第一位置。

Description

用于滑动窗口运算的方法和设备
相关申请的交叉参考
本申请主张2015年7月20日递交的共同拥有的第14/803,728号美国非临时专利申请的优先权,其全文的内容明确地被以引用的方式并入本文中。
技术领域
本发明大体上涉及用于单指令多数据(SIMD)架构的滑动窗口运算。更确切地说,本发明涉及减少移位的量以及与执行滑动窗口运算相关联的寄存器。
背景技术
技术的进步已经带来了更小且更强大的计算装置。举例来说,当前存在多种便携式个人计算装置,包含无线电话,例如,移动和智能电话、平板计算机和膝上型计算机,其体积小,重量轻,且便于用户携带。这些装置可经由无线网络传送话音和数据包。另外,许多此类装置并入有额外功能性,例如,数字静态相机、数码摄像机、数字记录器和音频文件播放器。并且,此类装置可处理可执行指令,所述指令包含软件应用程序,例如,可用于上网的网页浏览器应用程序。因而,这些装置可以包含大量计算能力。
技术的进步还带来了包含执行信号处理(例如,图像处理、视频处理、音频处理等)的处理器的无线计算装置。处理器将卷积函数应用到输入信号以执行信号处理。常规的卷积函数可以使用“滑动窗口”来处理输入数据流。来自输入数据流的数据元素的一部分的滑动窗口可用于产生作为滑动窗口中的每个数据元素的函数(例如,乘积的总和)的第一输出。为了确定下一个输出,滑动窗口发生移位并且下一个输出被确定为移位滑动窗口中的每个数据元素的函数。
相对较大数量的寄存器和移位可用于使用常规的滑动窗口指令执行卷积函数。作为非限制性实例,单指令多数据(SIMD)架构可以使用四个数据输入“通路”执行常规的滑动窗口指令。为了说明,通路可以在来自寄存器的四个数据输入(例如,滑动窗口宽度为“4”)上执行卷积函数以产生输出。为了产生额外的输出,数据元素可以在第二寄存器中移位一个位置,并且通路可以在第二寄存器中的数据元素上执行卷积函数。因此,对于卷积函数的每个输出,可以使用多个寄存器和移位。
发明内容
公开了用于减少用于执行滑动窗口运算的移位和寄存器的系统和方法。举例来说,公开了用于在单个SIMD通路内通过参考包含用于运算的数据的多个寄存器来执行滑动窗口运算的技术。为了说明,滑动窗口运算可以参考第一寄存器和第二寄存器。举例来说,SIMD通路可以参考第一寄存器和第二寄存器以在第一寄存器和第二寄存器中的数据上执行滑动窗口运算。作为一个实例,SIMD通路中的第一寄存器的一部分可以存储输入数据流的四个数据元素(例如,数据元素“0”、数据元素“1”、数据元素“2”和数据元素“3”),并且SIMD通路中的第二寄存器的一部分可以存储输入数据流的下四个数据元素(例如,数据元素“4”、数据元素“5”、数据元素“6”和数据元素“7”)。相对于第一寄存器的部分,第二寄存器的对应的部分可以包含输入数据流的移位的数据。
SIMD通路可以参考两个寄存器以执行多达五个滑动窗口运算。举例来说,SIMD架构可以对寄存器中的数据进行多路复用以执行滑动窗口运算。为了说明,第一SIMD通路可以使用第一寄存器中的前四个数据元素(例如,数据元素“0”、数据元素“1”、数据元素“2”和数据元素“3”)来执行第一滑动运算、使用第一寄存器的数据元素“1、2和3”以及第二寄存器的数据元素“4”来执行第二滑动窗口运算、使用第一寄存器的数据元素“2和3”以及第二寄存器的数据元素“4和5”来执行第三滑动窗口运算、使用第一寄存器的数据元素“3”以及第二寄存器的数据元素“4、5和6”来执行第四滑动窗口运算等等。
在特定方面中,设备包含具有存储第一输入数据的通路的第一寄存器和具有存储第二输入数据元素的通路的第二寄存器。第二寄存器的通路的宽度等于第一寄存器的通路的宽度。设备进一步包含具有与第一寄存器的通路的宽度相等的通路宽度的单指令多数据(SIMD)通路。SIMD通路经配置以在第一寄存器的通路中的第一输入数据元素和第二寄存器的通路中的第二输入数据元素上执行滑动窗口运算。执行滑动窗口运算包含基于存储在第一寄存器的第一位置中的第一输入数据元素和存储在第二寄存器的第二位置中的第二输入数据元素来确定结果。第二位置不同于第一位置。
在另一特定的方面中,方法包含在第一寄存器的通路中存储第一输入数据元素和在第二寄存器的通路中存储第二输入数据元素,其中第二寄存器的通路的宽度等于第一寄存器的通路的宽度。方法进一步包含使用具有与第一寄存器的通路的宽度相等的通路宽度的单指令多数据(SIMD)通路在第一寄存器的通路中的第一输入数据元素和第二寄存器的通路中的第二输入数据元素上执行滑动窗口运算。执行滑动窗口运算包含基于存储在第一寄存器的第一位置中的第一输入数据元素和存储在第二寄存器的第二位置中的第二输入数据元素来确定结果。第二位置不同于第一位置。
在另一特定的方面中,设备包含用于存储数据的第一装置和用于存储数据的第二装置。用于存储数据的第一装置具有存储第一输入数据元素的通路,并且用于存储数据的第二装置具有存储第二输入数据元素的通路。用于存储数据的第二装置的通路的宽度等于用于存储数据的第一装置的通路的宽度。设备进一步包含用于在用于存储数据的第一装置的通路中的第一输入数据元素和用于存储数据的第二装置的通路中的第二输入数据元素上执行滑动窗口运算的装置。用于执行滑动窗口运算的装置具有与用于存储数据的第一装置的通路的宽度相等的通路宽度。执行滑动窗口运算包含基于存储在用于存储数据的第一装置的第一位置中的第一输入数据元素和存储在用于存储数据的第二装置的第二位置中的第二输入数据元素来确定结果。第二位置不同于第一位置。
在另一特定的方面中,非暂时性计算机可读媒体包含指令,所述指令在由处理器执行时使得处理器在第一寄存器的通路中存储第一输入数据元素并且在第二寄存器的通路中存储第二输入数据元素,其中第二寄存器的通路的宽度等于第一寄存器的通路的宽度。指令进一步可执行以使得处理器能够使用具有与第一寄存器的通路的宽度相等的通路宽度的单指令多数据(SIMD)通路在第一寄存器的通路中的第一输入数据元素和第二寄存器的通路中的第二输入数据元素上执行滑动窗口运算。执行滑动窗口运算包含基于存储在第一寄存器的第一位置中的第一输入数据元素和存储在第二寄存器的第二位置中的第二输入数据元素来确定结果。第二位置不同于第一位置。
由所公开的实施方案中的至少一个所提供的一个特定优点是与常规的SIMD架构相比SIMD通路可以使用更少的寄存器和移位来执行滑动窗口运算。本发明的其它方面、优点和特征将在审阅整个申请之后变得显而易见,所述整个申请包含以下部分:附图说明、具体实施方式和权利要求书。
附图说明
图1说明了用于执行滑动窗口运算的系统的运算;
图2说明了单指令多数据(SIMD)通路内的电路系统;
图3是可经操作以将输入数据加载到第一寄存器中并且将输入数据的经移位版本加载到第二寄存器中的系统的图式;
图4是用于执行滑动窗口运算的方法的流程图;以及
图5是包含可经操作以执行滑动窗口运算的组件的装置的框图。
具体实施方式
参考图1,示出了用于执行滑动窗口运算的系统的运算。所述系统可以在单指令多数据(SIMD)通路内执行滑动窗口运算,方法是参考包含用于运算的数据的多个寄存器。所述系统可以包含SIMD架构102(例如,卷积函数硬件和/或滑动窗口硬件)。
输入数据104可以被提供到SIMD架构102。如下文所述,输入数据104的特定部分可以移位并且存储在某些寄存器位置中以使得能够根据本文中所描述的技术执行滑动窗口运算。输入数据104可以包含六十四个数据元素(例如,数据元素“0”到数据元素“63”)。在替代的实施方案中,输入数据104可以包含额外的(或更少的)数据元素。在说明性实施方案中,输入数据104可以包含第一输入数据元素106和第二输入数据元素108。第一输入数据元素106可以包含数据元素“0”、数据元素“1”、数据元素“2”和数据元素“3”。第二输入数据元素108可以包含数据元素“4”、数据元素“5”、数据元素“6”和数据元素“7”。虽然未明确地相对于输入数据104示出,但是输入数据104还可包含第三输入数据元素(例如,数据元素“8”到数据元素“11”)、第四输入数据元素(例如,数据元素“12”到数据元素“15”)、第五输入数据元素(例如,数据元素“16”到数据元素“19”)等。
SIMD架构102可经配置以将卷积函数应用到输入数据104以产生输出数据110。举例来说,SIMD架构102可以将“滑动窗口”函数应用到输入数据104中的数据元素以产生输出数据110。输出数据110的每个输出数据元素可以是滑动窗口中的输入数据元素的函数(例如,乘积的总和)。为了说明,输出数据110的第一输出数据元素可以是第一输入数据元素106的乘积的总和。举例来说,输出数据110的第一输出数据元素可以是数据元素“0”、数据元素“1”、数据元素“2”和数据元素“3”的函数。输出数据110的第二输出数据元素可以是数据元素“1”、数据元素“2”、数据元素“3”和数据元素“4”的函数。在下文中更详细地解释用于执行滑动窗口运算的技术。
SIMD架构102可以包含第一SIMD通路122、第二SIMD通路124、第三SIMD通路126和第四SIMD通路128。虽然图1中描绘了四个SIMD通路,但是在替代实施方案中,额外的(或更少的)SIMD通路可以包含于SIMD架构102中。如下文所述,每个SIMD通路122-128可经配置以在对应的SIMD通路122-128内的输入数据元素上执行滑动窗口运算。
所述系统还可包含第一寄存器130和第二寄存器140。每个寄存器130、140可以存储输入数据104的输入数据元素。第一寄存器130可以包含第一通路132、第二通路134、第三通路136和第四通路138。在所说明的实施方案中,第一寄存器130的每个通路132-138的宽度可为四。举例来说,第一寄存器130的每个通路132-138可经分配以存储四个数据元素。举例来说,第一寄存器130的每个通路132-138可经操作以存储输入数据104的四个输入数据元素。第一寄存器130的第一通路132可以存储输入数据104的第一输入数据元素106(例如,数据元素“0”到数据元素“3”),第一寄存器130的第二通路134可以存储输入数据104的第二输入数据元素108(例如,数据元素“4”到数据元素“7”),第一寄存器130的第三通路136可以存储输入数据104的第三输入数据元素(例如,数据元素“8”到数据元素“11”),并且第一寄存器130的第四通路138可以存储输入数据104的第四输入数据元素(例如,数据元素“12”到数据元素“15”)。
另外,第一寄存器130的每个通路132-138的宽度可以与对应的SIMD通路122-128的通路宽度相等。举例来说,第一SIMD通路122的通路宽度等于第一寄存器130的第一通路132的宽度,第二SIMD通路124的通路宽度等于第一寄存器130的第二通路134的宽度,第三SIMD通路126的通路宽度等于第一寄存器130的第三通路136的宽度,并且第四SIMD通路128的通路宽度等于第一寄存器130的第四通路138的宽度。
第二寄存器140可以包含第一通路142、第二通路144、第三通路146和第四通路148。在所说明的实施方案中,第二寄存器140的每个通路142-148的宽度可为四。举例来说,第二寄存器140的每个通路142-148可经操作以存储输入数据104的四个输入数据元素。相对于存储在第一寄存器130的通路132-138中的输入数据元素,存储在第二寄存器140的对应的通路142-148中的输入数据元素可以通路宽度移位(例如,以四移位)。举例来说,第二寄存器140的第一通路142可以存储输入数据104的第二输入数据元素108(例如,数据元素“4”到数据元素“7”),第二寄存器140的第二通路144可以存储输入数据104的第三输入数据元素(例如,数据元素“8”到数据元素“11”),第二寄存器140的第三通路146可以存储输入数据104的第四输入数据元素(例如,数据元素“12”到数据元素“15”),并且第二寄存器140的第四通路148可以存储输入数据104的第五输入数据元素(例如,数据元素“16”到数据元素“19”)。
每个数据元素可以存储在对应的寄存器的特定位置中。如本说明书中所使用,寄存器的“位置”对应于相对于起始地址的寄存器中的相对地址(或位置)。举例来说,存储在第一位置中的数据元素可以存储在寄存器的开始位置处,并且存储在最后位置的数据元素可以存储在寄存器末端的位置处。为了说明,相对于寄存器130、140,数据元素“0”可以存储在第一寄存器130的第一位置处,并且数据元素“4”可以存储在第二寄存器140的第一位置处。数据元素“1”和数据元素“5”可以相应地存储在第一寄存器130的第二位置和第二寄存器140的第二位置处。数据元素“2”和数据元素“6”可以相应地存储在第一寄存器130的第三位置和第二寄存器140的第三位置处。数据元素“3”和数据元素“7”可以相应地存储在第一寄存器130的第四位置和第二寄存器140的第四位置处。
第一SIMD通路122可以参考第一寄存器130和第二寄存器140以在相当于通路尺寸的数据上执行滑动窗口运算。如相对于图2较详细的描述,在第一SIMD通路122内的电路系统可以对寄存器130、140中的数据进行多路复用以执行滑动窗口运算。第一SIMD通路122可以相应地参考第一寄存器130和第二寄存器140的第一通路132、142以执行多达五个滑动窗口运算。为了说明,第一SIMD通路122可以使用第一寄存器130中的前四个数据元素(例如,数据元素“0”、数据元素“1”、数据元素“2”和数据元素“3”)执行第一滑动窗口运算。在执行第一滑动窗口运算之后,第一SIMD通路122可以使用第一寄存器130的第一通路132中的数据元素“1”到数据元素“3”并且使用第二寄存器140的第一通路142中的数据元素“4”来执行第二滑动窗口运算。
第一SIMD通路122还可经配置以使用第一寄存器130的第一通路132的数据元素“2”和数据元素“3”并且使用第二寄存器140的第一通路142的数据元素“4”和数据元素“5”来执行第三滑动窗口运算。在执行第三滑动窗口运算之后,第一SIMD通路122可以使用第一寄存器130的第一通路132的数据元素“3”并且使用第二寄存器140的第一通路142的数据元素“4”到数据元素“6”来执行第四滑动窗口运算。第一SIMD通路122可以进一步经配置以使用第二寄存器140中的前四个数据元素(例如,数据元素“4”到数据元素“7”)来执行第五滑动窗口运算。
因此,第一SIMD通路122可以使用两个寄存器130、140执行五个滑动窗口运算。第一寄存器130的第一通路132中的数据元素和第二寄存器142的第一通路142中的数据元素可以输入数据104中的单个移位(例如,四个元素移位)“偏移”。因此,第一SIMD通路122可使用两个寄存器130、140具有对八个数据元素的“存取”。因此,与可能需要单个SIMD通路来使用四个寄存器和四个移位(例如,四个单元素移位)的常规的SIMD架构相比,两个寄存器130、140可用于执行五个滑动窗口运算。如图1中所示,因为第二寄存器140中的数据以四而不是一移位,所以计算多达五个输出所必需的所有数据元素对于使用两个寄存器130、140的第一SIMD通路122来说是可存取的。因此,与其它滑动窗口运算和SIMD架构相比,可以使用减少数量的寄存器和移位。
还应了解,第二SIMD通路124、第三SIMD通路126,以及第四SIMD通路128可以使用两个寄存器130、140各自执行多达五个滑动窗口运算。当第一SIMD通路122相对于寄存器130、140的第一通路132、142操作时,SIMD通路124-128可以相对于相应地寄存器130、140的对应的通路134-138、144-148以大体上类似的方式操作。举例来说,第二SIMD通路124可以使用第一寄存器130的第二通路134中的第二输入数据元素108并且使用第二寄存器140的第二通路144中的第三输入数据元素来执行多达五个滑动窗口运算。第三SIMD通路126可以使用第一寄存器130的第三通路136中的第三输入数据元素并且使用第二寄存器140的第三通路146中的第四输入数据元素来执行多达五个滑动窗口运算。另外,第四SIMD通路128可以使用第一寄存器130的第四通路138中的第四输入数据元素并且使用第二寄存器140的第四通路148中的第五输入数据元素来执行多达五个滑动窗口运算。另外的SIMD通路(未示出)可以与所说明的SIMD通路122-128大体上类似的方式操作以在剩余的输入数据104上执行滑动窗口运算。
参考图2,示出了第一SIMD通路122内的电路系统。第一SIMD通路122包含第一多路复用器202、第二多路复用器204、第三多路复用器206、第四多路复用器208以及算术与逻辑单元(ALU)210。在特定实施方案中,ALU 210可以包含乘积电路系统的总和。在第一SIMD通路122内的电路系统是出于说明性目的,且并不意图是限制性的。举例来说,额外的(或更少的)电路组件可以包含于第一SIMD通路122中。虽然图2中描绘了在第一SIMD通路122内的电路系统,但是图1的系统的其它SIMD通路124-128可以包含类似的电路组件。
第一多路复用器202的第一输入可以耦合到存储在第一寄存器130的第一通路132中的数据元素“0”,并且第一多路复用器202的第二输入可以耦合到存储在第二寄存器140的第一通路142中的数据元素“4”。基于提供到第一多路复用器202的选择信号(未示出),第一多路复用器202可以将数据元素“0”或数据元素“4”提供到ALU 210。在特定方面中,指令的可操作代码中的最接近的字段可以确定多路复用器202是否将数据元素“0”(例如,第一通路142中的第一窗口中的数据元素)或数据元素“4”(例如,第一通路142中的第一窗口中的数据元素)提供到ALU 210。
第二多路复用器204的第一输入可以耦合到存储在第一寄存器130的第一通路132中的数据元素“1”,并且第二多路复用器204的第二输入可以耦合到存储在第二寄存器140的第一通路142中的数据元素“5”。基于提供到第二多路复用器204的选择信号(未示出),第二多路复用器204可以将数据元素“1”或数据元素“5”提供到ALU 210。在特定方面中,指令的可操作代码中的最接近的字段可以确定多路复用器204是否将数据元素“1”(例如,第一通路142中的第二窗口中的数据元素)或数据元素“5”(例如,第一通路142中的第二窗口中的数据元素)提供到ALU 210。
第三多路复用器206的第一输入可以耦合到存储在第一寄存器130的第一通路132中的数据元素“2”,并且第三多路复用器206的第二输入可以耦合到存储在第二寄存器140的第一通路142中的数据元素“6”。基于提供到第三多路复用器206的选择信号(未示出),第三多路复用器206可以将数据元素“2”或数据元素“6”提供到ALU 210。在特定方面中,指令的可操作代码中的最接近的字段可以确定多路复用器206是否将数据元素“2”(例如,第一通路142中的第三窗口中的数据元素)或数据元素“6”(例如,第一通路142中的第三窗口中的数据元素)提供到ALU 210。
另外,第四多路复用器208的第一输入可以耦合到存储在第一寄存器130的第一通路132中的数据元素“3”,并且第四多路复用器208的第二输入可以耦合到存储在第二寄存器140的第一通路142中的数据元素“7”。基于提供到第四多路复用器208的选择信号(未示出),第四多路复用器208可以将数据元素“3”或数据元素“7”提供到ALU 210。在特定方面中,指令的可操作代码中的最接近的字段可以确定多路复用器208是否将数据元素“3”(例如,第一通路142中的第四窗口中的数据元素)或数据元素“7”(例如,第一通路142中的第四窗口中的数据元素)提供到ALU 210。因此,第一SIMD通路122可以基于指令同时在第一寄存器130的第一通路132中的多个窗口、第二寄存器140的第一通路142中的多个窗口或其任何组合上执行滑动窗口运算。
在运算期间,第一SIMD通路122可以基于寄存器130、140的第一通路132、142中的数据执行多达五个滑动窗口运算。以下实例对应于第三滑动窗口运算(例如,使用数据元素“2”、数据元素“3”、数据元素“4”和数据元素“5”的乘积运算的总和);然而,类似的技术可以应用于执行第一滑动窗口运算、第二滑动窗口运算、第四滑动窗口运算和第五滑动窗口运算。
为了执行第三滑动窗口运算,第一多路复用器202可以基于提供到第一多路复用器202的选择信号将数据元素“4”提供到ALU 210,并且第二多路复用器204可以基于提供到第二多路复用器204的选择信号将数据元素“5”提供到ALU 210。另外,第三多路复用器206可以基于提供到第三多路复用器206的选择信号将数据元素“2”提供到ALU 210,并且第四多路复用器208可以基于提供到第四多路复用器208的选择信号将数据元素“3”提供到ALU210。
ALU 210可经配置以基于数据元素“2”、数据元素“3”、数据元素“4”和数据元素“5”的乘积的总和产生输出数据110。举例来说,ALU 210可以在由多路复用器202-208所提供的数据元素上执行垂直运算(例如,乘法运算)。作为乘法运算的非限制性实例,ALU 210可以用数据元素“3”乘以数据元素“2”以产生第一乘积,用数据元素“4”乘以数据元素“3”以产生第二乘积,用数据元素“5”乘以数据元素“4”以产生第三乘积,并且用数据元素“2”乘以数据元素“5”以产生第四乘积。在垂直运算之后,ALU 210可以在由垂直运算产生的乘积上执行水平运算。水平运算的非限制性实例可以包含求和运算、按位或运算,或乘法运算。作为求和运算的非限制性实例,ALU 210可以对第一乘积、第二乘积、第三乘积和第四乘积求和。因此,水平运算可以在垂直运算之后执行。在以上实例中,水平运算和垂直运算对应于乘积之和。
虽然图2将ALU 210描绘为乘积的总和电路系统,但是在替代的实施方案中,ALU可以通过第一SIMD通路122实施以执行滑动窗口运算。作为非限制性实例,执行总和的乘积运算、逻辑与运算、逻辑或运算、逻辑与非运算或者逻辑或非运算的ALU可以通过第一SIMD通路122实施。
因此,与可能需要单个SIMD通路来使用四个寄存器和四个移位(例如,四个单元素移位)的SIMD架构相比,在第一SIMD通路122内的电路系统可以使用两个寄存器130、140和单个移位(例如,在寄存器130、140之间的四个元素移位)执行多达五个滑动窗口运算。如图2中所示,因为第二寄存器140中的数据以四而不是一移位,所以计算多达五个输出所必需的所有数据元素对于使用两个寄存器130、140的第一SIMD通路122来说是可存取的。因此,与其它滑动窗口运算和SIMD架构相比,可以使用减少数量的寄存器和移位。
参考图3,示出了可经操作以将输入数据104加载到第一寄存器130中并且将输入数据104的经移位版本加载到第二寄存器140中的系统300。系统300包含处理器301、存储器302、第一寄存器130和第二寄存器140。处理器301包含逻辑移位器电路304。
在接收加载指令之后,处理器301可以从存储器302中的存储器位置中检索输入数据104并且可以将输入数据104加载到第一寄存器130中。处理器301可以根据图1中所描绘的对齐将输入数据104加载到第一寄存器130中。举例来说,数据元素“0”到数据元素“3”可以加载到第一寄存器130的第一通路132中,数据元素“4”到数据元素“7”可以加载到第一寄存器130的第二通路134中等等。
处理器301还可以从存储器302中的存储器位置中检索输入数据104并且在接收加载指令之后将输入数据104提供到逻辑移位器电路304。逻辑移位器电路304可经配置以使输入数据104移位SIMD通路122-128的通路宽度。举例来说,逻辑移位器电路304可以四来移位输入数据104以产生移位的输入数据314。处理器301可以根据图1中所描绘的对齐将移位的输入数据314加载到第二寄存器140中。举例来说,数据元素“4”到数据元素“7”可以加载到第二寄存器140的第一通路142中,数据元素“8”到数据元素“11”可以加载到第二寄存器140的第二通路144中等等。
虽然逻辑移位器电路304被描绘为包含于处理器301中,但是在其它实施方案中,逻辑移位器电路304可以在处理器301外部。在特定实施方案中,处理器301可以是装置(例如,移动电话)的中央处理单元(CPU)。在替代实施方案中,处理器301可以在CPU外部(例如,处理器301可为专用集成电路)。
如图1中所描绘的,图3的系统300可以在加载操作期间提供移位以对齐寄存器130、140中的数据元素。举例来说,逻辑移位器电路304可以移位输入数据104使得第二寄存器140的第一通路142存储数据元素“4”到数据元素“7”(与数据元素“0”到数据元素“3”相反)。如相对于图1-2所描述的,移位可使得第一SIMD通路122能够使用两个寄存器130、140来执行多达五个滑动窗口运算。
参考图4,示出了用于执行滑动窗口运算的方法400的流程图。方法400可以使用图1-3的第一寄存器130、图1-3的第二寄存器140、图2的输出寄存器212、图3的存储器302或其任何组合由图1的SIMD架构102(例如,SIMD通路122-128)和/或图3的处理器301执行。
在402处,方法400包含在第一寄存器的通路中存储第一输入数据元素。举例来说,参考图1-3,处理器301可以将输入数据104的第一输入数据元素106(例如,数据元素“0”到数据元素“3”)存储到第一寄存器130的第一通路132中。为了说明,响应于接收到加载指令,处理器301可以将第一输入数据元素106加载到第一寄存器130的第一通路132中。另外,处理器301可以将输入数据104的第二输入数据元素108(例如,数据元素“4”到数据元素“7”)存储到第一寄存器130的第二通路124中。为了说明,响应于接收到加载指令,处理器301可以将第二输入数据元素108加载到第一寄存器130的第二通路134中。
在404处,第二输入数据元素可以存储在第二寄存器的通路中。举例来说,参考图1-3,处理器301可以将输入数据的第二输入数据元素108存储到第二寄存器140的第一通路142中。为了说明,处理器301可以从存储器302中的存储器位置中检索输入数据104并且在接收加载指令之后将输入数据104提供到逻辑移位器电路304。逻辑移位器电路304可以使输入数据104移位SIMD通路122-128的通路宽度。举例来说,逻辑移位器电路304可以四来移位输入数据104以产生移位的输入数据314。根据图1中所描绘的对齐,处理器可以将移位的输入数据314加载到第二寄存器140中。举例来说,数据元素“4”到数据元素“7”可以加载到第二寄存器140的第一通路142中。第二寄存器140的第一通路142的宽度可以与第一寄存器130的第一通路132的宽度相等。
在406处,可以使用具有与第一寄存器的通路的宽度相等的通路宽度的SIMD通路在第一寄存器的通路中的第一输入数据元素以及第二寄存器的通路中的第二输入数据元素上执行滑动窗口运算。如本文中所使用,“滑动窗口运算”可以包含数据流中的多个邻近数据元素(例如,第一输入数据元素和第二输入数据元素)被视为数据输入并且产生输出的任何运算。虽然上文将乘积的总和描述为滑动窗口运算,但是应理解乘积的总和仅仅是一个实例。滑动窗口运算的其它实例可以包含总和的乘积、求和运算、乘法运算等。执行滑动窗口运算可以包含基于存储在第一寄存器的第一位置中的第一输入数据元素和存储在不同于第一位置的第二寄存器的第二位置中的第二输入数据元素确定结果。作为非限制性实例,参考图1-2,滑动窗口运算的结果可以基于数据元素“1-4”。数据元素“1”可以在第一寄存器130的一个位置(例如,第二位置)中,并且数据元素“4”可以在不同于数据元素“1”的位置的第二寄存器140的另一位置(例如,第一位置)中。如上文所述,第一SIMD通路122可以使用存储在第一寄存器130的第一通路132中的第一输入数据元素106并且使用存储在第二寄存器140的第一通路142中的第二输入数据元素108执行多达五个滑动窗口运算(例如,五个滑动窗口运算)。因此,通过第一SIMD通路122执行的滑动窗口运算的数量(例如,五个)可以大于或等于第一SIMD通路122的宽度(例如,四)。
与可能需要单个SIMD通路来使用四个寄存器和四个移位(例如,四个单元素移位)的另一SIMD架构相比,图4的方法400可以使得第一SIMD通路122能够使用两个寄存器130、140和单个移位(例如,在寄存器130、140之间通过如图3中所描绘的逻辑移位器电路304的四个数据元素移位)来执行多达五个滑动窗口运算。因为第二寄存器140中的数据以四而不是一移位,所以计算多达五个输出所必需的所有数据元素对于使用两个寄存器130、140的第一SIMD通路122来说是可存取的。因此,与其它滑动窗口运算和SIMD架构相比,可以使用减少数量的寄存器和移位。
在特定实施方案中,方法400可以包含在额外的SIMD通路处执行类似的运算。举例来说,当第一SIMD通路122相对于寄存器130、140的第一通路132、142操作时,SIMD通路124-128可以相对于相应地寄存器130、140的对应的通路134-138、144-148以大体上类似的方式操作。举例来说,第二SIMD通路124可以使用第一寄存器130的第二通路134中的第二输入数据元素108并且使用第二寄存器140的第二通路144中的第三输入数据元素来执行多达五个滑动窗口运算。第三SIMD通路126可以使用第一寄存器130的第三通路136中的第三输入数据元素并且使用第二寄存器140的第三通路146中的第四输入数据元素来执行多达五个滑动窗口运算。另外,第四SIMD通路128可以使用第一寄存器130的第四通路138中的第四输入数据元素并且使用第二寄存器140的第四通路148中的第五输入数据元素来执行多达五个滑动窗口运算。另外的SIMD通路(未示出)可以与所说明的SIMD通路122-128大体上类似的方式操作以在剩余的输入数据104上执行滑动窗口运算。
参考图5,描绘了无线通信装置且一般将其表示为500。装置500包含耦合到存储器532的处理器510,例如,数字信号处理器。
处理器510可经配置以执行存储于存储器532中的软件(例如,一或多个指令568的程序)。处理器510可以包含图1的SIMD架构102、图1的第一寄存器130和图1的第二寄存器140。举例来说,如上文所述,SIMD架构102可以在处理器510的执行单元内并且可以参考寄存器130、140以执行卷积函数。在特定实施方案中,处理器510可以可经操作以执行图4的方法400。举例来说,处理器510(例如,SIMD架构102)可以在第一寄存器130的第一通路132中存储第一输入数据元素106,并且可以在第二寄存器140的第一通路142中存储第二输入数据元素108。如上文所述,SIMD架构102可以使用存储在相应地寄存器130、140的第一通路132、142中的数据元素来执行多达五个滑动窗口运算。
在特定实施方案中,处理器510可经配置以执行存储于存储器532中的一或多个指令568以执行图4的方法400。举例来说,存储器532可以是包含指令568的非暂时性计算机可读媒体,所述指令在由处理器510执行时使得处理器510执行图4的方法400。
无线接口540可以耦合到处理器510并且耦合到天线542。编码器/解码器(编解码器)534也可以耦合到处理器510。扬声器536和麦克风538可以耦合到编解码器534。显示控制器526可以耦合到处理器510并且耦合到显示装置528。在特定实施方案中,处理器510、显示控制器526、存储器532、编解码器534和无线接口540包含于系统级封装或芯片上系统装置522中。在特定实施方案中,输入装置530和电源544耦合到芯片上系统装置522。此外,在特定实施方案中,如图5中所说明,显示装置528、输入装置530、扬声器536、麦克风538、天线542和电源544在芯片上系统装置522外部。然而,显示装置528、输入装置530、扬声器536、麦克风538、天线542和电源544中的每一个可以耦合到芯片上系统装置522的一或多个组件,例如,一或多个接口或控制器。
相对于图1到4的卷积函数可用于在装置500处执行图像处理。举例来说,卷积函数可以应用到内核(例如,卷积矩阵或掩模)以模糊图像的像素、以锐化图像的像素、以检测图像内的边缘等。因此,与使用其它SIMD架构的装置相比,装置500可以使用更少的寄存器和移位来执行图像处理。
结合所描述的实施方案,设备包含用于存储数据的第一装置。用于存储数据的第一装置具有存储第一输入数据元素的通路。举例来说,用于存储数据的第一装置可以包含图1-3和5的第一寄存器130、一或多个其它装置、电路、模块或其任何组合。
设备还可包含用于存储数据的第二装置。用于存储数据的第二装置具有存储第二输入数据元素的通路。举例来说,用于存储数据的第二装置可以包含图1-3和5的第二寄存器140、一或多个其它装置、电路、模块或其任何组合。用于存储数据的第二装置的第一通路的宽度等于用于存储数据的第一装置的第一通路的宽度。举例来说,第一寄存器130的第一通路132的宽度(例如,四)可以与第二寄存器140的第一通路142的宽度(例如,四)相等。
设备还可包含用于在用于存储数据的第一装置的通路中的第一输入数据元素上以及在用于存储数据的第二装置的通路中的第二输入数据元素上执行滑动窗口运算的装置。举例来说,用于执行滑动窗口运算的装置可以包含图1和5的SIMD架构102、图2的多路复用器202-208、图3的处理器301、由图5的处理器510执行的指令568、一或多个其它装置、电路、模块或其任何组合。用于执行滑动窗口运算的装置具有与用于存储数据的第一装置的通路的宽度相等的通路宽度。执行滑动窗口运算包含基于存储在用于存储数据的第一装置的第一位置中的第一输入数据元素和存储在用于存储数据的第二装置的第二位置中的第二输入数据元素来确定结果。第二位置不同于第一位置。
所属领域的技术人员将进一步了解,结合本文中公开的实施方案所描述的各种说明性逻辑块、配置、模块、电路和算法步骤可以实施为电子硬件、计算机软件或两者的组合。上文已大体在其功能性方面描述各种说明性组件、块、配置、模块、电路和步骤。此类功能性是实施为硬件还是软件取决于特定应用和施加于整个系统的设计约束。所属领域的技术人员可针对每个特定应用以不同方式来实施所描述的功能性,但此类实施决策不应被解释为会引起脱离本发明的范围。
结合本文中所公开的实施方案而描述的方法或算法的步骤可直接实施于硬件、由处理器执行的软件模块或两者的组合中。软件模块可驻留在随机存取存储器(RAM)、闪存存储器、只读存储器(ROM)、可编程只读存储器(PROM)、可擦除可编程只读存储器(EPROM)、电可擦除可编程只读存储器(EEPROM)、寄存器、硬盘、可移动磁盘、压缩光盘只读存储器(CD-ROM)或所属领域中已知的任何其它形式的存储媒体中。示例性非暂时性(例如,有形的)存储媒体耦合到处理器,使得处理器可从所述存储媒体读取信息,且将信息写入到所述存储媒体。在替代方案中,存储媒体可集成到处理器。处理器及存储媒体可以驻留在专用集成电路(ASIC)中。ASIC可以驻留在计算装置或用户终端中。在替代方案中,处理器和存储媒体可以驻留为计算装置或用户终端中的离散组件。
提供所公开的实施方案的先前描述以使所属领域的技术人员能够制作或使用所公开的实施方案。这些实施方案的各种修改对于所属领域的技术人员而言将是显而易见的,并且在不脱离本发明的范围的前提下本文中所定义的原理可以应用于其它实施方案。因此,本发明并不意图限于本文中所示的实施方案,而应符合与如通过所附权利要求书定义的原理及新颖特征相符的可能的最广范围。

Claims (30)

1.一种用于滑动窗口运算的设备,其包括:
第一寄存器,经配置以存储输入数据元素序列,所述第一寄存器具有第一通路和第二通路,所述第一通路存储所述输入数据元素序列中的第一输入数据元素,所述第二通路存储所述输入数据元素序列中的第二输入数据元素,所述第一输入数据元素在所述输入数据元素序列中与所述第二输入数据元素相邻;
逻辑移位器电路,经配置以将所述第一寄存器的输入数据元素移位与所述第一寄存器的第一通路的宽度相等的位数,以生成移位数据元素;
第二寄存器,经配置以存储所述移位数据元素,所述第二寄存器具有第一通路,所述第一通路存储所述移位数据元素中的第一移位数据元素,所述第一移位数据元素对应于所述第一寄存器的第二通路中的第二输入数据元素,其中所述第二寄存器的所述通路的宽度等于所述第一寄存器的所述通路的宽度;以及
单指令多数据SIMD通路,其具有与所述第一寄存器的所述第一通路的所述宽度相等的通路宽度,其中所述SIMD通路经配置以在通过所述逻辑移位器电路移位所述输入数据元素之后,在所述第一寄存器的所述第一通路中的所述第一输入数据元素和所述第二寄存器的所述第一通路中的所述第一移位数据元素上执行滑动窗口运算,其中执行所述滑动窗口运算包含基于存储在所述第一寄存器的第一通路的第一位置中的第一输入数据元素和存储在所述第二寄存器的第一通路的第二位置中的第一移位数据元素来确定结果,所述第二寄存器的第一通路的第二位置与所述第一寄存器的第一通路的所述第一位置具有不同的位置。
2.根据权利要求1所述的设备,其中所述SIMD通路基于指令在所述第一寄存器的所述第一通路中的第一输入数据元素、所述第二寄存器的所述第一通路中的第一移位数据元素或其任何组合上同时执行滑动窗口运算。
3.根据权利要求2所述的设备,其中所述第一寄存器的所述第一通路中的所述第一输入数据元素和所述第二寄存器的所述第一通路中的所述第一移位数据元素是基于所述指令的可操作代码中的最接近的字段来选择的。
4.根据权利要求1所述的设备,其中所述SIMD通路包括:
算术与逻辑单元ALU;
第一多路复用器,其经配置以将所述第一寄存器的所述第一通路中的第一输入数据元素中的一个提供到所述ALU或将所述第二寄存器的所述第一通路中的第一平移输入数据元素中的一个提供到所述ALU;以及
第二多路复用器,其经配置以将所述第一寄存器的所述第一通路中的第一输入数据元素中的一个提供到所述ALU或将所述第二寄存器的所述第一通路中的第一平移输入数据元素中的一个提供到所述ALU,
其中所述ALU可经操作以在由所述第一多路复用器提供的数据元素和由所述第二多路复用器提供的数据元素上执行水平运算。
5.根据权利要求4所述的设备,其中水平运算包括求和运算、按位或运算,或乘法运算。
6.根据权利要求4所述的设备,其中所述ALU可经操作以在由所述第一多路复用器提供的所述数据元素上以及在由所述第二多路复用器提供的所述数据元素上执行垂直运算,并且其中所述水平运算是在所述垂直运算之后执行的。
7.根据权利要求6所述的设备,其中所述垂直运算包括乘法运算。
8.根据权利要求1所述的设备,其进一步包括多个通路,所述多个通路包含所述SIMD通路和第二SIMD通路,所述第二SIMD通路经配置以在存储在所述第一寄存器的第二通路中的第二输入数据元素和存储在所述第二寄存器的第二通路中的第二平移输入数据元素上执行滑动窗口运算。
9.根据权利要求8所述的设备,其中由所述SIMD通路执行的所述滑动窗口运算和由所述第二SIMD通路执行的所述滑动窗口运算是并行执行的。
10.根据权利要求1所述的设备,其中所述逻辑移位器电路经配置以将所述移位数据元素提供到所述第二寄存器。
11.一种用于滑动窗口运算的方法,其包括:
在第一寄存器中存储输入数据元素序列,其中所述输入数据元素序列包括第一输入数据元素和第二输入数据元素,所述第一输入数据元素存储在所述第一寄存器的第一通路中,所述第二输入数据元素存储在所述第一寄存器的第二通路中;
将所述第一寄存器的输入数据元素移位与所述第一寄存器的第一通路的宽度相等的位数,以生成移位数据元素;
在第二寄存器中存储所述移位数据元素,其中所述移位数据元素包括第一移位数据元素,所述第一移位数据元素存储在第二寄存器的第一通路中,其中所述第二寄存器的所述第一通路的宽度等于所述第一寄存器的所述第一通路的宽度;以及
在移位所述输入数据元素之后,使用具有与所述第一寄存器的所述第一通路的所述宽度相等的通路宽度的单指令多数据SIMD通路在所述第一寄存器的所述第一通路中的所述第一输入数据元素和所述第二寄存器的所述第一通路中的所述第一移位数据元素上执行滑动窗口运算,其中执行所述滑动窗口运算包含基于存储在所述第一寄存器的第一通路的第一位置中的第一输入数据元素和存储在所述第二寄存器的第一通路的第二位置中的第一移位数据元素来确定结果,所述第二寄存器的第一通路的第二位置与所述第一寄存器的第一通路的第一位置具有不同的位置。
12.根据权利要求11所述的方法,其中所述第一输入数据元素包含从第一数据元素开始且到第N数据元素结束的N个数据元素,其中所述第一移位数据元素包含从第N+1数据元素开始且到第2*N数据元素结束的N个数据元素,并且其中N对应于所述SIMD通路的所述通路宽度。
13.根据权利要求11所述的方法,其中所述SIMD通路基于指令在所述第一寄存器的所述第一通路中的第一输入数据元素、所述第二寄存器的所述第一通路中的第一移位数据元素或其任何组合上同时执行滑动窗口运算。
14.根据权利要求13所述的方法,其中所述第一寄存器的所述第一通路中的所述第一输入数据元素和所述第二寄存器的所述第一通路中的所述第一输入数据元素是基于所述指令的可操作代码中的最接近的字段来选择的。
15.根据权利要求11所述的方法,其进一步包括:
在第一多路复用器处将所述第一寄存器的所述第一通路中的第一输入数据元素中的一个提供到算术与逻辑单元ALU或将所述第二寄存器的所述第一通路中的第一移位数据元素中的一个提供到所述ALU;以及
在第二多路复用器处将所述第一寄存器的所述第一通路中的第一输入数据元素中的一个提供到所述ALU或将所述第二寄存器的所述第一通路中的第一移位输入数据元素中的一个提供到所述ALU。
16.根据权利要求15所述的方法,在所述ALU处在由所述第一多路复用器提供的数据元素和由所述第二多路复用器提供的数据元素上执行水平运算。
17.根据权利要求16所述的方法,其中所述水平运算包括求和运算、按位或运算,或乘法运算。
18.根据权利要求16所述的方法,其进一步包括在由所述第一多路复用器提供的所述数据元素上以及在由所述第二多路复用器提供的所述数据元素上执行垂直运算,并且其中所述水平运算是在所述垂直运算之后执行的。
19.根据权利要求18所述的方法,其中所述垂直运算包括乘法运算。
20.根据权利要求11所述的方法,其进一步包括使用多个SIMD通路的第二SIMD通路在存储在所述第一寄存器的第二通路中的第二输入数据元素和存储在所述第二寄存器的第二通路中的第二移位数据元素上执行滑动窗口运算,其中所述SIMD通路包含于所述多个SIMD通路中。
21.根据权利要求20所述的方法,其中由所述SIMD通路执行的所述滑动窗口运算和由所述第二SIMD通路执行的所述滑动窗口运算是并行执行的。
22.根据权利要求11所述的方法,其进一步包括:将所述移位数据元素提供到所述第二寄存器。
23.一种用于滑动窗口运算的设备,其包括:
用于存储输入数据元素序列的第一装置,所述用于存储的第一装置具有存储所述输入数据元素序列中的第一输入数据元素的第一通路以及存储所述输入数据元素序列中的第二输入数据元素的第二通路,所述第一输入数据元素在所述输入数据元素序列中与所述第二输入数据元素相邻;
用于将所述用于存储的第一装置的输入数据元素移位等于用于存储的第一装置的宽度的位数以生成移位数据元素的装置;
用于存储所述移位数据元素的第二装置,所述用于存储的第二装置具有存储所述移位数据元素中的第一移位数据元素的第一通路,所述第一移位数据元素对应于用于存储的第一装置的第二通路的第二输入数据元素,其中所述用于存储数据的第二装置的所述第一通路的宽度等于所述用于存储数据的第一装置的所述第一通路的宽度;以及
用于在所述用于存储的第一装置的所述第一通路中的所述第一输入数据元素和所述用于存储的第二装置的所述第一通路中的所述第一移位数据元素上执行滑动窗口运算的装置,所述用于执行所述滑动窗口运算的装置具有与所述用于存储的第一装置的所述第一通路的所述宽度相等的通路宽度,其中执行所述滑动窗口运算包含基于存储在所述用于存储的第一装置的第一通路的第一位置中的第一输入数据元素和存储在所述用于存储的第二装置的第一通路的第二位置中的第二输入数据元素来确定结果,所述用于存储的第二装置的第一通路的第二位置与所述用于存储的第一装置的第一通路的所述第一位置具有不同的位置。
24.根据权利要求23所述的设备,其中所述第一输入数据元素包含从第一数据元素开始且到第N数据元素结束的N个数据元素,其中所述第一移位数据元素包含从第N+1数据元素开始且到第2*N数据元素结束的N个数据元素,并且其中N对应于所述用于执行所述滑动窗口运算的装置的所述通路宽度。
25.根据权利要求23所述的设备,其中所述用于执行所述滑动窗口运算的装置基于指令在所述用于存储的第一装置的所述第一通路中的第一输入数据元素、所述用于存储的第二装置的所述第一通路中的所述第一移位数据元素或其任何组合上同时执行滑动窗口运算。
26.根据权利要求25所述的设备,其中所述用于存储的第一装置的所述第一通路中的所述第一输入数据元素和所述用于存储的第二装置的所述第一通路中的所述第一移位数据元素是基于所述指令的可操作代码中的最接近的字段选择的。
27.根据权利要求23所述的设备,其进一步包括:
用于提供数据元素的装置,所述用于提供数据元素的装置经配置以将所述用于存储的第一装置的所述第一通路中的第一输入数据元素中的一个提供到算术与逻辑单元ALU;以及
用于提供数据元素的第二装置,所述用于提供数据元素的第二装置经配置以将所述用于存储的第二装置的所述第一通路中的第一移位数据元素中的一个提供到所述ALU。
28.根据权利要求23所述的设备,其进一步包括用于在存储在所述用于存储的第一装置的第二通路中的第二输入数据元素和存储在所述用于存储的第二装置的第二通路中的第二移位数据元素上执行滑动窗口运算的第二装置。
29.一种非暂时性计算机可读媒体,其包括在由处理器执行时使得所述处理器进行以下操作的指令:
在第一寄存器中存储输入数据元素序列,其中所述输入数据元素序列包括第一输入数据元素和第二输入数据元素,所述第一输入数据元素存储在所述第一寄存器的第一通路中,所述第二输入数据元素存储在所述第一寄存器的第二通路中;
将所述第一寄存器的输入数据元素移位等于所述第一寄存器的第一通路的宽度的位数,以生成移位数据元素;
在第二寄存器中存储所述移位数据元素,其中所述移位数据元素包括存储在第二寄存器的第一通路中的第一移位数据元素,其中所述第二寄存器的所述第二通路的宽度等于所述第一寄存器的所述通路的宽度;以及
在移位所述输入数据元素之后,使用具有与所述第一寄存器的所述第一通路的所述宽度相等的通路宽度的单指令多数据SIMD通路在所述第一寄存器的所述第一通路中的所述第一输入数据元素和所述第二寄存器的所述第一通路中的所述第一移位数据元素上执行滑动窗口运算,其中执行所述滑动窗口运算包含基于存储在所述第一寄存器的第一通路的第一位置中的第一输入数据元素和存储在所述第二寄存器的第一通路的第二位置中的第一移位数据元素来确定结果,所述第二寄存器的第一通路的所述第二位置与所述第一寄存器的第一通路的所述第一位置具有不同的位置。
30.根据权利要求29所述的非暂时性计算机可读媒体,其中所述第一输入数据元素包含从第一数据元素开始且到第N数据元素结束的N个数据元素,其中所述第一移位数据元素包含从第N+1数据元素开始且到第2*N数据元素结束的N个数据元素,并且其中N对应于所述SIMD通路的所述通路宽度。
CN201680039649.1A 2015-07-20 2016-07-11 用于滑动窗口运算的方法和设备 Active CN107873091B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/803,728 2015-07-20
US14/803,728 US10459731B2 (en) 2015-07-20 2015-07-20 Sliding window operation
PCT/US2016/041779 WO2017014979A1 (en) 2015-07-20 2016-07-11 Simd sliding window operation

Publications (2)

Publication Number Publication Date
CN107873091A CN107873091A (zh) 2018-04-03
CN107873091B true CN107873091B (zh) 2021-05-28

Family

ID=56511938

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201680039649.1A Active CN107873091B (zh) 2015-07-20 2016-07-11 用于滑动窗口运算的方法和设备

Country Status (8)

Country Link
US (1) US10459731B2 (zh)
EP (1) EP3326061B1 (zh)
JP (1) JP6737869B2 (zh)
KR (1) KR102092049B1 (zh)
CN (1) CN107873091B (zh)
BR (1) BR112018001183A2 (zh)
CA (1) CA2990249A1 (zh)
WO (1) WO2017014979A1 (zh)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11803377B2 (en) * 2017-09-08 2023-10-31 Oracle International Corporation Efficient direct convolution using SIMD instructions
US11403727B2 (en) 2020-01-28 2022-08-02 Nxp Usa, Inc. System and method for convolving an image
US11586442B2 (en) 2020-08-06 2023-02-21 Nxp Usa, Inc. System and method for convolving image with sparse kernels

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6009505A (en) * 1996-12-02 1999-12-28 Compaq Computer Corp. System and method for routing one operand to arithmetic logic units from fixed register slots and another operand from any register slot
CN102012893A (zh) * 2010-11-25 2011-04-13 中国人民解放军国防科学技术大学 一种可扩展向量运算簇
CN104699458A (zh) * 2015-03-30 2015-06-10 哈尔滨工业大学 定点向量处理器及其向量数据访存控制方法

Family Cites Families (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS5743239A (en) * 1980-08-27 1982-03-11 Hitachi Ltd Data processor
US6230253B1 (en) * 1998-03-31 2001-05-08 Intel Corporation Executing partial-width packed data instructions
EP1261912A2 (en) * 2000-03-08 2002-12-04 Sun Microsystems, Inc. Processing architecture having sub-word shuffling and opcode modification
DE10023319B4 (de) * 2000-05-12 2008-07-10 Man Roland Druckmaschinen Ag Verfahren zum Umspulen von Thermotransferband zum Bebildern von Druckformen
US7126991B1 (en) 2003-02-03 2006-10-24 Tibet MIMAR Method for programmable motion estimation in a SIMD processor
US7275147B2 (en) * 2003-03-31 2007-09-25 Hitachi, Ltd. Method and apparatus for data alignment and parsing in SIMD computer architecture
GB2409065B (en) 2003-12-09 2006-10-25 Advanced Risc Mach Ltd Multiplexing operations in SIMD processing
US7933405B2 (en) * 2005-04-08 2011-04-26 Icera Inc. Data access and permute unit
US7761694B2 (en) * 2006-06-30 2010-07-20 Intel Corporation Execution unit for performing shuffle and other operations
US20080100628A1 (en) 2006-10-31 2008-05-01 International Business Machines Corporation Single Precision Vector Permute Immediate with "Word" Vector Write Mask
GB2444744B (en) * 2006-12-12 2011-05-25 Advanced Risc Mach Ltd Apparatus and method for performing re-arrangement operations on data
WO2008077803A1 (en) 2006-12-22 2008-07-03 Telefonaktiebolaget L M Ericsson (Publ) Simd processor with reduction unit
CN101021832A (zh) * 2007-03-19 2007-08-22 中国人民解放军国防科学技术大学 支持局部寄存和条件执行的64位浮点整数融合运算群
CN100461095C (zh) * 2007-11-20 2009-02-11 浙江大学 一种支持多模式的媒体增强流水线乘法单元设计方法
US9081501B2 (en) * 2010-01-08 2015-07-14 International Business Machines Corporation Multi-petascale highly efficient parallel supercomputer
US9588766B2 (en) * 2012-09-28 2017-03-07 Intel Corporation Accelerated interlane vector reduction instructions
US9424031B2 (en) 2013-03-13 2016-08-23 Intel Corporation Techniques for enabling bit-parallel wide string matching with a SIMD register

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6009505A (en) * 1996-12-02 1999-12-28 Compaq Computer Corp. System and method for routing one operand to arithmetic logic units from fixed register slots and another operand from any register slot
CN102012893A (zh) * 2010-11-25 2011-04-13 中国人民解放军国防科学技术大学 一种可扩展向量运算簇
CN104699458A (zh) * 2015-03-30 2015-06-10 哈尔滨工业大学 定点向量处理器及其向量数据访存控制方法

Also Published As

Publication number Publication date
EP3326061B1 (en) 2022-05-25
JP2018525730A (ja) 2018-09-06
KR20180030540A (ko) 2018-03-23
BR112018001183A2 (pt) 2018-09-11
WO2017014979A1 (en) 2017-01-26
CA2990249A1 (en) 2017-01-26
US20170024218A1 (en) 2017-01-26
JP6737869B2 (ja) 2020-08-12
EP3326061A1 (en) 2018-05-30
CN107873091A (zh) 2018-04-03
KR102092049B1 (ko) 2020-04-20
US10459731B2 (en) 2019-10-29

Similar Documents

Publication Publication Date Title
CN110073329B (zh) 访存设备、计算设备和应用于卷积神经网络运算的设备
EP3033670B1 (en) Vector accumulation method and apparatus
US9411726B2 (en) Low power computation architecture
KR101697548B1 (ko) Fifo 로드 명령
US20180121386A1 (en) Super single instruction multiple data (super-simd) for graphics processing unit (gpu) computing
CN111506520B (zh) 一种地址生成的方法、相关装置以及存储介质
CN112119375B (zh) 加载和复制子矢量值的系统和方法
JP2009009587A (ja) データを右方向平行シフトマージする方法及び装置
CN107851010B (zh) 针对宽数据元素使用寄存器对的具有偶数元素和奇数元素运算的混合宽度simd运算
CN111382859A (zh) 用于处理神经网络中的卷积运算的方法和装置
CN107873091B (zh) 用于滑动窗口运算的方法和设备
EP4446878A1 (en) Vector shifting method, processor, and electronic device
CN114746840A (zh) 用于乘法和累加操作的处理器单元
CN109690956B (zh) 电子设备和用于电子设备的方法
CN105630467B (zh) 用户交互界面的渲染处理方法及处理装置
US12099840B1 (en) Throughput increase for tensor operations
US20150006850A1 (en) Processor with heterogeneous clustered architecture
US20060271610A1 (en) Digital signal processor having reconfigurable data paths
CN111209041A (zh) 神经网络处理器、片上系统及电子设备

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
GR01 Patent grant
GR01 Patent grant