在多处理器计算机系统中进行基于资源的线程分配的方法和装置的制作方法

文档序号:6562100阅读:201来源:国知局
专利名称:在多处理器计算机系统中进行基于资源的线程分配的方法和装置的制作方法
技术领域
本发明涉及多线程计算机系统,并具体涉及确定在这种系统中的线程之间的冲突。
背景技术
图1中示出了传统的片上双处理器系统。在此系统100中,处理器102和104共享处理器局部总线(“PLB”)106,PLB 106通过桥110与片上外围总线(“OPB”)108以及存储器控制器112互连,存储器控制器112与随机存取存储器(“RAM”)116和DMA外围设备118互连。如图所示,系统100包括耦合于OPB 108的多个外围设备(包括未示出的外围适配器)usb30、SATA、音频DAC、音频ADC、LCD、MAL、无线、uART、密码机、照相机、mpeg编码器、mpeg解码器和DMA。在诸如此类的多处理器环境中,多个线程在同一时间逐个运行,并从而可能竞争使用相同的外围设备。当然,这引起了线程之间的潜在冲突。在现有技术中已处理了该问题的各方面。例如,在美国专利No.6,018,759中,提供了使用超时过程来调整线程运行的时间量的线程交换协调工具。在另一示例中,美国专利No.6,061,710处理了对多线程上下文中的硬件中断的处理。

发明内容
本发明解决了上述问题。在本发明的一种形式中,一种装置包括处理器,可操作用于并行地执行各个指令线程,其中系统包括可操作用于与所述处理器通信的电路,并且系统可操作用于访问共享的处理资源。所述电路包括用于各个指令线程的存储器以及可操作用于在用于各个指令线程的存储器中生成和存储处理资源的历史项的第一逻辑电路。所述历史项指示出用于该项的处理资源是否已被存储器的指令线程中相应的一个所使用。第二逻辑电路可操作用于比较所述指令线程中的第一指令线程和第二指令线程的历史项。第二逻辑电路还可操作用于如果所述比较指示出由所述第一线程使用的处理资源的历史相对于由所述第二线程使用的处理资源的历史具有某种不同,则选择所述第二指令线程用以执行。
在另一方面中,所述第一逻辑电路包括第一子逻辑电路,其可操作用于在存储器中生成和存储是否使用历史项。所述第一子逻辑电路设置所述是否使用项以指示出所述处理资源中对应的一个是否被所述指令线程中对应的一个所使用,并且响应于所述相应的指令线程超过所累计的所述相应的处理资源的未使用的某个阈值,复位所述是否使用项。
在另一方面中,所述第一逻辑电路包括第二子逻辑电路,其可操作用于在存储器中生成和存储何时使用历史项。所述何时使用历史项指示出所述各个处理资源何时被所述各个线程最后使用。
在本发明的方法形式中,在第一存储器中存储指示出所执行的指令线程的线程项。检测由各个指令线程对处理资源的使用,并且在第二存储器中存储用于所述线程的历史项。所述历史项指示出各个处理资源是否已被各个指令线程所使用。比较所述指令线程中的第一指令线程和第二指令线程的历史项。如果所述比较指示出由所述第一线程使用的处理资源的历史相对于由所述第二线程使用的处理资源的历史具有某种不同,则选择所述第二指令线程用以执行。
在另一方面中,由所述第一线程使用的处理资源的历史与由所述第二线程使用的处理资源的历史之间的所述某种不同包括由所述第一线程使用的处理资源的历史与由所述第二线程使用的处理资源的历史完全不同。
在一可替换方案中,所述第一线程正在运行,而系统处理器之一已经选择所述第二线程作为与所述第一线程一起运行的候选。
在另一可替换方案中,系统处理器之一已选择所述第一线程运行,并且所述第二线程已经在运行。
在另一方面中,所述处理资源包括系统的外围设备。
通过阅读以下的详细描述并参考附图,本发明的其它变体、目的、优点和形式将更加明显。


