CN101681262A - 在处理器中调度多个线程 - Google Patents
在处理器中调度多个线程 Download PDFInfo
- Publication number
- CN101681262A CN101681262A CN200880018304A CN200880018304A CN101681262A CN 101681262 A CN101681262 A CN 101681262A CN 200880018304 A CN200880018304 A CN 200880018304A CN 200880018304 A CN200880018304 A CN 200880018304A CN 101681262 A CN101681262 A CN 101681262A
- Authority
- CN
- China
- Prior art keywords
- instruction
- thread
- memory access
- processor
- port
- 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.)
- Granted
Links
- 239000000872 buffer Substances 0.000 claims abstract description 53
- 239000013598 vector Substances 0.000 claims description 44
- 230000000694 effects Effects 0.000 claims description 32
- 238000000034 method Methods 0.000 claims description 31
- 238000003860 storage Methods 0.000 claims description 14
- 230000000977 initiatory effect Effects 0.000 claims description 11
- 238000004891 communication Methods 0.000 description 10
- 230000006870 function Effects 0.000 description 9
- 238000012545 processing Methods 0.000 description 9
- 230000002093 peripheral effect Effects 0.000 description 7
- 230000008569 process Effects 0.000 description 7
- 230000004044 response Effects 0.000 description 5
- GOLXNESZZPUPJE-UHFFFAOYSA-N spiromesifen Chemical compound CC1=CC(C)=CC(C)=C1C(C(O1)=O)=C(OC(=O)CC(C)(C)C)C11CCCC1 GOLXNESZZPUPJE-UHFFFAOYSA-N 0.000 description 5
- SVYBEBLNQGDRHF-UHFFFAOYSA-N 4-amino-N-(5-ethyl-1,3,4-thiadiazol-2-yl)benzenesulfonamide Chemical compound S1C(CC)=NN=C1NS(=O)(=O)C1=CC=C(N)C=C1 SVYBEBLNQGDRHF-UHFFFAOYSA-N 0.000 description 3
- 230000003111 delayed effect Effects 0.000 description 3
- 230000001419 dependent effect Effects 0.000 description 3
- 238000013461 design Methods 0.000 description 3
- 238000010586 diagram Methods 0.000 description 3
- 238000005265 energy consumption Methods 0.000 description 3
- 230000035484 reaction time Effects 0.000 description 3
- 230000007704 transition Effects 0.000 description 3
- QXOQNNAWFUXKMH-UHFFFAOYSA-N 1-(Malonylamino)cyclopropanecarboxylic acid Chemical compound OC(=O)CC(=O)NC1(C(O)=O)CC1 QXOQNNAWFUXKMH-UHFFFAOYSA-N 0.000 description 2
- 230000008901 benefit Effects 0.000 description 2
- 238000001514 detection method Methods 0.000 description 2
- 238000006073 displacement reaction Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 230000001976 improved effect Effects 0.000 description 2
- 230000003334 potential effect Effects 0.000 description 2
- 238000011084 recovery Methods 0.000 description 2
- 230000000717 retained effect Effects 0.000 description 2
- 230000000630 rising effect Effects 0.000 description 2
- 241001269238 Data Species 0.000 description 1
- 101000740968 Homo sapiens Transcription factor IIIB 50 kDa subunit Proteins 0.000 description 1
- 102100039038 Transcription factor IIIB 50 kDa subunit Human genes 0.000 description 1
- 230000009471 action Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000015572 biosynthetic process Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000005094 computer simulation Methods 0.000 description 1
- 230000001351 cycling effect Effects 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 238000009826 distribution Methods 0.000 description 1
- 230000008676 import Effects 0.000 description 1
- 238000007726 management method Methods 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 238000004321 preservation Methods 0.000 description 1
- 238000012857 repacking Methods 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 230000000638 stimulation Effects 0.000 description 1
- 230000008093 supporting effect Effects 0.000 description 1
- 239000000725 suspension Substances 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
- 238000013519 translation Methods 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3851—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3802—Instruction prefetching
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3867—Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Multimedia (AREA)
- Advance Control (AREA)
Abstract
本发明提供了一种用于执行线程的处理器,每个线程都包括指令序列,所述指令定义了操作以及所述指令中的至少一些指令定义了存储器访问操作。该处理器包括:多个指令缓冲器,每个指令缓冲器都用于保持与该缓冲器相关联的线程的至少一个指令;指令发出级,用于发出来自指令缓冲器的指令;以及存储器访问级,连接到存储器并被布置为接收指令发出级所发出的指令。存储器访问级包括:检测逻辑,用于检测发出的每个指令中是否定义有存储器访问操作;以及取指令逻辑,用于在检测到没有存储器访问操作时发起取指令,以取线程的指令。
Description
技术领域
本发明涉及在一个处理器中调度多个线程。
背景技术
多线程处理器是公知的。每个线程均包括指令序列,指令序列一般致力于执行特定自容式操作或该线程的特定的功能。线程可以根据该处理器的体系机构而被顺序或并行执行,并且可以根据它们旨在实现的操作和功能而被调度或解调度(deschedule)。在多线程处理器中存在一些问题,尤其是它难以保证任意特定线程的性能。
在多线程处理中,或者需要为每个线程保留处理器周期(即使线程可能无事可做),或者需要提供额外资源(诸如更多存储器访问端口)以更好地利用所保留的周期。例如,在传统的取指令方案中,存在一个取指令队列和另一个访问存储器的数据队列。如果取指令优先,则执行它们的流水线会不得不停止。如果数据访问优先,则单个线程会在等待其下一指令时被延迟若干个周期。在任一情况下,一个线程的性能都受到其他线程不可预期的影响。该问题可以通过利用双端口存储器(然而双端口存储器昂贵且能耗大)或者通过具有单独的程序和数据存储器(具有相应的开销)来克服。
在过去,多线程处理被用于存储器访问中的隐藏延迟,并因此没有实际需求来改善单个线程的实际时间性能,这是因为在那种特定情况下并不关键。
面对处理器设计者的挑战之一是处理不断增长的希望与该处理器进行通信的外部设备。一般而言这是通过提供处理器的某种中断处理能力来完成,该能力用于处理连接到外部设备的端口处所引起的活动。越来越多地,在这些端口处使用更加复杂的接口逻辑来应付(例如)每个端口的多个外部设备。
在品种繁多的不同的设备场境中需要接口。本文中通过背景实例的方式所讨论的一个设备场境是在移动应用处理中。
图1示出了移动应用处理器2的示例性应用。应用处理器2包括CPU 4和多个接口控制器6,多个接口控制器与多个外围设备8相连接。这些接口控制器包括:用于与硬盘驱动器(HDD)8a和SDRAM存储器8b相连接的存储控制器6a;用于与摄像机8c相连接的视频控制器6b;用于与LCD显示器8d相连接的显示器控制器6c;用于与麦克风8e、扬声器8f及头戴式耳机8g相连接的音频控制器6d;以及用于与键盘8h、通用串行总线(USB)设备8i、安全数字(SD)卡8j、多媒体卡(MMC)8k及通用同步接收机/发出机(UART)设备8l相连接的连接控制器6e。接口控制器6典型地经由总线3连接到CPU 4。该系统还包括功率控制器10和无线电处理器12。
要注意,接口控制器6被略微示意性地示出,但是一般地表示了某种专用I/O逻辑或特殊配置的端口。
传统地,或者利用中断或者通过轮询来实现外部接口。当使用中断时,外部的外围设备发送信号以通知该处理器,或者其具有准备好要输入到该处理器的数据,或者其需要来自该处理器的数据。当使用轮询时,该处理器连续地检查该设备的状态已确定其是否准备好提供或接受数据。
实现诸如图1的处理器的应用处理器2的一种可能是,使用专用集成电路微控制器(ASIC)。ASIC是可能包括专用于特定应用并被优化为适合该应用的微处理器的硬线设备。对于给定的功能,它们一般比其他选择更廉价并且功耗更小。然而,它们设计复杂,必须要预先设计并且不易重新改装。
另一种可能是,使用现场可编程门阵列(FPGA)设备。FPGA是在制造后可“现场”配置的半导体设备。为了配置FPGA,首先计算机被用于对期望的逻辑功能建模,例如,通过绘制示意图或创建描述这些功能的文本文件。FPGA包括经由静态配置的互连进行通信的查找表阵列。该计算机模型利用FPGA供应商提供的软件被编译,其创建可被载入到FPGA查找表中的二进制文件。这允许设备的制造商定制满足他们自己个人需要的FPGA。
在该实例中,接口控制器6被实现为FPGA。这具有以下优点,移动电话的制造商可以购买通用FPGA设备2然后对其进行就地(即,“现场”)配置以专用于他们期望的应用。然而,FPGA的缺点在于,它们比ASIC更贵、更慢且能耗更大。
在可替换的实例中,整个芯片2可以实现在FPGA中,或者芯片2可以是具有连接在芯片2和各个外围设备8之间的单独FPGA芯片的通用目的处理器。然而,这些选择甚至会更加昂贵且能耗更大——这对于大多数移动电话和其他消费者设备来说都过高。
上述困难中的一些困难可以通过利用多线程处理器来克服,其中每个线程都与特定活动相关联,尤其与输入-输出操作相关联。例如,这种多线程处理器在我们早期的2007年3月14日提交的第11/717,623号美国申请(我方卷号314563US/VRD)中有所描述,并且以下会更详细地描述。利用这种多线程处理器,能够保证单个线程的性能是重要的。例如,如果全部线程同时要求数据存储器访问或取指令,或者若干个输入-输出操作同时出现,则可能出现潜在问题。在这种情况下,一个线程会被延迟,等待所有其他线程完成其访问,或者激活线程的输入-输出请求会被延迟,直到激活所有其他线程的请求已被处理。
避免该问题的一个方式是,构建具有足够资源的计算机体系结构以确保每个线程能够始终进行,但是这会过分昂贵并将是高度冗余的设计。
发明内容
根据本发明的一个方面,提供了一种用于执行线程的处理器,每个线程都包括指令序列,所述指令定义操作以及所述指令中的至少一些指令定义存储器访问操作,处理器包括:多个指令缓冲器,每个指令缓冲器都用于保持一个线程的至少一个指令与该缓冲器相关联;指令发出级,用于发出来自指令缓冲器的指令;存储器访问级,连接到存储器并被布置为接收由指令发出级所发出的指令;所述存储器访问级包括:检测逻辑,用于检测在所发出的每个指令中是否定义有存储器访问操作;以及取指令逻辑,用于在检测到没有存储器访问操作时发起取指令,以获取线程的指令。
处理器可以包括线程调度器,线程调度器被布置为基于与线程相关联的特定活动的指示来调度执行的多个线程。
线程调度器可以被布置为一旦挂起线程就将继续点向量传送到与端口相关联的向量寄存器;以及继续点向量可以根据该端口处的活动而被返回。继续点向量标识了序列中一旦发生相应活动时线程执行应当继续的序列中的点。这可以有利地使该线程的附加响应性能够被传送到端口,并可以释放不需被未决(pending)指令持续填满的指令缓冲器。
此外,继续点向量的使用可以使每个线程能够处理多个活动(或事件)。
指令单元可以被布置为在由于线程等待来自资源的向量,接下来指令应当被发出的线程的指令缓冲器为空的事件中发出取向量请求,其中,取向量请求获取来自所述资源的向量并利用所述向量在存储器访问级处发起存储器访问操作,以提供地址。
该处理器可以包括多个线程寄存器集合,每个线程寄存器集合都被分配以存储关于所述多个线程中的相应一个线程的信息。该存储器可以包括所述集合中的至少两个集合之间的至少一个通道,以及线程调度器可以用于基于所述通道上发生的活动来调度线程。
该处理器可以在芯片上实现。
执行单元可以用于识别并执行用于挂起和运行线程的专用指令。
线程调度器可以进一步用于基于中断来调度线程。
线程调度器可以用于当根据活动的线程内的指令执行时或之前发生相关联的活动时,则调度该线程而不挂起。
根据本发明的另一方面,提供了一种移动终端,该移动终端具有移动应用处理器、至少一个外围设备、以及连接在移动应用处理器和外围设备之间的接口处理器,接口处理器是上述定义的处理器。
根据本发明的另一方面,提供了一种互连处理器阵列,所述处理器中的至少一个处理器如上述所定义。
本发明的另一方面提供了一种执行线程的方法,每个线程都包括指令序列,所述指令定义了操作以及所述指令中的至少一些指令定义了存储器访问操作,该方法包括:将线程的至少一个指令保持在该线程的指令缓冲器中;将来自指令缓冲器的指令发出到执行流水线的指令发出级;在连接到存储器的存储器访问级处接收由指令发出级所发出的指令;检测指令中是否定义有存储器访问操作,以及当未检测到时,发起取指令操作以获取线程的指令。
应当理解,取指令操作的发起不一定完成取指令操作。例如,如果所有线程的所有指令缓冲器都已满,则作为取指令操作的发起的结果就没有获取到指令。
指令中所定义的存储器访问操作可以是任意类型的。例如,加载指令定义了从存储器检索数据的存储器访问操作。存储指令定义了将数据加载到存储器中的存储器访问操作。第一类型的分支指令定义了这样的存储器访问操作,该存储器访问操作使指令从存储器中在分支指令中所提供的目标地址处被获取到。
第二类型的分支操作定义了这样的存储器访问操作,该存储器访问操作基于分支指令中的地址而从存储器中检索目标。应当理解,对于该类型的分支指令,位于目标处的指令本身将在随后的取指令操作中被获取到。
为了更好地理解本发明并示出本发明如何可以实现效果,现在将通过实例的方式对相应附图进行参考。
附图说明
图1示出了现有技术中已知的FPGA设备的示例性应用;
图2示出了接口处理器的一个示例性应用;
图2A示出了接口处理器的另一示例性应用;
图3是接口处理器的体系结构的示意性表示;
图3A示出了处理线程指令发出和执行的执行单元16内的部件;
图3B示出了指令序列;
图3C示出了指令发出的一个实例;
图3D示出了指令发出的另一实例;
图4是端口的示意性表示;
图5是线程寄存器集合的示意性表示;
图6是示出线程调度程序的操作的流程图;
图7是线程寄存器集合之间的通道的示意性表示;以及
图7A是通道末端的示意性表示。
具体实施方式
图2示出了移动电话中的接口处理器的示例性应用。移动应用处理器2需要与多个外围设备8进行通信。如图1所示,应用处理器2包括总线3、CPU 4及用于与硬盘驱动器(HDD)8a和SDRAM存储器8b相连接的存储控制器6a、以及功率控制器10和无线电处理器12。
然而,代替专用控制器6,图2的布置允许CPU 4经由通用端口7与外部通信。在该实例中,提供通用端口7a和7b用来与摄像机8c和LCD显示器8d相连接;提供通用端口7c用来与麦克风8e、扬声器8f及头戴式耳机8g相连接;以及提供通用端口7d用来与键盘8h、通用串行总线(USB)设备8i、安全数码(SD)卡8j、多媒体卡(MMC)8k及通用异步收/发机(UART)设备8l相连接。
在图2中,接口处理器14a、14b及14c被放置在相关端口7的输出端处,其中,第一接口处理器14a连接在图像设备8c-8d和通用端口7a-7b之间,第二接口处理器14b连接在音频设备8e-8g之间,以及第三接口处理器14b连接在通用端口7d和各种连接设备8h-8m之间。端口7只需要是通用目的端口,因为特定应用显示器、音频和连接功能是按照稍后描述的方式通过接口处理器14a-14c来实现的。端口7不需要利用FPGA逻辑,这是因为接口处理器14提供灵活性和可配置性(要不然就通过FPGA提供灵活性和可配置性)。接口处理器14a具有连接到端口7a和7b的端口22a和22b、以及连接到外部设备8c和8g的端口22c、22d、22e及22f。接口处理器14b和14c具有类似端口(图2中未示出)。
典型地在实现用于经由接口传送数据的特定协议、对数据进行重新格式化(包括在并行和串行格式之间转换数据)、以及诸如对数据进行编码、对数据进行压缩或对数据进行加密的可能更高级别的功能的过程中包含有接口处理器。
接口处理器的另一个应用是,图2a中所示的微处理器芯片202中的并列显示(tile)。这种芯片202利用支持芯片202上的多个处理器14之间的通信的高性能互连204、以及芯片间链接206,从而能够容易地从多个芯片构造系统。每个处理器14都经由端口22连接到其芯片间链接206和高性能互连204。
以下更全面地讨论的接口处理器的重要特征是其管理端口22处的活动的能力。每个接口处理器都包括CPU、存储器及通信。为了允许CPU和端口之间的直接和响应的连接,每个处理器都具有用于执行多个并发程序线程的硬件支持,每个线程都包括指令序列,并且至少一些指令专门负责处理端口处的活动。这在以下将更详细地讨论,硬件支持包括:
-每个线程的寄存器集合,
-动态选择执行哪个线程的线程调度器,
-用于输入和输出的端口集(端口22),
在每个处理器上可以使用小的线程集可以用于允许通信或输入/输出与处理器处理的其他未决任务一起进行,以及通过允许一些线程继续而同时其他线程是到远程接口处理器去或从远程接口处理器来的挂起的未决通信来允许互连中的延迟隐藏。
根据本发明的实施例,线程指令以这样的方式发出,以允许任意数量的线程共享公用存储器系统和输入-输出系统,同时保证利用n个能够执行的线程,每个线程将得到至少1/n处理器周期。能够执行的线程包括具有分配的/使用中的寄存器等的线程,包括运行、暂停和临时解调度的线程。实际上,将一个线程周期看作n个处理器周期是有用的。
从软件设计的观点,这意味着线程的最小性能可以通过对程序中的特定点处的并发线程数目计数来计算。实际上,性能将几乎总是高于这个,这是因为单个线程有时会延迟,等待输入或输出以及它们的被其他线程所用的未使用的处理器周期。此外,重启等待线程所用的时间总是最多一个线程周期。N个线程的集合因此可以被看作虚拟处理器集合,每个虚拟处理器都具有处理器本身的时钟率的至少1/n的时钟率。这个的唯一例外是,如果线程数目少于流水线级p的数目,则虚拟线程的时钟率至多是1/p。
图3示意性地示出了根据本发明的一个实施例的接口处理器14的示例性体系结构。处理器14包括用于在线程调度器18的控制下执行指令的线程的执行单元16。处理器14还包括用于保存程序代码和其他数据的随机存取存储器(RAM)24、以及用于存储诸如启动代码(boot code)的永久信息的只读存储器(ROM)(未示出)。
线程调度器18动态地选择执行单元16应当执行哪个线程。传统地,线程调度器的功能简单说就是调度来自程序存储器的线程以保持处理器被充分占用。然而,根据本发明,线程调度器18的调度还涉及端口22处的活动性。要注意,在该方面,线程调度器可以直接耦合到端口22,以当由于端口处的输入或输出活动性而使线程变得能运行时将延迟最小化。
线程调度器18所考虑的m个线程中的每个线程都通过寄存器堆20中的线程寄存器201...20m的各个集合来表示,线程调度器18有权访问寄存器。还提供指令缓冲器(INSTR)19,用于在被随后发送到执行单元16中之前临时保存从存储器24获取的指令。执行单元有权访问每个寄存器20和缓冲器19。在线程调度器18的控制下从程序存储器24中取指令并将其临时放置在指令缓冲器19中。这些寄存器和缓冲器的细节稍后讨论。
关于m个线程,线程调度器18对n个可运行线程的集合进行维护,该集合被称作“运行(run)”,从该集合发出指令依次用于执行,优选地以轮询调度的方式。可运行线程选自可分配的线程组。当线程无法被继续时,通过从运行集合去除该线程来将其挂起,但是该线程保留在可分配的集合中。这么做的原因可以是(例如),因为该线程正在等待以下活动性类型中的一个或多个:
-其寄存器在能够运行之前被初始化,
-其尝试了来自未准备好的或没有数据可用的端口的输入,
-其尝试了向未准备好的或没有数据的空间的端口的输出,
-其执行了指令,该指令使其等待在端口变得准备好进行输入时可生成的一个或多个事件。
在以下的描述中,指令是以轮询调度的方式从可运行线程中取的,但是在一些实施例中可能以轮询调度的方式从所有可分配的线程中取指令。
要注意,本文所使用的术语“事件”指的是特定类型的操作,其略微不同于基本的输入-输出操作。以下根据图4和图5讨论该区别。
有利地,为了利于快速地反应时间,在线程调度器18和执行单元16之间提供直接的硬线连接28,以允许线程调度器18控制执行单元16应获取并执行哪个线程或哪些线程。现在对图3A至图3D进行参照,以更详细地描述发出线程指令的方式。图3A示出了处理线程指令发出和执行的执行单元16内的部件。要注意,该图仅仅是示意性的,并不旨在通过功能块的方式示出该系统的操作。执行单元16包括流水线,流水线包括发出缓冲器19中所保持的指令的指令发出级160。该流水线还包括读寄存器161、存储器访问级162、处理级164和写回级166。读寄存器级和写回级连接到寄存器20,但这在图3A至3D中未示出。
如图3A所示,存在用于每个线程的单独的缓冲器19a至19d。在所描述的实施例中,每个缓冲器19a...19d都是64位长的,并且能够保持四个短指令或两个长指令。在图3A中,示出了保持四个短指令的各个缓冲器。这些是根据协议Ti1NDTj来标记的,其中i表示线程的数目,以及j表示该线程内的指令的数目。即,T11NST1表示线程1的第一个指令。指令以轮询调度的方式从可运行线程的缓冲器19a...19d发出,忽略未使用或暂停的线程。这在图3A中示意性地示出,其中线程T1、T2和T4处于运行状态,但T3处于暂停状态。稍后更详细地描述线程状态。指令发出级160负责将指令发出到流水线的读寄存器级161。读寄存器连接到存储器访问级162以及连接到处理级164。指令是多种不同类型的。第一类型是数据访问指令,其是诸如企图将数据传送到存储器4以及传送来自该存储器的数据的载入/存储的指令。第二类型是分支指令。这有两种风格。第一风格定义了用于获取来自分支指令中所定义的目标地址处的存储器的指令的存储器访问操作。第二风格标识分支目标地址所位于的存储器中的位置,并利用该目标地址载入程序计数器(PC)。第三类型是基于操作码来指示执行单元中的处理级164的操作的计算指令。在传统的处理器中,会被正常转发给执行流水线的存储器访问级的唯一类型指令是数据访问指令。
根据本文所描述的本发明实现方式,指令的所有类型都对存储器访问级有影响,而不管指令自身中所定义的操作如何(例如,通过操作码)。通常,第一类型的指令访问数据。第二和第三类型的指令都从存储器24取指令。第一风格的分支指令在存储器访问级期间取其分支目标指令。第二风格使用存储器访问级来访问目标地址。在该情况下,分支目标指令自身将是通过取空操作指令(no-op)(稍后讨论)或在不需要利用其存储器访问级的另一线程的存储访问级期间获取的。
除了实现其在处理级164中定义的操作之外,任意其他指令还利用存储器访问级来执行取指令。即,其向返回用于载入缓冲器19a...19d的指令的存储器24分派地址。所取的指令载入线程自己的指令缓冲器,除非这是满的(在这种情况下,其用于载入另一线程的缓冲器)。如稍后描述的,每个线程保持程序计数器值(图3A中示出的PC1、PC2等),指示线程处于指令序列中的什么点。
为了该目的,存储器访问级包括检测逻辑200,检测逻辑被布置为检测指令的操作代码,以确定在操作代码中是否定义了存储器访问操作。此外,存储器访问级包括取指令逻辑202,取指令逻辑用于当检测逻辑200未检测到存储器访问操作时发起取指令,以获取线程的指令。
利用指令PC被发送到存储器访问级并被用于确定存储器访问所使用的地址。在线程自己的缓冲器满的情况下,指令单元检测该条件,并在该情况下将另一线程的PC传递到存储器访问级以确定存储器访问所使用的地址。当一个线程代表另一线程执行取指令时,该线程选自可运行线程。所选线程将是轮询调度序列中的接下来的相邻第二个(the next but one)线程,以发出哪个线程具有空缓冲器。如果它们都没有空缓冲器,则其将是接下来的相邻第二个发出哪个线程具有未满的缓冲器。
应当理解,选择哪个线程的详细细节取决于特定实现方式。例如,可以从等待获取的线程的另一轮询调度组中提取下一线程。还可以对暂停的线程取指令,其中,跟随暂停的下一指令或指令序列是已知的,尽管优选地不对等待多个事件(见下面)的挂起线程进行取指令,这是因为线程可能根据哪个事件首先发生而分支到不同指令。
如果当指令应当从指令缓冲器发出时(如指令发出级160所检测的)指令缓冲器是空的,则特殊的“取空操作指令(fetch no-op)”请求被发出。这利用存储器访问级来加载发出线程的指令缓冲器。
图3B更详细地示出了序列。图3B中向下的箭头表示指令从指令发出单元160发出到存储器访问级的方向。“轮询调度”使T11NST1被首先发出,然后是T21NST1,然后是T41NST1等。要注意,没有什么是从T3发出的,这是因为该线程不能运行。
为了举例说明的目的,假设T11NST1和T21NST2是数据访问指令,它们中的每一个都在存储器访问级检索数据。T21NST1是“第一风格”的分支指令,并且,其不检索数据而是检索位于分支目标处的指令。在图3C中,步骤S1示出了指令发出单元进行的T41NST1的获取。步骤S2示出了访问分支目标指令并将其载入到T4的缓冲器中(至其空时间段中)的存储器访问级。每个缓冲器都具有移动的缓冲器指针BP使得该缓冲器用作先入先出缓冲器。
根据轮询调度在T41NST1之后要发出的下一指令是T11NST2(在步骤53中获取的),其表示为ALU指令,其是不正常使用存储器访问级的指令。然而,在本发明的该实施例中,除了指示处理级执行ALU操作之外,如图3C中步骤S4中所表示的,其还使存储器访问级发起线程T1的下一指令的获取。该指令(标记为T11NST5)被载入到与线程T1相关联的缓冲器19a中的空时间段中。
以该方式继续发出和处理指令。可以达到图3D中所示的情况,其中,与接下来发出的线程(在该情况下是T2)相关联的缓冲器是空的,但是指令发出单元等待发出指令。在该情况下,“取空操作指令”请求被发出到存储器访问级,存储器访问级获取否则已经发出的线程的下一指令。在该实例中,假设该线程是T1,并且该线程现在处于其第n个指令。由PC为最后发出的该线程的指令确定地址。为了更加具体,如果缓冲器是空的,则PC是取地址。如果缓冲器部分满,则取地址是通过将缓冲器中的指令数目添加到PC来计算的。可以在处理器中保持取地址和PC。
需要“取空操作指令”的情况非常少,并且通过编译器或汇编程序中的简单指令调度常常能够避免这些情况。
如稍后更深度讨论的,特定指令使线程变得不能运行,这是因为(例如)输入端口没有可利用的数据。当数据变得可利用时,该线程将从其暂停的点继续。指令必须被快速发出,以支持输入和输出的高速率。为了实现这点,在端口22处提供就绪位(ready bit)或标志(flag)37(如稍后参照图4所更详细讨论的)。一旦检测到就绪标志(ready flag)37时,该线程被重启,正常通过将其重新输入到轮询调度序列中并重新发出输入指令。由于重新发出指令以通过执行流水线的时间,这可以导致长于虚拟循环时间的响应时间。
理论上,虚拟处理器应当能够以每一个虚拟周期率执行输入和输出操作。在实施例中,这能够通过在每个端口处提供“快速模式”来实现。当输入或输出指令检测处于快速模式中的端口未准备好时,其替换该线程的下一指令并使下一指令被重新发出,直到该端口变为准备好并且输入指令能够完成为止。
以下参照图4和6来讨论涉及这些端口的线程60调度器的操作。还在线程调度器18和每个端口22之间提供直接硬线路径30a、30b、30c;以及在线程调度器18和每个寄存器20之间提供直接硬线路径291...29m。这些直接路径优选地提供控制路径,控制路径使线程调度器能够将对应线程与一个或多个端口22相关联,并且具体地当特定活动发生时从这些端口返回准备好的指示,使处理器能够对在端口22处发生的活动或刺激迅速作出响应。
执行单元16还有权经由直接连接27和31访问每个端口22a-22c和每个寄存器201-20m,从而提供核心处理器、寄存器、及外部环境之间的直接链接。优选地,这些直接路径提供进一步的控制路径,允许执行单元将状态传递给这些端口。这在以下参照图4来进一步详细讨论。直接路径27和31还可以允许数据在线程寄存器20和端口22之间直接输入和输出,从而允许线程与外部环境直接通信。例如,数据可以从外部设备直接写到线程的操作数寄存器中的一个,而非写到存储器24然后被随后获取。相反地,跟随该操作,来自操作数寄存器的数据可以由执行单元16拾起并直接从端口22发出去。这显著提高了反应时间。
要注意,“直接连接”或“直接路径”意思是同执行单元和程序存储器24之间的连接分离的连接。因此,例如,线程调度器18和执行单元16有权访问来自端口22的数据输入,无需该数据被存储而随后从存储器24获取。具体地,如果执行单元16和存储器24之间的连接经由总线3,则“直接”连接或路径意思是同该总线分离的连接或路径。因此,端口22、寄存器20、线程调度器18及执行单元16之间的各种通信全部能够发生,而无需总线判优(arbitration),改善了反应时间。端口22还可以设置有具有总线13的额外连接(未示出)。
本申请中所使用的术语“端口”可以指“管脚端口”或“数据端口”。管脚端口负责检测单个的逻辑转变,即,处理器芯片的物理边界的管脚处出现的信号的上升沿和下降沿。数据端口是“高级别的”,原因在于,它们能够处理一位或多位,典型地累积在I/O缓冲器中,并且典型地组成诸如字的数据的一部分。替代检测上升沿和下降沿,数据端口处理特定时刻的一位或多位的状态或逻辑等级。数据端口可以是开/关芯片,或者其可以是通向嵌入在同一芯片上的另一处理器的端口。要注意,“管脚端口”和“数据端口”实际上可以指代同一实际端口的不同模式。
图4示意性地示出了根据本发明优选实施例的端口22。端口22包括I/O缓冲器32,用于传递输入到处理器14的数据和从该处理器输出的数据。此外,每个端口22都包括活动处理逻辑36,用于监控端口处发生的活动并通过就绪位或标志37来发出发生特定活动的信号。就绪标志37优选地经由直接路径30发送至线程调度程序。存在多于一个的就绪标志。端口可以检测的潜在的活动包括:
-数据已被输入到该端口,
-一些特定数据已被输入到该端口,和/或
-该端口已变得可用于输出。
为了便于检测这种活动,端口22设置有寄存器38的集合。这些寄存器包括:用于存储相关线程的标识的线程标识符(TID)寄存器,用于存储一个或多个状态的控制(CTRL)寄存器,用于存储执行被挂起的程序中的位置的继续点向量(VECTOR)寄存器,以及用于存储与该状态相关联的任意数据的数据(DATA)寄存器。值TID被线程调度器18经由直接路径30(其可以是图3中的30a、30b、30c)写到寄存器38,以及值VECTOR、CTRL及DATA被执行单元16经由直接路径31进行写入。一旦检测到期望的活动,则TID被返回给线程调度器18,以标识相关联的线程。活动逻辑还包括使能标志39,这在以下进一步详细讨论。
要注意,尽管在图4中寄存器38被示为包含在端口22之内,但是寄存器实际上可以位于处理器14中的其他地方并简单地与端口22相关联。
图5示出了用于表示线程的示例性的线程寄存器20的示例性的组(bank)。组20包括对应于当前在线程调度器16的考虑之下的相应线程T1至Tm的多个寄存器集合。在该优选实例中,每个线程的状态通过八个寄存器表示:两个控制寄存器,四个访问和十二个操作数寄存器。这些寄存器如下。
控制寄存器:
-PC是程序计数器
-SR是状态寄存器
访问寄存器:
-GP是全局池(global pool)指针
-DP是数据指针
-SP是堆栈指针
-LR是链接指针
操作数寄存器:OP1...OP12
控制寄存器存储关于线程状态且在控制线程的执行时使用的信息。具体地,通过线程状态寄存器SR中保持的信息来控制线程接受事件或中断的能力。线程调度器18至少有权访问每个线程的状态寄存器SR。访问寄存器包括用于程序(procedure)的局部变量的堆栈指针、正常用于程序之间共享的数据的数据指针、以及用于访问较大常量和程序进入点的常量池(constant pool)指针。操作数寄存器OP1...OP12被执行算术和逻辑运算、访问数据结构及调用子程序的指令所使用。
如上所述,本文所使用的术语“事件”指的是特定类型的操作、或对应于该特定类型操作的活动。基于事件的操作略微不同于基本的输入-输出操作,并按照以下方式来工作。通过优选地经由直接路径31和30传送来自执行单元16的连续点向量以及来自线程调度器18的线程标识符至与端口22相关联的VECTOR和TID寄存器38来首先为线程设置事件。相关联的条件和条件数据还可以被写到端口22的CTRL和DATA寄存器38。因此该事件被设置在端口处,但不一定被使能。为了使该端口能够生成事件指示,端口的使能标志39还必须优选地通过线程调度器18经由直接路径30被声明(asserted),。此外,为了使线程自身能够接受事件,对于该线程的相应状态寄存器SR中的该线程的事件使能(EE)标志必须被设置为事件使能。因此,一旦事件被设置并被使能,该线程就能够被挂起,利用对线程调度器18起作用的基于事件的等待指令来等待事件。在这点上,当前的未决指令可以从相关指令缓冲器19中丢弃。当事件发生时,例如,一些数据被输入到端口,则通过从端口22返回线程标识符和继续点向量而将该发生发送到线程调度器18和执行单元16,使得继续点向量处的指令从程序存储器24中获取到指令缓冲器19中并在代码中的适当点处恢复执行。
当该事件发生时,各个状态寄存器SR中的线程的EE标志被设置为事件禁止(event-disabled)以防止线程在该发生之后立即对事件作出反应。当事件发生时,使能标志39可以由执行指令的线程的结果被解除声明。
使能标志39可以被声明,同时建立多个端口,为等待来自一个或多个端口的事件作准备。在使能端口使能标志集合之前,线程的EE标志还可以被设置为事件使能,并且在这种情况下,就绪的要被使能的第一端口将生成事件,该事件使当前指令被丢弃并通过立即获取并执行继续点向量处的指令使执行继续进行。
端口的使能标志39和状态寄存器EE标志的优点是,事件的使能和禁止通过等待指令而与事件的建立和线程的挂起分离,允许不同的输入和输出条件易于针对特定线程和/或针对各种不同线程而被触发(toggle)开和关。例如,事件可以在端口22处保持为建立,尽管该事件被禁止。因此,事件可以被线程重新使用,这是因为尽管该事件已经发生了一次,但是线程标识符、继续点向量和条件仍被存储在端口22处的TID、VECTOR、CTRL及DATA寄存器38中。因此如果该线程需要重新使用该事件,则该端口的寄存器38无需被重新写,而是该端口的使能标志39能够简单地被重新声明和/或线程的状态寄存器SR中的EE标志能够被重新设置为事件使能。然后,进一步的等待指令将挂起未决同一事件的发生的该线程。
此外,利用继续点向量允许每个线程使能多个事件。即,给定线程能够通过将继续点向量传送到一个端口22a而在该端口处建立一个事件,通过将不同的继续点向量传送到另一端口22b而在该另一端口处建立另一事件,等等。该线程还能够通过针对各个端口单独声明或解除声明(de-assert)不同的使能标志39来单个使能和禁止各种事件。然后,等待指令将使该线程被挂起,等待任意使能的事件。
尽管事件和中断略微不同于基本的输入和输出,但是同一就绪标志系统可以被使用,其结果可以使线程利用空指令缓冲器能运行。为了处理该情况,“取向量”请求被发送以利用线程标识符来访问生成事件(或中断)的端口。然后,该端口能够及时为它提供适当向量,以在“取向量”请求暂停的存储器访问级期间用于取指令。存在两个或多个能够提供向量的端口,在这种情况下,简单的优先方案可被用于选择其一。这意味着,至多一个虚拟周期被用于处理向量,因此,在跟随事件(或中断)发出指令之前,将存在至多两个虚拟周期。这里清楚的是,针对中断,向量也可以以这种方式提供。
与事件相对比,利用基本的I/O操作,线程调度器18不将继续点向量传送到VECTOR寄存器,并且不利用端口的使能标志39或状态寄存器SR中的EE标志。相反,未决指令简单地保留在指令缓冲器19中,并且如果必要执行被简单地暂停,使输入或用于输出的端口的可利用性未决,如由就绪标志37所表示。在实施例中,根据基本的I/O,为了调度,可以只需要TID寄存器。基本的I/O可以使用或可以不使用CTRL和DATA寄存器中的条件。如果这种条件未被使用,则一旦端口准备好就简单地完成I/O。
还要注意,一旦跟随事件恢复线程的执行,则其当然可以随后执行基本的I/O操作。相反,一旦跟随基本的I/O恢复线程,则其可以随后包括事件操作。事件和I/O的任意这种链都可以被包括在线程中。例如,基本的I/O操作可以在两个基于事件的等待操作之间交错,同时事件被禁止(即,同时端口的使能标志39和/或状态寄存器的EE标志被重新声明),但是同时事件向量和条件仍保留设置在寄存器38中。即,跟随完成第一个基于事件的等待操作、随后利用同一端口执行的基本I/O、然后在第二个基于事件的等待操作中使用的重新使能的同一事件,该事件可以被禁止。如上述讨论的,基本的I/O操作暂停或不暂停该线程,但不影响状态寄存器中的端口使能标志39或EE标志,也不将控制传送到事件向量。
现在参照图6的流程图来描述线程调度器和两个示例性端口的操作。在步骤100中,执行单元16在线程调度器18的指导下开始执行第一和第二线程。在步骤102处,线程调度器遇到取决于事件的第一线程内的代码的一部分,例如,在端口22a处接收某个特定信号。在步骤104处,连同指定一旦检测到事件线程执行应当在程序中的什么点处继续的继续点向量(VECTOR)、以及此外任意所需的条件控制信息(CTRL)和相关联的数据(DATA)一起,线程调度器将第一线程的线程标识符(TID)发送到端口22a。例如,该数据可以是该指令希望在端口处接收的信号值。在步骤104处,线程调度器还可以设置第一端口的使能标志39以及将第一线程的状态寄存器SR设置为事件使能。
在步骤106处,端口22a接收来自线程调度器18的该信息。在步骤108处,线程调度器18挂起第一线程的执行。在步骤110处,端口22a开始监控该端口处的活动。
在步骤112处,线程调度器18确定第二线程仍未完成(outstanding)以及执行单元16在线程调度器18的指导下继续执行第二线程。在步骤114中,线程调度器18遇到取决于事件的代码的一部分。在步骤116处,连同继续点向量和任意其他所需条件信息一起,线程调度器18发送线程标识符至端口22b。在步骤116处,线程调度器还可以设置第二端口的使能标志39以及将第二线程的第二状态寄存器设置为事件使能。在步骤118处,端口22b接收该信息。在步骤120处,线程调度器挂起第二线程的执行。在步骤122处,端口22b开始监控在该端口处发生的活动。
在步骤124处,线程调度器确定当前再没有未完成的线程要被调度以及系统关闭除端口22a和22b之外的所有的部件。在步骤128处,端口22a检测相关事件,例如,接收存储在DATA寄存器中的信号,并因此返回线程标识符(TID)和继续点向量(VECTOR)(以及将第一线程的状态寄存器设置到事件禁止)。在步骤126处,线程调度器18接收返回的标识符。现在,执行能够继续,在步骤130处,该系统再次开启。在步骤134处,执行单元16在线程调度器18的指导下完成第一线程的执行。在步骤138处,端口22b检测第二线程的相关事件并返回其线程标识符和继续点向量(以及将第二线程的状态寄存器设置为事件禁止)。在步骤136处,线程调度器18接收返回的信息,以及在步骤138处,执行单元16在线程调度器18的控制下完成第二线程的执行。要注意,在步骤134和136之间可能存在额外的关闭步骤。
如图7所示,本发明的原理还可以扩展到线程之间的通信,或者更准确地扩展到存储代表线程的信息的线程寄存器集合20之间的通信。为了举例说明的目的,在图7中仅示出了四个线程寄存器集合201至204,每个集合存储各自线程T1至T4的信息。每个线程寄存器集合都通过互连系统40连接到其他集合的每一个,互连系统可用于建立用于在线程寄存器集合20的至少两个之间直接传送数据的至少一个通道。通道优选地用于将数据传送到操作数寄存器OP或传送来自该操作数寄存器的数据,但在原理上可以用于将信息传送到其他类型的寄存器(诸如状态寄存器SR)或传送来自其他类型的寄存器的信息。线程调度器18能够以关于上述端口讨论的类似方式基于在通道上发生的活动来调度线程。
如图7A所示,每个通道末端42都类似于一对端口,具有输入缓冲器44和输出缓冲器46。类似于端口22,每个通道输入缓冲器44和输出缓冲器46都可以具有活动处理逻辑36’,活动处理逻辑用于监控在通道上发生的活动并利用至少一个就绪标志37’发送特定活动的发生。通道末端可以检测的潜在的活动包括:该数据已被输入到通道,或该通道已变得可用于输出。如果当通道太满以致无法接纳数据时执行输出指令,则执行该指令的线程被暂停,以及当通道中有足够的空间供该指令被成功地完成时,该线程被重启。类似地,当指令被执行并且没有足够的数据可用时,该线程被暂停,并且当足够的数据变得可用时,该线程被重启。
再次如同端口22一样,为了便于检测这种活动,每个通道末端都与寄存器38’相关联。这包括:线程标识符(TID)寄存器,用于存储相关线程的标识;以及继续点向量(VECTOR)寄存器,用于存储程序中一旦事件出现执行应被恢复的位置。这些TID和VECTOR寄存器然后能够被线程调度器18和执行单元16所使用以按照与端口22相同的方式调度线程。VECTOR寄存器允许通道生成事件和中断。通道末端还具有使能标志39’以使通道能够生成事件。在实施例中,通道末端42可以不设置有CTRL和DATA寄存器。
同样的通道末端42还可以被用于经由端口22将数据从线程寄存器传达到外部环境。即,执行单元16可以经由通道末端42拾取寄存器20的内容并经由端口22将其直接传递出去;以及相反,执行单元16还可以接受来自端口22的输入并经由通道末端42直接将其传送到寄存器20。因此,如果根据本发明的两个或多个接口处理器连接在一起,如图2A所示,通道还能够被建立在那些处理器之间。在处理器间系统内,每个处理器都可以经由允许与其他处理器同时连接的多个双向物理链接204与系统互连相连接。
本文中所使用的覆盖端口、通道及其他活动的源的总的术语是“资源”。
接口处理器由于其基于线程的结构而可以支持若干个编程方法。其可以被看作执行标准输入和输出的单个传统处理器,或者其可以被编程为上百个通信部件的并行阵列的一部分。提供支持这些选项的指令集合。该指令集合包括支持初始化、终止、开始及停止线程并提供输入/输出通信的专用指令。输入和输出指令允许与外部设备非常快速的通信。它们支持高速度、低等待时间输入和输出以及高级并发编程技术。以下会更全面地讨论处理端口活动的应用,其描述了可以用于实现本发明的示例性指令。
首先针对利用指定所需资源类型的GETR指令的线程来预留资源,并且可以利用FREER指令再次释放资源。
端口可以用在输入或输出模式中。在输入模式中,条件可以用于过滤传递给线程的数据。如下所述,当数据变得可用时,端口可以用于生成事件或中断。这允许线程监控若干个端口,仅服务那些准备好的端口。之后,输入和输出指令,IN和OUT,一旦准备好就可以用于将数据传送到端口或传送来自端口的数据。在这种情况下,IN指令输入并零扩展(zero-extend)来自n位端口的n个最低有效位,以及OUT指令输出这n个最低有效位。
两个进一步的指令,INSHR和OUTSHR对数据的传送进行优化。INSHR指令将寄存器的内容向右移n位,利用从n位(bit)端口(port)输入的数据填充最左边的n位。OUTSHR指令将数据的n个最低有效位输出到n位端口并将寄存器的内容向右移n位。
s←s>>width(port) 并移位
INSHR port,s s←s>>width(d); 移位并从端
端口必须在其可以被使用之前配置。其利用用于定义端口的若干独立设置的SETC指令来配置。这些中的每一个都具有默认模式并且只有在需要不同模式是才需要被配置。
SETC port,mode port[ctrl]←mode 设置端口控制
SETC模式设置的作用在以下描述。每个设置的第一个条目都是默认模式。
模式 作用
OFF(关) 端口不活动;管脚(或多个管脚)高阻抗
ON(开) 活动
IN(输入) 端口是输入
OUT(输出) 端口是输出(但是输入返回当前管脚值)
EVENT(事件) 端口将导致事件
INTERRUPT(中断) 端口将引起中断
DRIVE(驱动) 管脚被驱动为高和低
PULLDOWN(下拉) 0比特时管脚下拉,否则高阻抗
PULLUP(上拉) 1比特时管脚上拉,但否则高阻抗
UNCOND(无条件) 端口始终准备好;输入立即完成
EQUAL(相等) 当其值等于其DATA值时端口准备好
NE(不等于) 当其值不同于其DATA值时端口准备好
TRANSITION(转变) 当其值变化到其DATA值时端口准备好
GR(大于) 当其值大于其DATA值时端口准备好
LS(小于) 当其值小于其DATA值时端口准备好
DRIVE、PULLDOWN及PULLUP模式只有当端口方向是输出时才相关。TRANSITION条件只针对1位端口相关,GR和LS条件只针对具有多于一位的端口相关。
每个端口都具有就绪位37,就绪位用于控制通过端口的数据流,并定义端口是否能够完成输入或输出指令。就绪位根据端口配置以不同方式设置。当SETC、SETD及SETV中的任意指令被执行时,就绪位被清除。
输入模式中的端口可以被配置为执行条件输入。该条件过滤输入数据,从而只有满足条件的数据被返回到程序。当条件被设置时,IN和INSHR指令将只有当端口准备好时才完成。如上所述,在未准备好的端口上执行输入指令会暂停该线程。当准备好时,端口设置其就绪位,就绪位被发送给线程调度器。线程恢复并重新执行输入指令。这时候端口准备好,数据被返回并且就绪位37被清除。
一旦端口就绪位被设置,满足该条件的数据值就被捕获,从而软件获得满足该条件的值,即使端口上的值在随后被改变。当IN或INSHR指令被执行并且就绪位被设置时,则数据被返回并且就绪位被清除。如果就绪位未被设置,则该线程被暂停,直到就绪位被设置为止。如果条件被设置,则数据与该条件进行比较,并且只有当条件满足时就绪位才被设置。
当OUT或OUTSHR指令被执行时,如果就绪位被清除,则数据被端口所获取并且就绪位被设置。如果就绪位被设置,则线程被暂停,直到其被端口清除为止。
为了在两个线程之间进行通信,两个通道末端需要被分配,每个线程一个通道末端。这是利用GETR CHAN指令完成的。然后,这两个线程可以利用资源标识符使用输入和输出指令来传送数据字。
IN ds
如果在通道过满以致不能容纳数据时执行输出指令,则暂停用于执行该指令的线程。当通道中有足够的空间供指令成功完成时,该线程被重启。同样地,当输入指令被执行并有足够的数据可用时,则线程被暂停,并且当足够的数据变得可用时该线程被重启。当其不再被需要时,通道可以利用FREER CHAN指令来释放。否则其可以被用于另一消息。
事件和中断允许资源(端口和通道)自动将控制传送到预定事件处理程序(handler)。通过保持在线程状态寄存器SR中的信息来控制线程接受事件或中断的能力(见图4),并且可以利用TSE和TSD指令来精确控制该能力。该信息包括事件使能标志(EE)和中断使能标志(IE)。
TSE s SR←SR∨s 线程状态使能
这些指令的操作数应当是以下之一:
EE 用来使能或禁止事件
IE 用来使能或禁止中断
事件在其被建立的同一范围内被处理。因此,在事件上,所有线程的状态都有效,这就使线程能够对该事件迅速响应。该线程能够利用引起(give rise)事件的端口执行输入和输出操作,同时保留一些或全部事件信息不改变。这就使线程能够完成处理事件并立即等待另一类似事件。
事件处理程序的程序位置必须在利用SETV指令使能事件之前被设置。端口具有确定其何时将生成事件的条件;这些是利用SETC和SETD指令来设置的。一旦通道包含足够的数据或者具有接受用于输出的数据的空间,就认为通道准备好了。
特定端口或通道的事件生成可以利用事件使能无条件(EEU)指令来使能并利用事件禁止无条件(EDU)指令来禁止。如果事件使能真(EET)指令的条件操作数为真,则事件使能真指令使能事件,否则禁止它;相反地,如果事件使能假(EEF)指令的条件操作数为假,则事件使能假指令使能事件,否则禁止它。这些指令被用于最优化保护输入的实现。以下是一些用于配置端口上的事件的示例性指令格式,但是应当理解,对于通道,同样的指令可以应用。
SETV port,v port[vector]←v 设置事件向量
SETD port,d port[data]←d 设置事件数据
SETC port,c port[ctrl]←c 设置事件控制
EET port,b port[enable]←b;port[tid]←thread 事件使能真
EEF port,b port[enable]←b;port[tid]←thread事件使能假
EDU port port[enable]←false;port[tid]←thread 事件禁止
EEU port port[enable]←true;port[tid]←thread 事件使能
已经使能了关于一个或多个资源的事件,线程可以利用WAITEU指令来等待至少一个事件。这可以导致同控制被传送到具有通过清除EE(事件使能)标志所禁止的事件的相应事件向量所指定的事件处理程序一起立即发生该事件。可替换地,线程可以被挂起直到事件发生为止——在该情况下,当事件发生时,EE标志被清除,并且线程恢复执行。
WAITET b if b then SR[EE]←true 如果为真则事件等待
WAITEU SR[EE]←true 事件等待
CLRE SR[EE]←false 禁止所有事件
forall port 对线程
if port[tid]=thread then port[enable]←false
为了优化重复等待一个或多个事件直到条件发生为止的常见情况,提供事件等待指令的条件格式。WAITET指令只有在其条件操作数为真时才等待,以及WAITEF只有在其条件操作数为假时才等待。
已被线程使能的所有事件都可以利用单个CLRE指令来禁止。这禁止了已通过线程使事件使能的所有端口中的事件生成。CLRE指令还清除线程的状态寄存器中的事件使能状态。
为了将线程的响应优化为高优先级资源,TSE EE指令可以用于在随后开始使能端口和/或通道并利用其中一个事件等待指令之前先使能线程上的事件。这样,处理器可以以优先级顺序扫描资源。这可以导致一旦事件被使能,事件就立即被处理。
相比于事件,中断在当前范围内不被处理并且因此当前PC和SR(以及另外潜在的一些或全部其他寄存器)必须在中断处理程序执行之前被存储。关于资源r所生成的中断,以下自动发生:
SAVEPC←PC;
SAVESR←SR;
SR[EE]←false(假);
SR[IE]←false(假);
PC←r[vector](r[向量])
当处理程序结束时,可以通过RFINT指令来进行被中断的线程的执行。
RFINT PC←SAVEPC 从中断返回
SR←SAVESR
中断可以中断线程,同时挂起等待事件。
以下是可与上述的线程调度布置一起使用的指令的实例。以下所使用的缩写“reg”指的是寄存器,“op reg”指的是操作数寄存器,“imm”指的是立即操作数,“dest”指的是目的操作数寄存器。
ADDI dest,source,constant 添加源到常数(两个op reg和4-位imm)
MUL dest,source1,source2 源(source)1乘以源2(三个op reg)
LSU dest,source1,source2 小于无符号的(三个op reg)
STW data,base offset 将数据存储到存储器(三个op reg)
LDW data,base,offset 从存储器载入数据(三个op reg)
LDWSP data,offset 从栈载入数据(任意reg和6-位imm)
LDC data,constant 载入常数(任意reg和6-位imm)
STB data,addr 将字节存储到存储器(两个op reg)
BRFT flag,offset 如果标志为真则向前分支(op reg和6-
位imm)
BRBF flag,offset 如果标志为假则向前分支(op reg和位-
位(bit-bit)imm)
BRFU offset 无条件地相对向前分支(6-位imm)
BLRF offset 分支和链接相对向前(10-位imm子程
序调用)
GETR resource,type 将资源分配给线程(两个op-reg)
IN resource,data 输入(两个op reg)
OUT resource,data 输出(两个op reg)
INSHR resource,data 输入并向右移位(两个op reg)
NOT dest,source 按位取非(两个op reg)
EET flag,resource 如果标志为真则使能事件(两个op reg)
EEU resource 无条件地使能事件(一个op reg)
WAITEU 无条件地等待事件(没有操作数)
CLRE 为线程清除事件(没有操作数)
这里是利用上述指令的几个实例。第一实例执行两个阵列a和b的乘法累加:
MACC:
LDW x,a,i
LSU go,i,limit
LDW y,b,i
ADD i,i,l
MUL prod,x,y
ADD sum,sum,prod
BRBF go,MACC
接下来两个实例执行同样的输入和输出功能,这通常是通过DMA(直接存储器访问)控制器来执行的。它们利用存储器中的基地址处开始的通道c来传送字的块。
DMAI:
LSU go,i,limit
IN c,x
STW x,base,i
ADDI i,i,l
BRBF go,DMAI
DMAO:
LDW x,base,i
LSU go,i,limit
ADDI,i,i,l
OUT c,x
BRBF go DMAO
应当理解,上述实施例仅是通过实例的方式来描述。在其他实施例中,根据芯片的期望规格,可以提供寄存器和指令的不同集合。在一些实施例中,线程标识符无需被传送到端口,但可以保持线程调度器的响应,或被存储在别处。可替换地,每个线程都可以在端口处给定单独的就绪标志,从而线程标识符被传递到端口以选择正确的就绪信号,但是线程标识符无需在检测到活动时被返回到线程调度器。此外,条件和/或条件数据无需被传送到端口。相反,条件可以在端口处预先配置,和/或条件可以在线程调度器处或别处估计。线程可以基于来自端口和通道之外的其他源的活动而被调度。可以在处理器的各种部件之间提供不同互连。此外,本发明不一定要用在具有移动应用处理器的移动终端中。对于本领域技术人员来说,其他应用和配置将是显而易见的。本发明的范围不被所描述的实施例所限制,而只被所附权利要求所限定。
Claims (29)
1.一种用于执行线程的处理器,每个线程均包括指令序列,所述指令定义操作以及所述指令中的至少一些定义存储器访问操作,所述处理器包括:
多个指令缓冲器,每个指令缓冲器均用于保存与所述缓冲器相关联的线程的至少一个指令;
指令发出级,用于发出来自所述指令缓冲器的指令;
存储器访问级,连接至存储器并被布置以接收由所述指令发出级发出的指令;
所述存储器访问级包括:
检测逻辑,用于检测在所发出的每个指令中是否定义有存储器访问操作;以及
取指令逻辑,用于在检测到没有存储器访问操作时发起取指令,以获取线程的指令。
2.根据权利要求1所述的处理器,包括被布置以向所述存储器访问级提供地址的装置,用于实现没有定义存储器访问操作的指令的取指令操作。
3.根据权利要求1或2所述的处理器,包括与每个线程相关联的用于指示所述线程的可运行状态的装置。
4.根据权利要求3所述的处理器,其中,所述指令发出单元被布置为通过从与可运行线程相关联的每个缓冲器依次获得一个指令来发出来自所述指令缓冲器的指令。
5.根据权利要求1所述的处理器,包括用于将所取的指令载入到线程的所述指令缓冲器中的装置。
6.根据权利要求5所述的处理器,其中,所取的指令是用于其指令发起所述取指令操作的线程。
7.根据权利要求5所述的处理器,其中,所取的指令是用于与其指令发起所述取指令操作的线程不同的线程。
8.根据权利要求1所述的处理器,其中,所述指令发出单元被布置为在接下来指令应当被发出的线程的指令缓冲器为空的事件中发出取空操作请求,所述取空操作请求发起取指令操作以在所述存储器访问级处取指令。
9.根据权利要求1所述的处理器,其中,所述指令单元被布置为在由于所述线程等待来自资源的向量而在接下来指令应当被发出的线程的指令缓冲器为空的事件中发出取向量请求,其中,所述取向量请求获取来自所述资源的向量并利用所述向量在所述存储器访问级处发起存储器访问操作,以提供地址。
10.根据权利要求1所述的处理器,进一步包括线程调度器,所述线程调度器被布置为基于与所述线程相关联的特定活动的指示来调度用于执行的多个线程。
11.根据权利要求10所述的处理器,包括多个线程寄存器的集合,每个线程寄存器的集合均被分配以存储关于所述多个线程中的各个线程的信息。
12.根据权利要求11所述的处理器,包括读寄存器级,指令在所述读寄存器级处访问所述线程寄存器。
13.根据权利要求2所述的处理器,其中,被布置以提供地址的所述装置包括程序计数器。
14.根据权利要求2所述的处理器,其中,被布置以提供地址的所述装置包括逻辑,用于基于程序计数器和要被获取指令的线程的指令缓冲器中剩余的指令的数目来计算所述地址。
15.一种包括用于执行线程的处理器的移动终端,每个线程均包括指令序列,所述指令定义操作以及所述指令中的至少一些定义存储器访问操作,所述处理器包括:
多个指令缓冲器,每个指令缓冲器均用于保存与所述缓冲器相关联的线程的至少一个指令;
指令发出级,用于发出来自所述指令缓冲器的指令;
存储器访问级,连接至存储器并被布置以接收由所述指令发出级发出的指令;
所述存储器访问级包括:
检测逻辑,用于检测在所发出的每个指令中是否定义存储器访问操作;以及
取指令逻辑,用于在检测到没有存储器访问操作时发起取指令,以获取线程的指令。
16.一种处理器阵列,每个处理器均包括用于执行线程的处理器,每个线程均包括指令序列,所述指令定义操作以及所述指令中的至少一些定义存储器访问操作,所述处理器包括:
多个指令缓冲器,每个指令缓冲器均用于保存与所述缓冲器相关联的线程的至少一个指令;
指令发出级,用于发出来自所述指令缓冲器的指令;
存储器访问级,连接至存储器并被布置以接收由所述指令发出级发出的指令;
所述存储器访问级包括:
检测逻辑,用于检测在所发出的每个指令中是否定义有存储器访问操作;以及
取指令逻辑,用于在检测到没有存储器访问操作时发起取指令,以获取线程的指令。
17.一种用于执行线程的方法,每个线程均包括指令序列,所述指令定义操作以及所述指令中的至少一些定义存储器操作,所述方法包括:
将线程的至少一个指令保存在所述线程的指令缓冲器中;
将来自所述指令缓冲器的指令发出到执行流水线的指令发出级;
在连接至存储器的存储器访问级处接收由所述指令发出级发出的指令;
检测所述指令中是否定义有存储器访问操作,以及当未检测到时,发起取指令操作,以获取线程的指令。
18.根据权利要求17所述的方法,包括以下步骤:将地址提供给所述存储器访问级,用于实现没有定义存储器访问操作的指令的取指令操作。
19.根据权利要求18所述的方法,其中,提供所述地址的步骤包括:将程序计数提供给所述存储器访问级。
20.根据权利要求18所述的方法,其中,提供地址的步骤包括:基于程序计数和指令要被获取指令的线程的指令缓冲器中剩余的指令的数目来生成地址。
21.根据权利要求17所述的方法,其中,所述指令包括第一类型的分支指令,所述第一类型的分支指令定义了使指令被获取的存储器访问操作。
22.根据权利要求18所述的方法,其中,所述指令包括第二类型的分支指令,所述第二类型的分支指令定义了用于从所述存储器中检索分支目标的存储器访问操作,所述目标是提供给所述存储器访问级的所述地址。
23.根据权利要求17所述的方法,其中,通过从与可运行线程相关联的每个缓冲器依次获得一个指令来发出来自所述指令缓冲器的指令。
24.根据权利要求17所述的方法,包括以下步骤:将所取的指令载入到线程的所述指令缓冲器中。
25.根据权利要求17所述的方法,包括以下步骤:将所述指令载入到发起所述取指令操作的所述线程的所述指令缓冲器中。
26.根据权利要求17所述的方法,包括以下步骤:将所取的指令载入到与发起所述取指令操作的线程不同的线程的指令缓冲器中。
27.根据权利要求15所述的方法,包括以下步骤:在接下来指令应当被发出的线程的指令缓冲器为空的事件中发出取空操作请求,所述取空操作请求发起取指令操作以在所述存储器访问级处取指令。
28.根据权利要求15所述的方法,包括以下步骤:在由于所述线程等待来自资源的向量而接下来指令应当被发出的线程的指令缓冲器为空的事件中发出取向量请求,其中,所述取向量请求获取来自所述资源的向量并利用所述向量在所述存储器访问级处发起存储器访问操作。
29.一种用于执行线程的处理器,每个线程均包括指令序列,所述指令定义操作以及所述指令中的至少一些定义存储器访问操作,所述处理器包括:
缓冲器装置,用于保存线程的指令;
指令发出装置,用于发出来自所述缓冲器装置的指令;
存储器访问装置,连接至存储器并被布置以接收由所述指令发出装置发出的指令;
所述存储器访问装置包括:
用于检测在所发出的每个指令中是否定义有存储器访问操作的装置;以及
用于在检测到没有存储器访问操作时发起取指令,以获取线程的指令的装置。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US11/755,119 | 2007-05-30 | ||
US11/755,119 US7958333B2 (en) | 2007-05-30 | 2007-05-30 | Processor with memory access stage adapted to fetch an instruction of a thread when no memory access operation is detected |
PCT/EP2008/056488 WO2008145653A1 (en) | 2007-05-30 | 2008-05-27 | Scheduling threads in a processor |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101681262A true CN101681262A (zh) | 2010-03-24 |
CN101681262B CN101681262B (zh) | 2013-02-13 |
Family
ID=39775524
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2008800183043A Active CN101681262B (zh) | 2007-05-30 | 2008-05-27 | 用于执行线程的处理器及方法 |
Country Status (7)
Country | Link |
---|---|
US (1) | US7958333B2 (zh) |
EP (1) | EP2171576B1 (zh) |
JP (1) | JP5382735B2 (zh) |
KR (1) | KR101486025B1 (zh) |
CN (1) | CN101681262B (zh) |
AT (1) | ATE540353T1 (zh) |
WO (1) | WO2008145653A1 (zh) |
Cited By (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102567117A (zh) * | 2010-09-30 | 2012-07-11 | 国际商业机器公司 | 调度处理器中的线程的方法和系统 |
CN103634207A (zh) * | 2013-12-16 | 2014-03-12 | 武汉科技大学 | 一种静态的关键路径优先的片上网络路由优化方法 |
CN104298552A (zh) * | 2013-07-15 | 2015-01-21 | 华为技术有限公司 | 多线程处理器的线程取指调度方法、系统和多线程处理器 |
CN105182111A (zh) * | 2015-08-17 | 2015-12-23 | 上海斐讯数据通信技术有限公司 | 一种移动终端的性能测试方法及系统 |
CN108027769A (zh) * | 2015-09-19 | 2018-05-11 | 微软技术许可有限责任公司 | 使用寄存器访问指令发起指令块执行 |
CN108536474A (zh) * | 2017-03-06 | 2018-09-14 | Arm 有限公司 | 延迟缓冲器 |
US10268519B2 (en) | 2015-11-16 | 2019-04-23 | Industrial Technology Research Institute | Scheduling method and processing device for thread groups execution in a computing system |
CN109697111A (zh) * | 2017-10-20 | 2019-04-30 | 图核有限公司 | 在多线程处理器中调度任务 |
CN109697082A (zh) * | 2017-10-20 | 2019-04-30 | 图核有限公司 | 指令组 |
CN110603521A (zh) * | 2017-02-20 | 2019-12-20 | 密集化有限公司 | 超线程处理器 |
CN113805817A (zh) * | 2021-10-09 | 2021-12-17 | 深圳百瑞互联技术有限公司 | 增强flash存储器随机读写能力的方法、装置、系统及介质 |
US11681531B2 (en) | 2015-09-19 | 2023-06-20 | Microsoft Technology Licensing, Llc | Generation and use of memory access instruction order encodings |
US11977891B2 (en) | 2015-09-19 | 2024-05-07 | Microsoft Technology Licensing, Llc | Implicit program order |
Families Citing this family (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8279886B2 (en) | 2004-12-30 | 2012-10-02 | Intel Corporation | Dataport and methods thereof |
JP5173711B2 (ja) | 2008-09-30 | 2013-04-03 | ルネサスエレクトロニクス株式会社 | マルチスレッドプロセッサ及びそのハードウェアスレッドのスケジュール方法 |
JP5173714B2 (ja) * | 2008-09-30 | 2013-04-03 | ルネサスエレクトロニクス株式会社 | マルチスレッドプロセッサ及びその割り込み処理方法 |
KR101869325B1 (ko) * | 2011-12-13 | 2018-06-21 | 한국전자통신연구원 | 이종 멀티코어 환경에서의 코어 배정 장치 |
US9798548B2 (en) * | 2011-12-21 | 2017-10-24 | Nvidia Corporation | Methods and apparatus for scheduling instructions using pre-decode data |
US9928117B2 (en) | 2015-12-11 | 2018-03-27 | Vivante Corporation | Hardware access counters and event generation for coordinating multithreaded processing |
DE102016214117A1 (de) * | 2016-08-01 | 2018-02-01 | Siemens Aktiengesellschaft | Ermitteln einer Ausführungszeit eines Anwenderprogramms |
US11288072B2 (en) * | 2019-09-11 | 2022-03-29 | Ceremorphic, Inc. | Multi-threaded processor with thread granularity |
KR102474054B1 (ko) * | 2020-06-22 | 2022-12-06 | 주식회사 퓨리오사에이아이 | 뉴럴네트워크 프로세서 |
KR102474053B1 (ko) * | 2020-06-22 | 2022-12-06 | 주식회사 퓨리오사에이아이 | 뉴럴네트워크 프로세서 |
CN112035902B (zh) * | 2020-08-12 | 2024-03-19 | 北京数盾信息科技有限公司 | 一种面向高速高并发应用的加密模组 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060179346A1 (en) * | 2005-02-10 | 2006-08-10 | International Business Machines Corporation | Method for checkpointing instruction groups with out-of-order floating point instructions in a multi-threaded processor |
Family Cites Families (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2999907B2 (ja) * | 1993-07-05 | 2000-01-17 | 三洋電機株式会社 | マイクロプログラム制御方式の中央処理装置 |
US5515521A (en) | 1994-02-08 | 1996-05-07 | Meridian Semiconductor, Inc. | Circuit and method for reducing delays associated with contention interference between code fetches and operand accesses of a microprocessor |
JPH09190348A (ja) * | 1996-01-09 | 1997-07-22 | Matsushita Electric Ind Co Ltd | 命令プリフェッチバッファ制御方法、命令プリフェッチバッファ制御装置、及び命令プリフェッチバッファフラッシュ方法 |
US6625654B1 (en) * | 1999-12-28 | 2003-09-23 | Intel Corporation | Thread signaling in multi-threaded network processor |
US6961819B2 (en) | 2002-04-26 | 2005-11-01 | Mips Technologies, Inc. | Method and apparatus for redirection of operations between interfaces |
WO2004044745A1 (ja) * | 2002-11-13 | 2004-05-27 | Fujitsu Limited | マルチスレッディングプロセッサにおけるスケジューリング方法およびマルチスレッディングプロセッサ |
US6983359B2 (en) * | 2003-08-13 | 2006-01-03 | Via-Cyrix, Inc. | Processor and method for pre-fetching out-of-order instructions |
US7310722B2 (en) | 2003-12-18 | 2007-12-18 | Nvidia Corporation | Across-thread out of order instruction dispatch in a multithreaded graphics processor |
US7506140B2 (en) * | 2005-02-04 | 2009-03-17 | Mips Technologies, Inc. | Return data selector employing barrel-incrementer-based round-robin apparatus |
US7734897B2 (en) * | 2005-12-21 | 2010-06-08 | Arm Limited | Allocation of memory access operations to memory access capable pipelines in a superscalar data processing apparatus and method having a plurality of execution threads |
-
2007
- 2007-05-30 US US11/755,119 patent/US7958333B2/en active Active
-
2008
- 2008-05-27 WO PCT/EP2008/056488 patent/WO2008145653A1/en active Application Filing
- 2008-05-27 KR KR20097027570A patent/KR101486025B1/ko active IP Right Grant
- 2008-05-27 JP JP2010509806A patent/JP5382735B2/ja active Active
- 2008-05-27 AT AT08750362T patent/ATE540353T1/de active
- 2008-05-27 EP EP08750362A patent/EP2171576B1/en active Active
- 2008-05-27 CN CN2008800183043A patent/CN101681262B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060179346A1 (en) * | 2005-02-10 | 2006-08-10 | International Business Machines Corporation | Method for checkpointing instruction groups with out-of-order floating point instructions in a multi-threaded processor |
Cited By (19)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102567117B (zh) * | 2010-09-30 | 2015-04-15 | 国际商业机器公司 | 调度处理器中的线程的方法和系统 |
CN102567117A (zh) * | 2010-09-30 | 2012-07-11 | 国际商业机器公司 | 调度处理器中的线程的方法和系统 |
CN104298552A (zh) * | 2013-07-15 | 2015-01-21 | 华为技术有限公司 | 多线程处理器的线程取指调度方法、系统和多线程处理器 |
CN104298552B (zh) * | 2013-07-15 | 2018-06-19 | 华为技术有限公司 | 多线程处理器的线程取指调度方法、系统和多线程处理器 |
CN103634207A (zh) * | 2013-12-16 | 2014-03-12 | 武汉科技大学 | 一种静态的关键路径优先的片上网络路由优化方法 |
CN105182111A (zh) * | 2015-08-17 | 2015-12-23 | 上海斐讯数据通信技术有限公司 | 一种移动终端的性能测试方法及系统 |
US11681531B2 (en) | 2015-09-19 | 2023-06-20 | Microsoft Technology Licensing, Llc | Generation and use of memory access instruction order encodings |
CN108027769A (zh) * | 2015-09-19 | 2018-05-11 | 微软技术许可有限责任公司 | 使用寄存器访问指令发起指令块执行 |
US11977891B2 (en) | 2015-09-19 | 2024-05-07 | Microsoft Technology Licensing, Llc | Implicit program order |
US10268519B2 (en) | 2015-11-16 | 2019-04-23 | Industrial Technology Research Institute | Scheduling method and processing device for thread groups execution in a computing system |
CN110603521A (zh) * | 2017-02-20 | 2019-12-20 | 密集化有限公司 | 超线程处理器 |
CN110603521B (zh) * | 2017-02-20 | 2023-10-27 | 密集化有限公司 | 超线程处理器 |
CN108536474B (zh) * | 2017-03-06 | 2023-12-26 | Arm 有限公司 | 延迟缓冲器 |
CN108536474A (zh) * | 2017-03-06 | 2018-09-14 | Arm 有限公司 | 延迟缓冲器 |
CN109697082A (zh) * | 2017-10-20 | 2019-04-30 | 图核有限公司 | 指令组 |
US11550591B2 (en) | 2017-10-20 | 2023-01-10 | Graphcore Limited | Scheduling tasks in a multi-threaded processor |
CN109697111A (zh) * | 2017-10-20 | 2019-04-30 | 图核有限公司 | 在多线程处理器中调度任务 |
CN109697082B (zh) * | 2017-10-20 | 2023-07-14 | 图核有限公司 | 指令组 |
CN113805817A (zh) * | 2021-10-09 | 2021-12-17 | 深圳百瑞互联技术有限公司 | 增强flash存储器随机读写能力的方法、装置、系统及介质 |
Also Published As
Publication number | Publication date |
---|---|
WO2008145653A1 (en) | 2008-12-04 |
JP5382735B2 (ja) | 2014-01-08 |
US20080301409A1 (en) | 2008-12-04 |
CN101681262B (zh) | 2013-02-13 |
US7958333B2 (en) | 2011-06-07 |
EP2171576B1 (en) | 2012-01-04 |
ATE540353T1 (de) | 2012-01-15 |
KR101486025B1 (ko) | 2015-01-22 |
JP2010528384A (ja) | 2010-08-19 |
EP2171576A1 (en) | 2010-04-07 |
KR20100032399A (ko) | 2010-03-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101681262B (zh) | 用于执行线程的处理器及方法 | |
CN100478871C (zh) | 从队列处理指令刷新的生存期计数器设计的系统和方法 | |
EP0328721B1 (en) | Dynamic multiple instruction stream multiple data multiple pipeline floatingpoint unit | |
US6728866B1 (en) | Partitioned issue queue and allocation strategy | |
CN102023844B (zh) | 并行处理器及其线程处理方法 | |
EP2165254A1 (en) | Synchronisation in a multithreaded processor | |
JP2015501056A (ja) | 複数のハードウェア・スレッドにわたる仮想スレッドの細粒化並列処理のための低遅延変数伝達ネットワークを利用する回路装置、集積回路デバイス、プログラム製品および方法(複数のハードウェア・スレッドにわたる仮想スレッドの細粒化並列処理のための低遅延変数伝達ネットワーク) | |
CN101689157A (zh) | 定时端口 | |
CN107810484A (zh) | 用于处理器的显式指令调度器状态信息 | |
US10372458B2 (en) | Method and apparatus for a self-clocked, event triggered superscalar processor | |
CN101681274B (zh) | 接口处理器 | |
CN101689159B (zh) | 令牌协议 | |
EP2137617B1 (en) | Processor instruction set | |
EP2137618B1 (en) | Processor instruction set | |
JP2002287957A (ja) | キャッシュのような構造を使用してcpu設計におけるオペランド・アクセス・ステージを高速化するための方法及び装置 | |
CN109032665A (zh) | 微处理器中指令输出处理方法及装置 | |
EP0496407A2 (en) | Parallel pipelined instruction processing system for very long instruction word | |
EP2137613B1 (en) | Processor register architecture | |
CN113703841B (zh) | 一种寄存器数据读取的优化方法、装置及介质 | |
JPWO2008155839A1 (ja) | 命令処理装置 | |
KR20100129021A (ko) | 구성형 프로세서에서 risc 명령어와 확장 명령어를 병렬 처리하기 위한 방법 및 그에 따른 구성형 프로세서 | |
JP2006515446A (ja) | 関連アプリケーションを相互参照するカルテシアンコントローラを有するデータ処理システム | |
CN117716339A (zh) | 用于在处理元件之间传输触发指令的数据处理装置和方法 | |
CN117435551A (zh) | 计算装置、存内处理存储装置及操作方法 | |
CN101324841A (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 | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |