CN104699460B - 数字信号处理器、计算机可读存储介质和执行流水线多阶段循环的方法 - Google Patents

数字信号处理器、计算机可读存储介质和执行流水线多阶段循环的方法 Download PDF

Info

Publication number
CN104699460B
CN104699460B CN201410723083.7A CN201410723083A CN104699460B CN 104699460 B CN104699460 B CN 104699460B CN 201410723083 A CN201410723083 A CN 201410723083A CN 104699460 B CN104699460 B CN 104699460B
Authority
CN
China
Prior art keywords
thread
stage
perform
streamline
cycle counter
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
CN201410723083.7A
Other languages
English (en)
Other versions
CN104699460A (zh
Inventor
B·勒纳
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.)
Analog Devices Inc
Original Assignee
Analog Devices 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 Analog Devices Inc filed Critical Analog Devices Inc
Publication of CN104699460A publication Critical patent/CN104699460A/zh
Application granted granted Critical
Publication of CN104699460B publication Critical patent/CN104699460B/zh
Active 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
    • G06F9/3867Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
    • 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
    • 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/3004Arrangements for executing specific machine instructions to perform operations on memory
    • 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/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • G06F9/322Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
    • G06F9/325Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address for loops, e.g. loop detection or loop counter
    • 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/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming

Landscapes

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

Abstract

在一个实施例中,公开了具有包含配置以用作线程偏移计数器的模块化整数的寄存器的数字信号处理器。在多级流水线循环,其可以在微码中实现,循环的主体只有一个重复阶段。在每个阶段中,由单一重复阶段的每个线程中执行的操作由固定整数与所述线程偏移计数器的总和识别。在每次通过循环之后,线程偏移计数器递增,从而保持单个重复阶段的流水线操作。

Description