在权利要求中阐明了被认为是本发明新颖特征的特性。然而,通过参考以下对例示性实施例的详细描述并结合附图阅读,将最好地理解本发明本身以及其优选使用模式、另外的目标和优点,在附图中图1例示了根据现有技术的传统的片上双处理器系统。
图2例示了根据本发明实施例的片上系统。
图3是例示了根据本发明实施例的用于确定特定线程与在特定时间正运行的线程是否存在冲突的候选线程查询的某些过程和结构的高级框图。
图4是例示了根据本发明实施例的用于确定可以与饥饿线程一起运行的线程的查询的某些过程和结构的高级框图。
图5是例示了根据本发明实施例的线程资源分配逻辑的某些方面的框图。
图6例示了根据本发明实施例的用于跟踪哪些外围资源被使用以及哪些线程在使用它们的线程资源分配逻辑的存储器阵列的细节。
图7是例示了根据本发明实施例的关于线程资源分配逻辑怎样确定特定线程是否可以与在特定时间已经在运行的其它线程一起运行的某些一般方面的流程图。
图8例示了根据本发明实施例的用于确定可以与饥饿线程一起运行的线程的线程资源分配逻辑。
图9例示了根据本发明实施例的用于确定特定线程是否可以与在特定时间已经在运行的其它线程一起运行的线程资源分配逻辑。
具体实施例方式
在以下对优选实施例的详细描述中,参考了例示出可实践本发明的实施例的附图。应该理解,在不背离本发明范围的情况下,可以使用其它实施例并可做出改变。附图和详细描述并非将本发明限制为所公开的特定形式。相反,本发明将覆盖落入如权利要求所限定的本发明的精神和范围中的所有修改、等同物和变体。这里的标题并非以任何方式限制其主题。
系统如前所述,在多处理器环境中,多个线程在同一时间逐个运行,并从而可能竞争使用相同的外围设备。根据本发明的实施例,线程资源分配逻辑(这里也被称为“线程资源分配核”或“TRAC”)确定可以在特定时间运行的线程组合,以减少线程冲突。这可包括TRAC响应于来自处理器的特定线程查询,其中该处理器将特定线程指示为用于上下文交换的候选者,并且TRAC通过指示出该线程是否将导致资源冲突来进行响应。此外,或者可替换地,这可包括TRAC响应于来自处理器的饥饿(starved)线程查询,其中TRAC确定出将不会导致与给定线程(例如,需要运行的“饥饿”线程)的资源冲突的线程的一个或多个列表,并将其传送给处理器。
TRAC包括用来跟踪哪些外围资源被使用以及哪些线程在使用它们的逻辑和存储器阵列(这里被称为“资源使用存储器”、“资源使用列表”或“RUL”)。RUL具有指示出每个线程已使用了哪些外围资源的存储器项,以及指示出每个线程何时使用了这些外围资源中的每个的存储器项。
现在参考图2,例示了根据本发明实施例的片上系统200。与图1的系统100相似,在系统200中,处理器102和104共享PLB互连总线106,PLB 106进一步连接到OPB总线108、桥110以及存储器控制器112。(当然,本发明适用于具有多于两个处理器的系统。增加存储器数量会增加外围资源冲突。因此本发明在具有更多处理器的系统中更加有用。)图2的OPB 108具有相关联的OPB时钟120,并根据其周期而工作。与系统100相似,如图所示,系统200包括多个外围设备(通过未示出的外围适配器连接于OPB 108)usb30、SATA、音频DAC、音频ADC、LCD、MAL、无线、uART、密码机、照相机、mpeg编码器、mpeg解码器和DMA。
除了传统系统100的特征之外,系统200包括TRAC 202。其与PLB 106相连,从而其可以监听总线上的事务。处理器102和104可以经由DCR总线204访问TRAC 202的DCR寄存器(图2中未示出)。DCR寄存器包含线程和外围资源的状态信息,所述外围资源包括图2中示出的usb30、SATA、音频DAC等。DCR寄存器指示出在特定时间处理器102和104可以运行的线程组合。
用于确定线程组合的概念性框图候选线程查询现在参考图3,所示出的框图例示了根据本发明实施例的用于确定特定线程在特定时间是否可以运行的候选线程查询的某些过程和结构。所示出的TRAC 202响应于在图3中被称为“已排队线程”302的查询。即,“可用处理器”304向TRAC 202指示出作为用于上下文交换的候选者的特定线程。在所例示的实例中,图2的处理器102和104可用,并且查询302的候选线程是线程3、6、4和9。这些线程3、6、4和9中的每个都以将在下文进一步解释的方式分别关联于图2中示出的某些外围资源。具体而言,如已排队线程302中所示,线程3关联于IrDA和USB;线程6关联于JPEG和SATA;线程4关联于MAL;以及线程9关联于IIC。
TRAC 202包括用来跟踪哪些外围资源被使用以及哪些线程在使用它们的逻辑和存储器阵列(图3中未示出)。这包括指示出每个线程已使用了图2的外围usb30、SATA、音频DAC等中的哪些的存储器项(未示出),以及指示出每个线程何时使用了这些外围资源中的每个的存储器项。因此,如图所示,TRAC 202经由OPB 108(图2)监视“当前运行线程”306。在所例示的实例中,线程1和7正在运行。线程1正在使用USB,而线程7正在使用MAL。TRAC 202通过指示出候选线程3、6、4和9中的哪些可以运行(即,指示出哪些线程将不会导致与当前运行线程1和7的资源冲突,以及通过暗示指示出哪些线程将会导致与线程1和7的冲突)而响应于特定查询302。在所示的示例中,如图所示,TRAC 202指示出“计划中线程”308线程6和9可以运行,即,它们将不会导致冲突。
饥饿线程查询现在参考图4,所示出的框图例示了根据本发明实施例的用于确定可以与饥饿线程一起运行的线程的查询的某些过程和结构。所示出的TRAC202响应于来自处理器的查询,在图4中被称为“饥饿线程”402。即,处理器102或104指示出TRAC 202用来确定可以与饥饿线程一起运行而不存在外围资源冲突的特定线程。在所例示的实例中,该查询的饥饿线程是线程号3。TRAC 202以将在下文进一步解释的方式将此线程与图4中示出的某些外围资源相关联。具体而言,线程3关联于IrDA和USB。
TRAC 202通过指示出现有线程中的哪些线程可以运行(即,不论这些线程是否正在运行,指示出哪些线程将不会导致资源冲突,以及通过暗示指示出哪些线程将会导致冲突)而响应于饥饿线程查询402。在所示出的示例中,线程5、7和9可以运行,即,它们将不会导致冲突,因为线程5与外围MAL相关联,线程7与IIC相关联,而线程9与JPEG和SATA相关联,它们均与关联于线程3的外围资源不同。
TRAC 202将所标识出的无冲突线程写入所分配的存储器阵列,作为线程过程标识符的列表404,在该列表末端为“00”。当然,可以使用不同的终止符号。
TRAC的框图现在参考图5,所示出的高级框图例示了根据本发明实施例的TRAC202的某些方面。TRAC 202包括耦合于RUL线程分配逻辑504的RUL502,RUL线程分配逻辑504接着耦合于DCR总线接口506(图2)。TRAC202还包括耦合于PLB 106(图2)的总线监视逻辑508,其功能是监听在OPB 108(图2)上由处理器102和104(图2)的线程对外围资源的访问。即,总线监视逻辑508监听PLB 106(图2)来确定线程在由处理器102和104(图2)执行之时的身份,以及确定特定线程正在访问的外围usb30、SATA等(图2)的身份。因此,通过监听PLB 106,TRAC 202持续地跟踪哪些线程正在使用哪些外围资源。
更具体地,系统200上的操作系统分配哪些线程在处理器102和104中的哪个上运行,并将这些线程分配用信号发送给总线接口单元506。控制单元510从总线接口单元506获得此信息。TRAC 202包括线程处理器映射寄存器(未示出),控制单元510将用于每个线程的项(包括线程过程标识符和用于线程的相关联处理器102或104的标识符)写入所述线程处理器映射寄存器中。这提供了线程到处理器的映射。
总线监视逻辑508还将用于相应外围usb30、SATA等的项写入寄存器(未示出),所述项指示出处理器102和104用来访问外围资源的地址。这提供了地址到外围资源的映射。
在系统200的工作期间,总线监视逻辑508在PLB 106上监视线程事务,并通过参考地址到外围资源的映射来确定这种事务的目标外围usb30、SATA、音频DAC等。总线监视逻辑508在操作上耦合于线程分配逻辑504,线程分配逻辑504接着耦合于RUL 502。总线监视逻辑508将外围资源的使用传送给线程分配逻辑504,线程分配逻辑504将线程项写入其中,其提供了在RUL 502中的哪些线程正在使用哪些外围资源的记录,如下文进一步描述的。
控制逻辑510经由DCR总线接口506从处理器102和104(图2)接收候选线程和饥饿线程查询,并作为响应将用于查询的线程的过程标识符传递到冲突逻辑512。TRAC 202的控制逻辑510耦合于冲突逻辑512和DCR总线接口506(图2)。冲突逻辑512还耦合于RUL 502,并可操作来读取RUL 502的项,以便对于给定查询的线程确定其它线程与该线程有什么外围资源冲突以及没有什么外围资源冲突。冲突逻辑512将答复返回到控制逻辑510,控制逻辑510接着经由DCR总线接口506答复处理器102和104。
更具体地,在对TRAC 202的查询中,处理器102或104包括用于线程的过程标识符和查询类型,其指示出该查询是否正在询问i)所标识的线程是否与当前正运行的线程冲突(这里被称为“候选线程”查询),或者ii)存在与所标识的线程不冲突的什么线程(这里被称为“饥饿线程”查询)。过程标识符和查询类型被控制逻辑510写入DCR查询寄存器(未示出),接着冲突逻辑512执行在DCR查询寄存器中的所标识线程与RUL502中的线程之间的由查询类型所指定的特定比较或一系列比较,如下文将进一步描述的。
RUL现在参考图6,示出了根据本发明实施例的用于跟踪哪些外围资源被使用、它们何时被使用以及哪些线程在使用它们的RUL 502和线程分配逻辑504的相关联的“是否使用”逻辑602和“何时使用”逻辑604。RUL 502包括多个线程阵列,即,用于第一线程的第一阵列606、用于第二线程的第二阵列608等,出于例示性目的象征性地将这些线程阵列彼此堆叠地示出。每个线程阵列在结构上与图6上端象征性示出的线程阵列606相类似。
线程阵列606具有用于图2中的外围资源的每一个的列、“是否使用”行610(其可以是寄存器)以及“何时使用”行612(其也可以是寄存器),“是否使用”行610在每一列中具有指示出相应列的外围资源是否过去被关联于线程阵列606的线程所使用的存储器项,“何时使用”行612在每一列中具有指示出相应列的外围资源在过去何时被相关联的线程所使用的存储器项。(应该理解,RUL 502的每一行可以是寄存器,而每一列可以是该寄存器中的一比特。因此,线程的“是否使用”行的列中的项在这里可以被称为“已使用”比特。)应该理解,在本发明其它实施例中,存在与上述不同的布置。在一其它实施例中,与TRAC 202使用线程阵列606的“是否使用”行610以及“何时使用”行612(以及其它阵列,诸如阵列608等)不同,TRAC 202仅使用“何时使用”行612来确定外围资源是否已被使用以及它何时被使用。
生成和移除RUL的项的可替换方式在图6中示出的本发明实施例中,通过响应于周期计数器的“何时使用”逻辑604来生成线程阵列(诸如阵列606)的“何时使用”行612的项。在所例示的基于周期计数器的本发明实施例中,用于线程阵列606的“何时使用”行612的逻辑604包括PLB周期计数器逻辑614。(注意,在图2中,PLB 106具有相关联的PLB时钟120,并根据该时钟的周期进行工作。)用于关联于线程阵列606的线程的PLB周期计数器逻辑614对于“何时使用”行612的每一列周期性地输入PLB时钟120的周期的累计计数。(例如,这可以在PLB时钟120的每个周期后完成。)复位逻辑616监视PLB 106中的由相应处理器102和104(图2)对外围usb30等的I/O访问,并将其用信号通知PLB周期计数器逻辑614以便每当该线程访问关联于这一列的外围资源时复位该列的计数。因此,线程阵列606的列的行612中的计数越小,相关联的外围资源被使用的时间就越近。
同样地,在本发明实施例中,通过“是否使用”逻辑602来生成线程阵列606的“是否使用”行610的项。“是否使用”逻辑602包括“已使用”逻辑618,其响应于访问外围资源的与阵列606相关联的线程,从复位逻辑616接收信号以访问外围资源并将所有列中与图2的外围usb30等中的特定一个相关联的相应一列中的“是否使用”行610的比特设置为值“1”。“是否使用”逻辑602响应于该线程在超过预定时间间隔后仍未再次访问该外围资源,将该比特复位为值“0”。即,在所例示的本发明实施例中,“是否使用”逻辑602包括“未使用”逻辑620,其读取对于该外围资源的PLB时钟120的周期的累计计数,并响应于该累计计数超出预定阈值数则用信号通知“已使用”逻辑618将该比特复位为“0”。
在本发明的可替换实施例中,与PLB周期计数器逻辑614不同,“何时使用”逻辑604具有用于关联于线程阵列606的线程的线程访问计数器逻辑(未示出)。线程访问计数器逻辑首先响应于复位逻辑616用信号通知线程阵列606的阵列已访问“何时使用”行612的一列的外围资源,将该列设置为预定值。线程访问计数器逻辑还监视PLB 106以确定该线程是否被暂停。响应于该线程被暂停而没有访问外围资源,线程访问计数器逻辑减小“何时使用”行612中用于该外围资源的列。另外,响应于该列的值被减小为“0”,线程访问计数器逻辑用信号通知“已使用”逻辑618将该列的“是否使用”行610复位。因此,对于本发明的可替换实施例,在线程阵列606的一列的“何时使用”行612中的累计计数越高,相关联的外围资源被使用的时间就越近。
关于上述可替换方案,在外围资源对线程透明的情形中,图6中示出的基于周期计数器的本发明实施例是有利的。例如,到存储设备的直接存储器存取写入可能无法使能中断,这使线程要知道对设备的写入何时完成变得复杂。即,除非线程查询该设备本身,否则TRAC 202将不会检测到对设备的写入已完成的任何指示。
TRAC工作的示例再次参考图2和5,在示例性的实例中,系统200正在工作。具体而言,处理器102正在运行以下线程使用USB30、密码机和SATA的线程0;使用无线、MPEG解码器、LCD控制器和音频DAC的线程1;使用MPEG编码器、MPEG解码器、音频adc、音频dac、lcd控制器、照相机和无线控制器的线程2;使用SATA的线程3;以及使用USB30的线程4。
处理器104正在运行使用音频ADC的线程5。
在这里如上所述,操作系统知道哪些线程在处理器102和104中的哪个上运行,该信息经由总线接口506被传送到TRAC 202的控制单元510。总线监视逻辑508通过检测由处理器102或104对特定地址的I/O设备的I/O请求而确定线程正在使用哪个外围资源。响应于来自总线监视逻辑508的信息,线程分配逻辑504将以下列举的序列分配给外围资源,并将此分配映射写入寄存器。
USB30[1]SATA[2]音频DAC[3]音频ADC[4]LCD[5]MAL[6]无线[7]uART 密码机[9]照相机[10]MPEG编码器[11]MPEG解码器(DMA未在以上列表中,因为它可以被配置来处理来自多个处理器的多个请求,并因此不会遇到冲突。)对于此情形,总线监视逻辑508监视在PLB 106上的线程事务,参照地址到外围资源的映射,并作为响应而确定以上线程正在使用以上所指示的外围资源。因此,监视逻辑508写入对于相应线程的“是否使用”行,诸如阵列606的行610(图6)。这提供了在RUL 502中的哪些线程正在使用哪些外围资源的记录,如以下表1中示出的。
表1RUL中对于各个线程的“已使用”比特

