相關(guān)申請(qǐng)的交叉引用本申請(qǐng)根據(jù)35u.s.c.第119條要求于2014年12月19日提交的題為“storagedeviceandmethodforperformingconvolutionoperations”的歐洲專利申請(qǐng)?zhí)杄p14382551.1的優(yōu)先權(quán),其全部?jī)?nèi)容通過(guò)引用并入本文。本發(fā)明一般涉及計(jì)算機(jī)處理器的領(lǐng)域。更具體地,本發(fā)明涉及一種用于執(zhí)行卷積運(yùn)算的存儲(chǔ)設(shè)備和方法。
背景技術(shù):
:ann通常被呈現(xiàn)為可以計(jì)算來(lái)自輸入的值的互連“神經(jīng)元”的系統(tǒng)。ann表示用于學(xué)習(xí)和識(shí)別模式的最相關(guān)和廣泛的技術(shù)之一。因此,ann已經(jīng)形成為一種用于改善用戶體驗(yàn)的直觀的人類/設(shè)備交互的有效解決方案,這是一種稱為“認(rèn)知計(jì)算”的新計(jì)算范例(paradigm)。除了其他使用之外,ann可以用于成像處理、語(yǔ)音和對(duì)象識(shí)別或自然語(yǔ)言處理。卷積神經(jīng)網(wǎng)絡(luò)(cnn)或深度信念網(wǎng)絡(luò)(dbn)只是采用ann算法的計(jì)算范例的幾個(gè)示例。附圖說(shuō)明可以從結(jié)合以下附圖的以下詳細(xì)描述獲得對(duì)本發(fā)明的更好理解,在附圖中:圖1a是圖示了根據(jù)本發(fā)明的實(shí)施例的示例性按順序取得(fetch)、解碼、退役(retire)流水線和示例性寄存器重命名、亂序發(fā)布/執(zhí)行流水線兩者的框圖;圖1b是圖示了根據(jù)本發(fā)明的實(shí)施例的在處理器中包括的按順序取得、解碼、退役核的示例性實(shí)施例和示例性寄存器重命名、亂序發(fā)布/執(zhí)行架構(gòu)核兩者的框圖;圖2是根據(jù)本發(fā)明的實(shí)施例的具有集成的存儲(chǔ)器控制器和圖形的多核處理器和單核處理器的框圖;圖3圖示了根據(jù)本發(fā)明的一個(gè)實(shí)施例的系統(tǒng)的框圖;圖4圖示了根據(jù)本發(fā)明的實(shí)施例的第二系統(tǒng)的框圖;圖5圖示了根據(jù)本發(fā)明的實(shí)施例的第三系統(tǒng)的框圖;圖6圖示了根據(jù)本發(fā)明的實(shí)施例的片上系統(tǒng)(soc)的框圖;圖7圖示了根據(jù)本發(fā)明的實(shí)施例的對(duì)比使用軟件指令轉(zhuǎn)換器將源指令集中的二進(jìn)制指令轉(zhuǎn)換為目標(biāo)指令集中的二進(jìn)制指令的框圖;圖8圖示了具有多個(gè)層的完全連接的人工神經(jīng)網(wǎng)絡(luò)(ann)的方案;圖9圖示了示例性神經(jīng)形態(tài)(neuromorphic)加速器架構(gòu);圖10圖示了針對(duì)單片配置和基于每層神經(jīng)元的數(shù)量來(lái)利用分布式配置的本發(fā)明實(shí)施例二者的帶寬需求;圖11圖示了單片架構(gòu)與基于每層神經(jīng)元的數(shù)量的分布式神經(jīng)形態(tài)架構(gòu)之間的比較;圖12a圖示了其中神經(jīng)形態(tài)加速器通信地耦合到處理器的一個(gè)實(shí)施例;圖12b圖示了其中神經(jīng)形態(tài)加速器集成在處理器內(nèi)的一個(gè)實(shí)施例;圖13圖示了包括處理單元(pu)的集合的神經(jīng)形態(tài)加速器的一個(gè)實(shí)施例;圖14a-圖14b圖示了根據(jù)本發(fā)明的一個(gè)實(shí)施例的完全連接的1對(duì)1操作可以如何映射;圖15a-圖15b圖示了根據(jù)本發(fā)明的另一實(shí)施例的完全連接的1對(duì)n操作可以如何映射;圖16圖示了執(zhí)行變化的濾波器大小和多個(gè)存儲(chǔ)器大小的卷積(convolution)所需的能量;圖17a-圖17b圖示了用于執(zhí)行集群(cluster)的不同存儲(chǔ)布置;圖18a圖示了存儲(chǔ)器組織的一個(gè)實(shí)施例,其中在不同類型的數(shù)據(jù)之間共享存儲(chǔ)器組塊(memorybank)和互連;圖18b圖示了根據(jù)一個(gè)實(shí)施例的可以對(duì)其應(yīng)用濾波器的示例性圖像;圖19圖示了根據(jù)本發(fā)明的一個(gè)實(shí)施例的包括多個(gè)組塊的暫存器(scratchpad)存儲(chǔ)器;圖20a-圖20b圖示了針對(duì)暫存器存儲(chǔ)器的不同示例性利用;圖21圖示了作為多個(gè)濾波器的函數(shù)的外部存儲(chǔ)器訪問(wèn)中的百分比減少;圖22圖示了根據(jù)本發(fā)明的一個(gè)實(shí)施例的卷積神經(jīng)網(wǎng)絡(luò)加速器;圖23示出了在卷積器中使用的輸入數(shù)據(jù)的示例集合;圖24示出了來(lái)自圖23的元素可以如何在物理存儲(chǔ)器組塊中映射;圖25圖示了用于圖像處理的通用加速器的高級(jí)框圖;圖26示出了其中以1像素的步幅從左上到右下角應(yīng)用4×4像素的內(nèi)核的示例性圖像;圖27圖示了作為卷積配置的函數(shù)的多個(gè)讀取端口;圖28圖示了具有4個(gè)集群的加速器的一個(gè)實(shí)施例;圖29圖示了根據(jù)本發(fā)明的一個(gè)實(shí)施例的數(shù)據(jù)容器;圖30圖示了示出在本發(fā)明的一個(gè)實(shí)施例中實(shí)現(xiàn)的對(duì)準(zhǔn)模式的表格;圖31圖示了示出在本發(fā)明的一個(gè)實(shí)施例中采用的邏輯的表格;圖32圖示了根據(jù)本發(fā)明的一個(gè)實(shí)施例的如何將容器、對(duì)準(zhǔn)邏輯和選擇邏輯互連以產(chǎn)生輸出分組;圖33圖示了基于神經(jīng)元的加權(quán)輸入來(lái)計(jì)算神經(jīng)元的輸出的示例性激活函數(shù)(activationfunction)(af);圖34a-圖34b圖示了使用查找表(lut)的通過(guò)固定值近似的函數(shù)中的每個(gè)點(diǎn)的計(jì)算;圖35a-圖35b圖示了每個(gè)點(diǎn)的計(jì)算可以使用lut由具有給定斜率的線段來(lái)近似;圖36圖示了包括針對(duì)af的特性進(jìn)行優(yōu)化的分段(piecewise)插值近似單元的本發(fā)明的一個(gè)實(shí)施例;圖37a-圖37b圖示了數(shù)據(jù)集合,其示出了多態(tài)(polymorphic)解碼器的實(shí)施例如何將每個(gè)輸入映射到橫坐標(biāo)空間中的范圍;圖38圖示了具有最大誤差2-5和5個(gè)線段的sigmoid函數(shù)的示例;圖39圖示了包括lut和多態(tài)解碼器的架構(gòu)的一個(gè)實(shí)施例;和圖40圖示了多態(tài)解碼器的一個(gè)實(shí)施例。具體實(shí)施方式在隨后的描述中,為了解釋的目的,闡述了許多具體細(xì)節(jié),以便提供對(duì)下面描述的本發(fā)明的實(shí)施例的透徹理解。然而,對(duì)于本領(lǐng)域技術(shù)人員清楚的是:可以在沒(méi)有這些具體細(xì)節(jié)中的一些的情況下實(shí)踐本發(fā)明的實(shí)施例。在其他情況下,以框圖形式示出公知的結(jié)構(gòu)和設(shè)備以避免模糊本發(fā)明的實(shí)施例的基本原理。示例性處理器架構(gòu)和數(shù)據(jù)類型圖1a是圖示了根據(jù)本發(fā)明的實(shí)施例的示例性按順序取得、解碼、退役流水線和示例性寄存器重命名、亂序發(fā)布/執(zhí)行流水線兩者的框圖。圖1b是圖示了根據(jù)本發(fā)明的實(shí)施例的在處理器中包括的按順序取得、解碼、退役核和示例性寄存器重命名、亂序發(fā)布/執(zhí)行架構(gòu)核的框圖。圖1a-圖1b中的實(shí)線框圖示了流水線??和核的按順序部分,而虛線框的可選添加則圖示了寄存器重命名、亂序發(fā)布/執(zhí)行流水線和核。在圖1a中,處理器流水線100包括取得級(jí)102、長(zhǎng)度解碼級(jí)104、解碼級(jí)106、分配級(jí)108、重命名級(jí)110、調(diào)度(也稱為分派(dispatch)或發(fā)布)級(jí)112、寄存器讀取/存儲(chǔ)器讀取級(jí)114、執(zhí)行級(jí)116、寫(xiě)回/存儲(chǔ)器寫(xiě)入級(jí)118、異常處理級(jí)122和提交(commit)級(jí)124。圖1b示出了處理器核190,其包括耦合到執(zhí)行引擎單元150的前端單元130,并且這兩者都耦合到存儲(chǔ)器單元170。核190可以是精簡(jiǎn)指令集計(jì)算(risc)核、復(fù)雜指令集計(jì)算(cisc)核、超長(zhǎng)指令字(vliw)核或混合或替代的核類型。作為又一選項(xiàng),核190可以是專用核,諸如例如網(wǎng)絡(luò)或通信核、壓縮引擎、協(xié)處理器核、通用計(jì)算圖形處理單元(gpgpu)核、圖形核等。前端單元130包括耦合到指令高速緩存單元134的分支預(yù)測(cè)單元132,該指令高速緩存單元134耦合到指令轉(zhuǎn)譯后備緩沖器(tlb)136,該指令轉(zhuǎn)譯后備緩沖器(tlb)136耦合到指令取得單元138,該指令取得單元138耦合到解碼單元140。解碼單元140(或解碼器)可以對(duì)指令進(jìn)行解碼,并且生成作為輸出的一個(gè)或多個(gè)微操作、微代碼入口點(diǎn)、微指令、其他指令或其他控制信號(hào),其解碼自、或否則反映、或?qū)С鲎栽贾噶睢=獯a單元140可以使用各種不同的機(jī)制來(lái)實(shí)現(xiàn)。合適機(jī)制的示例包括但不限于查找表、硬件實(shí)現(xiàn)、可編程邏輯陣列(pla)、微代碼只讀存儲(chǔ)器(rom)等。在一個(gè)實(shí)施例中,核190包括微代碼rom或存儲(chǔ)用于某些宏指令的微代碼(例如,在解碼單元140中或以否則在前端單元130內(nèi))的其他介質(zhì)。解碼單元140耦合到執(zhí)行引擎單元150中的重命名/分配器單元152。執(zhí)行引擎單元150包括重命名/分配器單元152,該重命名/分配器單元152耦合到退役單元154和一個(gè)或多個(gè)調(diào)度器單元156的集合。(一個(gè)或多個(gè))調(diào)度器單元156表示任意數(shù)量的不同調(diào)度器,包括保留站、中心指令窗口等。(一個(gè)或多個(gè))調(diào)度器單元156耦合到(一個(gè)或多個(gè))物理寄存器文件單元158。(一個(gè)或多個(gè))物理寄存器文件單元158中的每個(gè)表示一個(gè)或多個(gè)物理寄存器文件,其中不同的物理寄存器文件存儲(chǔ)一個(gè)或多個(gè)不同的數(shù)據(jù)類型,諸如標(biāo)量整數(shù)、標(biāo)量浮點(diǎn)、打包(packed)整數(shù)、打包浮點(diǎn)、向量整數(shù)、向量浮點(diǎn)、狀態(tài)(例如,作為要執(zhí)行的下一個(gè)指令的地址的指令指針)等。在一個(gè)實(shí)施例中,(一個(gè)或多個(gè))物理寄存器文件單元158包括向量寄存器單元、寫(xiě)掩碼(mask)寄存器單元和標(biāo)量寄存器單元。這些寄存器單元可以提供架構(gòu)向量寄存器、向量掩碼寄存器和通用寄存器。(一個(gè)或多個(gè))物理寄存器文件單元158被退役單元154重疊以圖示可以在其中(例如,使用(一個(gè)或多個(gè))重新排序緩沖器和(一個(gè)或多個(gè))退役寄存文件;使用(一個(gè)或多個(gè))未來(lái)的文件、(一個(gè)或多個(gè))歷史緩沖器和(一個(gè)或多個(gè))退役寄存器文件;使用寄存器映射和寄存器池等)實(shí)現(xiàn)寄存器重命名和亂序執(zhí)行的各種方式。退役單元154和(一個(gè)或多個(gè))物理寄存器文件單元158耦合到(一個(gè)或多個(gè))執(zhí)行集群160。(一個(gè)或多個(gè))執(zhí)行集群160包括一個(gè)或多個(gè)執(zhí)行單元162的集合和一個(gè)或多個(gè)存儲(chǔ)器訪問(wèn)單元164的集合。執(zhí)行單元162可以并且在各種類型的數(shù)據(jù)(例如,標(biāo)量浮點(diǎn)、打包整數(shù)、打包浮點(diǎn)、向量整數(shù)、向量浮點(diǎn))上執(zhí)行各種操作(例如,移位(shift)、加法、減法、乘法)。雖然一些實(shí)施例可以包括專用于特定功能或功能集合的數(shù)個(gè)執(zhí)行單元,但是其他實(shí)施例可以僅包括一個(gè)執(zhí)行單元或者全部執(zhí)行全部功能的多個(gè)執(zhí)行單元。(一個(gè)或多個(gè))調(diào)度器單元156、(一個(gè)或多個(gè))物理寄存器文件單元158和(一個(gè)或多個(gè))執(zhí)行集群160被示出為可能是復(fù)數(shù)的,因?yàn)槟承?shí)施例針對(duì)某些類型的數(shù)據(jù)/操作創(chuàng)建單獨(dú)的流水線(例如,標(biāo)量整數(shù)流水線、標(biāo)量浮點(diǎn)/打包整數(shù)/打包浮點(diǎn)/向量整數(shù)/向量浮點(diǎn)流水線,和/或存儲(chǔ)器訪問(wèn)流水線,其中的每個(gè)具有它們各自的調(diào)度器單元、(一個(gè)或多個(gè))物理寄存器文件單元和/或執(zhí)行集群--并且在單獨(dú)的存儲(chǔ)器訪問(wèn)流水線的情況下,某些實(shí)施例被實(shí)現(xiàn)為其中只有該流水線的執(zhí)行集群具有(一個(gè)或多個(gè))存儲(chǔ)器訪問(wèn)單元164)。還應(yīng)該理解,在使用單獨(dú)的流水線的情況下,這些流水線中的一個(gè)或多個(gè)可以是亂序發(fā)布/執(zhí)行,并且其余的可以是按順序的。存儲(chǔ)器訪問(wèn)單元164的集合耦合到存儲(chǔ)器單元170,該存儲(chǔ)器單元170包括數(shù)據(jù)tlb單元172,該數(shù)據(jù)tlb單元172耦合到數(shù)據(jù)高速緩存單元174,該數(shù)據(jù)高速緩存單元174耦合到第2級(jí)(l2)高速緩存單元176。在一個(gè)示例性實(shí)施例中,存儲(chǔ)器訪問(wèn)單元164可以包括加載單元、存儲(chǔ)地址單元和存儲(chǔ)數(shù)據(jù)單元,其每個(gè)單元均耦合到存儲(chǔ)器單元170中的數(shù)據(jù)tlb單元172。指令高速緩存單元134進(jìn)一步耦合到存儲(chǔ)器單元170中的第2級(jí)(l2)高速緩存單元176。l2高速緩存單元176耦合到一個(gè)或多個(gè)其他級(jí)別的高速緩存并且最終耦合到主存儲(chǔ)器。通過(guò)示例的方式,示例性寄存器重命名、亂序發(fā)布/執(zhí)行核架構(gòu)可以實(shí)現(xiàn)流水線100如下:1)指令取得138執(zhí)行取得和長(zhǎng)度解碼級(jí)102和104;2)解碼單元140執(zhí)行解碼級(jí)106;3)重命名/分配器單元152執(zhí)行分配級(jí)108和重命名級(jí)110;4)(一個(gè)或多個(gè))調(diào)度器單元156執(zhí)行調(diào)度級(jí)112;5)(一個(gè)或多個(gè))物理寄存器文件單元158和存儲(chǔ)單元170執(zhí)行寄存器讀取/存儲(chǔ)讀取級(jí)114;執(zhí)行集群160執(zhí)行執(zhí)行級(jí)116;6)存儲(chǔ)器單元170和(一個(gè)或多個(gè))物理寄存器文件單元158執(zhí)行寫(xiě)回/存儲(chǔ)器寫(xiě)入級(jí)118;7)在異常處理級(jí)122中可能涉及各種單元;以及8)退役單元154和(一個(gè)或多個(gè))物理寄存器文件單元158執(zhí)行提交級(jí)124。核190可以支持一個(gè)或多個(gè)指令集(例如,x86指令集(具有已經(jīng)向較新版本添加的一些擴(kuò)展);加利福尼亞州桑尼維爾的mipstechnologies的mips指令集;加利福尼亞州桑尼維爾的armholdings的arm指令集(具有諸如neon的可選附加擴(kuò)展)),包括本文所述的(一個(gè)或多個(gè))指令。在一個(gè)實(shí)施例中,核190包括支持打包數(shù)據(jù)指令集擴(kuò)展(例如,avx1、avx2和/或一些形式的通用向量友好指令格式(u=0和/或u=1)),如下所述)的邏輯,從而允許使用打包數(shù)據(jù)來(lái)執(zhí)行許多多媒體應(yīng)用所使用的操作。應(yīng)當(dāng)理解,核可以支持多線程(執(zhí)行操作或線程的兩個(gè)或更多并行集合),并且可以以各種方式這樣做,各種方式包括時(shí)間分片多線程、同時(shí)多線程(其中單個(gè)物理核針對(duì)物理核是同時(shí)多線程的線程中的每個(gè)提供邏輯核)或其組合(例如,諸如在intel?超線程技術(shù)中的此后的時(shí)間分片取得和解碼以及同時(shí)多線程)。雖然在亂序執(zhí)行的上下文中描述了寄存器重命名,但是應(yīng)當(dāng)理解,可以在按順序的架構(gòu)中使用寄存器重命名。雖然處理器的圖示實(shí)施例還包括單獨(dú)的指令和數(shù)據(jù)高速緩存單元134/174和共享l2高速緩存單元176,但是替代實(shí)施例可以具有用于指令和數(shù)據(jù)二者的諸如例如第1級(jí)(l1)內(nèi)部高速緩存的單個(gè)內(nèi)部高速緩存,或多級(jí)內(nèi)部高速緩存。在一些實(shí)施例中,系統(tǒng)可以包括內(nèi)部高速緩存和在核和/或處理器外部的外部高速緩存的組合??商娲兀懈咚倬彺婵梢栽诤撕?或處理器外部。圖2是根據(jù)本發(fā)明的實(shí)施例的處理器200的框圖,處理器200可以具有多于一個(gè)核、可以具有集成存儲(chǔ)器控制器并且可以具有集成圖形。圖2中的實(shí)線框示出了具有單個(gè)核202a、系統(tǒng)代理210、一個(gè)或多個(gè)總線控制器單元216的集合的處理器200,而虛線框的可選添加圖示了具有多個(gè)核202a-n、在系統(tǒng)代理單元210中的一個(gè)或多個(gè)集成存儲(chǔ)器控制器單元214的集合和專用邏輯208的替代處理器200。因此,處理器200的不同實(shí)現(xiàn)可以包括:1)cpu,其具有是集成圖形和/或科學(xué)(吞吐量)邏輯的專用邏輯208(其可以包括一個(gè)或多個(gè)核),以及是一個(gè)或多個(gè)通用核的核202a-n(例如,通用按順序核、通用亂序核、兩者的組合);2)協(xié)處理器,其具有是主要用于圖形和/或科學(xué)(吞吐量)的大量專用核的核202a-n;和3)協(xié)處理器,其具有是大量通用按順序核的核202a-n。因此,處理器200可以是通用處理器、協(xié)處理器或?qū)S锰幚砥?,諸如例如網(wǎng)絡(luò)或通信處理器、壓縮引擎、圖形處理器、gpgpu(通用圖形處理單元)、高吞吐量多集成核(mic)協(xié)處理器(包括30個(gè)或更多個(gè)核)、嵌入式處理器等。處理器可以在一個(gè)或多個(gè)芯片上實(shí)現(xiàn)。處理器200可以是一個(gè)或多個(gè)襯底的一部分和/或使用諸如例如bicmos、cmos或nmos之類的多種工藝技術(shù)中的任何技術(shù)在一個(gè)或多個(gè)襯底上實(shí)現(xiàn)。存儲(chǔ)器層級(jí)包括核內(nèi)的一個(gè)或多個(gè)級(jí)別的高速緩存、集合或一個(gè)或多個(gè)共享高速緩存單元206和耦合到集成存儲(chǔ)器控制器單元214的集合的外部存儲(chǔ)器(未示出)。共享高速緩存單元206的集合可以包括一個(gè)或多個(gè)中級(jí)高速緩存,諸如第2級(jí)(l2)、第3級(jí)(l3)、第4級(jí)(l4)或其他級(jí)別的高速緩存、最后級(jí)別高速緩存(llc)和/或其組合。雖然在一個(gè)實(shí)施例中,基于環(huán)的互連單元212互連集成圖形邏輯208、共享高速緩存單元206的集合和系統(tǒng)代理單元210/(一個(gè)或多個(gè))集成存儲(chǔ)器控制器單元214,但是替代實(shí)施例可以使用任何數(shù)量的用于對(duì)此類單元進(jìn)行互連的公知技術(shù)。在一個(gè)實(shí)施例中,在一個(gè)或多個(gè)高速緩存單元206和核202-a-n之間保持一致性(coherency)。在一些實(shí)施例中,一個(gè)或多個(gè)核202a-n能夠進(jìn)行多線程。系統(tǒng)代理210包括協(xié)調(diào)和操作核202a-n的那些部件。系統(tǒng)代理單元210可以包括例如功率控制單元(pcu)和顯示單元。pcu可以是或包括調(diào)整核202a-n和集成圖形邏輯208的功率狀態(tài)所需的邏輯和部件。顯示單元用于驅(qū)動(dòng)一個(gè)或多個(gè)外部連接的顯示器。在架構(gòu)指令集方面,核202a-n可以是同構(gòu)或異構(gòu)的;也就是說(shuō),核202a-n中的兩個(gè)或更多核可能能夠執(zhí)行相同的指令集,而其他核可能能夠只執(zhí)行該指令集的子集或者不同指令集。在一個(gè)實(shí)施例中,核202a-n是異構(gòu)的并且包括下面描述的“小”核和“大”核兩者。圖3-圖6是示例性計(jì)算機(jī)架構(gòu)的框圖。本領(lǐng)域已知的用于膝上型計(jì)算機(jī)、臺(tái)式計(jì)算機(jī)、手持pc、個(gè)人數(shù)字助理、工程工作站、服務(wù)器、網(wǎng)絡(luò)設(shè)備、網(wǎng)絡(luò)集線器、交換機(jī)、嵌入式處理器、數(shù)字信號(hào)處理器(dsp)、圖形設(shè)備、視頻游戲設(shè)備、機(jī)頂盒、微控制器、蜂窩電話、便攜式媒體播放器、手持設(shè)備和各種其他電子設(shè)備的其他系統(tǒng)設(shè)計(jì)和配置也是合適的。通常,能夠合并如本文所公開(kāi)的處理器和/或其他執(zhí)行邏輯的各種各樣的系統(tǒng)或電子設(shè)備通常是合適的。現(xiàn)在參考圖3,示出的是根據(jù)本發(fā)明的一個(gè)實(shí)施例的系統(tǒng)300的框圖。系統(tǒng)300可以包括耦合到控制器集線器320的一個(gè)或多個(gè)處理器310、315。在一個(gè)實(shí)施例中,控制器集線器320包括圖形存儲(chǔ)器控制器集線器(gmch)390和輸入/輸出集線器(ioh)350(其可以在單獨(dú)的芯片上);gmch390包括存儲(chǔ)器和圖形控制器,存儲(chǔ)器340和協(xié)處理器345耦合到gmch390上;ioh350將輸入/輸出(i/o)設(shè)備360耦合到gmch390??商娲?,存儲(chǔ)器和圖形控制器之一或二者集成在處理器內(nèi)(如本文所述),存儲(chǔ)器340和協(xié)處理器345直接耦合到處理器310,并且利用ioh350與在單個(gè)芯片中的控制器集線器320耦合。圖3中用虛線標(biāo)示附加處理器315的可選性質(zhì)。每個(gè)處理器310、315可以包括本文描述的一個(gè)或多個(gè)處理核并且可以是某版本的處理器200。存儲(chǔ)器340可以是例如動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(dram)、相變存儲(chǔ)器(pcm)或兩者的組合。對(duì)于至少一個(gè)實(shí)施例,控制器集線器320經(jīng)由諸如前端總線(fsb)的多點(diǎn)總線(multi-dropbus)、諸如快速通道互連(qpi)之類的點(diǎn)對(duì)點(diǎn)接口或類似連接395來(lái)與(一個(gè)或多個(gè))處理器310、315通信。在一個(gè)實(shí)施例中,協(xié)處理器345是專用處理器,諸如例如高吞吐量mic處理器、網(wǎng)絡(luò)或通信處理器、壓縮引擎、圖形處理器、gpgpu、嵌入式處理器等。在一個(gè)實(shí)施例中,控制器集線器320可以包括集成圖形加速器。在包括架構(gòu)、微架構(gòu)、熱、功耗特性等在內(nèi)的品質(zhì)度量的范圍方面在物理資源310、315之間可以存在各種差異。在一個(gè)實(shí)施例中,處理器310執(zhí)行控制一般類型的數(shù)據(jù)處理操作的指令。嵌入在指令內(nèi)的可以是協(xié)處理器指令。處理器310將這些協(xié)處理器指令識(shí)別為應(yīng)該由附加的協(xié)處理器345執(zhí)行的類型。因此,處理器310將協(xié)處理器總線或其他互連上的這些協(xié)處理器指令(或表示協(xié)處理器指令的控制信號(hào))發(fā)布到協(xié)處理器345。(一個(gè)或多個(gè))協(xié)處理器345接受并執(zhí)行接收到的協(xié)處理器指令?,F(xiàn)在參考圖4,示出的是根據(jù)本發(fā)明實(shí)施例的第一個(gè)更具體的示例性系統(tǒng)400的框圖。如圖4中所示,多處理器系統(tǒng)400是點(diǎn)對(duì)點(diǎn)互連系統(tǒng),并且包括經(jīng)由點(diǎn)對(duì)點(diǎn)互連450耦合的第一處理器470和第二處理器480。處理器470和480中的每個(gè)可以是某版本的處理器200。在本發(fā)明的一個(gè)實(shí)施例中,處理器470和480分別是處理器310和315,而協(xié)處理器438是協(xié)處理器345。在另一個(gè)實(shí)施例中,處理器470和480分別是處理器310協(xié)處理器345。處理器470和480被示出分別包括集成存儲(chǔ)器控制器(imc)單元472和482。處理器470還包括作為其總線控制器單元的一部分的點(diǎn)對(duì)點(diǎn)(p-p)接口476和478;類似地,第二處理器480包括p-p接口486和488。處理器470、480可以使用p-p接口電路478、488經(jīng)由點(diǎn)對(duì)點(diǎn)(p-p)接口450來(lái)交換信息。如圖4中所示,imc472和482將處理器耦合到相應(yīng)的存儲(chǔ)器,即存儲(chǔ)器432和存儲(chǔ)器434,它們可以是本地附接到相應(yīng)的處理器的主存儲(chǔ)器的部分。處理器470、480中的每個(gè)可以使用點(diǎn)對(duì)點(diǎn)接口電路476、494、486、498經(jīng)由單獨(dú)p-p接口452、454來(lái)與芯片組490交換信息。芯片組490可以可選地經(jīng)由高性能接口439來(lái)與協(xié)處理器438交換信息。在一個(gè)實(shí)施例中,協(xié)處理器438是專用處理器,諸如例如高吞吐量mic處理器、網(wǎng)絡(luò)或通信處理器、壓縮引擎、圖形處理器、gpgpu、嵌入式處理器等??梢詫⒐蚕砀咚倬彺妫ㄎ词境觯┌ㄔ谌我惶幚砥髦谢蛟趦蓚€(gè)處理器外部、但是仍經(jīng)由p-p互連與處理器連接,使得如果處理器被置于低功耗模式中則可以將一個(gè)或兩個(gè)處理器的本地高速緩存信息存儲(chǔ)在共享高速緩存中。芯片組490可以經(jīng)由接口496耦合到第一總線416。在一個(gè)實(shí)施例中,第一總線416可以是外圍部件互連(pci)總線或諸如pciexpress總線或另一第三代i/o互連總線之類的總線,但是本發(fā)明的范圍不限于此。如圖4中所示,各種i/o設(shè)備414可以耦合到第一總線416連同總線橋418,總線橋418將第一總線416耦合到第二總線420。在一個(gè)實(shí)施例中,一個(gè)或多個(gè)附加處理器415,諸如協(xié)處理器、高吞吐量mic處理器、gpgpu、加速器(諸如例如圖形加速器或數(shù)字信號(hào)處理(dsp)單元)、現(xiàn)場(chǎng)可編程門(mén)陣列或任何其他處理器,耦合到第一總線416。在一個(gè)實(shí)施例中,第二總線420可以是低引腳數(shù)(lpc)總線。在一個(gè)實(shí)施例中,各種設(shè)備可以耦合到第二總線420,各種設(shè)備包括例如鍵盤(pán)和/或鼠標(biāo)422、通信設(shè)備427和諸如盤(pán)驅(qū)動(dòng)器或其他可以包括指令/代碼和數(shù)據(jù)430的大容量存儲(chǔ)設(shè)備的存儲(chǔ)單元428。此外,音頻i/o424可以耦合到第二總線420。注意,其他架構(gòu)是可能的。例如,代替圖4的點(diǎn)對(duì)點(diǎn)架構(gòu),系統(tǒng)可以實(shí)現(xiàn)多點(diǎn)總線或其他此類架構(gòu)。現(xiàn)在參考圖5,示出的是根據(jù)本發(fā)明的實(shí)施例的第二個(gè)更具體的示例性系統(tǒng)500的框圖。圖4和圖5中的類似元素具有類似的參考標(biāo)號(hào),并且已經(jīng)從圖5省略了圖4的某些方面,以避免模糊圖5的其他方面。圖5圖示了處理器470、480可以分別包括集成存儲(chǔ)器和i/o控制邏輯(“cl”)472和482。因此,cl472、482包括集成存儲(chǔ)器控制器單元并且包括i/o控制邏輯。圖5不僅圖示了耦合到cl472、482的存儲(chǔ)器432、434,而且圖示了i/o設(shè)備514也耦合到控制邏輯472、482。舊有i/o設(shè)備515耦合到芯片組490?,F(xiàn)在參考圖6,示出的是根據(jù)本發(fā)明的實(shí)施例的soc600的框圖。圖2中的類似元素具有類似的參考標(biāo)號(hào)。此外,虛線框是在更先進(jìn)的soc上的可選功能。在圖6中,(一個(gè)或多個(gè))互連單元602耦合到:應(yīng)用處理器610,其包括一個(gè)或多個(gè)核202a-n的集合和(一個(gè)或多個(gè))共享高速緩存單元206;系統(tǒng)代理單元210;(一個(gè)或多個(gè))總線控制器單元216;(一個(gè)或多個(gè))集成存儲(chǔ)器控制器單元214;可以包括集成圖形邏輯、圖像處理器、音頻處理器和視頻處理器的集合或一個(gè)或多個(gè)協(xié)處理器620;靜態(tài)隨機(jī)存取存儲(chǔ)器(sram)單元630;直接存儲(chǔ)器存?。╠ma)單元632;以及用于耦合到一個(gè)或多個(gè)外部顯示器的顯示單元640。在一個(gè)實(shí)施例中,(一個(gè)或多個(gè))協(xié)處理器620包括專用處理器,諸如例如網(wǎng)絡(luò)或通信處理器、壓縮引擎、gpgpu、高吞吐量mic處理器、嵌入式處理器等。本文公開(kāi)的機(jī)制的實(shí)施例可以以硬件、軟件、固件或此類實(shí)現(xiàn)方法的組合來(lái)實(shí)現(xiàn)。本發(fā)明的實(shí)施例可以被實(shí)現(xiàn)為在包括至少一個(gè)處理器、存儲(chǔ)系統(tǒng)(包括易失性和非易失性存儲(chǔ)器和/或存儲(chǔ)元件)、至少一個(gè)輸入設(shè)備和至少一個(gè)輸出設(shè)備的可編程系統(tǒng)上執(zhí)行的計(jì)算機(jī)程序或程序代碼??梢詫⒅T如圖4中所圖示的代碼430之類的程序代碼應(yīng)用于輸入指令以執(zhí)行本文所述的功能并生成輸出信息。輸出信息可以以已知的方式應(yīng)用于一個(gè)或多個(gè)輸出設(shè)備。為了本申請(qǐng)的目的,處理系統(tǒng)包括具有諸如例如數(shù)字信號(hào)處理器(dsp)、微控制器、專用集成電路(asic)或微處理器之類的處理器的任何系統(tǒng)。程序代碼可以以高級(jí)程序或面向?qū)ο缶幊陶Z(yǔ)言來(lái)實(shí)現(xiàn),以與處理系統(tǒng)通信。如果需要,程序代碼也可以以匯編或機(jī)器語(yǔ)言來(lái)實(shí)現(xiàn)。事實(shí)上,本文所述的機(jī)制在范圍上不限于任何特定的編程語(yǔ)言。在任何情況下,語(yǔ)言可能是經(jīng)編譯或解釋的語(yǔ)言。至少一個(gè)實(shí)施例的一個(gè)或多個(gè)方面可以通過(guò)存儲(chǔ)在表示處理器內(nèi)的各種邏輯的機(jī)器可讀介質(zhì)上的代表性指令來(lái)實(shí)現(xiàn),當(dāng)指令被機(jī)器讀取時(shí)使得機(jī)器制造用于執(zhí)行本文所描述的技術(shù)的邏輯。稱為“ip核”的這種表示可以存儲(chǔ)在有形的機(jī)器可讀介質(zhì)上,并提供給各種客戶或制造工廠以加載到實(shí)際制造邏輯或處理器的制造機(jī)器中。這樣的機(jī)器可讀存儲(chǔ)介質(zhì)可以包括但不限于由機(jī)器或設(shè)備制造或形成的制品的非臨時(shí)的、有形的布置,包括諸如硬盤(pán)、包括軟盤(pán)、光盤(pán)、壓縮盤(pán)只讀存儲(chǔ)器(cd-rom)、壓縮盤(pán)可重寫(xiě)(cd-rw)和磁光盤(pán)的任何其他類型的盤(pán)、半導(dǎo)體器件,諸如只讀存儲(chǔ)器(rom)、諸如動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(dram)、靜態(tài)隨機(jī)存取存儲(chǔ)器(sram)之類的隨機(jī)存取存儲(chǔ)器(ram)、可擦除可編程只讀存儲(chǔ)器(eprom)、閃存、電可擦除可編程只讀存儲(chǔ)器(eeprom)、相變存儲(chǔ)器(pcm),磁卡或光卡,或適于存儲(chǔ)電子指令的任何其他類型的介質(zhì)在內(nèi)的存儲(chǔ)介質(zhì)。因此,本發(fā)明的實(shí)施例還包括非臨時(shí)的、有形的機(jī)器可讀介質(zhì),其包含指令或包含設(shè)計(jì)數(shù)據(jù),諸如定義本文所描述的結(jié)構(gòu)、電路、裝置、處理器和/或系統(tǒng)特征的硬件描述語(yǔ)言(hdl)。這樣的實(shí)施例也可以稱為程序產(chǎn)品。在一些情況下,可以使用指令轉(zhuǎn)換器將來(lái)自源指令集的指令轉(zhuǎn)換為目標(biāo)指令集。例如,指令轉(zhuǎn)換器可以將指令轉(zhuǎn)譯(例如,使用靜態(tài)二進(jìn)制轉(zhuǎn)譯,包括動(dòng)態(tài)編譯的動(dòng)態(tài)二進(jìn)制轉(zhuǎn)譯)轉(zhuǎn)變(morph)、仿真或以否則轉(zhuǎn)換為要由核處理的一個(gè)或多個(gè)其他指令。指令轉(zhuǎn)換器可以以軟件、硬件、固件或其組合來(lái)實(shí)現(xiàn)。指令轉(zhuǎn)換器可以在處理器上、在處理器外、或部分在處理器上并且部分在處理器外。圖7是根據(jù)本發(fā)明的實(shí)施例的對(duì)比使用軟件指令轉(zhuǎn)換器將源指令集中的二進(jìn)制指令轉(zhuǎn)換為目標(biāo)指令集中的二進(jìn)制指令的框圖。在圖示的實(shí)施例中,指令轉(zhuǎn)換器是軟件指令轉(zhuǎn)換器,但是可替代地,指令轉(zhuǎn)換器可以以軟件、固件、硬件或其各種組合來(lái)實(shí)現(xiàn)。圖7示出了可以使用x86編譯器704編譯高級(jí)語(yǔ)言702的程序,以生成可由具有至少一個(gè)x86指令集核的處理器716本地地執(zhí)行的x86二進(jìn)制代碼706。具有至少一個(gè)x86指令集核的處理器716表示任何如下處理器:所述任何處理器可以通過(guò)兼容地執(zhí)行或以否則處理(1)intelx86指令集核的指令集的大部分或者(2)目標(biāo)是在具有至少一個(gè)x86指令集內(nèi)核的intel處理器上運(yùn)行的應(yīng)用或其他軟件的目標(biāo)代碼版本以便實(shí)現(xiàn)與具有至少一個(gè)x86指令集核的intel處理器基本相同的結(jié)果,來(lái)執(zhí)行與具有至少一個(gè)x86指令集核的intel處理器基本上相同的功能。x86編譯器704表示可操作以生成可以在具有或沒(méi)有附加聯(lián)動(dòng)(linkage)處理的情況下在具有至少一個(gè)x86指令集核的處理器716上執(zhí)行的x86二進(jìn)制代碼706(例如,目標(biāo)代碼)的編譯器。類似地,圖7示出了可以使用替代的指令集編譯器708來(lái)編譯高級(jí)語(yǔ)言702的程序,以生成可由沒(méi)有至少一個(gè)x86指令集核的處理器714(例如,具有執(zhí)行加利福尼亞州桑尼維爾的mipstechnologies的mips指令集和/或執(zhí)行加利福尼亞州桑尼維爾的armholdings的arm指令集的核的處理器)在本地執(zhí)行的替代指令集二進(jìn)制代碼710。指令轉(zhuǎn)換器712用于將x86二進(jìn)制代碼706轉(zhuǎn)換為可由沒(méi)有x86指令集核的處理器714在本地執(zhí)行的代碼。該轉(zhuǎn)換后的代碼不太可能與替代指令集二進(jìn)制代碼710相同,因?yàn)槟軌驅(qū)崿F(xiàn)此的指令轉(zhuǎn)換器很難制造;然而,轉(zhuǎn)換后的代碼將完成一般操作,并由來(lái)自替代指令集的指令組成。因此,指令轉(zhuǎn)換器712表示通過(guò)仿真、模擬或任何其他過(guò)程來(lái)允許不具有x86指令集處理器或核的處理器或其他電子設(shè)備執(zhí)行x86二進(jìn)制代碼706的軟件、固件、硬件或其組合。用于人工神經(jīng)網(wǎng)絡(luò)中的分布式與協(xié)作計(jì)算的方法與裝置人工神經(jīng)網(wǎng)絡(luò)(ann)可以被設(shè)計(jì)為包含大量“神經(jīng)元”的完全連接的層的集合。每個(gè)神經(jīng)元通過(guò)“突觸”與屬于相鄰層的所有神經(jīng)元連接。跨越突觸的兩個(gè)神經(jīng)元之間的連接的強(qiáng)度或幅度被稱為“突觸權(quán)重”(或者僅稱為“權(quán)重”),其可以被表示為數(shù)值。因此,神經(jīng)元的輸出可以通過(guò)由它們的突觸權(quán)重衡量(ponder)的來(lái)自前一層的所有輸入神經(jīng)元的相加,一種被稱為點(diǎn)積的運(yùn)算,來(lái)計(jì)算。圖8圖示了具有多層(層1、層i-1、層l、層n)的完全連接的ann的方案,并示出了可以如何使用點(diǎn)積運(yùn)算來(lái)組合多個(gè)權(quán)重。大腦啟發(fā)的(brain-inspired)算法這樣的ann可能需要非常高的計(jì)算需求,這在傳統(tǒng)低功率設(shè)備中由于它們有限的功率預(yù)算和處理能力而可能是禁止的。為了克服這個(gè)問(wèn)題,工業(yè)和學(xué)術(shù)界兩者最近都對(duì)引入專門(mén)的神經(jīng)形態(tài)架構(gòu)表現(xiàn)出很大的興趣,所述專門(mén)的神經(jīng)形態(tài)架構(gòu)提供了好于常規(guī)方法數(shù)量級(jí)的能量效率。不幸的是,所提出的神經(jīng)形態(tài)架構(gòu)需要巨大的存儲(chǔ)器帶寬,這在低功率片上系統(tǒng)(soc)架構(gòu)中是不可用的。例如,已經(jīng)表明,由簡(jiǎn)單cnn系統(tǒng)中的完全連接層所需要的帶寬為120gb/s,而soc中的可用帶寬要小得多。即使在使用平鋪(tiling)技術(shù)和內(nèi)部存儲(chǔ)器的情況下,帶寬需求仍保持是價(jià)格昂貴的。圖9示出了神經(jīng)形態(tài)加速器架構(gòu)900,其中單個(gè)處理單元(“pu”)901掌管針對(duì)每個(gè)邏輯神經(jīng)元計(jì)算點(diǎn)積運(yùn)算,并累積部分結(jié)果直到已經(jīng)遍歷所有輸入神經(jīng)元并且結(jié)果是最終的。使用點(diǎn)對(duì)點(diǎn)總線將輸入和權(quán)重從輸入/輸出(io)接口902帶到pu901,所述點(diǎn)對(duì)點(diǎn)總線將來(lái)自該單元的每個(gè)元件與內(nèi)部存儲(chǔ)器或外部世界連接。諸如圖9中所示的當(dāng)前設(shè)計(jì)的主要問(wèn)題是輸入和權(quán)重在pu901內(nèi)部不重用。由于每個(gè)邏輯神經(jīng)元都有它自己的權(quán)重,所以必須每個(gè)周期取得新的數(shù)據(jù),從而在pu901和io接口902之間添加顯著的流量。此外,由于在硬件中僅映射單個(gè)邏輯神經(jīng)元,所以針對(duì)包含在給定的完全連接層中的每個(gè)神經(jīng)元必須再次訪問(wèn)輸入,從而失去重用輸入的機(jī)會(huì)。此外,由于必須在每次計(jì)算時(shí)遞送輸入和權(quán)重二者,所以從io接口902到pu的總線太寬,使得設(shè)計(jì)低效。更好地重用輸入數(shù)據(jù)并減少針對(duì)每次計(jì)算而傳輸?shù)臄?shù)據(jù)量將大大改進(jìn)架構(gòu)的能量效率。下面描述的本發(fā)明的實(shí)施例包括非常有效地計(jì)算完全連接的神經(jīng)網(wǎng)絡(luò)的優(yōu)化架構(gòu)。該架構(gòu)的一個(gè)實(shí)施例由分布式處理單元(pu)的集合組成,所述分布式處理單元(pu)協(xié)作工作以最小化帶寬需求并減少外部讀取和寫(xiě)入的數(shù)量。實(shí)現(xiàn)具體機(jī)制的集合以(i)在pu內(nèi)部重用盡可能多的數(shù)據(jù)、(ii)在pu之間共享數(shù)據(jù)以避免廣播數(shù)據(jù)以及(iii)提前請(qǐng)求數(shù)據(jù)以避免空閑的pu周期。標(biāo)量和模塊化方法允許系統(tǒng)在從高性能設(shè)備變化到低功率設(shè)備的許多市場(chǎng)劃分中極有效率。ann可以在常規(guī)架構(gòu)(例如高端處理器)或?qū)iT(mén)的神經(jīng)形態(tài)加速器中執(zhí)行。已經(jīng)表明,與前者相比,后者提供了數(shù)量級(jí)的改進(jìn)的能量效率,并且因此更適合于功率受限的那些劃分,如soc或可穿戴設(shè)備。然而,目前的神經(jīng)形態(tài)架構(gòu)呈現(xiàn)出具有巨大帶寬需求的單片結(jié)構(gòu),這在上述領(lǐng)域中是不可用的。該障礙阻礙了那些加速器在ann的認(rèn)知能力將是特別有用的(例如,移動(dòng)設(shè)備)市場(chǎng)劃分中的實(shí)現(xiàn)。下面描述的本發(fā)明的實(shí)施例使得能夠?qū)⑸窠?jīng)形態(tài)加速器集成在低功率設(shè)備中,通過(guò)在完全連接的操作上最大化數(shù)據(jù)重用來(lái)減少數(shù)據(jù)流量,并且減少連接pu與io接口的總線的寬度。此設(shè)計(jì)允許系統(tǒng)節(jié)省面積(因?yàn)樾枰^少的連接)和功率(因?yàn)樵L問(wèn)外部存儲(chǔ)器次數(shù)較少)。此外,外部帶寬顯著降低。這些性質(zhì)允許本發(fā)明的實(shí)施例滿足當(dāng)前soc技術(shù)中的物理約束。圖10示出了針對(duì)單片配置和利用分布式配置的本發(fā)明的實(shí)施例二者的帶寬需求。y軸示出了帶寬(gb/s),而x軸示出了給定ann層中的輸出神經(jīng)元的數(shù)量(輸入神經(jīng)元數(shù)量是固定數(shù)量)。單片配置引入了可以在1ghz(全速模式)或0.25ghz(帶寬節(jié)省模式)工作并包含64個(gè)8位乘積累加(multiply-accumulate)(mac)單元的單個(gè)pu。分布式配置的一個(gè)實(shí)施例以0.25ghz操作、支持兩種配置(1對(duì)1和1對(duì)n)并包含十六個(gè)每個(gè)具有4個(gè)8位乘法器(總共為64個(gè)8位mac單元,與單片配置相同的資源)的pu。圖10示出了單片配置在大型ann中需要高達(dá)128gb/s(1ghz),并且以它們頻率的四分之一操作時(shí)需要32gb/s。無(wú)論ann層的輸出神經(jīng)元的數(shù)量如何,這都是固定數(shù)量。如果在不同部件之間共享芯片連接,則低功率劃分不能支持這種帶寬。通過(guò)支持1對(duì)1和1對(duì)n兩種配置,分布式架構(gòu)需要少于14gb/s(與輸出神經(jīng)元數(shù)量無(wú)關(guān)的最大帶寬需求),相比于在以相同頻率操作的單片架構(gòu)中這減少至1/2.3并且相比于全速操作的單片架構(gòu)所需的帶寬這減少至約1/9.8。在一個(gè)實(shí)施例中,這是因?yàn)閷⒂?jì)算分布在不同pu之間更好地允許了數(shù)據(jù)重用和對(duì)外部存儲(chǔ)器的更少的訪問(wèn)而實(shí)現(xiàn)了這一點(diǎn)。注意,1對(duì)1配置更好地適于具有幾個(gè)輸出神經(jīng)元的ann,而1對(duì)n配置在計(jì)算具有大量輸出神經(jīng)元的大型ann時(shí)工作更好。本文中呈現(xiàn)的分布式架構(gòu)支持兩種執(zhí)行模式。而且,單片架構(gòu)比分布式架構(gòu)需要更多的與外部元件(例如內(nèi)部或外部存儲(chǔ)器)的連接。遵循圖10中所示的配置示例,單片配置需要128字節(jié)寬的總線,以用于將每個(gè)周期64b數(shù)據(jù)和64b權(quán)重遞送到單個(gè)pu,而本文中所呈現(xiàn)的分布式解決方案僅需要在pu之間共享的20字節(jié)寬的總線來(lái)遞送4b數(shù)據(jù)和16b權(quán)重。這導(dǎo)致電路中的75%的面積節(jié)省和在互連功耗中的類似減少。圖11圖示了單片和分布式神經(jīng)形態(tài)架構(gòu)之間的比較,其中y軸示出了能量消耗(以mj為單位)并且x軸示出了輸出神經(jīng)元的數(shù)量。查看附圖,可以看出在實(shí)現(xiàn)分布式架構(gòu)時(shí)獲得的關(guān)于能量消耗的益處,這被轉(zhuǎn)化為多于2倍的能耗改進(jìn)。這是因?yàn)樵L問(wèn)主存儲(chǔ)器是功耗巨大(power-hungry)的操作,其可以在多個(gè)小型pu協(xié)作工作時(shí)得到緩解。圖12a-圖12b圖示了可以在其上實(shí)現(xiàn)本發(fā)明的實(shí)施例的不同系統(tǒng)架構(gòu)。兩個(gè)示例性架構(gòu)都包括處理器1200,處理器1200包括多個(gè)核1201-1203,n和包括用于互連核1201-1203,n的通信總線結(jié)構(gòu)或構(gòu)造的“非核(uncore)”部件1210。非核部件1210還包括存儲(chǔ)器控制器1211,其將核1201-1203,n中的每個(gè)通信地耦合到系統(tǒng)存儲(chǔ)器1220(例如,動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(dram)或其他類型的存儲(chǔ)設(shè)備)。在圖12a中所示的實(shí)施例中,用于實(shí)現(xiàn)本文所述的本發(fā)明的實(shí)施例的神經(jīng)形態(tài)加速器1230被配置為外部加速器,其經(jīng)由總線或通信構(gòu)造而耦合到處理器。在圖12b中所示的替代實(shí)施例中,神經(jīng)形態(tài)加速器1231集成在處理器1200內(nèi)。在任一情況下,經(jīng)由集成的存儲(chǔ)器控制器1211向神經(jīng)形態(tài)加速器1230提供對(duì)系統(tǒng)存儲(chǔ)器1220的訪問(wèn)。雖然為了說(shuō)明起見(jiàn)在圖12a-圖12b中示出了這兩個(gè)特定架構(gòu),但是應(yīng)當(dāng)注意,本發(fā)明的基本原理不限于任何特定的處理器架構(gòu)。如圖13中所示,神經(jīng)形態(tài)加速器1230的一個(gè)實(shí)施例包括通過(guò)共享數(shù)據(jù)和部分輸入總線(在圖中標(biāo)記為1)和共享結(jié)果輸出總線(標(biāo)記為2)而連接到io接口1310的pu1300-1303的集合。第一總線(1)用于將數(shù)據(jù)、內(nèi)核和權(quán)重帶到pu1300-1303,而第二(2)用于遞送部分或最終結(jié)果。使用單向點(diǎn)對(duì)點(diǎn)(p2p)鏈路(標(biāo)記為3)互連pu1300-1303,單向點(diǎn)對(duì)點(diǎn)(p2p)鏈路(標(biāo)記為3)用于將部分計(jì)算從一個(gè)pu發(fā)送到另一個(gè)。全局控制單元1305掌管將數(shù)據(jù)從io接口1310驅(qū)動(dòng)到pu1300-1303,以及配置每個(gè)pu以在任何時(shí)間點(diǎn)執(zhí)行適當(dāng)?shù)耐耆B接配置。在一個(gè)實(shí)施例中,為了優(yōu)化功率/性能,pu1300-1303可以以比io接口1310低的頻率操作。本發(fā)明的基本原理不限于共享總線的任何數(shù)量的pu1300-1303和/或每個(gè)pu中包含的任何特定資源。在一個(gè)實(shí)施例中,每個(gè)pu1300-1303包含十六個(gè)8位乘法器,并且該架構(gòu)包括協(xié)作工作的四個(gè)分布式pu1300-1303??梢圆捎酶鞣N總線寬度,但是在一個(gè)特定實(shí)施例中,共享數(shù)據(jù)輸入總線(在圖中標(biāo)記為1)的寬度為20b。圖13中所圖示的協(xié)作方法具有超過(guò)圖9中所示的單片神經(jīng)形態(tài)架構(gòu)的許多益處。首先,單片架構(gòu)在單個(gè)pu中包含所有處理元件(mac單元和特定電路),而本發(fā)明的實(shí)施例將計(jì)算分布在多個(gè)pu1300-1303之間,在pu之間需要內(nèi)部鎖存器和特定通信信道以交換部分結(jié)果。第二,單片架構(gòu)需要pu和io接口之間的更寬的總線來(lái)每個(gè)周期發(fā)送/接收盡可能多的數(shù)據(jù),而本發(fā)明的實(shí)施例在pu之間共享總線。第三,本發(fā)明的實(shí)施例引入了一些內(nèi)部鎖存器,其用于重用數(shù)據(jù)輸入并存儲(chǔ)未來(lái)計(jì)算所需的其他數(shù)據(jù)。最后,在一個(gè)實(shí)施例中,當(dāng)執(zhí)行完全連接的層以滿足帶寬約束時(shí)pu1300-1303以較低的頻率操作(盡管其他層可以全速操作)。假設(shè)從相同總線掛起四個(gè)pu1300-1303,則每個(gè)pu可以以總線頻率的四分之一(1pu周期=4個(gè)總線周期)操作。注意,在一個(gè)實(shí)施例中,pu1300-1303始終保持運(yùn)行,盡管每秒發(fā)送較少的數(shù)據(jù)。如所提及的那樣,本發(fā)明的一個(gè)實(shí)施例支持兩種執(zhí)行模式:(1)完全連接的1對(duì)1和(2)完全連接的1對(duì)n操作。如上所解釋的那樣,取決于目標(biāo)ann配置,以一種模式或以另一模式來(lái)執(zhí)行可能是更適合的。執(zhí)行模式之間的主要差異在于處理輸入和權(quán)重的方式。雖然第一模式需要輸入和權(quán)重同時(shí)到達(dá)給定的pu1300-1303,但是第二模式首先加載神經(jīng)元的輸入并且然后通過(guò)僅在每個(gè)周期取得權(quán)重來(lái)遍歷輸出神經(jīng)元。圖14a-圖14b圖示了根據(jù)本發(fā)明的一個(gè)實(shí)施例的完全連接的1對(duì)1操作可以如何映射并且圖15a-圖15b圖示了根據(jù)本發(fā)明的另一實(shí)施例的完全連接的1對(duì)n操作可以如何映射。首先轉(zhuǎn)到圖14a-圖14b,完全連接的1對(duì)1操作將一個(gè)邏輯神經(jīng)元映射到在單個(gè)pu1300-1303中計(jì)算的一個(gè)物理神經(jīng)元。為了執(zhí)行點(diǎn)積運(yùn)算,發(fā)送輸入神經(jīng)元和突觸(權(quán)重)1400-1403二者。由于每個(gè)神經(jīng)元需要它自己的權(quán)重,所以必須針對(duì)每個(gè)操作取得輸入神經(jīng)元和權(quán)重二者。從總線掛起的每個(gè)實(shí)體在不同的時(shí)間接收打包在一起的它們的權(quán)重(在一個(gè)實(shí)施例中使用16b來(lái)進(jìn)行編碼)。然而,輸入神經(jīng)元在pu1300-1303之間共享,并且因此可以廣播它們以避免從io接口1310多次讀取,從而每pu周期僅需要4b。因此,用于圖示實(shí)施例的總帶寬需求一次是20b,如圖14b中所示。因此,在圖14b中,在四個(gè)pu周期(1-4)之后,所有pu1300-1303都具有計(jì)算所需的輸入和權(quán)重兩者(在圖示實(shí)施例中總共為128b),因此它們可以執(zhí)行點(diǎn)積運(yùn)算,并且如果神經(jīng)元具有許多輸入,則將結(jié)果與以前的計(jì)算進(jìn)行累積。在一個(gè)實(shí)施例中,只有當(dāng)邏輯神經(jīng)元的最后輸入被處理時(shí),pu1300-1303才將產(chǎn)出結(jié)果發(fā)回到io接口1310。現(xiàn)在轉(zhuǎn)到圖15a-圖15b中所圖示的完全連接的1對(duì)n操作,當(dāng)以許多輸入神經(jīng)元操作時(shí),pu1300-1303可以被配置為映射多個(gè)物理神經(jīng)元中的一個(gè)邏輯神經(jīng)元并且因此更有效率。在這種方法中,每個(gè)pu1300-1303僅計(jì)算邏輯神經(jīng)元的子集,并將部分結(jié)果傳遞到鄰近(contiguous)的pu,其累積它自己的計(jì)算與先前的結(jié)果。因此,神經(jīng)元的最終產(chǎn)出僅在最后的pu中可用。注意,pu1300-1303可以每個(gè)周期計(jì)算不同的邏輯神經(jīng)元。也就是說(shuō),它們需要新的權(quán)重,但是它們不從輸入神經(jīng)元再次取得值,這些值保留在本地鎖存器中以增加數(shù)據(jù)重用。圖15b示出了使用1對(duì)n配置進(jìn)行操作時(shí)如何分布輸入和權(quán)重。像在1對(duì)1情況中那樣,pu1300-1303也可以以其最大頻率的四分之一來(lái)操作。盡管如此,每個(gè)pu周期都不廣播輸入;它們僅在改變輸入神經(jīng)元時(shí)被發(fā)送(例如當(dāng)需要計(jì)算新的層時(shí))。為了避免空閑周期,io接口1310可以預(yù)先發(fā)送針對(duì)接下來(lái)要計(jì)算的邏輯神經(jīng)元的輸入,并且這些值被內(nèi)部鎖存在pu中,直到它們被實(shí)際使用。如圖15b中所示,在單獨(dú)的pu周期中發(fā)送那些輸入,并且與權(quán)重一起,僅由單個(gè)pu消耗。因此,在圖示實(shí)施例中,20b寬的總線足以維持整個(gè)計(jì)算。盡管為了解釋的目的而在上面提供了若干具體架構(gòu)示例,但是本發(fā)明的基本原理可以在包括移動(dòng)設(shè)備(例如,智能電話)、配備有照相機(jī)或麥克風(fēng)的平板計(jì)算機(jī)或可穿戴設(shè)備的各種不同架構(gòu)中實(shí)現(xiàn)。事實(shí)上,這些實(shí)施例可以在任何形式的設(shè)備上實(shí)現(xiàn),以減少機(jī)器學(xué)習(xí)算法的帶寬需求并且改進(jìn)像人工神經(jīng)網(wǎng)絡(luò)(例如卷積神經(jīng)網(wǎng)絡(luò)或深度信念神經(jīng)網(wǎng)絡(luò))的新型計(jì)算機(jī)范例上的能量效率。用于執(zhí)行卷積運(yùn)算的存儲(chǔ)設(shè)備和方法圖像處理在片上系統(tǒng)(soc)架構(gòu)的設(shè)計(jì)中越來(lái)越重要。移動(dòng)設(shè)備中的圖像信號(hào)處理器(isp)負(fù)責(zé)處理越來(lái)越大的圖像并且被期望保持或減少其功率預(yù)算。卷積神經(jīng)網(wǎng)絡(luò)(cnn),由于其在新型人機(jī)接口中的應(yīng)用而獲得興趣的生物學(xué)啟發(fā)算法,也廣泛利用2d卷積。目前,最好的對(duì)象識(shí)別算法利用卷積神經(jīng)網(wǎng)絡(luò)并且已經(jīng)實(shí)現(xiàn)了顯著優(yōu)于以前頂級(jí)(top-performing)算法的識(shí)別率。因?yàn)榫矸e運(yùn)算依賴于數(shù)據(jù)的高度重用,所以它們大大受益于具有專用的記憶裝置。圖16示出了執(zhí)行變化的濾波器大小和多個(gè)存儲(chǔ)器大小的卷積所需的能量。可以看出,所需的能量可以呈數(shù)量級(jí)地減少,特別是對(duì)于所需數(shù)據(jù)在處理單元中不適合的大型濾波器大小。因此,如果存在足夠的面積預(yù)算,則希望在加速器中使用專門(mén)的記憶裝置以便增加總體能量效率。用于這些種類的應(yīng)用的若干加速器在工業(yè)和學(xué)術(shù)界中已經(jīng)提出并且大多數(shù)依賴于用于如圖17a中所圖示的不同類型的數(shù)據(jù)和處理單元的專用存儲(chǔ)區(qū)域1701-1706。然而,如下所討論的,對(duì)于固定量的存儲(chǔ),最佳存儲(chǔ)器映射取決于問(wèn)題類型和大小而改變。因此,具有靜態(tài)存儲(chǔ)器分區(qū)導(dǎo)致次優(yōu)存儲(chǔ)器使用。對(duì)于這個(gè)問(wèn)題的直接解決方案是具有有專用于不同類型數(shù)據(jù)的多個(gè)讀/寫(xiě)端口的統(tǒng)一存儲(chǔ)區(qū)域1710,如圖17b中所示。然而,由存儲(chǔ)器組塊所消耗的面積和能量隨著端口數(shù)量而顯著增加。僅通過(guò)添加一個(gè)額外的端口,陣列面積可以變?yōu)殡p倍并且動(dòng)態(tài)和泄漏能量?jī)烧呖梢栽黾蛹s35%。此外,如果針對(duì)兩種類型的數(shù)據(jù)需要最低服務(wù)質(zhì)量,則應(yīng)將專用互連或虛擬通道分配給每種類型的數(shù)據(jù)。因此,現(xiàn)有加速器的存儲(chǔ)器受到兩個(gè)沖突目標(biāo)的限制。專用存儲(chǔ)器1701-1706是簡(jiǎn)單且能量高效的,但沒(méi)有提供存儲(chǔ)的高效的、可適配的使用。此外,共享存儲(chǔ)器1710可能適于問(wèn)題需求但需要更復(fù)雜和較低效的存儲(chǔ)器陣列和互連。下面描述的本發(fā)明的實(shí)施例包括用于硬件卷積器和神經(jīng)網(wǎng)絡(luò)加速器的暫存器存儲(chǔ)器設(shè)計(jì)。這些實(shí)施例能夠使用簡(jiǎn)單的一個(gè)端口存儲(chǔ)器陣列和共享互連,并且還能夠基于問(wèn)題/應(yīng)用來(lái)適配存儲(chǔ)器分配。圖18a圖示了存儲(chǔ)器組織的一個(gè)實(shí)施例,其中在執(zhí)行集群1800(例如,包括多個(gè)處理單元(pu))內(nèi)執(zhí)行的不同類型的數(shù)據(jù)(例如,輸入圖像和部分結(jié)果)之間共享存儲(chǔ)器組塊1801-1806和互連1811-1816。由于訪問(wèn)模式對(duì)于特定問(wèn)題是公知的,所以在存儲(chǔ)器陣列中不需要標(biāo)簽,從而節(jié)省了大量的面積和能量??梢匀Q于問(wèn)題需求改變專用于每種類型數(shù)據(jù)的存儲(chǔ)百分比,因此優(yōu)化其使用。利用卷積運(yùn)算的規(guī)則訪問(wèn)模式,可以實(shí)現(xiàn)在兩種類型的數(shù)據(jù)之間的獨(dú)立性。圖18b示出了將在其上應(yīng)用濾波器的圖像1820。在卷積的給定周期中,邏輯單元必須具有卷積窗口1821的數(shù)據(jù),其基于要同時(shí)處理的濾波器的實(shí)例的數(shù)量和濾波器大小。這個(gè)卷積窗口1821基于步幅1823并且在卷積行1822內(nèi)在每個(gè)卷積運(yùn)算上向右移動(dòng),直到其到達(dá)圖像1820的邊緣。當(dāng)?shù)竭_(dá)圖像的邊緣時(shí),卷積窗口1821向下移動(dòng)并處理下一個(gè)卷積行。重復(fù)此過(guò)程,直到達(dá)到圖像的末尾。在卷積器的穩(wěn)態(tài)操作上,重用卷積窗口1821的大部分并且只有新的部分需要從存儲(chǔ)器加載。每個(gè)周期需要加載的數(shù)據(jù)取決于問(wèn)題并由卷積窗口1821高度以及由步幅1823確定。為了實(shí)現(xiàn)兩種類型的數(shù)據(jù)的期望的服務(wù)質(zhì)量,本發(fā)明的一個(gè)實(shí)施例使用確保在兩種數(shù)據(jù)類型(通常為輸入數(shù)據(jù)和部分結(jié)果)之間的完全獨(dú)立性的映射。圖19示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的包括多個(gè)組塊1-6的暫存器存儲(chǔ)器1900的操作原理。這個(gè)映射的一個(gè)思想是以如下這樣的方式分配數(shù)據(jù),即,在每個(gè)周期中訪問(wèn)不同的組塊1-6。示出了從t=1到t=4的四個(gè)周期。在圖示的示例中,在t=0訪問(wèn)組塊2;在t=1訪問(wèn)組塊2和3;在t=2訪問(wèn)組塊2-4;并且在t=3訪問(wèn)組塊3-5。一種技術(shù)映射圖像/矩陣的每行,使得它針對(duì)每個(gè)相鄰操作在不同的組塊中開(kāi)始。這樣,如果需要在穩(wěn)態(tài)中讀取n個(gè)元素的列,則可以在一個(gè)周期內(nèi)讀取全部,因?yàn)樗鼈冊(cè)诓煌慕M塊中。該映射也確保了每個(gè)周期我們將訪問(wèn)n個(gè)組塊并且這些組塊將針對(duì)每個(gè)訪問(wèn)而改變。由于以規(guī)則和均勻的方式訪問(wèn)組塊,所以需要存儲(chǔ)的任何部分結(jié)果將在固定和已知的最大時(shí)間之前進(jìn)行。因此,在一個(gè)實(shí)施例中,將部分結(jié)果緩沖在小的輸入緩沖器中,直到它們可以訪問(wèn)它們的目的地地組塊。部分結(jié)果可能停頓(stall)一些周期的事實(shí)不是問(wèn)題,因?yàn)樗鼈儾辉陉P(guān)鍵路徑中。因此,本發(fā)明的一個(gè)實(shí)施例包括用于卷積加速器中的兩種類型的數(shù)據(jù),輸入數(shù)據(jù)和部分結(jié)果,的統(tǒng)一暫存器存儲(chǔ)器1900。在這個(gè)暫存器存儲(chǔ)器中,所有組塊都被分區(qū)成兩個(gè)區(qū)域(輸入數(shù)據(jù)和部分結(jié)果),并且可以取決于問(wèn)題/應(yīng)用而改變專用于每個(gè)數(shù)據(jù)類型的量。共享可用存儲(chǔ)容量允許針對(duì)所有問(wèn)題大小的最優(yōu)使用,這導(dǎo)致每操作的較低帶寬需求和較低能量。本發(fā)明的實(shí)施例還包括一種映射技術(shù),即使在使用僅具有一個(gè)讀/寫(xiě)端口和共享互連的存儲(chǔ)器組塊時(shí),該映射技術(shù)也確保了兩種類型的數(shù)據(jù)的最低服務(wù)質(zhì)量。允許僅具有一個(gè)端口的存儲(chǔ)器組塊的使用減少了暫存器存儲(chǔ)器1900所需的面積和能量。該統(tǒng)一設(shè)計(jì)的一個(gè)優(yōu)點(diǎn)是它實(shí)現(xiàn)了暫存器存儲(chǔ)器1900的可用容量的最佳利用,并且最重要的是,不需要通常需要更多面積并消耗更多功率的多端口存儲(chǔ)器組塊或附加陣列總線。此外,更好的暫存器存儲(chǔ)器利用導(dǎo)致顯著的外部存儲(chǔ)器帶寬降低,以及因此更低的功率和能量消耗。在圖20a中,上部陰影區(qū)域示出了與卷積濾波器的數(shù)量相關(guān)的留著未被使用的典型暫存器存儲(chǔ)器的部分。更清楚的是,具有相等大?。?0:50)的用于輸入數(shù)據(jù)和部分結(jié)果的專用暫存器存儲(chǔ)器的現(xiàn)有設(shè)計(jì)不能有效地利用總可用存儲(chǔ)器區(qū)域。事實(shí)上,如圖20a中所示,對(duì)于在面部檢測(cè)cnn的卷積層1和2中使用的配置參數(shù),靜態(tài)分區(qū)僅分別利用了可用暫存器容量的65%和58%。平均而言,50:50的分割暫存器配置使30%的暫存器存儲(chǔ)器未被使用。相比之下,可以以最佳方式對(duì)圖20b中示出了其結(jié)果的統(tǒng)一暫存器1900動(dòng)態(tài)地進(jìn)行劃分,因此針對(duì)任何給定卷積問(wèn)題配置而實(shí)際上利用暫存器存儲(chǔ)器的整個(gè)容量。注意,靜態(tài)暫存器組織未充分利用可用容量,因?yàn)檩斎霐?shù)據(jù)和部分結(jié)果之間的比取決于濾波器的數(shù)量和大小以及輸入的數(shù)量和維度而顯著變化。通過(guò)比較針對(duì)不同數(shù)量的濾波器(x軸)的底部區(qū)(輸入數(shù)據(jù))和中間區(qū)(部分),可以容易地在圖20a中觀察到這一點(diǎn)。有效利用是重要的,根據(jù)經(jīng)驗(yàn)法則(aruleofthumb),越高的暫存器利用導(dǎo)致對(duì)外部存儲(chǔ)器的越少訪問(wèn)。對(duì)于此的原因是:通常,可用內(nèi)部存儲(chǔ)器不足以將完全的問(wèn)題存儲(chǔ)在本地存儲(chǔ)器內(nèi)(例如,全hd圖像的1個(gè)通道為~2mb)。因此,必須將輸入打破成適當(dāng)大小的分區(qū),以便將輸入數(shù)據(jù)和部分結(jié)果二者適配在暫存器存儲(chǔ)器中。然而,分區(qū)導(dǎo)致從外部存儲(chǔ)器取得輸入數(shù)據(jù)的一部分不止一次。因此,分區(qū)越多,外部存儲(chǔ)器帶寬開(kāi)銷越大。圖21圖示了使用提出的統(tǒng)一暫存器設(shè)計(jì)實(shí)現(xiàn)的對(duì)外部存儲(chǔ)器的訪問(wèn)的減少。對(duì)于給定的總暫存器存儲(chǔ)器大小的益處可能取決于通道和濾波器的數(shù)量而變化。例如,對(duì)于圖20a-圖20b和圖21中使用的面部檢測(cè)cnn的示例,對(duì)于卷積層1和2的配置,外部存儲(chǔ)器訪問(wèn)的減少分別從3.1%變動(dòng)至11.3%。重要的是要注意,隨著我們移向更高清晰度的標(biāo)準(zhǔn),分區(qū)的影響變得甚至更高。例如,對(duì)于4kuhd輸入圖像,外部存儲(chǔ)器訪問(wèn)的減少針對(duì)層1和2而言分別增加至的5.6%和17.7%。更清楚的是,統(tǒng)一設(shè)計(jì)的靈活性是減少外部存儲(chǔ)器訪問(wèn)的能量的關(guān)鍵。事實(shí)上,外部存儲(chǔ)器訪問(wèn)支配著cnn計(jì)算的整個(gè)能量成本,其慮及針對(duì)全套(awidesetof)cnn配置的總能量的95%以上。這些發(fā)現(xiàn)進(jìn)一步強(qiáng)調(diào)了減少冗余的外部存儲(chǔ)器訪問(wèn)的技術(shù)的重要性。最重要的是,本發(fā)明的實(shí)施例在不需要通常需要更多面積并消耗更多功率的多端口存儲(chǔ)器組塊或附加暫存器陣列總線的情況下提供了外部存儲(chǔ)器帶寬的該減少。代之以,下面詳述的機(jī)制使能使用只具有一個(gè)讀/寫(xiě)端口的存儲(chǔ)器組塊,類似于用于通用處理器核中的中間級(jí)別高速緩存(mlc)的高密度存儲(chǔ)器塊。此外,可以使用相同的共享陣列總線來(lái)服務(wù)針對(duì)多個(gè)存儲(chǔ)器塊的讀取和寫(xiě)入請(qǐng)求兩者,這避免專用總線的區(qū)域的過(guò)度增加。然而,使用更簡(jiǎn)單的存儲(chǔ)器陣列需要處理共享總線中的讀/寫(xiě)沖突和專門(mén)的數(shù)據(jù)映射,以保證針對(duì)輸入數(shù)據(jù)和部分結(jié)果二者所需的服務(wù)質(zhì)量。然而,如下所示,可以以直接的方式解決兩個(gè)問(wèn)題而且沒(méi)有顯著的功率和面積成本。本發(fā)明的基本原理可以以多種方式實(shí)現(xiàn),但是一個(gè)特定實(shí)施例中在圖22中示出,其已經(jīng)針對(duì)neuratm加速器,一種用于可穿戴和移動(dòng)設(shè)備的超低功率卷積神經(jīng)網(wǎng)絡(luò)加速器進(jìn)行了開(kāi)發(fā)。在這種情況下,使用通過(guò)32個(gè)總線sab0-sab31連接的具有1個(gè)讀/寫(xiě)端口的4×32個(gè)存儲(chǔ)器組塊2201。每個(gè)總線有4個(gè)組塊(a0-d0,a1-d1等)允許寫(xiě)和讀以最大加速器頻率的1/4操作。圖22中所示的四個(gè)附加結(jié)構(gòu)是輸入多路復(fù)用器(muxi)2202、輸出多路復(fù)用器(muxo)2203、部分寫(xiě)回緩沖器(pwbb)2204和控制單元2205。在一個(gè)實(shí)施例中,muxi2202是多路復(fù)用器的集合,其對(duì)準(zhǔn)出自加速器外部的數(shù)據(jù)并且用于在第一次訪問(wèn)數(shù)據(jù)時(shí)填充暫存器存儲(chǔ)器組塊2201。muxo2203是多路復(fù)用器的另一集合,其對(duì)準(zhǔn)出自內(nèi)部總線并經(jīng)由pu接口2206被發(fā)送到執(zhí)行集群1800的處理單元(pu)的數(shù)據(jù)。在一個(gè)實(shí)施例中,pwbb2204是負(fù)責(zé)在目的地組塊忙時(shí)保持由執(zhí)行集群1800的pu所提供的部分結(jié)果的緩沖器集合。由于最壞情況模式是已知的,所以可以對(duì)這些緩沖器的設(shè)置維度(dimension)以存儲(chǔ)在最壞情況的場(chǎng)景下可以生成的部分的最大數(shù)量。pwbb2204還處理部分寫(xiě)入,并且當(dāng)不同的總線未被用于讀取數(shù)據(jù)時(shí)請(qǐng)求控制單元2205向它們寫(xiě)入。最后,控制單元2205負(fù)責(zé)控制存儲(chǔ)器2201。特別地,控制單元2205的一個(gè)實(shí)施例向多路復(fù)用器2202-2203指示在每個(gè)周期哪些總線sab0-sab31活躍并且向存儲(chǔ)器組塊2201指示何時(shí)開(kāi)始讀或?qū)懖僮饕约霸谀男┚€(line)上開(kāi)始。控制單元2205處理的主要操作是讀數(shù)據(jù)、寫(xiě)數(shù)據(jù)、讀部分和旁路數(shù)據(jù)(例如,當(dāng)數(shù)據(jù)來(lái)自加速器外部時(shí)使用)。它還準(zhǔn)許對(duì)pwbb2204在空閑總線和組塊中寫(xiě)入部分的許可。在一個(gè)實(shí)施例中,針對(duì)每個(gè)組塊2201所執(zhí)行的數(shù)據(jù)映射將前n行用于輸入數(shù)據(jù)(例如,輸入圖像),并且其余的用于部分。部分結(jié)果可以以任何同質(zhì)(homogeneous)的方式,通常按到達(dá)順序,進(jìn)行存儲(chǔ)。存儲(chǔ)輸入數(shù)據(jù),使得在每個(gè)周期中改變被訪問(wèn)的組塊。因?yàn)樵谶@個(gè)實(shí)施例中每個(gè)總線有4個(gè)組塊(ax、bx、cx和dx),所以可以對(duì)圖像進(jìn)行劃分,使得ax組塊存儲(chǔ)偶數(shù)行和列元素,bx組塊存儲(chǔ)奇數(shù)行和偶數(shù)列元素,cx組塊存儲(chǔ)偶數(shù)行和奇數(shù)列元素并且dx組塊存儲(chǔ)奇數(shù)行和列元素。圖23示出了在卷積器中使用的輸入數(shù)據(jù)(圖像)的示例,以及圖24示出了這些元素可以如何在物理存儲(chǔ)器組塊中映射。在圖中可以看到行2的映射(即(2,0)、(2,2)、(2,4))。由于它是偶數(shù)行,所以將它存儲(chǔ)在組塊a和組塊b中,如所圖示的那樣。可以看出,該行在第二a組塊中開(kāi)始(即,a1中示出(2,0)),并且隨后的行在右側(cè)的不同組塊上開(kāi)始。被訪問(wèn)的行的數(shù)量根據(jù)待解決的問(wèn)題(例如,基于濾波器大小、同時(shí)計(jì)算的濾波器的數(shù)量等)而改變。因此,取決于問(wèn)題,需要同時(shí)訪問(wèn)不同數(shù)量的組塊。例如,如果卷積行由6個(gè)圖像行組成,則系統(tǒng)將訪問(wèn)(a0、a1、a2-b0、b1、b2-c0、c1、c2-d0、d1、d2-a1、a2、a3……)。本文描述的存儲(chǔ)器組織支持不同的卷積行大小,其僅需要來(lái)自每個(gè)組塊的一個(gè)元素。因此,該特定實(shí)施例支持在兩個(gè)存儲(chǔ)器周期中訪問(wèn)卷積所需的所有新數(shù)據(jù)??梢匀Q于問(wèn)題需求和功率/面積限制,通過(guò)添加更多專用總線來(lái)選擇所需的周期數(shù)量。上述實(shí)施例的一個(gè)有益方面是數(shù)據(jù)不需要識(shí)別單獨(dú)的標(biāo)簽。由于訪問(wèn)模式是高度規(guī)則的,所以控制單元2205能夠跟蹤不同組塊的索引而不需要標(biāo)簽陣列。不使用標(biāo)簽在面積、功率和延遲方面具有顯著優(yōu)勢(shì),并且提供了比傳統(tǒng)存儲(chǔ)結(jié)構(gòu)顯著改進(jìn)的能量效率。用于低功率加速器的細(xì)粒度存儲(chǔ)接口和方法圖像處理算法由于其在新穎人機(jī)接口中的多種應(yīng)用而獲得興趣,這使得更好的用戶體驗(yàn)成為可能。圖像處理中最重要的運(yùn)算之一是卷積。除其他應(yīng)用之外,卷積廣泛用于將濾波器應(yīng)用于在圖像信號(hào)處理器(isp)中的圖像以及用于卷積神經(jīng)網(wǎng)絡(luò)(cnn)中的圖像識(shí)別。卷積運(yùn)算將數(shù)字的兩個(gè)陣列相乘在一起,數(shù)字的兩個(gè)陣列通常具有不同的大小但具有相同的維度,以產(chǎn)生第三輸出陣列。在圖像處理中,輸入陣列之一是輸入圖像。第二陣列被稱為內(nèi)核,通常比輸入圖像小得多。通過(guò)在圖像上滑動(dòng)內(nèi)核,通常從左上角開(kāi)始,來(lái)執(zhí)行卷積運(yùn)算。每個(gè)內(nèi)核應(yīng)用生成通過(guò)將內(nèi)核的值與基礎(chǔ)子圖像值相乘所計(jì)算出的輸出像素,并將所有結(jié)果相加在一起。在數(shù)學(xué)上,卷積可以被描述為:其中i是輸入圖像、k是內(nèi)核并且o(x,y)表示輸出圖像的坐標(biāo)x、y中的像素。常數(shù)m和n分別是內(nèi)核寬度和高度。圖像處理算法具有非常高的計(jì)算需求,這對(duì)于傳統(tǒng)的低功率劃分而言由于其有限的功率預(yù)算和處理能力而可能是禁止的。為了克服這個(gè)問(wèn)題,許多團(tuán)體最近都在致力于開(kāi)發(fā)被稱為“加速器”的專門(mén)架構(gòu),它提供了好于常規(guī)方法數(shù)量級(jí)的能量效率。這些架構(gòu)通常具有用于執(zhí)行大量并行的乘法和加法的若干處理單元(pu)。圖25示出了用于圖像處理的通用加速器的高級(jí)框圖。pu0-15形成執(zhí)行集群2500。以同步的方式收集和處理來(lái)自pu的輸出,以便產(chǎn)生預(yù)期的結(jié)果。經(jīng)由i/o接口2503將數(shù)據(jù)從存儲(chǔ)器2501傳送到執(zhí)行集群2500或者經(jīng)由i/o接口2503(例如使用點(diǎn)對(duì)點(diǎn)總線)將數(shù)據(jù)從外部接口2502傳送到外部世界。pu通常分組成通過(guò)互連網(wǎng)絡(luò)與存儲(chǔ)器2501和外部接口2502通信的集群。然而,這些架構(gòu)需要巨大的存儲(chǔ)器帶寬以在執(zhí)行卷積時(shí)想所有處理單元進(jìn)行饋送,這減少了系統(tǒng)的整體能量效率并且需要復(fù)雜的存儲(chǔ)器互連的實(shí)現(xiàn)--對(duì)于低功率片上系統(tǒng)(soc)設(shè)計(jì)而言是禁止的需求。目前的設(shè)計(jì)提出了傳統(tǒng)的數(shù)據(jù)高速緩存組織來(lái)減少帶寬需求。在這些設(shè)計(jì)中,將高速緩存結(jié)構(gòu)放置在i/o接口2503和執(zhí)行集群2500之間。然而,這些解決方案并沒(méi)有完全利用卷積運(yùn)算的特性,這導(dǎo)致非最佳的結(jié)果。在這些方法中,每個(gè)處理單元或處理單元的子集單獨(dú)地請(qǐng)求數(shù)據(jù),這需要高數(shù)量的高速緩存讀取端口。事實(shí)上,在類似于圖25中所呈現(xiàn)的加速器的加速器中執(zhí)行16x16步幅1卷積時(shí),為了提供足夠的數(shù)據(jù)需要多達(dá)18個(gè)讀取端口。鑒于存儲(chǔ)器組塊消耗的面積和能量隨著端口數(shù)量的增加而顯著增加(僅僅添加一個(gè)額外的端口,則陣列面積可以加倍,并且動(dòng)態(tài)和泄漏能量?jī)烧叨伎梢栽黾蛹s36%),端口數(shù)量對(duì)于實(shí)現(xiàn)加速器而言是價(jià)格昂貴的。此外,當(dāng)增加處理單元的數(shù)量以更快地執(zhí)行卷積時(shí),這個(gè)問(wèn)題惡化。幸運(yùn)的是,卷積的訪問(wèn)模式是非??深A(yù)測(cè)的,并且它們展現(xiàn)出高的空間和時(shí)間數(shù)據(jù)局部性(locality),這可以被利用來(lái)減少存儲(chǔ)器訪問(wèn)的數(shù)量和所需的讀取端口數(shù)量。本發(fā)明的實(shí)施例包括細(xì)粒度存儲(chǔ)器接口,其允許在具有約束帶寬、面積和功率需求的神經(jīng)網(wǎng)絡(luò)加速器和圖像處理器中非常有效地執(zhí)行卷積。所呈現(xiàn)的實(shí)施例利用新穎的存儲(chǔ)組織和數(shù)據(jù)混洗器(shuffler)機(jī)制,它們協(xié)作工作以向執(zhí)行集群提供圖像數(shù)據(jù),從而將對(duì)較高的高速緩存級(jí)的讀取數(shù)量最小化。該方案利用卷積運(yùn)算的規(guī)則訪問(wèn)模式,并且使能將圖像作為一系列像素列、像素行或兩者的組合進(jìn)行處理,這對(duì)于向處理單元有效地提供數(shù)據(jù)是非常方便的。此外,本發(fā)明的實(shí)施例是模塊化和可擴(kuò)展的,涵蓋了從小濾波器(2x2像素)變動(dòng)到大濾波器(64×64像素)的應(yīng)用的多種多樣的卷積問(wèn)題。所提出的實(shí)施例使能將以卷積運(yùn)算為目標(biāo)的神經(jīng)網(wǎng)絡(luò)加速器和圖像處理集成在低功率和帶寬受限設(shè)備中。這些實(shí)施例的目的是通過(guò)提供足夠的圖像數(shù)據(jù)來(lái)對(duì)所有處理單元進(jìn)行饋送、同時(shí)將存儲(chǔ)器流量保持在合理限制內(nèi)來(lái)非常有效地處理卷積運(yùn)算。這在一個(gè)實(shí)施例中通過(guò)以最方便的方式處理圖像來(lái)執(zhí)行卷積運(yùn)算而實(shí)現(xiàn)。卷積具有非常高的空間和時(shí)間數(shù)據(jù)局部性。內(nèi)核的連續(xù)應(yīng)用共享大量的輸入圖像數(shù)據(jù)。圖26示出了圖像2600,其中4×4像素2601的內(nèi)核以1像素的步幅從左上應(yīng)用到右下角。當(dāng)卷積運(yùn)算開(kāi)始時(shí),將內(nèi)核應(yīng)用在4×4像素2601的正方形圖像區(qū)上。一旦計(jì)算出第一輸出像素,則內(nèi)核向右移位,如圖像中的虛線區(qū)2602所指示的。由于已經(jīng)將其他像素提供給先前的內(nèi)核操作,所以只需要請(qǐng)求表示四行的列的僅僅四個(gè)額外像素就可執(zhí)行該新的操作。此外,當(dāng)內(nèi)核如圖像中的交替虛線區(qū)2603所指示的向下移位時(shí),由于先前已經(jīng)提供了其他像素,所以僅需要四個(gè)像素的單行。傳統(tǒng)的方法將圖像數(shù)據(jù)存儲(chǔ)為連續(xù)的像素行或列,當(dāng)將數(shù)據(jù)存儲(chǔ)為行時(shí),需要多個(gè)存儲(chǔ)器訪問(wèn)以生成列,或者當(dāng)將數(shù)據(jù)存儲(chǔ)為列時(shí),需要多個(gè)存儲(chǔ)器訪問(wèn)以生成行。這些額外的訪問(wèn)顯著增加了存儲(chǔ)器讀取端口的數(shù)量,并且因此增加了加速器和帶寬的總功耗。當(dāng)在加速器中同時(shí)執(zhí)行相同內(nèi)核的多個(gè)實(shí)例時(shí),這惡化了。本發(fā)明的實(shí)施例內(nèi)部地組織圖像以利用數(shù)據(jù)局部性并提供細(xì)粒度訪問(wèn)以便為每個(gè)內(nèi)核應(yīng)用精確地提供所需的像素,從而顯著減少所需端口的數(shù)量。圖27圖示了在與圖25中所呈現(xiàn)的加速器類似的加速器中執(zhí)行不同類型的卷積所需的讀取端口的數(shù)量。卷積配置(內(nèi)核大小和步幅)示出在x軸上,而端口的數(shù)量示出在y軸上。在使用本發(fā)明的實(shí)施例和不使用本發(fā)明的實(shí)施例的情況下(高速緩存+數(shù)據(jù)混洗器對(duì)比傳統(tǒng)高速緩存)對(duì)實(shí)現(xiàn)傳統(tǒng)高速緩存結(jié)構(gòu)的加速器進(jìn)行比較。如可以觀察到的,傳統(tǒng)設(shè)計(jì)中所需的讀取端口的數(shù)量從在步幅2的4×4像素的卷積的情況下的4變動(dòng)到在步幅1的16×16像素的卷積的情況下的18。對(duì)比而言,使用本發(fā)明的實(shí)施例,讀取端口的數(shù)量總是等于1,而與卷積配置無(wú)關(guān)。通過(guò)利用卷積中觀察到的規(guī)則模式并且高度利用在下面詳細(xì)描述的數(shù)據(jù)局部性來(lái)實(shí)現(xiàn)高速緩存讀取端口的數(shù)量的這種急劇減少。如所提及的那樣,本發(fā)明的實(shí)施例使能通過(guò)顯著減少存儲(chǔ)器讀取端口的數(shù)量來(lái)非常有效地在具有約束帶寬、面積和功率需求的圖像處理器和神經(jīng)網(wǎng)絡(luò)加速器中執(zhí)行卷積。這些性質(zhì)通過(guò)以下來(lái)實(shí)現(xiàn):1.基于用于卷積的模式的數(shù)據(jù)組織和編索引。以利用空間和時(shí)間局部性的方式組織數(shù)據(jù)。可以遍歷像素行、像素列或兩者的組合來(lái)處理圖像。對(duì)外部存儲(chǔ)器和/或較高的高速緩存級(jí)的訪問(wèn)次數(shù)低于傳統(tǒng)方法中的次數(shù),這顯著減少了加速器的功耗和帶寬。2.無(wú)標(biāo)簽(tag-less)的存儲(chǔ)組織,這將加速器面積保持在合理的限制內(nèi)。3.分布式數(shù)據(jù)組織,這簡(jiǎn)化了較高的高速緩存級(jí)和處理單元之間的連接。上面提及的性質(zhì)允許本文所述的本發(fā)明的實(shí)施例滿足當(dāng)前soc技術(shù)的物理約束。具有4個(gè)集群的加速器的一個(gè)實(shí)施例的高級(jí)框圖在圖28中示出。本發(fā)明的這個(gè)實(shí)施例包括四個(gè)部件:(1)輸入和分布邏輯2850、(2)容器2800-2803、(3)對(duì)準(zhǔn)邏輯2810-2813和(4)選擇邏輯2820-2823。容器、對(duì)準(zhǔn)邏輯和選擇邏輯部件可以劃分成組,每個(gè)連接到處理單元的不同的集群2830。對(duì)照而言,在一個(gè)實(shí)施例中,輸入和分布邏輯2850由所有集群共享。如所圖示的,四個(gè)部件順序連接。輸入和分布邏輯2850直接連接到容器2800-2803,容器與對(duì)準(zhǔn)邏輯2810-2813連接,并且對(duì)準(zhǔn)邏輯與選擇邏輯2820-2823連接。在一個(gè)實(shí)施例中,所有部件以同步方式工作,并且它們進(jìn)行協(xié)作以同時(shí)為所有處理單元集群2830提供圖像數(shù)據(jù)。輸入和分布邏輯在一個(gè)實(shí)施例中,通過(guò)在整個(gè)原始圖像上應(yīng)用內(nèi)核來(lái)執(zhí)行卷積。處理單元2830進(jìn)行協(xié)作以遍歷圖像,將卷積運(yùn)算應(yīng)用于像素(乘法和加法),并對(duì)結(jié)果進(jìn)行分組以生成最終的輸出圖像。在該過(guò)程中,處理單元的每個(gè)集群2830與來(lái)自輸入圖像的像素子集一起工作。輸入邏輯2850從較高的高速緩存級(jí)得到圖像數(shù)據(jù),并且根據(jù)處理單元的每個(gè)集群的計(jì)算需求來(lái)選擇性地將其廣播到容器2800-2803。事實(shí)上,將像素內(nèi)部存儲(chǔ)在每個(gè)集群的容器中,以用于它們的以后使用。事實(shí)上,該模塊化和可擴(kuò)展的方法允許設(shè)計(jì)覆蓋從小內(nèi)核(2x2像素)變動(dòng)到非常大的內(nèi)核(64x64像素)的多個(gè)卷積配置。容器、對(duì)準(zhǔn)邏輯和選擇邏輯在一個(gè)實(shí)施例中,當(dāng)執(zhí)行卷積時(shí),加速器處理兩種類型的信息:輸入圖像數(shù)據(jù)(像素)和內(nèi)核權(quán)重。將兩種類型的信息都存儲(chǔ)在容器2800-2803中,可以將容器2800-2803實(shí)現(xiàn)為允許并行讀取和寫(xiě)入多個(gè)連續(xù)像素的無(wú)標(biāo)簽存儲(chǔ)單元。在圖29中圖示了容器的一個(gè)實(shí)施例,其包括固定寬度的緩沖器2901的集合和用于處理元素的寫(xiě)入和讀取的簡(jiǎn)單邏輯。特別地,對(duì)緩沖器2901的輸入由應(yīng)用到7b位掩碼移位器2902的寫(xiě)使能信號(hào)(wr_en)來(lái)控制。在一個(gè)實(shí)施例中,由讀使能信號(hào)(rd_en)和寫(xiě)使能信號(hào)(wr_en)控制的計(jì)數(shù)器2904的輸出與如所圖示的寫(xiě)使能信號(hào)一起進(jìn)行“或”(or)運(yùn)算以控制移位器2902。在一個(gè)實(shí)施例中,移位器2902響應(yīng)于移位信號(hào)(init/shift)而移位通過(guò)地址以選擇每個(gè)緩沖器條目(entry)2901。位掩碼移位器2902的輸出選擇寫(xiě)入輸入數(shù)據(jù)的緩沖器條目。盡管總是按順序?qū)懭胂袼兀ㄏ裨趂ifo緩沖器中那樣),但可以隨機(jī)讀取它們。特別地,在一個(gè)實(shí)施例中,多路復(fù)用器2903響應(yīng)于讀取地址信號(hào)(rd_idx)選擇緩沖器條目之一來(lái)輸出(d_out)。在本發(fā)明的一個(gè)實(shí)施例中采用兩種不同類型的容器:用于圖像數(shù)據(jù)的行容器以及用于內(nèi)核權(quán)重的權(quán)重容器。在一個(gè)特定實(shí)施例中,存在48個(gè)行容器和4個(gè)權(quán)重容器,表示總共2048個(gè)字節(jié)。在將圖像像素發(fā)送到執(zhí)行集群之前將圖像像素存儲(chǔ)在行容器中。實(shí)際上,每個(gè)單獨(dú)的行容器存儲(chǔ)單個(gè)圖像行的多個(gè)像素。多個(gè)行容器的聯(lián)合覆蓋原始輸入圖像的一部分。容器使得同時(shí)獲取對(duì)來(lái)自不同行的多個(gè)像素的訪問(wèn)而不需要對(duì)較高的高速緩存級(jí)的多次訪問(wèn)成為可能。在一個(gè)實(shí)施例中,行容器的全集合能夠從n個(gè)不同行提供多達(dá)4個(gè)連續(xù)的像素,其中n是行容器的數(shù)量。為了執(zhí)行卷積以自然的方式存儲(chǔ)數(shù)據(jù),并且可以通過(guò)標(biāo)識(shí)將應(yīng)用操作的行來(lái)訪問(wèn)像素。因此,一個(gè)實(shí)施例的容器不需要標(biāo)簽。在一個(gè)實(shí)施例中,來(lái)自行容器的輸出連接到對(duì)準(zhǔn)邏輯2810-2813,其給出了對(duì)行條目的單獨(dú)像素的訪問(wèn)。對(duì)準(zhǔn)邏輯2810-2813使得應(yīng)用諸如生成圖像列所需的數(shù)據(jù)轉(zhuǎn)置(transpose)之類的簡(jiǎn)單的數(shù)據(jù)變換成為可能。圖30中的表格示出了在本發(fā)明的一個(gè)實(shí)施例中實(shí)現(xiàn)的特定對(duì)準(zhǔn)模式。第一列標(biāo)識(shí)對(duì)準(zhǔn)的類型,而其他列表示給定來(lái)自通用行容器(ox)的內(nèi)容的情況下的對(duì)準(zhǔn)輸出(aox)??梢匀菀椎?cái)U(kuò)展這個(gè)邏輯以支持本發(fā)明的不同實(shí)施例中的其他對(duì)準(zhǔn)。在一個(gè)實(shí)施例中,權(quán)重以與處理單元所預(yù)期的相同格式存儲(chǔ)在存儲(chǔ)器中。因此,權(quán)重容器輸出不需要對(duì)準(zhǔn),并且直接連接到選擇邏輯2820-2823的輸出。在一個(gè)實(shí)施例中,以處理單元對(duì)權(quán)重期望的相同格式在存儲(chǔ)器中存儲(chǔ)權(quán)重。因此,權(quán)重容器輸出不需要對(duì)準(zhǔn)并且直接連接到選擇邏輯2820-2823的輸出。在一個(gè)實(shí)施例中,選擇邏輯2820-2823掌管以準(zhǔn)備由處理單元消耗的格式來(lái)創(chuàng)建輸出數(shù)據(jù)。通常,選擇邏輯2820-2823知道需要從哪些容器取什么數(shù)據(jù),以及需要將其放置在哪里以生成將對(duì)處理單元進(jìn)行饋送的輸出分組。為此,選擇邏輯2820-2823的一個(gè)實(shí)施例從一個(gè)或多個(gè)容器2800-2803讀取對(duì)準(zhǔn)的輸出,并將該信息放置到用于執(zhí)行集群2830的輸出分組中。在本發(fā)明的一個(gè)實(shí)施例中采用的邏輯在圖31中的表格中示出。第一列是指正在考慮的圖像訪問(wèn)模式:行、列或正方形。四個(gè)接下來(lái)的列是指輸出分組。注意,cx是指容器編號(hào)x,并且aox是指位置x中的容器對(duì)準(zhǔn)輸出。如其所示,通過(guò)讀取4b行模式中的單個(gè)容器的四個(gè)對(duì)準(zhǔn)輸出來(lái)生成輸出。在4b列模式下,通過(guò)選擇四個(gè)不同容器的第一對(duì)準(zhǔn)位置來(lái)生成輸出。最后,在4b正方形模式中,通過(guò)選擇兩個(gè)不同容器的前兩個(gè)對(duì)準(zhǔn)位置(例如,2×2像素正方形區(qū))來(lái)生成輸出。這些模式允許以像素行、像素列或兩者的組合遍歷圖像數(shù)據(jù)。這可以非常方便地向執(zhí)行集群2830提供卷積模式,以高度利用在卷積中觀察到的數(shù)據(jù)局部性。圖32圖示了容器2800-2803、對(duì)準(zhǔn)邏輯2810-2813和選擇邏輯2820-2923的一個(gè)實(shí)施例如何互連以產(chǎn)生用于執(zhí)行集群2830的輸出分組3210。多路復(fù)用器3201-3204的每個(gè)集合從來(lái)自對(duì)準(zhǔn)邏輯2810-2813的輸出之一選擇輸出分組3210的一部分。注意,跨不同集群的部件以協(xié)作的方式工作,并且同時(shí)產(chǎn)生輸出分組3210。在從選擇邏輯2820-2823接收到數(shù)據(jù)之后,處理單元以鎖步(lockstep)執(zhí)行。容器2800-2803、對(duì)準(zhǔn)邏輯2810和選擇邏輯2820-2823一起使得以用于執(zhí)行卷積的最方便的方式向所有處理單元提供數(shù)據(jù)成為可能。雖然處理單元的每個(gè)集群2830可能具有不同的數(shù)據(jù)需求,但是這個(gè)邏輯提供數(shù)據(jù)而不對(duì)較高的高速緩存級(jí)進(jìn)行多次訪問(wèn)。將數(shù)據(jù)臨時(shí)存儲(chǔ)在容器2800-2803中,并且對(duì)準(zhǔn)邏輯2810-2813和選擇邏輯2820-2823以靈活的方式提供它以滿足每個(gè)集群2830的需求。例如,圖示實(shí)施例可以同時(shí)提供來(lái)自非連續(xù)行的多個(gè)圖像列,總共僅需要一次存儲(chǔ)器訪問(wèn),而在傳統(tǒng)的高速緩存方案中,這個(gè)操作需要針對(duì)每個(gè)訪問(wèn)行的一個(gè)單個(gè)訪問(wèn)。用于人工神經(jīng)網(wǎng)絡(luò)的可重配置功能單元和方法如上所提及,ann被配置為具有通過(guò)“突觸”連接的神經(jīng)元的互連“神經(jīng)元”層的集合。突觸權(quán)重(或僅權(quán)重)是指兩個(gè)神經(jīng)元之間的連接的強(qiáng)度或幅度,其可以表示為數(shù)值。因此,神經(jīng)元的輸出可以通過(guò)由它們的突觸權(quán)重衡量的來(lái)自前一層的所有輸入神經(jīng)元的相加來(lái)計(jì)算。該計(jì)算的輸出然后通過(guò)激活函數(shù)(af),該激活函數(shù)(af)是一種數(shù)學(xué)函數(shù),它基于神經(jīng)元的加權(quán)輸入來(lái)計(jì)算神經(jīng)元的輸出,如圖33中所示。為了使神經(jīng)網(wǎng)絡(luò)近似或預(yù)測(cè)非線性行為,必須使用非線性激活函數(shù)。雖然sigmoid、有界可調(diào)(rectified)線性和雙曲正切是最常見(jiàn)的函數(shù),但是可以實(shí)現(xiàn)若干非線性函數(shù)。卷積神經(jīng)網(wǎng)絡(luò)(cnn)中的一個(gè)問(wèn)題是選擇什么af。研究表明,不同的af可提供不同的準(zhǔn)確度,并且也可能需要較大或較短的訓(xùn)練時(shí)間。理想地,靈活的硬件設(shè)計(jì)應(yīng)能夠?qū)崿F(xiàn)各種af,每個(gè)af都針對(duì)具體問(wèn)題。在通用cpu上提供的當(dāng)前解決方案提供了靈活性,但是大腦啟發(fā)的算法可能具有非常高的計(jì)算需求,這在傳統(tǒng)低功率劃分中由于有限的功率預(yù)算和處理能力而可能是禁止的。為了克服這個(gè)問(wèn)題,工業(yè)和學(xué)術(shù)界兩者都對(duì)專門(mén)的神經(jīng)形態(tài)架構(gòu)表現(xiàn)出很大的興趣,所述專門(mén)的神經(jīng)形態(tài)架構(gòu)提供了好于常規(guī)方法數(shù)量級(jí)的能量效率。然而,當(dāng)前的神經(jīng)形態(tài)架構(gòu)提供非最優(yōu)的af實(shí)現(xiàn)。例如,許多現(xiàn)有的實(shí)現(xiàn)僅支持一種類型的af,通常是在基準(zhǔn)的巨大的集合上提供最佳結(jié)果的af。例如,所選擇的af對(duì)于面部檢測(cè)問(wèn)題可能是優(yōu)秀的,但對(duì)于語(yǔ)音識(shí)別而言是次最佳的。具有多個(gè)af實(shí)現(xiàn)或者可以被重新配置以提供多個(gè)af實(shí)現(xiàn)的架構(gòu)可以解決這個(gè)問(wèn)題。另一方面,雖然有試圖用可重新配置的af來(lái)實(shí)現(xiàn)神經(jīng)形態(tài)核的一些提議,但是它們使用的方法并不有效。首先,那些現(xiàn)有的實(shí)現(xiàn)使用均勻分割,其不是最佳的,因?yàn)槎蔚拇笮∈茏顗那闆r(例如最小的大小)的限制。此外,函數(shù)中每個(gè)點(diǎn)的計(jì)算由固定值來(lái)近似,這如圖34a中所示可以用簡(jiǎn)單查找表(lut)3400來(lái)實(shí)現(xiàn)。圖34b示出了具有點(diǎn)的示例性sigmoid近似。可替代地,如圖35a中所示,每個(gè)點(diǎn)的計(jì)算可以使用lut3500由具有給定斜率的線段來(lái)近似。圖35b示出了具有線性函數(shù)的示例性sigmoid近似。本發(fā)明的一個(gè)實(shí)施例包括用于計(jì)算神經(jīng)網(wǎng)絡(luò)中的af的優(yōu)化和靈活的微架構(gòu)。如圖36中所圖示的,架構(gòu)的一個(gè)實(shí)施例基于針對(duì)af的特性而優(yōu)化的分段(piecewise)近似單元3603。它還包括支持非均勻函數(shù)分割的多態(tài)解碼器3601以及具有不同線段的參數(shù)的lut3602。如下所討論的,它還可以包括執(zhí)行計(jì)算的附加邏輯。考慮到cnn中使用的af的特性,所提出的解決方案將最小準(zhǔn)確度需求的近似段數(shù)量最小化,同時(shí)還減少了能量。該設(shè)計(jì)可以根據(jù)準(zhǔn)確度需求而容易地縮放,并允許系統(tǒng)在從高性能劃分變動(dòng)到低功率劃分的許多市場(chǎng)劃分中是極高效的。ann可以在常規(guī)架構(gòu)(例如高端處理器)或?qū)iT(mén)的神經(jīng)形態(tài)加速器中執(zhí)行。若干研究已經(jīng)表明,后者提供了好于前者數(shù)量級(jí)的能量效率。因此,它們更適合于功率受限的劃分,如soc或可穿戴設(shè)備。然而,目前的神經(jīng)形態(tài)加速器中的af實(shí)現(xiàn)不是最佳的,在靈活性方面存在顯著的約束(例如,它們僅支持一個(gè)af),或者當(dāng)可重新配置時(shí),它們對(duì)于可接受的準(zhǔn)確度級(jí)別不是高效的,因?yàn)樗鼈兪褂眯枰髄ut塊的具有均勻量化的簡(jiǎn)單點(diǎn)近似(參見(jiàn)圖34a);或者需要較小lut塊但需要較大算術(shù)單元(乘法器和加法器)的具有均勻量化的分段近似(參見(jiàn)圖35a)。本文描述的本發(fā)明的實(shí)施例克服了這些限制,并且能夠利用小lut和合理大小的算術(shù)單元來(lái)提供高準(zhǔn)確度和效率兩者。為了圖示這些問(wèn)題,表格1示出了對(duì)于固定點(diǎn)[s2.7]表示和固定最大誤差2-7在當(dāng)前解決方案(a和b)中和在本發(fā)明的實(shí)施例中所需的lut條目的數(shù)量。這被確定為面部檢測(cè)cnn實(shí)現(xiàn)中的最小可接受誤差。表格中的前三行示出了支持三個(gè)類型的af中的每個(gè)所需的lut條目的數(shù)量。最后一行示出了針對(duì)支持所有三個(gè)af的可重新配置的解決方案所需的條目的數(shù)量。對(duì)于2-7的固定誤差,c只需要相比于b的50%的條目以及相比于a的3.1%的條目。afa-均勻(點(diǎn))b-均勻(分段)c-本發(fā)明的實(shí)施例雙曲正切5123216sigmoid2561616有界relu51244全部5123216表格1。表格2示出了當(dāng)針對(duì)所有實(shí)現(xiàn)類型考慮相同數(shù)量的lut條目(16)(即,對(duì)于面積和功耗施加限制的情況)時(shí),誤差如何變化。afa-均勻(點(diǎn))b-均勻(分段)c-提出的技術(shù)方案雙曲正切2-32-62-7sigmoid2-42-72-7有界relu2-22-72-7表格2。此外,對(duì)于算術(shù)計(jì)算,本發(fā)明的實(shí)施例僅需要移位器而不是在分段近似解決方案中通常使用的乘法器,因此也減少了功率和面積需求。本發(fā)明的實(shí)施例包括微架構(gòu),所述微架構(gòu)被優(yōu)化以用于有效地近似ann中通常使用的激活函數(shù),即雙曲正切、sigmoid和有界relu。然而,微架構(gòu)足夠靈活以支持其他函數(shù),只要它們共享在ann中使用的af中通常發(fā)現(xiàn)的共同特性,其他函數(shù)即限于原點(diǎn)附近的輸入改變以及對(duì)原點(diǎn)附近的輸入改變更敏感的函數(shù)。所提出的設(shè)計(jì)是基于使用線性函數(shù)的分段近似的原理。此外,在一個(gè)實(shí)施例中,每個(gè)線段是等式(1)中所示的類型:激活函數(shù)單元概述激活函數(shù)(af)單元的一個(gè)實(shí)施例包括圖36中所示的三個(gè)主要部件:(a)多態(tài)解碼器3601、(b)lut3602和(c)分段插值近似單元3603。在一個(gè)實(shí)施例中,多態(tài)解碼器3601將每個(gè)輸入x映射到橫坐標(biāo)空間中的范圍,并且利用所考慮的激活函數(shù)在原點(diǎn)附近需要較多精確度(即較小的量化間隔),并且對(duì)于較大的|x|需要較少精確度的事實(shí)(見(jiàn)圖37a)。該特性對(duì)于用于對(duì)存在于神經(jīng)元的響應(yīng)中的非線性建模的激活函數(shù)是常見(jiàn)的。因此,如果我們將輸入量化間隔的固定初始集合考慮為圖37a中所示的那些,則多態(tài)解碼器3601可以被配置為選擇間隔的較小的非均勻子集,諸如圖37b中所示的那些(如粗線所指示的)。該方法支持根據(jù)近似激活函數(shù)的特性的輸入x與存儲(chǔ)在lut2602中的分段線段的索引之間的有效且靈活的變換。因此,針對(duì)給定函數(shù)所選擇的間隔與其特性相關(guān)。在一個(gè)實(shí)施例中,lut單元3602是存儲(chǔ)線性插值段的參數(shù)的部件。如所圖示的,它使用多態(tài)解碼器3601的結(jié)果作為輸入。對(duì)于給定的線段,存儲(chǔ)在lut3602中的參數(shù)由分段插值近似單元3603用于根據(jù)上述等式(1)來(lái)計(jì)算最終結(jié)果。方法概述根據(jù)本發(fā)明的一個(gè)實(shí)施例實(shí)現(xiàn)以下方法。首先,使用任何分段近似算法將所考慮的激活函數(shù)分為線段,所述任何分段近似算法保證:(1)最大誤差和(2)所有斜率都遵守規(guī)則為了圖示的目的,圖38中示出了具有最大誤差為2-5和5個(gè)線段的sigmoid函數(shù)的示例。將對(duì)于不同線段而離線獲得的參數(shù)存儲(chǔ)到lut單元3602中,并且根據(jù)相應(yīng)的x范圍配置多態(tài)解碼器3601。由于可以控制最大誤差,并且由于所需的線段的數(shù)量取決于誤差本身(參見(jiàn)表格1和2),因此可能使用針對(duì)近似計(jì)算解決方案的這個(gè)方法,其中,根據(jù)目標(biāo)誤差,重新調(diào)整lut3602中的條目的數(shù)量以節(jié)省額外的功率(例如,使用時(shí)鐘門(mén)控)。另外,可以將af單元并入神經(jīng)形成加速器1230的處理單元中,諸如圖12a-圖12b中所圖示的加速器。此外,為了利用單元的可配置能力,以下機(jī)制可能暴露給軟件:(1)根據(jù)目標(biāo)函數(shù)將近似參數(shù)加載到lut3602中的機(jī)制。可以通過(guò)諸如“l(fā)oadm(rx)->af”的指令來(lái)暴露該機(jī)制。(2)如果支持多個(gè)af(例如通過(guò)使用影子寄存器或支持復(fù)制寄存器狀態(tài)的其他類型的實(shí)施例),則實(shí)施附加指令以在不同af之間切換,例如“switchafafid?!?。一個(gè)示例性實(shí)施例圖39中圖示了一個(gè)示例性實(shí)施例,其還包括多態(tài)解碼器3902和lut3903。模x塊(|x|)3901利用了雙曲和sigmoid函數(shù)具有一些對(duì)稱性以進(jìn)一步將lut條目數(shù)減半(halve)的事實(shí)。如上面所提及的,lut3902維持af線性分割所需的不同參數(shù)。在這種情況下,有6個(gè)參數(shù)。分段近似算術(shù)單元的一個(gè)實(shí)施例包括執(zhí)行指定功能的以下部件:(i)sgn(x)塊3910--x的符號(hào)用于選擇偏移參數(shù)(α),當(dāng)β=0(z)時(shí)為零參數(shù),(參見(jiàn)上面的等式(1)),以及調(diào)整y的最終符號(hào)。數(shù)學(xué)上我們有:(ii)移位器塊3911--移位器塊用于計(jì)算β=2t。當(dāng)移位時(shí),可能發(fā)生一些精度損失。本發(fā)明的一個(gè)實(shí)施例以兩種方式減少了該損失:(1)當(dāng)右移位時(shí),將lsb作為保護(hù)位存儲(chǔ)并用作加法中的進(jìn)位(carry-in);和(2)取決于“α”和“t”,編程器可以配置算術(shù)單元以兩種方式計(jì)算等式(1):或第一種情況,其中第二種情況可以用來(lái)避免在加法發(fā)生之前右移位。(iii)加法器塊3912--最后,加法器塊用于執(zhí)行加法。圖40中示出了多態(tài)解碼器3902的可能實(shí)施例。它由小lut4001、4002、4003的組組成,如圖37a中所示,所述組對(duì)函數(shù)x范圍的不同段提供可變精度間隔。然后可以將lut條目配置為將x個(gè)間隔映射到某個(gè)分段段。具有固定精度[s2.7]的輸入x和[s0.7]的輸出y以及對(duì)于具有最大誤差為2-7的sigmoid、有界可調(diào)線性和雙曲正切函數(shù)的支持的af單元的實(shí)施例將需要具有16個(gè)條目的lut和具有2個(gè)lut的多態(tài)解碼器,一個(gè)具有25×4位并且第二個(gè)具有24×4位。在前面的說(shuō)明書(shū)中,已經(jīng)參照本發(fā)明的特定示例性實(shí)施例描述了本發(fā)明。然而,清楚的是,在不脫離如所附權(quán)利要求中闡述的本發(fā)明的更廣泛的精神和范圍的情況下,可以對(duì)其進(jìn)行各種修改和改變。因此,說(shuō)明書(shū)和附圖被認(rèn)為是說(shuō)明性的而不是限制性的。本發(fā)明的實(shí)施例可以包括上面已經(jīng)描述的各種步驟。這些步驟可以體現(xiàn)在機(jī)器可執(zhí)行指令中,所述機(jī)器可執(zhí)行指令可以用于使通用或?qū)S锰幚砥鲌?zhí)行步驟??商娲?,這些步驟可以由包含用于執(zhí)行步驟的硬連線邏輯的特定硬件部件或由編程的計(jì)算機(jī)部件和定制硬件部件的任何組合來(lái)執(zhí)行。如本文所述,指令可以指代被配置為執(zhí)行某些操作或具有存儲(chǔ)在體現(xiàn)在非臨時(shí)計(jì)算機(jī)可讀介質(zhì)中的存儲(chǔ)器中的預(yù)定功能或軟件指令的硬件的特定配置,諸如專用集成電路(asic)。因此,圖中所示的技術(shù)可以使用在一個(gè)或多個(gè)電子設(shè)備(例如,終端站、網(wǎng)絡(luò)元件等)上存儲(chǔ)和執(zhí)行的代碼和數(shù)據(jù)來(lái)實(shí)現(xiàn)。這樣的電子設(shè)備使用諸如非臨時(shí)計(jì)算機(jī)機(jī)器可讀存儲(chǔ)介質(zhì)(例如,磁盤(pán);光盤(pán);隨機(jī)存取存儲(chǔ)器;只讀存儲(chǔ)器;閃速存儲(chǔ)設(shè)備;相變存儲(chǔ)器)和臨時(shí)計(jì)算機(jī)機(jī)器可讀通信介質(zhì)(例如,電、光、聲或其他形式的傳播信號(hào)-諸如載波、紅外信號(hào)、數(shù)字信號(hào)等)之類的計(jì)算機(jī)機(jī)器可讀介質(zhì)來(lái)存儲(chǔ)和(內(nèi)部地和/或通過(guò)網(wǎng)絡(luò)與其他電子設(shè)備)傳送代碼和數(shù)據(jù)。此外,這樣的電子設(shè)備通常包括耦合到一個(gè)或多個(gè)其他部件的一個(gè)或多個(gè)處理器的集合,所述一個(gè)或多個(gè)其他部件諸如是一個(gè)或多個(gè)存儲(chǔ)設(shè)備(非臨時(shí)性機(jī)器可讀存儲(chǔ)介質(zhì))、用戶輸入/輸出設(shè)備(例如鍵盤(pán)、觸摸屏和/或顯示器)和網(wǎng)絡(luò)連接。處理器集合和其他部件的耦合通常通過(guò)一個(gè)或多個(gè)總線和橋(也稱為總線控制器)。攜帶網(wǎng)絡(luò)流量的存儲(chǔ)設(shè)備和信號(hào)分別表示一個(gè)或多個(gè)機(jī)器可讀存儲(chǔ)介質(zhì)和機(jī)器可讀通信介質(zhì)。因此,給定電子設(shè)備的存儲(chǔ)設(shè)備通常存儲(chǔ)用于在該電子設(shè)備的一個(gè)或多個(gè)處理器的集合上執(zhí)行的代碼和/或數(shù)據(jù)。當(dāng)然,可以使用軟件、固件和/或硬件的不同組合來(lái)實(shí)現(xiàn)本發(fā)明的實(shí)施例的一個(gè)或多個(gè)部分。貫穿該具體實(shí)施方式,出于解釋的目的,闡述了許多具體細(xì)節(jié)以便提供對(duì)本發(fā)明的透徹理解。然而,對(duì)于本領(lǐng)域技術(shù)人員清楚的是,可以在沒(méi)有這些具體細(xì)節(jié)中的一些的情況下實(shí)踐本發(fā)明。在某些情況下,為了避免模糊本發(fā)明的主題,未以詳細(xì)的細(xì)節(jié)描述公知的結(jié)構(gòu)和功能。因此,本發(fā)明的范圍和精神應(yīng)根據(jù)以下權(quán)利要求來(lái)判斷。當(dāng)前第1頁(yè)12