相關(guān)申請(qǐng)根據(jù)35u.s.c.§119(e)的規(guī)定,本申請(qǐng)要求2015年2月25日提交的標(biāo)題為“hardwareinstructioncompilerforspecializedprocessors”的第62/120,603號(hào)美國(guó)臨時(shí)專利申請(qǐng)的國(guó)內(nèi)優(yōu)先權(quán),此臨時(shí)專利申請(qǐng)?jiān)诖巳恳胱鳛閰⒖疾⑶矣糜谒心康?,如同在本文中完全和徹底說(shuō)明那樣。
背景技術(shù):
::指令集架構(gòu)(isa)是計(jì)算機(jī)處理器設(shè)計(jì)和開(kāi)發(fā)的基礎(chǔ)。isa包括用于處理器的指令集、指令格式、以及處理器特征,例如可以使用的操作數(shù)的類型、用于指令執(zhí)行的存儲(chǔ)機(jī)構(gòu)和如何訪問(wèn)存儲(chǔ)機(jī)構(gòu)。程序員使用指令集將程序傳送到處理器。此外,多個(gè)軟件“工具”將指令集架構(gòu)用于處理器開(kāi)發(fā)和編程,包括編譯器、鏈接器和調(diào)試器。編譯器將以高級(jí)編程語(yǔ)言編寫的“源代碼”轉(zhuǎn)換為可由處理器理解的“目標(biāo)代碼”。鏈接器將由編譯器創(chuàng)建的一個(gè)或多個(gè)目標(biāo)代碼文件組合成單個(gè)可執(zhí)行文件,并且還可以布置以便在處理器的正確地址空間中執(zhí)行代碼。調(diào)試器是用于測(cè)試被編寫以在處理器上運(yùn)行的其它程序的程序。這些工具連同用于處理器的其它開(kāi)發(fā)工具一起可以被稱為“工具鏈”。對(duì)處理器的指令集或指令集架構(gòu)的其它方面進(jìn)行的任何更改必須在整個(gè)工具鏈、在使用isa的工具中得以反映。通常對(duì)isa進(jìn)行廣泛的測(cè)試、修改和驗(yàn)證直到認(rèn)為滿意,此時(shí)可以基于isa創(chuàng)建規(guī)范、模擬器和開(kāi)發(fā)工具鏈。然后還可以基于isa進(jìn)行處理器設(shè)計(jì),包括微架構(gòu)設(shè)計(jì)和驗(yàn)證、微架構(gòu)在硬件描述語(yǔ)言(hdl)中的實(shí)現(xiàn)、以及基于hdl實(shí)現(xiàn)的電路合成。isa和與isa兼容的處理器之間的高度集成連同isa和相關(guān)工具的開(kāi)發(fā)所代表的巨大承諾能夠使得難以實(shí)現(xiàn)專用處理器設(shè)計(jì)??紤]到還將需要?jiǎng)?chuàng)建或修改的一系列關(guān)聯(lián)的驗(yàn)證和開(kāi)發(fā)工具,創(chuàng)建新指令集或者甚至修改現(xiàn)有指令集可以極其昂貴和耗時(shí)。附圖說(shuō)明各種公開(kāi)的實(shí)施例的以下詳細(xì)描述參考附圖,這些附圖是:圖1是數(shù)據(jù)處理架構(gòu)的一個(gè)示例性實(shí)施例的簡(jiǎn)化框圖;圖2是專用處理器的一個(gè)示例性實(shí)施例的簡(jiǎn)化框圖;圖3是示出具有主機(jī)的指令生成單元的一個(gè)示例性實(shí)現(xiàn)的簡(jiǎn)化框圖;圖4是示出指令生成單元的一個(gè)實(shí)施例的簡(jiǎn)化框圖;圖5是示出由在此描述的指令生成單元執(zhí)行的過(guò)程的一個(gè)實(shí)施例的流程圖;圖6是示出由在此描述的指令生成單元執(zhí)行的過(guò)程的一個(gè)實(shí)施例的流程圖;圖7是示出由在此描述的指令生成單元執(zhí)行的過(guò)程的一個(gè)實(shí)施例的流程圖;圖8是示出由在此描述的指令生成單元執(zhí)行的過(guò)程的一個(gè)實(shí)施例的流程圖;以及圖9是示出由在此描述的指令生成單元執(zhí)行的過(guò)程的一個(gè)實(shí)施例的流程圖。具體實(shí)施方式概述公開(kāi)將主機(jī)對(duì)接到專用處理器的方法、設(shè)備和系統(tǒng)。在一個(gè)實(shí)施例中,被配置為將主機(jī)對(duì)接到專用處理器的指令生成單元包括屬性級(jí),其被配置為從所述主機(jī)接收主機(jī)-程序操作代碼和第一虛擬主機(jī)-程序操作數(shù),其中所述第一虛擬主機(jī)-程序操作數(shù)表示用于所述專用處理器的第一操作數(shù)。在該實(shí)施例中,所述屬性級(jí)被進(jìn)一步配置為將所述第一虛擬主機(jī)-程序操作數(shù)擴(kuò)展成第一操作數(shù)描述符,其中所述第一操作數(shù)描述符提供所述第一操作數(shù)的在一個(gè)或多個(gè)操作數(shù)屬性方面的描述。所述指令生成單元進(jìn)一步包括解碼級(jí),其被配置為從所述屬性級(jí)接收所述第一操作數(shù)描述符和所述主機(jī)-程序操作代碼,將所述主機(jī)-程序操作代碼轉(zhuǎn)換為一個(gè)或多個(gè)已解碼指令以便由所述專用處理器執(zhí)行,以及分配存儲(chǔ)位置以供所述專用處理器在執(zhí)行所述已解碼指令中使用。所述指令生成單元的該實(shí)施例進(jìn)一步包括指令緩沖級(jí),其被配置為從所述解碼級(jí)接收所述已解碼指令,將一個(gè)或多個(gè)已解碼指令放入一個(gè)或多個(gè)指令隊(duì)列中,以及從所述一個(gè)或多個(gè)指令隊(duì)列中的至少一個(gè)指令隊(duì)列發(fā)出已解碼指令以便由所述專用處理器執(zhí)行。在進(jìn)一步實(shí)施例中,所述指令生成單元進(jìn)一步包括存儲(chǔ)器,其被配置為存儲(chǔ)包括一個(gè)或多個(gè)操作數(shù)描述符的屬性表,并且所述屬性級(jí)被進(jìn)一步配置為判定所述主機(jī)-程序操作代碼是否對(duì)應(yīng)于所述第一操作數(shù)的初始聲明。響應(yīng)于所述主機(jī)-程序操作代碼對(duì)應(yīng)于所述第一操作數(shù)的初始聲明的判定,所述屬性級(jí)被進(jìn)一步配置為在所述屬性表中存儲(chǔ)包括所述第一操作數(shù)描述符的條目,并且向所述主機(jī)返回所存儲(chǔ)的屬性表?xiàng)l目的地址。在一個(gè)實(shí)施例中,所述指令生成單元與包括具有至少兩個(gè)互連處理單元的陣列的專用處理器對(duì)接,其中每個(gè)處理單元包括指令緩沖器和數(shù)據(jù)存儲(chǔ)器,所述數(shù)據(jù)存儲(chǔ)器被分成至少兩個(gè)區(qū)域。在另一實(shí)施例中,所述第一操作數(shù)包括跨所述專用處理器的一個(gè)或多個(gè)所述數(shù)據(jù)存儲(chǔ)器的多個(gè)區(qū)域存儲(chǔ)的二維數(shù)據(jù)陣列。在再一實(shí)施例中,所述互連處理單元的相應(yīng)指令緩沖器通過(guò)指令流水線連接,所述指令流水線被配置為按順序?qū)⒅噶顝囊粋€(gè)處理單元傳送到下一個(gè)處理單元,所述一個(gè)或多個(gè)指令隊(duì)列包括向量指令隊(duì)列和標(biāo)量指令隊(duì)列,以及所述指令緩沖級(jí)被進(jìn)一步配置為結(jié)合從所述一個(gè)或多個(gè)指令隊(duì)列發(fā)出已解碼指令而將來(lái)自所述向量指令隊(duì)列的已解碼指令放入所述指令流水線中。在此還公開(kāi)一種生成用于專用處理器的指令的方法。在一個(gè)實(shí)施例中,所述方法包括從主機(jī)處理器接收主機(jī)-程序操作代碼和第一虛擬主機(jī)-程序操作數(shù),其中所述第一虛擬主機(jī)-程序操作數(shù)表示用于所述專用處理器的操作數(shù);將所述虛擬主機(jī)-程序操作數(shù)擴(kuò)展成操作數(shù)描述符,其中所述操作數(shù)描述符提供所述操作數(shù)的在一個(gè)或多個(gè)操作數(shù)屬性方面的描述;以及將所述主機(jī)-程序操作代碼轉(zhuǎn)換為一個(gè)或多個(gè)已解碼指令以便由所述專用處理器執(zhí)行。所述方法的該實(shí)施例進(jìn)一步包括分配存儲(chǔ)位置以供所述專用處理器在執(zhí)行所述已解碼指令中使用;將一個(gè)或多個(gè)已解碼指令放入一個(gè)或多個(gè)指令隊(duì)列中;以及從所述一個(gè)或多個(gè)指令隊(duì)列中的至少一個(gè)指令隊(duì)列發(fā)出已解碼指令以便由所述專用處理器執(zhí)行。在另一實(shí)施例中,所述方法包括判定主機(jī)-程序操作代碼是否對(duì)應(yīng)于第一操作數(shù)的初始聲明。響應(yīng)于所述主機(jī)-程序操作代碼對(duì)應(yīng)于所述第一操作數(shù)的初始聲明的判定,所述方法包括在所述屬性表中存儲(chǔ)包括所述第一操作數(shù)描述符的條目,并且向所述主機(jī)處理器返回所存儲(chǔ)的屬性表?xiàng)l目的地址。在一個(gè)實(shí)施例中,所述專用處理器包括具有至少兩個(gè)互連處理單元的陣列,其中每個(gè)處理單元包括指令緩沖器和數(shù)據(jù)存儲(chǔ)器,所述數(shù)據(jù)存儲(chǔ)器被分成至少兩個(gè)區(qū)域。在另一實(shí)施例中,所述第一操作數(shù)包括跨所述專用處理器的一個(gè)或多個(gè)所述數(shù)據(jù)存儲(chǔ)器的多個(gè)區(qū)域存儲(chǔ)的二維數(shù)據(jù)陣列。在再一實(shí)施例中,所述互連處理單元的相應(yīng)指令緩沖器通過(guò)指令流水線連接,所述指令流水線被配置為按順序?qū)⒅噶顝囊粋€(gè)處理單元傳送到下一個(gè)處理單元,并且一個(gè)或多個(gè)指令隊(duì)列包括向量指令隊(duì)列和標(biāo)量指令隊(duì)列。在此類實(shí)施例中,從所述一個(gè)或多個(gè)指令隊(duì)列發(fā)出所述已解碼指令包括將來(lái)自所述向量指令隊(duì)列的已解碼指令放入所述指令流水線中。在此還公開(kāi)一種數(shù)據(jù)處理系統(tǒng)。在一個(gè)實(shí)施例中,所述數(shù)據(jù)處理系統(tǒng)包括被配置為運(yùn)行已編譯程序的主機(jī)、專用處理器、以及指令生成單元。所述指令生成單元在操作上耦合到所述主機(jī)和所述專用處理器,并且被配置為從所述已編譯程序接收主機(jī)-程序操作代碼和虛擬主機(jī)-程序操作數(shù),其中所述虛擬主機(jī)-程序操作數(shù)表示用于所述專用處理器的操作數(shù)。所述指令生成單元被進(jìn)一步配置為將所述主機(jī)-程序操作代碼轉(zhuǎn)換為一個(gè)或多個(gè)已解碼指令以便由所述專用處理器執(zhí)行,分配存儲(chǔ)位置以供所述專用處理器在執(zhí)行所述已解碼指令中使用,將一個(gè)或多個(gè)已解碼指令放入一個(gè)或多個(gè)指令隊(duì)列中,以及從所述一個(gè)或多個(gè)指令隊(duì)列中的至少一個(gè)指令隊(duì)列發(fā)出已解碼指令以便由所述專用處理器執(zhí)行。在所述數(shù)據(jù)處理系統(tǒng)的一個(gè)實(shí)施例中,所述專用處理器包括具有至少兩個(gè)互連處理單元的陣列,其中每個(gè)處理單元包括指令緩沖器和數(shù)據(jù)存儲(chǔ)器,所述數(shù)據(jù)存儲(chǔ)器被分成至少兩個(gè)區(qū)域。在另一實(shí)施例中,所述互連處理單元的相應(yīng)指令緩沖器通過(guò)指令流水線連接,所述指令流水線被配置為按順序?qū)⒅噶顝囊粋€(gè)處理單元傳送到下一個(gè)處理單元,并且所述一個(gè)或多個(gè)指令隊(duì)列包括向量指令隊(duì)列和標(biāo)量指令隊(duì)列。在此類實(shí)施例中,所述指令生成單元被進(jìn)一步配置為結(jié)合從所述一個(gè)或多個(gè)指令隊(duì)列發(fā)出所述已解碼指令而將來(lái)自所述向量指令隊(duì)列的已解碼指令放入所述指令流水線中。除了在此描述的其它實(shí)施例之外,上面的實(shí)施例反映一種生成用于專用處理器的定制指令的更廣義方式。作為一種現(xiàn)有方法,第6,477,683號(hào)美國(guó)專利描述使用標(biāo)準(zhǔn)化語(yǔ)言來(lái)描述可以以某些特定方式配置的指令集。采用標(biāo)準(zhǔn)化語(yǔ)言的描述用于生成處理器的開(kāi)發(fā)和配置工具。但是,此類解決方案僅允許對(duì)現(xiàn)有架構(gòu)進(jìn)行有限數(shù)量的特定預(yù)定義修改。在此處描述的方法的一個(gè)實(shí)施例中,改變對(duì)象類庫(kù)以便由常規(guī)編譯器訪問(wèn),以及由其它工具鏈程序和應(yīng)用程序開(kāi)發(fā)人員訪問(wèn)。在一個(gè)實(shí)施例中,對(duì)象類庫(kù)包含與面向?qū)ο蟮木幊谭椒P(guān)聯(lián)的類或模板。在此類實(shí)施例中,一個(gè)或多個(gè)類被配置為使用由應(yīng)用程序提供的數(shù)據(jù)來(lái)被實(shí)例化為對(duì)象。對(duì)象類庫(kù)包含一個(gè)或多個(gè)定制文件,當(dāng)在被編譯的源文件中遇到不熟悉的操作數(shù)或函數(shù)時(shí),例如由編譯器訪問(wèn)這些定制文件。在一個(gè)實(shí)施例中,對(duì)象類庫(kù)內(nèi)的定制文件是定制指令宏、或者用于針對(duì)定制功能單元生成定制指令的模板、或者與處理器關(guān)聯(lián)的指令生成單元。定制指令包括操作代碼或操作碼、以及一個(gè)或多個(gè)操作數(shù)。在另一實(shí)施例中,使用常規(guī)編譯器的用戶定義的指令能力來(lái)定義定制指令宏。定制功能單元在此還可以被稱為“指令生成單元”或“硬件指令編譯器”。在一個(gè)實(shí)施例中,定制功能單元將從常規(guī)編譯器接收的定制指令(包括操作碼和操作數(shù))轉(zhuǎn)換成適于專用處理器的硬件配置的一個(gè)或多個(gè)指令。上述對(duì)象類庫(kù)和定制功能單元的使用允許程序員訪問(wèn)專用處理器的功能而不必理解處理器的isa的細(xì)節(jié)??梢栽诔绦騿T的源代碼中以抽象術(shù)語(yǔ)描述所需操作。然后可以由常規(guī)編譯器(使用對(duì)象類庫(kù)中的定制文件)將此類操作轉(zhuǎn)換成用于定制功能單元的指令。定制功能單元然后可以將指令轉(zhuǎn)換為適合于專用處理器的一個(gè)或多個(gè)指令。在一個(gè)實(shí)施例中,用于定制功能單元的指令是用于針對(duì)專用處理器構(gòu)造或創(chuàng)建一個(gè)或多個(gè)變量的指令。此類指令在此可以被稱為“構(gòu)造器指令”。在一個(gè)實(shí)施例中,由定制功能單元產(chǎn)生的處理器指令并不限于任何特定的長(zhǎng)度或格式。在其它實(shí)施例中,對(duì)象類庫(kù)內(nèi)的定制文件包括源代碼,其可在編譯器的本機(jī)指令集中執(zhí)行以便實(shí)現(xiàn)專用處理器的一個(gè)或多個(gè)功能的基于軟件的版本。在另一實(shí)施例中,當(dāng)選擇用于采用軟件實(shí)現(xiàn)的選項(xiàng)時(shí),編譯該代碼。使用對(duì)象類庫(kù)以實(shí)現(xiàn)處理器操作的基于軟件的版本可以被用于測(cè)試(基于硬件的)處理器操作。在一個(gè)實(shí)施例中,實(shí)現(xiàn)基于軟件的過(guò)程的代碼可執(zhí)行以便以相同順序執(zhí)行與基于硬件的處理器相同的至少某些步驟,從而確定錯(cuò)誤。如在硬件指令編譯器的定制指令生成的情況下,可以由程序員抽象地描述操作,并且可以使用編譯器的用戶定義的常規(guī)特征從對(duì)象類庫(kù)調(diào)用定制例程。在另一個(gè)實(shí)施例中,執(zhí)行使用上述兩種類型的定制文件(包括用于軟件實(shí)現(xiàn)的指令的定制文件、以及用于針對(duì)定制功能單元生成定制指令的定制文件)生成的程序指令。在一個(gè)實(shí)施例中,使用專用處理器執(zhí)行一個(gè)程序,而另一個(gè)程序是在本機(jī)指令集中執(zhí)行的同一程序的基于軟件的版本。在另一實(shí)施例中,至少部分地同時(shí)執(zhí)行基于硬件和基于軟件的程序。在再一實(shí)施例中,測(cè)試控制模塊管理程序的執(zhí)行,并且在被執(zhí)行的計(jì)算或過(guò)程中的一個(gè)或多個(gè)點(diǎn)處比較來(lái)自基于硬件和基于軟件的執(zhí)行的結(jié)果。分片處理器(tileprocessors)可以與如在此描述的對(duì)象類庫(kù)和硬件指令編譯器結(jié)合使用的專用處理器的一個(gè)示例是如在第9,183,694號(hào)美國(guó)專利中描述的分片處理器,該專利在此引入作為參考,如同在此完全和徹底說(shuō)明那樣。分片處理器適于二維相關(guān)數(shù)據(jù)集(例如可以用于圖像處理的那些數(shù)據(jù)集)的有效高吞吐量處理。如在上面引用的申請(qǐng)中進(jìn)一步描述的,分片處理器采用多個(gè)特性(包括存儲(chǔ)器分區(qū)和指令排序的新技術(shù)),以便執(zhí)行基于硬件的處理。但是,在此描述的定制編譯方法和系統(tǒng)并不限于與任何特定類型的專用處理器一起使用。如在此使用的,“可視處理”指圖像和視頻圖片元素(“像素”)和相關(guān)數(shù)據(jù)的一類通用處理。這包括諸如以下項(xiàng)的應(yīng)用:增強(qiáng)圖像和轉(zhuǎn)換像素格式、運(yùn)動(dòng)檢測(cè)和跟蹤、以及在靜態(tài)圖像或視頻幀中標(biāo)識(shí)特征或?qū)ο??;诜制幚砥鞯目梢曁幚砑軜?gòu)實(shí)現(xiàn)多種可編程、可伸縮、軟件兼容的解決方案以便有效處理大型可視數(shù)據(jù)集。它克服了該應(yīng)用領(lǐng)域的常規(guī)方法的限制,這些常規(guī)方法通常在某種形式的共享存儲(chǔ)器、對(duì)稱多處理(smp)配置中使用多個(gè)單指令多數(shù)據(jù)(simd)核心,并且使用定制編程和運(yùn)行時(shí)環(huán)境來(lái)處置處理核心之間的處理器分配、通信和同步的問(wèn)題。相比之下,基于分片處理器的架構(gòu)上的處理采用任何數(shù)量的細(xì)粒度分片路徑(tilepath)(它們被自動(dòng)分配并且在平行范圍內(nèi)動(dòng)態(tài)伸縮),不需要全局共享存儲(chǔ)器以便在分片路徑之間通信,并且使同步基于廣義順序執(zhí)行模型。在一個(gè)實(shí)施例中,編程在多個(gè)行業(yè)標(biāo)準(zhǔn)指令集架構(gòu)(isa)上使用標(biāo)準(zhǔn)c++而無(wú)需編譯器重新定位目標(biāo)。所述架構(gòu)使用容易理解的編程模型實(shí)現(xiàn)大規(guī)模并行執(zhí)行,該編程模型幾乎不需要了解用于提供并行執(zhí)行的機(jī)制。這通過(guò)作為完全虛擬化的并行處理器提供處理硬件而實(shí)現(xiàn),而沒(méi)有通常由虛擬化隱含的開(kāi)銷。虛擬化通常針對(duì)解釋虛擬操作并且將它們轉(zhuǎn)換為硬件操作而引起性能損失。相反,在一個(gè)實(shí)施例中,基于分片處理器的架構(gòu)直接執(zhí)行由c++對(duì)象類提供的抽象,通常使用單周期執(zhí)行,即使抽象表示數(shù)百或數(shù)千個(gè)操作也是如此。并行執(zhí)行的虛擬化依賴于硬件—指令生成單元(igu),以便將虛擬指令轉(zhuǎn)換為本機(jī)指令并且確保本機(jī)指令的正確并行執(zhí)行。“錯(cuò)誤!未找到參考源?!笔境隹梢曁幚砑軜?gòu)的高級(jí)系統(tǒng)圖,其包括由主機(jī)核心102和主機(jī)指令/數(shù)據(jù)104表示的本地主機(jī)處理器、由igu表/邏輯106表示的igu、以分片路徑陣列組織的分片路徑(在該示例中為256個(gè)分片路徑)、系統(tǒng)接口、以及全局表108。圖1中的分片路徑被示為本地?cái)?shù)據(jù)存儲(chǔ)器110(陰影)部分與處理邏輯(例如,功能單元和互連)112(白色)部分的組合。256個(gè)分片路徑系列被折疊成四個(gè)行。存在非常高的結(jié)構(gòu)度和規(guī)律性,并且大部分控制開(kāi)銷被限于igu和表-系統(tǒng)單元。分片路徑是簡(jiǎn)單的處理元件,其包括功能單元、包含可選累加器的可選寄存器文件、以及本地?cái)?shù)據(jù)存儲(chǔ)器(dmem)。沒(méi)有指令存儲(chǔ)器和指令取回邏輯。由分片路徑執(zhí)行的指令僅執(zhí)行可視處理操作,并且dmem和寄存器文件僅用于像素和相關(guān)數(shù)據(jù)而沒(méi)有程序控制等的開(kāi)銷。分片路徑除了執(zhí)行指令之外幾乎不執(zhí)行其它操作:控制邏輯主要專用于分片路徑之間的互連和數(shù)據(jù)一致性。分片路徑被構(gòu)造成由任何數(shù)量的分片路徑組成的分片陣列,然而通常每個(gè)陣列具有256-1024個(gè)分片路徑。圖2是分片陣列的示例性框圖,其是可以與在此描述的對(duì)象類庫(kù)和定制功能單元一起使用的專用處理器的一個(gè)示例。分片陣列(例如圖2的分片陣列)的組件和操作在第9,183,694號(hào)美國(guó)專利中提供。更具體地說(shuō),圖2的每個(gè)相同互連處理單元204可以被稱為單獨(dú)分片處理器,其中互連并一起工作的一組分片處理器形成分片處理系統(tǒng)202。在一個(gè)實(shí)施例中,在此描述的igu連同寄存器、存儲(chǔ)器、以及主機(jī)處理器的其它組件一起實(shí)現(xiàn)在上面參考的專利中描述的“主處理器”的指令取回和排序操作。在圖2的分片處理系統(tǒng)的實(shí)施例中,針對(duì)其執(zhí)行操作的數(shù)據(jù)被存儲(chǔ)在分片處理器的共同分區(qū)數(shù)據(jù)存儲(chǔ)器206中。例如,如在此使用的,“分片”指像素的直線區(qū)域或二維陣列(或其它二維數(shù)據(jù))。每個(gè)處理元件或分片處理器針對(duì)唯一像素分片執(zhí)行操作,且相鄰分片映射到相鄰分片處理器的數(shù)據(jù)存儲(chǔ)器。用于這些操作數(shù)的多值操作數(shù)在分片處理架構(gòu)中被定義為對(duì)象,并且使用“對(duì)象跟蹤器”被標(biāo)識(shí)。因此,在該實(shí)施例中,包括在由主機(jī)編譯器生成的指令中的對(duì)象跟蹤器可以引用存儲(chǔ)在分片處理器數(shù)據(jù)存儲(chǔ)器中的數(shù)據(jù)。與產(chǎn)生多值結(jié)果的針對(duì)多值操作數(shù)(例如數(shù)據(jù)陣列)的操作相比,其它操作可能產(chǎn)生標(biāo)量結(jié)果,例如用于發(fā)現(xiàn)陣列中的所有值的平均值的操作。在一個(gè)實(shí)施例中,這種類型的標(biāo)量結(jié)果不容易存儲(chǔ)在分片處理器數(shù)據(jù)存儲(chǔ)器(例如圖2的分片處理器數(shù)據(jù)存儲(chǔ)器)中。此類標(biāo)量結(jié)果可以通過(guò)分片處理器互連結(jié)構(gòu)被發(fā)送回到指令生成單元以便存儲(chǔ)在主機(jī)處理器處,如由“標(biāo)量結(jié)果”線208例示的那樣。除了標(biāo)識(shí)要執(zhí)行的操作數(shù)和操作之外,由igu針對(duì)專用處理器生成的指令可以包括用于專用處理器的其它參數(shù)。在分片處理系統(tǒng)的示例中,可以使用指令中的指定位傳遞的有用信息包括有關(guān)指令是否與如在第9,183,694號(hào)美國(guó)專利中定義的“任務(wù)邊界”關(guān)聯(lián)的信息??梢栽谥噶钪袀鬟f到分片處理器的其它有用信息是標(biāo)識(shí)如在圖20中描述的指令和上面參考的專利的關(guān)聯(lián)文本的“使用”和“定義”次數(shù)的信息。此類信息可以由分片處理器用于維護(hù)數(shù)據(jù)一致性。其它類型的專用處理器可以采用不同種類的專用信息,這些專用信息可以在由igu創(chuàng)建的專用指令中被傳遞到處理器。圖2示出分片陣列的子集—在此類情況下,四個(gè)分片路徑在彼此的本地。分片路徑不同時(shí)執(zhí)行同一指令,然而它們執(zhí)行同一指令序列。在時(shí)間和空間上分配指令:在時(shí)間上,因?yàn)樵诙鄠€(gè)不同任務(wù)間隔內(nèi)在同一分片路徑上重復(fù)指令,每個(gè)間隔表示圖像中的不同相鄰位置;以及在空間上,因?yàn)檫€使用指令流水線,跨任何數(shù)量的分片路徑將指令從一個(gè)分片路徑流化(復(fù)制)到下一個(gè)分片路徑。所有計(jì)時(shí)在分片路徑本地,并且沒(méi)有全局暫停信號(hào)。使用用于以每周期一個(gè)分片路徑的速率暫停上游指令的滑移緩沖器(skidbuffer),通過(guò)中斷分片路徑之間的指令流水線來(lái)實(shí)現(xiàn)暫停。此類形式的指令分配和執(zhí)行還允許分片路徑之間的細(xì)粒度數(shù)據(jù)共享,而不需要全局機(jī)制。與simd/smp組織相比,分片陣列實(shí)現(xiàn)具有多個(gè)實(shí)現(xiàn)優(yōu)點(diǎn):●分片路徑針對(duì)寄存器文件和dmem不需要寬ram。它們與典型的32位(或16位)數(shù)據(jù)路徑?jīng)]有區(qū)別,而simd需要相當(dāng)于多達(dá)2048位寬ram(假設(shè)64、32位數(shù)據(jù)路徑)。●訪問(wèn)像素的本地相鄰像素不需要大型多路復(fù)用結(jié)構(gòu)。由于跨大量數(shù)據(jù)路徑的多路復(fù)用ram輸出的開(kāi)銷,訪問(wèn)給定位置的左邊和右邊的像素的要求通常將simd限于每一側(cè)2-3個(gè)像素。使用復(fù)雜性小若干數(shù)量級(jí)的互連,分片路徑針對(duì)該訪問(wèn)的范圍沒(méi)有限制,即使分片路徑有效地完全互連也是如此?!穹制窂礁?jié)能,因?yàn)樗鼈円詥蝹€(gè)像素的粒度被動(dòng)態(tài)分配,而simd以包含32或64個(gè)像素的單元被分配。此分配以逐個(gè)指令為基礎(chǔ),因此例如,針對(duì)1024寬向量的操作可以使用256個(gè)分片路徑,并且后面緊跟僅使用128個(gè)分片路徑的針對(duì)512寬向量的操作,其它128個(gè)路徑被取消計(jì)時(shí)(de-clocked)。●互連傳輸?shù)膯挝皇菢?biāo)量,并且在系統(tǒng)級(jí)別是標(biāo)量流。simd通常需要向量級(jí)別互連(例如跨越simd的寬度),并且需要系統(tǒng)級(jí)別數(shù)據(jù)在傳輸?shù)絪imd之前被聚合成向量,可能具有像素交錯(cuò)和解交錯(cuò)。這不僅使系統(tǒng)互連相比之下更復(fù)雜,而且在處理中引入延遲。一旦單個(gè)分片路徑接收標(biāo)量輸入,便可以獨(dú)立于其它分片路徑而繼續(xù)。沒(méi)有顯式像素交錯(cuò)或解交錯(cuò),因?yàn)橄蛄课丛谙到y(tǒng)級(jí)別暴露。實(shí)際上,像素格式由如何在分片陣列中將程序從標(biāo)量寫入?yún)R編抽象向量來(lái)確定?!駮和2粫?huì)使所有數(shù)據(jù)路徑在同一周期中空閑。相反,分片路徑單獨(dú)檢測(cè)暫停狀況,并且通過(guò)指令流水線在相繼周期上傳播暫停狀況。使用極端情況作為示例,64個(gè)分片路徑可以解決64個(gè)獨(dú)立暫停狀況,其中由于暫停而丟失單個(gè)周期。實(shí)際上,跨所有路徑檢測(cè)到的暫停狀況的總數(shù)明顯高于解決暫停需要的周期總數(shù)—通常為2-3倍或更多倍。這導(dǎo)致相當(dāng)高的每周期指令(ipc)速率,而不考慮大量潛在的系統(tǒng)級(jí)別爭(zhēng)用。這最后一點(diǎn)值得強(qiáng)調(diào),因?yàn)獒槍?duì)大多數(shù)并行系統(tǒng)具有反直覺(jué)效果?,F(xiàn)存并行系統(tǒng)的基本屬性是除了所需基本機(jī)制(例如用于設(shè)置和測(cè)試信號(hào)量的周期)的開(kāi)銷之外,通信和同步還導(dǎo)致隨著核心數(shù)量的增加而增加的暫停。這通常嚴(yán)重限制了并行性,但在如下應(yīng)用中除外:其中與通信/同步要求相比,處理工作負(fù)載大(不適用于可視處理的屬性),因?yàn)樾枰鐢?shù)百或數(shù)千個(gè)像素逐指令通信/同步,并且跨所有應(yīng)用在通信/同步頻率或依賴性拓?fù)浞矫婢哂蟹浅P〉目深A(yù)測(cè)性。相比之下,分片陣列針對(duì)通信和同步不需要額外周期,因?yàn)檫@些機(jī)制被折疊成單周期加載和存儲(chǔ)操作—甚至具有數(shù)十個(gè)周期的相對(duì)高互連延時(shí)的單個(gè)周期。暫停機(jī)制不僅受益于暫停狀況的并行解決,而且還導(dǎo)致構(gòu)造優(yōu)勢(shì),因?yàn)樘砑恿朔制窂?。作為一個(gè)示例,用于cif分辨率的尺度不變特征變換(sift)應(yīng)用使用88個(gè)分片路徑,并且在530萬(wàn)個(gè)周期中執(zhí)行430萬(wàn)個(gè)指令,每分片路徑的ipc為0.81(針對(duì)所有路徑保持70)。在該配置中暫停狀況的總數(shù)是440萬(wàn),這通常將建議低得多的ipc:性能降低100萬(wàn)個(gè)周期以便解決這440萬(wàn)個(gè)暫停,而不是預(yù)期的440萬(wàn)個(gè)周期。此外,hd-1080配置可以使用多達(dá)960個(gè)分片路徑,并且在2500萬(wàn)個(gè)周期中執(zhí)行1600萬(wàn)個(gè)指令,每分片路徑的ipc為0.64(針對(duì)所有路徑保持607)。暫停狀況的總數(shù)為2.82億—比指令數(shù)量多出17倍。如預(yù)期的,添加更多分片路徑已增加更多暫停狀況,但這些暫停狀況被并行解決的這一事實(shí)極大地降低性能影響,從而意味著可以在構(gòu)造上使用大量分片路徑。指令生成分片陣列的指令生成使用唯一機(jī)制,其適合于任何適當(dāng)?shù)谋镜刂鳈C(jī)isa。它需要對(duì)isa的現(xiàn)有軟件工具鏈進(jìn)行非常小的修改(在某種意義上不需要修改),只要工具鏈基于c++或者具有可比特征的面向?qū)ο蟮恼Z(yǔ)言。因此,它是主機(jī)isa的擴(kuò)展,即,在此被統(tǒng)稱為可視處理擴(kuò)展(vpx)的指令集。vpx基于定制指令的概念,這些定制指令在一個(gè)實(shí)施例中使用gnu編譯器集合(“gcc”)_builtin_custom宏。這些宏導(dǎo)致編譯器使用定義操作碼(通常使用枚舉)和兩個(gè)操作數(shù)(立即數(shù)或變量(其被分配給寄存器))的宏,發(fā)出預(yù)定義指令。變量具有如下類型:整數(shù)、浮點(diǎn)或空指針(后者允許存儲(chǔ)器訪問(wèn))。指令可以被定義為返回結(jié)果,該結(jié)果被分配給另一個(gè)變量。因?yàn)榫哂薪Y(jié)果,所以指令是三操作數(shù)、非破壞性指令。編譯器不一定知道由定制指令執(zhí)行的功能(盡管它可以知道,但通常使用某種抽象機(jī)器描述)。它僅使用參與寄存器分配、程序鏈接等的指令,管理所使用的變量/立即數(shù)并且處理結(jié)果,與任何其它指令一樣。這允許最終由編譯器發(fā)出分片陣列指令,而沒(méi)有向編譯器公開(kāi)基本分片路徑或其指令編碼的細(xì)節(jié)的任何要求。定制指令的此類屬性用于編譯分片陣列的代碼,具有很大的靈活性,但在工具鏈方面沒(méi)有復(fù)雜性,并且不要求工具鏈理解分片路徑指令的語(yǔ)義。編譯器不需要知道指令功能的事實(shí)允許vpx指令是虛擬的。它們不像指令通常所做的那樣直接對(duì)功能進(jìn)行編碼,而是對(duì)由igu用于生成指令并向分片陣列發(fā)出指令的信息進(jìn)行編碼。在某種意義上,igu是用于vpx的硬件編譯器,只是它不如軟件編譯器一樣通用—例如不必處理分支或程序鏈接。此類通用性的缺乏實(shí)際上是優(yōu)勢(shì),因?yàn)槔缬煞种?dǎo)致的控制流的變化通常限制軟件編譯器中的寄存器分配的有效性。使用例如1024個(gè)寄存器或更多寄存器,igu可以更有效地分配寄存器,而大多數(shù)編譯器不能有效地分配多于32個(gè)寄存器。虛擬化編程模型在一個(gè)實(shí)施例中,用于分片陣列的應(yīng)用基于c++類庫(kù)。該類庫(kù)以兩種不同的形式實(shí)現(xiàn)虛擬分片陣列的功能。第一種形式完全以軟件實(shí)現(xiàn),具有完全等效于分片陣列的功能,但慢得多,因?yàn)樗辉谟布蠄?zhí)行。第二種形式簡(jiǎn)單地成列(in-line)發(fā)出vpx指令,沒(méi)有類庫(kù)的程序調(diào)用開(kāi)銷,具有單周期執(zhí)行的效果,在超標(biāo)量流水線中可能與其它主機(jī)指令并行。針對(duì)使用這兩種形式的虛擬化的類庫(kù),存在三個(gè)不同的構(gòu)建選項(xiàng),所述選項(xiàng)通過(guò)編譯器標(biāo)志來(lái)選擇:1)用于獨(dú)立于分片陣列實(shí)現(xiàn)的原型設(shè)計(jì),使用類庫(kù)的僅軟件仿真;2)用于針對(duì)分片陣列目標(biāo)生成指令,具有最小軟件開(kāi)銷;以及3)實(shí)現(xiàn)軟件仿真和分片陣列定制指令的混合版本,用于協(xié)同仿真和驗(yàn)證。下面描述僅硬件版本(2)。首先,考慮三個(gè)整數(shù)datavectora、b和c的聲明,a和b具有定義的寬度(寬度不一定在聲明中定義;向量可以繼承分配時(shí)的寬度,這適用于c)。在程序中其后面跟隨語(yǔ)句,該語(yǔ)句添加a和b并且將結(jié)果分配給c。datavector<int>a(width),b(width),c;…c=a+b:當(dāng)編譯器遇到a、b和c的聲明時(shí),它調(diào)用由庫(kù)定義的對(duì)象構(gòu)造器。這些構(gòu)造器包含一個(gè)或兩個(gè)定制指令(在此處描述的庫(kù)版本中),并且對(duì)象僅包含單個(gè)變量(被稱為對(duì)象跟蹤器)。定制指令對(duì)對(duì)象的屬性(例如數(shù)據(jù)類型和寬度)進(jìn)行編碼。除了寬度之外,該信息由編譯時(shí)常量提供,并且如果寬度在寄存器中,則構(gòu)造器調(diào)用可以是單周期成列指令,因此它具有最小開(kāi)銷。構(gòu)造器定制指令返回結(jié)果,該結(jié)果被分配給對(duì)象跟蹤器。該對(duì)象跟蹤器用于針對(duì)對(duì)象變量的后續(xù)操作,并且像任何其它對(duì)象變量一樣被處理。例如,上面示例中的超載添加生成單個(gè)定制指令,該定制指令具有用于a和b的對(duì)象跟蹤器作為它的兩個(gè)操作數(shù),并且返回用于添加的結(jié)果的臨時(shí)對(duì)象跟蹤器作為它的結(jié)果。為了將此分配給c,編譯器簡(jiǎn)單地復(fù)制(或傳播)該對(duì)象跟蹤器以便成為用于c的對(duì)象跟蹤器。這允許編譯器處理非常大的可視對(duì)象,猶如它們是任何其它變量—包括分配給寄存器、參與程序鏈接、被動(dòng)態(tài)分配等—而不需要編譯器具有用于對(duì)象、其行為的機(jī)器描述,也不需要分片路徑指令的定義。這至關(guān)重要,因?yàn)槿鐚⒖吹降?,分片路徑指令的定義和執(zhí)行與任何其它架構(gòu)均不同??梢远x分片路徑指令以便實(shí)現(xiàn)分片路徑和陣列的優(yōu)勢(shì),而沒(méi)有由工具鏈?zhǔn)┘拥南拗疲缰噶顚挾?、?shù)據(jù)類型的限制等。它還允許完全不同的分片路徑和分片陣列實(shí)施方式彼此二進(jìn)制兼容。igu概述圖3是可以用于實(shí)現(xiàn)在此描述的系統(tǒng)和方法的主機(jī)300的一個(gè)示例性實(shí)施例的簡(jiǎn)化框圖。除了圖3中具體示出的組件之外,主機(jī)還包括以常規(guī)計(jì)算機(jī)的方式互連的常規(guī)計(jì)算機(jī)的組件(例如,電源和用于連接到電源的設(shè)備),如所屬
技術(shù)領(lǐng)域:
:的技術(shù)人員理解的那樣。在一個(gè)實(shí)施例中,由主機(jī)(例如圖3的主機(jī))執(zhí)行由常規(guī)編譯器使用如在此所述的對(duì)象類庫(kù)編譯的程序。一般來(lái)說(shuō),除了圖的中間右側(cè)部分中的igu302之外,圖3的組件是也可以在常規(guī)處理器中發(fā)現(xiàn)的組件。在一個(gè)實(shí)施例中,主機(jī)處理器執(zhí)行涉及圖3中所示的操作數(shù)dataa和datab的指令。在另一實(shí)施例中,由主機(jī)處理器執(zhí)行的指令是32位指令。對(duì)于某些指令,操作數(shù)dataa和datab可以表示常規(guī)形式的數(shù)字或變量,并且通??墒褂弥鳈C(jī)處理器的本機(jī)指令集來(lái)執(zhí)行所述指令。在一個(gè)實(shí)施例中,使用由圖3中所示的主機(jī)寄存器文件304、主機(jī)數(shù)據(jù)存儲(chǔ)器306和“其它功能單元”308表示的處理器執(zhí)行此類指令,而不使用圖3的igu。由圖3的主機(jī)處理器執(zhí)行的其它指令是定制指令,這些定制指令由編譯器使用對(duì)象類庫(kù)內(nèi)的定制指令宏生成,如上所述。此類指令由igu處理。對(duì)圖3的igu(其在此還可以被稱為“定制功能單元”或“硬件指令編譯器”)進(jìn)行編程,以便識(shí)別由編譯器生成的定制指令所使用的操作數(shù)dataa和datab的值。使用來(lái)自定制指令的操作數(shù)和操作碼,硬件指令編譯器針對(duì)耦合到igu的專用處理器生成一個(gè)或多個(gè)適當(dāng)?shù)闹噶?。在圖3的實(shí)施例中,通過(guò)使用指令流水線i-pipe將指令從igu發(fā)送到專用處理器并且從專用處理器接收一個(gè)或多個(gè)標(biāo)量結(jié)果來(lái)將igu耦合到專用處理器。從專用處理器的角度來(lái)看,igu是“指令生成單元”,因?yàn)樗軌虬~外操作,例如專用處理器的指令的排序和多任務(wù)處理。通過(guò)下面提供的兩個(gè)示例性分片處理器主機(jī)定制指令集架構(gòu)表(以下為“定制isa表”),示出可以使用igu處理的定制指令的示例。下面的表定義某些定制指令,在一個(gè)示例性實(shí)施例中這些定制指令可以由編譯器生成并且提供給圖1的igu。多種其它類型的指令(例如移位指令、布爾指令和移動(dòng)指令)也將被包括在實(shí)際實(shí)現(xiàn)中。定制isa表中的信息可以被包括在對(duì)象類庫(kù)內(nèi)的一個(gè)或多個(gè)文件中,這些文件由編譯器訪問(wèn)以便實(shí)現(xiàn)用戶定義的功能。此類信息的使用允許編譯器生成定制指令,這些定制指令包括諸如dataa和datab之類的操作數(shù)和對(duì)應(yīng)于所需操作的操作碼。在一個(gè)實(shí)施例中,定制指令是32位指令。表1:構(gòu)造器、解構(gòu)器、調(diào)整大小表2:算術(shù)(datavector)mnemdataadatab結(jié)果類型addobjtrackerobjtrackerobjtrackeriniiadd_immobjtrackerliteralobjtrackerinitsubobjtrackerobjtrackerobjtrackeriniisub_immobjtrackerliteralobjtrackerinitsub_from_immobjtrackerliteralobjtrackerinitabsobjtrackerobjtrackerinitmulobjtrackerobjtrackerobjtrackeriniimul_immobjtrackerliteralobjtrackerinitdivobjtrackerobjtrackerobjtrackeriniidiv_immobjtrackerliteralobjtrackerinitdiv_imm_byobjtrackerliteralobjtrackerinit取決于專用處理器的性質(zhì),諸如dataa和datab之類的操作數(shù)可以表示多個(gè)數(shù)據(jù)值。例如,上面參考的第9,183,694號(hào)美國(guó)專利的分片處理器的操作數(shù)可以表示二維數(shù)據(jù)陣列。在定制isa表的示例中,具有定制、多值格式的此類變量被定義為對(duì)象并且使用“對(duì)象跟蹤器”(“objtracker”)來(lái)標(biāo)識(shí)。某些定制指令(例如定制isa表的表1中的construct指令)可以用于創(chuàng)建屬性并將屬性分配給對(duì)應(yīng)于特定變量的對(duì)象。其它定制指令用于使用由對(duì)象跟蹤器標(biāo)識(shí)的變量執(zhí)行操作。例如,定制isa表的表2中的add指令指定將由用于操作數(shù)dataa的對(duì)象跟蹤器標(biāo)識(shí)的數(shù)據(jù)與由用于操作數(shù)datab的對(duì)象跟蹤器標(biāo)識(shí)的數(shù)據(jù)進(jìn)行相加,并且將結(jié)果存儲(chǔ)在與用于結(jié)果的對(duì)象跟蹤器關(guān)聯(lián)的存儲(chǔ)位置中。在一個(gè)實(shí)施例中,與這些對(duì)象跟蹤器中的一個(gè)或多個(gè)關(guān)聯(lián)的數(shù)據(jù)被存儲(chǔ)在專用處理器內(nèi)的一個(gè)或多個(gè)數(shù)據(jù)存儲(chǔ)器中。對(duì)于被設(shè)計(jì)為使用由定制isa表定義的接口對(duì)接到分片處理器陣列(“分片陣列”)的igu的示例,igu響應(yīng)于從定制isa表的表2接收add指令,以由分片陣列需要的形式創(chuàng)建加法(add)指令。以這種方式,主機(jī)處理器的編譯器不需要具有有關(guān)由分片處理器(或其它專用處理器)需要的指令格式的信息。主機(jī)編譯器使用由對(duì)象類庫(kù)內(nèi)的文件(這些文件針對(duì)主機(jī)編譯器建立用戶定義的指令)定義的到定制功能單元的接口。硬件指令編譯器然后自由創(chuàng)建用于專用處理器的具有專用處理器所需的任何長(zhǎng)度和任何形式的指令。專用處理器的開(kāi)發(fā)可以繼續(xù)進(jìn)行,從而導(dǎo)致對(duì)處理器需要的指令格式進(jìn)行更改,并且僅硬件指令編譯器需要被修改以便適應(yīng)對(duì)專用處理器的任何更改。在圖3的實(shí)施例中,igu被實(shí)現(xiàn)為主機(jī)的數(shù)據(jù)路徑中的功能單元,而不是直接執(zhí)行vpx指令,它解釋vpx指令。該功能單元具有兩個(gè)輸入操作數(shù)和一個(gè)結(jié)果總線。對(duì)于大多數(shù)指令,該單元看似具有單周期執(zhí)行,因?yàn)獒槍?duì)本地主機(jī),它僅接收對(duì)象跟蹤器(或固定值)并且返回對(duì)象跟蹤器。例如,返回到代碼示例,當(dāng)構(gòu)造器定制指令被發(fā)出到igu時(shí),它簡(jiǎn)單地使用基于堆棧的分配將條目—即,描述符—分配到屬性表中,并且返回表?xiàng)l目(對(duì)象跟蹤器)的地址,同時(shí)它填入對(duì)象的信息(例如數(shù)據(jù)類型和寬度)。對(duì)于需要分片路徑中的共享dmem的對(duì)象,它還分配需要的存儲(chǔ)器,從而將基地址分配給將用于分片路徑指令生成的對(duì)象。此外,對(duì)于包含其它控制狀態(tài)的對(duì)象(例如循環(huán)緩沖器),該狀態(tài)被初始化。對(duì)于其它指令(例如先前示例中的add),igu訪問(wèn)屬性表?xiàng)l目,生成適當(dāng)形式的分片路徑add指令,并且發(fā)出到分片陣列。下面提供igu的進(jìn)一步細(xì)節(jié),但幾個(gè)重點(diǎn)如下:●由igu執(zhí)行所有控制、排序和一致性操作。它遵循順序執(zhí)行模型,因此例如,存儲(chǔ)器寫入始終在同一位置的讀取之前,并且在后續(xù)寫入之前執(zhí)行所有讀取。分片陣列中的執(zhí)行極其無(wú)序,但使用在分片路徑指令中提供的基于順序執(zhí)行模型的信息,維護(hù)等同的順序排序?!裼蒳gu管理系統(tǒng)接口和全局表的操作,例如提供基地址并且獨(dú)立于分片路徑訪問(wèn)寬度。這些操作完全在分片路徑的外部,它們僅執(zhí)行加載、存儲(chǔ)和直方圖操作并且提供本地偏移和數(shù)據(jù),而不涉及任何全局細(xì)節(jié)?!駃gu執(zhí)行分片路徑的所有寄存器和存儲(chǔ)器分配,包括寄存器溢出/填充以及將累加器(可選地)分配給復(fù)合乘法-加法運(yùn)算。對(duì)于它必須處理的情況,此類分配堪比常規(guī)編譯器分配并且與其一樣通用,并且實(shí)際上更有效,因?yàn)樵诙ㄖ浦噶盍髦袥](méi)有分支或程序調(diào)用,并且不需要顯式程序鏈接。溢出的任何對(duì)象被分配有dmem位置,但僅當(dāng)需要溢出時(shí)才分配該位置。使用足夠數(shù)量的寄存器(通常為每像素位置256個(gè)),溢出非常罕見(jiàn),并且填充甚至更罕見(jiàn),因?yàn)閷?duì)象可以通過(guò)程序返回(或刪除)被解構(gòu)并且不再被使用。●igu以確保一致性的方式管理共享數(shù)據(jù)。例如,除臨時(shí)求值期間以外,不將共享數(shù)據(jù)分配給寄存器,因?yàn)椴豢稍诜制窂街g共享寄存器?!裰噶钍褂妙愋蜆?biāo)記,以使得可以針對(duì)任何數(shù)量的數(shù)據(jù)類型定義單個(gè)操作。例如,除了標(biāo)識(shí)數(shù)據(jù)類型的字段之外,有符號(hào)/無(wú)符號(hào)整數(shù)和浮點(diǎn)加法是相同的。這可以被擴(kuò)展為包括用戶定義的類型(例如固點(diǎn)),假設(shè)分片路徑被設(shè)計(jì)為支持基礎(chǔ)操作。實(shí)現(xiàn)概述圖4是示出圖3的igu302的組織和操作的示例性框圖。如上所述,igu被實(shí)現(xiàn)為主機(jī)的數(shù)據(jù)路徑中的功能單元;但是,它解釋vpx指令,而不是直接執(zhí)行vpx指令。該功能單元具有典型的配置,因?yàn)樗哂袃蓚€(gè)輸入操作數(shù)—hostdataa和hostdatab,并且返回單個(gè)結(jié)果—hostresult。hostdataa幾乎始終包含一個(gè)對(duì)象跟蹤器:例外是它可以包含構(gòu)造器指令的對(duì)象參數(shù)。hostdatab(如果存在)包含另一個(gè)對(duì)象跟蹤器、固定值(立即數(shù))或構(gòu)造器信息。hostresult(如果由指令定義)通常是用于指令結(jié)果的對(duì)象跟蹤器,其由igu分配。但是,它還可以是返回到主機(jī)的vectorsummary對(duì)象中的標(biāo)量值。igu的實(shí)現(xiàn)分布在與圖的上部、中部、以及下部對(duì)應(yīng)的三個(gè)流水線級(jí)上:屬性級(jí)402、解碼級(jí)404、以及指令緩沖級(jí)406。以下章節(jié)提供這些級(jí)中的每一個(gè)的操作的概述。在該概述之后,后續(xù)章節(jié)詳細(xì)地描述每一級(jí)的操作。屬性級(jí)概述屬性級(jí)實(shí)現(xiàn)到主機(jī)處理器的主接口,從而接收vpx操作碼以及dataa和datab操作數(shù),并且返回對(duì)象跟蹤器result。它的主要功能是:1)將對(duì)象描述符輸入屬性表中以便實(shí)現(xiàn)構(gòu)造器指令,2)根據(jù)指令執(zhí)行的需要更新這些描述符,3)刪除描述符以便實(shí)現(xiàn)解構(gòu)器指令,并且4)組裝解碼級(jí)所需的信息以便將vpx指令轉(zhuǎn)換成分片路徑指令。它將該信息輸出到解碼級(jí)。當(dāng)屬性級(jí)接收構(gòu)造器指令時(shí),它分配屬性表408中的下一個(gè)條目,并且輸入基于包含在該指令中的參數(shù)的描述符信息。它還輸入基于本地參數(shù)的信息,例如針對(duì)實(shí)現(xiàn)共享數(shù)據(jù)的循環(huán)緩沖器的linebuffer對(duì)象分配分片路徑dmem:基于緩沖器的大小,這些linebuffer對(duì)象需要多個(gè)dmem行以便實(shí)現(xiàn)緩沖器。它返回屬性表?xiàng)l目的地址作為指令結(jié)果;這是由主機(jī)用于針對(duì)對(duì)象的后續(xù)操作的對(duì)象跟蹤器。少數(shù)對(duì)象需要兩個(gè)指令以便傳送所有構(gòu)造器參數(shù),并且在此類情況下,針對(duì)第二指令返回對(duì)象跟蹤器。指令執(zhí)行通常需要針對(duì)指令結(jié)果創(chuàng)建描述符,或者修改現(xiàn)有描述符以便反映由指令隱含的對(duì)象狀態(tài)變化。例如:1)在其描述符反映輸入操作數(shù)的新對(duì)象中添加兩個(gè)對(duì)象結(jié)果,2)分配linebuffer變量需要更新由變量實(shí)現(xiàn)的循環(huán)緩沖器的狀態(tài),并且3)分配datavector對(duì)象能夠改變對(duì)象的寬度。在這些情況下,屬性級(jí)創(chuàng)建新描述符并且將對(duì)象跟蹤器返回到主機(jī),或者更新屬性表中由所述指令中的對(duì)象跟蹤器定義的位置處的描述符。到解碼級(jí)的主要輸出是原始vpx指令的流水線化版本、以及與兩個(gè)輸入操作數(shù)和結(jié)果相關(guān)的其它信息。在此類情況下,將dataa操作數(shù)轉(zhuǎn)換為操作數(shù)的描述符而不是對(duì)象跟蹤器的描述符。datab操作數(shù)是操作數(shù)的描述符或者是具有其數(shù)據(jù)類型指示的固定操作數(shù)值(對(duì)于變量,數(shù)據(jù)類型被包含在描述符中)??梢栽谛薷膶傩员碇埃鄬?duì)于屬性表修改這些描述符。由屬性級(jí)創(chuàng)建的用于結(jié)果的描述符也被傳送到解碼級(jí)。解碼級(jí)概述igu的解碼級(jí)(在圖4的示意圖的中心示出)從屬性級(jí)接收指令和屬性信息,并且使用寄存器分配標(biāo)志和寄存器分配隊(duì)列來(lái)處理寄存器的分配和取消分配。解碼級(jí)還形成用于專用處理器的指令并且將指令傳遞到指令緩沖級(jí)。解碼級(jí)將vpx指令序列轉(zhuǎn)換成功能等效的分片路徑指令序列。在高級(jí)別,這簡(jiǎn)單地將一種格式的指令(例如vpxadd)轉(zhuǎn)換為另一種格式(分片add)。但是,這還涉及寄存器分配、寄存器溢出/填充(包括用于溢出/填充位置的dmem分配)、以及使用依賴性信息注釋指令。解碼級(jí)還實(shí)現(xiàn)到圖1中所示的表-系統(tǒng)單元114的控制接口,這還涉及跟蹤和管理有關(guān)系統(tǒng)和表訪問(wèn)的依賴性。作為可以被包含在寄存器中的用于對(duì)象的構(gòu)造器指令的結(jié)果,執(zhí)行寄存器分配。這排除包含共享數(shù)據(jù)的對(duì)象,因?yàn)榧拇嫫鞑荒鼙还蚕?。寄存器分配使用兩個(gè)結(jié)構(gòu):“空閑列表”,其包含未被分配的寄存器的標(biāo)識(shí)符;以及“分配fifo”,其以分配順序包含已被分配的寄存器的列表??臻e列表不需要排序,但分配列表按順序保留,以使得如果需要寄存器,則硬件能夠選擇最近分配的寄存器,因?yàn)樵诓痪玫膶?lái)不太可能需要該寄存器。在操作期間,構(gòu)造操作可能在寄存器都不可用時(shí)需要寄存器。在此類情況下,解碼級(jí)使用從最高地址dmem位置發(fā)展到較低地址的堆棧,針對(duì)溢出分配存儲(chǔ)位置,并且發(fā)出溢出指令。后續(xù)操作可能針對(duì)已溢出的寄存器運(yùn)行,在此類情況下,針對(duì)填充操作分配另一個(gè)寄存器—此分配又可能導(dǎo)致另一個(gè)溢出。操作還可能具有需要新寄存器的臨時(shí)結(jié)果,這也可能導(dǎo)致溢出。盡管存在多個(gè)分配(從而導(dǎo)致多個(gè)溢出和填充狀況)的事實(shí),但寄存器分配最終達(dá)到如下?tīng)顟B(tài):所需寄存器已被分配,并且任何溢出的寄存器已被放在dmem中。解碼級(jí)還將依賴性信息添加到寫入和讀取共享數(shù)據(jù)的指令。該信息允許分片路徑在實(shí)現(xiàn)順序執(zhí)行模型中進(jìn)行協(xié)調(diào),即使實(shí)際指令執(zhí)行在空間和時(shí)間上無(wú)序也是如此。這使用兩個(gè)表來(lái)存儲(chǔ)與共享數(shù)據(jù)的訪問(wèn)相關(guān)的信息。一個(gè)表針對(duì)每個(gè)dmem位置保存最近寫入該位置的指令的標(biāo)識(shí)符:讀取該數(shù)據(jù)的任何操作都需要已在目標(biāo)存儲(chǔ)器中執(zhí)行指令。另一個(gè)表再次針對(duì)每個(gè)dmem位置保存最近讀取該位置的指令的標(biāo)識(shí)符:在允許后續(xù)寫入之前,所有分片路徑必須已完成該讀取。到由解碼級(jí)實(shí)現(xiàn)的表-系統(tǒng)單元的控制接口(表-系統(tǒng)接口410)用于將全局信息傳送到該單元。這包括用于讀取或?qū)懭氲谋砘蛳到y(tǒng)基地址,這些基地址適用于所有分片路徑—分片路徑僅提供距該地址的偏移。它還指示操作是讀取還是寫入,并且對(duì)于作為直方圖操作的表寫入,指示直方圖操作的類型。最后,解碼級(jí)提供唯一地標(biāo)識(shí)給定時(shí)間跨度內(nèi)的訪問(wèn)的信息,包括用于特定訪問(wèn)和用于被訪問(wèn)的對(duì)象的唯一標(biāo)識(shí)符(使用對(duì)象跟蹤器)。在任何給定時(shí)間,可以具有多個(gè)進(jìn)行中的表和系統(tǒng)訪問(wèn),因?yàn)檫@些操作被分布在分片陣列上。使用請(qǐng)求隊(duì)列跟蹤單獨(dú)訪問(wèn)流:針對(duì)表和系統(tǒng)訪問(wèn)存在單獨(dú)請(qǐng)求隊(duì)列。發(fā)出到分片路徑的訪問(wèn)指令包含隊(duì)列標(biāo)識(shí)符,并且指令對(duì)訪問(wèn)是針對(duì)表還是針對(duì)系統(tǒng)進(jìn)行編碼。因此,可以正在進(jìn)行多個(gè)訪問(wèn),它們由個(gè)體訪問(wèn)的隊(duì)列條目來(lái)標(biāo)識(shí)。當(dāng)所有訪問(wèn)都已完成時(shí),表-系統(tǒng)單元114向解碼級(jí)返回指示,其指示對(duì)應(yīng)隊(duì)列條目空閑。該指示還包括最初由解碼級(jí)提供的對(duì)象跟蹤器。該標(biāo)識(shí)符由解碼級(jí)用于提供針對(duì)對(duì)象的讀取-寫入同步。例如,當(dāng)針對(duì)同一表具有正在進(jìn)行的讀取時(shí),解碼級(jí)抑制表寫入。當(dāng)表-系統(tǒng)單元用信號(hào)通知已跨所有分片路徑完成讀取時(shí),表寫入被允許繼續(xù)。表-系統(tǒng)接口410還實(shí)現(xiàn)全局屏障,其允許與分片陣列的系統(tǒng)級(jí)同步。這確保在屏障操作被允許完成之前,所有表和系統(tǒng)訪問(wèn)都已完成。最后,解碼級(jí)包括優(yōu)化隊(duì)列412,其用于在本地優(yōu)化指令序列。例如,該隊(duì)列可以將存儲(chǔ)(stores)組合成先前指令,以使得該指令可以具有寫入dmem的副作用而無(wú)需額外周期。它還可以將乘法和加法序列轉(zhuǎn)換為復(fù)合乘法-加法指令,這些指令采取單個(gè)周期來(lái)執(zhí)行,而不是針對(duì)乘法和加法(或者加法和乘法)采取兩個(gè)單獨(dú)周期。解碼級(jí)的輸出是用于指令緩沖級(jí)的已解碼指令。指令緩沖級(jí)概述硬件指令編譯器的指令緩沖級(jí)(在圖4的示意圖底部處示出)包括標(biāo)量寄存器和標(biāo)量功能單元,以便從專用處理器接收標(biāo)量數(shù)據(jù)、使用由主機(jī)處理器提供的其它標(biāo)量操作數(shù)處理標(biāo)量數(shù)據(jù)、以及存儲(chǔ)標(biāo)量結(jié)果。指令緩沖級(jí)還包括優(yōu)化隊(duì)列和指令重放緩沖器,以便管理專用處理器的指令執(zhí)行。在具有分片陣列作為專用處理器的一個(gè)實(shí)施例中,指令緩沖級(jí)實(shí)現(xiàn)在第9,183,614號(hào)美國(guó)專利中描述的“主處理器”的指令取回和排序操作。在具有分片處理器作為專用處理器的此類實(shí)施例中,指令緩沖級(jí)從解碼級(jí)中的優(yōu)化隊(duì)列接收指令,并且管理兩個(gè)指令緩沖器:一個(gè)用于向量指令(向量指令重放緩沖器414),另一個(gè)用于標(biāo)量指令(標(biāo)量指令隊(duì)列416)。向量指令通過(guò)分片路徑執(zhí)行,并且指令緩沖級(jí)管理指令到向量i-pipe中的排序。標(biāo)量指令直接由igu執(zhí)行,只是其中某些標(biāo)量指令涉及由向量?jī)?nèi)操作(例如產(chǎn)生向量中的最大值的操作)產(chǎn)生的標(biāo)量。后面的指令被放在向量和標(biāo)量緩沖器兩者上以便將標(biāo)量結(jié)果與向量運(yùn)算同步。向量和標(biāo)量指令緩沖器服務(wù)于不同的目的。向量指令需要在多個(gè)任務(wù)間隔內(nèi)排序,每個(gè)任務(wù)間隔表示每個(gè)分片路徑中的特定位置處的操作。通過(guò)對(duì)共享數(shù)據(jù)的訪問(wèn)定義任務(wù)間隔,因?yàn)槎嗳蝿?wù)是用于避免傳送該數(shù)據(jù)的延時(shí)損失、以及用于解析數(shù)據(jù)的寫入與讀取之間的依賴性的基礎(chǔ)。但是,還定義任務(wù)間隔以便包含表和系統(tǒng)訪問(wèn)的延時(shí),并且標(biāo)記緩沖器中的指令序列的結(jié)束,以使得能夠發(fā)出指令而不考慮從解碼級(jí)(并且最終從主機(jī))接收的指令的狀態(tài)。后一點(diǎn)示出指令緩沖器的另一個(gè)優(yōu)勢(shì)—它允許從來(lái)自主機(jī)的vpx指令的瞬時(shí)帶寬中分離分片陣列的執(zhí)行。僅需要某一時(shí)間跨度內(nèi)的平均帶寬以便保持分片陣列以其峰值速率執(zhí)行。標(biāo)量指令緩沖器將標(biāo)量運(yùn)算同步到向量運(yùn)算。標(biāo)量運(yùn)算通常具有大延時(shí),因?yàn)闃?biāo)量需要跨全部向量處理,從而意味著產(chǎn)生標(biāo)量的所有指令必須在所有分片路徑以及分片路徑內(nèi)的所有本地位置(區(qū)域)中執(zhí)行。類庫(kù)實(shí)現(xiàn)vectorsummary對(duì)象以便允許程序?qū)⒃撗訒r(shí)與主機(jī)執(zhí)行分離:標(biāo)量結(jié)果被放入vectorsummary對(duì)象中以便由主機(jī)隨時(shí)訪問(wèn),而不是要求主機(jī)等待標(biāo)量產(chǎn)生。因?yàn)橄蛄靠梢跃哂腥魏螌挾?,所以該延時(shí)是取決于特定變量的寬度的變量,因此產(chǎn)生標(biāo)量而沒(méi)有結(jié)果相對(duì)于彼此或者相對(duì)于針對(duì)vectorsummary對(duì)象的任何操作(例如將兩個(gè)標(biāo)量值進(jìn)行相加)的任何自然排序。標(biāo)量指令緩沖器被實(shí)現(xiàn)為隊(duì)列416,從而將操作保持為其原始順序。當(dāng)指令緩沖器發(fā)出產(chǎn)生標(biāo)量結(jié)果的向量?jī)?nèi)指令時(shí),所述指令標(biāo)識(shí)要接收結(jié)果的隊(duì)列條目。指令緩沖級(jí)處理嵌入通過(guò)全局互連傳輸?shù)姆纸M中的邊帶信息。在被讀取的最后一個(gè)向量元素處完成共享數(shù)據(jù)讀取時(shí)傳輸這些邊帶信息中的一個(gè)。這指示啟用向數(shù)據(jù)中的寫入。可以針對(duì)給定寫入具有多個(gè)讀取操作,并且該指示僅當(dāng)寫入與最近讀取(如由igu跟蹤)關(guān)聯(lián)時(shí)才啟用寫入。這些邊帶信號(hào)中的另一個(gè)通過(guò)最后一個(gè)分片路徑傳輸以便執(zhí)行導(dǎo)致標(biāo)量的向量?jī)?nèi)運(yùn)算,因?yàn)閮H在所有向量元素已被處理之后才能產(chǎn)生標(biāo)量結(jié)果。該標(biāo)量結(jié)果被放入標(biāo)量指令隊(duì)列中,以便與其它標(biāo)量運(yùn)算正確排序。最后,指令緩沖器連接到指令流水線中的最后一個(gè)分片路徑的i-pipe輸出。這允許igu檢測(cè)何時(shí)已在i-pipe中具有中斷,例如無(wú)限暫停狀況。這允許實(shí)現(xiàn)能夠用信號(hào)通知此類狀況(其表示錯(cuò)誤)的計(jì)時(shí)器,并且促進(jìn)恢復(fù)。它還針對(duì)分片路徑實(shí)現(xiàn)先前提及的屏障操作。指令緩沖器將屏障操作發(fā)出到i-pipe中,并且檢測(cè)當(dāng)在i-pipe結(jié)尾處檢測(cè)到該指令時(shí)所有分片路徑都已完成。屬性級(jí)詳細(xì)操作圖5和圖6示出屬性級(jí)操作的頂級(jí)流程圖。僅當(dāng)解碼級(jí)未處于已暫停狀態(tài)(步驟502)時(shí)該級(jí)才操作,以使得解碼級(jí)可以從屬性級(jí)接收信息(該指示還可以反映指令緩沖級(jí)是否處于用于從解碼級(jí)接收指令的狀態(tài))。該級(jí)別的主要操作是響應(yīng)直接影響屬性表的狀態(tài)的指令(圖5),并且針對(duì)解碼級(jí)設(shè)置操作數(shù)(圖6)。具有直接影響屬性表中的描述符的四個(gè)指令。構(gòu)造指令(步驟504)創(chuàng)建新對(duì)象,且在表中具有新描述符(步驟506)。復(fù)制構(gòu)造指令(步驟508)使用現(xiàn)有對(duì)象的設(shè)置來(lái)創(chuàng)建新對(duì)象并將其值復(fù)制到新對(duì)象中(步驟510):這可能涉及將現(xiàn)有對(duì)象的數(shù)據(jù)類型轉(zhuǎn)換為新對(duì)象的數(shù)據(jù)類型。解構(gòu)指令(步驟508的“否”分支)刪除對(duì)象(步驟512)和它正在使用的資源,例如屬性表?xiàng)l目和任何已分配的dmem和寄存器。最后,調(diào)整大小指令(步驟514)設(shè)置對(duì)象向量的新寬度(步驟516)。圖中的最后指令設(shè)置全局幀參數(shù)(步驟518),例如幀高度和區(qū)域大小(步驟520),其中區(qū)域大小控制通過(guò)每個(gè)分片路徑處理的相鄰向量元素或像素的數(shù)量。第二組操作(圖6)根據(jù)需要針對(duì)輸入操作數(shù)從屬性表取回描述符(步驟602、604),并且針對(duì)具有結(jié)果(向量或標(biāo)量)的指令創(chuàng)建新描述符條目(步驟606、608、610、612)。將新條目的地址返回到主機(jī),但這與創(chuàng)建該條目并行發(fā)生,因?yàn)轭A(yù)先知道該條目的地址。從操作數(shù)(多個(gè))的描述符(多個(gè))導(dǎo)出新條目的描述符。例如,如果將浮點(diǎn)數(shù)與整數(shù)進(jìn)行相加,則結(jié)果是浮點(diǎn)數(shù):解碼級(jí)將在發(fā)出加法之前發(fā)出整數(shù)到浮點(diǎn)表示的轉(zhuǎn)換,后跟標(biāo)準(zhǔn)轉(zhuǎn)換和針對(duì)c++定義的數(shù)據(jù)類型優(yōu)先規(guī)則。作為另一個(gè)示例,將向量與更寬向量進(jìn)行相加導(dǎo)致更寬寬度的向量,但元素僅如由更窄向量定義那樣改變。表3示出包含在每種類型對(duì)象的描述符中的信息類型。該信息:1)直接從屬性表被訪問(wèn);2)由屬性級(jí)針對(duì)指令結(jié)果創(chuàng)建;或者3)在被傳送到解碼級(jí)之前由屬性級(jí)修改,以便反映作為指令的副作用,描述符將由屬性級(jí)更新。這是圖中標(biāo)記為“副作用解碼”的流程圖連接符的一個(gè)方面。該組操作沒(méi)有流程圖,因?yàn)樗浅T敿?xì)和機(jī)械。但是,以下是所需操作的類型的概括性總結(jié)。對(duì)象類型描述符信息linebuffer循環(huán)緩沖器狀態(tài)、存儲(chǔ)器分配datavector(或temp)寬度、變量或臨時(shí)index開(kāi)始/結(jié)束位置、寬度、表達(dá)式參數(shù)mask二進(jìn)制值或位置范圍table或histogram大小、基地址、移位/掩碼參數(shù)systemaccess系統(tǒng)基地址、尋址狀態(tài)vectorsummary(或temp)變量或臨時(shí)表3:按對(duì)象類型的描述符信息linebuffer讀取需要啟用或禁用讀取,具體取決于當(dāng)前包含在緩沖器中的數(shù)據(jù)量和讀取的偏移。緩沖器中的數(shù)據(jù)量應(yīng)該足夠以便滿足給定偏移下的讀取,包括邊界處理。此外,結(jié)果向量的寬度能夠取決于針對(duì)水平和/或垂直偏移定義的寬度。如果緩沖器已被初始化,則其輸出立即可用。move指令實(shí)現(xiàn)分配操作,因此根據(jù)移動(dòng)需要修改分配的對(duì)象的描述符狀態(tài)。例如,使用更寬向量設(shè)置datavector將其寬度變?yōu)榕c更寬向量相同。這還可以將臨時(shí)對(duì)象(例如index表達(dá)式)轉(zhuǎn)換為非臨時(shí)對(duì)象。linebuffer分配更新緩沖器的循環(huán)尋址狀態(tài),包括基線、有效線的數(shù)量、接下來(lái)要分配的新線等。這相應(yīng)地修改屬性表中的描述符和傳送到解碼級(jí)的描述符。index對(duì)象可以具有未定義的寬度,在此類情況下其它考慮事項(xiàng)(例如對(duì)象寬度)定義訪問(wèn)的寬度;或者具有定義的寬度,其超控對(duì)象寬度。如果定義寬度,則出現(xiàn)如下情況:這修改被訪問(wèn)對(duì)象的寬度—例如用于上采樣或下采樣—而不是直接確定寬度。由處理index對(duì)象的表達(dá)式定義該狀態(tài),因此屬性級(jí)必須跟蹤這些表達(dá)式并相應(yīng)地修改用于index的描述符。如果由于某種原因訪問(wèn)無(wú)效,例如對(duì)針對(duì)訪問(wèn)尚未具有足夠上下文的linebuffer對(duì)象的訪問(wèn),則屬性級(jí)禁用涉及該訪問(wèn)的任何表達(dá)式,直到下一個(gè)分配點(diǎn),包括禁用分配。這極大地簡(jiǎn)化某些對(duì)象的編程和重用,因?yàn)榭梢允褂盟鼈兌恍枰獪y(cè)試大量邊界條件—對(duì)象簡(jiǎn)單地靜默,直到滿足輸入條件,或者在它們已達(dá)到結(jié)束條件之后靜默。解碼級(jí)詳細(xì)操作圖7示出解碼級(jí)的整體操作的流程圖,包括圖8中的寄存器分配流程圖,其在圖7中被示出為跨頁(yè)(off-page)連接符。解碼級(jí)的主操作被示為“對(duì)vpx指令進(jìn)行解碼”(步驟702),其將vpx指令序列轉(zhuǎn)換為用于專用處理器的等效指令序列,例如分片路徑指令。該過(guò)程主要是機(jī)械的,并且鑒于本公開(kāi)和涉及的專用處理器的指令集,應(yīng)該對(duì)于指令集架構(gòu)領(lǐng)域的普通技術(shù)人員來(lái)說(shuō)顯而易見(jiàn)(然而注意,vpx指令預(yù)計(jì)是標(biāo)準(zhǔn)的,而由于由igu實(shí)現(xiàn)的虛擬化,分片路徑指令不必固定)。下面的討論描述圍繞該中心解碼任務(wù)的特定任務(wù)組。解碼級(jí)服務(wù)于到表-系統(tǒng)單元的接口(步驟704),如前所述,而不考慮它是否被暫停。否則,僅當(dāng)指令緩沖級(jí)處于用于接收已解碼指令的狀態(tài)時(shí)(例如向量指令緩沖器具有開(kāi)放位置并且未以其它方式暫停)解碼級(jí)才操作(步驟706)。解碼級(jí)自身可以通過(guò)防止屬性級(jí)提供新指令以及防止已解碼指令流到達(dá)指令緩沖級(jí)來(lái)強(qiáng)制實(shí)施暫停狀況。當(dāng)由于后面描述的條件而導(dǎo)致解碼級(jí)被暫停時(shí),它不接受新指令,而是重復(fù)或繼續(xù)前一個(gè)解碼操作(步驟708)。在前一個(gè)解碼不成功的情況下重復(fù)解碼,并且在單個(gè)vpx指令導(dǎo)致多個(gè)分片路徑指令的情況下繼續(xù)解碼(步驟710)。后者的一個(gè)示例是表訪問(wèn),其要求在能夠完成訪問(wèn)之前移動(dòng)和掩蔽表地址。示出的第一組操作判定輸入指令是構(gòu)造還是解構(gòu)操作。構(gòu)造指令(步驟712)要求用于基于寄存器的(非共享)對(duì)象的寄存器分配(步驟714),并且解構(gòu)指令(步驟716的“否”分支)解除分配與對(duì)象關(guān)聯(lián)的任何寄存器(步驟718)。復(fù)制構(gòu)造(步驟716)保留被復(fù)制對(duì)象的分配,但針對(duì)新對(duì)象分配寄存器并且發(fā)出移動(dòng)(move)操作以便復(fù)制分片路徑中的被復(fù)制對(duì)象的內(nèi)容(步驟720)。寄存器分配可以導(dǎo)致溢出。在構(gòu)造的情況下,通過(guò)解碼器發(fā)出該溢出而沒(méi)有暫停,因?yàn)闃?gòu)造指令不導(dǎo)致任何其它分片路徑指令。如果針對(duì)復(fù)制構(gòu)造發(fā)生溢出,則需要暫停(步驟722),因?yàn)樯蓛蓚€(gè)指令:溢出、后跟實(shí)現(xiàn)復(fù)制的移動(dòng)。所分配的寄存器被記錄在由對(duì)象跟蹤器尋址的對(duì)象寄存器表中。其它指令根據(jù)需要分配寄存器,如圖8中所示。在大多數(shù)情況下,這僅涉及在對(duì)象寄存器表中查找寄存器標(biāo)識(shí)符,但如果寄存器已溢出并被重用,則這需要填充寄存器,填充寄存器可能又導(dǎo)致另一個(gè)寄存器溢出。由已解碼指令需要的任何或所有寄存器都可以發(fā)生此類情況,因此在解碼可以繼續(xù)之前,可能發(fā)生總計(jì)三次溢出和三次填充,并且可以導(dǎo)致多達(dá)六個(gè)暫停周期(注意,當(dāng)結(jié)果是聲明的變量而不是臨時(shí)結(jié)果時(shí),必須在分配之前填充寄存器,即使寄存器將被寫入也是如此,因?yàn)榭梢杂筛挾鹊膶?duì)象來(lái)分配對(duì)象,并且這被定義為僅影響與更小寬度關(guān)聯(lián)的元素)。但是,溢出和填充非常罕見(jiàn),因此這是極端情況—它被用作如下例示:不管通過(guò)該級(jí)發(fā)生的傳遞次數(shù)為何,寄存器分配最終都達(dá)到解碼器可以繼續(xù)的狀況,假設(shè)具有在硬件中定義的至少三個(gè)寄存器。還采取第四寄存器,因?yàn)槟承┲噶钺槍?duì)多個(gè)已解碼指令之間的中間狀態(tài)需要寄存器,并且直到指令被進(jìn)一步解碼才知道該要求。如上所述,解碼器的中心任務(wù)是將vpx指令轉(zhuǎn)換成分片路徑指令。這可以要求解碼級(jí)發(fā)出指令以便在執(zhí)行操作之前將操作數(shù)轉(zhuǎn)換為兼容的數(shù)據(jù)類型,從而導(dǎo)致一個(gè)周期暫停。這還可能向表-系統(tǒng)單元發(fā)起訪問(wèn)請(qǐng)求,并且可以要求將依賴性信息和訪問(wèn)標(biāo)識(shí)符添加到已解碼指令。先前概述了這些操作,并且細(xì)節(jié)超出本文的范圍,但鑒于本公開(kāi),對(duì)于所屬
技術(shù)領(lǐng)域:
:的普通技術(shù)人員來(lái)說(shuō)這應(yīng)該被理解為相對(duì)簡(jiǎn)單的映射。解碼級(jí)中的最后任務(wù)是管理優(yōu)化隊(duì)列。該隊(duì)列保持少數(shù)指令的上下文,并且在優(yōu)化是可能的情況下,抑制來(lái)自指令緩沖級(jí)的指令。當(dāng)執(zhí)行優(yōu)化時(shí),或者已知優(yōu)化不可能時(shí),它將指令傳送到指令緩沖級(jí)。指令緩沖級(jí)詳細(xì)操作圖9示出當(dāng)專用處理器是分片處理器時(shí),指令緩沖級(jí)的頂級(jí)操作的流程圖。該級(jí)僅當(dāng)未處于已暫停狀況時(shí)才從優(yōu)化隊(duì)列接收新指令(步驟902、904)(并且如果解碼級(jí)被暫停,則可能不接收新指令)。不管它是否被暫停,它始終服務(wù)于邊帶信號(hào),如前所述(步驟906),并且檢測(cè)向量i-pipe是否已在通常很長(zhǎng)的時(shí)間段內(nèi)空閑或者是否已滿足屏障條件。當(dāng)接收新指令時(shí),第一步是將指令放在向量和/或標(biāo)量指令隊(duì)列上(步驟908、910、912)(或者在產(chǎn)生標(biāo)量值的向量指令的情況下,放在這兩個(gè)指令隊(duì)列上)。如果所需隊(duì)列條目未空閑,則這可以導(dǎo)致暫停狀況,由于輸入指令未被指令緩沖級(jí)使用,這被檢測(cè)為最后步驟(步驟914、916)。第二步獨(dú)立于輸入指令,并且該第二步被執(zhí)行而不管是否接收新指令。如果前一個(gè)向量指令已被分片路徑接受,則來(lái)自向量指令緩沖器的下一個(gè)指令(如果可用)被設(shè)置為要發(fā)出的下一個(gè)指令。此發(fā)出跨分片路徑區(qū)域?qū)崿F(xiàn)多任務(wù)處理,因此針對(duì)每個(gè)區(qū)域重復(fù)任務(wù)間隔內(nèi)的相同指令序列。當(dāng)每個(gè)任務(wù)間隔完成時(shí),區(qū)域數(shù)量遞增,直到已在最后一個(gè)區(qū)域(步驟918)(由程序定義)上執(zhí)行任務(wù)間隔。此時(shí),區(qū)域被設(shè)置為第一個(gè)區(qū)域,并且指令發(fā)出繼續(xù)到下一個(gè)任務(wù)間隔(步驟920)。再次地,這僅適用于緩沖器中具有指令的情況。獨(dú)立于向量指令處理,指令緩沖級(jí)還執(zhí)行標(biāo)量指令。這些操作可以涉及處理一個(gè)或兩個(gè)標(biāo)量值、使用從向量運(yùn)算或主機(jī)接收的值設(shè)置標(biāo)量寄存器、或者將標(biāo)量值返回到主機(jī)。針對(duì)標(biāo)量指令隊(duì)列中的第一個(gè)指令,并且僅當(dāng)所有輸入操作數(shù)都有效時(shí),執(zhí)行所有這些操作。由向量指令產(chǎn)生的標(biāo)量變得有效,因?yàn)闃?biāo)量在邊帶分組中被接收并且被放入適當(dāng)?shù)年?duì)列條目中。當(dāng)標(biāo)量執(zhí)行到達(dá)該隊(duì)列條目時(shí),值被寫入標(biāo)量寄存器文件中并且可用于后續(xù)執(zhí)行。如果由于某種原因而使同一vectorsummay對(duì)象在其值被使用之前被寫入多次(這可以在某些程序條件下發(fā)生),則標(biāo)量指令隊(duì)列識(shí)別該狀況并且不使用該標(biāo)量值,直到最近更新有效。在本公開(kāi)內(nèi)使用某些術(shù)語(yǔ)以指特定系統(tǒng)組件。如所屬
技術(shù)領(lǐng)域:
:的技術(shù)人員將認(rèn)識(shí)到的,從業(yè)人員可以通過(guò)不同名稱參考組件。本文并非旨在區(qū)別名稱不同但功能相同的組件。在下面討論和權(quán)利要求中,以開(kāi)放方式使用術(shù)語(yǔ)“包括”和“包含”,并且因此應(yīng)該被解釋為意味著“包括但不限于…”。此外,術(shù)語(yǔ)“耦合”或“耦接”旨在意味著間接或直接電連接。因此,如果第一設(shè)備耦合到第二設(shè)備,則該連接可以通過(guò)直接電連接,或者通過(guò)經(jīng)由其它設(shè)備和連接的間接電連接。上面的討論涉及在此描述的系統(tǒng)、處理器、以及方法的各種實(shí)施例。所公開(kāi)的實(shí)施例不應(yīng)該被解釋為或者以其它方式被用作限制本公開(kāi)(包括任何權(quán)利要求)的范圍。此外,所屬
技術(shù)領(lǐng)域:
:的技術(shù)人員將理解,先前描述具有廣泛的應(yīng)用,并且對(duì)任何實(shí)施例的討論僅意欲例示該實(shí)施例,并且并非旨在建議本公開(kāi)(包括任何權(quán)利要求)的范圍被限于該實(shí)施例。在此提供的描述意欲例示本發(fā)明的原理和各種實(shí)施例。在完全理解上面的公開(kāi)之后,許多變化和修改對(duì)于所屬
技術(shù)領(lǐng)域:
:的技術(shù)人員來(lái)說(shuō)將變得顯而易見(jiàn)。任何權(quán)利要求都旨在被解釋為包含所有此類變化和修改。當(dāng)前第1頁(yè)12當(dāng)前第1頁(yè)12