説明

1マイナス・ドット積の値を単一パスで計算する浮動小数点実行ユニット、ならびに関連する方法、装置、デバイス、およびプログラム

【課題】1マイナス・ドット積ベクトル浮動小数点計算を行う処理ユニットの性能を向上させる。
【解決手段】浮動小数点実行ユニットが、1マイナス・ドット積の値を単一パスで計算する。従って、他の方法では計算を行うのに要求されるであろう依存性が排除され、結果的にこのような計算の実施が大幅に高速化される。浮動小数点実行ユニットは、例えば、フレネル効果および電子顕微鏡効果などのピクセル・シェーディング・アルゴリズムを促進するのに使用されるとよい。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、全般的に、データ処理に関し、特に、プロセッサ・アーキテクチャ、ならびにそこに組み込まれた浮動小数点実行ユニットに関する。
【背景技術】
【0002】
半導体技術がクロック高速化の点で事実上の限界に近づきつつあるなかで、技術者は、性能を向上させるべく、プロセッサ・アーキテクチャにおける並列性にますます目を向けるようになっている。チップ・レベルでは、多くの場合、複数のプロセッサ・コアが同一チップ上に配置され、別個のプロセッサ・チップとほぼ同様に機能するか、あるいは或る程度までは全く別個のコンピュータとして機能する。加えて、或る特定タイプの動作を取り扱うように特化された複数の実行ユニットを使用することによって、コアの内部にさえ並列性が用いられている。同様に、多くの事例においてパイプライン化が用いられており、それによって、機能するのに複数のクロック・サイクルを要し得る何らかの動作を複数の段に分割し、先行の動作が終了するより前に別の動作を開始させることができる。同様にマルチスレッド化も用いられ、複数の命令ストリームを並列で処理することが可能になり、任意のクロック・サイクルにおいてより全体的な作業が実施できるようになっている。
【0003】
並列性が活用され続けている1つの分野として、例えば固定小数点または浮動小数点の実行ユニットなどといった、実行ユニットの分野がある。例えば、多くの浮動小数点実行ユニットは、深くパイプライン化されている。ただし、パイプライン化によって性能を向上させることができるとはいえ、パイプライン化が最も効率的となるのは、パイプラインによって処理される命令が互いに依存しない場合であり、例を挙げると、後の命令が先の命令の結果を使わない場合である。或る命令が別の命令の結果に基づいて動作する場合は常に、後の命令は、先の命令がパイプラインを出てその結果を計算し終わるまで、一般にパイプラインへ入ることができない。後の命令は先の命令に依存していると言われ、さらに後の命令が先の命令の結果を待機してストールされている現象は、パイプラインの中へ「バブル」すなわち生産的な動作が何も実施されないサイクルを生じさせていると言われる。
【0004】
パイプライン型実行ユニットからより高度な利用を引き出し、不使用のバブルを排除するのに使用可能な1つの技術として、マルチスレッド化の導入がある。このような方法では、パイプラインにある不使用のスロットへ他のスレッドが命令を発行することが可能であり、これにより利用が促進され、故に総体的なスループットが向上する。性能を高める別のよく知られている技術は、データの「ベクトル化」とも称される、単一命令多重データ(SIMD:single instruction multiple data)アーキテクチャを使用することである。このやり方では、動作が、同時に複数のデータ要素に対して、かつ同一のSIMD命令に応えて、実施される。ベクトル実行ユニットには、一般に、ベクトルにある個々のデータ点を取り扱い、かつ全てのデータ点に対して同時に同様の動作を実施する複数の処理レーンが含まれる。例えば、クワッド(quad)(4)ワード・ベクトルに依拠するアーキテクチャの場合、ベクトル実行ユニットには、各ベクトルにある4つのワードに対して同じ動作を実施する4つの処理レーンが含まれればよい。前述の諸技術を組み合わせることもでき、その結果生じるマルチスレッド式ベクトル実行ユニット・アーキテクチャでは、複数のスレッドが、ベクトル実行ユニットに対して、各データ点の「ベクトル」を同時に処理するようSIMD命令を出すことができるようになる。加えて、複数の実行ユニットを使って、別個の動作を並列に実施できるようにするとよく、それによりさらに全体的な性能が高まる。
【0005】
上記にもかかわらず、従来の処理ユニットの場合、多種多様な計算によって依然として性能上の問題が引き起こされている。例えば、いくつかのコンピュータ・グラフィックス・シェーディング効果は、処理ユニットにおける性能を制約しかねない1マイナス・ドット積ベクトル浮動小数点計算に依拠している。
【0006】
上記のコンピュータ・グラフィックス・シェーディング効果のうちの2つである、フレネル効果ならびに「電子顕微鏡」効果は、オブジェクトの輪郭をハイライトすることによって画像の現実感を高めようとするものである。3D空間におけるピクセルの表面法線が見る人に対してより垂直に発展するにつれて、双方の効果には、ピクセルの輝度を高めるのに不可欠な計算が必要であることが分かってきた。一般に、上記の技術は双方とも、輝度を計算するために、表面法線ベクトルと視線ベクトルとの3ワード・ドット積を得て、その結果を1.0から引く。この計算を以降、1マイナス・ドット積ベクトル浮動小数点計算と称する。
【発明の概要】
【発明が解決しようとする課題】
【0007】
従来、1マイナス・ドット積ベクトル浮動小数点計算は、各々が別個の浮動小数点命令によって始動される、2つの別個の計算を必要とする。第1の計算はドット積計算であり第2の計算は減算の計算であって、この場合、ドット積計算の結果が1.0から引かれる。
さらに、第1の計算の結果が第2の計算で使用されるということから、減算の計算を行うのに使われる第2命令は、ドット積の計算を行うのに使われる第1命令に依存している。
【0008】
1マイナス・ドット積ベクトル浮動小数点計算は、一般に、フレーム内の各オブジェクトに関しピクセルごとに実施される。故に、オブジェクトの可視ピクセル各々に対し、2つの依存性の命令が実行されなければならず、このことが1マイナス・ドット積ベクトル浮動小数点計算をパフォーマンス・クリティカルにしている。
【0009】
従って当該技術では、1マイナス・ドット積ベクトル浮動小数点計算を行っている処理ユニットの性能を向上させる方法が必要とされている。
【課題を解決するための手段】
【0010】
本発明は、1マイナス・ドット積の値を単一パスで計算することのできる浮動小数点実行ユニットを提供することによって、従来技術に関連する上述およびその他の問題に対処する。そのようにして、他の場合であれば計算を行うのに必要とされると考えれる依存性が排除され、その結果、上述のような計算が大幅に高速化して行われるようになる。
【0011】
本発明の一態様に従って、ベクトル浮動小数点実行ユニットの単一パスで1マイナス・ドット積の値を計算するために、命令セットの第1命令タイプの第1命令を浮動小数点実行ユニットを用いて実行する回路装置および方法が提供される。
【0012】
本発明を特徴付ける、上述およびその他の利点および機能は、本明細書に添付された請求項に記載され、本明細書のさらなる一部を形成している。一方、本発明、ならびにその使用を通じて達成される利点および目的をよりよく理解するために、本発明の例示的な実施形態が示されている図面およびそれに伴う記載事項を参照されたい。
【図面の簡単な説明】
【0013】
【図1】本発明の実施形態に従った、データ処理に有用な例示的なコンピュータを含んだ例示的な自動式計算機構のブロック図である。
【図2】図1のコンピュータに実装された例示的なNOCのブロック図である。
【図3】図2のNOCのノードの例示的な実装をより詳細に示すブロック図である。
【図4】図2のNOCのIPブロックの例示的な実装を示すブロック図である。
【図5】本発明に従ったベクトル浮動小数点実行ユニットを組み込んだ、図2のNOCのIPブロックに実装可能な処理ユニットのブロック図である。
【図6】ピクセル・シェーディング効果の適用に関連して1マイナス・ドット積計算が計算されるとよい表面法線ベクトルと視線ベクトルとを示す、例示的なシーンのブロック図である。
【発明を実施するための形態】
【0014】
本発明に従った実施形態は、1マイナス・ドット積の値を単一パスで計算することのできる浮動小数点実行ユニットを利用する。上述のように1マイナス・ドット積の値は、例えばフレネル効果または電子顕微鏡効果の適用など、画像処理における多くのピクセル・シェーディング効果の使用に際して、頻繁に計算される。1マイナス・ドット積計算は、一般に、表面法線ベクトル(すなわち、そのピクセルにおける、オブジェクトの表面に対して垂直なベクトル)と視線ベクトル(すなわち、「目」からそのピクセルへのベクトル)とのドット積に基づいた、個々のピクセルの輝度値を計算するのに用いられる。
【0015】
このような計算をフレーム内の各オブジェクトのピクセルごとに行う必要があるということから、かかる計算はパフォーマンス・クリティカルとなり得、従ってそのような計算の性能に何らかの改善があれば、全体的な性能に相当の効果が与えられる可能性がある。ところが、従来の浮動小数点実行ユニットでは、1マイナス・ドット積の値は、少なくとも2つの浮動小数点命令を用いて計算されなければならず、さらに第2の浮動小数点命令は、必然的に第1の浮動小数点命令に依存する。このことは、画像処理アプリケーションにおいて、オブジェクトの可視ピクセル各々に関して2つの依存性の命令を実行しなければならないことを意味する。例えば、フレネル効果の場合、ピクセルの輝度は、以下のように計算することができる。
輝度=1.0−dot(法線,視線)
【0016】
例えばPOWER(IBM社の登録商標)アーキテクチャのVMX128命令をサポートするものなど従来の浮動小数点実行ユニットでは、上記の計算は、以下の表1に示すように行われ得る。
【0017】
【表1】

