(57)【要約】【課題】１マイナス・ドット積ベクトル浮動小数点計算を行う処理ユニットの性能を向上させる。【解決手段】浮動小数点実行ユニットが、１マイナス・ドット積の値を単一パスで計算する。従って、他の方法では計算を行うのに要求されるであろう依存性が排除され、結果的にこのような計算の実施が大幅に高速化される。浮動小数点実行ユニットは、例えば、フレネル効果および電子顕微鏡効果などのピクセル・シェーディング・アルゴリズムを促進するのに使用されるとよい。【選択図】図１
2010040041.tif 000002
【特許請求の範囲】
【請求項１】
ベクトル浮動小数点実行ユニットを用いて、画像のピクセルにシェーディング効果を適用する方法であって、前記方法は、
前記ベクトル浮動小数点実行ユニットによってサポートされている命令セットにて定義されている１マイナス・ドット積命令を受信するステップであって、前記１マイナス・ドット積命令は、表面法線ベクトルおよび視線ベクトルを受信するように構成されており、前記法線ベクトルおよび視線ベクトルの各々がｘ、ｙおよびｚの値を含む、前記受信するステップと、
前記ベクトル浮動小数点実行ユニットのパイプラインの単一パスで前記１マイナス・ドット積命令を実行することによって前記表面法線ベクトルおよび前記視線ベクトルから輝度値を計算するステップであって、前記１マイナス・ドット積命令を実行することが、以下のこと：
前記ベクトル浮動小数点実行ユニットの第１、第２および第３処理レーンそれぞれにおいて、前記表面法線ベクトルおよび視線ベクトルの前記ｘ、ｙおよびｚの値それぞれを乗算すること；
前記ベクトル浮動小数点実行ユニットの前記第１、第２および第３処理レーンの各々をネゲートすること；
前記ベクトル浮動小数点実行ユニットの第４レーンを強制的に１．０値にすること；および
前記輝度値を生成するべく、前記第１、第２、第３および第４処理レーンを合計すること、
を含む、前記計算するステップと、
を含む、方法。
【請求項２】
前記第１、第２および第３処理レーンをネゲートすることが、前記表面法線ベクトルおよび視線ベクトルのｘ、ｙおよびｚの値それぞれの乗算より前に、前記表面法線ベクトルおよび視線ベクトルのうちの１つのｘ、ｙおよびｚの値それぞれをネゲートすることを含む、請求項１に記載の方法。
【請求項３】
ベクトル浮動小数点実行ユニットの単一パスで１マイナス・ドット積の値を計算するべく、命令セットの第１命令タイプの第１命令を実行するように構成されている前記ベクトル浮動小数点実行ユニットを含む、回路装置。
【請求項４】
前記１マイナス・ドット積の値が、入力として第１および第２ベクトルを使用するように構成されており、以下の計算式：
１．０−ｄｏｔ（第１ベクトル，第２ベクトル）
を用いて計算され、ここでｄｏｔ（）は前記第１および第２ベクトルのドット積である、請求項３に記載の回路装置。
【請求項５】
前記第１および第２ベクトルの各々が、第１、第２および第３の値を含み、前記ベクトル浮動小数点実行ユニットが、第１、第２、第３および第４の処理レーンを含み、前記ベクトル浮動小数点実行ユニットの前記第１および第３処理レーンは、前記第１命令タイプの前記第１命令の実行中に、前記第１および第２ベクトルの前記第１、第２および第３の値それぞれを共に乗算して第１、第２および第３の積を生成し、前記ベクトル浮動小数点実行ユニットは、前記第４処理レーンに強制的に１．０値を生成させ、前記１．０値を前記第１、第２および第３の積と合計させるように構成されている、請求項３に記載の回路装置。
【請求項６】
前記ベクトル浮動小数点実行ユニットは、前記第１命令タイプの前記第１命令を実行中に前記１．０値を前記第１、第２および第３の積に加算するために前記第１、第２、第３および第４処理レーンの出力に接続されている加算器を含む、請求項５に記載の回路装置。
【請求項７】
前記ベクトル浮動小数点実行ユニットは、さらに、前記第１命令タイプの前記第１命令を実行中、前記１．０値を前記第１、第２および第３の積に加算する前に、前記第１、第２および第３の積を反転させるように構成されている、請求項６に記載の回路装置。
【請求項８】
前記第１、第２および第３処理レーンの各々が、前記第１ベクトルの前記第１、第２および第３の値それぞれを反転させるように構成されている符号反転器を含む、請求項７に記載の回路装置。
【請求項９】
前記第４処理レーンが、
第１オペランド入力で受信された、前記第１ベクトルの第４の値と、第２オペランド入力で受信された、前記第２ベクトルの第４の値とを乗算するように構成されている乗算器と、
加算より前に、第３ベクトルの第４の値を前記乗算器の出力にアラインする、アライナと、
前記第２オペランド入力に接続されている第１マルチプレクサであって、前記第１マルチプレクサは、前記第２オペランド入力へ前記第２ベクトルの前記第４の値を与えるように構成されている第１入力と、前記第２オペランド入力へ０の値を与えるように構成されている第２入力とを有し、前記第１マルチプレクサは、前記第１命令タイプの前記第１命令の実行中、前記第２入力を選択するように構成されている、前記第１マルチプレクサと、
前記アライナに接続されている第２マルチプレクサであって、前記第２マルチプレクサは、前記アライナへ前記第３ベクトルの前記第４の値を与えるように構成されいる第１入力と、前記アライナへ１．０の値を与えるように構成されている第２入力とを有し、前記第２マルチプレクサは、前記第１命令タイプの前記第１命令の実行中、前記第２入力を選択するように構成されている、前記第２マルチプレクサと、
を含む、請求項８に記載の回路装置。
【請求項１０】
請求項３に記載の回路装置を含む、集積回路デバイス。
【請求項１１】
コンピュータ可読媒体と、前記コンピュータ可読媒体上に常駐しており請求項３に記載の回路装置を定義している論理定義プログラム・コードと、を含む、プログラム。
【請求項１２】
ベクトル浮動小数点実行ユニットを用いて１マイナス・ドット積計算を行う方法であって、前記方法は、
前記ベクトル浮動小数点実行ユニットによってサポートされている命令セットの第１命令タイプの第１命令を受信するステップと、
前記第１命令の受信に応えて、前記ベクトル浮動小数点実行ユニットの単一パスで１マイナス・ドット積の値を計算することによって、前記第１命令を実行するステップと、
を含む、方法。
【請求項１３】
前記１マイナス・ドット積の値が、入力として第１および第２ベクトルを使用するように構成されており、以下の計算式：
１．０−ｄｏｔ（第１ベクトル，第２ベクトル）
を用いて計算され、ここでｄｏｔ（）は前記第１および第２ベクトルのドット積である、請求項１２に記載の方法。
【請求項１４】
前記第１および第２ベクトルの各々が、第１、第２および第３の値を含み、前記ベクトル浮動小数点実行ユニットが、第１、第２、第３および第４の処理レーンを含み、前記ベクトル浮動小数点実行ユニットの前記第１および第３処理レーンは、前記第１命令タイプの前記第１命令の実行中に、前記第１および第２ベクトルの前記第１、第２および第３の値それぞれを共に乗算して第１、第２および第３の積を生成し、前記ベクトル浮動小数点実行ユニットは、前記第４処理レーンに強制的に１．０値を生成させ、前記１．０値を前記第１、第２および第３の積と合計させるように構成されている、請求項１２に記載の方法。
【請求項１５】
前記ベクトル浮動小数点実行ユニットは、前記第１命令タイプの前記第１命令を実行中に前記１．０値を前記第１、第２および第３の積に加算するために前記第１、第２、第３および第４処理レーンの出力に接続されている加算器を含む、請求項１４に記載の方法。
【請求項１６】
前記ベクトル浮動小数点実行ユニットは、さらに、前記第１命令タイプの前記第１命令を実行中、前記１．０値を前記第１、第２および第３の積に加算する前に、前記第１、第２および第３の積を反転させるように構成されている、請求項１５に記載の方法。
【請求項１７】
前記第１、第２および第３処理レーンの各々が、前記第１ベクトルの前記第１、第２および第３の値それぞれを反転させるように構成されている符号反転器を含む、請求項１６に記載の方法。
【請求項１８】
前記第４処理レーンが、
第１オペランド入力で受信された、前記第１ベクトルの第４の値と、第２オペランド入力で受信された、前記第２ベクトルの第４の値とを乗算するように構成されている乗算器と、
加算より前に、第３ベクトルの第４の値を前記乗算器の出力にアラインする、アライナと、
前記第２オペランド入力に接続されている第１マルチプレクサであって、前記第１マルチプレクサは、前記第２オペランド入力へ前記第２ベクトルの前記第４の値を与えるように構成されている第１入力と、前記第２オペランド入力へ０の値を与えるように構成されている第２入力とを有し、前記第１マルチプレクサは、前記第１命令タイプの前記第１命令の実行中、前記第２入力を選択するように構成されている、前記第１マルチプレクサと、
前記アライナに接続されている第２マルチプレクサであって、前記第２マルチプレクサは、前記アライナへ前記第３ベクトルの前記第４の値を与えるように構成されいる第１入力と、前記アライナへ１．０の値を与えるように構成されている第２入力とを有し、前記第２マルチプレクサは、前記第１命令タイプの前記第１命令の実行中、前記第２入力を選択するように構成されている、前記第２マルチプレクサと、
を含む、請求項１７に記載の方法。
【請求項１９】
前記第１命令が、表面法線ベクトルおよび視線ベクトルを受信しそれにより画像のピクセルに対してシェーディング効果を適用するのに用いる輝度値を計算するように構成されている、１マイナス・ドット積命令であって、前記表面法線ベクトルおよび視線ベクトルの各々が、ｘ、ｙおよびｚの値を含み、前記１マイナス・ドット積命令の実行が、
前記ベクトル浮動小数点実行ユニットの第１、第２および第３処理レーンそれぞれにおいて、前記表面法線ベクトルおよび視線ベクトルの前記ｘ、ｙおよびｚの値それぞれを乗算することと、
前記ベクトル浮動小数点実行ユニットの前記第１、第２および第３処理レーンの各々をネゲートすることと、
前記ベクトル浮動小数点実行ユニットの第４処理レーンを強制的に１．０値にすることと、
前記輝度値を生成するべく、前記第１、第２、第３および第４処理レーンを合計することと、
を含む、請求項１２に記載の方法。
【請求項２０】
前記第１、第２および第３処理レーンをネゲートすることが、前記表面法線ベクトルおよび視線ベクトルのｘ、ｙおよびｚの値それぞれの乗算より前に、前記表面法線ベクトルおよび視線ベクトルのうちの１つのｘ、ｙおよびｚの値それぞれをネゲートすることを含む、請求項１９に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、全般的に、データ処理に関し、特に、プロセッサ・アーキテクチャ、ならびにそこに組み込まれた浮動小数点実行ユニットに関する。
【背景技術】
【０００２】
半導体技術がクロック高速化の点で事実上の限界に近づきつつあるなかで、技術者は、性能を向上させるべく、プロセッサ・アーキテクチャにおける並列性にますます目を向けるようになっている。チップ・レベルでは、多くの場合、複数のプロセッサ・コアが同一チップ上に配置され、別個のプロセッサ・チップとほぼ同様に機能するか、あるいは或る程度までは全く別個のコンピュータとして機能する。加えて、或る特定タイプの動作を取り扱うように特化された複数の実行ユニットを使用することによって、コアの内部にさえ並列性が用いられている。同様に、多くの事例においてパイプライン化が用いられており、それによって、機能するのに複数のクロック・サイクルを要し得る何らかの動作を複数の段に分割し、先行の動作が終了するより前に別の動作を開始させることができる。同様にマルチスレッド化も用いられ、複数の命令ストリームを並列で処理することが可能になり、任意のクロック・サイクルにおいてより全体的な作業が実施できるようになっている。
【０００３】
並列性が活用され続けている１つの分野として、例えば固定小数点または浮動小数点の実行ユニットなどといった、実行ユニットの分野がある。例えば、多くの浮動小数点実行ユニットは、深くパイプライン化されている。ただし、パイプライン化によって性能を向上させることができるとはいえ、パイプライン化が最も効率的となるのは、パイプラインによって処理される命令が互いに依存しない場合であり、例を挙げると、後の命令が先の命令の結果を使わない場合である。或る命令が別の命令の結果に基づいて動作する場合は常に、後の命令は、先の命令がパイプラインを出てその結果を計算し終わるまで、一般にパイプラインへ入ることができない。後の命令は先の命令に依存していると言われ、さらに後の命令が先の命令の結果を待機してストールされている現象は、パイプラインの中へ「バブル」すなわち生産的な動作が何も実施されないサイクルを生じさせていると言われる。
【０００４】
パイプライン型実行ユニットからより高度な利用を引き出し、不使用のバブルを排除するのに使用可能な１つの技術として、マルチスレッド化の導入がある。このような方法では、パイプラインにある不使用のスロットへ他のスレッドが命令を発行することが可能であり、これにより利用が促進され、故に総体的なスループットが向上する。性能を高める別のよく知られている技術は、データの「ベクトル化」とも称される、単一命令多重データ（ＳＩＭＤ：ｓｉｎｇｌｅ  ｉｎｓｔｒｕｃｔｉｏｎ  ｍｕｌｔｉｐｌｅ  ｄａｔａ）アーキテクチャを使用することである。このやり方では、動作が、同時に複数のデータ要素に対して、かつ同一のＳＩＭＤ命令に応えて、実施される。ベクトル実行ユニットには、一般に、ベクトルにある個々のデータ点を取り扱い、かつ全てのデータ点に対して同時に同様の動作を実施する複数の処理レーンが含まれる。例えば、クワッド（ｑｕａｄ）（４）ワード・ベクトルに依拠するアーキテクチャの場合、ベクトル実行ユニットには、各ベクトルにある４つのワードに対して同じ動作を実施する４つの処理レーンが含まれればよい。前述の諸技術を組み合わせることもでき、その結果生じるマルチスレッド式ベクトル実行ユニット・アーキテクチャでは、複数のスレッドが、ベクトル実行ユニットに対して、各データ点の「ベクトル」を同時に処理するようＳＩＭＤ命令を出すことができるようになる。加えて、複数の実行ユニットを使って、別個の動作を並列に実施できるようにするとよく、それによりさらに全体的な性能が高まる。
【０００５】
上記にもかかわらず、従来の処理ユニットの場合、多種多様な計算によって依然として性能上の問題が引き起こされている。例えば、いくつかのコンピュータ・グラフィックス・シェーディング効果は、処理ユニットにおける性能を制約しかねない１マイナス・ドット積ベクトル浮動小数点計算に依拠している。
【０００６】
上記のコンピュータ・グラフィックス・シェーディング効果のうちの２つである、フレネル効果ならびに「電子顕微鏡」効果は、オブジェクトの輪郭をハイライトすることによって画像の現実感を高めようとするものである。３Ｄ空間におけるピクセルの表面法線が見る人に対してより垂直に発展するにつれて、双方の効果には、ピクセルの輝度を高めるのに不可欠な計算が必要であることが分かってきた。一般に、上記の技術は双方とも、輝度を計算するために、表面法線ベクトルと視線ベクトルとの３ワード・ドット積を得て、その結果を１．０から引く。この計算を以降、１マイナス・ドット積ベクトル浮動小数点計算と称する。
【発明の概要】
【発明が解決しようとする課題】
【０００７】
従来、１マイナス・ドット積ベクトル浮動小数点計算は、各々が別個の浮動小数点命令によって始動される、２つの別個の計算を必要とする。第１の計算はドット積計算であり第２の計算は減算の計算であって、この場合、ドット積計算の結果が１．０から引かれる。
さらに、第１の計算の結果が第２の計算で使用されるということから、減算の計算を行うのに使われる第２命令は、ドット積の計算を行うのに使われる第１命令に依存している。
【０００８】
１マイナス・ドット積ベクトル浮動小数点計算は、一般に、フレーム内の各オブジェクトに関しピクセルごとに実施される。故に、オブジェクトの可視ピクセル各々に対し、２つの依存性の命令が実行されなければならず、このことが１マイナス・ドット積ベクトル浮動小数点計算をパフォーマンス・クリティカルにしている。
【０００９】
従って当該技術では、１マイナス・ドット積ベクトル浮動小数点計算を行っている処理ユニットの性能を向上させる方法が必要とされている。
【課題を解決するための手段】
【００１０】
本発明は、１マイナス・ドット積の値を単一パスで計算することのできる浮動小数点実行ユニットを提供することによって、従来技術に関連する上述およびその他の問題に対処する。そのようにして、他の場合であれば計算を行うのに必要とされると考えれる依存性が排除され、その結果、上述のような計算が大幅に高速化して行われるようになる。
【００１１】
本発明の一態様に従って、ベクトル浮動小数点実行ユニットの単一パスで１マイナス・ドット積の値を計算するために、命令セットの第１命令タイプの第１命令を浮動小数点実行ユニットを用いて実行する回路装置および方法が提供される。
【００１２】
本発明を特徴付ける、上述およびその他の利点および機能は、本明細書に添付された請求項に記載され、本明細書のさらなる一部を形成している。一方、本発明、ならびにその使用を通じて達成される利点および目的をよりよく理解するために、本発明の例示的な実施形態が示されている図面およびそれに伴う記載事項を参照されたい。
【図面の簡単な説明】
【００１３】
【図１】本発明の実施形態に従った、データ処理に有用な例示的なコンピュータを含んだ例示的な自動式計算機構のブロック図である。
【図２】図１のコンピュータに実装された例示的なＮＯＣのブロック図である。
【図３】図２のＮＯＣのノードの例示的な実装をより詳細に示すブロック図である。
【図４】図２のＮＯＣのＩＰブロックの例示的な実装を示すブロック図である。
【図５】本発明に従ったベクトル浮動小数点実行ユニットを組み込んだ、図２のＮＯＣのＩＰブロックに実装可能な処理ユニットのブロック図である。
【図６】ピクセル・シェーディング効果の適用に関連して１マイナス・ドット積計算が計算されるとよい表面法線ベクトルと視線ベクトルとを示す、例示的なシーンのブロック図である。
【発明を実施するための形態】
【００１４】
本発明に従った実施形態は、１マイナス・ドット積の値を単一パスで計算することのできる浮動小数点実行ユニットを利用する。上述のように１マイナス・ドット積の値は、例えばフレネル効果または電子顕微鏡効果の適用など、画像処理における多くのピクセル・シェーディング効果の使用に際して、頻繁に計算される。１マイナス・ドット積計算は、一般に、表面法線ベクトル（すなわち、そのピクセルにおける、オブジェクトの表面に対して垂直なベクトル）と視線ベクトル（すなわち、「目」からそのピクセルへのベクトル）とのドット積に基づいた、個々のピクセルの輝度値を計算するのに用いられる。
【００１５】
このような計算をフレーム内の各オブジェクトのピクセルごとに行う必要があるということから、かかる計算はパフォーマンス・クリティカルとなり得、従ってそのような計算の性能に何らかの改善があれば、全体的な性能に相当の効果が与えられる可能性がある。ところが、従来の浮動小数点実行ユニットでは、１マイナス・ドット積の値は、少なくとも２つの浮動小数点命令を用いて計算されなければならず、さらに第２の浮動小数点命令は、必然的に第１の浮動小数点命令に依存する。このことは、画像処理アプリケーションにおいて、オブジェクトの可視ピクセル各々に関して２つの依存性の命令を実行しなければならないことを意味する。例えば、フレネル効果の場合、ピクセルの輝度は、以下のように計算することができる。
輝度＝１．０−ｄｏｔ（法線，視線）
【００１６】
例えばＰＯＷＥＲ（ＩＢＭ社の登録商標）アーキテクチャのＶＭＸ１２８命令をサポートするものなど従来の浮動小数点実行ユニットでは、上記の計算は、以下の表１に示すように行われ得る。
【００１７】
【表１】
2010040041.tif 000003
【００１８】
上記のコード・リストから分かるように、減算の命令は、ドット積の結果に依存している。一般的なベクトル浮動小数点命令ユニットのアーキテクチャでは、ドット積は完了するのに６サイクルを要する場合があり、減算は４サイクルを要する場合がある。故に、上記のコードを実行すると、減算の動作は６番目のサイクルまでずっとストールされると考えられ、結局、９番目のサイクルまでは、結果が得られないままということになる。
【００１９】
対照的に、本発明に従った実施形態を用いると、本明細書ではｖｄｏｔｓｕｂｆｐと称する新しい命令をサポートし、ベクトル浮動小数点実行パイプラインを介して単一パスでその命令を実行する、ベクトル浮動小数点実行ユニットが提供される。例示の実施形態では、４ワード・ベクトル浮動小数点実行ユニットが、２つの入力ベクトルの３方向ドット積の結果をネゲートし、１．０を第４の不使用レーンへ強制的にもたらし、さらに４つのワード・レーン全部の加算を行うことによってｖｄｏｔｓｕｂｆｐ命令を実行し、結果的に、２つではなく１つのみのパイプライン・パスで、１．０−ｄｏｔ３（Ｎ，Ｖ）をもたらす。加えて一般に、消費されるレジスタが１つ減る。結果として得られるコード・リストを下記の表ＩＩに示す。
【００２０】
【表２】
2010040041.tif 000004
【００２１】
当然のことながら、前述の計算を実現するのに、様々な命令のタイプおよび形式がサポートされるとよく、本発明は、多種多様な浮動小数点アーキテクチャおよび命令セットに関連して利用されるとよい。加えて、当然のことながら、上述のような命令が単一パスで実現されるように浮動小数点実行ユニットがかかる命令を実行し得るやり方は、別の実施形態においては異なっていてもよい。従って本発明は、本明細書に記載される特定の命令形式および浮動小数点実行ユニット・アーキテクチャに限定されるものではない。
ハードウェアおよびソフトウェア環境
【００２２】
ここで図面を見ると、別々の図にわたって同様の符号は同様の部分を表している。図１には、本発明の実施形態に従ったデータ処理に有用な例示的なコンピュータ１０を含んだ自動式計算機構が示される。図１のコンピュータ１０は、少なくとも１つのプロセッサ１２すなわち「ＣＰＵ」のほか、高速メモリ・バス１６およびバス・アダプタ１８を介してプロセッサ１２ならびにコンピュータ１０の他のコンポーネントに接続されている、ランダム・アクセス・メモリ（「ＲＡＭ」：ｒａｎｄｏｍ  ａｃｃｅｓｓｓ  ｍｅｍｏｒｙ）１４を含む。
【００２３】
ＲＡＭ１４に保存されているのは、アプリケーション２０、すなわち、例えば文書処理、スプレッドシート、データベース動作、ビデオ・ゲーム、株式市場シミュレーション、原子量子プロセス・シミュレーションなどの特定のデータ処理タスクあるいはその他のユーザ・レベル・アプリケーションを実行する、ユーザ・レベルのコンピュータ・プログラム命令のモジュールである。同様にＲＡＭ１４に保存されているのが、オペレーティング・システム２２である。本発明の実施形態に関連して有用なオペレーティング・システムには、ＵＮＩＸ（商標）、Ｌｉｎｕｘ（商標）、Ｍｉｃｒｏｓｏｆｔ  ＷｉｎｄｏｗｓＸＰ（商標）、ＡＩＸ（商標）、ＩＢＭのｉ５／ＯＳ（商標）、および当業者には思い当たるであろうその他のオペレーティング・システムが含まれる。図１の例ではオペレーティング・システム２２およびアプリケーション２０をＲＡＭ１４の中に示しているが、そのようなソフトウェアの多くのコンポーネントは、例えばディスク・ドライブ２４上など、不揮発性メモリにも一般に保存される。
【００２４】
以下でより明らかになるように、本発明に従った実施形態は、ネットワーク・オン・チップ（ＮＯＣ：Ｎｅｔｗｏｒｋ  Ｏｎ  Ｃｈｉｐ）の集積回路デバイス、またはチップの中で実現されるとよく、故にコンピュータ１０は、２つの例示的なＮＯＣ：ビデオ・アダプタ２６およびコプロセッサ２８を含んで示されている。ＮＯＣビデオ・アダプタ２６は、場合によってはグラフィックス・アダプタと称されることもあり、表示画面またはコンピュータ・モニタなどの表示デバイス３０へのグラフィック出力に向けて特別に設計されたＩ／Ｏアダプタの一例である。ＮＯＣビデオ・アダプタ２６は、高速ビデオ・バス３２、バス・アダプタ１８、ならびに同様に高速バスであるフロント・サイド・バス３４を介して、プロセッサ１２に接続されている。ＮＯＣコプロセッサ２８は、バス・アダプタ１８、ならびにフロント・サイド・バス３４および同様に高速バスであるフロント・サイド・バス３６を介して、プロセッサ１２に接続されている。図１のＮＯＣコプロセッサは、プロセッサ１２の要請を受けて、例えば特定のデータ処理タスクを迅速化するように最適化されてもよい。
【００２５】
図１の例示的なＮＯＣビデオ・アダプタ２６およびＮＯＣコプロセッサ２８は各々、ＮＯＣを含み、該ＮＯＣには、統合プロセッサ（「ＩＰ」：ｉｎｔｅｇｒａｔｅｄ  ｐｒｏｃｅｓｓｏｒ）ブロック、ルータ、メモリ通信コントローラ、およびネットワーク・インターフェース・コントローラが含まれており、これらの詳細は以下で図２乃至３に関連してさらに詳しく述べる。ＮＯＣビデオ・アダプタおよびＮＯＣコプロセッサは各々、並列処理を使用し共有メモリへの高速ランダム・アクセスを必要とするプログラムに向けて、最適化されている。一方、本開示から利益を得る当業者には当然のことながら、本発明は、ＮＯＣデバイスおよびＮＯＣデバイス・アーキテクチャ以外のデバイスおよびデバイス・アーキテクチャにおいて実現されてもよい。従って本発明は、ＮＯＣデバイス内での実現に限定されるものではない。
【００２６】
図１のコンピュータ１０は、拡張バス４０およびバス・アダプタ１８を介してプロセッサ１２およびコンピュータ１０のその他のコンポーネントに接続されている、ディスク・ドライブ・アダプタ３８を含む。ディスク・ドライブ・アダプタ３８は、不揮発性のデータ・ストレージをディスク・ドライブ２４の形でコンピュータ１０に対して接続するものであり、例えば統合ドライブ・エレクトロニクス（「ＩＤＥ」：Ｉｎｔｅｇｒａｔｅｄ  Ｄｒｉｖｅ  Ｅｌｅｃｔｒｏｎｉｃｓ）アダプタ、小型コンピュータ・システム・インターフェース（「ＳＣＳＩ」：Ｓｍａｌｌ  Ｃｏｍｐｕｔｅｒ  Ｓｙｓｔｅｍ  Ｉｎｔｅｒｆａｃｅ）アダプタ、ならびに当業者には思い当たるようなその他のアダプタを用いて、実現されるとよい。同様に不揮発性のコンピュータ・メモリも、当業者であれば思い当たるように、光ディスク・ドライブ、電子的に消去可能プログラム可能読み取り専用メモリ（いわゆる「ＥＥＰＲＯＭ」：ｅｌｅｃｔｒｉｃａｌｌｙ  ｅｒａｓａｂｌｅ  ｐｒｏｇｒａｍｍａｂｌｅ  ｒｅａｄ−ｏｎｌｙ  ｍｅｍｏｒｙ、あるいは「フラッシュ」メモリ）、ＲＡＭドライブなどとして実現されるとよい。
【００２７】
コンピュータ１０は、さらに１つ以上の入力／出力（「Ｉ／Ｏ」：ｉｎｐｕｔ／ｏｕｔｐｕｔ）アダプタ４２を含み、本アダプタは、例えばソフトウェア・ドライブおよびコンピュータ・ハードウェアを介してユーザ指向の入力／出力を実現し、コンピュータ表示画面などの表示デバイスへの出力のほかキーボードおよびマウスなどのユーザ入力デバイス４４からのユーザ入力を制御する。加えて、コンピュータ１０には、他のコンピュータ４８とのデータ通信、およびデータ通信ネットワーク５０とのデータ通信のための、通信アダプタ４６が含まれる。このようなデータ通信は、ＲＳ−２３２接続を介して、ユニバーサル・シリアル・バス（「ＵＳＢ」：Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ）などの外部バスを介して、ＩＰデータ通信ネットワークなどのデータ通信ネットワークを介して、さらに当業者には思い当たるようなその他の方法で、逐次的に実行されるとよい。通信アダプタによってハードウェア・レベルのデータ通信が実現され、該データ通信を介して、１つのコンピュータが別のコンピュータへ、直接的にまたはデータ通信ネットワークを通じて、データ通信を送信する。コンピュータ１０での使用に適した通信アダプタの例としては、有線ダイヤルアップ通信用のモデム、有線データ通信ネットワーク通信用のＥｔｈｅｒｎｅｔ（登録商標）（ＩＥＥＥ８０２．３）アダプタ、および、無線データ通信ネットワーク通信用の８０２．１１アダプタが挙げられる。
【００２８】
さらなる説明のために、本発明の実施形態に従った一例であるＮＯＣ１０２の機能ブロック図を図２に示す。図２のＮＯＣは、「チップ」１００上、すなわち集積回路上に実装されている。ＮＯＣ１０２は、統合プロセッサ（「ＩＰ」）ブロック１０４、ルータ１１０、メモリ通信コントローラ１０６、およびネットワーク・インターフェース・コントローラ１０８を含み、これらは相互に接続するノードにひとまとめにされている。各ＩＰブロック１０４は、メモリ通信コントローラ１０６およびネットワーク・インターフェース・コントローラ１０８によって、ルータ１１０に適応させられる。各メモリ通信コントローラは、ＩＰブロックとメモリの間の通信を制御し、各ネットワーク・インターフェース・コントローラ１０８は、ルータ１１０を介したＩＰブロック相互間の通信を制御する。
【００２９】
ＮＯＣ１０２において、各ＩＰブロックは、ＮＯＣ内におけるデータ処理の構成ブロックとして使用される、同期式または非同期式論理設計の再利用可能なユニットを表す。用語「ＩＰブロック」は、時として「知的所有権ブロック（ｉｎｔｅｌｌｅｃｔｕａｌ  ｐｒｏｐｅｒｔｙ  ｂｌｏｃｋ）」として展開させられ、実際上、ＩＰブロックを、半導体回路の他のユーザまたは設計者に対するライセンスの対象となる、或る関係者の所有する設計すなわち或る関係者の知的所有権として示す。ただし、本発明の範囲においては、ＩＰブロックが特定の所有権の影響下におかれる必要はなく、故に、この用語は、本明細書では常に「統合プロセッサ・ブロック」として展開させられる。本明細書にて定められるＩＰブロックは、知的所有権の対象であってもなくてもよい、論理、セル、またはチップのレイアウト設計の再利用可能なユニットである。ＩＰブロックは、ＡＳＩＣチップ設計またはＦＰＧＡ論理設計として形成することができる論理コアである。
【００３０】
例えによってＩＰブロックを説明する１つの方法は、ＮＯＣ設計にとってのＩＰブロックは、コンピュータ・プログラミングにとってのライブラリ、あるいはプリント回路基板設計にとっての個別の集積回路コンポーネントに当たる、というものである。本発明の実施形態に従ったＮＯＣでは、ＩＰブロックが、一般的なゲート・ネットリストとして、専用または汎用の完全なマイクロプロセッサとして、または当業者には思い当たるであろうその他のやり方で、実装されてもよい。ネットリストは、高レベルのプログラム・アプリケーション用のアセンブリ・コード・リストに類似した、ＩＰブロックの論理機能のブール代数表現（ゲート、標準セル）である。同様にＮＯＣは、例えば、Ｖｅｒｉｌｏｇ（登録商標）またはＶＨＤＬなどのハードウェア記述言語で記述された合成可能な形式で実装されてもよい。ネットリストの実装および合成可能な実装に加え、ＮＯＣはさらに、下位レベルの、物理記述で与えられてもよい。ＳＥＲＤＥＳ、ＰＬＬ、ＤＡＣ、ＡＤＣなどといったアナログのＩＰブロック要素は、ＧＤＳＩＩなどのトランジスタレイアウト形式で配布されるとよい。ＩＰブロックのデジタル要素も、時として同様にレイアウト形式で提供される。さらに、当然のことながら、ＩＰブロックのほか本発明に従って実現されるその他の論理回路は、例えば論理定義プログラム・コードなどのコンピュータ・データ・ファイルの形式で配布されてもよく、該コンピュータ・データ・ファイルは、上述の論理を実装している回路装置の機能またはレイアウトあるいはその両方を、様々なレベルの詳細で定義する。従って、本発明は、完全に機能する集積回路デバイスおよびかかるデバイスを利用したデータ処理システムに実装された回路装置に照らしてこれまで記載されておりさらに以下に記載されるが、本開示の利益を得る当業者には当然のことながら、本発明に従った回路装置は、様々な形式のプログラム製品として配布することができる。さらに本発明は、上記の配布を実際に実行するのに使われる特定タイプのコンピュータ可読媒体または信号担持媒体とは無関係に、等しく適用される。コンピュータ可読媒体または信号担持媒体の例としては、（特に挙げると）揮発性および不揮発性のメモリ・デバイス、フレキシブル・ディスク、ハードディスク・ドライブ、ＣＤ−ＲＯＭ、およびＤＶＤなどの物理的な追記型媒体、ならびにデジタルおよびアナログの通信リンクといった伝送型媒体などがあるが、これらに限定されない。
【００３１】
図２の例におけるＩＰブロック１０４の各々は、メモリ通信コントローラ１０６によってルータ１１０に適応させられる。各メモリ通信コントローラは、ＩＰブロックとメモリの間にデータ通信を提供するようになっている同期式および非同期式論理回路の集合である。上述のような、ＩＰブロックとメモリの間の通信としては、メモリ・ロード命令およびメモリ・ストア命令がある。メモリ通信コントローラ１０６は、図３に関連して以下でさらに詳細に説明される。各ＩＰブロック１０４は、さらに、ネットワーク・インターフェース・コントローラ１０８によってもルータ１１０に適応させられており、このネットワーク・インターフェース・コントローラは、ルータ１１０を介したＩＰブロック１０４間の通信を制御する。ＩＰブロック間の通信の例としては、データと、該データをＩＰブロックの間で並列アプリケーションおよびパイプライン型アプリケーションにて処理するための命令と、を搬送するメッセージが挙げられる。ネットワーク・インターフェース・コントローラ１０８も同様に、図３に関連して以下でさらに詳細に説明される。
【００３２】
各ルータ１１０、およびその間の対応するリンク１１８によって、ＮＯＣのネットワーク動作が実現される。リンク１１８は、全てのルータを接続している物理的な並列型の有線バス上に実装されたパケット構造とすればよい。言い換えれば、各リンクは、ヘッダ情報およびペイロード・データの全てを含んだデータ交換パケット全体を同時に収容するのに十分な幅を持つ有線バス上に実装されるとよい。パケット構造が、例えば８バイトのヘッダと５６バイトのペイロード・データというように、６４バイトを含む場合、各リンクに内在する有線バスは、６４バイト幅の５１２の線である。加えて、各々のリンクが双方向性であるとよく、そうすると、リンク・パケット構造に６４バイトが含まれる場合、有線バスは、ネットワークにおいて、各ルータとそのルータに隣接するルータ各々との間に実質的に１０２４の線を含むことになる。このような実装では、メッセージが１つより多くのパケットを含む可能性があるが、各パケットは、有線バスの幅に正確に収まると考えられる。別の方法では、パケットの一部分を収容するのに足りる幅しかない有線バス上にリンクが実装されてもよく、それによりパケットは、複数のビートに分割されると考えられる。例えば、リンクが幅１６バイト、すなわち１２８の線として実装された場合、６４バイトのパケットであれば、４つのビートに分割され得ると考えられる。当然のことながら、別の実装では、実際的な物理的制限のほか所望される性能特性に基づいて、別のバス幅が用いられればよい。ルータと、有線バスの各セクションとの間の接続をポートと称することにすると、各ルータには５つのポートが備わっている。ネットワークにおけるデータ伝送の４方向各々に１つずつ向けたポートと、そのルータをメモリ通信コントローラおよびネットワーク・インターフェース・コントローラを介して特定のＩＰブロックに適応させるための第５のポートである。
【００３３】
各メモリ通信コントローラ１０６は、ＩＰブロックとメモリの間の通信を制御する。メモリには、オフチップのメインＲＡＭ１１２と、メモリ通信コントローラ１０６によってＩＰブロックに直接接続されているオンチップ・メモリ１１４と、ＩＰブロックとして使用可能になっているオンチップ・メモリ１１６と、オンチップ・キャッシュとを含めることができる。ＮＯＣ１０２では、例えば、オンチップ・メモリ１１４、１１６のいずれかが、オンチップ・キャッシュ・メモリとして実装されてもよい。メモリのこうした形式は全て、物理アドレスあるいは仮想アドレスである、同一のアドレス空間に配置させることができ、このことは、ＩＰブロックに直接アタッチされたメモリにも、当てはまる。従って、メモリへアドレスされたメッセージは、そのようなメモリはネットワーク上のどこかにある任意のＩＰブロックから直接アドレスすることができるので、ＩＰブロックに対して完全に双方向とすることができる。或るＩＰブロック上にあるオンチップ・メモリ１１６へは、そのＩＰブロックからあるいはＮＯＣ内の他の任意のＩＰブロックから、アドレスすることができる。メモリ通信コントローラに直接アタッチされたオンチップ・メモリ１１４へは、そのメモリ通信コントローラがネットワークに適応させたＩＰブロックによってアドレスすることが可能であり、さらに、ＮＯＣ内のどこかにある他の任意のＩＰブロックからアドレすることも同様に可能である。
【００３４】
ＮＯＣ１０２には、本発明の実施形態に従ったＮＯＣの選択的な２つのメモリ・アーキテクチャを示す、２つのメモリ管理ユニット（「ＭＭＵ」：ｍｅｍｏｒｙ  ｍａｎａｇｅｍｅｎｔ  ｕｎｉｔ）１２０、１２２が含まれる。ＭＭＵ１２０は、或るＩＰブロック内に実装され、それにより、該ＩＰブロック内のプロセッサは仮想メモリにて動作可能になり、一方、ＮＯＣの残りの全アーキテクチャは物理メモリ・アドレス空間にて動作可能になる。ＭＭＵ１２２は、オフチップで実装され、データ通信ポート１２４を介してＮＯＣに接続されている。データ通信ポート１２４は、ＮＯＣとＭＭＵの間で信号を伝えるのに必要なピンおよびその他の相互接続を備えるほか、メッセージ・パケットをＮＯＣパケット形式から外部ＭＭＵ１２２に必要なバス形式へと変換するのに十分なインテリジェンスを備える。ＭＭＵが外部に位置するということは、オフチップ・メモリの物理アドレスへの変換は全てオフチップＭＭＵ１２２によって取り扱われ、ＮＯＣの全ＩＰブロックの全プロセッサが仮想メモリ・アドレス空間にて動作可能になることを意味する。
【００３５】
ＭＭＵ１２０、１２２を用いて示される２つのメモリ・アーキテクチャに加え、本発明の実施形態で利用可能なＮＯＣにて有用な第３のメモリ・アーキテクチャが、データ通信ポート１２６によって示される。データ通信ポート１２６は、ＮＯＣ１０２のＩＰブロック１０４とオフチップ・メモリ１１２との間に直接接続を提供する。このアーキテクチャは、処理経路においてＭＭＵを用いずに、ＮＯＣの全ＩＰブロックによる物理アドレス空間の利用をもたらす。アドレス空間を双方向で共有するに当たり、ＮＯＣの全ＩＰブロックは、ロード・メッセージおよびストア・メッセージなど、メモリへアドレスされたメッセージによって、アドレス空間にあるメモリへアクセス可能であり、該メモリへアドレスされたメッセージは、データ通信ポート１２６に直接接続されたＩＰブロックを介して導かれる。データ通信ポート１２６は、ＮＯＣとオフチップ・メモリ１１２との間で信号を伝えるのに必要とされるピンおよびその他の相互接続を備えるほか、メッセージ・パケットをＮＯＣパケット形式からオフチップ・メモリ１１２に必要なバス形式へと変換するのに十分なインテリジェンスを備える。
【００３６】
図２の例では、ＩＰブロックのうちの１つが、ホスト・インターフェース・プロセッサ１２８に指定される。ホスト・インターフェース・プロセッサ１２８は、ＮＯＣと、そのＮＯＣが組み込まれるとよいホスト・コンピュータ１０との間にインターフェースを提供し、さらに、ＮＯＣ上の他のＩＰブロックに対してデータ処理サービスを提供する。該データ処理サービスとしては、例えば、ホスト・コンピュータからのデータ処理要求を受信し、ＮＯＣのＩＰブロック間へ発送することなどが挙げられる。図１に関連して上述したように、例えばＮＯＣが、ＮＯＣビデオ・アダプタ２６またはＮＯＣコプロセッサ２８を、より大きなコンピュータ１０上で実現してもよい。図２の例では、ホスト・インターフェース・プロセッサ１２８が、データ通信ポート１３０を介して、より大きなホスト・コンピュータ１０に接続されている。データ通信ポート１３０は、ＮＯＣとホスト・コンピュータの間で信号を伝えるのに必要なピンおよびその他の相互接続を備えるほか、メッセージ・パケットをＮＯＣパケット形式からホスト・コンピュータ１０に必要なバス形式へと変換するのに十分なインテリジェンスを備える。図１のコンピュータにおけるＮＯＣコプロセッサの例では、上述のようなポートが、ＮＯＣコプロセッサ２８のリンク構造と、ＮＯＣコプロセッサ２８およびバス・アダプタ１８の間にあるフロント・サイド・バス３６に必要なプロトコルとの間に、データ通信形式の変換をもたらすと考えられる。
【００３７】
次に図３では、ＮＯＣ１０２のＩＰブロック１０４、メモリ通信コントローラ１０６、ネットワーク・インターフェース・コントローラ１０８、およびルータ１１０の内部に実装されるコンポーネント群を１３２にまとめて示しより詳細に説明している、機能ブロック図を示す。ＩＰブロック１０４は、プロセッサ１３４およびＩ／Ｏ機能１３６を含む。本例では、コンピュータ・メモリは、ＩＰブロック１０４にあるランダム・アクセス・メモリ（「ＲＡＭ」）１３８のセグメントによって表されている。図２に関連して上述したように、メモリは、物理アドレス空間のセグメントを占めることができ、各ＩＰブロック上のメモリのコンテンツは、ＮＯＣ内のあらゆるＩＰブロックからアドレス可能かつアクセス可能である。各ＩＰブロックのプロセッサ１３４、Ｉ／Ｏ機能１３６、およびＲＡＭ１３８によって、ＩＰブロックは、実用上、一般にプログラム可能なマイクロコンピュータとして実現される。ただし先に説明したように、本発明の範囲では一般に、ＩＰブロックは、ＮＯＣ内におけるデータ処理の構成ブロックとして使用される、同期式または非同期式論の再利用可能なユニットを表す。従って、一般にプログラム可能なマイクロコンピュータとしてＩＰブロックを実現することは、説明の目的上有用なよくある実施形態ではあるが、本発明を限定するものではない。
【００３８】
図３のＮＯＣ１０２では、各メモリ通信コントローラ１０６が、複数のメモリ通信実行エンジン１４０を含む。各メモリ通信実行エンジン１４０は、ネットワークとＩＰブロック１０４の間の双方向性メモリ通信命令フロー１４１、１４２、１４４を含め、ＩＰブロック１０４からのメモリ通信命令を実行することができる。メモリ通信コントローラによって実行されるメモリ通信命令は、特定のメモリ通信コントローラによってルータに適応させられているＩＰブロックから発生するだけではなく、ＮＯＣ１０２内のどこかにある任意のＩＰブロック１０４からも発生し得る。言い換えれば、ＮＯＣ内のあらゆるＩＰブロックが、メモリ通信命令を生成し、そのメモリ通信命令の実行のために、別のＩＰブロックに関連した別のメモリ通信コントローラへＮＯＣのルータを介してそのメモリ通信命令を伝送することができる。このようなメモリ通信命令には、例えば、変換索引バッファ制御命令、キャッシュ制御命令、バリア命令、およびメモリ・ロードおよびメモリ・ストア命令を含めることができる。
【００３９】
各メモリ通信実行エンジン１４０は、完結したメモリ通信命令を別個に、および他のメモリ通信実行エンジンと並列して、実行することができる。メモリ通信実行エンジンは、メモリ通信命令の同時スループット向けに最適化されたスケーラブルなメモリ・トランザクション・プロセッサを実現する。メモリ通信コントローラ１０６は、その全てが複数のメモリ通信命令の同時実行のために並行して動作する複数のメモリ通信実行エンジン１４０を、サポートする。新たなメモリ通信命令は、メモリ通信コントローラ１０６によってメモリ通信実行エンジン１４０へ割り当てられる。メモリ通信実行エンジン１４０は、複数の応答イベントを同時に受け付けることができる。本例では、メモリ通信実行エンジン１４０は全て同じものである。従って、メモリ通信コントローラ１０６によって同時に取り扱うことのできるメモリ通信命令の数の増減は、メモリ通信実行エンジン１４０の数を増減させることによって実現される。
【００４０】
図３のＮＯＣ１０２では、各ネットワーク・インターフェース・コントローラ１０８は、ルータを介したＩＰブロック１０４間での伝送に向けて通信命令をコマンド形式からネットワーク・パケット形式へ変換することができる。通信命令は、ＩＰブロック１０４によってあるいはメモリ通信コントローラ１０６によってコマンド形式で構築され、ネットワーク・インターフェース・コントローラ１０８へコマンド形式で提供されればよい。コマンド形式は、ＩＰブロック１０４およびメモリ通信コントローラ１０６のアーキテクチャ上のレジスタ・ファイルに適合するネイティブ形式とすればよい。ネットワーク・パケット形式は、一般に、ネットワークのルータ１１０を介した伝送に必要な形式である。このようなメッセージ各々は、１つ以上のネットワーク・パケットから成る。ネットワーク・インターフェース・コントローラにてコマンド形式からパケット形式へ変換される、このような通信命令の例としては、ＩＰブロックとメモリの間のメモリ・ロード命令およびメモリ・ストア命令が挙げられる。このような通信命令には、さらに、データと、該データをＩＰブロックの間で並列アプリケーションおよびパイプライン型アプリケーションで処理するための命令と、を搬送するメッセージをＩＰブロック間に送信する、通信命令を含めてもよい。
【００４１】
図３のＮＯＣ１０２では、各ＩＰブロックが、そのＩＰブロックのメモリ通信コントローラを介してメモリに対し、さらに自身のネットワーク・インターフェース・コントローラを介してネットワークに対し、メモリ・アドレス・ベースの通信をやり取りすることができるようになっている。メモリ・アドレス・ベースの通信は、ＩＰブロックのメモリ通信コントローラのメモリ通信実行エンジンによって実行されるロード命令またはストア命令などのメモリ・アクセス命令である。このようなメモリ・アドレス・ベースの通信は、一般に、ＩＰブロック内で発生してコマンド形式で構築され、実行に向けてメモリ通信コントローラへと渡される。
【００４２】
多くのメモリ・アドレス・ベースの通信が、メッセージ・トラフィックで実行される。その理由は、アクセスされる任意のメモリは、物理メモリ・アドレス空間のどこにでも、オンチップもしくはオフチップで、またはＮＯＣの任意のメモリ通信コントローラに直接アタッチされて、位置する可能性があり、あるいは究極的には、個々のメモリ・アドレス・ベースの通信がどのＩＰブロックによって発生させられたかにかかわらず、ＮＯＣの任意のＩＰブロックを介してアクセスされ得るためである。従って、ＮＯＣ１０２では、メッセージ・トラフィックで実行されるメモリ・アドレス・ベースの通信は全て、メモリ通信コントローラから、関連するネットワーク・インターフェース・コントローラへ渡され、コマンド形式からパケット形式へと変換されて、ネットワークを通じてメッセージで伝送される。パケット形式への変換に当たり、ネットワーク・インターフェース・コントローラは、さらに、メモリ・アドレス・ベースの通信によってアクセスされる対象の単数または複数のメモリ・アドレスに基づいて、パケットのネットワーク・アドレスを特定する。メモリ・アドレス・ベースのメッセージは、メモリ・アドレスを用いてアドレスされる。各メモリ・アドレスは、ネットワーク・インターフェース・コントローラによってネットワーク・アドレス、すなわち一般には物理メモリ・アドレスの一部の領域をつかさどるメモリ通信コントローラのネットワーク位置へ、マッピングされる。メモリ通信コントローラ１０６のネットワーク位置は、必然的に、そのメモリ通信コントローラの関連するルータ１１０、ネットワーク・インターフェース・コントローラ１０８、およびＩＰブロック１０４のネットワーク位置でもある。各ネットワーク・インターフェース・コントローラ内にある命令変換論理１５０は、メモリ・アドレス・ベースの通信をＮＯＣのルータを介して伝送するために、メモリ・アドレスをネットワーク・アドレスへと変換することができる。
【００４３】
各ネットワーク・インターフェース・コントローラ１０８は、ネットワークのルータ１１０からメッセージ・トラフィックを受信し次第、メモリ命令がないか各パケットを調べる。メモリ命令を含んでいる各パケットは、受信しているネットワーク・インターフェース・コントローラと関連するメモリ通信コントローラ１０６へと与えられる。このメモリ通信コントローラは、メモリ命令を実行してから、パケットの残りのペイロードをさらなる処理に向けてＩＰブロックへ送信する。このようにして、メッセージから得られる、特定のメモリ・コンテンツに依存した命令の実行にＩＰブロックが着手するより前に、メモリ・コンテンツは、そのＩＰブロックによるデータ処理をサポートするように必ず整えられている。
【００４４】
図３のＮＯＣ１０２では、各ＩＰブロック１０４が、ＩＰブロック相互間のネットワークへアドレスされた通信１４６を、メモリ通信コントローラ１０６を経由させずに、ＩＰブロックのネットワーク・インターフェース・コントローラ１０８を介して直接ネットワークへ送信することが可能である。ネットワークへアドレスされた通信は、ネットワーク・アドレスによって別のＩＰブロックへ導かれるメッセージである。このようなメッセージは、当業者には思い当たるように、パイプライン型アプリケーションにおける作業データ、およびＳＩＭＤアプリケーションにおけるＩＰブロック間の単一プログラム処理用の複数データなどを伝送する。このようなメッセージは、ＮＯＣのルータを介して導かれるところのネットワーク・アドレスを分かっている発信元ＩＰブロックによって最初からネットワークへアドレスされているという点で、メモリ・アドレス・ベースの通信とは異なる。上述のようなネットワークへアドレスされている通信は、ＩＰブロックによって、Ｉ／Ｏ機能１３６を介して直接該ＩＰブロックのネットワーク・インターフェース・コントローラへとコマンド形式で与えられ、その後ネットワーク・インターフェース・コントローラによってパケット形式へ変換されて、ＮＯＣのルータを介して別のＩＰブロックへと伝送される。このような、ネットワークへアドレスされている通信１４６は双方向性であり、個々のアプリケーションでの使用に応じて、ＮＯＣのＩＰブロック各々に向かって進む可能性もあり、ＩＰブロック各々から進む可能性もある。一方、各ネットワーク・インターフェース・コントローラは、上述のような通信を関連するルータに対して送信することも受信することもでき、さらに各ネットワーク・インターフェース・コントローラは、上述のような通信を、関連するメモリ通信コントローラ１０６を経由させずに、関連するＩＰブロックに対して直接送信することも受信することもできる。
【００４５】
図３の例における各ネットワーク・インターフェース・コントローラ１０８は、さらに、ネットワーク・パケットをタイプによって特徴付ける仮想チャネルをネットワーク上に実装することができる。各ネットワーク・インターフェース・コントローラ１０８には、各通信命令をタイプによって分類し、その命令をＮＯＣ上での伝送に向けてパケット形式でルータ１１０へ渡すより前に、命令タイプをネットワーク・パケット形式のフィールドに記録する、仮想チャネル実装論理１４８が含まれる。通信命令のタイプの例としては、ＩＰブロック相互間のネットワーク・アドレス・ベースのメッセージ、要求メッセージ、要求メッセージへの応答、キャッシュに向けられた無効化メッセージ、メモリ・ロードおよびストア・メッセージ、およびメモリ・ロード・メッセージへの応答などが挙げられる。
【００４６】
図３の例における各ルータ１１０は、ルーティング論理１５２、仮想チャネル制御論理１５４、および仮想チャネル・バッファ１５６を含む。ルーティング論理は、一般に、ルータ１１０、リンク１１８、およびルータ間のバス線によって形成されたネットワークにおいてデータ通信用のデータ通信プロトコル・スタックを実行する、同期式論理または非同期式論理のネットワークとして実装される。ルーティング論理１５２は、当業者である読者にはオフチップ・ネットワークでのルーティング・テーブルが連想されるであろう機能を含むが、ルーティング・テーブルは、少なくとも一部の実施形態においては、ＮＯＣで使用するには遅すぎる上に煩雑であるとみなされている。同期式論理および非同期式論理のネットワークとして実装されるルーティング論理は、単一クロック・サイクルと同程度の速さでルーティング決定を行うように構成することができる。本例におけるルーティング論理は、ルータにて受信された各パケットを転送するポートを選択することによって、パケットをルーティングする。各パケットには、そのパケットがルーティングされる先のネットワーク・アドレスが含まれる。
【００４７】
上記のメモリ・アドレス・ベースの通信の説明では、各メモリ・アドレスは、ネットワーク・インターフェース・コントローラによって、ネットワーク・アドレス、すなわちメモリ通信コントローラのネットワーク位置へマッピングされるものとして記載した。メモリ通信コントローラ１０６のネットワーク位置は必然的に、そのメモリ通信コントローラの関連するルータ１１０、ネットワーク・インターフェース・コントローラ１０８およびＩＰブロック１０４のネットワーク位置でもある。故に、ＩＰブロック相互間の、すなわちネットワーク・アドレス・ベースの通信でも、アプリケーション・レベルのデータ処理の場合、一般にネットワーク・アドレスを、ＮＯＣのルータ、リンク、およびバス線によって形成されたネットワークにおけるＩＰブロックの位置としてとらえる。図２は、上述のようなネットワークの１つの構成が、行と列とのメッシュであることを示しており、そこでは、各ネットワーク・アドレスを、例えば、関連するルータ、ＩＰブロック、メモリ通信コントローラ、およびネットワーク・インターフェース・コントローラのセット各々に関する一意の識別子として、あるいはかかるセットのメッシュにおけるｘ，ｙ座標として、実現することができる。
【００４８】
図３のＮＯＣ１０２では、各ルータ１１０が２つ以上の仮想通信チャネルを実装し、仮想通信チャネルの各々は通信タイプによって特徴付けられる。通信命令タイプ、ひいては仮想チャネルのタイプには、前述したタイプが含まれる：ＩＰブロック相互間のネットワーク・アドレス・ベースのメッセージ、要求メッセージ、要求メッセージへの応答、キャッシュに向けられた無効化メッセージ；メモリ・ロードおよびメモリ・ストア・メッセージ；および、メモリ・ロード・メッセージへの応答など。仮想チャネルのサポートに当たり、図３の例における各ルータ１１０には、さらに仮想チャネル制御論理１５４および仮想チャネル・バッファ１５６が含まれる。仮想チャネル制御論理１５４は、受信されたパケット各々に関しそのパケットに割り当てられた通信タイプを調査し、その通信タイプ向けの発信用仮想チャネル・バッファへ各パケットを配置して、ＮＯＣ上の隣接するルータへポートを介して伝送する。
【００４９】
仮想チャネル・バッファ１５６各々は、有限のストレージ空間を備えている。短期間に多くのパケットが受信されると、仮想チャネル・バッファが埋まってしまう可能性があり、その結果そのバッファにはそれ以上パケットを入れることができなくなる。別のプロトコルでは、バッファが満杯の仮想チャネルに到達しつつあるパケットは、廃棄されると考えられる。一方、本例における各仮想チャネル・バッファ１５６は、バス線の制御信号を用い、仮想チャネル制御論理を介して、仮想チャネルにおける伝送を一時停止するようにすなわち特定の通信タイプのパケットの伝送を一時停止するように、周辺のルータに対して通知することができる。１つの仮想チャネルがそのようにして一時停止される場合にも、他の全ての仮想チャネルは影響を受けることなく全容量で動作を継続することができる。制御信号は、各ルータを通って各ルータの関連するネットワーク・インターフェース・コントローラ１０８までずっと配線されている。各ネットワーク・インターフェース・コントローラは、そのような信号を受信し次第、自身の関連するメモリ通信コントローラ１０６からの、あるいは自身の関連するＩＰブロック１０４からの、一時停止されている仮想チャネルに対する通信命令の受け付けを拒否するように構成されている。このようにして、仮想チャネルの一時停止は、仮想チャネルを実装するハードウェア全てに、発信元のＩＰブロックまで遡って影響を及ぼす。
【００５０】
仮想チャネルにおいてパケット伝送を一時停止することの１つの効果は、絶対にパケットが廃棄されないということである。例えばインターネット・プロトコルなど一部の信頼性のないプロトコルではパケットが廃棄されるであろう状況にルータが遭遇する場合にも、図３の例のルータであれば、各自の仮想チャネル・バッファ１５６および各自の仮想チャネル制御論理１５４によって、バッファ空間が再び利用可能になるまで仮想チャネルにおける全てのパケット伝送を一時停止すればよく、それによりパケットを廃棄する必要は全くなくなる。従って、図３のＮＯＣは、非常に信頼性の高いネットワーク通信プロトコルを、ハードウェアの極めて薄い層で実現することができる。
【００５１】
図３の例のＮＯＣは、さらに、オンチップおよびオフチップ双方のメモリ・キャッシュの間でキャッシュ・コヒーレンシを保つように構成されているとよい。各ＮＯＣは、基となる同一のメモリ・アドレス空間に対して各々動作する複数のキャッシュをサポートすることができる。例えば、キャッシュは、ＩＰブロックによって、メモリ通信コントローラによって、またはＮＯＣの外部にあるキャッシュ・コントローラによって、制御されればよい。さらに、図２のオンチップ・メモリ１１４、１１６のいずれかが、オンチップ・キャッシュとして実装されていてもよく、さらに本発明の範囲内で、キャッシュ・メモリをオフチップで実装することも可能である。
【００５２】
図３に示すルータ１１０は各々、５つのポートを含む。１５８Ａ乃至Ｄの４つのポートは、バス線１１８を介して他のルータに接続されている。第５のポート１６０は、各ルータを、ネットワーク・インターフェース・コントローラ１０８およびメモリ通信コントローラ１０６を介して、関連するＩＰブロック１０４へ接続している。図２および３の説明から分かるように、ＮＯＣ１０２のルータ１１０およびリンク１１８は、各ルータ内の垂直方向および水平方向のポート群を接続している垂直方向および水平方向のリンクを用いてメッシュ・ネットワークを形成している。図３の説明では、例として、ポート１５８Ａ、１５８Ｃおよび１６０を垂直方向のポートと称し、ポート１５８Ｂおよび１５８Ｄを水平方向のポートと称する。
【００５３】
次に図４にて、本発明に従ったＩＰブロック１０４の１つの例示的な実装を別のやり方で示す。本ＩＰブロックは、命令ユニット（ＩＵ：ｉｎｓｔｒｕｃｔｉｏｎ  ｕｎｉｔ）１６２と、実行ユニット（ＸＵ：ｅｘｅｃｕｔｉｏｎ  ｕｎｉｔ）１６４と、予備実行ユニット（ＡＸＵ：ａｕｘｉｌｉａｒｙ  ｅｘｅｃｕｔｉｏｎ  ｕｎｉｔ）１６６とに分割された処理要素として実装されている。例示の実装では、ＩＵ１６２には、Ｌ１命令キャッシュ（ｉＣＡＣＨＥ）１７０から命令を受信する複数の命令バッファ１６８が含まれる。各命令バッファ１６８は、複数の、例えば４つの、対称型マルチスレッド式（ＳＭＴ：ｓｙｍｍｅｔｒｉｃ  ｍｕｌｔｉｔｈｒｅａｄｅｄ）ハードウェア・スレッドのうちの１つの専用となっている。実効アドレスから実アドレスへの変換ユニット（ｉＥＲＡＴ）１７２がｉＣＡＣＨＥ１７０に接続されて、複数のスレッド取り出しシーケンサ１７４からの命令取り出し要求を、低位メモリから命令検索するための実アドレスへと変換するのに使用される。スレッド取り出しシーケンサ１７４は各々、特定のハードウェア・スレッドの専用となっており、関連するスレッドによって実行されるべき命令が、確実にｉＣＡＣＨＥに読み込まれて適切な実行ユニットへ発送されるように、用いられる。同様に図４に示すように、命令バッファ１６８へ読み込まれる命令が分岐予測論理１７６によって監視されるとよく、それにより、各スレッド取り出しシーケンサ１７４に対し、実行中のスレッドの分岐に起因する命令キャッシュ・ミスを最小限にするヒントが与えられる。
【００５４】
ＩＵ１６２には、さらに、各ハードウェア・スレッドの専用であって、依存性を解消し、命令バッファ１６８からＸＵ１６４への命令の発行を制御するように構成されている、依存性／発行論理ブロック１７８が含まれる。加えて、例示の実施形態では、別個の予備依存性／発行論理１８０がＡＸＵ１６６内に設けられており、従ってＸＵ１６４およびＡＸＵ１６６に対して別々のスレッドによって別個の命令を同時に発行することが可能になる。別の実施形態では、予備依存性／発行論理１８０がＩＵ１６２に配置されているか、あるいはその全体が省かれていてもよく、そのため依存性／発行論理ブロック１７８が、ＡＸＵ１６６に対する命令を発行する。
【００５５】
ＸＵ１６４は、固定小数点論理１８４、分岐論理１８６、およびロード／ストア論理１８８に接続されている一連の汎用レジスタ（ＧＰＲ：ｇｅｎｅｒａｌ  ｐｕｒｐｏｓｅ  ｒｅｇｉｓｔｅｒ）１８２を含む、固定小数点実行ユニットとして実装される。ロード／ストア論理１８８は、ｄＥＲＡＴ論理１９２によってもたらされる実効アドレスから実アドレスへの変換を伴ったＬ１データ・キャッシュ（ｄＣＡＣＨＥ）１９０に接続されている。ＸＵ１６４は、例えば３２ｂまたは６４ｂのＰｏｗｅｒＰＣ（ＩＢＭ社の登録商標）命令セットの全てまたは一部など、実用上あらゆる命令セットを実行するように構成されているとよい。
【００５６】
ＡＸＵ１６６は、予備の実行ユニットとして動作し、１つ以上の実行ブロック１９４に加え、専用の依存性／発行論理１８０を含んでいる。ＡＸＵ１６６は、実行ブロックをいくつ含んでもよく、さらに実用上、例えば浮動小数点ユニットなど任意のタイプの実行ユニットを実装してもよいし、あるいは暗号化／復号化ユニット、コプロセッサ、ベクトル処理ユニット、グラフィックス処理ユニット、ＸＭＬ処理ユニットなどといった１つ以上の特化された実行ユニットを実装してもよい。例示の実施形態では、ＡＸＵ１６６がＸＵ１６４に対する高速補助インターフェースを含み、例えば、ＡＸＵアーキテクチャによる状態とＸＵアーキテクチャによる状態との間の直接的な移行がサポートされる。
【００５７】
ＩＰブロック１０４との通信は、図２に関連して上述したやり方で、ＮＯＣ１０２に接続されたインターフェース・コントローラ１０８を介して管理されればよい。メッセージ・ベースの通信に加え、例えばＬ２キャッシュ・メモリへのアクセスなどに向けたアドレス・ベースの通信を提供することもできる。例えば、ＩＰブロック間でのノード相互間通信に対応するために、ＩＰブロック１０４各々が、専用のイン・ボックスまたはアウト・ボックスあるいはその両方を含んでもよい。
【００５８】
本発明の実施形態は、図１乃至４に関連して上述したハードウェアおよびソフトウェア環境内で実現されるとよい。一方、本開示の利益を得る当業者には当然のことながら、本発明は、数多くの異なる環境で実現されてもよく、さらに、本発明の精神および範囲から逸脱することなく、前述のハードウェアおよびソフトウェア環境に対してその他の変更を施すこともできる。従って本発明は、本明細書にて開示される特定のハードウェアおよびソフトウェア環境に限定されない。
単一パスでの１マイナス・ドット積計算をサポートする浮動小数点実行ユニット
【００５９】
ここで図５を見ると、この図には、本発明に従った単一パスでの１マイナス・ドット積計算をサポートする浮動小数点実行ユニット２０２を組み込んだ、例示的な処理ユニット２００が示されている。処理ユニット２００は、例えば、図１乃至４のＩＰブロック１０４などのＩＰブロックにおけるプロセッサ・コアとして実装されてもよい。別の方法では、処理ユニット２００が、例えば単一コアまたはマルチコアのマイクロプロセッサあるいはマイクロコントローラを含む、命令を発行および実行するその他のプロセッサ・アーキテクチャで実装されてもよい。
【００６０】
浮動小数点実行ユニット２０２は、発行論理２０４から浮動小数点命令を受信する、ベクトル浮動小数点実行ユニットとして実装されている。発行論理２０４は、２０６で図示された複数（Ｎ）のスレッドからの命令を発行することのできる発行選択論理２０８を含む。発行選択論理２０８は、別個のスレッドによる命令の発行をスケジュールするように動作し、さらに一般に、当該技術で一般的に理解されているやり方で命令間の依存性を管理する論理を含む。複数の浮動小数点実行ユニット２０２がサポートされている場合、発行選択論理２０８はさらに、該複数の実行ユニットに対してサイクルごとに複数の命令を発行することも可能である。ただし、実施形態によっては、１つの実行ユニットのみがサポートされる場合もあり、さらに実施形態によっては、命令のマルチスレッド式発行がサポートされていない場合もある。
【００６１】
浮動小数点実行ユニット２０２は、発行論理２０４が実行ユニットに対して発行した命令を処理するのに加えて、多段式実行パイプライン２１２に接続されたレジスタ・ファイル２１０を備える。多段式実行パイプラインは、レジスタ・ファイル２１０に保存されたデータを発行論理２０４によって発行された命令に基づいて処理し、目的のデータをレジスタ・ファイルへ再保存することができる。浮動小数点実行ユニット２０２は、例えば、一般的な浮動小数点ユニット、あるいはグラフィックス処理ユニット、暗号化／復号化ユニット、コプロセッサ、ＸＭＬ処理ユニットなどの特化された実行ユニットなど、多数の異なるタイプの実行ユニットとして実現することもできる。
【００６２】
例えば、図５に示す実装では、多段式実行パイプライン２１２が、例えば画像処理などに使用され得るベクトル浮動小数点ユニットとして実現されており、本ベクトル浮動小数点ユニットは、該実行ユニットに対して発行論理２０４によって発行された、単一命令多重データ（ＳＩＭＤ）命令を処理する。レジスタ・ファイル２１０は、各々が複数（例えば４）のワードを含んだ複数（例えば１２８）のベクトル・レジスタ２１４を含む。複数のレジスタ・ファイル入力および出力（図示せず）が設けられて、選択されたレジスタの中へ浮動小数点値を書き込み、選択されたレジスタのコンテンツを処理するよう多段式実行パイプライン２１２へと出力する。浮動小数点ベクトルを処理に向けてパイプラインへと提供するために、複数のオペランド入力２１６が、レジスタ・ファイル２１０と多段式実行パイプライン２１２の間にもたらされる。多段式実行パイプライン２１２には、レジスタ・ファイル２１０に保存されたベクトルを発行論理２０４によって発行された命令に基づいて処理し、目的のデータをレジスタ・ファイル２１０のベクトル・レジスタへ再保存することのできる、複数（例えば４）の処理レーン、すなわちサブユニット２１８が含まれる。
【００６３】
浮動小数点実行ユニット２０２の構成が画像処理アプリケーションにて使用可能な浮動小数点ユニットであるということから、各処理レーン２１８は浮動小数点命令を処理するように構成されている。選択的に他の多種多様な浮動小数点アーキテクチャも使用可能であるが、浮動小数点実行ユニット２０２には、Ａ、ＢおよびＣで表された３つのベクトル・オペランドに基づいて動作可能なパイプライン型浮動小数点実行アーキテクチャが備えられている。ベクトル演算に関しては、３２ビット・ワードを４つ含むベクトルがサポートされており、各ベクトル内のワードはＸ、Ｙ、ＺおよびＷで表されている。従って、処理レーン２１８各々が、各ベクトルから１つずつ、３つのオペランド・ワードを受信する。故に、例えば各ベクトルのＸワードを処理する処理レーン２１８の場合、その処理レーンに与えられるオペランドは、Ａｘ、ＢｘおよびＣｘと表される。
【００６４】
各処理レーン２１８は、１つ以上の他の処理レーンと並列で動作するように構成されている。例えば処理レーン各々が、クロス積またはドット積演算を実施するべく、一対のオペランドを乗算するとよい。オペランドの別個の対を、ベクトル・ユニットの別個の処理レーンにて乗算することによって、ベクトル演算をより高速かつより効率的に実施することができる。
【００６５】
さらに各処理レーン２１８は、より性能を向上させるようにパイプライン化されている。それに応じて、各処理レーン２１８には、オペランドに対し１つ以上の演算を実施する、複数のパイプライン段が含まれる。例えば各々の処理レーンが、第１段として、ＡオペランドおよびＣオペランドを乗算する乗算器２２０を含む場合がある。本発明の一実施形態では、図５に示すように、オペランドの乗算がパイプラインの第１段にて実施されるとよい。
【００６６】
各処理レーン２１８には、さらに、上記積の算出に並列して、オペランドＢを乗算器２２０によって算出された積にアラインするためのアライナ２２０が含まれるとよい。図５ではアラインメントを同じパイプライン段に示しているが、当業者には当然のことながら、別の実施形態では乗算とアラインメントとが別個のパイプライン段にて実施されてもよい。
【００６７】
各処理レーン２１８は、さらに、２つ以上のオペランドを加算するための加算器２２４をも含む。一実施形態（図５に示す）では、各加算器２２４が、乗算器２２０によって算出された積（和およびキャリーとして出力される）を受信して、その積を、アライナ２２２から出力されたアライン済みオペランドと加算するように構成されている。各加算器２２４は、さらに、先行ゼロ予測回路を含む。従って各処理レーン２１８は、積和命令を実行するように構成され得る。当業者には当然のことながら、ベクトル演算では、積和命令が頻繁に実行される。従って、いくつかの積和命令を並列レーンで実行することによって、ベクトル処理の効率を大幅に向上させることができる。
【００６８】
各ベクトル処理レーン２１８には、さらに、正規化段を含めることができる。それに応じて、各処理レーンに正規化器２２６が設けられるとよい。正規化器２２６は、算出された値を都合のよい指数形式で表現するように構成することができる。例えば、正規化器２２６が、演算の結果として値０．０００００６３を受け取る場合がある。正規化器２２６は、この値を、より好適な指数形式、例えば６．３×１０−６へと変換するとよい。丸め段（図示せず）をさらに設けて、算出された値を所望する小数点の数値に丸めるとよい。
【００６９】
１マイナス・ドット積計算（同様に、他のドット積計算などその他の計算）のために、浮動小数点実行ユニット２０２には、さらに、４方向アライナ２２８、４：２コンプレッサ２３０、および加算器２３２が含まれ、これらが共同して、４つの処理レーン２１８の出力を合計し、スカラ結果値を生成する。加算器２３２の出力は、目的のデータ２３４としてもたらされ、これがレジスタ・ファイル２１０にある保存先レジスタへ書き込まれる。
【００７０】
当業者には当然のことながら、本発明の実施形態は、上記で説明され図５に示された特定のパイプライン段、コンポーネント、およびコンポーネントの構成に限定されるものではない。例えば、一部の実施形態では、アライナ２２２が、オペランドＢを、または乗算器２２０によって算出された積を、あるいは双方を、アラインするように構成されていてもよい。さらに、本発明の実施形態は、図５に示された特定のコンポーネントに制約されるものではない。本発明に従った各処理レーン２１８には、浮動小数点実行ユニットによってサポートされている他の各種の命令を処理するのに必要とされ得る、例示のコンポーネントならびに追加のコンポーネントの任意の組み合わせを含めることができる。追加のコンポーネントとしては、先行ゼロ予測器、除算器などが挙げられるがこれらに限定されない。
【００７１】
１マイナス・ドット積計算の処理を円滑化するように、２３６に図示されている追加の論理を各処理レーン２１８の頭に実装する。多段式実行パイプライン２１２を通じて単一パスで１マイナス・ドット積計算を実現するべく、最初の３つの処理レーン２１８にて、２つの３ワード入力ベクトル（Ａ，Ｃ）間の３方向ドット積を計算し、このドット積をネゲートし、さらに第４の処理レーンに１．０値を強制的にもたらして、４つのワード・レーン全ての加算を実施する。結果的に、パイプライン・パス２つの代わりに１つのみで、１．０−ｄｏｔ３（Ａ，Ｃ）がもたらされる。
【００７２】
論理２３６には、最初の３つの処理レーン２１８の各々において、Ａ入力ベクトル（Ａｘ，Ａｙ，Ａｚ）のｘ、ｙおよびｚワードの符号ビットを選択的に逆に、すなわち反転させる、ＸＯＲゲート２３８を含む。各ＸＯＲゲートは、アサートされるとｘ、ｙおよびｚワードの符号ビットを逆にするＦ制御信号によって制御される。別の方法では、Ｃ入力ベクトルが反転されてもよく、またはこの反転を、ＡおよびＣ入力ベクトルの乗算の後であるいは乗算に関連して、総合的に実施することもできる。別の実施形態では、−１．０の値を第４処理レーンへ強制的にもたらして、最終的な結果（４つの処理レーン全ての合計後）が１マイナス・ドット積計算を生成するように反転させてもよい。本開示の利益を得る当業者には、ドット積を反転させるその他のやり方も明らかとなろう。
【００７３】
１．０値を第４処理レーンへ強制的にもたらすために、第４処理レーンに対するＢおよびＣベクトル入力に、２つのマルチプレクサ２４０、２４２をさしはさむ。マルチプレクサ２４０、２４２各々に対する第１入力は、ＢおよびＣ入力ベクトルの第４ワードがそのまま与えられる。マルチプレクサ２４０の第２入力は、１．０値が与えられ、それに対しマルチプレクサ２４２の第２入力は、０．０値が与えれらる。マルチプレクサ２４０、２４２の第２入力が選択されると、マルチプレクサ２４２が与えた０．０値により乗算器２２０は強制的に０．０値を出力させられる。この値がその後、マルチプレクサ２４０が加算器２２４へ与えた１．０値と合計されて、結果的に第４処理レーン２１８から１．０値の出力をもたらすことになる。
【００７４】
当然のことながら、他の実施形態では、１．０値を第４処理レーンへ強制的にもたらす他のやり方が使用されてもよい。例えば、マルチプレクサ２４２は、Ｃ入力ベクトルの経路ではなくＡ入力ベクトルの経路に配置されてもよい。別の方法では、パイプラインの後期の段にマルチプレクサを配置してパイプラインへ１．０値を挿入し、例えば第４処理レーンの任意の段の出力を上書きするなどしてもよい。本開示の利益を得る当業者には、１．０値を処理レーンへ強制的にもたらすその他のやり方も明らかとなろう。
【００７５】
例示の実施形態では、処理ユニット２００によってサポートされている命令セットの１つ以上の特定命令タイプが、１マイナス・ドット積計算を行うための専用となっている。専用の命令タイプに一致する、命令ストリームに入った命令の受信に応えて、処理ユニット２００の内部に配置されているデコード論理が、ＸＯＲゲート２３８およびマルチプレクサ２４０、２４２を制御して、１マイナス・ドット積計算を行うように多段実行パイプライン２１２を構成させる。ＰｏｗｅｒＶＭＸ１２８命令セットに対応した一実施形態では、ｖｄｏｔｓｕｂｆｐ命令タイプが、命令セットの中で定義されており、命令に対する入力オペランドＡ、Ｃとして特定される２つのベクトル・レジスタに関する１マイナス・ドット積計算を行うように構成されているとよい。ｖｄｏｔｓｕｂｆｐ命令の受信に応えて、処理ユニット２００のデコード論理は、ＸＯＲゲート２３８を制御して、最初の３つの処理レーン２１８から出力されたドット積の項（ＡｘＣｘ，ＡｙＣｙ，ＡｚＣｚ）を反転させる。さらにマルチプレクサ２４０、２４２を制御して第２入力を与えさせ、それにより１．０の値を第４処理レーンへ強制的にもたらすようにする。４つの処理レーンの出力（−ＡｘＣｘ，−ＡｙＣｙ，−ＡｚＣｚ，１．０）が合計されると、その結果生じる出力値（−ＡｘＣｘ＋−ＡｙＣｙ＋−ＡｚＣｚ＋１．０）は、（１．０−ｄｏｔ３（Ａ，Ｃ））に等しい。
【００７６】
前述の、１マイナス・ドット積の値を２つのパスで計算し９サイクルを必要とする従来の浮動小数点実行ユニットと対比すると、本発明に従った、ドット積を６サイクルで計算可能な処理ユニットは、１マイナス・ドット積計算も同様に６サイクルで実施することができ、それにより３つ少ないサイクルで結果をもたらす。加えて、１マイナス・ドット積計算に関するサポートを実装するに当たり、一般に、回路領域の追加はほとんど必要なく、タイミングに最小限の影響しか及ぼさない。
【００７７】
前述の１マイナス・ドット積命令は、多種多様なアプリケーションに関して１マイナス・ドット積計算を行うのに使用可能であるが、１つの特に好適なアプリケーションは、画像のオブジェクトに対するフレネル効果および電子顕微鏡効果などのピクセル・シェーディング効果の適用に関連するものである。図６は、例として、オブジェクト２５２を備えた例示的なシーン２５０を示している。視点２５４からシーン２５０を描画する場合、オブジェクト２５２上の可視ピクセル各々が描画される。このような描画に関連して、上述のピクセルに対しフレネル効果などのピクセル・シェーディング効果を適用することが望ましい場合があり、この場合、フレネル効果の輝度値は、描画されているピクセルに対する視線ベクトルと表面法線ベクトルとの、１マイナス・ドット積として計算される。従って、オブジェクト２５２上のピクセルＰに関して、表面法線ベクトルＮはオブジェクト２５２の表面から投影され、視線ベクトルは視点２５４からピクセルＰへと投影される。輝度値の計算は、故に、単一のｖｄｏｔｓｕｂｆｐ命令を、該命令に対する入力オペランドとして与えられる表面法線ベクトルおよび視線ベクトルのＮおよびＶと共に、用いればよい。
【００７８】
説明された実施形態に対しては、本発明の精神および範囲から逸脱することなく、多様な変更を施すことができる。例えば、強制的にもたらされる１．０値は、第４処理レーン以外の処理レーンに伝えられてもよく、さらに、各処理レーンの出力を反転させること、または１．０値を処理レーンへ強制的にもたらすこと、あるいはその両方を行うのに、他の論理が用いられてもよい。本開示の利益を得る当業者には、その他の変更も明らかとなろう。故に本発明は、以下に付される請求項にて記載されるものである。
【符号の説明】
【００７９】
１２  プロセッサ
１４  ＲＡＭ
１８  バス・アダプタ
２０  アプリケーション
２２  オペレーティング・システム
２４  データ・ストレージ
２６  ＮＯＣビデオ・アダプタ
２８  ＮＯＣコプロセッサ
３０  表示デバイス
３８  ディスク・ドライブ・アダプタ
４２  Ｉ／Ｏアダプタ
４４  ユーザ入力デバイス
４６  通信アダプタ
４８  他のコンピュータ
５０  ネットワーク
【図１】
2010040041.tif 000005
【図２】
2010040041.tif 000006
【図３】
2010040041.tif 000007
【図４】
2010040041.tif 000008
【図５】
2010040041.tif 000009
【図６】
2010040041.tif 000010