经过一段时间后,处理器102超时,并中断操作系统进行上下文交换。操作系统确定它将交换处理器102和104,并查询TRAC 202以找到可以并行运行的线程组。因此,处理器102或104之一发送查询到TRAC 202的控制逻辑510,控制逻辑510将查询写入DCR寄存器并将该查询通知冲突逻辑512。作为响应,冲突逻辑512执行在RUL 502的项之间的比较或一系列比较,这确定了没有冲突的四组线程。冲突逻辑512将无冲突线程的组写入四个DCR可读的寄存器,如以下表2所列举的。(寄存器数量对应于TRAC可计算的不同组的数量。在所例示的实施例中,四组无冲突线程是冲突逻辑可确定的最大值。在本发明其它实施例中,此数量可以不同。需要更多逻辑来确定更多组,这限制了组的数量。)
表2

应该理解,在表2中列举的寄存器值以十六进制格式示出。因此,例如,0000_0023表示以下的32比特00000000000000000000000000100011,其在第一、第二和第五比特(表示第一、第二和第五线程)具有逻辑值“1”。寄存器宽度由TRAC 202可以追踪的线程的最大数量所确定,在所例示的实施例的示例中为32。表2示出了在上下文交换之时这些寄存器的状态。
在此示例中,操作系统挑选线程2和3分别在处理器102和104上运行。操作系统将此选择经由DCR总线108通知TRAC 202,并且线程分配逻辑504作为响应而更新线程到处理器的映射。
在经过再一段时间后,处理器102或104之一再次超时,并中断操作系统来执行另一次上下文交换。操作系统确定不管冲突的可能性,线程1都必须被安排。操作系统将此选择经由DCR总线204通知TRAC 202,并且控制逻辑510设置TRAC寄存器以指示仅包含线程1的子组。寄存器与TRAC 202可以管理的线程的最大数量等宽,在所例示的实施例中为32。因此,寄存器被设为“0x0000_0001”。冲突逻辑512执行在RUL 502的项之间的“饥饿线程”比较或一系列比较,这确定了可以与线程1一起运行而没有冲突的线程组。冲突逻辑512将无冲突线程的组写入四个DCR可读的寄存器,如以下表3所列举的。
表3

