线程排队的方法和装置.pdf

上传人:1*** 文档编号:972400 上传时间:2018-03-22 格式:PDF 页数:30 大小:1.24MB
返回 下载 相关 举报
摘要
申请专利号:

CN200780048991.9

申请日:

2007.12.18

公开号:

CN101573690A

公开日:

2009.11.04

当前法律状态:

授权

有效性:

有权

法律详情:

授权|||实质审查的生效|||公开

IPC分类号:

G06F9/46

主分类号:

G06F9/46

申请人:

英特尔公司

发明人:

H·蒋; T·A·皮亚扎; B·D·劳弗斯; S·沙拉萨尼; S·J·斯潘格勒

地址:

美国加利福尼亚州

优先权:

2006.12.30 US 11/647,608

专利代理机构:

上海专利商标事务所有限公司

代理人:

毛 力;谢喜堂

PDF下载: PDF下载
内容摘要

在某些实施例中,一种方法包括:接收对生成线程的请求并至少部分地响应于所接收的请求将一请求提供给队列。该方法还可包括至少部分地响应于提供给队列的请求获取多条指令,并执行多条指令中的至少一条。在某些实施例中,一种装置包括具有指令存储于其上的存储介质,该指令在被机器执行时导致本方法。在某些实施例中,一种装置包括用于接收对生成线程的请求并至少部分地响应于所接收的请求将对生成线程的请求进行排队的电路。在某些实施例中,一种系统包括:用于接收对生成线程的请求并至少部分地响应于所接收的请求将对生成线程的请求进行排队的电路以及用于存储线程的至少一条指令的存储单元。

权利要求书

1.  一种方法,包括:
接收对生成线程的请求;以及
至少部分地响应于所接收的请求将一请求提供给队列。

2.
  如权利要求1所述的方法,其特征在于,还包括:
至少部分地响应于提供给所述队列的所述请求获取多条指令;以及
执行所述多条指令中的至少一条。

3.
  如权利要求2所述的方法,其特征在于,执行所述多条指令中的至少一条包括:
将所述至少一条指令提供给执行单元以执行所述至少一个指令。

4.
  如权利要求1所述的方法,其特征在于,还包括:
从执行单元接收对生成线程的请求;以及
至少部分地响应于从所述执行单元接收的所述请求将一请求提供给队列。

5.
  如权利要求2所述的方法,其特征在于,接收对生成线程的请求包括:
接收第一指针。

6.
  如权利要求5所述的方法,其特征在于,至少部分地响应于提供给所述队列的所述请求获取多条指令包括:
至少部分地响应于所述第一指针获取多条指令。

7.
  如权利要求6所述的方法,其特征在于,至少部分地响应于所述第一指针获取多条指令包括:
至少部分地响应于所述第一指针和第二指针获取多条指令。

8.
  如权利要求1所述的方法,其特征在于,接收对生成线程的请求包括接收对生成第一线程的请求,且其中将一请求提供给队列包括至少部分地响应于所述对生成第一线程的请求将第一请求提供给第一队列。

9.
  如权利要求8所述的方法,其特征在于,还包括:
接收对生成第二线程的请求;以及
至少部分地响应于所述对生成第二线程的请求将第二请求提供给第二队列。

10.
  如权利要求9所述的方法,其特征在于,还包括:
至少部分地响应于所述第一请求获取多条指令;以及
将所述多条指令中的至少一条提供给执行单元。

11.
  如权利要求9所述的方法,其特征在于,还包括:
在所述第一队列中的请求和所述第二队列中的请求之间作出仲裁。

12.
  如权利要求9所述的方法,其特征在于,还包括:
将所述第一队列中的请求和所述第二队列中的请求同步。

13.
  一种装置,包括:
用于接收对生成线程的请求并至少部分地响应于所接收的请求将对生成线程的请求进行排队的电路。

14.
  如权利要求13所述的装置,其特征在于,还包括:
用于至少部分地响应于提供给所述队列的所述请求获取多个指令,并执行所述多条指令中的至少一条的电路。

15.
  如权利要求14所述的装置,其特征在于,所述用于至少部分地响应于提供给队列的请求获取多条指令,以及执行多条指令中的至少一条的电路包括:
执行所述至少一条指令的执行单元。

16.
  如权利要求15所述的装置,其特征在于,还包括:
用于从执行单元接收请求对生成线程的请求并至少部分地响应于从所述执行单元接收的所述请求将对生成线程的请求进行排队的电路。

17.
  如权利要求13所述的装置,其特征在于,所述电路包括:
用于接收第一指针的电路。

18.
  如权利要求17所述的装置,其特征在于,所述电路包括:
用于至少部分地响应于所述第一指针获取多条指令,并执行所述多条指令中的至少一条的电路。

19.
  如权利要求18所述的装置,其特征在于,所述至少部分地响应于第一指针获取多条指令的电路包括:
用于至少部分地响应于所述第一指针和第二指针获取多条指令的电路。

