專利名稱::利用處理器指令驗證數(shù)據(jù)的制作方法
技術(shù)領(lǐng)域:
:本發(fā)明的實施例涉及數(shù)據(jù)處理,更具體地說,涉及諸如循環(huán)冗余校驗CCRC)的校驗和的確定。技術(shù)背景在數(shù)據(jù)處理系統(tǒng)中,應(yīng)當(dāng)準(zhǔn)確地接收在第一位置與第二位置之間傳送的數(shù)據(jù),以使得在第二位置對該數(shù)據(jù)執(zhí)行的額外處理同樣準(zhǔn)確。此外,為了能夠檢測到數(shù)據(jù)傳輸中的錯誤,常常會執(zhí)行數(shù)據(jù)驗證。數(shù)據(jù)驗證的一個實例是通過使用附加到待傳送的數(shù)據(jù)包中的校驗和。例如,可以通過發(fā)送源生成CRC和,并將該CRC和附加到待傳送的數(shù)據(jù)中。該校驗和可以根據(jù)許多不同的算法中的一種算法來進行計算,行比較。如果這兩個校驗和相同,則接收系統(tǒng)可以很有把握地確信所傳送的數(shù)據(jù)是無訛誤的。但是,如果所生成的校驗和不同于所傳送的校驗和,則指示錯誤。在所有聯(lián)網(wǎng)技術(shù)中都使用此類校驗和來檢測傳輸錯誤。其它用途包括數(shù)據(jù)庫完整性、應(yīng)用程序級數(shù)據(jù)完整性檢查等。在不同的應(yīng)用中,存在不同的方式來實現(xiàn)CRC信息。例如,CRC計算可以在硬件或軟件中執(zhí)行。為了在硬件中實現(xiàn)CRC計算,通常在系統(tǒng)內(nèi)提供專用硬件引擎來執(zhí)行CRC計算。因此,將待進行該CRC計算的數(shù)據(jù)發(fā)送給該硬件引擎用于計算CRC,然后將該CRC附加到該數(shù)據(jù),以用于例如從系統(tǒng)傳輸。利用這種卸栽引擎存在各種缺點,包括增加了將數(shù)據(jù)因為許多系統(tǒng)缺少這種卸栽引擎,所以通常在軟件中執(zhí)行CRC計算。為了在軟件中實現(xiàn)CRC計算,通常使用查找表方案。但是,CRC值的這種軟件計算是出了名地慢的計算密集型操作。此外,查找表的存儲器占用量會較大,從而影響性能。因此,這些緩慢的計算會使網(wǎng)絡(luò)性能降級,并且還會消耗處理資源。作為一個實例,每字節(jié)數(shù)據(jù)執(zhí)行一次CRC計算要花費5到15個處理器周期。因此,軟件CRC性能對于高速網(wǎng)絡(luò)中的一般使用來說太慢了。圖1是根據(jù)本發(fā)明的一個實施例的方法的流程圖。圖2是根據(jù)本發(fā)明的一個實施例的用于執(zhí)行校驗和操作的處理器的一部分的框圖。圖3是才艮據(jù)本發(fā)明的一個實施例的處理器的另一部分的框圖。圖4是根據(jù)本發(fā)明的一個實施例的系統(tǒng)的框圖。圖5是根據(jù)本發(fā)明的一個實施例、用于生成校驗和值的方法的流程圖。圖6是可以在其中使用本發(fā)明的實施例的網(wǎng)絡(luò)配置的框圖。具體實施方式在各個實施例中,可以利用指令集體系結(jié)構(gòu)(ISA)擴充來實現(xiàn)校驗和操作以計算校驗和值。更具體地說,可以在ISA內(nèi)提供用戶級指令,以便使程序員能夠經(jīng)由該指令而在通用處理器(如中央處理單元(CPU))中直接執(zhí)行諸如CRC操作的所需校驗和操作。CRC操作可以是32位CRC操作(即,生成32位運行余數(shù)的CRC32操作,下文將對此做進一步論述),并且在不同實施例中,可以例如對應(yīng)于在電氣和電子工程師協(xié)會(正EE)802.3以太網(wǎng)協(xié)i義(2002年發(fā)布)或其它協(xié)議中使用的CRC。在不同的實現(xiàn)中,可以提供各種操作碼指令來對不同的數(shù)據(jù)分組執(zhí)行CRC計算。例如,在一些實施例中,可以利用不同的操作碼來在8、16、32和64位的組上支持CRC計算,但本發(fā)明的范圍不限于此。以此方式,可以在硬件中快速地執(zhí)行CRC計算,而無需查找表等。此外,可以經(jīng)由根據(jù)不同的操作碼執(zhí)行的整數(shù)操作利用在體系結(jié)構(gòu)上可見的通用處理器寄存器來執(zhí)行這些計算。結(jié)果是,可以在處理器中計算CRC,而無需諸如網(wǎng)絡(luò)卸載硬件的卸載硬件的開銷和復(fù)雜度。因此,可以進行更大數(shù)量的數(shù)據(jù)傳輸(例如,從每秒鐘的輸7v/輸出(I/0)方面來說)。注意,盡管本文主要結(jié)合CRC操作進行了描述,但本發(fā)明的實施例也可用于執(zhí)行其它校驗和操作。此外,為了能夠有效利用這些用戶級指令,本發(fā)明的實施例還可劃分或分割待進行校驗和操作的數(shù)據(jù)。作為一個實例,可以將待進行校驗和操作的任意大小的數(shù)據(jù)分割成多個數(shù)據(jù)組,每個數(shù)據(jù)組具有不同的基本寬度。這些基本寬度可以對應(yīng)于不同操作碼指令的寬度,如為8、16、32或64位。此外,可以選擇這些分區(qū)以使得大部分數(shù)據(jù)位于對應(yīng)于寬度最寬的指令的分區(qū)中,從而使得能夠進行有效操作。另外,不同部分(例如,寬度最小的分區(qū)和寬度最大的分區(qū))之間的劃分可以對應(yīng)于最寬寬度的自然對準(zhǔn)邊界(naturalalignmentboundary)。以此方式,可以通過硬件利用最少次數(shù)的數(shù)據(jù)迭代來實現(xiàn)校驗和操作。現(xiàn)在參照圖1,示出根據(jù)本發(fā)明的一個實施例的方法的流程圖。方法100可用于利用在處理器石更件(諸如CPU的執(zhí)行單元)上實現(xiàn)的用戶級指令來獲得校驗和。如圖1所示,方法100可以從對源寄存器和目的地寄存器中的數(shù)據(jù)執(zhí)行一系列異或(XOR)操作(方框110)開始。注意,XOR操作可以對應(yīng)于多項式算術(shù)運算,更具體地說,可以對應(yīng)于多項式除法運算。該運算可以3于應(yīng)于除以一個選定的多項式值的多項式除法。盡管在不同的實施例中,該值可以采用許多不同的格式,特別是在用于執(zhí)行CRC32操作的實現(xiàn)中,多項式可以對應(yīng)11EDC6F41H,但本發(fā)明的范圍不限于此。源寄存器中的數(shù)據(jù)可以對應(yīng)于例如已由處理器接收的處理器管線中存在的數(shù)據(jù)或待從此傳送的處理器管線中存在的數(shù)據(jù)。作為一個實例,可以將對應(yīng)于所需組大小(如16位、32位等)的緩沖器中的一組數(shù)據(jù)提供給源寄存器,該源寄存器可以是處理器的通用寄存器?;蛘撸谝恍嵤├?,可以從存儲器獲得源數(shù)據(jù)。目的地寄存器可以對應(yīng)于用于從XOR操作獲得的運行余數(shù)(runningremainder)的存儲單元。目的地寄存器也可以是處理器的通用寄存器。在各個實施例中,XOR操作可以在處理器管線內(nèi)的專用硬件中執(zhí)行。例如,可以利用用于實現(xiàn)一系列XOR操作的電路來擴展處理器的執(zhí)行單元(如整數(shù)執(zhí)行單元)。例如,該電路可以對應(yīng)于用于處理以所需的多項式為除數(shù)的多項式除法的XOR樹。在各個實施例中,在XOR操作中使用的多項式可以石更連線到XOR樹的邏輯門。此外,XOR樹可以配置成用于經(jīng)由XOR才乘作實現(xiàn)所需的預(yù)處理和后處理,如位反射等。此外,XOR樹邏輯可以包括多個分區(qū),每個分區(qū)配置成用于處理對不同數(shù)據(jù)大小的操作。仍然參照圖1,接著,可以將對應(yīng)于從XOR操作獲得的運行余數(shù)的結(jié)果存儲在目的地寄存器中(方框120)。注意,在將系統(tǒng)初始化之后,則可以將目的地寄存器設(shè)置成預(yù)定值,例如都為1、都為0或另一個這樣的值。然后,在執(zhí)行校驗和操作期間,不斷用當(dāng)前的校驗和操作的結(jié)果更新該運行余數(shù)。更具體地說,可以將通過當(dāng)前的校驗和操作實現(xiàn)的多項式除法的余數(shù)存儲在目的地寄存器中。接著,可以確定是否存在額外的源數(shù)據(jù)(判定方框130)。例如,在一些實施例中,緩沖器可以包括系統(tǒng)已接收并將驗證校驗和的數(shù)椐。可以將數(shù)據(jù)成區(qū)塊地饋送到源寄存器中以實現(xiàn)校驗和操作。因此,可以在判定方框130中確定在該緩沖器中是否存在額外的源數(shù)據(jù)。如下文將進一步描述的,可以將緩沖器中的源數(shù)據(jù)劃分成具有不同的基本寬度的段,其中每個基本寬度對應(yīng)于用戶級校驗和指令的不同風(fēng)格。如果存在額外的源數(shù)據(jù),則將下一個數(shù)據(jù)區(qū)塊提供給源寄存器,并且8控制往后轉(zhuǎn)到如上所述的方框110。如果在判定方框130確定不存在任何額外的源數(shù)據(jù),則控制轉(zhuǎn)到方框140。在那里,可以提供41驗和操作的結(jié)果作為存儲在目的地寄存器中的當(dāng)前值(如運4亍余數(shù))(方框140)。如上所述,可以用許多不同的方式使用該校驗和值。例如,在接收數(shù)據(jù)的情況下,可以將計算的情形下,可以將校驗和附加到待傳送的數(shù)據(jù)中以使得可以在接收端驗證數(shù)據(jù)。當(dāng)前,也可以有校驗和的其它使用,如用于散列函數(shù)或依據(jù)偽隨機編號方案生成數(shù)字。取決于所需的體系結(jié)構(gòu),根據(jù)本發(fā)明的一個實施例、用于實現(xiàn)校驗和操作的處理器可以采用許多不同的形式?,F(xiàn)在參照圖2,示出根據(jù)本發(fā)明的一個實施例用于執(zhí)行校驗和操作的處理器的一部分的框圖。如圖2所示,示出處理器300的一部分。更具體地說,處理器300包括XOR樹310、第一寄存器320和第二寄存器330,所有這些都可以是處理器管線的一部分。在各個實施例中,XOR樹310可以不同地配置。例如,XOR樹310可以利用第一級中的多個3輸入XOR門來實現(xiàn),這些3輸入XOR門的輸出耦合到第二級中的類似的XOR門,依此類推。在該實施例中,XOR樹的每一級可以是前一級的三分之一大。當(dāng)然,其它配置也是可以的。圖2中還示出,處理器300包括緩沖器340,該緩沖器340也可以位于處理器管線內(nèi)(例如,作為緩沖器、隊列等)?;蛘撸彌_器340可以是與處理器300關(guān)聯(lián)的高速緩存存儲器。緩沖器340可以是用于臨時存儲待進行校驗和操作的數(shù)據(jù)的任意大小的緩沖器。在一些實施例中,該數(shù)據(jù)可以對應(yīng)于例如網(wǎng)絡(luò)協(xié)議單元的大小。圖2中還示出,定序器(sequencer)335可以耦合到緩沖器340。定序器335可以包括用于根據(jù)本發(fā)明的一個實施例執(zhí)行數(shù)據(jù)分段以將緩沖器340內(nèi)的數(shù)據(jù)有效地劃分成不同段的邏輯,其中每個段預(yù)定用于執(zhí)行給定數(shù)據(jù)寬度的校驗和操作。在圖2的實施例中,第一寄存器320可以對應(yīng)于源寄存器,而笫二寄存器330可以對應(yīng)于目的地寄存器。在各個實施例中,這些寄存器可以是處理器300內(nèi)的通用寄存器。當(dāng)然,處理器300可以包括許多其它寄存器、邏輯、功能單元等,圖2中示出的部分只是為了便于說明。如圖2所示,根據(jù)本發(fā)明的一個實施例,為了執(zhí)行校驗和,將第一寄存器320的至少笫一部分以及第二寄存器330的一部分提供給XOR樹310。在示出8位CRC累積的圖2所示的實施例中,將單個字節(jié)的數(shù)據(jù)(Bo)從第一寄存器320提供給XOR樹310,同時將第二寄存器330的4字節(jié)部分提供給XOR樹310。該4字節(jié)部分可以對應(yīng)于CRC32操作的運行余數(shù)。利用該數(shù)據(jù),XOR樹310可以經(jīng)由XOR操作執(zhí)行數(shù)據(jù)處理以生成包括余數(shù)部分的結(jié)果。該余數(shù)部分可以是存儲回第二寄存器330的運行余數(shù),如圖2所示。以此方式,可以在最小的周期時間內(nèi)利用最少的處理器資源有效地執(zhí)行CRC操作。在圖2的實施例中,對于8位累積(accumulate)操作,可以將第一寄存器320的額外部分連同第二寄存器330的當(dāng)前內(nèi)容(即,32位運行余數(shù))遞增地提供給XOR樹310。因此,為了獲得對第一寄存器320中的64位數(shù)據(jù)的CRC校驗和,可以在XOR樹310中執(zhí)行8次XOR操作迭代,每次迭代利用來自第一寄存器320的單個字節(jié)的數(shù)據(jù)以及第二寄存器330中的當(dāng)前運行余數(shù)。注意,可以存在不同的硬件來處理不同位寬度的CRC計算。例如,邏輯可以包括不同的XOR樹結(jié)構(gòu)來處理這些CRC計算?,F(xiàn)在參照圖3,示出根據(jù)本發(fā)明的一個實施例的處理器的另一部分的框圖。如圖3所示,處理器400包括不同的XOR樹410(例如,除了圖2中的XOR樹310之外),該XOR樹410經(jīng)耦合以便從第一寄存器320和第二寄存器330接收數(shù)據(jù)。圖3中還示出,存在緩沖器340,該緩沖器340可用于提供數(shù)據(jù)以進行CRC計算。定序器335可以控制將緩沖器340中的數(shù)據(jù)劃分成不同的段。注意,在圖3的實施例中,XOR樹410配置成用于處理64位CRC累積。因此,可以將第一寄存器320的全部內(nèi)容(即,字節(jié)Bo-B7)—次性地耦合到XOR樹410以用于在XOR操作中與第二寄存器330中的數(shù)據(jù)一起處理。將結(jié)果數(shù)據(jù)存儲回第二寄存器330,該結(jié)果數(shù)據(jù)的所需部分對應(yīng)于運行余數(shù)。盡管用圖2和3中的這些特定實現(xiàn)進行了描述,但應(yīng)了解,本發(fā)明的范圍不限于此,并且在其它實施例中,可以存在用于執(zhí)行CRC操作的不同硬件配置?,F(xiàn)在參照下表1,示出用于支持根據(jù)本發(fā)明的各個實施例的CRC操作的指令集體系結(jié)構(gòu)(ISA)的示例指令的列表。如表1所示,使用可以通過操作碼引用的每個指令利用源寄存器和目的地寄存器來執(zhí)行CRC32操作。如表所示,可以有不同的風(fēng)格(flavor),每個指令用于對給定大小的目的地操作數(shù)和源操作數(shù)執(zhí)行CRC操作。因此,參照表l中的第一行,使用該指令來對8位源操作數(shù)和32位目的地操作數(shù)執(zhí)行CRC32操作。類似地,使用表l中的笫二行來對16位源操作數(shù)和32位目的地操作數(shù)執(zhí)行CRC32操作。以類似方式,表l中的第三行示出用于對32位源操作數(shù)和32位目的地操作數(shù)執(zhí)行CRC32操作的指令。因為這前三個指令是用最大32位數(shù)據(jù)區(qū)塊執(zhí)行的,所以注意,這些指令在64位操作沖莫式以及傳統(tǒng)(即,32位)操作模式都有效。與之相比,表1中的第四行和第五行表示將分別對8位和64位源操作數(shù)和64位目的地操作數(shù)執(zhí)行的CRC操作。因此,最后這兩個指令只可以在64位操作才莫式執(zhí)行。<table>tableseeoriginaldocumentpage0</column></row><table>在各個買施例中,程序員可以使用這些用尸級指令作為例如用于實現(xiàn)根據(jù)例如圖1中的流程圖的CRC操作的固有指令??梢栽谠S多不同的系統(tǒng)類型中實現(xiàn)實施例。現(xiàn)在參照圖4,示出根據(jù)本發(fā)明的一個實施例的多處理器系統(tǒng)的框圖。如圖4所示,該多處理器系統(tǒng)是點對點互連系統(tǒng),它包括經(jīng)由點對點互連450耦合的第一處理器470和第二處理器480。如圖4所示,每個處理器470和480都可以是包括第一和第二處理器核(即,處理器核474a和474b以及處理器核484a和484b)的多核處理器。盡管為了便于說明而沒有示出,但根據(jù)本發(fā)明的一個實施例,第一處理器470和第二處理器480(以及更具體地說,包括其中的核)可以在它們的執(zhí)行單元內(nèi)包括XOR樹邏輯以執(zhí)行用戶級CRC指令。第一處理器470還包括存儲器控制器集線器(MCH)472及點對點(P-P)接口476和478。類似地,第二處理器480包括MCH482及P-P接口486和488。如圖4所示,MCH472和482將處理器耦合到相應(yīng)的存儲器,即存儲器432和存儲器434。第一處理器470和第二處理器480可以分別經(jīng)由P-P互連452和454耦合到芯片集490。如圖4所示,芯片集490包括P-P接口494和498。此外,芯片集490還包括用于將芯片集490與高性能圖形引擎438耦合的沖矣口492。在一個實施例中,點對點互連439可以耦合這些組件。接著,芯片集490可以經(jīng)由接口496耦合到第一總線416。如圖4所示,各種輸A/輸出(1/0)設(shè)備414可以與總線橋418—起耦合到第一總線416,總線橋418將第一總線416耦合到第二總線420。I/O設(shè)備414可以包括至少一個能夠在該多處理器系統(tǒng)與遵照任何適用協(xié)議的網(wǎng)絡(luò)(圖4中沒有示出)之間提供互相通信的組件。在一個實施例中,I/O設(shè)備414可以包括可以處理待通過網(wǎng)絡(luò)發(fā)送和/或接收的一個或多個網(wǎng)絡(luò)協(xié)議單元的I/O子系統(tǒng)的數(shù)字和/或模擬硬件和/或軟件的任意組合。在一個實施例中,I/O子系統(tǒng)可以包括例如網(wǎng)^4矣口卡(NIC),該NIC可以包括例如在聯(lián)網(wǎng)協(xié)議的開放系統(tǒng)互連(OSI)模型中定義的數(shù)據(jù)鏈路層(DLL)的媒體接入控制(MAC)層。OSI模型是由位于瑞士1ruedeVaremb6,Casepostale56CH-1211Geneva20的國際標(biāo)準(zhǔn)化組織(ISO)定義的。仍然參照圖4,在一個實施例中,經(jīng)由總線橋418耦合到第一總線416的第二總線420可以是^f氐引腳計數(shù)(LPC)總線。各種設(shè)備可以耦合到第二總線420,包括例如鍵盤/鼠標(biāo)422、通信設(shè)備426和數(shù)據(jù)存儲單元428,在一個實施例中,數(shù)據(jù)存儲單元428可以包括代碼430。此外,音頻1/0424也可以耦合到第二總線420。注意,其它體系結(jié)構(gòu)也是可以的。例如,取代圖4中的點對點體系結(jié)構(gòu),系統(tǒng)可以實現(xiàn)多跳總線或其它這樣的體系結(jié)構(gòu)。如上所述,在各個實施例中,圖4中的多處理器系統(tǒng)可以耦合到網(wǎng)絡(luò),該網(wǎng)絡(luò)可以是任何網(wǎng)絡(luò),如互聯(lián)網(wǎng)、內(nèi)聯(lián)網(wǎng)、局域網(wǎng)(LAN)、存儲區(qū)域網(wǎng)(SAN)、廣域網(wǎng)(WAN)、城域網(wǎng)(MAN)或無線網(wǎng)絡(luò)。該網(wǎng)絡(luò)可以利用例如以太網(wǎng)標(biāo)準(zhǔn)(在IEEE802.3協(xié)議及相關(guān)標(biāo)準(zhǔn)中有所描述)或任何其它通信標(biāo)準(zhǔn)來與I/O設(shè)備414交換業(yè)務(wù),根據(jù)本發(fā)明的一個實施例,業(yè)務(wù)可以包括校驗和。注意,進入系統(tǒng)的數(shù)據(jù)可以具有例如網(wǎng)絡(luò)協(xié)議單元或4壬意大小。當(dāng)由系統(tǒng)接收時,該數(shù)據(jù)可以臨時存儲在緩沖器中,如任意大小的緩沖器中。為了對該數(shù)據(jù)有效地執(zhí)行諸如CRC操作的校驗和計算,實施例可以將數(shù)據(jù)劃分成預(yù)定的區(qū)塊(chunk)大小以用于有效的校驗和操作。現(xiàn)在參照圖5,示出根據(jù)本發(fā)明的一個實施例、用于為任意大小的緩沖器中的任意大小的數(shù)椐塊生成CRC值的方法的流程圖。如圖5所示,方法500可以從將CRC值初始化(方框505)開始。在一個實施例中,可以將CRC值存儲在目的地寄存器中。盡管在各個實施例中,CRC值可以有不同的初始值,但在一個實施例中,初始CRC值可以對應(yīng)于都為邏輯l,并且在一個實施例中,對于CRC32操作,初始CRC值可以對應(yīng)于FFFFH,但本發(fā)明的范圍不限于此。仍然參照圖5,接著,可以為緩沖器中的數(shù)據(jù)塊確定各種長度。更具體地說,首先可以計算頭部長度(HL)(方框510)。該HL可以對應(yīng)于在出現(xiàn)CRC操作的寬版本的第一自然對準(zhǔn)邊界之前緩沖器中的初始數(shù)據(jù)量。例如,在用戶級CRC指令采取不同格式的實現(xiàn)中,最寬版本可用于對64位操作數(shù)執(zhí)行,此時第一自然對準(zhǔn)邊界可以對應(yīng)于任意緩沖器中出現(xiàn)64位數(shù)據(jù)的自然對準(zhǔn)邊界處的第一位置。因此,在方框510中計算的HL可以對應(yīng)于例如從緩沖器的起點(beginning)到64位數(shù)據(jù)的第一自然對準(zhǔn)邊界的字節(jié)數(shù)。該頭部長度可以少于7個字節(jié),其中指令的寬版本對應(yīng)亍64位。接著,可以計算主體長度(BI^)(方框515),該BL對應(yīng)于從第一自然對準(zhǔn)邊界起直到不再執(zhí)行CRC操作的任何額外的寬變型的緩沖器中的數(shù)據(jù)量。例如,關(guān)于64位寬的操作,主體長度因而可以在緩沖器的終點(end)的63位內(nèi)的自然對準(zhǔn)邊界處終止。在方框515中計算完主體長度之后,控制轉(zhuǎn)到方框520。在那里,可以計算尾部長度(TL)(方框520)。該尾部長度可以對應(yīng)于從最后一個自然對準(zhǔn)邊界到緩沖器的終點的緩沖器中的剩余數(shù)據(jù)塊。不同的實體可以執(zhí)行以上操作。在一個實施例中,定序器可以執(zhí)行對緩沖器的分析以生成各種長度,該定序器可以是軟件實現(xiàn)的狀態(tài)機,例如在圖2和3中示出的定序器335。在完成緩沖器部分的不同長度的計算之后,可以將偏移量設(shè)為零(方框525)。在一個實施例中,零偏移量可以對應(yīng)于緩沖器的起點。仍然參照圖5,接著,可以確定HL是否大于零(判定方框530)。如果大于零,則這意味著緩沖器的第一部分中仍然存在數(shù)據(jù)。因此,控制轉(zhuǎn)到方框535。在那里,可以執(zhí)行對應(yīng)于用戶級CRC指令的窄版本的CRC操作(方框535)。更具體地說,可以利用緩沖器偏移位置(即,在第一次迭代中對應(yīng)于緩沖器的起點)處的源數(shù)據(jù)和目的地數(shù)據(jù)來執(zhí)行CRC操作,其中目的地數(shù)椐可以對應(yīng)于目的地寄存器中的運行余數(shù)值(即,在第一次迭代中初始化后的CRC值)。盡管CRC捧作可以用各種方式來實現(xiàn),但在一個實現(xiàn)中,CRC操作可以在用于對窄數(shù)據(jù)(如單字節(jié)源數(shù)據(jù))執(zhí)行CRC操作的處理器管線的專用硬件中執(zhí)行。在完成CRC操作之后,控制轉(zhuǎn)到方框540。在那里,可以將偏移量設(shè)置成等于當(dāng)前的偏移量加上窄數(shù)據(jù)格式的大小、例如1個字節(jié)(方框540)。接著,可以將HL減1(方框545)。因此,這些才喿作將緩沖器推進到源數(shù)據(jù)的下一部分。然后,控制往后轉(zhuǎn)到判定方框530,以確定頭部長度是否仍然大于零(判定方框530)。如果是,則以循環(huán)方式執(zhí)行方框535、540和545,直到緩沖器的第一部分中的源數(shù)據(jù)用完為止。當(dāng)緩沖器的第一部分中的源數(shù)據(jù)用完(即,已經(jīng)到達第一自然對準(zhǔn)邊界)時,判定方框530將確定HL不大于零,并且因此控制轉(zhuǎn)到判定方框550。在判定方框550,可以確定主體長度是否大于零。如果是,則將處理存在于緩沖器的笫二部分中的寬格式(如64位)的數(shù)據(jù)。因此,控制轉(zhuǎn)到方框555。在那里,可以執(zhí)行對應(yīng)于用戶級CRC指令的寬版本的CRC操作(方框555)。更具體地說,可以利用當(dāng)前的緩沖器偏移位置(即,在第一次迭代中對應(yīng)于64位數(shù)據(jù)的第一自然對準(zhǔn)邊界)處的源數(shù)據(jù)和目的地數(shù)據(jù)來執(zhí)行CRC操作,其中目的地數(shù)據(jù)可以對應(yīng)于目的地寄存器中的當(dāng)前運行余數(shù)值(即,在第一次迭代中完成窄格式執(zhí)行之后存在的CRC值)。盡管CRC操作可以用各種方式來實現(xiàn),但在一個實現(xiàn)中,CRC值可以在用于對寬數(shù)據(jù)(如8字節(jié)源數(shù)據(jù))執(zhí)行CRC操作的管線的專用硬件中執(zhí)行。注意,在各個實施例中,該專用硬件可以不同于執(zhí)行窄格式的硬件。在完成CRC操作之后,控制轉(zhuǎn)到方框560。在那里,可以將偏移量設(shè)置成等于當(dāng)前的偏移量加上寬數(shù)據(jù)格式的大小、例如8個字節(jié)(方框560)。接著,可以將BL減l(方框565)。然后,控制往后轉(zhuǎn)到判定方框550。當(dāng)包括方4匡555、560和565的循環(huán)已經(jīng)執(zhí)行一次或多次而使得主體長度遞減為零時,判定方框550確定不再留有任何額外的BL,并且因此控制轉(zhuǎn)到判定方框570。在那里,可以確定尾部長度是否大于零(判定方框570)。如果大于零,則控制轉(zhuǎn)到方框575??梢詧?zhí)行同樣可以對應(yīng)于用戶級CRC指令的窄版本的CRC操作(方框575)。更具體地說,可以利用緩沖器偏移位置(即,在第一次迭代中對應(yīng)于緩沖器的終點之前的寬數(shù)據(jù)的最后一個自然對準(zhǔn)邊界)處的源數(shù)據(jù)和目的J4數(shù)據(jù)來執(zhí)行CRC操作,其中目的地數(shù)據(jù)可以對應(yīng)于目的地寄存器中的運行余數(shù)值(即,在第一次迭代中寬格式的CRC操作結(jié)束時的當(dāng)前CRC值)。在一個實現(xiàn)中,CRC操作在完成CRC操作之后,控制轉(zhuǎn)到方框580。在那里,可以將偏移量設(shè)置成等于當(dāng)前的偏移量加上窄數(shù)據(jù)格式的大小、例如1個字節(jié)(方框580)。接著,可以將TL減1(方框585)。然后,控制往后轉(zhuǎn)到判定方框570。當(dāng)在判定方框570確定尾部長度不大于零時,這意味著緩沖器中不存在任何額外數(shù)據(jù)。因此,控制轉(zhuǎn)到方框590。在那里,可以將CRC值提供給例如預(yù)定位置以根據(jù)特定應(yīng)用程序的需要使用(方框590)。因此,該CRC值可以對應(yīng)于緩沖器中的數(shù)據(jù)量的校驗和。在一個實施例中,在執(zhí)行方法500期間存儲遞增累積的CRC值的目的地寄存器可以提供該值用于所需用途。這些用途的實例可以是作為用于附加到待從系統(tǒng)傳送的數(shù)據(jù)的計算的校驗和或作為用于將和與輸入數(shù)據(jù)一起接收的校驗和進行比較的生成的校驗和。或者,該校驗和可以用作散列函數(shù)、生成的偽隨機數(shù)字等。在特定實施例中,方法500可以與兩個不同的用戶級指令(對應(yīng)于窄格式和寬格式)配合使用以對不同的數(shù)據(jù)大小實現(xiàn)CRC操作。在一個實施例中,窄格式可以對應(yīng)于單個字節(jié),而寬格式則對應(yīng)于8個字節(jié),但本發(fā)明的范圍不限于此。例如,在其它實施例中,緩沖器中的額外數(shù)據(jù)分段可以實現(xiàn)成對應(yīng)于CRC操作的額外風(fēng)格(如16位或32位區(qū)塊)。在如圖5所示的實施例中,利用方法500,可以執(zhí)行CRC指令的窄版本直到第一自然對準(zhǔn)邊界以便有效使用CRC指令的寬格式。然后,寬格式可用于緩沖器中的數(shù)據(jù)主體,然后同樣可以從緩沖器的最后一個自然對準(zhǔn)邊界開始對任何剩余數(shù)據(jù)執(zhí)行指令的窄格式。盡管就圖5中的這個特定實現(xiàn)進行了描述,但應(yīng)了解,本發(fā)明的范圍不限于此。利用本發(fā)明的實施例,可以利用在時間上比純基于軟件的方法更有效的一個或多個CRC指令來執(zhí)行例如數(shù)據(jù)驗證。即,根據(jù)本發(fā)明的一個實施例,處理器可以執(zhí)行比根據(jù)基于軟件的方法少的周期來計算CRC值。利用這些CRC指令可以更具高速緩存效率,因為與基于軟件的方法相比,這些指令可以占用更少的指令高速緩存空間,或者可以具有更小的指令高速緩存占用量。此外,無需查找表,便可以避免數(shù)據(jù)高速緩存污染影響。此外,通過利用更少的處理器周期來實現(xiàn)CRC操作減少了功率消耗。因此,一些實施例可以在通常在電池電源上運行的便攜式或無線系統(tǒng)中實現(xiàn),但本發(fā)明的范圍在這方面不受限制?,F(xiàn)在參照圖6,示出可以在其中使用本發(fā)明的實施例的網(wǎng)絡(luò)配置的框圖。如圖6所示,網(wǎng)絡(luò)系統(tǒng)600可以鏈接各種實體。具體來說,如圖6所示,企業(yè)網(wǎng)絡(luò)605可以經(jīng)由城域網(wǎng)(MAN)640耦合到存儲區(qū)域網(wǎng)(SAN)650。盡管用圖6的實施例中的該特定實現(xiàn)示出,但應(yīng)了解,本發(fā)明的范圍不限于此。仍然參照圖6,企業(yè)網(wǎng)絡(luò)605可以包括各種組件,包括各個系統(tǒng),如經(jīng)由鏈路612耦合到交換機625的個人計算機(PC)610a和610b。企業(yè)網(wǎng)絡(luò)605可以^于以太網(wǎng)的企業(yè)網(wǎng)絡(luò),它還可以包括經(jīng)由鏈路618同樣耦合到交換機625的數(shù)據(jù)中心620,數(shù)據(jù)中心620可以包括一個或多個服務(wù)器615a和615b。在一個實施例中,鏈路612和618可以是以太網(wǎng)鏈路,如l千兆位字節(jié)以太網(wǎng)(GbE)鏈路,但其它這樣的鏈路也是可以的。在一個實施例中,交換機625可以包括MAC、交換結(jié)構(gòu)等。接著,交換機625可以經(jīng)由鏈路628耦合到多服務(wù)提供平臺(MSPP)630,其中鏈路628也可以是以太網(wǎng)鏈路。在各個實施例中,MSPP630可以包括不同的組件,包括例如收發(fā)器、復(fù)用器/解復(fù)用器、成幀器、MAC等。MSPP630例如經(jīng)由諸如光學(xué)栽波(OC)-192級光學(xué)鏈路的光學(xué)鏈路耦合到MAN640。仍然參照圖6,MAN640可以經(jīng)由鏈路645耦合到SAN650。SAN650可以包括各種組件,包括例如適配器652、控制器654和多個存儲設(shè)備656,這些存儲設(shè)備656可以是獨立冗余磁盤陣列(RAID)或其它這樣的存儲機構(gòu)。適配器652能夠根據(jù)各種協(xié)議與存儲設(shè)備656通信,作為實例,這些協(xié)議如小型計算機系統(tǒng)接口(SCSI)、光纖通道(FC)和/或串行高級技術(shù)附件(S-ATA)。為了確認通過網(wǎng)絡(luò)系統(tǒng)600傳遞的數(shù)據(jù)的有效性,系統(tǒng)內(nèi)的各個組件可以執(zhí)行數(shù)據(jù)驗證,如根椐本發(fā)明的一個實施例的CRC計算。因此,例如,服務(wù)器615a和615b內(nèi)的處理器、計算機610a和610b、及SAN650的控制器654每個都可以適于根據(jù)諸如在本發(fā)明的實施例中所提供的用戶級校驗和指令來執(zhí)行CRC操作。盡管用圖6的實施例中的該特定實現(xiàn)進行了描述,但應(yīng)了解,本發(fā)明的范圍不限于此。實施例可以用代碼來實現(xiàn),并且可以存儲在存儲介質(zhì)上,該存儲介質(zhì)上存儲有指令,這些指令可用于將系統(tǒng)編程以執(zhí)行這些指令。存儲介質(zhì)可以包括但不限于任何類型的盤,包括軟盤、光盤、緊致盤只讀存儲器(CD-ROM)、可重寫緊致盤(CD-RW)和磁-光盤;半導(dǎo)體設(shè)備,如只讀存儲器(ROM)、隨機存取存儲器(RAM)(如動態(tài)隨機存取存儲器(DRAM)、靜態(tài)隨機存取存儲器(SRAM))、可擦除可編程只讀存儲器(EPROM)、閃速存儲器、電可擦除可編程只讀存儲器(EEPROM)、磁或光卡;或任何其它類型的適于存儲電子指令的介質(zhì)。盡管關(guān)于有限數(shù)量的實施例描述了本發(fā)明,但本領(lǐng)域的技術(shù)人員將由此明白眾多修改和改變。隨附權(quán)利要求要覆蓋所有這些落在本發(fā)明的精神和范圍內(nèi)的修改和改變。權(quán)利要求1.一種方法,包括根據(jù)緩沖器中的數(shù)據(jù)塊確定所述緩沖器的第一部分中的第一操作數(shù)的數(shù)量和所述緩沖器的第二部分中的第二操作數(shù)的數(shù)量;對所述第一操作數(shù)迭代地執(zhí)行循環(huán)冗余校驗和(CRC)操作,其中所述第一操作數(shù)具有第一長度;以及對所述第二操作數(shù)迭代地執(zhí)行所述CRC操作,其中所述第二操作數(shù)具有第二長度,所述第二長度大于所述第一長度。2.如權(quán)利要求1所述的方法,還包括響應(yīng)所述CRC操作的笫一用戶級指令而對所述第一操作數(shù)執(zhí)行所述CRC操作,所述笫一用戶級指令對應(yīng)于所述第一長度。3.如權(quán)利要求2所述的方法,還包括響應(yīng)所述CRC操作的笫二用戶級指令而對所述第二操作數(shù)執(zhí)行所述CRC操作,所述第二用戶級指令對應(yīng)于所述第二長度。4.如權(quán)利要求l所述的方法,還包括在通用處理器的硬件引擎的第一塊中對所述第一操作數(shù)才丸行所述CRC操作,以及在所述硬件引擎的第二塊中對所述第二操作數(shù)執(zhí)行所述CRC操作。5.如權(quán)利要求l所述的方法,還包括根據(jù)所述l^t據(jù)塊確定所述緩沖器的第三部分中的第三操作數(shù)的數(shù)量,其中所述第三操作數(shù)具有所述第一長度。6.如權(quán)利要求5所述的方法,還包括響應(yīng)所述CRC操作的第一用戶級指令而對所述第三操作數(shù)迭代地執(zhí)行所述CRC操作,所述笫一用戶級指令對應(yīng)于所述第一長度。7.—種系統(tǒng),包括第一部件,用于根據(jù)笫一寬度的源數(shù)據(jù)的第一校驗和指令來對鄉(xiāng)岌沖器部件中的數(shù)據(jù)執(zhí)行校驗和:t喿作直到到達第二寬度的源數(shù)據(jù)的自然對準(zhǔn)邊界為止;以及第二部件,用于根據(jù)所迷第二寬度的源數(shù)據(jù)的第二校驗和指令來對所述緩沖器部件中的數(shù)據(jù)執(zhí)行所述校驗和操作。8.如權(quán)利要求7所述的系統(tǒng),還包括用于確定對應(yīng)于所述緩沖器部件中的第一部分數(shù)據(jù)的頭部長度的部件,所述第一部分從所述緩沖器部件的起點延伸到所述自然對準(zhǔn)邊界。9.如權(quán)利要求8所述的系統(tǒng),其中所述用于確定對應(yīng)于所述緩沖器部件中的第一部分數(shù)據(jù)的頭部長度的部件還用于確定對應(yīng)于所述緩沖器部件中的第二部分數(shù)據(jù)的主體長度,所述第二部分從所述自然對準(zhǔn)邊界開始。10.如權(quán)利要求9所述的系統(tǒng),其中所述用于對緩沖器部件中的數(shù)據(jù)執(zhí)行校驗和操作的第一部件包括處理器的^l行單元中用于迭代地執(zhí)行所述第一校驗和指令的第一邏輯塊。11.如權(quán)利要求IO所述的系統(tǒng),其中所述用于對所述緩沖器部件中的數(shù)據(jù)執(zhí)行所述校驗和操作的第二部件包括所述處理器的所述執(zhí)行單元中用于迭代地執(zhí)行所述第二校驗和指令的第二邏輯塊。12.如權(quán)利要求IO所述的系統(tǒng),還包括用于存儲所述校驗和操作的運行余數(shù)的部件,其中所迷用于存儲所述校驗和操作的運行余數(shù)的部件用于向所述第一邏輯塊提供目的地寄存器的內(nèi)容的至少一部分和所述第一寬度的源數(shù)據(jù)。13.—種裝置,包括用于將存儲在緩沖器中的任意大小的數(shù)據(jù)塊分成至少第一部分和第二部分的定序器,所述第一部分包括第一寬度的源數(shù)據(jù),所述第二部分包括第二寬度的源數(shù)據(jù);以及耦合到所述緩沖器的執(zhí)行單元,用于對所述第一寬度的源數(shù)據(jù)和來自目的地位置的余數(shù)值順序執(zhí)行循環(huán)冗余校驗(CRC)操作并對所述第二寬度的源數(shù)據(jù)和來自所逸目的地位置的所述余數(shù)值執(zhí)行所述CRC操作,并向所述目的地位置提供對應(yīng)于所述余數(shù)值的所述執(zhí)行單元的輸出的至少一部分。14.如權(quán)利要求13所述的裝置,其中所述執(zhí)行單元用于響應(yīng)第一用戶級指令而對所述第一寬度的源數(shù)據(jù)執(zhí)行所述CRC操作,并響應(yīng)第二用戶級指令而對所述第二寬度的源數(shù)椐執(zhí)行所述CRC操作。15.如權(quán)利要求14所迷的裝置,其中所述執(zhí)行單元包括用于響應(yīng)所述第一用戶級指令而執(zhí)行所迷CRC操作的第一異或(XOR)樹邏輯和用于響應(yīng)所述第二用戶級指令而執(zhí)行所述CRC操作的第二XOR樹邏輯,其中所述執(zhí)行單元位于通用處理器中。16.如權(quán)利要求13所述的裝置,還包括耦合在所述緩沖器與所述4丸行單元之間的第一寄存器,用于從所述緩沖器接收所述第一寬度的源數(shù)據(jù)和所述第二寬度的源數(shù)據(jù);以及耦合到所述執(zhí)行單元的第二寄存器,用于從所述執(zhí)行單元接收所述余數(shù)值并向所述執(zhí)行單元提供所述余數(shù)值,其中所述第二寄存器對應(yīng)于所述目的地位置。17.如權(quán)利要求13所述的裝置,其中所述第一部分從所述緩沖器的起點延伸到所述第二寬度的源數(shù)據(jù)的第一自然對準(zhǔn)邊界。18.如權(quán)利要求17所述的裝置,其中所述定序器用于將所述數(shù)椐塊分成包括所述第一寬度的源數(shù)據(jù)的第三部分,其中所述第三部分從所述第二寬度的源數(shù)據(jù)的最后一個自然對準(zhǔn)邊界延伸到所述緩沖器的終點。全文摘要在一個實施例中,本發(fā)明包括一種用于根據(jù)緩沖器中的數(shù)據(jù)塊確定緩沖器的第一部分中的第一操作數(shù)的數(shù)量和緩沖器的第二部分中的第二操作數(shù)的數(shù)量的方法?;谶@些數(shù)量,可以對第一和第二操作數(shù)迭代地執(zhí)行循環(huán)冗余校驗和(CRC)操作,以便獲得校驗和結(jié)果。第一和第二操作數(shù)具有不同的長度,并且可以利用對應(yīng)于這些不同的長度的處理器指令來執(zhí)行校驗和操作。還描述其它實施例并對其它實施例要求權(quán)利。文檔編號G06F11/00GK101405699SQ200780009844公開日2009年4月8日申請日期2007年3月14日優(yōu)先權(quán)日2006年3月20日發(fā)明者A·喬格勒卡,F·貝里,S·金申請人:英特爾公司