操作系统挑选线程4与线程1一起运行,将此选择经由DCR总线204通知TRAC 202,并且线程分配逻辑504作为响应而再一次更新线程到处理器的映射。
用于确定线程是否可与当前运行的线程一起运行的过程现在参考图7,所示出的流程图一般地例示了根据本发明实施例的TRAC操作。在702,当处理器102或104可用于开始交换新线程时,处理器102或104之一在704查询TRAC 202,以确定该处理器的候选线程之间的特定线程是否可以与已经在运行的其它线程一起运行。如果否,则处理器选择不同的候选线程,并重复704的查询,直到在706找到可以运行的线程为止。
当找到要运行的线程之后,处理器运行该线程。在708,TRAC 202进行监视以维持RUL 502对哪些线程使用哪些外围资源的当前关注。具体而言,这包括在710检测以找到要停止的线程。在线程继续时,这包括TRAC 202在712监听线程对外围资源的访问。如果检测到访问,则在714,TRAC 202检查已使用比特以查看所访问的外围资源之前是否已被访问过。如果否,则在716,TRAC 202设置RUL 502中用于该线程的外围资源比特,而TRAC 202的逻辑流继续到718。如果是,则在716该比特无需被设置。从而,TRAC 202的逻辑流跳过718,在718,TRAC将用于该线程的外围资源的“最后使用”比特复位,以指示该外围资源为最后使用的一个。接着TRAC 202的逻辑流返回框708以继续监视。
在710,当TRAC检测到线程停止时,TRAC 202的逻辑流沿分支到达702。并在704等待来自处理器对于新的候选线程的新查询。
用于确定线程是否可以与饥饿线程一起运行的TRAC逻辑现在参考图8,所示出的根据本发明实施例的TRAC 202的冲突逻辑512的一部分用于确定给定线程(诸如饥饿线程,即处理器已确定必须运行的线程)是否具有与另一线程(诸如可用于与饥饿线程一起运行的线程)的外围资源冲突。如图所示,饥饿线程的N个“已使用比特”的每个以及所述另一线程的相应的N个“已使用比特”的每个被分别输入到N个两输入与门,由冲突逻辑512中的与门802所表示。(记住,在这里如上所述,相应的“已使用比特”与给定外围资源相关联。如果两线程的比特都被设置为逻辑“1”,这指示出两线程均已使用过相同的外围资源,并因此两线程被认为存在冲突。)与门802输出的N个结果被输入到N输入或门804。如果这N个输入都不是“1”,则或门804的输出为“0”。接着,或门804的单个输出被输入到非门806,使得如果或门804的输出为“0”,则非门806的输出为“1”,这指示出没有冲突。
用于确定线程是否可以与当前运行的线程一起运行的TRAC逻辑现在参考图9,所示出的根据本发明实施例的TRAC 202的冲突逻辑512的一部分用于确定一组特定线程是否具有与另一组特定线程的冲突。例如,这具有用于确定一组候选线程是否可以与已经在运行的一组线程一起运行的应用。RUL 502中每个线程的相应的“已使用比特”被输入冲突逻辑512中的若干对相应与门。即,在所例示的实例中,存在三个线程,每个线程具有N个已使用比特。一个线程的已使用比特被输入与门902和908,另一个线程的已使用比特被输入与门904和910,而另一个线程的已使用比特被输入与门906和912。(以与图8所例示的相同方式,图9中所示的与门902-912以及918均表示N个两输入与门。同样,或门914和916均表示N个三输入或门。)控制逻辑512中的控制使能逻辑922通过将每个所选择的与门声明为逻辑“1”而选择与门902-912中的哪些被使能。
因此,例如,如果处理器102向RUL 502指示出第一线程是候选线程,并且RUL 502已经确定第二和第三线程已经在运行,则控制使能逻辑922使能用于第二和第三线程的与门904和906,以及使能用于第一线程的与门908。接着将候选线程的相应“已使用比特”与第二和第三线程的相应比特进行比较。即,对于被声明过的第二或第三线程的每个比特,或门914的输出被声明,这指示出线程之一已使用了相应的外围资源。或门914的输出被发送到与门918。同样,对于被声明过的第一线程的每个比特,或门916的输出被声明,并且或门916的输出被发送到与门918。
与门918比较或门914和916的N个输出,并且如果同一比特的输出均是逻辑“1”,则这指示出外围资源冲突。与门918的N个输出被馈送给N输入或门920。如果对于在线程之间进行比较的任意“已使用比特”指示出没有冲突,则不会对或门920的所有输入进行声明,从而不会对或门920的输出进行声明,并且对于所比较的线程指示出没有冲突。
其它变体和一般注解通过前述内容应该理解,由于本发明减少了线程进行交换时必须等待外围资源的机会,所以本发明是尤其有利的。即,本发明提供了之前的外围资源使用的适当收集的和存储的历史,其很可能指示出其后的外围资源使用。响应于所存储的历史,线程资源分配逻辑有利地与处理器合作来选择要运行的线程。尽管这并不保证线程将不会遇到冲突和停止,但它减少了这种可能性。此外,本发明可以补充管理线程使用的其它方法,诸如当线程遇到冲突并被停止时交换线程的方法。
在各种实施例中,系统200(图2)采用各种形式,包括个人计算机系统、大型机计算机系统、工作站、服务器等。即,应该理解,术语“计算机系统”旨在包括具有执行来自存储器媒体的指令的处理器的任何设备。系统200还可包括键盘、点击设备(例如鼠标)、非易失性存储器(例如ROM、硬盘、软盘、CD-ROM和DVD)以及显示设备。
系统200的存储器存储程序指令(也被称为“软件程序”),程序指令可由处理器102和104执行来实现根据本发明的方法的各种实施例。各种实施例以各种方式实现一个或多个软件程序,包括基于过程的技术、基于组件的技术、和/或面向对象的技术等等。特定示例包括XML、C、C++对象、Java和商用类库。本领域普通技术人员将理解,图200中的硬件取决于实现方式可以不同。例如,除了图2中描述的硬件之外可以再使用其它外围设备,或者用其它外围设备取代图2中描述的硬件。所描述的示例并非暗示对本发明的体系结构上的限制。
在此使用了术语“逻辑”、“核”、“存储器”等。应该理解,这些术语指代作为集成电路芯片的设计的一部分的电路。芯片设计用图形计算机编程语言来创建,并被存储于计算机存储媒体(诸如盘、磁带、物理硬盘驱动器、或诸如存储存取网络中的虚拟硬盘驱动器)中。如果设计者未构造芯片或用于构造芯片的光刻掩模,则设计者直接或者间接地通过物理装置(例如通过提供存储了所得到的设计的存储媒体的拷贝)或者用电子方法(例如通过因特网)来将所得到的设计传送到这些实体。接着所存储的设计被转换为用于构造光刻掩模的适当格式(例如GDSII),其典型地包括将在晶片上构成的所述芯片设计的多个拷贝。光刻掩模被用来限定将被刻蚀或另外处理的晶片(和/或其上的层)的区域。
所得到的集成电路芯片可被构造者用原料晶片的形式(即,具有多个未封装芯片的单个晶片)作为裸片分发,或者以封装形式被分发。在后一情形中,该芯片被安装在单芯片包装(诸如具有附着于主板的导线的塑料载体或者其它高级载体)中或多芯片包装(诸如具有单表面或双表面互连或嵌入互连的陶瓷载体)中。在任意情形中,该芯片接着与其它芯片、分散的电路单元、和/或其它信号处理设备相集成,成为(a)中间产品(诸如主板)或(b)最终产品的一部分。最终产品可以是包括集成电路芯片的任何产品,其范围从玩具和其它低端应用到具有显示器、键盘或其它输入设备和中央处理器的高级计算机产品。
已经出于例示目的呈现了对本实施例的描述,但其不是穷尽性的,也并非将本发明限制于所公开的形式。许多修改和变体对于本领域普通技术人员来说将很明显。例如,应该理解,尽管已在完全运行的数据处理系统的上下文中描述了本发明,并且尽管已根据基于硬件的逻辑描述了TRAC202,但是本领域普通技术人员将理解,TRAC 202的逻辑可以由对于处理器应用特定的集成电路来实现,其中本发明的过程能够用计算机可读媒体的指令的形式被分布。这种计算机可读媒体可具有多种形式。不管实际用来执行所述分布的信号承载媒体的特定类型如何,均可等同应用本发明。计算机可读媒体的示例包括可读类型的媒体(诸如软盘、硬盘驱动器、RAM和CD-ROM)和传输类型的媒体(诸如数字和模拟通信链路)。
另外,在此描述的本发明实施例中,线程分配是基于外围设备的线程使用的历史(其可以作为一类计算(即处理、资源)来查看)。不过,其处于本发明的精神和范围内,以包括其中线程分配基于不同类型的计算资源的线程使用的历史的实施例。
还要注意,在此处上述的本发明实施例中,基于指示出线程已使用了完全不同的线程组的线程历史来选择线程。不过,在可替换方案中,如果本发明的计算机系统具有多个饥饿线程,则操作系统可以指引两个(或甚至更多个)饥饿线程运行而不管潜在冲突。即,选择饥饿线程来并行地运行,即便它们各自的历史指示出潜在的冲突。在一所述可替换方案中,如上所示比较所有饥饿线程的历史,选择具有最少数量的潜在冲突的线程来运行。在另一可替换方案中,选择具有数量少于某个阈值数量的潜在冲突的线程来运行。
作为重申,所选择和描述的实施例是为了最好地解释本发明的原理、实践应用,并使本领域普通技术人员能够理解本发明。具有多种修改的多种其它实施例可适合于所预期的特定使用,但也可处于本发明的范围内。
除了清楚明确说明之外,权利要求并非旨在暗示动作的任何特定顺序。所包括的用于权利要求一部分的诸如a)、b)、c)等的标号并非独立地暗示任何特定顺序,而是仅使得对这些部分的引用更方便。
权利要求
1.一种装置,包括处理器,可操作用于并行地执行各个指令线程,其中系统可操作用于访问共享的处理资源;以及电路,可操作用于与所述处理器通信,其中所述电路包括用于各个指令线程的存储器;第一逻辑电路,可操作用于在用于各个指令线程的各个存储器中生成和存储处理资源的历史项,其中所述历史项指示出用于该项的处理资源是否已被存储器的指令线程中相应的一个所使用;以及第二逻辑电路,可操作用于i)比较所述指令线程中的第一指令线程和第二指令线程的历史项,以及ii)如果所述比较指示出由所述第一线程使用的处理资源的历史相对于由所述第二线程使用的处理资源的历史具有某种不同,则选择所述第二指令线程用以执行。
2.如权利要求1所述的装置,其中所述第一逻辑电路包括第一子逻辑电路,其可操作用于在存储器中生成和存储是否使用历史项,其中所述第一子逻辑电路设置所述是否使用项以指示出由所述指令线程中对应的一个对所述处理资源中对应的一个的使用,并且响应于所述相应的指令线程超过所累计的所述相应的处理资源的未使用的某个阈值,复位所述是否使用项。
3.如权利要求1所述的装置,其中所述第一逻辑电路包括第二子逻辑电路,其可操作用于在存储器中生成和存储何时使用历史项,所述何时使用历史项指示出所述各个处理资源何时被所述各个线程最后使用。
4.如权利要求3所述的装置,其中所述第二子逻辑电路包括周期计数器电路,所述周期计算器电路可操作用于响应于用于处理器的局部总线的周期,控制对所述何时使用项的更新。
5.如权利要求4所述的装置,其中所述第二子逻辑电路包括复位逻辑电路,所述复位逻辑电路可操作用于响应于线程访问外围资源,用信号通知所述周期计数器电路来复位所述何时使用项。
6.如权利要求5所述的装置,其中所述第一逻辑电路包括第一子逻辑电路,其可操作用于在存储器中生成和存储是否使用历史项,其中所述第一子逻辑电路设置所述是否使用项以指示出由所述指令线程中对应的一个对所述处理资源中对应的一个的使用,并且响应于所述相应的指令线程超过所累计的所述相应的处理资源的未使用的某个阈值,复位所述是否使用项。
7.如权利要求6所述的装置,其中由所述第一子逻辑电路对所述是否使用历史项的所述设置是响应于来自所述复位逻辑电路的复位信号的。
8.如权利要求3所述的装置,其中所述第二子逻辑电路具有线程访问计数器逻辑电路和复位电路,所述线程访问计数器逻辑电路可操作用于i)响应于所述复位电路用信号通知某个线程已访问外围资源,将所述何时使用项初始化为第一预定值,以及ii)响应于所述线程未访问所述外围资源,减少所述何时使用项。
9.如权利要求8所述的装置,其中所述第一逻辑电路包括第一子逻辑电路,其可操作用于在存储器中生成和存储是否使用历史项,其中所述第一子逻辑电路设置所述是否使用项以指示出由所述指令线程中对应的一个对所述处理资源中对应的一个的使用,并且响应于所述相应的指令线程超过所累计的所述相应的处理资源的未使用的某个阈值,复位所述是否使用项。
10.如权利要求9所述的装置,其中所述线程访问计数器电路可操作用于响应于所述何时使用项被减少到第二预定值,用信号通知所述第一子逻辑来复位所述是否使用项。
11.如权利要求1所述的装置,其中所述处理资源包括外围设备。
12.一种装置,包括处理器,可操作用于并行地执行各个指令线程,其中系统包括共享的处理资源;以及电路,可操作用于与所述处理器通信,其中所述线程资源分配核包括用于各个指令线程的存储器;第一逻辑,可操作用于在用于各个指令线程和处理资源的各个存储器中生成和存储历史项,其中所述历史项指示出用于该项的处理资源是否已被存储器的指令线程中相应的一个所使用;以及第二逻辑,可操作用于i)比较所述指令线程中的第一指令线程和第二指令线程的历史项,以及ii)如果所述比较指示出由所述第一线程使用的处理资源的历史相对于由所述第二线程使用的处理资源的历史具有某种不同,则选择所述第二指令线程用以执行,其中所述第一逻辑包括第一子逻辑,其可操作用于在存储器中生成和存储是否使用历史项,其中所述第一子逻辑设置所述是否使用项以指示出由所述指令线程中对应的一个对所述处理资源中对应的一个的使用,并且响应于所述相应的指令线程超过所累计的所述相应的处理资源的未使用的某个阈值,复位所述是否使用项,以及其中所述第一逻辑包括第二子逻辑,其可操作用于在存储器中生成和存储何时使用历史项,所述何时使用历史项指示出所述各个处理资源何时被所述各个线程最后使用。
13.一种多处理器系统中的方法,所述方法包括a)检测由所述系统执行的指令线程;b)在所述系统的第一存储器中存储线程项,其中所述线程项指示出所执行的指令线程;c)检测由所述各个指令线程对处理资源的使用;d)在所述系统的第二存储器中存储用于所执行的指令线程的历史项,其中所述历史项指示出各个处理资源是否已被各个指令线程所使用;e)比较所述指令线程中的第一指令线程和第二指令线程的历史项;以及f)如果e)中的所述比较指示出由所述第一线程使用的处理资源的历史相对于由所述第二线程使用的处理资源的历史具有某种不同,则选择所述第二指令线程用以执行。
14.如权利要求13所述的方法,其中f)中的所述某种不同包括由所述第一线程使用的处理资源的历史与由所述第二线程使用的处理资源的历史完全不同。
15.如权利要求13所述的方法,包括g)响应于所累计的处理资源的使用和未使用,改变历史项。
16.如权利要求15所述的方法,其中g)包括设置所述的处理资源的历史项以指示出使用;以及响应于所述历史项的相应指令线程超过所累计的所述处理资源的未使用的某个阈值,复位所述项。
17.如权利要求13所述的方法,其中e)中的所述第一线程正在运行,而所述系统的处理器已经选择所述第二线程作为与所述第一线程一起运行的候选。
18.如权利要求13所述的方法,其中e)中的所述系统处理器之一已选择所述第一线程运行,并且所述第二线程已经在运行。
19.如权利要求13所述的方法,其中所述处理资源包括所述系统的外围设备。
20.如权利要求13所述的方法,其中所述处理资源包括所述系统的外围设备,其中e)中的所述第一线程正在运行,而所述系统的处理器已经选择所述第二线程作为与所述第一线程一起运行的候选,其中f)中的所述某种不同包括由所述第一线程使用的处理资源的历史与由所述第二线程使用的处理资源的历史完全不同,并且其中所述方法包括g)响应于所累计的处理资源的使用和未使用,改变历史项,包括设置所述的处理资源的历史项以指示出使用;以及响应于所述历史项的相应指令线程超过所累计的所述处理资源的未使用的某个阈值,复位所述项。
全文摘要
在系统的存储器中存储指示出所执行的指令线程的线程项。由各个指令线程对处理资源的使用被检测,并且用于所述线程的历史项被存储在系统的存储器中。所述历史项指示出各个处理资源是否已被各个指令线程所使用。所述指令线程中的第一指令线程和第二指令线程的历史项被比较。如果所述比较指示出由所述第一线程使用的处理资源的历史相对于由所述第二线程使用的处理资源的历史具有某种不同,则所述第二指令线程被选择用以执行。
文档编号G06F9/46GK1955920SQ200610137468
公开日2007年5月2日 申请日期2006年10月27日 优先权日2005年10月28日
发明者A·J·库尔谢内, G·J·曼, J·M·诺曼, S·B·斯坦斯基, F·A·坎普夫 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1