数字信号处理器、计算机可读存储介质和执行流水线多阶段 循环的方法
技术领域
本申请涉及计算领域,尤其涉及到用于流水线处理器的线程偏移计数器。
背景技术
流水线是通过将任务划分成多个“阶段”而加速计算设备的性能的方法,其每一个可以包含在阶段中和其他线程不是相互排斥的一个或多个“线程”。例如,流水线级可以包括:从存储器读取用在后一阶段的值的第一线程,操作从存储器中的先前阶段读取数值的第二线程,以及向存储器存储在以前阶段进行的操作结果的值的第三线程。在某些情况下,流水线的速度和效率可以优于线性执行,其中每个指令必须按顺序加载、执行然后存储。
附图说明
结合附图阅读时,从下面的详细描述可最好地理解本发明。需要强调,按照在该行业的标准做法,各种特征不是按比例绘制,并且仅用于说明目的。事实上,各种特征的尺寸可任意放大或缩小,为了清楚的讨论。
图1是根据本说明书的一个或多个示例实施例,流水线多核数字信号处理器的框图。
图2是根据本说明书的一个或多个示例实施例,没有线程偏移计数器执行流水线运算的方法的流程图。
图3是根据本说明书的一个或多个示例实施例,使用线程偏移计数器执行流水线运算的方法的流程图。
具体实施方式
在一个实施例中,公开了一种数字信号处理器,包括:第一处理元件,经配置以通信地耦合到存储器,所述处理元件包括计算单元;通用寄存器组;和线程数寄存器,经配置以保持和操作模块化整数。
在另一个例子中,公开了一种有形计算机可读存储介质,其上为具有N个迭代的循环存储原语,所述原语可操作以指示所述处理器来初始化循环计数器的值小于N;预充流水线;执行具有多个线程的阶段,所述线程由固定整数加上具有模数m的模块化线程偏移整数Oτ确定;递增Oτ;若循环计数器不为零,则递减计数器,并执行再次执行步骤;如果计数器是零,冲洗流水线。
在又一个示例中,公开了执行N次迭代的流水线多级循环的方法,使用线程偏移计数器Oτ,包括初始化循环计数器的值小于N;预填流水线;执行具有多个线程的阶段,所述线程由固定整数加Oτ识别;递增Oτ;若循环计数器不为零,则递减计数器,并再次执行所述执行步骤;如果计数器是零,冲洗流水线。
本公开的示例实施方案
下面的公开提供了许多不同的实施例或示例,用于实现本发明的不同特征。部件和安排的具体实例描述如下,以简化本公开。这些当然仅仅是示例,并且不旨在进行限制。此外,本发明可以在各种示例中重复附图标记和/或字母。这种重复是为了简化和清楚的目的,其本身并不决定所讨论的各种实施例和/或配置之间的关系。
不同的实施例具有不同的优点,并没有特别的优点是任何实施例必需的。
“原语”如在本说明书中明确地定义,作为可用于与其它原语或高级操作相结合以建立更高级别操作的基本或原始的计算操作,并且可是(作为非限制性示例)用户可访问的硬件指令、执行为硬件指令一部分的非用户可访问操作、用户可访问的软件程序、或者执行作为用户可访问的软件程序的一部分的非用户访问软件程序、用户可访问微码、或者执行作为用户可访问微码的一部分的非用户可访问微码。示例原语可以具有三个平行阶段:(1)数据负载;(2)原语的执行,和(3)数据存储。
为了优化处理器或硬件加速器的性能,操作的多个阶段可以被流水线化,其中,例如,单一阶段可包括三个或多个平行原语,诸如(加载,执行,存储)。在一个示例中,三个线程被定义。当处理器正在对线程τN执行原语,诸如乘法,直接存储器存取(DMA)引擎可以被写出来或存储线程τN-1的结果,其结果在以前的阶段中计算,并读入或装入线τN+1数据,用于执行下一阶段。这意味着该处理核心可以被优化,以继续对数据操作,而不必等待数据加载和数据存储操作完成。
示例处理器可以提供用户可访问的原语(诸如,微码),其允许加工精细控制。在这种情况下,用户可以定义N次迭代循环,使用三个线程,或者换言之,M=3。值M=3(对应于三个流水线阶段)公开了作为一个例子,但应注意,实施例是非限制性的,并且M不必是和流水线级的相同数目,并且可是任何正整数,并且更具体地正整数,M>2。
示例微代码可以如下处理,其中“||”表明并行操作:
在第1行中,循环计数器k被初始化为(N-2)/3。例如,假定17个迭代的循环。在这种情况下,K=5,或者,换句话说,K=(17-2)/3。使用该值,因为该循环在每次迭代处理三个线程,而剩下的两个原语在循环处理之前和之后处理。更一般地,K可以被初始化为K=(N-(M-1))/M。
行2-3包含循环的处理操作,并且可以被称为“序幕”。在第二行,线程τ0从存储器0加载数据。
在第3行,当并行线程τ0使用在第2行中加载的数据执行原语时,线程τ1从存储器加载数据。
行4-6包含循环的主体。在第4行,线程τ2从存储器加载数据,线程τ1执行它的原语,和线程τ0存储其数据到存储器中。为方便起见,我们通过表达行4使用形式(2,1,0)执行并行(负荷,执行,存储)限定简写,表示线程τ2是“加载”原语,线程τ1是执行原语,以及线程τ0是存储原语。同样,第5行以形式(0,2,1)执行并行(加载,执行,存储),以及第6行以形式(1,0,2)执行并行(加载,执行,存储)。
在第7行,如果计数值不等于零,则递减,并且在循环返回到第4行以处理三个更多阶段。
在循环结束后,控制进到行8-9的尾声。在第8行中,执行线程τ1的原语,并且线程τ0的处理数据被写入到存储器。
在第9行,从第8行执行的原语的线程τ1的最后剩余数据被写入到存储器中。因此,在序言执行两次装载操作,十五个由循环主体执行,并没有任何被在尾声执行,共计十七个。一个原语在序幕执行,十五个在循环主体执行,一个在尾声执行,共十七个。没有存储在序幕执行,十五个在循环主体执行,而两个在尾声执行,共计十七个。因此,十七个总的阶段执行,十五个在循环主体。需要注意,因为循环主体在每次传递时执行三个阶段的固定块,循环迭代的数量必须是三个模块,或者换句话说,M||(N-M-1),(M准确划分N|M|1)。
在一些实施例中,包括例示的一个,上述方法需要装载、执行和存储数据的三个重复编码。这相对于一次编写相同的编码可能是易出错的。此外,仅当N具有3的精确模量时,前述实施例的循环正常工作。如果不是15迭代,需要17个,则在前述例子代码的第1行之前,前两个阶段必须手动预处理。这要求加载、执行、存储过程的另外两个副本,它引入了错误和低效率的更多机会。
根据本公开的一个或多个实施例,新颖的线程偏移计数器被引入以消除前述操作的冗余并当N是任意值时能够执行,包括不是模块整数的一个。在本实施例中,线程偏移计数器(称为Oτ)是具有模块3的模量整数,但应注意,Oτ可以具有大于2的任何模数。执行可以如下进行:
在第1行,计数被初始化为K=N-2个,或更一般地,K=N-(M-1)。
在第2行,数据被加载到线程0+Oτ
在第3行,数据被加载到线程1+Oτ,在与执行的线程0+Oτ平行,使用来自前级的输入数据加载。
行4和5包含循环体。在第4行,处理器以形式(2+Oτ,1+Oτ,1+Oτ)并行执行(加载,执行,存储)。在第5行,线程偏移计数器递增。再次,应当注意,在这个例子中,Oτ是模块化的整数,具体为3模量。因此,其中Oτ=2,Oτ++=0。
在第6行,如果计数器K不为零,则递减,并且控制返回到行4,如果计数器k已经达到零,则控制传递到第7行,其中线程1+Oτ被执行,并且在线程0+Oτ的数据被并行写入到存储器中。
在第8行,线程1+Oτ的数据被写入到存储器中,完成该处理。
如用在本说明书中,“处理器”或“数字信号处理器”被明确定义为任何可编程逻辑设备,在硬件、软件、固件或它们的任意组合来实现,经配置以执行原语操作,包括(作为非限制性示例的方式)微处理器、中央处理单元、现场可编程门阵列、应用专用集成电路或虚拟机的处理器。“数据”被明确定义为任何类型的数字、语音、视频、媒体或脚本数据,或者任何类型的源代码或目标代码,或从从一个点传输到另一个以任何适当格式的任何其他合适信息。“负荷”被明确定义为从第一位置读取数据用于在第二位置中使用。“存储”被明确定义为从第一位置写数据到第二位置。“存储器”被明确定义为易失性或非易失性计算机存储的任意组合,无论是有形的或无形的,包括通过非限制性实施例的主存储器、高速缓存、第一级存储器、二级存储器、固态存储器、光学数据存储以及磁性数据存储。
现在转到附图,图1是根据本说明书的一个或多个实施例的示例数字信号处理器(DSP)100的示意性框图。图1已被简化,用于清楚起见和更好地理解本发明的新颖概念。附加特征可添加在DSP 100中,以及在DSP 100的其他实施例中,下面所描述的一些特征可以被替换或去除。此外,DSP 100在本文中仅作为处理器的一个示例,以帮助讨论。
DSP 100可包括控制单元110、存储器120和计算阵列130。在一个例子中,控制单元110以及并计算阵列130构成可以执行DSP 100计算和数据处理功能的核心处理器。DSP 100的一些实施例包括其它部件,例如执行微控制器原语的微控制器、直接存储器存取(DMA)单元,以及各种接口到片外设备。
控制单元110方便程序执行DSP 100。控制单元110可包括算术逻辑单元和数据地址产生(ALU-DAG)单元112、程序定序器114以及程序存储器116。控制单元110还可以包括其它部件,诸如指令高速缓冲存储器,计时器和指令寄存器。ALU-DAG单元112支持通用整数运算,并为存储器地址提供地址。例如,当数据在存储器120和寄存器(如计算阵列130的寄存器文件,如下所述)之间传输时,ALU-DAG 112提供存储器地址。ALU-DAG单元112可以提供地址到数据存储器(例如,存储器120)和/或程序存储器116。程序定序器114提供原始地址到程序存储器116,用于原语提取取。程序存储器116存储该DSP 100实施方式以处理数据(例如,存储在存储器120中),并还可以存储处理数据。程序包括具有一个或多个原语的原语集,以及DSP 100通过提取原语、编码原语,并执行原语而实施程序。在一个例子中,程序可以包括原语集,用于实现各种DSP算法,包括依赖于线程计数器158的算法。
存储器120存储由DSP 100(数据存储器)进行处理的信息/数据、由DSP 100处理信息/数据所实现的程序(程序存储器),或它们的组合。在所描绘的实施例中,存储器120具有多排交错的存储器结构,使得该存储器120包括存储体M1、M2、M3,...Mn,其中n是存储器120的存储器区块的总数。在一个示例中,存储器120是随机存取存储器,诸如静态随机存取存储器(SRAM)、动态RAM(DRAM)、闪存或其它合适的存储器技术。在一个例子中,一个或多个存储体M是单独的RAM。可替换地,在各种实施方式中,存储器120是另一种合适类型的存储器。
互连网络140、互连网络142和互连网络144互连控制单元110、存储器120以及计算阵列130,从而提供控制单元110、存储器120以及计算阵列130的通信路径。互连网络140、互连网络142和互连网络144可包括单总线、多总线、交叉开关网络、单级网络、多级网络、其他类型的互连网络,或它们的组合。控制单元110经由互连网络142发出原语和数据地址到计算阵列130。互连网络142从而经由互连网络142传输原语地址和/或数据到计算阵列130的各种处理元件PE。互连网络144从存储器传送原语和数据地址(诸如,存储器120、程序存储器116、其它存储器,或它们的组合),因此,DSP 100的任何寄存器的内容可被传输到任何其它的寄存器或到任何存储器位置,以及存储器120可提供数据操作数(值)到计算阵列130。
在一些实施例中,计算阵列130包括多个处理元件PE1、PE2、PE3,...PEN,其中N为计算阵列130的处理元件的总数。在一个示例中,计算阵列110可包括四个处理元件(PE1、PE2、PE3和PE4)。处理元件PE执行数字处理,例如用于DSP算法。处理元件PE可以独立地、平行地操作,作为SIMD引擎。在本示例中,每个处理单元PE可以是向量处理器。可替换地,处理元件PE可以是标量处理器和向量处理器的组合。
处理元件PE每个包括相应的计算单元(CU)152。在所描绘的实施例中,计算单元152可以是相同的,但本公开考虑其中计算单元152不相同的实施例。本公开进一步考虑配置,其中一个或多个处理元件PE不包括计算单元152。在本例中,计算单元152的每一个包括算术逻辑单元(ALU)、乘法器-累加器(MAC)、移位器、其它计算单元,或它们的组合。ALU可以执行算术和逻辑运算,诸如,加、减、否定、递增、递减、绝对值、AND、OR、异或、非、分原始、其他的算术运算、其他逻辑操作,或者它们的组合。示例性的MAC可以执行乘法运算以及乘法和累加操作,诸如,单周期乘法、乘/加、乘/减、其它操作,或它们的组合。移位器可以执行逻辑和算术移位、位操作、归一化、非正规化、得到指数运算、其他运算,或者它们的组合。各个算术运算、逻辑运算和其他操作可以固定点和浮点格式来执行。在各种实施例中,ALU、MAC和/或移位器包括与其相关联的寄存器。
处理元件PE还可以各自包括相应的寄存器堆154。在所描绘的实施例中,寄存器文件154可以是相同的,尽管本发明考虑其中寄存器堆154不相同的实施例。本公开还考虑了配置,其中一个或多个处理元件PE不包括寄存器文件154。寄存器文件154包括在处理元件PE和数据互连网络(诸如,互联网络144)之间传输数据并存储结果的寄存器。在本例子中,寄存器文件154可包括相应的通用寄存器设置155,其中包括具有依赖于DSP 100的设计要求的宽度的通用寄存器,诸如,32位一般用途寄存器、40位通用寄存器、64位通用寄存器、128位一般用途寄存器、其他宽度的通用寄存器,或它们的组合。为了便于下面的讨论,通用寄存器155包含32个32位通用目的寄存器,其通过示例的方式可被指定为寄存器R0-R31。在本例子中,寄存器文件154的每一个包括各自的线程计数器158,其可经配置以保持线程偏移,在本示例中称为Oτ。寄存器文件154可以根据DSP 100进一步的设计要求包括附加的寄存器。进一步,在各种实施方式中,线程计数器158可以是通用寄存器组155的通用寄存器154。在一个示例实施例中,每个PE包括32位宽的至少一个专用模块线程计数器158。在其它实施例中,每个PE可包括多个线程计数器158。
在本示例中,线程计数器158是模块化的,这意味着它有确定“模量”。在模块化数学中,递增整数超过模量或递减到零以下会导致整数“包装”。例如,如果模块化整数I具有模量8,然后其中I=7,I+1=0,I+2=1,依此类推。同样,当I=0时,I-1=7,I-2=6,依此类推。在某种意义上说,整数寄存器自然具有模块化的种类,因为16位寄存器具有65536的自然弹性模量,并从而将从65535翻转到0。在这个例子中,线程计数器158是不同的,在于它的模块化不完全由它的数据宽度,而是通过另一个值(诸如,流水线阶段的数量)限定。因此,在本说明书中,除了由其中存储模块化整数的寄存器或其他存储元件的数据宽度所限定的模量M,“模块化整数”被明确定义为具有模数m的整数,其中,模块化整数的最大值为M-1。模块可以在硬件、软件、固件或上述的任意组合来实现,并且在某些实施例中,模块化整数的模数M可以是可编程的或以其它方式可由用户配置的,而在其它实施例中,弹性模量可在硬件中是固定的。
在更一般的意义上,处理器可以包括循环缓冲器,由区间[B,B+L-1]进行限定,其中B是缓冲器的底部,L是缓冲区的长度。在某些情况下,B和L的值可以提供在用户定义的寄存器中。当对该缓冲器执行循环存取的指针增量过去的B+L-1时,L被从中减去。当它递减低于B时,L被添加到其中。在特殊情况下,其中B=0,缓冲器是模块化的整数。使用上述例子,整数I是循环缓冲器,底座B=0,长度L=8。其中I=7,I+1>(L-1=7)∴I+1≡(I+1)-L=7+1-8=0。同样,I+2>(L-1=7)∴I+2≡(I+2)-L=7+2-8=1。并且其中I=0,I-1<(B=0)∴I-1≡(I-1)+L=0-1+8=7。同样,I-2<(B=0)∴I-2≡(I-2)+L=0-2+8=6。
DSP 100可以执行各种并行操作。例如,在一个周期内,处理元件PE可以访问原语(通过互连网络142)并访问存储器的N个数据操作数(通过互连网络144),用于同步处理。在SIMD模式下,DSP 100可以并行处理多个数据流。例如,在SIMD模式时,DSP 100在一个周期内可通过互连网络142调度单一原语到每个或多个处理元件PE;经由互连网络144从存储器(存储器120、程序存储器116、其它存储器,或它们的组合)装载N个数据集,一个数据集用于每个处理单元PE(在示例中,每个数据组可包括两个数据操作数);在处理单元PE中同步执行单一原语;在存储器120中存储来自同步执行的数据结果。
在某些实施例中,DSP 100还可以执行寄存器(SWAR)中的SIMD,其中,任何处理元件的PE寄存器(例如,通用寄存器)都可以分为多个处理通道,使得任何处理元件PE可以在它们各自的处理通道上单独执行并行操作。例如,在SWAR模式中,任何处理元件PE可在n个通道上执行并行操作,每个为k/n比特宽,其中k是寄存器中的位的宽度。可以设想,根据本说明书的一个或多个示例实施例,SIMD或SWARE原语可以形成阶段的一部分。
图2是根据本说明书的一个或多个示例实施例,没有线程偏移计数器执行流水线运算的方法200的流程图。起始于块210,计数器K被初始化为K=(N-2)/3,或更一般地,K=(N-(M-1))/M,其可被存储在诸如寄存器R0的通用寄存器155中,其中N是所要执行的循环迭代的总数,并且M是流水线阶段或线程的数量。请注意,在这个例子中为了正常工作,N应该被M整除,没有余数。
在块220中,流水线是“预填充”。在公开的例子中,这需要两个阶段。在第一阶段中只包含一个线程:加载存储器块到线程τ0,例如,处理元件PE1可以从存储器M1装载数据到寄存器R1。第二级包含两个并行线程:装入存储块到线程τ1,例如处理元件PE1可以从存储器M2装载数据到寄存器R2,而计算单元152并行执行线程τ0的一个或多个原语(使用已经在寄存器R1中的数据作为输入)。两个阶段都以举例的方式公开,但应注意,在其它实施例中,其中M≠3,该方法可以适当地调整。在示例中预填流水线的目的在于确保该循环主体在每个迭代对完整的流水线操作。因此,在5级流水线中,四个阶段可需要预填充流水线,分别具有一个、两个、三个、四个并行线程。更一般地,M-1个阶段可需要预填充流水线,并且每个阶段的并行线程数目可以从1增加至M-1。这保证当进入循环时,流水线是在首次通过循环时是充满的,并保持充分贯穿每个后续通行。
块230是循环主体。在本实施例中,循环分别执行M级,每一个具有M个并行线程。例如,当M=3时,处理元件PE1可以以形式(2,1,0)执行并行(负荷,执行存储)阶段,其中来自存储器块M3的数据被加载到线程τ2中的寄存器R3,计算单元152使用寄存器R2中的数据作为线程τ1中的输入而执行原语,在寄存器R1中存储的之前原语的结果被写入到线程τ0的存储器块M1。处理单元PE1然后以形式(0,2,1)执行并行(加载,执行,存储),其中数据从存储器块M1装入线程τ0的寄存器R1,计算单元152执行原语,使用在寄存器R3的数据作为线程τ2中的输入,以及存储在寄存器R2中的之前原语的结果被写入到线程τ1的存储器块M2。最后,处理单元PE1以形式(1,0,2)执行并行(加载,执行,存储),其中数据从存储器块M2被装入线程τ1的寄存器R2,计算单元152使用在寄存器R1中的数据作为线程τ0的输入而执行原语,以及在寄存器R3中存储的之前原语结果被写入到线程τ2的存储器块M3。注意,尽管本实施例中公开了其中每个线程访问不同的存储体的示例,这样的结构并不在所有情况下是需要或希望的。在其它实施例中,每个线程可以访问同一存储体。例如,线程可以运行在单个阵列中,在这种情况下,并非访问不同存储器组,每个线程将访问同一存储体中的不同偏移。
在块240中,如果计数器k没有达到零,则在块250中,计数器K被递减,并且控制返回到块230,用于循环的另一次迭代。
如果计数器K已经达到零,则控制传递到块260,其中该流水线被冲洗。这本质上是流水线预填充块210的相反,并且可确保开始于循环主体的阶段完成。就像预填充,这可具有总共M-1级,并且每个可以包括多个并行线程,开始于M-1并下降为最后阶段1。在这里示出的示例中,在第一阶段中,处理元件PE1的计算单元152使用线程τ1中的寄存器R2的数据执行原语。与此同时,数据从寄存器R1写入到线程τ0的存储器块M1。在第二阶段中,在线程τ1中,在寄存器R2中的数据被写入到存储器块M2。在块270,该方法结束。
图3是根据本说明书的一个或多个示例实施例,使用线程偏移计数器执行流水线运算的方法300的流程图。在块310,计数器K被初始化为K=N-(M-1)。在以上M=3所示的例子中,K被初始化为N-2。为方便参考,在该示例中,K可以被存储在寄存器R31中,尽管这种选择是非限制性的。
在块320,流水线被预填充。在一个实施例中,流水线预填充块320可以实质上相同于图2的流水线预填充块220。
块330和340包括循环的主体。在块330,执行具有M个并行线程的单级。线程计数器Oτ接收线程计数器158的值,它可以是单独寄存器。该阶段是并行(加载,执行,存储)的形式(2+Oτ,1+Oτ,0+Oτ)。因此,在线程2+Oτ中,数据从存储器块M(2+Oτ)加载到寄存器R(2+Oτ)。
应当指出,上述操作的数学模是所公开的实施例中的模数,具有模数3。例如,如果Oτ=2,(2+Oτ=1),因为该值从2“翻转”至0。
在线程0+Oτ,在寄存器R(0+Oτ)中的数据被写入到存储器块M(0+Oτ)。还应当指出,虽然寄存器、存储器和线程在本示例中全部公开为动态分配的,在一些示例中,前述只有一种可以被动态地分配的。例如,线程τ1可经配置以始终使用特定的寄存器或始终访问特定的存储器块。
在块340,线程偏差计数器Oτ递增。再次,应当注意,Oτ在本实施例中是模块整数,具有模数3。
在块350,如果计数器k≠0,在块360中,K被递减,并且控制返回到块330,用于循环的下一次迭代。另一方面,如果K=0,则循环的主体已完成。
在块370,流水线“冲洗”。在一个例子中,流水线冲洗可基本相同于结合图2的块260所公开的。在块380,则该方法结束。
优选地,比起根据图2的方法产生的代码,根据图3的方法产生的代码可以是简单的,并占据较少存储器。图3的方法还可工作任意值N>2,,无论N是否是M的模块化整数,而图2的方法需要循环对值N执行,该N值是M的模块化整数。因此,如果它天然不是,图2的方法可需要多达M-1个阶段被预处理,以产生是M的模块化整数的正整数N。还应当注意,图3的最终结果不依赖于Oτ初始值,从而就没有必要在每次通过循环时初始化Oτ
以上概述了多个实施例的特征,使得本领域技术人员可以更好地理解本发明的各个方面。本领域技术人员应当理解,他们可以容易地使用本发明,作为设计或修改其他过程和结构的基础,用于实现相同目的和/或实现本文所介绍的实施例的相同的优点。那些熟练的技术人员还应该认识到,这样的等效构造并不脱离本发明的精神和范围,并且它们在本文中可以在不脱离本发明的精神和范围的前提下进行各种改变、替换和更改。
本发明的具体实施例可以容易地包括片上系统(SOC)中央处理单元(CPU)程序包。SOC代表集成电路(IC),它集成计算机或其它电子系统的组件到单个芯片中。它可以包含数字、模拟、混合信号和射频功能:所有这些都可以设置在单个芯片衬底上。其他实施例可以包括多芯片模块(MCM),具有多个芯片位于单一的电子封装内,并能够紧密地互相通过电子封装交互。在各种其它实施例中,数字信号处理功能可实施在专用集成电路(ASIC)、现场可编程门阵列(FPGA)和其它半导体芯片中的一个或多个硅芯中。
在示例实施方式中,本文中所概述的处理活动的至少某些部分也可以在软件中实现。在一些实施例中,其中的一个或多个特征可以以硬件来实现,所述硬件在所公开的图中元件的外部提供,或以任何适当方式并入来实现预定的功能。各种部件可以包括软件(或往复软件),经协作以实现本文列出的操作。在其它实施例中,这些元件可以包括任何合适的算法、硬件、软件、组件、模块、接口或促进其操作的对象。
此外,具有所述微处理器相关联的某些组件可以被去除,或者以其他方式合并。在一般意义上,图中所示的布置可以在其陈述中更逻辑,而物理体系结构可包括各种排列、组合和/或这些组件的杂化物。必须注意,无数可能的设计配置可以用来实现本文所概述的操作目标。相应地,相关联设施具有无数的替代安排、设计选择、设备可能性、硬件配置、软件实现方式、设备选项等。
任何适当配置的处理器组件可以执行和数据相关联的任何类型的原语,以实现本文详述的操作。本文中任何处理器可以转换元件或者部件(例如,数据)从一种状态或事物到另一种状态或事物。在另一个例子中,本文中所概述的一些活动可以固定逻辑或可编程逻辑(例如,由处理器执行的软件和/或计算机原语)实现,并且本文中所指出的元件可以是某种类型的可编程处理器、可编程数字逻辑(例如,现场可编程门阵列(FPGA)、可擦除可编程只读存储器(EPROM)、电可擦除可编程只读存储器(EEPROM))、包括数字逻辑的ASIC、软件、代码、电子指令、闪速存储器、光盘、光盘、DVD ROM、磁或光卡、适于存储电子指令的其他类型的机器可读介质,或任何合适组合。在操作时,处理器可将信息存储在任何适当类型的非临时性存储介质(例如,随机存取存储器(RAM)、只读存储器(ROM)、现场可编程门阵列(FPGA)、可擦除可编程只读存储器(EPROM)、电可擦除可编程ROM(EEPROM)等)、软件、硬件,或在适当情况并根据特定需求在任何其他合适的组件、设备、元件或对象中。此外,根据特殊需要和实现方式,在处理器中追踪、发送、接收或者存储的信息可在任何数据库、寄存器、表、缓存、队列、控制列表或者存储结构中提供,所有这些都可以在任何合适的时间段引用。这里讨论的任何存储器件应理解为广义术语“存储器”。类似地,任何潜在的处理元件、模块以及本文中所描述的机器应理解为广义术语“微处理器”或“处理器”。
实现本文描述的所有或部分功能的计算机程序逻辑体现在各种形式,包括但绝不限于:源代码形式、计算机可执行形式和各种中间形式(例如,由汇编器产生的形式、编译器、链接器或定位器)。在一个例子中,源代码包括在各种编程语言来实现的一系列计算机程序指令,诸如对象代码、汇编语言或高级语言,诸如OpenCL、Fortran、C、C++、JAVA或HTML,用于各种操作系统或操作环境使用。源代码可以定义和使用各种数据结构和通信消息。源代码可以是计算机可执行形式(例如,经由解释器),或者源代码可以被转换(例如,经由翻译器,汇编器或编译器)成计算机可执行形式。
在上述实施方式中,电容器、缓冲器、图形元件、配线板、时钟、DDR、相机传感器、除法器、电感器、电阻器、放大器、开关、数字核心、晶体管和/或其他部件的讨论可以很容易地进行更换或以其他方式取代,为了适应特定的电路需要。此外,应该指出,使用互补的电子设备、硬件、非短暂性软件等提供用于实现本公开的教导的同样可行的选择。
在一个示例实施例中,图的任何数量的电路可在相关电子设备的电路板上实现。该板可以是普通电路板,其可容纳电子设备内的电子系统的各种组件,并进一步对其它的外围设备提供接口。更具体地,所述板可提供电连接,通过其该系统的其它部件可电通信。根据特定配置的需求,处理需求,计算机设计等,任何合适的处理器(包括数字信号处理器、微处理器、支持芯片组等)、存储器元件等可以适当地耦合到电路板。其它部件(诸如,外部存储、其他传感器、用于音频/视频显示的控制器以及外围设备)可以通过电缆连接至电路板插入式卡,或集成到基板本身。在另一示例实施例中,图中的电路可以被实现为单独模块(例如,具有相关组件和电路的设备,其经配置以执行特定的应用程序或功能),或实现为电子设备的专用硬件的插件模块。
注意,本文所提供的众多实例,交互可以在两个、三个、四个或更多个电部件来描述。然而,这项工作已经完成,仅为了清楚和示例。但是应当理解,该系统可以任何合适的方式进行合并。沿着类似的设计方案,图中任何示出的组件、模块和元件可以各种可能的结构结合起来,所有这些在说明书的范围之内是清楚的。在某些情况下,通过仅参考数量有限的电元件,可更容易地描述给定流程的一个或多个功能。但是应当理解,图和其教导的电路是容易可扩展的,并且可以容纳大量的部件,以及更复杂/精密的安排和配置。因此,本文提供的示例不应限制范围或抑制可适用于其他无数结构的电路的广泛教导。
许多其它的改变、替换、变化、改变和修改可对于本领域技术人员确定,其意图是,本发明包括落入所附的范围内的所有这样的改变、替换、变化、改变和修改。为了帮助美国专利商标局(USPTO)以及此外对本申请的任何专利的任何读者解释所附的权利要求,申请人指出本申请人:(a)不打算任何所附的权利要求书援引第6(6)35U.S.C.112章,因为它存在于申请日,除非词语“装置,用于”或“步骤,用于”在特定的权利要求中具体地使用;及(b)不打算由本说明书中的任何陈述以未体现在所附权利要求的任何方式限制本公开。

