(57)【要約】【課題】複数のより小さい直接メモリ・アクセス転送の効率を改善する機構を提供すること。【解決手段】この機構は、１つの入力バッファおよび小さい結果バッファまたはいくつかの一時変数を使用して、一時的に計算結果を格納する。この機構は、入力バッファ内のデータのセグメントに対して計算を実行し、結果を一時結果バッファに格納する。次に、この機構は、結果をコピーして入力バッファに戻す。したがって、この機構は、入力バッファを、入力バッファと結果バッファとの両方として使用する。次に、この機構は、入力バッファのうちで計算結果を含むセグメントに対して直接メモリ・アクセス転送を実行し、次に、入力バッファの次のセグメントに対して計算を実行する。次に、この機構は、入力バッファ全体が処理され終えるまで、このプロセスを繰り返す。【選択図】図８
2010146549.tif 000002
【特許請求の範囲】
【請求項１】
データをメイン・メモリから入力バッファにロードするために直接メモリ・アクセス転送を実行することと、
第１結果データ・セグメントを生成するために前記入力バッファ内の第１データ・セグメントに対して少なくとも１つの計算を実行することと、
前記第１結果データ・セグメントを前記入力バッファに戻して格納することと、
前記第１結果データ・セグメントを前記入力バッファから前記メイン・メモリに格納するために直接メモリ・アクセス転送を開始することと
を含む、改善された直接メモリ・アクセス転送のための、データ処理システム内の方法。
【請求項２】
前記第１結果データ・セグメントを前記入力バッファに戻して格納することが、
前記第１結果データ・セグメントを一時結果バッファに格納することと、
前記第１結果データ・セグメントを前記一時結果バッファから前記入力バッファにコピーすることと
を含む、請求項１に記載の方法。
【請求項３】
前記一時結果バッファおよび前記入力バッファが、synergisticprocessing elementに関連するローカル・ストアに格納される、請求項２に記載の方法。
【請求項４】
前記一時結果バッファが、１つまたは複数のレジスタを含む、請求項２に記載の方法。
【請求項５】
現在の結果データ・セグメントを生成するために、以前の結果データ・セグメントを前記入力バッファから前記メイン・メモリに格納するための直接メモリ・アクセス転送と同時に、現在のデータ・セグメントに対する少なくとも１つの計算を実行すること
をさらに含む、請求項１に記載の方法。
【請求項６】
前記現在の結果データ・セグメントを前記入力バッファに戻して格納することと、
前記現在の結果データ・セグメントを前記入力バッファから前記メイン・メモリに格納するために直接メモリ・アクセス転送を開始することと
をさらに含む、請求項５に記載の方法。
【請求項７】
前記現在のデータ・セグメントが前記入力バッファ内の最後のデータ・セグメントであることに応答して、前記入力バッファを再利用すべきかどうかを判定すること
をさらに含む、請求項６に記載の方法。
【請求項８】
前記入力バッファを再利用することの判定に応答して、以前の結果データ・セグメントを格納するための直接メモリ・アクセス転送の状況をチェックすることと、
以前の結果データ・セグメントを格納するためのすべての直接メモリ・アクセス転送が終了することに応答して、後続データをメイン・メモリから前記入力バッファにロードするために直接メモリ・アクセス転送を実行することと
をさらに含む、請求項７に記載の方法。
【請求項９】
データをメイン・メモリから入力バッファにロードするために直接メモリ・アクセス転送を実行することと、
第１結果データ・セグメントを生成するために前記入力バッファ内の第１データ・セグメントに対して少なくとも１つの計算を実行することと、
前記第１結果データ・セグメントを前記入力バッファに戻して格納することと、
前記第１結果データ・セグメントを前記入力バッファから前記メイン・メモリに格納するために直接メモリ・アクセス転送を開始することと
をコンピューティング・デバイスに実行させるプログラム。
【請求項１０】
プロセッサと、
前記プロセッサに結合されたメモリであって、前記プロセッサによって実行される時に、
データをメイン・メモリから入力バッファにロードするために直接メモリ・アクセス転送を実行することと、
第１結果データ・セグメントを生成するために前記入力バッファ内の第１データ・セグメントに対して少なくとも１つの計算を実行することと、
前記第１結果データ・セグメントを前記入力バッファに戻して格納することと、
前記第１結果データ・セグメントを前記入力バッファから前記メイン・メモリに格納するために直接メモリ・アクセス転送を開始することと
を前記プロセッサに実行させる命令を含むメモリと
を含む装置。
【請求項１１】
前記第１結果データ・セグメントを前記入力バッファに戻して格納することが、
前記第１結果データ・セグメントを一時結果バッファに格納することと、
前記第１結果データ・セグメントを前記一時結果バッファから前記入力バッファにコピーすることと
を含む、請求項１０に記載の装置。
【請求項１２】
前記命令が、さらに、
現在の結果データ・セグメントを生成するために、以前の結果データ・セグメントを前記入力バッファから前記メイン・メモリに格納するための直接メモリ・アクセス転送と同時に、現在のデータ・セグメントに対する少なくとも１つの計算を実行すること、
前記現在の結果データ・セグメントを前記入力バッファに戻して格納することと、
前記現在の結果データ・セグメントを前記入力バッファから前記メイン・メモリに格納するために直接メモリ・アクセス転送を開始することと
を前記プロセッサに実行させる、請求項１０に記載の装置。
【請求項１３】
前記命令が、さらに、
前記現在のデータ・セグメントが前記入力バッファ内の最後のデータ・セグメントであることに応答して、前記入力バッファを再利用すべきかどうかを判定すること、
前記入力バッファを再利用することの判定に応答して、以前の結果データ・セグメントを格納するための直接メモリ・アクセス転送の状況をチェックすることと、
以前の結果データ・セグメントを格納するためのすべての直接メモリ・アクセス転送が終了することに応答して、後続データをメイン・メモリから前記入力バッファにロードするために直接メモリ・アクセス転送を実行することと
を前記プロセッサに実行させる、請求項１０に記載の装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本願は、全般的には改善されたデータ処理装置および方法に関し、より具体的には、CellBroadband Engine（商標）プロセッサでのプログラミングに関する複数のより小さい直接メモリ・アクセス転送効率を改善する装置および方法に関する。
【背景技術】
【０００２】
Cell Broadband Engine（商標）アーキテクチャは、適度な性能の汎用PowerArchitecture（Ｒ）コアを、たとえばマルチメディア・アプリケーションおよびベクトル処理アプリケーションを大幅に加速する能率的にされたコプロセッシング要素と組み合わせる。ＳＰＥ（synergisticprocessing element）と呼ばれるコプロセッシング要素は、多数の形の専用計算を大幅に加速する。Cell Broadband Engine（商標）（Cell/B.E.（商標））プロセッサは、コンピュータ・ゲームから、地震データ処理、生物情報科学、グラフ処理その他などのさまざまなアプリケーション領域の多数の計算集中型アプリケーションまでの広い範囲の応用例に低コストおよび高性能を提供する単一チップ・マルチコア・アーキテクチャである。CELLBROADBAND ENGINEおよびCELL/B.E.は、米国、他の国、またはその両方でのSony Computer Entertainment, Inc.社の商標である。POWERARCHITECTUREは、米国、他の国、またはその両方でのIBM Corporation社の商標である。
【０００３】
Cell/B.E.（商標）アーキテクチャによって提供される１つの特徴は、たとえばそれぞれがキャッシュではなくそれ自体のローカル・ストア（ＬＳ）を使用する、８つのＳＰＥ（synergisticprocessing element）の使用である。これは、Cell/B.E.（商標）プログラマが、メイン共用メモリとローカル・ストアとの間でデータまたは結果あるいはその両方を転送するのに直接メモリ・アクセス（ＤＭＡ）命令を明示的に使用することを要求する。この特徴は、Cell/B.E.（商標）プログラマにより高い柔軟性ならびにより高い複雑さを与える。
【０００４】
Cell/B.E.（商標）プログラマは、アプリケーションの実際の性能に大きく影響するＬＳ使用の効率を考慮しなければならない。ＬＳの効率的な使い方は、Cell/B.E.（商標）プログラマが考慮しなければならない非常に重要な問題である。各ＬＳの限られた空間に起因して、メイン・メモリとＬＳとの間で行き来する頻繁なＤＭＡ転送を実行することが一般的である。したがって、ＤＭＡ転送実行の戦略が、アプリケーションの性能にクリティカルである可能性がある。
【０００５】
現在使用されている１つの一般的な技法を、「ダブル・バッファリング」と呼ぶ。ダブル・バッファリングの基本的なアイデアは、２つのバッファの間で計算を切り替え、したがってバッファの一方に対してＤＭＡ転送を実行すると同時に他方に対して計算を実行することによって、ＤＭＡ転送待ち時間を隠蔽することである。計算限界のあるアプリケーションについて、この技法は、ＤＭＡ転送待ち時間を効果的に隠蔽することができる。
【０００６】
それでも、メモリ限界のある多数のアプリケーションがあり、この場合に、アプリケーションの性能は、各ＳＰＥの計算能力ではなく、ＤＭＡ転送帯域幅によって制限される。したがって、ＤＭＡ転送で浪費されるすべての時間が、アプリケーションの性能に悪影響する可能性がある。よりよい性能および効率を得るために、プログラマは、できる限り大きい転送サイズを伴ってできる限り少数のＤＭＡ転送を実行することを試みる場合がある。しかし、多数の計算アルゴリズムに起因して、複数のより小さいＤＭＡ転送を避けることができず、ダブル・バッファリングが性能を改善するための唯一の技法になる場合がある。
【発明の概要】
【発明が解決しようとする課題】
【０００７】
本発明の目的は、Cell Broadband Engineプロセッサでのプログラミングに関する複数のより小さい直接メモリ・アクセス転送効率を改善する装置および方法を提供することである。
【課題を解決するための手段】
【０００８】
１つの例示的実施形態では、改善された直接メモリ・アクセス転送のための、データ処理システム内の方法が提供される。この方法は、データをメイン・メモリから入力バッファにロードするために直接メモリ・アクセス転送を実行することと、第１結果データ・セグメントを生成するために入力バッファ内の第１データ・セグメントに対して少なくとも１つの計算を実行することと、第１結果データ・セグメントを入力バッファに戻して格納することと、第１結果データ・セグメントを入力バッファからメイン・メモリに格納するために直接メモリ・アクセス転送を開始することとを含む。
【０００９】
他の例示的実施形態では、コンピュータ記録可能プログラムを有するコンピュータ使用可能媒体またはコンピュータ可読媒体を含むコンピュータ・プログラム製品が提供される。コンピュータ可読プログラムは、コンピューティング・デバイス上で実行される時に、コンピューティング・デバイスに、方法の例示的実施形態に関して上で概要を示した動作のうちのさまざまな動作またはその組合せを実行させる。
【００１０】
もう１つの例示的実施形態では、システム／装置が提供される。このシステム／装置は、１つまたは複数のプロセッサと、１つまたは複数のプロセッサに結合されたメモリとを含む。メモリは、命令を含むことができ、この命令は、１つまたは複数のプロセッサによって実行される時に、方法の例示的実施形態に関して上で概要を示した動作のうちのさまざまな動作またはその組合せを１つまたは複数のプロセッサに実行させる。
【００１１】
本発明の上記および他の特徴および利益は、本発明の例の実施形態の次の詳細な説明で説明され、あるいは、それに鑑みて当業者に明白になる。
【００１２】
本発明ならびに本発明の使用の好ましい態様および本発明のさらなる目的および利益は、添付図面と共に読まれる時の例示的実施形態の次の詳細な説明を参照することによって最もよく理解される。
【図面の簡単な説明】
【００１３】
【図１】本発明の諸態様を実施できるデータ処理システムを示す例示的ブロック図である。
【図２】直接メモリ・アクセス転送技法を示す図である。
【図３】ダブル・バッファリングを使用する直接メモリ・アクセス転送技法を示す図である。
【図４】例示的実施形態に従って一時結果バッファを使用する直接メモリ・アクセス転送技法を示す図である。
【図５】ダブル・バッファリングを使用する直接メモリ・アクセス転送を使用するコードの例を示す図である。
【図６】ダブル・バッファリングを使用する直接メモリ・アクセス転送を使用するコードの例を示す図である。
【図７】例示的実施形態による一時変数を使用する直接メモリ・アクセス転送を使用するコードの例を示す図である。
【図８】例示的実施形態によるさまざまな行列サイズおよび計算に関する性能改善を示す表である。
【図９】例示的実施形態による一時結果バッファを用いる直接メモリ・アクセス転送の動作を示す流れ図である。
【発明を実施するための形態】
【００１４】
例示的実施形態は、複数のより小さい直接メモリ・アクセス転送の効率を改善する機構を提供する。この機構は、ダブル・バッファリング技法が通常使用されるすべてのアプリケーションに適用することができる。この機構は、１つの入力バッファおよび小さい結果バッファまたはいくつかの一時変数を使用して、一時的に計算結果を格納する。この機構は、入力バッファ内のデータのセグメントに対して計算を実行し、結果または中間結果を一時結果バッファまたは一時変数に格納する。次に、この機構は、結果を入力バッファに戻ってコピーするか、結果を入力バッファに直接に格納する。したがって、この機構は、入力バッファを、入力バッファと結果バッファとの両方として使用する。
【００１５】
次に、この機構は、入力バッファのうちで計算結果を含むセグメントに対して直接メモリ・アクセス転送を実行し、次に、入力バッファの次のセグメントに対して計算を実行する。次に、この機構は、入力バッファ全体が処理され終えるまで、このプロセスを繰り返す。この機構は、計算および直接メモリ・アクセス転送のプロセスの間に、直接メモリ・アクセス状況チェックを実行しない。この機構は、入力バッファを再利用する必要がある時に、直接メモリ・アクセス転送が終了したかどうかをチェックするのみである。
【００１６】
この機構は、ローカル・ストア内の余分なコピー動作を実行するが、ローカル・ストア内のコピーのオーバーヘッドは、直接メモリ・アクセス転送状況をチェックし、直接メモリ・アクセス転送が終了するのを待つことよりも小さい。実際に、この機構は、余分なコピーを行う必要がない場合がある。というのは、いくつかの複雑な計算について、この機構が、中間結果を格納するのに一時バッファを単純に使用し、最終結果を一時結果バッファではなく入力バッファに戻って直接に置くことができるからである。したがって、この機構は、限られた、より小さいローカル・ストア空間を使用するだけではなく、よりよい性能をももたらす。
【００１７】
例示的実施形態を、分散データ処理環境、単一のデータ処理デバイス、または類似物を含む多数の異なるタイプのデータ処理環境で利用することができる。例示的実施形態の特定の要素および機能性の説明に関する文脈を提供するために、図１を、下で、例示的実施形態の例示的態様を実施できる例示的環境として提供する。図１に従う説明は、主に単一のデータ処理デバイス実施態様に焦点を合わせたものであるが、これは、例示にすぎず、本発明の特徴に関する限定を述べまたは暗示することは意図されていない。逆に、例示的実施形態は、分散データ処理環境、グリッド・コンピューティング環境などを含むことが意図されている。
【００１８】
図１は、本発明の諸態様を実施できるデータ処理システムの例示的ブロック図である。図１に示された例示的データ処理システムは、Cell Broadband Engine（商標）（Cell/B.E.（商標））データ処理システムの例である。Cell/B.E.（商標）プロセッサが、本発明の好ましい実施形態の説明で使用されるが、次の説明を読んだ時に当業者にすぐに明白になるように、本発明は、それに限定されない。
【００１９】
図１に示されているように、Cell/B.E.（商標）プロセッサ１００は、プロセッサ（ＰＰＵ）１１６とそのＬ１キャッシュ１１２およびＬ２キャッシュ１１４を有するＰＰＥ（powerprocessor element）１１０と、複数のＳＰＥ（synergistic processor element）１２０〜１３４とを含み、ＳＰＥ  １２０〜１３４のそれぞれは、それ自体のＳＰＵ（synergisticprocessor unit）１４０〜１５４、メモリ・フロー・コントロール１５５〜１６２、ローカル・メモリまたはストア（ＬＳ）１６３〜１７０、およびバス・インターフェース・ユニット（ＢＩＵユニット）１８０〜１９４を含み、ＢＩＵユニット  １８０〜１９４は、たとえば、直接メモリ・アクセス（ＤＭＡ）、メモリ管理ユニット（ＭＭＵ）、およびバス・インターフェース・ユニットの組合せとすることができる。高帯域幅内部要素相互接続バス（ＥＩＢ）１９６、バス・インターフェース・コントローラ（ＢＩＣ）１９７、およびメモリ・インターフェース・コントローラ（ＭＩＣ）１９８も設けられる。
【００２０】
ＬＳ  １６３〜１７０は、物理的にはＳＰＵ  １４０〜１５４に結合された小さいメモリとして提供できる大きいメモリ・マップの非コヒーレント・アドレッシング可能部分である。ＬＳ  １６３〜１７０を、異なるアドレス空間にマッピングすることができる。これらのアドレス領域は、非エイリアス構成で連続的である。ＬＳ  １６３〜１７０は、下でより詳細に説明するSPU Identification Registerを介するなど、そのアドレス位置によって、それに対応するＳＰＵ  １４０〜１５４およびＳＰＥ  １２０〜１３４に関連付けられる。システム内のすべてのリソースは、ローカル・ストアが動作のセキュア・モードにされない限りＬＳ  １６３〜１７０を読み取り、これに書き込む能力を有し、セキュア・モードの場合には、それに関連するＳＰＵだけが、ＬＳ  １６３〜１７０またはＬＳ  １６３〜１７０の指定された保護された部分にアクセスすることができる。
【００２１】
Cell/B.E.（商標）プロセッサ１００は、図１に示された要素のそれぞれを単一のマイクロプロセッサ・チップ上に設けることができるように、システムオンアチップとすることができる。さらに、Cell/B.E.（商標）プロセッサ１００は、ＳＰＵのそれぞれがシステム内の他のＳＰＵのそれぞれとは異なる命令を受け取ることができる、異種処理環境である。さらに、ＳＰＵの命令セットは、ＰＰＵの命令セットとは異なり、たとえば、ＰＰＵは、縮小命令セット・コンピュータ（ＲＩＳＣ）ベースの命令を実行することができるが、ＳＰＵは、ベクトル化された命令を実行する。
【００２２】
ＳＰＥ  １２０〜１３４は、互いに結合され、ＥＩＢ  １９６を介してＬ２キャッシュ１１４に結合される。さらに、ＳＰＥ  １２０〜１３４は、ＥＩＢ  １９６を介してＭＩＣ  １９８およびＢＩＣ  １９７に結合される。ＭＩＣ  １９８は、共用メモリ１９９への通信インターフェースを提供する。ＢＩＣ  １９７は、Cell/B.E.（商標）プロセッサ１００と他の外部バスおよびデバイスとの間の通信インターフェースを提供する。
【００２３】
ＰＰＥ  １１０は、デュアル・スレッド式ＰＰＥ  １１０である。このデュアル・スレッド式ＰＰＥ  １１０と８つのＳＰＥ  １２０〜１３４との組合せは、Cell/B.E.（商標）プロセッサ１００を、１０個の同時スレッドおよび１２８個を超える保留中のメモリ要求を処理できるものにする。ＰＰＥ  １１０は、他の８つのＳＰＥ  １２０〜１３４のコントローラとして働き、ＳＰＥ  １２０〜１３４は、計算作業負荷のほとんどを処理する。ＰＰＥ  １１０を、従来のオペレーティング・システムを実行するのに使用することができ、ＳＰＥ  １２０〜１３４は、たとえばベクトル化された浮動小数点コード実行を実行する。
【００２４】
ＳＰＥ  １２０〜１３４は、ＳＰＵ  １４０〜１５４、ＭＦＣ  １５５〜１６２、ＬＳ  １６３〜１７０、およびＢＩＵユニット  １８０〜１９４を含む。ＬＳ  １６３〜１７０は、１つの例示的実施形態で、２５６ＫＢの命令およびデータ・メモリを含み、このメモリは、ＰＰＥ  １１０に可視であり、ソフトウェアによって直接にアドレッシングすることができる。
【００２５】
ＰＰＥ  １１０は、ＳＰＥ  １２０〜１３４に小さいプログラムまたはスレッドをロードし、複雑な動作の各ステップを処理するためにＳＰＥを一緒にチェーンすることができる。たとえば、Cell/B.E.（商標）プロセッサ１００を組み込んだセットトップ・ボックスは、ＤＶＤ読取り、ビデオおよびオーディオ復号、ならびに表示用のプログラムをロードすることができ、データは、最終的に出力ディスプレイで終えられるまで、ＳＰＥからＳＰＥへと渡される。４ＧＨｚで、各ＳＰＥ  １２０〜１３４は、理論的に３２ＧＦｌｏｐｓの性能を有し、ＰＰＥ  １１０は、類似するレベルの性能を有する。
【００２６】
ＭＦＣ  １５５〜１６２は、システムの残りおよび他の要素への、ＳＰＵのためのインターフェースとして働く。ＭＦＣ  １５５〜１６２は、データ転送、保護、ならびにメイン・ストレージとＬＳ  １６３〜１７０との間の同期化のための主機構を提供する。論理的に、プロセッサ内のＳＰＵごとに１つのＭＦＣがある。いくつかの実施態様は、複数のＳＰＵの間で単一のＭＦＣのリソースを共用することができる。その場合に、ＭＦＣのために定義されたすべてのファシリティおよびコマンドが、各ＳＰＵのソフトウェアにとって独立に見えなければならない。ＭＦＣを共用することの影響は、実施態様依存のファシリティおよびコマンドに制限される。
【００２７】
図２に、直接メモリ・アクセス転送技法を示す。ＳＰＥ（synergisticprocessing element）２１０は、メイン・メモリ２５０から入力バッファ２２０にデータをロードするために直接メモリ・アクセス（ＤＭＡ）転送を実行する。次に、ＳＰＥ  ２１０は、入力バッファ２２０内のデータ・セグメントに対して計算を実行し、結果を結果バッファ２３０に格納する。たとえば、ＳＰＥ  ２１０は、結果データ・セグメント２３２を生成するためにデータ・セグメント２２２に対して計算を実行し、結果データ・セグメント２３４を生成するためにデータ・セグメント２２４に対して計算を実行する。入力バッファ２２０および結果バッファ２３０を、ＳＰＥ  ２１０に関連するローカル・ストアの一部とすることができる。たとえば、ＳＰＥ  ２１０を、ＳＰＥ  １２０〜１３４のうちの１つとすることができ、入力バッファ２２０および結果バッファ２３０を、図１のＬＳ  １６３〜１７０のうちの１つに含めることができる。
【００２８】
図２に示された例では、次に、ＳＰＥ  ２１０は、結果バッファ２３０からメイン・メモリ２５０に結果を格納するためにＤＭＡ転送を実行する。ＳＰＥ  ２１０は、次のステップの計算のためにデータを準備するために、結果バッファ２３０からメイン・メモリ２５０内の異なる位置に結果データ・セグメントを転送することができる。したがって、ＳＰＥ  ２１０は、複数のより小さいＤＭＡ転送または、結果バッファ２３０からメイン・メモリ２５０への複数のより小さいＤＭＡ転送からなるＤＭＡリストを使用する単一のＤＭＡ動作を実行することができる。どちらの場合でも、ＳＰＥ  ２１０は、比較的より大きい結果バッファを使用する。
【００２９】
Cell/B.E.（商標）プログラマは、アプリケーションの実際の性能に大きく影響するＬＳ使用の効率を考慮しなければならない。ＬＳの効率的な使い方は、Cell/B.E.（商標）プログラマが考慮しなければならない非常に重要な問題である。各ＬＳの限られた空間に起因して、メイン・メモリとＬＳとの間で行き来する頻繁なＤＭＡ転送を実行することが一般的である。したがって、ＤＭＡ転送実行の戦略が、アプリケーションの性能にクリティカルである可能性がある。
【００３０】
現在使用されている１つの一般的な技法を、「ダブル・バッファリング」と呼ぶ。ダブル・バッファリングの基本的なアイデアは、２つのバッファの間で計算を切り替え、したがってバッファの一方に対してＤＭＡ転送を実行すると同時に他方に対して計算を実行することによって、ＤＭＡ転送待ち時間を隠蔽することである。計算限界のあるアプリケーションについて、この技法は、ＤＭＡ転送待ち時間を効果的に隠蔽することができる。
【００３１】
図３に、ダブル・バッファリングを使用する直接メモリ・アクセス転送技法を示す。ＳＰＥ  ３１０は、メイン・メモリ３５０から入力バッファ３２０へデータをロードするためにＤＭＡ転送を実行する。次に、ＳＰＥ  ３１０は、入力バッファ３２０内のデータ・セグメントに対して計算を実行する。図示の例では、ＳＰＥ  ３１０は、結果バッファＡ  ３３０への結果の格納と結果バッファＢ  ３４０への結果の格納との間で交番する。たとえば、ＳＰＥ  ３１０は、結果バッファＡ  ３３０内の結果データ・セグメント３３２を生成するためにデータ・セグメント３２２に対する計算を実行し、結果バッファＢ  ３４０内の結果データ・セグメント３４４を生成するためにデータ・セグメント３２４に対する計算を実行する。
【００３２】
図３に示された例では、次に、ＳＰＥ  ３１０は、結果を結果バッファＡ  ３３０および結果バッファＢ  ３４０からメイン・メモリ３５０に格納するためにＤＭＡ転送を実行する。ＳＰＥ  ３１０は、次のステップの計算のためにデータを準備するために、結果データ・セグメントを結果バッファＡ  ３３０および結果バッファＢ  ３４０からメイン・メモリ３５０内の異なる位置に転送することができる。ＳＰＥ  ３１０は、結果バッファＡ  ３３０と結果バッファＢ  ３４０との間で交番し、あるデータ・セグメントに対する計算を実行し、一方の結果バッファに結果を格納すると同時に、他方の結果バッファから結果データ・セグメントを格納するためにＤＭＡ転送を実行する。たとえば、ＳＰＥ  ３１０は、データ・セグメント３２４に対して計算を実行し、結果データ・セグメント３４４を結果バッファＢ  ３４０に格納すると同時に、結果バッファＡ  ３３０からメイン・メモリ３５０への結果データ・セグメント３３２のＤＭＡ転送を実行することができる。次に、ＳＰＥ  ３１０は、次のデータ・セグメントに対して次の計算を実行し、結果を結果バッファＡに格納すると同時に、結果データ・セグメント３４４を結果バッファＢ  ３４０からメイン・メモリ３５０に格納するためにＤＭＡ転送を実行することができる。したがって、ＳＰＥ  ３１０は、結果バッファＡ  ３３０および結果バッファＢ  ３４０からメイン・メモリ３５０への複数のより小さいＤＭＡ転送を実行することができる。
【００３３】
メモリ限界のある多数のアプリケーションがあり、この場合に、アプリケーションの性能は、各ＳＰＥの計算能力ではなく、ＤＭＡ転送帯域幅によって制限される。さらに、ダブル・バッファリングの短所は、ＳＰＥが、ＤＭＡ転送の状況をチェックし、ＤＭＡ転送が終了した時にのみバッファを再利用しなければならないことである。これは、同期化のための余分なオーバーヘッドを導入する。したがって、例示的実施形態によれば、複数のより小さい直接メモリ・アクセス転送の効率を改善する機構が提供される。この機構は、通常はダブル・バッファリング技法が適用されるすべてのアプリケーションに適用することができる。
【００３４】
図４に、例示的実施形態に従って一時結果バッファを使用する直接メモリ・アクセス転送技法を示す。ＳＰＥ  ４１０は、入力および結果バッファ４２０と一時結果バッファ４３０とを含む。ＳＰＥ  ４１０は、メイン・メモリ４５０から入力および結果バッファ４２０にデータをロードするためにＤＭＡ転送を実行する。次に、ＳＰＥ  ４１０は、入力および結果バッファ４２０内のデータ・セグメントに対して計算を実行する。図示の例では、ＳＰＥ  ４１０は、データ・セグメント４２４に対して計算を実行し、結果または中間結果を一時結果バッファ４３０内の結果データ・セグメント４３４に一時的に格納する。一時結果バッファ４３０は、ローカル・ストア内の小さい部分またはＳＰＥ  ４１０内の１つもしくは複数のレジスタとすることができる。次に、ＳＰＥ  ４１０は、結果データ・セグメント４３４を一時結果バッファ４３０から入力および結果バッファ４２０に戻ってコピーし、あるいは、中間結果を含む結果データ・セグメント４３４に対して別の計算を実行し、その結果を入力および結果バッファ４２０に置く。
【００３５】
図４に示された例では、次に、ＳＰＥ  ４１０は、結果を入力および結果バッファ４２０からメイン・メモリ４５０に格納するためにＤＭＡ転送を実行する。ＳＰＥ  ４１０は、実施されるアルゴリズムの性質に起因して、または次のステップの計算のためにデータを準備するために、結果データ・セグメントを入力および結果バッファ４２０からメイン・メモリ４５０内の異なる位置に転送することができる。ＳＰＥ  ４１０は、データ・セグメント４２４などの１つのデータ・セグメントに対して計算を実行し、結果を入力および結果バッファ４２０に戻して格納すると同時に、データ・セグメント４２２などの以前の結果データ・セグメントを入力および結果バッファ４２０からメイン・メモリ４５０に格納するためにＤＭＡ転送を実行することができる。したがって、ＳＰＥ  ４１０は、入力および結果バッファ４２０からメイン・メモリ４５０への複数のより小さいＤＭＡ転送を実行することができる。
【００３６】
次に、ＳＰＥ  ４１０は、入力バッファ全体が処理され終えるまで、このプロセスを繰り返す。ＳＰＥ  ４１０は、計算および直接メモリ・アクセス転送のプロセスの間に、直接メモリ・アクセス状況チェックを実行しない。ＳＰＥ  ４１０は、入力および結果バッファ４２０を再利用する必要がある時に、直接メモリ・アクセス転送が終了したかどうかをチェックするのみである。ＳＰＥ  ４１０は、ローカル・ストア内で余分なコピー動作を実行するが、ローカル・ストア内のコピーのオーバーヘッドは、直接メモリ・アクセス転送状況をチェックし、直接メモリ・アクセス転送が終了するのを待つことよりも小さい。実際に、ＳＰＥ  ４１０は、余分なコピーを行う必要がない場合がある。というのは、いくつかの複雑な計算について、ＳＰＥ  ４１０が、単純に、結果を一時結果バッファではなく入力バッファに戻って置くことができるからである。したがって、図４に示された一時結果バッファを使用するＤＭＡ転送は、限られた、より小さいローカル・ストア空間を使用するだけではなく、よりよい性能をももたらす。
【００３７】
当業者によって了解されるとおり、本発明を、システム、方法、またはコンピュータ・プログラム製品として実施することができる。したがって、本発明は、完全にハードウェアの実施形態、完全にソフトウェアの実施形態（ファームウェア、常駐ソフトウェア、マイクロコードなどを含む）、またはソフトウェア態様とハードウェア態様とを組み合わせた実施形態の形をとることができ、そのすべてが、本明細書で「回路」、「モジュール」、または「システム」と全般的に呼ばれる可能性がある。さらに、本発明は、媒体内で実施されるコンピュータ使用可能プログラム・コードを有する表現の任意の有形の媒体内で実施されるコンピュータ・プログラム製品の形をとることができる。
【００３８】
１つまたは複数のコンピュータ使用可能媒体またはコンピュータ可読媒体の任意の組合せを利用することができる。コンピュータ使用可能媒体またはコンピュータ可読媒体は、たとえば、電子、磁気、光学、電磁、赤外線、または半導体のシステム、装置、デバイス、または伝搬媒体とすることができるが、これらに限定はされない。コンピュータ可読媒体のより具体的な例（網羅的ではないリスト）は、１つまたは複数のワイヤを有する電気接続、ポータブル・コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ（ＲＡＭ）、読取り専用メモリ（ＲＯＭ）、消去可能プログラマブル読取り専用メモリ（ＥＰＲＯＭまたはフラッシュ・メモリ）、光ファイバ、ポータブル・コンパクト・ディスク読取り専用メモリ（ＣＤＲＯＭ）、光ストレージ・デバイス、インターネットもしくはイントラネットをサポートするものなどの伝送媒体、または磁気ストレージ・デバイスを含むはずである。コンピュータ使用可能媒体またはコンピュータ可読媒体を、紙またはその上にプログラムを印刷できる別の適切な媒体とすることすらできることに留意されたい。というのは、プログラムを、たとえば紙または他の媒体の光学スキャンを介して電子的に取り込み、その後、コンパイルするか解釈するか他の適切な形で処理し、必要な場合に、その後、コンピュータ・メモリに格納することができるからである。この文書の文脈で、コンピュータ使用可能媒体またはコンピュータ可読媒体は、命令実行システム、装置、またはデバイスによってまたはこれらと共に使用されるプログラムを含み、格納し、通信し、伝搬し、または搬送することができる任意の媒体とすることができる。コンピュータ使用可能媒体は、ベースバンド内または搬送波の一部としてのいずれかで、コンピュータ使用可能プログラム・コードをそれと共に実施される伝搬されるデータ信号を含むことができる。コンピュータ使用可能プログラム・コードを、無線、有線、光ファイバ・ケーブル、ラジオ周波数（ＲＦ）などを含むがこれらに限定はされない任意の適当な媒体を使用して伝送することができる。
【００３９】
本発明の動作を実行するコンピュータ・プログラム・コードを、Java（Ｒ）（商標）、Smalltalk（商標）、Ｃ＋＋、または類似物などのオブジェクト指向言語およびＣプログラミング言語または類似するプログラミング言語などの従来の手続き指向言語を含む１つまたは複数のプログラミング言語の任意の組合せで記述することができる。プログラム・コードは、完全にユーザのコンピュータ上で、部分的にユーザのコンピュータ上で、独立ソフトウェア・パッケージとして、部分的にユーザのコンピュータ上でおよび部分的にリモート・コンピュータ上で、または完全にリモート・コンピュータ上もしくはサーバ上で実行され得る。後者のシナリオでは、リモート・コンピュータを、ローカル・エリア・ネットワーク（ＬＡＮ）または広域ネットワーク（ＷＡＮ）を含む任意のタイプのネットワークを介してユーザのコンピュータに接続することができ、あるいは、接続を、外部コンピュータに対して行うことができる（たとえば、インターネット・サービス・プロバイダを使用してインターネットを介して）。
【００４０】
例示的実施形態を、下で、本発明の例示的実施形態による方法、装置（システム）、およびコンピュータ・プログラム製品の流れ図またはブロック図あるいはその両方を参照して説明する。流れ図またはブロック図あるいはその両方の各ブロックならびに流れ図またはブロック図あるいはその両方のブロックの組合せを、コンピュータ・プログラム命令によって実施できることを理解されたい。これらのコンピュータ・プログラム命令を、コンピュータまたは他のプログラマブル・データ処理装置のプロセッサを介して実行される命令が流れ図またはブロック図あるいはその両方の１つまたは複数のブロックで指定される機能／行為を実施する手段を作成するように、機械を作るために汎用コンピュータ、特殊目的コンピュータ、または他のプログラマブル・データ処理装置のプロセッサに供給することができる。
【００４１】
これらのコンピュータ・プログラム命令を、コンピュータ可読媒体に格納された命令が流れ図またはブロック図あるいはその両方の１つまたは複数のブロックで指定される機能／行為を実施する命令手段を含む製造品を作るように、特定の形で機能するようにコンピュータまたは他のプログラマブル・データ処理装置に指示することのできるコンピュータ可読媒体内に格納することもできる。
【００４２】
コンピュータ・プログラム命令を、コンピュータまたは他のプログラマブル装置で実行される命令が流れ図またはブロック図あるいはその両方の１つまたは複数のブロックで指定される機能／行為を実施するプロセスを提供するように、コンピュータ実施されるプロセスを作るために一連の動作ステップをコンピュータまたは他のプログラマブル装置上で実行させるためにコンピュータまたは他のプログラマブル・データ処理装置にロードすることもできる。
【００４３】
図面の流れ図およびブロック図は、本発明のさまざまな実施形態によるシステム、方法、およびコンピュータ・プログラム製品の可能な実施態様のアーキテクチャ、機能性、および動作を示す。これに関して、流れ図またはブロック図の各ブロックは、指定された論理機能（１つまたは複数）を実施する１つまたは複数の実行可能命令を含むモジュール、セグメント、またはコードの部分を表すことができる。いくつかの代替実施態様で、ブロック内に書き留められた機能が、図に書き留められた順序から外れて発生し得ることにも留意されたい。たとえば、連続して示される２つのブロックが、実際に、実質的に同時に実行される場合があり、あるいは、ブロックが、時々、用いられる機能性に応じて、逆の順序で実行される場合がある。ブロック図または流れ図あるいはその両方の各ブロックならびにブロック図または流れ図あるいはその両方のブロックの組合せを、指定された機能または行為を実行する特殊目的ハードウェアベースのシステムあるいは特殊目的ハードウェアおよびコンピュータ命令の組合せによって実施できることにも留意されたい。
【００４４】
図５および６に、ダブル・バッファリングを使用する直接メモリ・アクセス転送を使用するコードの例を示す。図５および６に示されたコードは、Cell/B.E.（商標）アーキテクチャ用の並列化された素因数分析高速フーリエ変換（ＰＦＡＦＦＴ）を示す。図７に、例示的実施形態による一時変数を使用する直接メモリ・アクセス転送を使用するコードの例を示す。図７に示されたコードは、Cell/B.E.（商標）アーキテクチャ用の同一の並列化されたＰＦＡＦＦＴ機能を実行するが、図７のコードは、より効率的であるだけではなく、より短くより単純でもある。入力バッファが長く、小さいＤＭＡ転送の回数が多いほど、性能がより大きく改善される。
【００４５】
図８は、例示的実施形態によるさまざまな行列サイズおよび計算に関する性能改善を示す表である。行列サイズおよび計算のそれぞれについて、図８に示された表は、ダブル・バッファリングを使用する計算の時間と対応する「新しい」時間を比較し、ここで、「新しい」時間は、たとえば図４に示された、入力／結果バッファおよび一時結果バッファを使用する。
【００４６】
２つの異なる戦略を使用するCell/B.E.（商標）データ処理システムでのＰＦＡＦＦＴの２つの実施態様があり、戦略の一方は、「３ステップＰＦＡＦＦＴ」であり、他方は「２ステップＰＦＡＦＦＴ」である。ＰＦＡＦＦＴを適用する２つのケースがあり、一方は、ベクトル化されたフォーマットの入力データを用い、他方は、ベクトル化されていないフォーマットの入力データを用いる。後者の場合に、ＰＦＡＦＦＴは、入力データをベクトル化されていないフォーマットからベクトル化されたフォーマットに変換し、その後、ＦＦＴ計算を行う必要があり、ＦＦＴ計算の後に、出力データをベクトル化されたフォーマットからベクトル化されていないフォーマットに変換する必要がある。「３ＳＷ」は、ベクトル化された入力データを伴う３ステップＰＡＦＦＴを表す。「３ＳＷＯ」は、ベクトル化された入力データを伴わない３ステップＰＡＦＦＴを表す。「２ＳＷ」は、ベクトル化された入力データを伴う２ステップＰＡＦＦＴを表し、同様に、「２ＳＷＯ」は、ベクトル化された入力データを伴わない２ステップＰＡＦＦＴを表す。
【００４７】
図９は、例示的実施形態による一時結果バッファを使用する直接メモリ・アクセス機構の動作を示す流れ図である。動作が開始され、この機構は、データをメイン・メモリから入力バッファにロードするために直接メモリ・アクセス（ＤＭＡ）転送を実行する（ブロック８０２）。次に、この機構は、入力バッファ内のデータのセグメントに対して計算を実行し（ブロック８０４）、結果を一時結果バッファに格納する（ブロック８０６）。次に、この機構は、結果を入力バッファに戻ってコピーする（ブロック８０８）。したがって、この機構は、入力バッファを入力バッファと結果バッファとの両方として使用する。代替実施形態では、あるいは計算が許容する時に、この機構は、一時結果バッファを使用せずに、結果を直接に入力／結果バッファに戻して格納することができる。
【００４８】
次に、この機構は、結果セグメントをメイン・メモリに転送する（ブロック８１０）。この機構は、転送されるデータ・セグメントが入力バッファ内の最後のセグメントであるかどうかを判定する（ブロック８１２）。セグメントが最後のセグメントでない場合には、動作は、ブロック８０４に戻って、次のデータ・セグメントに対する計算を実行する。ブロック８１０での転送は、ＤＭＡ転送である。したがって、ブロック８１０でのＤＭＡ転送が実行されつつある間に、この機構は、同時に次の計算を実行することができる。最後の計算だけについて、この機構は、メイン・メモリに戻るＤＭＡ転送の状況をチェックしなければならない。
【００４９】
ブロック８１２で、セグメントが入力バッファ内の最後のセグメントである場合に、この機構は、入力バッファを再利用する必要があるかどうかを判定する（ブロック８１４）。この機構が入力バッファを再利用する必要がない場合には、動作は終了する。この機構が、ブロック８１４で入力バッファを再利用する必要があると判定する場合に、この機構は、ＤＭＡ転送の状況をチェックし（ブロック８１６）、入力／結果バッファからメイン・メモリへのすべてのＤＭＡ転送が終了したかどうかを判定する（ブロック８１８）。ＤＭＡ転送のすべてが終了している場合には、動作は、ブロック８０２に戻って、メイン・メモリから入力バッファへの次のＤＭＡ転送を実行する。そうでない場合に、動作は、ブロック８１６に戻って、ＤＭＡ転送の状況をチェックする。
【００５０】
したがって、例示的実施形態は、複数のより小さい直接メモリ・アクセス転送の効率を改善する機構を提供する。この機構は、ダブル・バッファリング技法が通常使用されるすべてのアプリケーションに適用することができる。この機構は、１つの入力バッファおよび小さい結果バッファまたはいくつかの一時変数を使用して、一時的に計算結果を格納する。この機構は、入力バッファ内のデータのセグメントに対して計算を実行し、結果を一時結果バッファに格納する。次に、この機構は、結果を入力バッファに戻ってコピーする。したがって、この機構は、入力バッファを、入力バッファと結果バッファとの両方として使用する。
【００５１】
次に、この機構は、入力バッファのうちで計算結果を含むセグメントに対して直接メモリ・アクセス転送を実行し、次に、入力バッファの次のセグメントに対して計算を実行する（計算および直接メモリ・アクセス転送は、同時に実行される）。次に、この機構は、入力バッファ全体が処理され終えるまで、このプロセスを繰り返す。この機構は、計算および直接メモリ・アクセス転送のプロセスの間に、直接メモリ・アクセス状況チェックを実行しない。この機構は、入力バッファを再利用する必要がある時に、直接メモリ・アクセス転送が終了したかどうかをチェックするのみである。この機構は、ローカル・ストア内の余分なコピー動作を実行するが、ローカル・ストア内のコピーのオーバーヘッドは、直接メモリ・アクセス転送状況をチェックし、直接メモリ・アクセス転送が終了するのを待つことよりも小さい。
【００５２】
上で注記したように、例示的実施形態が、完全にハードウェアの実施形態、完全にソフトウェアの実施形態、またはハードウェア要素とソフトウェア要素との両方を含む実施形態の形をとることができることを了解されたい。１つの例の実施形態では、例示的実施形態の機構は、ソフトウェアまたはプログラム・コードで実施され、このソフトウェアまたはプログラム・コードは、ファームウェア、常駐ソフトウェア、マイクロコードなどを含むがこれらに限定はされない。
【００５３】
プログラム・コードを格納し、または実行し、あるいはその両方を行うのに適切なデータ処理システムは、システム・バスを介してメモリ要素に直接にまたは間接に結合される少なくとも１つのプロセッサを含む。メモリ要素は、プログラム・コードの実際の実行中に使用されるローカル・メモリ、バルク・ストレージ、および実行中にコードをバルク・ストレージから取り出さなければならない回数を減らすために少なくとも一部のプログラム・コードの一時的ストレージを提供するキャッシュ・メモリを含むことができる。
【００５４】
入出力デバイスまたはＩ／Ｏデバイス（キーボード、ディスプレイ、ポインティング・デバイスなどを含むがこれらに限定はされない）を、直接にまたは介在するＩ／Ｏコントローラを介してのいずれかでシステムに結合することができる。ネットワーク・アダプタをシステムに結合して、データ処理システムが介在する私有網または公衆網を介して他のデータ処理システム、リモート・プリンタ、またはリモート・ストレージ・デバイスに結合されるようになることを可能にすることもできる。モデム、ケーブル・モデム、およびイーサネット（Ｒ）・カードが、現在使用可能なタイプのネットワーク・アダプタのうちのごく少数である。
【００５５】
本発明の説明は、例示および説明のために提示されたのであって、網羅的であることまたは開示された形態での本発明に限定されることは意図されていない。多数の修正形態および変形形態が、当業者には明白であろう。実施形態は、本発明の原理および実用的応用例を最もよく説明するために、および当業者が企図される特定の使用に適するさまざまな変更を伴うさまざまな実施形態について本発明を理解することを可能にするために選択され、説明された。
【符号の説明】
【００５６】
１００  Cell/B.E.（商標）プロセッサ
１１０  ＰＰＥ（power processor element）
１１２  Ｌ１キャッシュ
１１４  Ｌ２キャッシュ
１１６  プロセッサ（ＰＰＵ）
１２０  ＳＰＥ（synergistic processor element）
１２２  ＳＰＥ（synergistic processor element）
１２４  ＳＰＥ（synergistic processor element）
１２６  ＳＰＥ（synergistic processor element）
１２８  ＳＰＥ（synergistic processor element）
１３０  ＳＰＥ（synergistic processor element）
１３２  ＳＰＥ（synergistic processor element）
１３４  ＳＰＥ（synergistic processor element）
１４０  ＳＰＵ（synergistic processor unit）
１４２  ＳＰＵ（synergistic processor unit）
１４４  ＳＰＵ（synergistic processor unit）
１４６  ＳＰＵ（synergistic processor unit）
１４８  ＳＰＵ（synergistic processor unit）
１５０  ＳＰＵ（synergistic processor unit）
１５２  ＳＰＵ（synergistic processor unit）
１５４  ＳＰＵ（synergistic processor unit）
１５５  メモリ・フロー・コントロール（ＭＦＣ）
１５６  メモリ・フロー・コントロール（ＭＦＣ）
１５７  メモリ・フロー・コントロール（ＭＦＣ）
１５８  メモリ・フロー・コントロール（ＭＦＣ）
１５９  メモリ・フロー・コントロール（ＭＦＣ）
１６０  メモリ・フロー・コントロール（ＭＦＣ）
１６１  メモリ・フロー・コントロール（ＭＦＣ）
１６２  メモリ・フロー・コントロール（ＭＦＣ）
１６３  ローカル・メモリまたはストア（ＬＳ）
１６４  ローカル・メモリまたはストア（ＬＳ）
１６５  ローカル・メモリまたはストア（ＬＳ）
１６６  ローカル・メモリまたはストア（ＬＳ）
１６７  ローカル・メモリまたはストア（ＬＳ）
１６８  ローカル・メモリまたはストア（ＬＳ）
１６９  ローカル・メモリまたはストア（ＬＳ）
１７０  ローカル・メモリまたはストア（ＬＳ）
１８０  バス・インターフェース・ユニット（ＢＩＵユニット）
１８２  バス・インターフェース・ユニット（ＢＩＵユニット）
１８４  バス・インターフェース・ユニット（ＢＩＵユニット）
１８６  バス・インターフェース・ユニット（ＢＩＵユニット）
１８８  バス・インターフェース・ユニット（ＢＩＵユニット）
１９０  バス・インターフェース・ユニット（ＢＩＵユニット）
１９２  バス・インターフェース・ユニット（ＢＩＵユニット）
１９４  バス・インターフェース・ユニット（ＢＩＵユニット）
１９６  高帯域幅内部要素相互接続バス（ＥＩＢ）
１９７  バス・インターフェース・コントローラ（ＢＩＣ）
１９８  メモリ・インターフェース・コントローラ（ＭＩＣ）
１９９  共用メモリ
２１０  ＳＰＥ（synergistic processing element）
２２０  入力バッファ
２２２  データ・セグメント
２２４  データ・セグメント
２３０  結果バッファ
２３２  結果データ・セグメント
２３４  結果データ・セグメント
２５０  メイン・メモリ
３１０  ＳＰＥ
３２０  入力バッファ
３２２  データ・セグメント
３２４  データ・セグメント
３３０  結果バッファＡ
３３２  結果データ・セグメント
３４０  結果バッファＢ
３４４  結果データ・セグメント
３５０  メイン・メモリ
４１０  ＳＰＥ
４２０  入力および結果バッファ
４２２  データ・セグメント
４２４  データ・セグメント
４３０  一時結果バッファ
４３４  結果データ・セグメント
４５０  メイン・メモリ
【図１】
2010146549.tif 000003
【図２】
2010146549.tif 000004
【図３】
2010146549.tif 000005
【図４】
2010146549.tif 000006
【図５】
2010146549.tif 000007
【図６】
2010146549.tif 000008
【図７】
2010146549.tif 000009
【図８】
2010146549.tif 000010
【図９】
2010146549.tif 000011