20.
  如权利要求13所述的装置,其特征在于,所述电路包括:
用于接收对生成第一线程的请求的电路,
用于至少部分地响应于所接收的请求将对生成线程的第一请求进行排队的第一队列。

21.
  如权利要求20所述的装置,其特征在于,还包括:
用于接收对生成第二线程的请求的电路;以及
用于至少部分地响应于所接收的对生成所述第二线程的请求将对生成线程的请求进行排队以的第二队列。

22.
  如权利要求21所述的装置,其特征在于,还包括:
用于在所述第一队列中的请求和所述第二队列中的请求之间作出仲裁的电路。

23.
  如权利要求21所述的装置,其特征在于,还包括:
用于将所述第一队列中的请求和所述第二队列中的请求同步的电路。

24.
  一种装置,包括:
具有指令存储于其中的存储介质,所述指令在被机器执行时导致以下:
接收对生成线程的请求;以及
至少部分地响应于所接收的请求将一请求提供给队列。

25.
  如权利要求24所述的装置,其特征在于,所述指令还包括在被机器执行时导致以下的指令:
至少部分地响应于提供给所述队列的所述请求获取多条指令;以及
执行所述多条指令中的至少一条。

26.
  如权利要求25所述的装置,其特征在于,执行所述多条指令中的至少一条包括:
将所述至少一条指令提供给执行单元以执行所述至少一条指令。

27.
  如权利要求26所述的装置,其特征在于,所述指令还包括在被机器执行时导致以下的指令:
从执行单元接收对生成线程的请求;以及
至少部分地响应于从所述执行单元接收的所述请求将一请求提供给队列。

28.
  一种系统,包括:
用于接收对生成线程的请求并至少部分地响应于所接收的请求将对生成线程的请求进行排队的电路;以及
用于存储所述线程的至少一条指令的存储单元。

29.
  如权利要求28所述的系统,其特征在于,还包括:
用于至少部分地响应于提供给所述队列的请求获取多条指令,并执行所述多条指令中的至少一条的电路。

30.
  如权利要求29所述的系统,其特征在于,所述至少部分地响应于提供给队列的请求获取多条指令,并执行多条指令中的至少一个的电路包括:
用于执行所述至少一条指令的执行单元。

说明书

线程排队的方法和装置
背景
为了提高性能,处理系统可具有执行一个以上的线程的能力。例如,处理系统可具有执行线程直到发生一个或多个事件——例如,在等待数据的同时被强制进入停止模式——然后开始执行另一个线程的能力。
在一个多线程处理系统中,执行单元具有多个通道,其中的两个或更多个各自具有执行两个或多个线程的能力。
无论多线程系统的当前状态如何,还是需要用于在多线程系统中生成和/或执行线程的其它方法和装置。