Claims (19)

1.一种数字信号处理器,包括:
第一处理元件,经配置以通信地耦合到存储器,所述处理元件包括:
计算单元;
通用寄存器组;和
线程计数寄存器,经配置以保持和操作以模数M为模的整数,
其中所述数字信号处理器经配置以通过以下来执行具有N次迭代的循环:
将循环计数器初始化为小于N的值;
预填充流水线;
执行具有由固定整数加上线程偏移计数Oτ索引的多个线程的阶段,其中线程偏移计数Oτ是以模数M为模的整数;
递增线程偏移计数Oτ
若循环计数器不为零,则递减循环计数器,并再次执行所述执行具有由固定整数加上线程偏移计数Oτ索引的多个线程的阶段的步骤;和
如果循环计数器是零,冲洗流水线。
2.根据权利要求1所述的数字信号处理器,其中,所述模数M是3。
3.根据权利要求1所述的数字信号处理器,其中,所述模数M是用户可配置的。
4.根据权利要求1所述的数字信号处理器,进一步包括实质上相同于第一处理单元的多个处理元件。
5.根据权利要求1所述的数字信号处理器,通信地耦合到其上存储原语的存储介质,所述原语用于执行具有N次迭代的所述循环。
6.一种其上存储原语的有形计算机可读存储介质,用于具有N个迭代的循环,所述原语可操作以指示处理器以:
将循环计数器初始化为小于N的值;
预填充流水线;
执行具有由固定整数加上以模数M为模的线程偏移计数Oτ索引的多个线程的阶段;
递增Oτ
若循环计数器不为零,则递减循环计数器,并再次执行所述执行具有由固定整数加上线程偏移计数Oτ索引的多个线程的阶段的步骤;
如果循环计数器是零,冲洗流水线。
7.根据权利要求6所述的有形计算机可读存储介质,其中,M=3。
8.根据权利要求7所述的有形计算机可读存储介质,其中:
预填充流水线包括执行具有单个线程的第一阶段以及使用第一线程执行第二阶段,所述单个线程包括加载第一值,所述第一线程包括使用所述第一值作为输入并行于包括加载第二值的第二线程执行原语。
9.根据权利要求7所述的有形计算机可读存储介质,其中,由固定整数加上以模数M为模的线程偏移计数Oτ索引的所述多个线程包括:
由2+Oτ,1+Oτ,0+Oτ索引的并行加载,执行,存储。
10.根据权利要求6所述的有形计算机可读存储介质,其中,将循环计数器初始化包括将循环计数器初始化为N-(M-1)的值。
11.根据权利要求10所述的有形计算机可读存储介质,其中,预填充所述流水线包括执行M-1阶段,其中第一阶段具有一个线程,并且每个其他阶段比其前一阶段多一个线程。
12.根据权利要求10所述的有形计算机可读存储介质,其中,冲洗流水线包括执行M-1阶段,其中第一阶段具有M-1个线程,并且每个其他阶段比其前一阶段少一个线程。
13.一种执行N次迭代的流水线多阶段循环的方法,使用线程偏移计数Oτ,其中所述线程偏移计数Oτ是以模数M为模的整数,该方法包括:
将循环计数器初始化为小于N的值;
预填充流水线;
执行具有由固定整数加上Oτ索引的多个线程的阶段;
递增Oτ
若循环计数器不为零,则递减循环计数器,并再次执行所述执行具有由固定整数加上Oτ索引的多个线程的阶段的步骤;
如果循环计数器是零,冲洗流水线。
14.根据权利要求13所述的方法,其中,M=3。
15.根据权利要求14所述的方法,其中:
预填充流水线包括执行具有单个线程的第一阶段以及使用第一线程执行第二阶段,所述单个线程包括加载第一值,所述第一线程包括使用所述第一值作为输入并行于包括加载第二值的第二线程执行原语。
16.根据权利要求14所述的方法,其中,由固定整数加上Oτ索引的所述多个线程包括:
由2+Oτ,1+Oτ,0+Oτ索引的并行加载,执行,存储。
17.根据权利要求13所述的方法,其中,将循环计数器初始化包括将循环计数器初始化为N-(M-1)的值。
18.根据权利要求17所述的方法,其中,预填充流水线包括执行M-1阶段,其中第一阶段具有一个线程,并且每个其他阶段比其前一阶段多一个线程。
19.根据权利要求17所述的方法,其中,冲洗流水线包括执行M-1阶段,其中第一阶段具有M-1个线程,并且每个其他阶段比其前一阶段少一个线程。
CN201410723083.7A 2013-12-04 2014-12-03 数字信号处理器、计算机可读存储介质和执行流水线多阶段循环的方法 Active CN104699460B (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US14/096,580 2013-12-04
US14/096,580 US9697005B2 (en) 2013-12-04 2013-12-04 Thread offset counter

Publications (2)

Publication Number Publication Date
CN104699460A CN104699460A (zh) 2015-06-10
CN104699460B true CN104699460B (zh) 2017-11-14

Family

ID=51951676

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201410723083.7A Active CN104699460B (zh) 2013-12-04 2014-12-03 数字信号处理器、计算机可读存储介质和执行流水线多阶段循环的方法

Country Status (4)

Country Link
US (1) US9697005B2 (zh)
EP (1) EP2884388A1 (zh)
KR (1) KR101715456B1 (zh)
CN (1) CN104699460B (zh)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10169105B2 (en) * 2015-07-30 2019-01-01 Qualcomm Incorporated Method for simplified task-based runtime for efficient parallel computing
CN108021597B (zh) * 2016-10-28 2022-02-08 阿里巴巴集团控股有限公司 一种并行计数器、服务器和一种计数方法
GB202119132D0 (en) * 2021-12-31 2022-02-16 Graphcore Ltd Initialisation of worker threads

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6282631B1 (en) * 1998-12-23 2001-08-28 National Semiconductor Corporation Programmable RISC-DSP architecture
CN1497435A (zh) * 2002-09-25 2004-05-19 ���µ�����ҵ��ʽ���� 处理器
CN101322111A (zh) * 2005-04-07 2008-12-10 杉桥技术公司 每个线程具有多个并发流水线的多线程处理器
CN102566974A (zh) * 2012-01-14 2012-07-11 哈尔滨工程大学 基于同时多线程的取指控制方法

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6826749B2 (en) 1998-12-08 2004-11-30 Nazomi Communications, Inc. Java hardware accelerator using thread manager
US6624818B1 (en) 2000-04-21 2003-09-23 Ati International, Srl Method and apparatus for shared microcode in a multi-thread computation engine
US6766445B2 (en) * 2001-03-23 2004-07-20 Hewlett-Packard Development Company, L.P. Storage system for use in custom loop accelerators and the like
US20030120905A1 (en) * 2001-12-20 2003-06-26 Stotzer Eric J. Apparatus and method for executing a nested loop program with a software pipeline loop procedure in a digital signal processor
WO2003081423A1 (en) 2002-03-22 2003-10-02 Telefonaktiebolaget Lm Ericsson Method for processing data streams divided into a plurality of process steps
US7200738B2 (en) * 2002-04-18 2007-04-03 Micron Technology, Inc. Reducing data hazards in pipelined processors to provide high processor utilization
US20040111594A1 (en) 2002-12-05 2004-06-10 International Business Machines Corporation Multithreading recycle and dispatch mechanism
US8341604B2 (en) 2006-11-15 2012-12-25 Qualcomm Incorporated Embedded trace macrocell for enhanced digital signal processor debugging operations
US8700943B2 (en) 2009-12-22 2014-04-15 Intel Corporation Controlling time stamp counter (TSC) offsets for mulitple cores and threads
US8423750B2 (en) 2010-05-12 2013-04-16 International Business Machines Corporation Hardware assist thread for increasing code parallelism
GB2486485B (en) * 2010-12-16 2012-12-19 Imagination Tech Ltd Method and apparatus for scheduling the issue of instructions in a microprocessor using multiple phases of execution
US8681166B1 (en) 2012-11-30 2014-03-25 Analog Devices, Inc. System and method for efficient resource management of a signal flow programmed digital signal processor code

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6282631B1 (en) * 1998-12-23 2001-08-28 National Semiconductor Corporation Programmable RISC-DSP architecture
CN1497435A (zh) * 2002-09-25 2004-05-19 ���µ�����ҵ��ʽ���� 处理器
CN101322111A (zh) * 2005-04-07 2008-12-10 杉桥技术公司 每个线程具有多个并发流水线的多线程处理器
CN102566974A (zh) * 2012-01-14 2012-07-11 哈尔滨工程大学 基于同时多线程的取指控制方法

Also Published As

Publication number Publication date
KR20150065152A (ko) 2015-06-12
US9697005B2 (en) 2017-07-04
US20150154027A1 (en) 2015-06-04
KR101715456B1 (ko) 2017-03-10
CN104699460A (zh) 2015-06-10
EP2884388A1 (en) 2015-06-17

Similar Documents

Publication Publication Date Title
CN103547999B (zh) 利用专用元件实施有限状态机
CN104838357B (zh) 向量化方法、系统及处理器
CN110059798A (zh) 开发神经网络中的稀疏性
CN104067282B (zh) 状态机晶格中的计数器操作
CN104077107B (zh) 利用经掩码的全寄存器访问实现部分寄存器访问的处理器、方法和系统
EP4220380A1 (en) Hardware accelerated machine learning
CN104011736B (zh) 用于状态机中的检测的方法及系统
US8756264B2 (en) Parallel pseudorandom number generation
US8051226B2 (en) Circular buffer support in a single instruction multiple data (SIMD) data processor
CN104049953B (zh) 用于合并操作掩码的未经掩码元素的装置、方法、系统和制品
US9201828B2 (en) Memory interconnect network architecture for vector processor
CN107408101A (zh) 配置成使用组合和分离向量的指令对可变长度向量进行操作的向量处理器
CN107077334A (zh) 从多维阵列预取多维元素块的硬件装置和方法
TW200527203A (en) A data processing apparatus and method for moving data between registers and memory
CN109144568A (zh) 将有效位通道作为矢量断言暴露于cpu
US20070074000A1 (en) VLIW Acceleration System Using Multi-state Logic
CN104011663B (zh) 掩码寄存器上的广播操作
CN109213524A (zh) 用于难预测分支的预测器
CN107111484A (zh) 四维莫顿坐标转换处理器、方法、系统和指令
CN104699460B (zh) 数字信号处理器、计算机可读存储介质和执行流水线多阶段循环的方法
CN107111485A (zh) 三维莫顿坐标转换处理器、方法、系统和指令
Sun et al. An I/O bandwidth-sensitive sparse matrix-vector multiplication engine on FPGAs
CN104025025B (zh) 用于对打包数据元素执行增量编码的系统、装置和方法
Bos et al. ECC2K-130 on cell CPUs
CN103777922B (zh) 预测计数器

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