專利名稱:避免數(shù)據(jù)流機(jī)器中的死鎖的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及數(shù)字邏輯電路的改進(jìn)。具體地,本發(fā)明涉及通過(guò)合適地使用硬件領(lǐng)域資源來(lái)平衡數(shù)據(jù)流路徑的相對(duì)吞吐量,該數(shù)據(jù)流路徑在第一節(jié)點(diǎn)分叉并在第二節(jié)點(diǎn)匯聚。本發(fā)明涉及執(zhí)行改進(jìn)的設(shè)備、方 法和計(jì)算機(jī)程序產(chǎn)品。
背景技術(shù):
近年來(lái)釆用了許多面向硬件描述的易用編程語(yǔ)言的不同方法,以 便提供快速并且容易的方式設(shè)計(jì)數(shù)字電路。當(dāng)編程數(shù)據(jù)流機(jī)器時(shí),可 釆用不同于硬件描述語(yǔ)言的語(yǔ)言。原則上,執(zhí)行數(shù)據(jù)流機(jī)器上特定任 務(wù)的算法描述僅必須包括描述自身,但要直接在集成電路上執(zhí)行的算 法描述必須在硬件中包括算法特定執(zhí)行的許多細(xì)節(jié)。例如,硬件描述 必須包含關(guān)于寄存器布置的信息以便提供最優(yōu)時(shí)鐘頻率,還含有關(guān)于 使用哪個(gè)乘法器的信息,等等。許多年來(lái),數(shù)據(jù)流機(jī)器被當(dāng)作并行計(jì)算的優(yōu)異模型,且因此進(jìn)行 了許多嘗試來(lái)設(shè)計(jì)高效的數(shù)據(jù)流機(jī)器。由于多種原因,早期嘗試設(shè)計(jì) 的數(shù)據(jù)流機(jī)器在計(jì)算性能方面與其他可用并行計(jì)算技術(shù)相比較差。注意不應(yīng)將數(shù)據(jù)流機(jī)器與數(shù)據(jù)流圖混淆。在編譯程序源代碼時(shí), 今天可用的多數(shù)編譯器利用數(shù)據(jù)流分析和數(shù)據(jù)流描述(公知為數(shù)據(jù)流圖,或DFG),以便優(yōu)化編譯的程序的性能。對(duì)算法執(zhí)行的數(shù)據(jù)流分 析得到數(shù)據(jù)流圖。數(shù)據(jù)流圖示出算法內(nèi)存在的數(shù)據(jù)關(guān)系。更具體地, 數(shù)據(jù)流圖通常包括節(jié)點(diǎn)和弧,節(jié)點(diǎn)指示算法對(duì)被處理數(shù)據(jù)執(zhí)行的具體 操作,弧指示圖中節(jié)點(diǎn)間的互連。數(shù)據(jù)流圖因此是特定算法的抽象描 述并用于分析算法。另一方面,數(shù)據(jù)流機(jī)器是基于數(shù)據(jù)流圖可實(shí)際執(zhí) 行算法的計(jì)算機(jī)器。數(shù)據(jù)流機(jī)器以與控制流設(shè)備明顯不同的方式工作,如von Neumann架構(gòu)(個(gè)人計(jì)算機(jī)中標(biāo)準(zhǔn)處理器是von Neumann架構(gòu)的一 個(gè)例子)。在數(shù)據(jù)流機(jī)器中,程序是具有特殊數(shù)據(jù)流控制節(jié)點(diǎn)的數(shù)據(jù) 流圖,而非處理器要執(zhí)行的系列操作。數(shù)據(jù)是以公知為標(biāo)記的數(shù)據(jù)包 組織的,標(biāo)記位于數(shù)據(jù)流圖的弧上。標(biāo)記可含有節(jié)點(diǎn)操作的任意數(shù)據(jù) 結(jié)構(gòu),節(jié)點(diǎn)由弧連接,比如有比特位、浮點(diǎn)數(shù)、陣列等。根據(jù)數(shù)據(jù)流 機(jī)器的類型,每個(gè)孤可最多保存單個(gè)標(biāo)記(靜態(tài)數(shù)據(jù)流機(jī)器)、固定 數(shù)目的標(biāo)記(同步數(shù)據(jù)流機(jī)器)、或不定數(shù)目的標(biāo)記(動(dòng)態(tài)數(shù)據(jù)流機(jī) 器)。
數(shù)據(jù)流機(jī)器中節(jié)點(diǎn)等待標(biāo)記出現(xiàn)在足夠數(shù)目的輸入弧上,因此它 們的操作可執(zhí)行,于是節(jié)點(diǎn)消耗這些標(biāo)記并在輸出弧上產(chǎn)生新標(biāo)記。 例如,執(zhí)行添加兩個(gè)標(biāo)記的節(jié)點(diǎn)將等待直到標(biāo)記已經(jīng)出現(xiàn)在其輸入上, 消耗這兩個(gè)標(biāo)記并產(chǎn)生結(jié)果(該情形中,輸入標(biāo)記數(shù)據(jù)的和)作為輸 出弧上的新標(biāo)記。
但是,如同CPU中執(zhí)行的那樣,根據(jù)條件分支選擇不同操作對(duì) 數(shù)據(jù)進(jìn)行操作,數(shù)據(jù)流機(jī)器根據(jù)條件分支通過(guò)數(shù)據(jù)流控制節(jié)點(diǎn)將數(shù)據(jù) 引導(dǎo)到不同節(jié)點(diǎn)。因此,數(shù)據(jù)流機(jī)器具有可選擇性地產(chǎn)生特定輸出上 的標(biāo)記的節(jié)點(diǎn)(稱為切換節(jié)點(diǎn))和可選擇性消耗特定輸入上的標(biāo)記的 節(jié)點(diǎn)(稱為合并節(jié)點(diǎn))。另一個(gè)普通數(shù)據(jù)流控制節(jié)點(diǎn)的例子是門(mén)節(jié)點(diǎn) (gate-node),其可選擇性地從數(shù)據(jù)流除去標(biāo)記。許多其他操縱節(jié)點(diǎn) 的數(shù)據(jù)流也可以。
圖中每個(gè)節(jié)點(diǎn)可潛在地獨(dú)立于曲線中所有其他節(jié)點(diǎn)執(zhí)行操作。一
旦節(jié)點(diǎn)有在相關(guān)輸入弧上的數(shù)據(jù),并且有空間產(chǎn)生相關(guān)輸出孤上的結(jié) 果,則節(jié)點(diǎn)可執(zhí)行操作(公知為觸發(fā)(firing))。無(wú)論其他節(jié)點(diǎn)能觸 發(fā)與否,該節(jié)點(diǎn)都將觸發(fā)。因此,執(zhí)行節(jié)點(diǎn)操作沒(méi)有特定順序,如在 控制流設(shè)備中;數(shù)據(jù)流圖中操作的執(zhí)行順序是無(wú)關(guān)的。執(zhí)行順序例如 可以是所有可能觸發(fā)的節(jié)點(diǎn)同時(shí)執(zhí)行。
如上所述,數(shù)據(jù)流機(jī)器取決于它們的設(shè)計(jì),通常被分為三個(gè)不同 類別靜止數(shù)據(jù)流機(jī)器、動(dòng)態(tài)數(shù)據(jù)流機(jī)器、和同步數(shù)據(jù)流機(jī)器.在靜止數(shù)據(jù)流機(jī)器中,相應(yīng)數(shù)據(jù)流圖中每個(gè)弧可在每個(gè)時(shí)刻瞬間 僅保持單個(gè)標(biāo)記。在動(dòng)態(tài)數(shù)據(jù)流機(jī)器中,每個(gè)弧可保持不定數(shù)目的標(biāo)記,同時(shí)等待 接收準(zhǔn)備接受這些標(biāo)記的節(jié)點(diǎn)。這允許在設(shè)計(jì)數(shù)據(jù)流機(jī)器時(shí)構(gòu)建遞歸 深度未知的遞歸過(guò)程。這樣的過(guò)程可顛倒遞歸過(guò)程中被處理的數(shù)據(jù)。 這可在遞歸完成后執(zhí)行計(jì)算時(shí)導(dǎo)致標(biāo)記的錯(cuò)誤匹配。上面的情形可通過(guò)添加指示協(xié)議中每個(gè)標(biāo)記的序列號(hào)的標(biāo)志來(lái) 處理。遞歸中標(biāo)記序列號(hào)是連續(xù)監(jiān)視的,并且當(dāng)標(biāo)記離開(kāi)遞歸時(shí),只 要其不能與遞歸外部的標(biāo)記匹配,就不允許其延續(xù)。在遞歸不是尾遞歸的情況下,當(dāng)每次遞歸呼叫時(shí),上下文必須以在遞歸由普通(von Neumann)處理器執(zhí)行時(shí)上下文存儲(chǔ)在堆棧中的 方式相同的方式存儲(chǔ)在緩沖器中。最后,動(dòng)態(tài)數(shù)據(jù)流機(jī)器可并行執(zhí)行 數(shù)據(jù)依賴遞歸。同步數(shù)據(jù)流機(jī)器可操作,但不能在接收節(jié)點(diǎn)自身準(zhǔn)備的同時(shí)讓標(biāo) 記在弧上等待。相反,每個(gè)節(jié)點(diǎn)的標(biāo)記生成和消耗間的關(guān)系是事先計(jì) 算的。借助該信息,可以判斷如何設(shè)置節(jié)點(diǎn)并就可同時(shí)駐存其上的標(biāo) 記數(shù)目分配弧大小。因此,可以確保每個(gè)節(jié)點(diǎn)產(chǎn)生與后續(xù)節(jié)點(diǎn)消耗一 樣多的標(biāo)記。然后可設(shè)計(jì)系統(tǒng)以便每個(gè)節(jié)點(diǎn)總是可以產(chǎn)生數(shù)據(jù),因?yàn)?后續(xù)的節(jié)點(diǎn)總將消耗該數(shù)據(jù)。其缺點(diǎn)是沒(méi)有不定的延遲(如數(shù)據(jù)依賴 的遞歸)可存在于該結(jié)構(gòu)中。數(shù)據(jù)流機(jī)器最常見(jiàn)的是利用在傳統(tǒng)CPU上運(yùn)行的計(jì)算機(jī)程序?qū)?現(xiàn)的。通常使用計(jì)算機(jī)集群或某些印制電路板上的CPU陣列。使用數(shù) 據(jù)流機(jī)器的主要目的是利用它們的并行性從而構(gòu)建實(shí)驗(yàn)性超級(jí)計(jì)算 機(jī)。為了直接以硬件構(gòu)建數(shù)據(jù)流機(jī)器做了大量嘗試。這是通過(guò)以專用 集成電路(ASIC)創(chuàng)建大量處理器實(shí)現(xiàn)的。該方法與使用電路板上處 理器相比的主要優(yōu)點(diǎn)是同一 ASIC上處理器間更高的通信速率。迄今 為止,商業(yè)上還沒(méi)有成功的用于計(jì)算的使用數(shù)據(jù)流機(jī)器的嘗試?,F(xiàn)場(chǎng)可編程門(mén)陣列(FPGA)和其他可編程邏輯器件(PLD)也 可用于硬件構(gòu)造。PFGA是運(yùn)行中可重配置的硅芯片。它們都基于小隨機(jī)存取存儲(chǔ)器陣列,通常是靜態(tài)隨機(jī)存取存儲(chǔ)器(SRAM)。每個(gè) SRAM保存布爾函數(shù)的查找表,因此使得FPGA能夠執(zhí)行任何邏輯運(yùn) 算。FPGA也保存類似可配置路由資源從而允許信號(hào)在從SRAM間傳 送。通過(guò)分配硅芯片的邏輯操作給SRAM并配置路由資源,可以實(shí) 現(xiàn)任何小到足以裝到FPGA表面上的硬件構(gòu)造。與ASIC相比,在相 同量的硅表面上FPGA可執(zhí)行少得多的邏輯運(yùn)算。FPGA的優(yōu)點(diǎn)是僅 輸入新值到SRAM查找表中并改變路由就可改變成為任何其他硬件 構(gòu)造。FPGA可看作可接受任何硬件構(gòu)造的空硅表面,并且可以非常 短的時(shí)間(小于100毫秒)改變到任何其他硬件構(gòu)造。其他普通PLD可以是熔絲連接的,因此是永久配置的。熔絲連 接PLD相比ASIC的主要優(yōu)點(diǎn)是容易構(gòu)造。為了制造ASIC,要求非 常昂貴和復(fù)雜的工藝。相比,PLD可通過(guò)簡(jiǎn)單工具幾分鐘構(gòu)建。有大 量用于PLD的演化技術(shù)可克服熔絲連接的PLD和FPGA的某些缺點(diǎn)。通常為了程序化FPGA,必須使用FPGA供應(yīng)商提供的布局布線 工具(place-and-route tool)。布局布線軟件通常接受合成軟件的網(wǎng) 表或直接合成的硬件描述語(yǔ)言(HDL)的源代碼。然后布局布線軟件 在用于在編程單元中程序化FPGA的說(shuō)明文件中輸出數(shù)字控制參數(shù)。 類似技術(shù)被用于其他PLD。當(dāng)設(shè)計(jì)集成電路時(shí),通常的做法是設(shè)計(jì)作為狀態(tài)機(jī)器的電路,因 為它們提供簡(jiǎn)化硬件構(gòu)造的框架。狀態(tài)機(jī)器在執(zhí)行復(fù)雜數(shù)據(jù)流時(shí)特別 有用,這里數(shù)據(jù)將根據(jù)前面的計(jì)算以不同方式通過(guò)邏輯運(yùn)算。狀態(tài)機(jī)器也允許再利用硬件元件,由此優(yōu)化電路的物理尺寸。這 允許以較低的成本制造集成電路。通過(guò)以數(shù)據(jù)流機(jī)器形式利用大量處理器構(gòu)建超級(jí)計(jì)算機(jī),希望實(shí) 現(xiàn)高度并行。人們?cè)噲D實(shí)現(xiàn)處理器由許多CPU或ASIC組成,每一個(gè) 都包括許多狀態(tài)機(jī)器或CPU。因?yàn)樵缙跀?shù)據(jù)流機(jī)器的設(shè)計(jì)包括使用 ASIC中狀態(tài)機(jī)器(通常為處理器的形式),所以以如FPGA的可編 程邏輯器件執(zhí)行數(shù)據(jù)流機(jī)器的最直接的方法也可使用狀態(tài)機(jī)器。所有先前已知數(shù)據(jù)流機(jī)器的一般特征是,在最終硬件執(zhí)行中,所建立的數(shù)據(jù)流圖的節(jié)點(diǎn)不對(duì)應(yīng)于特定硬件單元(通常公知為功能單元,F(xiàn)U)。 而是特定時(shí)刻碰巧可用的硬件單元被用來(lái)執(zhí)行數(shù)據(jù)流圖中受影響節(jié)點(diǎn) 規(guī)定的計(jì)算。如果數(shù)據(jù)流圖中特定節(jié)點(diǎn)要執(zhí)行一次以上,每次節(jié)點(diǎn)被 執(zhí)行時(shí)可使用不同的功能單元。此外,先前的數(shù)據(jù)流機(jī)器都是利用狀態(tài)機(jī)器或處理器來(lái)執(zhí)行從而 執(zhí)行數(shù)據(jù)流機(jī)器的功能。每個(gè)狀態(tài)機(jī)器都能夠執(zhí)行數(shù)據(jù)流圖中任意節(jié) 點(diǎn)的功能。要求這一點(diǎn)使得每個(gè)節(jié)點(diǎn)能夠在任意功能單元中被執(zhí)行。 因?yàn)槊總€(gè)狀態(tài)機(jī)器能夠執(zhí)行任意節(jié)點(diǎn)的功能,所以除了當(dāng)前執(zhí)行節(jié)點(diǎn) 外,任意其他節(jié)點(diǎn)要求的硬件將處于休眠狀態(tài)。注意,狀態(tài)機(jī)器(有 時(shí)帶有標(biāo)記操縱的支持硬件)是數(shù)據(jù)流機(jī)器自身的實(shí)現(xiàn)。數(shù)據(jù)流機(jī)器 不是由某些其他裝置執(zhí)行的,而是在其功能節(jié)點(diǎn)中含有狀態(tài)機(jī)器。雖然高級(jí)語(yǔ)言中硬件設(shè)計(jì)一般是希望的,但在FPGA情形中有特 定優(yōu)勢(shì)。因?yàn)镕PGA是可重配置的,所以單個(gè)FPGA可接受許多不同 硬件設(shè)計(jì)。為了充分利用該能力,需要與傳統(tǒng)硬件描述語(yǔ)言相比更容 易規(guī)定設(shè)計(jì)的方式。對(duì)于FPGA,高級(jí)語(yǔ)言的益處甚至可超過(guò)精巧設(shè) 計(jì)的效率的成本,但ASIC設(shè)計(jì)的某些方面不是這樣。通過(guò)構(gòu)建FPGA 數(shù)據(jù)流機(jī)器,高級(jí)語(yǔ)言可用來(lái)實(shí)現(xiàn)高效的FPGA硬件設(shè)計(jì)。通過(guò)引用將Edward A. Lee的以下文獻(xiàn)并入于此,"A Denotational Semantics for Dataflow with Firing", Electron. Res. Lab., Univ. California, Berkeley, CA, Memo UCB/ERL M97/3, 1997 年1月,該文獻(xiàn)揭示了數(shù)據(jù)流機(jī)器的正式語(yǔ)義學(xué)。按照該文獻(xiàn)中給出 的語(yǔ)義學(xué)執(zhí)行的機(jī)器是被本領(lǐng)域技術(shù)人員當(dāng)作數(shù)據(jù)流機(jī)器的例子。WO 0159593公開(kāi)了將算法的基于高級(jí)軟件的描述匯編為數(shù)字硬 件執(zhí)行,通過(guò)引用將該文獻(xiàn)并入于此。編程語(yǔ)言的語(yǔ)義學(xué)是通過(guò)使用 編譯工具解釋的,該編譯工具分析軟件描述從而生成控制和數(shù)據(jù)流圖。 然后該圖作為優(yōu)化、變換和注釋的中間格式。最終圖被編譯為硬件執(zhí) 行的寄存器傳送級(jí)或網(wǎng)表級(jí)描述。獨(dú)立控制路徑被用于判斷流圖中節(jié) 點(diǎn)何時(shí)應(yīng)傳送數(shù)據(jù)到鄰近節(jié)點(diǎn)。并行處理可通過(guò)分裂控制路徑和數(shù)據(jù)路徑實(shí)現(xiàn)。通過(guò)利用控制路徑,可實(shí)現(xiàn)"波前處理",這意味著數(shù)據(jù)流 過(guò)實(shí)際硬件執(zhí)行作為被控制路徑控制的波前。使用控制路徑表示僅部分硬件可在實(shí)行數(shù)據(jù)處理時(shí)使用。其余的 電路等待第一波前通過(guò)流圖,以便控制路徑可發(fā)出新波前。數(shù)據(jù)流機(jī)器在通過(guò)引用其內(nèi)容被并入于此的WO2004084086中 得到了說(shuō)明,該文獻(xiàn)揭示了從高級(jí)源代碼規(guī)范生成數(shù)字邏輯描述的方 法。至少部分源代碼規(guī)范被編譯為多個(gè)有向圖形表示,其包括具有至 少一個(gè)輸入或至少一個(gè)輸出的功能節(jié)點(diǎn)和指示功能節(jié)點(diǎn)間互連的連 接。為圖形的每個(gè)功能節(jié)點(diǎn)并為功能節(jié)點(diǎn)之間的每個(gè)連接定義硬件元 件。最后,定義圖形每個(gè)功能節(jié)點(diǎn)的觸發(fā)規(guī)則(firing rule)。對(duì)于上述數(shù)據(jù)流機(jī)器,主要興趣是優(yōu)化數(shù)據(jù)流從而實(shí)現(xiàn)改進(jìn)的性 能。因此問(wèn)題是如何提高現(xiàn)有硬件的性能。進(jìn)一步的問(wèn)題是避免處理 死鎖。再進(jìn)一步的問(wèn)題是如何以硬件,特別是以自動(dòng)方式,執(zhí)行數(shù)據(jù) 流機(jī)器。發(fā)明內(nèi)容綜上所述,本發(fā)明目的是解決或至少部分減少一個(gè)或多個(gè)上述問(wèn)題。一個(gè)目的是改善與數(shù)據(jù)路徑相關(guān)的性能,該數(shù)據(jù)路徑從第一節(jié)點(diǎn) 分叉然后在第二節(jié)點(diǎn)匯聚。至于上述目的,本發(fā)明基于這樣的理解,即平衡在第一節(jié)點(diǎn)分叉 并在第二節(jié)點(diǎn)匯聚的數(shù)據(jù)流路徑將避免暫停(halting )數(shù)據(jù)流中節(jié)點(diǎn)。 在為執(zhí)行數(shù)字邏輯電路生成數(shù)字控制參數(shù)中應(yīng)用該理解將使得能夠改 善性能和/或節(jié)省執(zhí)行該數(shù)字邏輯電路的硬件的區(qū)域資源。本發(fā)明進(jìn)一 步基于這樣的理解,即雖然為了清楚而容易地理解本發(fā)明的原理,在 本公開(kāi)中提供的例子不反映實(shí)際復(fù)雜度,但是通過(guò)計(jì)算機(jī)實(shí)現(xiàn)便于執(zhí) 行根據(jù)本發(fā)明的數(shù)字邏輯電路所要求的類型的計(jì)算。本發(fā)明進(jìn)一步基于這樣的理解,即數(shù)字邏輯電路的性能可通過(guò)加速部分執(zhí)行和減慢部 分執(zhí)行而改善的。按照本發(fā)明第一方面,提供了生成用于以數(shù)字邏輯電路執(zhí)行數(shù)據(jù) 流機(jī)器的數(shù)字控制參數(shù)的設(shè)備,該數(shù)字邏輯電路包括具有至少一個(gè)輸 入或至少一個(gè)輸出的功能節(jié)點(diǎn)和指示所述功能節(jié)點(diǎn)間互連的連接,其中所述數(shù)字邏輯電路包括由連續(xù)標(biāo)記流化(stream)的第一路徑和由 所述標(biāo)記流化的第二路徑,上述設(shè)備包括確定到所述路徑的必要數(shù)據(jù) 流相對(duì)吞吐量的確定器;分配緩沖器給一個(gè)所述路徑從而平衡所述路 徑的呑吐量的分配器;分配緩沖器的移除器,被設(shè)置為移除分配的緩 沖器直到以最小數(shù)目的緩沖器獲得所述必要的相對(duì)吞吐量;以及用于 執(zhí)行包括所述最小數(shù)目的緩沖器的所述數(shù)字邏輯電路的數(shù)字控制參數(shù) 發(fā)生器。這表示所述第一和第二路徑中暫停的數(shù)目保持在這樣的水平,即 減小硬件資源消耗減小但卻不會(huì)降低整個(gè)數(shù)字邏輯電路的性能。 第 一和第二路徑可以是并行或串行的。移除分配的緩沖器可相對(duì)于所述數(shù)字邏輯電路的所述執(zhí)行的其 他部分的可用空間、所述路徑的相對(duì)吞吐量、和所述數(shù)字邏輯電路的 所述執(zhí)行的其余部分的吞吐量來(lái)執(zhí)行。這樣改善了數(shù)字邏輯電路的整 體性能,并且可以最適當(dāng)?shù)乩糜布Y源。所述至少一個(gè)路徑可包括至少兩個(gè)功能節(jié)點(diǎn),其中第一所述功能 節(jié)點(diǎn)具有第一相對(duì)吞吐量,而第二所述節(jié)點(diǎn)具有第二相對(duì)呑吐量,其 中所述第二相對(duì)吞吐量通過(guò)所述第二功能節(jié)點(diǎn)的迭代或流水線化 (pipelining)適于等于所述第一相對(duì)吞吐量。這使得能夠改善處理路 徑上相對(duì)吞吐量匹配,使得在硬件資源給定的條件下進(jìn)一 步改善整體 性能。該原理也可應(yīng)用到執(zhí)行其中路徑是串行的數(shù)字邏輯電路的設(shè)備 串行。數(shù)字控制參數(shù)可控制現(xiàn)場(chǎng)可編程門(mén)陣列(FPGA)以執(zhí)行數(shù)字 邏輯電路。數(shù)據(jù)流機(jī)器可從高級(jí)源代碼規(guī)范生成。其優(yōu)點(diǎn)是FPGA的 有用性可顯著增大,這是因?yàn)镕PGA的許多邏輯電路可容易地創(chuàng)建。 這允許FPGA成為由普通軟件程序員使用的快捷通用的計(jì)算裝置,這 里專用FPGA可為大量完全不同的電路快速編程。數(shù)字控制參數(shù)可控制專用集成電路(ASIC)或芯片從而執(zhí)行數(shù)字邏輯電路。數(shù)據(jù)流機(jī)器 可從高級(jí)源代碼規(guī)范生成。這使得設(shè)備是用戶友好的且運(yùn)算高效的。按照本發(fā)明第二方面,提供了生成用于以數(shù)字邏輯電路執(zhí)行數(shù)據(jù) 流機(jī)器的數(shù)字控制參數(shù)的方法,該數(shù)字邏輯電路包括具有至少一個(gè)輸 入或至少一個(gè)輸出的功能節(jié)點(diǎn)和指示所述功能節(jié)點(diǎn)間互連的連接,其 中所述數(shù)字邏輯電路包括由連續(xù)標(biāo)記流化的第 一路徑和由所述標(biāo)記流 化的第二路徑,上述方法包括以下步驟確定數(shù)據(jù)流對(duì)所述路徑必要 的相對(duì)吞吐量;分配緩沖器給一個(gè)所述路徑從而平衡所述路徑的吞吐 量;移除分配的緩沖器直到所述必要的相對(duì)吞吐量是以最小數(shù)目的緩 沖器獲得的;以及生成用于執(zhí)行包括所述最小數(shù)目的緩沖器的所述數(shù) 字邏輯電路的數(shù)字控制參數(shù)。所述移除步驟可相對(duì)于所述數(shù)字邏輯電路的所述執(zhí)行的其他部 分的可用空間、所述路徑的相對(duì)吞吐量、和所述數(shù)字邏輯電路的所述 執(zhí)行的其余部分的吞吐量來(lái)執(zhí)行。該方法可包括通過(guò)FPGA執(zhí)行數(shù)字邏輯電路。該方法可包括通過(guò) 專用集成電路(ASIC)或芯片執(zhí)行數(shù)字邏輯電路。該方法可包括從高 級(jí)源代碼規(guī)范生成數(shù)據(jù)流機(jī)器。按照本發(fā)明第三方面,提供了包括程序代碼的計(jì)算機(jī)程序產(chǎn)品, 該程序代碼在被下栽到計(jì)算機(jī)并由計(jì)算機(jī)執(zhí)行時(shí)執(zhí)行按照本發(fā)明第二 方面的方法。按照本發(fā)明第四方面,提供了計(jì)算機(jī)可執(zhí)行的數(shù)字邏輯電路,該 數(shù)字邏輯電路包括用以執(zhí)行數(shù)據(jù)流機(jī)器的具有至少一個(gè)輸入或至少 一個(gè)輸出的功能節(jié)點(diǎn)和指示所述功能節(jié)點(diǎn)間互連的連接;由連續(xù)標(biāo)記 流化的第一路徑;以及由所述標(biāo)記流化的第二標(biāo)記,該數(shù)字邏輯電路 包括最小數(shù)目的附加緩沖器,其中附加緩沖器的所述數(shù)目是通過(guò)以下 步驟而最小化的確定數(shù)據(jù)流對(duì)所述路徑必要的相對(duì)吞吐量;分配緩 沖器給所述多個(gè)路徑中的一個(gè)從而平衡所述多個(gè)路徑的吞吐量;和移 除分配的緩沖器直到獲得所述必要的相對(duì)吞吐量。第一路徑和第二路徑可以是并行的。移除所分配的緩沖器可相對(duì)于所述數(shù)字邏輯電路的所述執(zhí)行的其他部分的可用空間、所述路徑的 相對(duì)吞吐量、和所述數(shù)字邏輯電路的所述執(zhí)行的其余部分的吞吐量來(lái) 執(zhí)行。至少一個(gè)所述路徑可包括至少兩個(gè)功能節(jié)點(diǎn),其中第一個(gè)所述 功能節(jié)點(diǎn)具有第 一相對(duì)吞吐量,第二所述節(jié)點(diǎn)具有第二相對(duì)吞吐量, 其中所述第二相對(duì)吞吐量是通過(guò)所述第二功能節(jié)點(diǎn)的迭代或流水線化 適于等于所述第一相對(duì)吞吐量。第一和第二路徑可以是串行的。電路可通過(guò)FPGA執(zhí)行。電路可通過(guò)專用集成電路(ASIC)或芯片執(zhí)行。 執(zhí)行數(shù)據(jù)流機(jī)器的節(jié)點(diǎn)和連接可以從高級(jí)源代碼規(guī)范生成。按照本發(fā)明第五方面,提供了數(shù)據(jù)流機(jī)器,其包括具有至少一 個(gè)輸入或至少一個(gè)輸出的功能節(jié)點(diǎn)和指示所述功能節(jié)點(diǎn)間互連的連 接;由連續(xù)標(biāo)記流化的第一路徑;和由所述標(biāo)記流化的第二路徑,該 數(shù)據(jù)流機(jī)器包括最小數(shù)目的附加緩沖器,其中所述附加緩沖器的所述 數(shù)目是通過(guò)以下步驟而最小化的確定數(shù)據(jù)流對(duì)所述路徑必要的相對(duì) 吞吐量;分配緩沖器給所述多個(gè)路徑中的一個(gè)從而平衡所述多個(gè)路徑 的吞吐量;和移除所分配的緩沖器直到獲得所述必要的相對(duì)吞吐量。按照本發(fā)明第六方面,提供了確定執(zhí)行數(shù)據(jù)流機(jī)器的數(shù)字邏輯電 路的緩沖器數(shù)目的方法,該方法包括以下步驟識(shí)別由連續(xù)標(biāo)記流化 的第一路徑和由所述標(biāo)記流化的第二路徑;確定對(duì)所述路徑的必要的 數(shù)據(jù)流相對(duì)呑吐量;分配緩沖器給所述多個(gè)路徑中的一個(gè)從而平衡所 述多個(gè)路徑的吞吐量;以及移除所分配的緩沖器直到以最小數(shù)目的緩 沖器獲得所述必要的相對(duì)吞吐量。該方法可進(jìn)一步包括向一個(gè)所述路徑引入更快的節(jié)點(diǎn)或更快的 算法或其任意組合從而最小化緩沖器的數(shù)目。更快的節(jié)點(diǎn)可包括并行 或流水線化的處理??商鎿Q地,該方法可進(jìn)一步包括向一個(gè)所述路徑引入較小節(jié)點(diǎn)或較低需求的算法或其任意組合,從而最小化緩沖器的數(shù)目。較小節(jié)點(diǎn)可被設(shè)置為執(zhí)行迭代操作或共享操作或其任意組合。術(shù)語(yǔ)"共享操作"在本文中應(yīng)被解釋為一件用于執(zhí)行節(jié)點(diǎn)的硬件也可用于其他節(jié)點(diǎn)的操作。按照本發(fā)明第七方面,提供了包括程序代碼的計(jì)算機(jī)程序產(chǎn)品, 該程序代碼在被下載到計(jì)算機(jī)并由其執(zhí)行時(shí)被設(shè)置為執(zhí)行按照本發(fā)明 第六方面的方法。按照本發(fā)明第八方面,提供了確定數(shù)字邏輯電路中相對(duì)吞吐量的 方法,該數(shù)字邏輯電路包括執(zhí)行數(shù)據(jù)流機(jī)器的節(jié)點(diǎn)和連接,所述方法包括以下步驟定義至少一部分所述數(shù)字邏輯電路;為所述部分中每 個(gè)節(jié)點(diǎn)和連接確定相對(duì)吞吐量;確定通過(guò)所述節(jié)點(diǎn)和連接的數(shù)據(jù)流路 徑;確定流過(guò)每個(gè)路徑的標(biāo)記的數(shù)目;和從所述數(shù)據(jù)流路徑、流過(guò)每 個(gè)路徑的標(biāo)記數(shù)目和數(shù)字邏輯電路,來(lái)確定所述部分的相對(duì)吞吐量。定義所述部分可包括確定第 一流控制節(jié)點(diǎn)和第二流控制節(jié)點(diǎn)間 相對(duì)吞吐量區(qū)中的節(jié)點(diǎn)和連接。流控制節(jié)點(diǎn)可每個(gè)都包括門(mén)節(jié)點(diǎn)、合 并節(jié)點(diǎn)、非決定性合并節(jié)點(diǎn)、切換節(jié)點(diǎn)(swtich)、復(fù)制器節(jié)點(diǎn)、輸 入、輸出、源、匯聚節(jié)點(diǎn)(sink)或其任意組合。按照本發(fā)明第九方面,提供了包含程序代碼的計(jì)算機(jī)程序產(chǎn)品, 該程序代碼在被下載到計(jì)算機(jī)并由計(jì)算機(jī)執(zhí)行時(shí)被設(shè)置為執(zhí)行按照本 發(fā)明第八方面的方法。本發(fā)明第二到第九方面基本提供了與上述第一方面類似的優(yōu)點(diǎn)。 本發(fā)明的一個(gè)目的是避免數(shù)字邏輯電路中的死鎖。 對(duì)于該目的,本發(fā)明基于這樣的理解,即數(shù)字邏輯電路可被認(rèn)為 涉及均勻(uniform )吞吐量區(qū),即沒(méi)有未連接節(jié)點(diǎn)存在的區(qū)域且其中 處理節(jié)點(diǎn)上負(fù)載被平衡從而沒(méi)有節(jié)點(diǎn)需要暫停直到從其他節(jié)點(diǎn)提供了 必要的輸入數(shù)據(jù)。為了優(yōu)化數(shù)據(jù)流機(jī)器,硬件中數(shù)字邏輯電路的執(zhí)行 要求數(shù)據(jù)流圖適于避免死鎖。這是通過(guò)以下操作來(lái)便于實(shí)現(xiàn)的從所 確定的均勻吞吐量區(qū)確定循環(huán),該循環(huán)即下面的數(shù)據(jù)流路徑,該數(shù)據(jù) 流路徑離開(kāi)均勻吞吐量區(qū)到所確定的均勻吞吐量區(qū)外的其他處理節(jié) 點(diǎn),到具有較低吞吐量的節(jié)點(diǎn)區(qū),并然后再次返回到同一均勻吞吐量 區(qū)的節(jié)點(diǎn)。這樣的循環(huán)是潛在死鎖的原因,除非被處理。按照本發(fā)明第一方面,提供了生成用于以數(shù)字邏輯電路執(zhí)行數(shù)據(jù) 流機(jī)器的數(shù)字控制參數(shù)的設(shè)備,該數(shù)字邏輯電路包括具有至少一個(gè)輸入或至少一個(gè)輸出的功能節(jié)點(diǎn)和指示所述功能節(jié)點(diǎn)間互連的連接,其 中第一功能節(jié)點(diǎn)及連接集合包括在第一均勻吞吐量區(qū)中,所述第一集 合包括從所述第一均勻吞吐量區(qū)的第一節(jié)點(diǎn)到所述第一均勻吞吐量區(qū) 外的第二區(qū)的第一連接,所述第二區(qū)包括對(duì)所述第一均勻吞吐量區(qū)的 第二功能節(jié)點(diǎn)的笫二連接,其中所述數(shù)字邏輯電路至少包括和將通過(guò) 所述第一區(qū)中從所述第一節(jié)點(diǎn)到所述第二節(jié)點(diǎn)的第一路徑的最大數(shù)目 標(biāo)記一樣多的附加緩沖器,同時(shí)兩個(gè)標(biāo)記通過(guò)第二路徑,該第二路徑 包括所述第二區(qū)中從所述第一節(jié)點(diǎn)到第二節(jié)點(diǎn)的所述第一和第二連 接,所述緩沖器被設(shè)置在所述第二路徑上從而防止死鎖。這樣做的優(yōu)點(diǎn)是緩沖器使必要的標(biāo)記在處理過(guò)程中可用,這將避 免死鎖。為了確保不會(huì)因?yàn)檠h(huán)包括第一和第二連接即第二路徑而發(fā)生 死鎖,可以確保第一和第二節(jié)點(diǎn)間路徑上緩沖器的數(shù)目是將通過(guò)第一 路徑的標(biāo)記的數(shù)目除以將通過(guò)第二路徑的標(biāo)記的數(shù)目。應(yīng)該注意,循環(huán)可以是邊緣(edge),即純線,僅吞吐量比第一 均勻吞吐量區(qū)內(nèi)的邊緣低。第二區(qū)可進(jìn)一步包括至少一個(gè)在所述第二路徑中的功能節(jié)點(diǎn)。 所述一個(gè)或多個(gè)緩沖器可以設(shè)置在所述第 一均勻吞吐量區(qū)中。 該設(shè)備可被設(shè)置為就所述數(shù)字邏輯電路的所述執(zhí)行的其他部分 的可用空間以及所述數(shù)字邏輯電路的所述執(zhí)行的其余部分的吞吐量來(lái) 優(yōu)化所述第一均勻吞吐量區(qū)和所述笫二均勻呑吐量區(qū)的吞吐量。優(yōu)化 可包括對(duì)所述數(shù)字邏輯電路功能節(jié)點(diǎn)或功能節(jié)點(diǎn)組的迭代或流水線化 或其任意組合。數(shù)字控制參數(shù)可控制現(xiàn)場(chǎng)可編程門(mén)陣列(FPGA)從而執(zhí)行數(shù)字 邏輯電路。數(shù)據(jù)流機(jī)器可從高級(jí)源代碼規(guī)范生成。其優(yōu)點(diǎn)是FPGA的 有用性可顯著增加,這是因?yàn)镕PGA的許多邏輯電路可容易創(chuàng)建。這 允許FPGA成為由普通軟件程序員使用的快捷通用的計(jì)算裝置,這里 專用FPGA可為大量完全不同的電路快速編程。數(shù)字控制參數(shù)可控制專用集成電路(ASIC)或芯片或其任意組合從而執(zhí)行數(shù)字邏輯電路。按照本發(fā)明第二方面,提供了防止以數(shù)字邏輯電路執(zhí)行的數(shù)據(jù)流 機(jī)器中死鎖的方法,該數(shù)字邏輯電路包括具有至少一個(gè)輸入或至少一 個(gè)輸出的功能節(jié)點(diǎn)和指示所述功能節(jié)點(diǎn)間互連的連接,所述方法包括以下步驟確定具有第一均勻吞吐量的第一均勻吞吐量區(qū),該第一均 勻吞吐量區(qū)包括一個(gè)或多個(gè)功能節(jié)點(diǎn)或者連接;確定從所述第一均勻 吞吐量區(qū)的第一節(jié)點(diǎn)到包括一個(gè)或多個(gè)功能節(jié)點(diǎn)或連接的第二吞吐量 區(qū)的第一連接;確定從所述第二區(qū)到所述第一均勻吞吐量區(qū)第二功能 節(jié)點(diǎn)的第二連接;以及添加與通過(guò)所述第一區(qū)中從所迷第一節(jié)點(diǎn)到所 述第二節(jié)點(diǎn)的第一路徑的標(biāo)記的最大數(shù)目一樣多的緩沖器,同時(shí)兩個(gè)標(biāo)記通過(guò)包括所述第二區(qū)中從所述第一節(jié)點(diǎn)到第二節(jié)點(diǎn)的所述第一和 第二連接的笫二路徑,設(shè)置所述第二區(qū)中第二路徑上所述緩沖器到所 述數(shù)字邏輯電路從而防止由于所述第一連接和第二連接導(dǎo)致的死鎖。該方法可分配第一和第二節(jié)點(diǎn)間所述路徑上緩沖器的數(shù)目等于 將通過(guò)第一路徑的標(biāo)記數(shù)目除以將通過(guò)第二路徑的標(biāo)記數(shù)目。第二區(qū)可進(jìn)一步在包括所述第一和第二連接的路徑中包括至少 一個(gè)功能節(jié)點(diǎn)。添加一個(gè)或多個(gè)緩沖器可在所述第 一均勻吞吐量區(qū)中執(zhí)行。該方法可進(jìn)一步包括就所述數(shù)字邏輯電路的所述執(zhí)行的其他部 分的可用空間以及所述數(shù)字邏輯電路的所述執(zhí)行的其余部分的吞吐量 來(lái)優(yōu)化所述第 一均勻吞吐量區(qū)和所述第二均勻吞吐量區(qū)的吞吐量。優(yōu) 化可包括對(duì)所述數(shù)字邏輯電路的功能節(jié)點(diǎn)或功能節(jié)點(diǎn)組的迭代或流水 線化或其任意組合。該方法可包括通過(guò)FPGA執(zhí)行所述數(shù)字邏輯電路。該方法可包括 通過(guò)ASIC或芯片執(zhí)行數(shù)字邏輯電路。該方法可包括從高級(jí)源代碼規(guī) 范生成所述數(shù)據(jù)流機(jī)器。按照本發(fā)明第三方面,提供了包括程序代碼的計(jì)算機(jī)程序產(chǎn)品, 該程序代碼在被下栽到計(jì)算機(jī)并由計(jì)算機(jī)執(zhí)行時(shí)執(zhí)行按照本發(fā)明第二 方面的方法。按照本發(fā)明第四方面,提供了計(jì)算機(jī)可執(zhí)行的數(shù)字邏輯電路,該 數(shù)字邏輯電路包括具有至少一個(gè)輸入或至少一個(gè)輸出的功能節(jié)點(diǎn)和指 示執(zhí)行數(shù)據(jù)流機(jī)器的所述功能節(jié)點(diǎn)間互連的連接,其中第 一 功能節(jié)點(diǎn) 及連接集合包括在第一均勻呑吐量區(qū)中,所述第一集合包括從所述第 一均勻吞吐量區(qū)的第一節(jié)點(diǎn)到所述第一均勻吞吐量區(qū)外第二區(qū)的第一 連接,所述第二區(qū)包括對(duì)所述第一均勻吞吐量區(qū)的第二功能節(jié)點(diǎn)的第 二連接,其中所述數(shù)字邏輯電路包括與將通過(guò)所述第一區(qū)中從所述第 一節(jié)點(diǎn)到所述第二節(jié)點(diǎn)的第 一路徑的標(biāo)記的最大數(shù)目 一樣多的附加緩 沖器,同時(shí)兩個(gè)標(biāo)記通過(guò)第二路徑,該第二路徑包括所述第二區(qū)中從 第一節(jié)點(diǎn)到第二節(jié)點(diǎn)的第一和第二連接,所述緩沖器被設(shè)置在所述第 二區(qū)中的所述第二路徑上從而防止由于所述第 一連接和所述第二連接 導(dǎo)致的死鎖。這樣做的優(yōu)點(diǎn)是數(shù)字邏輯電路容易通過(guò)軟件支持執(zhí)行并使得能 夠?qū)崿F(xiàn)高性能數(shù)據(jù)流機(jī)器。而且,這些優(yōu)點(diǎn)類似于為本發(fā)明上述方面 展示的優(yōu)點(diǎn)。為了確保死鎖不會(huì)因?yàn)榘ǖ谝缓偷诙B接的循環(huán)而出現(xiàn)在數(shù) 字邏輯電路中,可以確保所述第一和第二節(jié)點(diǎn)間的所述路徑上緩沖器 數(shù)目等于將通過(guò)第一路徑的標(biāo)記數(shù)目除于將通過(guò)第二路徑的標(biāo)記數(shù)目。第二區(qū)可進(jìn)一步包括至少一個(gè)在第二路徑上的功能節(jié)點(diǎn)。所述一 個(gè)或多個(gè)緩沖器可設(shè)置在所述第 一均勻吞吐量區(qū)中。該電路可就所述數(shù)字邏輯電路的所述執(zhí)行的其他部分的可用空 間以及所述數(shù)字邏輯電路的所述執(zhí)行的其余部分的吞吐量來(lái)優(yōu)化所述 第 一均勻吞吐量區(qū)和所述第二區(qū)的吞吐量。優(yōu)化可包括對(duì)所述數(shù)字邏輯電路的功能節(jié)點(diǎn)或功能節(jié)點(diǎn)組的迭代或流水線化或其任意組合。該電路可通過(guò)FPGA執(zhí)行。該電路可用ASIC或芯片執(zhí)行。執(zhí)行 數(shù)據(jù)流機(jī)器的節(jié)點(diǎn)和連接可從高級(jí)源代碼規(guī)范生成。按照本發(fā)明第五方面,提供了數(shù)據(jù)流機(jī)器,該數(shù)據(jù)流機(jī)器包括具 有至少一個(gè)輸入或至少一個(gè)輸出的功能節(jié)點(diǎn)和指示所述功能節(jié)點(diǎn)間互連的連接,其中第一功能節(jié)點(diǎn)及連接集合包括在第一均勻吞吐量區(qū)中, 所述第 一 集合包括從所述第 一均勻吞吐量區(qū)的第 一節(jié)點(diǎn)到所述第 一均 勻吞吐量區(qū)外的第二區(qū)的第一連接,所述第二區(qū)包括對(duì)所述第一均勻 吞吐量區(qū)的第二功能節(jié)點(diǎn)的第二連接,其中所述數(shù)字邏輯電路至少包 括和將通過(guò)所述笫一區(qū)中從所述第一節(jié)點(diǎn)到所述第二節(jié)點(diǎn)的第一路徑 的標(biāo)記的最大數(shù)目 一樣多的附加緩沖器,同時(shí)兩個(gè)標(biāo)記通過(guò)第二路徑, 該第二路徑包括所述第二區(qū)中從所述第 一節(jié)點(diǎn)到第二節(jié)點(diǎn)的所述第一 和第二連接,所述緩沖器被設(shè)置在所述第二區(qū)中的第二路徑上從而防 止由于所述第 一連接和所述第二連接導(dǎo)致的死鎖。數(shù)據(jù)流機(jī)器可通過(guò)FPGA、 ASIC或芯片執(zhí)行。數(shù)據(jù)流機(jī)器可從 高級(jí)源代碼規(guī)范生成。數(shù)據(jù)流機(jī)器可自動(dòng)生成。具體地,本發(fā)明的一個(gè)目的是執(zhí)行數(shù)據(jù)流機(jī)器。 對(duì)于該目的,本發(fā)明基于這樣的理解,即數(shù)據(jù)流機(jī)器中的節(jié)點(diǎn)可 具有三個(gè)信號(hào)集合兩個(gè)信號(hào)集合沿正向工作,提供數(shù)據(jù)信號(hào)和數(shù)據(jù) 信號(hào)的有效性;而一個(gè)信號(hào)集合沿反向工作,提供消耗信號(hào)(consume signal)。數(shù)據(jù)信號(hào)的有效性保存關(guān)于是否有有效輸入數(shù)據(jù)出現(xiàn)在節(jié)點(diǎn) 的數(shù)據(jù)輸入和輸出處的信息,且消耗信號(hào)保存關(guān)于是否有節(jié)點(diǎn)輸出信 號(hào)被消耗并且是否數(shù)據(jù)要從前面的節(jié)點(diǎn)消耗的信息。這使得能夠應(yīng)用 數(shù)據(jù)流機(jī)器的觸發(fā)規(guī)則。為了使得能夠?qū)崿F(xiàn)異步數(shù)據(jù)流,執(zhí)行數(shù)據(jù)流 機(jī)器應(yīng)注意某些問(wèn)題。按照本發(fā)明第一方面,提供了計(jì)算機(jī)可執(zhí)行的數(shù)字邏輯電路,該 數(shù)字邏輯電路包括多個(gè)節(jié)點(diǎn)和多個(gè)連接所述節(jié)點(diǎn)的連接從而執(zhí)行數(shù)據(jù) 流機(jī)器,其中每個(gè)所述節(jié)點(diǎn)包括至少一個(gè)數(shù)據(jù)信號(hào)的信號(hào)集合,其 包括至少一個(gè)來(lái)自設(shè)置在輸入處的前面節(jié)點(diǎn)的數(shù)據(jù)信號(hào)和至少一個(gè)到 設(shè)置在輸出處的后續(xù)節(jié)點(diǎn)的數(shù)據(jù)信號(hào);至少一個(gè)數(shù)據(jù)有效性信號(hào)的信 號(hào)集合,數(shù)據(jù)有效性信號(hào)保存關(guān)于是否在所述數(shù)據(jù)信號(hào)輸入和輸出處 存在有效數(shù)據(jù)的信息,其包括至少一個(gè)來(lái)自設(shè)置在輸入處的前面節(jié)點(diǎn) 的數(shù)據(jù)有效信號(hào)和至少一個(gè)到設(shè)置在輸出處的后續(xù)節(jié)點(diǎn)的數(shù)據(jù)有效信 號(hào);以及至少一個(gè)消耗信號(hào)的信號(hào)集合,該消耗信號(hào)保存關(guān)于是否所述數(shù)據(jù)信號(hào)被消耗的信息,該信號(hào)集合包括至少一個(gè)來(lái)自設(shè)置在輸入 處的后續(xù)節(jié)點(diǎn)的消耗信號(hào)和至少一個(gè)到設(shè)置在輸出處的前面節(jié)點(diǎn)的消 耗信號(hào),其中每個(gè)所述節(jié)點(diǎn)設(shè)置為使得,為所述第一消耗信號(hào)排除對(duì) 邏輯上依賴于第一消耗信號(hào)的任意所述數(shù)據(jù)有效信號(hào)的邏輯關(guān)系,且 為所述第 一有效數(shù)據(jù)信號(hào)排除對(duì)邏輯上依賴于第 一有效數(shù)據(jù)信號(hào)的任 意所述消耗信號(hào)的邏輯關(guān)系。這表示由于提供了節(jié)點(diǎn)的模塊性,所以數(shù)字邏輯電路可通過(guò)自動(dòng) 執(zhí)行提供。每個(gè)所述節(jié)點(diǎn)可包括第一數(shù)目的數(shù)據(jù)信號(hào)輸入和第二數(shù)目的數(shù) 據(jù)信號(hào)輸出,包括所述第一數(shù)目的有效數(shù)據(jù)輸入信號(hào)和消耗輸入信號(hào), 以及所述第二數(shù)目的有效數(shù)據(jù)輸出信號(hào)和消耗輸出信號(hào)。 這表示數(shù)據(jù)流控制是為所有數(shù)據(jù)輸入和輸出提供的。 本發(fā)明使得至少部分所述數(shù)據(jù)流機(jī)器可以是異步的。 至少部分?jǐn)?shù)字邏輯電路可由計(jì)算機(jī)生成。電路可通過(guò)現(xiàn)場(chǎng)可編程門(mén)陣列(FPGA)裝置、專用集成電路(ASIC)或芯片或其任意組合 來(lái)執(zhí)行。節(jié)點(diǎn)可包括可組合邏輯、流水線、或狀態(tài)機(jī)器、或其任意組合, 以便執(zhí)行節(jié)點(diǎn)操作。執(zhí)行數(shù)據(jù)流機(jī)器的節(jié)點(diǎn)和連接可從高級(jí)源代碼規(guī)范生成。 按照本發(fā)明第二方面,提供了以硬件自動(dòng)執(zhí)行包括數(shù)據(jù)流機(jī)器的 數(shù)字邏輯電路的方法,該方法包括以下步驟確定抽象(abstract)數(shù) 據(jù)流機(jī)器;為所述數(shù)據(jù)流機(jī)器確定節(jié)點(diǎn)和連接,其中每個(gè)所述節(jié)點(diǎn)包 括以下三個(gè)信號(hào)集合,即至少一個(gè)數(shù)據(jù)信號(hào)的信號(hào)集合,其包括至少 一個(gè)來(lái)自設(shè)置在輸入處的前面節(jié)點(diǎn)的數(shù)據(jù)信號(hào)和至少一個(gè)到設(shè)置在輸 出處的后續(xù)節(jié)點(diǎn)的數(shù)據(jù)信號(hào),至少一個(gè)數(shù)據(jù)有效性信號(hào)的信號(hào)集合, 數(shù)據(jù)有效性信號(hào)保存關(guān)于是否在所述數(shù)據(jù)信號(hào)輸入和輸出處存在有效 數(shù)據(jù)的信息,其包括至少一個(gè)來(lái)自設(shè)置在輸入處的前面節(jié)點(diǎn)的數(shù)據(jù)有 效信號(hào)和至少一個(gè)到設(shè)置在輸出處的后續(xù)節(jié)點(diǎn)的數(shù)據(jù)有效信號(hào),以及 至少一個(gè)消耗信號(hào)的信號(hào)集合,該消耗信號(hào)保存關(guān)于是否所述數(shù)據(jù)信號(hào)被消耗的信息,該信號(hào)集合包括至少一個(gè)來(lái)自設(shè)置在輸入處的后續(xù)節(jié)點(diǎn)的消耗信號(hào)和至少一個(gè)到設(shè)置在輸出處的前面節(jié)點(diǎn)的消耗信號(hào); 為所述節(jié)點(diǎn)確定觸發(fā)規(guī)則,這里為所述第一消耗信號(hào)排除對(duì)邏輯上依 賴于第一消耗信號(hào)的任意所述數(shù)據(jù)有效信號(hào)的邏輯關(guān)系,且為所述第 一有效數(shù)據(jù)信號(hào)排除對(duì)邏輯上依賴于第一有效數(shù)據(jù)信號(hào)的任意所述消 耗信號(hào)的邏輯關(guān)系;以及分配所述節(jié)點(diǎn)、連接、以及觸發(fā)規(guī)則給可編 程硬件。該方法可進(jìn)一步包括通過(guò)FPGA、 ASIC或芯片、或其任意組合 來(lái)執(zhí)行所述數(shù)字邏輯電路。該方法可進(jìn)一步包括從高級(jí)源代碼規(guī)范生成所述數(shù)據(jù)流機(jī)器。按照本發(fā)明第三方面,提供了可直接加載到與數(shù)字計(jì)算機(jī)兼容電 子裝置存儲(chǔ)器中的計(jì)算機(jī)程序產(chǎn)品,該計(jì)算機(jī)程序產(chǎn)品包括在被所述 電子裝置執(zhí)行時(shí)執(zhí)行按照本發(fā)明第二方面方法的軟件代碼部分。按照本發(fā)明第四方面,提供了生成執(zhí)行按照本發(fā)明第一方面的包 括數(shù)據(jù)流機(jī)器的數(shù)字邏輯電路的數(shù)字控制參數(shù)的設(shè)備。該設(shè)備被設(shè)置 為執(zhí)行按照本發(fā)明第二方面的方法。數(shù)字控制參數(shù)可控制現(xiàn)場(chǎng)可編程門(mén)陣列(FPGA)從而執(zhí)行數(shù)字 邏輯電路。數(shù)據(jù)流機(jī)器可從高級(jí)源代碼規(guī)范生成。其優(yōu)點(diǎn)是FPGA的 有用性可顯著增加,這是因?yàn)镕PGA的許多邏輯電路可容易建立。這 允許FPGA成為由普通軟件程序員使用的快捷通用的計(jì)算裝置,其中 專用FPGA可為大量完全不同的電路快速編程。本發(fā)明第二、第三、和第四方面的優(yōu)點(diǎn)是按照本發(fā)明第一方面的 有利的數(shù)字邏輯電路易于實(shí)現(xiàn)。本發(fā)明的一個(gè)目的是提供執(zhí)行數(shù)據(jù)流機(jī)器的循環(huán)的結(jié)構(gòu)。對(duì)于該目的,本發(fā)明基于這樣的理解,即數(shù)據(jù)流機(jī)器的基本機(jī)理 是,當(dāng)節(jié)點(diǎn)有其所有輸入時(shí)該節(jié)點(diǎn)將執(zhí)行其操作,從而消耗輸入并產(chǎn) 生相關(guān)輸出(如果有的話)。節(jié)點(diǎn)將不執(zhí)行任何操作直到其具有足夠 輸入。任何提前到達(dá)的輸入僅在節(jié)點(diǎn)前邊緣上等待,直到足夠節(jié)點(diǎn)操 作的輸入到達(dá)。如果節(jié)點(diǎn)的輸出邊緣被占據(jù),則將延遲激活直到邊緣是空閑的。該特征利用某些邊緣上具有初始標(biāo)記(值)的for循環(huán)。按照本發(fā)明的第一方面,提供了數(shù)據(jù)流機(jī)器,該數(shù)據(jù)流機(jī)器包括 合并節(jié)點(diǎn),該合并節(jié)點(diǎn)包括要迭代的新值的輸入點(diǎn)、迭代值的輸入點(diǎn)、 和迭代值的輸出點(diǎn),并進(jìn)一步包括循環(huán)體功能單元,該單元具有連 接到合并節(jié)點(diǎn)的迭代值輸出點(diǎn)的輸入點(diǎn);和切換節(jié)點(diǎn),該切換節(jié)點(diǎn)包 括連接到循環(huán)體功能單元輸出點(diǎn)的迭代值的輸入點(diǎn)、連接到合并節(jié)點(diǎn) 迭代值輸入點(diǎn)的迭代值輸出點(diǎn)、和離開(kāi)循環(huán)的輸出點(diǎn)。數(shù)據(jù)流機(jī)器可包括第二合并節(jié)點(diǎn),該第二合并節(jié)點(diǎn)包括要迭代新 值的輸入點(diǎn)、迭代值的輸入點(diǎn)、和連接到循環(huán)體功能單元輸入點(diǎn)的迭 代值輸出點(diǎn)。數(shù)據(jù)流機(jī)器可包括第二切換節(jié)點(diǎn),該第二切換節(jié)點(diǎn)包括連接到循 環(huán)體功能單元輸出點(diǎn)的迭代值輸入點(diǎn)、連接到合并點(diǎn)迭代值輸入點(diǎn)的 迭代值輸出點(diǎn)、和離開(kāi)循環(huán)的輸出點(diǎn)。這里,該合并節(jié)點(diǎn)可僅是存在 的合并節(jié)點(diǎn),或是在該結(jié)構(gòu)中存在的用以執(zhí)行如foreach循環(huán)、for循 環(huán)、while循環(huán)、do-while循環(huán)、re-entrant循環(huán)的任何節(jié)點(diǎn),或其任 意組合。循環(huán)可僅對(duì)標(biāo)量迭代,或?qū)系鐚?duì)列表或矢量迭 代。這里,對(duì)列表迭代意味著一次從集合中提取一個(gè)元素,而對(duì)矢量 迭代意味著集合中所有元素都同時(shí)迭代。這里術(shù)語(yǔ)"連接到"可指直接連接以及經(jīng)由一個(gè)或多個(gè)其他元素 連接,這些元素例如有緩沖器、分離器、結(jié)合器、復(fù)制器、其他循環(huán) 體功能單元等。一般來(lái)說(shuō),權(quán)利要求中使用的所有術(shù)語(yǔ)應(yīng)按照它們?cè)诒炯夹g(shù)領(lǐng)域 中的普通意義來(lái)解釋,另行明確定義的除外。所有對(duì)"a/an/the[元素、裝置、元件、設(shè)備、步驟等"的引用都應(yīng) 公開(kāi)解釋為至少一個(gè)所述元素、裝置、元件、設(shè)備、步驟等,除非另外明確說(shuō)明。這里說(shuō)明的任何方法的步驟不必嚴(yán)格按這里所述的順序 執(zhí)行,明確說(shuō)明的除外。術(shù)語(yǔ)"第一"、"第二,,等僅解釋為定義不同元素、方法等,另外說(shuō) 明的除外。本發(fā)明的其他目的、特征和優(yōu)點(diǎn)可從下面詳細(xì)說(shuō)明、權(quán)利要求、 和附圖中看出。
參考附圖,通過(guò)下面對(duì)本發(fā)明優(yōu)選實(shí)施例的說(shuō)明性而非限制的詳 細(xì)說(shuō)明將更好地理解本發(fā)明的以上及其他目的、特征和優(yōu)點(diǎn),在附圖中同樣的標(biāo)識(shí)號(hào)用于類似元素,其中 圖l是示出數(shù)據(jù)流圖一部分的圖;圖2是示出按照本發(fā)明實(shí)施例的優(yōu)化后圖1中該部分?jǐn)?shù)據(jù)流圖的圖;圖3是示出部分?jǐn)?shù)據(jù)流圖的圖;圖4是示出按照本發(fā)明實(shí)施例的優(yōu)化后圖3中該部分?jǐn)?shù)據(jù)流圖的圖;圖5是示出表示數(shù)據(jù)流機(jī)器的部分?jǐn)?shù)據(jù)流圖的圖; 圖6是示出應(yīng)用了本發(fā)明實(shí)施例的圖l的簡(jiǎn)化示圖; 圖7到圖19是示出適于用在本發(fā)明中的節(jié)點(diǎn)的圖; 圖20a到圖20g示出例示了附圖中所示的本發(fā)明實(shí)施例的部分的 示例;以及圖21到圖47示出不同循環(huán)。
具體實(shí)施方式
圖1示出數(shù)據(jù)流圖一部分的示例,該數(shù)據(jù)流圖包括多個(gè)節(jié)點(diǎn)102、 104、 106、 108、 110、 112、 114,每個(gè)節(jié)點(diǎn)包括至少一個(gè)輸入和/或至 少一個(gè)輸出。數(shù)據(jù)流圖的節(jié)點(diǎn)間的數(shù)據(jù)流由弧101、 103、 105、 107、109、 111、 113、 115、 117表示。每個(gè)所述節(jié)點(diǎn)102、 104、 106、 108、110、 112、 114表示對(duì)所述節(jié)點(diǎn)輸入點(diǎn)出現(xiàn)的數(shù)據(jù)執(zhí)行的邏輯運(yùn)算。 在所述節(jié)點(diǎn)輸入點(diǎn)出現(xiàn)的數(shù)據(jù)(通常稱為標(biāo)記)可當(dāng)作由所述弧保存, 由所述孤保存的數(shù)據(jù)因此分別是發(fā)出孤的節(jié)點(diǎn)的輸出。關(guān)于圖1的例 子,弧101上的數(shù)據(jù)由節(jié)點(diǎn)102處理并輸出到弧103。出現(xiàn)在節(jié)點(diǎn)104輸入點(diǎn)的弧103上的數(shù)據(jù)由節(jié)點(diǎn)104處理,節(jié)點(diǎn)104的輸出被輸出到 弧105和117?;?17輸入到節(jié)點(diǎn)112,因?yàn)楣?jié)點(diǎn)112沒(méi)有在弧111上 的相關(guān)數(shù)據(jù),所以不能處理數(shù)據(jù),弧111也輸入到節(jié)點(diǎn)112。因此, 節(jié)點(diǎn)104必須暫停處理直到相應(yīng)數(shù)據(jù)已經(jīng)由第一路徑120上的節(jié)點(diǎn) 106、 108、 110處理,第一路徑120包括弧和節(jié)點(diǎn)105、 106、 107、 108、 109、 110、 111,該第一路徑120與包括弧117的第二路徑平行,該第 二路徑可當(dāng)作第二路徑130。當(dāng)出現(xiàn)相應(yīng)于弧117上出現(xiàn)的數(shù)據(jù)的弧 111上數(shù)據(jù)時(shí),節(jié)點(diǎn)112處理該數(shù)據(jù),且節(jié)點(diǎn)104可解除暫停狀態(tài), 且可處理對(duì)弧103上出現(xiàn)的下一數(shù)據(jù)的處理。該暫停方法降低了數(shù)據(jù) 處理的性能。按照本發(fā)明實(shí)施例,可添加大量相應(yīng)于路徑120的節(jié)點(diǎn) 106、 108、 110的處理時(shí)間的緩沖器。然而,緩沖器的數(shù)量相當(dāng)大, 且要執(zhí)行相應(yīng)于數(shù)據(jù)流圖的數(shù)字邏輯電路的硬件上的可用空間可能不 夠。因此,當(dāng)為執(zhí)行數(shù)字邏輯電路生成控制參數(shù)時(shí),考慮數(shù)據(jù)處理的 加速和硬件執(zhí)行(例如在FPGA上)的可用空間進(jìn)行優(yōu)化。該優(yōu)化可 導(dǎo)致要以硬件執(zhí)行的圖2中所示的適合的數(shù)據(jù)流圖。圖2中的數(shù)據(jù)流 圖包括相應(yīng)于圖1中數(shù)據(jù)流圖的節(jié)點(diǎn)和弧,而非圖1中的弧117,這 里提供了弧131、 133、 135、 137、 139和緩沖器132、 134、 136、 138。 這里,設(shè)備考慮為執(zhí)行數(shù)字邏輯電路生成數(shù)字控制參數(shù),該設(shè)備例如 可以是計(jì)算機(jī),其包括具有下載的用以進(jìn)行優(yōu)化和生成控制參數(shù)的軟 件的處理器,如von Neumann型處理器。因此,該設(shè)備也可使數(shù)據(jù)流 分析能夠確定對(duì)緩沖器的需求和緩沖器的數(shù)目,以及確定分配較少緩 沖器對(duì)性能和區(qū)域消耗的影響。例如,如果區(qū)域不是問(wèn)題,例如當(dāng)數(shù) 字邏輯電路相比可用硬件資源較小時(shí),緩沖器的數(shù)目?jī)H對(duì)性能優(yōu)化。 如果區(qū)域是個(gè)問(wèn)題,則優(yōu)選考慮整個(gè)執(zhí)行以便其性能作為整體為該區(qū) 域資源優(yōu)化,在圖1和圖2中給出的僅是該執(zhí)行的一部分。按照本發(fā) 明實(shí)施例的方法是分配緩沖器以便平衡并行路徑的相對(duì)吞吐量,然 后移除盡可能多的緩沖器,同時(shí)協(xié)作保持兩個(gè)并行路徑所需的相對(duì)呑 吐量,即將不會(huì)使數(shù)字邏輯電路的其他部件暫停的相對(duì)吞吐量。在該 情形,上面給出的例子中緩沖器的數(shù)目可減小到兩個(gè)緩沖器,這是因?yàn)閷樾阅芟拗圃搱?zhí)行的其他部件,且區(qū)域資源將更好地用于另一部分?jǐn)?shù)據(jù)流圖執(zhí)行的另一個(gè)優(yōu)化。圖1和圖2的例子示出簡(jiǎn)單情形,其 中在一個(gè)路徑上提供合理數(shù)目的包括處理的節(jié)點(diǎn),而在其他路徑上僅 提供用于傳輸數(shù)據(jù)的弧。然而,本發(fā)明同樣可用于兩個(gè)先分叉然后匯 聚的路徑,每個(gè)都包括多個(gè)節(jié)點(diǎn),但要求不同處理時(shí)間。這里,我們 引入術(shù)語(yǔ)"阻塞(choke)",其表示一個(gè)操作或一組操作所要求的多少 處理努力的數(shù)字。阻塞可當(dāng)作一個(gè)節(jié)點(diǎn)或一組節(jié)點(diǎn)的相對(duì)吞吐量的倒 數(shù)。既然我們定義了術(shù)語(yǔ),那么本發(fā)明的本質(zhì)可表達(dá)為優(yōu)化并行數(shù)據(jù) 流路徑的阻塞,從而改善要執(zhí)行的數(shù)字邏輯電路的性能。為了改善某些操作,可考慮流水線化、迭代和循環(huán)。簡(jiǎn)而言之, 流水線化可減少操作的阻塞,但會(huì)增加使用區(qū)域資源且由于操作數(shù)據(jù) 流而不總是可行。迭代操作將增加阻塞,但將減小使用區(qū)域資源。數(shù) 據(jù)流中循環(huán)必須被考慮以避免死鎖。圖3示出部分?jǐn)?shù)據(jù)流圖,其包括在節(jié)點(diǎn)300分叉并在節(jié)點(diǎn)306匯 聚的第一路徑302和第二路徑304。第一路徑302包括節(jié)點(diǎn)311、 312、 313中的三個(gè)操作,這三個(gè)操作每一個(gè)都包括四個(gè)迭代。因此,第一 路徑的阻塞為3乘以4,即12。第二路徑包括節(jié)點(diǎn)314中的一個(gè)操作, 因此阻塞為1。兩個(gè)路徑302、 304的阻塞是12,因?yàn)榈诙窂?04的 節(jié)點(diǎn)314將必須暫停從而等待第一路徑的最末節(jié)點(diǎn)313的結(jié)果,從而 使得節(jié)點(diǎn)306能夠處理該結(jié)果。為了優(yōu)化,即平衡兩個(gè)路徑302、 304 從而改善性能,數(shù)據(jù)流圖可如圖4所示那樣調(diào)整,這里第二路徑的節(jié) 點(diǎn)311、312、313的操作的迭代已經(jīng)流水線化如圖4中節(jié)點(diǎn)311,、312,、 313,所示。因此,第二路徑302,的阻塞將為3??紤]圖3中第二路徑 304的節(jié)點(diǎn)的操作可通過(guò)迭代兩次來(lái)執(zhí)行,如圖4中節(jié)點(diǎn)314,所示, 因此節(jié)省某些硬件區(qū)域。第二路徑的阻塞將為2,但緩沖器315插入 到第二路徑304,,且第二路徑304,的阻塞為3。因此,不需要暫停節(jié) 點(diǎn),對(duì)于每個(gè)時(shí)鐘循環(huán),相應(yīng)數(shù)據(jù)被提供給節(jié)點(diǎn)306。通過(guò)應(yīng)用本發(fā)明方法,許多置換是可能的,且為了節(jié)省空間,可 以在節(jié)點(diǎn)314引入其他迭代和/或在路徑304中引入其他緩沖器從而平衡路徑302、 304以避免暫停。也可以僅流水線化第一路徑320中的一 個(gè)或兩個(gè)節(jié)點(diǎn),和為第二路徑304所選的測(cè)量從而平衡阻塞。數(shù)字邏輯電路是通過(guò)生成數(shù)字控制參數(shù)執(zhí)行的,該數(shù)字控制參數(shù) 用于編程ASIC、 FPGA、或PLD。生成數(shù)字控制參數(shù)的設(shè)備通常包括 處理器及其執(zhí)行的計(jì)算機(jī)程序。計(jì)算機(jī)程序被設(shè)置來(lái)使處理器支持生 成控制參數(shù)從而執(zhí)行數(shù)字邏輯電路。因此,該設(shè)備適于生成按照上述 本發(fā)明的數(shù)字控制參數(shù)。本發(fā)明可應(yīng)用于同步系統(tǒng)、異步系統(tǒng)、和包括同步與異步部件的 系統(tǒng)。因此,使用術(shù)語(yǔ)相對(duì)吞吐量??捎糜趯S孟到y(tǒng)的表達(dá)相對(duì)吞吐 量的其他術(shù)語(yǔ)例如是寬帶、阻塞等。相對(duì)吞吐量不同的區(qū)域可通過(guò)逐 個(gè)節(jié)點(diǎn)分析整個(gè)數(shù)據(jù)流圖來(lái)定義。每次觸發(fā),所有節(jié)點(diǎn)不在所有弧上 產(chǎn)生和消耗相同數(shù)目的標(biāo)記。這可應(yīng)用至數(shù)據(jù)流控制節(jié)點(diǎn),如門(mén)節(jié)點(diǎn)、 合并節(jié)點(diǎn)、非決定性合并節(jié)點(diǎn)、切換節(jié)點(diǎn)、輸入、輸出、源、匯聚節(jié) 點(diǎn)和復(fù)制器節(jié)點(diǎn)。這些節(jié)點(diǎn)具有分別在弧上產(chǎn)生和消耗的標(biāo)記的數(shù)目 間的關(guān)系。該關(guān)系可應(yīng)用于任意弧間,既在輸入和輸出間,也在輸出 和輸出間,以及輸入和輸入間。這些節(jié)點(diǎn)將定義具有均勻吞吐量的區(qū) 域邊界。不同輸入/輸出弧的活動(dòng)之間的關(guān)系將定義相對(duì)吞吐量關(guān)系。 相對(duì)吞吐量的平衡包括增加吞吐量或減小使用區(qū)域內(nèi)硬件資源,因此 相對(duì)于區(qū)域要求的相對(duì)吞吐量,硬件的使用最小。 一個(gè)目標(biāo)是以一定 量的硬件資源實(shí)現(xiàn)最大性能。另一個(gè)目標(biāo)是最小化使用實(shí)現(xiàn)每個(gè)區(qū)域 中某些性能的硬件資源。吞吐量可通過(guò)使用更快硬件元件、使用其他更快的執(zhí)行節(jié)點(diǎn)中操 作的算法、并且復(fù)制節(jié)點(diǎn)從而能夠進(jìn)行并行或流水線化處理而增加。 對(duì)于緩沖器,可確保所有通過(guò)區(qū)域的路徑具有至少幾乎相同數(shù)目的緩 沖器。另一方面,可減小吞吐量,例如,通過(guò)使用尺寸較小的硬件元件、 迭代函數(shù)、使用要求較小硬件資源的算法、和/或允許執(zhí)行相同或類似 操作的節(jié)點(diǎn)共享相同的硬件資源。這里,對(duì)于緩沖器,如果所有路徑 上沒(méi)有相同數(shù)目的緩沖器,可應(yīng)用較小并行操作,這暗示較小性能,但使用的緩沖器也較少。通過(guò)增加或減小緩沖器的數(shù)目改變吞吐量的原因可通過(guò)設(shè)想數(shù) 據(jù)路徑分成兩個(gè)然后再次匯聚而說(shuō)明。如果一條路徑包括長(zhǎng)流水線并 有足夠獨(dú)立值供應(yīng)該流水線,即流水線是滿的,且其他路徑僅保持一 個(gè)標(biāo)記,那么在復(fù)制器節(jié)點(diǎn)將有暫停,此處如果短路徑是滿的,則劃 分路徑。短路徑上標(biāo)記將等待產(chǎn)生通過(guò)流水線的標(biāo)記,以便其可組合。 因此, 一次僅一個(gè)元素在流水線中是活躍的。如果兩個(gè)路徑都能夠保 持同樣數(shù)目的標(biāo)記,那么在流水線將能夠是滿的。本發(fā)明建議選擇短 路徑上緩沖器的數(shù)目,以便可在緩沖器數(shù)目保持減小時(shí)選擇所需的吞 吐量。假定特定相對(duì)吞吐量被測(cè)量為滿相對(duì)吞吐量的百分?jǐn)?shù)(0到1之間的分?jǐn)?shù)),達(dá)到特定相對(duì)呑吐量所需緩沖器的數(shù)目等于針對(duì)滿相對(duì) 吞吐量平衡兩個(gè)路徑所需緩沖器的數(shù)目乘以特定相對(duì)吞吐量。關(guān)于緩 沖器,如果兩個(gè)路徑上有相同數(shù)目的緩沖器,則對(duì)于滿相對(duì)吞吐量, 兩個(gè)路徑被平衡。圖5示出表示數(shù)字邏輯電路的數(shù)據(jù)流圖一部分的例子,該數(shù)字邏 輯電路表示包括在均勻吞吐量區(qū)1102中的多個(gè)節(jié)點(diǎn)1100,其中每 個(gè)節(jié)點(diǎn)都包括至少一個(gè)輸入和/或至少一個(gè)輸入;和在均勻吞吐量區(qū) 1102外的可能節(jié)點(diǎn)1104。所述可能的節(jié)點(diǎn)1104可包括形成第二均勻 吞吐量區(qū)(未示出)的多個(gè)節(jié)點(diǎn)和連接。數(shù)據(jù)流節(jié)點(diǎn)間數(shù)據(jù)流由孤表 示。每個(gè)所述節(jié)點(diǎn)1100、 1104表示分別對(duì)所述節(jié)點(diǎn)輸入點(diǎn)出現(xiàn)的數(shù)據(jù) 執(zhí)行的邏輯運(yùn)算。所述節(jié)點(diǎn)輸入點(diǎn)出現(xiàn)的數(shù)據(jù)通常被稱為標(biāo)記,可被 看作由所述弧保存,且由所述弧保存的數(shù)據(jù)因此是發(fā)出弧的節(jié)點(diǎn)的輸 出。關(guān)于圖5中的例子,均勻吞吐量區(qū)1102 (即其中處理節(jié)點(diǎn)上的負(fù) 載被平衡使得沒(méi)有節(jié)點(diǎn)需要暫停直到其他節(jié)點(diǎn)提供必要的輸入數(shù)據(jù)的 區(qū)域)包括從一個(gè)節(jié)點(diǎn)1100到均勻吞吐量區(qū)1102外的節(jié)點(diǎn)1104的連 接1106,和從均勻吞吐量區(qū)1102外的節(jié)點(diǎn)1104到均勻吞吐量區(qū)內(nèi)節(jié) 點(diǎn)的連接1108,即離開(kāi)均勻吞吐量區(qū)并然后再返回到同 一均勻吞吐量 區(qū)的數(shù)據(jù)流路徑。為了優(yōu)化數(shù)據(jù)流機(jī)器,數(shù)字邏輯電路的硬件執(zhí)行要求數(shù)據(jù)流圖適于避免死鎖。這樣的循環(huán)是死鎖的潛在原因,除非經(jīng)過(guò) 處理。該區(qū)內(nèi)的所有節(jié)點(diǎn)必須直接或經(jīng)由其他節(jié)點(diǎn)連接到該區(qū)的輸入點(diǎn)和輸出點(diǎn)。節(jié)點(diǎn)1104是任選的,因此本發(fā)明將致力于配置包括從均 勻吞吐量區(qū)1102的節(jié)點(diǎn)到均勻吞吐量區(qū)1102另一個(gè)節(jié)點(diǎn)的連接。圖6示出圖5中數(shù)據(jù)流圖一部分的調(diào)整示圖,這里均勻吞吐量區(qū) 1102內(nèi)的節(jié)點(diǎn)和連接被當(dāng)作復(fù)雜節(jié)點(diǎn)1200。通過(guò)把包括圖5中連接 1106、 1108和節(jié)點(diǎn)1104的路徑當(dāng)作循環(huán)1202,可在生成用于執(zhí)行數(shù) 字邏輯電路的數(shù)字控制參數(shù)時(shí)處理死鎖問(wèn)題。為了確保不會(huì)由于循環(huán) 1202而發(fā)生死鎖,本發(fā)明設(shè)置在復(fù)雜節(jié)點(diǎn)1200的輸入點(diǎn)和輸出點(diǎn)之 間的所有路徑上出現(xiàn)與通過(guò)復(fù)雜節(jié)點(diǎn)1200 (即,圖5的均勻吞吐量區(qū) 1102)的標(biāo)記的數(shù)目除以通過(guò)循環(huán)1202的標(biāo)記數(shù)目一樣多的緩沖器 1204。已經(jīng)主要參考幾個(gè)實(shí)施例描述了本發(fā)明。然而,如本領(lǐng)域技術(shù) 人員易于理解的那樣,在如權(quán)利要求限定的本發(fā)明范疇內(nèi)除上述實(shí)施 例外的其他實(shí)施例也是可能的。本發(fā)明可應(yīng)用到同步系統(tǒng)、異步系統(tǒng)、和包括同步與異步部件的 系統(tǒng)。因此,使用了術(shù)語(yǔ)相對(duì)吞吐量。表達(dá)相對(duì)吞吐量的其他術(shù)語(yǔ)可 用于特定系統(tǒng),例如帶寬、阻塞等。具有不同相對(duì)吞吐量的區(qū)域可通 過(guò)逐個(gè)節(jié)點(diǎn)分析整個(gè)數(shù)據(jù)流圖來(lái)定義。每次觸發(fā)時(shí),所有節(jié)點(diǎn)不在所 有弧產(chǎn)生和消耗同樣數(shù)目的標(biāo)記。這可應(yīng)用到數(shù)據(jù)流控制節(jié)點(diǎn),如門(mén) 節(jié)點(diǎn)、合并節(jié)點(diǎn)、切換節(jié)點(diǎn)、和復(fù)制器節(jié)點(diǎn)。這些節(jié)點(diǎn)在它們的弧上 分別產(chǎn)生和消耗的標(biāo)記數(shù)目間有關(guān)系。該關(guān)系可應(yīng)用在任意弧間,包 括在輸入點(diǎn)與輸出點(diǎn)間、輸出點(diǎn)與輸出點(diǎn)、和輸入點(diǎn)與輸入點(diǎn)間。這 些節(jié)點(diǎn)將定義具有均勻吞吐量的區(qū)域的邊界。不同輸入/輸出弧上的活 動(dòng)間關(guān)系將定義相對(duì)吞吐量關(guān)系。雖然高級(jí)語(yǔ)言的硬件設(shè)計(jì)一般都是 理想的,但在FPGA的情形下有特別優(yōu)勢(shì)。因?yàn)镕PGA是可重配置的, 所以單個(gè)FPGA可接收許多不同硬件設(shè)計(jì)。為了充分利用該能力,比 傳統(tǒng)硬件描述語(yǔ)言容易得多的規(guī)定設(shè)計(jì)的方式是必須的。對(duì)于FPGA, 高級(jí)語(yǔ)言的益處甚至可能超過(guò)精細(xì)設(shè)計(jì)的成本效率,但ASIC設(shè)計(jì)有 些方面不是這樣。為了以數(shù)字邏輯電路執(zhí)行數(shù)據(jù)流機(jī)器,每個(gè)節(jié)點(diǎn)將提供有觸發(fā)規(guī) 則,該規(guī)則定義節(jié)點(diǎn)在輸出點(diǎn)提供數(shù)據(jù)并在輸入點(diǎn)消耗數(shù)據(jù)的條件。 更具體地,觸發(fā)規(guī)則是控制數(shù)據(jù)流圖中數(shù)據(jù)流的機(jī)理。利用觸發(fā)規(guī)則, 數(shù)據(jù)從節(jié)點(diǎn)的輸入點(diǎn)轉(zhuǎn)移到輸出點(diǎn),同時(shí)數(shù)據(jù)按照節(jié)點(diǎn)功能變換。對(duì) 來(lái)自節(jié)點(diǎn)輸入點(diǎn)的數(shù)據(jù)的消耗可僅在該輸入點(diǎn)實(shí)際有可用數(shù)據(jù)時(shí)發(fā) 生。相應(yīng)地,如果有接收數(shù)據(jù)的空間,則數(shù)據(jù)可僅在輸出點(diǎn)產(chǎn)生。然而在某些情形中,可能在輸出點(diǎn)產(chǎn)生數(shù)據(jù),即使舊數(shù)據(jù)阻斷路徑;然 后,輸出點(diǎn)的舊數(shù)據(jù)將被新數(shù)據(jù)取代。 一般觸發(fā)規(guī)則的規(guī)范通常可包括1) 節(jié)點(diǎn)每個(gè)輸入點(diǎn)的條件以便該節(jié)點(diǎn)消耗輸入數(shù)據(jù),2) 節(jié)點(diǎn)每個(gè)輸出點(diǎn)的條件以便該節(jié)點(diǎn)在該輸出點(diǎn)產(chǎn)生數(shù)據(jù),以 及3) 執(zhí)行節(jié)點(diǎn)功能的條件。這些條件通常取決于輸入數(shù)據(jù)的值、輸入點(diǎn)或輸出點(diǎn)處有效數(shù)據(jù) 的存在、應(yīng)用到輸入點(diǎn)功能的結(jié)果或功能的狀態(tài),但這些條件可原則 上取決于系統(tǒng)可用的任何數(shù)據(jù)。觸發(fā)規(guī)則的語(yǔ)義學(xué)可遵從在Edward A. Lee的文獻(xiàn)"A Denotational Semantics for Dataflow with Firing"中給 出的,在此通過(guò)將該文獻(xiàn)并入于此。對(duì)于非決定性操作,特殊再排序 和標(biāo)記匹配功能可添加到硬件中從而確保數(shù)據(jù)流機(jī)器的決定性操作, 除非標(biāo)記的排序不影響機(jī)器在非決定性操作后的操作。通過(guò)為系統(tǒng)節(jié)點(diǎn)建立通用觸發(fā)規(guī)則,可以控制多種類型的程序而 無(wú)需專用控制路徑。然而,利用觸發(fā)規(guī)則,對(duì)于某些特殊情形可以執(zhí) 行控制流。另一個(gè)特殊情形是無(wú)觸發(fā)規(guī)則的系統(tǒng),其中僅在節(jié)點(diǎn)的所 有輸入點(diǎn)處數(shù)據(jù)可用時(shí)所有節(jié)點(diǎn)工作。為了能夠由創(chuàng)建數(shù)據(jù)流機(jī)器的工具自動(dòng)執(zhí)行數(shù)字邏輯電路,對(duì)數(shù) 字邏輯電路的執(zhí)行應(yīng)用模塊化方法是有利的。因此,不同類型的節(jié)點(diǎn) 必須提供類似數(shù)據(jù)流控制,但為節(jié)點(diǎn)的特殊特征做了調(diào)整。 一般地, 必須執(zhí)行數(shù)據(jù)流控制,以便受消耗信號(hào)影響的有效數(shù)據(jù)信號(hào)不能影響 所述消耗信號(hào),且受有效數(shù)據(jù)信號(hào)影響的消耗信號(hào)不能影響所述有效數(shù)據(jù)信號(hào)。實(shí)現(xiàn)該目的的簡(jiǎn)單方式是為機(jī)器中所有節(jié)點(diǎn)選擇兩個(gè)方向中的 一個(gè)方向。任一節(jié)點(diǎn)都可含有取決于消耗路徑的有效路徑,或者節(jié)點(diǎn) 可含有取決于有效路徑的消耗路徑。該方法便于以數(shù)字邏輯電路自動(dòng)建立數(shù)據(jù)流機(jī)器,而不可能建立組合循環(huán)。觸發(fā)規(guī)則發(fā)揮功能的特定例子可通過(guò)節(jié)點(diǎn)給出,如圖7所示,該 節(jié)點(diǎn)對(duì)一個(gè)數(shù)據(jù)輸入DinO執(zhí)行功能并給出一個(gè)數(shù)據(jù)輸出Dout0。它包 括數(shù)據(jù)流控制的有效數(shù)據(jù)輸入Vin0、消耗數(shù)據(jù)輸入CoutO、數(shù)據(jù)有效 輸出Vout0、和消耗數(shù)據(jù)輸出Cin0。這里應(yīng)該注意信號(hào)的注解,其中 "in"指對(duì)前面節(jié)點(diǎn)的接口, "out,,指對(duì)后面節(jié)點(diǎn)的接口。該注解將貫穿 整個(gè)說(shuō)明書(shū)和附圖使用。應(yīng)該指出,所有輸入布置在圖左邊,而所有 輸出布置在圖右邊,并且沒(méi)有按照前面節(jié)點(diǎn)和后續(xù)節(jié)點(diǎn)的接口而積聚 在一起。因此Cout0是后續(xù)節(jié)點(diǎn)的輸入,而CinO是對(duì)前一節(jié)點(diǎn)的輸 出,這里前和后應(yīng)按照數(shù)據(jù)流解釋。返回圖7所示的節(jié)點(diǎn),節(jié)點(diǎn)可說(shuō)明如下Cin0 <= Cout0;徹t0 <= Vin0;Dout0 <= f(DinO);其他例子是對(duì)多個(gè)標(biāo)記執(zhí)行功能的節(jié)點(diǎn),這里圖8示出以兩個(gè)作 為操作數(shù)的標(biāo)記執(zhí)行功能的例子。節(jié)點(diǎn)可描述如下 Cin0 <= Cout0; Cinl <= Cout0;Vout0 <= VinO and Vinl and ...; Dout0 <= f(Din0, Dinl, Din2,…);另一個(gè)例子是對(duì)標(biāo)記執(zhí)行功能的節(jié)點(diǎn),該功能給出多個(gè)輸出,這 里圖9示出一個(gè)例子,其中功能給出兩個(gè)輸出。其他例子是根據(jù)條件, 通過(guò)移動(dòng)多個(gè)標(biāo)記中的一個(gè)至輸出點(diǎn)而執(zhí)行多個(gè)輸入標(biāo)記合并的節(jié) 點(diǎn),這里圖IO示出兩個(gè)輸入標(biāo)記的例子,這些節(jié)點(diǎn)可描述如下Cin0 <= Cout0;Cinl <= Cout0 and Din0 = 0;Cin2 <= Cout0 and Din0 = 1;Dout0 <= Dinl when Din0 = 0 otherwise Din2;VoutO <= VinO and ((Vinl and DinO =0) or (Vin2 and Din0 = l));另一個(gè)例子是執(zhí)行切換的節(jié)點(diǎn),這里根據(jù)條件,節(jié)點(diǎn)對(duì)多個(gè)輸出 中的一個(gè)產(chǎn)生輸入標(biāo)記,這里圖ll示出兩個(gè)輸出的例子,其可描述如 下CinO <= (VinO and DinO (VinO and DinOCinl <= (VinO and DinO (VinO and DinO DoutO <= Dinl; VoutO = DinO = 0 and VinO and Vinl; Doutl <= Dinl;Voutl = DinO = 1 and VinO and Vinl;其他例子是根據(jù)數(shù)據(jù)出現(xiàn)輸入點(diǎn)的位置通過(guò)移動(dòng)多個(gè)標(biāo)記中的 一個(gè)至輸出點(diǎn)而執(zhí)行多個(gè)輸入標(biāo)記的優(yōu)先化合并的節(jié)點(diǎn),這里輸入被 優(yōu)先化,圖12示出兩個(gè)輸入例子處,節(jié)點(diǎn)可描述如下CinO <= VinO and CoutO;Cinl <= not VinO and Vinl and CoutO;DoutO <= DinO when VinO otherwise Dinl; --select port 0 beforeport 1VoutO <= VinO or Vinl;圖13示出真門(mén)節(jié)點(diǎn),如果條件為真則該門(mén)節(jié)點(diǎn)通過(guò)標(biāo)記。該節(jié) 點(diǎn)可描述如下DoutO <= Dinl;VoutO <= VinO and Vinl and DinO =1;CinO <= (DinO = 1 and CoutO) or (DinO = 0 and VinO and Vinl);=0 and CoutO) or =1 and Coutl); =0 and CoutO) or =1 and Coutl);Cinl <= (Din0 = 1 and CoutO) or (DinO = 0 and VinO and Vinl); 圖14示出條件為真時(shí)節(jié)點(diǎn)消耗值,條件為假時(shí)復(fù)制值。在圖14 中,條件是對(duì)于復(fù)制,條件輸入為假,但類似實(shí)施例對(duì)于其他條件也 可執(zhí)行。圖15示出執(zhí)行切割器(cutter)功能的節(jié)點(diǎn),切割器功能將 在下面進(jìn)一步說(shuō)明。 一種重要類型的節(jié)點(diǎn)是緩沖器,其存儲(chǔ)傳遞前的 值。緩沖器的大小即長(zhǎng)度可以在l到大數(shù)目存儲(chǔ)步距之間。圖16示出 長(zhǎng)度為1的緩沖器節(jié)點(diǎn)。較大尺寸的緩沖器將進(jìn)一步提供有用于管理 輸入和輸出的控制邏輯。圖17示出執(zhí)行所謂boolstream的節(jié)點(diǎn),即 產(chǎn)生大量(例如與計(jì)數(shù)器給出的一樣多)假標(biāo)記、然后產(chǎn)生新真標(biāo)記、 接著重復(fù)該順序的功能。圖18示出四個(gè)值的匯聚節(jié)點(diǎn),該節(jié)點(diǎn)可與圖10中所示的兩個(gè)值 的匯聚節(jié)點(diǎn)比較,并可描述如下 Cinl <= CoutO and DinO = 0 Cin2 <= CoutO and DinO = 1 Cin3 <= CoutO and DinO = 2 Cin4 <= CoutO and DinO = 3 DoutO <= Dinl when DinO = 0 else Din2 when DinO = 1 else Din3 when DinO =2 else Din4 when DinO = 3; VoutO <= ((DinO = 0 and Vinl) or (DinO = 1 and Vin2) or (DinO = 2 and Vin3) or (DinO = 3 and Vin4)and VinO; CinO <= Cout 0;圖19示出四個(gè)值的切換節(jié)點(diǎn),其可與圖11所示的兩個(gè)值的切換 節(jié)點(diǎn)比較。該節(jié)點(diǎn)可描述如下 DoutO <= Dinl; Doutl <= Dinl;Dout2 <=Dinl;
DouO <=Dinl;
Vout0 <=Vin0 and Vinland DiiiO=0
Voutl <=Vin0 and Vinland DinO=1
Vout2 <=Vin0 and Vinland DinO=2
Vout3 <=Vin0 and Vinland DinO=3
Cin0 <=
(DinO=0andCoutO)
(DinO=1andCoutl)
(DinO=2andCout2)
(DinO=3andCout3)
Cinl <=
(DinO=0andCoutO)
(DinO=1andCoutl)
(DinO=2andCout2)
(DinO=3andCout3)
另 一個(gè)用作觸發(fā)規(guī)則的例子可通過(guò)這樣的節(jié)點(diǎn)給出,該節(jié)點(diǎn)包括 所謂的假門(mén)節(jié)點(diǎn),即與上面給出的真門(mén)節(jié)點(diǎn)相對(duì),如果條件為假則其 通過(guò)標(biāo)記,否則其移除標(biāo)記。該節(jié)點(diǎn)包括兩個(gè)數(shù)據(jù)輸入和一個(gè)數(shù)據(jù)輸 出。因此,它包括兩個(gè)有效數(shù)據(jù)輸入、兩個(gè)消耗輸入、 一個(gè)數(shù)據(jù)有效 輸出、和一個(gè)消耗輸出。有效數(shù)據(jù)輸出由兩個(gè)有效數(shù)據(jù)輸入和第一數(shù) 據(jù)輸入的邏輯形成。數(shù)據(jù)輸出給出第二數(shù)據(jù)輸入的值。消耗輸入由第 一數(shù)據(jù)輸入、消耗輸出和兩個(gè)有效數(shù)據(jù)輸入的邏輯形成。節(jié)點(diǎn)的功能
可描述如下
Dout <= Dinl;
Vout <= VinO and Vinl and DinO=0;
CinO <= (DinO=0 and Cout) or (DinO=l and VinO and Vinl); Cinl <= (DinO=0 and Cout) or (Din0=l and VinO and Vinl); 每個(gè)節(jié)點(diǎn)可因此提供有附加信號(hào)集合以便在每個(gè)時(shí)刻提供正確"有效,,信號(hào),其指示前一節(jié)點(diǎn)輸出點(diǎn)處具有 穩(wěn)定的數(shù)據(jù)。類似地,當(dāng)節(jié)點(diǎn)輸出點(diǎn)處數(shù)據(jù)穩(wěn)定時(shí),節(jié)點(diǎn)提供"有效" 信號(hào)給數(shù)據(jù)路徑中的后續(xù)節(jié)點(diǎn)。通過(guò)該過(guò)程,每個(gè)節(jié)點(diǎn)能夠確定輸入 點(diǎn)數(shù)據(jù)的狀態(tài)。而且,第二附加信號(hào)集合載帶"消耗"信號(hào),該信號(hào)向前一節(jié)點(diǎn)指 示是否當(dāng)前節(jié)點(diǎn)準(zhǔn)備在輸入點(diǎn)接收任何附加數(shù)據(jù)。類似地,節(jié)點(diǎn)也從 數(shù)據(jù)路徑中的后續(xù)節(jié)點(diǎn)接收"消耗,,信號(hào)。利用消耗信號(hào),可以暫時(shí)停 止特定路徑中的數(shù)據(jù)流。在某些時(shí)刻節(jié)點(diǎn)執(zhí)行有不定延遲的耗時(shí)數(shù)據(jù) 處理(如循環(huán)或存儲(chǔ)器存取)的情形中,這是重要的。使用消耗信號(hào) 僅是本發(fā)明的一個(gè)實(shí)施例。根據(jù)所選協(xié)議,也可使用幾種其他信號(hào)。 例子包括"遲延","準(zhǔn)備接收","確認(rèn),,或"未確認(rèn),,信號(hào),以及基于脈 沖或躍變的信號(hào),而非高或低信號(hào)。其他發(fā)送信號(hào)的方案也是可能的。 使用"有效"信號(hào)使得可以表示弧上數(shù)據(jù)的存在或不存在。因此,不僅 可以構(gòu)建同步數(shù)據(jù)流機(jī)器,而且可以構(gòu)建靜態(tài)和動(dòng)態(tài)數(shù)據(jù)流機(jī)器。"有 效"信號(hào)不必作為專用信號(hào)線執(zhí)行,而是可以以幾種其他方式執(zhí)行,如 選擇特殊數(shù)據(jù)值從而表達(dá)"空"值。至于消耗信號(hào),有許多其他可能的 發(fā)送信號(hào)方案。為了簡(jiǎn)潔,本文獻(xiàn)的其余部分僅引用消耗和有效數(shù)據(jù) 信號(hào)。擴(kuò)展本發(fā)明功能到其他信號(hào)發(fā)送方案非常簡(jiǎn)單。借助存在專用消耗信號(hào)線,可以實(shí)現(xiàn)較高的效率。消耗信號(hào)使得 節(jié)點(diǎn)可以知道即使下面的孤在瞬間是滿的,也可以在下 一 時(shí)鐘周期接 收輸出標(biāo)記。在沒(méi)有專用消耗信號(hào)線的情況下,節(jié)點(diǎn)必須等待直到下 面的弧在觸發(fā)前其上有空間。這意味著至少每隔一個(gè)周期輸入弧的為 空,因此損失效率。圖7到圖19示出為節(jié)點(diǎn)產(chǎn)生有效數(shù)據(jù)和消耗信號(hào)的邏輯電路的 例子。通常,觸發(fā)規(guī)則是復(fù)雜的且必須按照單個(gè)節(jié)點(diǎn)的功能建立。在復(fù)雜數(shù)據(jù)流機(jī)器的情形中,相比信號(hào)傳播速度,消耗線可以非 常長(zhǎng)。這可導(dǎo)致消耗信號(hào)沒(méi)有達(dá)到需要遲延的路徑中每個(gè)節(jié)點(diǎn),結(jié)果 損失數(shù)據(jù)(即,尚未處理的數(shù)據(jù)由新數(shù)據(jù)覆蓋)。這可以多種方式解決。消耗信號(hào)傳播路徑可非常仔細(xì)地平衡從而確保及時(shí)到達(dá)所有目標(biāo)寄存器。可替換地,先進(jìn)先出緩沖器可設(shè)置在 可停止塊后面,從而完全避免在該塊內(nèi)使用消耗信號(hào)。相反,在數(shù)據(jù) 輸出流水線時(shí),使用先進(jìn)先出緩沖器收集流水線數(shù)據(jù)。對(duì)于大流水線 化塊使用前一解決方案來(lái)非常困難并且耗時(shí)。后一方案要求能夠保存 可能位于該塊內(nèi)的整個(gè)數(shù)據(jù)集合的大緩沖器。
更好對(duì)付限制信號(hào)傳播速度的方式是利用圖17中示出的所謂"切 割器"特征。切割器基本是寄存器,其接收來(lái)自后續(xù)節(jié)點(diǎn)的消耗線并將 其延遲一個(gè)周期。這在該點(diǎn)切除了消耗信號(hào)的組合長(zhǎng)度。當(dāng)切割器接 收有效消耗信號(hào)時(shí),其在一個(gè)處理周期中緩沖前一節(jié)點(diǎn)的數(shù)據(jù),并同 時(shí)將消耗信號(hào)延遲相同的量。通過(guò)延遲消耗信號(hào)和緩沖輸入數(shù)據(jù),確 保即使使用非常長(zhǎng)的消耗線也沒(méi)有數(shù)據(jù)丟失。
切割器可顯著簡(jiǎn)化數(shù)據(jù)循環(huán)特別是流水線化的數(shù)據(jù)循環(huán)的執(zhí)行。 在該情形中,許多控制數(shù)據(jù)流的協(xié)議的變化將調(diào)用消耗信號(hào)從而采用 與數(shù)據(jù)通過(guò)循環(huán)相同的路徑,通常反向。這會(huì)建立消耗信號(hào)的組合循 環(huán)。通過(guò)將切割器設(shè)置在循環(huán)中,可避免這樣的組合循環(huán),使得許多 原本困難或不可能的協(xié)議能夠執(zhí)行。
最后,從數(shù)據(jù)流機(jī)器中數(shù)據(jù)傳播的角度看,切割器是透明的。這 表示切割器可按照自動(dòng)方式添加到需要的地方。
作為專用消耗線的替換是產(chǎn)生數(shù)據(jù)的節(jié)點(diǎn)檢查是否數(shù)據(jù)輸出是 無(wú)效的。因此,不需要專用消耗比特,這解決了長(zhǎng)消耗信號(hào)線的問(wèn)題。 然而,節(jié)點(diǎn)必須等待直到數(shù)據(jù)輸出弧上數(shù)據(jù)已經(jīng)被后續(xù)節(jié)點(diǎn)消耗,這 意味著觸發(fā)減緩。然而,在數(shù)據(jù)流機(jī)器不要求高吞吐量的區(qū)域這是可 行的。
圖20a到圖20g示出例示了附圖中所示的本發(fā)明實(shí)施例的部分的 例子。圖20a示出引用循環(huán)子圖的元素,即數(shù)據(jù)流機(jī)器中被執(zhí)行來(lái)處 理值的功能。圖20b示出表達(dá)子圖,即例如為跟蹤迭代、循環(huán)條件等 產(chǎn)生表達(dá)的數(shù)據(jù)流機(jī)器的元素。圖20c示出合并節(jié)點(diǎn),這里為if-merge, 即根據(jù)值2104合并值2100、 2102以產(chǎn)生結(jié)果值2106的節(jié)點(diǎn)。圖ld 示出優(yōu)先權(quán)合并節(jié)點(diǎn),即合并值2108、 2110以產(chǎn)生結(jié)果值2112的節(jié)點(diǎn)。結(jié)果值2112是出現(xiàn)的值2108、 2110中的一個(gè)。如果兩個(gè)值2108、 2110都出現(xiàn),則右值2110優(yōu)先。圖20e示出根據(jù)條件2120從值2116、 2118產(chǎn)生結(jié)果值2114的條件合并節(jié)點(diǎn)。圖20f示出根據(jù)條件2118以 值2124或2126產(chǎn)生值122的條件切換。圖20g示出產(chǎn)生跟有真條件 的預(yù)定數(shù)目假條件的流的boolstream節(jié)點(diǎn),然后重復(fù)該過(guò)程。圖21示出for循環(huán)2200,其包括在輸入點(diǎn)2204獲取值的條件合 并節(jié)點(diǎn)2202或循環(huán)2206。迭代的數(shù)目是通過(guò)boolstream 208執(zhí)行以 下操作來(lái)確定的,即引起合并節(jié)點(diǎn)2202從輸入點(diǎn)提取值,并然后使其 循環(huán)通過(guò)體2210與在下一真值之前boolstream 2208被設(shè)置為產(chǎn)生假 條件的次數(shù)相同的次數(shù)。這是可能的,因?yàn)轭愃芺oolstream 2214控制 的切換節(jié)點(diǎn)2212切換體2210的輸出到循環(huán)2206同樣次數(shù),且然后切 換到輸出2216。這里,在迭代過(guò)程中為常數(shù)值的上下文值2218在復(fù) 制器中復(fù)制的次數(shù)與boolstream確定的次數(shù)相同,并然后提供給體 2210。圖22示出類似于圖21中所示的for循環(huán)2300。 for循環(huán)2300提 供在迭代過(guò)程中導(dǎo)出列表的特征。這是由確定迭代次數(shù)的第一 boolstream 2302的條件值控制的切換節(jié)點(diǎn)2300實(shí)現(xiàn)的,該次數(shù)是由 確定列表長(zhǎng)度的第二 boolstream 2304確定的預(yù)定次數(shù)的兩倍。按第一 和第二 boolstream 2302、 2304所確定的,切換節(jié)點(diǎn)2300輸出輸出點(diǎn) 2306上列表,同時(shí)不在該列表中的值將被切換到擦除值的門(mén)節(jié)點(diǎn)(未 示出)。圖23示出應(yīng)用類似技術(shù)導(dǎo)入列表的for循環(huán),其使用復(fù)制器2400 和兩個(gè)boolstream 2402、 2404。第一 boolstream 2402確定迭代的次 數(shù)而第二 boolstream 2404確定列表長(zhǎng)度。第一 boolstream的復(fù)制條 件(即與直到準(zhǔn)備迭代為止跟有假條件的列表長(zhǎng)度一樣多的真條件) 控制合并節(jié)點(diǎn)2406讀取整個(gè)列表并將其存儲(chǔ)在具有用于整個(gè)列表空 間的緩沖器2408中。然后為每次迭代在內(nèi)環(huán)中計(jì)算列表,且同時(shí)提供 給體2412。為了能夠清空列表,提供切換節(jié)點(diǎn)2414,借助上述技術(shù)該 切換節(jié)點(diǎn)2414被控制以便與迭代次數(shù)和列表長(zhǎng)度一致。圖24示出類似于圖23所示的for循環(huán),但循環(huán)列表通過(guò)體2500。 這使得列表依賴循環(huán)。
一般地,按照本發(fā)明,可執(zhí)行兩類循環(huán)l)具有循環(huán)相關(guān)變量 的循環(huán),其中變量在每次迭代中決定于其自身,和2)無(wú)循環(huán)相關(guān)變 量的循環(huán)(除了跟蹤循環(huán)實(shí)際輪數(shù)的計(jì)數(shù)器外);在本文中,這類循 環(huán)被稱為"foreach"循環(huán)。
具有循環(huán)相關(guān)變量的循環(huán)可以分成兩個(gè)子組la)循環(huán)中輪數(shù)是 在循環(huán)內(nèi)計(jì)算的循環(huán),即決定循環(huán)是否繼續(xù)的條件取決于循環(huán)相關(guān)變 量;在本文中,這類循環(huán)被稱為"while,,循環(huán),和lb)程序執(zhí)行過(guò)程中 經(jīng)過(guò)預(yù)定次數(shù)的循環(huán);在本文中,這類循環(huán)被稱為"for"循環(huán)。
"下一變量(NXT),,是具有循環(huán)相關(guān)性的變量。該變量為每次迭 代計(jì)算其"下一,,個(gè)值(可以通過(guò)其他中間計(jì)算)。"for,,和"while,,循環(huán) 具有NXT,而"foreach"沒(méi)有。
"上下文變量(CTX)"是在執(zhí)行循環(huán)過(guò)程中不改變的變量。該變 量從循環(huán)(上下文)獲得其值,且然后該值不改變。
"再入,,循環(huán)是數(shù)據(jù)相關(guān)循環(huán)(for/while),其中可以通過(guò)流水線 化對(duì)多個(gè)迭代同時(shí)執(zhí)行。作為"再入,,循環(huán)的"while"循環(huán)需要加標(biāo)簽, 即需要分配ID給流水線中每個(gè)值。這使得可以在完成循環(huán)后分選值。 不對(duì)在另一個(gè)值后進(jìn)入循環(huán)的值加標(biāo)簽的情況下,如果該值經(jīng)過(guò)較少 次循環(huán),則其可在其他值之前離開(kāi)循環(huán)。這導(dǎo)致非決定性行為。
值"導(dǎo)出,,意味著循環(huán)返回非循環(huán)相關(guān)的變量。值導(dǎo)入意味著該值 是"CTX"值。
"列表,,是一系列被當(dāng)作彼此先后被流化的一組值(值列表)的標(biāo)記。
"矢量,,是完全廣泛并行(broadparallel)設(shè)計(jì)。矢量是同時(shí)存在 于數(shù)據(jù)流機(jī)器中的且都可存取的值的集合。列表和矢量被稱為"集合"。
當(dāng)對(duì)所有集合迭代時(shí),迭代的數(shù)目等于迭代的集合中元素的數(shù) 目,且每次迭代從被迭代集合中讀取一個(gè)元素。
對(duì)列表或矢量迭代對(duì)于列表意味著一次饋送一個(gè)值到循環(huán)中。對(duì)于矢量,這意味著建立與矢量中元素?cái)?shù)目相同的循環(huán)體,且每個(gè)體同 時(shí)處理矢量中的每個(gè)元素??梢詫?duì)集合迭代從而從CTX導(dǎo)入集合或使NXT中集合做出循環(huán) 相關(guān)的變化。"foreach,,總是返回集合(迭代間不會(huì)發(fā)生數(shù)據(jù)相關(guān)性,因此在集 合中一次僅可對(duì)一個(gè)元素操作)。"for"可返回值(和)或值的集合(如加法過(guò)程中當(dāng)前和的值)。 CTX、 NTX和許多同時(shí)迭代的集合中可以有許多變量。 數(shù)據(jù)流機(jī)器的基本機(jī)理是節(jié)點(diǎn)將在接收到所有輸入時(shí)執(zhí)行操作, 從而消耗其輸入并產(chǎn)生相關(guān)輸出(如果有的話)。節(jié)點(diǎn)將不執(zhí)行任何 操作直到其具有足夠輸入。任何提前到達(dá)的輸入僅在節(jié)點(diǎn)前邊緣上等 待,直到足以節(jié)點(diǎn)操作的輸入到達(dá)。如果節(jié)點(diǎn)輸出邊緣被占據(jù),則其 延遲活動(dòng)直到釋放邊緣。該特征利用在某些邊緣上有初始標(biāo)記(值) 的for循環(huán)中。 循環(huán)基礎(chǔ)是 foreach循環(huán)將在整個(gè)源集合上迭代,獨(dú)立于所有其他迭代,對(duì) 源集合的每個(gè)元素執(zhí)行循環(huán)體。.for循環(huán)將在整個(gè)源集合上迭代,對(duì)每個(gè)元素執(zhí)行循環(huán)體,并具 有循環(huán)相關(guān)變量中循環(huán)載帶的關(guān)系。-只要條件為真,while循環(huán)就迭代,循環(huán)相關(guān)變量的每次迭代都 執(zhí)行循環(huán)體一次。正常有相關(guān)性的循環(huán)一次僅在一個(gè)值集合中進(jìn)行。計(jì)算值集合并 在產(chǎn)生結(jié)果時(shí),循環(huán)處于允許輸入新值集合的狀態(tài)。 作為例子,基本for循環(huán)可以是a = for (e in <1"10>) i = i+l;} return i;執(zhí)行后,a將得到值10。該循環(huán)在圖25中示出,但對(duì)循環(huán)體3104的直接輸入3100和輸 出3102不用。輸入3100和輸出3102是for循環(huán)的輸入/輸出集合。圖 中中央頂部輸入3106是下一輸入。在該例子中,i的初始值(在情形 中為0)在此進(jìn)入循環(huán)。循環(huán)的中央底部輸出3108是下一輸出。循環(huán) 的結(jié)果從此處得到。示出循環(huán)體3104的中央的云團(tuán)從合并節(jié)點(diǎn)3110 得到輸入并向其加1,并將其結(jié)果發(fā)送給切換節(jié)點(diǎn)3112。兩個(gè) boolstream3114、 3115每個(gè)都產(chǎn)生10個(gè)假值,然后是真值。作為另一個(gè)例子,具有ctx輸入的for循環(huán)如下i = 0;b = 10;a = for(e in <1..10>) i = i + b;} return在執(zhí)行后,a將得到值100。該循環(huán)在圖26中示出。b的值將被復(fù)制的次數(shù)與循環(huán)迭代的次數(shù) 一樣多,每次迭代中加到i。除此之外,其與參考圖25討論的基本循 環(huán)類似。作為另一個(gè)例子,從列表集合迭代的for循環(huán)如下 i = 0;a = for(e in <1..10>)i = i + e', } return ij在執(zhí)行后,a將得到值55。該循環(huán)在圖25中示出,這次使用直接進(jìn)入循環(huán)體3104的輸入 3100。在(<1..10>)上迭代的列表的值從該輸入3100送出, 一次一 個(gè)值。每個(gè)迭代中該值被添加到來(lái)自合并節(jié)點(diǎn)3110的值,且結(jié)果被發(fā)送到切換節(jié)點(diǎn)3112。除此之外,其與基本for循環(huán)類似。 作為另一個(gè)例子,到列表集合迭代的for循環(huán)如下 i = 0;a = for(e in <1..10>)i = i + e; } return all i;在執(zhí)行后,a將是含<1..10>各加和的集合,即值<1, 3, 6, 10, 15, 21, 28, 36, 45, 55>。該循環(huán)在圖25中示出,然而,現(xiàn)在使用直接來(lái)自云團(tuán)的輸出 3102。該輸出是發(fā)送給切換節(jié)點(diǎn)3112的每個(gè)值的拷貝。圖27示出類似于圖26所示的循環(huán),但現(xiàn)在循環(huán)不變量輸入是列 表而非單個(gè)值(假定導(dǎo)入的列表用在循環(huán)體中)。列表被拷貝的次數(shù)與循環(huán)迭代的次數(shù)一樣多。作為替換,可使用如同圖28中示出的列表 復(fù)制節(jié)點(diǎn),而非圖27中示出的內(nèi)循環(huán)。圖29示出如圖27類似的循環(huán)體,但這里導(dǎo)入的列表不再是循環(huán) 不變量,而是在循環(huán)的每次迭代中改變。這里循環(huán)體為列表提供空間。圖30示出與圖26類似的循環(huán),但有附加的循環(huán)不變量返回值。 如果對(duì)輸出切換節(jié)點(diǎn)的條件輸入被復(fù)制節(jié)點(diǎn)復(fù)制與最終列表長(zhǎng)度相同 的次數(shù),則返回值可以是列表,如圖31所示。圖32示出完全展開(kāi)的循環(huán),也稱為矢量循環(huán),并且在該情形中 為for循環(huán),因此每個(gè)體傳遞循環(huán)相關(guān)結(jié)果給下一循環(huán)體。列表輸入 是大量矢量輸入(矢量每個(gè)元素一個(gè)列表輸入)。ctx具有其分布到每 個(gè)循環(huán)體的值的副本。與具有相關(guān)性的正常循環(huán)(其一次僅能對(duì)一個(gè)輸入集合進(jìn)行操 作)相比,具有相關(guān)性的再入循環(huán)可接收在第一個(gè)輸入后緊接著的新 獨(dú)立輸入集合,并可在循環(huán)中有空間時(shí)插入新輸入集合。這使循環(huán)流 水線化。如圖33所示,for循環(huán)可再入。在該情形中,優(yōu)先化合并節(jié)點(diǎn)(prio-merge)取代圖25中所示的for循環(huán)具有的輸入合并節(jié)點(diǎn)。有 結(jié)合與分離節(jié)點(diǎn)(看下面)從而確保輸入值和內(nèi)部循環(huán)計(jì)數(shù)器同時(shí)進(jìn) 入循環(huán)。結(jié)合與分離節(jié)點(diǎn)的效果本來(lái)可以通過(guò)多個(gè)鏈接的優(yōu)先化合并 節(jié)點(diǎn)實(shí)現(xiàn)。圖34和圖35分別示出具有標(biāo)量和列表上下文輸出的再入for循環(huán)。圖36示出部分展開(kāi)的再入for循環(huán),即有多個(gè)循環(huán)體副本,但不 是與循環(huán)體迭代次數(shù)一樣多。在該情形中,循環(huán)離開(kāi)點(diǎn)必須位于標(biāo)號(hào)為迭代數(shù)目模循環(huán)體副本數(shù)目的循環(huán)體之后。這利用了 for循環(huán)迭代 固定次數(shù)的事實(shí)(迭代次數(shù)與輸入集合中元素的數(shù)目相同)。作為另一個(gè)例子,基本foreach循環(huán)為a = foreach (e in <1..10>) e*e;a將是1到10的平方的集合(即<1, 4, 9, 16, 25, 36, 49, 64, 81, 100>)。foreach循環(huán)不允許任何循環(huán)載帶關(guān)系?;拘问筋愃茍D25中所 示的for循環(huán),但沒(méi)有切換/合并的下一輸入和輸出。即,僅為具有簡(jiǎn) 單輸入和簡(jiǎn)單輸出的循環(huán)體云團(tuán)。迭代集合是在頂部的輸入和底部的 輸出。圖37示出具有循環(huán)不變量上下文輸入的foreach循環(huán)。圖38示出在整個(gè)矢量而非列表上迭代的foreach循環(huán),即充分展 開(kāi),如圖32所示的for循環(huán)。注意,體之間沒(méi)有循環(huán)相關(guān)的值傳遞。 圖38也示出分布到不同體的上下文輸入。作為另一個(gè)例子,基本while循環(huán)為i = xja = while (i < c)i = f(i); } return i,'圖39示出while循環(huán)。while循環(huán)不在集合上迭代。而是迭代直 到滿足條件。對(duì)于while循環(huán)的每次調(diào)用條件可以是不同的。這意味著有循環(huán)相關(guān)性,因?yàn)榉駝t條件不變(引起無(wú)窮循環(huán))。因?yàn)閣hile 循環(huán)迭代直到其表達(dá)式評(píng)估為假,while循環(huán)不能使用固定長(zhǎng)度的 boolstream來(lái)控制輸入合并節(jié)點(diǎn)和輸出切換節(jié)點(diǎn)。而是使用條件的結(jié) 果。除此之外,while循環(huán)非常類似于不使用集合輸入/輸出的for循環(huán), 如上面所述的那樣。圖40示出while循環(huán),這里循環(huán)相關(guān)性是集合,僅類似于圖29 中的for循環(huán)。圖41示出基本再入while循環(huán)。然而,該循環(huán)是非決定性的。每 次調(diào)用while循環(huán)迭代不同次數(shù)。這意味著對(duì)于每個(gè)集合的輸入,該 集合可迭代與后面集合不同的次數(shù)。因此,隨后的輸入集合可在迭代 時(shí)間較長(zhǎng)的較早輸入集合之前離開(kāi)循環(huán)。這可引起機(jī)器的其他部分失 配。為了避免非確定性while循環(huán)的問(wèn)題,采用加標(biāo)簽系統(tǒng),如圖42 所示。這將每個(gè)輸入集合與標(biāo)簽關(guān)聯(lián),標(biāo)簽通常是簡(jiǎn)單數(shù)字。在數(shù)據(jù) 離開(kāi)循環(huán)后,結(jié)果可按照標(biāo)簽分類并被允許以有序方式離開(kāi)。這樣的 加標(biāo)簽方案允許局部動(dòng)態(tài)數(shù)據(jù)流機(jī)器存在于全靜態(tài)Dennis數(shù)據(jù)流機(jī) 器的環(huán)境中。在加標(biāo)簽系統(tǒng)的外部,單元表現(xiàn)為類似靜態(tài)數(shù)據(jù)流機(jī)器, 但在其內(nèi)部表現(xiàn)為類似動(dòng)態(tài)數(shù)據(jù)流機(jī)器。優(yōu)選地,再組織圖能夠?qū)?biāo) 簽關(guān)聯(lián)到數(shù)據(jù)并將標(biāo)簽保持在該結(jié)果,且標(biāo)簽緩沖器4711大小等于標(biāo) 簽的數(shù)目。圖43示出添加有加標(biāo)簽機(jī)理的再入while循環(huán)的例子。這里,標(biāo) 簽號(hào)為0, 1, 2, 3...,且標(biāo)簽緩沖器4712大小等于標(biāo)簽數(shù)目。"dowhile"圖示出執(zhí)行dowhile循環(huán)的數(shù)據(jù)流機(jī)器,也就是 repeat-until循環(huán)。其類似于while循環(huán),但在評(píng)估條件之前總是執(zhí)行 循環(huán)體一次。"dowhilejeent"示出無(wú)加標(biāo)簽系統(tǒng)的dowhile循環(huán)的再 入形式。因?yàn)閷?duì)于每次調(diào)用,dowhile循環(huán)迭代不同次數(shù),如同while 循環(huán)一樣,加標(biāo)簽系統(tǒng)應(yīng)被添加到再入do-while循環(huán)以便正確執(zhí)行。圖44示出投機(jī)if操作。if-merge節(jié)點(diǎn)將等待直到在其所有三個(gè) 輸入點(diǎn)(條件、真分支和假分支)上都有數(shù)據(jù)。然后從條件輸入指示的分支選擇值。if-functionality的設(shè)計(jì)比切換合并if更有效,如圖45 所示。圖46示出分解為切換和合并的復(fù)制節(jié)點(diǎn)。圖47示出list-dup的 類似復(fù)制節(jié)點(diǎn)。簡(jiǎn)而言之,不同循環(huán)類型的特征可描述如下.foreach循環(huán)沒(méi)有循環(huán)相關(guān)性并因此沒(méi)有循環(huán)相關(guān)變量 for循環(huán)要求至少一個(gè)循環(huán)相關(guān)變量.while和do-while循環(huán)具有確定迭代次數(shù)的運(yùn)行時(shí)間計(jì)算出的表達(dá)式 while循環(huán)可迭代零次,do-while循環(huán)總是迭代至少一次 foreach循環(huán)總是可流水線化 for循環(huán)和while循環(huán)可再入.每次調(diào)用迭代不同次數(shù)的再入循環(huán)必須具有加標(biāo)簽和相關(guān)的分 類系統(tǒng),以確保值正確的離開(kāi)順序。這意味著while循環(huán)再入和 do-while再入需要加標(biāo)簽。.再入while循環(huán)將執(zhí)行比循環(huán)體多 一次的條件表達(dá)式。這意味著 循環(huán)體將至少在一次迭代是空的。再入do-while循環(huán)可具有if表達(dá)式, 其含與循環(huán)一樣的條件表達(dá)式。在該情形中,循環(huán)體可總是滿的,并 執(zhí)行與while循環(huán)同樣的操作簡(jiǎn)而言之,循環(huán)的輸入和輸出可描述如下.循環(huán)相關(guān)變量在nxt-in輸入點(diǎn)進(jìn)入循環(huán),并在next-out離開(kāi)點(diǎn) 離開(kāi)循環(huán).循環(huán)不變變量(循環(huán)外部定義的變量,因此整個(gè)循環(huán)中保持相同) 在ctx-in進(jìn)入循環(huán)(或?qū)?-循環(huán)不變變量,和非直接從循環(huán)相關(guān)變量計(jì)算出的變量在 ctx-out離開(kāi)循環(huán)(或?qū)С?.在整個(gè)集合上迭代的循環(huán)進(jìn)入在"集合進(jìn)(collection in )"集合.返回結(jié)果到集合的循環(huán)在"集合出(collection out),,返回結(jié)果簡(jiǎn)而言之,循環(huán)的數(shù)據(jù)類型可描述如下-循環(huán)可對(duì)標(biāo)量迭代.在整個(gè)集合上迭代的循環(huán)可在整個(gè)列表或矢量上迭代 .在整個(gè)列表上迭代意味著從集合中一次提取一個(gè)元素 .在矢量上迭代意味著集合的所有元素同時(shí)迭代已經(jīng)參考
了不同循環(huán)??偟膩?lái)說(shuō),下面的表示出對(duì)圖的 引用,這里已經(jīng)說(shuō)明了不同類型的循環(huán)。表的圖例如下,其中各圖的數(shù)字在圓括號(hào)中每個(gè)字母后面示出 f: for循環(huán) rf:再入for循環(huán) w: while循環(huán) rw:再入while循環(huán) e: foreach標(biāo)量列表 f(29) w(40)矢量f(25,26)w(39)rf(33)rf(未示出)類似標(biāo)量,但復(fù)制rw(未示出)下一輸入rw(41,42,43)f(25,26)w(39)rf(33)類似標(biāo)量,但復(fù)制下一輸出rw(41,42,43)f(29,31) w(40) f(27) w(40)f(25,26) w(39)rf(未示出)類似標(biāo)量,但復(fù)制導(dǎo)入Ctxrf(33)rw(41,42,43) e(37)rw(未示出)e(28)類似標(biāo)量,但復(fù)制導(dǎo)出Ctx/temp 整個(gè)/從集合f(30) rf(34)無(wú)無(wú)f(31) rf(35) f(25) e(37) f(25) e(37)rf(32) e(38) rf(32) e(38)至集合進(jìn)一步,下面注解說(shuō)明循環(huán)特征-矢量上for循環(huán)總是再入,因?yàn)閒or循環(huán)是完全流水線化的。這意味著不再有循環(huán),而僅有與循環(huán)應(yīng)迭代次數(shù)一樣多的置于彼此之后的體。這樣的直線操作顯然是可流水線化的。結(jié)合節(jié)點(diǎn)并置幾個(gè)值,使得它們可如同一個(gè)值那樣通過(guò)節(jié)點(diǎn)。分 離節(jié)點(diǎn)將前面結(jié)合的變量以如同它們結(jié)合時(shí)從左到右的相同方式分成原始的單個(gè)值。再入循環(huán)通常是以優(yōu)先化合并節(jié)點(diǎn)實(shí)現(xiàn)的。for循環(huán)可利用與循 環(huán)內(nèi)流水線位置一樣多的初始假標(biāo)記并對(duì)選擇值復(fù)制相同次數(shù)而再 入。節(jié)點(diǎn)通??煞纸鉃檩^小的部分。例如,切換節(jié)點(diǎn)可分解為門(mén)節(jié)點(diǎn)。 門(mén)節(jié)點(diǎn)具有一個(gè)條件輸入和一個(gè)數(shù)據(jù)輸入。其具有單個(gè)數(shù)據(jù)輸出。如 果條件輸入具有真值,則輸入點(diǎn)的值將被復(fù)制到輸出點(diǎn)。如果條件輸 入具有假值,則輸入點(diǎn)的值將被消耗,而不產(chǎn)生輸出。假門(mén)節(jié)點(diǎn)嚴(yán)格 相同,但在假條件被接收時(shí)傳遞值,并在真條件被接收時(shí)消耗該值。 因此,切換節(jié)點(diǎn)可以門(mén)節(jié)點(diǎn)構(gòu)造。真門(mén)節(jié)點(diǎn)和假門(mén)節(jié)點(diǎn)都取切換輸入,且每個(gè)都具有自身的輸出 (相應(yīng)于切換節(jié)點(diǎn)的兩個(gè)輸出)。切換節(jié)點(diǎn)的條件輸入被連接到兩個(gè)門(mén)節(jié)點(diǎn)??傮w表現(xiàn)為切換節(jié)點(diǎn)。節(jié)點(diǎn)也可構(gòu)成較大節(jié)點(diǎn)。例如,for循環(huán)周圍的合并節(jié)點(diǎn)和切換 節(jié)點(diǎn)可構(gòu)成"for循環(huán),,節(jié)點(diǎn)。有時(shí)組合的節(jié)點(diǎn)可比單個(gè)節(jié)點(diǎn)集合執(zhí)行得更為有效。上面參考幾個(gè)實(shí)施例描述了本發(fā)明。然而,本領(lǐng)域技術(shù)人員將容 易理解,在所附權(quán)利要求限定的本發(fā)明范疇內(nèi),上述實(shí)施例之外的其 他實(shí)施例也同樣可以。
權(quán)利要求
1.一種生成用于以數(shù)字邏輯電路執(zhí)行數(shù)據(jù)流機(jī)器的數(shù)字控制參數(shù)的設(shè)備,該數(shù)字邏輯電路包括具有至少一個(gè)輸入或至少一個(gè)輸出的功能節(jié)點(diǎn)和所述功能節(jié)點(diǎn)間的連接,其中,所述數(shù)字邏輯電路包括由連續(xù)標(biāo)記流化的第一路徑和由所述標(biāo)記流化的第二路徑,上述設(shè)備包括確定器,其被設(shè)置為確定到所述路徑的必要數(shù)據(jù)流相對(duì)吞吐量;緩沖器分配器,其被設(shè)置為分配緩沖器給一個(gè)所述路徑從而平衡所述路徑的吞吐量;分配緩沖器的移除器,其被設(shè)置為移除分配的緩沖器直到以最小數(shù)目的緩沖器獲得所述必要的相對(duì)吞吐量;以及數(shù)字控制參數(shù)發(fā)生器,其被設(shè)置為執(zhí)行包括所述最小數(shù)目的緩沖器的所述數(shù)字邏輯電路。
2. 如權(quán)利要求1所述的設(shè)備,其中所述第一和第二路徑是并行的。
3. 如權(quán)利要求1或2所述的設(shè)備,其中所迷移除分配緩沖器是 關(guān)于所述數(shù)字邏輯電路的所述執(zhí)行的其他部分的可用空間、所述路徑 的相對(duì)吞吐量、和所述數(shù)字邏輯電路的所述執(zhí)行的其余部分的相對(duì)吞 吐量來(lái)執(zhí)行的。
4. 如權(quán)利要求1到3中任一條所述的設(shè)備,其中至少一個(gè)所述 路徑包括至少兩個(gè)功能節(jié)點(diǎn),其中第一所述功能節(jié)點(diǎn)具有第一相對(duì)吞 吐量,第二所迷功能節(jié)點(diǎn)具有笫二相對(duì)吞吐量,其中所述第二相對(duì)吞 吐量適于等于所述第一相對(duì)呑吐量。
5. 如權(quán)利要求1到4中任一條所述的設(shè)備,其中所述第一和第 二路徑是串行的。
6. 如權(quán)利要求1到5中任一條所述的設(shè)備,其中所述數(shù)字控制 參數(shù)控制FPGA從而執(zhí)行所述數(shù)字邏輯電路。
7. 如權(quán)利要求1到6中任一條所述的設(shè)備,其中所述數(shù)據(jù)流機(jī) 器是從高級(jí)源代碼規(guī)范生成的。
8. 如權(quán)利要求1到7中任一條所述的設(shè)備,其中所述數(shù)字控制參數(shù)控制專用集成電路(ASIC)或芯片或其任意組合,從而執(zhí)行所述 數(shù)字邏輯電路。
9. 一種為以數(shù)字邏輯電路執(zhí)行數(shù)據(jù)流機(jī)器生成數(shù)字控制參數(shù)的 方法,該數(shù)字邏輯電路包括具有至少一個(gè)輸入或至少一個(gè)輸出的功能 節(jié)點(diǎn)和指示所述功能節(jié)點(diǎn)間互連的連接,其中所述數(shù)字邏輯電路包括 由連續(xù)標(biāo)記流化的第一路徑和由所述標(biāo)記流化的第二路徑,上述方法 包括以下步驟確定到所述路徑的必要數(shù)據(jù)流相對(duì)吞吐量; 分配緩沖器給一個(gè)所述路徑從而平衡所述路徑的吞吐量; 移除分配的緩沖器直到以最小數(shù)目的緩沖器獲得所述必要相對(duì) 吞吐量;為執(zhí)行包括所述最小數(shù)目的緩沖器的所述數(shù)字邏輯電路生成數(shù) 字控制參數(shù)。
10. 如權(quán)利要求9所述的方法,其中所述移除步驟是關(guān)于所述數(shù) 字邏輯電路的所述執(zhí)行的其他部分的可用空間、所述路徑的相對(duì)吞吐 量、和所述數(shù)字邏輯電路的所述執(zhí)行的其余部分的相對(duì)吞吐量來(lái)執(zhí)行 的。
11. 如權(quán)利要求9或10所述的方法,其中至少一個(gè)所述路徑包 括至少兩個(gè)功能節(jié)點(diǎn),其中第 一所述功能節(jié)點(diǎn)具有第一相對(duì)吞吐量, 笫二所述功能節(jié)點(diǎn)具有第二相對(duì)吞吐量,上述方法進(jìn)一步包括使得所 述第二相對(duì)吞吐量適于等于所述第一相對(duì)吞吐量。
12. 如權(quán)利要求9到11中任一條所述的方法,包括利用FPGA 執(zhí)行所述數(shù)字邏輯電路。
13. 如權(quán)利要求9到12中任一條所述的方法,進(jìn)一步包括從高 級(jí)源代碼規(guī)范生成所述數(shù)據(jù)流機(jī)器。
14. 如權(quán)利要求9到13中任一條所述的方法,包括利用專用集 成電路(ASIC)或芯片或其任意組合執(zhí)行所述數(shù)字邏輯電路。
15. —種計(jì)算機(jī)程序產(chǎn)品,其包括程序代碼,該程序代碼被設(shè)置 為在下栽到計(jì)算機(jī)并由計(jì)算機(jī)執(zhí)行時(shí),執(zhí)行按照權(quán)利要求9到14中任一條所述的方法。
16. —種數(shù)字邏輯電路,該數(shù)字邏輯電路包括用以執(zhí)行數(shù)據(jù)流 機(jī)器的具有至少一個(gè)輸入或至少一個(gè)輸出的功能節(jié)點(diǎn)和所述功能節(jié)點(diǎn) 間的連接;能夠接收連續(xù)標(biāo)記流的第一路徑;和能夠接收所述標(biāo)記流 的第二路徑,所述第二路徑包括最小數(shù)目的附加緩沖器。
17. 如權(quán)利要求16所述的電路,其中所述第一和第二路徑是并行的。
18. 如權(quán)利要求16或17所述的電路,其中所述分配的緩沖器的 最小化是關(guān)于所述數(shù)字邏輯電路的所述執(zhí)行的其他部分的可用空間、 所述路徑的相對(duì)吞吐量、和所述數(shù)字邏輯電路的所述執(zhí)行的其余部分 的相對(duì)吞吐量來(lái)執(zhí)行的。
19. 如權(quán)利要求16或18中任一條所述的電路,其中至少一個(gè)所 述路徑包括至少兩個(gè)功能節(jié)點(diǎn),其中第 一所述功能節(jié)點(diǎn)具有第 一相對(duì) 吞吐量,所述第二節(jié)點(diǎn)具有第二相對(duì)吞吐量,其中所述第二相對(duì)吞吐 量適于等于所述第一相對(duì)吞吐量。
20. 如權(quán)利要求16或19中任一條所述的電路,其中所述笫一和 第二路徑是串行的。
21. 如權(quán)利要求16或20中任一條所述的電路,該電路是由FPGA 執(zhí)行的。
22. 如權(quán)利要求16或21中任一條所述的電路,其中執(zhí)行數(shù)據(jù)流 機(jī)器的所述節(jié)點(diǎn)和連接是從高級(jí)源代碼規(guī)范生成的。
23. 如權(quán)利要求16或2中任一條所述的電路,其利用專用集成 電路(ASIC)或芯片或其任意組合執(zhí)行的。
24. —種數(shù)據(jù)流機(jī)器,該數(shù)據(jù)流機(jī)器包括具有至少一個(gè)輸入或 至少 一個(gè)輸出的功能節(jié)點(diǎn)和所述功能節(jié)點(diǎn)間連接;能夠接收連續(xù)標(biāo)記 流的第一路徑;能夠接收所述標(biāo)記流的第二路徑,所述第二路徑包括 最小數(shù)目的附加緩沖器。
25. 如權(quán)利要求24所述的數(shù)據(jù)流機(jī)器,其中所述第一和第二路 徑是并行的。
26. 如權(quán)利要求24或25所述的數(shù)據(jù)流機(jī)器,其中所述對(duì)分配的 緩沖器的最小化是關(guān)于所述數(shù)字邏輯電路的所述執(zhí)行的其他部分的可 用空間、所述路徑的相對(duì)吞吐量、和所述數(shù)字邏輯電路的所述執(zhí)行的 其余部分的相對(duì)吞吐量來(lái)執(zhí)行的。
27. 如權(quán)利要求24到26中任一條所述的數(shù)據(jù)流機(jī)器,其中至少 一條所述路徑包括至少兩個(gè)功能節(jié)點(diǎn),其中第一所述功能節(jié)點(diǎn)具有第 一相對(duì)吞吐量,第二所述功能節(jié)點(diǎn)具有第二相對(duì)吞吐量,其中所述第 二相對(duì)吞吐量適于等于所述第一相對(duì)吞吐量。
28. 如權(quán)利要求24到27中任一條所述的數(shù)據(jù)流機(jī)器,其中所述 第一和第二路徑是串行的。
29. 如權(quán)利要求24到28中任一條所述的數(shù)據(jù)流機(jī)器,該數(shù)據(jù)流 機(jī)器是由FPGA執(zhí)行的。
30. 如權(quán)利要求24到29中任一條所述的數(shù)據(jù)流機(jī)器,該數(shù)據(jù)流 機(jī)器是從高級(jí)源代碼規(guī)范生成的。
31. 如權(quán)利要求24到30中任一條所述的數(shù)據(jù)流機(jī)器,該數(shù)據(jù)流 機(jī)器是自動(dòng)生成的。
32. —種為執(zhí)行數(shù)據(jù)流機(jī)器的數(shù)字邏輯電路確定緩沖器數(shù)目的方 法,該方法包括以下步驟識(shí)別由連續(xù)標(biāo)記流化的第 一路徑和由所述標(biāo)記流化的第二路徑; 確定對(duì)所述路徑的必要的數(shù)據(jù)流相對(duì)吞吐量; 分配緩沖器給所述多個(gè)路徑中的一個(gè)從而平衡所述多個(gè)路徑的 吞吐量;以及移除分配的緩沖器直到以最小數(shù)目的緩沖器獲得所述必要的相 對(duì)吞吐量。
33. 如權(quán)利要求32所述的方法,其中所述第一和第二路徑是并行的。
34. 如權(quán)利要求32或33所述的方法,其中所述對(duì)分配緩沖器的 移除是關(guān)于所述數(shù)字邏輯電路的所述執(zhí)行的其他部分的可用空間、所 述路徑的相對(duì)吞吐量、和所迷數(shù)字邏輯電路的所述執(zhí)行的其余部分的相對(duì)吞吐量來(lái)執(zhí)行的。
35. 如權(quán)利要求32到34中任一條所述的方法,其中至少一個(gè)所 述路徑包括至少兩個(gè)功能節(jié)點(diǎn),其中第一所述功能節(jié)點(diǎn)具有第一相對(duì) 吞吐量,而第二所述節(jié)點(diǎn)具有第二相對(duì)吞吐量,該方法進(jìn)一步包括調(diào) 整所述第二相對(duì)吞吐量使其等于所述第一相對(duì)呑吐量。
36. 如權(quán)利要求32到35中任一條所述的方法,其中所述第一和 第二路徑是串行的。
37. 如權(quán)利要求32到36中任一條所述的方法,進(jìn)一步包括向一 個(gè)所述路徑引入較快的節(jié)點(diǎn)或較快的算法或其任意組合,從而最小化 緩沖器數(shù)目。
38. 如權(quán)利要求37所述的方法,其中所述較快節(jié)點(diǎn)包括并行或 流水線化處理。
39. 如權(quán)利要求32到38中任一條所述的方法,進(jìn)一步包括向一 個(gè)所述路徑引入較小節(jié)點(diǎn)或要求較少的算法或其任意組合,從而最小 化緩沖器數(shù)目。
40. 如權(quán)利要求39所述的方法,其中所述較小節(jié)點(diǎn)被設(shè)置用來(lái) 執(zhí)行迭代操作、或共享操作、或其任意組合。
41. 一種包括程序代碼的計(jì)算機(jī)程序產(chǎn)品,該程序代碼被設(shè)置為 在被下載到計(jì)算機(jī)并由計(jì)算機(jī)執(zhí)行時(shí)執(zhí)行如權(quán)利要求32到40中任一 條所述的方法。
42. —種確定數(shù)字邏輯電路中相對(duì)吞吐量的方法,該數(shù)字邏輯電 路包括節(jié)點(diǎn)和連接用以執(zhí)行數(shù)據(jù)流機(jī)器,該方法包括定義至少一部分所述數(shù)字邏輯電路; 確定所述部分中每個(gè)節(jié)點(diǎn)和連接的相對(duì)吞吐量; 確定通過(guò)所述節(jié)點(diǎn)和連接的數(shù)據(jù)流路徑; 確定流過(guò)每個(gè)路徑的標(biāo)記的數(shù)目;以及從所述數(shù)據(jù)流路徑、流過(guò)每個(gè)路徑的標(biāo)記數(shù)目、和數(shù)字邏輯電路, 來(lái)確定所述部分的相對(duì)吞吐量。
43. 如權(quán)利要求42所述的方法,定義所述部分進(jìn)一步包括確定第 一流控制節(jié)點(diǎn)和第二流控制節(jié)點(diǎn)間相對(duì)吞吐量區(qū)中的節(jié)點(diǎn)和連接。
44. 如權(quán)利要求43所述的方法,其中每個(gè)所述流控制節(jié)點(diǎn)包括 門(mén)節(jié)點(diǎn)、合并節(jié)點(diǎn)、非決定性合并節(jié)點(diǎn)、切換節(jié)點(diǎn)、或復(fù)制器節(jié)點(diǎn)、 或其任意組合。
45. —種包括程序代碼的計(jì)算機(jī)程序產(chǎn)品,該程序代碼被設(shè)置為 在被下栽到計(jì)算機(jī)上并由計(jì)算機(jī)執(zhí)行時(shí)執(zhí)行如權(quán)利要求42到44中任 一條所述的方法。
46. —種為以數(shù)字邏輯電路執(zhí)行數(shù)據(jù)流機(jī)器生成數(shù)字控制參數(shù)的 設(shè)備,所述數(shù)據(jù)流機(jī)器包括具有至少 一個(gè)輸入或至少 一個(gè)輸出的功能 節(jié)點(diǎn)和所述功能節(jié)點(diǎn)間的連接,其中第一功能節(jié)點(diǎn)及連接集合包括在第一均勻吞吐量區(qū)中,所述 第一集合包括從所述第一均勻吞吐量區(qū)的第一邊界功能節(jié)點(diǎn)到所述第一均勻 吞吐量區(qū)外的第二區(qū)的第一連接,所述第一邊界功能節(jié)點(diǎn)設(shè)置在第一 數(shù)據(jù)路徑上并定義所述第一均勻吞吐量區(qū)和所述第二區(qū)之間的接口, 并適于消耗和操作從包括在第一均勾吞吐量區(qū)中的第一內(nèi)部功能節(jié)點(diǎn) 接收的大量標(biāo)記,,且其操作結(jié)果是產(chǎn)生一個(gè)標(biāo)記,從所述第二區(qū)到所述第一均勻吞吐量區(qū)的第二邊界功能節(jié)點(diǎn)的 第二連接,所述第二邊界功能節(jié)點(diǎn)設(shè)置在第一數(shù)據(jù)路徑上并定義所述 第一均勻吞吐量區(qū)和所述第二區(qū)之間的接口 ,并適于接收所述第一數(shù) 據(jù)路徑上的所述一個(gè)標(biāo)記,并提供至少一個(gè)所述標(biāo)記給包括在第一均 勻吞吐量區(qū)內(nèi)的第二內(nèi)部功能節(jié)點(diǎn),其中所述第一功能節(jié)點(diǎn)集合包括沿所述第一內(nèi)部節(jié)點(diǎn)和第二內(nèi) 部節(jié)點(diǎn)之間的第二數(shù)據(jù)路徑設(shè)置的緩沖器,該緩沖器的數(shù)目至少等于 被所述第一邊界節(jié)點(diǎn)消耗的標(biāo)記的所述數(shù)目,從而允許所述數(shù)目的標(biāo) 記進(jìn)入所述第 一邊界功能節(jié)點(diǎn)。
47. 如權(quán)利要求46所述的設(shè)備,其中在所述第一和第二內(nèi)部功 能節(jié)點(diǎn)之間的所述第二路徑上的緩沖器的數(shù)目是將通過(guò)所述第二路徑 的標(biāo)記的數(shù)目除以將通過(guò)所述第一路徑的標(biāo)記的數(shù)目。
48. 如權(quán)利要求46或47任一條所述的設(shè)備,其中所述第二區(qū)進(jìn) 一步包括至少一個(gè)在所述第一路徑中的功能節(jié)點(diǎn)。
49. 如權(quán)利要求46到48中任一條所述的設(shè)備,其中所述第一內(nèi) 部功能節(jié)點(diǎn)和第一邊界節(jié)點(diǎn)合并為一個(gè)節(jié)點(diǎn),且所述第二內(nèi)部節(jié)點(diǎn)和 第二邊界節(jié)點(diǎn)合并為一個(gè)節(jié)點(diǎn),或所述第一均勻吞吐量區(qū)中所有節(jié)點(diǎn)合并為一個(gè)節(jié)點(diǎn)。
50. 如權(quán)利要求46到49中任一條所述的設(shè)備,進(jìn)一步被設(shè)置為字邏輯電路的所述執(zhí)行的其余部分的吞吐i,來(lái):化所述第一均勻吞吐量區(qū)和第二均勻吞吐量區(qū)的吞吐量。
51. 如權(quán)利要求50所述的設(shè)備,其中所述優(yōu)化包括對(duì)所述數(shù)字 邏輯電路的功能節(jié)點(diǎn)或功能節(jié)點(diǎn)組的迭代或流水線化或其任意組合。
52. 如權(quán)利要求46到51中任一條所述的設(shè)備,其中所述數(shù)字控 制參數(shù)控制FPGA從而執(zhí)行所述數(shù)字邏輯電路。
53. 如權(quán)利要求46到52中任一條所述的設(shè)備,其中所述數(shù)據(jù)流 機(jī)器是由高級(jí)源代碼規(guī)范生成的。
54. 如權(quán)利要求46到53中任一條所述的設(shè)備,其中所述數(shù)字控 制參數(shù)控制ASIC或芯片或其任意組合,從而執(zhí)行所述數(shù)字邏輯電路。
55. —種防止由數(shù)字邏輯電路執(zhí)行的數(shù)據(jù)流機(jī)器死鎖的方法,該 數(shù)字邏輯電路包括具有至少一個(gè)輸入或至少一個(gè)輸出的功能節(jié)點(diǎn)和所 述功能節(jié)點(diǎn)間的連接,該方法包括確定具有第一均勻吞吐量的第一均勻吞吐量區(qū),該第一均勻吞吐 量區(qū)包括一個(gè)或多個(gè)功能節(jié)點(diǎn)或連接;確定從所述第一均勻吞吐量區(qū)的第一邊界節(jié)點(diǎn)到包括一個(gè)或多 個(gè)節(jié)點(diǎn)或連接的第二區(qū)的第一連接,所述第一邊界功能節(jié)點(diǎn)設(shè)置在第 一數(shù)據(jù)路徑上并定義所述第一均勻吞吐量區(qū)和第二區(qū)之間的接口,并 適于消耗和操作大量從包括在第一均勻吞吐量區(qū)內(nèi)的第一內(nèi)部功能節(jié)點(diǎn)接收的標(biāo)記,操作的結(jié)果是產(chǎn)生一個(gè)標(biāo)記;確定從所述第二區(qū)到所述第一均勻吞吐量區(qū)的第二邊界功能節(jié)點(diǎn)的第二連接,所述第二邊界功能節(jié)點(diǎn)設(shè)置在所迷第 一數(shù)據(jù)路徑上并 定義所述第一均勻吞吐量區(qū)和所述第二區(qū)之間的接口,并適于接收所 述第一數(shù)據(jù)路徑上的所述一個(gè)標(biāo)記,且提供至少所述一個(gè)標(biāo)記給包括在第一均勻吞吐量區(qū)中的第二內(nèi)部功能節(jié)點(diǎn);以及沿所述第 一與第二內(nèi)部節(jié)點(diǎn)間的第二數(shù)據(jù)路徑設(shè)置緩沖器,該緩 沖器的數(shù)目至少等于被所述第一邊界節(jié)點(diǎn)消耗的標(biāo)記的所述數(shù)目,從 而允許所述數(shù)目的標(biāo)記進(jìn)入所述第一邊界功能節(jié)點(diǎn)。
56. 如權(quán)利要求55所述的方法,其中所述第一和第二內(nèi)部功能 節(jié)點(diǎn)間的所述第二路徑上的緩沖器的數(shù)目是將通過(guò)所述第二路徑的標(biāo) 記數(shù)目除以將通過(guò)所述第一路徑的標(biāo)記數(shù)目。
57. 如權(quán)利要求55或56所述的方法,其中向所述第二路徑添加 一個(gè)或多個(gè)緩沖器。
58. 如權(quán)利要求55到57中任一條所述的方法,其中所述第一內(nèi) 部節(jié)點(diǎn)和第一邊界節(jié)點(diǎn)合并為一個(gè)節(jié)點(diǎn),且所述第二內(nèi)部節(jié)點(diǎn)和第二 邊界節(jié)點(diǎn)合并為一個(gè)節(jié)點(diǎn),或所述第 一均勻吞吐量區(qū)中所有節(jié)點(diǎn)合并 為一個(gè)節(jié)點(diǎn)。
59. 如權(quán)利要求55到58中任一條所述的方法,進(jìn)一步包括關(guān)于輯電路的所述執(zhí)行的其余部分的吞吐量,來(lái)優(yōu)化所述第一均勻吞吐量 區(qū)和第二均勾吞吐量區(qū)的吞吐量。
60. 如權(quán)利要求59所述的方法,其中所述優(yōu)化包括對(duì)所述數(shù)字 邏輯電路的功能節(jié)點(diǎn)或功能節(jié)點(diǎn)組的迭代或流水線化或其任意組合。
61. 如權(quán)利要求55到60中任一條所述的方法,包括利用FPGA 執(zhí)行所述數(shù)字邏輯電路。
62. 如權(quán)利要求55到61中任一條所述的方法,進(jìn)一步包括從高 級(jí)源代碼規(guī)范生成所述數(shù)據(jù)流機(jī)器。
63. 如權(quán)利要求55到62中任一條所述的方法,包括利用專用集 成電路(ASIC)或芯片或其任意組合執(zhí)行所述數(shù)字邏輯電路。
64. —種包括程序代碼的計(jì)算機(jī)程序產(chǎn)品,該程序代碼被設(shè)置為當(dāng)被下載到計(jì)算機(jī)并由計(jì)算機(jī)執(zhí)行時(shí)執(zhí)行按照權(quán)利要求55到63中任 一條所述的方法。
65. —種用以執(zhí)行數(shù)據(jù)流機(jī)器的數(shù)字邏輯電路,其包括具有至少 一個(gè)輸入或至少一個(gè)輸出的功能節(jié)點(diǎn)和所述功能節(jié)點(diǎn)間的連接,其中第一功能節(jié)點(diǎn)及連接集合包括在第一均勻吞吐量區(qū)中,所述 第 一集合包括從所述第 一均勻吞吐量區(qū)的第 一邊界節(jié)點(diǎn)到所述第 一均 勻吞吐量區(qū)外的第二區(qū)域的第一連接,所述第一邊界功能節(jié)點(diǎn)設(shè)置在 第一數(shù)據(jù)路徑上并定義所述第一均勻呑吐量區(qū)和所述第二區(qū)之間的接 口 ,并適于消耗和操作從包括在笫一均勻呑吐量區(qū)內(nèi)的第一內(nèi)部功能 節(jié)點(diǎn)接收的大量標(biāo)記,操作結(jié)果是產(chǎn)生一個(gè)標(biāo)記,從所述第二區(qū)到所述第一均勻吞吐量區(qū)的第二邊界功能節(jié)點(diǎn)的 第二連接,所述第二邊界功能節(jié)點(diǎn)設(shè)置在所述第一數(shù)據(jù)路徑上并定義 所述第 一均勻吞吐量區(qū)和所述第二區(qū)之間的接口 ,并適于接收所述第 一數(shù)據(jù)路徑上的所述一個(gè)標(biāo)記,且提供至少所述一個(gè)標(biāo)記給包括在第 一均勻吞吐量區(qū)內(nèi)的第二內(nèi)部功能節(jié)點(diǎn),其中所述數(shù)字邏輯電路包括沿所述第一和第二內(nèi)部節(jié)點(diǎn)間第二 數(shù)據(jù)路徑設(shè)置的緩沖器,所述緩沖器的數(shù)目至少等于所述第一邊界節(jié) 點(diǎn)消耗的標(biāo)記的所述數(shù)目,從而允許所迷數(shù)目的標(biāo)記進(jìn)入所述第一邊 界功能節(jié)點(diǎn)。
66. 如權(quán)利要求65所述的電路,其中所述第一和笫二內(nèi)部功能 節(jié)點(diǎn)間的所述第二路徑上的緩沖器的數(shù)目等于將通過(guò)所述第二路徑的 標(biāo)記的數(shù)目除以將通過(guò)所迷第一路徑的標(biāo)記的數(shù)目。
67. 如權(quán)利要求65或66所述的電路,其中所述第二區(qū)進(jìn)一步包 括至少一個(gè)在所述第一路徑中的功能節(jié)點(diǎn)。
68. 如權(quán)利要求65到67中任一條所述的電路,其中所述第一內(nèi) 部節(jié)點(diǎn)和第一邊界節(jié)點(diǎn)合并為一個(gè)節(jié)點(diǎn),且所述第二內(nèi)部節(jié)點(diǎn)和笫二 邊界節(jié)點(diǎn)合并為一個(gè)節(jié)點(diǎn),或所述第 一均勻吞吐量區(qū)中所有節(jié)點(diǎn)合并 為一個(gè)節(jié)點(diǎn)。
69. 如權(quán)利要求65到68中任一條所述的電路,關(guān)于所述數(shù)值邏述執(zhí)行的其余部分的吞吐量,來(lái)優(yōu)化所述第 一均勻吞吐量區(qū)和第二區(qū) 的吞吐量。
70. 如權(quán)利要求69所述的電路,其中優(yōu)化包括對(duì)所述數(shù)字邏輯 電路的功能節(jié)點(diǎn)或功能節(jié)點(diǎn)組的迭代或流水線化或其任意組合。
71. 如權(quán)利要求65到70中任一條所述的電路,該電路由FPGA執(zhí)行。
72. 如權(quán)利要求65到71中任一條所述的電路,其中執(zhí)行數(shù)據(jù)流 機(jī)器的所述節(jié)點(diǎn)和連接是從高級(jí)源代碼規(guī)范生成的。
73. 如權(quán)利要求65到72中任一條所述的電路,該電路是由ASIC 或芯片或其任意組合執(zhí)行的。
74. —種數(shù)據(jù)流機(jī)器,其包括具有至少一個(gè)輸入或至少一個(gè)輸出 的功能節(jié)點(diǎn)和指示所述功能節(jié)點(diǎn)間互連的連接,其中第一功能節(jié)點(diǎn)及連接集合包括在第一均勻吞吐量區(qū)中,所述 第一集合包括從所迷第一均勻吞吐量區(qū)的第一邊界功能節(jié)點(diǎn)到所述第一均勻 吞吐量區(qū)外的第二區(qū)的第一連接,所述第一邊界功能節(jié)點(diǎn)設(shè)置在第一 數(shù)據(jù)路徑上并定義所述笫一均勻吞吐量區(qū)和所述第二區(qū)之間的接口, 并適于消耗和操作大量從包括在第 一 均勻吞吐量區(qū)內(nèi)的第一內(nèi)部功能 節(jié)點(diǎn)接收的標(biāo)記,該操作的結(jié)果是產(chǎn)生一個(gè)標(biāo)記,從所述第二區(qū)到所述第一均勻吞吐量區(qū)的第二邊界功能節(jié)點(diǎn)的 第二連接,所述第二邊界功能節(jié)點(diǎn)設(shè)置在第一數(shù)據(jù)路徑上并定義所述 第一均勻吞吐量區(qū)和所述第二區(qū)之間的接口 ,并適于接收所迷第一數(shù) 據(jù)路徑上的所述一個(gè)標(biāo)記,并提供至少一個(gè)所述標(biāo)記給包括在第一均 勻吞吐量區(qū)內(nèi)的第二內(nèi)部功能節(jié)點(diǎn),其中所述數(shù)據(jù)流機(jī)器包括沿所述第一內(nèi)部節(jié)點(diǎn)和第二內(nèi)部節(jié)點(diǎn) 之間的第二數(shù)據(jù)路徑設(shè)置的緩沖器,該緩沖器的數(shù)目至少等于被所述 第一邊界節(jié)點(diǎn)消耗的標(biāo)記的所述數(shù)目,從而允許所述數(shù)目的標(biāo)記進(jìn)入 所述第一邊界功能節(jié)點(diǎn)。
75. 如權(quán)利要求74所述的數(shù)據(jù)流機(jī)器,其中在所述第一和第二 內(nèi)部功能節(jié)點(diǎn)之間所述第二路徑上的緩沖器的數(shù)目是將通過(guò)所述第二 路徑標(biāo)記的數(shù)目除以將通過(guò)第一路徑標(biāo)記的數(shù)目。
76. 如權(quán)利要求74或75所述的數(shù)據(jù)流機(jī)器,其中所述第二區(qū)進(jìn) 一步包括至少一個(gè)在所述第一路徑中的功能節(jié)點(diǎn)。
77. 如權(quán)利要求74到76任一條所述的數(shù)據(jù)流機(jī)器,其中所述第 一內(nèi)部節(jié)點(diǎn)和第一邊界節(jié)點(diǎn)合并為一個(gè)節(jié)點(diǎn),且所述第二內(nèi)部節(jié)點(diǎn)和 第二邊界節(jié)點(diǎn)合并為一個(gè)節(jié)點(diǎn),或所述第一均勻吞吐量區(qū)中所有節(jié)點(diǎn)合并為一個(gè)節(jié)點(diǎn)。
78. 如權(quán)利要求74到77任一條所述的數(shù)據(jù)流機(jī)器,其關(guān)于所述路的所述執(zhí)行的其余部分的吞吐量,來(lái)優(yōu)化所述第 一均勻吞吐量區(qū)和 第二區(qū)的吞吐量。
79. 如權(quán)利要求74到78任一條所述的數(shù)據(jù)流機(jī)器,其中所述優(yōu) 化包括對(duì)所述數(shù)字邏輯電路的功能節(jié)點(diǎn)或功能節(jié)點(diǎn)組的迭代或流水線 化或其任意組合。
80. 如權(quán)利要求74到79任一條所述的數(shù)據(jù)流機(jī)器,該數(shù)據(jù)流機(jī) 器是由FPGA執(zhí)行的。
81. 如權(quán)利要求74到80任一條所述的數(shù)據(jù)流機(jī)器,該數(shù)據(jù)流機(jī) 器是從高級(jí)源代碼規(guī)范生成的。
82. 如權(quán)利要求74到81任一條所述的數(shù)據(jù)流機(jī)器,該數(shù)據(jù)流機(jī) 器是自動(dòng)生成的。
83. —種數(shù)字邏輯電路,其包括多個(gè)節(jié)點(diǎn)和連接所述節(jié)點(diǎn)的多個(gè) 連接從而執(zhí)行數(shù)據(jù)流機(jī)器,其中每個(gè)所述節(jié)點(diǎn)包括數(shù)據(jù)信號(hào)的至少一個(gè)信號(hào)集合,其包括來(lái)自設(shè)置在輸入處的前面 節(jié)點(diǎn)的至少一個(gè)數(shù)據(jù)信號(hào)和到設(shè)置在輸出處的后續(xù)節(jié)點(diǎn)的至少一個(gè)數(shù) 據(jù)信號(hào);數(shù)據(jù)有效性信號(hào)的至少一個(gè)信號(hào)集合,所述數(shù)據(jù)有效性信號(hào)保存 關(guān)于是否在所述數(shù)據(jù)信號(hào)輸入和輸出處存在有效數(shù)據(jù)的信息,其包括來(lái)自設(shè)置在輸入處的前面節(jié)點(diǎn)的至少一個(gè)數(shù)據(jù)有效信號(hào)和到設(shè)置在輸出處的后續(xù)節(jié)點(diǎn)的至少一個(gè)數(shù)據(jù)有效信號(hào);以及消耗信號(hào)的至少一個(gè)信號(hào)集合,該消耗信號(hào)保存關(guān)于是否所述數(shù) 據(jù)信號(hào)被消耗的信息,該信號(hào)集合包括來(lái)自設(shè)置在輸入處的后續(xù)節(jié)點(diǎn) 的至少一個(gè)消耗信號(hào)和到設(shè)置在輸出處的前面節(jié)點(diǎn)的至少一個(gè)消耗信 號(hào),其中每個(gè)所述節(jié)點(diǎn)設(shè)置為使得,為所述第一消耗信號(hào)排除對(duì)邏輯上依賴于第一消耗信號(hào)的任意所述數(shù)據(jù)有效信號(hào)的邏輯關(guān)系,且為所 述第 一有效數(shù)據(jù)信號(hào)排除對(duì)邏輯上依賴于第 一有效數(shù)據(jù)信號(hào)的任意所 述消耗信號(hào)的邏輯關(guān)系。
84. 如權(quán)利要求83所述的電路,其中每個(gè)所述節(jié)點(diǎn)包括第一數(shù) 目的數(shù)據(jù)信號(hào)輸入和第二數(shù)目的數(shù)據(jù)信號(hào)輸出,包括所述第一數(shù)目的 有效數(shù)據(jù)輸入信號(hào)和消耗輸入信號(hào),以及所述第二數(shù)目的有效數(shù)據(jù)輸 出信號(hào)和消耗輸出信號(hào)。
85. 如權(quán)利要求83或84所述的電路,其中至少一部分所述數(shù)據(jù) 流機(jī)器是異步的。
86. 如權(quán)利要求83到85中任一條所述的電路,其中至少一部分 所述數(shù)字邏輯電路由計(jì)算機(jī)生成。
87. 如權(quán)利要求83到86中任一條所述的電路,該電路是由現(xiàn)場(chǎng) 可編程門(mén)陣列(FPGA)執(zhí)行的。
88. 如權(quán)利要求83到87中任一條所述的電路,其中至少一個(gè)所 述節(jié)點(diǎn)包括組合邏輯、流水線、或狀態(tài)機(jī)器、或其任意組合,以便執(zhí) 行節(jié)點(diǎn)的操作。
89. 如權(quán)利要求83到88中任一條所述的電路,其中所述執(zhí)行數(shù) 據(jù)流機(jī)器的節(jié)點(diǎn)是從高級(jí)源代碼規(guī)范生成的。
90. 如權(quán)利要求83到89中任一條所述的電路,該電路是由ASIC 或芯片或其任意組合來(lái)執(zhí)行的。
91. 一種以硬件自動(dòng)執(zhí)行包括數(shù)據(jù)流機(jī)器的數(shù)字邏輯電路的方 法,其包括確定抽象數(shù)據(jù)流機(jī)器;為所述數(shù)據(jù)流機(jī)器確定節(jié)點(diǎn)和連接,其中每個(gè)所述節(jié)點(diǎn)包括以下 三個(gè)信號(hào)集合數(shù)據(jù)信號(hào)的至少一個(gè)信號(hào)集合,其包括來(lái)自設(shè)置在輸 入處的前面節(jié)點(diǎn)的至少一個(gè)數(shù)據(jù)信號(hào)和到設(shè)置在輸出處的后續(xù)節(jié)點(diǎn)的 至少一個(gè)數(shù)據(jù)信號(hào);數(shù)據(jù)有效性信號(hào)的至少一個(gè)信號(hào)集合,所述數(shù)據(jù) 有效性信號(hào)保存關(guān)于是否在所述數(shù)據(jù)信號(hào)輸入和輸出處存在有效數(shù)據(jù) 的信息,其包括來(lái)自設(shè)置在輸入處的前面節(jié)點(diǎn)的至少一個(gè)數(shù)據(jù)有效信 號(hào)和到設(shè)置在輸出處的后續(xù)節(jié)點(diǎn)的至少一個(gè)數(shù)據(jù)有效信號(hào);以及消耗 信號(hào)的至少一個(gè)信號(hào)集合,該消耗信號(hào)保存關(guān)于是否所述數(shù)據(jù)信號(hào)被 消耗的信息,該信號(hào)集合包括來(lái)自設(shè)置在輸入處的后續(xù)節(jié)點(diǎn)的至少一 個(gè)消耗信號(hào)和到設(shè)置在輸出處的前面節(jié)點(diǎn)的至少一個(gè)消耗信號(hào);為所述節(jié)點(diǎn)確定觸發(fā)規(guī)則,其中為所述第一消耗信號(hào)排除對(duì)邏輯 上依賴于第一消耗信號(hào)的任意所述數(shù)據(jù)有效信號(hào)的邏輯關(guān)系,且為所 述第一有效數(shù)據(jù)信號(hào)排除對(duì)邏輯上依賴于第一有效數(shù)據(jù)信號(hào)的任意所 述消耗信號(hào)的邏輯關(guān)系;以及分配所述節(jié)點(diǎn)、連接、以及觸發(fā)規(guī)則給所述數(shù)字邏輯電路。
92. 如權(quán)利要求91所述的方法,其中每個(gè)所述節(jié)點(diǎn)包括第一數(shù) 目的數(shù)據(jù)信號(hào)輸入和第二數(shù)目的數(shù)據(jù)信號(hào)輸出,包括第一數(shù)目的有效 數(shù)據(jù)輸入信號(hào)和消耗輸入信號(hào),以及所述第二數(shù)目的有效數(shù)據(jù)輸出信 號(hào)和消耗輸出信號(hào)。
93. 如權(quán)利要求91或92所述的方法,其中至少一部分所述數(shù)字 邏輯電路是異步的。
94. 如權(quán)利要求91到93中任一條所述的方法,其中至少一部分 所述數(shù)字邏輯電路是由計(jì)算機(jī)生成的。
95. 如權(quán)利要求91到94中任一條所述的方法,包括利用現(xiàn)場(chǎng)可 編程門(mén)陣列(FPGA)執(zhí)行所述數(shù)字邏輯電路。
96. 如權(quán)利要求91到95中任一條所述的方法,其中至少一個(gè)所 述節(jié)點(diǎn)包括組合邏輯、流水線、或狀態(tài)機(jī)器、或其任意組合,以便執(zhí) 行節(jié)點(diǎn)的操作。
97. 如權(quán)利要求91到96中任一條所述的方法,進(jìn)一步包括從高 級(jí)源代碼規(guī)范生成所述數(shù)據(jù)流機(jī)器。
98. 如權(quán)利要求91到97中任一條所述的方法,進(jìn)一步包括利用 ASIC或芯片或其任意組合執(zhí)行至少一部分所述數(shù)字邏輯電路。
99. 一種計(jì)算機(jī)程序產(chǎn)品,其可直接裝栽到具有數(shù)字計(jì)算機(jī)功能 的電子裝置的存儲(chǔ)器中,該程序產(chǎn)品包括軟件代碼部分,其在被所述 電子設(shè)備執(zhí)行時(shí)執(zhí)行按照權(quán)利要求91到98中任一條所述的方法。
100. —種計(jì)算機(jī)程序產(chǎn)品,其可直接裝栽到具有數(shù)字計(jì)算機(jī)功 能的電子裝置的存儲(chǔ)器中,該程序產(chǎn)品包括軟件代碼部分,其在被所 述電子設(shè)備執(zhí)行時(shí)執(zhí)行按照權(quán)利要求97所述的方法。
101. —種為執(zhí)行包括數(shù)據(jù)流機(jī)器的數(shù)字邏輯電路生成數(shù)字控制 參數(shù)的設(shè)備,其被設(shè)置用來(lái)執(zhí)行按照權(quán)利要求91到98中任一條所述 的方法。
102. 如權(quán)利要求101所述的設(shè)備,其中所述數(shù)字控制參數(shù)控制 現(xiàn)場(chǎng)可編程門(mén)陣列(FPGA)從而執(zhí)行數(shù)字邏輯電路。
103. 如權(quán)利要求102所述的設(shè)備,其中所述數(shù)據(jù)流機(jī)器是從高 級(jí)源代碼規(guī)范生成的。
104. —種數(shù)據(jù)流機(jī)器,其包括 合并節(jié)點(diǎn),其包括 待迭代的新值的輸入點(diǎn), 迭代值的輸入點(diǎn),和 迭代值的輸出點(diǎn);以及循環(huán)體功能單元,其具有連接到合并節(jié)點(diǎn)的迭代值輸出點(diǎn)的輸入 點(diǎn);以及切換節(jié)點(diǎn),其包括連接到循環(huán)體功能單元輸出點(diǎn)的迭代值輸入 點(diǎn)、連接到合并節(jié)點(diǎn)的迭代值輸入點(diǎn)的迭代值輸出點(diǎn)、和離開(kāi)循環(huán)的 輸出點(diǎn)。
105. 如權(quán)利要求104所述的數(shù)據(jù)流機(jī)器,進(jìn)一步包括第二合并 節(jié)點(diǎn),該節(jié)點(diǎn)包括待迭代的新值的輸入點(diǎn); 迭代值的輸入點(diǎn),和連接到循環(huán)體功能單元輸入點(diǎn)的迭代值輸出點(diǎn)。
106. 如權(quán)利要求104或105所述的數(shù)據(jù)流機(jī)器,包括第二切換 節(jié)點(diǎn),該節(jié)點(diǎn)包括連接到循環(huán)體功能單元輸出點(diǎn)的迭代值輸入點(diǎn), 連接到合并節(jié)點(diǎn)的迭代值輸入點(diǎn)的迭代值輸出點(diǎn),以及 離開(kāi)循環(huán)的輸出點(diǎn)。
107. 根據(jù)權(quán)利要求105的如權(quán)利要求106所述的數(shù)據(jù)流機(jī)器, 第二切換節(jié)點(diǎn)的迭代值輸出的輸出點(diǎn)連接到第二合并節(jié)點(diǎn)的迭代值輸 入點(diǎn)。
108. 如權(quán)利要求104到107中任一條所述的數(shù)據(jù)流機(jī)器,其中 所述合并節(jié)點(diǎn)、循環(huán)體功能單元、和切換節(jié)點(diǎn)形成執(zhí)行下面組中任一 循環(huán)的結(jié)構(gòu)的一部分,該組包括foreach循環(huán)、for循環(huán)、while循環(huán)、 do-while循環(huán)、re-entrant循環(huán)、或其4壬意組合。
109. 如權(quán)利要求108所述的數(shù)據(jù)流機(jī)器,其中對(duì)標(biāo)量迭代所述 循環(huán)中的任意一個(gè)。
110. 如權(quán)利要求108或109所述的數(shù)據(jù)流機(jī)器,其中對(duì)包括列 表或矢量的集合迭代所述循環(huán)中的任意一個(gè)。
全文摘要
本發(fā)明公開(kāi)了一種為執(zhí)行數(shù)字邏輯電路生成數(shù)字控制參數(shù)的方法,該數(shù)字邏輯電路包括具有至少一個(gè)輸入或至少一個(gè)輸出的功能節(jié)點(diǎn)和指示所述功能節(jié)點(diǎn)間互連的連接,其中所述數(shù)字邏輯電路包括由連續(xù)標(biāo)記流化的第一路徑和由所述標(biāo)記流化的第二路徑。該方法包括確定到所述路徑的必要的數(shù)據(jù)流相對(duì)吞吐量;分配緩沖器給一個(gè)所述路徑從而平衡所述路徑的吞吐量;移除分配的緩沖器直到以最小數(shù)目的緩沖器獲得所述必要的相對(duì)吞吐量;以及為執(zhí)行包括所述最小數(shù)目的緩沖器的所述數(shù)字邏輯電路生成數(shù)字控制參數(shù)。本發(fā)明還公開(kāi)了一種設(shè)備、計(jì)算機(jī)執(zhí)行的數(shù)字邏輯電路、數(shù)據(jù)流機(jī)器、方法以及計(jì)算機(jī)程序產(chǎn)品。
文檔編號(hào)G06F9/44GK101331452SQ200680047545
公開(kāi)日2008年12月24日 申請(qǐng)日期2006年10月18日 優(yōu)先權(quán)日2005年10月18日
發(fā)明者P·伯格, S·莫爾 申請(qǐng)人:米特里昂尼克斯股份公司