(57)【特許請求の範囲】
【請求項１】
メモリにアクセスするための並列処理装置であって、
第1の処理要素及び第２の処理要素と、
相互接続システムであり、
第１のアドレス・エンコーダを前記第１の処理要素と結合し、
第２のアドレス・エンコーダを前記第２の処理要素と結合し、
前記第１の処理要素及び前記第２の処理要素から対応の前記第１のアドレス・エンコーダ及び前記第２のアドレス・エンコーダにメモリ・アクセスをするかどうかについての試行（メモリ・アクセス試行）を送る
相互接続システムと、
集中型調停装置であり、
第１のＲＡＭタイルと関連する第１の衝突検出器を介して前記第１のアドレス・エンコーダ及び前記第２のアドレス・エンコーダを結合し、
第２のＲＡＭタイルと関連する第２の衝突検出器を介して前記第１のアドレス・エンコーダ及び前記第２のアドレス・エンコーダを結合し、
対応の前記第１の衝突検出器及び前記第２の衝突検出器を介して対応の前記第１のアドレス・エンコーダ及び前記第２のアドレス・エンコーダの出力値のカウントを決定し、
前記出力値のカウントに基づいて前記第１のＲＡＭタイル及び前記第２のＲＡＭタイルの前記メモリ・アクセス試行の衝突を検出する、
集中型調停装置と
を備える並列処理装置。
【請求項２】
対応の前記第１のアドレス・エンコーダ及び前記第２のアドレス・エンコーダは、対応の前記メモリ・アクセス試行の対応のターゲット・アドレスを判定する、請求項１に記載の並列処理装置。
【請求項３】
前記第１のアドレス・エンコーダ及び前記第２のアドレス・エンコーダは、ターゲット・アドレスが所定の範囲閾値を満足する場合に前記出力値のカウントを生成するものである、請求項１に記載の並列処理装置。
【請求項４】
前記第１の衝突検出器は、前記第１のＲＡＭタイルに関連する衝突を識別するために前記第１のアドレス・エンコーダ及び前記第２のアドレス・エンコーダからの前記出力値のカウントを計算する、請求項１に記載の並列処理装置。
【請求項５】
前記集中型調停装置は、前記出力値のカウントが１より多い場合に衝突の状態であると報告する、請求項４に記載の並列処理装置。
【請求項６】
前記第１の衝突検出器は、前記衝突を検出することに応じて、前記第１の処理要素及び前記第２の処理要素のうちの１つに停止信号を送る、請求項１に記載の並列処理装置。
【請求項７】
前記第１のＲＡＭタイルに関連する第１の範囲比較ブロックと、
前記第２のＲＡＭタイルに関連する第２の範囲比較ブロックと、
前記第１の範囲比較ブロック及び前記第２の範囲比較ブロックの出力に通信可能に接続されるＯＲゲートと
を更に含み、
前記ＯＲゲートの出力は、衝突に応答して停止信号を送るよう前記第１の処理要素及び前記第２の処理要素のうちの１つに通信可能に接続されている、請求項１に記載の並列処理装置。
【請求項８】
当該並列処理装置は、前記第１の処理要素及び前記第２の処理要素に関連するクライアント要求ベクトルを検索するために前記衝突検出器のうち対応のものと関連する調停ブロックを更に含み、
前記調停ブロックは、前記クライアント要求ベクトルのビット位置に基づいてメモリ・アクセス試行を判定する、請求項１に記載の並列処理装置。
【請求項９】
前記クライアント要求ベクトルは、第１のメモリ・スライス及び第２のメモリ・スライスのうちの１つに対するメモリ・アクセス試行に関連する、請求項８に記載の並列処理装置。
【請求項１０】
メモリ・アクセス試行が優先ベクトルに基づいて割り当てられかどうかを判定するためのポート勝者選択ブロックを更に含む、請求項９に記載の並列処理装置。
【請求項１１】
前記第１のメモリ・スライス及び前記第２のメモリ・スライスのうちの前記１つについてのアクセス試行に応答して、比較した場合に最も高い入力ベクトルのランクに関連する前記第１のメモリ・スライス及び前記第２のメモリ・スライスのうちの勝ったものを選択してリソースの過度の割り当てを避けるための勝者検出ブロックを更に含み、請求項９に記載の並列処理装置。
【請求項１２】
前記第１のＲＡＭタイル及び前記第２のＲＡＭタイルは、読み出しポートと書き込みポートとを含む、請求項１〜１０のいずれか一項に記載の並列処理装置。
【請求項１３】
前記相互接続システムは、
第１のメモリ・スライスを前記第１の処理要素と優先アクセスを有するよう結合し、
第２のメモリ・スライスを前記第２の処理要素と優先アクセスを有するよう結合する、請求項１〜１０のいずれか一項に記載の並列処理装置。
【請求項１４】
前記相互接続システムは、
前記メモリ・アクセス試行のうちの１つに関連する前記第１の処理要素及び前記第２の処理要素のうちの１つについてのゲート電力をオンすること、及び、
前記メモリ・アクセス試行のうちの前記１つに関連しない前記第１の処理要素及び前記第２の処理要素のうちの他の１つについてのゲート電力をオフすること
によって、電力消費を減じる、請求項１〜１０のいずれか一項に記載の並列処理装置。
【請求項１５】
メモリにアクセスするための、コンピュータにより実施される方法であって、
プロセッサで命令を実行することにより、第１のアドレス・エンコーダを第１の処理要素と結合することと、
前記プロセッサで命令を実行することにより、第２のアドレス・エンコーダを第２の処理要素と結合することと、
前記プロセッサで命令を実行することにより、前記第１の処理要素及び前記第２の処理要素から対応の前記第１のアドレス・エンコーダ及び前記第２のアドレス・エンコーダにメモリ・アクセスをするかどうかについての試行（メモリ・アクセス試行）を送ることと、
第１のＲＡＭタイルと関連する第１の衝突検出器を介して前記第１のアドレス・エンコーダ及び前記第２のアドレス・エンコーダを結合すること、
第２のＲＡＭタイルと関連する第２の衝突検出器を介して前記第１のアドレス・エンコーダ及び前記第２のアドレス・エンコーダを結合すること、
対応の前記第１の衝突検出器及び前記第２の衝突検出器を介して対応の前記第１のアドレス・エンコーダ及び前記第２のアドレス・エンコーダの出力値のカウントを決定すること、
前記プロセッサで命令を実行することにより、前記出力値のカウントに基づいて前記第１のアドレス・エンコーダ及び前記第２のアドレス・エンコーダの出力値に基づいて第１のＲＡＭタイル及び第２のＲＡＭタイルの前記メモリ・アクセス試行の衝突を検出することと
を含む、コンピュータにより実施される方法。
【請求項１６】
対応の前記第１のアドレス・エンコーダ及び前記第２のアドレス・エンコーダから対応の前記メモリ・アクセス試行の対応のターゲット・アドレスを識別することを更に含む、請求項１５に記載のコンピュータにより実施される方法。
【請求項１７】
ターゲット・アドレスが所定の範囲閾値を満足する場合に、前記第１のアドレス・エンコーダ及び前記第２のアドレス・エンコーダのうちの少なくとも１つにより前記出力値のカウントを生成することを更に含む、請求項１５に記載のコンピュータにより実施される方法。
【請求項１８】
前記ターゲット・アドレスが前記所定の範囲閾値を満足する場合に、前記第１の処理要素及び前記第２の処理要素のうちの１つと、前記第１のＲＡＭタイル及び前記第２のＲＡＭタイルのうちの対応の１つとに権限を与えることを更に含む、請求項１７に記載のコンピュータにより実施される方法。
【請求項１９】
前記第１のＲＡＭタイルに関連する衝突を識別するために前記第１のアドレス・エンコーダ及び前記第２のアドレス・エンコーダからの前記出力値のカウントを計算することを更に含む、請求項１５に記載のコンピュータにより実施される方法。
【請求項２０】
前記出力値のカウントが１より多い場合に衝突の状態であると報告することを更に含む、請求項１９に記載のコンピュータにより実施される方法。
【請求項２１】
メモリにアクセスするためのシステムであって、
コンピュータ可読媒体と、
請求項１５〜２０のいずれか一項に記載の方法を少なくとも実行するために前記コンピュータ可読媒体に格納された命令を実行する１つ以上のプロセッサと
を備える、システム。
【請求項２２】
命令を備えるコンピュータ可読媒体であって、
前記命令は、実行された場合に、１つ以上のプロセッサにより、少なくとも、
第１のアドレス・エンコーダを第１の処理要素と結合させ、
第２のアドレス・エンコーダを第２の処理要素と結合させ、
前記第１の処理要素及び前記第２の処理要素から対応の前記第１のアドレス・エンコーダ及び前記第２のアドレス・エンコーダにメモリ・アクセスをするかどうかについての試行（メモリ・アクセス試行）を送り、
第１のＲＡＭタイルと関連する第１の衝突検出器を介して前記第１のアドレス・エンコーダ及び前記第２のアドレス・エンコーダを結合させ、
第２のＲＡＭタイルと関連する第２の衝突検出器を介して前記第１のアドレス・エンコーダ及び前記第２のアドレス・エンコーダを結合させ、
対応の前記第１の衝突検出器及び前記第２の衝突検出器を介して対応の前記第１のアドレス・エンコーダ及び前記第２のアドレス・エンコーダの出力値のカウントを決定させ、
前記出力値のカウントに基づいて前記第１のアドレス・エンコーダ及び前記第２のアドレス・エンコーダの出力値に基づいて第１のＲＡＭタイル及び第２のＲＡＭタイルの前記メモリ・アクセス試行の衝突を検出させる
コンピュータ可読媒体。
【請求項２３】
前記命令は、実行された場合に、前記１つ以上のプロセッサに、対応の前記第１のアドレス・エンコーダ及び前記第２のアドレス・エンコーダから対応の前記メモリ・アクセス試行の対応のターゲット・アドレスを識別させる、請求項２２に記載のコンピュータ可読媒体。
【請求項２４】
前記命令は、実行された場合に、前記１つ以上のプロセッサに、所定の範囲閾値を満足するターゲット・アドレスを検出したことに応じて、前記第１のアドレス・エンコーダ及び前記第２のアドレス・エンコーダのうちの少なくとも１つにより前記出力値のカウントを生成させる、請求項２３に記載のコンピュータ可読媒体。
【請求項２５】
前記命令は、実行された場合に、前記１つ以上のプロセッサに、
前記メモリ・アクセス試行のうちの１つに関連する前記第１の処理要素及び前記第２の処理要素のうちの１つについてのゲート電力をオンにさせ、
前記メモリ・アクセス試行のうちの前記１つに関連しない前記第１の処理要素及び前記第２の処理要素のうちの他の１つについてのゲート電力をオフにさせる、請求項２２〜２４のいずれか一項に記載のコンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願の相互参照
本出願は、２０１３年１１月１８日に出願された、名称が「ＡＰＰＡＲＡＴＵＳ，  ＳＹＳＴＥＭＳ，  ＡＮＤ  ＭＥＴＨＯＤＳ  ＦＯＲ  ＰＲＯＶＩＤＩＮＧ  ＣＯＭＰＵＴＡＴＩＯＮＡＬ  ＩＭＡＧＩＮＧ  ＰＩＰＥＬＩＮＥ」であるＵ．Ｓ．  Ｐａｔｅｎｔ  Ａｐｐｌｉｃａｔｉｏｎ  Ｎｏ．  １４／０８２，３９６のより早い優先日の利益を主張し、この出願は、２０１３年１１月６に出願された、名称が「ＡＰＰＡＲＡＴＵＳ，  ＳＹＳＴＥＭＳ，  ＡＮＤ  ＭＥＴＨＯＤＳ  ＦＯＲ  ＰＲＯＶＩＤＩＮＧ  ＣＯＮＦＩＧＵＲＡＢＬＥ  ＡＮＤ  ＣＯＭＰＯＳＡＢＬＥ  ＣＯＭＰＵＴＡＴＩＯＮＡＬ  ＩＭＡＧＩＮＧ  ＰＩＰＥＬＩＮＥ」であるＲｏｍａｎｉａｎ  Ｐａｔｅｎｔ  Ａｐｐｌｉｃａｔｉｏｎ  ＯＳＩＭ  Ｒｅｇｉｓｔｒａｔｕｒａ  Ａ／００８１２、及び、２０１３年８月８日に出願された、名称が「ＣＯＮＦＩＧＵＲＡＢＬＥ  ＡＮＤ  ＣＯＭＰＯＳＡＢＬＥ  ＣＯＭＰＵＴＡＴＩＯＮＡＬ  ＩＭＡＧＩＮＧ  ＰＩＰＥＬＩＮＥ」であるＵ．Ｋ．  Ｐａｔｅｎｔ  Ａｐｐｌｉｃａｔｉｏｎ  Ｎｏ．  ＧＢ１３１４２６３．３に対する優先権を主張している。本出願はまた、２０１３年１１月１８日に出願された、名称が「ＡＰＰＡＲＡＴＵＳ，  ＳＹＳＴＥＭＳ，  ＡＮＤ  ＭＥＴＨＯＤＳ  ＦＯＲ  ＰＲＯＶＩＤＩＮＧ  ＣＯＮＦＩＧＵＲＡＢＬＥ  ＣＯＭＰＵＴＡＴＩＯＮＡＬ  ＩＭＡＧＩＮＧ  ＰＩＰＥＬＩＮＥ」であるＵ．Ｓ．  Ｐａｔｅｎｔ  Ａｐｐｌｉｃａｔｉｏｎ  Ｎｏ．  １４／０８２，６４５のより早い優先日の利益も主張し、この出願は、２０１３年１１月６に出願された、名称が「ＡＰＰＡＲＡＴＵＳ，  ＳＹＳＴＥＭＳ，  ＡＮＤ  ＭＥＴＨＯＤＳ  ＦＯＲ  ＰＲＯＶＩＤＩＮＧ  ＣＯＮＦＩＧＵＲＡＢＬＥ  ＡＮＤ  ＣＯＭＰＯＳＡＢＬＥ  ＣＯＭＰＵＴＡＴＩＯＮＡＬ  ＩＭＡＧＩＮＧ  ＰＩＰＥＬＩＮＥ」であるＲｏｍａｎｉａｎ  Ｐａｔｅｎｔ  Ａｐｐｌｉｃａｔｉｏｎ  ＯＳＩＭ  Ｒｅｇｉｓｔｒａｔｕｒａ  Ａ／００８１２、及び、２０１３年８月８日に出願された、名称が「ＣＯＮＦＩＧＵＲＡＢＬＥ  ＡＮＤ  ＣＯＭＰＯＳＡＢＬＥ  ＣＯＭＰＵＴＡＴＩＯＮＡＬ  ＩＭＡＧＩＮＧ  ＰＩＰＥＬＩＮＥ」であるＵ．Ｋ．  Ｐａｔｅｎｔ  Ａｐｐｌｉｃａｔｉｏｎ  Ｎｏ．  ＧＢ１３１４２６３．３に対する優先権を主張している。上記出願のそれぞれは、ここで参照することにより本明細書に完全に組み込まれる。
【０００２】
本出願は一般に、画像及び映像処理に好適な処理装置に関するものである。
【背景技術】
【０００３】
コンピュータによる画像及び映像処理は、画像解像度及びフレームレートが高く、１秒あたり数百メガピクセルの総計ピクセル・レートが一般的な桁であるため、メモリ帯域幅の点で非常に要求が厳しい。さらにまた、この分野は比較的、初期の段階であるため、アルゴリズムは絶えず変化している。したがって、アルゴリズムの変更はハードウェアが適合できないことを意味する可能性があるため、ハードウェアにそれらを完全に実装することは困難である。同時に、プロセッサのみへの実装に依存するソフトウェア・アプローチは、非現実的である。したがって、プロセッサ及びハードウェア・アクセラレータに対応できる、柔軟なアーキテクチャ／インフラストラクチャを提供することが一般に望ましい。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
同時に、このような映像及び画像処理に対する要求は、大部分は、タブレット・コンピュータ及び携帯機器などの携帯型電子装置から来ており、消費電力が主要な考慮事項である。結果として、プログラム可能なマルチコア・プロセッサ及びハードウェア・アクセラレータを、携帯型電子装置に必要な低電力レベルでの持続データ転送レートの実現を可能とする高帯域幅メモリ・サブシステムと結合する、柔軟なインフラストラクチャに対する一般的な必要性がある。
【課題を解決するための手段】
【０００５】
本開示の主題に従って、設定可能かつ構成可能なコンピュータ画像処理パイプラインを提供する機器、システム、及び方法が提供される。
【０００６】
開示される主題は、並列処理装置を含む。処理装置は、命令を実行するようにそれぞれ構成される複数の処理要素と、複数の処理要素のうちの１つと関連する第１のメモリ・スライスを含む複数のメモリ・スライスを備えるメモリ・サブシステムとを含む。第１のメモリ・スライスは、それぞれ個々の読み出し及び書き込みポートを有する複数のランダム・アクセス・メモリ（ＲＡＭ）タイルを備える。並列処理装置は、複数の処理要素とメモリ・サブシステムとを結合するように構成される相互接続システムを含むことができる。相互接続システムは、第１のメモリ・スライスと複数の処理要素のうちの１つとを結合するように構成されるローカル相互接続と、第１のメモリ・スライスと複数の処理要素のうちの残りとを結合するように構成されるグローバル相互接続とを含むことができる。
【０００７】
いくつかの実施形態において、複数のＲＡＭタイルのうちの１つは調停ブロックと関連し、ここで、調停ブロックは、複数の処理要素うちの１つからのメモリ・アクセス要求を受けるように、かつ、複数の処理要素のうちの１つに、複数のＲＡＭタイルうちの１つへのアクセスを許可するように構成される。
【０００８】
いくつかの実施形態において、調停ブロックは、ラウンドロビン方式で複数のＲＡＭタイルのうちの１つへのアクセスを許可するように構成される。
【０００９】
いくつかの実施形態において、調停ブロックは、複数のＲＡＭタイルのうちの１つへのメモリ・アクセス要求をモニタし、複数の処理要素のうちの２つ以上が同時に複数のＲＡＭタイルのうちの１つにアクセスしようとしているかどうかを判定するように構成される衝突検出器を備える。
【００１０】
いくつかの実施形態において、衝突検出器は、複数のアドレス・デコーダに結合され、ここで、複数のアドレス・デコーダのそれぞれが、複数の処理要素のうちの１つに結合されて、複数の処理要素のうちの１つが調停ブロックと関連する複数のＲＡＭタイルのうちの１つにアクセスしようとしているかどうかを判定するように構成される。
【００１１】
いくつかの実施形態において、複数の処理要素は、少なくとも１つのベクトル・プロセッサと、少なくとも１つのハードウェア・アクセラレータとを備える。
【００１２】
いくつかの実施形態において、並列処理装置は、複数のメモリ・スライスのうちの１つへのアクセスを提供するようにそれぞれ構成される複数のメモリ・スライス・コントローラを含む。
【００１３】
いくつかの実施形態において、相互接続システムは、少なくとも１つのベクトル・プロセッサとメモリ・サブシステムとの間の通信を提供するように構成される第１のバスを備える。
【００１４】
いくつかの実施形態において、相互接続システムは、少なくとも１つのハードウェア・アクセラレータとメモリ・サブシステムとの間の通信を提供するように構成される第２のバス・システムを備える。
【００１５】
いくつかの実施形態において、第２のバス・システムは、少なくとも１つのハードウェア・アクセラレータからのメモリ・アクセス要求を受けることによって、かつ、メモリ・サブシステムへのアクセスを、少なくとも１つのハードウェア・アクセラレータに許可することによって、少なくとも１つのハードウェア・アクセラレータとメモリ・サブシステムとの間の通信を仲介するように構成されるスライス・アドレス要求フィルタを備える。
【００１６】
いくつかの実施形態において、複数の処理装置のうちの１つは、メモリ・サブシステムのスループットを増加させるためのバッファを備え、ここで、バッファの要素の数は、メモリ・サブシステムからデータを検索するためのサイクルの数より大きい。
【００１７】
開示される主題は、並列処理システムを作動させる方法を含む。方法は、第１の処理要素と第２の処理要素とを含む複数の処理要素を提供することを含み、ここで、複数の処理要素のそれぞれは、命令を実行するように構成される。方法はまた、第１の処理要素と関連する第１のメモリ・スライスを含む複数のメモリ・スライスを備えるメモリ・サブシステムを提供することを含み、ここで、第１のメモリ・スライスは、それぞれ個々の読み出し及び書き込みポートを有する複数のランダム・アクセス・メモリ（ＲＡＭ）タイルを備える。方法は、相互接続システムのローカル相互接続を介した複数のＲＡＭタイルのうちの１つと関連する調停ブロックによって、第１の処理要素から第１のメモリ・アクセス要求を受けることをさらに含む。方法は、グローバル相互接続を介した調停ブロックによって、第１の処理要素に複数のＲＡＭタイルのうちの１つにアクセスする権限を付与するために、第１の処理要素に第１の権限付与メッセージを送ることをさらに含む。
【００１８】
いくつかの実施形態において、方法は、相互接続システムのグローバル相互接続を介した調停ブロックによって、第２の処理要素から第２のメモリ・アクセス要求を受けることと、グローバル相互接続を介した調停ブロックによって、第２の処理要素に複数のＲＡＭタイルのうちの１つにアクセスする権限を付与するために、第２の処理要素に第２の権限付与メッセージを送ることとをさらに含む。
【００１９】
いくつかの実施形態において、方法は、調停ブロックによって、ラウンドロビン方式で複数のＲＡＭタイルのうちの１つへアクセスする権限を付与するために、複数の処理要素に複数の権限付与メッセージを送ることをさらに含む。
【００２０】
いくつかの実施形態において、方法は、調停ブロックの衝突検出器によって、複数のＲＡＭタイルのうちの１つへのメモリ・アクセス要求をモニタすることと、複数の処理要素の２つ以上が同時に複数のＲＡＭタイルのうちの１つにアクセスしようとしているかどうかを判定することとをさらに含む。
【００２１】
いくつかの実施形態において、複数の処理要素は、少なくとも１つのベクトル・プロセッサと、少なくとも１つのハードウェア・アクセラレータとを備える。
【００２２】
いくつかの実施形態において、方法は、複数のメモリ・スライスのうちの１つへのアクセスを提供するようにそれぞれ構成される複数のメモリ・スライス・コントローラを提供することをさらに含む。
【００２３】
いくつかの実施形態において、方法は、相互接続システムの第１のバス・システムを介した、少なくとも１つのベクトル・プロセッサとメモリ・サブシステムとの間の通信を提供することをさらに含む。
【００２４】
いくつかの実施形態において、方法は、相互接続システムの第２のバス・システムを介した、少なくとも１つのハードウェア・アクセラレータとメモリ・サブシステムとの間の通信を提供することをさらに含む。
【００２５】
いくつかの実施形態において、第２のバス・システムは、少なくとも１つのハードウェア・アクセラレータからのメモリ・アクセス要求を受けることによって、かつ、メモリ・サブシステムへのアクセスを、少なくとも１つのハードウェア・アクセラレータに許可することによって、少なくとも１つのハードウェア・アクセラレータとメモリ・サブシステムとの間の通信を仲介するように構成されるスライス・アドレス要求フィルタを備える。
【００２６】
開示される主題は、電子装置を含む。電子装置は、並列処理装置を含む。処理装置は、命令を実行するようにそれぞれ構成される複数の処理要素と、複数の処理要素のうちの１つと関連する第１のメモリ・スライスを含む複数のメモリ・スライスを備えるメモリ・サブシステムとを含む。第１のメモリ・スライスは、それぞれ個々の読み出し及び書き込みポートを有する複数のランダム・アクセス・メモリ（ＲＡＭ）タイルを備える。並列処理装置は、複数の処理要素とメモリ・サブシステムとを結合するように構成される相互接続システムを含むことができる。相互接続システムは、第１のメモリ・スライスと複数の処理要素のうちの１つとを結合するように構成されるローカル相互接続と、第１のメモリ・スライスと複数の処理要素のうちの残りとを結合するように構成されるグローバル相互接続とを含むことができる。電子装置はまた、並列処理装置と通信し、メモリに格納されるモジュールを実行するように構成されるプロセッサを含む。モジュールは、データ処理プロセスと関連するフロー・グラフを受けるように構成され、ここで、フロー・グラフは、複数のノードと、複数のノードのうちの２つ以上を連結する複数のエッジとを備え、各ノードは動作を識別し、各エッジは連結されたノード間の関係を識別する。さらに、モジュールは、複数のノードのうちの第１のノードを並列処理装置の第１の処理要素に割り当て、複数のノードのうちの第２のノードを並列処理装置の第２の処理要素に割り当てるように構成され、それによって、第１のノード及び第２のノードと関連する動作を並列化する。
【００２７】
いくつかの実施形態において、フロー・グラフは、拡張可能なマーク付け言語（ＸＭＬ）フォーマットで提供される。
【００２８】
いくつかの実施形態において、モジュールは、複数のノードのうちの第１のノードを、並列処理装置のメモリ・サブシステムの過去のパフォーマンスに基づいて、第１の処理要素に割り当てるように構成される。
【００２９】
いくつかの実施形態において、並列処理装置のメモリ・サブシステムは、所定の期間のメモリ衝突回数をカウントするように構成されるカウンタを備え、メモリ・サブシステムの過去のパフォーマンスは、カウンタによって計測されるメモリ衝突回数を備える。
【００３０】
いくつかの実施形態において、モジュールは、複数のノードのうちの第１のノードを第１の処理要素に割り当てるように構成され、一方、並列処理装置は、フロー・グラフの少なくとも一部を作動させている。
【００３１】
いくつかの実施形態において、モジュールは、複数のフロー・グラフを受けて、複数のフロー・グラフと関連するすべての動作を並列処理装置の単一の処理要素に割り当てるように構成される。
【００３２】
いくつかの実施形態において、モジュールは、処理要素によるメモリ・アクセスをずらして、メモリ衝突を減少させるように構成される。
【００３３】
いくつかの実施形態において、電子装置は、携帯機器を備える。
【００３４】
いくつかの実施形態において、フロー・グラフは、並列処理装置と関連するアプリケーション・プログラミング・インタフェース（ＡＰＩ）を使用して指定される。
【００３５】
いくつかの実施形態において、モジュールは、入力画像データをストリップに分割し、入力画像データの１つのストリップを複数の処理要素のうちの１つに提供することによって、入力画像データを複数の処理要素に提供するように構成される。
【００３６】
いくつかの実施形態において、入力画像データのストリップの数は、複数の処理要素の数と同じである。
【００３７】
開示される主題は、方法を含む。方法は、並列処理装置と通信するプロセッサで、データ処理プロセスと関連するフロー・グラフを受けることを含み、フロー・グラフは、複数のノードと、複数のノードのうちの２つ以上を連結する複数のエッジとを備え、各ノードは動作を識別し、各エッジは連結されたノードの関係を識別する。方法はまた、
複数のノードのうちの第１のノードを並列処理装置の第１の処理要素に割り当てること
と、複数のノードのうちの第２のノードを並列処理装置の第２の処理要素に割り当てることとを含み、それによって、第１のノード及び第２のノードと関連する動作を並列化する。並列処理装置はまた、第１の処理要素と関連する第１のメモリ・スライスを含む複数のメモリ・スライスを備えるメモリ・サブシステムを含み、ここで、第１のメモリ・スライスは、それぞれ個々の読み出し及び書き込みポートを有する複数のランダム・アクセス・メモリ（ＲＡＭ）タイルと、第１の処理要素、第２の処理要素、及びメモリ・サブシステムを結合するように構成される相互接続システムとを備える。相互接続システムは、第１のメモリ・スライス及び第１の処理要素を結合するように構成されるローカル相互接続と、第１のメモリ・スライス及び第２の処理要素を結合するように構成されるグローバル相互接続とを含む。
【００３８】
いくつかの実施形態において、複数のノードのうちの第１のノードを並列処理装置の第１の処理要素に割り当てることは、複数のノードのうちの第１のノードを並列処理装置の第１のメモリ・スライスの過去のパフォーマンスに基づいて第１の処理要素に割り当てることを含む。
【００３９】
いくつかの実施形態において、方法はまた、メモリ・サブシステムのカウンタで、所定の期間にわたる第１のメモリ・スライスにおけるメモリ衝突回数をカウントすることを含み、第１のメモリ・スライスの過去のパフォーマンスは、第１のメモリ・スライスにおけるメモリ衝突回数を備える。
【００４０】
いくつかの実施形態において、複数のノードのうちの第１のノードを第１の処理要素に割り当てることが行われ、一方、並列処理装置は、フロー・グラフの少なくとも一部を作動させている。
【００４１】
いくつかの実施形態において、方法はまた、メモリ衝突を減少させるために、処理要素による第１のメモリ・スライスへのメモリ・アクセスをずらすことを含む。
【００４２】
いくつかの実施形態において、フロー・グラフは、並列処理装置と関連するアプリケーション・プログラミング・インタフェース（ＡＰＩ）を使用して指定される。
【００４３】
いくつかの実施形態において、方法はまた、入力画像データを複数のストリップに分割し、入力画像データの複数のストリップのうちの１つを複数の処理要素のうちの１つに提供することによって、入力画像データを複数の処理要素に提供することを含む。
【００４４】
いくつかの実施形態において、入力画像データの複数のストリップの数は、複数の処理要素の数と同じである。
【００４５】
開示される主題のさまざまな目的、特徴、及び利点は、同様の参照番号が同様の要素を示す以下の図面に関連して検討すると、開示される主題の以下の詳細な説明に関してより完全に理解することができる。
【図面の簡単な説明】
【００４６】
【図１】Ｃｈｉｍｅｒａのコンピュータ顔像処理プラットフォームを説明する。
【図２】Ｃｅｌｌプロセッサのマルチコア・アーキテクチャを説明する。
【図３】効率的な低電力マイクロプロセッサ（ＥＬＭ）アーキテクチャを説明する。
【図４】いくつかの実施形態による改善されたメモリ・サブシステムを示す。
【図５】いくつかの実施形態による並列処理装置のセクションを示す。
【図６】いくつかの実施形態によるタイル制御ロジックの集中型衝突検出システムを示す。
【図７】いくつかの実施形態によるタイル制御ロジックの分散型衝突検出システムを示す。
【図８】いくつかの実施形態による衝突信号をリクエスタに報告するための調停ブロックを示す。
【図９】いくつかの実施形態によるサイクル指向調停ブロックを示す。
【図１０】いくつかの実施形態によるメモリ・アクセス調停に起因したメモリ・アクセス・レイテンシを減少させるためのメカニズムを示す。
【図１１】いくつかの実施形態によるスケジューリング・ソフトウェアのアプリケーションを示す。
【図１２】いくつかの実施形態による並列処理装置を有するシステムの階層的な構成を提供する。
【図１３】いくつかの実施形態による、有向非巡回グラフ（ＤＡＧ）またはフロー・グラフの記述が並列処理装置の動作を制御するために使用できる方法を示す。
【図１４Ａ】一実施形態による、コンパイラ及びスケジューラによるタスクのスケジューリング及び発行を示す。
【図１４Ｂ】一実施形態による、コンパイラ及びスケジューラによるタスクのスケジューリング及び発行を示す。
【図１５】いくつかの実施形態によるリアルタイムＤＡＧコンパイラの動作を示す。
【図１６】ＯｐｅｎＣＬスケジューラによって生成されるスケジュールを、いくつかの実施形態による提案されたオンラインＤＡＧスケジューラによって生成されるスケジュールと比較する。
【図１７】いくつかの実施形態による、プロセッサ及び／またはフィルタ・アクセラレータの動作を同期させるためのバリア・メカニズムを示す。
【図１８】いくつかの実施形態による、異なるタイプの処理要素を有する並列処理装置を示す。
【図１９】いくつかの実施形態による、提案されたマルチコア・メモリ・サブシステムを示す。
【図２０】いくつかの実施形態による、接続マトリクス（ＣＭＸ）インフラストラクチャの単一のスライスを示す。
【図２１】いくつかの実施形態による、アクセラレータ・メモリ・コントローラ（ＡＭＣ）Ｃｒｏｓｓｂａｒアーキテクチャを示す。
【図２２】いくつかの実施形態によるＡＭＣクロスバー・ポート・コントローラを示す。
【図２３】いくつかの実施形態による、ＡＭＣを使用する読み出し動作を示す。
【図２４】いくつかの実施形態による、ＡＭＣを使用する書き込み動作を示す。
【図２５】いくつかの実施形態による並列処理装置を示す。
【図２６】いくつかの実施形態による並列処理装置を含む電子装置を示す。
【発明を実施するための形態】
【００４７】
以下の説明において、開示される主題の詳細な理解を提供するために、多数の特定の詳細が、開示される主題のシステム及び方法、ならびに、そのようなシステム及び方法を作動させてもよい環境などに関して説明される。しかし、開示される主題はこのような特定の詳細なしに実施されてもよく、当該技術分野において既知である特定の機能は、開示される主題における主題の複雑化を回避するために、詳細に説明されないことは当業者にとって明らかであろう。さらに、以下で提供される実施例は例示的なものであり、開示される主題の範囲内であるその他のシステム及び方法があることが意図されていることが理解されよう。
【００４８】
このような異なる処理リソース（たとえば、プロセッサ及びハードウェア・アクセラレータ）を相互に連結させる１つの可能な方法は、ＮＶｉｄｉａによって開発されたＣｈｉｍｅｒａのコンピュータ・フォトグラフィ・エンジンにおいて概説されるようなバスを使用することである。図１は、Ｃｈｉｍｅｒａのコンピュータ・フォトグラフィ・エンジンを示す。Ｃｈｉｍｅｒａコンピュータ・フォトグラフィ・エンジン１００は、フラットレベル・バス・インフラストラクチャ１０８（たとえば、すべての処理要素を連結する単一階層バス・システム）を介してマルチコアＡＲＭプロセッサ・サブシステム１０４及びハードウェア（ＨＷ）画像信号処理（ＩＳＰ）アクセラレータ１０６に連結される複数のグラフィック処理ユニット（ＧＰＵ）コア１０２を含む。Ｃｈｉｍｅｒａコンピュータ・フォトグラフィ・エンジンは一般に、基礎をなすＧＰＵコア１０２、ＣＰＵ１０４、及びＩＳＰブロック１０６の詳細をプログラマから分離するソフトウェア・フレームワークとして表される。さらにまた、Ｃｈｉｍｅｒａコンピュータ・フォトグラフィ・エンジン１００は、２台の情報バス１０８−０、１０８−１を介するコンピュータ・フォトグラフィ・エンジンを通るデータフロー、画像またはフレーム・データを搬送する第１のバス１０８−０、及び、各フレームと関連する状態情報を搬送する第２のバス１０８−１を記述する。
【００４９】
フラットレベル・バス・インフラストラクチャの使用は、Ｃｈｉｍｅｒａの場合のように、安価で、実装に便利である可能性がある。しかし、フラットレベル・バス・インフラストラクチャの使用は、ＧＰＵコア１０２、ＣＰＵ１０４、及びＩＳＰブロック１０６などの異種の処理要素（たとえば、さまざまなタイプの処理要素）を相互連結する手段として、多数の著しい不利益を有する可能性がある。第１に、計算資源を相互連結するバスの使用は、メモリが、各中央処理装置（ＣＰＵ）１０４、グラフィック処理装置（ＧＰＵ）１０２、及び／または画像信号プロセッサ（ＩＳＰ）ブロック１０６に対してローカルなシステムの隅々に分散される可能性があることを意味する。したがって、プログラマが実装したいコンピュータ・フォトグラフィ・パイプラインの要件に従って、メモリを処理パイプライン内で柔軟に割り当てることができない。この柔軟性の欠如は、特定の画像または映像処理が実装困難または実装不可能である、あるいは、フレームレート、画像品質、またはその他の点で実施態様が制限されることを意味することがある。
【００５０】
第２に、フラットレベル・バス・インフラストラクチャの使用はまた、それぞれの計算資源（ＣＰＵ１０４、ＧＰＵ１０２、及びＩＳＰブロック１０６）がバス帯域幅を求めて争わなければならないことも意味する。この争いは調停を必要とし、それは利用可能なバス帯域幅の量を減少させる。したがって、実際の作業に利用可能である理論的な帯域幅は徐々に小さくなる。帯域幅の減少は、処理パイプラインが、フレームレート、画像品質、及び／または電力の点で、アプリケーションのパフォーマンス要件を満たすことができないことを意味することがある。
【００５１】
第３に、特定の計算資源に近いメモリの不足は、データを、所定のＧＰＵ１０２、ＣＰＵ１０４、またはハードウェアＩＳＰブロック１０６と関連するメモリと、別の計算資源との間を行き来するように転送しなければならないことを意味することがある。この局所性の欠如は、バス帯域幅の追加及び調停のオーバヘッドを招く可能性があることを意味する。さらにまた、局所性の欠如は電力をさらに消費することも意味する。したがって、特定のターゲット・フレームレートで特定のアルゴリズムをサポートすることは、困難または不可能であることがある。
【００５２】
第４に、フラットレベル・バス・インフラストラクチャの使用はまた、それぞれが異なるレイテンシ特性を有することがある異種の処理要素からパイプラインを構築することをより困難にすることがある。たとえば、ＧＰＵコア１０２は、レイテンシを補うために、メモリ（通常、外部ＤＲＡＭ）への複数の顕著なアクセスを取り扱う複数の重なり合うプロセス・スレッドを実行することによってレイテンシを許容するように設計されており、その一方で、通常のＣＰＵ１０４及びハードウェアＩＳＰブロック１０６は、レイテンシを許容するようには設計されていない。
【００５３】
異なる処理リソースを相互連結する別の方法は、ＩＢＭによって開発されたＣｅｌｌプロセッサアーキテクチャによって提供され、それは図２に示される。Ｃｅｌｌプロセッサアーキテクチャ２００は、各プロセッサ２０４に利用可能なローカル・ストレージ（ＬＳ）２０２を含み、相乗的実行ユニット（ＳＸＵ）としても知られている。Ｃｅｌｌプロセッサ２００は、時分割されたインフラストラクチャに基づき、ダイレクト・メモリ・アクセス（ＤＭＡ）２０６は、１つのプロセッサのＬＳ２０２と別のプロセッサのＬＳ２０２との間のデータ転送をプログラム的にスケジュール化するように転送する。Ｃｅｌｌアーキテクチャ２００に関する困難さは、必要なときに共有データを各プロセッサ２０４が利用可能であることを保証するように、（Ｃｅｌｌアーキテクチャ２００の高いレイテンシのために）バックグラウンド・データ転送を数百サイクルも事前に明確にスケジュール化するための、プログラマが直面する複雑さである。プログラマがバックグラウンド・データ転送を明確にスケジュール化しない場合、プロセッサ２０４はストールし、それによりパフォーマンスは低下する。
【００５４】
異なる処理リソースを相互連結する別の方法は、共有マルチコア・メモリ・サブシステムを使用し、マルチコア処理システムのプロセッサ間で効率的にデータを共有することである。この共有マルチコア・メモリ・サブシステムは、効率的な低電力マイクロプロセッサ（ＥＬＭ）システムで使用される。図３は、ＥＬＭシステムを示す。ＥＬＭシステム３００は、ＥＬＭシステムにおける計算リソースの主要な物理設計ユニットである、アンサンブル３０２を含む。アンサンブル３０２は、疎結合される４つのプロセッサ３０４のクラスタを含む。４つのプロセッサ３０４のクラスタは、アンサンブル・メモリ３０６及び相互接続ネットワークへのインタフェースなどのローカル・リソースを共有する。アンサンブル・メモリ３０６は、プロセッサ３０４の近くに命令及びデータ・ワーキングセットを取り込み、ローカル・プロセッサ３０４及びネットワークインタフェース・コントローラが同時にそれにアクセスすることを可能とするように積み上げられる。アンサンブル３０２内の各プロセッサ３０４は、アンサンブル・メモリ３０６の好ましいバンクを割り当てられる。プロセッサ３０４によるその好ましいバンクへのアクセスは、その他のプロセッサ及びネットワークインタフェースによるアクセスより優先される（かつ、アクセスをブロックする）。単一のプロセッサ３０４に対してプライベートな命令及びデータを、その好ましいバンクに格納して、決定論的なアクセス時間を提供してもよい。読み出し及び書き込みポートへのアクセスを制御するアービタは、プロセッサ３０４とメモリ・バンク３０６との間の親和性を確立するためにバイアスされる。これにより、ソフトウェアが、マルチ・プロセッサによって共有されてもよいデータにアクセスするときに、帯域幅の可用性及びレイテンシについてより強い仮定を作ることが可能になる。
【００５５】
しかし、ＥＬＭアーキテクチャ３００は、物理的に大きなランダム・アクセス・メモリ（ＲＡＭ）ブロックのために、多くの電力を消費する可能性がある。さらにまた、ＥＬＭアーキテクチャ３００は、多くのデータ共有がプロセッサ３０４間にあることによりスループットが低くなる可能性がある。さらに、プロセッサ３０４とハードウェア・アクセラレータとの間でデータ共有には対応しておらず、それは特定の場合において、電力及びパフォーマンスに関して好適である可能性がある。
【００５６】
本開示は、マルチ・プロセッサ及びハードウェア・アクセラレータが、その他のプロセッサ及びハードウェア・アクセラレータと同時に共有データにアクセスすることを可能にする機器、システム、及び方法に関するものである。本開示は、ローカル・ストレージにアクセスするためのより高い親和性（たとえば、より高い優先度）を有するローカル・プロセッサによってブロックされることなく、共有データに同時にアクセスするための機器、システム、及び方法を提供する。
【００５７】
開示される機器、システム、及び方法は、既存のマルチコア・メモリ・アーキテクチャについての実質的な利益を提供する。既存のマルチコア・メモリ・アーキテクチャは、プロセッサごとにＲＡＭの単一のモノリシック・ブロックを使用し、それはデータがアクセスできる帯域幅を制限する可能性がある。開示されるアーキテクチャは、ＲＡＭの単一のモノリシック・ブロックを使用する既存のマルチコア・メモリ・アーキテクチャと比較して、実質的により高い帯域幅でメモリにアクセスするためのメカニズムを提供することができる。開示されたアーキテクチャは、プロセッサごとに単一の大きいＲＡＭブロックをインスタンス化する代わりに、プロセッサごとに複数の物理ＲＡＭブロックをインスタンス化することによって、このより高い帯域幅を得る。各ＲＡＭブロックは、専用アクセス調停ブロック及び周辺インフラストラクチャを含む可能性がある。したがって、メモリ・サブシステムの各ＲＡＭブロックは、システムの複数の処理要素、たとえば、ベクトル・プロセッサ、縮小命令セットコンピューティング（ＲＩＳＣ）プロセッサ、ハードウェア・アクセラレータ、またはＤＭＡエンジンによって、他とは独立してアクセスされる可能性がある。
【００５８】
単一の大きいＲＡＭインスタンスに基づくメモリ・バンクは複数のより小さいＲＡＭインスタンスに基づくメモリ・バンクより効率的な面積であるため、複数の小さいＲＡＭインスタンスの使用が単一の大きいＲＡＭインスタンスを使用することと比較して有益であることは、いささか直観と反することである。しかし、より小さいＲＡＭインスタンスの電力散逸は通常、単一の大きいＲＡＭインスタンスのものよりかなり低い。さらにまた、仮に単一の大きい物理ＲＡＭインスタンスが複数インスタンスＲＡＭブロックと同じ帯域幅を実現するとしたならば、単一の大きい物理ＲＡＭインスタンスは、複数の物理ＲＡＭインスタンスから成るものより実質的に高い電力となるであろう。したがって、少なくとも電力散逸の見込みからは、メモリ・サブシステムは、単一の大きいＲＡＭインスタンスを使用することよりも、複数の物理ＲＡＭインスタンスを使用することから利益を得ることができる。
【００５９】
より小さいＲＡＭブロックのＲＡＭアクセスごとのコスト、たとえば、メモリ・アクセス時間または電力消費が通常、より大きいＲＡＭブロックのコストよりはるかに低いという点で、複数の物理ＲＡＭインスタンスを有するメモリ・サブシステムは、さらなる利点を有する可能性がある。これは、ＲＡＭからデータを読み出し／書き込みするために使用されるビット線がより短いためである。さらにまた、より小さいＲＡＭブロックの読み出し及び書き込みのためのアクセス時間もより短い（より短いビット線と関連する抵抗−キャパシタンス（ＲＣ）時定数が減少するため）。したがって、マルチＲＡＭベースのメモリ・サブシステムに結合される処理要素は、より高い周波数で作動させることが可能であり、それは次に、スタティック・リーク電流によるスタティック電力を減少させる。特にプロセッサ及びメモリが電力領域に分離されるときに、これは有効である可能性がある。たとえば、所定のプロセッサまたはフィルタ・アクセラレータがそのタスクを完了したとき、所定のプロセッサまたはフィルタ・アクセラレータと関連する電力領域を有利にはゲートオフすることができる。したがって、開示されるアーキテクチャのメモリ・サブシステムは、利用可能帯域幅及び電力散逸に関して優れた特性を有する。
【００６０】
さらに、それぞれ調停されたアクセスを受ける、複数のＲＡＭインスタンスを有するメモリ・サブシステムは、ＲＡＭブロックをロックすることによってＲＡＭブロックを特定のプロセッサ専用とすることなく、プロセッサとハードウェア・アクセラレータとの間でデータを共有する多くの方法を提供することができる。原則として、より大きいＲＡＭがＮ個のサブブロックにさらに分割される場合、利用可能なデータ帯域幅は約Ｎ倍に増加する。これは、データを、複数の処理要素による同時共有（たとえば、アクセス衝突）を減少させるために適切に分割することができるという仮定に基づく。たとえば、コンシューマ・プロセッサまたはコンシューマ・アクセラレータが、プロデューサ・プロセッサまたはプロデューサ・アクセラレータにより占められているデータバッファからデータを読み込むとき、データバッファの同時共有があり、結果としてアクセス衝突となる。
【００６１】
いくつかの実施形態において、開示されるアーキテクチャは、データの同時共有を減少させるメカニズムを提供することができる。特に、開示されるアーキテクチャは、静的メモリ割当てメカニズム及び／または動的メモリ割当てメカニズムを介した同時共有を減少させるために適用することができる。たとえば、静的メモリ割当てメカニズムにおいて、データは、データの同時共有を減少させるために、プログラムの開始前、たとえばプログラムのコンパイル段階で、メモリの異なる部分にマッピングされる。他方で、動的メモリ割当てスキームにおいて、データは、プログラム実行中に、メモリの異なる部分にマッピングされる。静的メモリ割当てメカニズムは、メモリをデータに割り当てるための予測可能なメカニズムを提供し、それは、電力またはパフォーマンスに関して任意の実質的なオーバヘッドを発生しない。
【００６２】
別の実施例として、開示されるアーキテクチャは、複数のＲＡＭブロックに分割されるデータ構造へのアクセスを仲介するコントローラ（たとえば、統括ＲＩＳＣプロセッサ）あるいは１つまたは複数のプロセッサで実行するランタイム・スケジューラとともに使用されることが可能である。ランタイム・スケジューラは、共有データへの同時アクセスを減少させるために、データ（たとえば、画像フレーム）の部分（たとえば、ラインまたはタイル）上で作動する異なる処理要素の起動時間をずらすように構成することができる。
【００６３】
いくつかの実施形態において、ランタイム・スケジューラは、ハードウェア調停ブロックで補完することができる。たとえば、ハードウェア調停ブロックは、ストールを減少させるように設計された共有決定論的相互接続を介して、プロセッサ（ベクトル・プロセッサなど）による共有メモリ・アクセスを仲介するように構成されることが可能である。いくつかの場合において、ハードウェア調停ブロックは、サイクル指向スケジューリングを行うように構成されることが可能である。サイクル指向スケジュール化は、タスク・レベルの粒度でリソースの使用をスケジュール化することとは対照的に、クロック・サイクルの粒度でリソースの使用をスケジュール化することを含むことができ、それは複数のクロック・サイクルを必要としてもよい。クロック・サイクルの粒度でリソース割当てをスケジュール化することにより、より高いパフォーマンスを提供することができる。
【００６４】
他の実施形態において、ランタイム・スケジューラは、それぞれがデータを格納するための入力バッファ及び出力バッファを含むことができる多数のハードウェア・アクセラレータで補完することができる。入出力バッファは、外部メモリなどの外部リソースへのアクセス時の遅延の差異を吸収（または隠す）ように構成することができる。入出力バッファは、先入先出方式（ＦＩＦＯ）バッファを含むことが可能であり、ＦＩＦＯバッファは、外部リソースへのアクセス時の遅延の差異の吸収に十分なデータ量及び／または命令を格納するために、十分な数のスロットを含むことができる。
【００６５】
いくつかの実施形態において、開示される機器、システム、及び方法は、並列処理装置を提供する。並列処理装置は、並列プロセッサなどの複数のプロセッサを含むことが可能であり、そのそれぞれが命令を実行することができる。並列処理装置はまた、複数のメモリ・スライスを含むことが可能であり、各メモリ・スライスは、並列処理装置のうちの１つと関連し、並列処理装置のその他の処理装置にそのプロセッサへの優先アクセスを与える。各メモリ・スライスは、複数のＲＡＭタイルを含むことが可能であり、各ＲＡＭタイルは、読み出しポート及び書き込みポートを含むことが可能である。いくつかの場合において、各メモリ・スライスには、関連するメモリ・スライスへのアクセスを提供するためのメモリ・スライス・コントローラが設けられる場合がある。プロセッサ及びＲＡＭタイルは、バスを介して互いに結合されることが可能である。いくつかの場合において、バスは、任意のプロセッサを任意のメモリ・スライスに結合することができる。好適には、各ＲＡＭタイルは、タイルへのアクセスを許可するためのタイル制御ロジック・ブロックを含むことが可能である。タイル制御ロジック・ブロックは、タイル制御ロジックまたは調停ブロックと呼ばれることもある。
【００６６】
いくつかの実施形態において、並列処理装置は、既定の処理関数、たとえば、画像処理を行うように構成される少なくとも１つのハードウェア・アクセラレータをさらに含むことが可能である。いくつかの場合において、既定の処理関数は、フィルタリング動作を含むことが可能である。
【００６７】
いくつかの実施形態において、少なくとも１つのハードウェア・アクセラレータは、独立したバスを介してメモリ・スライスに結合されることが可能である。独立したバスは、関連するアクセラレータ・メモリ・コントローラ（ＡＭＣ）を含むことが可能であり、それは、少なくとも１つのハードウェア・アクセラレータから要求を受けて、関連するメモリ・スライス・コントローラを通してのメモリ・スライスへのアクセスをハードウェア・アクセラレータに許可するように構成される。よって、ハードウェア・アクセラレータで採用されるメモリ・アクセス経路は、ベクトル・プロセッサで採用される経路と異なる可能性があることが理解されるであろう。いくつかの実施形態において、少なくとも１つのハードウェア・アクセラレータは、メモリ・スライスへのアクセス時の遅延に対応する内部バッファ（たとえば、ＦＩＦＯメモリ）を含むことが可能である。
【００６８】
いくつかの実施形態において、並列処理装置は、ホスト・プロセッサを含むことが可能である。ホスト・プロセッサは、ホスト・バスを介してＡＭＣと通信するように構成することが可能である。また、並列処理装置には、アプリケーション・プログラミング・インタフェース（ＡＰＩ）を設けることが可能である。ＡＰＩは、ベクトル・プロセッサ及び／またはハードウェア・アクセラレータへの高レベルのインタフェースを提供する。
【００６９】
いくつかの実施形態において、並列処理装置は、並列処理装置に命令を提供するコンパイラとともに作動することができる。いくつかの場合において、コンパイラは、ベクトル・プロセッサまたはハードウェア・アクセラレータなどの処理要素とは異なるホスト・プロセッサ上で実行されるように構成される。いくつかの場合において、コンパイラは、画像／映像ＡＰＩ１２０６（図１２）を介してフロー・グラフを受けるように構成され、画像処理プロセスを指定する。コンパイラは、フロー・グラフの１つまたは複数の態様を、ベクトル・プロセッサまたはハードウェア・アクセラレータなどの処理要素のうちの１つまたは複数にマッピングするようにさらに構成することが可能である。いくつかの実施形態において、フロー・グラフは、ノード及びエッジを含むことが可能であり、ここで、各ノードは動作を識別し、各エッジは、ノード（たとえば、動作）間の関係、たとえば動作が実行される順番を識別する。コンパイラは、ノード（たとえば、動作）を処理要素のうち１つに割り当て、フロー・グラフの計算を並列化するように構成することが可能である。いくつかの実施形態において、フロー・グラフは、拡張可能なマーク付け言語（ＸＭＬ）フォーマットで提供されてもよい。いくつかの実施形態において、コンパイラは、複数のフロー・グラフを単一の処理要素に割り当てるように構成することが可能である。
【００７０】
いくつかの実施形態において、並列処理装置は、そのパフォーマンスを計測して、コンパイラに情報を提供するように構成することが可能である。したがって、コンパイラは、並列処理装置から受けた過去のパフォーマンス情報を使用して、並列処理装置の処理要素への現在のタスクの割当てを決定することができる。いくつかの実施形態において、パフォーマンス情報は、処理装置の１つまたは複数の処理要素で遭遇したアクセス衝突の数を示すことができる。
【００７１】
いくつかの場合において、並列処理装置を、映像アプリケーションで使用することが可能だが、それは計算処理上コストが高くなるかもしれない。映像アプリケーションの計算処理上の要求に対応するために、並列処理装置は、メモリ・アクセスの間、処理ユニット間のアクセス衝突を減少させるように、そのメモリ・サブシステムを構成することができる。このため、前述のように、並列処理装置は、単一の物理メモリブロックとしてモノリシック・メモリ・バンクを使用する代わりに、モノリシック・メモリ・バンクを複数の物理ＲＡＭインスタンスにさらに分割することができる。この細分化により、各物理ＲＡＭインスタンスは、読み出し及び書き込み動作を調停することができ、それによって、メモリ・バンクの物理ＲＡＭインスタンスの数により利用可能帯域幅を増加させる。
【００７２】
いくつかの実施形態において、ハードウェア・サイクル指向調停はまた、複数のトラフィック・クラス及びプログラム可能なスケジューリング・マスクを提供することができる。複数のトラフィック・クラス及びプログラム可能なスケジューリング・マスクは、ランタイム・スケジューラを使用して制御することが可能である。ハードウェア・サイクル指向調停ブロックは、ポート調停ブロックを含むことが可能である、それはラウンドロビン・スケジューリング・スキームで単一の共有リソースの複数のリクエスタを割り当てるように構成することが可能である。ラウンドロビン・スケジューリング・スキームにおいて、リクエスタ（たとえば、処理要素）は、要求がリクエスタから受けた順番で、リソース（たとえば、メモリ）へのアクセスが許可される。いくつかの場合において、ポート調停ブロックは、複数のトラフィック・クラスに対応するために、ラウンドロビン・スケジューリング・スキームを強化することが可能である。単一の共有リソースは、ＲＡＭタイル、共有レジスタまたはベクトル・プロセッサ、フィルタ・アクセラレータ、及びＲＩＳＣプロセッサがデータを共有するためにアクセスすることができるその他のリソースを含むことが可能である。さらに、調停ブロックは、優先ベクトルまたはスーパー優先ベクトルによるラウンドロビン・リソース割当てのオーバーライドを考慮することができる。優先ベクトルまたはスーパー優先ベクトルは、必要に応じて関心のある特定のアプリケーションによって特定のトラフィック・クラス（たとえば、映像トラフィック・クラス）に優先順位をつけるために、ランタイム・スケジューラによって提供することができる。
【００７３】
いくつかの実施形態において、処理要素は、ベクトル・プロセッサまたはストリーミング・ハイブリッド・アーキテクチャ・ベクトル・エンジン・プロセッサ、ハードウェア・アクセラレータ、及びハードウェア・フィルタ・オペレータなどのプロセッサのうちの１つまたは複数を含むことができる。
【００７４】
図４は、メモリ・サブシステムを有する並列処理装置を示し、それはいくつかの実施形態に従って、マルチ・プロセッサ（たとえば、ストリーミング・ハイブリッド・アーキテクチャ・ベクトル・エンジン（ＳＨＡＶＥ）プロセッサ）がマルチポート・メモリ・サブシステムを共有することを可能にする。特に、図４は、並列処理装置４００を示し、それは画像及び映像データの処理に好適である。処理装置４００は、プロセッサなどの複数の処理要素４０２を備える。図４の例示的な構成において、処理装置４００は、８つのプロセッサ（ＳＨＡＶＥ  ０  ４０２−０〜ＳＨＡＶＥ  ７  ４０２−７）を含む。各プロセッサ４０２は、データがメモリ４１２からロードされてよく、かつメモリ４１２に格納されてもよい２つのロード・ストア・ユニット４０４、４０６（ＬＳＵ０、ＬＳＵ１）を含むことができる。各プロセッサ４０２はまた、命令がロードされてもよい命令ユニット４０８を含むことが可能である。プロセッサがＳＨＡＶＥを含む特定の実施形態において、ＳＨＡＶＥは、縮小命令セットコンピュータ（ＲＩＳＣ）、デジタル信号プロセッサ（ＤＳＰ）、超長命令語（ＶＬＩＷ）、及び／またはグラフィック処理ユニット（ＧＰＵ）のうちの１つまたは複数を含むことが可能である。メモリ４１２は、本明細書で接続マトリクス（ＣＭＸ）スライスと呼ばれる、複数のメモリ・スライス４１２−０〜４１２−７を備える。各メモリ・スライス４１２−Ｎは、対応するプロセッサ４０２−７と関連する。
【００７５】
並列処理装置４００はまた、プロセッサ４０２及びメモリ・スライス４１２を結合する相互接続システム４１０を含む。相互接続システム４１０は本明細書において、ＳＨＡＶＥ間相互接続（ＩＳＩ）と呼ばれる。ＩＳＩは、プロセッサ４０２がメモリ・スライス４１２のうちの任意の１つの任意の部分にデータを読み出しまたは書き込みすることができるバスを含むことが可能である。
【００７６】
図５は、いくつかの実施形態による並列処理装置のセクションを示す。セクション５００は、単一のプロセッサ４０２−Ｎと、単一のプロセッサ４０２−Ｎと関連するメモリ・スライス４１２−Ｎと、単一のプロセッサ４０２−Ｎ及びその他のメモリ・スライス（図示せず）と結合するＩＳＩ４１０と、メモリ・スライス４１２−Ｎのタイルとプロセッサ４０２との間の通信を調停するタイル制御ロジック５０６とを含む。セクション５００に示されるように、プロセッサ４０２−Ｎは、プロセッサ４０２−Ｎと関連するメモリ・スライス４１２−Ｎに直接アクセスするように構成されることが可能である。プロセッサ４０２−Ｎは、ＩＳＩを介してその他のメモリ・スライス（図示せず）にアクセスすることができる。
【００７７】
いくつかの実施形態において、各メモリ・スライス４１２−Ｎは、複数のＲＡＭタイルまたは物理ＲＡＭブロック５０２−０〜５０２−Ｎを含むことが可能である。たとえば、１２８ｋＢのサイズを有するメモリ・スライス４１２−Ｎは、４ｋ×３２ビット・ワードとして編成される４つの３２ｋＢシングル・ポートＲＡＭタイル（たとえば、物理ＲＡＭ要素）を含むことが可能である。いくつかの実施形態において、タイル５０２はまた、論理ＲＡＭブロックと称されてもよい。いくつかの実施形態において、タイル５０２は、シングル・ポートの相補型金属酸化膜半導体（ＣＭＯＳ）ＲＡＭを含むことが可能である。シングル・ポートＣＭＯＳ  ＲＡＭの利点は、それが一般に最も多くの半導体プロセスにおいて利用可能であるということである。他の実施形態において、タイル５０２は、マルチポートＣＭＯＳ  ＲＡＭを含むことが可能である。
【００７８】
いくつかの実施形態において、各タイル５０２を、タイル制御ロジック５０６と関連させることが可能である。タイル制御ロジック５０６は、プロセッサ４０２から要求を受けるように構成され、関連するタイル５０２の個々の読み出し及び書き込みポートへのアクセスを提供する。たとえば、処理要素４０２−ＮがＲＡＭタイル５０２−０のデータにアクセスしたいとき、処理要素４０２−ＮがＲＡＭタイル５０２−０にメモリ・データ要求を直接送る前に、処理要素４０２−Ｎは、ＲＡＭタイル５０２−０と関連するタイル制御ロジック５０６−０に、メモリ・アクセス要求を送ることができる。メモリ・アクセス要求は、処理要素４０２−Ｎによって要求されるデータのメモリ・アドレスを含むことが可能である。その後、タイル制御ロジック５０６−０は、メモリ・アクセス要求を分析し、処理要素４０２−Ｎが要求されたメモリにアクセスできるかどうか判定することができる。処理要素４０２−Ｎが要求されたメモリにアクセスすることができる場合、タイル制御ロジック５０６−０は、処理要素４０２−Ｎにアクセス許可メッセージを送ることができ、その後、処理要素４０２−Ｎは、ＲＡＭタイル５０２−０にメモリ・データ要求を送ることができる。
【００７９】
複数の処理要素による同時アクセスの可能性があるため、いくつかの実施形態において、タイル制御ロジック５０６は衝突検出器を含んでもよく、それは、プロセッサまたはアクセラレータなどの２つ以上の処理要素がメモリ・スライスのタイルの任意の１つにアクセスしようとするインスタンスを検出するように構成される。衝突検出器は、試みた同時アクセスの各タイル５０２へのアクセスをモニタすることができる。衝突検出器は、アクセス衝突が発生し、解決する必要があることを、ランタイム・スケジューラに報告するように構成されることが可能である。
【００８０】
図６は、いくつかの実施形態によるタイル制御ロジックの集中型衝突検出システムを示す。衝突検出システムは、集中型調停ブロック６０８を含むことが可能であり、それは複数の衝突検出器６０４及び複数のワンホット・アドレス・エンコーダ６０２を含む。いくつかの実施形態において、ワンホット・アドレス・エンコーダ６０２は、処理要素４０２のうちの１つからメモリ・アクセス要求を受け、メモリ・アクセス要求がワンホット・アドレス・エンコーダ６０２と関連するＲＡＭタイル５０２に格納されたデータに対するものであるかどうか判定するように構成される。各衝突検出器６０４は、１つまたは複数のワンホット・アドレス・エンコーダ６０２に結合されることが可能であり、それはまた、衝突検出器６０２と関連するタイル５０２にアクセスできる処理要素４０２のうちの１つに結合される。いくつかの実施形態において、衝突検出器６０４は、特定のＲＡＭタイル５０２と関連するすべてのワンホット・アドレス・エンコーダ６０２に結合されることが可能である。
【００８１】
メモリ・アクセス要求がワンホット・アドレス・エンコーダ６０２と関連するＲＡＭタイル５０２に格納されるデータに対するものである場合、ワンホット・アドレス・エンコーダ６０２は、特定のＲＡＭタイルの衝突検出器６０４に、ビット値「１」を提供し得る。メモリ・アクセス要求がワンホット・アドレス・エンコーダ６０２と関連するＲＡＭタイル５０２に格納されるデータに対するものでない場合、ワンホット・アドレス・エンコーダ６０２は、特定のＲＡＭタイルの衝突検出器６０４に、ビット値「０」を提供し得る。
【００８２】
いくつかの実施形態において、ワンホット・アドレス・エンコーダ６０２は、メモリ・アクセス要求がメモリ・アクセス要求のターゲット・アドレスを分析することによってワンホット・アドレス・エンコーダ６０２と関連するＲＡＭタイル５０２に格納されるデータに対するものであるかどうかを判定するように構成される。たとえば、ワンホット・アドレス・エンコーダ６０２と関連するＲＡＭタイル５０２が０×００００及び０×００ｆｆのメモリ・アドレス範囲で示されるとき、ワンホット・アドレス・エンコーダ６０２は、メモリ・アクセス要求のターゲット・アドレスが０×００００及び０×００ｆｆの範囲に入るかどうか判定することができる。範囲に入る場合、メモリ・アクセス要求は、ワンホット・アドレス・エンコーダ６０２と関連するＲＡＭタイル５０２に格納されるデータに対するものである。範囲に入らない場合、メモリ・アクセス要求は、ワンホット・アドレス・エンコーダ６０２と関連するＲＡＭタイル５０２に格納されるデータに対するものではない。いくつかの場合において、ワンホット・アドレス・エンコーダ６０２は、メモリ・アクセス要求のターゲット・アドレスがＲＡＭタイル５０２と関連するアドレス範囲に入るかどうかを判定するために、範囲比較ブロックを使用することができる。
【００８３】
衝突検出器６０４がすべてのワンホット・アドレス・エンコーダ６０２からビット値を受けた時点で、衝突検出器６０４は、同じＲＡＭタイル５０２へのアクセスを現在要求している１つより多い処理要素４０２があるかどうかを判定するために、受け取ったビット値における「１」の数をカウントする（たとえば、ビット値を合計する）ことができる。同じＲＡＭタイル５０２へのアクセスを現在要求している１つより多い処理要素がある場合、衝突検出器６０４は、衝突を報告することができる。
【００８４】
図７は、いくつかの実施形態によるタイル制御ロジックの分散型衝突検出システムを示す。分散型衝突検出システムは、分散アービタ７０２を含むことが可能であり、それは複数の衝突検出器７０４を含む。分散型衝突検出システムの動作は、集中型衝突検出システムの動作と実質的に同様である。この場合、衝突検出器７０４は、分散配置される。特に、分散アービタ７０２は、直列に配置される衝突検出器７０４を含むことが可能であり、ここで、各衝突検出器７０４は、特定のＲＡＭタイル５０２と関連するワンホット・アドレス・エンコーダ６０２のサブセットにのみ結合される。この配置は、衝突検出器７０４が特定のＲＡＭタイル５０２と関連するすべてのワンホット・アドレス・エンコーダ６０２に結合される集中型衝突検出システムとは異なる。
【００８５】
たとえば、特定のＲＡＭタイル５０２が６４の処理要素４０２によってアクセスされることが可能であるとき、第１の衝突検出器７０４−０は、３２の処理要素からメモリ・アクセス要求を受けることが可能であり、第２の衝突検出器７０４−１は、残りの３２の処理要素からメモリ・アクセス要求を受けることが可能である。第１の衝突検出器７０４−０は、それ自身に結合される３２の処理要素からの１つまたは複数のメモリ・アクセス要求を分析し、それ自身に結合される３２の処理要素のうちの、特定のＲＡＭタイル５０２−０へのアクセスを要求している第１の要素数を判定するように構成されることが可能である。同時に、第２の衝突検出器７０４−１は、それ自身に結合される３２の処理要素からの１つまたは複数のメモリ・アクセス要求を分析し、それ自身に結合される３２の処理要素のうちの、特定のＲＡＭタイル５０２−０へのアクセスを要求している第２の要素数を判定するように構成されることが可能である。次いで第２の衝突検出器７０４は、第１の数と第２の数を加算し、６４の処理要素のうちのどれだけが特定のＲＡＭタイル５０２−０へのアクセスを要求しているか判定することができる。
【００８６】
衝突検出システムが衝突を検出した時点で、衝突検出システムは、リクエスタ４０２に停止信号を送ることができる。図８は、いくつかの実施形態による、衝突信号をリクエスタに報告するための調停ブロックを示す。より詳細には、衝突検出システムの範囲比較ブロックの出力は、ＯＲゲートを使用して組み合わせられ、リクエスタへの停止信号を生成する。半分の信号は、１つより多い処理要素がリクエスタと関連するメモリ・スライス内の同じ物理ＲＡＭサブブロックにアクセスしようとしていることを示す。停止信号を受けると、衝突が解消されるまで、リクエスタはメモリ・アクセス動作を停止することができる。いくつかの実施形態において、衝突をプログラム・コードと独立して、ハードウェアによって解消することができる。
【００８７】
いくつかの実施形態において、調停ブロックは、サイクル粒度で作動することができる。このような実施形態において、調停ブロックは、タスク・レベル粒度よりもむしろクロック・サイクル粒度でリソースを割り当て、それは複数のクロック・サイクルを含んでもよい。このようなサイクル指向スケジューリングは、システムのパフォーマンスを改善することができる。調停ブロックは、調停ブロックがリアルタイムでサイクル指向スケジューリングを行うことができるように、ハードウェアに実装されることが可能である。たとえば、任意の特定のインスタンスで、ハードウェアに実装される調停ブロックは、リソースを次のクロック・サイクルに割り当てるように構成されることが可能である。
【００８８】
図９は、いくつかの実施形態による、サイクル指向調停ブロックを示す。サイクル指向調停ブロックは、ポート調停ブロック９００を含むことが可能である。ポート調停ブロック９００は、第１のポート選択ブロック９３０と第２のポート選択ブロック９３２とを含むことが可能である。第１のポート選択ブロック９３０は、（クライアント要求ベクトルのビット位置として識別される）メモリ・アクセス要求のどの１つが、スライス・ポート［０］に結合されるメモリ・スライスにアクセスするためにスライス・ポート［０］に割り当てられるかを判定するように構成され、その一方で、第２の選択ブロック９３２は、クライアント要求ベクトルのどの１つが、スライス・ポート［１］に結合されるメモリ・スライスにアクセスするためにスライス・ポート［１］に割り当てられるかを判定するように構成される。
【００８９】
第１のポート選択ブロック９３０は、第１の先行１検出器（ＬＯＤ）９０２−０と第２のＬＯＤ９０２−１とを含む。第１のＬＯＤ９０２−０は、複数のビットを含み得るクライアント要求ベクトルを受けるように構成されている。クライアント要求ベクトルの各ビットは、メッセージ・アクセス要求がそのビット位置と関連するリクエスタから受けたかどうかを示す。いくつかの場合において、クライアント要求ベクトルは、「アクティブ・ハイ」モードで作動する。第１のＬＯＤ９０２−０がクライアント要求ベクトルを受けた時点で、第１のＬＯＤ９０２−０は、左から右へカウントしながら、要求が初めて０以外になるビット位置を検出するように構成され、それによって、左から右からカウントしながら、第１のポート選択ブロック９３０への第１のメモリ・アクセス要求を識別する。同時に、クライアント要求ベクトルは、ＡＮＤ論理演算子９１２によってマスクされ、マスク・レジスタ９０６及びマスク左シフタ９０４によって生成されるマスクを使用するマスク・クライアント要求ベクトルを生成することができる。マスク・レジスタ９０６は、マスク・レジスタ９０６と通信するプロセッサによって設定されることが可能であり、マスク左シフタ９０４は、マスク・レジスタ９０６で表されるマスクを左にシフトするように構成されることが可能である。第２のＬＯＤ９０２−１はＡＮＤ論理演算子９１２からのマスク・クライアント要求ベクトルを受け、マスク・クライアント要求ベクトルの先行１を検出することができる。
【００９０】
次に、第１のＬＯＤ９０２−０及び第２のＬＯＤ９０２−１からの出力は、ポート［０］勝者選択ブロック９０８に提供される。ポート［０］勝者選択ブロック９０８は、２つの追加の入力である、優先ベクトル及びスーパー優先ベクトルをさらに受ける。ポート［０］勝者選択ブロック９０８は、受け取ったメモリ・アクセス要求のうちのどの１つが、入力の優先度に基づいて、スライス・ポート［０］に割り当てられるべきかを判定するように構成される。いくつかの実施形態において、入力の優先度は、以下の通りにランク付けできる。最も高い優先度を有するスーパー優先ベクトルから開始し、マスクＬＯＤベクトルを優先要求及び非優先要求に分割する優先ベクトル、次に、最も低い優先度を有する非マスクＬＯＤベクトルである。他の実施形態において、その他の優先度が指定されることも可能である。
【００９１】
第１のポート選択ブロック９３０は、クライアント要求ベクトルをスライス・ポート［０］に割り当てることができるかどうかを判定するように構成されることが可能である一方、第２のポート選択ブロック９３２は、クライアント要求ベクトルがスライス・ポート［１］に割り当てることができるかどうかを判定するように構成されることが可能である。第２のポート選択ブロック９３２は、第１の後縁１検出器（ＴＯＤ）９１２−０と、第２のＴＯＤ９１２−１と、マスク・レジスタ９１４と、マスク右シフタ９１６と、ポート［１］勝者選択ブロック９１８と、マスキングＡＮＤ論理ブロック９２０とを含む。ＴＯＤ９１２は、複数のビットを含み得るクライアント要求ベクトルを受けるように構成され、右から左へカウントしながら、ベクトルが初めて０以外になるビット位置を検出する。第２のポート選択ブロック９３２の動作は、後縁１検出器９１２−０を使用する入力要求ベクトルで後縁１を選択する入力ベクトルの右から左に作動する以外は、第１のポート選択ブロック９３０と実質的に同様である。
【００９２】
ポート勝者選択ブロック９０８、９１８の出力はまた、同じ勝者検出ブロック９１０に提供され、それは同じメモリ・アクセス要求がスライス・ポート［０］及びスライス・ポート［１］へのアクセスを勝ち取ったかどうかを判定するように構成される。同じクライアント要求ベクトルが、スライス・ポート［０］及びスライス・ポート［１］へのアクセスを勝ち取った場合、同じ勝者検出ブロック９１０は、要求を送るために１またはスライス・ポートを選択し、その他のポートを入力ベクトルの次に最も高いランクの要求に割り当てる。これは、特定の要求にリソースを過度に割り当てることを避け、それによって、競合するリクエスタへのリソース配分を改善する。
【００９３】
ポート調停ブロック９００の動作は、３２ビット・クライアント要求ベクトルの左側から始まることによって働き、マスクＬＯＤ９０２−１は第１のマスク要求ベクトルの位置を出力し、このマスク要求ベクトルが、優先ベクトルまたはスーパー優先ベクトルを介してより高い優先入力に取って代わられない場合、ＬＯＤ位置に対応するリクエスタが勝ち、ポート［０］へのアクセスが許可される。ＬＯＤ位置はまた、３２ビット左シフタ９０４を介してマスク位置を進めるために使用され、かつ、同じリクエスタが両方のポートへのアクセスが与えられたどうか調べるために、ポート１ＬＯＤ割当てと比較するために使用され、この場合、ポートのうちの１つのみが、連続した同じ勝者検出の場合にはポート０と１との間で交互の原則でアクセスを許可するために切り換えられているフリップフロップによって許可される。マスク検出器９０２−１からのＬＯＤ出力が、優先ベクトルの対応する１ビットを介して優先度を割り当てられた場合には、要求しているクライアントは、ポート０への２連続のアクセスが許可される。マスク・クライアント要求ベクトルに先行１がなく、より高い優先要求が存在しない場合には、非マスクＬＯＤが勝ち、ポート０へのアクセスが割り当てられる。上記のいずれの場合においても、スーパー優先ベクトルの１ビットは、先の要求をいずれもオーバーライドし、リクエスタにポート０への無制限のアクセスを許可する。
【００９４】
図の下部のロジックは、要求ベクトルの右手側から始まり、その他の場合、要求ベクトルの左手側から始まる上部と同様に作動する。この場合、優先度などに関するポート１調停ブロックの動作は、ロジックのポート０部分のものと同一である。
【００９５】
いくつかの実施形態において、処理要素４０２は、メモリ・アクセス調停によるメモリ・アクセスのレイテンシを減少させるためのバッファを含むことができる。図１０は、いくつかの実施形態による、メモリ・アクセス調停に起因するメモリ・アクセス・レイテンシを減少させるためのメカニズムを示す。典型的なメモリ・アクセス調停スキームにおいて、メモリ・アクセス調停ブロックはパイプライン化されるが、これは、ＲＡＭタイル５０２などの共有リソースを複数の処理要素（たとえば、リクエスタ）のうちの１つに割り当てるとき、固定オーバヘッド調停ペナルティという結果をもたらす。たとえば、リクエスタ４０２が調停ブロック６０８／７０２にメモリ・アクセス要求を送るとき、以下のステップのそれぞれにおいて少なくとも１つのサイクルをとるため、リクエスタ４０２がアクセス許可メッセージを受けるためには、少なくとも４つサイクルをとる。（１）ワンホット・アドレス・エンコーダ６０２でメモリ・アクセス要求を分析する、（２）調停ブロック６０８／７０２でワンホット・アドレス・エンコーダ６０２の出力を分析する、（３）調停ブロック６０８／７０２によってワンホット・アドレス・エンコーダ６０２にアクセス許可メッセージを送る、（４）ワンホット・アドレス・エンコーダ６０２によってリクエスタ４０２にアクセス許可メッセージを送る。次いで、その後、リクエスタ４０２は、メモリ・データ要求をＲＡＭタイル５０２に送り、ＲＡＭタイル５０２からデータを受けなければならず、そのぞれぞれは少なくとも１つのサイクルをとる。したがって、メモリ・アクセス動作は、少なくとも６つのサイクルのレイテンシを有する。この固定ペナルティは、メモリ・サブシステムの帯域幅を減少させるであろう。
【００９６】
このレイテンシ問題は、処理要素４０２で維持されるメモリ・アクセス要求バッファ１００２によって対応することができる。たとえば、メモリ・アクセス要求バッファ１００２は、クロック・サイクルごとに、処理要素からメモリ・アクセス要求を受け、それらをメモリ調停ブロック６０８／７０２に送る準備ができるまで、受け取ったメモリ・アクセス要求を格納することができる。バッファ１００２は、メモリ・アクセス要求をメモリ調停ブロック６０８／７０２に送るレートと、データをメモリ・サブシステムから受けるレートとを実質的に同期させる。いくつかの実施形態において、バッファにはキューを含ませることが可能である。バッファ１００２の要素数（たとえば、バッファの深さ）を、メモリ・サブシステムからのデータを検索するサイクル数より大きくすることが可能である。たとえば、ＲＡＭアクセス・レイテンシが６サイクルであるとき、バッファ１００２の要素数は１０にすることができる。バッファ１００２は調停レイテンシ・ペナルティを減少させ、メモリ・サブシステムのスループットを改善することができる。メモリ・アクセス要求バッファによって、原則として、最大１００％の全体メモリ帯域幅を、リクエスタ間で割り当てることが可能である。
【００９７】
複数のＲＡＭインスタンスを使用することに関する潜在的な問題は、複数の処理要素によるバンク内のサブ・インスタンスへの同時アクセスが可能になることによって、メモリ競合が結果的に起こることであることが理解されよう。
【００９８】
本開示は、メモリ競合に対応するための少なくとも２つのアプローチを提供する。第１に、競合及び／またはメモリ衝突を減少させるようにメモリ・サブシステムのデータを慎重に配置することによってメモリ競合及び／またはメモリ衝突を回避するために、後で説明されるように、ソフトウェア設計において注意が払われる。さらにまた、並列処理装置と関連するソフトウェア開発ツールは、ソフトウェア設計段階に、メモリ競合またはメモリ衝突を報告することが可能である。したがって、メモリ競合問題またはメモリ衝突問題は、ソフトウェア設計段階に報告されるメモリ競合またはメモリ衝突に応じて、データ形式を改善することによって修正することが可能である。
【００９９】
第２に、さらに下で説明されるように、アーキテクチャ内のＩＳＩブロックは、ハードウェアのポート衝突（競合）を検出し、より低い優先度の処理要素をストールするように構成される。たとえば、ＩＳＩブロックは、処理要素からのメモリ・アクセス要求を分析し、メモリ・アクセス要求の順序を修正し、そして優先順位に従ってメモリ・アクセス要求を送るように構成され、その結果、すべての処理要素からのすべてのデータ読み込みまたは書き込みが優先順に完了する。
【０１００】
処理要素間の優先順位は、多くの方法で確定することが可能である。いくつかの実施形態において、優先順位は、システム設計時に静的に定義されてもよい。たとえば、優先順位は、システム・レジスタのリセット状態としてコード化することが可能であり、その結果、システムが起動するとき、システムは一連の事前に割り当てた優先度で起動する。他の実施形態において、優先順位は、ユーザがプログラム可能なレジスタによって動的に決定されることが可能である。
【０１０１】
いくつかの実施形態において、プログラマは、メモリ・スライス内のメモリの共有サブブロックの競合を減少させるために、ソフトウェア・アプリケーションのデータ形式を設計してもよい。いくつかの場合において、データ形式の設計を、調停ブロックによって支援することが可能である。たとえば、調停ブロックは、メモリ競合を検出し、優先度に基づいて、メモリ及び最優先タスクと関連する処理要素へのアクセスを許可し、競合するその他の処理要素をストールし、競合が解決されるまでプロセスごとに競合を解決することができる。
【０１０２】
図１１は、いくつかの実施形態によるスケジューリング・ソフトウェアのアプリケーションを示す。本出願において、スケジューリング・ソフトウェアは、処理パイプライン内の３×３ブラー・カーネルの実装を調整することができる。スケジューリング・ソフトウェアは、実行時に、動作の順序を判定し、処理要素による動作を調整することができる。パイプラインのフロー・グラフ１１００は、要素１〜要素５  １１０２〜１１１０を含む。要素１  １１０２は、入力バッファ１１１２と、処理ブロック１１４４と、出力バッファ１１１４とを含むことが可能である。入力バッファ１１１２及び出力バッファ１１１４は、フリップフロップを使用して実装されることが可能である。いくつかの実施形態において、その他の要素１１０４〜１１１０のそれぞれは、要素１  １１０２と実質的に同様の構造を有することが可能である。
【０１０３】
いくつかの実施形態において、要素２  １１０４は、３×３ブラー・フィルタによる入力をフィルタリングすることが可能な処理要素（たとえば、ベクトル・プロセッサまたはハードウェア・アクセラレータ）を含むことが可能である。要素２  １１０４は、共有バッファ１１１８からの入力を受けるように構成することが可能であり、それは一時的に、要素１  １１０２の出力を維持する。３×３ブラー・カーネルを入力に適用するために、要素２  １１０４は、動作を開始できる前に、共有入力バッファ１１１８から少なくとも３ラインのデータを受けることができる。したがって、ＲＩＳＣプロセッサ１１２２で実行できるＳＷスケジューラ１１２０は、フィルタリング動作を開始できることを要素２  １１０４に合図する前に、正しい数のラインのデータが共有バッファ１１１８に含まれることを検出できる。
【０１０４】
３ラインのデータが存在するという初期信号に続いて、ＳＷスケジューラ１１２０は、各追加の新しいラインがローリング３ライン・バッファ１１１８に加えられたときを、要素２  １１０４に信号で伝えるように構成されることが可能である。ラインごとの同期に加えて、サイクルごとの調停及び同期がパイプラインの各要素に対して行われる。たとえば、要素１  １１０２は、１サイクルごとに１つの完全な出力ピクセルを生成するハードウェア・アクセラレータを含むことが可能である。このスループットを実現するために、処理ブロック１１１４がその動作を続けるために十分なデータを有するように、ハードウェア・アクセラレータは入力バッファ１１１２を完全に保持することができる。このように、処理ブロック１１１４は、要素１１０２のスループットをできるだけ高く保持するのに十分な出力を生成することができる。
【０１０５】
いくつかの実施形態において、ソフトウェア・ツール・チェーンは、メモリ・サブシステムを使用するソフトウェア・プログラムを分析することから、メモリ・コンフリクトを予測することができる。ソフトウェア・ツール・チェーンは、開発者がコードを編集し、必要なときにコンパイラ、アセンブラを呼び出し、ソースレベルのデバッグを行うことができるグラフィック・ユーザ・インタフェース（ＧＵＩ）ベースの統合開発環境（ＩＤＥ）（たとえば、ＥｃｌｉｐｓｅベースのＩＤＥ）を含むことができる。ソフトウェア・ツール・チェーンは、システム・シミュレータを使用して、マルチ・プロセッサで実行されるプログラムを動的分析することによって、メモリ・コンフリクトを予測するように構成することができ、そのシステム・シミュレータは、すべての処理、バス、メモリ要素、及び周辺機器をモデル化する。異なるプロセッサまたはハードウェア・リソースで実行される異なるプログラムがメモリ・スライスの特定のブロックへの同時のアクセスを試みているかどうかを、ソフトウェア・ツール・チェーンはまた、ログ・ファイルまたはディスプレイ装置に記録するように構成されることが可能である。ソフトウェア・ツール・チェーンは、サイクルごとを基本にログ出力するように構成される可能性がある。
【０１０６】
いくつかの実施形態において、パイプライン１１００はまた、メモリ衝突が発生するたびにインクリメントされる１つまたは複数のハードウェア・カウンタ（たとえば、メモリ・インスタンスごとに１つのカウンタ）を含むことができる。そしてこれらのカウンタは、ハードウェア・デバッガ（たとえば、ＪＴＡＧ）によって読み込まれてもよく、かつ、画面上に表示またはファイルにログ出力されてもよい。その後のシステム・プログラマによるログ・ファイルの分析により、メモリ・ポート衝突の可能性を減少させるように、メモリ・アクセスを異なるスケジュールにすることが可能となる。
【０１０７】
ＩＢＭのＣｅｌｌアーキテクチャ（図２に示される）のプログラマにとっての１つの重要な問題点は、データがＤＭＡによって制御され、ベクトル・プロセッサがアクセスする時間までにローカル・ストレージ（ＬＳ）に格納されることが可能であるように、事前に数百サイクルのデータ転送をプログラム的にスケジュール化することである。開示されるアーキテクチャのいくつかの実施形態は、ハードウェアにおけるアクセスの調停及びスケジュール化を処理し、ユーザ可読ハードウェア・カウンタに衝突を記録することによって、この問題に対処することができる。これにより、開示されるアーキテクチャを、高性能な映像／画像処理パイプラインを作成するために使用することができる。
【０１０８】
図１２は、いくつかの実施形態による並列処理装置を有する階層的なシステムの構成を提供する。システム１２００は、フィルタなどの複数の処理要素を有する並列コンピューティング・システム１２０２と、並列コンピューティング・システム１２０４上で実行するソフトウェア・アプリケーション１２０４と、アプリケーション１２０４を並列コンピューティング・システム１２０２とインタフェースするためのアプリケーション・プログラミング・インタフェース（ＡＰＩ）１２０６と、並列コンピューティング・システム１２０２上で実行するためにソフトウェア・アプリケーション１２０４をコンパイルするコンパイラ１２０８と、並列コンピューティング・システム１２０２の処理要素の動作を制御するためのランタイム・スケジューラ１２１０とを含むことが可能である。
【０１０９】
いくつかの実施形態において、開示される並列処理装置は、パイプライン記述ツール（たとえば、ソフトウェア・アプリケーション）１２０４とともに作動するように構成されることが可能であり、それは画像処理パイプラインをフロー・グラフとして記述することを可能にする。パイプライン記述ツール１２０４は、基礎をなすハードウェア／ソフトウェア・プラットフォームから独立した柔軟な方法で、画像／視覚処理パイプラインを記述することが可能である。特に、パイプライン記述ツールによって使用されるフロー・グラフは、フロー・グラフを実装するために使用されてもよい処理要素（たとえば、プロセッサ及びフィルタ・アクセラレータ・リソース）とは独立して、タスクを記述することを可能にする。パイプライン記述ツールで得られる出力は、有向非巡回グラフ（ＤＡＧ）またはフロー・グラフの記述を含むことが可能である。ＤＡＧまたはフロー・グラフの記述は、ＸＭＬなどの好適なフォーマットで格納されることができる。
【０１１０】
いくつかの実施形態において、ＤＡＧまたはフロー・グラフの記述は、システム１２００の他のすべてのツールにアクセス可能とすることができ、ＤＡＧに従って並列処理装置の動作を制御するために使用されることが可能である。図１３は、いくつかの実施形態による、ＤＡＧまたはフロー・グラフの記述が並列処理装置の動作を制御するために使用できる方法を示す。
【０１１１】
コンピューティング装置の実際の動作の前に、並列処理装置１２０２のコンパイラ１２０８は、（１）フロー・グラフ１３０６の記述と、（２）利用可能なリソース１３０２の記述とを取り込み、ＤＡＧが複数の処理要素でどのように実行できるかを示すタスク・リスト１３０４を生成することができる。たとえば、タスクを単一の処理要素上で実行できない場合、コンパイラ１２０８はタスクを複数の処理要素に分割することができる。タスクを単一の処理要素上で実行できる場合、コンパイラ１２０８はタスクを単一の処理要素に割り当てることができる。
【０１１２】
いくつかの場合において、タスクが処理要素の能力の一部のみ使用するとき、コンパイラ１２０８は、単一の処理要素上で順番に実行される複数のタスクを、処理要素によってサポート可能な限界まで、結合して、スケジュール化することができる。図１４Ａは、いくつかの実施形態による、コンパイラ及びスケジューラによるタスクのスケジュール化及び発行を示す。コンパイラ及びスケジューラを使用するタスクのスケジュール化の利点は、コンパイラ及びスケジューラが、タスクによって実行される動作に基づいてタスクを自動的にスケジュール化できることである。これは、プログラマが特定のタスクを実行する処理要素または処理要素のグループで実行するコードのスケジュールを手動で決定しなければならなかった先行技術に対する大きな利点であり、それは、周辺機器からＣＭＸまで、ＣＭＸからＣＭＸブロックまで、そしてＣＭＸバックから周辺機器までのＤＭＡによってデータ転送をスケジュール化するときを含む。これは面倒でエラーが生じやすいタスクであったが、ＤＦＧの使用により、このプロセスの自動化が可能になり、時間が節約され、生産性は向上する。
【０１１３】
コンピューティング装置の実行中、ランタイム・スケジューラ１２１０は、コンパイラ１２０８によって生成されるタスク・リスト１３０４に基づいて、利用可能な処理要素全体のタスクを動的にスケジュール化することができる。ランタイム・スケジューラ１２１０は、マルチコア・システムのホストＲＩＳＣプロセッサ１３０６上で作動することが可能であり、ハードウェア・パフォーマンス・モニタ及びタイマ１３０８からの統計を使用して、複数のベクトル・プロセッサ、フィルタ・アクセラレータ、及びダイレクト・メモリ・アクセス（ＤＭＡ）エンジンなどの処理要素全体のタスクをスケジュール化することができる。いくつかの実施形態において、ハードウェア・パフォーマンス・モニタ及びタイマ１３０８は、ストール・カウンタ、ＣＭＸ衝突カウンタ、バス・サイクルカウンタ（ＩＳＩ、ＡＰＢ、及びＡＸＩ）、ならびにサイクル・カウンタを含むことができ、それはランタイム・スケジューラ１２１０によって読み込まれてもよい。
【０１１４】
いくつかの実施形態において、ランタイム・スケジューラ１２１０は、ハードウェア・パフォーマンス・モニタ及びタイマ１３０８からの統計に基づいて、タスクを利用可能な処理要素に割り当てることができる。ハードウェア・パフォーマンス・モニタ及びタイマ１３０８は、処理要素の効率を増加させる、あるいは、電力を節約するまたはその他のタスクを並列に計算することを可能にするために、少ない処理要素を使用してタスクを実行するために使用できる。
【０１１５】
このため、ハードウェア・パフォーマンス・モニタ及びタイマ１３０８は、パフォーマンス・メトリックを提供することができる。パフォーマンス・メトリックは、処理要素のアクティビティ・レベルを示す数とすることができる。パフォーマンス・メトリックは、タスクを実行するためのインスタンス化された処理要素の数を制御するために使用できる。たとえば、特定の処理要素と関連するパフォーマンス・メトリックが所定の閾値より大きいとき、ランタイム・スケジューラ１２１０は、特定の処理要素と同じタイプの追加の処理要素をインスタンス化することによって、より多くの処理要素にタスクを分散することができる。別の実施例として、特定の処理要素と関連するパフォーマンス・メトリックが所定の閾値をより小さいとき、ランタイム・スケジューラ１２１０は、特定の処理要素と同じタイプのインスタンス化された処理要素の１つを取り除くことで、特定のタスクを実行する処理要素の数を減少させることができる。
【０１１６】
いくつかの実施形態において、ランタイム・スケジューラ１２１０は、処理要素の使用に優先順位をつけることができる。たとえば、ランタイム・スケジューラ１２１０は、タスクがプロセッサまたはハードウェア・フィルタ・アクセラレータに好ましくは割り当てられなければならないかどうかを判定するように構成されることが可能である。
【０１１７】
いくつかの実施形態において、ランタイム・スケジューラ１２１０は、システムがランタイム構成基準に従うことができるように、メモリ・サブシステムのＣＭＸバッファ・レイアウトを変えるように構成されることが可能である。ランタイム構成基準は、たとえば、画像処理スループット（フレーム／秒）、エネルギー消費量、システムによって使用されるメモリ容量、作動しているプロセッサの数、及び／または作動しているフィルタ・アクセラレータの数を含むことができる。
【０１１８】
出力バッファは、いくつかの方法のうちの１つで、メモリに配置することが可能である。いくつかの場合において、出力バッファは、メモリ内で物理的に連続していることが可能である。その他の場合、出力バッファを「ぶつ切り」または「スライス」にすることも可能である。たとえば、出力バッファは、Ｎ個の垂直ストリップに分割可能である、ここで、Ｎは画像処理アプリケーションに割り当てられるプロセッサの数である。各ストリップは異なるＣＭＸスライスに配置される。各プロセッサは入出力バッファに局所的にアクセスすることができるので、このレイアウトはプロセッサに好都合であろう。しかし、このようなレイアウトは、フィルタ・アクセラレータに多くの衝突を引き起こす可能性があるため、このレイアウトはフィルタ・アクセラレータには不利益であろう。フィルタ・アクセラレータは多くの場合、左から右にデータを処理する。したがって、すべてのフィルタ・アクセラレータは、画像の第１のストリップにアクセスすることによって、そのプロセスを開始し、それが最初から多くの衝突を引き起こす可能性がある。その他の場合、出力バッファはインタリーブされることが可能である。たとえば、出力バッファは、所定のサイズ・インタリービングで、全１６枚のＣＭＸスライス全体に分割可能である。所定のサイズを、１２８ビットとすることが可能である。ＣＭＸ全体にアクセスを分散させることにより衝突の可能性が減少するため、出力バッファのインタリーブ・レイアウトは、フィルタ・アクセラレータに好都合であろう。
【０１１９】
いくつかの実施形態において、入力バッファまたは出力バッファなどのバッファは、そのプロデューサ及びコンシューマがハードウェア及び／またはソフトウェアであるかどうかに基づいて割り当てられることが可能である。コンシューマがより重要であり、それは、それらが通常、より多くの帯域幅を必要とする（フィルタは通常、複数のラインを読み込んで、１本のラインを出力する）ためである。ハードウェア・フィルタは、バッファのレイアウトに応じてプログラムされる（それらは、隣接する、インタリーブされて、スライスされたメモリ・アドレスをサポートする）。
【０１２０】
図１４Ｂは、いくつかの実施形態による、コンパイラ及びスケジューラを使用したタスクの自動スケジュール化のプロセスを示す。コンパイラは、ＤＡＧに基づき、並列処理装置によって行われるタスクのリストを決定する。ステップ１４０２において、ランタイム・スケジューラは、タスクのリストを受けて、タスクのリストを個別のキューに維持するように構成される。たとえば、タスクのリストが、（１）ＤＭＡにより行われるタスク、（２）プロセッサにより行われるタスク、及び、（３）ハードウェア・フィルタにより行われるタスクを含むとき、ランタイム・スケジューラは、タスクを３つの独立したキュー、たとえば、ＤＭＡのための第１のキュー、プロセッサのための第２のキュー、及びハードウェア・フィルタのための第３のキューに格納することができる。
【０１２１】
ステップ１４０４〜１４０８において、ランタイム・コンパイラは、関連するハードウェア・コンポーネントが新しいタスクに利用できるようになると、関連するハードウェア・コンポーネントにタスクを発行するように構成される。たとえば、ステップ１４０４において、ＤＭＡが新しいタスクを実行することが可能になると、ランタイム・コンパイラは、ＤＭＡの第１のキューをデキューして、デキューされたタスクをＤＭＡに提供するように構成される。同様に、ステップ１４０６において、プロセッサが新しいタスクを実行することが可能になると、ランタイム・コンパイラは、プロセッサの第２のキューをデキューして、デキューされたタスクをプロセッサに提供するように構成される。また、ステップ１４０８において、ハードウェア・フィルタが新しいタスクを実行することが可能になると、ランタイム・コンパイラは、ハードウェア・フィルタの第３のキューをデキューして、デキューされたタスクをハードウェア・フィルタに提供するように構成される。
【０１２２】
いくつかの実施形態において、ランタイム・スケジューラ１２１０は、ハードウェア・パフォーマンス・モニタ及びタイマ１３０８からのカウンタ値を使用して、処理要素の使用を調整してもよく、特に、ここで、これらのパイプラインが必ずしも協調設計されているというわけではないため、１つより多いパイプライン（たとえば、ソフトウェア・アプリケーション１２０４）は処理要素のアレイ上で同時に実行している。たとえば、各パイプラインに割り当てられる効果的なバス帯域幅が予想より小さく、ＣＭＸメモリにアクセスする際に発生する衝突の数が多い場合、ランタイム・スケジューラ１２１０は、タスクが２つのパイプライン・キューから取得される順序を修正することによって、２つのパイプラインの実行をずらすために、この情報を使用してもよく、それによって、メモリの衝突を減少させる。
【０１２３】
いくつかの実施形態において、ＤＡＧコンパイラは、リアルタイム（たとえば、オンライン）で作動することができる。図１５は、いくつかの実施形態によるリアルタイムＤＡＧコンパイラの動作を示す。リアルタイムＤＡＧコンパイラ１５０２は、ＤＡＧの入力ＸＭＬ記述、利用可能な処理要素の記述、及び、プロセッサ数、フレームレート、電力散逸ターゲットなどの任意のユーザ定義制約条件を受けるように構成されることが可能である。次いで、リアルタイムＤＡＧコンパイラ１５０２は、たとえば、ＤＭＡエンジン、プロセッサ、ハードウェア・フィルタ、及びメモリを含む処理要素全体でＤＡＧコンポーネントをスケジュールするように構成されることが可能であり、システム・リソースにマップされるときに、指定されたＤＡＧがユーザ定義制約条件を満たすことができることを保証する。いくつかの実施形態において、リアルタイムＤＡＧコンパイラ１５０２は、ＤＡＧのタスクを幅優先方法で並列に実行できるかどうかを判定することができる。ＤＡＧの幅が並列にタスクを実行するために利用可能な処理要素の数より大きい（たとえば、利用可能な処理能力の合計がＤＡＧの並列性をより小さい）場合、リアルタイムＤＡＧコンパイラ１５０２はタスクを「折りたたむ」ことができ、その結果、タスクは利用可能な処理要素上で順次実行される。
【０１２４】
図１６は、ＯｐｅｎＣＬスケジューラによって生成されるスケジュールを、いくつかの実施形態による提案されたオンラインＤＡＧスケジューラによって生成されるスケジュールと比較する。提案されたスケジューラ１２０８／１５０２によって生成されるスケジュールは、典型的なＯｐｅｎＣＬスケジュールに存在する冗長コピー及びＤＭＡ転送を除くことができる。ＤＡＧタスクに関する処理を実行するために使用されるＧＰＵがスケジュールを実行するプロセッサから離れているため、これらのデータ転送はＯｐｅｎＣＬスケジュール内に存在する。携帯機器で使用される典型的なアプリケーション・プロセッサにおいて、大きいデータブロックは、スケジュールを実行するプロセッサと処理を行うＧＰＵとの間でやりとりされる。提案された設計において、すべての処理要素は同じメモリ空間を共有し、よって、コピーをやりとりする必要がなく、かなりの時間、帯域幅、及び電力散逸を節約する。
【０１２５】
いくつかの実施形態において、タスクが処理要素の能力の一部のみ使用するとき、図１４に示されるように、ランタイム・スケジューラ１２１０は、単一の処理要素上で順番に実行される複数のタスクを、処理要素によってサポート可能な限界まで、結合して、スケジュール化することが可能である。
【０１２６】
画像処理アプリケーションにおいて、スケジューラは、ストリップに画像を分割することによって、プロセッサ間に処理タスクを分割するように構成することが可能である。たとえば、画像は、所定の幅の垂直ストリップまたは水平ストリップに分割可能である。
【０１２７】
いくつかの実施形態において、スケジューラは、特定の画像処理アプリケーションに使用されるプロセッサの数を事前に決定することができる。これにより、スケジューラは、画像のためのストリップの数を事前に決定することができる。いくつかの実施形態において、フィルタリング動作は、プロセッサによって連続実行されることが可能である。たとえば、アプリケーションによって実行される５つのソフトウェア・フィルタがあるとき、プロセッサ４０２は、第１の時間インスタンスと同時の第１のソフトウェア・フィルタ、第２の時間インスタンスと同時の第２のソフトウェア・フィルタなどを実行するようにそれぞれ構成されることが可能である。これは、演算負荷が特定の画像処理アプリケーションに割り当てられるプロセッサ間でより均一にバランスがとられることを意味する。これは、プロセッサが同じ順序でフィルタの同じリストを同時に実行するように構成されるためである。
【０１２８】
あまりに多くのプロセッサが画像処理アプリケーションに割り当てられると、プロセッサが多くの時間をアイドリングに費やし、ハードウェア・フィルタ・アクセラレータ上でタスクの完了を待機する可能性がある。他方で、あまりに少ないプロセッサがアプリケーションに割り当てられると、ハードウェア・フィルタ・アクセラレータが多くの時間をアイドリングに費やす可能性がある。いくつかの実施形態において、ラン・スケジューラ１２１０は、これらの状況を検出し、それに対して適応するように構成されることが可能である。他の実施形態において、スケジューラ１２１０は、プロセッサを特定の画像処理アプリケーションに過剰に割り当てるように構成されることが可能であり、プロセッサがハードウェア・フィルタ・アクセラレータより前にそのタスクを完了すると、プロセッサの能力を下げることが可能になる。
【０１２９】
いくつかの実施形態において、スケジューラは、バリア・メカニズムを使用して、ハードウェア・フィルタ・アクセラレータ及びプロセッサなどの処理要素を同期させることができる。スケジューラの出力は、コマンドのストリームを含むことが可能である。これらのコマンドは、（１）ハードウェア・フィルタ・アクセラレータ及びプロセッサなどの処理要素のスタート・コマンド、及び、（２）バリア・コマンドを含むことが可能である。バリア・コマンドは、処理要素のいくつかがそれらのタスクを実際に完了したとしても、グループのすべての処理要素がバリア・コマンドに達するまで、処理要素は、コマンドの次のセットを処理すること待たなければならないことを指示する。いくつかの実施形態において、スケジューラは、処理要素によって実行されるタスクの間の依存度に基づいて、バリア・コマンドを提供してもよい。
【０１３０】
図１７は、いくつかの実施形態による、処理要素を同期させるためのバリア・メカニズムを示す。コマンドのストリームは、バリア・コマンド（１７０２、１７１２）と、タスク・コマンド（１７０４、１７０６、１７０８、１７１０）とを含む。各タスク・コマンドを処理要素と関連させることが可能であり、下のグラフに示されるように、タスク・コマンドを異なる時間で完了することができる。したがって、バリア・コマンド１７１２がクリアされるまで、処理要素が将来のタスクを開始しないように、スケジューラはバリア・コマンド１７１２を挿入することが可能である。このバリア・メカニズムは、並列のタスクの時間的パイプライン化と考えることができる。
【０１３１】
いくつかの実施形態において、バリア・メカニズムは、割り込み信号１７１４を使用してハードウェアに実装される。たとえば、スケジューラは、どの処理要素がグループに属するかについて指定するビット・マスクをプログラムすることができる。処理要素が割り当てられたタスクを完了すると、それぞれの処理要素に関連付けられた割り込み信号がアサートされる。グループの処理要素に関連付けられたすべての割り込み信号がアサートされた時点で、処理要素のコントローラは、すべての処理要素がバリア・コマンドに達したことを示すグローバル割り込み信号を受けることができる。
【０１３２】
いくつかの実施形態において、割り込みソースは、ＳＨＡＶＥベクトル・プロセッサ、ＲＩＳＣプロセッサ、ハードウェア・フィルタ、または外部イベントを含むことができる。特に、ハードウェア・フィルタは、入出力バッファがフレームを含む非環状バッファ・モードを含むさまざまなモードをサポートすることができ、全入力フレームを処理した、または、完全に対応する出力フレームを書き込んだとき、フィルタは単一の割り込みを発行するように構成されることが可能である。フィルタはまた、画像寸法、バッファ・ベースのアドレス／ライン・ストライドなどの適切な設定を使用して、フレームからライン、パッチ、またはタイル上で作動するようにプログラム可能である。
【０１３３】
並列処理装置、特に、非常に電力の影響を受けやすく、計算資源及びメモリのようなリソースに関して不十分である組み込みシステムの処理要素をプログラムする方法は、複雑な並列処理装置における１つの重要な問題である。コンピュータ画像処理、特に映像及び画像処理は、フレーム寸法及びレートが非常に高く、年々猛烈に増加しているため、組み込みシステム上でのパフォーマンスに関して非常に要求が多い。
【０１３４】
本明細書に示されるこの問題の解決方法は、プログラマが、マルチコア・プロセッサアーキテクチャ１２０２の詳細についての深い知識なしで、高いレベルでアプリケーションに書き込むことができるアプリケーション・プログラミング・インタフェース（ＡＰＩ）１２０６を提供することである。ソフトウェアＡＰＩ１２０６を使用すると、機能がプログラム可能なプロセッサ上のソフトウェア、またはハードウェアに実装されるかどうかの詳細が、プログラマから分離されているため、プログラマは、実装についての詳細を深く知ることなく、新しい画像または映像処理パイプラインを迅速に作成することができる。たとえば、ブラー・フィルタ・カーネルの実装は、１つまたは複数のプロセッサまたはハードウェア・アクセラレータ・フィルタで実行される参照ソフトウェアの実装として提供される。プログラマは、ソフトウェア・ブラー・フィルタの実装を最初に使用することができ、プログラマではなく、ＩＳＩ、ＡＭＣ及びＣＭＸ調停ブロックが、どのプロセッサ及びＨＷリソースが、及びどの順で、物理メモリブロックへのアクセスを得るかについて対処するため、全体的なパイプラインの実装への変更なしで、ハードウェア・フィルタの使用に切り替えることができる。
【０１３５】
上記のマルチポート・メモリ・アプローチは、同一のプロセッサ間における、高帯域及び低レイテンシでのメモリの共有に適切であるが、その他の装置との帯域幅の共有には理想的ではない。これらのその他の装置は、コンピュータ映像及び画像処理などの特に非常に高帯域幅のアプリケーションにおける異なるレイテンシ要件を有するハードウェア・アクセラレータ及びその他のプロセッサでもよい。
【０１３６】
開示されるアーキテクチャは、マルチポート・メモリ・サブシステムとともに使用されることが可能であり、非常に決定論的なレイテンシ要件、プログラム可能な画像／映像処理ハードウェア・フィルタの大きいコホート、及び従来のホスト・プロセッサ及び周辺機器による制御及びデータ・アクセスを可能にするバス・インタフェースを有した、多数のプログラム可能なＶＬＩＷプロセッサからのより多くの同時アクセスをサポートするために、より高い帯域幅を提供する。図１８は、いくつかの実施形態による、異なるタイプの処理要素を有する並列処理装置を示す。並列処理装置は、複数のプロセッサ１８０２及び複数のフィルタ・アクセラレータ１８０４を含み、複数のプロセッサ１８０２及び複数のフィルタ・アクセラレータ１８０４はそれぞれ、ＩＳＩ４１０及びアクセラレータ・メモリ・コントローラ（ＡＭＣ）１８０６を介して、メモリ・サブシステム４１２に結合可能である。
【０１３７】
ＡＭＣ１８０６のサブシステム及びマルチコア・メモリ（ＣＭＸ）サブシステム４１２は、プロセッサ１８０２ならびに特定の画像／映像処理アプリケーションのためのハードウェア・フィルタ・アクセラレータ１８０４上のソフトウェアでの低電力ストリーミング・デジタル信号処理を容易にするオンチップ・ストレージを提供する。いくつかの実施形態において、ＣＭＸメモリ４１２は、６４ビット・ワードとして編成される１２８ｋＢの１６枚のスライスに編成される（合計２ＭＢ）。各プロセッサ１８０２は、メモリ・サブシステム４１２のスライスへのダイレクト・アクセス、及びメモリ・サブシステム４１２の他のすべてのスライスへのインダイレクト（より高いレイテンシ）アクセスを有することができる。プロセッサ１８０２は、命令またはデータを格納するために、ＣＭＸメモリ４１２を使用してもよく、一方、ハードウェア・フィルタ・アクセラレータ１８０４は、データを格納するために、ＣＭＸメモリ４１２を使用する。
【０１３８】
ＨＷフィルタ・アクセラレータ１８０４によって共有ＣＭＸメモリ４１２にアクセスするとき、異種処理要素の間のデータ共有を容易にするとともに、レイテンシを許容しないプロセッサ１８０２が高性能を実現することを可能にするために、ＨＷフィルタ・アクセラレータ１８０４は、レイテンシを許容するように設計される。これは、いくつかの実施形態に従って図１０に示されるように、各ＨＷフィルタ・アクセラレータ（フィルタ）１８０４に、タイミングをより柔軟にするローカルＦＩＦＯ、ならびに、ＩＳＩが自由であるＣＭＸへのアクセスを共有し、ＨＷフィルタ・アクセラレータから競合なしでＳＨＡＶＥ間通信をサポートするクロスバー・スイッチを提供することによって実現される。
【０１３９】
外部に向かうポート衝突に加えて、内部に向かうＩＳＩ４１０のポート・アクセスとの衝突も可能性がある。１つより多い外部スライスが、任意の１つのサイクルでメモリの同じスライスにアクセスしようとする場合、ポート衝突が発生することがある。ＬＳＵポートのＩＳＩ相互接続ポートへのマッピングが固定されるため、ＳＨＡＶＥ  ０  １８０２−０のＬＳＵポート０を通るスライス２へのアクセス、及び、ＳＨＡＶＥ  １１（１７０２−１１）のＬＳＵポート１を通るスライス２へのアクセスが、衝突なしに可能である。ＩＳＩマトリクスにより、８×２ポート×６４ビットのデータを、サイクルごとに転送することが可能である。たとえば、ＳＨＡＶＥ  Ｎ  １８０２は、ＬＳＵポート０及び１を通してスライスＮ＋１にアクセスすることができ、８つのすべてのＳＨＡＶＥプロセッサは、ストールなしで同時にアクセスすることができる。
【０１４０】
いくつかの実施形態において、メモリ・サブシステム４１２は、スライス（ブロック）に論理的に分割可能である。図１９は、いくつかの実施形態による、提案されたマルチコア・メモリ・サブシステムを示す。図１９は、ＡＸＩ、ＡＨＢ、ＳＨＡＶＥ、ＩＳＩ、及びＣＭＸの間、ならびにフィルタ・アクセラレータ、ＡＭＣ、及びＣＭＸの間の詳細なバス相互接続を示す。図は、２つのＡＭＣ入力ポート及び２つのＡＭＣ出力ポート、２つのＩＳＩ入力ポート及び２つのＩＳＩ出力ポート、Ｌ２キャッシュ及び相互排除（ミューテックス）ブロックならびに内部読み出し／書き込み調停との接続、４つのメモリ・タイル及びＦＩＦＯをアドレスするソース多重化ならびにＩＳＩ及びＡＭＣへの４つのメモリブロック出力の出力先選択を示す。
【０１４１】
各スライスは、１２のＳＨＡＶＥ、ＤＭＡ、テクスチャ管理ユニット（ＴＭＵ）、及びオンボード・ホスト・プロセッサへのＡＨＢバス・インタフェースを含む１６の可能なＩＳＩ入力ソースのうちの２つに連結することができる。同様に、各スライスは、スライスが１２のＳＨＡＶＥ、ＤＭＡ、テクスチャ管理ユニット（ＴＭＵ）、及びオンボード・ホスト・プロセッサへのＡＸＩ及びＡＨＢバス・インタフェースを含む１６の可能な送信先のうちの２つにデータを送ることを可能にする２つの出力ＩＳＩポートを有する。好ましい実装態様において、スライスは、ローカルＳＨＡＶＥプロセッサ（２×ＬＳＵ及び２×６４ビット命令ポート）、２つのＩＳＩ入力ポート、２つのＡＭＣ入力ポート、及びＳＨＡＶＥ間メッセージングに使用されるＦＩＦＯ、ならびに、メッセージングＦＩＦＯ、Ｌ２キャッシュ、及びミューテックス・ブロックに順番に連結する入力調停ブロックを有する４つの物理ＲＡＭブロックを含む。
【０１４２】
ＣＭＸスライスからの出力経路上で、宛先選択ブロックへの入力は、Ｌ２キャッシュ及びハードウェア・ミューテックス・ブロックに加えて、４つのＲＡＭインスタンスに連結される。図２０にブロック２００２として示される宛先選択ブロックからの出力は、２つのローカルＬＳＵポート及び命令ポート（ＳＰ＿１及びＳＰ＿０）、ならびに２×  ＩＳＩ出力ポート及び２×  ＡＭＣ出力ポートに連結される。２つのＩＳＩポートは、ローカル・スライスが１２の可能なプロセッサ、ＤＭＡ、ＴＭＵ  ＡＸＩ、及びＡＨＢホスト・バスから２つの宛先に連結することを可能にし、プロセッサには、マルチコア・メモリ・サブシステム・スライスに含まれる２×６４ビットＩＳＩ入力ポート及び２×６４ビットＩＳＩ出力ポートに連結するＳＨＡＶＥ間相互接続（ＩＳＩ）を介した、メモリへのアクセスが提供される。ＩＳＩ相互接続によって提供される高帯域幅、低レイテンシの決定論的なアクセスは、プロセッサのストールを減少させて、高いコンピュテーショナル・スループットを提供する。
【０１４３】
図２１は、いくつかの実施形態による、ＡＭＣ  Ｃｒｏｓｓｂａｒアーキテクチャを示す。ＡＭＣクロスバー１８０６は、ハードウェア画像処理フィルタ１８０４を、ＣＭＸマルチコア・メモリ・スライス４１２のＡＭＣポートに連結するように構成されることができる。ＡＭＣ１８０６は、１つまたは複数のスライス・ポート・コントローラ２１０２を、好ましくはＣＭＸスライス４１２ごとに１つ含むことができる。スライス・ポート・コントローラ２１０２は、スライス・アドレス要求フィルタ（ＳＡＲＦ）２１０４に、順番に連結される。ＳＡＲＦ２１０４は、ＡＭＣクライアントに順番に連結される（本実施形態において、ＡＭＣクライアントはハードウェア画像処理アクセラレータである）。ＳＡＲＦ２１０４は、フィルタ・アクセラレータから読み出し／書き込み要求を受けて、それらに要求または許可信号を提供し、書き込みアクセスが許可されているＳＩＰＰブロックからデータ及びアドレスを受け、読み出しアクセスが許可されているＳＩＰＰブロックに読み出しデータを提供する。さらに、ＳＡＲＦは、システム・ホスト・プロセッサに、ＡＸＩホスト・バス上のＡＸＩマスタリングを提供し、それはホストが、ＡＭＣクロスバー・スイッチを介してＣＭＸメモリに問い合わせる（読み出し／書き込み）ことを可能にする。
【０１４４】
いくつかの実施形態において、スライス・ポート・コントローラ２１０２は、図２１に示されるように、関連するＣＭＸメモリ・スライス４１２の２×読み出し及び２×書き込みポートと通信するＡＭＣ１８０６に設けられる。ＣＭＸメモリ・サブシステム４１２のフィルタ・アクセラレータ側から参照すると、各ハードウェア・フィルタは、アクセラレータ・メモリ・コントローラ（ＡＭＣ）クロスバー１８０６上のポートに連結される。ＡＭＣ１８０６は、ＣＭＸメモリ４１２の各スライスに連結する一対の６４ビット読み出しポート及び一対の６４ビット書き込みポートを有する（好ましい実施態様において、合計２ＭＢの１６枚のスライスがある）。読み出し及び書き込みクライアント・インタフェース及びアクセラレータ内のローカル・バッファリングを介して画像処理ハードウェア・アクセラレータをＡＭＣ１８０６に連結することにより、プロセッサのストールの低減を可能にする非常に決定論的なタイミングを有するＩＳＩ及びプロセッサにより多くの帯域幅を利用可能な状態にするより緩やかなレイテンシ要件を可能にする。
【０１４５】
図２０は、いくつかの実施形態による、ＣＭＸインフラストラクチャの単一のスライスを示す。スライスは、ＣＭＸスライスの４つの物理ＳＲＡＭタイル、共有Ｌ２キャッシュ、スレッド間の相互排除のプロセッサ間ネゴシエーションのための共有ミューテックス・ハードウェア・ブロック、ならびにＳＨＡＶＥ間の低帯域幅メッセージングに使用される６４ビットＦＩＦＯへの、８つのうち最大４つの可能な６４ビット・ソース・アクセスを可能にするアービタ及びソース多重化を含む。６つの入力ソースは、図２１に示される、ＡＣＭからの対応するｓｌｉｃｅ＿ｐｏｒｔ［１］及びｓｌｉｃｅ＿ｐｏｒｔ［０］ポートに連結されるＡＭＣｏｕｔ１及びＡＭＣｏｕｔ０と、追加の２つのＩＳＩポートであるＩＳＩｏｕｔ１及びＩＳＩｏｕｔ０と、２×ＬＳＵポートＬＳＵ＿１及びＬＳＵ＿０と、最後に、組み合わされたとき、１２８ビット命令がＣＭＸからの読み出されることを可能にする２×命令ポートＳＰ＿１及びＳＰ＿０とである。アービタ及びソース多重化は、８つの入力ソースからの優先アクセスに応じて４×ＳＲＡＭタイルを制御するために、読み出し／書き込みアドレス及び６４ビット・データを生成する。６４ビットＳＨＡＶＥ間通信ＦＩＦＯの入力は、アービタ及びソース・マルチプレクサに連結されるが、その出力は、ＣＭＸスライスのローカル・プロセッサによってのみ読み出し可能である。実際には、プロセッサは、ＩＳＩｏｕｔ１及びＩＳＩｏｕｔ０ポートならびにＣＭＸスライスより外側のＩＳＩインフラストラクチャを介して互いのメッセージングＦＩＦＯと通信し、それはＣＭＸ、スライス、及びプロセッサを互いに連結する。
【０１４６】
図２０に示されるスライスにおける２つのＡＭＣポートのそれぞれでの６４のリクエスタの間で調停することに加えて、追加の２：１アービタが、ＡＭＣポート１と０との間で調停するために提供される。この２：１アービタの目的は、要求しているポートの１つでの過度のストールにつながる可能性がある、２つのＡＭＣポートのうちの一方または他方によるＡＭＣポート帯域幅のすべての飽和を防止することである。この強化は、ポート帯域幅の複数の重いリクエスタが存在する場合に、よりバランスのとれたリソースの割当て、したがって、全体的なアーキテクチャのためのより高い持続するスループットを提供する。同様に、２：１アービタは、同様の理由のために、２つのプロセッサ・ポートＳＰ１とＳＰ０との間で調停を行う。
【０１４７】
調停及び多重化ロジックはまた、直接または共有Ｌ２キャッシュへのＩＳＩを介してのいずれかで、１６の可能なソース間の厳密なラウンドロビン方式でのアクセスを共有する調停の第２のレベルを介して、プロセッサによるアクセスを制御し、ここで、１つの６４ビット・ポートは、第２のレベルのアービタと１６個のＣＭＸスライスのそれぞれとの間で連結される。同様に、同じロジックは、（ＩＳＩ上のＡＨＢ及びＡＸＩバス連結を介して）１２個のオンボードプロセッサ及び２×３２ビットＲＩＳＣプロセッサで実行されるスレッド間で相互排除のプロセッサ間ネゴシエーションのために使用される３２のハードウェア・ミューテックスへのアクセスを可能にする。
【０１４８】
好ましい実装態様における優先度は次のとおりである。ＳＰ＿１及びＳＰ＿０が最も高い優先度を有し、次にＬＳＵ＿１及びＬＳＵ＿０、続いてＩＳＩｏｕｔ１及びＩＳＩｏｕｔ０、そしてＡＭＣｏｕｔ１及びＡＭＣｏｕｔ０、そして最後にＦＩＦＯが最も低い優先度を有する。この優先度割当ての理由は次のとおりである。ＳＰ＿１及びＳＰ＿０はＣＭＸへのプロセッサによるプログラム・アクセスを制御し、プロセッサは、次の命令が利用できない場合、すぐにストールし、プロセッサを再びストールさせるＬＳＵ＿１及びＬＳＵ＿０が続く。同様に、ＩＳＩｏｕｔ１及びＩＳＩｏｕｔ０はその他のプロセッサから来て、データがすぐに利用可能でない場合、ストールを引き起こす。ＡＭＣｏｕｔ１及びＡＭＣｏｕｔ０ポートは、組み込みＦＩＦＯを有して、よってストール前に多くのレイテンシを許容することができるため、最も低い優先度を有する。プロセッサＦＩＦＯは低帯域幅プロセッサ間メッセージングのためにのみ必要であり、よって、すべてで最も低い優先度を有する。
【０１４９】
アービタが最大４つのソースに４つのＳＲＡＭタイル、Ｌ２キャッシュ、ミューテックス、及びＦＩＦＯへのアクセスを可能にすると、４つのＳＲＡＭタイル、Ｌ２キャッシュ、及びミューテックスを含む６つの読み出しデータ・ソースからの出力データが選択され、次の８つの可能な６４ビット宛先ポート、スライスと関連するプロセッサ上の４つ（ＳＰ＿１、ＳＰ＿０、ＬＳＵ＿１及びＬＳＵ＿０）と、ＩＳＩと関連する２つ（ＩＳＩｏｕｔ１及びＩＳＩｏｕｔ０）と、最後に、ＡＭＣと関連する２つ（ＡＭＣｏｕｔ１及びＡＭＣｏｕｔ０）のうちの最大４つに向けられる。４つの６４ビット・ソースのみ、８つの宛先ポートに分散されなければならないため、出力マルチプレクサにおいて優先順位は必要とされない。
【０１５０】
図２２は、いくつかの実施形態によるＡＭＣクロスバー・ポート・コントローラを示す。ＡＭＣクロスバー・ポート・コントローラ２２０２は、ラウンドロビン・アービタ２２０４を含み、それはポート・コントローラ２２０２を、要求がプロセッサを介してフィルタリングされるアクセラレータ１８０４に連結する。次いで、アービタは、ポート・コントローラＦＩＦＯ上へ、ＡＭＣクライアントからの有効な要求をプッシュすることができる。読み出し要求の場合、要求への応答（読み出しクライアントＩＤ及びライン・インデックス）は、読み出しＴＸ  ＩＤ  ＦＩＦＯ上へプッシュされる。Ｒｄ  ＴＸ  ＩＤ  ＦＩＦＯからの読み出しクライアントＩＤ及びライン・インデックスをポップし、要求しているＡＭＣクライアントによって読み出し可能なＲｄデータＦＩＦＯ上へ対応するスライス・ポート読み出しデータ及び有効な信号をプッシュするポート・コントローラ読み出しロジックに、戻されたスライス・ポート・データ及び有効な信号が入力される。ＦＩＦＯのＣＭＸ側で、ポート・ストール・ロジックはＦＩＦＯからの要求をポップし、関連するＣＭＸメモリ・スライス上の２×ＡＭＣ入力ポートにスライス・ポート制御を提供する。
【０１５１】
ＣＭＸへの読み出し及び書き込み書きクライアント・インタフェースの数は、別々に設定可能である。任意のクライアントは、ＣＭＸの任意のスライス（または、複数のスライス）をアドレスしてもよい。ＣＭＸの１６個のスライス、スライスにつき２つのポート、及び６００ＭＨｚのシステム・クロック周波数の場合、クライアントに供給することができる最大合計データ・メモリ帯域幅は、１４３ＧＢ／ｓである。最大帯域幅＝６００ＭＨｚ＊（６４／８）＊２＊１６＝１．５３６ｅ１１  Ｂ／ｓ＝１４３ＧＢ／ｓ。
【０１５２】
より高い８００ＭＨｚのクロック周波数では、帯域幅は１９１ＧＢ／秒まで増加する。ＡＭＣは、それに連結されるハードウェア・アクセラレータ・ブロックの、そのクライアント読み出し／書き込みインタフェースでの同時アクセスの間で調停する。最大の２つの読み出し／書き込みアクセスは、クロック・サイクルごとのスライスごとに許可されてもよく、６００ＭＨｚのシステム・クロック周波数で、８．９ＧＢ／ｓの最大スライス・メモリ帯域幅を与える。クライアント・アクセスは、ＣＭＸアドレス空間に限定されない。ＣＭＸアドレス空間の範囲外のアクセスは、ＡＭＣのＡＸＩバス・マスタに転送される。
【０１５３】
図２３は、いくつかの実施形態による、ＡＭＣ１８０６を使用する読み出し動作を示す。この図において、４つのデータ・ワードは、アドレス範囲Ａ０〜３から読み出される。ＡＭＣクライアント（たとえば、フィルタ・アクセラレータ１８０４）は最初、ポート・コントローラ入力で要求をアサートする。ポート・コントローラ２２０２は、クライアントにアドレスＡ０、Ａ１、Ａ２、最後にＡ３を順番に送らせる許可信号（ｇｎｔ）を発行することによって応答する。対応するｒｉｎｄｅｘ値は、各許可に対応するクロック（ｃｌｋ）の立ち上がりエッジに現れる。インデックス・アドレス及びデータと比較すると、クライアント側のタイミングは非常に柔軟にすることができ、それはＣＭＸスライスからポート・コントローラへの出力であることが分かる。ポート・コントローラのＣＭＸ側の決定論的なタイミングは、ＡＭＣクライアントとレイテンシに非常に影響を受けるプロセッサとの間のＣＭＸへの効率的な共有アクセスを可能にし、一方、ＦＩＦＯ、及び、ＡＭＣクライアントのローカル・ストレージは、ＣＭＸメモリ・サブシステム４１２のＡＭＣクライアント（たとえば、フィルタ・アクセラレータ）側で、タイミングを高変位にすることができる。
【０１５４】
図２４は、いくつかの実施形態による、ＡＭＣ１８０６を使用する書き込み動作を示す。タイミング図において、４つのデータ・ワードの、ＡＭＣを介したＣＭＸへの移動が示される。要求はＡＭＣクライアントで発行され、クロック（ｃｌｋ）の次の立ち上がりエッジで、許可信号（ｇｎｔ）は高くなり、アドレスＡ０と関連するデータ・ワードＤ０をＡＭＣを介して転送する。次にｇｎｔ信号は、１つのクロック・サイクルの間、低くなり、ｃｌｋの次の立ち上がりエッジで、ｇｎｔは、２つのクロック・サイクルの間、高くなり、ｇｎｔが再び低くなる前に、Ｄ１及びＤ２をそれぞれアドレスＡ１及びＡ２に与える。ｃｌｋの次の立ち上がりエッジで、ｇｎｔは再び高くなって、データ・ワードＤ３がアドレスＡ３に転送されることを可能にし、その結果、ｒｅｑ及びｇｎｔはｃｌｋの次の立ち上がりエッジで低くなり、次の読み出し／書き込み要求を待つ。
【０１５５】
図１２の例示的な配置とともに使用されるストリーミング画像処理パイプライン（ＳＩＰＰ）ソフトウェア・フレームワークは、画像／映像処理ダイが取り付けられる基板にワイヤボンドされるパッケージの外部ＤＲＡＭダイの附属物を、スキャンライン・バッファ、フレーム・タイル（フレームのサブセクション）、または高解像度での実際の全フレームのためのＣＭＸメモリ４１２を使用する画像処理パイプラインの実装への柔軟なアプローチに提供する。ＳＩＰＰフレームワークは、画像境界（ピクセルの多重化）の取扱い、及び、（プロセッサ上の）ソフトウェアのＩＳＰ（画像信号処理）の実装態様を、よりシンプルにかつより汎用的にする環状ライン・バッファ管理などの複雑さに対処する。
【０１５６】
図２５は、いくつかの実施形態による並列処理装置４００を示す。並列処理装置４００は、メモリ・サブシステム（ＣＭＸ）４１２と、複数のフィルタ・アクセラレータ１８０４と、メモリ・サブシステム４１２にアクセスを調停するためのバス構造１８０６とを含むことができる。メモリ・サブシステム（ＣＭＸ）４１２は、複数の処理要素４０２が、ストールすることなくデータ及びプログラム・コード・メモリに並列にアクセスすることを可能にするように構成される。これらの処理要素４０２は、たとえば、ＳＨＡＶＥ（ストリーミング・ハイブリッド・アーキテクチャ・ベクトル・エンジン）プロセッサ、好適にＶＬＩＷ（超長命令語）プロセッサ、ストールすることのないデータ及びプログラム・コード・メモリへの並列のアクセス、またはフィルタ・アクセラレータを含むことができる。さらに、メモリ・サブシステム（ＣＭＸ）４１２は、ＡＸＩ（図示せず）などの並列バスを介してＣＭＸメモリ・サブシステム４１２にアクセスするために、ホスト・プロセッサ（図示せず）の準備をすることができる。いくつかの実施形態において、各処理要素４０２は、そのＬＳＵポートを通して１サイクルにつき１２８ビットまで読み出し／書き込みすることが可能であり、その命令ポートを通して１サイクルにつき１２８ビット・プログラム・コードまで読み出すことが可能である。それぞれ、プロセッサ及びフィルタ・アクセラレータのためのＩＳＩ及びＡＭＣインタフェースに加えて、ＣＭＸ４１２は、ＡＨＢ及びＡＸＩバス・インタフェースを通るメモリへの同時読み出し／書き込みアクセスを提供する。ＡＨＢ及びＡＸＩは、プロセッサ、メモリ、及び周辺機器が共有バス・インフラストラクチャ１８０６を使用して連結することを可能にする標準ＡＲＭパラレル・インタフェース・バスである。ＣＭＸメモリ・サブシステム４１２は、１サイクルにつき１８×１２８ビット・メモリ・アクセスのピークを処理するように構成されることが可能である。
【０１５７】
アクセラレータ１８０４は、ＳＩＰＰソフトウェア・フレームワーク１２００で使用可能なハードウェア画像処理フィルタのコレクションを含む。アクセラレータ１８０４は、最も計算負荷の高い機能の一部を処理要素１８０２からオフロードすることができる。図は、複数のフィルタ・アクセラレータ１８０４が、アドレス・フィルタリング、調停、及び多重化を行うＡＭＣ１８０４に連結することができる方法を示す。複数のＭＩＰＩカメラ・シリアル・インタフェース２５０２もＡＭＣ１８０４に連結されてもよく、好ましい実装態様において、合計１２のＭＩＰＩシリアル・レーンは、２つのレーンの６つのグループに連結される。ＡＭＣ１８０４はまた、ＡＸＩ及びＡＰＢインタフェースに連結され、リファレンス実装の２つのシステムＲＩＳＣプロセッサがＡＭＣを介してＣＭＸメモリにアクセスすることを可能にする。図の最終要素は、ＡＭＣ１８０４がアクセスを調停するＣＭＸ４１２であり、複数のハードウェア・フィルタ・アクセラレータ１８０４によるＣＭＸメモリ４１２の物理ＲＡＭインスタンスへの同時アクセスを可能にする。リファレンス・フィルタ・アクセラレータ１８０４も示され、この場合、５×５  ２Ｄフィルタ・カーネルであり、これは、ｆｐ１６（ＩＥＥＥ７５４に類似の１６ビット浮動小数点フォーマット）演算パイプラインと、関連するパイプライン・ストール・コントローラと、ｆｐ１６パイプラインへの一連の入力を格納するライン・バッファ読み出しクライアントと、ｆｐ１６パイプラインから出力を格納するライン・スタート制御入力及びライン・バッファ書き込みクライアントとを含む。アクセラレータがＳＩＰＰフレームワーク内に収まることを可能にするために、それらはＣＭＸメモリへの高帯域幅アクセスを必要とし、これは、アクセラレータ・メモリ・コントローラ（ＡＭＣ）によって提供される。
【０１５８】
いくつかの実施形態において、ＣＭＸメモリ・サブシステム４１２は、高速で、低電力のアクセスのために、近隣の処理要素４０２と関連する１２８ｋＢのブロックまたはスライスに分割可能である。スライスの中で、メモリは、多数のより小さいタイル、たとえば３×３２ｋＢ、１×１６ｋＢ、及び２×８ｋＢの独立したＳＲＡＭブロックとして編成される。物理ＲＡＭサイズは、面積利用率と構成柔軟性とのトレードオフとして選択可能である。任意の処理要素４０２は、同じレイテンシ（３サイクル）を有するメモリ・サブシステム（ＣＭＸ）４１２のどこでも、物理ＲＡＭにアクセスすることができるが、ローカル・プロセッサ・スライスの外側のアクセスは帯域幅で制限され、ローカル・スライスへのアクセスより電力を消費する。一般に、電力消費を減少させて、パフォーマンスを向上させるために、処理要素４０２は、データを専用メモリ・スライスにローカルに格納することができる。
【０１５９】
いくつかの実施形態において、各物理ＲＡＭは６４ビット長とすることが可能である。１つより多い処理要素４０２が単一の物理ＲＡＭにアクセスしようとする場合、衝突により、プロセッサ・ストールが発生する可能性がある。ＣＭＸは、ポート衝突間の調停を自動的に行い、データが紛失されないことを保証する。ポート衝突ごとに、処理要素４０２は１サイクルの間、ストールし、結果としてより低いスループットとなる。ＣＭＸ４１２内のデータ形式を（プログラマが）慎重に考慮することによって、ポート衝突を避けることが可能であり、プロセッサ・サイクルをよりよく利用することができる。
【０１６０】
いくつかの実施形態において、複数のプロセッサに、アクセラレータ及びＣＭＸメモリが設けられる。
【０１６１】
図２５に示される画像処理ＨＷアーキテクチャから分かるように、各フィルタ・アクセラレータ１８０４は、ＣＭＸメモリ４１２にアクセスする少なくとも１つのＡＭＣ読み出し及び／または書き込みクライアント・インタフェースを含むことが可能である。ＡＭＣ１８０６上の読み出し／書き込みクライアント・インタフェースの数は、好適に設定可能である。ＡＭＣ１８０６は、ＣＭＸメモリ４１２の各スライスに、一対の６４ビット・ポートを含むことが可能である。ＡＭＣ１８０６は、そのクライアントから適切なＣＭＸスライス４１２に（部分的なアドレス・デコードによって）要求を送る。異なるクライアントからの同じスライスへの同時要求は、ラウンドロビン方式で調停できる。ＣＭＸ４１２から戻った読み出しデータは、要求しているＡＭＣ読み出しクライアントに戻される。
【０１６２】
ＡＭＣクライアント（アクセラレータ）１８０４は、ＡＭＣ１８０６に完全３２ビット・アドレスを提示する。ＣＭＸメモリ空間へのマッピングを行わないクライアントからのアクセスは、ＡＭＣのＡＸＩマスタに転送される。異なるクライアントからの同時アクセス（ＣＭＸメモリ空間の外側）は、ラウンドロビン方式で調停される。
【０１６３】
ＡＭＣ１８０６は、フィルタ・アクセラレータ１８０４へのＣＭＸ４１２のアクセスを提供するだけに限られない。そのメモリ・インタフェースが、ＡＭＣ上の読み出し／書き込みクライアント・インタフェースに好適に適合する場合、任意のハードウェア・アクセラレータまたはサード・パーティの要素は、ＡＭＣ１８０６を使用して、ＣＭＸ及びプラットフォームのより広いメモリ空間にアクセスしてもよい。
【０１６４】
ハードウェア画像処理パイプライン（ＳＩＰＰ）は、フィルタ・アクセラレータ１８０４、調停ブロック１８０６、ＭＩＰＩコントロール２５０２、ＡＰＢ及びＡＸＩインタフェース及びＣＭＸマルチポート・メモリ４１２への接続部、ならびに、例示的なハードウェア５×５フィルタ・カーネルを含むことができる。この配置により、複数のプロセッサ１８０２及び画像処理アプリケーションのハードウェア・フィルタ・アクセラレータ１８０４が、複数のシングル・ポートＲＡＭ（ランダム・アクセス・メモリ）物理的ブロックから成るメモリ・サブシステム４１２を共有することが可能になる。
【０１６５】
シングル・ポート・メモリの使用は、メモリ・サブシステムの電力及び面積効率を向上させるが、帯域幅を制限する。提案された配置により、これらのＲＡＭブロックは、複数の物理ＲＡＭインスタンスを使用し、さらに複数のソースに対処するためにそれらに調停されたアクセスを提供することによって、複数のソース（プロセッサ及びハードウェア・ブロック）からの複数の同時読み出し及び書き込み要求に対処することが可能な仮想マルチポート・メモリ・サブシステムとしてふるまうことが可能になる。
【０１６６】
アプリケーション・プログラミング・インタフェース（ＡＰＩ）及びアプリケーション・レベルでのデータ分割の使用は、プロセッサとフィルタ・アクセラレータとの間の物理ＲＡＭブロック、またはそれら自身の間のプロセッサの競合を減少させ、よって、プロセッサ及びハードウェアに提供されるデータ帯域幅が、所定のメモリ・サブシステム構成に対して増加することを保証するために重要である。
【０１６７】
いくつかの実施形態において、並列処理装置４００を、電子装置に備えることが可能である。図２６は、いくつかの実施形態による並列処理装置を含む電子装置を示す。電子装置２６００は、プロセッサ２６０２と、メモリ２６０４と、１つまたは複数のインタフェース２６０６と、並列処理装置４００とを含むことが可能である。
【０１６８】
電子装置２６００は、コンピュータ可読媒体、フラッシュメモリ、磁気ディスクドライブ、光学ドライブ、プログラマブル読み出し専用メモリ（ＰＲＯＭ）、及び／または読み出し専用メモリ（ＲＯＭ）などのメモリ２６０４を有することが可能である。電子装置２６００は、命令を処理し、メモリ２６０４に格納されてもよいソフトウェアを実行する１つまたは複数のプロセッサ２６０２で構成可能である。プロセッサ２６０２はまた、メモリ２６０４及びインタフェース２６０６と通信し、その他の装置と通信することができる。プロセッサ２６０２は、ＣＰＵ、アプリケーション・プロセッサ、及びフラッシュメモリを集約するシステムオンチップなどの任意の適用可能なプロセッサ、または縮小命令セットコンピューティング（ＲＩＳＣ）プロセッサであってもよい。
【０１６９】
いくつかの実施形態において、コンパイラ１２０８及びランタイム・スケジューラ１２１０は、メモリ２６０４に格納されるソフトウェアに実装可能であり、プロセッサ２６０２上で作動する。メモリ２６０４は、非一時的なコンピュータ可読媒体、フラッシュメモリ、磁気ディスクドライブ、光学ドライブ、プログラマブル読み出し専用メモリ（ＰＲＯＭ）、読み出し専用メモリ（ＲＯＭ）、あるいは任意のその他のメモリまたはメモリ組合せであってもよい。ソフトウェアは、コンピュータ命令またはコンピュータコードを実行することが可能なプロセッサ上で実行することが可能である。プロセッサはまた、特定用途向け集積回路（ＡＳＩＣ）、プログラマブル・ロジック・アレイ（ＰＬＡ）、フィールド・プログラマブル・ゲート・アレイ（ＦＰＧＡ）、または任意のその他の集積回路を使用するハードウェアに実装されてもよい。
【０１７０】
いくつかの実施形態において、コンパイラ１２０８は、インタフェース２６０６で電子装置２６００と通信する、独立したコンピューティング装置に実装可能である。たとえば、コンパイラ１２０８は、電子装置２６００と通信するサーバで作動することが可能である。
【０１７１】
インタフェース２６０６は、ハードウェアまたはソフトウェアに実装可能である。インタフェース２６０６は、ネットワークならびにテレビへのリモコンなどのローカル・ソースからのデータ及び制御情報を受けるために使用可能である。電子装置はまた、キーボード、タッチ・スクリーン、トラックボール、タッチ・パッド、及び／またはマウスなどのさまざまなユーザインタフェースを提供することが可能である。電子装置はまた、いくつかの実施形態において、スピーカ及びディスプレイ装置を含んでもよい。
【０１７２】
いくつかの実施形態において、並列処理装置４００の処理要素は、コンピュータ命令またはコンピュータコードを実行することが可能な集積チップを含むことが可能である。プロセッサはまた、特定用途向け集積回路（ＡＳＩＣ）、プログラマブル・ロジック・アレイ（ＰＬＡ）、フィールド・プログラマブル・ゲート・アレイ（ＦＰＧＡ）、または任意のその他の集積回路を使用するハードウェアに実装されてもよい。
【０１７３】
いくつかの実施形態において、並列処理装置４００は、システム・オン・チップ（ＳＯＣ）として実装可能である。他の実施形態において、並列処理装置の１つまたは複数のブロックを、独立したチップとして実装可能であり、並列処理装置は、システム・イン・パッケージ（ＳＩＰ）にパッケージ化されることが可能である。いくつかの実施形態において、並列処理装置４００は、データ処理アプリケーションのために使用されることが可能である。データ処理アプリケーションは、画像処理アプリケーション及び／または映像処理アプリケーションを含むことが可能である。画像処理アプリケーションは、画像フィルタリング動作を含む画像処理プロセスを含むことが可能である。映像処理アプリケーションは、映像デコード動作、映像エンコード動作、映像の動作または物体を検出するための映像分析動作を含むことが可能である。本発明の追加のアプリケーションは、画像、物体、または映像のシーケンスに基づく機械学習及び分類ならびに、ゲーム・アプリケーションが深さ対応カメラを含む複数のカメラ画像から形状を抜き出し、ワイヤフレーム形状（たとえばポイントクラウドを介した）をＧＰＵによって後続の頂点シェーディングのために抜き出すことが可能な複数の表示から特徴を抜き出すアプリケーションを含む拡張現実アプリケーションを含む。
【０１７４】
電子装置２６００は、携帯電話などの携帯機器を含むことが可能である。携帯機器は、複数のアクセス技術を使用する複数の無線アクセス・ネットワーク、及び、有線通信ネットワークと通信することができる。携帯機器は、ワード処理、ウェブ・ブラウジング、ゲーム、電子ブック機能、オペレーティング・システム、及びフル・キーボードなどの高度な機能を提供するスマートフォンであってもよい。携帯機器は、Ｓｙｍｂｉａｎ  ＯＳ、ｉＰｈｏｎｅ  ＯＳ、ＲＩＭのＢｌａｃｋｂｅｒｒｙ、Ｗｉｎｄｏｗｓ  Ｍｏｂｉｌｅ、Ｌｉｎｕｘ、Ｐａｌｍ  ＷｅｂＯＳ、及びＡｎｄｒｏｉｄなどのオペレーティング・システムを実行してもよい。画面は、データを携帯機器に入力するために使用することができるタッチ・スクリーンでもよく、画面は、フル・キーボードの代わりに使用可能である。携帯機器は、アプリケーションを実行する、または、通信ネットワークのサーバによって提供されるアプリケーションと通信する機能を有してもよい。携帯機器は、ネットワーク上のこれらのアプリケーションからアップデート及びその他の情報を受けることができる。
【０１７５】
電子装置２６００はまた、テレビ（ＴＶ）、映像プロジェクタ、セットトップ・ボックスまたはセットトップ・ユニット、デジタル・ビデオ・レコーダ（ＤＶＲ）、コンピュータ、ネットブック、ラップトップ、タブレット・コンピュータ、及びネットワークで通信することができる任意のその他のオーディオ／ビジュアル機器などの多くのその他の装置を含むことが可能である。電子装置はまた、そのスタックまたはメモリに、グローバル位置決め座標、プロファイル情報、またはその他の位置情報を保持することができる。
【０１７６】
いくつかの異なる配置が本明細書で説明されたが、それぞれの特徴は、利点を実現するために、さまざまな形態で互いに有利に組み合わされてもよいことが理解されるであろう。
【０１７７】
上記明細書において、応用例が、特定の実施例によって説明されている。しかし、さまざまな変形及び変更は、添付の特許請求の範囲に記載した本発明のより広い精神及び範囲から逸脱しない範囲で、その中に行われてもよいことは明らかであろう。たとえば、接続は、それぞれのノード、ユニット、または装置の間で信号を転送するために好適な、たとえば中間装置を介した、任意のタイプの接続でもよい。したがって、特に示される、または、記載されない限り、接続はたとえば、直接接続または間接接続でもよい。
【０１７８】
本明細書に示されるアーキテクチャは、単に例示的なものであり、実際に、同じ機能を実現する多くのその他のアーキテクチャを実装することができることが理解されるべきである。抽象的であるが、明確な意味で、同じ機能を実現するコンポーネントの任意の配置は、所望の機能が実現されるように、効果的に「関連している」。よって、特定の機能を実現するために組み合わされる本明細書の任意の２つのコンポーネントは、アーキテクチャまたは中間コンポーネントにかかわりなく、所望の機能が実現されるように、互いに「関連している」と見なすことができる。同様に、非常に関連する任意の２つのコンポーネントも、所望の機能を実現するために、互いに「作動連結」または「作動結合」されていると見なすことができる。
【０１７９】
さらにまた、当業者であれば、上記動作の機能間の境界は単に実例であることを認識するであろう。複数の動作の機能は単一の動作に組み合わされてもよく、及び／または、単一の動作の機能は追加の動作に分散されてもよい。さらに、代替の実施形態は、特定の動作の複数の例を含んでもよく、かつ、動作の順序は、さまざまなその他の実施形態において、変更されてもよい。
【０１８０】
しかし、その他の変形、変更、及び代案も可能である。したがって、明細書及び図面は制限的な意味ではなく、実例と見なされる。
【０１８１】
特許請求の範囲において、括弧の間に配置される任意の参照符号は、特許請求の範囲を制限するものとして解釈されない。用語「備える（ｃｏｍｐｒｉｓｉｎｇ）」は、特許請求の範囲に記載される以外のその他の要素またはステップの存在を除外しない。さらにまた、用語「ａ」または「ａｎ」は、本明細書で使用される場合、１つまたは１つより多いものとして定義される。また、特許請求の範囲における「少なくとも１つ」及び「１つまたは複数」などの導入句の使用は、不定冠詞「ａ」または「ａｎ」による別の請求項要素の導入が、同一の請求項が導入句「１つまたは複数」または「少なくとも１つ」、及び「ａ」または「ａｎ」などの不定冠詞を含む場合であっても、１つだけそのような要素を含む発明へのそのような導入請求項要素を含む任意の特定の請求項を限定することを意味するものと解釈されるべきではない。同じことが定冠詞の使用にも該当する。特に明記しない限り、「第１」及び「第２」などの用語は、そのような用語が記述する要素間の任意の識別に使用される。このように、これらの用語は、そのような要素の時間的または他の優先順位を示すようには必ずしも意図されていない。特定の処置が相互に異なる請求項において列挙されるという単なる事実は、これら処置の組合せが有利には使用され得ないということを示すものではない。
［発明の項目］
［項目１］
命令を実行するようにそれぞれ構成される複数の処理要素と、
前記複数の処理要素のうちの１つと関連する第１のメモリ・スライスを含む複数のメモリ・スライスを備えるメモリ・サブシステムであって、前記第１のメモリ・スライスがそれぞれ個々の読み出し及び書き込みポートを有する複数のランダム・アクセス・メモリ（ＲＡＭ）タイルを備える、前記メモリ・サブシステムと、
前記複数の処理要素と前記メモリ・サブシステムとを結合するように構成される相互接続システムであって、前記相互接続システムが、前記第１のメモリ・スライスと前記複数の処理要素のうちの前記１つとを結合するように構成されるローカル相互接続と、前記第１のメモリ・スライスと前記複数の処理要素のうちの残りとを結合するように構成されるグローバル相互接続とを含む、前記相互接続システムとを備える、
並列処理装置。
［項目２］
前記複数のＲＡＭタイルのうちの前記１つが調停ブロックと関連し、
前記調停ブロックが、前記複数の処理要素うちの１つからのメモリ・アクセス要求を受けるように、かつ、前記複数の処理要素のうちの前記１つに、前記複数のＲＡＭタイルうちの前記１つへのアクセスを許可するように構成される、
項目１に記載の処理装置。
［項目３］
前記調停ブロックが、ラウンドロビン方式で前記複数のＲＡＭタイルのうちの前記１つへのアクセスを許可するように構成される、
項目２に記載の処理装置。
［項目４］
前記調停ブロックが、前記複数のＲＡＭタイルのうちの前記１つへのメモリ・アクセス要求を監視し、前記複数の処理要素のうちの２つ以上が同時に前記複数のＲＡＭタイルのうちの前記１つにアクセスしようとしているかどうかを判定するように構成される衝突検出器を備える、
項目２に記載の処理装置。
［項目５］
前記衝突検出器が、複数のアドレス・デコーダに結合され、
前記複数のアドレス・デコーダのそれぞれが、前記複数の処理要素のうちの１つに結合されて、前記複数の処理要素のうちの前記１つが前記調停ブロックと関連する前記複数のＲＡＭタイルのうちの前記１つにアクセスしようとしているかどうかを判定するように構成される、
項目４に記載の処理装置。
［項目６］
前記複数の処理要素が、少なくとも１つのベクトル・プロセッサと、少なくとも１つのハードウェア・アクセラレータとを備える、
項目１に記載の処理装置。
［項目７］
前記複数のメモリ・スライスのうちの１つへのアクセスを提供するようにそれぞれ構成される複数のメモリ・スライス・コントローラをさらに備える、
項目６に記載の処理装置。
［項目８］
前記相互接続システムが、前記少なくとも１つのベクトル・プロセッサと前記メモリ・サブシステムとの間の通信を提供するように構成される第１のバスを備える、
項目７に記載の処理装置。
［項目９］
前記相互接続システムが、前記少なくとも１つのハードウェア・アクセラレータと前記メモリ・サブシステムとの間の通信を提供するように構成される第２のバス・システムを備える、
項目８に記載の処理装置。
［項目１０］
前記第２のバス・システムが、前記少なくとも１つのハードウェア・アクセラレータからのメモリ・アクセス要求を受けることによって、かつ、前記メモリ・サブシステムへのアクセスを、前記少なくとも１つのハードウェア・アクセラレータに許可することによって、前記少なくとも１つのハードウェア・アクセラレータと前記メモリ・サブシステムとの間の通信を仲介するように構成されるスライス・アドレス要求フィルタを備える、
項目９に記載の処理装置。
［項目１１］
前記複数の処理装置のうちの１つが、前記メモリ・サブシステムのスループットを増加させるためのバッファを備え、
前記バッファの要素の数が、前記メモリ・サブシステムからデータを検索するためのサイクルの数より大きい、
項目１に記載の処理装置。
［項目１２］
第１の処理要素と第２の処理要素とを含み、それぞれが命令を実行するように構成された複数の処理要素を提供することと、
前記第１の処理要素と関連し、それぞれ個々の読み出し及び書き込みポートを有する複数のランダム・アクセス・メモリ（ＲＡＭ）タイルを備えた第１のメモリ・スライスを含む複数のメモリ・スライスを備えるメモリ・サブシステムを提供することと、
相互接続システムのローカル相互接続を介した前記複数のＲＡＭタイルのうちの１つと関連する調停ブロックによって、前記第１の処理要素から第１のメモリ・アクセス要求を受けることと、
グローバル相互接続を介した前記調停ブロックによって、前記第１の処理要素に前記複数のＲＡＭタイルのうちの前記１つにアクセスする権限を付与するために、前記第１の処理要素に第１の権限付与メッセージを送ることとを含む、
並列処理システムの作動方法。
［項目１３］
前記相互接続システムのグローバル相互接続を介した前記調停ブロックによって、第２の処理要素から第２のメモリ・アクセス要求を受けることと、
前記グローバル相互接続を介した前記調停ブロックによって、前記第２の処理要素に前記複数のＲＡＭタイルのうちの前記１つにアクセスする権限を付与するために、前記第２の処理要素に第２の権限付与メッセージを送ることとをさらに含む、
項目１２に記載の方法。
［項目１４］
前記調停ブロックによって、ラウンドロビン方式で前記複数のＲＡＭタイルのうちの前記１つへアクセスする権限を付与するために、前記複数の処理要素に複数の権限付与メッセージを送ることをさらに含む、
項目１２に記載の方法。
［項目１５］
前記調停ブロックの衝突検出器によって、前記複数のＲＡＭタイルのうちの前記１つへのメモリ・アクセス要求を監視することと、
前記複数の処理要素の２つ以上が同時に前記複数のＲＡＭタイルのうちの前記１つにアクセスしようとしているかどうかを判定することとをさらに含む、
項目１２に記載の方法。
［項目１６］
前記複数の処理要素が、少なくとも１つのベクトル・プロセッサと、少なくとも１つのハードウェア・アクセラレータとを備える、
項目１２に記載の方法。
［項目１７］
前記複数のメモリ・スライスのうちの１つへのアクセスを提供するようにそれぞれ構成される複数のメモリ・スライス・コントローラを提供することをさらに含む、
項目１６に記載の方法。
［項目１８］
前記相互接続システムの第１のバス・システムを介した、前記少なくとも１つのベクトル・プロセッサと前記メモリ・サブシステムとの間の通信を提供することをさらに含む、
項目１７に記載の方法。
［項目１９］
前記相互接続システムの第２のバス・システムを介した、前記少なくとも１つのハードウェア・アクセラレータと前記メモリ・サブシステムとの間の通信を提供することをさらに含む、
項目１８に記載の方法。
［項目２０］
前記第２のバス・システムが、前記少なくとも１つのハードウェア・アクセラレータからのメモリ・アクセス要求を受けることによって、かつ、前記メモリ・サブシステムへのアクセスを、前記少なくとも１つのハードウェア・アクセラレータに許可することによって、前記少なくとも１つのハードウェア・アクセラレータと前記メモリ・サブシステムとの間の通信を仲介するように構成されるスライス・アドレス要求フィルタを備える、
項目１９に記載の方法。
［項目２１］
命令を実行するようにそれぞれ構成される複数の処理要素と、
前記複数の処理要素のうちの１つと関連する第１のメモリ・スライスを含む複数のメモリ・スライスを備えるメモリ・サブシステムであって、前記第１のメモリ・スライスがそれぞれ個々の読み出し及び書き込みポートを有する複数のランダム・アクセス・メモリ（ＲＡＭ）タイルを備える、前記メモリ・サブシステムと、
前記複数の処理要素と前記メモリ・サブシステムとを結合するように構成される相互接続システムであって、前記相互接続システムが、前記第１のメモリ・スライスと前記複数の処理要素のうちの前記１つとを結合するように構成されるローカル相互接続と、前記第１のメモリ・スライスと前記複数の処理要素のうちの残りとを結合するように構成されるグローバル相互接続とを含む、前記相互接続システムとを備える、
並列処理装置と、
前記並列処理装置と通信し、メモリに格納されるモジュールを実行するように構成されるプロセッサであって、
前記モジュールが、データ処理プロセスと関連するフロー・グラフを受けるように構成され、前記フロー・グラフが、複数のノードと、前記複数のノードのうちの２つ以上を連結する複数のエッジとを備え、各ノードが動作を識別し、各エッジは前記連結されたノード間の関係を識別し、
さらに、前記モジュールが、前記複数のノードのうちの第１のノードを前記並列処理装置の第１の処理要素に割り当て、前記複数のノードのうちの第２のノードを前記並列処理装置の第２の処理要素に割り当てるように構成され、それによって、前記第１のノード及び前記第２のノードと関連する動作を並列化する、
前記プロセッサと
を備える、電子装置。
［項目２２］
前記フロー・グラフが、拡張可能なマーク付け言語（ＸＭＬ）フォーマットで提供される、
項目２１に記載の電子装置。
［項目２３］
前記モジュールが、前記複数のノードのうちの前記第１のノードを、前記並列処理装置のメモリ・サブシステムの過去のパフォーマンスに基づいて、前記第１の処理要素に割り当てるように構成される、
項目２１に記載の電子装置。
［項目２４］
前記並列処理装置の前記メモリ・サブシステムが、所定の期間にわたるメモリ衝突回数をカウントするように構成されるカウンタを備え、
前記メモリ・サブシステムの前記過去のパフォーマンスが、前記カウンタによって計測される前記メモリ衝突回数を備える、
項目２３に記載の電子装置。
［項目２５］
前記モジュールが、前記複数のノードのうちの前記第１のノードを前記第１の処理要素に割り当てるように構成され、
一方、前記並列処理装置が、前記フロー・グラフの少なくとも一部を作動させている、
項目２１に記載の電子装置。
［項目２６］
前記モジュールが、複数のフロー・グラフを受けて、前記複数のフロー・グラフと関連するすべての動作を前記並列処理装置の単一の処理要素に割り当てるように構成される、
項目２１に記載の電子装置。
［項目２７］
前記モジュールが、前記処理要素によるメモリ・アクセスをずらして、メモリ衝突を減少させるように構成される、
項目２１に記載の電子装置。
［項目２８］
前記電子装置が携帯機器を含む、
項目２１に記載の電子装置。
［項目２９］
前記フロー・グラフが、前記並列処理装置と関連するアプリケーション・プログラミング・インタフェース（ＡＰＩ）を使用して指定される、
項目２１に記載の電子装置。
［項目３０］
前記モジュールが、入力画像データを複数のストリップに分割し、前記入力画像データの前記複数のストリップのうちの１つを前記複数の処理要素のうちの１つに提供することによって、前記入力画像データを前記複数の処理要素に提供するように構成される、
項目２１に記載の電子装置。
［項目３１］
前記入力画像データの前記複数のストリップの数が、前記複数の処理要素の数と同じである、
項目３０に記載の電子装置。
［項目３２］
並列処理装置と通信するプロセッサで、データ処理プロセスと関連し、複数のノードと、前記複数のノードのうちの２つ以上を連結する複数のエッジとを備えたフロー・グラフであって、各ノードが動作を識別し、各エッジが前記連結されたノード間の関係を識別する前記フロー・グラフを受けることと、
前記複数のノードのうちの第１のノードを前記並列処理装置の第１の処理要素に割り当て、前記複数のノードのうちの第２のノードを前記並列処理装置の第２の処理要素に割り当て、それによって、前記第１のノード及び前記第２のノードと関連する動作を並列化することとを含み、
前記並列処理装置がまた、
前記第１の処理要素と関連する第１のメモリ・スライスを含む複数のメモリ・スライスを備えるメモリ・サブシステムであって、前記第１のメモリ・スライスがそれぞれ個々の読み出し及び書き込みポートを有する複数のランダム・アクセス・メモリ（ＲＡＭ）タイルを備える、前記メモリ・サブシステムと、
前記第１の処理要素、前記第２の処理要素、及び前記メモリ・サブシステムを結合するように構成される相互接続システムであって、前記相互接続システムが、前記第１のメモリ・スライスと前記第１の処理要素とを結合するように構成されるローカル相互接続と、前記第１のメモリ・スライスと前記第２の処理要素とを結合するように構成されるグローバル相互接続とを含む、前記相互接続システムとを含む、
方法。
［項目３３］
前記フロー・グラフが、拡張可能なマーク付け言語（ＸＭＬ）フォーマットで提供される、
項目３２に記載の方法。
［項目３４］
前記複数のノードのうちの前記第１のノードを前記並列処理装置の前記第１の処理要素に割り当てることが、前記複数のノードのうちの前記第１のノードを前記並列処理装置の第１のメモリ・スライスの過去のパフォーマンスに基づいて前記第１の処理要素に割り当てることを含む、
項目３２に記載の方法。
［項目３５］
前記メモリ・サブシステムのカウンタで、所定の期間にわたる前記第１のメモリ・スライスにおけるメモリ衝突回数をカウントすることをさらに含み、
前記第１のメモリ・スライスの過去のパフォーマンスが、前記第１のメモリ・スライスにおける前記メモリ衝突回数を備える、
項目３４に記載の方法。
［項目３６］
前記複数のノードのうちの前記第１のノードを前記第１の処理要素に割り当てることが行われ、
一方、前記並列処理装置が、前記フロー・グラフの少なくとも一部を作動させている、
項目３２に記載の方法。
［項目３７］
メモリ衝突を減少させるために、前記処理要素による前記第１のメモリ・スライスへのメモリ・アクセスをずらすことをさらに含む、
項目３２に記載の方法。
［項目３８］
前記フロー・グラフが、前記並列処理装置と関連するアプリケーション・プログラミング・インタフェース（ＡＰＩ）を使用して指定される、
項目３２に記載の方法。
［項目３９］
入力画像データを複数のストリップに分割することによって、前記入力画像データを前記複数の処理要素に提供することと、
前記入力画像データの前記複数のストリップのうちの１つを前記複数の処理要素のうちの１つに提供することとをさらに含む、
項目３２に記載の方法。
［項目４０］
前記入力画像データの前記複数のストリップの数が、前記複数の処理要素の数と同じである、
項目３９に記載の方法。
【図１】
0006571078.tif 000002
【図２】
0006571078.tif 000003
【図３】
0006571078.tif 000004
【図４】
0006571078.tif 000005
【図５】
0006571078.tif 000006
【図６】
0006571078.tif 000007
【図７】
0006571078.tif 000008
【図８】
0006571078.tif 000009
【図９】
0006571078.tif 000010
【図１０】
0006571078.tif 000011
【図１１】
0006571078.tif 000012
【図１２】
0006571078.tif 000013
【図１３】
0006571078.tif 000014
【図１４Ａ】
0006571078.tif 000015
【図１４Ｂ】
0006571078.tif 000016
【図１５】
0006571078.tif 000017
【図１６】
0006571078.tif 000018
【図１７】
0006571078.tif 000019
【図１８】
0006571078.tif 000020
【図１９】
0006571078.tif 000021
【図２０】
0006571078.tif 000022
【図２１】
0006571078.tif 000023
【図２２】
0006571078.tif 000024
【図２３】
0006571078.tif 000025
【図２４】
0006571078.tif 000026
【図２５】
0006571078.tif 000027
【図２６】
0006571078.tif 000028