TWI798605B - 多處理器裝置及用於操作多處理器系統之方法 - Google Patents

多處理器裝置及用於操作多處理器系統之方法 Download PDF

Info

Publication number
TWI798605B
TWI798605B TW109142450A TW109142450A TWI798605B TW I798605 B TWI798605 B TW I798605B TW 109142450 A TW109142450 A TW 109142450A TW 109142450 A TW109142450 A TW 109142450A TW I798605 B TWI798605 B TW I798605B
Authority
TW
Taiwan
Prior art keywords
message
data
predicate
processor
specific
Prior art date
Application number
TW109142450A
Other languages
English (en)
Other versions
TW202121194A (zh
Inventor
卡羅 S 達伯斯
凱斯 M 邦德洛斯
肯尼斯 R 福克納
艾力克斯 E 伊卡薩
弗德瑞克 A 羅西
費薩爾 A 賽爾德
麥可 R 羅西諾
Original Assignee
美商卡赫倫特羅吉克斯公司
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 美商卡赫倫特羅吉克斯公司 filed Critical 美商卡赫倫特羅吉克斯公司
Publication of TW202121194A publication Critical patent/TW202121194A/zh
Application granted granted Critical
Publication of TWI798605B publication Critical patent/TWI798605B/zh

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • G06F15/163Interprocessor communication
    • G06F15/173Interprocessor communication using an interconnection network, e.g. matrix, shuffle, pyramid, star, snowflake
    • G06F15/17337Direct connection machines, e.g. completely connected computers, point to point communication networks
    • G06F15/17343Direct connection machines, e.g. completely connected computers, point to point communication networks wherein the interconnection is dynamically configurable, e.g. having loosely coupled nearest neighbor architecture
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • G06F15/163Interprocessor communication
    • G06F15/173Interprocessor communication using an interconnection network, e.g. matrix, shuffle, pyramid, star, snowflake
    • G06F15/17306Intercommunication techniques
    • G06F15/17312Routing techniques specific to parallel machines, e.g. wormhole, store and forward, shortest path problem congestion
    • 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/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/542Event management; Broadcasting; Multicasting; Notifications
    • 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/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/544Buffers; Shared memory; Pipes
    • 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/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/546Message passing systems or structures, e.g. queues
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L45/00Routing or path finding of packets in data switching networks
    • H04L45/74Address processing for routing
    • H04L45/745Address table lookup; Address filtering
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Abstract

揭示了一種多處理器系統,其具有針對高效能及低功率耗散最佳化之處理元件、散佈記憶體以及一級及二級互連網路。在所述二級網路中,以一散佈方式用多個處理器配置多個訊息路由節點。一給定訊息路由節點可自其他訊息節點接收訊息,且使用包含於接收到之訊息中之相對偏移將所述訊息轉送至目的地訊息路由節點。所述相對偏移可自所述訊息節點指定將一訊息發起至一目的地訊息節點之數個訊息節點。

Description

多處理器裝置及用於操作多處理器系統之方法
本發明係關於多處理器系統,且更特定言之,係關於處理器操作及執行之改良。
通用硬體系統之主要目的為達成特殊應用(非可程式化)硬體效能,同時保持完整的可程式化性。歷史上,此兩種概念截然不同。特殊應用硬體為固定硬體方案,其以可能的最高效方式執行特定功能。此通常依據每一功能之能量或每一操作之能量且依據每一(電路)區域之功能來量測,其可能與產品之部分成本相關。晶片產品之成本由許多因素構成,包含晶粒面積及最終封裝。成本亦應考慮整個生態系統以開發產品。此生態系統成本由以下各項構成:將特定應用縮減為特定硬體方案之時間、構成整個系統所需之特定硬體方案的數目,及經由自訂通信及記憶體結構整合所有特定硬體方案所花費之時間等。因此,需要完全整合之方案支援所有眾多特定硬體方案以及其自訂互連,從而導致單一晶片晶粒需要極大面積。歷史上,此過程導致在面積、能量及上市時間方面無效之方案。
當考慮可程式化性及目標硬體之概念時,自硬體架構及軟體開發風格之角度來看,市場或環境由以下各項代表:由英特爾(Intel)、AMD及ARM提供之通用處理器(GPP);來自NVIDIA及AMD之圖形處理單元(GPU);來自Texas Instruments及Analog Devices之數位信號處理器(DSP);來自Xilinx、Altera等之場可程式化閘陣列(FPGA);來自Cavium及Tilera之多核/眾核處理器;及特殊應用積體電路(ASIC)或系統單晶片(SoC)。
GPP用於通用處理,亦即,基於40多年來古老但經過驗證之硬體架構思考而嘗試成為多面手。其主流目的為運行使用者界面(UI)及高度交互的UI密集型應用程式,如MSWord、Excel、電子郵件等,以及支援的操作系統(例如Windows及Linux)。影響功率耗散之硬體特性為多層級快取、複雜硬體記憶體管理單元、大型匯流排及大型時序結構。總之,其耗散大量功率來執行此等任務。自軟體開發之角度來看,其被視為最容易定位之軟體程式化模型。此係自使用者正在開發連續或依序執行之單一執行緒的角度而言的。當引入並行性或多個硬體執行緒(大於約四個執行緒)時,對其高效地進行程式化之能力變得更加困難。此係因為基本上未開發架構來支援並行執行緒操作,且因此硬體架構需要大量額外負擔複雜性來管理。軟體程式化模型需要引入API或語言擴展以便支援多個軟體執行緒之定義。儘管此不一定必須為複雜的,但遺憾的是,當前GPP硬體架構需要此類複雜性。 在高層級下,在世界上每台超級電腦中廣泛用於C、C++、Fortran等之API為MPI(訊息傳遞介面)API,其自20世紀90年代初以來一直為行業標準。此為極簡單、易於理解之API,其不限制硬體實施。MPI API允許以獨立於硬體之方式定義軟體執行緒及通信。此不同於OpenMP、Coarray Fortran、OpenCL等及本質上規定假設的基礎硬體模型之其他語言/API,因此限制了解譯靈活性且導致向前相容性問題。換言之,在使用後面此等語言/API之情況下,程式設計師需要為所針對之每一新硬體平台重寫程式。
GPU在歷史上係為處理及針對資料顯示而開發。其在硬體架構上受到其核心外(外部)記憶體模型要求及內核記憶體模型要求約束。核心外記憶體需要GPP將資料置放於GPU記憶體空間中。GPU接著拉入(pull in)資料,以管線方式對其進行操作,且接著將其置放回其外部記憶體空間中。自此,資料可被發送至顯示器,或者GPP需要將資料移出GPU記憶體空間以在一般處理下進一步使用/儲存。硬體效率低下之原因在於:(1)支援在周圍移動資料以支援核心外硬體限制所需之支援,及(2)有限的內核記憶體結構,其中資料限於在類似於深度管線化SIMD機器之流線型管線中處理。結果為歸因於處理資料之硬體效率低下而導致功率利用較高。所使用之軟體程式化模型為極度以硬體為中心的OpenCL、CUDA等,且因此達成效率較為複雜且不太便攜,並且在嘗試移動至新硬體目標平台時必須重寫及重建程式碼。
DSP可被視為具有已減小且針對通用信號處理之指令集的GPP。其遭受與其哥哥/姐姐(brother/sister)GPP相同的快取、MMU及匯流排問題。另外,諸如Viterbi/Turbo解碼或運動估計之任何真正高輸送量處理功能已經縮減為具有有限能力之ASIC加速器,其通常僅支援商業市場中一組有限的特定標準。程式化模型在針對單一硬體執行緒時類似於GPP,但由於執行單元硬體中之信號處理指令方法,要達成任何高效率,需要手工組合功能或使用專屬軟體程式庫。當創建類似於上文所論述之並行GPP的多並行DSP架構時,問題進一步惡化。
FPGA為完全不同的硬體方法,在所述方法中,可在位元級下完成功能之定義且經由可程式化導線結構完成邏輯功能之間的通信。此硬體方法帶來巨大額外負擔及複雜性。歸因於此,高效程式化係以諸如Verilog或VHDL之硬體程式設計語言執行。由於引入時序收斂障礙之可程式化佈線及可程式化邏輯,編譯過程要複雜得多,所述可程式化佈線及可程式化邏輯類似於ASIC/SOC所需之可程式化佈線及可程式化邏輯,但具有結構化導線網狀架構。由於FPGA僅執行與其程式化之功能完全相同的功能,因此當一次僅執行一項功能時,特定功能之功率耗散及效能輸送量明顯優於GPP或GPU。然而,若試圖在FPGA中實施GPP之所有能力,則其顯然會比GPP差得多。在硬體下進行程式化之難度為顯而易見的(例如時序收斂)。程式化FPGA實際上並非「程式化」,而是邏輯/硬體設計,且VHDL/Verilog為邏輯/硬體設計語言,而非程式設計語言。
自硬體之角度來看,幾乎所有多核/眾核架構皆採用核心處理器、快取、MMU、匯流排及所有相關聯邏輯,且用圍繞其之通信匯流排/網狀架構將其複製於晶粒上。多核架構之實例為IBM之單元、英特爾及AMD之四元組(quad)及N個多核、Cavium及Tilera之產品、數個自訂SOC等。另外,在多核架構中達成之功率減少大部分不顯著。此結果來源於多核方法僅複製GPU方法之事實。多核架構中唯一真正節省功率的是減少一些IO驅動器,由於核心在處於單獨晶片上之前由晶載通信匯流排連接,因此現在不需要此等驅動器。因此,多核方法並未節省許多能量。其次,軟體程式化模型並未自上文所論述之GPP改良。
針對其他方法識別到之問題清單為,對於特定市場,系統開發者為何致力於具有特定GPP、DSP及ASIC加速器之自訂晶片以形成系統單晶片(SoC)。SoC在需要時提供可程式化性,並為特定功能提供ASIC效能,以平衡功率耗散及成本。然而,現在軟體程式化模型甚至比上述可程式化硬體解決方案中所討論之情況更複雜。另外,SOC可能導致與完全可程式化方案相關聯之靈活性喪失。
所有此等可程式化硬體方案中之共同點為,當今市場上所代表之軟體程式化模型通常專注於推斷執行模型及基礎硬體架構,以更高效地支援較多應用程式,而非變得與硬體無關。
OpenCL支援使用ANSI C來編寫內核程式設計語言,但有一些限制及添加。其不允許使用函數指標、遞迴、位元字段、可變長度陣列及標準標頭檔案。擴展所述語言以支援與向量類型及操作、同步及功能之並行性,以與工作項/組一起工作。應用程式設計介面(API)用以定義且接著控制平台。在課程層級下,OpenCL支援使用基於任務且基於資料之並行性的並行計算。
開發軟體應用程式以供在多處理器系統上並行執行之先前技術方法通常需要在易於開發與並行執行之效率之間進行權衡。換言之,通常情況為,程式設計師之開發過程愈容易,所得可執行程式在硬體上同時執行之效率就愈低;相反,更高效的並行執行通常需要程式設計師付出更多努力,亦即,更詳細地設計程式以避免低效處理及使用目標硬體之效率增強特徵。
因此,需要改良之系統及方法來促進應用程式級或系統級視圖之軟體描述,以驅使軟體程式化模型及其後續使用針對執行模型及基礎硬體架構。亦需要提供經由此過程實現應用程式之高效可程式化實施之機制的改良。訊息傳遞介面(MPI)為標準化語言獨立、可調式且便攜式的訊息傳遞通信協定API。MPI API意欲用語言特定的語法(連結)以語言獨立的方式在一組過程(已映射至節點/伺服器/電腦執行個體)之間提供基本虛擬拓樸、同步及通信功能性。MPI API標準定義程式庫常式之核心的語法及語義,其包含但不限於對以下各項之支援:可點對點定義之各種行為及集體/廣播通信發送/接收操作及過程同步。MPI為當今高效能計算中使用之主要模型。利用處於緊密通信之許多處理元件、分佈式快速記憶體以及將系統劃分成模組階層之較複雜軟體開發工具,有可能在系統層級下實現朝向較高效能之每瓦特功率耗散的較大進展。被指派至處理元件、支援記憶體及跨動態可組態互連網路之靈活通信路徑的任務在階層底部。
揭示了包含複數個訊息節點之多處理器積體電路的各種實施例。一般而言,所述複數個訊息節點以一散佈配置耦接至包含於所述多處理器中之複數個處理器。所述複數個訊息節點中之一特定訊息節點經組態以接收包含一酬載及路由資訊之第一訊息,且基於所述路由資訊及所述多處理器之操作資訊而選擇所述複數個訊息節點中之一不同訊息節點。所述特定訊息節點亦經組態以基於所述不同訊息節點而修改所述第一訊息之所述路由資訊以生成一第二訊息且將所述第二訊息轉遞至所述不同訊息節點。
題為「利用可程式化最佳化之記憶體網路處理器(Memory-Network Processor with Programmable Optimizations)」之發明人為Michael B. Doerr、Carl S. Dobbs、Michael B. Solka、Michael R. Trocino、Kenneth R. Faulkner、Keith M. Bindloss、Sumeer Arya、John Mark Beardslee及David A. Gibson的美國專利第9,430,369號特此以全文引用之方式併入,如同充分且完全闡述於本文中。
題為「具有選擇性地停用以供安全處理之可組態通信的多處理器網狀架構(Multiprocessor fabric having configurable communication that is selectively disabled for secure processing)」之發明人為Michael B. Doerr、Carl S. Dobbs、Michael B. Solka、Michael R. Trocino及David A. Gibson的美國專利第9,424,441號特此以全文引用之方式併入,如同充分且完全闡述於本文中。
轉至圖1,描繪了說明多處理器系統(MPS)之一個實施例的方塊圖。在所說明實施例中,MPS 10包含經耦接以與彼此傳達資料及指令之複數個處理器元件(PE)及複數個資料記憶體路由器(DMR),所述PE及DMR亦可被稱作可動態組態之通信器或可動態組態之通信元件。如本文中所使用,PE亦可被稱作PE節點,且DMR亦可被稱作DMR節點。
圖2展示雙/四處理元件(PE)及其用於資料之本端支援記憶體(SM)之實施例的資料路徑圖200,圖2之左上角展示用於資料之SM(資料RAM) 202的位址生成器201,且右上角展示暫存器檔案203及用於資料記憶體路由器(DMR)之一些控制暫存器204。DMR為PE之間的一級互連網路(PIN)中之節點。大型MUX 205用以將不同資料源切換成主要輸入運算元暫存器A 206、B 207及C 208。另一大型MUX 209將運算元資料切換為算術管線DP1及DP0之X及Y輸入。第三大型MUX 212將至資料路徑D之算術管線輸出Z1及Z0切換回至暫存器檔案203或資料RAM 202。資料RAM與鄰近PE共用,且存取衝突由硬體仲裁。管線之控制來自圖3中之指令解碼區塊 300。
參考圖4中之位址生成器400,已包含可程式化算術單元以支援可在位址實際使用之前開始若干操作之複雜位址計算。圖4中所展示之位址生成器包含三個整數加法單元(AGU0、AGU1及AGU2)、通用整數ALU(GALU)及用於「重複H/W及自動增量器」之盒。暫存器支援具有至多八個具有獨立基數及分散值之索引的巢套迴路。額外通用暫存器支援GALU及重複單元。輸出多工器支援將任何計算位址路由至資料RAM之A、B或D位址埠。
指令之條件執行由圖2之中心處所展示的執行暫存器及述詞旗標216支援。進行指令執行取決於執行狀態,且述詞為先前技術。若每次在特定數目個時脈週期之後完成所有指令,則條件執行有可能並非益處。但在許多情況下,關鍵指令可在較少時脈週期內完成,從而提供下一指令需要或多個指令需要之結果。若此等後續指令被調節為等待狀態位元,則其可在彼等情況下較早開始。述詞為可由條件指令更通常使用之若干位元,其不僅可用於等待且亦可用於選擇及分支。一些指令亦用以設置/清除述詞值。
在各種實施例中,PE可支援互混兩種類型之指令(64位元及128位元)之程式。較短指令支援如下文在圖5之左側展示的組合語言程式化模型。此適用於支援舊有程式碼及較簡單編譯器。較長128位元指令支援圖5之右側展示的「HyperOp」程式化模型。需要較長指令來更精確地控制雙資料路徑硬體且使其較高效地用於信號處理,從而提高給定功率耗散(Pdiss)之效能,然而,程式化需要較複雜。
在PE架構圖2中,每一管線內之操作之詳細排程由程式編譯定義(相比於其他架構中之硬體輔助排程)。然而,PE指令經設計以用於條件執行,其中執行條件取決於執行狀態及述詞之暫存值。在一些情況下,存在成對出現之六個述詞,其中兩對在每一資料路徑中,且一對在位址生成器中。單一條件指令可存取單對述詞,但對於較多指令,可存取所有述詞。在一些實施例中,條件執行可用以最佳化雙管線或多處理器IC上下文中之PE效能。在各種實施例中,基於每一應用程式之演算法流程結構細節,條件執行可改良平均速度/功率比率(亦被稱作「速度/Pdiss比率」)。
在各種實施例中,包含於圖1之實施例中之PE可包含以下特徵: ˙ 兩個資料路徑,其各自能夠(每週期): ○  一個/兩個16×16乘法或一個32×16乘法 ○  一個/兩個16b加法/減法或一個32b加法/減法 ○  40b桶移位 ○  32b邏輯運算 ˙ 40b累加,兩個40b累加器 ○  資料路徑可一起執行(每週期): ○  一個32×32乘法或乘法累加 ˙ 一個32b浮點加法/減法/乘法 ○  三個位址生成單元(AGU): ○  三個負載:srcA、srcB、srcC ○  兩個負載及一個儲存體:srcA、srcB、dstD ○  八個基底暫存器及八個索引暫存器 ˙ GP暫存器檔案 ○  32×16b暫存器,可作為16×32b暫存器或8×64b暫存器存取 ˙ 指令解碼: ○  64b習知組合指令 ○  128b HyperOp指令 ○  IM對任何64b對準提供128b/週期 ˙ 重複迴路硬體 ○  零額外負擔循環 ○  支援三種巢套層級,使用三個一級索引暫存器 ○  四個二級基底/索引暫存器之自動遞增 ˙ 迴路緩衝區 ○  在內部迴路[s]期間降低指令提取功率
存在建置至設計中之重複迴路硬體以提供程式碼之小部分之迭代。此硬體可包含索引計數器、遞增/遞減邏輯、完成測試及分支功能,其相比於軟體指令執行更高效地進行此等「額外負擔」功能。恰當地完成此硬體移除指令週期以執行額外負擔功能。可使用直接地程式化執行循環之硬體狀態機的REPEAT指令來提供用於至多三個層級之巢套的零額外負擔循環,而無用於額外負擔功能之軟體指令。自動地管理索引,使得在迴路內通常不需要額外指令來管理運算元之位址計算。此允許存取及管理多個陣列而無需迴路中之額外指令額外負擔,從而節省功率且提供較佳效能。在各種實施例中,重複迴路硬體可包含: ˙ 八個基底暫存器B0..B7 ○  定址模式中之B0產生值零 ○  B0用作堆疊指標(SP相對定址模式) ˙ 八個索引暫存器I0..I7 ○  定址模式中之I0產生值零 ○  I0可用作其他AGU算術之臨時暫存器(此在寄存器映圖中命名為GR0-而非I0) ˙ 七個分散暫存器S1..S7 ○  Sn與In或Bn一起使用 ˙ 用於3個層級之重複迴路的硬體支援 ○  主迴路索引為I1、I2、I3 ˙ 用於二級索引之四個額外增量器或基底暫存器 ○  索引暫存器I4..I7 ○  基底暫存器B4..B7 ○  由分散暫存器S4..S7遞增 ○  起始位址/臨時暫存器T4..T7
由REPEAT指令控制重複迴路: ˙ REPEAT類似於先前之HyperX一代,但具有以下改良: ˙ 主迴路索引I1、I2、I3 ˙ 選擇在迴路結束時遞增之以下至多4個基底/索引暫存器的選項:I4/B4、I5/B5、I6/B6、I7/B7。 ˙ 在定義迴路指令之標籤之前,將重複迴路資訊載入至迴路暫存器中。
重複緩衝區為用於保持包括重複迴路之指令的指令FIFO。目標為在程式碼之最耗時部分期間降低指令提取功率消耗。將指令分配至緩衝區係在編譯時間由HyperX工具判定,而非留給使用者判定。此處僅為了向使用者提供基本理解而描述。重複緩衝區之主要特徵可包含: ˙ 指令組由REPEAT指令及其標籤判定。 ˙ 重複緩衝區使用係在編譯時間判定且在REPEAT指令中由旗標指示。 ˙ 出於效能及功率原因,每一重複迴路之第一指令始終被載入至重複緩衝區中。 ˙ 緩衝區可保持64b或128b指令。 ˙ 可用最多12至64b項目。兩個項目用於128b指令。 ˙ 整個迴路必須適合於緩衝區,以使其用於除緩衝迴路之第一指令以外的任何操作。
一級索引(I1至I3)及相關聯之其他控制暫存器由重複硬體使用以控制迴路操作。除了一級硬體之外,亦存在另一組暫存器,其可由重複硬體自動地管理以供AGU進行額外位址計算。此等額外暫存器為: ˙ B4-B7 -四個額外BASE暫存器。 ˙ I4-I7 -四個額外INDEX暫存器。 ˙ S4-S7 -四個額外STRIDE暫存器。 ˙ T4-T7 -用以初始化BASE或INDEX暫存器之四個額外暫存器。
存在可用於對此等暫存器執行加法之四個額外加法器。此等加法器可由指令(INIT及INCR)或由REPEAT指令之自動遞增特徵及硬體控制。藉由使用本文件中別處所描述之AUTOINC暫存器,每一一級REPEAT操作可經繫結以同樣對一或多個二級INDEX或BASE暫存器執行位址加法。
每一加法器可用於將給定STRIDE(S4至S7)添加至相同編號之BASE(B4至B7)或經由用於任何一級索引(I1至I3)之迴路將相同編號之INDEX(I4至I7)添加至每一迭代。另外,每當迴路指示之頂部致使一級索引載入有起始值時,所指示之AUTOINC BASE或INDEX將載入有類似的以T編號之暫存器(T4至T7)。此允許存取及管理多個陣列而無需迴路中之額外指令額外負擔,從而節省功率且提供較佳效能。
在各種實施例中,條件執行可基於述詞旗標。此等旗標可包含: ˙ P0至P3: ○  由DP測試指令設定 ○  根據DP時序設定 ˙ GP0及GP1: ○  由AGU測試指令設定(實例展示於圖6中) ○  根據AGU時序設定
使用執行以下操作之TEST類別之指令來設定述詞旗標: ˙ 執行TEST操作 ˙ 檢查結果條件 ˙ 設定所選擇之述詞旗標
表1-AGU測試指令
測試 操作 測試 條件 指令 描述
位元比較    EQ、NE GTCMPB bit tcond grA grB GPn 將grA[bit] 與grB[bit]進行位元比較,測試 條件,將GPn設定成 boolean TRUE/FALSE
算術 比較    LT、LE、GT、 GE、EQ、NE    GTCMP tcond grA grB GPn 將 grA與grB進行算術比較,測試 條件,將GPn設定成 boolean TRUE/FALSE
邏輯AND ZERO、 NONZERO、 ALLONES    GTAND tcond grA grB GPn 將grA與grB進行邏輯AND,測試條件, 將GPn設定成boolean TRUE/FALSE
邏輯XOR    ZERO、 NONZERO、 ALLONES GTXOR tcond grA grB GPn 將grA與grB進行邏輯XOR,測試條件, 將GPn設定成boolean TRUE/FALSE
表2-DP測試指令
測試 操作 測試 條件 指令 描述
位元比較 EQ、NE TCMPB bit tcond srcA srcB Pn 將srcA [bit]與srcB [bit]進行位元比較,測試條件,將Pn設定成boolean TRUE/FALSE
算術比較 LT、LE、GT、GE、EQ、NE TCMP tcond srcA srcB Pn 將 srcA與srcB進行算術比較,測試條件,將Pn設定成boolean TRUE/FALSE
邏輯AND ZERO、NONZERO、ALLONES TAND tcond srcA srcB Pn 將srcA 與srcB進行邏輯AND,測試條件, 將Pn設定成boolean TRUE/FALSE
邏輯XOR ZERO、NONZERO、ALLONES TXOR tcond srcA srcB Pn 將srcA與srcB進行邏輯XOR,測試條件, 將Pn設定成boolean TRUE/FALSE
範圍 在範圍內 TRANGE srcA srcB Pn 測試srcA是否在範圍內: srcB.L <= srcA <=srcB.H , 將Pn設定成Boolean TRUE/FALSE
條件指令指定對一對述詞旗標之測試。例如: ˙ GP0, GP1 --由AGU指令使用 ˙ P0, P1 --由DP指令使用,通常在DP0中 ˙ P2, P3 --由DP指令使用,通常在DP1中
圖6中說明測試述詞旗標之實例。另外,圖7中說明DP條件指令、AGU條件指令及程式流程指令。
圖8中說明條件區塊指令。8圖中所說明之指令之描述為實際操作之簡化版本。STARTIF、ELSE、ENDIF指令係可巢套的;因此存在保持巢套條件狀態之條件堆疊。STARTIF將新的條件狀態推送至條件堆疊上,ELSE切換當前條件狀態(堆疊之頂部),ENDIF彈出條件堆疊。當前條件狀態可能禁止STARTIF、ELSE及ENDIF之操作。
可以各種方式執行Hyper-Op。表3中說明了hyper-op執行之實例。
表3 - Hyper-Op執行
條件運算 述詞旗標 HyperOp 語法
無條件地執行所有槽    { |A| slotA; |B| slotB; |C| slotC; |DP0| slotDP0; |DP1| slotDP1; } { |A| slotA; |B| slotB; |DP0| slotDP0; |DP1| slotDP1; |D| slotD; } { |A| slotA; |B| slotB; |G| slotG; |DP0| slotDP0; |DP1| slotDP1; } { |A| slotA; |G| slotG; |DP0| slotDP0; |DP1| slotDP1; |D| slotD; } { |A| slotA; |G| slotG; |C| slotC; |DP0| slotDP0; |DP1| slotDP1; }
根據單一指定條件cond 有條件地執行所選擇之槽。對應於以下各者之槽的選擇控制:AG0、AG1、AG2。在獨立條件cond0cond1 之情況下,無條件地執行DP槽,但DP槽可執行CMOV指令。 僅在無slotG指令時可用。 cond: GP0,GP1 { |A(cond)| slotA; |B(cond)| slotB; |C(cond)| slotC; |DP0| slotDP0; |DP1| slotDP1; }   
根據單一指定條件cond 有條件地執行所選擇之槽。對應於以下各者之槽的選擇控制:AG0、AG1、AG2。在獨立條件cond0cond1 之情況下,無條件地執行DP槽,但DP槽可執行CMOV指令。 僅在無slotG指令時可用。 cond: P0,P1 { |A(cond)| slotA; |B| slotB; |C| slotC; |DP0| slotDP0; |DP1| slotDP1; } { |A(cond)| slotA; |B| slotB; |DP0| slotDP0; |DP1| slotDP1; |D(cond)| slotD; } { |A(cond)| slotA; |C| slotC; |DP0| slotDP0; |DP1| slotDP1; |D(cond)| slotD; }
根據單一指定條件cond 有條件地執行所選擇之槽。對應於以下各者之槽的選擇控制:AG0、AG1、AG2。在獨立條件cond0cond1 之情況下,無條件地執行DP槽,但DP槽可執行CMOV指令。 僅在無slotG指令時可用。 cond: P2,P3 { |A(cond)| slotA; |B| slotB; |C| slotC; |DP0| slotDP0; |DP1| slotDP1; } { |A(cond)| slotA; |B| slotB; |DP0| slotDP0; |DP1| slotDP1; |D(cond)| slotD; } { |A(cond)| slotA; |C| slotC; |DP0| slotDP0; |DP1| slotDP1; |D(cond)| slotD; }
在用於DP0之獨立條件cond0 及用於DP1之獨立條件cond1 之情況下,有條件地執行DP槽中之任何DP指令。無條件地執行所有其他槽。 僅在無slotG指令時可用。 cond0: P0,P1 cond1: P2,P3 { |A| slotA; |B| slotB; |C| slotC; |DP0(cond0)| slotDP0; |DP1(cond1)| slotDP1; } { |A| slotA; |B| slotB; |DP0(cond0)| slotDP0; |DP1(cond1)| slotDP1; |D| slotD; } { |A| slotA; |C| slotB; |DP0(cond0)| slotDP0; |DP1(cond1)| slotDP1; |D| slotD; }
GPn在下一週期就緒,因此若使用GTEST指令來設定此等位元,則不需要分支預測。然而,若GPn位元由MOV自通用暫存器寫入,則其將被延遲且正常分支預測被執行。Pn在五個週期後就緒,因此需要分支預測。錯誤預測懲罰為5-n個週期,其中n為測試指令與分支之間的指令週期數。若測試指令可在程式碼中向前移動,則n可增大且錯誤預測懲罰可減少,有可能減少到零(0)個週期。
由於述詞係使用顯式指令來計算以進行設定且未被其他指令修改,因此通常有可能排程程式碼以大大減少與錯誤預測分支相關聯之任何懲罰。可使分支預測為靜態的,且在編譯時基於分支概率之行業標準試探法予以判定。
Hyper-Op可允許編碼指令,其中資料路徑之每一各別部分由指令編碼之部分控制。此允許更直接地控制硬體之並行性。128位元Hyper-Op格式允許表4中所描繪之並行性。
表4 - Hyper-Op並行性
cond slotA slotB slotC slotG slotDP0 slotDP1 slotD
X X X X    X X   
X X X       X X X
X X    X    X X X
   X X    X X X   
   X       X X X X
   X    X X X X   
存在關於HyperOp指令可在DP0及DP1中並行執行之限制。若兩個HyperOp指令具有相同潛時,則其可並行執行。根據定義,DP0及DP1槽可始終並行執行相同指令(等效於SIMD)。存在若干例外。當在此等計算中使用來自兩個資料路徑之硬體時,僅單一FP指令可在兩個DP槽中運行。應注意,雖然支援執行相同指令之SIMD形式,但使用模型在允許具有相同潛時之任何兩個指令並行執行時靈活得多。
位址指令在FD管線階段期間發生,花費1個週期,且結果可供下一週期中之所有載入/儲存指令使用。在各種實施例中,自動遞增及重複包含重新載入以減少額外負擔。
每一DMR可具有直接記憶體存取(DMA)引擎以同時支援多點源及多點目的地。此外,可俘獲每一DMA引擎之完整狀態且將其保存於記憶體中;可稍後擷取此狀態資料以重新開始其被中斷之DMA操作。節省DMA組態之狀態的能力需要PE讀取至多11個DMA暫存器以便獲得DMA之整個狀態。許多此等暫存器為曝露於外部存取以用於俘獲狀態之目的的內部DMA暫存器。
為了節省暫存器空間,DMA可將其狀態以稱為描述符之緊湊形式保存至記憶體。PE將指定此描述符之起始位置,且DMA及經修改之推送引擎可將暫存器資料寫入至在指定記憶體位址處起始之記憶體。推送引擎為DMA引擎之一部分,其用於將路由訊息自一個目的地DMR擴展至第二目的地DMR。
推送引擎已經具有對DMA中之每一暫存器進行單步調試(step through)以對其程式化的狀態機。此相同機制亦可用於讀取暫存器。接著需要將讀取資料引導至鄰近的埠內模組中。關鍵部分為將任何DMA寫入停頓繫結至推送引擎。此可藉由在推送引擎之忙碌輸入信號上閘控DMA停頓來完成。
可使用DMA喚醒向PE用信號表示已保存描述符。彼時,PE可自由調換任務。在新任務完成後,PE可指向保存之描述符,且DMA過程將恢復。應注意,需要在任務調換之間恰當地組態埠內或埠外之路由器。
累加器之儲存體具有視情況選用之向右預定移位量的後移。在各種實施例中,以下移位量為: ˙ 1:用於平均 ˙ 8: ˙ 16:用於儲存ACCH=ACC[31:16] ˙ 15:
此等值儲存於被用作間接移位量之三個移位欄位中。所述三個欄位在HyperOp語法中表示為SHR1、SHR2及SHR3,且係指PE_CONFIG1暫存器中之移位值欄位SHIFT_CTL1-3。
存在兩種類型之累加器對:來自每一DP之一個累加器(ACC2_ACC0、ACC2_ACC1、ACC3_ACC0、ACC3_ACC1),及兩半之累加器,其被視為SIMD 16b資料(ACC0H_ACC0L、ACC1H_ACC1L、ACC2H_ACC2L、ACC3H_ACC3L)。累加器對後移之儲存體對累加器對之每一部分執行獨立移位,儘管位元位置之數目相同。在以下描述中,使用「tmp」標識來嘗試闡明語義,且並非實際硬體暫存器。
表5-累加器對
指令 運算元 語義 描述
ST16[>>shr] ACCn, dstD tmp[39:0] = ACCn[39:0] >> shr dstD[15:0] = tmp[15:0] 將ACCn右移shr且將 經移位ACCn之LS16b儲存至dstD。 ACCn={ACC0..ACC3}
DST16[>>shr] ACCPn、dstD tmp0[39:0] = ACCPn[39:0] >> shr tmp1[39:0] = ACCPn’[39:0] >> shr dstD[15:0] = tmp0[15:0] dstD[31:16] = tmp1[15:0] 將累加器對ACCPn 之每一累加器右移 shr。將32b(經移位ACC之LS16b:LS16b) 儲存至 dstD。 針對條件(cond)slotD進行獨立的16b寫入 。 Sign_extended. ACCPn={ ACC2_ACC0, ACC2_ACC1, ACC3_ACC0, ACC3_ACC1}
ST32[>>shr] ACCn, dstD tmp[39:0] = ACCn[39:0] >> shr dstD[31:0] = tmp[31:0] 將ACCn右移shr且將 經移位ACCn之LS32b儲存至dstD。 ACCn={ACC0..ACC3}. Sign_extended
DSTS32[>>shr] ACCPn、dstD tmp0[39:0] = ACCPn[39:0] >> shr tmp1[39:0] = ACCPn’[39:0] >> shr dstD[31:0] = tmp0[31:0] dstD[63:32] = tmp1[31:0] 將累加器對ACCPn 之每一累加器右移 shr。將64b(經移位ACC之LS32b:LS32b) 儲存至dstD。dstD[63:32] -> DMRn[ addr[13:0] ] dstD[31:0] -> DMRn’[ addr[13:0] ] 針對cond slotD進行獨立的32b寫入 。 Sign_extended ACCPn={ ACC2_ACC0, ACC2_ACC1, ACC3_ACC0, ACC3_ACC1}
STS64[>>shr] ACCn, dstD dstD[63:0] = sign_ext(ACCn[39:0] >> shr) 將累加器ACCn右移 shr。將40b ACC作為64b(零 ext)儲存至dstD。 Sign_extended dstD[63:32] -> DMRn[ addr[13:0] ] dstD[31:0] -> DMRn’[ addr[13:0] ] ACCn={ACC0..ACC3}
註釋:>>shr語法使用名稱SHR1、SHR2及SHR3來指向 PE_CONFiG1中之移位欄位。
亦可在分離儲存體及負載中完成移位。較多移位選項通常會增加硬體功率耗散(Pdiss)。在各種實施例中,可藉由針對給定Pdiss預算選擇最需要的移位選項來導引移位硬體設計。可藉由分析應用程式碼及PE架構來判定最需要的移位選項。在一些實施例中,舉例而言,在記憶體被字定址而非位元組定址之情況下,最需要的是將位元組對準至字邊界/自字邊界對準之移位。
在一些實施例中,可使用額外的輔助計算單元來提高效能。表6中描繪可能的輔助計算單元之清單。
表6-輔助電腦單元
指令 運算元 語義 描述
DIV16U X, Y, Z Z[31:0] = X[15:0] / Y[15:0] 標準劃分-因為 迭代不具有 輸送量1。 16位元數學得到16.16 結果,其中MSW=商,且 LSW=餘數
DIV32U X, Y, Z    Z[31:0] = 商( X[31:0] / Y[31:0] ) 標準劃分-因為 迭代不具有 輸送量1。結果為 32位元商
SQRT16U    X, Z Z[15:0] = square_root(X[15:0]) 16b/32b平方根。 此等返回8.8或16.16 結果,其中高位 元為整數,且低 位元為分數。
SQRT32U    X, Z Z[31:0] = square_root(X[31:0])
HyperOp指令-實現在程式編譯過程中使用靜態排程對雙資料路徑進行個別控制。執行執行緒曝露於編譯器以使其靜態地排程所有操作。相比之下,用於現代GPP架構之編譯器將相關指令一起放入機器程式碼中,但操作排程之精細細節係由(功率消耗)硬體完成。靜態排程節省了相當大的運行時間Pdiss。
在資料傳輸期間,系統中之缺陷可能導致所傳輸信號失真或降級。所傳輸信號之此類失真或降級可能導致資料位元之值在接收器電路處不正確。為了修復此類影響,在一些實施例中,已包含指令以支援前向錯誤校正(FEC)編碼及解碼。FEC可應用於各種數位通信,以及其他領域,諸如數位記錄及自儲存媒體回放。基本想法為獲取任意輸入資料之區塊且以在接收器或回放電子件處啟用位元錯誤校正之方式用額外同位位元對其編碼。資料及同位位元之經編碼區塊被稱為FEC訊框。FEC訊框可進一步由調變器處理,接著傳輸至媒體(有線、無線或儲存媒體)中。
在接收器處,信號由天線或換能器拾取,被放大、解調且由A/D轉換器(ADC)取樣。媒體中之信號可能已獲取干擾、衰落及回音;且接收器可能已添加雜訊。ADC之輸出為一連串數位樣本。存在獲取一連串樣本、獲得同步且將其格式化成FEC訊框的多種方式;但此等方式與FEC計算不相干且此處不再描述。經格式化FEC訊框中之每一位元位置具有可被稱作軟位元之數位值,其在數位系統中由整數之實際位元表示。
FEC解碼為獲取經格式化FEC訊框中之軟位元、計算位元錯誤校正、應用其及輸出經校正FEC訊框的過程。FEC解碼演算法之目標為在知曉同位位元之生成方式的情況下輸出最可能正確的資料訊框。為了使FEC正確地工作,必須將特定FEC解碼方案(用於錯誤校正之同位位元使用)與FEC編碼方案(同位位元生成)匹配。
早期藉由Hamming、BCH及Reed-Solomon程式碼實現了FEC之成功。利用卷積程式碼及卷積程式碼與其他程式碼之串列串連獲得了進一步成功。在解碼方面,目標為在接收到之軟位元具有雜訊引起之錯誤的情況下發現最可能正確的資料區塊。此可在單遍演算法(Viterbi等)或迭代演算法(Turbo等)中達成。
FEC計算涉及取決於來自取樣器之觀測到的值序列而針對二進位位元之值比較兩個選項之可能正確性。可將一系列波動值視為隨機變數,且因此可應用概率數學。主要關注在於在軟位元之值在FEC訊框中的情況下,特定傳輸資料位元為1抑或-1。在關於所傳輸資料進行硬決策之前,可計算大量軟決策。此等軟決策可藉由比較概率來計算,且這樣做且包含同位位元之風行方式為計算條件概率之比率,所述比率被稱作似然比(LR)。LR之對數(LLR)特別受關注,此係因為乘法及除法被變換為加法及減法,在PE中加法及減法將計算得較快速且較不易於過流及欠流。因此,可用以整數儲存之LLR值來計算FEC解碼。
乘積之對數概率總和亦被稱作MAX*運算子。在各種實施例中,MAX*運算子可以類似於運用偏移指令之加法-比較-選擇(ACS)之方式執行。其為指數概率上之對數域數學提供了產品類型運算之總和。符號形式通常寫成:Max*(x0+y0, x1+y1)。
在各種實施例中,PE實施如下功能: Z[15:0] = MAX ( (X[15:0]+Y[15:0]),(X[31:16]+Y[31:16]) ) + TLUoffset
可藉由略微修改運算元以提供適用於加速運算之較高輸送量形式使用來達成乘積指令之雙對數概率總和。此在單一資料路徑中提供兩個結果,形式為Max*(x1+y0, x0+y1)    :  Max*(x0+y0, x1+y1)。
在各種實施例中,PE實施如下功能: Z[31:16] = MAX ( (X[31:16]+Y[15:0]),(X[15:0]+Y[31:16]) ) + TLUoffset Z[15:0] = MAX ( (X[15:0]+Y[15:0]),(X[31:16]+Y[31:16]) ) + TLUoffset
另一形式為MAX*運算,其中每一資料路徑產生32位元,形式如下: Max*(0, x1+y1) - Max*(x1,y1)     :    Max*(0, x0+y0) - Max*(x0,y0)
在各種實施例中,PE實施如下功能: Z[31:16] = MAX (0, (X[31:16]+Y[31:16]) ) + TLUoffset - (MAX (X[31:16],Y[31:16])) + TLUoffset) Z[15:0] = MAX ( 0, (X[15:0]+Y[15:0])) + TLUoffset - (MAX (X[15:0],Y[15:0]) + TLUoffset)
另一指令可在兩個運算元上提供雙MAX*運算,其中值在每一資料路徑中之兩個累加器中。其提供了藉由使用累加器極相似於MAXAC指令那樣而在一大組數字上獲得MAX*結果之快速方法。兩個16位元結果進入兩個累加器中。若使用兩個資料路徑,則當輸入資料完成時,4個累加器需要對彼等值運行MAX*運算以得到最終結果。以符號形式,等式表示為: ACCn+1 = Max*(ACCn+1 , Max*(x1,y1))     :    ACCn = Max*(ACCn , Max*(x0,y0))
可使用下式來達成乘積之對數概率總和之累加形式的兩倍: ACCn+1 = Max*( ACCn+1 , x0+y0)    :  ACCn = Max*( ACCn ,x1+y1)
應注意,LP指令之額外硬體的自然結果將「0」索引資料調換至高ACC,且將「1」索引資料調換至低ACC。若此可在資料路徑中輕鬆調換,則將為較佳的。在各種實施例中,PE實施如下功能: ACCn+1 = MAX (ACCn+1 , (X[15:0]+Y[15:0]) ) + TLUoffset ACCn = MAX (ACCn , (X[31:16]+Y[31:16]) ) + TLUoffset
亦有可能生成對數域中之商之雙倍總和。以類似於先前已展示之方式的方式,使用減法而非加法以提供: ACCn+1 = Max*( ACCn+1 , x0-y0)    :  ACCn = Max*( ACCn , x1-y1)
在各種實施例中,PE實施如下功能: ACCn+1 = MAX (ACCn+1 , (X[15:0]-Y[15:0]) ) + TLUoffset ACCn = MAX (ACCn , (X[31:16]-Y[31:16]) ) + TLUoffset
為了實施上文提及之指令,可使用專用邏輯電路,諸如圖9至圖14中所描繪之專用邏輯電路。在一些情況下,可基於指令之類型選擇性地啟用邏輯電路,藉此允許使用最少量之邏輯電路來執行多個指令。
MPS之一級互連網路(PIN)經設計以用於在PE上運行且與晶片I/O埠通信之應用程式內及之間的高頻寬、低潛時資料輸送。互連網路(IN)可大體描述為在其間具有連接鏈路之一組節點。大多數PIN在一個階段中無法完全點對點,因為其需要過多導線。相反,其為多級的,在網路之每一節點處具有路由器,且節點由鏈路彼此連接。可經由PIN路由訊息,所述PIN強制執行起始、暫停及自源節點至目的地節點遞送訊息的規則。若訊息保持開放,則其可無限地用作資料管。然而,由於存在多個階段,現有訊息可藉由佔用新訊息所指定之鏈路或目的地來阻止新訊息之設置,因此無法保證訊息遞送。文獻中呈現了針對此之一些緩解措施,諸如動態切入,及「跳過」擁擠之長路由。然而,吾人之方法為添加互連層,每一層具有另一組鏈路。藉由每一額外層,擴展PIN節點路由器以允許訊息自一個層跨至另一層。
在大型MPS中,需要管理系統而不影響PIN之操作效率。此導致二級互連網路(SIN)之開發,在一些實施例中,二級互連網路可具有比PIN更低之頻寬,但可保證訊息遞送。此類互連網路展示於圖15中。如所說明,訊息匯流排1500包含以固定連接性方式彼此耦接之多個訊息匯流排節點1501。訊息匯流排提供適度頻寬、可變潛時、有保證之到達晶片內之每一可存取暫存器及記憶體位置(包含PE及DMR位置兩者)的遞送方法以及I/O控制器,諸如I/O控制器1502。
訊息匯流排可用以在核心陣列網狀架構外部啟動、除錯及載入資料,以及經由MPS裝置提供對幾乎所有可定址位置之存取。舉例而言,訊息匯流排可存取所有PE/DMR資料及指令記憶體位置、內部PE暫存器、DMR暫存器(包含暫存器匯流排位置)及附接至I/O匯流排之I/O周邊裝置。
在一些實施例中,訊息匯流排可為多個同時主控器提供支援,所述主控器諸如PE、開發存取埠(DAP)1503、啟動控制1504及I/O處理器。基於源及目的地之相對定位而使用自動路由在訊息匯流排上路由訊息。以類似於請求之方式使用相對位置自動地回覆路由。錯誤回覆路由利用至在訊息中維持之源的運行位置。
在一些實施例中,訊息匯流排可包括多於一個獨立訊息網狀架構。在獨立網狀架構上之訊息嘗試存取同一目的地之情況下會出現此等情況;自動仲裁適用於此情形。仲裁結果可藉由諸如優先級組態之簡單方案予以判定。訊息匯流排優先級組態可允許建立兩個獨特優先級(最低或最高)以存取DMR位址,其中所有PE位址存取處於PE中之最低優先級。
訊息匯流排可支援多端點訊息組以准許陣列之子集對作出單一訊息回應。可在單一節點上設定多個組成員資格。在各種實施例中,可使用廣播能力來到達所有節點,且許多獨立的組可用於分配。
在各種實施例中,訊息匯流排可允許多晶片操作。若實施多晶粒結構,則目的地之相對位址可在晶片之間橋接。在一些情況下,訊息格式可准許X及Y方向上至多256個MBN節點。在其他實施例中,可擴展訊息以支援額外節點。藉由採用使用表(例如,表1807)之轉送技術,可支援任何合適數目個訊息節點。
訊息匯流排能夠允許裝置內之任何處理器到達裝置中之每一可定址位置。此能力實現了多種可能性,包含在處理器之間傳遞訊息,隨著演算法發展而更新值表,管理遠端I/O控制器之行為,收集關於操作之統計資料,管理單元之安全性,及處理器之間的非時間關鍵資訊之一般通信。
應注意,訊息匯流排可能缺少使得不期望用作PIN路由網狀架構之額外層的某些特徵。首先,頻寬低得多。舉例而言,在一些實施中,訊息匯流排可比PIN慢達10倍,而在其他實施中,訊息匯流排可僅比PIN較兩倍。其次,資料遞送之潛時變化極大,即使對於相同源及目的地對之間的訊息亦是如此。不存在程式化路由設置及拆除之概念,其中在網狀架構中為訊息設置已知長度路由,且每次使用路由時,橫穿相同導線以連接兩個端點,從而導致資料遞送之可預測潛時。相對較短的訊息利用訊息匯流排自源導向目的地,其中路由係由網狀架構硬體判定。若訊息在沿所述路線之一些點處被阻止,則其將等待其他阻止訊息完成,接著其將繼續。在網狀架構上一次僅一個訊息(且目的地處無優先級延遲)之情況下,由訊息進行之資料遞送可展示可預測潛時。然而,網狀架構上之額外訊息訊務可中斷資料遞送,且可改變由每一後續訊息採用之路由。因此,訊息匯流排可能不適於分佈同步訊息,此係因為無法保證到達時間。
訊息匯流排適用於較低頻寬的短訊息至/自MPS中之任何目的地之功率高效、有保證的遞送。此等將在PIN網狀架構中消耗相當多的資源,可能在極少資料通過之情況下長時間繫結鏈路,或者需要不斷設置及拆除鏈路以防止其阻塞系統。對於僅靠近I/O埠之彼等處理器可控制埠及附接至其之任何周邊裝置的MPS,訊息匯流排亦簡化晶片I/O之遠端處理器管理。
雖然不太適用於時序關鍵應用程式,但訊息匯流排仍具有可用的顯著效能。匯流排自身每時脈移動一字,且所述時脈可與可具有1500 MHz之目標頻率的功能性核心時脈相同。此導致節點之間1500M字/秒之有效移動速率。由於訊息匯流排經設計以在匯流排上推送資料及位址,接著儘可能快地將匯流排釋放至其他訊息,因此對於遞送至暫存器之每一字,需要固有的額外負擔以定義路由,識別應自何處讀取或寫入字,以及如何將資料或狀態返回至進行請求之節點。此等非資料字降低單一異動之匯流排之輸送量。為了限制訊息結構之額外負擔的影響,可在一個訊息中傳送任意數目個字,唯一限制為其必須與單一起始位址相鄰。
在正常條件下,對MPS裝置內之任何可正常定址位置之存取係可用的。此意謂在被存取之特定位址之參數內,可寫入或讀取具有正常模式位址任何暫存器、記憶體位置或周邊裝置。對於一些PE內部暫存器,可在PE可操作時讀取PE之內容,然而,所含有之值表示進行讀取時之快照,且僅在請求值時更新。另外,在生成請求之間存在時間間隔,值由訊息匯流排自PE或DMR讀取,且結果被遞送回至請求方,此取決於系統,且訊息匯流排載入可表示結果之顯著等待時間。可能過度等待存取幾乎每一時脈之操作所需的某些PE內部暫存器,從而有效地停頓請求,直至PE在斷點處停止。程式碼中有可能出現間隙,從而允許讀取此等暫存器,但PE需要許多暫存器才能操作,且訊息匯流排訊息嘗試以預設低優先級讀取彼等暫存器通常會導致訊息長期停頓。在DMR內,存取之優先級可程式化,因此可使請求等待直至彼位址區域無其他請求待處理,或者立即存取所述位址,且阻止對存取相同區域之所有其他嘗試。
正常模式位址位置可包含: ˙ 對任何DMR資料記憶體位置之讀取/寫入存取 ˙ 對任何DMR記憶體映射暫存器之讀取/寫入存取 ˙ 對任何PE指令記憶體位置之讀取/寫入存取 ˙ 對PE狀態及控制暫存器之讀取/寫入存取 ˙ 對時脈控制暫存器之讀取/寫入存取 ˙ 斷點控制,硬體中斷插入除外 ˙ PE喚醒控制 ˙ 同位控制 ˙ PE訊息傳遞 ˙ PE程式設計師寄存器存取 ˙ IO匯流排上之記憶體及周邊裝置
在程式執行時,在指令記憶體上操作時必須非常小心。有可能將指令之區塊寫入至記憶體,且歸因於當前運行程式之執行,可執行新程式碼之一部分,而非首先完全替換程式碼之區塊,從而導致不可預測的操作。MPS可組態以在每次寫入至記憶體時包含同位位元且檢查每一讀取操作上之同位,從而在偵測到錯誤之情況下分支至故障條件。然而,同位檢查比不這樣做時消耗更多功率。MPS中之同位檢查可視為待用於極端環境之操作模式,此意謂利用或不利用同位為記憶體之不同操作模式,且在運行使用彼記憶體之應用程式時,此等模式之間的改變並不合理。
在所有條件下,對時脈控制之存取係可能的,然而,並非所有時間皆適合更改時脈暫存器之狀態。雖然系統為可操作的,尤其當在多個處理器之間共用之資料集上操作時,時脈控制之改變將在本端進行,而不考慮亦可經存取以更新彼等位置中之時脈控制的其他節點。若嘗試在運行演算法時更改時脈組態,則存取資料之時序有可能丟失。
當PE在斷點處停止時,額外存取可用於訊息匯流排。當PE暫停時,程式計數器已停止,且可更新硬體斷點。所有正常模式能力皆可用,其中硬體斷點插入能力另外可用。
歸因於斷點之實施,在系統處於操作中時改變值可能導致不可預測結果,包含錯過之中斷及無意中斷。因此,在程式執行停止時,斷點之改變將最可靠地生效。
當PE在斷點處停止時,內部暫存器存取時間將得以改良,且返回值對於停止之處理器將保持準確。PE暫存器存取之仲裁在未更改時不具有活動的較高優先級請求器,從而實現更快地由除錯系統存取至PE內部狀態暫存器。類似地,在DMR上,在DMA操作完成之後不存在位址之其他競爭存取,且甚至立刻伺服最低優先級請求。
在啟動期間,訊息匯流排可用於首次載入處理器,組態時脈及安全性,且將PE自重設釋放以開始操作。對於啟動操作,預期訊息匯流排上之大多數異動將來源於啟動處理器,且在整個裝置中具有目的地。預期長叢發操作將普遍存在,從而減少歸因於位址導致之程式載入的額外負擔。
稍後使用啟動控制器以實施動態單元,其中有可能將新單元載入至已經運行之系統中。如本文中所使用及定義,單元為指派至一或多個PE及一或多個DMR之應用程式的一部分。應注意,在單元中包含至少一個DMR,以充當單元中所包含之相關PE的指令記憶體。在此情況下,在訊息匯流排上有可能存在較多活動性,但同樣,已經在裝置之周邊處之仲裁經簡化以將新單元傳輸至陣列中。藉由利用較大區塊傳送,可最小化載入動態單元之時間。不同於初始載入,在載入替換單元時,有可能在一些點處存在競爭。當實施動態單元載入時,應考慮叢發之總長度,此係因為其可能會長時間消耗路徑,且可能導致其他訊息之遞送延遲。
系統內除錯器之一個常見問題為除錯設施與系統之功能性操作的潛在互動。在某些情況下,當除錯開始時,其可能導致功能性系統之行為發生變化,或者更成問題的是在除錯運行時校正或改變錯誤。雖然任何必須仲裁之存取可能從未完全移除功能性系統與並行除錯設施之間的互動,但若將除錯操作映射至單獨訊息匯流排執行個體,則此可移除除了最資料存取仲裁之外的所有交互動。經由將除錯仔細選為最低優先級,除錯將僅在未另外使用時與系統互動,且不會擾亂自功能性系統生成之功能性存取。在各種實施例中,優先級可在低與高之間改變。
當處理器在斷點處時,來源於PE之請求未被遞送至DMR。此並不意謂DMR中不存在請求,因為在PE停止時,可繼續處理DMA請求。此導致分離狀態及DMR狀態,在所述分離狀態中,PE請求被立即伺服,因為將不存在其他資料請求,在所述DMR狀態中,DMA異動將繼續在除錯請求之前。邏輯上,此維持了除錯不應干擾操作及非斷點處理器之想法。
在深入瞭解匯流排自身之細節之前,首先理解訊息匯流排上下文中訊息的含義係有幫助的。在最一般意義上,訊息需要將訊息遞送至預期目的地之方式、待遞送之資料及將回應返回至起始點之方式。詳細言之,存在訊息匯流排經由其網路傳遞之若干獨特不同訊息,所述訊息現在將被覆蓋。
藉由程式化訊息匯流排節點內之組態暫存器來建構及發送訊息。針對訊息匯流排之兩個通道(A及B)存在兩組此等暫存器。下文論述此等暫存器之程式化。存在若干可用的訊息格式。此等者可分類如下: ˙ 點對點訊息-允許使用者自任何其他單一節點讀取或寫入資訊。 ˙ 多點訊息-允許用單一訊息讀取或寫入至一組端點節點。 ˙ 回覆訊息-並非由用戶直接生成。由訊息匯流排使用以提供其他訊息之應答。 ˙ 安全組態訊息-用以組態晶片之安全性的訊息形式。
為了發送訊息,程式必須將訊息之基本組件程式化至組態暫存器中,且接著用信號表示待發送之訊息。程式化組件列於圖16中。
STATUS暫存器用以觀測所發送之訊息之狀態。除了直接地控制所發送之訊息的此等暫存器之外,亦存在稍後描述之若干其他組態暫存器,其用以控制訊息匯流排系統之其他態樣。應注意,在發送下一訊息之前,僅需要更新需要修改以定義新訊息之暫存器。舉例而言,為了將同一訊息發送至五個位置,僅更新DELTA_OFFSET中之路由資訊且使用GEN_MSG重新發送訊息。下文將更全面地描述訊息格式。
可由任何主控器使用以到達晶片中之任何位置的最基本訊息為點對點訊息。顧名思義,此訊息以單一位置為目標,且自單一位置發出。在兩個節點之間傳遞之資訊僅在訊息匯流排外部由兩個節點可見,此係因為所有中間位置無法窺探傳遞資料,在此方面,所有點對點訊息為安全的。多種選項可用於建構訊息,此平衡了此訊息類型之能力及額外負擔。
受控器一次僅可接收及處理一個訊息,因此不需要知曉哪一節點正請求資料存取,僅需要返回至主控器之路由,使得回覆可通過。請求訊息之部分包含回應之返回路徑,此為完成點對點訊息之往返所必需的。
點對點訊息可為讀取或寫入請求,其中讀取請求生成含有所請求讀取資料之回覆訊息,且寫入請求生成指示執行寫入成功或失敗之回應。與讀取或寫入請求訊息平衡能力及效能極相似的是,回覆訊息亦最小化額外負擔,但代價為損失主控器之一定靈活性。
對於每一點對點讀或寫入訊息存在一個回覆訊息,且在包含多個資料字之情況下,將包含多個回覆字,以便發送出之每一位址具有返回之回覆,所述回覆為寫入狀態或讀取資料。訊息本體中之資料將以與所發送請求相同之次序返回。為了確保資料在返回請求節點處時迅速地自匯流排移除,在MBN中程式化儲存回應之位置之位址由於一次僅可儲存一個回覆位置,因此若預期返回多於1個字,則每一MBN一次可具有一個未解決的異動,且使用自動記憶體載入機制。若處理器自節點擷取所有資料,則按處理器需要,許多請求可為未解決的。
對所有多端點回覆使用同一回覆訊息格式,然而,對於此等多端點回覆,將單一回覆字插入至酬載中。舉例而言,在讀取訊息中,若對安全區域嘗試之讀取無效,則所請求位址之值或安全性錯誤控制字。替代地,在寫入訊息中,回覆可包含指示是否執行請求寫入之通過或失敗值。
多端點寫入訊息由多於一個活動節點接收。此訊息適用於單元內之通信,其中可經由訊息匯流排組態位址寫入向單元指示哪些訊息作出反應。安全性可防止寫入發生,且針對整個訊息返回單一寫入狀態而非個別字狀態,因為此可能導致阻塞。回覆位址被記錄為自請求節點偏移之增量,其在經由陣列分佈多播訊息時被計算。預期此將導致許多路徑被用於將回覆訊息返回至主控器,許多路徑不遵循與請求相同的路徑。多端點訊息之情況為廣播訊息,所述廣播訊息一次定址所有節點。
有時,自訊息匯流排節點之集合讀取相同位址的能力亦為適用的。對於此等情況,可使用多端點讀取。操作起作用以使得僅匹配多節點位址之節點會作出回應。如同其他多端點訊息一樣,藉由在至回覆節點之路徑上計算的增量偏移來判定回覆路徑。回覆將遵循回至請求節點之數個路由,所述路由中之許多不同於自源至目的地採用之路徑。亦存在所有節點皆會作出回應且返回一個字之情況。
在每一節點處,維持安全性組態,其描述節點處允許之操作。設定此組態必須為安全動作,且經由選為啟動操作之一部分的IO處理器予以實施。此訊息用以更新安全性組態,且可由系統中之所選擇處理器生成。此訊息之格式係唯一的,且無法經由資料寫入建構,因此僅所識別之安全性處理器可生成此訊息。導致生成安全性組態訊息之基礎安全性決策超出了訊息匯流排之範疇,此係因為唯一的考慮因素為訊息之遞送。未選擇為安全性主控器之節點被禁止發送安全訊息,此與可禁止主控器實施除錯與功能性網路之強制分離極相似,儘管在此情況下僅限制一種類型之訊息而非網路隔離之情況中的所有訊息生成。
訊息匯流排可實施為如圖15中所展示之二維網狀網路。另外,存在並行操作之兩個相同網路,其中重組點位於每一節點內。所展示之每一鏈路由輸入埠及輸出埠兩者構成,對於兩個網路皆為重複的,兩個網路允許同時在節點之同一側上傳輸及接收,在節點之任一側上具有總計至多四個活動的訊息。在網路中之一者的最大用例下,可以利用所有四個輸入埠及四個輸出埠在節點上輸送訊息。當在最大用例操作中時,路由之唯一限制為不准許U形轉彎路由,但可接受至其他三個輸出之路由的任何其他組合。雖然在每一節點處存在兩個網路,但其完全彼此獨立地操作,其中在兩個網路之間不可能進行路由,從而使得有可能在一個網路中發生阻塞而另一網路空閒。
與其他拓樸相比,作為網狀網路之實施有若干優點,最大優點為能夠繞過障礙物路由。由於訊息匯流排為節點之間的動態路由網路,因此在兩個節點之間自已經由其他訊息使用之路由至經斷電以降低總晶片功率消耗之節點的直接路徑上始終有可能遇到堵塞。網狀結構提供到達目的地之選項,在大多數情況下存在兩個邏輯方向,其將訊息移動成更接近端點,此意謂即使更接近端部之一個方向被阻止,另一方向亦通常存在。仍有可能具有不可路由訊息,但此歸因於在所請求端點之間完成不存在路徑,諸如位於斷電區域中之路徑,此為系統故障,未必無法路由訊息。
網狀網路之另一優點為減少了訊息行進距離。對於大量節點,存在若干可能的連接方法、串列鏈、多個迴路、列或行定向之匯流排及網格。在串列鏈中,主要缺陷為訊息必須在兩個點之間行進之距離較長。另外,可共存於網路中之訊息之數目大體減少,此係因為通常僅有一個路徑可用於晶片。串列鏈存取時序可為可變的,且難以設計充分的時序裕量。
大型串列鏈之另一問題為功率,且若節點中之任一者為存取不相關節點所需之路徑的一部分,則無法對任意區域斷電。對單一串列匯流排之改良為數個較小迴路,但此導致需要在迴路之間移動之集中問題,且若在迴路間間連接點處發生衝突,則有可能發生顯著延遲。多個迴路亦持續具有功率最佳化之問題,此係因為整個迴路需要通電或斷電,此導致相當大的功率步長(step)。同時存取之數目增加,但仍受限於資料必須在獨立迴路之間移動。
多匯流排定向之配置具有類似於多迴路構造之問題,即,在各種匯流排段之間移動所需之點最終變成用於總互連網路的抗流點。匯流排配置確實允許以較容易方式一次發送多個訊息,然而,由於需要在不同匯流排段之間進行仲裁之複雜性,在一個匯流排段上獲得訊息變得較不容易。取決於匯流排間互連之位置,此可能迫使裝置之某一區域保持接通,僅僅為了能夠在匯流排段之間移動資料。由於I/O分佈於裝置周邊,因此不存在理想位置以置放匯流排間連接器,此係因為資料可能與裝置之任一側具有相似性。此導致一些佈局相對節能,而其他佈局歸因於需要大量未另外使用之節點接通以能夠與其他匯流排段互連而執行不佳。
網格亦支援並行運行之許多訊息。由於路由不存在共同抗流點,因此許多訊息可同時移動通過網路。除非穿過顯著阻塞之路由被限制以合併且在相同方向上通過單一節點,否則無論何時發送訊息,每一訊息皆可經常前進而不會一直遇到另一訊息。若每一處理器一次支援一個訊息,則並行長持續時間訊息之上限等於系統中之處理器之數目。然而,取決於遞送並行訊息所需之路由,擁擠可能降低實務上限,且將回覆返回至訊息。
由於訊息匯流排結構內之所有節點可充當主控器、受控器或路由之中間點,因此此章節中將大體詳述每一節點之此等基本功能。確切的介面細節可以在各實施例之間變化,其中此描述提供了訊息匯流排節點組件之功能性概述。圖17中說明訊息匯流排節點至系統中之一般介面1700。儘管基礎操作類似,但由於不需要PE鏈路,因此節點附接在IO匯流排處之方式存在差異。
如所說明,訊息匯流排節點1701經組態以接收包含酬載及路由資訊之第一訊息,且基於路由資訊及多處理器之操作資訊而選擇複數個訊息節點中之不同訊息節點。如本文中所使用,操作資訊為與多處理器陣列之過去或當前效能相關的資訊。舉例而言,操作資訊可包含資源可用性、網路效能試探法、用於訊息匯流排之擁擠資訊,及其類似者。在一些情況下,操作資訊可為關於多處理器陣列之效能的當前資訊,而在其他情況下,操作資訊可包含關於多處理器陣列之效能的歷史資訊。應注意,在一些實施例中,訊息匯流排節點可在操作期間自多處理器陣列接收操作資訊。
訊息匯流排節點1701進一步經組態以基於不同訊息節點而修改第一訊息之路由資訊以生成第二訊息,且將第二訊息轉遞至不同訊息節點。如本文中所使用之路由資訊為指定訊息之絕對或相對目的地的資訊。當指定相對目的地時,自起始節點指定節點之數目及各別方向以便判定訊息之目的地。替代地,當指定絕對目的地時,註釋特定節點之標識符被指定為目的地。每一訊息節點可接著判定最佳可能節點以轉遞訊息以便將訊息傳播至指定之絕對目的地。如以下更詳細地描述,路由資訊可包含指定訊息節點之數目及將發送訊息之方向的偏移。
如本文中所使用及描述,訊息為資料集合,其包含酬載(亦即訊息之內容)以及路由資訊。另外,訊息可包含操作資訊或操作資訊之任何合適部分。
可根據各種設計樣式實施訊息匯流排節點(或簡稱為「訊息節點」)。圖18中描繪特定實施例。如所說明,訊息匯流排節點1800包含路由器1801、路由器1802、網路處理器1803、網路處理器1804、仲裁器1805、組態電路1806及表1807。
訊息匯流排節點1800經由仲裁器1805附接至PE及DMR,且在IO匯流排之情況下,仲裁器1805為IO匯流排與訊息匯流排之間的橋接器。存在三個存取目標,其自本端處理器、組態暫存器(位於組態電路1806中)以及網路處理器1803及1804進入訊息匯流排節點1800。另外,網路處理器1803及1804可生成對本端節點之存取,且僅一個存取路徑有可能自訊息匯流排節點1800回至DMR或PE。基於節點之組態、存取之類型、遠端請求處理、本端請求被生成或回覆被儲存,仲裁器1805將網路處理器1803及1804中之一者連接至PE及DMR介面。
由於僅請求生成易於自網路側停頓,因此可立即生成至DMR或PE之所有寫入。在請求讀取之情況下,無論係為了填充寫入請求之資料,抑或回應於遠端存取被處理,仲裁器1805在切換至其他網路處理器之前必須等待一個請求完成。若DMR或PE已停頓請求,則在彼存取經組態為較高優先級之情況下,有可能移除當前請求且切換至其他網路處理器。由於PE或DMR已停頓存取,因此飛行中之資料不會因存取切換至其他處理器而受影響。
仲裁器1805亦經組態以基於所請求之位址而將暫存器匯流排訊務導引至恰當網路處理器或組態暫存器。在遠端存取當前使用組態暫存器之情況下,仲裁器1805亦將在暫存器匯流排介面上產生停頓,因為此為本端節點與遠端存取之間的訊息匯流排節點1800中之唯一競爭點。
網路處理器1804及1805對經附接PE/DMR或IO匯流排與訊息匯流排網路之其餘部分之間的互動負責。網路處理器1803及1804履行三個職責,第一個職責為將請求訊息生成至網路中。第二功能為處理自網路接收到之訊息(包含修改訊息之路由資訊),及存取在用於寫入或讀取之訊息中請求的本端位址。最後一個功能為處理回應於請求訊息而接收到之回覆訊息。
網路處理器(例如,網路處理器1803)之第一功能為將新訊息生成至網路中。此以兩種方式中之一種來實現,第一種方式為:對於單字訊息,PE可將節點增量寫入至遠端節點或多端點組以進行存取,寫入至遠端節點處之位址以進行存取,且在寫入之情況下,寫入至寫入資料。網路處理器接著生成訊息結構,且將訊息發送至路由器以供遞送。對於較長的訊息(意謂兩個或多於兩個字長),PE將節點增量寫入至遠程節點、遠程節點處之起始位址、遠程節點處之結束位址及可在其中發現寫入資料的DMR中之本端位址,或者在讀取之情況下,寫入至將儲存返回資料之位置。在組態此等值後,網路處理器將訊息結構生成至路由器,且將讀取請求生成至DMR以提取必要的寫入資料。
網路處理器之第二功能為伺服自網路接收到之訊息,且提供回應。在此情況下,解構到達之訊息結構,且儲存待存取之第一個及最後一個位址。在讀取之情況下,將在第一位址處開始向DMR生成讀取請求,且繼續直至到達最後一個位址。執行正在存取之區域是否受安全保護的檢查,且返回錯誤值而非讀取字之資料,所述讀取字在本組態中係不可存取的。在寫入之情況下,網路處理器將等待第一資料字到達,且接著其將針對接收到之每一字將寫入生成至DMR。寫入執行額外檢查以驗證位址是否為安全性組態位址,接收到之訊息是否亦為安全性訊息類型。
網路處理器之第三功能為接收對請求之回覆,且將其儲存回以供處理器讀取。此步驟具有兩個選項,第一選項用於單字回覆,處理器可直接地自訊息匯流排節點1800之回覆暫存器讀取所述單字回覆。為了防止多個字訊息在網路中停頓,當返回多於一個字時,網路處理器將其儲存回DMR記憶體。當生成讀取請求時,亦在訊息匯流排節點1800中組態儲存位址範圍之回覆。網路處理器使用經預程式化之位址範圍來儲存回覆,從而丟棄已在訊息中返回之任何額外資料作為安全措施。
當對於單一資源存在三個功能競爭時,網路處理器亦必須判定在任何給定時間採取哪一動作。實際上,三者中僅有兩者可同時存在,此係因為僅回覆或請求服務可在網路處理器之路由器側活動,且請求生成可在PE/DMR側活動。仲裁之主要問題為確保不會形成死鎖條件,且防止死鎖比死鎖潛在操作下之系統效能更重要。由於系統可計劃訊息將如何在系統中流動,因此仲裁方案係選自三個選項中之一者。第一方案為先進先伺服。在此模式中,節點將自到達之網路或處理器側處理第一請求,且在考慮任何其他訊息之前將彼訊息處理完成。此為維持完整網路效能之最簡單方法,然而,其易於死鎖。第二種方法為將在兩個存取請求之間交替的循環伺服。不幸的是,歸因於DMR介面之管線深度,此有可能將存取速率降至速度之2/5。有效發生的是返回之寫入或遠端讀取或寫入將佔據一個週期,下一週期將處置讀取寫入資料之本端寫入訊息,接著介面必須等待此兩個存取完成。藉由等待,與DMR管線互動之網路停頓得以避免,但代價為效能顯著降低。此兩者之間為用以判定進入MBN之訊息及退出MBN之訊息不在相同節點之間的手段。雖然多節點死鎖係可能的,但系統必須主動地創建硬體無法防範之此類情境。藉由檢查資料來自何處且與資料之去向進行比較,有可能判定競爭之兩個訊息是否可生成死鎖,且在此類情境中可選擇循環操作。否則,FIFS可為預設的,以全速運行,且作為系統範圍之訊息傳遞,訊息相比於實施循環之情況更早地完成。
路由器1801及路由器1802中之每一者耦接至各別網路且經組態以自網路接收訊息,且將由網路處理器1803及1804生成之訊息轉遞至各別下一目的地之訊息上。路由器1801及1802可包含多個交換機或其他合適電路,其經組態以將網路處理器1803及1804耦接至其各別網路。
路由器1801及1802為相同的,且各自對通過節點之資料執行兩個主要操作。首先識別預期用於節點之彼等訊息。此涉及查看所遞送之節點增量位址之兩個位元組,且在發現一組零值後,開始擷取訊息之以下內容且將它們遞送至受控處理器。
當未發現匹配時,第二主要操作為將訊息轉遞至下一節點上,從而朝向目的地前進。朝向目的地之前進可能在兩個方向上,其中若沿靠近目的地之兩個選無可用路徑,則可選擇在第三方向上繞行。資料來自之方向並非選項,此係因為不允許回溯,系統設計之基本要求為允許兩個節點之間的路徑進行通信,使得路徑在遵循路由規則時無需進行U形轉彎。
路由器亦負責將新訊息插入至網路中。為了將訊息插入至網路中,目標增量偏移係已知的,且只要朝向目的地之兩個邏輯方向輸出中之一者為空閒的,就接受所述訊息且將其放入訊息匯流排中。回覆增量槽恰好在第一位址及資料對之前插入於訊息中,以准許目的地節點用所請求操作之結果進行回覆。回覆增量基於訊息通過網路所採用之路徑而自動地更新,從而允許在錯誤回覆之情況下的沿所述路線之任何節點或者目的地節點具有準確目的地以回應於請求訊息而發送回覆。
當論述訊息匯流排內之位址時,重要的是區分訊息匯流排節點之位址與置放於訊息中之值以便路由至彼節點。節點之位址有效地為總陣列內之節點之X、Y座標位置,其包含IO節點、含有PE及DMR之核心陣列位置,及僅含有DMR之核心節點,如陣列之頂部邊緣及右邊緣上所出現的那樣。在裝置之左下角發現位置(0,0),其連接至啟動處理器,定位於主要核心陣列外部。核心陣列以圖19中之總陣列上所示的此四個角(1,1)、(1,17)、(17,17)及(17,1)為界,應注意,圖中之格式為(頂部數,底部數)。
訊息匯流排節點之位置位址用於生成路由增量資訊以供用於訊息標頭。為了計算訊息所需之路由增量,使用兩個位置中之帶符號差來標識需要在每一網格方向上橫穿以自源傳輸至目的地節點之節點數。舉例而言,為了自(2,2)行進至(4,7),將使用(+2, +5)之增量位址,且返回路由將為(-2, -5)。此指示目的地為當前位置向東2個節點且向北5個節點。此准許靈活置放單元,因為路由資料為相對的,且若移動單元,則將端點移動類似距離,從而使兩個位置之間的增量保持不變。
在一些情況下,可使用儲存於表1807中之資訊來判定路由增量。舉例而言,包含於訊息中之目的地資訊可用作表1807之索引以擷取資料。此類資料可指定訊息應轉遞至之下一訊息匯流排節點。表1807可實施為靜態隨機存取記憶體(SRAM)、暫存器檔案或其他合適的儲存電路。在各種實施例中,儲存於表1807中之資訊可在啟動序列期間載入且可在多處理器陣列之操作期間更新。
在8位元列及行位址值之情況下,訊息匯流排有可能跨越256×256節點陣列。為了實現此類節點陣列且允許訊息匯流排保持恆定、隨著技術節點縮小而縮放或者支援可能在後代中出現之多晶粒陣列構造,可選擇數代無需修正之位址格式。
在訊息已到達目的地節點後,第二位址需要將值定位在目的地節點處以進行存取。不同於具有足夠增長空間之列及行位址,PE/DMR目的地節點本端位址分量之空間實際上相當緊湊。如當前所定義,存在16k字之DMR資料記憶體、8k字之PE指令記憶體、DMR暫存器匯流排空間、PE內部暫存器及訊息匯流排內部組態暫存器。由於本端位址無需字之全部16位元,且讀寫指示僅需要一個位元,因此位元15位置用作控制位元。此亦為方便的,因為對於待寫入或讀取之每一叢發重複位址,且允許藉由讀取及寫入之叢發選擇產生之叢發提供靈活且有效的方式以將控制應用於存取。
對於IO匯流排介面節點,匯流排以32位元位址操作。基於訊息格式,針對每一叢發僅傳送15位元,從而導致訊息未計入17位元。對於此等其餘位元,使用頁暫存器,隱含之高位元為0,從而導致潛在31位元之位址可用,其足以IO匯流排置放所有必需的記憶體及周邊空間。作為存取IO匯流排之訊息之一部分,訊息應以寫入至頁面暫存器起始,此係因為頁面將保留最後寫入之值,從而在另一主控器將頁暫存器設定為不同於當前主控器預期之值的值之情況下,導致可能出現非預期存取位置。
為了進一步說明訊息匯流排節點之操作,圖22中說明了描繪操作訊息匯流排節點之方法之實施例的流程圖。可應用於訊息匯流排節點1800或任何其他合適訊息匯流排節點的方法以區塊2201開始。
所述方法包含由包含於多處理器陣列中之複數個訊息節點中之特定訊息節點接收包含酬載及路由資訊之第一訊息(區塊2202)。如上所述,可經由耦接至特定訊息節點之多個訊息匯流排中之一者接收第一訊息。
該方法亦包含由特定訊息節點基於路由資訊及多處理器陣列之操作資訊而選擇複數個訊息節點中之不同訊息節點(區塊2203)。如上文所提及,不同訊息節點可基於包含於路由資訊及擁擠中之相對偏移或包含於操作資訊中之其他試探法。
另外,所述方法包含由特定訊息節點基於不同訊息節點而生成第二訊息(區塊2204)。在各種實施例中,網路處理器(例如,網路處理器1803)可基於選擇了哪一訊息節點而生成第二訊息。在一些情況下,第二訊息可包含可由不同訊息節點用於將訊息轉遞至後續訊息節點上之經修改路由資訊。
所述方法進一步包含由特定訊息節點將第二訊息轉遞至不同訊息節點(區塊2205)。在一些實施例中,路由器(例如,路由器1801)可基於包含於第一訊息之路由資訊中的相對偏移而轉遞第二訊息。此類相對偏移可由路由器用於判定應在哪一方向上發送訊息。所述方法在區塊2206中結束。HyperOp 資料路徑
轉至圖20,HyperOp資料路徑之實施例。如所說明,HyperOp資料路徑包含標識為DP0及DP1之兩個資料路徑。DP0及DP1中之每一者可為相同的且包含乘法器電路、加法器電路、移位器電路以及用於經由資料路徑移動運算元之額外電路。應注意,多處理器陣列中之給定PE可包含圖20中所描繪之HyperOp資料路徑。
不同程式化模型可與上文所描述之多處理器架構一起使用。圖21中描繪了此類程式化模型之實例。如所說明,圖21包含ASM及HyperOp程式化模型。下文描述了不同程式化模型之額外細節及寫碼實例。每一實例包含: ˙ C-描述功能性運算/演算法之參考程式碼。 ˙ ASM-如何使用64b指令來實施運算/演算法之一或多個實例。其亦包含使用向量本質(偽ASM指令)來存取雙DP之實例。向量本質為類似ASM之指令,其被映射至HyperOps指令。 ˙ HyperOps--如何使用128b指令來實施運算/演算法之一或多個實例。
記憶體運算元
ASM程式碼 add16s  M1.H, M2.H, M3.H add16s  M1.L, M2.L, M3.L
HyperOps程式碼 |A|   ld32 M1, %A;  // load SIMD data from 32b M1 |B|   ld32 M2, %B; // load SIMD data 32b M2 |DP1| add16s %AH, %BH, %ACC2; // ACC2 = M1[0] + M2[0] |DP0| add16s %AL, %BL, %ACC0; // ACC0 = M1[1] + M2[1] |D|   dst16 %ACC2_ACC0, M3; // store SIMD result to 32b M3
即刻運算元
ASM程式碼 sub16s  %r2, $10, %r8
HyperOps程式碼 { |A|   ld16 %r2, %AL; // load 16b R2 |C|   ld16 $10, %CLH; // load 16b immed value 10 |DP1| sub16s %AL, %CLH, %D1; // D1 = R2 - 10 |D|   st16 %D1, %r8; // store result to 16b R8 } 應注意,載入之即刻使用slotC載入%C暫存器之16b段,但其可使用slotB載入%B暫存器之16b段。
對純量進行條件執行
C程式碼 int16 a, b, c, d, e; if (a > b) e = c + d;
ASM程式碼 // Assume: // a in %R2 // b in %R3 // c in %R4 // // d in %R5 // e in %R6 // %R7 used as temp tcmp16s GT      %R2, %R3, %P0 add16s       %R4, %R5, %R7 cmov16 (%P0) %R7, %R6
HyperOps程式碼(條件儲存槽)-版本1 { |A|   ld16s %R2, %AL; // load 16b R2 |B|   ld16s %R3, %BL; // load 16b R3 |DP0| tcmp16s GT %AL, %BL, %P0; // test (R2 > R3) and set pred P0 } { |A|   ld16s %R4, %AH; // load 16b R4 |B|   ld16s %R5, %BH;  // load 16b R5 |DP0| add16s %AH, %BH, %D0;      // D0 = R4 + R5 |D|   st16 (%P0) %D0, %R6; // if(P0) store result to 16b R6 }
HyperOps程式碼(條件儲存槽)-版本2 { |A|   ld32 %R2.d, %A; // load 32b R2:R3 |B|   ld32 %R4.d, %B; // load 32b R4:R5 |DP1| tcmp16s GT %AH, %AL, %P0; // test R2>R3 and set pred P0 |DP0| add16s GT %BH, %BL, %D0; // D0 = R4 + R5 } { |D|   st16 (%P0) %D0, %R6; // if(P0) store result to 16b R6 }
應注意: ˙ ASM模型中之條件執行僅可用於CMOV ▪ 需要將結果計算至暫時暫存器,接著有條件地移動至目的地 ˙ HyperOps模型中之條件執行允許將條件獨立地應用於槽 ˙ 預測執行在並非相同指令之較早指令中使用述詞旗標Pn集 ▪ 條件儲存在單獨指令之slotD中 ▪ 有可能將其隱藏於後續HyperOp中
對向量進行條件執行
C程式碼 int16 a[2], b[2], c[2], d[2], e[2]; if (a[0] > b[0]) e[0] = c[0] + d[0]; if (a[1] > b[1]) e[1] = c[1] + d[1];
ASM程式碼 // Assume: // a[0],a[1] in %R2,%R3 // b[0],b[1] in %R4,%R5 // c[0],c[1] in %R6,%R7 // d[0],d[1] in %R8,%R9 // e[0],e[1] in %R10,%R11 // %R12,%R13 used as temps tcmp16s GT %R2, %R4, %P1 tcmp16s GT %R3, %R5, %P0 add16s %R6, %R8, %R12 add16s %R7, %R9, %R13 cmov16 (%P1) %R12, %R10 cmov16 (%P0) %R13, %R11
HyperOp程式碼(雙條件儲存) { |A|   ld32 %R2.D, %A;// load 32b R2:R3 |B|   ld32 %R4.D, %B; // load 32b R4:R5 |DP1| tcmp16s GT %AH, %BH, %P1;// test (R2 > R4) and set pred P1 |DP0| tcmp16s GT %AL, %BL, %P0; // test (R3 > R5) and set pred P0 } { |A|   ld32 %R6.D, %A;// load 32b R6:R7 |B|   ld32 %R8.D, %B;   // load 32b R8:R9 |DP1| add16s %AH, %BH, %D1;// D1 = R6 + R8 |DP0| add16s %AL, %BL, %D0;// D0 = R7 + R9 |D|   dst16 (%P1 %P0) %D1_D0, %R10.D; // if(P1) store D1 to 16b R10, if(P0) // store D0 to 16b R11 }
應注意: ˙ 應用於slotD指令之條件執行 ˙ 使用SIMD預測執行模式 ▪ 若(%P1 %P0) { ...} ▪ %P1控制高字 ▪ %P0控制低字
偵測陣列之非零元素,保存值
C程式碼 int16 a[N], b[N]; int16 i, j; j = 0; for(i = 0; i < N; i++) { if ( a[i] <> 0 ) b[j++] = a[i]; }
使用GPn之ASM程式碼 // Assume: // %I1 used for i // %I2 used for j // %B1 points to a[] // %B2 points to b[] // %I0 used as a temp GR gmovi $0, %I2 // I2 = 0 repeat $0, $N-1, $1, %I1, L_loop_start, L_loop_end L_loop_start: mov16 0[%B1+%I1], %I0// I0 = a[i] // +4 cycles stall on loading %I0 in EX and using in FD gtcmps NE %I0, $0, %GP0 // test (a[i] <> 0) and set pred GP0 cmov16 (%GP0) 0[%B1+%I1], 0[%B2+%I2]     // if(GP0) move a[i] to 16b b[j] gadd (%GP0) %I2, $1, %I2 // if(GP0) j++ L_loop_end: 週期:2+N(1+4+3) = 2+8N
使用Pn之ASM程式碼 gmovi $0, %I2                     // I2 = 0 repeat $0, $N-1, $1, %I1, L_loop_start, L_loop_end L_loop_start: tcmp16s NE 0[%B1+%I1], $0, %P0             // test (a[i] <> 0) and set pred P0 cmov16 (%P0) 0[%B1+%I1], 0[%B2+%I2] // if(P0) move a[i] to 16b b[j] // +3 cycles stall on setting %P0 in EX and using in FD gadd (%P0) %I2, $1, %I2         // if(P0) j++ L_loop_end: 週期:2+N(2+3+1) = 2+6N
使用Pn之簡單HyperOps程式碼(條件G槽執行) // Assume: // %B1 points to a[], i is in %I1 // %B2 points to b[], j is in %I2 gmovi $0, %I2 // I2 = 0 repeat $0, $N-1, $1, %I1, L_loop_start, L_loop_end L_loop_start: { |A|   ld16 0[%B1+%I1], %AL; // load 16b a[i] |DP0| mov16s %AL, %D0; |DP1| tcmp16 NE %AL, $0, %P0; // test (a[i] <> 0) and set pred P0 } { |D|   st16 (%P0) %D0, 0[%B2+%I2];   // if(P0) move a[i] to 16b b[j] } // +3 cycles stall on setting %P0 in EX and using in FD { |G|   gadd (%P0) %I2, $1, %I2;      // if(P0) j++ } L_loop_end: 週期:2+N(1+1+3+1) = 2+6N
使用Pn管線化之HyperOps程式碼(條件儲存) // Assume: // %B1 points to a[], i is in %I1 // %B2 points to b[], j is in %I2 gdmovi $0, $1, %I2, %S2                  // I2 = 0, S2 = 1 repeat $0, $N-1, $4 %I1, L_loop_start, L_loop_end L_loop_start: { |A| ld16 0[%B1+%I1], %AL; |DP1| mov16 %AL, %ACC0; |DP0| tcmp16 NE %AL, $0, %P0; } { |A| ld16 1[%B1+%I1], %AL; |DP1| mov16 %AL, %ACC1; |DP0| tcmp16 NE %AL, $0, %P1; } { |A| ld16 2[%B1+%I1], %AL; |DP1| mov16 %AL, %ACC2; |DP0| tcmp16 NE %AL, $0, %P2; } { |A| ld16 3[%B1+%I1], %AL; |DP1| mov16 %AL, %ACC3; |DP0| tcmp16 NE %AL, $0, %P3; } // +1 cycles stall on setting %P0 in EX and using in FD { |A| incr (%P0) $(__i2Mask); |D| st16 (%P0) %ACC0, 0[%B2+%I2]; } { |A| incr (%P1) $(__i2Mask); |D| st16 (%P1) %ACC1, 0[%B2+%I2]; } { |A| incr (%P2) $(__i2Mask); |D| st16 (%P2) %ACC2, 0[%B2+%I2]; } { |A| incr(%P3) $(__i2Mask); |D| st16(%P3) %ACC3, 0[%B2+%I2]; } L_loop_end: 週期:1+N/4(4+1+4) = 1+2.25N
使用2個PE之HyperOps程式碼 // Use PE0 to perform the test on the input array a[]: for(i=0; i<N; i++) { if ( a[i] <> 0 ) sendToPE1( a[i] ); } // Use PE1 to perform save the sparse output array b[]: idx = 0; while(1) { tmp = recvFromPE0(); b[idx++] = tmp; }
PE0 // Assume: // %B1 points to a[], i is in %I1 repeat $0, $N-1, $1 %I1, L_loop_start, L_loop_end L_loop_start: tcmp16 NE 0[%B1+%I1], $0, %P0; cmov16 (%P0) 0[%B1+%I1], PE0_PE1_QPORT; L_loop_end: PE0週期:1+2N
PE1 // Assume: // %B2 points to b[], j is in %I2 gdmovi $0, $1, %I2, %S2                  // I2 = 0, S2 = 1 L_loop: jmp L_loop;                         // loop forever on QPort { |A|   incr $(__i2Mask);              // I2+=S2; update avail for next instruction |B|   ld16 PE0_PE1_QPORT, %BL; |DP0| mov16 %BL, %D0; |D|   st16 %D0, 0[%B2+%I2];          // store uses current value of I2 (not // updated) }
應注意: ˙ 使用2個PE避免了在EX中設定%GP0及在FD中使用時停頓
偵測陣列之非零元素,保存索引
C程式碼 int16 a[N], b[N]; int16 i, j; j = 0; for(i=0; i<N; i++) { if ( a[i] <> 0 ) { b[j++] = i; } }
使用GPn之ASM程式碼 // Assume: // %B1 points to a[], i is in %I1 // %B2 points to b[], j is in %I2 gmov $0, %I2 repeat $0, $N-1, $1 %I1, L_loop_start, L_loop_end L_loop_start: mov16 0[%B1+%I1], %I0 // load a[i] into temp I0 // +4 cycles stall on loading %I0 in EX and using in FD gtcmps NE %I0, $0, %GP0 // test (a[i] <> 0) and set pred GP0 cmov16 (%GP0) %I1, 0[%B2+%I2] // if(GP0) move i to 16b b[j] gadd (%GP0) %I2, $1, %I2 // if(GP0) incr j++ L_loop_end: 週期:2+N(1+4+3) = 2+8N
使用Pn之ASM程式碼 // Assume: // %B1 points to a[], i is in %I1 // %B2 points to b[], j is in %I2 gmov16 $0, %I2 repeat $0, $N-1, $1 %I1, L_loop_start, L_loop_end L_loop_start: tcmp16s NE 0[%B1+%I1], $0, %P0             // test (a[i] <> 0) and set pred P0 cmov16 (%P0) %I1, 0[%B2+%I2]         // if(P0) move i to 16b b[j] // +3 cycles stall on setting %P0 in EX and using in FD gadd (%P0) %I2, $1, %I2         // if(P0) incr j++ L_loop_end: 週期:2+N(2+3+1) = 2+6N
使用管線化Pn之ASM程式碼 // Assume: // %B1 points to a[], i is in %I1 // %B2 points to b[], j is in %I2 gmov16 $0, %I2 repeat $0, $N-1, $4 %I1, L_loop_start, L_loop_end L_loop_start: tcmp16s NE 0[%B1+%I1], $0, %P0 // test (a[i+0] <> 0) and set pred P0 tcmp16s NE 1[%B1+%I1], $0, %P1 // test (a[i+1] <> 0) and set pred P1 tcmp16s NE 2[%B1+%I1], $0, %P2 // test (a[i+2] <> 0) and set pred P2 tcmp16s NE 3[%B1+%I1], $0, %P3 // test (a[i+3] <> 0) and set pred P3 add16s (%P0) %I1, $0, 0[%B2+%I2]       // if(P0) move i+0 to 16b b[j] gadd (%P0) %I2, $1, %I2 // if(P0) incr j++ add16s (%P1) %I1, $1, 0[%B2+%I2]       // if(P1) move i+1 to 16b b[j] gadd (%P1) %I2, $1, %I2  // if(P1) incr j++ add16s (%P2) %I1, $2, 0[%B2+%I2]       // if(P2) move i+2 to 16b b[j] gadd (%P2) %I2, $1, %I2 // if(P2) incr j++ add16s (%P3) %I1, $3, 0[%B2+%I2]       // if(P3) move i+3 to 16b b[j] gadd (%P3) %I2, $1, %I2 // if(P3) incr j++ L_loop_end: 週期:2+N/4(4+8) = 2+3N
使用GPn之簡單HyperOps程式碼(條件G槽及儲存) // Assume: // %B1 points to a[], i is in %I1 // %B2 points to b[], j is in %I2 gdmov $0, $1, %I2, %S2 repeat $0, $N-1, $1 %I1, L_loop_start, L_loop_end L_loop_start: { |A|   ld16 0[%B1+%I1], %AL; // load a[i] into AL |DP0| mov16 %AL, %D0; // move a[i] to D0 |D|   st16 %D0, %I0; // store D0=a[i] into temp I0 } // +4 cycles stall on writing %I0 in EX and using in FD { |B|   ld16 %I1, %BH; // load i into BH |DP0| mov16s %BH, %D0; // move i to D0 |G|   gtcmps NE %I0, $0, %GP0;   // test (a[i] <> 0) and set pred GP0 } { |A|   incr (%GP0) $(__i2Mask);     // if(GP0) incr j++ |D|   st16 (%GP0) %D0, 0[%B2+%I2];       // if(GP0) move i to 16b b[j] } L_loop_end: 週期:2+N(1+4+2) = 2+7N
使用Pn之簡單HyperOps程式碼 // Assume: // %B1 points to a[], i is in %I1 // %B2 points to b[], j is in %I2 gdmovi $0, $1, %I2, %S2 repeat $0, $N-1, $1 %I1, L_loop_start, L_loop_end L_loop_start: { |A|   ld16 0[%B1+%I1], %AL; // load a[i] into AL |B|   ld16 %I1, %BL; // load i into BL |DP1| tcmp16s NE %AL, $0, %P0;    // test (a[i] <> 0) and set pred P0 |DP0| mov %BL, %D0; // move i to D0, ready for store } // +4 cycles stall on writing %P0 in EX and using in FD { |A|   incr (%P0) $(__i2Mask); // if(P0) incr j++ |D|   st16 (%P0) %D0, 0[%B2+%I2];// if(P0) move i to 16b b[j] } L_loop_end: 週期:2+N(1+4+1) = 2+6N
使用GPn之HyperOps程式碼管線 // Assume: // %B1 points to a[], i is in %I1 // %B2 points to b[], j is in %I2 gdmovi $0, $1, %I2, %S2 repeat $0, $N-1, $5 %I1, L_loop_start, L_loop_end L_loop_start: // load next 5 values from a[] into temp GRs { |A| ld16 0[%B1+%I1], %AL; |DP0| mov16s %AL, %D0; |D| st16 %D0, %T4; } { |A| ld16 1[%B1+%I1], %AL; |DP0| mov16 %AL, %D0; |D| st16 %D0, %T5; } { |A| ld16 2[%B1+%I1], %AL; |DP0| mov16 %AL, %D0; |D| st16 %D0, %T6; } { |A| ld16 3[%B1+%I1], %AL; |DP0| mov16 %AL, %D0; |D| st16 %D0, %T7; } { |A| ld16 4[%B1+%I1], %AL; |DP0| mov16 %AL, %D0; |D| st16 %D0, %I0; } // if ( a[i] <> 0 ) { b[j++] = i; }  // test a[i+0] { |A| ld16 %I1, %AH; |G| gtcmpi16 NE %T4, $0, %GP0; |DP0| add16s %AH, $0, %D0; } { |A| incr (%GP0) $(__i2Mask); |D| st16 (%GP0) %D0, 0[%B2+%I2]; } // if ( a[i+1] <> 0 ) { b[j++] = i+1; } // test a[i+1] { |G| gtcmpi16 NE %T5, $0, %GP0; |DP0| add16s %AH, $1, %D0; } { |A| incr (%GP0) $(__i2Mask); |D| st16 (%GP0) %D0, 0[%B2+%I2]; } // if ( a[i+2] <> 0 ) { b[j++] = i+2; } // test a[i+2] { |G| gtcmpi16 NE %T6, $0, %GP0; |DP0| add16s %AH, $2, %D0; } { |A| incr (%GP0) $(__i2Mask); |D| st16 (%GP0) %D0, 0[%B2+%I2]; } // if ( a[i+3] <> 0 ) { b[j++] = i+3; } // test a[i+3] { |G| gtcmpi16 NE %T7, $0, %GP0; |DP0| add16s %AH, $3, %D0; } { |A| incr (%GP0) $(__i2Mask); |D| st16 (%GP0) %D0, 0[%B2+%I2]; } // if ( a[i+4] <> 0 ) { b[j++] = i+4; } // test a[i+4] { |G| gtcmpi16 NE %I0, $0, %GP0; |DP0| add16s %AH, $4, %D0; } { |A| incr (%GP0) $(__i2Mask); |D| st16 (%GP0) %D0, 0[%B2+%I2]; } L_loop_end: 週期:2+N/5(5+5(2)) = 2+3N 應注意 ˙ 可藉由載入至5個GR中來隱藏所有停頓
使用Pn管線化之HyperOps程式碼 // Assume: // %B1 points to a[], i is in %I1 // %B2 points to b[], j is in %I2 gdmovi $0, $1, %I2, %S2 repeat $0, $N-1, $4 %I1, L_loop_start, L_loop_end L_loop_start: // test next 5 values of a[] into P0-3 { |A|   ld32 0[%B1+%I1], %A; |C|   ld16 %I1, %CLL;  // CLL = I1 |DP1| tcmp16s NE %AH, $0, %P0; |DP0| tcmp16s NE %AL, $0, %P1; } { |B|   ld32 2[%B1+%I1], %B; |DP1| tcmp16s NE %BH, $0, %P2; |DP0| tcmp16s NE %BL, $0, %P3; } // +3 cycles stall on setting %P0 in EX and using in FD // if ( a[i] <> 0 ) { b[j++] = i; }  // using P0 { |A|   incr (%P0) $(__i2Mask); |DP0| add16s %CLL, $0, %D0; |D|   st16 (%P0) %D0, 0[%B2+%I2]; } // if ( a[i+1] <> 0 ) { b[j++] = i+1; } // using P1 { |A|   incr (%P1) $(__i2Mask); |DP0| add16s %CLL, $1, %D0; |D|   st16 (%P1) %D0, 0[%B2+%I2]; } // if ( a[i+2] <> 0 ) { b[j++] = i+2; } // using P2 { |A|   incr (%P2) $(__i2Mask); |DP0| add16s %CLL, $2, %D0; |D|   st16 (%P2) %D0, 0[%B2+%I2]; } // if ( a[i+3] <> 0 ) { b[j++] = i+3; } // using P3 { |A|   incr (%P3) $(__i2Mask); |DP0| add16s %CLL, $3, %D0; |D|   st16 (%P3) %D0, 0[%B2+%I2]; } L_loop_end: 週期:2+N/4(2+3+4) = 2+2.25N應注意 ˙ 無法用4 Pn隱藏所有停頓
使用經標記資料之HyperOps程式碼 // Assume: // %B1 points to a[], i is in %I1 // %B2 points to b[], j is in %I2 gdmovi $0, $1, %I2, %S2 repeat $0, $N-1, $4 %I1, L_loop_start, L_loop_end L_loop_start: // test next 4 values of a[] into P0-3 { |A|   ld32 0[%B1+%I1], %A; // load AH = a[i+0], AL = a[i+1] |C|   ld16 $a, %CLL; // CLL = &a[0] |DP1| tcmp16 NE %AH, $0, %P0; // test (a[i+0] <> 0) and set pred P0 |DP0| tcmp16 NE %AL, $0, %P1; // test (a[i+1] <> 0) and set pred P1 } { |B| ld32 2[%B1+%I1], %B; // load BH = a[i+2], BL = a[i+3] |DP1| tcmp16 NE %BH, $0, %P2; // test (a[i+2] <> 0) and set pred P2 |DP0| tcmp16 NE %BL, $0, %P3; // test (a[i+3] <> 0) and set pred P3 } // +3 cycles stall on setting %P0 in EX and using in FD (INCR inst) // if ( a[i] <> 0 ) { b[j++] = i; } { |A|   incr (%P0) $(__i2Mask); // if(P0) incr j++ |B|   ld16t 0[%B1+%I1], %B; // load tagged data B = {&a[i]:a[i]} |DP0| sub16s %BH, %CLL, %D0; // D0 = &a[i]-&a[0] = i |D|   st16 (%P0) %D0, 0[%B2+%I2];// if(P0) store i to 16b b[j] } // if ( a[i+1] <> 0 ) { b[j++] = i+1; } { |A|   incr (%P1) $(__i2Mask); // if(P1) incr j++ |B|   ld16t 1[%B1+%I1], %B; // load tagged data B = {&a[i+1]:a[i+1]} |DP0| sub16s %BH, %CLL, %D0; // D0 = &a[i+1]-&a[0] = i+1 |D|   st16 (%P1) %D0, 0[%B2+%I2];// if(P1) store i+1 to 16b b[j] } // if ( a[i+2] <> 0 ) { b[j++] = i+2; } { |A|   incr (%P2) $(__i2Mask); // if(P2) incr j++ |B|   ld16t 2[%B1+%I1], %B; // load tagged data B = {&a[i+2]:a[i+2]} |DP0| sub16s %BH, %CLL, %D0; // D0 = &a[i+2]-&a[0] = i+2 |D|   st16 (%P2) %D0, 0[%B2+%I2];// if(P2) store i+2 to 16b b[j] } // if ( a[i+3] <> 0 ) { b[j++] = i+3; } { |A|   incr (%P3) $(__i2Mask); // if(P3) incr j++ |B|   ld16t 3[%B1+%I1], %B; // load tagged data B = {&a[i+3]:a[i+3]} |DP0| sub16s %BH, %CLL, %D0; // D0 = &a[i+3]-&a[0] = i+3 |D|   st16 (%P3) %D0, 0[%B2+%I2];// if(P3) store i+3 to 16b b[j] } L_loop_end: 週期:2+N/4(2+3+4) = 2+2.25N
應注意: ˙ 經標記負載LD16T載入16b資料(至較低16b)及其位址(至較高16b)作為封裝資料 ˙ 資料索引為資料位址(或標記)-陣列起始
使用間接來存取陣列
C程式碼 int16 a[N], b[N], c[N]; int16 i, j; for(i=0; i<N; i++) { j = b[i]; a[i] = c[j]; }
ASM程式碼 // Assume %B1 points to a[], i is in %I1 // Assume %B2 points to b[], i is in %I1 // Assume %B4 points to c[], j is in %I2 repeat $0, $N-1, $1 %I1, L_loop_start, L_loop_end L_loop_start: mov16 0[%B2+%I1], %I2 // +4 cycles stall on setting %I2 in EX and using in FD mov16 0[%B4+%I2], 0[%B1+%I1] L_loop_end: 週期:1+N(1+4+1) = 1+6N
簡單HyperOps程式碼 // Assume %B1 points to a[], i is in %I1 // Assume %B2 points to b[], i is in %I1 // Assume %B4 points to c[], j is in %I2 repeat $0, $N-1, $1 %I1, L_loop_start, L_loop_end L_loop_start: { |A| ld16 0[%B2+%I1], %AL; |DP0| mov %AL, %D0; |D| st16 %D0, %I2 } // +4 cycles stall on setting %I2 in EX and using in FD { |B| ld16 0[%B4+%I2], %BL; |DP0| mov %BL, %D0; |D| st16 %D0, 0[%B1+%I1] }; L_loop_end: 週期:1+N(1+4+1) = 1+6N
HyperOps程式碼管線化 // Assume %B1 points to a[], i is in %I1 // Assume %B2 points to b[], i is in %I1 // Assume %B4 points to c[], j is in %I2-%I7 // j0 = b[0];  j1 = b[1]; { |A| ld32 0[%B2], %A; |DP0| mov32 %A, %D0; |D| st32 %D0, %I2I3; } // j2 = b[2];  j3 = b[3]; { |A| ld32 2[%B2], %A; |DP0| mov32 %A, %D0; |D| st32 %D0, %I4I5; } // j4 = b[4];  j5 = b[5]; { |A| ld32 4[%B2], %A; |DP0| mov32 %A, %D0; |D| st32 %D0, %I6I7; } // +1 cycles stall on setting %I2,%I3 in EX and using in FD repeat $0, $N-1, $6 %I1, L_loop_start, L_loop_end L_loop_start: // a[i+0] = c[j0];  a[i+1] = c[j1];  j0 = b[i+6];  j1 = b[i+7]; { |A| ld16 0[%B4+%I2], %AL; |B| ld16 0[%B4+%I3], %BL; |DP1| mov16 %AL, %D1; |DP0| mov16 %BL, %D0; |D| dst16 %D1_D0, 0[%B1+%I1]; } { |A| ld32 6[%B2+%I1], %A; |DP0| mov32 %A, %D0; |D| st32 %D0, %I2I3; } // a[i+2] = c[j2];  a[i+3] = c[j3];  j2 = b[i+8];  j3 = b[i+9]; { |A| ld16 0[%B4+%I4], %AL; |B| ld16 0[%B4+%I5], %BL; |DP1| mov16 %AL, %D1; |DP0| mov16 %BL, %D0; |D| dst16 %D1_D0, 2[%B1+%I1]; } { |A| ld32 8[%B2+%I1], %A; |DP0| mov32 %A, %D0; |D| st32 %D0, %I4I5; } // a[i+4] = c[j4];  a[i+5] = c[j5];  j4 = b[i+10];  j5 = b[i+11]; { |A| ld16 0[%B4+%I6], %AL; |B| ld16 0[%B4+%I7], %BL; |DP1| mov16 %AL, %D1; |DP0| mov16 %BL, %D0; |D| dst16 %D1_D0, 4[%B1+%I1]; } { |A| ld32 10[%B2+%I1], %A; |DP0| mov32 %A, %D0; |D| st32 %ACC0, %I6I7; } // ignore the final values loaded into I2-I7 L_loop_end: 週期:3+1+1+N/6(6) = 5+N
應注意: ˙ 索引j在1個週期中成對地自b[i]載入 ˙ 兩個c[j]在1個週期中成對地載入且儲存至a[i] ˙ 使用6個索引暫存器避免了在EX中設定索引及在FD中使用之管線泡
使用雙DP之條件累加
以下為吾人可使用具有2個述詞之條件HyperOps的實例。
C程式碼 int16 a[N], b[N], c[N]; int16 i; int32 sum = 0; for (int i = 0; i < N; i++) { if (a[i] > b[i]) sum += a[i] * c[i]; }
ASM程式碼
此實例使用向量本質(偽ASM指令)來存取雙DP。 repeat $0, $N-1, $2, IDX_i, L_loop_start, L_loop_end movx16s $0, %ACC2 movx16s $0, %ACC0 L_loop_start: vtcmp16s GT 0[BP_a+IDX_i], 0[BP_b+IDX_i], %P1P0; cmov16 (%P1) 0[BP_a+IDX_i], $0, %R0 cmov16 (%P0) 1[BP_a+IDX_i], $0, %R1 vmulaa16s %R0.D, 0[BP_c+IDX_i], %ACC2_ACC0 L_loop_end: accadd %ACC0, $0, %ACC2 週期:3+N/2(4)+1 = 4+2N
HyperOps程式碼(條件DP槽執行-兩個槽) #define BP_a    %B1 #define BP_b   %B2 #define BP_c    %B3 #define IDX_i  %I1 repeat $0, $N-1, $2, IDX_i, L_loop_start, L_loop_end { |DP1| movx16s $0, %ACC2; |DP0| movx16s $0, %ACC0; } L_loop_start: { |A| ld32 0[BP_a+IDX_i], %A; |B| ld32 0[BP_b+IDX_i], %B; |DP1| tcmp16s GT %AH, %BH, %P1; |DP0| tcmp16s GT %AL, %BL, %P0; } { |C| ld32 0[BP_c+IDX_i], %B; |DP1| mulaa16s (%P1) %AH, %BH, %ACC2; |DP0| mulaa16s (%P0) %AL, %BL, %ACC0; } L_loop_end: accadd %ACC0, $0, %ACC2 週期:1+N/2(2)+1 = 2+N
應注意: ˙ 使用DP1及DP0並行處理迭代i及i+1 ˙ 將總和分成%ACC0及%ACC2,接著在最後組合 ˙ 使用述詞旗標%P1及%P0來獨立地控制至%ACC2及%ACC0中之累加
使用雙DP之條件累加,其各自使用雙MUL
以下為吾人可使用具有4個述詞之條件HyperOps的實例。 C程式碼 int16 a[N], b[N], c[N]; int16 i; int32 sum = 0; for (int i = 0; i < N; i++) { if (a[i] > b[i]) sum += a[i] * c[i]; }
HyperOps程式碼(使用兩個DP之四元條件) #define BP_a    %B1 #define BP_b   %B2 #define BP_c    %B3 repeat $0, $N-1, $4, IDX_i, L_loop_start, L_loop_end { |DP1| movx16s $0, %ACC2; |DP0| movx16s $0, %ACC0; } L_loop_start: { |A|   ld64 0[BP_a+IDX_i], %AB; |C| ld64 0[BP_b+IDX_i], %C; |DP1| dtcmp16s GT %A, %CH, %P3P2; |DP0| dtcmp16s GT %B, %CL, %P1P0; } { |C|   ld64 0[BP_c+IDX_i], %C; |DP1| dmulaa16s (%P3P2) %A, %CH, %ACC2; |DP0| dmulaa16s (%P1P0) %B, %CL, %ACC0; } L_loop_end: accadd %ACC0, $0, %ACC2 週期:2+N/4(2)+1 = 3+0.5N
應注意: ˙ 並行處理迭代 i ... i+3: ▪  在DP1中執行i及i+1 ▪  在DP0中執行i+2及i+3 ˙ DP0執行雙倍運算,DP1執行雙倍運算 ˙ 將總和分成%ACC0及%ACC2,接著在最後組合 ˙ 使用述詞旗標P0至P3來獨立地控制乘積至%ACC2及%ACC0中之累加 ˙ b[]及c[]必須為不同於a[]之DMR以供64b存取工作
使用雙DP之條件儲存
以下C程式碼為吾人可使用條件HyperOps來執行條件儲存之實例。
C程式碼 int16 a[N], b[N], c[N], d[N]; int16 i; for (int i = 0; i < N; i++) { if (a[i] > b[i]) d[i] = a[i] * c[i]; }
ASM程式碼
此實例使用向量本質(偽ASM指令)來存取雙DP。 #define BP_a    %B1 #define BP_b   %B2 #define BP_c    %B3 #define BP_d   %B4 #define IDX_i  %I1 repeat $0, $N-1, $2, IDX_i, L_loop_start, L_loop_end L_loop_start: vtcmp16s GT [BP_a+IDX_i], [BP_b+IDX_i], %P1P0 vmul16s (%P1P0) [BP_a+IDX_i], [BP_c+IDX_i], [BP_d+IDX_i] L_loop_end:
HyperOps程式碼(雙條件儲存) #define BP_a    %B1 #define BP_b   %B2 #define BP_c    %B3 #define BP_d   %B4 #define IDX_i  %I1 repeat $0, $N-1, $2, IDX_i, L_loop_start, L_loop_end L_loop_start: { |A| ld32 0[BP_a+IDX_i], %A; |B| ld32 0[BP_b+IDX_i], %B; |DP1| tcmp16s GT %AH, %BH, %P1; |DP0| tcmp16s GT %AL, %BL, %P0; } { |C| ld32 0[BP_c+IDX_i], %CL; |DP1| mul16s %AH, %CLH, %D1; |DP0| mul16s %AL, %CLL, %D0; |D| dst16 (%P1P0) %D1_D0, 0[BP_d+IDX_i]; } L_loop_end:
應注意: ˙ 使用DP1及DP0並行處理迭代i及i+1 ˙ 使用述詞旗標P1及P0來獨立地控制16b:16b儲存(SIMD模式)
使用條件跳轉之條件若-否則-若實例
C程式碼 absq = abs(q); if (absq < qmin) { qmin2 = qmin; qmin = absq; imin = i; } else if (absq < qmin2) { qmin2 = absq; }
ASM程式碼 // assume imin and qmin stored as packed data imin_qmin (even address) abs16s q, absq                      // absq = abs(q) tcmp16 LT absq, qmin, %P1       // P1 = (absq < qmin) jmp (!%P1) L_else PNT              // if(!P1) skip qmin update tcmp16 LT absq, qmin2, %P0            // P0 = (absq < qmin2) -- delay slot L_if:                              // update qmin and qmin2: mov16 qmin, qmin2                    //  qmin2 = qmin jmp L_end dmov16 i, absq, imin_qmin               //  qmin = absq, imin = i -- delay slot L_else: jmp (!%P0) L_end PNT DLY nop                                // delay slot mov16 absq, qmin2              // update only qmin2 L_end:
利用DLY最佳化之ASM程式碼 abs16s q, absq tcmp16 LT absq, qmin, %P1 jmp (!%P1) L_else PNT tcmp16 LT absq, qmin2, %P0            // executed in delay slot L_if: mov16 qmin, qmin2 jmp L_end dmov16 i, absq, imin_qmin         // executed in delay slot L_else: jmp (!%P0) L_end PNT DLY mov16 absq, qmin2              // executed after JMP, not in delay slot L_end:
使用條件移動之條件若-否則-若實例
C程式碼 absq = abs(q); if (absq < qmin) { qmin2 = qmin; qmin = absq; imin = i; } else if (absq < qmin2) { qmin2 = absq; }
ASM程式碼 // assume imin and qmin stored as packed data imin_qmin (even address) abs16s  q, absq                     // absq = abs(q) tcmp16s  LT absq, qmin, %P1           // P1 = (absq < qmin) tcmp16s  LT absq, qmin2, %P0         // P0 = (absq < qmin2) cmov16  (%P1) qmin, qmin2             // if (P1) qmin2 = qmin cmov16  (%P1) absq, qmin                // if (P1) qmin = absq cmov16  (%P1) i, imin                // if (P1) imin = i cmov16  (!%P1 & %P0) absq, qmin2             // else if (P0) qmin2 = absq 週期:7
HyperOps程式碼 { |A|   ld16 q, AL; |B|   ld16 i, %BL; |DP1| mov16 %BL, %ACC3; // ACC3 = i |DP0| abs16s %AL, %ACC1; // ACC1L = absq |D|   dst16 %ACC3_ACC1, %ACC3; } // ACC3H = i, ACC3L = absq { |A|   ld32 imin_qmin, %A;  // AH = imin, AL = qmin |B|   ld16 qmin2, %BL;       // BL = qmin2 |DP1| tcmp16 LT %ACC3L, %AL, %P1;  // P1 = (absq < qmin) |DP0| tcmp16 LT %ACC1L, %BL, %P0; } // P0 = (absq < qmin2) { |DP1| if(%P1) cmov32 %ACC3, %A, %ACC2 ;  // if (P1) {ACC2H = i, ACC2L = absq} // else {ACC2H = imin, ACC2L = qmin} |DP0| if(%P1) cmov16 %AL, %BL, %ACC0;     // ACC0 = (P1) ? qmin2 : qmin |D|   st32 %ACC2, imin_qmin; } // update imin:qmin = ACC2H:ACC2L { |DP0| if(!%P1 & %P0) cmov16 %ACC3L, %ACC0L, %ACC0; // else ACC0L = (P0) ? absq : qmin |D|   st16 %ACC0, qmin2; } // update qmin2 = ACC0L 週期:4
應注意: ˙ 使用%P1及%P0來保持IF及ELSE IF測試之布林結果 ˙ 假定imin及qmin在記憶體中儲存為經封裝16:16 ˙ 利用CSEL使用%P1及%P0以在可能之情況下有條件地成對更新狀態變數
使用述詞旗標來組合測試
C程式碼 int16 a, b, c, d, e; void test() { a = (b < c) && (d < e); }
ASM程式碼 tcmp16s  LT b, c %P0                 // P0 = (b < c) tcmp16s  LT d, e, %P1                // P1 = (d < e) cmov16  (%P0 & %P1) $1, $0, a       // a = (P0 & P1) 1 : 0
應注意: ˙ 編譯器將用&運算子替換&&: ▪ a = (b<c) & (d<e)
使用暫存器檔案來組合測試
C程式碼 int16   a, b, c, d, e; void test() { a = (b < c) && (d < e); }
ASM程式碼 tcmp16s  LT b, c, %R0                // R0 = (b < c) tcmp16s  LT d, e, %R1                // R1 = (d < e) and16  %R0, %R1, a                   // a = R0 & R1
應注意: ˙ 編譯器將用&運算子替換&&: ▪ a = (b<c) & (d<e)
條件跳轉至次常式
C程式碼 int a, b, c, d, e, f; if ( (a < b) & (c < e) | (d > f) ) foo();
ASM程式碼 tcmp16s  LT a, b, %R1                // R1 = (a < b) tcmp16s  LT c, e, %R2                // R2 = (c < e) tand16  NZ %R1, %R2, %P0                   // P0 = (a < b) & (c < e) tcmp16s  GT d, f, %P1                // P1 = (d > f) jsr  (%P0 | %P1) foo                   // if (P0 | P1) foo()
應注意: ˙ 使用TAND16而非AND16 ▪ 應注意,除了TEST之外,Pn無法為ALU運算之dstD
指派邏輯/測試運算結果
C程式碼 int16 a, b, c, d, e, f, result; result = ( (a < b) & (c < e) | (d > f) );
ASM程式碼 tcmp16s  LT a, b, %R1                // R1 = (a < b) tcmp16s  LT c, e, %R2                // R2 = (c < e) and16  %R1, %R2, %R3                    // P3 = (a < b) & (c < e) tcmp16s  GT d, f, %R4               // R4 = (d > f) or16  %R3, %R4, result              // result = (R3 | R4)
本文中所描述之各種實施例中的任一者可以各種形式中之任一者實現,例如,作為電腦實施方法,作為電腦可讀記憶體媒體,作為電腦系統等。系統可由以下各者實現:一或多個自訂設計之硬體器件,諸如特殊應用積體電路(ASIC);一或多個可程式化硬體元件,諸如場可程式化閘陣列(FPGA);執行所儲存程式指令之一或多個處理器;或前述各者之任何組合。
在一些實施例中,非暫時性電腦可讀記憶體媒體可經組態以使得其儲存程式指令及/或資料,其中所述程式指令在由電腦系統執行時,致使電腦系統執行方法,所述方法例如本文中所描述之方法實施例中的任一者,或本文中所描述之方法實施例的任何組合,或本文中所描述之方法實施例中之任一者的任何子集,或此類子集之任何組合。
在一些實施例中,電腦系統可經組態以包含處理器(或處理器集合)及記憶體媒體,其中記憶體媒體儲存程式指令,其中處理器經組態以讀取且執行來自記憶體媒體之程式指令,其中程式指令可執行以實施本文中所描述之各種方法實施例中的任一者(或本文中所描述之方法實施例的任何組合,或本文中所描述之方法實施例中之任一者的任何子集,或此等子集之任何組合)。電腦系統可以各種形式中之任一者實現。舉例而言,電腦系統可為個人電腦(在其各種實現中之任一者中)、工作站、卡上之電腦、盒中之特殊應用電腦、伺服器電腦、用戶端電腦、手持型裝置、行動裝置、隨身電腦、感測裝置、電視、視頻獲取裝置、嵌入於活機體中之電腦等。電腦系統可包含一或多個顯示裝置。本文中所揭示之各種計算結果中之任一者可經由顯示裝置顯示或經由使用者介面裝置以其他方式呈現為輸出。
一種設備,其包括:複數個處理器;及複數個資料記憶體路由器,其以散佈配置耦接至複數個處理器,其中特定資料記憶體路由器經組態以將接收到之訊息轉送至複數個資料記憶體路由器中之至少一個其他資料記憶體路由器;其中複數個處理器中之特定處理器經組態以設定複數個述詞旗標中之至少一述詞旗標;且使用複數個述詞旗標來有條件地執行指令。
如前述之設備,其中複數個述詞旗標至少包含與包含於特定處理器中之資料路徑相關聯的第一組述詞旗標,及與包含於特定處理器中之位址生成器單元相關聯的第二組述詞旗標。
如前述之設備,其中為了設定複數個述詞旗標中之至少一個述詞旗標,特定處理器經進一步組態以回應於測試指令之執行而比較第一值與第二值以生成結果,且基於結果而設定至少一個述詞旗標。
如前述之設備,其中為了比較第一值與第二值,特定處理器經進一步組態以使用第一值及第二值來執行邏輯運算以生成結果。
如前述之設備,其中為了設定複數個述詞旗標中之至少一個述詞旗標,特定處理器經進一步組態以至少部分地基於指示包含於特定處理器中之資料路徑之時序操作的資訊而設定至少一個述詞旗標。
如前述之設備,其中為了設定複數個述詞旗標中之至少一個述詞旗標,特定處理器經進一步組態以至少部分地基於指示包含於特定處理器中之位址生成器單元之時序操作的資訊而設定至少一個述詞旗標。
如前述之設備,其中為了有條件地執行指令,特定處理器經進一步組態以使用複數個述詞旗標有條件地執行包含於資料路徑中之一個或資料路徑槽,所述資料路徑包含於特定處理器中。
一種方法,其包括:由複數個處理器中之特定處理器設定複數個述詞旗標中之至少一個述詞旗標;其中複數個處理器以散佈配置耦接至複數個資料記憶體路由器;由複數個處理器中之特定處理器使用複數個述詞旗標來有條件地執行指令。
如前述之方法,其中複數個述詞旗標至少包含與包含於特定處理器中之資料路徑相關聯的第一組述詞旗標,及與包含於特定處理器中之位址生成器單元相關聯的第二組述詞旗標。
如前述之方法,其中設定複數個述詞旗標中之至少一個述詞旗標包含回應於由特定處理器執行測試指令而比較第一值與第二值以生成結果,及基於結果而設定至少一個述詞旗標。
如前述之方法,其中比較第一值與第二值包含使用第一值及第二值來執行邏輯運算以生成結果。
如前述之方法,其中設定複數個述詞旗標中之至少一個述詞旗標包含由特定處理器至少部分地基於指示包含於特定處理器中之資料路徑之時序操作的資訊而設定至少一個述詞旗標。
如前述之方法,其中設定複數個述詞旗標中之至少一個述詞旗標包含由特定處理器至少部分地基於指示包含於特定處理器中之位址生成器單元之時序操作的資訊而設定至少一個述詞旗標。
如技術方案第22項之前述方法,其中由特定處理器有條件地執行指令包含使用複數個述詞旗標有條件地執行包含於資料路徑中之一個或資料路徑槽,所述資料路徑包含於特定處理器中。
一種設備,其包括:複數個處理器;及複數個資料記憶體路由器,其以散佈配置耦接至複數個處理器,其中特定資料記憶體路由器經組態以將接收到之訊息轉送至複數個資料記憶體路由器中之至少一個其他資料記憶體路由器;其中複數個處理器中之特定處理器經組態以:基於接收到之指令而選擇性地啟動包含於複數個資料路徑中之特定資料路徑中的複數個算術邏輯電路之子集,所述複數個資料路徑包含於特定處理器中;且使用複數個算術邏輯電路之子集來執行接收到之指令。
如前述之設備,其中為了選擇性地啟動複數個算術邏輯電路之子集,特定處理器經進一步組態以解碼指令以生成經解碼指令,且使用經解碼指令來選擇性地啟動複數個算術邏輯電路之子集。
如前述之設備,其中複數個處理器中之特定處理器進一步經組態以基於指令而在包含於複數個算術邏輯電路之子集中的個別算術邏輯電路之間路由資料。
如前述之設備,其中為了在包含於複數個算術邏輯電路之子集中的個別算術邏輯電路之間路由資料,特定處理器經進一步組態以選擇性地改變包含於特定資料路徑中之複數個多工電路中之至少一個多工電路的狀態。
如前述之設備,其中複數個邏輯電路中之特定算術邏輯電路包含至少一加法器電路。
如前述之設備,其中複數個邏輯電路中之特定算術邏輯電路包含經組態以儲存在執行指令時使用之偏移的查找表。
如前述之設備,其中指令指定對數概率運算。
一種方法,其包括:選擇性地啟動包含於複數個資料路徑中之特定資料路徑中的複數個算術邏輯電路之子集,所述複數個資料路徑包含於複數個處理器中之特定處理器中;其中複數個處理器以散佈配置耦接至複數個資料記憶體路由器;及由複數個處理器中之特定處理器使用複數個算術邏輯電路之子集來執行指令。
如前述之方法,其中選擇性地啟動複數個算術邏輯電路之子集包含解碼指令以生成經解碼指令,及使用經解碼指令來選擇性地啟動複數個算術邏輯電路之子集。
如前述之方法,其進一步包括基於指令而在包含於複數個算術邏輯電路之子集中的個別算術邏輯電路之間路由資料。
如前述之方法,其中特定處理器在包含於複數個算術邏輯電路之子集中的個別算術邏輯電路之間路由資料包含選擇性地改變包含於特定資料路徑中之複數個多工電路中之至少一個多工電路的狀態。
如前述之方法,其中複數個邏輯電路中之特定算術邏輯電路包含至少一加法器電路。
如前述之方法,其中複數個邏輯電路中之特定算術邏輯電路包含查找表,且所述方法進一步包括將在執行指令時使用之偏移儲存於查找表中。
如前述之方法,其中指令指定對數概率運算。
儘管以上實施例已結合較佳實施例進行了描述,但其並不意欲限於本文所闡述之特定形式,而相反地,其意欲涵蓋此類替代方案、修改及等效物,如可合理地包含於如隨附申請專利範圍所定義的本發明之實施例之精神及範疇內。
10:多處理器系統(MPS) 200:資料路徑圖 201:位址生成器 202:資料之SM(資料RAM) 203:暫存器檔案 204:控制暫存器 205:大型MUX 206:主要輸入運算元暫存器A 207:主要輸入運算元暫存器B 208:主要輸入運算元暫存器C 209:大型MUX 212:大型MUX 216:執行暫存器及述詞旗標 300:指令解碼區塊 400:位址生成器 1500:訊息匯流排 1501:多個訊息匯流排節點 1502:I/O控制器 1503:開發存取埠(DAP) 1504:啟動控制 1700:一般介面 1701:訊息匯流排節點 1800:訊息匯流排節點 1801:路由器 1802:路由器 1803:網路處理器 1804:網路處理器 1805:仲裁器 1806:組態電路 1807:表 2201:區塊 2202:區塊 2203:區塊 2204:區塊 2205:區塊 2206:區塊
圖1描繪多處理器陣列之實施例。 圖2描繪PE之資料路徑之實施例。 圖3為指令解碼器之實施例的方塊圖。 圖4為說明位址生成器之實施例的方塊圖。 圖5為比較程式化模型之方塊圖。 圖6說明描繪測試述詞旗標之表。 圖7說明描繪不同條件性指令之三個表。 圖8說明條件區塊指令。 圖9描述資料路徑邏輯電路。 圖10為說明用於加速(turbo)指令之主動邏輯電路的方塊圖。 圖11為說明用於半加速指令之主動邏輯電路的方塊圖。 圖12為說明用於盒加(box plus)指令之主動邏輯電路的方塊圖。 圖13為說明用於Max*指令之主動邏輯電路的方塊圖。 圖14為說明用於另一Max*指令之主動邏輯電路的方塊圖。 圖15描繪包含於多處理器陣列中之訊息匯流排的邏輯概述。 圖16為描繪待程式化為在訊息匯流排上發送訊息之部分之資訊的表。 圖17為描繪訊息匯流排節點之一般介面的方塊圖。 圖18為說明訊息匯流排節點之內部組件的方塊圖。 圖19為描繪訊息匯流排網路之實施例的方塊圖。 圖20為描繪HyperOp資料路徑之方塊圖。 圖21為描繪程式化模型之方塊圖。 圖22描繪說明操作訊息節點之方法之實施例的流程圖。
雖然本發明易受各種修改及替代形式之影響,但在圖式中藉助於實例展示了其特定實施例,且將在本文中對其進行詳細描述。然而,應理解,所述圖式及對其之詳細描述並不意欲將本發明限於所說明之特定形式,而是相反地,意欲涵蓋屬於隨附申請專利範圍所界定的本發明之精神及範疇內的所有修改、等效物及替代例。本文中所使用之標題僅為達成組織性目的,且不意欲用以限制描述之範疇。如貫穿本申請案所使用,詞語「可」係在許可之意義(亦即,意謂有可能)而非強制性之意義(亦即,意謂必須)下予以使用。類似地,詞語「包含」意謂包含但不限於。
提供流程圖以說明例示性實施例,且並不意欲將本發明限制於所說明之特定步驟。在各種實施例中,可同時執行、以不同於所展示次序之次序執行或省略所展示方法要素中之一些。亦可按需要執行額外的方法元素。
各種單元、電路或其他組件可被描述為「經組態以」執行一或多個任務。在此等上下文中,「經組態以」為大體上意謂「具有」在操作期間執行所述任務「之電路」之結構的寬泛敍述。因而,單元/電路/組件可經組態以甚至在單元/電路/組件當前未接通時執行任務。一般而言,形成對應於「經組態以」之結構的電路可包含硬體電路。類似地,為便於描述,各種單元/電路/組件可被描述為執行一或多個任務。此等描述應解釋為包含片語「經組態以」。敍述經組態以執行一或多個任務之單元/電路/組件明確地不意欲援引35 U.S.C.§ 112,第六段對彼單元/電路/組件之解釋。更一般而言,對任何元件之敍述明確地不意欲援引35 U.S.C.§ 112,第六段對彼元件之解釋,除非具體敍述了語言「用於……之手段」或「用於……之步驟」。
10:多處理器系統(MPS)

Claims (15)

  1. 一種多處理器設備,其包括:複數個處理器,其包含了包含一位址(address)生成器單元之一特定處理器;複數個資料記憶體路由器,其以一散佈配置(interspersed arrangement)耦接至所述複數個處理器,其中一特定資料記憶體路由器經組態以將接收到之訊息轉送(relay)至所述複數個資料記憶體路由器中之至少一其他資料記憶體路由器;及其中所述複數個處理器中之所述特定處理器經組態以:設定複數個述詞旗標(predicate flag)中之一特定述詞旗標,所述複數個述詞旗標包含與包含於所述特定處理器中之一資料路徑(datapath)相關聯的一第一組述詞旗標,及與所述位址生成器單元相關聯的一第二組述詞旗標;使用所述複數個述詞旗標以有條件地(conditionally)執行一指令;且基於與所述位址生成器單元相關聯之時序資料(timing information)設定一不同述詞旗標,所述不同述詞旗標包含於所述第二組述詞旗標中。
  2. 如請求項1之多處理器設備,其中所述特定處理器經進一步組態以:回應於一測試指令之執行,比較一第一值與一第二值以生成一結果;且 基於所述結果設定所述特定述詞旗標。
  3. 如請求項2之多處理器設備,其中為了比較所述第一值與所述第二值,所述特定處理器經進一步組態以使用所述第一值及所述第二值來執行邏輯運算以生成所述結果。
  4. 如請求項1之多處理器設備,其中所述特定處理器經進一步組態以基於與所述資料路徑相關聯之時序資料設定所述特定述詞旗標。
  5. 一種用於操作多處理器之方法,其包括:藉由複數個處理器中之一特定處理器,設定複數個述詞旗標中之一特定述詞旗標,所述複數個述詞旗標包含與包含於所述特定處理器中之一資料路徑相關聯之一第一組述詞旗標,其中所述複數個處理器以一散佈配置耦接至複數個資料記憶體路由器,且其中所述特定處理器包含一位址生成器單元;藉由所述特定處理器,使用所述複數個述詞旗標有條件地執行指令;且藉由所述特定處理器並基於與所述位址生成器單元相關聯之時序資料設定一不同述詞旗標,所述不同述詞旗標包含在包含於該複數個述詞旗標中之一第二組述詞旗標中,其中所述第二組述詞旗標係與所述位址生成器單元相關聯。
  6. 如請求項5之方法,其進一步包括: 回應於由所述特定處理器執行一測試指令,而比較一第一值與一第二值以生成一結果;且藉由所述特定處理器並基於所述結果,設定所述特定述詞旗標。
  7. 如請求項6之方法,其中比較所述第一值與所述第二值包含使用所述第一值及所述第二值來執行邏輯運算以生成所述結果。
  8. 如請求項5之方法,其進一步包括,藉由所述特定處理器並基於與所述資料路徑相關聯之時序資料,設定所述特定述詞旗標。
  9. 如請求項5之方法,其中所述資料路徑包含複數個槽(slots),其中所述指令包含於所述複數個槽中之一特定槽,且其中有條件地執行包含基於所述特定述詞旗標選擇(selecting)所述特定槽之所述指令。
  10. 一種多處理器設備,其包括:複數個處理器,其包含了包含複數個資料路徑之一特定處理器,所述複數個資料路徑包含一特定資料路徑,該特定資料路徑包含複數個算術邏輯(arithmetic logic)電路,其中所述複數個算術邏輯電路之一特定算術邏輯電路包含經組態以儲存一偏移(offset)之一查找表(lookup table);及複數個資料記憶體路由器,其以一散佈配置耦接至所述複數個處理器,其中一特定資料記憶體路由器經組態以將接收到之訊息轉送至所述複數個資料記憶體路由器中之至少一其他資料記憶體路由 器;及其中所述複數個處理器中之所述特定處理器經組態以:基於接收到之指令而選擇性地啟動(activate)所述複數個算術邏輯電路之一子集(subset);使用所述複數個算術邏輯電路之所述子集來執行所述接收到之指令以生成一結果;且將所述偏移添加至所述結果以生成一最終結果。
  11. 如請求項10之多處理器設備,其中為了選擇性地啟動所述複數個算術邏輯電路之所述子集,所述特定處理器經進一步組態以:解碼所述接收到之指令以生成一經解碼指令;且使用所述經解碼指令來選擇性地啟動所述複數個算術邏輯電路之所述子集。
  12. 如請求項10之多處理器設備,其中所述特定處理器經進一步組態以基於所述接收到之指令而在所述複數個算術邏輯電路之所述子集之給定算術邏輯電路之間路由資料。
  13. 如請求項12之多處理器設備,其中所述特定資料路徑包含複數個多工電路(multiplex circuits),所述複數個多工電路包含一特定多工電路經耦合於所述複數個算術邏輯電路之一第一算術邏輯電路及所述複數個算術邏輯電路之一第二算術邏輯電路之間,且其中為了路由所述資料,所述特定處理器經進一步組態以選擇性地改變所述特定多工電路之一狀態。
  14. 如請求項10之多處理器設備,其中所述複數個算術邏輯電路之一特定算術邏輯電路包含至少一加法器電路。
  15. 如請求項10之多處理器設備,其中所述接收到之指令指定一對數概率(log probability)運算。
TW109142450A 2017-11-03 2018-11-05 多處理器裝置及用於操作多處理器系統之方法 TWI798605B (zh)

Applications Claiming Priority (6)

Application Number Priority Date Filing Date Title
US201762581512P 2017-11-03 2017-11-03
US62/581,512 2017-11-03
PCT/US2018/058873 WO2019090032A1 (en) 2017-11-03 2018-11-02 Memory network processor
US16/178,738 US10747709B2 (en) 2017-11-03 2018-11-02 Memory network processor
USPCT/US18/58873 2018-11-02
US16/178,738 2018-11-02

Publications (2)

Publication Number Publication Date
TW202121194A TW202121194A (zh) 2021-06-01
TWI798605B true TWI798605B (zh) 2023-04-11

Family

ID=64362725

Family Applications (2)

Application Number Title Priority Date Filing Date
TW107139222A TWI714903B (zh) 2017-11-03 2018-11-05 多處理器裝置及用於操作多處理器系統之方法
TW109142450A TWI798605B (zh) 2017-11-03 2018-11-05 多處理器裝置及用於操作多處理器系統之方法

Family Applications Before (1)

Application Number Title Priority Date Filing Date
TW107139222A TWI714903B (zh) 2017-11-03 2018-11-05 多處理器裝置及用於操作多處理器系統之方法

Country Status (6)

Country Link
US (3) US10747709B2 (zh)
EP (1) EP3704593A1 (zh)
JP (2) JP7295104B2 (zh)
CN (2) CN111527485B (zh)
TW (2) TWI714903B (zh)
WO (1) WO2019090032A1 (zh)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111124994B (zh) * 2019-11-29 2022-11-11 苏州浪潮智能科技有限公司 一种数据传输方法、装置、gpu及可读存储介质
US11500641B2 (en) * 2020-10-07 2022-11-15 Huawei Technologies Co., Ltd. Devices, methods, and media for efficient data dependency management for in-order issue processors
KR102578292B1 (ko) 2020-12-15 2023-09-15 한국과학기술연구원 컴퓨터 메모리 효율성이 향상된 물체/영역 검출 및 분류 시스템
TWI775259B (zh) * 2020-12-29 2022-08-21 新唐科技股份有限公司 直接記憶體存取裝置與使用其的電子設備
FR3121239A1 (fr) * 2021-03-24 2022-09-30 Thales Système de communication comprenant une pluralité de processeurs et au moins un commutateur, et un procédé de communication associé
TWI799169B (zh) * 2021-05-19 2023-04-11 神盾股份有限公司 基於卷積運算的資料處理方法及電路
TWI783673B (zh) * 2021-09-09 2022-11-11 英業達股份有限公司 具有頻寬切換功能之伺服器系統
GB2605471B (en) * 2021-09-30 2023-11-01 Imagination Tech Ltd Processor with hardware pipeline

Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4323981A (en) * 1977-10-21 1982-04-06 Tokyo Shibaura Denki Kabushiki Kaisha Central processing unit with improved ALU circuit control
US20020199090A1 (en) * 2001-06-11 2002-12-26 Broadcom Corporation Conditional branch execution
US20040001445A1 (en) * 2002-07-01 2004-01-01 Elixent, Ltd Loosely-biased heterogeneous reconfigurable arrays
US20040030860A1 (en) * 2002-08-08 2004-02-12 Yu-Min Wang Conditional execution control head in a vliw processor
US20050285862A1 (en) * 2004-06-09 2005-12-29 Renesas Technology Corp. Semiconductor device and semiconductor signal processing apparatus
US20080046645A1 (en) * 2006-08-18 2008-02-21 Hui-Huang Chang Memory management apparatus and method for optical storage system
US20140143520A1 (en) * 2012-11-21 2014-05-22 Coherent Logix, Incorporated Processing System With Interspersed Processors With Multi-Layer Interconnect
US20140317388A1 (en) * 2013-04-22 2014-10-23 Samsung Electronics Co., Ltd. Apparatus and method for supporting multi-modes of processor
US20160328231A1 (en) * 2013-05-24 2016-11-10 Coherent Logix, Incorporated Memory-network processor with programmable optimizations
US20170134042A1 (en) * 2014-06-30 2017-05-11 Sanechips Technology Co.,Ltd. Map algorithm-based turbo decoding method and apparatus, and computer storage medium

Family Cites Families (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0221360B1 (en) * 1985-11-04 1992-12-30 International Business Machines Corporation Digital data message transmission networks and the establishing of communication paths therein
US5459836A (en) 1990-02-09 1995-10-17 Unisys Corporation Inter-processor communication net
JP3251723B2 (ja) * 1993-07-15 2002-01-28 富士通株式会社 放送通信方法
KR970007251B1 (ko) 1994-02-25 1997-05-07 한국전기통신공사 다중버스용 실시간 멧세지 전송장치 및 그 제어방법
US6226706B1 (en) 1997-12-29 2001-05-01 Samsung Electronics Co., Ltd. Rotation bus interface coupling processor buses to memory buses for interprocessor communication via exclusive memory access
US8037224B2 (en) * 2002-10-08 2011-10-11 Netlogic Microsystems, Inc. Delegating network processor operations to star topology serial bus interfaces
US7505734B2 (en) * 2004-09-10 2009-03-17 Nivis, Llc System and method for communicating broadcast messages in a mesh network
JP4336894B2 (ja) * 2005-03-30 2009-09-30 日本電気株式会社 情報処理システムとjob実行方法
US7941499B2 (en) 2007-03-06 2011-05-10 Freescale Semiconductor, Inc. Interprocessor message transmission via coherency-based interconnect
US7761687B2 (en) * 2007-06-26 2010-07-20 International Business Machines Corporation Ultrascalable petaflop parallel supercomputer
US9043478B2 (en) 2009-12-15 2015-05-26 Qualcomm Innovation Center, Inc. Methods and apparatus for using a distributed message bus for ad hoc peer-to-peer connectivity
JP5815717B2 (ja) 2010-10-15 2015-11-17 コーヒレント・ロジックス・インコーポレーテッド マルチプロセッサシステムにおける通信の無効化
JP2012146201A (ja) * 2011-01-13 2012-08-02 Toshiba Corp オンチップルータ及びそれを用いたマルチコアシステム
US9760526B1 (en) 2011-09-30 2017-09-12 EMC IP Holdings Company LLC Multiprocessor messaging system
WO2013098993A1 (ja) * 2011-12-28 2013-07-04 富士通株式会社 計算機システム,通信制御装置及び計算機システムの制御方法
US20140025884A1 (en) * 2012-07-18 2014-01-23 Netronome Systems, Inc. Transactional Memory that Performs a Statistics Add-and-Update Operation
EP3614273A3 (en) * 2012-12-13 2020-04-15 Coherent Logix, Incorporated Multiprocessor system with improved secondary interconnection network

Patent Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4323981A (en) * 1977-10-21 1982-04-06 Tokyo Shibaura Denki Kabushiki Kaisha Central processing unit with improved ALU circuit control
US20020199090A1 (en) * 2001-06-11 2002-12-26 Broadcom Corporation Conditional branch execution
US20040001445A1 (en) * 2002-07-01 2004-01-01 Elixent, Ltd Loosely-biased heterogeneous reconfigurable arrays
US20040030860A1 (en) * 2002-08-08 2004-02-12 Yu-Min Wang Conditional execution control head in a vliw processor
US20050285862A1 (en) * 2004-06-09 2005-12-29 Renesas Technology Corp. Semiconductor device and semiconductor signal processing apparatus
US20080046645A1 (en) * 2006-08-18 2008-02-21 Hui-Huang Chang Memory management apparatus and method for optical storage system
US20140143520A1 (en) * 2012-11-21 2014-05-22 Coherent Logix, Incorporated Processing System With Interspersed Processors With Multi-Layer Interconnect
US20140317388A1 (en) * 2013-04-22 2014-10-23 Samsung Electronics Co., Ltd. Apparatus and method for supporting multi-modes of processor
US20160328231A1 (en) * 2013-05-24 2016-11-10 Coherent Logix, Incorporated Memory-network processor with programmable optimizations
US20170134042A1 (en) * 2014-06-30 2017-05-11 Sanechips Technology Co.,Ltd. Map algorithm-based turbo decoding method and apparatus, and computer storage medium

Also Published As

Publication number Publication date
TW202121194A (zh) 2021-06-01
US11550750B2 (en) 2023-01-10
CN117194311A (zh) 2023-12-08
WO2019090032A1 (en) 2019-05-09
JP2021501947A (ja) 2021-01-21
EP3704593A1 (en) 2020-09-09
US10747709B2 (en) 2020-08-18
JP2023113879A (ja) 2023-08-16
TW201923614A (zh) 2019-06-16
US20210034566A1 (en) 2021-02-04
CN111527485B (zh) 2023-09-12
US11829320B2 (en) 2023-11-28
US20230061478A1 (en) 2023-03-02
JP7295104B2 (ja) 2023-06-20
US20190138492A1 (en) 2019-05-09
TWI714903B (zh) 2021-01-01
CN111527485A (zh) 2020-08-11

Similar Documents

Publication Publication Date Title
TWI798605B (zh) 多處理器裝置及用於操作多處理器系統之方法
JP7210078B2 (ja) プログラム可能な最適化を有するメモリネットワークプロセッサ
US20210406027A1 (en) Advanced processor architecture
US9552206B2 (en) Integrated circuit with control node circuitry and processing circuitry
US7877585B1 (en) Structured programming control flow in a SIMD architecture
US8539399B1 (en) Method and apparatus for providing user-defined interfaces for a configurable processor
TWI764997B (zh) 圖形處理單元及處理圖形應用程式的方法
KR20220038694A (ko) 가속기 회로의 조작을 위한 명령어
Gupta et al. System synthesis via hardware-software co-design
US20050273776A1 (en) Assembler supporting pseudo registers to resolve return address ambiguity
KR20220036950A (ko) 순수 함수 신경망 가속기 시스템 및 아키텍처
JP2005508029A (ja) リコンフィギュアラブルアーキテクチャのためのプログラム変換方法
US20050283756A1 (en) Method and system to automatically generate performance evaluation code for multi-threaded/multi-processor architectures
Ginosar The plural many-core architecture-high performance at low power
CN117348930A (zh) 指令处理装置、指令执行方法、片上系统和板卡
US20130061028A1 (en) Method and system for multi-mode instruction-level streaming
Koranne et al. The Synergistic Processing Element
Bucciero The Design of the Node for the Single Chip Message Passing (SCMP) Parallel Computer