【0018】
上記のコード・リストから分かるように、減算の命令は、ドット積の結果に依存している。一般的なベクトル浮動小数点命令ユニットのアーキテクチャでは、ドット積は完了するのに6サイクルを要する場合があり、減算は4サイクルを要する場合がある。故に、上記のコードを実行すると、減算の動作は6番目のサイクルまでずっとストールされると考えられ、結局、9番目のサイクルまでは、結果が得られないままということになる。
【0019】
対照的に、本発明に従った実施形態を用いると、本明細書ではvdotsubfpと称する新しい命令をサポートし、ベクトル浮動小数点実行パイプラインを介して単一パスでその命令を実行する、ベクトル浮動小数点実行ユニットが提供される。例示の実施形態では、4ワード・ベクトル浮動小数点実行ユニットが、2つの入力ベクトルの3方向ドット積の結果をネゲートし、1.0を第4の不使用レーンへ強制的にもたらし、さらに4つのワード・レーン全部の加算を行うことによってvdotsubfp命令を実行し、結果的に、2つではなく1つのみのパイプライン・パスで、1.0−dot3(N,V)をもたらす。加えて一般に、消費されるレジスタが1つ減る。結果として得られるコード・リストを下記の表IIに示す。
【0020】
【表2】

【0021】
当然のことながら、前述の計算を実現するのに、様々な命令のタイプおよび形式がサポートされるとよく、本発明は、多種多様な浮動小数点アーキテクチャおよび命令セットに関連して利用されるとよい。加えて、当然のことながら、上述のような命令が単一パスで実現されるように浮動小数点実行ユニットがかかる命令を実行し得るやり方は、別の実施形態においては異なっていてもよい。従って本発明は、本明細書に記載される特定の命令形式および浮動小数点実行ユニット・アーキテクチャに限定されるものではない。
ハードウェアおよびソフトウェア環境
【0022】
ここで図面を見ると、別々の図にわたって同様の符号は同様の部分を表している。図1には、本発明の実施形態に従ったデータ処理に有用な例示的なコンピュータ10を含んだ自動式計算機構が示される。図1のコンピュータ10は、少なくとも1つのプロセッサ12すなわち「CPU」のほか、高速メモリ・バス16およびバス・アダプタ18を介してプロセッサ12ならびにコンピュータ10の他のコンポーネントに接続されている、ランダム・アクセス・メモリ(「RAM」:random accesss memory)14を含む。
【0023】
RAM14に保存されているのは、アプリケーション20、すなわち、例えば文書処理、スプレッドシート、データベース動作、ビデオ・ゲーム、株式市場シミュレーション、原子量子プロセス・シミュレーションなどの特定のデータ処理タスクあるいはその他のユーザ・レベル・アプリケーションを実行する、ユーザ・レベルのコンピュータ・プログラム命令のモジュールである。同様にRAM14に保存されているのが、オペレーティング・システム22である。本発明の実施形態に関連して有用なオペレーティング・システムには、UNIX(商標)、Linux(商標)、Microsoft WindowsXP(商標)、AIX(商標)、IBMのi5/OS(商標)、および当業者には思い当たるであろうその他のオペレーティング・システムが含まれる。図1の例ではオペレーティング・システム22およびアプリケーション20をRAM14の中に示しているが、そのようなソフトウェアの多くのコンポーネントは、例えばディスク・ドライブ24上など、不揮発性メモリにも一般に保存される。
【0024】
以下でより明らかになるように、本発明に従った実施形態は、ネットワーク・オン・チップ(NOC:Network On Chip)の集積回路デバイス、またはチップの中で実現されるとよく、故にコンピュータ10は、2つの例示的なNOC:ビデオ・アダプタ26およびコプロセッサ28を含んで示されている。NOCビデオ・アダプタ26は、場合によってはグラフィックス・アダプタと称されることもあり、表示画面またはコンピュータ・モニタなどの表示デバイス30へのグラフィック出力に向けて特別に設計されたI/Oアダプタの一例である。NOCビデオ・アダプタ26は、高速ビデオ・バス32、バス・アダプタ18、ならびに同様に高速バスであるフロント・サイド・バス34を介して、プロセッサ12に接続されている。NOCコプロセッサ28は、バス・アダプタ18、ならびにフロント・サイド・バス34および同様に高速バスであるフロント・サイド・バス36を介して、プロセッサ12に接続されている。図1のNOCコプロセッサは、プロセッサ12の要請を受けて、例えば特定のデータ処理タスクを迅速化するように最適化されてもよい。
【0025】
図1の例示的なNOCビデオ・アダプタ26およびNOCコプロセッサ28は各々、NOCを含み、該NOCには、統合プロセッサ(「IP」:integrated processor)ブロック、ルータ、メモリ通信コントローラ、およびネットワーク・インターフェース・コントローラが含まれており、これらの詳細は以下で図2乃至3に関連してさらに詳しく述べる。NOCビデオ・アダプタおよびNOCコプロセッサは各々、並列処理を使用し共有メモリへの高速ランダム・アクセスを必要とするプログラムに向けて、最適化されている。一方、本開示から利益を得る当業者には当然のことながら、本発明は、NOCデバイスおよびNOCデバイス・アーキテクチャ以外のデバイスおよびデバイス・アーキテクチャにおいて実現されてもよい。従って本発明は、NOCデバイス内での実現に限定されるものではない。
【0026】
図1のコンピュータ10は、拡張バス40およびバス・アダプタ18を介してプロセッサ12およびコンピュータ10のその他のコンポーネントに接続されている、ディスク・ドライブ・アダプタ38を含む。ディスク・ドライブ・アダプタ38は、不揮発性のデータ・ストレージをディスク・ドライブ24の形でコンピュータ10に対して接続するものであり、例えば統合ドライブ・エレクトロニクス(「IDE」:Integrated Drive Electronics)アダプタ、小型コンピュータ・システム・インターフェース(「SCSI」:Small Computer System Interface)アダプタ、ならびに当業者には思い当たるようなその他のアダプタを用いて、実現されるとよい。同様に不揮発性のコンピュータ・メモリも、当業者であれば思い当たるように、光ディスク・ドライブ、電子的に消去可能プログラム可能読み取り専用メモリ(いわゆる「EEPROM」:electrically erasable programmable read−only memory、あるいは「フラッシュ」メモリ)、RAMドライブなどとして実現されるとよい。
【0027】
コンピュータ10は、さらに1つ以上の入力/出力(「I/O」:input/output)アダプタ42を含み、本アダプタは、例えばソフトウェア・ドライブおよびコンピュータ・ハードウェアを介してユーザ指向の入力/出力を実現し、コンピュータ表示画面などの表示デバイスへの出力のほかキーボードおよびマウスなどのユーザ入力デバイス44からのユーザ入力を制御する。加えて、コンピュータ10には、他のコンピュータ48とのデータ通信、およびデータ通信ネットワーク50とのデータ通信のための、通信アダプタ46が含まれる。このようなデータ通信は、RS−232接続を介して、ユニバーサル・シリアル・バス(「USB」:Universal Serial Bus)などの外部バスを介して、IPデータ通信ネットワークなどのデータ通信ネットワークを介して、さらに当業者には思い当たるようなその他の方法で、逐次的に実行されるとよい。通信アダプタによってハードウェア・レベルのデータ通信が実現され、該データ通信を介して、1つのコンピュータが別のコンピュータへ、直接的にまたはデータ通信ネットワークを通じて、データ通信を送信する。コンピュータ10での使用に適した通信アダプタの例としては、有線ダイヤルアップ通信用のモデム、有線データ通信ネットワーク通信用のEthernet(登録商標)(IEEE802.3)アダプタ、および、無線データ通信ネットワーク通信用の802.11アダプタが挙げられる。
【0028】
さらなる説明のために、本発明の実施形態に従った一例であるNOC102の機能ブロック図を図2に示す。図2のNOCは、「チップ」100上、すなわち集積回路上に実装されている。NOC102は、統合プロセッサ(「IP」)ブロック104、ルータ110、メモリ通信コントローラ106、およびネットワーク・インターフェース・コントローラ108を含み、これらは相互に接続するノードにひとまとめにされている。各IPブロック104は、メモリ通信コントローラ106およびネットワーク・インターフェース・コントローラ108によって、ルータ110に適応させられる。各メモリ通信コントローラは、IPブロックとメモリの間の通信を制御し、各ネットワーク・インターフェース・コントローラ108は、ルータ110を介したIPブロック相互間の通信を制御する。
【0029】
NOC102において、各IPブロックは、NOC内におけるデータ処理の構成ブロックとして使用される、同期式または非同期式論理設計の再利用可能なユニットを表す。用語「IPブロック」は、時として「知的所有権ブロック(intellectual property block)」として展開させられ、実際上、IPブロックを、半導体回路の他のユーザまたは設計者に対するライセンスの対象となる、或る関係者の所有する設計すなわち或る関係者の知的所有権として示す。ただし、本発明の範囲においては、IPブロックが特定の所有権の影響下におかれる必要はなく、故に、この用語は、本明細書では常に「統合プロセッサ・ブロック」として展開させられる。本明細書にて定められるIPブロックは、知的所有権の対象であってもなくてもよい、論理、セル、またはチップのレイアウト設計の再利用可能なユニットである。IPブロックは、ASICチップ設計またはFPGA論理設計として形成することができる論理コアである。
【0030】
例えによってIPブロックを説明する1つの方法は、NOC設計にとってのIPブロックは、コンピュータ・プログラミングにとってのライブラリ、あるいはプリント回路基板設計にとっての個別の集積回路コンポーネントに当たる、というものである。本発明の実施形態に従ったNOCでは、IPブロックが、一般的なゲート・ネットリストとして、専用または汎用の完全なマイクロプロセッサとして、または当業者には思い当たるであろうその他のやり方で、実装されてもよい。ネットリストは、高レベルのプログラム・アプリケーション用のアセンブリ・コード・リストに類似した、IPブロックの論理機能のブール代数表現(ゲート、標準セル)である。同様にNOCは、例えば、Verilog(登録商標)またはVHDLなどのハードウェア記述言語で記述された合成可能な形式で実装されてもよい。ネットリストの実装および合成可能な実装に加え、NOCはさらに、下位レベルの、物理記述で与えられてもよい。SERDES、PLL、DAC、ADCなどといったアナログのIPブロック要素は、GDSIIなどのトランジスタレイアウト形式で配布されるとよい。IPブロックのデジタル要素も、時として同様にレイアウト形式で提供される。さらに、当然のことながら、IPブロックのほか本発明に従って実現されるその他の論理回路は、例えば論理定義プログラム・コードなどのコンピュータ・データ・ファイルの形式で配布されてもよく、該コンピュータ・データ・ファイルは、上述の論理を実装している回路装置の機能またはレイアウトあるいはその両方を、様々なレベルの詳細で定義する。従って、本発明は、完全に機能する集積回路デバイスおよびかかるデバイスを利用したデータ処理システムに実装された回路装置に照らしてこれまで記載されておりさらに以下に記載されるが、本開示の利益を得る当業者には当然のことながら、本発明に従った回路装置は、様々な形式のプログラム製品として配布することができる。さらに本発明は、上記の配布を実際に実行するのに使われる特定タイプのコンピュータ可読媒体または信号担持媒体とは無関係に、等しく適用される。コンピュータ可読媒体または信号担持媒体の例としては、(特に挙げると)揮発性および不揮発性のメモリ・デバイス、フレキシブル・ディスク、ハードディスク・ドライブ、CD−ROM、およびDVDなどの物理的な追記型媒体、ならびにデジタルおよびアナログの通信リンクといった伝送型媒体などがあるが、これらに限定されない。
【0031】
図2の例におけるIPブロック104の各々は、メモリ通信コントローラ106によってルータ110に適応させられる。各メモリ通信コントローラは、IPブロックとメモリの間にデータ通信を提供するようになっている同期式および非同期式論理回路の集合である。上述のような、IPブロックとメモリの間の通信としては、メモリ・ロード命令およびメモリ・ストア命令がある。メモリ通信コントローラ106は、図3に関連して以下でさらに詳細に説明される。各IPブロック104は、さらに、ネットワーク・インターフェース・コントローラ108によってもルータ110に適応させられており、このネットワーク・インターフェース・コントローラは、ルータ110を介したIPブロック104間の通信を制御する。IPブロック間の通信の例としては、データと、該データをIPブロックの間で並列アプリケーションおよびパイプライン型アプリケーションにて処理するための命令と、を搬送するメッセージが挙げられる。ネットワーク・インターフェース・コントローラ108も同様に、図3に関連して以下でさらに詳細に説明される。
【0032】
各ルータ110、およびその間の対応するリンク118によって、NOCのネットワーク動作が実現される。リンク118は、全てのルータを接続している物理的な並列型の有線バス上に実装されたパケット構造とすればよい。言い換えれば、各リンクは、ヘッダ情報およびペイロード・データの全てを含んだデータ交換パケット全体を同時に収容するのに十分な幅を持つ有線バス上に実装されるとよい。パケット構造が、例えば8バイトのヘッダと56バイトのペイロード・データというように、64バイトを含む場合、各リンクに内在する有線バスは、64バイト幅の512の線である。加えて、各々のリンクが双方向性であるとよく、そうすると、リンク・パケット構造に64バイトが含まれる場合、有線バスは、ネットワークにおいて、各ルータとそのルータに隣接するルータ各々との間に実質的に1024の線を含むことになる。このような実装では、メッセージが1つより多くのパケットを含む可能性があるが、各パケットは、有線バスの幅に正確に収まると考えられる。別の方法では、パケットの一部分を収容するのに足りる幅しかない有線バス上にリンクが実装されてもよく、それによりパケットは、複数のビートに分割されると考えられる。例えば、リンクが幅16バイト、すなわち128の線として実装された場合、64バイトのパケットであれば、4つのビートに分割され得ると考えられる。当然のことながら、別の実装では、実際的な物理的制限のほか所望される性能特性に基づいて、別のバス幅が用いられればよい。ルータと、有線バスの各セクションとの間の接続をポートと称することにすると、各ルータには5つのポートが備わっている。ネットワークにおけるデータ伝送の4方向各々に1つずつ向けたポートと、そのルータをメモリ通信コントローラおよびネットワーク・インターフェース・コントローラを介して特定のIPブロックに適応させるための第5のポートである。
【0033】
各メモリ通信コントローラ106は、IPブロックとメモリの間の通信を制御する。メモリには、オフチップのメインRAM112と、メモリ通信コントローラ106によってIPブロックに直接接続されているオンチップ・メモリ114と、IPブロックとして使用可能になっているオンチップ・メモリ116と、オンチップ・キャッシュとを含めることができる。NOC102では、例えば、オンチップ・メモリ114、116のいずれかが、オンチップ・キャッシュ・メモリとして実装されてもよい。メモリのこうした形式は全て、物理アドレスあるいは仮想アドレスである、同一のアドレス空間に配置させることができ、このことは、IPブロックに直接アタッチされたメモリにも、当てはまる。従って、メモリへアドレスされたメッセージは、そのようなメモリはネットワーク上のどこかにある任意のIPブロックから直接アドレスすることができるので、IPブロックに対して完全に双方向とすることができる。或るIPブロック上にあるオンチップ・メモリ116へは、そのIPブロックからあるいはNOC内の他の任意のIPブロックから、アドレスすることができる。メモリ通信コントローラに直接アタッチされたオンチップ・メモリ114へは、そのメモリ通信コントローラがネットワークに適応させたIPブロックによってアドレスすることが可能であり、さらに、NOC内のどこかにある他の任意のIPブロックからアドレすることも同様に可能である。
【0034】
NOC102には、本発明の実施形態に従ったNOCの選択的な2つのメモリ・アーキテクチャを示す、2つのメモリ管理ユニット(「MMU」:memory management unit)120、122が含まれる。MMU120は、或るIPブロック内に実装され、それにより、該IPブロック内のプロセッサは仮想メモリにて動作可能になり、一方、NOCの残りの全アーキテクチャは物理メモリ・アドレス空間にて動作可能になる。MMU122は、オフチップで実装され、データ通信ポート124を介してNOCに接続されている。データ通信ポート124は、NOCとMMUの間で信号を伝えるのに必要なピンおよびその他の相互接続を備えるほか、メッセージ・パケットをNOCパケット形式から外部MMU122に必要なバス形式へと変換するのに十分なインテリジェンスを備える。MMUが外部に位置するということは、オフチップ・メモリの物理アドレスへの変換は全てオフチップMMU122によって取り扱われ、NOCの全IPブロックの全プロセッサが仮想メモリ・アドレス空間にて動作可能になることを意味する。
【0035】
MMU120、122を用いて示される2つのメモリ・アーキテクチャに加え、本発明の実施形態で利用可能なNOCにて有用な第3のメモリ・アーキテクチャが、データ通信ポート126によって示される。データ通信ポート126は、NOC102のIPブロック104とオフチップ・メモリ112との間に直接接続を提供する。このアーキテクチャは、処理経路においてMMUを用いずに、NOCの全IPブロックによる物理アドレス空間の利用をもたらす。アドレス空間を双方向で共有するに当たり、NOCの全IPブロックは、ロード・メッセージおよびストア・メッセージなど、メモリへアドレスされたメッセージによって、アドレス空間にあるメモリへアクセス可能であり、該メモリへアドレスされたメッセージは、データ通信ポート126に直接接続されたIPブロックを介して導かれる。データ通信ポート126は、NOCとオフチップ・メモリ112との間で信号を伝えるのに必要とされるピンおよびその他の相互接続を備えるほか、メッセージ・パケットをNOCパケット形式からオフチップ・メモリ112に必要なバス形式へと変換するのに十分なインテリジェンスを備える。
【0036】
図2の例では、IPブロックのうちの1つが、ホスト・インターフェース・プロセッサ128に指定される。ホスト・インターフェース・プロセッサ128は、NOCと、そのNOCが組み込まれるとよいホスト・コンピュータ10との間にインターフェースを提供し、さらに、NOC上の他のIPブロックに対してデータ処理サービスを提供する。該データ処理サービスとしては、例えば、ホスト・コンピュータからのデータ処理要求を受信し、NOCのIPブロック間へ発送することなどが挙げられる。図1に関連して上述したように、例えばNOCが、NOCビデオ・アダプタ26またはNOCコプロセッサ28を、より大きなコンピュータ10上で実現してもよい。図2の例では、ホスト・インターフェース・プロセッサ128が、データ通信ポート130を介して、より大きなホスト・コンピュータ10に接続されている。データ通信ポート130は、NOCとホスト・コンピュータの間で信号を伝えるのに必要なピンおよびその他の相互接続を備えるほか、メッセージ・パケットをNOCパケット形式からホスト・コンピュータ10に必要なバス形式へと変換するのに十分なインテリジェンスを備える。図1のコンピュータにおけるNOCコプロセッサの例では、上述のようなポートが、NOCコプロセッサ28のリンク構造と、NOCコプロセッサ28およびバス・アダプタ18の間にあるフロント・サイド・バス36に必要なプロトコルとの間に、データ通信形式の変換をもたらすと考えられる。
【0037】
次に図3では、NOC102のIPブロック104、メモリ通信コントローラ106、ネットワーク・インターフェース・コントローラ108、およびルータ110の内部に実装されるコンポーネント群を132にまとめて示しより詳細に説明している、機能ブロック図を示す。IPブロック104は、プロセッサ134およびI/O機能136を含む。本例では、コンピュータ・メモリは、IPブロック104にあるランダム・アクセス・メモリ(「RAM」)138のセグメントによって表されている。図2に関連して上述したように、メモリは、物理アドレス空間のセグメントを占めることができ、各IPブロック上のメモリのコンテンツは、NOC内のあらゆるIPブロックからアドレス可能かつアクセス可能である。各IPブロックのプロセッサ134、I/O機能136、およびRAM138によって、IPブロックは、実用上、一般にプログラム可能なマイクロコンピュータとして実現される。ただし先に説明したように、本発明の範囲では一般に、IPブロックは、NOC内におけるデータ処理の構成ブロックとして使用される、同期式または非同期式論の再利用可能なユニットを表す。従って、一般にプログラム可能なマイクロコンピュータとしてIPブロックを実現することは、説明の目的上有用なよくある実施形態ではあるが、本発明を限定するものではない。
【0038】
図3のNOC102では、各メモリ通信コントローラ106が、複数のメモリ通信実行エンジン140を含む。各メモリ通信実行エンジン140は、ネットワークとIPブロック104の間の双方向性メモリ通信命令フロー141、142、144を含め、IPブロック104からのメモリ通信命令を実行することができる。メモリ通信コントローラによって実行されるメモリ通信命令は、特定のメモリ通信コントローラによってルータに適応させられているIPブロックから発生するだけではなく、NOC102内のどこかにある任意のIPブロック104からも発生し得る。言い換えれば、NOC内のあらゆるIPブロックが、メモリ通信命令を生成し、そのメモリ通信命令の実行のために、別のIPブロックに関連した別のメモリ通信コントローラへNOCのルータを介してそのメモリ通信命令を伝送することができる。このようなメモリ通信命令には、例えば、変換索引バッファ制御命令、キャッシュ制御命令、バリア命令、およびメモリ・ロードおよびメモリ・ストア命令を含めることができる。
【0039】
各メモリ通信実行エンジン140は、完結したメモリ通信命令を別個に、および他のメモリ通信実行エンジンと並列して、実行することができる。メモリ通信実行エンジンは、メモリ通信命令の同時スループット向けに最適化されたスケーラブルなメモリ・トランザクション・プロセッサを実現する。メモリ通信コントローラ106は、その全てが複数のメモリ通信命令の同時実行のために並行して動作する複数のメモリ通信実行エンジン140を、サポートする。新たなメモリ通信命令は、メモリ通信コントローラ106によってメモリ通信実行エンジン140へ割り当てられる。メモリ通信実行エンジン140は、複数の応答イベントを同時に受け付けることができる。本例では、メモリ通信実行エンジン140は全て同じものである。従って、メモリ通信コントローラ106によって同時に取り扱うことのできるメモリ通信命令の数の増減は、メモリ通信実行エンジン140の数を増減させることによって実現される。
【0040】
図3のNOC102では、各ネットワーク・インターフェース・コントローラ108は、ルータを介したIPブロック104間での伝送に向けて通信命令をコマンド形式からネットワーク・パケット形式へ変換することができる。通信命令は、IPブロック104によってあるいはメモリ通信コントローラ106によってコマンド形式で構築され、ネットワーク・インターフェース・コントローラ108へコマンド形式で提供されればよい。コマンド形式は、IPブロック104およびメモリ通信コントローラ106のアーキテクチャ上のレジスタ・ファイルに適合するネイティブ形式とすればよい。ネットワーク・パケット形式は、一般に、ネットワークのルータ110を介した伝送に必要な形式である。このようなメッセージ各々は、1つ以上のネットワーク・パケットから成る。ネットワーク・インターフェース・コントローラにてコマンド形式からパケット形式へ変換される、このような通信命令の例としては、IPブロックとメモリの間のメモリ・ロード命令およびメモリ・ストア命令が挙げられる。このような通信命令には、さらに、データと、該データをIPブロックの間で並列アプリケーションおよびパイプライン型アプリケーションで処理するための命令と、を搬送するメッセージをIPブロック間に送信する、通信命令を含めてもよい。
【0041】
図3のNOC102では、各IPブロックが、そのIPブロックのメモリ通信コントローラを介してメモリに対し、さらに自身のネットワーク・インターフェース・コントローラを介してネットワークに対し、メモリ・アドレス・ベースの通信をやり取りすることができるようになっている。メモリ・アドレス・ベースの通信は、IPブロックのメモリ通信コントローラのメモリ通信実行エンジンによって実行されるロード命令またはストア命令などのメモリ・アクセス命令である。このようなメモリ・アドレス・ベースの通信は、一般に、IPブロック内で発生してコマンド形式で構築され、実行に向けてメモリ通信コントローラへと渡される。
【0042】
多くのメモリ・アドレス・ベースの通信が、メッセージ・トラフィックで実行される。その理由は、アクセスされる任意のメモリは、物理メモリ・アドレス空間のどこにでも、オンチップもしくはオフチップで、またはNOCの任意のメモリ通信コントローラに直接アタッチされて、位置する可能性があり、あるいは究極的には、個々のメモリ・アドレス・ベースの通信がどのIPブロックによって発生させられたかにかかわらず、NOCの任意のIPブロックを介してアクセスされ得るためである。従って、NOC102では、メッセージ・トラフィックで実行されるメモリ・アドレス・ベースの通信は全て、メモリ通信コントローラから、関連するネットワーク・インターフェース・コントローラへ渡され、コマンド形式からパケット形式へと変換されて、ネットワークを通じてメッセージで伝送される。パケット形式への変換に当たり、ネットワーク・インターフェース・コントローラは、さらに、メモリ・アドレス・ベースの通信によってアクセスされる対象の単数または複数のメモリ・アドレスに基づいて、パケットのネットワーク・アドレスを特定する。メモリ・アドレス・ベースのメッセージは、メモリ・アドレスを用いてアドレスされる。各メモリ・アドレスは、ネットワーク・インターフェース・コントローラによってネットワーク・アドレス、すなわち一般には物理メモリ・アドレスの一部の領域をつかさどるメモリ通信コントローラのネットワーク位置へ、マッピングされる。メモリ通信コントローラ106のネットワーク位置は、必然的に、そのメモリ通信コントローラの関連するルータ110、ネットワーク・インターフェース・コントローラ108、およびIPブロック104のネットワーク位置でもある。各ネットワーク・インターフェース・コントローラ内にある命令変換論理150は、メモリ・アドレス・ベースの通信をNOCのルータを介して伝送するために、メモリ・アドレスをネットワーク・アドレスへと変換することができる。
【0043】
各ネットワーク・インターフェース・コントローラ108は、ネットワークのルータ110からメッセージ・トラフィックを受信し次第、メモリ命令がないか各パケットを調べる。メモリ命令を含んでいる各パケットは、受信しているネットワーク・インターフェース・コントローラと関連するメモリ通信コントローラ106へと与えられる。このメモリ通信コントローラは、メモリ命令を実行してから、パケットの残りのペイロードをさらなる処理に向けてIPブロックへ送信する。このようにして、メッセージから得られる、特定のメモリ・コンテンツに依存した命令の実行にIPブロックが着手するより前に、メモリ・コンテンツは、そのIPブロックによるデータ処理をサポートするように必ず整えられている。
【0044】
図3のNOC102では、各IPブロック104が、IPブロック相互間のネットワークへアドレスされた通信146を、メモリ通信コントローラ106を経由させずに、IPブロックのネットワーク・インターフェース・コントローラ108を介して直接ネットワークへ送信することが可能である。ネットワークへアドレスされた通信は、ネットワーク・アドレスによって別のIPブロックへ導かれるメッセージである。このようなメッセージは、当業者には思い当たるように、パイプライン型アプリケーションにおける作業データ、およびSIMDアプリケーションにおけるIPブロック間の単一プログラム処理用の複数データなどを伝送する。このようなメッセージは、NOCのルータを介して導かれるところのネットワーク・アドレスを分かっている発信元IPブロックによって最初からネットワークへアドレスされているという点で、メモリ・アドレス・ベースの通信とは異なる。上述のようなネットワークへアドレスされている通信は、IPブロックによって、I/O機能136を介して直接該IPブロックのネットワーク・インターフェース・コントローラへとコマンド形式で与えられ、その後ネットワーク・インターフェース・コントローラによってパケット形式へ変換されて、NOCのルータを介して別のIPブロックへと伝送される。このような、ネットワークへアドレスされている通信146は双方向性であり、個々のアプリケーションでの使用に応じて、NOCのIPブロック各々に向かって進む可能性もあり、IPブロック各々から進む可能性もある。一方、各ネットワーク・インターフェース・コントローラは、上述のような通信を関連するルータに対して送信することも受信することもでき、さらに各ネットワーク・インターフェース・コントローラは、上述のような通信を、関連するメモリ通信コントローラ106を経由させずに、関連するIPブロックに対して直接送信することも受信することもできる。
【0045】
図3の例における各ネットワーク・インターフェース・コントローラ108は、さらに、ネットワーク・パケットをタイプによって特徴付ける仮想チャネルをネットワーク上に実装することができる。各ネットワーク・インターフェース・コントローラ108には、各通信命令をタイプによって分類し、その命令をNOC上での伝送に向けてパケット形式でルータ110へ渡すより前に、命令タイプをネットワーク・パケット形式のフィールドに記録する、仮想チャネル実装論理148が含まれる。通信命令のタイプの例としては、IPブロック相互間のネットワーク・アドレス・ベースのメッセージ、要求メッセージ、要求メッセージへの応答、キャッシュに向けられた無効化メッセージ、メモリ・ロードおよびストア・メッセージ、およびメモリ・ロード・メッセージへの応答などが挙げられる。
【0046】
図3の例における各ルータ110は、ルーティング論理152、仮想チャネル制御論理154、および仮想チャネル・バッファ156を含む。ルーティング論理は、一般に、ルータ110、リンク118、およびルータ間のバス線によって形成されたネットワークにおいてデータ通信用のデータ通信プロトコル・スタックを実行する、同期式論理または非同期式論理のネットワークとして実装される。ルーティング論理152は、当業者である読者にはオフチップ・ネットワークでのルーティング・テーブルが連想されるであろう機能を含むが、ルーティング・テーブルは、少なくとも一部の実施形態においては、NOCで使用するには遅すぎる上に煩雑であるとみなされている。同期式論理および非同期式論理のネットワークとして実装されるルーティング論理は、単一クロック・サイクルと同程度の速さでルーティング決定を行うように構成することができる。本例におけるルーティング論理は、ルータにて受信された各パケットを転送するポートを選択することによって、パケットをルーティングする。各パケットには、そのパケットがルーティングされる先のネットワーク・アドレスが含まれる。
【0047】
上記のメモリ・アドレス・ベースの通信の説明では、各メモリ・アドレスは、ネットワーク・インターフェース・コントローラによって、ネットワーク・アドレス、すなわちメモリ通信コントローラのネットワーク位置へマッピングされるものとして記載した。メモリ通信コントローラ106のネットワーク位置は必然的に、そのメモリ通信コントローラの関連するルータ110、ネットワーク・インターフェース・コントローラ108およびIPブロック104のネットワーク位置でもある。故に、IPブロック相互間の、すなわちネットワーク・アドレス・ベースの通信でも、アプリケーション・レベルのデータ処理の場合、一般にネットワーク・アドレスを、NOCのルータ、リンク、およびバス線によって形成されたネットワークにおけるIPブロックの位置としてとらえる。図2は、上述のようなネットワークの1つの構成が、行と列とのメッシュであることを示しており、そこでは、各ネットワーク・アドレスを、例えば、関連するルータ、IPブロック、メモリ通信コントローラ、およびネットワーク・インターフェース・コントローラのセット各々に関する一意の識別子として、あるいはかかるセットのメッシュにおけるx,y座標として、実現することができる。
【0048】
図3のNOC102では、各ルータ110が2つ以上の仮想通信チャネルを実装し、仮想通信チャネルの各々は通信タイプによって特徴付けられる。通信命令タイプ、ひいては仮想チャネルのタイプには、前述したタイプが含まれる:IPブロック相互間のネットワーク・アドレス・ベースのメッセージ、要求メッセージ、要求メッセージへの応答、キャッシュに向けられた無効化メッセージ;メモリ・ロードおよびメモリ・ストア・メッセージ;および、メモリ・ロード・メッセージへの応答など。仮想チャネルのサポートに当たり、図3の例における各ルータ110には、さらに仮想チャネル制御論理154および仮想チャネル・バッファ156が含まれる。仮想チャネル制御論理154は、受信されたパケット各々に関しそのパケットに割り当てられた通信タイプを調査し、その通信タイプ向けの発信用仮想チャネル・バッファへ各パケットを配置して、NOC上の隣接するルータへポートを介して伝送する。
【0049】
仮想チャネル・バッファ156各々は、有限のストレージ空間を備えている。短期間に多くのパケットが受信されると、仮想チャネル・バッファが埋まってしまう可能性があり、その結果そのバッファにはそれ以上パケットを入れることができなくなる。別のプロトコルでは、バッファが満杯の仮想チャネルに到達しつつあるパケットは、廃棄されると考えられる。一方、本例における各仮想チャネル・バッファ156は、バス線の制御信号を用い、仮想チャネル制御論理を介して、仮想チャネルにおける伝送を一時停止するようにすなわち特定の通信タイプのパケットの伝送を一時停止するように、周辺のルータに対して通知することができる。1つの仮想チャネルがそのようにして一時停止される場合にも、他の全ての仮想チャネルは影響を受けることなく全容量で動作を継続することができる。制御信号は、各ルータを通って各ルータの関連するネットワーク・インターフェース・コントローラ108までずっと配線されている。各ネットワーク・インターフェース・コントローラは、そのような信号を受信し次第、自身の関連するメモリ通信コントローラ106からの、あるいは自身の関連するIPブロック104からの、一時停止されている仮想チャネルに対する通信命令の受け付けを拒否するように構成されている。このようにして、仮想チャネルの一時停止は、仮想チャネルを実装するハードウェア全てに、発信元のIPブロックまで遡って影響を及ぼす。
【0050】
仮想チャネルにおいてパケット伝送を一時停止することの1つの効果は、絶対にパケットが廃棄されないということである。例えばインターネット・プロトコルなど一部の信頼性のないプロトコルではパケットが廃棄されるであろう状況にルータが遭遇する場合にも、図3の例のルータであれば、各自の仮想チャネル・バッファ156および各自の仮想チャネル制御論理154によって、バッファ空間が再び利用可能になるまで仮想チャネルにおける全てのパケット伝送を一時停止すればよく、それによりパケットを廃棄する必要は全くなくなる。従って、図3のNOCは、非常に信頼性の高いネットワーク通信プロトコルを、ハードウェアの極めて薄い層で実現することができる。
【0051】
図3の例のNOCは、さらに、オンチップおよびオフチップ双方のメモリ・キャッシュの間でキャッシュ・コヒーレンシを保つように構成されているとよい。各NOCは、基となる同一のメモリ・アドレス空間に対して各々動作する複数のキャッシュをサポートすることができる。例えば、キャッシュは、IPブロックによって、メモリ通信コントローラによって、またはNOCの外部にあるキャッシュ・コントローラによって、制御されればよい。さらに、図2のオンチップ・メモリ114、116のいずれかが、オンチップ・キャッシュとして実装されていてもよく、さらに本発明の範囲内で、キャッシュ・メモリをオフチップで実装することも可能である。
【0052】
図3に示すルータ110は各々、5つのポートを含む。158A乃至Dの4つのポートは、バス線118を介して他のルータに接続されている。第5のポート160は、各ルータを、ネットワーク・インターフェース・コントローラ108およびメモリ通信コントローラ106を介して、関連するIPブロック104へ接続している。図2および3の説明から分かるように、NOC102のルータ110およびリンク118は、各ルータ内の垂直方向および水平方向のポート群を接続している垂直方向および水平方向のリンクを用いてメッシュ・ネットワークを形成している。図3の説明では、例として、ポート158A、158Cおよび160を垂直方向のポートと称し、ポート158Bおよび158Dを水平方向のポートと称する。
【0053】
次に図4にて、本発明に従ったIPブロック104の1つの例示的な実装を別のやり方で示す。本IPブロックは、命令ユニット(IU:instruction unit)162と、実行ユニット(XU:execution unit)164と、予備実行ユニット(AXU:auxiliary execution unit)166とに分割された処理要素として実装されている。例示の実装では、IU162には、L1命令キャッシュ(iCACHE)170から命令を受信する複数の命令バッファ168が含まれる。各命令バッファ168は、複数の、例えば4つの、対称型マルチスレッド式(SMT:symmetric multithreaded)ハードウェア・スレッドのうちの1つの専用となっている。実効アドレスから実アドレスへの変換ユニット(iERAT)172がiCACHE170に接続されて、複数のスレッド取り出しシーケンサ174からの命令取り出し要求を、低位メモリから命令検索するための実アドレスへと変換するのに使用される。スレッド取り出しシーケンサ174は各々、特定のハードウェア・スレッドの専用となっており、関連するスレッドによって実行されるべき命令が、確実にiCACHEに読み込まれて適切な実行ユニットへ発送されるように、用いられる。同様に図4に示すように、命令バッファ168へ読み込まれる命令が分岐予測論理176によって監視されるとよく、それにより、各スレッド取り出しシーケンサ174に対し、実行中のスレッドの分岐に起因する命令キャッシュ・ミスを最小限にするヒントが与えられる。
【0054】
IU162には、さらに、各ハードウェア・スレッドの専用であって、依存性を解消し、命令バッファ168からXU164への命令の発行を制御するように構成されている、依存性/発行論理ブロック178が含まれる。加えて、例示の実施形態では、別個の予備依存性/発行論理180がAXU166内に設けられており、従ってXU164およびAXU166に対して別々のスレッドによって別個の命令を同時に発行することが可能になる。別の実施形態では、予備依存性/発行論理180がIU162に配置されているか、あるいはその全体が省かれていてもよく、そのため依存性/発行論理ブロック178が、AXU166に対する命令を発行する。
【0055】
XU164は、固定小数点論理184、分岐論理186、およびロード/ストア論理188に接続されている一連の汎用レジスタ(GPR:general purpose register)182を含む、固定小数点実行ユニットとして実装される。ロード/ストア論理188は、dERAT論理192によってもたらされる実効アドレスから実アドレスへの変換を伴ったL1データ・キャッシュ(dCACHE)190に接続されている。XU164は、例えば32bまたは64bのPowerPC(IBM社の登録商標)命令セットの全てまたは一部など、実用上あらゆる命令セットを実行するように構成されているとよい。
【0056】
AXU166は、予備の実行ユニットとして動作し、1つ以上の実行ブロック194に加え、専用の依存性/発行論理180を含んでいる。AXU166は、実行ブロックをいくつ含んでもよく、さらに実用上、例えば浮動小数点ユニットなど任意のタイプの実行ユニットを実装してもよいし、あるいは暗号化/復号化ユニット、コプロセッサ、ベクトル処理ユニット、グラフィックス処理ユニット、XML処理ユニットなどといった1つ以上の特化された実行ユニットを実装してもよい。例示の実施形態では、AXU166がXU164に対する高速補助インターフェースを含み、例えば、AXUアーキテクチャによる状態とXUアーキテクチャによる状態との間の直接的な移行がサポートされる。
【0057】
IPブロック104との通信は、図2に関連して上述したやり方で、NOC102に接続されたインターフェース・コントローラ108を介して管理されればよい。メッセージ・ベースの通信に加え、例えばL2キャッシュ・メモリへのアクセスなどに向けたアドレス・ベースの通信を提供することもできる。例えば、IPブロック間でのノード相互間通信に対応するために、IPブロック104各々が、専用のイン・ボックスまたはアウト・ボックスあるいはその両方を含んでもよい。
【0058】
本発明の実施形態は、図1乃至4に関連して上述したハードウェアおよびソフトウェア環境内で実現されるとよい。一方、本開示の利益を得る当業者には当然のことながら、本発明は、数多くの異なる環境で実現されてもよく、さらに、本発明の精神および範囲から逸脱することなく、前述のハードウェアおよびソフトウェア環境に対してその他の変更を施すこともできる。従って本発明は、本明細書にて開示される特定のハードウェアおよびソフトウェア環境に限定されない。
単一パスでの1マイナス・ドット積計算をサポートする浮動小数点実行ユニット
【0059】
ここで図5を見ると、この図には、本発明に従った単一パスでの1マイナス・ドット積計算をサポートする浮動小数点実行ユニット202を組み込んだ、例示的な処理ユニット200が示されている。処理ユニット200は、例えば、図1乃至4のIPブロック104などのIPブロックにおけるプロセッサ・コアとして実装されてもよい。別の方法では、処理ユニット200が、例えば単一コアまたはマルチコアのマイクロプロセッサあるいはマイクロコントローラを含む、命令を発行および実行するその他のプロセッサ・アーキテクチャで実装されてもよい。
【0060】
浮動小数点実行ユニット202は、発行論理204から浮動小数点命令を受信する、ベクトル浮動小数点実行ユニットとして実装されている。発行論理204は、206で図示された複数(N)のスレッドからの命令を発行することのできる発行選択論理208を含む。発行選択論理208は、別個のスレッドによる命令の発行をスケジュールするように動作し、さらに一般に、当該技術で一般的に理解されているやり方で命令間の依存性を管理する論理を含む。複数の浮動小数点実行ユニット202がサポートされている場合、発行選択論理208はさらに、該複数の実行ユニットに対してサイクルごとに複数の命令を発行することも可能である。ただし、実施形態によっては、1つの実行ユニットのみがサポートされる場合もあり、さらに実施形態によっては、命令のマルチスレッド式発行がサポートされていない場合もある。
【0061】
浮動小数点実行ユニット202は、発行論理204が実行ユニットに対して発行した命令を処理するのに加えて、多段式実行パイプライン212に接続されたレジスタ・ファイル210を備える。多段式実行パイプラインは、レジスタ・ファイル210に保存されたデータを発行論理204によって発行された命令に基づいて処理し、目的のデータをレジスタ・ファイルへ再保存することができる。浮動小数点実行ユニット202は、例えば、一般的な浮動小数点ユニット、あるいはグラフィックス処理ユニット、暗号化/復号化ユニット、コプロセッサ、XML処理ユニットなどの特化された実行ユニットなど、多数の異なるタイプの実行ユニットとして実現することもできる。
【0062】
例えば、図5に示す実装では、多段式実行パイプライン212が、例えば画像処理などに使用され得るベクトル浮動小数点ユニットとして実現されており、本ベクトル浮動小数点ユニットは、該実行ユニットに対して発行論理204によって発行された、単一命令多重データ(SIMD)命令を処理する。レジスタ・ファイル210は、各々が複数(例えば4)のワードを含んだ複数(例えば128)のベクトル・レジスタ214を含む。複数のレジスタ・ファイル入力および出力(図示せず)が設けられて、選択されたレジスタの中へ浮動小数点値を書き込み、選択されたレジスタのコンテンツを処理するよう多段式実行パイプライン212へと出力する。浮動小数点ベクトルを処理に向けてパイプラインへと提供するために、複数のオペランド入力216が、レジスタ・ファイル210と多段式実行パイプライン212の間にもたらされる。多段式実行パイプライン212には、レジスタ・ファイル210に保存されたベクトルを発行論理204によって発行された命令に基づいて処理し、目的のデータをレジスタ・ファイル210のベクトル・レジスタへ再保存することのできる、複数(例えば4)の処理レーン、すなわちサブユニット218が含まれる。
【0063】
浮動小数点実行ユニット202の構成が画像処理アプリケーションにて使用可能な浮動小数点ユニットであるということから、各処理レーン218は浮動小数点命令を処理するように構成されている。選択的に他の多種多様な浮動小数点アーキテクチャも使用可能であるが、浮動小数点実行ユニット202には、A、BおよびCで表された3つのベクトル・オペランドに基づいて動作可能なパイプライン型浮動小数点実行アーキテクチャが備えられている。ベクトル演算に関しては、32ビット・ワードを4つ含むベクトルがサポートされており、各ベクトル内のワードはX、Y、ZおよびWで表されている。従って、処理レーン218各々が、各ベクトルから1つずつ、3つのオペランド・ワードを受信する。故に、例えば各ベクトルのXワードを処理する処理レーン218の場合、その処理レーンに与えられるオペランドは、Ax、BxおよびCxと表される。
【0064】
各処理レーン218は、1つ以上の他の処理レーンと並列で動作するように構成されている。例えば処理レーン各々が、クロス積またはドット積演算を実施するべく、一対のオペランドを乗算するとよい。オペランドの別個の対を、ベクトル・ユニットの別個の処理レーンにて乗算することによって、ベクトル演算をより高速かつより効率的に実施することができる。
【0065】
さらに各処理レーン218は、より性能を向上させるようにパイプライン化されている。それに応じて、各処理レーン218には、オペランドに対し1つ以上の演算を実施する、複数のパイプライン段が含まれる。例えば各々の処理レーンが、第1段として、AオペランドおよびCオペランドを乗算する乗算器220を含む場合がある。本発明の一実施形態では、図5に示すように、オペランドの乗算がパイプラインの第1段にて実施されるとよい。
【0066】
各処理レーン218には、さらに、上記積の算出に並列して、オペランドBを乗算器220によって算出された積にアラインするためのアライナ220が含まれるとよい。図5ではアラインメントを同じパイプライン段に示しているが、当業者には当然のことながら、別の実施形態では乗算とアラインメントとが別個のパイプライン段にて実施されてもよい。
【0067】
各処理レーン218は、さらに、2つ以上のオペランドを加算するための加算器224をも含む。一実施形態(図5に示す)では、各加算器224が、乗算器220によって算出された積(和およびキャリーとして出力される)を受信して、その積を、アライナ222から出力されたアライン済みオペランドと加算するように構成されている。各加算器224は、さらに、先行ゼロ予測回路を含む。従って各処理レーン218は、積和命令を実行するように構成され得る。当業者には当然のことながら、ベクトル演算では、積和命令が頻繁に実行される。従って、いくつかの積和命令を並列レーンで実行することによって、ベクトル処理の効率を大幅に向上させることができる。
【0068】
各ベクトル処理レーン218には、さらに、正規化段を含めることができる。それに応じて、各処理レーンに正規化器226が設けられるとよい。正規化器226は、算出された値を都合のよい指数形式で表現するように構成することができる。例えば、正規化器226が、演算の結果として値0.0000063を受け取る場合がある。正規化器226は、この値を、より好適な指数形式、例えば6.3×10−6へと変換するとよい。丸め段(図示せず)をさらに設けて、算出された値を所望する小数点の数値に丸めるとよい。
【0069】
1マイナス・ドット積計算(同様に、他のドット積計算などその他の計算)のために、浮動小数点実行ユニット202には、さらに、4方向アライナ228、4:2コンプレッサ230、および加算器232が含まれ、これらが共同して、4つの処理レーン218の出力を合計し、スカラ結果値を生成する。加算器232の出力は、目的のデータ234としてもたらされ、これがレジスタ・ファイル210にある保存先レジスタへ書き込まれる。
【0070】
当業者には当然のことながら、本発明の実施形態は、上記で説明され図5に示された特定のパイプライン段、コンポーネント、およびコンポーネントの構成に限定されるものではない。例えば、一部の実施形態では、アライナ222が、オペランドBを、または乗算器220によって算出された積を、あるいは双方を、アラインするように構成されていてもよい。さらに、本発明の実施形態は、図5に示された特定のコンポーネントに制約されるものではない。本発明に従った各処理レーン218には、浮動小数点実行ユニットによってサポートされている他の各種の命令を処理するのに必要とされ得る、例示のコンポーネントならびに追加のコンポーネントの任意の組み合わせを含めることができる。追加のコンポーネントとしては、先行ゼロ予測器、除算器などが挙げられるがこれらに限定されない。
【0071】
1マイナス・ドット積計算の処理を円滑化するように、236に図示されている追加の論理を各処理レーン218の頭に実装する。多段式実行パイプライン212を通じて単一パスで1マイナス・ドット積計算を実現するべく、最初の3つの処理レーン218にて、2つの3ワード入力ベクトル(A,C)間の3方向ドット積を計算し、このドット積をネゲートし、さらに第4の処理レーンに1.0値を強制的にもたらして、4つのワード・レーン全ての加算を実施する。結果的に、パイプライン・パス2つの代わりに1つのみで、1.0−dot3(A,C)がもたらされる。
【0072】
論理236には、最初の3つの処理レーン218の各々において、A入力ベクトル(Ax,Ay,Az)のx、yおよびzワードの符号ビットを選択的に逆に、すなわち反転させる、XORゲート238を含む。各XORゲートは、アサートされるとx、yおよびzワードの符号ビットを逆にするF制御信号によって制御される。別の方法では、C入力ベクトルが反転されてもよく、またはこの反転を、AおよびC入力ベクトルの乗算の後であるいは乗算に関連して、総合的に実施することもできる。別の実施形態では、−1.0の値を第4処理レーンへ強制的にもたらして、最終的な結果(4つの処理レーン全ての合計後)が1マイナス・ドット積計算を生成するように反転させてもよい。本開示の利益を得る当業者には、ドット積を反転させるその他のやり方も明らかとなろう。
【0073】
1.0値を第4処理レーンへ強制的にもたらすために、第4処理レーンに対するBおよびCベクトル入力に、2つのマルチプレクサ240、242をさしはさむ。マルチプレクサ240、242各々に対する第1入力は、BおよびC入力ベクトルの第4ワードがそのまま与えられる。マルチプレクサ240の第2入力は、1.0値が与えられ、それに対しマルチプレクサ242の第2入力は、0.0値が与えれらる。マルチプレクサ240、242の第2入力が選択されると、マルチプレクサ242が与えた0.0値により乗算器220は強制的に0.0値を出力させられる。この値がその後、マルチプレクサ240が加算器224へ与えた1.0値と合計されて、結果的に第4処理レーン218から1.0値の出力をもたらすことになる。
【0074】
当然のことながら、他の実施形態では、1.0値を第4処理レーンへ強制的にもたらす他のやり方が使用されてもよい。例えば、マルチプレクサ242は、C入力ベクトルの経路ではなくA入力ベクトルの経路に配置されてもよい。別の方法では、パイプラインの後期の段にマルチプレクサを配置してパイプラインへ1.0値を挿入し、例えば第4処理レーンの任意の段の出力を上書きするなどしてもよい。本開示の利益を得る当業者には、1.0値を処理レーンへ強制的にもたらすその他のやり方も明らかとなろう。
【0075】
例示の実施形態では、処理ユニット200によってサポートされている命令セットの1つ以上の特定命令タイプが、1マイナス・ドット積計算を行うための専用となっている。専用の命令タイプに一致する、命令ストリームに入った命令の受信に応えて、処理ユニット200の内部に配置されているデコード論理が、XORゲート238およびマルチプレクサ240、242を制御して、1マイナス・ドット積計算を行うように多段実行パイプライン212を構成させる。PowerVMX128命令セットに対応した一実施形態では、vdotsubfp命令タイプが、命令セットの中で定義されており、命令に対する入力オペランドA、Cとして特定される2つのベクトル・レジスタに関する1マイナス・ドット積計算を行うように構成されているとよい。vdotsubfp命令の受信に応えて、処理ユニット200のデコード論理は、XORゲート238を制御して、最初の3つの処理レーン218から出力されたドット積の項(AxCx,AyCy,AzCz)を反転させる。さらにマルチプレクサ240、242を制御して第2入力を与えさせ、それにより1.0の値を第4処理レーンへ強制的にもたらすようにする。4つの処理レーンの出力(−AxCx,−AyCy,−AzCz,1.0)が合計されると、その結果生じる出力値(−AxCx+−AyCy+−AzCz+1.0)は、(1.0−dot3(A,C))に等しい。
【0076】
前述の、1マイナス・ドット積の値を2つのパスで計算し9サイクルを必要とする従来の浮動小数点実行ユニットと対比すると、本発明に従った、ドット積を6サイクルで計算可能な処理ユニットは、1マイナス・ドット積計算も同様に6サイクルで実施することができ、それにより3つ少ないサイクルで結果をもたらす。加えて、1マイナス・ドット積計算に関するサポートを実装するに当たり、一般に、回路領域の追加はほとんど必要なく、タイミングに最小限の影響しか及ぼさない。
【0077】
前述の1マイナス・ドット積命令は、多種多様なアプリケーションに関して1マイナス・ドット積計算を行うのに使用可能であるが、1つの特に好適なアプリケーションは、画像のオブジェクトに対するフレネル効果および電子顕微鏡効果などのピクセル・シェーディング効果の適用に関連するものである。図6は、例として、オブジェクト252を備えた例示的なシーン250を示している。視点254からシーン250を描画する場合、オブジェクト252上の可視ピクセル各々が描画される。このような描画に関連して、上述のピクセルに対しフレネル効果などのピクセル・シェーディング効果を適用することが望ましい場合があり、この場合、フレネル効果の輝度値は、描画されているピクセルに対する視線ベクトルと表面法線ベクトルとの、1マイナス・ドット積として計算される。従って、オブジェクト252上のピクセルPに関して、表面法線ベクトルNはオブジェクト252の表面から投影され、視線ベクトルは視点254からピクセルPへと投影される。輝度値の計算は、故に、単一のvdotsubfp命令を、該命令に対する入力オペランドとして与えられる表面法線ベクトルおよび視線ベクトルのNおよびVと共に、用いればよい。
【0078】
説明された実施形態に対しては、本発明の精神および範囲から逸脱することなく、多様な変更を施すことができる。例えば、強制的にもたらされる1.0値は、第4処理レーン以外の処理レーンに伝えられてもよく、さらに、各処理レーンの出力を反転させること、または1.0値を処理レーンへ強制的にもたらすこと、あるいはその両方を行うのに、他の論理が用いられてもよい。本開示の利益を得る当業者には、その他の変更も明らかとなろう。故に本発明は、以下に付される請求項にて記載されるものである。
【符号の説明】
【0079】
12 プロセッサ
14 RAM
18 バス・アダプタ
20 アプリケーション
22 オペレーティング・システム
24 データ・ストレージ
26 NOCビデオ・アダプタ
28 NOCコプロセッサ
30 表示デバイス
38 ディスク・ドライブ・アダプタ
42 I/Oアダプタ
44 ユーザ入力デバイス
46 通信アダプタ
48 他のコンピュータ
50 ネットワーク

