国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      用于分組發(fā)送的優(yōu)化的信用返回機(jī)制的制作方法

      文檔序號:11142243閱讀:350來源:國知局
      用于分組發(fā)送的優(yōu)化的信用返回機(jī)制的制造方法與工藝
      近年來,對高性能計(jì)算(HPC)的使用和興趣已出現(xiàn)大幅增長。過去,HPC通常與所謂的“超級計(jì)算機(jī)”相關(guān)聯(lián)。超級計(jì)算機(jī)在20世紀(jì)60年代被引入,最初以及幾十年來主要由SeymourCray在以SeymourCray的名字或首字母縮寫命名的控制數(shù)據(jù)公司(CDC)、Cray研究所以及隨后的多個(gè)公司制造。雖然20世紀(jì)70年代的超級計(jì)算機(jī)僅使用幾個(gè)處理器,但在20世紀(jì)90年代,具有數(shù)千個(gè)處理器的機(jī)器開始出現(xiàn),并且近來已經(jīng)實(shí)現(xiàn)具有數(shù)十萬個(gè)“現(xiàn)成”的處理器的大規(guī)模并行超級計(jì)算機(jī)。存在許多類型的HPC架構(gòu),這些HPC架構(gòu)以不同級別的規(guī)模和性能來實(shí)現(xiàn)并進(jìn)行研究導(dǎo)向。然而,常見的思路在于,諸如處理器和/或處理器核之類的大量計(jì)算單元的互連來以并行的方式協(xié)作地執(zhí)行任務(wù)。根據(jù)近來的芯片上系統(tǒng)(SoC)設(shè)計(jì)和提案,使用二維(2D)陣列、三維環(huán)(torus)、環(huán)或其他配置在單個(gè)SoC上實(shí)現(xiàn)大量的處理器核等。此外,研究人員已經(jīng)提出了3DSoC,在3DsoC下,100個(gè)或甚至1000個(gè)處理器核以3D陣列互連。在多個(gè)服務(wù)器板上的多個(gè)分開的多核處理器和SoC也可以緊密地間隔,多個(gè)服務(wù)器板又經(jīng)由背板等通信地互連。另一常見的方法是在服務(wù)器的機(jī)架(例如,刀片服務(wù)器和模塊)中互連多個(gè)計(jì)算單元。一度聲稱是世界上最快的超級計(jì)算機(jī)的IBMSequoia(紅杉)包括總計(jì)1572864個(gè)核的服務(wù)器刀片/模塊的96個(gè)機(jī)架,并且當(dāng)在峰值性能下操作時(shí)消耗巨額的7.9兆瓦。HPC的性能瓶頸之一是由在計(jì)算節(jié)點(diǎn)之間的多個(gè)互連上傳送數(shù)據(jù)引起的等待時(shí)間(latency)。典型地,這些互連以互連層次結(jié)構(gòu)來構(gòu)造,處理器/SoC內(nèi)的最高速且最短的互連在此層次結(jié)構(gòu)的頂部,而等待時(shí)間隨著沿層次結(jié)構(gòu)級別向下進(jìn)展而增加。例如,在處理器/SoC級別之后,互連層次結(jié)構(gòu)可包括處理器間的互連級別、板間的互連級別、以及將單獨(dú)的服務(wù)器或單獨(dú)服務(wù)器的聚合與其他機(jī)架中的服務(wù)器/聚合連接的一個(gè)或多個(gè)附加的級別。最近,已引進(jìn)了具有100千兆位/秒(100Gb/s)速度的互連鏈路,諸如,在IEEE802.3bj草案標(biāo)準(zhǔn)中所指定,其定義了用于在背板和銅纜線上的100Gb/s操作的物理層(PHY)規(guī)范和管理參數(shù)。正在為HPC環(huán)境開發(fā)和設(shè)計(jì)包括具有類似速度(類似于100Gb/s)的鏈路的網(wǎng)格狀互連結(jié)構(gòu)。此類高速鏈路和互連的可用性將性能限制從結(jié)構(gòu)移至分組的軟件生成以及對往、返于互連而傳送的分組數(shù)據(jù)的處置。附圖說明隨著通過在結(jié)合所附附圖時(shí)參考以下具體實(shí)施方式使本發(fā)明的前述多個(gè)方面和許多伴隨的優(yōu)點(diǎn)變得更好地被理解,本發(fā)明的前述多個(gè)方面和許多伴隨的優(yōu)點(diǎn)將更容易領(lǐng)會,其中,遍及各個(gè)視圖,除非另外指定,否則相同的參考編號指相同的部件:圖1是根據(jù)一個(gè)實(shí)施例的包括主機(jī)結(jié)構(gòu)接口(HFI)的系統(tǒng)的示意圖;圖2是根據(jù)一個(gè)實(shí)施例的、示出PIO發(fā)送存儲器和SDMA存儲器的各方面的示意圖;圖3是示出PIO發(fā)送物理地址空間的示例的框圖;圖4是示出在虛擬地址空間、設(shè)備物理地址空間與PIO發(fā)送存儲器地址空間之間的示例性地址映射的框圖;圖5是示出根據(jù)一個(gè)實(shí)施例的發(fā)送緩沖區(qū)的布局的框圖;圖6a是示出圖1的系統(tǒng)的選擇性元件的進(jìn)一步細(xì)節(jié)的示意圖;圖6b是示出被寫入到存儲緩沖器且被轉(zhuǎn)發(fā)至PIO發(fā)送存儲器中的發(fā)射緩沖器的兩個(gè)分組數(shù)據(jù)塊的示意圖;圖7a-7f是示出發(fā)送時(shí)間幀的示意圖,所述發(fā)送時(shí)間幀對應(yīng)于分組數(shù)據(jù)通過分組出口從存儲器至PIO發(fā)送存儲器的示例性傳送;圖8a-8e是示出發(fā)送時(shí)間幀的示意圖,所述發(fā)送時(shí)間幀對應(yīng)于分組數(shù)據(jù)使用512位寫入指令從存儲器至PIO發(fā)送存儲器的示例性傳送;圖9a和圖9b是分別示出具有和不具有sfence(存儲屏障)的PIO發(fā)送寫入的數(shù)據(jù)傳送等待時(shí)間的比較的時(shí)間流圖;圖10是根據(jù)一個(gè)實(shí)施例的出口塊的示意圖;圖11是示出在準(zhǔn)備供向外流出到耦合至HFI的結(jié)構(gòu)鏈路上的分組數(shù)據(jù)時(shí)實(shí)現(xiàn)的操作、階段和狀態(tài)的流程圖;圖12是示出根據(jù)一個(gè)實(shí)施例的PIO發(fā)送地址FIFO和信用返回FIFO的示圖;圖13是根據(jù)一個(gè)實(shí)施例的包括HFI的系統(tǒng)節(jié)點(diǎn)的示意圖;圖14是包括兩個(gè)HFI的ASIC的示意圖。具體實(shí)施方式本文中描述用于實(shí)現(xiàn)用于分組發(fā)送的優(yōu)化的信用返回機(jī)制的方法和裝置的實(shí)施例。在以下描述中,闡述了許多具體細(xì)節(jié)以提供對本發(fā)明的實(shí)施例的透徹理解。然而,本領(lǐng)域技術(shù)人員將認(rèn)識到,可不利用特定的細(xì)節(jié)中的一個(gè)或多個(gè)或利用其他方法、部件、材料等來實(shí)踐本發(fā)明。在其他實(shí)例中,未詳細(xì)地示出或描述公知的結(jié)構(gòu)、材料或操作以避免使本發(fā)明的多個(gè)方面含糊。為了清晰起見,也可以附圖中部件的標(biāo)簽而不是以特定的附圖標(biāo)記來引用本文中附圖中的各個(gè)部件。此外,能以后面跟隨“(typ)”(意思是“典型的”)的附圖標(biāo)記示出指示特定類型的部件(與特定部件相對)的附圖標(biāo)記。將理解,這些部件的配置將是在附圖中示出、但出于簡潔和清楚的目的未標(biāo)記的典型的或類似的部件。相反,“typ"不應(yīng)理解為意指該部件、元件等典型地用于它的所公開的功能、實(shí)現(xiàn)、目的,等等。圖1示出本文中用于說明分組數(shù)據(jù)數(shù)據(jù)處置技術(shù)的多個(gè)方面的示例性系統(tǒng)100,所述分組數(shù)據(jù)處置技術(shù)促進(jìn)系統(tǒng)存儲器與結(jié)構(gòu)接口之間增加的分組數(shù)據(jù)吞吐量。系統(tǒng)100包括主機(jī)結(jié)構(gòu)接口(HFI)102,所述HFI102經(jīng)由外圍組件網(wǎng)際快速(PCIe)互連105而耦合至主機(jī)處理器104,所述主機(jī)處理器104又經(jīng)由存儲器互連107而耦接至存儲器106(它通常也被稱為系統(tǒng)存儲器)。HFI102包括耦合至結(jié)構(gòu)端口112的發(fā)射端口110的發(fā)射引擎108以及耦合至結(jié)構(gòu)端口112的接收端口116的接收引擎114。發(fā)射引擎108和接收引擎114中的每一個(gè)也都耦合至PCIe接口(I/F)118,所述PCIe接口118經(jīng)由PCIe互連105促進(jìn)HFI102與處理器104之間的通信。發(fā)射引擎108包括:發(fā)送存儲器120;發(fā)送直接存儲器訪問(發(fā)送DMA)塊122,其包括多個(gè)發(fā)送DMA(SDMA)引擎123;緩沖器124;出口塊126;以及信用返回機(jī)制127。接收引擎114包括Rx接收塊128、接收緩沖器130、DMA引擎132、中央控制引擎(CCE)134、解析器136、流水線塊的集合138以及接收寄存器陣列(Rcv陣列)140。發(fā)射引擎108(也稱為“發(fā)送”引擎)生成用于流出到結(jié)構(gòu)鏈路(例如,耦合至發(fā)射端口110的結(jié)構(gòu)鏈路,未示出)的分組。由發(fā)送引擎提供的兩種不同的機(jī)制是PIO發(fā)送和發(fā)送DMA。PIO發(fā)送是“經(jīng)編程的輸入輸出(ProgrammedInput/Output)”發(fā)送的簡稱。PIO也為一些人所知為“存儲器映射的輸入/輸出”(MMIO)。對于PIO發(fā)送,主機(jī)處理器104通過使用存儲指令將分組的頭部和有效載荷寫入到存儲器映射的發(fā)送緩沖器來生成分組。處理器將分組推入(push)到HFI102,從這個(gè)意義上而言,PIO發(fā)送可視為分組“推入”。在發(fā)送存儲器120中實(shí)現(xiàn)的發(fā)送緩沖器在適配器的物理地址空間中,使得對發(fā)送緩沖器的處理器寫入轉(zhuǎn)換為通過PCIe互連105和PCIe接口118被傳送至發(fā)送存儲器120的PCIe寫入事務(wù)。發(fā)送存儲器120中的多個(gè)發(fā)送緩沖器加上用于將發(fā)送緩沖器信用往回返回至主機(jī)處理器104的機(jī)制被稱為“發(fā)送上下文”。在一個(gè)實(shí)施例中,由HFI102提供多達(dá)160個(gè)獨(dú)立的發(fā)送上下文,從而允許PIO發(fā)送機(jī)制的多達(dá)160個(gè)并發(fā)的獨(dú)立用戶。通過直接將發(fā)送上下文映射至用戶進(jìn)程的虛擬地址映射中,可直接從用戶模式軟件來使用PIO發(fā)送。PIO發(fā)送提供非常低的開銷發(fā)送機(jī)制,該開銷發(fā)送機(jī)制給所發(fā)送分組帶來低等待時(shí)間和高消息速率。在適當(dāng)?shù)那闆r下,使用主機(jī)處理器104的寫入-組合和存儲緩沖器特征,以便將較小的寫入聚合為PCIe互連和接口上的64B(字節(jié))寫入以改善帶寬。由于主機(jī)處理器104涉及將分組字節(jié)寫入到發(fā)送緩沖器(本質(zhì)上為存儲器復(fù)制),因此PIO發(fā)送機(jī)制是處理器密集型的(processorintensive)。這些性能特性使得為小至中尺寸的消息進(jìn)行PIO發(fā)送高度優(yōu)化。發(fā)送直接存儲器訪問(縮寫為發(fā)送DMA或SDMA)消除了處理器存儲器復(fù)制,使得能以顯著更低的處理器利用率將分組發(fā)送到發(fā)射引擎108。與在PIO發(fā)送機(jī)制中使用處理器寫入將分組推入HFI102不同,發(fā)送DMA塊122中的SDMA引擎123直接從主機(jī)存儲器106拉出(pull)分組頭部和有效載荷以形成流出到結(jié)構(gòu)鏈路的分組。在一個(gè)實(shí)施例中,發(fā)送DMA塊122支持16個(gè)獨(dú)立的SDMA引擎123,并且每一個(gè)SDMA引擎123都與其自身的SDMA隊(duì)列相關(guān)聯(lián)。發(fā)送PIO和SDMA兩者都使用存儲和轉(zhuǎn)發(fā)方法來發(fā)送分組。在分組能夠開始從出口發(fā)出到鏈路之前,頭部和有效載荷必須由發(fā)射引擎108上的發(fā)送緩沖器完全接收。為此目的,在HFI102上提供發(fā)送緩沖器存儲器,并且為發(fā)送PIO以及為SDMA提供分開的發(fā)送緩沖器存儲器,如在圖1中示出為發(fā)送存儲器120和SDMA緩沖器124。在一個(gè)實(shí)施例中,此分區(qū)操作(partitioning)被硬連線到HFI設(shè)計(jì)中,并且不是軟件可配置的。然而,可在軟件控制下、以發(fā)送緩沖器信用的粒度將用于發(fā)送PIO的發(fā)送存儲器120指派給發(fā)送上下文。類似地,能以相同的粒度將SDMA緩沖器124中的發(fā)送緩沖器存儲器指派給SDMA引擎123。接收引擎114的基本功能是:將(從結(jié)構(gòu))傳入的分組的頭部和有效載荷分開,在接收端口116處接收,并且將分組頭部和有效載荷數(shù)據(jù)寫入到主機(jī)存儲器106中。在一個(gè)實(shí)施例中,去往HFI102的分組數(shù)據(jù)作為包括在接收端口116處接收的“微片”的數(shù)據(jù)單元的流(微片流)、經(jīng)由結(jié)構(gòu)的鏈路被傳送,其中,微片重新組裝為分組,隨后,所述分組被轉(zhuǎn)發(fā)至接收引擎114。傳入分組數(shù)據(jù)首先在Rx接收塊128處經(jīng)處理,在Rx接收塊128處,提取并校驗(yàn)分組的頭部中的各種字段以確定分組的類型。分組數(shù)據(jù)(其數(shù)據(jù)有效載荷)在接收緩沖器130處經(jīng)緩沖,同時(shí)分組頭部被轉(zhuǎn)發(fā)至解析器136,所述解析器136解析頭部數(shù)據(jù)以提取此頭部數(shù)據(jù)的目的地地址和其他字段數(shù)據(jù),并且進(jìn)一步的操作由流水線操作138執(zhí)行。結(jié)合適用的流水線操作,分組數(shù)據(jù)從接收緩沖器130被讀取,并經(jīng)由DMA引擎132被轉(zhuǎn)發(fā),所述DMA引擎132配置成用于經(jīng)由PCIeDMA寫入來將分組數(shù)據(jù)轉(zhuǎn)發(fā)至存儲器106。圖1進(jìn)一步描述用于示出由CLK1(時(shí)鐘1)和CLK2(時(shí)鐘2)描繪的兩個(gè)時(shí)鐘域的使用的豎直虛線146。在一些實(shí)施例中,用于PCIe接口118的時(shí)鐘頻率可與用于HFI組件的其余部分的時(shí)鐘頻率不同,并且單獨(dú)的參考時(shí)鐘用于每一個(gè)時(shí)鐘域。盡管沒有示出,但是在發(fā)射端口110和接收端口116內(nèi)使用的時(shí)鐘域也可與由發(fā)射引擎108和接收引擎114采用的時(shí)鐘域分開。圖2示出發(fā)送PIO操作和SDMA操作的進(jìn)一步的細(xì)節(jié)。如圖所示,可結(jié)合發(fā)送PIO分組數(shù)據(jù)采用多達(dá)160個(gè)發(fā)送上下文。每一個(gè)發(fā)送上下文都包括分配給那個(gè)發(fā)送上下文的PIO發(fā)送存儲器120的連續(xù)片段。因此,用于發(fā)送上下文的發(fā)送緩沖器在主機(jī)物理地址空間中將是連續(xù)的。此發(fā)送緩沖器至用戶進(jìn)程的用戶虛擬地址空間的正常映射也將典型地是實(shí)質(zhì)上連續(xù)的。在一個(gè)實(shí)施例中,發(fā)送緩沖器中的發(fā)送塊包括64B塊,使得每一個(gè)發(fā)送上下文包括nx64B,其中n是>0的整數(shù)。在一個(gè)實(shí)施例中,發(fā)送塊在64B邊界上對齊,但是沒有附加的對齊約束施加于發(fā)送緩沖器指派。在一個(gè)實(shí)施例中,為發(fā)送上下文分配的發(fā)送緩沖器的尺寸具有限值。例如,在一個(gè)實(shí)施例中,PIO發(fā)送存儲器120的尺寸為1MB(1048576字節(jié)),并且最大發(fā)送緩沖器尺寸為64KB(n=1024)。在一個(gè)實(shí)施例中,主機(jī)處理器104采用使用4KB頁粒度的存儲器分頁。然而,至主機(jī)虛擬地址空間的發(fā)送緩沖器存儲器映射不必以4KB頁粒度進(jìn)行。此架構(gòu)選擇意味著,當(dāng)發(fā)送緩沖器處于64B粒度時(shí),主機(jī)處理器的4KB分頁機(jī)制不足以在兩個(gè)發(fā)送上下文之間提供保護(hù)。由HFI102使用基址偏移和每個(gè)發(fā)送上下文的界限來實(shí)現(xiàn)簡單的地址空間重新映射。這通過以下方式實(shí)現(xiàn):將發(fā)送上下文號包括在用于訪問用于特定上下文的發(fā)送緩沖器的物理地址中。由此,發(fā)送上下文號被包括在驅(qū)動器為用戶進(jìn)程設(shè)置的映射的物理地址中。HFI102在對發(fā)送緩沖器的寫入時(shí)使用此信息來標(biāo)識正在被寫入的發(fā)送上下文,并且使用那個(gè)值來查找那個(gè)發(fā)送上下文的信息,以便驗(yàn)證發(fā)送上下文具有對發(fā)送緩沖器存儲器內(nèi)的那個(gè)特定發(fā)送塊的訪問權(quán),且隨后將地址重新映射至到發(fā)送緩沖器存儲器的索引。此方法允許每一個(gè)發(fā)送緩沖器的起始對齊至HFI的地址空間的4KB頁,但仍以64B粒度共享發(fā)送緩沖器存儲器。如上文所討論,每個(gè)發(fā)送緩沖器的發(fā)送緩沖器存儲器的最小量為對應(yīng)于一個(gè)發(fā)送塊的64B(n=1)。每個(gè)發(fā)送緩沖器的發(fā)送緩沖器的最大量是64KB,64KB是1024個(gè)發(fā)送塊。在一個(gè)實(shí)施例中,施加此限值以限制用于由PIO發(fā)送機(jī)制進(jìn)行的尋址的物理地址映射的量。此外,多使用一個(gè)地址位以在作為新分組的起始(SOP)的發(fā)送塊和非新分組的起始的發(fā)送塊之間進(jìn)行區(qū)分。此編碼操作允許勾畫出分組邊界,并且提供對PIO發(fā)送機(jī)制的使用的正確性的健康校驗(yàn)。此外,SOP發(fā)送塊中的前8B用于將逐緩沖器控制(PerBufferControl,PBC)信息傳遞至HFI102。PBC是64位控制四字(QW),此控制四字不是分組數(shù)據(jù)自身的部分,但包含關(guān)于分組的重要控制信息。地址中的SOP位允許在對發(fā)送緩沖器的寫入的傳入流中定位PBC值。在一個(gè)實(shí)施例中,在以下表1中定義并在圖3中描繪PIO發(fā)送物理地址空間的解碼。在圖3中所示的實(shí)施例中,由PIO發(fā)送緩沖器存儲器占據(jù)的物理地址空間的總量為32MB。表1圖4中示出地址映射過程的三個(gè)示例。注意,這三個(gè)示例上下文在發(fā)送緩沖器存儲器中是連續(xù)的,并且不在4KB頁上對齊,但是在設(shè)備物理地址空間中由上下文號分開,使得它們可在不跨發(fā)送上下文共享的情況下被映射至主機(jī)虛擬地址空間。這種情況的極端示例是使用一個(gè)64B發(fā)送塊的64個(gè)不同的發(fā)送上下文的64個(gè)用戶進(jìn)程,64個(gè)不同的發(fā)送上下文中的每一個(gè)都映射到PIO發(fā)送存儲器120的發(fā)送緩沖器存儲器的相同的4KB信息量(worth)上。作為示例,考慮發(fā)送上下文0的地址映射。此發(fā)送上下文包括64個(gè)塊或4KB的用戶進(jìn)程虛擬地址空間。上下文在設(shè)備物理地址空間的位[23:16]中進(jìn)行編碼,同時(shí)在虛擬至物理地址轉(zhuǎn)換中,虛擬地址位[11:0]被保留。進(jìn)一步注意到,如果發(fā)送上下文對應(yīng)于新分組的起始,則位24被置位(‘1’),否則,位24被清除(‘0’)。物理地址至PIO發(fā)送存儲器地址映射將上下文地址位[24:16]加到地址的上下文基準(zhǔn)位[15:0]。如進(jìn)一步所示,在虛擬存儲器、物理存儲器和PIO發(fā)送存儲器中的每一者中,發(fā)送上下文的尺寸是相同的。為發(fā)送上下文1和發(fā)送上下文2采用類似的地址映射。用于PIO發(fā)送的分組填充使用對映射至主機(jī)地址空間的發(fā)送緩沖器的主機(jī)處理器寫入。此映射典型地配置為寫入-組合,使得處理器寫入在作為被投遞的(posted)寫入事務(wù)而通過PCIe向外推到HFI102之前不被高速緩存,而是伺機(jī)被聚合到64B處理器存儲緩沖器尺寸。在一個(gè)實(shí)施例中,HFI架構(gòu)以8B粒度采用PIO發(fā)送寫入事務(wù)。相應(yīng)地,每一個(gè)事務(wù)在尺寸上是8B的倍數(shù),并且起始于8B對齊的地址。在一個(gè)實(shí)施例中,存在每一個(gè)寫入不跨越64B邊界的要求,以確保每一個(gè)寫入被包含在64B發(fā)送塊內(nèi)。相應(yīng)地,在一個(gè)實(shí)施例中,PIO發(fā)送采用尺寸為64B且為64B對齊的PCIe寫入。為實(shí)現(xiàn)最佳性能,推薦軟件以升序地址順序填充發(fā)送緩沖器,并且為64B傳送進(jìn)行優(yōu)化。在一個(gè)實(shí)施例中,軟件采用填補(bǔ)(padding)(如果適用)以將寫入序列生成至64B的倍數(shù),使得精確地填充用于PIO發(fā)送操作的所有發(fā)送塊。由此,從指令的角度看,在開始向下一64B發(fā)送塊寫入并繼續(xù)進(jìn)行而到最后的64B發(fā)送塊之前,軟件應(yīng)當(dāng)寫入一個(gè)64B發(fā)送塊的全部。處理器寫入-組合機(jī)制可對這些寫入重排序,因此,HFI硬件不依賴于這些寫入序列通過PCIe以此順序到達(dá)。HFI硬件支持以8B級別對寫入序列進(jìn)行的任意重排序??捎绍浖褂胹fence指令以將排序強(qiáng)加至寫入序列。然而,由于sfence是昂貴的操作,因此,HFI硬件提供優(yōu)化以便如下文所述消除對sfence的需求。每一個(gè)發(fā)送上下文都提供映射至主機(jī)存儲器的只寫發(fā)送緩沖器。如先前所描述,發(fā)送緩沖器起始于4KB對齊的地址,尺寸高達(dá)64KB,并且為64B發(fā)送塊的單位。PIO發(fā)送機(jī)制通過以FIFO順序?qū)⒎纸M寫入到發(fā)送緩沖器來進(jìn)行。在一個(gè)實(shí)施例中,通過以增加的地址順序?qū)懭?BPBC,隨后是頭部,隨后是有效載荷來填充每一個(gè)分組。由此序列占據(jù)的發(fā)送緩沖器的量被向上舍入到連續(xù)64B發(fā)送塊的整數(shù)(圍繞發(fā)送緩沖器存儲器的連續(xù)求模方式),并且軟件配置成補(bǔ)全其寫入序列以精確地填充這些64B發(fā)送塊的全部。PBC是每一個(gè)PIO發(fā)送中的第一個(gè)64B發(fā)送塊的前8B。最小的PIO發(fā)送是一個(gè)發(fā)送塊,而最大支持的分組尺寸需要對應(yīng)于128B+10KBMTU(最大傳送單元)的162個(gè)發(fā)送塊。線上的分組尺寸是4B的倍數(shù),因此提供了關(guān)于如何更細(xì)粒度地使用64B發(fā)送塊的靈活性?!ぴ赑BC中的PbcLengthDWs字段中指定4B倍數(shù)的線上的分組長度?!?4B倍數(shù)的填充尺寸通過將PbcLengthDWs向上舍入到64B的倍數(shù)來確定?!ぬ畛涑叽绺采w8BPBC以及分組長度以及任何所需的填補(bǔ)以使寫入序列成為64B的倍數(shù)。64B填補(bǔ)要求簡化了硬件實(shí)現(xiàn),因?yàn)樗邪l(fā)送塊被完全填充。此外,此方法通過以下方式改善性能:確保分組的最后部分的寫入-組合存儲器緩沖器被填充至64B,從而使其自動地耗盡至HFI而不使用顯式的sfence指令。填補(bǔ)字節(jié)對流出到線的分組沒有貢獻(xiàn)。在圖5中示出根據(jù)一個(gè)實(shí)施例的發(fā)送緩沖器的布局。以類FIFO語義來使用此發(fā)送緩沖器存儲器。FIFO順序由用于發(fā)送緩沖器映射中的每一個(gè)分組的發(fā)送塊的地址順序確定。注意,以環(huán)繞(wrap-around)方式(實(shí)現(xiàn)為循環(huán)FIFO)來使用發(fā)送緩沖器。這意味著一旦軟件在發(fā)送緩沖器中寫入最后64B,它就需要將地址往回更新到發(fā)送緩沖器的基址。對于發(fā)送緩沖器的寫入受制于信用限值和信用返回策略,以確保主機(jī)處理器不對仍用于還未流出到結(jié)構(gòu)的先前分組的發(fā)送緩沖器塊過度寫入。類FIFO語義如下:·分組以FIFO順序填充,但是具有重新組裝特征,所述重新組裝特征應(yīng)對在寫入-組合實(shí)現(xiàn)中固有的寫入的重排序。·隨后,以FIFO順序發(fā)射分組。在發(fā)射之后,分組具有VL仲裁的資格。·隨后,分組從逐VL的發(fā)射FIFO流出,并且對于來自具有相同VL的相同上下文的分組將是有序的,但對于來自不同VL上的相同發(fā)送上下文的分組可能是亂序的?!ば庞梅祷匕丛嫉腇IFO順序。這意味著直到在那個(gè)發(fā)送上下文上的全部較早的分組已流出,亂序地流出的分組的信用才恢復(fù)。寫入-組合映射允許主機(jī)處理器對用于建立分組的寫入重排序。在常規(guī)方法下,用于強(qiáng)加順序的處理器架構(gòu)機(jī)制是sfence指令。這確保了在sfence指令之前的所有寫入在sfence指令之后的所有寫入之前將變得對HFI可見。然而,此排序伴隨著顯著的成本,因?yàn)樗枰谥鳈C(jī)處理器中從CPU核的往返雙程,所述CPU核將存儲發(fā)布至集成式輸入-輸出塊(IIO)中的排序點(diǎn)。這增加了顯著的等待時(shí)間,并另外在確認(rèn)sfence排序之前妨礙全部其他存儲在CPU核中完成。CPU的亂序能力允許指令上的一些前向進(jìn)展覆蓋此等待時(shí)間,但是這些資源不久會耗盡,并且將有待恢復(fù)的未引退指令的顯著的積壓。HFI架構(gòu)力圖最小化或消除用于對寫入-組合序列排序的sfence指令的需求。第一優(yōu)化是消除分組內(nèi)的sfence。在此,可由處理器對包括用于一個(gè)分組的PIO發(fā)送操作的寫入重排序,并且HFI重新組裝正確的順序,并且提供機(jī)制來檢測所有的寫入何時(shí)到來使得分組填充是完整的且可發(fā)射分組。隨著分組中的發(fā)送塊的數(shù)量增加,此優(yōu)化給予增加的益處。第二優(yōu)化是消除分組之間的sfence,這要求HFI將來自不同的分組PIO發(fā)送的經(jīng)交織的寫入重新組裝到它們相應(yīng)的分組中。此優(yōu)化對于短分組(諸如,配合到單個(gè)64B發(fā)送塊中的常見的分組示例)是非常重要的。由HFI提供的機(jī)制涵蓋這兩種優(yōu)化。HFI通過解碼地址來確定任何PIO發(fā)送寫入的正確的數(shù)據(jù)布置。上下文在較高階的地址位中是可用的,這確定了發(fā)送上下文對使用基址具有訪問權(quán)的發(fā)送緩沖器部分并界定了已討論的重新映射。地址的最低16位確定了被寫入的數(shù)據(jù)在那個(gè)發(fā)送緩沖器內(nèi)的布置。此方法確保了無論將寫入向下重排序/拆分/合并至8B粒度,以8B粒度進(jìn)行的那些寫入總是正確地被寫入到發(fā)送緩沖器存儲器中的分組中。圖6a示出根據(jù)實(shí)施例的系統(tǒng)100的進(jìn)一步細(xì)節(jié)。處理器104包括CPU600,所述CPU600包括支持亂序執(zhí)行的多個(gè)處理器核。在一個(gè)實(shí)施例中,每一個(gè)物理處理器核都可實(shí)現(xiàn)為兩個(gè)邏輯核,諸如,在公司的架構(gòu)下所支持的那樣。在一個(gè)實(shí)施例中,處理器104是64位處理器,并且每一個(gè)核都包括多個(gè)64位(64b)寄存器。處理器104還包括第2級(L2)高速緩存602和第1級(L1)高速緩存,所述L1高速緩存對于每一個(gè)核拆分為指令高速緩存604和數(shù)據(jù)高速緩存606。盡管為了簡潔未示出,但是處理器也可采用跨處理器核被共享的末級高速緩存(LLC)。處理器104進(jìn)一步包括經(jīng)由存儲緩沖器控制器邏輯609而受控的存儲緩沖器608、IIO塊610和PCIe接口612。處理器104的內(nèi)部結(jié)構(gòu)的一個(gè)實(shí)施例的進(jìn)一步細(xì)節(jié)在圖17中示出并在下文中描述。在一個(gè)實(shí)施例中,存儲器106、L2高速緩存602中的每一者都采用64字節(jié)高速緩存行,而存儲緩沖器608采用64字節(jié)存儲塊。如進(jìn)一步所示,在一個(gè)實(shí)施例中,使用“mov”指令,以64位(8字節(jié))單位將數(shù)據(jù)從CPU600中的64b寄存器寫入到存儲緩沖器608。為簡單起見,在本文中的附圖中,mov指令被標(biāo)記為“mov.q”。任選地,可使用具有其他尺寸(諸如,16B和32B)的存儲單元將數(shù)據(jù)寫入到存儲緩沖器608。如下文中更詳細(xì)地所述,在一個(gè)實(shí)施例中,512位寫入指令用于將64B數(shù)據(jù)寫入到64B存儲塊,其中,每一個(gè)64B寫入填充存儲塊。PIO發(fā)送存儲器120被描繪為包括兩個(gè)發(fā)送上下文(發(fā)送上下文1和發(fā)送上下文2);然而,將會理解,在實(shí)際實(shí)現(xiàn)下,PIO發(fā)送存儲器120一般將具有多得多的發(fā)送上下文(多達(dá)160個(gè))。發(fā)送上下文被分配至軟件應(yīng)用(或以其他方式響應(yīng)于分配發(fā)送上下文供由軟件應(yīng)用使用的請求)。在此示例中,軟件應(yīng)用‘A’被分配了發(fā)送上下文1,而軟件應(yīng)用‘B’被分配了發(fā)送上下文2。發(fā)送上下文1和2的尺寸分別為x個(gè)和y個(gè)64B發(fā)送塊。在初始分配了發(fā)送上下文之后,發(fā)送上下文中的發(fā)送塊中的每一個(gè)將是空的或“自由的”(例如,可用于添加數(shù)據(jù))。在持續(xù)的操作期間,發(fā)送上下文被操作為循環(huán)FIFO,其中FIFO中的64B發(fā)送塊從存儲緩沖器608來填充,并且當(dāng)分組被轉(zhuǎn)發(fā)到出口塊126(如下文所述,被稱為使發(fā)送塊流出)時(shí)所述FIFO中的64B發(fā)送塊從FIFO中被去除,從而釋放流出的發(fā)送塊供重新使用。在FIFO的上下文下,每一個(gè)發(fā)送塊都對應(yīng)于FIFO槽,并且數(shù)據(jù)被添加之處的槽具有PIO發(fā)送存儲器120中對應(yīng)的存儲器映射的地址。每一個(gè)分組614都包括多個(gè)頭部字段,這些頭部字段包括PBC字段,各種頭部字段(為簡單起見相組合地示出)、PSM(性能比例消息傳送)頭部和PSM數(shù)據(jù)、以及ICRC(不變CRC)字段。如圖所示,分組614的最小尺寸為64B,64B匹配存儲緩沖器608中的存儲塊尺寸,并且匹配用于發(fā)送上下文FIFO中的每一個(gè)槽的64B發(fā)送塊尺寸。在持續(xù)的操作期間,將在CPU600的核上執(zhí)行軟件指令以使存儲器106中的分組數(shù)據(jù)的副本被寫入到PIO發(fā)送存儲器120中的發(fā)送上下文中。首先,分組數(shù)據(jù)以及對應(yīng)的指令將從存儲器106被復(fù)制到L2高速緩存602中,并且指令和數(shù)據(jù)從L2高速緩存602被復(fù)制到指令高速緩存604和數(shù)據(jù)高速緩存606。任選地,分組數(shù)據(jù)和指令可能已經(jīng)駐留在L2高速緩存602中或駐留在指令高速緩存604和數(shù)據(jù)高速緩存606中。用于將分組數(shù)據(jù)從CPU600的寄存器寫入到存儲緩沖器608中的8B存儲單元的mov指令的序列在本文中示出為以分組成組;然而,將理解的是,處理器核正在連續(xù)地執(zhí)行包含mov指令的指令線程。如圖6b中所示,當(dāng)用于將數(shù)據(jù)從處理器核寄存器復(fù)制(寫入)到存儲緩沖器608中的8B存儲單元的mov指令被處理時(shí),64B存儲塊被填充。在一個(gè)實(shí)施例中,存儲緩沖器608以隨機(jī)訪問方式操作,在此方式下,存儲塊的地址與用于將數(shù)據(jù)存儲在PIO發(fā)送存儲器120中的尋址無關(guān)。在存儲緩沖器控制邏輯609中實(shí)現(xiàn)存儲緩沖器塊填充檢測機(jī)制以確定給定的64B存儲塊何時(shí)被填充。在檢測到存儲塊被填充之后,通過執(zhí)行從存儲緩沖器608到PIO發(fā)送存儲器120中合適的FIFO槽中的64B發(fā)送塊的64BPCIe投遞的寫入來“耗盡”存儲塊。在本文中,使用術(shù)語“耗盡的(drained)”來表達(dá)由硬件(例如,存儲緩沖器控制邏輯609)生成64BPCIe投遞的寫入,這與對緩沖器“轉(zhuǎn)儲清除(flushing)”相對,后者一般經(jīng)由軟件指令實(shí)現(xiàn)。如圖6b中所示,在時(shí)刻Tm,存儲塊616被檢測為是完整的,從而導(dǎo)致存儲塊616經(jīng)由對為發(fā)送上下文1分配的PIO發(fā)送存儲器120中的發(fā)送緩沖器中的發(fā)送塊618的64BPCIe投遞的寫入而耗盡。類似地,在后續(xù)的時(shí)刻Tn,存儲緩沖器608中的存儲塊620檢測為被填充,從而導(dǎo)致存儲塊620經(jīng)由對PIO發(fā)送存儲器120中的發(fā)送塊622的第二64BPCIe投遞的寫入而耗盡。使用帶圈的‘1’和‘2’是為了指示在圖6b和本文中的其他附圖中PCIe投遞的寫入發(fā)生的順序。結(jié)合使64B存儲塊耗盡,所述64B存儲塊的存儲空間被釋放以重新使用。在一個(gè)實(shí)施例中,存儲緩沖器608包括變得對處理器(或處理器核)可見的存儲塊使用信息,以使處理器/核能夠標(biāo)識可用于寫入的自由的存儲塊(在64B邊界上的八個(gè)順序的8B塊)。此外,在本文中的附圖中的示例中,存儲塊可描繪為以順序次序被填充。然而,這是為了簡化如何移動數(shù)據(jù)的表示,因?yàn)榇鎯彌_器可使用隨機(jī)訪問來操作,在隨機(jī)訪問下,用于存儲數(shù)據(jù)的特定的存儲塊與數(shù)據(jù)將被寫入到的PIO發(fā)送存儲器地址無關(guān)。圖7a-7f示出分組數(shù)據(jù)如何被添加到PIO發(fā)送存儲器120且后續(xù)使用8B寫入而流出到8B存儲單元的示例性隨時(shí)間推移的序列。圖7a-7e中的每一個(gè)描繪存儲緩沖器608和PIO發(fā)送緩沖器120的進(jìn)一步細(xì)節(jié)。如上文所述,PIO發(fā)送緩沖器的存儲器空間可分區(qū)為用于多達(dá)160個(gè)發(fā)送上下文的緩沖器。除了圖6a和圖6b中也示出且在上文中討論的發(fā)送上下文1和2之外,圖7a-7f中的每一個(gè)還描繪了發(fā)送上下文3和發(fā)送上下文4。發(fā)送上下文3和4說明共享PIO發(fā)送緩沖器120的緩沖器空間的附加的發(fā)送上下文。此外,以不同的交叉線圖案描繪發(fā)送上下文3和4以指示這些發(fā)送上下文正在由在另一處理器核上運(yùn)行的軟件使用。一般而言,在多核CPU中,對應(yīng)于各種任務(wù)和服務(wù)的指令線程被指派給多個(gè)處理器核并在多個(gè)處理器核之間分布。在一個(gè)實(shí)施例下,在軟件應(yīng)用之間共享PIO發(fā)送緩沖器120,所述軟件應(yīng)用包括包含這些指令線程的部分的組件、模塊等。這些指令線程相對于在其他核上執(zhí)行的指令線程同步地被執(zhí)行,由此,可并發(fā)地實(shí)現(xiàn)多個(gè)軟件應(yīng)用以生成逐核地、異步地被添加到PIO發(fā)送緩沖器中的發(fā)送上下文的分組數(shù)據(jù)。相應(yīng)地,雖然每一個(gè)核在一時(shí)刻僅可執(zhí)行單條指令(諸如,mov),但是多個(gè)指令線程正在被并發(fā)地執(zhí)行,從而導(dǎo)致與圖7a-7f中所示的用于其他發(fā)送上下文(諸如,發(fā)送上下文3和4以及未示出的發(fā)送上下文)的那些類似的數(shù)據(jù)傳送。為了支持這些并發(fā)且異步的數(shù)據(jù)傳送,取決于特定的處理器架構(gòu),存儲緩沖器可配置成用于在多個(gè)核之間共享,或可為每一個(gè)核分配私有存儲緩沖器。圖7a對應(yīng)于第一時(shí)間幀T1,在此第一時(shí)間幀T1,數(shù)據(jù)已被添加至對應(yīng)于第一64B存儲塊700的全部8個(gè)8B存儲單元,這導(dǎo)致64字節(jié)的數(shù)據(jù)被寫入發(fā)送上下文1中的第三FIFO槽處的發(fā)送塊。數(shù)據(jù)將被寫入到的發(fā)送塊將基于那個(gè)發(fā)送塊的存儲器映射的地址,所述存儲器映射的地址基于PIO寫入指令以及諸如圖4中所示和上文中討論的虛擬至物理至PIO發(fā)送存儲器地址轉(zhuǎn)換。這個(gè)發(fā)送塊對應(yīng)于具有j個(gè)塊長的填充尺寸(包括填補(bǔ),如果適用)的分組的第一個(gè)塊。如上文所討論,PBC頭部包括在4B的倍數(shù)中指定分組長度的PbcLengthDWs字段。由發(fā)送上下文中的分組占據(jù)的空間的量(分組的填充尺寸)包括n個(gè)64B發(fā)送塊(并由此包括n個(gè)FIFO槽),其中,通過將PbcLengthDWs字段值向上舍入到下一個(gè)64B的倍數(shù)來確定n。在圖7a中所示的示例中,如從PbcLengthDWs字段值中所確定,j=n。結(jié)合確定分組的填充尺寸,生成控制信息以標(biāo)識最后的發(fā)送塊,分組數(shù)據(jù)將被添加到所述最后的發(fā)送塊以完成分組數(shù)據(jù)的整體(完整的分組)至PIO發(fā)送存儲器120中的發(fā)送上下文的傳送;在本文中的附圖中,標(biāo)識為正在用于存儲還將被接收的分組數(shù)據(jù)的部分的發(fā)送塊被標(biāo)記為“將填充”(意思是將被填充)。在存儲和轉(zhuǎn)發(fā)實(shí)現(xiàn)方式下,直到整個(gè)分組內(nèi)容被存儲在PIO發(fā)送存儲器120中,分組的數(shù)據(jù)才能夠被轉(zhuǎn)發(fā)至出口塊126。由在發(fā)射引擎(未示出)中的邏輯中實(shí)現(xiàn)的完整分組檢測機(jī)制使用PIO發(fā)送塊出口控制信息,所述完整分組檢測機(jī)制檢測分組內(nèi)容的整體(包括用于填滿最后的發(fā)送塊的任何適用的填補(bǔ))何時(shí)已被寫入PIO發(fā)送存儲器120。在一個(gè)實(shí)施例中,此完整分組檢測機(jī)制跟蹤對應(yīng)的FIFO槽中的發(fā)送塊何時(shí)被填充,并且控制信息包括用于每一個(gè)分組的起始和結(jié)束FIFO槽的地址(或其抽象,諸如,發(fā)送塊號或FIFO槽號)。一般而言,地址可相對于PIO發(fā)送存儲器120的基址,或相對于與FIFO緩沖器相關(guān)聯(lián)的發(fā)送上下文的基址。在圖7a-7f中,用于相應(yīng)分組的mov指令示出為通過分組使用Pa-b標(biāo)記方案來成組,其中,a對應(yīng)于發(fā)送上下文,而b對應(yīng)于分組被添加到發(fā)送上下文的原始順序。使用此標(biāo)記方案是為了說明目的以更好地解釋分組如何被寫入發(fā)送上下文;將理解的是,如上文中所討論,數(shù)據(jù)被寫入到PIO發(fā)送緩沖器120的實(shí)際位置將基于PIO寫入指令以及地址轉(zhuǎn)換方案。雖然mov指令描繪為逐分組地被處理,但是這些指令的順序?qū)?yīng)于mov指令到達(dá)核的指令流水線的順序。然而,支持亂序執(zhí)行的處理器能以與指令到達(dá)的順序不同的順序來執(zhí)行指令。在一些常規(guī)方法下,對于分組內(nèi)的mov指令,準(zhǔn)許亂序執(zhí)行,但對于跨分組的mov指令不準(zhǔn)許亂序執(zhí)行。這通過使用SFENCE或sfence(存儲屏蔽,在附圖中也描繪為SFence)指令來促進(jìn),在SFENCE指令下,SFENCE指令之前的指令在此SFENCE指令之后的任何存儲指令之前是全局可見的。結(jié)果,在常規(guī)方法下,直到進(jìn)行中的分組的數(shù)據(jù)的全部已寫入到存儲緩沖器,在SFEMCE之后的mov指令中引用的分組數(shù)據(jù)才能夠?qū)懭氲酱鎯彌_器。為了實(shí)施此邏輯,會停止指令的執(zhí)行,從而導(dǎo)致分組轉(zhuǎn)發(fā)性能的降低。此外,SFENCE可用于以類似方式實(shí)施分組內(nèi)的寫入排序。如下文中所討論,在圖9a和圖9b中示出比較具有和不具有sfence的PIO寫入的說明。根據(jù)本文中公開的實(shí)施例的多個(gè)方面,去除了對SFENCE指令的常規(guī)使用,使得來自分開的分組的存儲指令可亂序地執(zhí)行,使得在完成存儲在先的(以所接收的指令順序)第一分組之前,第二分組在存儲緩沖器中的存儲可開始。在圖7a中描繪這種情況的示例,其中,亂序地且在用于分組P1-1的最后兩個(gè)“mov.q”指令之前執(zhí)行用于分組P1-2的第一“mov.q”指令,從而導(dǎo)致用于存儲塊706中的第一個(gè)8B存儲單元的數(shù)據(jù)被寫入到存儲緩沖器608。在第一時(shí)間幀的終結(jié)處,已使用j-1個(gè)64BPCIe投遞的寫入將分組數(shù)據(jù)寫入前j-1個(gè)發(fā)送塊(如由用于分組P1-1的存儲塊700和存儲塊702所示)的發(fā)送上下文1。如上所述,結(jié)合每一個(gè)64BPCIe投遞的寫入,釋放耗盡的存儲緩沖器608中對應(yīng)的塊;在圖7b中示出此釋放的狀態(tài),圖7b描繪第二時(shí)間幀T2。在本文中的附圖中,64BPCIe投遞的寫入的順序描繪為帶圈的數(shù)字。為方便起見,64BPCIe投遞的寫入組的數(shù)據(jù)傳送由單個(gè)帶圈數(shù)字描繪,諸如,圖7a中的數(shù)字‘2’。在此第二時(shí)間幀期間,為分組P1-1添加對應(yīng)于存儲塊704(在此示例中,其包括填補(bǔ))的兩個(gè)其余的存儲單元的數(shù)據(jù),并且經(jīng)由64BPCIe投遞的寫入將來自存儲塊704的數(shù)據(jù)寫入發(fā)送上下文1,所述64BPCIe投遞的寫入完成將完整的分組數(shù)據(jù)寫入PIO發(fā)送存儲器。這導(dǎo)致分組完成狀態(tài),此刻,分組準(zhǔn)備好進(jìn)行分組發(fā)射仲裁,如在圖10和圖11中所示且在下文中進(jìn)一步詳細(xì)地所描述。此外,在時(shí)間幀T2期間,數(shù)據(jù)被寫入到存儲塊706、708和710中的每一個(gè)存儲塊,從而填滿存儲塊706和708,同時(shí)經(jīng)由亂序執(zhí)行,用于填充存儲塊708的最后一個(gè)存儲單元的mov指令被臨時(shí)跳過,如圖所示。如圖所示,PBC頭部中的PbcLengthDWs值指示分組填充尺寸將是三個(gè)64B發(fā)送塊。在填充了存儲塊706和710中的每一個(gè)存儲塊之后,這些存儲塊耗盡,并且對應(yīng)的數(shù)據(jù)經(jīng)由64BPCIe投遞的寫入被寫入到PIO發(fā)送存儲器120中的發(fā)送上下文1,從而導(dǎo)致分組P1-2的最后一個(gè)64B塊在中間發(fā)送塊之前被寫入。為減少混亂,示出每一條mov指令或mov指令集合的結(jié)果的箭頭中的一些箭頭未包括在圖7c-7f中;相反,所包括的箭頭可能僅示出對新存儲緩沖器塊的第一個(gè)寫入以及最后一個(gè)被寫入的塊。如圖7c中所示,在第三時(shí)間幀T3期間,分組P1-2的其余數(shù)據(jù)被寫入到數(shù)據(jù)塊708,從而導(dǎo)致這個(gè)存儲塊數(shù)據(jù)耗盡且被寫入到PIO發(fā)送存儲器120中的分組P1-2的中間發(fā)送塊。這完成了分組P1-2至PIO發(fā)送存儲器的傳送,由此,分組P1-2為發(fā)射仲裁作好準(zhǔn)備。此外,對應(yīng)于待添加至發(fā)送上下文2的第一分組(分組P2-1,具有兩個(gè)64B發(fā)送塊的填充尺寸和長度)的數(shù)據(jù)開始被寫入存儲塊712和714,同時(shí)使用亂序執(zhí)行開始將發(fā)送上下文1的第三分組P1-3的數(shù)據(jù)寫入到存儲塊716。圖7d示出在時(shí)間幀T4期間數(shù)據(jù)傳送的狀態(tài)。在此時(shí)間幀期間,分組P2-1的最后16個(gè)字節(jié)被寫入到存儲緩沖器608,從而導(dǎo)致存儲塊714經(jīng)由64BPCIe投遞的寫入而耗盡,這填充了PIO發(fā)送存儲器120中的分組P2-1的第二發(fā)送塊,從而使分組P2-1可用于發(fā)射仲裁。分組P1-3數(shù)據(jù)被添加以填充存儲塊716和718兩者,從而使這兩個(gè)存儲塊經(jīng)由對PIO發(fā)送存儲器120中的分組P1-3的兩個(gè)64BPCIe投遞的寫入而耗盡,也使分組P1-3可用于發(fā)射仲裁,在時(shí)間幀T4中,還已經(jīng)添加了用于兩個(gè)附加的分組P2-2和P1-4的mov指令。分組P2-2是待添加至發(fā)送上下文2的第二個(gè)分組,并且具有k個(gè)64B塊的尺寸且不需要任何填補(bǔ)。分組P1-4是待添加至發(fā)送上下文1的第四個(gè)分組,并且將具有64B的最小尺寸。如由存儲塊720和722所示,分組P2-2的前k-1個(gè)存儲塊已添加至存儲緩沖器608,并經(jīng)由k-1個(gè)64BPCIe投遞的寫入被寫入至PIO發(fā)送存儲器120。分組P2-2的除最后8個(gè)字節(jié)之外的所有字節(jié)已被添加至存儲塊724。在這最后8個(gè)字節(jié)被寫入到存儲塊724的最后一個(gè)8B存儲單元之前,執(zhí)行用于寫入分組P1-4的前8個(gè)字節(jié)的亂序的mov指令,這開始填充存儲塊726。最后,已選擇分組P1-2通過VL仲裁器來流出,并且針對分組P1-2的發(fā)送塊,以FIFO順序使它的數(shù)據(jù)流出。這示出這樣一種示例,其中在發(fā)送緩沖器中針對相同發(fā)送上下文的先前分組的分組數(shù)據(jù)之后其數(shù)據(jù)被添加的分組可被選擇以便在所述先前的分組之前流出,由此以打亂所述分組填充在發(fā)送上下文中的分組的順序亂序地流出。圖7e示出在時(shí)間幀T5期間的傳送狀態(tài)。分組P2-2的最后8個(gè)字節(jié)被寫入到存儲塊724,并且此存儲塊經(jīng)由對PIO發(fā)送存儲器120中的分組P2-2的最后一個(gè)發(fā)送塊的64BPCIe投遞的寫入而耗盡,由此完成分組P2-2數(shù)據(jù)的寫入并使分組P2-2可用于發(fā)射仲裁。分組P1-4的其余56個(gè)字節(jié)被寫入到存儲緩沖器608的存儲塊726,隨后經(jīng)由對PIO發(fā)送存儲器120的64BPCIe投遞的寫入來寫入存儲塊數(shù)據(jù)。在接收之后,檢查PCBPbcLengthDWs字段,并且確定此分組具有一個(gè)64B發(fā)送塊的長度;由于分組P1-4的數(shù)據(jù)整體被包含在此塊中,因此分組P1-4也被標(biāo)記為經(jīng)填充且準(zhǔn)備好發(fā)射仲裁。在此示例中待添加的最后一個(gè)分組是分組P2-3,此分組P2-3具有192B(3x64B)的長度且不需要任何填補(bǔ)。此傳送通過首先將分組數(shù)據(jù)的這192B寫入到存儲緩沖器608中的存儲塊728、730和732來實(shí)施。在完成了用于每一個(gè)存儲塊的8條mov指令之后,結(jié)合對PIO發(fā)送存儲器120的發(fā)送上下文2中為分組P2-3分配的相應(yīng)的發(fā)送塊的64BPCIe投遞的寫入使存儲塊耗盡。在完成了最后一個(gè)64BPCIe投遞的寫入之后,分組寫入完成機(jī)制檢測分組2-3整體已被寫入PIO發(fā)送存儲器120,由此,分組P2-3也標(biāo)記為被填充完整且可用于發(fā)射仲裁。同樣,已由VL仲裁器選擇P1-1用于流出,并且分組P1-1的發(fā)送塊以FIFO順序流出。在所示實(shí)施例中,在用于分組P2-3的最后一條mov.q指令之后,添加SFENCE指令。這是為了在存儲塊728、730和732中的任一者被轉(zhuǎn)儲清除之前,將分組P2-3的所有數(shù)據(jù)寫入到存儲塊728、730和732。如果用于后續(xù)分組的寫入指令立即跟隨指令線程,則不必使用SFENCE,因?yàn)橹噶顟?yīng)當(dāng)填充每一個(gè)適用的存儲塊,從而導(dǎo)致存儲塊在被轉(zhuǎn)儲清除之前被耗盡。除了上文內(nèi)容之外,在時(shí)間幀T5期間,分組P1-2和分組P2-1中的每一個(gè)已完全流出,并且它們對應(yīng)的發(fā)送塊已被清除(注意,在時(shí)間幀T5的早期部分期間,分組P2-1也曾被選擇用于流出)。如下文中參照圖11和圖14所述,當(dāng)發(fā)送塊狀態(tài)被清除時(shí),如果沒有占據(jù)較低的FIFO槽的還未達(dá)到被清除狀態(tài)的發(fā)送塊,則將返回用于對應(yīng)于被清除的發(fā)送塊的發(fā)送上下文的信用。在此示例中,此條件對于發(fā)送上下文2為真,但對發(fā)送上下文1不為真,因?yàn)榉纸MP1-1仍正在流出,并且還未達(dá)到被清除狀態(tài)。結(jié)果,為發(fā)送上下文2返回兩個(gè)信用,而此刻不為發(fā)送上下文1返回信用。如下文中詳述,在一個(gè)實(shí)施例中,返回包括11位運(yùn)行計(jì)數(shù)的絕對信用值;在圖7e的示例中,假定在分組P2-1被清除之前,發(fā)送上下文2的運(yùn)行計(jì)數(shù)處于0,由此,所返回的運(yùn)行計(jì)數(shù)絕對信用值為2。圖7f示出在時(shí)間幀T6期間的傳送狀態(tài)。在此時(shí)間幀期間,分組P1-3和P2-2開始流出,而分組P1-1完成流出,并且分組P1-1的發(fā)送塊被清除。此刻,為發(fā)送上下文1返回用于分組P1-1和P1-2兩者的信用,總計(jì)j+3個(gè)信用,其中,相對于最后一次為發(fā)送上下文1返回信用,運(yùn)行計(jì)數(shù)器值將已增加j+3。在所示示例中,先前的運(yùn)行計(jì)數(shù)為2(對應(yīng)于發(fā)送上下文1的前2個(gè)空FIFO槽),由此,所返回的運(yùn)行計(jì)數(shù)絕對信用值為2+j+3。此外,已接收并處理用于在時(shí)間幀T5期間發(fā)送的分組P2-1的發(fā)送塊的兩個(gè)信用,并且對應(yīng)的FIFO槽被標(biāo)記為自由。根據(jù)一個(gè)實(shí)施例,可采用PIO寫入指令以便一次將512位(64B)寫入存儲緩沖器608,使得單條PIO寫入指令將導(dǎo)致完成對存儲塊的填充。在一個(gè)實(shí)施例中,這通過使用512b寫入指令來促進(jìn),所述512b寫入指令由公司的高級向量擴(kuò)展512(AVX-512)支持。英特爾AVX-512以512位寬的32個(gè)向量寄存器為特征,使得能夠?qū)?12位的數(shù)據(jù)從這些寄存器移動到存儲塊608中。注意,使用英特爾AVX-512僅是示例性的,并且不旨在限制為可使用的支持512位寫入的其他現(xiàn)有的和將來的處理器。圖8a-8e示出示例性隨時(shí)間推移的序列,所述序列示出分組數(shù)據(jù)如何添加至PIO發(fā)送存儲器120以及后續(xù)如何使用對存儲塊的512位寫入來流出。在此示例中,用于每一個(gè)分組的寫入指令的序列描繪為mov512.q指令以指示正在從CPU600a中的512b寄存器移動512位的數(shù)據(jù)。由于正在執(zhí)行512bmov,因此指令的數(shù)量顯著地少于使用8Bmov。如之前所述,以“X”描繪SFENCE以指示這是在常規(guī)方法下SFENCE將放置在的位置。在圖8a中,示出在時(shí)間幀T1期間執(zhí)行的操作。此外,用于分組P1-1、P1-2、P2-1、P1-3、P2-2和P1-4的序列的mov512.q指令被描繪為正在被接收;然而,這用于示出指令流,因?yàn)檫@些指令中的一些指令在時(shí)間幀T1期間將可能還沒被接收到,相反在接近數(shù)據(jù)被描繪為正在被寫入存儲緩沖器608的時(shí)刻的稍后時(shí)間幀期間被接收。出于說明性和比較性目的,在圖7a-7f以及圖8a-8e中描繪相同的幀序列,但是在這兩個(gè)示例之間,發(fā)送塊中的一些塊被寫入的順序不同。在時(shí)間幀T1期間,由CPU600a上的處理器核執(zhí)行用于分組P1-1的j條mov512.q指令,從而導(dǎo)致對于每一條指令,64B的數(shù)據(jù)被寫入到存儲塊,所述存儲塊隨后經(jīng)由以類似于圖6b和圖7a-7f中示出的方式的64BPCIe投遞的寫入而耗盡。這導(dǎo)致用于分組P1-1的完整的分組數(shù)據(jù)被寫入到PIO發(fā)送存儲器120,并且用于此分組的頭分組狀態(tài)被標(biāo)記為用于發(fā)射仲裁。此外,用于分組P1-2的前兩條mov512.q指令被接收,并且被亂序執(zhí)行。結(jié)果,分組數(shù)據(jù)被寫入在的中間發(fā)送塊將在第一發(fā)送塊之前被寫入PIO發(fā)送存儲器,如由64BPCIe投遞的寫入‘4’和‘5’所描繪。在接收到中間發(fā)送塊的數(shù)據(jù)之后,由發(fā)射引擎邏輯采用的控制信息將不知曉需要為分組P1-2填充的塊的數(shù)量,因?yàn)轭^分組(以及加上PBC頭部)還待接收。能以兩種方式中的一種方式來檢測對頭分組的接收,要么經(jīng)由檢查發(fā)送塊的第一部分來檢測PCB頭部,要么經(jīng)由64BPCI投遞的寫入中指示此寫入包含分組的第一個(gè)發(fā)送塊的分組起始(SOP)塊。在接收到用于分組P1-2的第一個(gè)發(fā)送塊之后,檢查它的PBC頭部,并且確定此分組的填充尺寸為三個(gè)發(fā)送塊。在時(shí)間幀T2期間,如在圖8b中所示,執(zhí)行用于分組P1-2的最后一條mov512.q指令,從而首先將數(shù)據(jù)移動至存儲塊710,隨后,存儲塊710經(jīng)由64BPCIe投遞的寫入‘6’而耗盡,這完成對用于分組P1-2的發(fā)送塊的填充。結(jié)果,頭分組狀態(tài)被標(biāo)記用于發(fā)射仲裁。如由64BPCIe投遞的寫入‘7’‘8’和‘9’的順序所示,亂序地執(zhí)行用于分組P2-1和P1-3中的每一者的指令,并且這些寫入中的最后一者示出為在進(jìn)展中但還未完成。用于分組P2-1的第一個(gè)發(fā)送塊的mov512.q指令還待執(zhí)行。如之前所述,由于第一個(gè)發(fā)送塊(以及由此將包括在對應(yīng)的64BPCIe投遞的寫入中置位的SOP位且包含PBC頭部的發(fā)送塊)還待被寫入,因此控制邏輯不知曉分組P2-1的尺寸。由用于分組P2-1的第一個(gè)發(fā)送塊占據(jù)的FIFO槽仍然還標(biāo)記為自由??稍O(shè)想地,如果發(fā)送上下文2FIFO中的最后一個(gè)塊被標(biāo)記為除自由外的其他內(nèi)容,則邏輯可配置成用于確定此FIFO槽對應(yīng)于用于分組P2-1的第一個(gè)發(fā)送塊(因?yàn)樗鼘⒈仨毜竭_(dá)那里),因?yàn)橄鄬τ诘却谝粋€(gè)發(fā)送塊到達(dá),這并不真正地提供益處。在圖8c中描繪的時(shí)間幀T3期間,執(zhí)行用于寫入第一個(gè)發(fā)送塊的mov512.q指令,從而導(dǎo)致存儲塊715經(jīng)由64BPCIe投遞的寫入‘10’被填充和耗盡??刂七壿嫏z測這對應(yīng)于幀P2-1的起始,檢查PBC頭部的PbcLengthDWs字段,并且確定分組填充尺寸為兩個(gè)發(fā)送塊。由于已填充了第二個(gè)發(fā)送塊,因此填充此第一個(gè)發(fā)送塊導(dǎo)致整個(gè)分組被填充,由此,頭分組狀態(tài)被標(biāo)記用于發(fā)射仲裁。此外,執(zhí)行用于分組P2-2的k條mov512.q指令,從而導(dǎo)致存儲塊718、k-2個(gè)存儲塊719的填充和耗盡,并且對存儲塊720,填充和耗盡在進(jìn)行中。在檢查了用于分組P2-2的PBC頭部之后,確定了此分組的填充尺寸為k個(gè)發(fā)送塊。同樣在時(shí)間幀T3期間,分組P1-1已被選擇用于流出,并且分組P1-1的流出在進(jìn)行中。在圖8d中描繪的時(shí)間幀T4期間,執(zhí)行對應(yīng)于分組P1-4的單條mov512.q,從而首先將此分組數(shù)據(jù)的全部寫入到存儲塊714,并隨后經(jīng)由64BPCIe投遞的寫入‘14’寫入到PIO發(fā)送存儲器120中的單個(gè)發(fā)送塊。也經(jīng)由存儲塊727、728和730以及64BPCIe投遞的寫入‘15’、‘16’和‘17’將分組P2-3的整體寫入PIO發(fā)送存儲器120。分組P1-4和P2-3的頭分組中的每一個(gè)被標(biāo)記用于發(fā)射仲裁。此外,分組P1-2和P2-1中的每一個(gè)已被選擇用于流出,并且這些分組的對應(yīng)的發(fā)送塊中的分組數(shù)據(jù)當(dāng)前正在流出。如上文所討論,在時(shí)間幀T3期間,分組P1-1的分組數(shù)據(jù)開始流出。在時(shí)間幀T4期間,流出已完成,并且發(fā)送塊被標(biāo)記為被清除。根據(jù)上文討論的實(shí)施例,此刻將返回2+j個(gè)信用的絕對信用返回計(jì)數(shù)(假定先前已返回用于未示出的發(fā)送上下文1的所有在先分組的信用)。然而,如下文中在討論信用返回機(jī)制中所討論,在一些實(shí)施例中,跨多個(gè)分組聚合信用,并且直到自最后一個(gè)信用返回起達(dá)到信用的閾值才返回信用。在此示例中,閾值還待達(dá)到,從而導(dǎo)致此刻沒有返回信用。在圖8e中描繪的時(shí)間幀T5期間,分組P1-2和P2-1中的每一個(gè)已完成流出并被標(biāo)記為被清除,同時(shí)分組P2-2已被選擇用于流出且開始流出??稍诿總€(gè)發(fā)送上下文的基礎(chǔ)上配置經(jīng)聚合的信用返回,使得它可用于一些發(fā)送上下文而不用于其他上下文。此外,可在每個(gè)發(fā)送上下文的基礎(chǔ)上配置經(jīng)聚合的信用閾值。相應(yīng)地,在此示例中,已達(dá)到用于發(fā)送上下文1的經(jīng)聚合的信用閾值,由此經(jīng)由信用返回塊127來返回運(yùn)行返回信用計(jì)數(shù)值2+j+3。此外,發(fā)送上下文2不是正在采用經(jīng)聚合的信用閾值,由此,2個(gè)信用的運(yùn)行返回信用計(jì)數(shù)值被返回。在一個(gè)實(shí)施例中,可在通過PCIe對存儲器的單個(gè)DMA寫入中發(fā)送用于多個(gè)發(fā)送上下文的運(yùn)行信用計(jì)數(shù)值。圖9a和圖9b分別示出對應(yīng)于使用具有和不具有SFENCE指令的64BPCIe投遞的寫入進(jìn)行的分組數(shù)據(jù)傳送的數(shù)據(jù)流時(shí)間線。當(dāng)從存儲緩沖器608(存儲緩沖器608是處理器核的部分)耗盡時(shí),它首先被轉(zhuǎn)發(fā)至IIO610,如圖6a和圖6b中所示。在IIO處具有一些附加的等待時(shí)間,因?yàn)槌吮疚闹兴懻摰腜CIe投遞的寫入請求之外,它還必須處置其他IO請求。值得注意的是,IIO返回對于每一條sfence指令的sfence確收(ack)。這防止亂序的指令跨sfence執(zhí)行,從而潛在地導(dǎo)致直到用于分組的所有指令在sfence之前已被執(zhí)行的延遲。在去除對sfence的使用的本文中的實(shí)施例下,防止這些潛在的延遲發(fā)生,從而優(yōu)化PIO發(fā)送塊寫入效率。圖10示出根據(jù)實(shí)施例的出口塊126的進(jìn)一步細(xì)節(jié)。在塊1000中跟蹤來自(多達(dá))160個(gè)發(fā)送上下文中的每一個(gè)的頭分組狀態(tài),同時(shí)在塊1002中跟蹤16個(gè)SDMA隊(duì)列中的每一個(gè)的頭分組狀態(tài)。塊1000和1002將輸入提供給輪循發(fā)射仲裁器1004,所述輪循發(fā)射仲裁器1004將輸出提供給逐VL的發(fā)射FIFO1006,所述逐VL的發(fā)射FIFO1006的輸出作為對VL仲裁器1008的輸入被接收。VL仲裁器將輸入控制提供給多路復(fù)用器(Mux)1010,所述Mux1010耦合至PIO發(fā)送存儲器120和SDMA存儲器124中的每一個(gè)。出口塊126進(jìn)一步包括處理塊1012、1014和1018以及出口FIFO1016。出口塊126負(fù)責(zé)仲裁來自160個(gè)發(fā)送上下文和16個(gè)SDMA引擎的分組,并且用于選擇下一個(gè)可用、完整的分組以從此分組的發(fā)送緩沖器存儲器發(fā)射到逐VL的發(fā)射FIFO1006中。逐VL的發(fā)射FIFO是深的以使VL之間的阻塞最小化,并且逐VL的發(fā)射FIFO僅包含用于分組的控制信息,包括指向PIO發(fā)送存儲器120和SDMA存儲器124中的分組的指針。實(shí)際的分組數(shù)據(jù)路徑不流經(jīng)逐VL的發(fā)射FIFO1006,相反,這些FIFO用于將逐VL的輸入提供給VL仲裁器1008,所述VL仲裁器1008跨發(fā)射FIFO執(zhí)行VL仲裁以選擇下一個(gè)將流出的分組。這使出口塊126開始經(jīng)由mux1010從PIO發(fā)送存儲器120或SDMA存儲器124取回那個(gè)分組的數(shù)據(jù),隨后,在處理框1012中應(yīng)用分組完整性校驗(yàn)。最后,分組出口流水線執(zhí)行對分組的任何必要的修改(例如,在處理框1014中的HCRC/ICRC插入、在出口FIFO1016中的FIFO緩沖以及在處理框1018中的PBC去除和分組成幀以供流出),并將此分組呈現(xiàn)至結(jié)構(gòu)端口112。在一個(gè)實(shí)施例中,發(fā)射引擎108支持8個(gè)數(shù)據(jù)VL和1個(gè)管理VL。然而,這僅是示例性和非限制性的。當(dāng)使用PBC頭部中的VL字段來構(gòu)建分組時(shí),通過軟件將分組指派給虛擬通道(VL)。在一個(gè)實(shí)施例中,使用PIO發(fā)送被發(fā)送至發(fā)送上下文的分組將按由那些分組的布置所限定順序被發(fā)射到發(fā)送上下文的發(fā)送緩沖器中。這被稱為“原始程序順序”。實(shí)質(zhì)上這意味著雖然甚至當(dāng)使用由處理器的寫入-組合特征提供的松散的排序語義時(shí)存在填充發(fā)送緩沖器已重新組裝程序的原始分組順序的靈活性,但是發(fā)送緩沖器起FIFO的作用。出于此排序的討論的目的,本質(zhì)點(diǎn)在于軟件在發(fā)送上下文上選擇分組順序,并且發(fā)送上下文維持那個(gè)分組順序一直到分組發(fā)射。一旦通過PIO發(fā)送或SDMA將完整的分組填充到發(fā)送緩沖器中,可由發(fā)射引擎發(fā)射分組。從發(fā)送緩沖器對分組的發(fā)射將分組置于逐VL的FIFO上。相同的VL的分組的發(fā)射順序指定伴隨那個(gè)VL的分組將流出到鏈路的順序。通過VL仲裁算法來確定選擇在逐VL的FIFO的頭處的分組的順序。注意,軟件可通過一個(gè)發(fā)送上下文上的PIO發(fā)送來以不同的VL發(fā)送分組。類似地,它可通過一個(gè)SDMA隊(duì)列上的SDMA來以不同VL發(fā)送分組。此實(shí)現(xiàn)方式甚至當(dāng)分組處于不同的VL上時(shí)也保持通過發(fā)送上下文或SDMA隊(duì)列而一直到發(fā)射點(diǎn)的分組順序。然而,發(fā)射以外則由于逐VL的發(fā)射FIFO而沒有保證的排序,并且至鏈路的實(shí)際流出順序?qū)⑷Q于VL仲裁的細(xì)節(jié)。在一個(gè)實(shí)施例下,將以原始的程序順序使用于相同的發(fā)送上下文的、待使用相同的VL發(fā)射的分組流出。同時(shí),可使使用不同的VL被發(fā)射的分組亂序地流出,使得如果將通過不同的VL來發(fā)射這些分組,則較晚寫入的分組將領(lǐng)先(proceed)較早寫入的分組。在一個(gè)實(shí)施例中,在上文限定的排序以外,HFI不提供關(guān)于發(fā)射順序的保證。例如,分組在任何SDMA隊(duì)列上的發(fā)射順序不由HFI參照任何其他SDMA上的分組或參照使用PIO發(fā)送而發(fā)送的任何分組來排序。此外,分組在任何發(fā)送上下文上的發(fā)射順序不由HFI參照任何其他發(fā)送上下文上的分組或參照使用SDMA而發(fā)送的任何分組來排序。圖11是示出在準(zhǔn)備供向外流出到耦合至HFI的結(jié)構(gòu)鏈路上的分組數(shù)據(jù)時(shí)實(shí)現(xiàn)的操作、階段和狀態(tài)的流程圖。在分組填充階段1102期間,正在經(jīng)由PIO發(fā)送或SDMA機(jī)制、以分組數(shù)據(jù)來填充發(fā)送存儲器。當(dāng)全部分組數(shù)據(jù)緩沖在發(fā)送存儲器中時(shí),分組完成狀態(tài)1104發(fā)生。此刻,分組填充完成,并且有資格發(fā)射。分組發(fā)射1106是分組從發(fā)送存儲器發(fā)射到逐VL的發(fā)射FIFO上的時(shí)刻。在此階段期間,分組數(shù)據(jù)仍占據(jù)發(fā)送緩沖器狀態(tài),但是在發(fā)射時(shí),分組現(xiàn)在準(zhǔn)備好流出,并且分組相對于那個(gè)相同的VL上的其他分組的順序被建立。在分組VL仲裁1108期間,在逐VL的發(fā)射FIFO的頭處的分組在它們之間仲裁,并且由VL仲裁算法選擇一個(gè)分組以流出到鏈路。在分組流出1110期間,從發(fā)送存儲器(PIO發(fā)送存儲器120或SDMA存儲器124,如果適用)讀取經(jīng)由VL仲裁而選擇的分組的分組數(shù)據(jù),并且在塊1012中執(zhí)行分組完整性校驗(yàn)以確定分組數(shù)據(jù)是否有效。未通過完整性校驗(yàn)的分組被丟棄,而好的分組流出到鏈路,這可包括HCRC和ICRC的插入(如果需要)以及在出口FIFO1016中的緩沖。下一階段是分組被清除1112。當(dāng)分組已清除發(fā)送緩沖器且發(fā)送緩沖器可用于重新使用時(shí),此狀態(tài)發(fā)生。相應(yīng)地,在返回信用框1114中,經(jīng)由信用返回機(jī)制127返回用于發(fā)送緩沖器的一個(gè)或多個(gè)信用,并且被清除的發(fā)送塊變得可用于以新分組數(shù)據(jù)來填充。然而要注意,實(shí)現(xiàn)方式可將信用返回和發(fā)送緩沖器重新使用向下優(yōu)化至發(fā)送塊級別,使得在分組的整體已流出到鏈路之前可重新使用一些發(fā)送塊。這可以是其中發(fā)送緩沖器資源有限的重要的實(shí)現(xiàn)方式。此外,如上文所解釋,雖然可清除發(fā)送塊,但是如果存在在FIFO中在所述發(fā)送塊下方的還未被清除的其他發(fā)送塊,則直到那些塊也被清除才將返回所述塊的信用。信用返回機(jī)制PIO發(fā)送機(jī)制使用信用返回機(jī)制來確保在先前的分組清除發(fā)送緩沖器之前不由軟件覆寫發(fā)送緩沖器塊。在一個(gè)實(shí)施例中,發(fā)送信用處于64B粒度,并且一個(gè)發(fā)送信用對應(yīng)于一個(gè)(64B)發(fā)送塊。有序地返回用于發(fā)送上下文的發(fā)送信用,并且軟件以環(huán)繞式FIFO方式使用發(fā)送緩沖器存儲器。發(fā)送信用核算(accounting)使用絕對編號,使得HFI可在任何時(shí)刻、以更新的值來覆寫信用返回信息而不損失發(fā)送信用。信用返回也提供狀態(tài)信息,并且這通過相繼的信用返回寫入來覆寫。當(dāng)遭遇錯(cuò)誤時(shí),強(qiáng)制信用返回使錯(cuò)誤指示置位,并且發(fā)送上下文被置于錯(cuò)誤狀態(tài),并且直到由主機(jī)系統(tǒng)軟件將發(fā)送上下文從錯(cuò)誤狀態(tài)恢復(fù)才將調(diào)度進(jìn)一步的信用返回寫入。這確??捎芍鳈C(jī)軟件觀察并適當(dāng)?shù)靥幚硇庞梅祷匚恢弥械腻e(cuò)誤指示而沒有被覆寫的風(fēng)險(xiǎn)。簡而言之,通過維持已被消耗的信用數(shù)量的運(yùn)行計(jì)數(shù)以及已被釋放的信用數(shù)量的運(yùn)行計(jì)數(shù)來實(shí)現(xiàn)信用跟蹤。當(dāng)前被占據(jù)的信用的數(shù)量則為這些計(jì)數(shù)之間的差值。如上文所述,這些是隨著信用被消耗或釋放而適當(dāng)?shù)睾唵芜f增的絕對計(jì)數(shù)器。在初始化之后,發(fā)送緩沖器將是空的,并且用于那個(gè)緩沖器的所有發(fā)送信用可用于軟件。在一個(gè)實(shí)施例中,可指派給發(fā)送上下文的發(fā)送信用的最大數(shù)目為1024,1024對應(yīng)于用于發(fā)送緩沖器的64KB最大尺寸。在一個(gè)實(shí)施例中,11位計(jì)數(shù)器用于跟蹤信用信息。此方法使用一個(gè)額外的位,使得計(jì)數(shù)器在值上可相差完整的1024值。這也允許使其中0個(gè)信用可用以及1024個(gè)信用可用的情況意義分明。對計(jì)數(shù)器數(shù)學(xué)執(zhí)行對2048求模(modulo2048)。例如,對11位計(jì)數(shù)器的進(jìn)展(advance)以及11位計(jì)數(shù)器的差執(zhí)行對2048求模。更詳細(xì)地,軟件和硬件兩者各自都針對每一個(gè)上下文維持11位計(jì)數(shù)器以跟蹤信用使用。軟件計(jì)數(shù)器被稱為填充計(jì)數(shù)器。硬件計(jì)數(shù)器被稱為自由計(jì)數(shù)器。硬件以適當(dāng)?shù)拈g隔將其計(jì)數(shù)器值直接存儲器訪問(DMA)到保持在主機(jī)存儲器中的影子自由計(jì)數(shù)器,使得軟件具有對信用返回的可見性。最初,兩個(gè)計(jì)數(shù)器都是0,并且沒有發(fā)送信用在使用。所使用的信用的數(shù)量被計(jì)算為填充計(jì)數(shù)器減去自由計(jì)數(shù)器,再對2048求模??捎玫男庞玫臄?shù)目則是發(fā)送上下文中信用的總數(shù)目減去所使用信用的數(shù)目。當(dāng)這兩個(gè)計(jì)數(shù)器具有相同值時(shí),上下文是空的,并且此發(fā)送上下文的發(fā)送信用的全部都可用于供軟件來填充。在將發(fā)送塊寫入到發(fā)送上下文之前,軟件校驗(yàn)可用的信用。隨著軟件填充發(fā)送塊,它遞增它的填充計(jì)數(shù)器再對2048求模以指示軟件已使用信用的當(dāng)前程度。當(dāng)軟件沒有可用的信用時(shí),它將等待信用釋放出來。軟件可監(jiān)測主機(jī)存儲器中的影子自由計(jì)數(shù)器以確定信用何時(shí)釋放。以下示出對應(yīng)于信用跟蹤的抽象模型的偽代碼。偽代碼列舉1#如果由足夠的空間,則此方法以num_credites填充發(fā)送緩沖器并返回“真”。否則,它返回“假”。#如果具有將流出的分組,則此方法使那個(gè)分組流出,釋放它的信用,并且返回指示信用數(shù)目的值。否則,它返回“假”。在一個(gè)實(shí)施例中,發(fā)送信用返回經(jīng)聚合以減少PCIe和消耗的存儲器帶寬。以被稱為SendCtxtCreditCtrl.Threshold的信用閾值對每一個(gè)發(fā)送上下文編程。發(fā)送上下文維持跟蹤還未流出到結(jié)構(gòu)的最舊的(就發(fā)送緩沖器內(nèi)的地址順序而言)發(fā)送塊的計(jì)數(shù)器值。如上文所討論,當(dāng)在單個(gè)發(fā)送緩沖器中使用多個(gè)VL時(shí),發(fā)送塊的流出可能是亂序的。為了解決此情況,采用硬件狀態(tài)來跟蹤亂序流出,使得可提供有序的信用返回。用于這個(gè)最舊的發(fā)送塊的計(jì)數(shù)器之間的差減去自由計(jì)數(shù)器的硬件副本為還未返回至軟件的待定的自由信用的數(shù)量。當(dāng)此值匹配或超出閾值時(shí),為那個(gè)發(fā)送上下文發(fā)起發(fā)送信用返回。此信用返回方法使高達(dá)閾值的信用駐留在硬件中,并且不提供保證所有信用都可返回的方法。這對于任何特定的發(fā)送已清除發(fā)送緩沖器是個(gè)問題。具有所提供的若干方法來解決此問題:·在許多情況下,主機(jī)軟件可使用信用返回閾值機(jī)制,并且將不介意特定的PIO發(fā)送是否已清除發(fā)送緩沖器?!ぶ鳈C(jī)可使用SendCtxtCreditStatus寄存器從適配器寄存器讀取用于發(fā)送上下文的當(dāng)前的信用值?!ぶ鳈C(jī)可寫入SendCtxtCreditForce寄存器以強(qiáng)制為發(fā)送上下文調(diào)度信用返回?!ぴ试S主機(jī)經(jīng)由被稱為PbcCreditReturn的PBC位來請求用于特定的PIO發(fā)送的信用返回。此外,當(dāng)在特定的發(fā)送上下文上返回信用時(shí),主機(jī)軟件可為中斷進(jìn)行布置。在一些實(shí)施例中,可實(shí)現(xiàn)早信用返回機(jī)制,所述早信用返回機(jī)制允許一承諾分組流出但在分組實(shí)際已清除發(fā)送緩沖器之前就更激進(jìn)地將信用返回至主機(jī)。這允許主機(jī)在下一分組上開始以優(yōu)化信用返回等待時(shí)間并減少發(fā)送緩沖要求。構(gòu)思在于,當(dāng)出口正使用于發(fā)送緩沖器的先前占據(jù)者的發(fā)送緩沖器耗盡時(shí),主機(jī)可開始填充下一分組。采用硬件互鎖以確保先前分組不會被覆寫,并且也實(shí)現(xiàn)速率匹配的出口FIFO,使得能以結(jié)構(gòu)線速率使先前分組耗盡。在實(shí)現(xiàn)問題的情況下,可在每個(gè)上下文的基礎(chǔ)上禁用此機(jī)制。這對于在每個(gè)上下文的發(fā)送信用為低(例如,當(dāng)使用大量上下文以及較大的MTU尺寸時(shí))的情況下改善性能是重要的優(yōu)化。提供逐發(fā)送上下文配置位(SendCtxtCreditCtrl.EarlyReturn)以啟用或禁用早信用返回。當(dāng)啟用時(shí),可在早期(即,在清除那個(gè)發(fā)送塊的分組流出之前)由硬件釋放單獨(dú)的發(fā)送塊,并且這些早期釋放的信用使通常的信用返回算法被返回。信用返回閾值機(jī)制仍適用。注意,軟件用于確保具有指派給它希望發(fā)送的分組的發(fā)送上下文的足夠的信用。如果具有指派給特定分組的發(fā)送上下文的不足的信用,則足夠的信用將從不變得可用于發(fā)射分組。一種方法是軟件基于指派給發(fā)送上下文的發(fā)送塊的數(shù)量來限制分組尺寸。這種計(jì)算應(yīng)當(dāng)考慮,用于上下文的高達(dá)信用閾值的信用可能駐留在硬件中,并且直到未來的發(fā)送塊流出才將自動地返回所述信用。在一個(gè)實(shí)施例中,發(fā)送信用返回實(shí)現(xiàn)為至64B高速緩存行對齊的地址的對主機(jī)存儲器的64B寫入。對此的理由是避免存儲器上來自IIO的讀取-修改-寫入操作,因?yàn)檫@些操作添加附加的等待時(shí)間,并且可能影響對主機(jī)存儲器訪問的流水線化。然而,這意味著信用返回消耗附加的PCIe帶寬。雖然這通過發(fā)送信用返回聚合減緩,但是期望在可能的情況下進(jìn)一步減少這種情況。在一個(gè)實(shí)施例中,如下文中所述,這經(jīng)由跨發(fā)送上下文組使用聚合的信用來促進(jìn)。在一個(gè)實(shí)施例中,每一個(gè)11位返回值與上下文狀態(tài)組合,并且以預(yù)留位填補(bǔ)以實(shí)現(xiàn)64位值。在一個(gè)實(shí)施例中,64位值支持多達(dá)8個(gè)信用返回,所述8個(gè)信用返回將打包為用于組信用返回的64B寫入。用于減少信用返回開銷的一種技術(shù)是跨發(fā)送上下文組來聚合信用返回。想法在于,發(fā)送上下文可成組在一起,隨后利用對主機(jī)存儲器的單個(gè)64B寫入來執(zhí)行用于上下文組的信用返回。在一個(gè)實(shí)施例中,160個(gè)發(fā)送上下文聚合為8個(gè)連續(xù)發(fā)送上下文的集合,總計(jì)20個(gè)集合。然而,可使用發(fā)送上下文的其他聚合。8個(gè)發(fā)送上下文的集合尺寸允許20個(gè)不同的集合,并具有針對每一個(gè)集合獨(dú)立地指定成組的能力。集合號S包含發(fā)送上下文8S至8S+7,包含8S和8S+7。在表2中示出用于一個(gè)實(shí)施例的集合映射。20個(gè)集合的選擇給予40個(gè)、80個(gè)和160個(gè)發(fā)送上下文的典型配置中的合理的靈活性。在具有減少數(shù)量的發(fā)送上下文的配置中,當(dāng)取決于所需要的成組來選擇要使用哪些發(fā)送上下文時(shí),軟件獲得附加的靈活性??瑟?dú)立地將每一個(gè)集合配置為表3中示出的配置。集合號集合中的發(fā)送上下文00至718至15……19152至159表2值(B)組的數(shù)目每組的發(fā)送上下文(G)081(即,沒有實(shí)際成組)142224318(即,最大成組)表3伴隨著最小值1,集合具有每組有1個(gè)發(fā)送上下文(即,沒有實(shí)際成組)的8個(gè)組。這給予了完全的靈活性,因?yàn)槟莻€(gè)集合中的每一個(gè)發(fā)送上下文將具有獨(dú)立的信用返回。伴隨著最大值3,集合具有包含全部8個(gè)發(fā)送上下文的1個(gè)組,并且為所有8個(gè)發(fā)送上下文聚合信用返回。相應(yīng)地,由那8個(gè)發(fā)送上下文共享用于那個(gè)集合的信用返回的主機(jī)存儲器頁。注意,僅那個(gè)頁的只讀映射是需要的,因?yàn)檐浖粚懭胄庞梅祷匚恢?。取決于那8個(gè)發(fā)送上下文的信用返回算法如何彼此相互作用,最大組尺寸8給予高達(dá)8x的信用返回帶寬降低。每一個(gè)發(fā)送上下文都具有SendCtxtCreditReturnAddr寄存器,所述SendCtxtCreditReturnAddr寄存器指定主機(jī)物理地址以及用于那個(gè)發(fā)送上下文的信用返回的TPH信息。當(dāng)使用發(fā)送上下文成組時(shí),信用返回使用SendCtxtCreditReturnAdd寄存器,所述SendCtxtCreditReturnAdd寄存器屬于觸發(fā)了信用返回的上下文。在一個(gè)實(shí)施例中,軟件用于對用于具有相同地址的組中的全部上下文的SendCtxtCreditReturnAdd寄存器編程。當(dāng)由特定的發(fā)送上下文(表示為N)發(fā)起信用返回時(shí),通過使發(fā)送上下文號右移位3來將發(fā)送上下文映射至集合號(S)。集合號用于查找每個(gè)集合的配置狀態(tài),并且給出如表3的最左邊列中所示的值B。B是區(qū)分同一組中的發(fā)送上下文的發(fā)送上下文號的最低有效位的數(shù)量。那個(gè)組中的發(fā)送上下文的數(shù)量為G且等于1<<B,并且取表3的最右邊列中的值。此集合中的最低發(fā)送上下文號被稱為M,并且具有值(N>>B)<<B,該值是最低有效的B個(gè)位被清除的值N。在一個(gè)實(shí)施例中,信用返回如下所述實(shí)現(xiàn):使用一個(gè)64B寫入為G個(gè)發(fā)送上下文聚合信用返回。在用于上下文號M(組中最低編號的上下文)的SendCtxtCreditReturnAddr寄存器中指定返回的地址,同時(shí)此信用返回的G個(gè)發(fā)送上下文從M至M+G-1編號,包含M和M+G-1。組中的每一個(gè)發(fā)送上下文的信用信息是QW,利用G,此類值打包為64B信用返回寫入。對于范圍[0,G-1]中的I,所返回的信用用于發(fā)送上下文號M+1,并且信用以索引(M+I)&0x7被置入QW。由此,此索引簡單地由發(fā)送上下文號的最低的3個(gè)位指定,并且無論G的值如何,特定發(fā)送上下文的信用返回值總是在64B信用返回中中的相同位置中,從而消除了實(shí)現(xiàn)方式中的移位操作。信用返回值中未使用的QW以值0x0填充。在表4中總結(jié)了信用返回值的所有組合。存在針對至64B信用返回的不同索引值的8列。索引0對應(yīng)于字節(jié)0至7,索引1對應(yīng)于字節(jié)8至15,以此類推。每一行描繪針對那個(gè)特定的G值(其是每個(gè)組的發(fā)送上下文的數(shù)量)的信用返回值的一個(gè)組合。空單元格指示未使用的QW,并且這些孔單元格具有零值。符號CRx(其中x在0至7的范圍內(nèi))指示上下文的信用返回值,并且最低的3個(gè)有效位等于x。每一個(gè)CRxQW值具有由表2定義的格式。例如,當(dāng)G為1時(shí),具有一個(gè)信用返回值,并且此信用返回值將取決于發(fā)送上下文號而在8個(gè)位置中的一個(gè)位置中。當(dāng)G為8時(shí),具有8個(gè)信用返回值,并且全部8個(gè)位置都被使用。表4當(dāng)為發(fā)送上下文組返回信用時(shí),用于組中的每一個(gè)發(fā)送上下文的自由計(jì)數(shù)器更新至以DMA方式傳送至保持在主機(jī)存儲器中的影子副本的信用計(jì)數(shù)器值。此方法意味著,當(dāng)一個(gè)發(fā)送上下文基于它的閾值來觸發(fā)針對組的信用返回時(shí),在最大可能的程度上為那個(gè)組中的所有其他發(fā)送上下文提供信用返回。假定發(fā)送塊流出跨組的成員合理地被交織,則此方法整體上降低了針對所述組的發(fā)送信用更新的頻率。注意,為了使此機(jī)制是有效的,閾值需要大于最大分組中的發(fā)送塊的數(shù)量。圖12示出根據(jù)一個(gè)實(shí)施例的PIO發(fā)送地址FIFO1200和信用返回FIFO1202的示例性配置,所述信用返回FIFO1202用于使用絕對信用來支持PIO寫入管理。在生成PIO發(fā)送存儲器寫入的軟件的管理下,為存儲器106中的每一個(gè)發(fā)送上下文實(shí)現(xiàn)PIO發(fā)送地址FIFO1400。如上文中所討論,在一個(gè)實(shí)施例中,結(jié)合FIFO語義來使用11位運(yùn)行計(jì)數(shù)器以跟蹤可用的信用(其對應(yīng)于每一個(gè)發(fā)送上下文內(nèi)可用的發(fā)送塊)。隨著指令的每一個(gè)發(fā)送塊信息量被生成和轉(zhuǎn)發(fā)供由處理器核執(zhí)行,軟件增加其用于發(fā)送塊將被寫入到的發(fā)送上下文的運(yùn)行計(jì)數(shù)。同時(shí),在接收端上,信用返回機(jī)制127維持所返回的絕對信用的11位運(yùn)行計(jì)數(shù)。隨著信用被返回,運(yùn)行計(jì)數(shù)進(jìn)展。FIFO使用循環(huán)FIFO語義,在循環(huán)FIFO語義下,一旦計(jì)數(shù)器達(dá)到2047,它就返回至0。軟件也保持跟蹤用于每一個(gè)發(fā)送上下文的絕對返回信用。只要所發(fā)送的絕對運(yùn)行計(jì)數(shù)與所返回的絕對運(yùn)行計(jì)數(shù)之間的差小于發(fā)送上下文的尺寸,軟件就可生成附加的PIO發(fā)送存儲器寫入。一旦差異達(dá)到所發(fā)送的上下文的尺寸,分組數(shù)據(jù)至發(fā)送上下文的寫入就暫停,直到經(jīng)由信用返回機(jī)制127接收到經(jīng)更新的絕對運(yùn)行計(jì)數(shù)為止。示例性HFI實(shí)現(xiàn)架構(gòu)圖13示出了具有示例性配置的系統(tǒng)節(jié)點(diǎn)1300,所述示例性配置包括主機(jī)結(jié)構(gòu)接口102,所述主機(jī)結(jié)構(gòu)接口102包括耦合至處理器1306的結(jié)構(gòu)端口112,所述處理器1306又耦合至存儲器106。結(jié)構(gòu)端口112包括具有與圖1中所示的配置類似的高層級配置的發(fā)射端口110和接收端口116。發(fā)射端口110包括:Tx鏈路結(jié)構(gòu)子層電路和邏輯1310,包括劃分成多個(gè)發(fā)送VL緩沖器的發(fā)送緩沖器(Tbuf);Tx鏈路傳送子層電路和邏輯1312;TxPHY電路和邏輯1314,包括四個(gè)發(fā)射機(jī)1316;以及Tx鏈路控制塊1317。接收端口116包括:Rx鏈路結(jié)構(gòu)子層電路和邏輯1318,包括劃分成多個(gè)接收VL緩沖器的接收緩沖器(Rbuf);Rx鏈路傳送子層電路和邏輯1320;RxPHY電路和邏輯1322,包括四個(gè)接收機(jī)1324;以及Rx鏈路控制塊1325。以簡化的形式示出TxPHY電路和邏輯1314,包括四個(gè)發(fā)射機(jī)1316和Tx鏈路控制塊2017的部分。一般而言,取決于該鏈路的PHY層配置,發(fā)射機(jī)1316可包括電氣或光學(xué)發(fā)射機(jī)。聯(lián)網(wǎng)領(lǐng)域的普通技術(shù)人員將理解,TxPHY電路和邏輯塊將包括為了清楚起見而未示出的、用于實(shí)現(xiàn)發(fā)射側(cè)PHY層操作的附加的電路和邏輯。這包括PHY層內(nèi)的各種子層,這些子層用于促進(jìn)結(jié)合高速互連來實(shí)現(xiàn)的各種特征以減少錯(cuò)誤并增強(qiáng)傳輸特性。以簡化的形式示出RxPHY電路和邏輯1322,該RxPHY電路和邏輯1322包括四個(gè)接收機(jī)1324和Rx鏈路控制塊2025的部分。一般而言,取決于鏈路的PHY層配置,接收機(jī)1324可包括電氣或光學(xué)發(fā)射機(jī),并且將配置成在該鏈路上接收來自發(fā)射機(jī)1316的信號。聯(lián)網(wǎng)領(lǐng)域的普通技術(shù)人員將理解,RxPHY電路和邏輯塊將包括為了清楚起見而未示出的、用于實(shí)現(xiàn)接收側(cè)PHY層操作的附加的電路和邏輯。這包括PHY層內(nèi)的各種子層,這些子層用于促進(jìn)結(jié)合高速互連來實(shí)現(xiàn)的各種特征以減少錯(cuò)誤并增強(qiáng)傳輸特性。HFI1302進(jìn)一步包括耦合至PCIe接口118的發(fā)射引擎108和接收引擎114。發(fā)射引擎108和接收引擎114中的每一者都以類似于如上文中所述的圖1中的發(fā)射引擎108和接收引擎114的方式來配置。處理器1306包括CPU1326,該CPU1326包括多個(gè)處理器核1328,每一個(gè)處理器核都包括集成的第1級和第2級(L1/L2)高速緩存并耦合至一致性互連1330。在所示實(shí)施例中,存儲緩沖器(St.Bf.)也示出為耦合至每一個(gè)核1328;任選地,可跨處理器中的全部處理器核或處理器核的部分來共享存儲緩沖器。也耦合至一直性互連1330的是耦合至存儲器106的存儲器接口1332、集成輸入/輸出塊(IIO)1334以及末級高速緩存(LLC)1336。IIO1334在由處理器核、存儲器和高速緩存所采用的一致性域與用于IO部件和IO接口(包括一對PCIe根復(fù)合體(RC)1338和1340)的非一致性域之間提供接口。如本領(lǐng)域公知,PCIeRC位于PCIe互連層次結(jié)構(gòu)的頂部,多個(gè)PCIe接口和PCIe設(shè)備可耦合至PCIeRC,如PCIe接口1342、1344、1346和1348所示。如圖所示,PCIe1344耦合至HFI102的PCIe接口118。在諸如圖13中所示的一些實(shí)施例中,處理器1306采用SoC架構(gòu)。在其他實(shí)施例中,PCIe相關(guān)的組件集成在耦合至處理器的IO芯片組等中。在其他實(shí)施例中,處理器1306以及一個(gè)或多個(gè)HFI102被集成在SoC上,諸如,由SoC1350的虛線輪廓所描繪。同樣,如圖所示,第二HFI102示出為耦合至PCIe接口1346,其中,虛線輪廓指示這是任選的配置。在一個(gè)實(shí)施例中,如圖14中所示,在ASIC(專用集成電路)1400上實(shí)現(xiàn)多個(gè)HFI。如圖13中進(jìn)一步所示,軟件應(yīng)用1352包括在處理器核1328中的一個(gè)或多個(gè)或由運(yùn)行在處理器1306上的操作系統(tǒng)主管的一個(gè)或多個(gè)虛擬機(jī)上運(yùn)行的軟件組件。除了這些軟件組件之外,存在實(shí)現(xiàn)在存儲器106中的附加的軟件組件和緩沖器,以促進(jìn)在存儲器106(包括適用的多個(gè)高速緩存級)與發(fā)射引擎108和接收引擎114之間的數(shù)據(jù)傳送。在以下眾多條款中闡述本文中所述主題的進(jìn)一步的方面:1.一種方法,包括:將經(jīng)編程的輸入/輸出(PIO)發(fā)送存儲器中的存儲器空間分區(qū)為多個(gè)發(fā)送上下文,每一個(gè)發(fā)送上下文都包括存儲器緩沖器,所述存儲器緩沖器包括配置成用于存儲分組數(shù)據(jù)的多個(gè)發(fā)送塊;使用先入先出(FIFO)語義為每一個(gè)發(fā)送上下文實(shí)現(xiàn)存儲方案,在所述存儲方案下,每一個(gè)發(fā)送上下文占據(jù)具有FIFO順序的FIFO緩沖器中的相應(yīng)FIFO槽,并且給定分組的數(shù)據(jù)以FIFO順序被存儲在占據(jù)一個(gè)或多個(gè)相應(yīng)的順序的FIFO槽的一個(gè)或多個(gè)發(fā)送塊中;接收被亂序地寫入發(fā)送塊的分組數(shù)據(jù),使得按照與FIFO順序不同的順序以分組數(shù)據(jù)填充分組發(fā)送塊的至少部分;使包含所填充的分組數(shù)據(jù)的發(fā)送塊流出;響應(yīng)于檢測到一個(gè)或多個(gè)發(fā)送塊已從發(fā)送上下文流出,檢測已被釋放的一個(gè)或多個(gè)FIFO槽;檢測已被釋放的一個(gè)或多個(gè)FIFO槽中的任一者是否占據(jù)還未為其返回信用返回標(biāo)記的發(fā)送上下文的按FIFO順序的最低槽;并且如果是,返回信用返回標(biāo)記,通過所述信用返回標(biāo)記,可標(biāo)識按FIFO順序的被釋放的槽的序列的最高FIFO槽,所述被釋放的槽的序列包括還未為其返回信用信息的最低槽。2.如條款1所述的方法,其中,所述信用返回標(biāo)記包括絕對信用返回計(jì)數(shù),所述絕對信用返回計(jì)數(shù)包括所述發(fā)送上下文的、按FIFO順序的、從所述發(fā)送上下文的所述絕對信用返回計(jì)數(shù)被初始化起就已被釋放的發(fā)送塊的聚合數(shù)目。3.如條款2所述的方法,其中,每一個(gè)信用對應(yīng)于發(fā)送塊,所述方法包括:為每一個(gè)發(fā)送上下文維持絕對信用發(fā)送計(jì)數(shù),所述絕對信用發(fā)送計(jì)數(shù)標(biāo)識已經(jīng)或?qū)⒁?jīng)由PIO寫入指令填充的發(fā)送塊的聚合數(shù)目,所述PIO寫入指令從所述絕對信用發(fā)送計(jì)數(shù)被初始化起就已經(jīng)被分派以供執(zhí)行;接收發(fā)送上下文的絕對信用返回計(jì)數(shù);以及將所述發(fā)送上下文的絕對信用發(fā)送計(jì)數(shù)與所述發(fā)送上下文的絕對信用返回計(jì)數(shù)進(jìn)行比較以判定附加的分組數(shù)據(jù)是否可寫入所述發(fā)送上下文。4.如條款3所述的方法,進(jìn)一步包括:實(shí)現(xiàn)物理循環(huán)FIFO以將發(fā)送塊存儲在發(fā)送上下文中;實(shí)現(xiàn)邏輯循環(huán)FIFO以跟蹤所述發(fā)送上下文的絕對信用返回計(jì)數(shù)和絕對信用發(fā)送計(jì)數(shù),其中所述邏輯循環(huán)FIFO的尺寸大于所述物理循環(huán)FIFO的尺寸。5.如條款3或4所述的方法,進(jìn)一步包括:以循環(huán)FIFO順序?qū)⒂糜趯?shù)據(jù)寫入所述PIO發(fā)送存儲器中的發(fā)送上下文的PIO寫入指令分派至處理器,其中,所述循環(huán)FIFO具有的FIFO槽的數(shù)目匹配所述發(fā)送上下文的發(fā)送塊的數(shù)目,并且其中,每一個(gè)PIO寫入指令都定義對應(yīng)于相應(yīng)發(fā)送塊的PIO發(fā)送存儲器地址;以及如果所述絕對信用發(fā)送計(jì)數(shù)與所述絕對信用返回計(jì)數(shù)的差達(dá)到FIFO槽的數(shù)目,則暫停將PIO寫入指令分派至所述處理器。6.如條款2-5中的任一項(xiàng)所述的方法,進(jìn)一步包括:定義最小信用返回閾值;以及如果用于發(fā)送上下文的絕對信用返回計(jì)數(shù)與最近返回的絕對信用返回計(jì)數(shù)之間的差將符合或超出所述最小信用返回閾值,則返回所述發(fā)送上下文的絕對信用返回計(jì)數(shù);否則等待返回絕對信用返回計(jì)數(shù),直到用于所述發(fā)送上下文的絕對信用返回計(jì)數(shù)與最近返回的絕對信用返回計(jì)數(shù)之間的差將符合或超出所述最小信用返回閾值為止。7.如條款2-6中的任一項(xiàng)所述的方法,進(jìn)一步包括:經(jīng)由單條消息返回用于多個(gè)相應(yīng)發(fā)送上下文的多個(gè)絕對信用返回計(jì)數(shù)值。8.如前述條款中的任一項(xiàng)所述的方法,進(jìn)一步包括:防止存儲給定分組的數(shù)據(jù)的任何發(fā)送塊流出,直到所述分組的所有分組數(shù)據(jù)已寫入所述PIO發(fā)送存儲器。9.一種非暫態(tài)機(jī)器可讀介質(zhì),具有存儲于其上的指令,所述指令當(dāng)在處理器上執(zhí)行時(shí)使包括處理器的計(jì)算機(jī)實(shí)現(xiàn)前述條款中的任一項(xiàng)的方法。10.一種設(shè)備,包括:輸入/輸出(IO)接口;發(fā)射引擎,所述發(fā)射引擎耦合至IO接口且包括:經(jīng)編程的輸入/輸出(PIO)發(fā)送存儲器;出口塊,可操作地耦合至所述PIO發(fā)送存儲器;以及用于以下操作的電路和邏輯:將所述PIO發(fā)送存儲器分區(qū)為多個(gè)發(fā)送上下文,每一個(gè)發(fā)送上下文都包括多個(gè)順序的發(fā)送塊;使用先入先出(FIFO)語義為每一個(gè)發(fā)送上下文實(shí)現(xiàn)存儲方案,在所述存儲方案下,每一個(gè)發(fā)送上下文占據(jù)具有FIFO順序的FIFO緩沖器中的相應(yīng)FIFO槽,并且給定分組的數(shù)據(jù)以FIFO順序被存儲在占據(jù)一個(gè)或多個(gè)相應(yīng)的順序的FIFO槽的一個(gè)或多個(gè)發(fā)送塊中;接收被亂序地寫入發(fā)送塊的分組數(shù)據(jù),使得按照與FIFO順序不同的順序以分組數(shù)據(jù)填充分組發(fā)送塊的至少部分;使包含所填充的分組數(shù)據(jù)的發(fā)送塊流出;響應(yīng)于檢測到一個(gè)或多個(gè)發(fā)送塊已從發(fā)送上下文流出,檢測已被釋放的一個(gè)或多個(gè)FIFO槽;檢測已被釋放的一個(gè)或多個(gè)FIFO槽中的任一者是否占據(jù)還未為其返回絕對信用返回計(jì)數(shù)的發(fā)送上下文的按FIFO順序的最低槽;并且如果是,確定已釋放的FIFO槽序列中的最高FIFO槽,其中以還未為其返回信用返回標(biāo)記的發(fā)送上下文的按FIFO順序的最低被釋放的槽開始,還未為所述最高FIFO槽返回信用返回標(biāo)記;以及基于所確定的所述最高FIFO槽來返回絕對信用返回計(jì)數(shù)。11.如條款10所述的裝置,其中,所述絕對信用返回計(jì)數(shù)包括所述發(fā)送上下文的、按FIFO順序的、從所述發(fā)送上下文的所述絕對信用返回計(jì)數(shù)被初始化起就已被釋放的發(fā)送塊的聚合數(shù)目。12.如條款10或11所述的裝置,其中,所述發(fā)射引擎進(jìn)一步包括用于以下操作的邏輯:實(shí)現(xiàn)物理循環(huán)FIFO以將發(fā)送塊存儲在發(fā)送上下文中;以及實(shí)現(xiàn)邏輯循環(huán)FIFO以跟蹤每一個(gè)發(fā)送上下文的絕對信用返回計(jì)數(shù),其中,對于所有發(fā)送上下文,所述邏輯循環(huán)FIFO的尺寸是相同的,而至少兩個(gè)發(fā)送上下文的尺寸與所述至少兩個(gè)發(fā)送上下文的相關(guān)聯(lián)的物理循環(huán)FIFO是不同的。13.如條款10-12中的任一項(xiàng)所述的裝置,其中,所述發(fā)射引擎進(jìn)一步包括用于以下操作的邏輯:如果用于發(fā)送上下文的絕對信用返回計(jì)數(shù)與最近返回的絕對信用返回計(jì)數(shù)之間的差將符合或超出所述最小信用返回閾值,則返回所述發(fā)送上下文的絕對信用返回計(jì)數(shù);否則等待返回絕對信用返回計(jì)數(shù),直到用于所述發(fā)送上下文的絕對信用返回計(jì)數(shù)與最近返回的絕對信用返回計(jì)數(shù)之間的差將符合或超出所述最小信用返回閾值為止。14.如條款10-13中的任一項(xiàng)所述的裝置,其中,所述發(fā)射引擎進(jìn)一步包括用于以下操作的邏輯:并發(fā)地檢測多個(gè)發(fā)送上下文中的FIFO槽的釋放并確定多個(gè)絕對信用計(jì)數(shù),所述多個(gè)絕對信用計(jì)數(shù)包括在所述多個(gè)發(fā)送上下文之間用于所述多個(gè)發(fā)送上下文中的每一個(gè)的絕對信用計(jì)數(shù);以及經(jīng)由單條信用返回消息返回所述多個(gè)絕對信用返回計(jì)數(shù)。15.如條款10-14中的任一項(xiàng)所述的裝置,其中,所述IO接口包括第一(PCIe接口),所述裝置進(jìn)一步包括:處理器,所述處理器具有支持亂序執(zhí)行的多個(gè)處理器核,并且包括存儲器接口、至少一個(gè)存儲緩沖器以及第二PCIe接口,所述第二PCIe接口經(jīng)由PCIe互連而耦合至所述第一PCIe接口;進(jìn)一步包括用于以下操作的電路和邏輯:接收PIO寫入指令的序列,所述PIO寫入指令用于當(dāng)耦合至所述存儲器接口時(shí)將存儲在存儲器中的相應(yīng)分組的分組數(shù)據(jù)寫入所述PIO發(fā)送存儲器;將所述PIO寫入指令的序列作為處理器核上的指令線程來執(zhí)行,其中PIO寫入指令的執(zhí)行使數(shù)據(jù)被寫入到存儲緩沖器中的存儲單元,所述存儲單元成組為包括存儲單元行的存儲塊,其中,所述PIO寫入指令的部分被亂序地執(zhí)行,從而導(dǎo)致在所述存儲塊被填充之前,數(shù)據(jù)被寫入到不同存儲塊中的存儲單元;檢測存儲塊何時(shí)被填充;以及響應(yīng)于檢測到存儲塊被填充,經(jīng)由通過所述PCIe互連發(fā)送的、對所述PIO發(fā)送存儲器中的發(fā)送塊的PCIe投遞的寫入來使所述存儲塊中的數(shù)據(jù)耗盡。16.如權(quán)利要求10-15中的任一項(xiàng)所述的裝置,進(jìn)一步包括發(fā)射端口,所述發(fā)射端口耦合至所述發(fā)射引擎并包括多個(gè)發(fā)射機(jī),其中,所述裝置包括單個(gè)集成組件。17.如條款16所述的裝置,其中,所述裝置包括主機(jī)結(jié)構(gòu)接口,所述主機(jī)結(jié)構(gòu)接口進(jìn)一步包括:接收引擎,耦合至所述IO接口;以及接收端口,耦合至所述接收引擎。18.如條款17所述的裝置,其中,所述裝置包括主機(jī)結(jié)構(gòu)接口芯片,所述主機(jī)結(jié)構(gòu)接口芯片包括具有為條款17的主機(jī)結(jié)構(gòu)接口定義的配置。19.一種系統(tǒng),包括:處理器,所述處理器具有支持亂序執(zhí)行的多個(gè)處理器核,并且包括存儲器接口、至少一個(gè)存儲緩沖器以及第一PCIe(外圍組件互連快速)接口;第二PCIe接口,經(jīng)由PCIe互連而耦合至所述處理器的所述第一PCIe接口;以及發(fā)射引擎,所述發(fā)射引擎可操作地耦合至所述第二PCIe接口且包括經(jīng)編程的輸入/輸出(PIO)發(fā)送存儲器和出口塊,所述出口塊可操作地耦合至所述PIO發(fā)送存儲器,其中所述處理器包括用于以下操作的電路和邏輯:接收經(jīng)編程的輸入/輸出(PIO)寫入指令的序列,所述PIO寫入指令用于將存儲在存儲器中的相應(yīng)分組的分組數(shù)據(jù)寫入PIO發(fā)送存儲器,每一個(gè)PIO寫入指令定義包含所述數(shù)據(jù)的存儲器中的高速緩存行的位置以及所述數(shù)據(jù)將被寫入到的所述PIO發(fā)送存儲器中的發(fā)送塊的存儲器映射的地址,其中,用于將多個(gè)分組的分組數(shù)據(jù)寫入相同的發(fā)送上下文的PIO寫入指令以原始的先入先出(FIFO)順序而順序地成組;將所述PIO寫入指令的序列作為處理器核上的指令線程來執(zhí)行,其中,所述PIO寫入指令的部分被亂序地執(zhí)行,從而導(dǎo)致數(shù)據(jù)以與指令被接收的順序不同的順序被寫入所述PIO發(fā)送存儲器中的發(fā)送塊,并且其中所述發(fā)射引擎包括用于以下操作的電路和邏輯:將所述PIO發(fā)送存儲器分區(qū)為多個(gè)發(fā)送上下文,每一個(gè)發(fā)送上下文都包括多個(gè)順序的發(fā)送塊;使用FIFO語義為每一個(gè)發(fā)送上下文實(shí)現(xiàn)存儲方案,在所述存儲方案下,每一個(gè)發(fā)送塊以發(fā)送上下文FIFO順序占據(jù)相應(yīng)的FIFO槽,并且給定分組的數(shù)據(jù)被存儲在占據(jù)一個(gè)或多個(gè)相應(yīng)的順序的FIFO槽的一個(gè)或多個(gè)發(fā)送塊中;接收經(jīng)由所述PIO寫入指令的亂序執(zhí)行而寫入發(fā)送塊的分組數(shù)據(jù);使包含所填充的分組數(shù)據(jù)的發(fā)送塊流出;響應(yīng)于檢測到一個(gè)或多個(gè)發(fā)送塊已從發(fā)送上下文流出,檢測已被釋放的一個(gè)或多個(gè)FIFO槽;檢測已被釋放的一個(gè)或多個(gè)FIFO槽中的任一者是否占據(jù)還未為其返回絕對信用返回計(jì)數(shù)的按發(fā)送上下文FIFO順序的最低槽;并且如果是,確定已釋放的FIFO槽序列中的最高FIFO槽,并且以還未為其返回信用返回標(biāo)記的發(fā)送上下文的按FIFO順序的最低被釋放的槽開始,還未為所述最高FIFO槽返回信用返回標(biāo)記;以及基于所確定的所述最高FIFO槽來返回絕對信用返回計(jì)數(shù)。20.如條款19所述的裝置,其中,所述絕對信用返回計(jì)數(shù)包括所述發(fā)送上下文的、按FIFO順序的、從所述發(fā)送上下文的所述絕對信用返回計(jì)數(shù)被初始化起就已被釋放的發(fā)送塊的聚合數(shù)目。21.如條款19或條款所述的系統(tǒng),其中,所述發(fā)射引擎進(jìn)一步包括用于以下操作的邏輯:實(shí)現(xiàn)物理循環(huán)FIFO以將發(fā)送塊存儲在發(fā)送上下文中;以及實(shí)現(xiàn)邏輯循環(huán)FIFO以跟蹤每一個(gè)發(fā)送上下文的絕對信用返回計(jì)數(shù),其中,對于所有發(fā)送上下文,所述邏輯循環(huán)FIFO的尺寸是相同的,而至少兩個(gè)發(fā)送上下文的尺寸與所述至少兩個(gè)發(fā)送上下文的相關(guān)聯(lián)的物理循環(huán)FIFO是不同的。如條款19-21中的任一項(xiàng)所述的系統(tǒng),其中,所述發(fā)射引擎進(jìn)一步包括用于以下操作的邏輯:如果用于發(fā)送上下文的絕對信用返回計(jì)數(shù)與最近返回的絕對信用返回計(jì)數(shù)之間的差將符合或超出所述最小信用返回閾值,則返回所述發(fā)送上下文的絕對信用返回計(jì)數(shù);否則等待返回絕對信用返回計(jì)數(shù),直到用于所述發(fā)送上下文的絕對信用返回計(jì)數(shù)與最近返回的絕對信用返回計(jì)數(shù)之間的差將符合或超出所述最小信用返回閾值為止。23.如條款19-22中的任一項(xiàng)所述的系統(tǒng),其中,所述發(fā)射引擎進(jìn)一步包括用于以下操作的邏輯:并發(fā)地檢測多個(gè)發(fā)送上下文中的FIFO槽的釋放并確定多個(gè)絕對信用計(jì)數(shù),所述多個(gè)絕對信用計(jì)數(shù)包括在所述多個(gè)發(fā)送上下文之間用于所述多個(gè)發(fā)送上下文中的每一個(gè)的絕對信用計(jì)數(shù);以及經(jīng)由單條信用返回消息返回所述多個(gè)絕對信用返回計(jì)數(shù)。24.如條款19-23中的任一項(xiàng)所述的系統(tǒng),其中在主機(jī)結(jié)構(gòu)接口中實(shí)現(xiàn)所述第二PCIe接口和所述發(fā)射引擎,所述主機(jī)結(jié)構(gòu)接口進(jìn)一步包括:發(fā)射端口,所述發(fā)射端口耦合至所述發(fā)射引擎且包括多個(gè)發(fā)射機(jī);接收引擎,所述接收引擎耦合至所述第二PCIe接口;以及接收端口,所述接收端口耦合至所述接收引擎且包括多個(gè)接收機(jī)。25.如條款24所述的系統(tǒng),其中所述系統(tǒng)包括片上系統(tǒng)(SoC),所述片上系統(tǒng)包括所述處理器和所述主機(jī)結(jié)構(gòu)接口。26.如條款19-25中的任一項(xiàng)所述的系統(tǒng),進(jìn)一步包括:存儲器,耦合至所述存儲器接口,包括軟件應(yīng)用的指令存儲在所述存儲器中,所述指令配置成在由所述處理器執(zhí)行時(shí)執(zhí)行包括以下步驟的操作:為每一個(gè)發(fā)送上下文維持絕對信用發(fā)送計(jì)數(shù),所述絕對信用發(fā)送計(jì)數(shù)標(biāo)識已經(jīng)或?qū)⒁?jīng)由PIO寫入指令填充的發(fā)送塊的聚合數(shù)目,所述PIO寫入指令從所述絕對信用發(fā)送計(jì)數(shù)被初始化起就已經(jīng)被分派以供執(zhí)行;接收發(fā)送上下文的絕對信用返回計(jì)數(shù);以及將所述發(fā)送上下文的絕對信用發(fā)送計(jì)數(shù)與所述發(fā)送上下文的絕對信用返回計(jì)數(shù)進(jìn)行比較以判定附加的分組數(shù)據(jù)是否可寫入所述發(fā)送上下文。27.如條款26所述的系統(tǒng),其中,所述軟件應(yīng)用進(jìn)一步包括在由所述處理器執(zhí)行時(shí)執(zhí)行包括以下步驟的操作:以循環(huán)FIFO順序?qū)⒂糜趯?shù)據(jù)寫入所述PIO發(fā)送存儲器中的發(fā)送上下文的PIO寫入指令分派至處理器,其中,所述循環(huán)FIFO具有的FIFO槽的數(shù)目匹配所述發(fā)送上下文的發(fā)送塊的數(shù)目,并且其中,每一個(gè)PIO寫入指令都定義對應(yīng)于相應(yīng)發(fā)送塊的PIO發(fā)送存儲器地址;以及如果所述絕對信用發(fā)送計(jì)數(shù)與所述絕對信用返回計(jì)數(shù)的差達(dá)到FIFO槽的數(shù)目,則暫停將PIO寫入指令分派至所述處理器。28.如條款19-27中的任一項(xiàng)所述的系統(tǒng),其中所述PIO寫入指令包括512位寫入指令,存儲器高速緩存行和發(fā)送塊中的每一者都具有64字節(jié)的尺寸,并且其中,經(jīng)由64字節(jié)PCIe投遞的寫入將分組數(shù)據(jù)寫入發(fā)送塊。29.一種設(shè)備,包括:輸入/輸出(IO)接口;發(fā)射機(jī)引擎,所述發(fā)射機(jī)引擎耦合至IO接口且包括:經(jīng)編程的輸入/輸出(PIO)發(fā)送存儲器;出口塊,可操作地耦合至所述PIO發(fā)送存儲器;以及用于以下操作的裝置:將所述PIO發(fā)送存儲器分區(qū)為多個(gè)發(fā)送上下文,每一個(gè)發(fā)送上下文都包括多個(gè)順序的發(fā)送塊;使用先入先出(FIFO)語義為每一個(gè)發(fā)送上下文實(shí)現(xiàn)存儲方案,在所述存儲方案下,每一個(gè)發(fā)送上下文占據(jù)具有FIFO順序的FIFO緩沖器中的相應(yīng)FIFO槽,并且給定分組的數(shù)據(jù)以FIFO順序被存儲在占據(jù)一個(gè)或多個(gè)相應(yīng)的順序的FIFO槽的一個(gè)或多個(gè)發(fā)送塊中;接收被亂序地寫入發(fā)送塊的分組數(shù)據(jù),使得按照與FIFO順序不同的順序以分組數(shù)據(jù)填充分組發(fā)送塊的至少部分;使包含所填充的分組數(shù)據(jù)的發(fā)送塊流出;響應(yīng)于檢測到一個(gè)或多個(gè)發(fā)送塊已從發(fā)送上下文流出,檢測已被釋放的一個(gè)或多個(gè)FIFO槽;檢測已被釋放的一個(gè)或多個(gè)FIFO槽中的任一者是否占據(jù)還未為其返回絕對信用返回計(jì)數(shù)的發(fā)送上下文的按FIFO順序的最低槽;并且如果是,確定已釋放的FIFO槽序列中的最高FIFO槽,并且以還未為其返回信用返回標(biāo)記的發(fā)送上下文的按FIFO順序的最低被釋放的槽開始,還未為所述最高FIFO槽返回信用返回標(biāo)記;以及基于所確定的所述最高FIFO槽來返回絕對信用返回計(jì)數(shù)。30.如條款29所述的裝置,其中,所述絕對信用返回計(jì)數(shù)包括所述發(fā)送上下文的、按FIFO順序的、從所述發(fā)送上下文的所述絕對信用返回計(jì)數(shù)被初始化起就已被釋放的發(fā)送塊的聚合數(shù)目。31.如條款29或30所述的裝置,其中,所述發(fā)射引擎進(jìn)一步包括用于以下操作的裝置:實(shí)現(xiàn)物理循環(huán)FIFO以將發(fā)送塊存儲在發(fā)送上下文中;以及實(shí)現(xiàn)邏輯循環(huán)FIFO以跟蹤每一個(gè)發(fā)送上下文的絕對信用返回計(jì)數(shù),其中,對于所有發(fā)送上下文,所述邏輯循環(huán)FIFO的尺寸是相同的,而至少兩個(gè)發(fā)送上下文的尺寸與所述至少兩個(gè)發(fā)送上下文的相關(guān)聯(lián)的物理循環(huán)FIFO是不同的。32.如條款29-31中的任一項(xiàng)所述的裝置,其中,所述發(fā)射引擎進(jìn)一步包括用于以下操作的裝置:如果用于發(fā)送上下文的絕對信用返回計(jì)數(shù)與最近返回的絕對信用返回計(jì)數(shù)之間的差將符合或超出所述最小信用返回閾值,則返回所述發(fā)送上下文的絕對信用返回計(jì)數(shù);否則等待返回絕對信用返回計(jì)數(shù),直到用于所述發(fā)送上下文的絕對信用返回計(jì)數(shù)與最近返回的絕對信用返回計(jì)數(shù)之間的差將符合或超出所述最小信用返回閾值為止。33.如條款29-32中的任一項(xiàng)所述的裝置,其中,所述發(fā)射引擎進(jìn)一步包括用于以下操作的裝置:并發(fā)地檢測多個(gè)發(fā)送上下文中的FIFO槽的釋放并確定多個(gè)絕對信用計(jì)數(shù),所述多個(gè)絕對信用計(jì)數(shù)包括在所述多個(gè)發(fā)送上下文之間用于所述多個(gè)發(fā)送上下文中的每一個(gè)的絕對信用計(jì)數(shù);以及經(jīng)由單條信用返回消息返回所述多個(gè)絕對信用返回計(jì)數(shù)。34.如條款29-33中的任一項(xiàng)所述的裝置,其中,所述IO接口包括第一(PCIe)接口,所述裝置進(jìn)一步包括:處理器,所述處理器具有支持亂序執(zhí)行的多個(gè)處理器核,并且包括存儲器接口、至少一個(gè)存儲緩沖器以及第二PCIe接口,所述第二PCIe接口耦合經(jīng)由PCIe互連而耦合至所述第一PCIe接口;進(jìn)一步包括用于以下操作的裝置:接收PIO寫入指令的序列,所述PIO寫入指令用于當(dāng)耦合至所述存儲器接口時(shí)將存儲在存儲器中的相應(yīng)分組的分組數(shù)據(jù)寫入所述PIO發(fā)送存儲器;將所述PIO寫入指令的序列執(zhí)行為處理器核上的指令線程,其中PIO寫入指令的執(zhí)行使數(shù)據(jù)被寫入到存儲緩沖器中的存儲單元,所述存儲單元成組為包括存儲單元行的存儲塊,其中,所述PIO寫入指令的部分被亂序地執(zhí)行,從而導(dǎo)致在所述存儲塊被填充之前,數(shù)據(jù)被寫入到不同存儲塊中的存儲單元;檢測存儲塊何時(shí)被填充;以及響應(yīng)于檢測到存儲塊被填充,經(jīng)由通過所述PCIe互連發(fā)送的、對所述PIO發(fā)送存儲器中的發(fā)送塊的PCIe投遞的寫入來使所述存儲塊中的數(shù)據(jù)耗盡。35.如條款29-34中的任一項(xiàng)所述的裝置,進(jìn)一步包括發(fā)射端口,所述發(fā)射端口耦合至所述發(fā)射引擎并包括多個(gè)發(fā)射機(jī),其中,所述裝置包括單個(gè)集成組件。36.如條款35所述的裝置,其中,所述裝置包括主機(jī)結(jié)構(gòu)接口,所述主機(jī)結(jié)構(gòu)接口進(jìn)一步包括:接收引擎,耦合至所述IO接口;以及接收端口,耦合至所述接收引擎。37.如條款36所述的裝置,其中,所述裝置包括主機(jī)結(jié)構(gòu)接口芯片,所述主機(jī)結(jié)構(gòu)接口芯片包括具有為條款36的主機(jī)結(jié)構(gòu)接口定義的配置。一般而言,在本文的附圖中描繪的電路、邏輯和部件還可在各種類型的集成電路(例如,半導(dǎo)體芯片)和模塊中實(shí)現(xiàn),包括分立的芯片、SoC、多芯片模塊以及包括對多個(gè)網(wǎng)絡(luò)接口的支持的聯(lián)網(wǎng)/鏈路接口芯片。此外,如本文中所使用,用于實(shí)施各種操作的電路和邏輯可經(jīng)由嵌入式邏輯、嵌入式處理器、控制器、微引擎來實(shí)現(xiàn),或以其他方式使用硬件、軟件和/或固件的任何組合來實(shí)現(xiàn)。例如,通過各種邏輯塊和/或電路描繪的操作可使用編程邏輯門等(包括但不限于,ASIC、FPGA、IP塊庫)來實(shí)現(xiàn),或通過在包括處理器、處理器核、控制器、微控制器、微引擎等的一個(gè)或多個(gè)處理元件上執(zhí)行的軟件或固件指令中的一個(gè)或多個(gè)來實(shí)現(xiàn)。另外,本說明書的多個(gè)實(shí)施例的方面可以不僅在半導(dǎo)體芯片、SOC、多芯片模塊等之內(nèi)實(shí)現(xiàn),而且還可在非瞬態(tài)的機(jī)器可讀介質(zhì)內(nèi)實(shí)現(xiàn)。例如,上述設(shè)計(jì)可被存儲在和/或嵌入在與用于設(shè)計(jì)半導(dǎo)體器件的設(shè)計(jì)工具相關(guān)聯(lián)的非瞬態(tài)機(jī)器可讀介質(zhì)內(nèi)。示例包括以VHSIC硬件描述語言(VHDL)語言、Verilog語言或SPICE語言或其他硬件描述語言格式化的網(wǎng)表。一些網(wǎng)表的示例包括:行為級網(wǎng)表、寄存器傳送級(RTL)網(wǎng)表、門級網(wǎng)表以及晶體管級網(wǎng)表。機(jī)器可讀介質(zhì)還包括具有諸如GDS-II文件之類的布局信息的介質(zhì)。此外,用于半導(dǎo)體芯片設(shè)計(jì)的網(wǎng)表文件或其他機(jī)器可讀介質(zhì)可被用在模擬環(huán)境中以執(zhí)行以上教導(dǎo)的方法。雖然參考特定實(shí)現(xiàn)方式描述了一些實(shí)施例,但是根據(jù)一些實(shí)施例,其他實(shí)現(xiàn)方式也是可能的。另外,附圖中所示的和/或本文中描述的元件或其他特征的布置和/或順序不必以所示和所描述的特定方式來布置。根據(jù)一些實(shí)施例,許多其他布置是可能的。在附圖中示出的每一個(gè)系統(tǒng)中,在一些情況下的每個(gè)元件可具有相同或不同的附圖標(biāo)記以表明所表示的元件可能不同和/或類似。但是,元件可以足夠靈活以具有不同的實(shí)現(xiàn)方式,并與本文所示或所述的一些或所有系統(tǒng)一起操作。附圖中示出的各種元件可以是相同或不同的。將哪個(gè)稱為第一元件以及將哪個(gè)稱為第二元件是任意的。在說明書和權(quán)利要求書中,可使用術(shù)語“耦合的”和“連接的”及其衍生詞。應(yīng)當(dāng)理解,這些術(shù)語并不旨在作為彼此的同義詞。相反,在特定實(shí)施例中,可以使用“連接的”來指示兩個(gè)或更多個(gè)元件彼此直接物理和/或電接觸?!榜詈系摹笨梢馕吨鴥蓚€(gè)或更多個(gè)元件直接物理或電接觸。然而,“耦合的”也可意味著兩個(gè)或更多個(gè)元件彼此并不直接接觸,但是仍然彼此協(xié)作或相互作用。實(shí)施例是本發(fā)明的實(shí)現(xiàn)方式或示例。說明書中對“實(shí)施例”、“一個(gè)實(shí)施例”、“一些實(shí)施例”或“其他實(shí)施例”的引用表示結(jié)合這些實(shí)施例描述的特定的特征、結(jié)構(gòu)或特性被包括在本發(fā)明的至少一些實(shí)施例中,而不一定在所有的實(shí)施例中。各處出現(xiàn)的“實(shí)施例”、“一個(gè)實(shí)施例”或“一些實(shí)施例”不一定都指相同的實(shí)施例。并非本文中描述和示出的所有部件、特征、結(jié)構(gòu)、特性等都需要被包括在特定的一個(gè)或多個(gè)實(shí)施例中。例如,如果說明書陳述“可”、“可能”或“能夠”包括部件、特征、結(jié)構(gòu)或特性,則不一定包括該特定的部件、特征、結(jié)構(gòu)或特性。如果說明書或權(quán)利要求書提到“一”或“一個(gè)”元件,則這并不意味著僅有一個(gè)該元件。如果說明書或權(quán)利要求書引用“附加的”元件,則不排除有多于一個(gè)的該附加的元件。上文對本發(fā)明的所示出的本發(fā)明的各實(shí)施例的描述(包括在摘要中描述的內(nèi)容)不是詳盡的,也不旨在將本發(fā)明限于所公開的精確形式。盡管為了說明,本文中描述了本發(fā)明的具體實(shí)施例以及示例,但是,如相關(guān)領(lǐng)域技術(shù)人員所理解,在本發(fā)明的范圍內(nèi),各種等效的修改是可能的。可以根據(jù)上面的具體實(shí)施方式對本發(fā)明進(jìn)行這些修改。所附權(quán)利要求書中所使用的術(shù)語不應(yīng)該被理解為將本發(fā)明限制于說明書和附圖中所公開的特定實(shí)施例。相反,本發(fā)明的范圍完全由所附權(quán)利要求書來確定,權(quán)利要求書根據(jù)權(quán)利要求解釋的既定原則來解釋。當(dāng)前第1頁1 2 3 
      當(dāng)前第1頁1 2 3 
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
      1