附图简述
图1是根据某些实施例的系统的框图。
图2是根据某些实施例的图1的系统的处理系统的框图。
图3A是根据某些实施例的图1的处理系统的一部分的框图。
图3B是根据某些实施例的图1的处理系统的一部分的框图。
图4是根据某些实施例的图1的线程生成器的示意性框图。
图5是根据某些实施例的命令和状态模型的示意图。
图6是根据某些实施例的线程关系的示意图。
图7是根据某些实施例的线程关系的示意图。
图8是根据某些实施例的图4的线程生成器的线程开辟器(thread spawner)的功能框图。
图9是根据某些实施例的方法的流程图。
详细描述
本文所描述的某些实施例与“处理系统”相关联。正如本文所使用的,短语“处理系统”可指处理数据的任意系统。在某些实施例中,处理系统可与处理图形数据和/或其它类型的媒体信息的图形引擎相关联。在某些情况下,可利用SIMD执行单元提高处理系统的性能。例如,SIMD执行单元可同时执行关于多通道数据的单浮点SIMD指令(例如,用于加速三维几何图像的变换和/或渲染)。处理系统的其它示例包括中央处理单元(CPU)和数字信号处理器(DSP)。
图1是根据某些实施例的系统100的框图。参照图1,系统100包括输入设备110、处理系统120和输出设备130。输入设备110可通过通信链路140耦合至处理系统120。处理系统120可通过通信链路150耦合至输出设备130。
在操作中,输入设备110可通过通信链路140将信息提供给处理系统。处理系统120可接收由输入设备110提供的信息并可存储信息和/或通过通信链路150将信息提供给输出设备140,如显示设备140。
正如本文所使用的,通信链路可以是任意类型的通信链路,例如但不限于有线(例如,导线、光纤电缆)或无线(例如,声链路、电磁链路或其任意组合,包括但不限于例如微波链路、卫星链路、红外链路)和/或其组合,这些链路中的每一个可以是公共或私人的、专用和/或共享的(例如,网络)。通信链路可以是或可以不是永久的通信链路。通信链路可支持任意形式的任意类型信息,例如但不限于串行和/或并行形式的模拟和/或数字(例如,二进制值序列,即位串)信号。信息可以被分成或可以不被分成块。如果分成块,则块中的信息量可以是预定的或动态确定的,和/或可以是固定的(例如,统一)或可变的。通信链路可采用一种协议或多种协议的组合,这些协议包括但不限于例如网际协议。
在某些实施例中,处理系统包括一个或多个处理器。如本文所使用的,处理器可以是任意类型的处理器。例如,处理器可以是可编程或不可编程的、通用或特殊用途的、专用或非专用的、分布式或非分布式的、共享或非共享的和/或其任意组合。如果处理器具有两个或多个分布式部分,则这两个或多个部分可通过通信链路互相通信。处理器可包括但不限于例如硬件、软件、固件、硬连线电路和/或其任意组合。
图2是根据某些实施例的处理系统120的框图。参照图2,在某些实施例中,处理系统120包括处理器210和存储器单元215。处理器210可包括执行单元220,且可与例如通用处理器、数字信号处理器、媒体处理器、图形处理器和/或通信处理器相关联。
存储器单元215可存储指令和/或数据(例如,与二维图像、三维图像和/或运动图像相关联的标量和矢量),且可通过一条或多条通信链路耦合到处理器210。在某些实施例中,存储器单元215或其部分包括硬盘驱动(例如,用于存储和提供媒体信息)、诸如随机存取存储器(RAM)之类的易失性存储器和/或诸如FLASH存储器(闪存)之类的非易失性存储器。
在某些实施例中,存储器单元215包括可存储指令的指令存储器单元230和可存储数据的数据存储器单元240。指令存储器单元230可通过通信链路250耦合到处理器。数据存储器单元240可通过通信链路260耦合到处理器。在某些实施例中,指令存储器单元230和/或数据存储器单元240与单独的指令和数据高速缓存、共享的指令和数据高速缓存、由共同共享高速缓存支持的单独的指令和数据高速缓存或任意其它高速缓存分层体系相关联。
图3A是根据某些实施例的处理系统的一部分的框图。参照图3A,在某些实施例中,处理系统可包括执行单元300和线程生成器310。在某些实施例中,执行单元300可包括线程表320、多个指令队列330、多个解码器340、指令调度器350和执行单元流水线360。
在某些实施例中,可通过通信链路140将命令提供给线程生成器310的输入。可从任意命令源提供命令,该命令源包括但不限于例如主机和/或输入设备110(图1)。在某些实施例中,线程生成器还可通过一条或多条信号线和/或总线380从执行单元流水线360接收命令。线程生成器310可处理包括对生成一个或多个线程的请求的命令,并可至少响应于此生成一个或多个线程。线程生成器310的一个或多个输出可提供一个或多个线程,进而可通过一条或多条信号线370将其定义提供给线程表320的一个或多个输入。每个线程可包括一组指令,该组指令可从指令高速缓存或其它存储器取得,该指令高速缓存或其它存储器可存储定义由处理系统正在执行和/或将要执行的一个或多个程序的一部分、某些部分或全部的多条指令。由线程表定义的每条指令的指令可被提供给指令队列330中相应的一个,可调节每个指令队列330的大小,例如用于存储少量指令,例如6至8条指令。可将来自每个指令队列330的指令提供给解码器340中相应的一个的输入。解码器340可将经解码的指令提供给指令调度器350,该指令调度器350可将用于正执行的一个或多个线程的经解码的指令提供给执行流水线360,该执行流水线360可执行经解码的指令。
图3B是根据某些实施例的处理系统的一部分的框图。参照图3B,在某些实施例中,处理系统包括执行单元390和线程生成器310。在某些实施例中,执行单元390可包括多个执行单元,例如执行单元300A-300D。在某些实施例中,执行单元300A-300D中的每一个可与执行单元300(图3A)相同和/或相似。
在某些实施例中,可通过通信链路140将命令提供给线程生成器310的输入。可从任意命令源提供命令,该命令源包括但不限于例如主机和/或输入设备110(图1)。在某些实施例中,线程生成器还可从执行单元300A-300D中的一个或多个接收命令。线程生成器310可处理包括对生成一个或多个线程的请求的命令,并可至少响应于此生成一个或多个线程。线程生成器310的一个或多个输出可提供一个或多个线程,进而可将其定义提供给执行单元300A-300D中的一个或多个,例如执行单元300A-300D中的一个或多个的一个或多个线程表(例如,参见线程表320(图3A))的一个或多个输入。在某些实施例中,执行单元300A-300D的操作可与上述执行单元300(图3A)的操作相同和/或相似。
在某些实施例中,执行单元(300A、300B、300C或300D)可包括SIMD执行单元。在某些实施例中,SIMD执行单元可接收指令(例如,来自指令存储器单元)连同四分量数据矢量(例如,矢量分量)。执行单元于是可同时对矢量中的所有分量执行指令。这一方法被称为“水平”、“通道并行”或“结构数组(AOS)”实现。在某些实施例中,SIMD执行单元可接收指令连同数据的四个操作数,其中每个操作数与不同的矢量相关联。每个矢量可包括例如与三维图形位置相关联的三个位置值(例如,X、Y和Z)。执行单元然后可在单个指令周期中同时对所有操作数执行该指令。这一方法被称为“垂直”、“通道串行”或“数组结构(SOA)”实现。
尽管本文所描述的某些实施例与四路和八路SIMD执行单元相关联,但注意,SIMD执行单元可具有一个以上的任意数量的通道(例如,实施例可与32通道执行单元相关联)。
图4是根据某些实施例的线程生成器310的功能框图。参照图4,在某些实施例中,线程生成器310可包括命令流化器(streamer)402、视频前端404、线程开辟器406、复用器410、存储器(在本文中有时称为统一返回缓冲器(URB))412和线程调度器414。
命令流化器可耦合到视频前端404和复用器410。视频前端404可耦合到线程开辟器406和复用器410。复用器可耦合到统一返回缓冲器,该缓冲器可耦合到线程调度器。
在某些实施例中,处理系统400的该部分的各部分之间的耦合——例如电连接可以是专用的、共享的(例如,总线)和/或其任意组合。在该方面,在某些实施例中,从命令流化器、视频前端和执行单元至诸如URB之类的存储器的耦合——例如电连接——可包括一条或多条共享数据总线。在某些实施例中,例如电连接的每个其它耦合可包括一条或多条专用信号线。
命令流化器402的输入可接收命令。可从任意命令源提供输入命令,该命令源包括但不限于例如主机和/或输入设备110(图1)。在某些实施例中,命令流化器可包括直接存储器访问(DMA)引擎,以从存储器取得这种命令。在某些这样的实施例中,DMA引擎被配置为环形缓冲器。
命令中的一个或多个可包括生成线程的请求。这一命令可具有任意形式。在某些实施例中,请求可包括可在生成线程的过程中使用的信息。
请求线程的命令的一个或多个部分可被提供给视频前端404的输入。如果命令请求线程,则视频前端404可响应于此提供线程请求。由视频前端404提供的线程请求可具有任意形式。因此,由视频前端404提供的线程请求可以具有或可以不具有与提供给命令流化器402和/或视频前端404的请求相同的形式。在某些实施例中,线程请求包括可用于生成线程的信息。
来自视频前端404的线程请求可被提供给线程开辟器406的第一输入、该线程开辟器406的第二输入可接收由在执行单元中运行的一个或多个线程生成的线程请求。值得注意的是,在下文中,由主机命令导致的线程请求有时被称为根线程请求。在下文中,来自执行单元的线程请求有时被称为开辟线程请求。由执行单元中运行的另一个线程创建的线程被称为子线程。子线程可创建另外的线程,全部都在根线程树之下。
图6是根据某些实施例的线程关系的示意图。参照图6,在某些实施例中,线程关系可包括单树结构600。单树结构600可包括生成多个子线程604-612的单根线程602。某些子线程可生成后续子线程。例如,子线程606可生成子线程614、616。子线程608可生成子线程618、620。子线程610可生成子线程622。根线程608、610、612依赖根线程602,并被称为同步根线程,如下文进一步描述的。
图7是根据某些实施例的线程关系的示意图。参照图7,在某些实施例中,线程关系可包括多个分离的树700、701。第一树700具有第一根线程702,后者具有子线程704、706。子线程706可生成子线程714、716。根线程708可具有兄弟根线程710、712。根线程708可生成子线程718、720。根线程708可生成子线程718、720。根线程702可具有兄弟根线程708、710、712。根线程702和兄弟根线程708、710、712是独立的,且被称为非同步根线程,如下文进一步描述的。
再次参照图4,线程开辟器406可对线程请求进行排队和/或仲裁,且可至少部分地基于此提供线程请求。由线程开辟器406提供的线程请求可具有任何形式,因此可以具有或可以不具有与提供给命令流化器402的请求、提供给视频前端404的请求和/或提供给线程开辟器406的请求相同的格式。
可将来自线程开辟器406的线程请求提供给线程调度器414的第一输入,在下文中将进一步描述。
在某些实施例中,命令流化器402和视频前端404还可将信息提供给复用器410的输入。复用器的另一个输入可从执行单元接收信息。
复用器410的输出可提供接收自命令流化器402、视频前端404和执行单元的信息,该信息可被提供给存储器412,如上所述在本文中有时将该存储器412称为统一返回缓冲器(URB)。
在某些实施例中,存储器412可被分成两个或多个分区。在某些这样的实施例中,索引——在本文中有时称为句柄或URB句柄——可用作引用存储器中的这些分区之一的指针。这些分区之一——在本文中有时称为常数URB——可用于存储一个或多个常数。
在某些实施例中,存储器的一个或多个部分可与命令流化器402、视频前端404、线程开辟器406和/或线程调度器414设置在同一芯片上。
存储器或URB 412的输出可提供信息,该信息可被提供给线程调度器414的第二输入。线程调度器414可为提供给它的每个这样的线程调度线程。在某些实施例中,线程调度器414每次处理一个线程请求。即,线程调度器414可以直到调度器414为提供给它的先前线程请求调度线程之后才请求和/或接收线程请求。
在某些实施例中,控制信息可被提供给线程调度器,且可用于调度线程,诸如配置和/或分配(诸)线程可能要求的若干寄存器之类。
可按任意方式调度线程。在该方面,在某些实施例中,线程调度器414可按“循环”方式调度线程。例如,在某些实施例中,执行单元可包括多个执行单元,其中的每一个能够执行多个线程。在某些这样的实施例中,线程调度器可将第一线程指派到第一执行单元的第一线程槽,将第二线程指派到第二执行单元中的第一槽,将第三线程指派到第三执行单元中的第一槽,将第四线程指派到第四执行单元中的第一槽、第五线程指派到第一执行单元中的第二槽,依次类推。如果执行单元完成了线程的执行,则可由例如执行单元生成线程结束消息,并将其提供给线程开辟器406。
图5是根据某些实施例的可被提供给处理系统用于请求线程的命令序列500和可被用于定义与线程有关的信息的状态模型510的示意图。参照图4,在某些实施例中,用于请求线程的命令序列可包括状态指针命令512、非流水线化状态命令516和原语命令518。
状态指针命令512可通过将至少一个指针提供给包含状态信息的状态描述符来“间接地”提供控制流水线中的固定功能(例如,视频前端404和/或线程开辟器406)的状态信息。在某些实施例中,状态指针命令可包括VFE状态指针514,其可指向VFE状态描述符520。在某些这样的实施例中,VFE状态描述符可包括接口描述符基址指针,其可指向接口描述符的基址。
非流水线化状态命令516可“直接”提供控制与流水线相关联的固定功能和存储器的状态信息。一类非流水线化状态命令可配置存储器的分区,如上所述该存储器可与命令流化器402、视频前端404、线程开辟器406和/或线程调度器414设置在同一芯片上。另一类型的非流水线化命令是常数命令,有时将其称为常数URB命令,其可定义例如一个或多个常数的常数数据。在某些实施例中,数据可被间接(例如,由指向存储器的一个或多个指针标识)和/或联机(例如包括在命令中)定义。
原语命令518是可采用的另一类型的命令。在某些实施例中,原语命令可用于请求生成一个或多个线程。在某些实施例中,原语命令可包括用于将生成的一个或多个线程的信息,即控制和/或数据。在某些实施例中,控制信息可包括可用于配置线程——诸如配置和/或分配(诸)线程可能要求的若干寄存器之类——的信息。在某些实施例中,控制信息可包括用于将生成的线程的接口描述符偏移量。在某些实施例中,可基于接口描述符偏移量和接口描述符基址指针来确定线程的接口描述符指针(如上所述,在某些实施例中,可向视频前端404提供包括可指向VFE状态描述符520的VFE状态指针514的状态指针命令,该VFE状态描述符520可包括接口描述符基址指针)。
接口描述符510可用于定义与线程有关的信息。接口和状态描述符模型可包括接口描述符基址指针522和多个接口描述符524。接口描述符基址指针522可提供多个接口描述符524的一个或多个接口描述符(例如,第一接口描述符)的位置。
在某些实施例中,接口描述符524提供已被调度和/或将被调度的线程的状态信息。在某些实施例中,每个接口描述符524可包括用于线程开辟器406和/或用以调度线程的线程调度器414的足够信息。
在某些实施例中,多个接口描述符524中的每一个可包括线程指针526和线程资源描述符528、采样器状态指针530、绑定表指针532和/或可用于存储器访问和/或访问其它硬件功能的一个或多个其它指针。线程指针526可提供线程的一条或多条指令(例如,第一指令)的位置。线程资源描述符528可指示线程可能要求的资源,例如,由线程和/或浮点模式要求的一些寄存器堆(文件)。采样器状态指针530可提供采样器状态表534中的一个或多个描述符(例如,第一描述符)的位置。在某些实施例中,采样器状态表534可包括高达16个采样器状态描述符。在某些实施例中,与三维图形相关联地使用采样器状态描述符中的一个或多个。在某些实施例中,采样器状态描述符中的一个或多个提供(诸)采样器设备(例如,图形结构采样器单元(未示出))的一个或多个状态。
绑定表指针532可提供绑定表536中的一个或多个条目(例如,第一条目)的位置。在某些实施例中,绑定表536可包括高达256个条目。绑定表536中的这些条目中的一个或多个可定义提供表面状态描述符540的位置的指针。在某些实施例中,表面状态中的一个或多个可定义存储器中的数据阵列和/或与数据缓冲器相关联的数据处理。在某些实施例中,表面状态描述符540中的一个或多个可描述如何处理对二维图像的越界数据访问。
每个接口描述符524可存储在其自身的存储器位置,即与存储其它接口描述符的存储位置不同的一个或多个存储位置。特定接口描述符524的位置可通过将索引或偏移量加到接口描述符基址指针来确定,在本文中有时将该索引或偏移量称为接口描述符索引。因此,模型的一个或多个方面可采用两级寻址。此外这些寻址等级中的一个或多个可包括基址+偏移量寻址。
在某些实施例中,所有接口描述符具有相同的大小,和/或被组织为存储器中的毗邻阵列。在某些其它实施例中,接口描述符中的一个或多个具有不同的大小,和/或存储在不与其它接口描述符毗邻的存储器部分中。
现在还参照图4,在某些实施例中,提供给命令流化器402的命令与参照图5示出和/或描述的命令相同和/或类似。在某些这样的实施例中,命令流化器402可首先接收状态指针命令。一旦接收到状态指针命令512(图5),命令流化器402就可递送该状态指针,该状态指针可向视频前端指示VFE状态描述符520(图5)的位置。命令流化器然后可接收一个或多个原语命令。如上所述,在某些实施例中,原语命令可表示生成一个或多个线程的请求。在某些实施例中,原语命令可包括用于将生成的一个或多个线程的信息,即控制和/或数据。在某些实施例中,控制信息可包括可用于配置线程——诸如配置和/或分配(诸)线程可能要求的若干寄存器之类——的信息。在某些实施例中,控制信息可包括用于将生成的线程的接口描述符偏移量。在某些实施例中,可基于接口描述符偏移量和接口描述符基址指针来确定线程的接口描述符指针(如上所述,在某些实施例中,可向视频前端404提供包括指向VFE状态描述符520的VFE状态指针514的状态指针命令,该VFE状态描述符520可包括接口描述符基址指针)。在某些实施例中,视频前端404可基于接口描述符偏移(如上所述,它可被包括在原语命令518(图5)中)和接口描述符基址指针522来确定线程的接口描述符指针(如上所述,在某些实施例中,可向视频前端提供包括指向VFE状态描述符520的VFE状态指针514的状态指针命令,该VFE状态描述符520可包括接口描述符基址指针522)。
在某些实施例中,提供给线程开辟器406的线程请求可包括接口描述符指针。在某些实施例中,视频前端404可生成索引或URB句柄,它们可包括在提供给线程开辟器406的线程请求中。在某些实施例中,线程请求可包括指示分配给将生成的线程的寄存器的数量和线程是否将使用存储常数的存储器部分(例如常数URB)的信息。
图8是根据某些实施例的线程开辟器406的功能框图。参照图8,在某些实施例中,由视频前端404(图4)提供的根线程请求可被提供给根线程请求队列802的输入。在某些实施例中,根线程请求队列802可包括先入先出(FIFO)缓冲器,表示最先进入队列802的根线程请求也是最先离开队列802的根线程。在某些这样的实施例中,根线程请求队列802可包括输入缓冲器804、输出缓冲器806和耦合在其间的一个或多个缓冲器,例如缓冲器808-814。输出缓冲器806有时在本文中称为队列802的头部806。在某些实施例中,输出缓冲器806或队列的头部可存储接下来离开根线程请求队列802的根线程请求。
由根线程请求队列802提供的根线程请求可被提供给复用器818的第一输入。由根线程请求队列提供的线程请求可具有任意形式。在某些实施例中,由根线程请求队列802提供的线程请求可具有与从视频前端404提供给线程开辟器406的线程请求相同的配置。
在某些实施例中,控制单元816可控制从根线程请求队列802提供根线程请求的定时。在某些实施例中,控制部分816可提供一个或多个信号同步和/或仲裁,如下文进一步描述的。来自控制单元816的一个或多个信号可被提供给根线程请求队列802。此外,来自控制单元816的一个或多个信号可提供给复用器818的一个或多个控制输入。
在某些实施例中,线程开辟器404可进一步包括开辟线程请求队列822,其输入可接收由执行单元提供的开辟线程请求。开辟线程请求队列822可对提供给它的开辟线程请求进行排队。在某些实施例中,开辟线程请求队列822可包括先入先出(FIFO)缓冲器。在某些这样的实施例中,开辟线程请求队列822可包括输入缓冲器824、输出缓冲器826和耦合在其间的一个或多个缓冲器,例如缓冲器828-834。在本文中,有时将输出缓冲器826称为队列头部或队列缓冲器的头部。在某些实施例中,输出缓冲器826或队列的头部可存储接下来将离开开辟线程请求队列822的开辟线程请求。
在某些实施例中,根线程队列802和/或开辟线程队列822可包括除FIFO缓冲器或代替FIFO缓冲器的一种或多种其它类型的队列。在某些实施例中,例如,根线程请求可被各自指派优先级,且具有最高优先级的根线程请求可以是首先离开队列802的根线程请求。在某些实施例中,例如,开辟线程请求可被各自指派优先级,且具有最高优先级的开辟线程请求可以是首先离开队列822的开辟线程请求。
由开辟线程队列822提供的线程请求可被提供给复用器818的第二输入。由根线程请求队列提供的线程请求可各自具有任意形式。在某些实施例中,由开辟线程请求队列822提供的线程请求可具有与从视频前端404提供给线程开辟器406的线程请求相同的配置。
在某些实施例中,控制部分816可控制从开辟线程请求队列822提供开辟线程请求的定时。在某些实施例中,控制部分816可提供用于同步和/或仲裁的一个或多个信号,如下文进一步描述的。
在某些实施例中,可期望一次只提供一个线程请求(即来自根线程请求队列802的一个线程请求或来自开辟线程请求队列822的一个线程请求)。例如,线程生成单元可能一次仅能够处理一个线程请求。为了该效果,可提供仲裁。在某些实施例中,开辟线程请求队列822中的线程请求可被给予超过根线程请求队列中的线程请求的优先级。在某些实施例中,这种仲裁可帮助避免否则可能发生的死锁。
在该方面,在某些实施例中,控制单元816可向根线程请求队列802提供一个或多个控制信号和/或向开辟线程请求队列822提供一个或多个控制信号,以便控制根线程请求队列802和/或开辟线程请求队列822,使得一次只提供一个线程请求(即,来自根线程请求队列802的一个线程请求或来自开辟线程请求队列822的一个线程请求)。在这些实施例中,控制单元816还可向复用器818提供一个或多个控制信号,以便控制复用器818,使得线程请求被提供给这种复用器818的输出。
此外,某些实施例可定义关于任意给定时间允许的根线程的数目的极限(可编程或不可编程)。在某些实施例中,该极限小于系统中线程的最大数目,以便帮助避免死锁。根线程的请求到达队列802的头部806,且根线程的数目处于该极限,根线程请求队列802可等待直到根线程的数目小于所定义的极限。在某些实施例中,线程开辟器可继续提供线程请求,只要没有达到线程的最大数目即可。
在某些实施例中,根线程可以是同步或不同步的。同步根线程可用于帮助确保直到事件发生才生成根线程。例如,可能期望推迟一部分程序的线程直到该程序的在前部分的线程已经运行完成。
在某些实施例中,对同步根线程的请求和对非同步根线程的请求可被提供给同一根线程请求队列802。在某些这样的实施例中,对同步根线程的请求直到提供同步信号才可超过根线程请求队列802的头部806。在某些实施例中,如果将消息——在本文中有时称为开辟根消息——提供给开辟线程请求队列822并到达开辟线程请求队列822的头部826,则生成同步信号。如果在开辟根消息到达队列822的头部826之前对同步根线程的请求到达队列802的头部806,则根线程请求队列802等待开辟根消息到达队列822的头部826。为了帮助避免死锁,在对同步根线程的请求到达根线程请求队列的头部806之前,可以不允许开辟根消息超过开辟线程请求队列802的头部826。在该方面,如果在对同步根线程的请求到达队列802的头部806之前开辟根消息到达队列822的头部826,则开辟线程请求队列822等待对同步根线程的请求到达队列802的头部806。在某些这样的实施例中,对同步根线程的请求和开辟根线程消息可相互同时地离开其相应队列。
在某些实施例中,同步根线程可起源于请求同步根线程的命令。在某些实施例中,命令包括同步字段,且通过设置该字段中的一位来请求同步根线程。在某些实施例中,开辟根消息可由根线程和/或子线程发起。
某些实施例可不具有关于同步根线程的数目的任何限制,然而,同步根的请求的数目和开辟根消息的数目应该相同。否则,在某些实施例中死锁可能发生。
如上所述,在某些实施例中,控制单元816可将一个或多个控制信号提供给根线程请求队列802和/或将一个或多个控制信号提供给开辟线程请求队列822,以控制根线程请求队列802和/或开辟线程请求队列822,从而提供合需操作。在这些实施例中,控制单元816还可向复用器818提供一个或多个控制信号,以便控制复用器818,使得线程请求被提供给这种复用器818的输出。
复用器818的输出可将线程请求提供给线程生成单元838的输入,该线程生成单元838的输出可提供线程请求。由线程生成单元838提供的线程请求可具有任何形式,且在某些实施例中可包括但不限于接口描述符和/或存储器的索引,例如常数URB句柄。
在某些实施例中,线程生成单元838可将接口描述符指针提供给接口描述符获取单元840,该单元840可获取接口描述符(例如,从接口描述符高速缓存)并将接口描述符提供给线程生成单元838。此外,如果提供给线程生成单元838的线程请求指示要生成的线程将使用存储常数的存储器部分,例如常数URB,则线程生成单元838还可接收对存储常数的存储器部分的索引,例如从常数URB句柄单元接收常数URB句柄。
由线程生成单元838提供的线程请求可被提供给线程调度队列844的输入。在某些实施例中,线程调度队列844可帮助从线程调度器去耦合线程生成器单元。在这些实施例中,线程调度队列可帮助使得生成单元838和线程调度器414彼此相对并发和/或异步(不同步)地工作成为可能。在某些实施例中,根线程请求队列844可包括先入先出(FIFO)缓冲器或任何其它类型的队列。
在某些实施例中,根线程队列802可帮助从线程生成单元838去耦合视频前端404。在这种实施例中,根线程请求队列802因此可帮助使得视频前端404和线程生成器838彼此相对并发和/或异步(不同步)地工作成为可能,即使视频前端和线程生成器彼此不具有相同的延迟。
在某些实施例中,当(父)线程创建子线程时,父线程表现为类似固定功能(例如,视频前端404)。可通过组合URB中的有效载荷然后将开辟线程消息与子线程的接口描述符指针和存储器(例如,URB)中数据的指针发送到线程开辟器406,提供所有必需的信息来开始子线程。
在某些实施例中,子类的接口描述符可不同于父类——父类如何确定子类接口描述符可由父类来负责。某些实施例可要求子类接口描述符是来自相同的接口描述符基址地址上的接口描述符阵列中的一个。
在某些实施例中,根线程可负责管理预分配的资源,诸如存储器,例如,URB、其直接和间接子线程的空间和临时空间。在某些实施例中,例如根线程可将其URB空间分成多个段。可将一个段用于将有效载荷递送到子线程,以及用于将该段转发给子线程以用作返回URB空间。子线程可将URB段进一步细分成子段并将这些子段用于它们自己的子线程。这种过程是反复的。类似地,根线程可将其临时存储器空间分成多个段并将一个临时段给予一个子线程。
在某些实施例中,多个根线程可在执行单元中并发地运行。在某些实施例中,可能只有一个为所有根线程所共享的临时空间状态变量,且请求临时空间的所有并发根线程可共享同一临时存储器大小。
图9是根据某些实施例的方法的流程图900。本文所描述的流程图不一定表示动作的固定顺序,且实施例可按可实施的任何顺序执行。注意,本文所述的任何方法可通过硬件、软件(包括微代码)、硬件或这些方法的任意组合来执行。在某些实施例中,该方法可用于本文所述实施例中的一个或多个。
在902,在某些实施例中,可接收对生成线程的请求。在某些实施例中,请求可包括第一指针。在某些这样的实施例中,第一指针可包括接口描述符指针。
在904,可至少部分地响应于所接收的请求将请求提供给队列。在某些实施例中,提供给队列的请求可至少部分地基于所接收的请求。在某些实施例中,提供给队列的请求可以是所接收的请求。在某些实施例中,所接收的请求和/或所提供的请求包括第一指针。在某些这样的实施例中,第一指针可包括接口描述符指针。
某些实施例还可包括至少部分地响应于提供给队列的请求获取多条指令,并执行多条指令中的至少一条。执行多条指令中的至少一条可包括将至少一条指令提供给执行单元以执行至少一条指令。某些其它实施例还包括从执行单元接收对生成线程的请求;并至少部分地响应于来自执行单元的请求将请求提供给队列。
除非另外说明,否则诸如“基于”之类的术语表示“至少基于”,以免排除基于一个以上的事物。此外,除非另外说明,否则诸如“包括”、“具有”、“包含”及其所有形式术语认为是开放式的,以免不包括附加要素和/或特征。此外,除非另外说明,否则诸如“一”、“一个”、“第一”之类的术语认为是开放式的,且并非分别表示“仅一”、“仅一个”和“仅第一”。此外,除非另外说明,否则术语“第一”本身不要求还有“第二”。
在本文中已经参照SIMD执行导单元描述了某些实施例。然而,注意实施例可与诸如多指令、多数据(MIMD)执行单元之类的其它类型的执行单元相关联。
本文所述的若干实施例仅仅是出于说明的目的。本领域的技术人员将本说明认识到可利用仅由权利要求书限定的修改和变化来实施其它实施例。

线程排队的方法和装置.pdf_第1页
第1页 / 共30页
线程排队的方法和装置.pdf_第2页
第2页 / 共30页
线程排队的方法和装置.pdf_第3页
第3页 / 共30页
点击查看更多>>
资源描述

《线程排队的方法和装置.pdf》由会员分享,可在线阅读,更多相关《线程排队的方法和装置.pdf(30页珍藏版)》请在专利查询网上搜索。

在某些实施例中,一种方法包括:接收对生成线程的请求并至少部分地响应于所接收的请求将一请求提供给队列。该方法还可包括至少部分地响应于提供给队列的请求获取多条指令,并执行多条指令中的至少一条。在某些实施例中,一种装置包括具有指令存储于其上的存储介质,该指令在被机器执行时导致本方法。在某些实施例中,一种装置包括用于接收对生成线程的请求并至少部分地响应于所接收的请求将对生成线程的请求进行排队的电路。在某些。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 物理 > 计算;推算;计数


copyright@ 2017-2020 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备2021068784号-1