(57)【要約】  一実施形態では、本発明は、プロセッサにおいて入来データを受け取り、チェックサム演算のユーザレベル命令に応じて、前記プロセッサにおいて前記入来データにチェックサム演算を実施する方法を含む。例えば、ユーザレベル命令に応じて、巡回冗長検査をプロセッサ自体において計算できる。他の実施形態は説明し請求項に記載した。
2009521059.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサにおいて入来データを受け取る段階と、
チェックサム演算のユーザレベル命令に応じて、前記プロセッサにおいて、前記入来データに前記チェックサム演算を実行する段階とを含む方法。
【請求項２】
前記プロセッサのパイプラインにおいて前記チェックサム演算を実行する段階をさらに含み、前記プロセッサは汎用プロセッサを含み、前記チェックサム演算は巡回冗長検査演算を含む、請求項１に記載の方法。
【請求項３】
前記プロセッサのハードウェアエンジンにより前記チェックサム演算を実行する段階をさらに含み、前記プロセッサは汎用プロセッサを含む、請求項１に記載の方法。
【請求項４】
前記ユーザレベル命令に応じて前記ハードウェアエンジンにおいて多項式の除法演算を実行する段階をさらに含む、請求項３に記載の方法。
【請求項５】
前記ハードウェアエンジンはソースレジスタとデスティネーションレジスタに結合した排他的論理和ツリーを含む、請求項３に記載の方法。
【請求項６】
さらに、
前記ソースレジスタから前記入来データと、及び前記デスティネーションレジスタの少なくとも一部に記憶された現在値とを、前記排他的論理和ツリーに入力する段階と、
前記入来データと前記現在値とを用いて前記排他的論理和ツリーにおいて前記チェックサム演算を実行する段階と、
前記排他的論理和ツリーの出力を前記デスティネーションレジスタに記憶する段階とを含む、請求項５に記載の方法。
【請求項７】
前記排他的論理和ツリーの出力は前記チェックサム演算のランニング剰余に一致する、請求項６に記載の方法。
【請求項８】
前記入来データを前記ソースレジスタに供給するバッファが空であるとき、前記ランニング剰余をチェックサムとして使用する段階をさらに有す、請求項７に記載の方法。
【請求項９】
さらに、
前記入来データを前記プロセッサのソースレジスタにロードする段階と、
前記入来データを反転する段階と、
前記反転した入来データとデスティネーションレジスタからの反転したデータに少なくとも１回の排他的論理和演算を実行し、前記少なくとも１回の排他的論理和演算の結果を反転順に前記デスティネーションレジスタに格納する段階とを含む、請求項１に記載の方法。
【請求項１０】
ルックアップテーブル情報を用いずに、前記入来データと剰余値とを用いて前記プロセッサの論理ブロックにおいて前記チェックサム演算を実行する段階をさらに有する、請求項１に記載の方法。
【請求項１１】
ソースデータを記憶する第１のレジスタと、
結果データを記憶する第２のレジスタと、
前記第１のレジスタと前記第２のレジスタに結合した実行ユニットであって、前記ソースデータと前記結果データを用いて巡回冗長検査（ＣＲＣ）演算を実行し、前記第２のレジスタに前記ＣＲＣ演算のランニング剰余に対応する前記実行ユニットの出力の少なくとも一部を供給する実行ユニットとを有する装置。
【請求項１２】
前記実行ユニットはユーザレベル命令に応じて前記ＣＲＣ演算を実行する、請求項１１に記載の装置。
【請求項１３】
前記実行ユニットは汎用プロセッサパイプラインの排他的論理和（ＸＯＲ）ツリーロジックを含む、請求項１１に記載の装置。
【請求項１４】
前記ＸＯＲツリーロジックは一定の多項式により多項式除算を実行する、請求項１３に記載の装置。
【請求項１５】
それぞれがあるサイズのデータに前記ＣＲＣ演算を実行する複数のロジックブロックを有する、プロセッサパイプラインの整数ユニットを前記実行ユニットが有する、請求項１１に記載の装置。
【請求項１６】
ユーザレベル命令は前記ＣＲＣ演算を実行するデータのサイズを示す、請求項１５に記載の装置。
【請求項１７】
機械に実行されたとき、前記機械に以下の段階を含む方法を実行させる命令を含む機械読み取り可能記憶媒体を含む製品：
第１のレジスタのソースオペランドと第２のレジスタのデスティネーションオペランドからプロセッサのパイプラインの専用実行ユニットに巡回冗長検査（ＣＲＣ）値を集積する段階と、
前記集積したＣＲＣ値を前記第２のレジスタに記憶する段階と、
別のデータを前記ＣＲＣにかけるか判断する段階。
【請求項１８】
前記方法は、さらに、前記ＣＲＣ値を増加的に集積し、前記ＣＲＣにかける別のデータがなくなるまで、増加的に集積したＣＲＣ値を前記第２のレジスタに記憶する段階を含む、請求項１７に記載の製品。
【請求項１９】
前記方法は、さらに、前記ＣＲＣ用の前記プロセッサの命令セットアーキテクチャの命令に応じて前記ＣＲＣ値を集積する段階を有する、請求項１７に記載の製品。
【請求項２０】
前記方法は、前記ソースオペランドのサイズに基づき前記専用実行ユニットの複数部分の１つに前記ＣＲＣを集積する段階を有し、前記命令は前記ソースオペランドのサイズを示す、請求項１９に記載の製品。
【請求項２１】
命令セットアーキテクチャの命令に応じて演算を実行する第１と第２の実行ユニットを含み、前記第１の実行ユニットは巡回冗長検査（ＣＲＣ）演算を実行するハードウェアエンジンを含むプロセッサであって、ソースオペランドを前記ハードウェアエンジンに供給する第１のレジスタとデスティネーションオペランドを前記ハードウェアエンジンに供給する第２のレジスタとをさらに含むプロセッサと、
前記プロセッサに結合したダイナミックランダムアクセスメモリ（ＤＲＡＭ）とを有するシステム。
【請求項２２】
前記第１の実行ユニットは整数ユニットを有し、前記第２の実行ユニットは浮動小数点ユニットを有する、請求項２１に記載のシステム。
【請求項２３】
前記プロセッサはデータを前記第１のレジスタに供給するバッファを含む、請求項２１に記載のシステム。
【請求項２４】
前記ハードウェアエンジンは、ＣＲＣ演算のための前記ＩＳＡの命令に応じて、前記バッファが空になるまで、前記データに前記ＣＲＣ演算を実行する、請求項２３に記載のシステム。
【請求項２５】
前記ハードウェアエンジンは、前記第２のレジスタに前記ＣＲＣ演算のランニング剰余を供給する、請求項２４に記載のシステム。
【請求項２６】
前記ハードウェアエンジンは、それぞれが異なるサイズのデータにＣＲＣ演算を実行する複数の論理ブロックを含む、請求項２１に記載のシステム。
【請求項２７】
前記ハードウェアエンジンは、前記データサイズの前記ＣＲＣ演算のための前記ＩＳＡの命令に応じて、前記ＣＲＣ演算を実行するデータサイズに対応する前記複数の論理ブロックの１つにデータを供給する、請求項２６に記載のシステム。
【発明の詳細な説明】
【背景技術】
【０００１】
本発明の実施形態はデータ処理に関し、より具体的には巡回冗長検査（ＣＲＣ）等のチェックサムの決定に関する。
【０００２】
データ処理システムにおいては、第１の記憶場所から送信されたデータを第２の記憶場所で正しく受信して、第２の記憶場所での処理を正しく行うことが望ましい。さらに、データ送信におけるエラーを検出できるようにするため、多くの場合データパケットにチェックサムを付加して送信する。例えば、送信元がＣＲＣサムを生成し、送信データに付加する。このチェックサムは、多数のアルゴリズムのうちの１つで計算でき、受信側が受信データから生成した同様のチェックサムと比較できる。２つのチェックサムが等しければ、送信データは正しい。しかし、生成されたチェックサムが送信されたチェックサムと違えば、エラーが発生したことになる。かかるチェックサムは、送信エラーを検出するためにネットワークテクノロジではよく使用されている。
【０００３】
別のアプリケーションでは、違う方法でＣＲＣ情報を実装できる。例えば、ＣＲＣ計算はハードウェアでもソフトウェアでも行える。ハードウェアでＣＲＣ計算を実施するには、一般的には、システムにＣＲＣ計算を実行する専用のハードウェアエンジンを設ける。したがって、ＣＲＣ計算を行うデータは、ＣＲＣの計算用のハードウェアエンジンに送られ、計算したＣＲＣをデータに付加して、例えば、システムから送信する。かかるオフロードエンジン（offload  engine）の使用には、データをエンジンに送るオーバーヘッドを含め、様々な欠点がある。さらに、ステートレスハードウェアオフロードの実行は困難である。すなわち、一般的に、ステートベースのオーバーヘッドデータも追加的に送信する必要があり、複雑になってしまい、有用な作業の進行が遅れる。
【０００４】
多くのシステムがかかるオフロードエンジンを有していないので、ＣＲＣ計算はソフトウェアで行われることが多い。ソフトウェアでＣＲＣ計算を実施するためには、一般的にルックアップテーブル方式を使用する。しかし、かかるＣＲＣ値のソフトウェア計算は周知のように遅く、計算量の多い動作である。さらに、ルックアップテーブルのメモリのフットプリントも大きく、性能に影響する。したがって、計算が遅いためネットワーク性能が落ち、処理リソースも消費してしまう。一例として、データの１バイトあたり、ＣＲＣ計算には５乃至１５サイクルがかかる。結果として、高速ネットワークで一般的に使用するには、ソフトウェアＣＲＣの性能は低すぎる。
【発明の詳細な説明】
【０００５】
様々な実施形態では、チェックサム演算は、チェックサム値を計算する命令セットアーキテクチャ（ＩＳＡ）を用いて行われる。より具体的には、ユーザレベル命令は、その命令により汎用プロセッサ（例えば、中央処理装置（ＣＰＵ））においてＣＲＣ演算等の所望のチェックサム演算をプログラマが直接実行できるようにＩＳＡ内に設けられる。ＣＲＣ演算は３２ビットＣＲＣ演算（すなわち、以下により詳しく説明する、３２ビットランニング剰余を生成するＣＲＣ３２演算）であってもよく、違う実施形態では、例えば、（２００２年に公表された）ＩＥＥＥ８０２．３イーサネット（登録商標）プロトコルその他のプロトコルで使用されるＣＲＣに対応する。
【０００６】
別の実施形態では、データのグループに応じてＣＲＣ計算を実行する様々なオペコードを設けてもよい。例えば、実施形態によっては、ＣＲＣ計算は異なるオペコードを用いて８ビット、１６ビット、３２ビット、及び６４ビットのグループでサポートされているが、本発明の範囲はこれに限定されない。このように、ＣＲＣ計算はルックアップテーブル等を要さずにハードウェアで素早く行える。さらに、この計算は異なるオペコードにより実行される整数演算により、一般的なアーキテクチャ的に可視のプロセッサレジスタを用いて実行できる。結果として、ＣＲＣは、ネットワークオフロードハードウェア（network  offload  hardware）等のオフロードハードウェアのオーバーヘッドや複雑性を必要とせずに、プロセッサ内で計算できる。したがって、（例えば、１秒当たりの入出力について）データ送信の数を増やすことができる。ここではＣＲＣ演算に関して主に説明するが、本発明の実施形態は他のチェックサム演算の実行に使用することもできることに留意して欲しい。
【０００７】
ここで図１を参照するに、本発明の一実施形態による方法を示すフロー図である。方法１００を使用して、ＣＰＵの実行ユニット等のプロセッサハードウェアに実装されたユーザレベル命令を用いてチェックサムを求める。図１に示したように、方法１００においては最初にソースレジスタとデスティネーションレジスタのデータに一連の排他的論理和（ＸＯＲ）を実行する（ブロック１１０）。ＸＯＲ演算は多項式演算に相当し、より具体的には多項式除算演算に相当することに留意されたい。ソースレジスタのデータは、例えば、プロセッサが受け取った、またはプロセッサから送信されるプロセッサパイプライン中にあるデータに相当する。一例として、望ましいグループサイズ（例えば、１６ビット、３２ビット等）に対応するバッファ中のデータのグループが、ソースレジスタに供給される。このソースレジスタはプロセッサの汎用レジスタであってもよい。あるいは、実施形態によっては、ソースデータはメモリから取得される。デスティネーションレジスタはＸＯＲ演算から得られたランニング剰余の記憶場所に対応する。デスティネーションレジスタもプロセッサの汎用レジスタであってもよい。
【０００８】
実施形態によっては、ＸＯＲ演算はプロセッサパイプライン中の専用ハードウェアで実行されてもよい。例えば、プロセッサの演算ユニット（例えば、整数演算ユニット等）を拡張して一連のＸＯＲ演算を実施する回路を設けてもよい。例えば、この回路は所望の多項式による多項式除算を処理するＸＯＲツリーに相当する。実施形態によっては、ＸＯＲ演算で使用する多項式をＸＯＲツリーの論理ゲートにハードウェアとして組み込んでも（hard-wired）よい。さらに、ＸＯＲツリーを、ビット反転等のＸＯＲ演算による所望の前処理と後処理を実施するように構成してもよい。さらに、ＸＯＲツリー論理が複数のパーティションに分かれていて、各パーティションが相異なるデータサイズの演算を処理するように構成してもよい。
【０００９】
さらに図１を参照して、ＸＯＲ演算で求めたランニング剰余に対応する結果をデスティネーションレジスタに記憶する（ブロック１２０）。デスティネーションレジスタは、システムの初期化時に、所定値（すべて１、すべて０、その他の値）に設定されていることに留意する。そして、チェックサム演算の実行中、このランニング剰余（running  remainder）はその時点のチェックサム演算の結果で絶えず更新される。より具体的には、その時のチェックサム演算により実施された多項式除算の剰余がデスティネーションレジスタに記憶される。
【００１０】
次に、別のソースデータがあるか判断する（判断ブロック１３０）。例えば、実施形態によっては、バッファには、システムが受け取ったチェックサムを確認すべきデータが含まれている。データはソースレジスタにチャンクごとに入力され、チェックサム演算が実行される。したがって、判断ブロック１３０では、このバッファにこの他にデータがあるか判断する。データがあれば、次のデータのチャンクをソースレジスタに供給し、上記のブロック１１０に進む。
判断ブロック１３０において、他のソースデータはないと判断された場合、ブロック１４０に進む。ここで、チェックサム演算の結果が現在値（例えば、ランニング剰余）として、デスティネーションレジスタに記憶される（ブロック１４０）。上記の通り、このチェックサム値は様々に利用される。例えば、受信データの場合、データが正しく受信されたか確認するために、計算したチェックサムを受信したチェックサムと比較する。送信時には、チェックサムを送信データに付加し、受信側でそのデータを確認できるようにする。もちろん、チェックサムは、ハッシュ関数や擬似乱数の発生（generation  of  numbers  pursuant  to  a  pseudo  random  numbering  scheme）その他の用途にも使用できる。
【００１１】
本発明の一実施形態によるチェックサム演算を実施するプロセッサは、望ましいアーキテクチャに応じて様々な形態を取りうる。ここで図２を参照するに、本発明の一実施形態によるプロセッサを示すブロック図である。図２に示したように、プロセッサ２００はデータパス２０５を含む。データパス２０５は、レジスタエイリアステーブル（ＲＡＴ：register  alias  table）２７０を含むフロントエンド制御段により制御される。ＲＡＴ２７０は、プロセッサのフロントエンドから復号命令（decoded  instructions）を受け取る（図２には図示せず）。ＲＡＴ２７０は、フロントエンドからマイクロオペレーション（microoperations）を受け取り、そのマイクロオペレーションをデータパスのリソースのために名称変更（rename）するために使用される。データパス２０５では、名称変更されたマイクロオペレーションがリオーダーバッファ（ＲＯＢ）２５０に供給される。ＲＯＢ２５０は、マイクロオペレーションがリザベーションステーション（ＲＳ）２３０に送れるようになるまで、マイクロオペレーションと対応するソースオペランドとを記憶するレジスタファイルとして動作する。同様に、ＲＯＢ２５０は、すでに実行されたマイクロオペレーションの対応する結果も記憶する。ＲＯＢエントリが開放されてマイクロオペレーションがリタイアするまで、これらの結果はＲＯＢ２５０に保持される。
【００１２】
リザベーションステーション２３０を使用して、マイクロオペレーションの対応するソースオペランドがあり、及び／またはマイクロオペレーションがデータパス２０５の複数の実行ユニットの１つで実行できるようになるまで、マイクロオペレーションを記憶する。リザベーションステーション２３０は、命令とデータをデータパス２０５の実行ユニットの１つに結合する複数のディスパッチポートを含む。実施形態によっては、複数のディスパッチポートを各サイクルで使用してもよい。
【００１３】
図２に示すように、データパス２０５の実行ユニットは、アドレス生成ユニット（ＡＧＵ）２２０、整数（ＩＮＴ）実行ユニット２２２、ストアデータ（ＳＴＤ）ユニット２２４、浮動小数点（ＦＰ）実行ユニット２２６、単一命令複数データ（ＳＩＭＤ）実行ユニット２２８を含む。図２に示したように、整数実行ユニット２２２はさらにロジック２２１を含む。ロジック２２１は、本発明の一実施形態によりチェックサム演算を実行する１つ以上のハードウェアエンジンを含む。より具体的には、ロジック２２１は、多項式の算術演算とそれに関係するデータ処理を実施する複数の排他的論理和（ＸＯＲ）ロジックツリーを含む。実施形態によっては、ロジック２２１は、相異なるサイズのデータチャンクにＣＲＣ演算を実施する相異なるハードウェアエンジンを含む。一例として、ＩＳＡの複数のユーザレベル命令がそれぞれ一データサイズのＣＲＣ演算を規定する。ロジック２２１は、実施形態によっては、これらの相異なるＣＲＣ演算を実行する、対応する数のハードウェアエンジン（ここではＸＯＲツリーとも呼ぶ）を含む。
【００１４】
図２には示していないが、相異なる実施形態ではこれ以外の実行ユニットやこれとは異なる実行ユニットがあってもよい。実行ユニットの１つにおけるマイクロオペレーションの実行後、例えばリタイア（retirement）するまで記憶するために、結果データがＲＳ２３０とＲＯＢ２５０に戻される。このように、一実施形態では、ＣＲＣ演算を実行するソースレジスタとデータレジスタの両方がＲＳ２３０またはＲＯＢ２５０にある。図２には示していないが、言うまでもなく、メモリオーダーバッファ（ＭＯＢ）その他のリソース等の追加的バッファがプロセッサ２００内にあってもよい。
【００１５】
さらに、言うまでもなく、図２は説明が容易になるように表示してあり、実施形態によっては、プロセッサにはより多くの段階や違う名称の段階があってもよい。例えば、書き戻し段階を実行ユニットに結合して、後でメモリ階層に送るために結果データを受け取ってもよい。あるいは、ストアバッファ、ロードバッファ等のバッファをＲＳ２３０に結合してもよい。一例として、関連する命令のリタイアメントまで、マイクロオペレーションとその関連の結果データを記憶するために、リタイアメントバッファ（retirement  buffer）をＲＳ２３０に結合してもよい。
【００１６】
もちろん他の実施形態も可能である。図３を参照するに、本発明の一実施形態によるチェックサム演算を行うプロセッサの一部を示すブロック図である。図３に示したように、プロセッサ３００の一部を示した。より具体的には、プロセッサ３００は、ＸＯＲツリー３１０、第１のレジスタ３２０、第２のレジスタ３３０を含み、これらはすべてプロセッサパイプラインの一部であってもよい。ＸＯＲツリー３１０は、実施形態に応じて構成できる。例えば、ＸＯＲツリー３１０は、第１のレベルでは、複数の３入力ＸＯＲゲートを用いて実施され、そのＸＯＲゲートの出力は第２のレベルの同様のＸＯＲゲートに結合され、以下同様である。かかる実施形態では、ＸＯＲツリーの各レベルは前のレベルの１／３の大きさである。もちろん他の実施形態も可能である。
【００１７】
さらに図３に示したように、プロセッサ３００はバッファ３４０を含む。このバッファ３４０も（例えば、バッファ、キューその他として）プロセッサパイプラインの中にあってもよい。あるいは、バッファ３４０はプロセッサ３００に付随するキャッシュメモリであってもよい。図３の実施形態では、第１のレジスタ３２０はソースレジスタに相当し、第２のレジスタ３３０はデスティネーションレジスタに相当する。実施形態によっては、これらのレジスタはプロセッサ３００内の汎用レジスタであってもよい。もちろん、プロセッサ３００は、他に多くのレジスタ、ロジック、機能ユニット等を含んでもよく、図３に示した部分は説明を容易にするものである。
【００１８】
図３に示したように、本発明の一実施形態によるチェックサムを実行するために、第１のレジスタ３２０の少なくとも第１の部分が、第２のレジスタ３３０の一部とともに、ＸＯＲツリー３１０に設けられる。図３に示した実施形態では、８ビットＣＲＣアキュムレーション（accumulation）を示しているが、１バイトのデータ（Ｂ０）が第１のレジスタ３２０からＸＯＲツリー３１０に供給され、第２のレジスタ３３０の４バイト部分がＸＯＲツリー３１０に供給される。この４バイト部分はＣＲＣ３２演算のランニング剰余に相当する。このデータを用いて、ＸＯＲツリー３１０はＸＯＲ演算によりデータ処理を実行し、剰余部分を含む結果を生成する。図３に示したように、この剰余部分が第２のレジスタ３３０に記憶されるランニング剰余である。このように、ＣＲＣ演算を最小のサイクル時間で最小のプロセッサリソースを用いて効率的に実行できる。図３の実施形態では、８ビットアキュムレーション演算の場合、第１のレジスタ３２０の別の部分が、第２のレジスタ３３０の現在のコンテンツ（すなわち、３２ビットランニング剰余）とともに、ＸＯＲツリー３１０に増加的に供給される。したがって、第１のレジスタ３２０において６４ビットのデータのＣＲＣチェックサムを求めるためには、ＸＯＲツリー３１０におけるＸＯＲ演算を８回（各回に、第２のレジスタ３３０の現在のランニング剰余とともに、第１のレジスタ３２０からのデータの１バイトを用いる）繰り返せばよい。チェックサムにより確認すべき別のデータがバッファ３４０にあれば、そのデータを第１のレジスタ３２０にロードし、ＸＯＲツリー３１０で処理する。
【００１９】
異なるビット幅のＣＲＣ計算を処理するために異なるハードウェアがあってもよい。したがって、図２に戻り、ロジック２２１はかかるＣＲＣ計算を処理するために異なるＸＯＲツリー構造を含んでいてもよい。ここで図４を参照するに、本発明の一実施形態によるプロセッサの他の部分を示すブロック図である。図４に示したように、プロセッサ３００は、第１のレジスタ３２０と第２のレジスタ３３０からデータを受け取るように結合した異なるＸＯＲツリー４１０を（例えば、図３のＸＯＲツリー３１０に加えて）含む。図４に示したように、バッファ３４０があり、ＣＲＣ計算のためのデータを供給するために使用される。図４の実施形態では、ＸＯＲツリー４１０は６４ビットＣＲＣアキュムレーションを処理するように構成されている。したがって、第１のレジスタ３２０のコンテンツ全体（すなわち、バイトＢ０−Ｂ７）は、第２のレジスタ３３０中のデータとＸＯＲ演算をするために、ＸＯＲツリー４１０に１度に送られる。所望の一部がランニング剰余に相当する結果データは第２のレジスタ３３０に記憶される。図３と図４の具体的な実施形態に基づき説明したが、言うまでもなく、本発明の範囲はこれに限定されず、他の実施形態では、ＣＲＣ演算を行う異なるハードウェア構成があってもよい。
【００２０】
ここで以下の表１を参照するに、本発明の様々な実施形態によるＣＲＣ演算をサポートする命令セットアーキテクチャ（ＩＳＡ）の命令の例のリストを示した。表１に示したように、各命令は、オペコードと呼ばれ、ソースレジスタとデスティネーションレジスタを用いてＣＲＣ３２を実行するために使用される。表に示した通り、異なる表示も可能であり、各命令は、所与のサイズのデスティネーションオペランドとソースオペランドのＣＲＣ演算を実行する。このように、表１の第１のラインを参照して、この命令は、８ビットソースオペランドと３２ビットデスティネーションオペランドにＣＲＣ３２演算を実行するために使用される。同様に、表１の第２のラインは、１６ビットソースオペランドと３２ビットデスティネーションオペランドにＣＲＣ３２演算を実行するために使用される。同様に、表１の第３のラインは、３２ビットソースオペランドと３２ビットデスティネーションオペランドにＣＲＣ３２演算を実行するために使用される。
【００２１】
これらの最初の３つの命令は３２ビットの最大データチャンクで実行されるので、この命令は６４ビットモードの演算とレガシーモード（すなわち３２ビット）の演算の両方に有効であることに留意する。逆に、表１の第４と第５のラインは、８ビットと６４ビットのソースオペランド（６４ビットデスティネーションオペランド）に実行されるＣＲＣ演算を示している。このように、最後の２つの命令は６４ビットモードの演算のみで実行される。
【００２２】
【表１】
2009521059.tif 000003
実施形態によっては、これらのユーザレベルの命令は、例えば図１のフロー図に示したＣＲＣ演算を実施するために、プログラマにより使用される。
【００２３】
一般に、ユーザレベルＣＲＣ命令は次のように実施できる。第１のオペランド（すなわち、デスティネーションオペランド）の初期値から始めて、第２のオペランド（すなわち、ソースオペランド）のＣＲＣ３２値を集積（accumulated）し、その結果をデスティネーションオペランドに記憶し戻す。異なる実施形態では、ソースオペランドはレジスタやメモリの記憶場所であってもよい。デスティネーションオペランドは３２または６４ビットレジスタである。デスティネーションが６４ビットレジスタであるとき、３２ビットの結果は最下位ダブルワードに記憶され、００００００００Ｈがレジスタの最上位ダブルワードに記憶される。
【００２４】
デスティネーションオペランドに供給された初期値は、３２ビットレジスタに記憶されたダブルワード整数、または６４ビットレジスタの最下位ダブルワードである。ＣＲＣ３２値を増加的に集積する（incrementally  accumulate）ため、ソフトウェアは前のＣＲＣ演算の結果をデスティネーションオペランドに保持し、ソースオペランドの新しい入力データで再びＣＲＣ演算を実行する。したがって、各命令は第１のオペランド中のランニングＣＲＣ値を取り、第２のオペランドに基づきそのＣＲＣ値を更新する。このように、所望のデータがすべてＣＲＣ演算されるまで、演算をループで実行することにより、ＣＲＣを所望のデータ量にわたって生成できる。
【００２５】
実施形態によっては、ソースオペランドに含まれるデータは反転ビットオーダーで処理される。これは、ソースオペランドの最上位ビットが商の最下位ビットとして扱われることを意味し、ソースオペランドのすべてのビットについて以下同様である。同様に、ＣＲＣ演算の結果は反転ビットオーダーでデスティネーションレジスタに記憶できる。これは、結果として得られたＣＲＣの最上位ビット（すなわち、ビット３１）がデスティネーションレジスタの最下位ビット（ビット０）に記憶されることを意味し、ＣＲＣのすべてのビットについて以下同様である。
これらのユーザレベル命令を実施する異なる方法もあるが、以下の表２乃至６は、表１の各ユーザレベル命令のハードウェア実装の擬似コード表示を示している。
【００２６】
【表２】
2009521059.tif 000004
【００２７】
【表３】
2009521059.tif 000005
【００２８】
【表４】
2009521059.tif 000006
【００２９】
【表５】
2009521059.tif 000007
【００３０】
【表６】
2009521059.tif 000008
【００３１】
これらの擬似コードの断片（snippets）の一般的な構造は同じであることに留意せよ。最初に、ソースレジスタ中のデータをビット反転する（すなわち、そのビットを逆のビットオーダーで一時的レジスタに配置する）。デスティネーションレジスタを同様にビット反転する。次に、シフト演算、より具体的には左シフト演算をビット反転したソースオペランドとデータオペランドの両方に行う。結果の値にＸＯＲ演算をする。この演算は選択された多項式の値による多項式除算に相当する。この値は異なる実施形態では多数の異なる形体を取るが、ＣＲＣ３２演算を実行する実施形態によっては、多項式は１１ＥＤＣ６Ｆ４１Ｈに相当するが、本発明の範囲はこれに限定されない。この多項式除算の剰余を、ビット反転オーダーでデスティネーションオペランドの低オーダービット（例えば、３２ビットまたは６４ビットレジスタのビット０−３１）に記憶し戻す。６４ビットレジスタの場合、最上位ビット（ＭＳＢ）にはゼロがロードされる。表２乃至６を参照してこの具体的な実施形態を説明したが、言うまでもなく、ユーザレベルＣＲＣ命令を提供する他の方法を実行してもよい。
【００３２】
ユーザレベル命令によりプロセッサパイプライン自体でＣＲＣ演算を実行することにより、データをオフロード（offload）エンジンに送る必要はなくなる。同様に、演算は供給状態（providing  state）無しでも実行でき、オーバーヘッドが減少する。このように、３サイクルパスで実施されるように、ＣＲＣ演算は１バイトあたり約０．４サイクル以下で実行できる。したがって、プロセッサパイプラインの専用ハードウェアとともにユーザレベル命令を使用すると性能がよくなる。さらに、３サイクルレイテンシーは、最小のリアルエステート消費とパワー消費で実現できる。本発明の実施形態を使用して、例えば、毎秒１０ギガビット以上のレートのインターネットコンピュータシステムインタフェース（ｉＳＣＳＩ）プロトコルなど、様々な記憶プロトコルを処理できる。本発明の実施形態により、プロセッサまたはそれに密接に結合したデータを使用でき、オンキャッシュデータの必要性が減少する。このように、プロセッサバッファ中のデータをＸＯＲツリーに入力し、素早くＣＲＣを計算できる。
【００３３】
実施形態は多数の異なるシステムのタイプで実施できる。ここで図５を参照するに、本発明の一実施形態によるマルチプロセッサシステムを示すブロック図である。図５に示したように、このマルチプロセッサシステムは、ポイントツーポイント・インターコネクト・システムであり、ポイントツーポイント・インターコネクト４５０を介して結合された第１のプロセッサ４７０と第２のプロセッサ４８０とを含む。図５に示したように、各プロセッサ４７０、４８０は、マルチコアプロセッサでもよく、第１と第２のプロセッサコア（すなわち、プロセッサコア４７４ａと４７４ｂ、及びプロセッサコア４８４ａと４８４ｂ）を含む。例示を容易にするために図示はしていないが、第１のプロセッサ４７０と第２のプロセッサ４８０（より具体的には、それらの中のコア）は、本発明の一実施形態によるユーザレベルＣＲＣ命令を実行するＸＯＲツリーロジックを実行ユニット内に含んでいる。第１のプロセッサ４７０は、さらに、メモリコントローラハブ（ＭＣＨ）４７２及びポイントツーポイント（Ｐ−Ｐ）・インタフェース４７６と４７８を含む。同様に、第２のプロセッサ４８０はＭＣＨ４８２及びＰ−Ｐインタフェース４８６と４８８を含む。図５に示したように、ＭＣＨ４７２と４８２はプロセッサをそれぞれのメモリ、すなわちメモリ４３２とメモリ４３４に結合する。これらのメモリは、それぞれのプロセッサに局所的に付加されたメインメモリの一部であってもよい。
【００３４】
第１のプロセッサ４７０と第２のプロセッサ４８０は、それぞれＰ−Ｐインターコネクト４５２と４５４を介してチップセット４９０に結合している。図５に示したように、チップセット４９０はＰ−Ｐインタフェース４９４と４９８を含む。さらに、チップセット４９０は、チップセット４９０を高性能グラフィックスエンジン４３８と結合するインタフェース４９２を含む。一実施形態では、グラフィックスエンジン４３８をチップセット４９０と結合するために、ＡＧＰ（Advanced  Graphics  Port）バス４３９を使用できる。ＡＧＰバス４３９は、インテル  コーポレイション（カリフォルニア州サンタクララ）が１９９８年５月４日に公表したＡｃｃｅｌｅｒａｔｅｄ  Ｇｒａｐｈｉｃｓ  Ｐｏｒｔ  Ｉｎｔｅｒｆａｃｅ  Ｓｐｅｃｉｆｉｃａｔｉｏｎ，  Ｒｅｖｉｓｉｏｎ２．０に準拠している。あるいは、これらの構成要素はポイントツーポイント・インターコネクト４３９で結合してもよい。
【００３５】
次に、チップセット４９０はインタフェース４９６を介して第１のバス４１６に結合している。一実施形態では、第１のバス４１６は、１９９５年６月のPCI  Local  Bus  Specification,  Production  Version,  Revision  ２.１で規定されたＰＣＩ（Peripheral  Component  Interconnect）バス、またはＰＣＩ  Ｅｘｐｒｅｓｓバスその他の第３世代入出力（Ｉ／Ｏ）インターコネクトバス等のバスであるが、本発明の範囲はこれに限定されない。
【００３６】
図５に示したように、様々な入出力デバイス４１４を第１のバス４１６に結合でき、バスブリッジ４１８で第１のバス４１６を第２のバス４２０に結合できる。一実施形態では、第２のバス４２０はローピンカウント（ＬＰＣ）バスであってもよい。例えば、キーボード／マウス４２２、通信デバイス４２６、データ記憶ユニット４２８を含む様々なデバイスを第２のバス４２０に結合してもよい。一実施形態では、このデータ記憶ユニット４２８がコード４３０を含む。さらに、オーディオＩ／Ｏ４２４は第２のバス４２０に結合してもよい。他のアーキテクチャも可能であることに留意せよ。例えば、図５のポイントツーポイントアーキテクチャのかわりに、システムはマルチドロップバスその他のアーキテクチャを実施してもよい。
【００３７】
実施形態はコードで実装され、命令を実行させるためにシステムをプログラムするために使用できる命令を記憶した記憶媒体に格納してもよい。記憶媒体には、フロッピー（登録商標）ディスク、光ディスク、コンパクトディスク・リードオンリメモリ（ＣＤ−ＲＯＭ）、コンパクトディス・クリライタブル（ＣＤ−ＲＷ）、光磁気ディスク等の任意タイプのディスク、リードオンリメモリ（ＲＯＭ）、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）等のランダムアクセスメモリ（ＲＡＭ）、スタティックランダムアクセスメモリ（ＳＲＡＭ）、消去可能プログラマブル・リードオンリメモリ（ＥＰＲＯＭ）、フラッシュメモリ、電気的消去可能プログラマブル・リードオンリメモリ（ＥＥＰＲＯＭ）等の半導体デバイス、磁気または光カード、その他の電子的命令を記憶するのに好適な媒体が含まれるが、これらに限定はされない。
【００３８】
本発明を少数の実施形態を参照して説明したが、当業者はこれから多数の修正や変形を理解できるであろう。添付した請求項は、本発明の精神と範囲に含まれる修正や変形をすべてカバーするものである。
【図面の簡単な説明】
【００３９】
【図１】本発明の一実施形態による方法を示すフロー図である。
【図２】本発明の一実施形態によるプロセッサを示すブロック図である。
【図３】本発明の一実施形態によるチェックサム演算を行うプロセッサの一部を示すブロック図である。
【図４】本発明の一実施形態によるプロセッサの他の一部を示すブロック図である。
【図５】本発明の一実施形態によるシステムを示すブロック図である。
【図１】
2009521059.tif 000009
【図２】
2009521059.tif 000010
【図３】
2009521059.tif 000011
【図４】
2009521059.tif 000012
【図５】
2009521059.tif 000013
【国際調査報告】
2009521059.tif 000014
2009521059.tif 000015