【特許請求の範囲】
【請求項1】
ベクトル浮動小数点実行ユニットを用いて、画像のピクセルにシェーディング効果を適用する方法であって、前記方法は、
前記ベクトル浮動小数点実行ユニットによってサポートされている命令セットにて定義されている1マイナス・ドット積命令を受信するステップであって、前記1マイナス・ドット積命令は、表面法線ベクトルおよび視線ベクトルを受信するように構成されており、前記法線ベクトルおよび視線ベクトルの各々がx、yおよびzの値を含む、前記受信するステップと、
前記ベクトル浮動小数点実行ユニットのパイプラインの単一パスで前記1マイナス・ドット積命令を実行することによって前記表面法線ベクトルおよび前記視線ベクトルから輝度値を計算するステップであって、前記1マイナス・ドット積命令を実行することが、以下のこと:
前記ベクトル浮動小数点実行ユニットの第1、第2および第3処理レーンそれぞれにおいて、前記表面法線ベクトルおよび視線ベクトルの前記x、yおよびzの値それぞれを乗算すること;
前記ベクトル浮動小数点実行ユニットの前記第1、第2および第3処理レーンの各々をネゲートすること;
前記ベクトル浮動小数点実行ユニットの第4レーンを強制的に1.0値にすること;および
前記輝度値を生成するべく、前記第1、第2、第3および第4処理レーンを合計すること、
を含む、前記計算するステップと、
を含む、方法。
【請求項2】
前記第1、第2および第3処理レーンをネゲートすることが、前記表面法線ベクトルおよび視線ベクトルのx、yおよびzの値それぞれの乗算より前に、前記表面法線ベクトルおよび視線ベクトルのうちの1つのx、yおよびzの値それぞれをネゲートすることを含む、請求項1に記載の方法。
【請求項3】
ベクトル浮動小数点実行ユニットの単一パスで1マイナス・ドット積の値を計算するべく、命令セットの第1命令タイプの第1命令を実行するように構成されている前記ベクトル浮動小数点実行ユニットを含む、回路装置。
【請求項4】
前記1マイナス・ドット積の値が、入力として第1および第2ベクトルを使用するように構成されており、以下の計算式:
1.0−dot(第1ベクトル,第2ベクトル)
を用いて計算され、ここでdot()は前記第1および第2ベクトルのドット積である、請求項3に記載の回路装置。
【請求項5】
前記第1および第2ベクトルの各々が、第1、第2および第3の値を含み、前記ベクトル浮動小数点実行ユニットが、第1、第2、第3および第4の処理レーンを含み、前記ベクトル浮動小数点実行ユニットの前記第1および第3処理レーンは、前記第1命令タイプの前記第1命令の実行中に、前記第1および第2ベクトルの前記第1、第2および第3の値それぞれを共に乗算して第1、第2および第3の積を生成し、前記ベクトル浮動小数点実行ユニットは、前記第4処理レーンに強制的に1.0値を生成させ、前記1.0値を前記第1、第2および第3の積と合計させるように構成されている、請求項3に記載の回路装置。
【請求項6】
前記ベクトル浮動小数点実行ユニットは、前記第1命令タイプの前記第1命令を実行中に前記1.0値を前記第1、第2および第3の積に加算するために前記第1、第2、第3および第4処理レーンの出力に接続されている加算器を含む、請求項5に記載の回路装置。
【請求項7】
前記ベクトル浮動小数点実行ユニットは、さらに、前記第1命令タイプの前記第1命令を実行中、前記1.0値を前記第1、第2および第3の積に加算する前に、前記第1、第2および第3の積を反転させるように構成されている、請求項6に記載の回路装置。
【請求項8】
前記第1、第2および第3処理レーンの各々が、前記第1ベクトルの前記第1、第2および第3の値それぞれを反転させるように構成されている符号反転器を含む、請求項7に記載の回路装置。
【請求項9】
前記第4処理レーンが、
第1オペランド入力で受信された、前記第1ベクトルの第4の値と、第2オペランド入力で受信された、前記第2ベクトルの第4の値とを乗算するように構成されている乗算器と、
加算より前に、第3ベクトルの第4の値を前記乗算器の出力にアラインする、アライナと、
前記第2オペランド入力に接続されている第1マルチプレクサであって、前記第1マルチプレクサは、前記第2オペランド入力へ前記第2ベクトルの前記第4の値を与えるように構成されている第1入力と、前記第2オペランド入力へ0の値を与えるように構成されている第2入力とを有し、前記第1マルチプレクサは、前記第1命令タイプの前記第1命令の実行中、前記第2入力を選択するように構成されている、前記第1マルチプレクサと、
前記アライナに接続されている第2マルチプレクサであって、前記第2マルチプレクサは、前記アライナへ前記第3ベクトルの前記第4の値を与えるように構成されいる第1入力と、前記アライナへ1.0の値を与えるように構成されている第2入力とを有し、前記第2マルチプレクサは、前記第1命令タイプの前記第1命令の実行中、前記第2入力を選択するように構成されている、前記第2マルチプレクサと、
を含む、請求項8に記載の回路装置。
【請求項10】
請求項3に記載の回路装置を含む、集積回路デバイス。
【請求項11】
コンピュータ可読媒体と、前記コンピュータ可読媒体上に常駐しており請求項3に記載の回路装置を定義している論理定義プログラム・コードと、を含む、プログラム。
【請求項12】
ベクトル浮動小数点実行ユニットを用いて1マイナス・ドット積計算を行う方法であって、前記方法は、
前記ベクトル浮動小数点実行ユニットによってサポートされている命令セットの第1命令タイプの第1命令を受信するステップと、
前記第1命令の受信に応えて、前記ベクトル浮動小数点実行ユニットの単一パスで1マイナス・ドット積の値を計算することによって、前記第1命令を実行するステップと、
を含む、方法。
【請求項13】
前記1マイナス・ドット積の値が、入力として第1および第2ベクトルを使用するように構成されており、以下の計算式:
1.0−dot(第1ベクトル,第2ベクトル)
を用いて計算され、ここでdot()は前記第1および第2ベクトルのドット積である、請求項12に記載の方法。
【請求項14】
前記第1および第2ベクトルの各々が、第1、第2および第3の値を含み、前記ベクトル浮動小数点実行ユニットが、第1、第2、第3および第4の処理レーンを含み、前記ベクトル浮動小数点実行ユニットの前記第1および第3処理レーンは、前記第1命令タイプの前記第1命令の実行中に、前記第1および第2ベクトルの前記第1、第2および第3の値それぞれを共に乗算して第1、第2および第3の積を生成し、前記ベクトル浮動小数点実行ユニットは、前記第4処理レーンに強制的に1.0値を生成させ、前記1.0値を前記第1、第2および第3の積と合計させるように構成されている、請求項12に記載の方法。
【請求項15】
前記ベクトル浮動小数点実行ユニットは、前記第1命令タイプの前記第1命令を実行中に前記1.0値を前記第1、第2および第3の積に加算するために前記第1、第2、第3および第4処理レーンの出力に接続されている加算器を含む、請求項14に記載の方法。
【請求項16】
前記ベクトル浮動小数点実行ユニットは、さらに、前記第1命令タイプの前記第1命令を実行中、前記1.0値を前記第1、第2および第3の積に加算する前に、前記第1、第2および第3の積を反転させるように構成されている、請求項15に記載の方法。
【請求項17】
前記第1、第2および第3処理レーンの各々が、前記第1ベクトルの前記第1、第2および第3の値それぞれを反転させるように構成されている符号反転器を含む、請求項16に記載の方法。
【請求項18】
前記第4処理レーンが、
第1オペランド入力で受信された、前記第1ベクトルの第4の値と、第2オペランド入力で受信された、前記第2ベクトルの第4の値とを乗算するように構成されている乗算器と、
加算より前に、第3ベクトルの第4の値を前記乗算器の出力にアラインする、アライナと、
前記第2オペランド入力に接続されている第1マルチプレクサであって、前記第1マルチプレクサは、前記第2オペランド入力へ前記第2ベクトルの前記第4の値を与えるように構成されている第1入力と、前記第2オペランド入力へ0の値を与えるように構成されている第2入力とを有し、前記第1マルチプレクサは、前記第1命令タイプの前記第1命令の実行中、前記第2入力を選択するように構成されている、前記第1マルチプレクサと、
前記アライナに接続されている第2マルチプレクサであって、前記第2マルチプレクサは、前記アライナへ前記第3ベクトルの前記第4の値を与えるように構成されいる第1入力と、前記アライナへ1.0の値を与えるように構成されている第2入力とを有し、前記第2マルチプレクサは、前記第1命令タイプの前記第1命令の実行中、前記第2入力を選択するように構成されている、前記第2マルチプレクサと、
を含む、請求項17に記載の方法。
【請求項19】
前記第1命令が、表面法線ベクトルおよび視線ベクトルを受信しそれにより画像のピクセルに対してシェーディング効果を適用するのに用いる輝度値を計算するように構成されている、1マイナス・ドット積命令であって、前記表面法線ベクトルおよび視線ベクトルの各々が、x、yおよびzの値を含み、前記1マイナス・ドット積命令の実行が、
前記ベクトル浮動小数点実行ユニットの第1、第2および第3処理レーンそれぞれにおいて、前記表面法線ベクトルおよび視線ベクトルの前記x、yおよびzの値それぞれを乗算することと、
前記ベクトル浮動小数点実行ユニットの前記第1、第2および第3処理レーンの各々をネゲートすることと、
前記ベクトル浮動小数点実行ユニットの第4処理レーンを強制的に1.0値にすることと、
前記輝度値を生成するべく、前記第1、第2、第3および第4処理レーンを合計することと、
を含む、請求項12に記載の方法。
【請求項20】
前記第1、第2および第3処理レーンをネゲートすることが、前記表面法線ベクトルおよび視線ベクトルのx、yおよびzの値それぞれの乗算より前に、前記表面法線ベクトルおよび視線ベクトルのうちの1つのx、yおよびzの値それぞれをネゲートすることを含む、請求項19に記載の方法。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate


【公開番号】特開2010−40041(P2010−40041A)
【公開日】平成22年2月18日(2010.2.18)
【国際特許分類】
【出願番号】特願2009−163503(P2009−163503)
【出願日】平成21年7月10日(2009.7.10)
【出願人】(390009531)インターナショナル・ビジネス・マシーンズ・コーポレーション (4,084)
【氏名又は名称原語表記】INTERNATIONAL BUSINESS MASCHINES CORPORATION
【Fターム(参考)】