(57)【特許請求の範囲】
【請求項１】
メインメモリと、
前記メインメモリに記憶されるデータを使用するソフトウェアを実行するように設定された、多重のプロセシングコアと、
それぞれのプロセシングコアに付随するそれぞれ１つのローカルメモリと、
前記プロセシングコアと前記メインメモリの間を接続し、前記多重のプロセシングコアによる使用のため、前記データを前記メインメモリから事前に取得するように設定された、データストリーミングユニットと、
を有し、
前記データストリーミングユニットは、前記データを前記各ローカルメモリ内に記憶される循環バッファへ書き込み、前記データを当該巡回バッファから読み出すことにより、前記各ローカルメモリを介して各プロセッシングコアと前記データを交換するように構成される、ことを特徴とする、マルチプロセッサシステム。
【請求項２】
前記データストリーミングユニットが、前記プロセシングコアのために前記データを前記メインメモリ内に記憶するように設定される、ことを特徴とする請求項１に記載のマルチプロセッサシステム。
【請求項３】
前記データストリーミングユニットが、２つ以上の前記プロセシングコアのために実行される、前記メインメモリに対する同時アクセスを解決するように設定される調停回路を有する、ことを特徴とする請求項１に記載のマルチプロセッサシステム。
【請求項４】
前記データストリーミングユニットが、それぞれの前記プロセシングコアに対しそれぞれ１つのフロントエンドユニットを有し、前記フロントエンドユニットは、前記メインメモリ内のアドレスのそれぞれ１つのリストを前記プロセシングコアから受け取り、そして前記リストに従って前記メインメモリより前記データを事前取得するように設定される、ことを特徴とする請求項１に記載のマルチプロセッサシステム。
【請求項５】
少なくとも前記プロセシングコアと前記データストリーミングユニットが単一の半導体内に含まれる、ことを特徴とする請求項１に記載のマルチプロセッサシステム。
【請求項６】
前記巡回バッファは、前記ローカルメモリにおける第１の位置を指し示す読み取りポインタと、前記ローカルメモリにおける第２の位置を指し示す書き込みポインタとを備え、前記ローカルメモリにおける第１の位置へ前記データストリーミングユニットが前記メインメモリからデータを書き込み、前記ローカルメモリにおける第２の位置から前記データストリーミングユニットが前記メインメモリへデータを書き込み、前記巡回バッファは、前記読み込みポインタが前記書き込みポインタに到達する場合には、前記データの更なる取得は前記書き込みポインタが先行するまで延期されるように構成される、請求項１に記載のマルチプロセッサシステム。
【請求項７】
前記巡回バッファは、前記各ローカルメモリにおける次の位置を指し示すための前記プロセシングコアによって先行される現在要素ポインタを備え、前記各ローカルメモリにおける次の位置から前記プロセシングコアはデータを読み込む、請求項６に記載のマルチプロセッサシステム。
【請求項８】
マルチプロセッサシステムの多重プロセシングコア上で、メインメモリに記憶されるデータを使用するソフトウェアを実行するステップと、
前記多重プロセシングコアによる使用のため、前記プロセシングコアと前記メインメモリの間を接続するデータストリーミングユニットにより、前記データを前記メインメモリから事前に取得するステップと、
を有し、
前記データを事前に取得するステップは、各プロセシングコアに関連づけられる各ローカルメモリに記憶される巡回バッファへ前記データを書き込み、当該巡回バッファから前記データを読み込むことにより、前記各ローカルメモリを介して前記データストリーミングユニットと各プロセッシングコアとの間で前記データを交換するステップを含むことを特徴とする、データ処理方法。
【請求項９】
前記多重プロセシングコアのため前記データストリーミングユニットにより前記メインメモリ内に前記データを記憶するステップを有する、ことを特徴とする請求項８に記載のデータ処理方法。
【請求項１０】
前記データを事前に取得するステップは、２つ以上の前記プロセシングコアのために実行される前記メインメモリへの同時アクセスを解決するステップを有する、ことを特徴とする請求項８に記載のデータ処理方法。
【請求項１１】
前記データを事前に取得するステップは、前記メインメモリ内のアドレスのそれぞれ１つのリストをそれぞれのプロセシングコアからそれぞれ１つのフロントエンドユニットに提供するステップと、そして、前記メインメモリから前記フロントエンドユニットにより前記リストに従って事前に前記データを取得するステップと、を有することを特徴とする請求項８に記載のデータ処理方法。
【請求項１２】
少なくとも前記プロセシングコアと前記データストリーミングユニットは単一の半導体内に含まれる、ことを特徴とする請求項８に記載のデータ処理方法。
【請求項１３】
前記巡回バッファは、前記ローカルメモリにおける第１の位置を指し示す読み取りポインタと、前記ローカルメモリにおける第２の位置を指し示す書き込みポインタとを備え、前記ローカルメモリにおける第１の位置へ前記データストリーミングユニットが前記メインメモリからデータを書き込み、前記ローカルメモリにおける第２の位置から前記データストリーミングユニットが前記メインメモリへデータを書き込み、前記巡回バッファは、前記読み込みポインタが前記書き込みポインタに到達する場合には、前記データの更なる取得は前記書き込みポインタが先行するまで延期されるように構成される、請求項８に記載の方法。
【請求項１４】
前記巡回バッファは、前記各ローカルメモリにおける次の位置を指し示すための前記プロセシングコアによって先行される現在要素ポインタを備え、前記各ローカルメモリにおける次の位置から前記プロセシングコアはデータを読み込む、請求項１３に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般的にマルチプロセッサシステムに関し、特にマルチプロセッサシステムにおける共用資源の効率的使用のための方法及びシステムに関するものである。
【背景技術】
【０００２】
完全なマルチプロセッサシステムの実行、特に単一モノリシックデバイスにおける対称多重処理（ＳＭＰ）システムは、ＶＬＳＩデバイスの過密化と、リアルタイムのマシンビジョンのような複雑化するコンピュータ業務により、近年盛んになってきた。あるマルチプロセッサシステムでは、メモリ資源は複数のプロセッサに共用される。しかしこのような共用は、メモリのコヒーレンシー問題を引き起こし、性能のボトルネックとなる。
【０００３】
特許文献1は、それはここに参照され採り入れられるが、バスベースのキャッシュコヒーレンスプロトコルを使用して大規模ＳＭＰシステムの分散システム構造を開示している。分散システム構造は、アドレススイッチ、多重メモリサブシステム、及び、多重マスターデバイスを含み、プロセッサ、Ｉ／Ｏエージェント、又はコヒーレントなメモリアダプターのいずれかは、ノードコントローラにサポートされたノードの１組に編成される。ノードコントローラは１つのマスターデバイスからのトランザクションを受け取り、他の１つのマスターデバイスとして、又は、スレーブデバイスとして１つのマスターデバイスと通信し、そしてマスターデバイスから受け取ったトランザクションの順番の列を作る。コヒーレンシーの達成が時間と空間に配分されるため、ノードコントローラはキャッシュコヒーレンシーを維持する補助をする。更に、標準バスコントロールに対するトランザクションタグフォーマットが拡張され、一意のトランザクションタグがシステムを通して維持される。ある場合には、ノードコントローラにおいてトランザクションタグを保存するために、サイドバンド信号が干渉と再実行に使用される。
【０００４】
特許文献２は、それはここに参照され採り入れられるが、単一プログラムメモリを含む同一のプロセッサからなる並行マルチプロセッシング構造を持つＳＭＰシステムを開示している。プログラムアクセス調停ロジックは一度に１つの命令を単一の要求元ＣＰＵに供給する。共用メモリアクセス調停ロジックは、データを異なる同時アクセス可能なメモリバンクから供給し、又は複数のＣＰＵの中でアクセスを調停することができる。システムは、共用メモリの中の既定の１組のアドレスへの読み取りアクセスに続く既定数のメモリサイクルの期間、他の１つのＣＰＵによる１つのアドレスへのアクセスを禁止することによりアトミックな読み取り／修正／書込み命令をシミュレートしてもよい。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】米国特許７，５２９，７９９
【特許文献２】米国特許７，２３７，０７１
【発明の概要】
【０００６】
本発明のある実施形態では、メインメモリと多重のプロセシングコアを含むマルチプロセッサシステムを提供する。多重のプロセシングコアは、メインメモリに記憶されるデータを使用するソフトウェアを実行するように設定される。  データストリーミングユニットは、プロセシングコアとメインメモリの間を接続し、多重のプロセシングコアによる使用のため、データをメインメモリから事前に取得するように設定される。  
【０００７】
ある実施形態では、データストリーミングユニットが、プロセシングコアのためにデータをメインメモリ内に記憶するように設定される。ある実施形態では、データストリーミングユニットが、２つ以上のプロセシングコアのために実行される、メインメモリに対する同時アクセスを解決するように設定される調停回路を有する。
ある実施形態では、データストリーミングユニットが、それぞれのプロセシングコアに対し、メインメモリ内のアドレスのそれぞれ１つのリストをプロセシングコアから受け取り、リストに従ってメインメモリよりデータを事前取得するように設定される、それぞれ１つのフロントエンドユニットを有する。  
【０００８】
開示された実施形態では、それぞれのプロセシングコアに付随するそれぞれ１つのローカルメモリを有し、それぞれのプロセシングコアと対応するフロントエンドユニットは、それぞれのローカルメモリ経由でデータを交換するように設定される。
ある実施形態では、それぞれのプロセシングコアと対応するフロントエンドユニットは、アドレスのリストをそれぞれのローカルメモリ内に記憶される１つの循環バッファ内に維持するように設定される。ある実施形態では、少なくともプロセシングコアとデータストリーミングユニットが単一の半導体内に含まれる。
【０００９】
本発明のある実施形態によれば、メインメモリと多重のプロセシングコアを含むマルチプロセッサシステムが提供される。多重のプロセシングコアは、メインメモリに記憶されるデータを使用するソフトウェアを実行するように設定される。スクラッチパッドプロセスユニットは、プロセシングコアに接続し、そして、多重のプロセシングコアのために、２つ以上のプロセシングコアに同時に１つの所与のデータアイテムにアクセスさせる、ソフトウェアの選択された部分を実行するように設定される。
【００１０】
ある実施形態では、スクラッチパッドプロセスユニットが、２つ以上のプロセシングコアにアクセスされる所与のデータアイテムを記憶するための独自のメモリを有する。ある実施形態では、スクラッチパッドプロセスユニットが、スクラッチパッド命令をプロセシングコアから受信し、スクラッチパッド命令を調停し、そして、独自のメモリ内の調停されたスクラッチパッド命令を実行するように設定される。開示された実施形態では、少なくともプロセシングコアとスクラッチパッドプロセスユニットが単一半導体内に含まれる。
【００１１】
本発明のある実施形態によればさらに、あるデータ処理方法が提供される。その方法は、マルチプロセッサシステムの多重プロセシングコア上で、メインメモリに記憶されるデータを使用するソフトウェアを実行するステップと、多重プロセシングコアによる使用のため、プロセシングコアとメインメモリの間を接続するデータストリーミングユニットにより、データをメインメモリから事前に取得するステップと、を有する。
【００１２】
本発明のある実施形態によればさらに、あるデータ処理方法が提供される。その方法は、マルチプロセッサシステムの多重プロセシングコア上で、メインメモリに記憶されるデータを使用するソフトウェアを実行するステップと、多重プロセシングコアに接続し、プロセシングコアのために、２つ以上のプロセシングコアに同時に１つの所与のデータアイテムにアクセスさせる、ソフトウェアの選択された部分を実行する、スクラッチパッドプロセスユニットを使用するステップと、を有する。
本発明は、図を参照した本発明の実施形態の以下の詳細な説明により十分に理解されよう。
【図面の簡単な説明】
【００１３】
【図１】本発明の実施形態による、マルチプロセッサシステムの概略ブロック図である。
【図２】本発明の実施形態による、データストリーミングユニット（ＤＳＵ）の概略ブロック図である。
【図３】本発明の実施形態による、循環バッファの構造を示す概略図である。
【図４】本発明の実施形態による、ＤＳＵフロントエンドの構造の概略ブロック図である。
【図５】本発明の実施形態による、ＤＳＵフロントエンド内のバッファ管理ユニットの構造の概略ブロック図である。
【図６】本発明の実施形態による、ＤＳＵ調停回路の構造の概略ブロック図である。
【図７】本発明の実施形態による、スクラッチパッドユニット及びそれに接続するシステム要素の構造の概略ブロック図である。
【図８】本発明の実施形態による、スクラッチパッドコントローラの構造の概略ブロック図である。
【発明を実施するための形態】
【００１４】
（概論）
あるマルチプロセッサシステムは、単一の集積回路（システムオンチップ、ＳＯＣ）として実現される。ＳＯＣは典型的にローカルメモリユニットの１つ以上のインスタンスからなるが、ローカルメモリよりはるかに大規模な可能性のあるメインメモリは含まない。メインメモリは典型的に、１つ以上の集積回路により実現され、シーケンシャルな（バースト）アクセスに対し高帯域幅を許容するが、長いレイテンシを持つ。マルチプロセッサシステムにおいてこのようなメインメモリが複数のプロセッサにより共用される場合、メモリへのアクセス待ちの結果としての大幅な性能の劣化を避けるため、効率的な調停が行われなければならない。
【００１５】
本発明の実施形態は、共用メモリにアクセスする複数のプロセッサにより引き起こされた、性能ボトルネックを緩和する新規の方法を紹介する。本発明の実施形態によれば、マルチプロセッサシステムは、プロセッサコア（プロセシングコア）により必要とされる前にメインメモリからデータを取得するデータストリーミングユニット（ＤＳＵ）を有する。ＤＳＵは取得したデータをプロセッサコアに接続したローカルメモリに記憶し、そこではデータはプロセッサコアにより必要に応じてアクセス可能である。ＤＳＵはまた、ローカルメモリからメインメモリにデータを書込み可能である。
【００１６】
マルチプロセッサシステムに付随する他の問題は、２つ以上のプロセッサが同じメモリ位置にアクセスする場合に、メモリのコヒーレンシーを確実にすることである。マルチプロセッサシステムで実行されるある画像処理向けアルゴリズムでは、複数のプロセッサコアによるメインメモリ内の同じアドレスへのアクセスはまれであり、それは例えば、複数のプロセッサコアにより処理される画像領域から画像統計を集めるタスクにおいて発生する。それでもこのようなまれな場合でも、効率よく処理されないと性能のボトルネックを生じる。
【００１７】
本発明の実施形態はこのようなボトルネックを緩和する新規の方法を紹介する。開示された実施形態によれば、共用メモリ位置への全てのアクセスは、スクラッチ−パッドユニットにより取り扱われ、それは、専用プロセッサと小規模ローカルメモリからなり、共用メモリ位置にアクセスする並行タスクの実行用に最適化されたソフトウェアを実行する。クラッチ−パッドユニットは典型的にマルチプロセッサシステムのプロセッサコアにコプロセッサとして付属する。
【００１８】
（システムの記述）
図１は本発明の実施形態による、マルチプロセッサシステム１０の概略ブロック図である。マルチプロセッサシステム１０の全ての図示された要素は、１つの集積回路上に配置可能であり、システムオンチップを構成する。
マルチプロセッサシステム１０は、メインメモリ５００（「外部メモリ」とも呼ばれる）を有する。ある実施形態では、メインメモリ５００は、１つ以上の異なる集積回路からなり、マルチプロセッサＳＯＣの一部ではない。他の実施形態では、メインメモリとマルチプロセッサシステム１０の他の要素は同一のＳＯＣ内に配置される。更に他の実施形態では、メインメモリ５００は、複数の部品からなり、それらの幾つかはＳＯＣ内に配置され、幾つかは１つ以上の外部チップ内に配置される。以下の記載では、「外部メモリ」という言葉は、メインメモリに対して使用される。しかし本発明はＳＯＣに搭載されないメインメモリに限定されない。
【００１９】
ＳＯＣ内に配置されるメモリコントローラ４００は、外部メモリに対するアクセスを制御し、そしてある実施形態では、記憶リフレッシュ機構、及び他のメモリ制御機能を提供する。ある実施形態では、ローカルメモリユニット３００がそれぞれのプロセッサコア２００に付属する。それぞれのローカルメモリユニットは、例えばコードセグメントを充足させるため、メモリコントローラ４００経由で、ダイレクトメモリアクセス（ＤＭＡ）チャネルを使用して外部メモリ５００にアクセスしてもよい。
【００２０】
本発明の実施形態によれば、メインメモリ内の共用メモリ位置へのアクセスの結果としての性能劣化はデータストリーミングユニット（ＤＳＵ）２０００によって低減される。ＤＳＵ２０００は、ローカルメモリユニット３００（各プロセッサコアに１つ）に事前に、典型的にはプロセッサコア２００がそのデータにアクセスを必要とする時間より前に、外部メモリ５００からのデータを入れ、それにより外部メモリへのアクセス上の読み取り競合の結果としてのプロセッサコア２００の遅れを最小化する、ように構成されてもよい。同様に、ＤＳＵ２０００は、プロセッサコア２００によりローカルメモリユニット３００に書き込まれたデータを外部メモリ５００に送り、それにより外部メモリへのアクセスに対する書込み競合の結果としてのプロセッサコア２００の遅れを最小化してもよい。
【００２１】
ＤＳＵ２０００は、メモリコントローラ４００へのアクセスを支配するＤＳＵアービター２２００と、ＤＳＵフロントエンドユニット２１００からなり、ここで各フロントエンドユニットはそれぞれ１つのローカルメモリ３００とそれぞれ１つのプロセッサコア２００に接続する。
【００２２】
ある実施形態では、共用メモリ位置へのアクセスはスクラッチ−パッドユニット１０００により取り扱われ、それは、それぞれのプロセッサコア２００にそれぞれ接続する命令バッファ１３００を有する。スクラッチ−パッドユニット１０００は、1つ以上のスクラッチ−パッドＲＡＭ１１００と、1つ以上のスクラッチ−パッドコントローラ１２００を有し、それぞれのスクラッチ−パッドＲＡＭは、命令バッファ１３００にそれぞれのスクラッチ−パッドコントローラ１２００を経由して接続する。
【００２３】
典型的な実施形態では、命令バッファ１３００は、現在の命令が要求先クラッチ−パッドコントローラに対する調停に勝つまで、プロセッサコア２００により生成された命令を一時的に記憶する（命令に付随する標的アドレスに従って）。図１の実施形態では、（必須ではないが）、それぞれのプロセッサコア２００はそれぞれ専用の命令バッファ１３００に接続している。一度命令が命令バッファでバッファされると、バッファはバッファ済み命令に付随する標的アドレスに従って適切なスクラッチ−パッドコントローラ１２００にアクセスを要求する。アクセスが与えられると、命令はその命令バッファからそのスクラッチ−パッドコントローラに実行のため送られる。
【００２４】
スクラッチ−パッドユニット１０００は、共通する共用メモリマルチプロセッサタスクを、共通する共用メモリタスクを最適に実行するように接続されたスクラッチ−パッドコントローラ１２００が独立して実行することを許容し、それによりプロセッサコア２００の負荷を軽減し、効率的なメモリーロック機構を導入することによりメモリコヒーレンスを保証する。この技術は、メモリが物理的にロックされていないため効率的である。開示された技術は、読み取り−修正−書込みの完全なサイクルがコントローラによりアトミックに実行されることを保証する。
【００２５】
（データストリーミングユニット（ＤＳＵ））
図２は本発明の実施形態による、データストリーミングユニット（ＤＳＵ）２０００と、それに接続するメモリコントローラ４００、プロセッサコア２００、及びローカルメモリユニット３００を含むユニットの概略ブロック図である。
ＤＳＵ２０００は、それぞれのプロセッサコア２００とそれに付随するローカルメモリ３００にそれぞれサービスを提供する複数のＤＳＵフロントエンドユニット２１００、とＤＳＵフロントエンドユニット２１００により開始されたメモリアクセス要求を調停する単一のＤＳＵアービター２２００からなる。  
【００２６】
プロセッサコアは初期化において、ＤＳＵがデータをメモリからローカルメモリに移動するようにプログラムする。その後ＤＳＵ２０００はデータを外部メモリ５００からローカルメモリ３００に事前ロードして、外部メモリへの読み取りアクセスの競合を減少させ、そして結果的にマルチプロセッサシステム１０の性能を向上させる。同様にプロセッサコアは、ＤＳＵがデータをローカルメモリから外部メモリに移動するように事前プログラムし、外部メモリへの書込みアクセスの競合を減少させる。
【００２７】
この構成は、幾つかの理由で性能を向上させる。例えば、外部メモリ５００とのトラフィックは全てのトラフィックを知る単一のコントローラ（ＤＳＵアービター）により最適化可能である。更に、プロセッサコア２００は、必要なデータが事前に取得されているため、渋滞で失速せず、それによりデータアクセスのレイテンシを低下させる。
【００２８】
プロセッサコア２００による外部メモリ内のアドレスからの全ての読み取り動作は、外部メモリ５００からの対応する読み取り動作及びローカルメモリ３００への対応する書込み動作が終了した後に実行され、それらは共にＤＳＵフロントエンドユニット２１００により実行される。同様に、ローカルプロセッサによる外部メモリ内のアドレスへの全ての書込み動作の後に、ローカルメモリからの対応する読み取り及びその後の外部メモリへの書込みが実行され、それらは共にＤＳＵにより実行される。
【００２９】
ある実施形態では、プロセッサコア２００と外部メモリ５００間のデータ転送は、ローカルメモリ内に配置される複数の循環バッファにより実行される。その様子を図３に示す。それぞれのプロセッサコアは、データをそれぞれの循環バッファ内に書き込み、そしてＤＳＵはデータを循環バッファから読み取り、それをメインメモリに書き込む。メインメモリが外部メモリである実施形態では、これは外部メモリコントローラ４００により実行される。読み取り動作に対しては、ＤＳＵはデータをメインメモリから読み取り（メインメモリが外部メモリである場合は外部メモリコントローラ経由で）、そしてそれを循環バッファに書き込む。プロセッサコアは循環バッファから取得されたデータを読み取る。
【００３０】
図３は、本発明の実施形態による、循環バッファ３１０の構造を示す概略図である。本発明の実施形態では、複数の循環バッファが各ローカルメモリ内で実施されてもよい。ある所与のローカルメモリ３００に配置される循環バッファは、ＤＳＵフロントエンドユニット２１００及びこのローカルメモリに接続するプロセッサコア２００により管理される。図３とそれに続く記述における「読み取り」と「書込み」という言葉は、ローカルプロセッサコア２００により実行される「読み取り」と「書込み」を意味する。
【００３１】
循環バッファは、バッファがスタートするローカルメモリ３００内の１つの場所を指し示す出発ポインタ３１１と、ローカルメモリ３００内の最後の位置を示す終了ポインタ３１６とを有する。バッファは循環式であり、バッファへの連続アクセスに対しては、終了ポインタ３１６の次の場所は出発ポインタ３１１である。
【００３２】
ローカルプロセッサコア２００により処理されるデータ要素は、現在要素ポインタ３１３により指し示されるが、それは（以下に記述される）特別のプロセッサコア命令により前進させられる。ローカルプロセッサに対する有効データを含む作業ウィンドウ３１４が定義される。現在要素ポインタ３１３が読み取りポインタの値に到達すると、プロセッサは新しいデータが到着するまで待機させられる。更に、読み取りポインタ３１５の値が書込みポインタ３１２の値と同一の場合、外部メモリからの読み取りデータの更なる取得は、書込みポインタが前進するまで延期される。
【００３３】
図４は、本発明の実施形態による、ＤＳＵフロントエンドユニット２１００の概略ブロック図である。ＤＳＵフロントエンドに接続するローカルプロセッサコア２００とローカルメモリ３００も示されている。それぞれのＤＳＵフロントエンド２１００は、ＤＳＵバッファ管理ユニット２１１０、制御ユニット２１３０、バッファ選択マルチプレクサ２１４０、及び外部メモリアクセス制御２１５０からなる。ＤＳＵフロントエンドユニット２１００はローカルプロセッサコア２００により１リストのタスクを実行するように設定される；このような設定は、制御ユニット２１３０に配置される複数のレジスタのプログラミングを含み、ここで各レジスタは読み取り、書込み及びデータ寸法及び各循環バッファ３１０用の出発ポインタと終了ポインタの値を示唆するビットを含む。
【００３４】
ＤＳＵバッファ管理ユニット２１１０は、以下で詳述されるが、循環バッファ３１０を管理する。ユニット２１１０は、バッファ終了ポインタをバッファ出発ポインタにラップアラウンドして、読み取り及び書込みポインタを増加させ、そして、ＮＬＩ（１）命令（後述）がプロセッサコアから受信された場合、再びバッファ終了ポインタをラップアラウンドして、現在要素ポインタを増加させる。現在要素ポインタに対する増加がその値を読み取りポインタの値と同じにさせる場合、バッファ管理ユニット２１１０はプロセッサコア２００に信号を送り新しいデータが受信されるまで待機させる。
【００３５】
制御ユニット２１３０は、ローカルメモリ３００へのアクセスを必然的に伴う循環バッファ３１０へのアクセスを調停する。このような調停は、例えば、回転優先順位方式により実施される。
バッファ選択マルチプレクサ２１４０は、制御ユニット２１３０から選択されたバッファへのポインタを得て、そして前記バッファにより生成されたアドレスをローカルメモリ３００に出力する。
【００３６】
制御ユニット２１３０はまた、読み取り、書込み要求を生成し、ＤＳＵアービター２２００から読み取り応答を獲得する、外部メモリアクセス制御２１５０を制御する。外部メモリアクセス制御２１５０からのデータは、ローカルメモリ３００に送られてもよい；しかし、外部メモリとの間で読み取り、書込みされたデータ寸法がローカルメモリのデータポートの寸法と異なる場合、追加のバッファ／ロジック（不図示）が使用されてもよい。
【００３７】
図５は、本発明の実施形態によるＤＳＵバッファ管理ユニット２１１０の概略ブロック図である。バッファ管理ユニット２１１０は、ＤＳＵフロントエンド２１００内に内蔵され、そして複数の循環バッファへのアクセスを制御する。ある実施形態では、ＤＳＵバッファ管理ユニット２１１０は、複数の同じ単一バッファマネジャユニット（ＳＢＭ）２１２０からなり、各ＳＢＭはローカルメモリ３００内の単一のそれぞれの循環バッファを制御する。ＳＢＭ２１２０は、読み取りポインタ３１５の値を保持する読み取りポインタ（ＲＰ）レジスタ２１２３、書込みポインタ３１２の値を保持する書込みポインタ（ＷＰ）レジスタ２１２２、現在要素ポインタ（ＣＥＰ）３１３の値を保持する現在要素ポインタ（ＣＥＰ）レジスタ２１２４からなる。読み取りポインタ（ＲＰ）は、ＤＳＵフロントエンド２１００が外部メモリから読み取ったデータを書き込む、次のメモリ位置を示し、また、書込みポインタ（ＷＰ）は、ＤＳＵフロントエンド２１００がその後外部メモリに書き込むデータを読み取る、次のメモリ位置を示す。    
【００３８】
ＳＢＭ２１２０はさらに、現在のデータトランザクションで送信されるデータユニットの寸法を記憶する（例えばバイト数で）寸法レジスタ２１２１と、寸法レジスタ２１２１に記憶される値をポインタレジスタ２１２２、２１２３、２１２４内の値に加算し、それにより各トランザクション後にそれらを更新する、加算子２１２６と、コンパレータ２１２５とを含む。コンパレータ２１２５は、ＣＥＰレジスタ２１２４の値をＲＰレジスタの値と比較し、それらが同じ場合「待機」出力を主張し、それによりプロセッサコア２００は待機させられる。
【００３９】
読み取り及び書込みポインタレジスタ２１２２，２１２３の更新は、セレクト（Ｓｅｌｅｃｔ）入力により適格とされ、制御ユニット２１３０により起動される（図４参照）、ここでそれぞれのＳＢＭ２１２０に対し１つの異なるセレクトラインがある；セレクトラインは所定のセレクト（選択）−１、セレクト−２、以下同様、である。セレクトラインに加えて制御ユニット２１３０は、全てのＳＢＭに対して共通の制御ライン：選択されたＳＢＭ２１２０の書込みポインタレジスタ２１２２と読み取りポインタレジスタ２１２３をそれぞれ更新するための、読み取りと書き込みと；ＤＳＵフロントエンドユニット２１００の全てのＳＢＭ２１２０の全てのＣＥＰレジスタ２１２４を更新するためのＮＬＩ（１）と；を主張する。
【００４０】
図４に戻り、制御ユニット２１３０はＤＳＵフロントエンドユニット２１００内で事前にプログラムされたタスクを実行する。制御ユニットは、プロセッサコア２００により１リストのメモリ送信タスクで事前に構成される；制御ユニットはその後、ＤＳＵバッファ管理ユニット２１１０から、例えば回転優先順位方式などの１つの基準に従ってポインタを選択する。制御ユニットはその後、選択されたアドレスをローカルメモリ３００に出力するため、バッファ選択マルチプレクサ２１４０のアドレス入力を制御し、そして１つの指示ワード、それはバッファのインデックスや読み取り／書込みビットを含んでもよいが、を外部メモリアクセス制御２１５０に送信する。さらに、いずれかのＳＢＭ２１２０が停止（ストール）出力を設定した場合、制御ユニットはその動作を停止が解除されるまで停止すため、プロセッサコア２００に対し集合停止（ストール）出力を主張する。
【００４１】
初期化において実行されるＤＳＵの構成に加えて、制御ユニット２１３０は、２つの特別なプロセッサ命令により制御される：ＮＬＩ（０）及びＮＬＩ（１）。ＮＬＩ（１）は、循環バッファ内で現在要素ポインタ（ＣＥＰ）３１３を進ませるために使用される。それは、プロセッサが次の値を計算するため新しい１組のパラメータを必要とする場合、プログラムループのそれぞれの繰り返しの後にセットされる。
【００４２】
更新されたパラメータは、全ての活性化したＳＢＭの現在要素ポインタ（ＣＥＰ）を含む。更新は典型的に全てのＳＢＭを一括して単一サイクルで、そして循環バッファラップの位置を考慮して実行される。ＮＬＩ命令は、現在要素ポインタ（ＣＥＰ）の新しい位置が外部メモリから取得した要求されたデータで充足されていることを認証する。そうでない場合プロセッサコアは、読み取りポインタ（ＲＰ）と現在要素ポインタ（ＣＥＰ）が要求基準（即ち、ＲＰがＣＥＰより大きい）を満たすまで待機する。
【００４３】
ＮＬＩ（１）は、制御ユニット２１３０によりＤＳＵバッファ管理ユニット２１１０に対して指示される。ＮＬＩ（０）は、プロセッサコア２００によりプログラムがスタートする時に発せられる。ＮＬＩ（０）命令の目的は、初期のＣＥＰが処理に対して有効である（即ち、要求されたデータが外部メモリから読み取り済みでローカルメモリに書き込み済みである）ことを認証することである。
【００４４】
読み取りポインタ（ＲＰ）３１５及び書込みポインタ（ＷＰ）３１２は典型的に、ＮＬＩ（０）が受信されるまでそれらの初期位置から進まない。（ＲＰはそれが第１の要素を処理するためのデータを取得する必要があるため増加される。ＷＰはＣＥＰがまだ初期の位置を指し示し、その位置はＷＰが指し示す位置と同じあるため増加されない。処理されたデータはまだ無いので、外部メモリには何も書き込まれない。）
【００４５】
外部メモリアクセス制御２１５０は制御ユニット２１３０により起動されＤＳＵアービター２２００に対する読み取り及び書込み要求を開始する；それはまたＤＳＵアービター２２００から読み取り応答を取得し、読み取りデータをローカルメモリに伝達する。
【００４６】
図６は本発明の実施形態による、ＤＳＵアービター２２００の概略ブロック図である。ＤＳＵアービター２２００は読み取り及び書込み要求を複数のＤＳＵフロントエンド２１００から受信し、要求の間を調停し、外部メモリ内の対応するアドレスを計算し、外部メモリアクセス要求を外部メモリコントローラ４００に送信する。またＤＳＵアービターは、外部メモリコントローラから受信した読み込み要求に対する応答を要求元ＤＳＵフロントエンドに戻す。本発明のある実施形態では、書込み応答は必要なく、書込み要求は受け入れられたと見做される。他の実施形態では、図６に図示されていないが、書込み応答が取り扱われ、（以下に記述する）読み取り応答ラッチ２２１０に類似したユニットがＤＳＵアービター２２００に追加される。
【００４７】
複数のＤＳＵフロントエンド２１００からの読み取り要求は、読み取り要求ラッチ２２３０内にラッチされる。本発明の実施形態では、読み取り要求ラッチ２２３０は、それぞれのＤＳＵフロントエンドユニットに対して、どの循環バッファに要求が対応しているかを示す１つのインデックスと、要求が有効でまだ未処理であることを示す１つのペンディングビットを含む。読み取り要求ラッチ２２３０からの要求は、読み取り要求調停ユニット２２５０に入力され、それは、例えば、回転優先順位方式を使用して、複数の同時発生の読み取り要求の間を調停する。読み取り要求調停はまた、読み取り要求ラッチ２２３０内の選択された要求のペンディングビットを消去する。
【００４８】
（以下で説明されるが、１つ又はそれ以上の）選択された読み取り操作は、読み取りアドレス計算ユニット２２７０に出力され、それは、外部メモリに対するポインタ（それぞれのローカルメモリ３００内のそれぞれの循環バッファに対し１つのポインタ）を維持し更新し、そしてポインタ値及び外部メモリの編成に関するパラメータに基づいて、外部メモリ内のアドレスを計算する；  本発明のある実施形態では、処理されたオブジェクトがビデオ画像であり、これらパラメータは、画像幅、高さ、ピクセル当りバイト数を含む。読み取りアドレス計算ユニットからの出力は、外部メモリコントローラ４００への読み取り要求である。
【００４９】
本発明のある実施形態では、外部メモリへのアクセスのバンド幅はローカルメモリ３００内のバンド幅より大きい；これは幅広のバス、速いクロック、又はそれらの組合せに由来する。このような実施形態では、同時に複数のメモリアクセスを生成することが望ましい。このような実施形態では、読み取り要求調停ユニット２２５０は、幾つかの読み取り要求を選択し、そして読み取りアドレス計算ユニット２２７０は、幾つかのトランザクション用のアドレスを同時に計算する。
【００５０】
書込み要求の方式は、読み取り要求について記載されたものと類似しており、書込み要求をラッチするための書込み要求ラッチ２２２０、未処理の書込み要求間を調停する書込み要求調停ユニット２２４０、及び外部メモリ内のアドレスを計算する、書込みアドレス計算ユニット２２６０を含む。本発明のある実施形態では、書込み要求ラッチ２２２０、書込み要求調停ユニット２２４０及び書込みアドレス計算ユニット２２６０は、それぞれ読み取り要求ラッチ２２３０、読み取り要求調停ユニット２２５０及び読み取りアドレス計算ユニット２２７０と同一でよい。他の実施形態では、各ユニットが性質は類似しているが、書込みは読み取りより頻度が少ないため、書込み関連ユニットの実装は低いエリア及び性能に最適化されてもよい。
【００５１】
最後に、読み取り応答ラッチ２２１０は、外部メモリコントローラ４００からの読み取り要求応答をラッチし、そしてその応答を要求元のそれらＤＳＵフロントエンド２１００に出力する。
【００５２】
（スクラッチパッドユニット）
本発明の実施形態では、共用メモリ資源にアクセスするマルチプロセッサシステム１０のプログラムは、スクラッチパッドユニット１０００により取り扱われ、それは、メモリのコヒーレンシーを保証し、共用メモリ資源へのアクセスに伴う遅れを緩和する。スクラッチパッドユニットは、要するに、共用メモリタスクの効率的な実行、及びメモリのコヒーレンシーの保証に対し最適化された命令セットを有する、特別目的プロセッサである。
【００５３】
図７は、本発明の実施形態による、スクラッチパッドユニット１０００及びプロセッサコア２００に対するインタフェースの概略ブロック図である。１組のスクラッチパッド命令（以下で「ＳＰ命令」と呼ぶ）は、プロセッサコア２００に対して定義される。ＳＰ命令は、プロセッサコア２００により命令バッファ１３００に送信され、命令バッファはその後実行のためそれらをスクラッチパッドコントローラ１２００に送信する。
【００５４】
プロセッサコア２００は、バッファが従前の命令をスクラッチパッドコントローラ１２００に送信していなかった場合、或いは、従前の命令が戻り値を期待する命令であり、かつその戻り値がまだ獲得されていない場合、新しいＳＰ命令を接続する命令バッファに送信することを控える。この方式は例えば、適切なプロセッサコアを配置することにより、ハードウェアで実行されてもよい。
【００５５】
命令バッファ１３００は、ＳＰ命令を２つのスクラッチパッドコントローラ１２００の内の１つに送信する。スクラッチパッドコントローラは、複数の命令バッファ１３００からの複数の命令の間を調停し、その中の１つを実行のため選択する。本発明のある実施形態によれば、調停は回転優先度法を使用する。
【００５６】
偶数のスクラッチパッドメモリ位置を参照する命令は、偶数スクラッチパッドコントローラ１２００に出力され、一方奇数のスクラッチパッドメモリ位置を参照する命令は、奇数スクラッチパッドコントローラ１２００に出力される。従って、命令で特定されるアドレスの最下位ビットは、スクラッチパッドコントローラには送信されず、その代わり、２つのコントローラの内の１つを選択するのに使用される。
【００５７】
それぞれのスクラッチパッドコントローラ１２００は、スクラッチパッドメモリ又はその一部である、ＲＡＭ１１００に接続している。本発明のある実施形態では、スクラッチパッドメモリは奇数及び偶数アドレスに従ってインターリーブされている；一方のＲＡＭ１１００が偶数アドレスを保持し（図７でＲＡＭ偶数と表示）、他方のＲＡＭ１１００が奇数アドレスを保持する（図７でＲＡＭ奇数と表示）。ＲＡＭ偶数に接続するスクラッチパッドコントローラ１２００は、「スクラッチパッドコントローラ偶数」と呼ばれ、そしてＲＡＭ奇数に接続するスクラッチパッドコントローラ１２００は、「スクラッチパッドコントローラ奇数」と呼ばれる。本発明の他の実施形態では、他のタイプのインターリーブ方式が使用されてもよい。例えば、２つの最下位のアドレスビットに従った４グルーブへの分離や、ハッシング関数による分離がある。
【００５８】
あるＳＰ命令は要求元プロセッサに値を返す。その目的のため、それぞれのスクラッチパッドコントローラ１２００は、戻り値を全てのプロセッサコア２００に出力する。さらに、それぞれのプロセッサコアが、入力データがそのプロセッサが発した命令に対する戻り値であるかを決定するため、それぞれのスクラッチパッドコントローラ１２００は、ＲＡＭからの戻りデータが目的地とするプロセッサのＩＤコードをＩＤバス上で主張し、そのＩＤコードは全てのプロセッサコア２００に出力される。調停が与えられた後、そのスクラッチパッドコントローラ内のレイテンシが定められる。従って、他の実施形態では、命令バッファは、サイクルを数え、そしてこのサイクル数に従ってデータを獲得してもよい。
【００５９】
表１は、本発明のある実施形態における９つのＳＰ命令のリストである。それぞれのＳＰ命令は、種々のＳＰ命令を識別し、４ビットからなる１つのオペレーションコードと、スクラッチパッドメモリ内のアドレスであり、例えば１６−１８ビットからなる１つのインデックス、及び１−２つのオペランドからなる。
【００６０】
【表１−１】
0005787629.tif 000002
【００６１】
【表１−２】
0005787629.tif 000003
【００６２】
図８は、本発明の実施形態による、スクラッチパッドコントローラ１２００のパイプラインステージと構造を示す概略ブロック図である。スクラッチパッドコントローラ１２００は、回転優先順位アービター１２１０（アービター）、読み取りステージユニット１２２０、実行ステージユニット１２３０、書込みステージユニット１２４０、コンパレータ１２６０及びマルチプレクサ１２５０からなる。スクラッチパッドコントローラ１２００は、パイプライン構造を有し、命令の実行はパイプラインステージで行われる。書込みステージユニット１２４０が命令ｎの結果を書き込むと、実行ステージユニット１２３０は命令ｎ＋１の一部を実行し、読み取りステージユニット１２２０はメモリアドレスから命令ｎ＋２で特定されたデータを取得し、アービター１２１０は命令ｎ＋３を命令バッファ１３００より獲得する。
【００６３】
アービター１２１０は命令バッファからの命令入力の間を調停し、そして、例えば、回転優先度法を使用する。アービターが１つの命令ソースを選択するとアービターは、選択された命令を読み取りステージユニット１２２０に送信し、レディー出力を主張する。それは、命令バッファに対し命令バッファが次の命令を（存在する場合）適用可能であることを示す。
【００６４】
アービター１２１０から読み取りステージユニット１２２０に送信された命令は、５つのフィールドからなる。そのうち最初の４つのフィールドは選択された命令からコピーされ、１つのオペコードフィールド、１つのインデックスフィールド、及び１−２つのオペランド−ＯＰ１及びＯＰ２からなる；上記表１は各命令により使用されるフィールドを示す。５番目のフィールドは、選択された命令バッファを識別し、戻り値の命令元のプロセッサコアへのルートづけを可能にする、１つのＩＤフィールドである。
【００６５】
読み取りステージユニット１２２０は、１クロックの遅延の後、アービターから受信した命令のフィールドを実行ステージユニット１２３０に出力する。更に、読み取りステージユニット１２２０は、オペランドのアドレスが、スクラッチパッドメモリから、ＲＡＭ１１００の読み取りアドレスポートに接続する読み取りアドレスバス上で取得されることを主張する。アドレスはアービター１２１０からのインデックスフィールド出力と同一でもよい。ＲＡＭから読み取られたデータは、（以下に記述される）マルチプレクサ１２５０を経由して実行ステージユニット１２３０に送信される；ＲＡＭ１１００を経由する遅延は１クロックなので、ＲＡＭからのデータとそれぞれの命令とは実行ステージユニット１２３０に同じクロックサイクルで到達する。
【００６６】
実行ステージユニット１２３０は、命令を実行し、その命令は、ロジック／算術動作の実行（必要な場合）、ＲＡＭ１１００から読み取られた戻り値の出力、及び書込みステージユニット１２４０の起動を含んでよい。戻り値は、命令開始元のプロセッサのＩＤと共に、全てのプロセッサコア２００に出力される。
【００６７】
書込みステージユニット１２４０は、命令が書込み部分を有する場合にのみ起動される。書込みステージユニットは実行ステージユニットからメモリ位置のインデックス（アドレス）と書込みデータを、書込み起動信号と共に受信する。書込みが要求される場合は、実行ステージユニット１２３０は書込み出力を主張し、そして、ＲＡＭ１１００の書込みアドレスポート上に書込みアドレスを書込みデータポート上に書込みデータを主張して、アドレス（インデックス）とデータを送信する。
【００６８】
メモリコヒーレンシー機構は、１つの命令がメモリからデータを読み取り、一方で従前の命令により新しいデータが同じ場所に書き込まれる場合に呼び出される；パイプラインにより課された１クロックの遅延のため、両方のアクセスは同じクロックサイクルで起こる。コンパレータ１２６０は、書込みアドレスと読み込みアドレスを比較する；２つのアドレスが同じ場合、マルチプレクサ１２５０は書き込まれたデータを直接実行ステージユニット１２３０に送り、ＲＡＭ１１００から読み取られたデータは無視される。
【００６９】
図１−８に示されるシステム１０の構成及び種々のシステム要素の構成は、例示であり、思想の明確化のためにのみ選択された。他の実施形態では、他の適合する構成が使用可能である。ある実施形態では、ここに記載のコントローラやプロセッサ、例えばメモリコントローラ４００、プロセッサコア２００、スクラッチパッドコントローラ１２００は、ここに記載の機能を実行するためのソフトウェアでプログラムされた汎用プロセッサからなってもよい。ソフトウェアはプロセッサに電子形態で、例えばネット上でダウンロードされてもよく、或いはさらに、磁気、光学、又は電子メモリのような非一過性の接触可能媒体上で提供され及び／又は記憶されてもよい。
【００７０】
ここに記載された実施形態は、主にＳＯＣマルチプロセッサシステムについて記述しているが、ここに記載された方法とシステムは、幾つかの集積回路に分散され、バス又はネットワーク又はそれらの組合せにより相互接続されたマルチプロセッサシステムのような、他のアプリケーションにも使用可能である。
上記の実施形態は事例のために引用され、本発明はここに特に示され記載されたものに限定されない。むしろ本発明の範囲は、上記の種々の特徴の組合せ及びサブ組合せを含み、また、上記記載を読んだ当業者が想起する、従来技術に無い変化形や変更を含む。
【符号の説明】
【００７１】
１０：マルチプロセッサシステム    ２００：ローカルプロセッサコア
３００：ローカルメモリ              ３１１：出発ポインタ
３１２：書込みポインタ              ３１３：現在要素ポインタ
３１４：作業ウィンドウ              ３１５：読み取りポインタ
３１６：終了ポインタ                ４００：メモリコントローラ
５００：メインメモリ、外部メモリ    
１０００：スクラッチ−パッドユニット
１１００：スクラッチ−パッドＲＡＭ
１２００：スクラッチ−パッドコントローラ
１２１０：アービター                １２２０：読み取りステージユニット
１２３０：実行ステージユニット      １２４０：書込みステージユニット
１２５０：マルチプレクサ            １２６０：コンパレータ
１３００：命令バッファ
２０００：ＤＳＵ
２１００：ＤＳＵフロントエンドユニット
２１１０：ＤＳＵバッファ管理ユニット
２１２０：単一バッファマネジャユニット（ＳＢＭ）
２１２１：寸法レジスタ        
２１２２：書込みポインタ（ＷＰ）レジスタ
２１２３：読み取りポインタ（ＲＰ）レジスタ
２１２４：現在要素ポインタ（ＣＥＰ）レジスタ
２１２５：コンパレータ
２１２６：加算子
２１３０：制御ユニット
２１４０：バッファ選択マルチプレクサ
２１５０：外部メモリアクセス制御
２２００：ＤＳＵアービター
２２１０：読み取り応答ラッチ
２２２０：書込み要求ラッチ
２２３０：読み取り要求ラッチ
２２４０：書込み要求調停ユニット
２２５０：読み取り要求調停ユニット
２２６０：書込みアドレス計算ユニット
２２７０：読み取りアドレス計算ユニット
【図１】
0005787629.tif 000004
【図２】
0005787629.tif 000005
【図３】
0005787629.tif 000006
【図４】
0005787629.tif 000007
【図５】
0005787629.tif 000008
【図６】
0005787629.tif 000009
【図７】
0005787629.tif 000010
【図８】
0005787629.tif 000011