(57)【要約】  プロセッサを記載する。プロセッサはネットワークを含む。複数の処理コアはネットワークに連結される。プロセッサは、ネットワークに連結されたトランスミッタ回路を含む。トランスミッタ回路は、処理コアのうち１つによって生成される出力データをネットワーク内に送信するためのものである。トランスミッタ回路は制御論理回路を含む。制御論理回路は、トランスミッタ回路が出力データのうち先行の第１のパケットの送信を完了する前に、トランスミッタ回路に、出力データのうち第２のパケットの送信のための要求を送信させる。
2020519996.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサであって、
ネットワークと、
前記ネットワークに連結された複数の処理コアと、
前記ネットワークに連結されたトランスミッタ回路とを備え、前記トランスミッタ回路は、前記複数の処理コアのうちの１つによって生成された出力データを前記ネットワーク内に送信し、前記トランスミッタ回路は制御論理回路を含み、前記制御論理回路は、前記トランスミッタ回路が出力データのうち先行の第１のパケットの送信を完了する前に、前記トランスミッタ回路に、出力データのうち第２のパケットの送信のための要求を送信させる、プロセッサ。
【請求項２】
前記要求は、
前記第２のパケットを前記第１のパケットが送信されつつあるのと同じ宛先へ送信すべき場合に前記同じ宛先、または、
前記第２のパケットを異なる宛先に送信すべき場合に前記異なる宛先、
に送信されることになる、請求項１に記載のプロセッサ。
【請求項３】
前記制御論理回路は、
前記第１のパケットおよび前記第２のパケットが同じ宛先に送信されている場合、前記第１のパケットおよび前記第２のパケットのために同じクレジットカウンタを用いることになるか、または、
前記第１のパケットおよび前記第２のパケットが異なる宛先に送信されている場合、前記第１のパケットのために第１のクレジットカウンタを用いることになるとともに前記第２のパケットのために第２のクレジットカウンタを用いることになる、請求項１または２に記載のプロセッサ。
【請求項４】
制御論理は、異なる宛先に対する複数のパケットの同時送信を制御するための複数のクレジットカウンタを含む、前述の請求項の少なくとも１項に記載のプロセッサ。
【請求項５】
前記クレジットカウンタの各々は、いずれかの特定の宛先に対する送信を制御するために永久的に割当てられるものではない、請求項２から４の少なくとも１項に記載のプロセッサ。
【請求項６】
前記プロセッサは画像処理プロセッサであり、前記第１のパケットおよび前記第２のパケットはデータの画像の複数ラインを含む、前述の請求項のいずれか１項に記載のプロセッサ。
【請求項７】
前記第１のパケットおよび前記第２のパケットのデータ単位は、前記トランスミッタによって送信された後、および、前記データ単位が前記複数の処理コアのうち別の１つ以上の処理コアによって処理される前に、前記プロセッサのメモリ回路によって待ち行列に入れられる、前述の請求項のいずれか１項に記載のプロセッサ。
【請求項８】
前記画像処理プロセッサは、２次元シフトレジスタアレイに連結された、実行レーンのアレイを含む、請求項６または７に記載のプロセッサ。
【請求項９】
前記画像処理プロセッサは、画像データのステンシルを処理するための複数のステンシルプロセッサを含む、請求項６から８の少なくとも１項に記載のプロセッサ。
【請求項１０】
部分的に重なっているステンシル上で動作するように構成される、請求項９に記載のプロセッサ。
【請求項１１】
前記実行レーンのアレイの外側にレジスタの「ハロー」が存在するように、前記実行レーンのアレイよりも広い寸法を有するシフトレジスタ構造を備えたデータ演算部を含むかまたは前記データ演算部に連結される、前述の請求項のいずれか１項に記載のプロセッサ。
【請求項１２】
コンピューティングシステムであって、
複数の汎用処理コアと、
システムメモリと、
前記システムメモリと前記汎用処理コアとの間で連結されるメモリコントローラと、
画像処理プロセッサとを備え、前記画像処理プロセッサは、
ａ）ネットワークと、
ｂ）前記ネットワークに連結された複数の画像処理コアと、
ｃ）前記ネットワークに連結されたトランスミッタ回路とを含み、前記トランスミッタ回路は、前記画像処理コアのうちの１つによって生成された出力データを前記ネットワーク内に送信し、前記トランスミッタ回路は制御論理回路を含み、前記制御論理回路は、前記トランスミッタ回路が出力データのうち先行の第１のパケットの送信を完了する前に、前記トランスミッタ回路に、出力データのうち第２のパケットの送信のための要求を送信させる、コンピューティングシステム。
【請求項１３】
前記要求は、
前記第２のパケットを前記第１のパケットが送信されつつあるのと同じ宛先へ送信すべき場合に前記同じ宛先、または、
前記第２のパケットを異なる宛先に送信すべき場合に前記異なる宛先、
に送信されることになる、請求項１２に記載のコンピューティングシステム。
【請求項１４】
前記制御論理回路は、
前記第１のパケットおよび前記第２のパケットが同じ宛先に送信されている場合、前記第１のパケットおよび前記第２のパケットのために同じクレジットカウンタを用いることになるか、または、
前記第１のパケットおよび前記第２のパケットが異なる宛先に送信されている場合、前記第１のパケットのために第１のクレジットカウンタを用いることになるとともに前記第２のパケットのために第２のクレジットカウンタを用いることになる、請求項１２または１３に記載のコンピューティングシステム。
【請求項１５】
制御論理は、異なる宛先に対する複数のパケットの同時送信を制御するための複数のクレジットカウンタを含む、請求項１２から１４の少なくとも１項に記載のコンピューティングシステム。
【請求項１６】
前記クレジットカウンタの各々は、いずれかの特定の宛先に対する送信を制御するために永久的に割当てられるものではない、請求項１２から１５の少なくとも１項に記載のコンピューティングシステム。
【請求項１７】
前記第１のパケットおよび前記第２のパケットはデータの画像の複数ラインを含む、請求項１２から１６の少なくとも１項に記載のコンピューティングシステム。
【請求項１８】
前記第１のパケットおよび第２のパケットのデータ単位は、前記トランスミッタによって送信された後、および、前記データ単位が前記複数の画像処理コアのうち別の１つ以上の画像処理コアによって処理される前に、前記画像処理プロセッサのメモリ回路によって待ち行列に入れられる、請求項１２から１７の少なくとも１項に記載のコンピューティングシステム。
【請求項１９】
前記画像処理プロセッサは、２次元シフトレジスタアレイに連結された、実行レーンのアレイを含む、請求項１２から１８の少なくとも１項に記載のコンピューティングシステム。
【請求項２０】
前記画像処理プロセッサは、画像データのステンシルを処理するための複数のステンシルプロセッサを含む、請求項１２から１９の少なくとも１項に記載のコンピューティングシステム。
【請求項２１】
部分的に重なっているステンシル上で動作するように構成される、請求項２０に記載のコンピューティングシステム。
【請求項２２】
前記実行レーンのアレイの外側にレジスタの「ハロー」が存在するように、前記実行レーンのアレイよりも広い寸法を有するシフトレジスタ構造を備えたデータ演算部を含むかまたは前記データ演算部に連結される、請求項１２から２１の少なくとも１項に記載のコンピューティングシステム。
【請求項２３】
プロセッサによって実行される方法であって、
前記プロセッサの処理コアの出力データを生成するために前記処理コア上でプログラムコードを処理するステップと、
前記プロセッサ内のネットワークに連結されているトランスミッタ回路によって、前記トランスミッタ回路が先行の第１のパケットの送信を完了する前に、第２のパケットについての送信のための要求を送信するステップとを含み、前記第２のパケットは、前記処理コアによって生成された第２の出力データを含み、前記第１のパケットは、前記処理コアによって生成された第１の出力データを含み、前記方法はさらに、
前記ネットワークに連結されている前記プロセッサのうち１つ以上の他の処理コアで前記第１の出力データおよび前記第２の出力データを処理するステップを含む、方法。
【請求項２４】
前記トランスミッタ回路によって前記第１の出力データを送信した後であって、前記１つ以上の処理コアによって前記第１の出力データを処理する前に、前記第１の出力データを待ち行列に入れるステップをさらに含む、請求項２３に記載の方法。
【請求項２５】
前記待ち行列に入れるステップは、前記ネットワークに連結されているバッファによって画像データの複数ラインを待ち行列に入れるステップを含む、請求項２３または２４に記載の方法。
【請求項２６】
前記トランスミッタ回路が、前記第１のパケットの送信に関与するとともに、第２のパケットの送信に関与するステップをさらに含み、前記第２のパケットは前記第１のパケットとは異なる宛先に送信される、請求項２３から２５の少なくとも１項に記載の方法。
【請求項２７】
前記第１のパケットおよび前記第２のパケットが同じ宛先に送信される場合、前記トランスミッタからの前記第１のパケットおよび前記第２のパケットの送信を制御するために同じクレジットカウンタを用いるステップをさらに含む、請求項２３から２６の少なくとも１項に記載の方法。
【請求項２８】
前記トランスミッタからの第３のパケットの送信を制御するために前記同じクレジットカウンタを用いるステップをさらに含み、前記第３のパケットは、前記第１のパケットおよび前記第２のパケットを送信するとき以外の期間中に前記第１のパケットおよび前記第２のパケットとは異なる宛先に送信される、請求項２３から２７の少なくとも１項に記載の方法。
【請求項２９】
前記画像処理プロセッサは、２次元シフトレジスタアレイに連結された、実行レーンのアレイを含む、請求項２３から２８の少なくとも１項に記載の方法。
【請求項３０】
前記画像処理プロセッサは、画像データのステンシルを処理するための複数のステンシルプロセッサを含む、請求項２３から２９の少なくとも１項に記載の方法。
【請求項３１】
部分的に重なっているステンシル上で動作するように構成される、請求項３０に記載の方法。
【請求項３２】
前記実行レーンのアレイの外側にレジスタの「ハロー」が存在するように、前記実行レーンのアレイよりも広い寸法を有するシフトレジスタ構造を備えたデータ演算部を含むかまたは前記データ演算部に連結される、請求項２３から３１の少なくとも１項に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
発明の分野
本発明の分野は、概して、コンピューティングサイエンスに関し、より具体的には、高スループット内部通信プロトコルを用いる画像処理プロセッサに関する。
【背景技術】
【０００２】
背景
画像処理には、通常、アレイに編成された画素値の処理が伴う。ここで、空間的に編成された２次元アレイは、画像の２次元の特性をキャプチャする（さらなる次元として、時間（たとえば、一続きの２次元画像）およびデータ型（たとえば、色）を含み得る）。通常のシナリオでは、配列された画素値は、静止画像または動きを撮影するための一続きのフレームを生成したカメラによって提供される。従来の画像処理プロセッサは、通常、両極端に分かれる。
【０００３】
第１の極端な側面として、汎用プロセッサまたは汎用のようなプロセッサ（たとえば、ベクトル命令が強化された汎用プロセッサ）上で実行されるソフトウェアプログラムとして、画像処理タスクが実行される。第１の極端な側面は、通常、高度の多目的アプリケーションソフトウェア開発プラットフォームを提供するが、細粒度のデータ構造を、関連するオーバーヘッド（たとえば、命令フェッチおよびデコード、オンチップデータおよびオフチップデータの処理、投機的実行）と組み合わせて利用することによって、最終的には、プログラムコードの実行時にデータの単位当たりに消費されるエネルギーの量が多くなってしまう。
【０００４】
正反対の第２の極端な側面として、より大きな単位のデータに、固定関数結線回路が適用される。カスタム設計された回路に直接適用される（細粒度とは対照的な）より大きな単位のデータを利用することによって、データの単位当たりの消費電力が大幅に抑えられる。しかしながら、カスタム設計された固定関数回路を利用することによって、一般に、プロセッサが実行できるタスクのセットが限られてしまう。このように、第２の極端な側面では、（第１の極端な側面に関連する）広く多目的なプログラミング環境がない。
【０００５】
高度の多目的アプリケーションソフトウェア開発機会およびデータの単位当たりの電力効率の向上を可能にするテクノロジープラットフォームが依然として望まれているが、いまだ解決策が見つかっていない。
【発明の概要】
【課題を解決するための手段】
【０００６】
概要
プロセッサを記載する。プロセッサはネットワークを含む。複数の処理コアが当該ネットワークに連結されている。当該プロセッサは、当該ネットワークに連結されたトランスミッタ回路（transmitter circuit）を含む。当該トランスミッタ回路は、当該複数の処理コアのうちの１つによって生成される出力データを当該ネットワーク内に送信するためのものである。当該トランスミッタ回路は制御論理回路を含む。当該制御論理回路は、当該トランスミッタ回路が出力データのうち先行の第１のパケットの送信を完了する前に、当該トランスミッタ回路に、出力データのうち第２のパケットを送信するための要求を送信させる。
【０００７】
以下の説明および添付の図面を用いて、本発明の実施形態を説明する。
【図面の簡単な説明】
【０００８】
【図１】ステンシルプロセッサのアーキテクチャを示す高レベル図である。
【図２】画像処理プロセッサのアーキテクチャをより詳細に示した図である。
【図３】画像処理プロセッサのアーキテクチャをさらに詳細に示した図である。
【図４】画像処理プロセッサが実行できるアプリケーションソフトウェアプログラムを示す図である。
【図５ａ】第１の通信シーケンスを示す図である。
【図５ｂ】改善された通信シーケンスを示す図である。
【図５ｃ】通信フロー中のカウンタ使用挙動を示す図である。
【図６ａ】トランスミッタ回路の一実施形態を示す図である。
【図６ｂ】レシーバ回路の一実施形態を示す図である。
【図７】通信方法を示す図である。
【図８ａ】画像データをライングループに解析すること、ライングループをシートに解析すること、および重なり合うステンシルを有するシートに対して行う動作を示した図である。
【図８ｂ】画像データをライングループに解析すること、ライングループをシートに解析すること、および重なり合うステンシルを有するシートに対して行う動作を示した図である。
【図８ｃ】画像データをライングループに解析すること、ライングループをシートに解析すること、および重なり合うステンシルを有するシートに対して行う動作を示した図である。
【図８ｄ】画像データをライングループに解析すること、ライングループをシートに解析すること、および重なり合うステンシルを有するシートに対して行う動作を示した図である。
【図８ｅ】画像データをライングループに解析すること、ライングループをシートに解析すること、および重なり合うステンシルを有するシートに対して行う動作を示した図である。
【図９ａ】ステンシルプロセッサの一実施形態を示す図である。
【図９ｂ】ステンシルプロセッサの命令語の一実施形態を示す図である。
【図１０】ステンシルプロセッサ内のデータ演算部の一実施形態を示す図である。
【図１１ａ】重なり合うステンシルを有する隣接する出力画素値のペアを判定するための２次元シフトアレイおよび実行レーンアレイの使用例を示した図である。
【図１１ｂ】重なり合うステンシルを有する隣接する出力画素値のペアを判定するための２次元シフトアレイおよび実行レーンアレイの使用例を示した図である。
【図１１ｃ】重なり合うステンシルを有する隣接する出力画素値のペアを判定するための２次元シフトアレイおよび実行レーンアレイの使用例を示した図である。
【図１１ｄ】重なり合うステンシルを有する隣接する出力画素値のペアを判定するための２次元シフトアレイおよび実行レーンアレイの使用例を示した図である。
【図１１ｅ】重なり合うステンシルを有する隣接する出力画素値のペアを判定するための２次元シフトアレイおよび実行レーンアレイの使用例を示した図である。
【図１１ｆ】重なり合うステンシルを有する隣接する出力画素値のペアを判定するための２次元シフトアレイおよび実行レーンアレイの使用例を示した図である。
【図１１ｇ】重なり合うステンシルを有する隣接する出力画素値のペアを判定するための２次元シフトアレイおよび実行レーンアレイの使用例を示した図である。
【図１１ｈ】重なり合うステンシルを有する隣接する出力画素値のペアを判定するための２次元シフトアレイおよび実行レーンアレイの使用例を示した図である。
【図１１ｉ】重なり合うステンシルを有する隣接する出力画素値のペアを判定するための２次元シフトアレイおよび実行レーンアレイの使用例を示した図である。
【図１１ｊ】重なり合うステンシルを有する隣接する出力画素値のペアを判定するための２次元シフトアレイおよび実行レーンアレイの使用例を示した図である。
【図１１ｋ】重なり合うステンシルを有する隣接する出力画素値のペアを判定するための２次元シフトアレイおよび実行レーンアレイの使用例を示した図である。
【図１２】統合型実行レーンアレイおよび２次元シフトアレイの単位セルの一実施形態を示す図である。
【図１３】例示的なコンピューティングシステムを示す図である。
【発明を実施するための形態】
【０００９】
詳細な説明
１．０  固有の画像処理プロセッサのアーキテクチャ
当技術分野において公知であるように、プログラムコードを実行するための基本的な回路構造は、実行ステージとレジスタ空間とを含む。実行ステージは、命令を実行するための実行部を含んでいる。実行される命令のための入力オペランドがレジスタ空間から実行ステージに提供される。実行ステージが命令を実行することによって生成される結果は、レジスタ空間に書き戻される。
【００１０】
従来のプロセッサ上でのソフトウェアスレッドの実行には、実行ステージによる、一連の命令の順次実行が伴う。最も一般的には、１つの入力オペランドセットから１つの結果が生成されるという意味では、演算は、「スカラー」である。しかしながら、「ベクトル」プロセッサの場合、実行ステージによる命令の実行によって、入力オペランドのベクトルから結果のベクトルが生成されることになる。
【００１１】
図１は、２次元シフトレジスタアレイ１０２に連結された実行レーン（execution lane）のアレイ１０１を含む固有の画像処理プロセッサのアーキテクチャ１００を示す高レベル図である。ここで、実行レーンアレイに含まれる各実行レーンは、プロセッサ１００がサポートする命令セットを実行するために必要な実行部を含んだ離散実行ステージとして見ることができる。さまざまな実施形態では、プロセッサが２次元ＳＩＭＤ（Single Instruction Multiple Data）プロセッサとして動作するよう、各実行レーンは、同じマシンサイクルで実行する同じ命令を受け付ける。
【００１２】
各実行レーンは、２次元シフトレジスタアレイ１０２内の対応する位置に専用のレジスタ空間を有する。たとえば、隅にある実行レーン１０３は、隅にあるシフトレジスタ位置１０４に専用のレジスタ空間を有し、隅にある実行レーン１０５は、隅にあるシフトレジスタ位置１０６に専用のレジスタ空間を有する。
【００１３】
加えて、前のマシンサイクル時に別の実行レーンのレジスタ空間にあった値を各実行レーンが自分のレジスタ空間から直接操作できるよう、シフトレジスタアレイ１０２はコンテンツをシフトさせることができる。たとえば、ａ＋１水平シフトによって、各実行レーンのレジスタ空間に、その左端の隣接するレジスタ空間から値を受け付けさせる。水平軸に沿って左右両方向に値をシフトさせ、垂直軸に沿って上下両方向に値をシフトさせることができる機能のおかげで、プロセッサは、画像データのステンシルを効率よく処理することができる。
【００１４】
ここで、当技術分野において公知であるように、ステンシルとは、基本的データ単位として利用される画像表面領域のスライスである。たとえば、出力画像における特定の画素位置の新しい値が、この特定の画素位置が中心にある入力画像における領域の画素値の平均として算出されてもよい。たとえば、ステンシルが縦に３画素、横に３画素の大きさを有している場合、特定の画素位置は、３×３画素アレイの中央の画素に対応してもよく、３×３画素アレイ内の９つすべての画素の平均が算出されてもよい。
【００１５】
図１のプロセッサ１００のさまざまな動作の実施形態によると、実行レーンアレイ１０１の各実行レーンは、出力画像における特定の位置についての画素値を算出する役割を果たす。よって、上記３×３ステンシルを平均する例で引き続き説明すると、入力画素データ、およびシフトレジスタ内の８つのシフト演算からなる調整されたシフトシーケンスを最初にロードした後、実行レーンアレイに含まれる各実行レーンは、対応する画素位置についての平均を算出するのに必要な９つすべての画素値をローカルレジスタ空間に受け付けさせる。つまり、プロセッサは、たとえば、隣接する出力画像の画素位置の中心に存在する複数の重なり合うステンシルを同時に処理することができる。図１のプロセッサのアーキテクチャは、特に画像ステンシルの処理に長けているので、ステンシルプロセッサとも称され得る。
【００１６】
図２は、複数のステンシルプロセッサ２０２＿１〜２０２＿Ｎを有する画像処理プロセッサのためのアーキテクチャ２００の一実施形態を示す。このため、画像処理プロセッサは、個々のステンシルプロセッサが画像処理コア、処理コア、プロセッサコア、コアなどのような語として、より一般的に特徴付けられ得るマルチコアプロセッサと称してもよい。図２に見られるように、アーキテクチャ２００は、ネットワーク２０４（たとえば、オンチップスイッチネットワーク、オンチップリングネットワークまたはその他の種類のネットワークを含むＮＯＣ（Network On Chip））を通して複数のステンシルプロセッサユニット２０２＿１〜２０２＿Ｎおよび対応するシート生成部２０３＿１〜２０３＿Ｎと互いに接続された複数のラインバッファ部２０１＿１〜２０１＿Ｍを含む。一実施形態では、いずれのラインバッファ部２０１＿１〜２０１＿Ｍも、ネットワーク２０４を通していずれのシート生成部２０３＿１〜２０３＿Ｎおよび対応するステンシルプロセッサ２０２＿１〜２０２＿Ｎに接続してもよい。
【００１７】
プログラムコードがコンパイルされ、対応するステンシルプロセッサ２０２上にロードされて、ソフトウェア開発者が以前に定義した画像処理演算が実行される（また、プログラムコードは、たとえば、設計および実装に応じて、ステンシルプロセッサの関連するシート生成部２０３にロードされてもよい）。少なくともいくつかの例では、第１のパイプラインステージ用の第１カーネルプログラムを第１のステンシルプロセッサ２０２＿１にロードし、第２のパイプラインステージ用の第２のカーネルプログラムを第２のステンシルプロセッサ２０２＿２にロードするなどして画像処理パイプラインが実現されてもよい。この場合、第１カーネルがパイプラインの第１のステージの関数を実行し、第２カーネルがパイプラインの第２のステージの関数を実行する等々であって、パイプラインのあるステージからパイプラインの次のステージに出力画像データを渡すためのさらなる制御フロー方法がインストールされている。
【００１８】
その他の構成では、画像処理プロセッサは、同じカーネルプログラムコードを動作させる２つ以上のステンシルプロセッサ２０２＿１、２０２＿２を有する並列マシンとして実現されてもよい。たとえば、高密度かつ高データ転送速度の画像データストリームを、各々が同じ関数を実行する複数のステンシルプロセッサ間にフレームを分散させることによって処理してもよい。
【００１９】
さらに他の構成では、カーネルの本質的にいずれの有向非巡回グラフ（ＤＡＧ：Directed Acyclic Graph）も、それぞれのステンシルプロセッサを自身のプログラムコードのカーネルで構成し、ＤＡＧ設計において、あるカーネルからの出力画像を次のカーネルの入力に向けるよう適切な制御フローフックをハードウェアに構成することによって、画像処理プロセッサ上にロードされてもよい。
【００２０】
一般的なフローとして、画像データのフレームは、マクロ入出力部２０５によって受け付けられ、フレーム単位でラインバッファ部２０１のうちの１つ以上に渡される。特定のラインバッファ部は、画像データのそのフレームを、「ライングループ」と呼ばれる、画像データよりも小さな領域に解析し、その後、当該ライングループを、ネットワーク２０４を通して特定のシート生成部に渡す。完成した、または「完全な」１つのライングループは、たとえば、複数の連続した完全な行または列からなるフレームのデータで構成されてもよい（わかりやすくするために、本明細書では、主に、連続した行を例に用いる）。シート生成部は、さらに、画像データのライングループを、「シート」と呼ばれる、画像データのさらに小さな領域に解析し、このシートを対応するステンシルプロセッサに提示する。
【００２１】
１つの入力を有する画像処理パイプラインまたはＤＡＧフローの場合、一般に、入力フレームは、同じラインバッファ部２０１＿１に向けられ、ラインバッファ部２０１＿１は、画像データをライングループに解析し、これらのライングループをシート生成部２０３＿１に向ける。シート生成部２０３＿１の対応するステンシルプロセッサ２０２＿１は、パイプライン／ＤＡＧにおいて第１カーネルのコードを実行している。ステンシルプロセッサ２０２＿１が処理するライングループに対する処理が完了すると、シート生成部２０３＿１は、出力ライングループを「下流」ラインバッファ部２０１＿２に送る（場合によっては、出力ライングループは、以前に入力ライングループを送ったのと同じラインバッファ部２０１＿１に送り返してもよい）。
【００２２】
次に、自身の各々のその他のシート生成部およびステンシルプロセッサ（たとえば、シート生成部２０３＿２およびステンシルプロセッサ２０２＿２）上で実行されるパイプライン／ＤＡＧにおける次のステージ／演算を表す１つ以上の「コンシューマ」カーネルが、第１のステンシルプロセッサ２０２＿１によって生成された画像データを下流ラインバッファ部２０１＿２から受け取る。このように、第１のステンシルプロセッサ上で動作する「プロデューサ」カーネルが、第２のステンシルプロセッサ上で動作する「コンシューマ」カーネルに出力データを転送する。第２のステンシルプロセッサでは、コンシューマカーネルが、パイプラインまたはＤＡＧ全体の設計と整合性のあるプロデューサカーネルの後に次のタスクセットを実行する。
【００２３】
図１で上述したように、各ステンシルプロセッサ２０２＿１〜２０２＿Ｎは、画像データの複数の重なり合うステンシルを同時に処理するように設計されている。複数の重なり合うステンシルおよびステンシルプロセッサの内蔵ハードウェア処理能力によって、シートのサイズが効果的に決定される。ここでも、上述したように、任意のステンシルプロセッサ２０２＿１〜２０２＿Ｎ内で、実行レーンのアレイが一斉に動作し、複数の重なり合うステンシルで覆われた画像データ表面領域を同時に処理する。
【００２４】
加えて、さまざまな実施形態では、ステンシルプロセッサ２０２の対応する（たとえば、ローカルの）シート生成部２０３によって、当該ステンシルプロセッサの２次元シフトレジスタアレイに画像データのシートがロードされる。シートおよび２次元シフトレジスタアレイ構造の使用によって、たとえば、実行レーンアレイによってその直後に大量のデータに対して直接実行される処理タスクを用いた１つのロード動作として当該データを大量のレジスタ空間に移動することによって、消費電力が効果的に改善されると考えられている。これに加えて、実行レーンアレイおよび対応するレジスタアレイの使用によって、簡単にプログラム可能／構成可能なそれぞれ異なるステンシルサイズが可能になる。ラインバッファ部、シート生成部、およびステンシルプロセッサの動作についてのさらなる詳細を下記のセクション３．０でさらに説明する。
【００２５】
図３は、図２の画像処理プロセッサの特定のハードウェア実装の一実施形態をより詳細に示す。図３に見られるように、図２のネットワーク２０４は、ラインバッファ部３０１とシート生成部／ステンシルプロセッサコア３０２との各交点に４×４ネットワークノード３１４を有するリングトポロジー３０４で実現される。わかりやすくするために、図３は、ラインバッファ部３０１＿４とシート生成部／ステンシルプロセッサコア３０２＿４との間に存在するネットワークノード３１４のみをラベル付けしている。
【００２６】
ここで、シート生成部／ステンシルプロセッサコア３０２＿１〜３０２＿８の各々がステンシルプロセッサおよび対応するシート生成部の両方を含んでいることが分かる。わかりやすくするために、以下、シート生成部／ステンシルプロセッサコア３０２＿１〜３０２＿８の各々を、単に、ステンシルプロセッサコアまたはコアと称す。８つのラインバッファ部３０１＿１〜３０１＿８および８つのコア３０２＿１〜４０２＿８を図３の特定の実施形態に図示しているが、異なる数のラインバッファ部および／またはコアを有する異なるアーキテクチャが可能であると理解すべきである。リングトポロジー以外のネットワークトポロジーも可能である。
【００２７】
図３の画像処理プロセッサに関して、リングネットワーク３０４によって、（１）入出力部３０５が入力データを任意のラインバッファ部３０１＿１〜３０１＿８（または、任意のコア３０２＿１〜３０２＿８）に渡すことができ、（２）任意のラインバッファ部３０１＿１〜３０１＿８が任意のコア３０２＿１〜３０２＿８にライングループを転送することができ、（３）任意のコア３０２＿１〜３０２＿８がその出力データを任意のラインバッファ部３０１＿１〜３０１＿８に渡すことができ、（４）任意のラインバッファ部３０１＿１〜３０１＿８が、画像処理プロセッサの出力データを入出力部３０５に渡すことができる。このように、異なるソフトウェアカーネルをロードする豊富なオプションおよび内部ネットワーク構成が可能である。つまり、理論上は、プロセッサのさまざまなコア３０２上で実行される複数のカーネルから構成されるソフトウェアアプリケーションのいずれについても、任意のコアに任意のカーネルをロードすることができ、ラインバッファ部のいずれも、任意のコアに入出力データをソース入力し、任意のコアから入出力データをシンク出力するように構成できる。
【００２８】
図４は、図３の画像処理プロセッサ上にロードされ得る、例示的なアプリケーションソフトウェアプログラムまたはその一部を示す。図４に見られるように、プログラムコードを実行して入力画像データ４０１の１つ以上のフレームを処理し、何らかの全変換をこの入力画像データ４０１に対して実行してもよい。変換は、入力画像データ上でアプリケーションソフトウェア開発者が明示するうまく組み立てられたシーケンスで動作するプログラムコード４０２の１つ以上のカーネルの動作で実現される。
【００２９】
図４の例では、全変換は、まず、第１カーネルＫ１を用いて各入力画像を処理することによって生じる。次に、カーネルＫ１によって生成された出力画像は、カーネルＫ２によって処理される。次に、カーネルＫ２によって生成された出力画像の各々は、カーネルＫ３＿１またはＫ３＿２によって処理され、次に、カーネル（複数可）Ｋ３＿１／Ｋ３＿２によって生成された出力画像は、カーネルＫ４によって処理される。図３の特定の例では、カーネルＫ３＿１およびＫ３＿２は、たとえば、異なる画像処理演算を行う異なるカーネルであってもよい（たとえば、カーネルＫ３＿１は、第１の特定の種類の入力画像を処理し、カーネルＫ３＿２は、第２の異なる種類の入力画像を処理する）。
【００３０】
わかりやすくするために、４つのカーネルＫ１〜Ｋ４のみを図示している。図３の画像処理プロセッサハードウェアアーキテクチャの実施形態を参照すると、各カーネルが異なるステンシルプロセッサ上で動作するという基本的な構成において、おそらく、プロセッサのコア３０２のすべてが対応するカーネル（図４の４つのカーネルのフローは、図３のプロセッサのコアのうちの半数しか利用していない）を有する前に、カーネルＫ４からさらに４つのカーネルが生じ得ることが分かる。
【００３１】
２．０  トランザクションを効率的に実現するトランシーバ
上述のとおり、１つのステンシルプロセッサ上で実行されているプログラムコードの生成カーネル（producing kernel）は、その出力データを（たとえば、複数ラインのグループとして）ラインバッファ部に送信する。ラインバッファ部は、当該データを（たとえば、複数ラインのグループとして）待ち行列に入れる（queue）かまたは格納して、１つ以上の他のステンシルプロセッサに転送する。１つ以上の他のステンシルプロセッサは、プログラムコードのうち、生成カーネルの出力データを消費するそれぞれのカーネルを実行している。画像処理プロセッサ全体の内部において、複数のラインバッファ部に相互接続された複数のステンシルプロセッサが存在しているので、たとえば、多数の生成／消費カーネル接続が実現され得る。
【００３２】
さまざまな実施形態においては、特定の生成／消費カーネル関係のための格納および転送待ち行列（store and forward queue）は、「バッファ」または「ラインバッファ」と称されてもよく、「ラインバッファ部」は、複数のバッファを同時にサポートすることができるハードウェア構成要素である。ここで、ラインバッファ部は、メモリリソースおよび関連する論理を含んでいてもよい。ラインバッファ部によってサポートされるさまざまなバッファは、それぞれの格納および転送アクティビティのためのメモリリソースのうち異なる部分に割当てられる。
【００３３】
画像処理プロセッサの内部ネットワークは、画像処理プロセッサ内に同時に存在する、ラインバッファ部の通信／接続に対するさまざまな生成カーネルと、消費カーネル通信／接続に対するさまざまなラインバッファ部とをサポートする。ここで、一実施形態においては、各々のステンシルプロセッサは、内部ネットワークに連結されているトランスミッタおよびレシーバからなるトランシーバを含む。同様に、各々のラインバッファ部は、内部ネットワークに連結されたトランシーバを含む。
【００３４】
ステンシルプロセッサとラインバッファ部との組合せによって内部ネットワークに対してどの時点においても提供され得る潜在的に大量のトラフィックがあれば、さまざまな実施形態において、クレジット制御メカニズム（credit control mechanism）は、（ネットワークならびに／または他のリソース、たとえば、ラインバッファ部のメモリリソースおよび／もしくはステンシルプロセッサのローカルメモリリソースなどを含む）画像処理プロセッサ内におけるリソースの過負荷を防ぐために利用される。
【００３５】
たとえば、一実施形態においては、生成ステンシルプロセッサ（生成カーネルを実行しているステンシルプロセッサ、以下、送信プロセッサとする）からラインバッファ部への通信用のラインバッファ部メモリリソースおよび／またはネットワークの過負荷を防ぐために、クレジット制御メカニズムは、生成カーネルからその関連するラインバッファ部までの出力画像データの流れを制御するように、ラインバッファ部の各々において実現される。ここで、ラインバッファ部は、いくつかのクレジットに対する制御を維持するとともに、ラインバッファ部に出力画像データを送信することを所望する送信プロセッサに対してクレジットを発行する。各々のクレジットは、送信プロセッサが送信できるデータ量に相当する。
【００３６】
このため、送信プロセッサは、それが有するクレジットの数に相当するデータ量しか送信することができない。ステンシルプロセッサが実際にラインバッファ部にその出力データを送信すると、当該ステンシルプロセッサは、そのクレジットカウントを相当する量にまで減らす。たとえば、各々のクレジットが１ＭＢのデータに相当する場合、送信プロセッサは、それがラインバッファ部に送信するデータの１ＭＢごとに、１ずつ、そのクレジット量（credit amount）を減らす（なお、実際のプロセッサ実現例においては、パケットおよび対応するデータ転送がはるかに細粒化されていること、たとえば、各パケットが典型的には数１０バイトまたは数１００バイトであって、各クレジットが数１０バイト（たとえば３２バイト）に相当することに留意されたい）。ラインバッファ部は、送信プロセッサがデータを送信し続けることができるように、（たとえば、リソースがラインバッファ部内において空になると）送信プロセッサに追加のクレジットを送信し続けてもよい。しかしながら、如何なる場合であっても、送信プロセッサのクレジットカウントがゼロにまで減らされる場合、ラインバッファ部から追加のクレジットを受信するまでラインバッファ部にデータをさらに送信することができない。
【００３７】
図５ａは、上述の原理に従って作用する先行技術の設計についての例示的なシナリオを示す。ここで、ラインバッファ部５０２は、送信プロセッサ５０１から受取ったいくつかの単位のデータを保持するための、固定サイズの内部待ち行列（単純化のために図５ａには示されない）を含む。特に、待ち行列がＮ＝５のエントリを有すると想定すると、各々のエントリは特定量のデータ（たとえば、Ｍバイト）を保持することができる。基本的構成においては、送信プロセッサ５０１は、ラインバッファ部５０２との特定の通信セッションまたは「接続」（たとえば、各々がＭバイトを含むデータ単位を複数含んでいるパケットの送信）の際に、各々がＭバイトを含むデータ単位を１つ以上、送信する。送信プロセッサ５０１がラインバッファ部５０２にＭバイトを含む次のデータ単位を送信するたびに、次のデータ単位が待ち行列に入力される。
【００３８】
（たとえば、ラインバッファ部５０２がこれをそのメモリリソースに書込むことができるので）Ｍバイトのデータ単位が待ち行列から供給されると、ラインバッファ部５０２は１つのクレジットを送信プロセッサ５０１に送信する。ここで、待ち行列からＭバイトのデータ単位を供給することで、送信プロセッサ５０１から送信される次のＭバイト単位で満たすことができる１つの待ち行列エントリが実質的に空になる。たとえば、ラインバッファ部５０２が待ち行列から複数のＭバイト単位を高速で供給することができる場合、対応するクレジット量が送信プロセッサ５０１に送信し返される。たとえば、ラインバッファ部５０２が待ち行列から３のＭバイト単位を高速で供給する場合、ラインバッファ部５０２は３つのクレジットを送信プロセッサ５０１に送信し返す。
【００３９】
このため、図５ａを参照すると、初期状態では、送信プロセッサ５０１は、たとえば、ラインバッファ部５０２に送信するべき出力画像データの次のパケットを有している場合、要求ＲＴＳ＿１を送信するようにとの要求をラインバッファ部５０２に送信する。ラインバッファ部の待ち行列は初めは空であるので、受取り確認（acknowledgement）ＡＣＫ＿１で要求を承諾する際に、ラインバッファ部５０２は、待ち行列のサイズ（Ｎ＝５）と等しいクレジットの量を送信する。送信プロセッサ５０１は、次いで、Ｄ１、Ｄ２、…の順でいくつかのＭバイトデータ単位を送信し始める。データ単位の送信からプロセッサのクレジットカウントの削減までが図５ａのシナリオのプロセッサ側に示されている。
【００４０】
ラインバッファ部５０２側では、ラインバッファ部５０２が、Ｍのデータ単位を送信プロセッサ５０１から連続して受信し、これらを受信すると待ち行列に入力し、さらに、（たとえば、メモリに書込むために）ラインバッファ部の能力に応じて待ち行列からこれらＭのデータ単位を供給する。待ち行列からＭバイトデータ単位が供給されるたびに、ラインバッファ部５０２は、追加クレジットを送信プロセッサ５０１に送信し、送信プロセッサ５０１が、新しく受信したクレジットをそのクレジットカウントに追加する。
【００４１】
最終的に、送信プロセッサは、その時点での接続のためにＭバイトデータ単位をすべて送信することとなる（たとえば、或るパケットのうちＭバイトデータ単位がすべて送信されてしまっている）。図５ａのシナリオにおいては、その時点での接続は、６のＭバイトデータ単位でできている（たとえば、パケットが６のＭバイトデータ単位で構成されている）と想定される。そのため、送信プロセッサ５０１は、パケットのためのその最後のデータ単位を送信するとともに、Ｄ６データ単位を送信した。さらに、最終的に、ラインバッファ部５０２は、その待ち行列からＭバイト単位をすべて供給して、対応するクレジットを送信プロセッサ５０１に送信し返してしまっているだろう。そのため、送信プロセッサ５０１は、セッションのためのデータ単位をすべて送信し終えてそのクレジットカウントがラインバッファ部の待ち行列のサイズ（Ｎ＝５）と等しくなると、接続の完了を認識するだろう。ここで、送信プロセッサ５０１はフルセットのクレジットを有しているが、たとえば第２の以降のパケットのために、これらクレジットを用いることは許可されていない。なぜなら、送信プロセッサ５０１が、このような以降のパケットについて、まだ要求を送信していないかまたは如何なる受取り確認も受信していないからである。
【００４２】
図５ａの先行技術の設計においては、送信プロセッサ５０１が現在のセッションの完了前に（たとえば、シナリオの第１のパケットのデータ単位を送信している間）ラインバッファ部５０２に送信するべき別のパケットを有している場合、前のパケットの送信が完了したとみなされた後にしか、第２の以降のパケットについての要求を送信することができない。上述のとおり、送信プロセッサが接続のためのデータをすべて送信して、そのクレジットカウント量がラインバッファ部の待ち行列のサイズ（Ｎ＝５）と等しくなるまで、送信プロセッサによって、接続が完了しているとはみなされない。
【００４３】
このアプローチに関する問題は、先行パケットの最後のデータ単位の送信と、後続パケットの第１のデータ単位の送信との間に浪費される可能性のある時間５０４の量である。ここで、図５ａにおいて見られるように、Ｄ６データ単位の送信の時点で第１のパケットの送信が完了しているが、接続は時間５０３までに完了しているとは見なされないことに留意されたい。浪費された時間５０４は、大部分が、第２のパケットについてのＲＴＳ＿２／ＡＣＫ＿２伝搬遅延と連動する待ち行列のサイズと等しくなるように、生成プロセッサがラインバッファ部５０２からのクレジットの返却を待っていた結果、生じるものである。長い待ち時間は、結果として、トラフィックが（他の態様では送信され得たものの）ネットワークを介しては送信されていないという点で、プロセッサが非効率になってしまう可能性がある。
【００４４】
先行技術の設計に従うと、パケットの最後のデータ単位（たとえばＤ６）が特にマーク付けされるか、または、側波帯信号が、パケットの最後のデータ単位の送信に応じてラインバッファ部５０２に送信される。このため、ラインバッファ部５０２は、それが特定のパケット／接続のためにいつ最後のデータ単位を受信したかが分かるようになる。ここで、パケット／接続の最後のデータ単位（Ｄ６）がラインバッファ部の待ち行列から供給されると、ラインバッファ部５０２は、ＡＣＫ＿２を次の要求ＲＴＳ＿２と認めることが許可される。ここで、完了直後（またはそれよりも前）の第１のパケット／接続の処理中に、ラインバッファ部５０２を用いる他の生成部／消費部カーネル関係についての他の生成プロセッサからの要求は、ラインバッファ部５０２によって受信されていたかもしれない。ラインバッファ部５０２は、完了直後の接続から最後のデータ単位（Ｄ６）を供給した後に次のパケット転送を開始するように、これらの要求のうちの１つ（たとえば、最も古いペンディング中の要求）を自由に承認することができる。
【００４５】
パケット転送がちょうど完了したところの送信プロセッサ５０１は、その先行パケットの転送が完了すると直ちに（図５ａの時間５０３に）、上述のとおり、次の要求ＲＴＳ＿２を自由に送信することができる。他の生成ステンシル・プロセッサからの他の競合する要求がいずれもラインバッファ部５０２でペンディング中でない場合、ラインバッファ部５０２は、先行パケットの転送がちょうど完了したところの送信プロセッサ５０１によって送信された要求ＲＴＳ＿２の受け取り確認をするだろう。第１のパケットに関して上述されたプロセスが繰り返される。
【００４６】
図５ｂは、図５ａの先行技術の設計に対する第１の改善例を示す。この場合、送信プロセッサ５０１が、現在のパケットの送信完了前に次のパケットについての要求ＲＥＱ＿２を送信することが許可されている。すなわち、たとえば、期間５１５は、送信されたパケットが第１のパケットの送信に関与している期間としてみなすことができる（第１のパケットの通信セッションまたは接続が期間５１５にわたっている）。図５ｂの改善された設計においては、送信プロセッサは、送信プロセッサが第１のパケットの送信に関与している間（すなわち、期間５１５内）に、第２のパケットについての要求ＲＥＱ＿２を送信することができる。
【００４７】
図５ｂの特定の例においては、送信プロセッサ５０１は、送信すべき別のパケットを有していることを認識すると直ちに、要求を送信することが許可される。図から分かるように、送信プロセッサ５０１は、それが、第１のパケットについての要求ＲＴＳ＿１を送信したほとんど直ぐ後に送信するべき別のパケットを有していることを認識する（ＲＴＳ＿２はＲＴＳ＿１の直後に送信される）。
【００４８】
同様に、改善された設計においては、ラインバッファ部５０２は、たとえその時点で処理しているパケット転送がまだ完了していなくても、要求に自由に応えることができる。たとえば、ラインバッファ部５０２が他の送信プロセッサからの他の競合する要求を有していない（または、ＲＥＱ＿２が、このような競合する要求よりも前にラインバッファ部５０２によって受信されていた）状況においては、ラインバッファ部５０２は自由に第２の要求ＡＣＫ＿２の受け取り確認をすることができる。ここで、第２の受取り確認ＡＣＫ＿２に関連付けられているクレジットはない。なぜなら、すべてのクレジットがその時点でアクティブなパケット（第１のパケット）の転送に充てられているからである。加えて、第２の受取り確認ＡＣＫ＿２が、転送中の現在のパケットを送信している同じ送信プロセッサ５０１に発行されている場合、送信プロセッサ５０１およびラインバッファ部５０２はともに、現在のパケットの転送が完了した後に、現在の送信プロセッサ５０１がラインバッファ部５０２に次のパケットを送信するであろうことを理解する。
【００４９】
これらの状況下では、送信プロセッサ５０１が、転送されるべき第２のパケットについての受取り確認ＡＣＫ＿２を既に受信していた場合、送信プロセッサ５０１は、第２の次のパケットの送信のために、第１のパケット転送の終端を示す、蓄積されたクレジットを用いることができる。すなわち、図５ａの説明を再び参照すると、送信プロセッサ５０１は、パケットの最後のデータ単位Ｄ６を送信した後に第１のパケット転送の完了を認識する。そのクレジットカウントはラインバッファ部の待ち行列のサイズ（Ｎ＝５）に対応している。
【００５０】
したがって、図５ａの先行技術の設計に従うと、第２のパケットＡＣＫ＿２についての受取り確認がまだ受信されていなかったので、このようなクレジットを直ちに利用することはできなかった。対照的に、図５ｂの改善されたアプローチによれば、送信プロセッサ５０１は、第２のパケットＡＣＫ＿２についての受取り確認を既に受信しているので、第２のパケットの転送のためにこれらのクレジットを直ちに用いることができる。ラインバッファ部５０２は、（図５ａに関連付けて上述された）データ単位Ｄ６を受信することで第１のパケットの完了を認識したので、受信されるべき次のデータ単位が第２のパケットのためのものであることを理解するだろう。
【００５１】
また、先行技術設計の送信プロセッサ５０１は、現在のラインバッファ部５０２による現在の転送が完了するまで、別のラインバッファ部に次のパケットを転送するようにとの要求を送信することが許可されない（生成カーネルは、２以上のラインバッファ部に出力画像データを送信することができる）。そのため、図５ａの第２のパケットが別のラインバッファ部に送信されることになっていたとしても、浪費された時間５０４が依然として存在することとなるだろう。
【００５２】
図５ｂの改善された設計に関連付けて説明されるように、送信プロセッサ５０１はその現在のパケットの完了前に第２のパケットについての要求を送信することが許可されている。さまざまな実施形態においては、これは、送信プロセッサがその時点でそれ自体とのトランザクションに関与しているラインバッファ部とは異なるラインバッファ部に要求を送信することを含む。図５ｂに明確に示されていないが、ＲＴＳ＿２がラインバッファ部５０２以外の他のラインバッファ部に送信されるとともに、ＡＣＫ＿２が当該他のラインバッファ部５０２から受信されると想定する。ここでは、割当てられたクレジット量がラインバッファ部ごとにラインバッファ部上に提供されているので、他のラインバッファ部が認識ＡＣＫ＿２を送信することによって要求を承認すると、送信プロセッサ５０１は、第１のパケットをラインバッファ部５０１に転送している間、他のラインバッファ部から関連するクレジットを受信する。
【００５３】
そのため、一実施形態においては、送信プロセッサのトランシーバは複数のクレジットカウンタを維持している。この場合、異なるクレジットカウンタを用いて異なるラインバッファ部からのクレジットを追跡している。第２のパケットが第１のパケットとは異なる宛先に送信されるべき場合、トランスミッタは、複数の宛先のうちの１つの宛先についてのクレジットカウンタのうち第１のクレジットカウンタを用いるとともに、複数の宛先のうち別の宛先についてのクレジットカウンタのうち第２のクレジットカウンタを用いて、第１のパケットおよび第２のパケットを交互にそれぞれの宛先に同時に送信することができる（第１のパケットが完了するまで第２のパケットの送信を待つ必要はない）。さまざまな実施形態においては、どのクレジットカウンタがどの宛先に対応しているのかは、送信プロセッサによって送信されているトラフィックパターンに応じて変化する可能性がある。
【００５４】
図５ｃに一例が示されている。図５ｃに見られるように、第１の時間間隔５２１中に、送信プロセッサは第１のパケットを第１のラインバッファ部（ＬＢＵ＿１）に送信している。そのクレジットカウントは第１のクレジットカウンタ５３１に保持される。次いで、第２の時間間隔５２２中、送信プロセッサは、依然として第１のパケットを第１のラインバッファ部に送信しているが、第２のパケットも第２のラインバッファ部（ＬＢＵ＿２）に送信している。第２のパケットについてのクレジットカウントは、第２の異なるクレジットカウンタ５３２において保持されている。なぜなら、第２のパケットについてのクレジットカウントは、第１のクレジットカウンタ５３１に応じてそのトランザクションが進行しているラインバッファ部とは異なるラインバッファ部に送信されているからである。
【００５５】
次いで、第３の時間間隔５２３中に、第１のパケットの送信が完了したが、第２のパケットは依然として送信されている。次いで、第４の時間間隔５２４中に、送信プロセッサは、第１のラインバッファ部および第２のラインバッファ部とは異なる第３のラインバッファ（ＬＢＵ＿３）部に第３のパケットを送信する。第３のパケットのクレジットカウントは第１のクレジットカウンタ５３１に保持される。次いで、第５の時間間隔５２５中に、第２のパケットの転送が完了すると、第２のラインバッファ部または他のラインバッファ部に送信するべき次のパケットはなくなる。
【００５６】
次いで、第６の時間間隔５２６中に、送信プロセッサは、第１のラインバッファ部に送信するべき別のパケットを有している。この場合、第２のクレジットカウンタ５３２は、第１のラインバッファ部に送信されるべきこの新しいパケットについてのクレジットを保持するのに用いられる。なお、第１のラインバッファ部についてのクレジットカウンタが、第１のラインバッファ部に送信されるべきパケット対の間でなされるのと同様に、実質的に交換されていたことに留意されたい。すなわち、第１の時間間隔５２１および第２の時間間隔５２２中に、第１のクレジットカウンタ５３１は第１のラインバッファ部についてのクレジットを追跡するために用いられたのに対して、第６の間隔５２６中、第２のクレジットカウンタ５３２は、第１のラインバッファ部についてのクレジットを追跡するために用いられる。
【００５７】
上述の説明がラインバッファ部にデータを送信している処理コアに関係するものであったが、上述の画像処理プロセッサにおいては、同じプロトコルシナリオが、或るラインバッファ部から、消費カーネルを実行する処理コアへのパケット転送のために存在し得ることを指摘することは適切である。この場合、ラインバッファ部は、図５ａから図５ｃの送信機の動作を想定しており、処理コアは、図５ａおよび図５ｂの受信機の動作を想定している。そのため、さまざまな実施形態においては、処理コア（および／または、それらの対応するシート生成部）ならびにラインバッファ部はともに、送信機回路および受信機回路の両方を含む。
【００５８】
図６ａおよび図６ｂは、それぞれ、送信機回路および受信機回路の実施形態を示す。図６ａに見られるように、送信機回路６０１は、上述のプロトコルに従ってデータ単位またはＲＴＳ要求を送信するトランスミッタを含む。送信の準備ができているデータ単位は出力待ち行列６０４に入れられる。ＲＴＳおよびクレジット制御論理回路６０５は、クレジットカウンタ６０６＿１および６０６＿２のうちの一方における宛先を備えた現在のセッションのために維持されるクレジットカウントに従って、次のデータ単位のその宛先への送信を認可する。制御論理６０５はまた、適切な宛先を備えた転送セッションを開始するためのＲＴＳ要求を発行する。次のＲＴＳを送信すべき宛先のアイデンティティは、たとえば、アウトバウンド（outbound）待ち行列６０４におけるアウトバウンドパケットに関連付けられた宛先アドレスから判断されてもよい。
【００５９】
受信回路６１１は、受取り確認およびクレジット量を受信して、これらを制御論理６０５に転送する。なお、２つのクレジットカウンタ６０６＿１および６０６＿２が６０５の制御論理において観察されることに留意されたい。さまざまな実施形態におけるクレジットカウント６０６＿１および６０６＿２は、図５ｃに関連付けて上述されたように、アウトバウンドトラフィックフローに依拠するために、クレジットを保持するいずれの宛先をも交換し得るように、たとえば通信セッションごとに、特定の宛先についてのクレジットを保持するために割当てられる。
【００６０】
他の実施形態においては、送信回路６０２が３つ以上の異なる宛先を備える３つ以上の転送セッションを同時に維持することができるように、３つ以上のクレジットカウンタが存在する可能性もある。すなわち、異なる宛先で同時にいくつのトランザクションが行われるかについては、たとえば、ネットワークの能力／容量に応じて、実施形態ごとに異なる可能性がある。一実施形態においては、送信機回路６０１は、第１の先行パケットが送信されている間、第２のパケットについてのＲＴＳを送信することが許可されている。第２のパケットについてのＲＴＳが送信される宛先は、第１の先行パケットが送信されている宛先または他の何らかの宛先であってもよい。
【００６１】
図６ｂは受信機側回路６０２を示す。ここで、受信機回路６２０によって受信される受信データ単位は、インバウンド待ち行列（inbound queue）６０７に入れられている（さまざまな実施形態においては、未処理のクレジットの数がインバウンド待ち行列６０７のサイズに対応していることが想起される）。受信データ単位が待ち行列６０７から供給されると、制御論理６０８は、対応するクレジット量を伝送回路６２１を介してデータ単位の送信機に送信し返す。制御論理６０８はまた、ＲＴＳ要求を受信機６０２に向けて送り出した可能性のある複数の送信機のうちいずれが、受信機６０２が受信するであろうパケットを送信する次の送信機として選ばれるべきであるかを判断する。複数のペンディング中のＲＴＳ要求は、（図６ｂには示されない）制御論理６０８内の待ち行列に存在し得るとともに、論理は、何らかの（たとえば、公平性）アルゴリズムに従って待ち行列からＲＴＳ要求のうちの１つを選択する（たとえば、さまざまな送信機（受信機６０２はこれら送信機から受信するように構成されている）にわたるラウンドロビン、待ち行列における最も古いＲＴＳ、など）。複数の要求送信機のうちどの送信機が受信機へのパケットの送信を許可されるべきであるかを制御論理６０８が判断すると、制御論理６０８は、伝送回路６２１を介して送信機に受取り確認を送信する。
【００６２】
さまざまな実施形態においては、受信機がその時点で受信しているパケットの送信元と同じ送信機に送信される受取り確認についてのクレジットは送信されない。加えて、さまざまな実施形態においては、待ち行列６０７のサイズに相当するクレジット量は、受信機６０２がその時点で受信していないパケットの送信元である送信機に送信される受取り確認と共に送信される。さまざまな実施形態においては、受信機６０２は、同じ送信機または異なる送信機からの複数のパケットをインタリーブしない（受信機６０２による受信が許可されるのは、１つの送信機からの１つのパケットだけである）。
【００６３】
制御論理回路６０５および６０８は、制御論理関数またはこれらのアプローチのいずれかの組合せを実行するために、専用のハードウェア論理回路、プログラマブル論理回路（たとえば、フィールドプログラマブルゲートアレイ（field programmable gate array：ＦＰＧＡ）論理回路、プログラマブルロジックデバイス（programmable logic device：ＰＬＤ）論理回路、プログラマブルロジックアレイ（programmable logic array：ＰＬＡ）論理回路）、プログラムコードを実行する埋込み型プロセッサ回路として実現されてもよい。
【００６４】
図７は、上述された方法を示す。当該方法は、プロセッサの処理コアの出力データを生成するために処理コア上でプログラムコードを処理するステップ７０１を含む。当該方法は、プロセッサ内のネットワークに連結されているトランスミッタ回路によって、当該トランスミッタ回路が先行の第１のパケットの送信を完了する前に第２のパケットについての送信のための要求を送信するステップ７０２を含む。第２のパケットは、処理コアによって生成される第２の出力データを含み、第１のパケットは、処理コアによって生成される第１の出力データを含む。当該方法はまた、ネットワークに連結されているプロセッサのうち１つ以上の他の処理コアで第１の出力データおよび第２の出力データを処理するステップ７０３を含む。
【００６５】
３．０  画像処理プロセッサ実装の実施形態
図８ａ〜図８ｅ〜図１２は、上述した画像処理プロセッサおよび関連するステンシルプロセッサのさまざまな実施形態のより詳細な動作および設計を提供する。ラインバッファ部がライングループをステンシルプロセッサの関連するシート生成部に送るという図２の説明を思い返すと、図８ａ〜図８ｅは、ラインバッファ部２０１の解析アクティビティ、シート生成部２０３の細粒度の解析アクティビティ、およびシート生成部２０３に連結されるステンシルプロセッサ７０２のステンシル処理アクティビティの実施形態を高レベルで示している。
【００６６】
図８ａは、画像データ８０１の入力フレームの一実施形態を示す。また、図８ａは、ステンシルプロセッサが処理するように設計された、３つの重なり合うステンシル８０２（各々の寸法は、３画素×３画素である）の輪郭も示している。各ステンシルが出力画像データを生成する出力画素を、黒い実線で強調表示している。わかりやすくするために、３つの重なり合うステンシル８０２は、垂直方向にのみ重なり合うよう示されている。ステンシルプロセッサは、実際には、垂直方向および水平方向の両方に重なり合うステンシルを有するように設計されてもよいことを認識することが適切である。
【００６７】
ステンシルプロセッサ内でステンシル８０２が縦に重なり合っているために、図８ａに見られるように、フレーム内に１つのステンシルプロセッサが処理できる幅広い帯状の画像データが存在する。以下により詳細に説明されているが、一実施形態では、ステンシルプロセッサは、重なり合うステンシル内のデータを、画像データの端から端まで左から右へ処理する（さらに、次のラインセットに対して上から下の順に繰り返す）。このため、ステンシルプロセッサがこの動作で前進を続けると黒い実線の出力画素ブロックの数が水平右方向に増える。上述したように、ラインバッファ部２０１は、ステンシルプロセッサが以降の多くの周期数にわたって処理するのに十分な受信フレームからの入力画像データのライングループを解析する役割を果たす。ライングループの例を、影付き領域８０３として示している。一実施形態では、ラインバッファ部２０１は、シート生成部にライングループを送信／シート生成部からライングループを受信するためのそれぞれ異なる力学を理解できる。たとえば、「グループ全体」と称するあるモードによると、画像データの完全な全幅のラインがラインバッファ部とシート生成部との間で渡される。「実質上縦長」と称する第２モードによると、最初に１つのライングループが全幅の行のサブセットとともに渡される。その後、残りの行がより小さい（全幅未満の）一部として順番に渡される。
【００６８】
入力画像データのライングループ８０３がラインバッファ部によって規定されてシート生成部に渡されると、シート生成部は、さらに、このライングループを、ステンシルプロセッサのハードウェア制約により正確に適合するより細かいシートに解析する。より具体的には、以下にさらにより詳細に説明されているが、一実施形態では、各ステンシルプロセッサは、２次元シフトレジスタアレイから構成される。２次元シフトレジスタアレイは、本質的に、画像データを実行レーンのアレイの「下」にシフトさせる。シフトパターンは、各実行レーンに、レーン自体の個々のステンシル内のデータを処理させる（つまり、各実行レーンは、それ自体の情報のステンシルを処理し、そのステンシルの出力を生成する）。一実施形態では、シートは、２次元シフトレジスタアレイを「埋める」または２次元シフトレジスタアレイにロードされる入力画像データの表面領域である。
【００６９】
さらにより詳細に後述されているように、さまざまな実施形態では、実際には、任意の周期でシフトさせることができる２次元レジスタデータから構成されるレイヤは複数ある。便宜上、本明細書のほとんどでは、シフトさせることができる２次元レジスタデータから構成される１つ以上のこのようなレイヤを有する構造を指すのに、単に、用語「２次元シフトレジスタ」などを用いている。
【００７０】
よって、図８ｂに見られるように、シート生成部は、ライングループ８０３からの最初のシート８０４を解析し、ステンシルプロセッサに提供する（ここで、データのシートは、参照番号８０４で全体的に識別される陰影領域に対応する）。図８ｃおよび図８ｄに見られるように、ステンシルプロセッサは、重なり合うステンシル８０２を入力画像データのシートの左から右へ効果的に移動させることによって当該シートを処理する。図８ｄの時点では、シート内のデータから出力値を算出できる画素数はなくなっている（他の画素位置では、シート内の情報から決定される出力値を有し得るものはない）。わかりやすくするために、画像の境界領域は無視している。
【００７１】
図８ｅに見られるように、次に、シート生成部は、ステンシルプロセッサに引き続き処理させるために次のシート８０５を提供する。なお、次のシートに対する処理を開始するときのステンシルの初期位置は、（すでに図８ｄで示したように）第１シートの画素数がなくなっている箇所から右隣に進んだ場所であることが分かる。新しいシート８０５では、ステンシルプロセッサが第１シートの処理と同じ方法でこの新しいシートを処理するのに従って、ステンシルは、右に移動し続けるだけである。
【００７２】
なお、出力画素位置を囲むステンシルの境界領域のために、第１シート８０４のデータと第２シート８０５のデータとの間に重なりがある。この重なりは、シート生成部が重なり合うデータを２回再送信するだけで処理できる。代替的な実装形態では、次のシートをステンシルプロセッサに送るために、シート生成部は、新しいデータをステンシルプロセッサに送るだけであってもよく、ステンシルプロセッサは、重なり合うデータを前のシートから再利用する。
【００７３】
図９は、ステンシルプロセッサのアーキテクチャ９００の一実施形態を示す。図９に見られるように、ステンシルプロセッサは、データ演算部９０１と、スカラープロセッサ９０２および関連するメモリ９０３と、入出力部９０４とを備える。データ演算部９０１は、実行レーン９０５のアレイと、２次元シフトアレイ構造９０６と、アレイの特定の行または列に対応付けられた別個のＲＡＭ９０７とを含む。
【００７４】
入出力部９０４は、シート生成部から受け付けたデータの「入力」シートをデータ演算部９０１にロードして、ステンシルプロセッサからのデータの「出力」シートをシート生成部に格納する役割を果たす。一実施形態では、シートデータをデータ演算部９０１にロードすることは、受け付けたシートを画像データの行／列に解析し、画像データの行／列を２次元シフトレジスタ構造９０６または実行レーンアレイ（より詳細に後述される）の行／列のＲＡＭ９０７のそれぞれにロードすることを伴う。シートがメモリ９０７に最初にロードされた場合、実行レーンアレイ９０５内の個々の実行レーンは、適宜、シートデータを（たとえば、シートのデータを処理する直前のロード命令として）ＲＡＭ９０７から２次元シフトレジスタ構造９０６にロードしてもよい。（シート生成部から直接であろうと、メモリ９０７からであろうと）レジスタ構造９０６ほのデータのシートのロードが完了すると、実行レーンアレイ９０５のうちの実行レーンが当該データを処理し、最終的には、仕上がったデータをシートとしてシート生成部またはＲＡＭ９０７に直接「書き戻す」。後者の場合、入出力部９０４がデータをＲＡＭ９０７からフェッチして出力シートを形成し、その後、出力シートはシート生成部に転送される。
【００７５】
スカラープロセッサ９０２は、プログラムコントローラ９０９を含む。プログラムコントローラ９０９は、ステンシルプロセッサのプログラムコードの命令をスカラーメモリ９０３から読み出し、実行レーンアレイ９０５内の実行レーンにこの命令を発行する。一実施形態では、１つの同じ命令がアレイ９０５内のすべての実行レーンに一斉送信され、データ演算部９０１がＳＩＭＤのような動作を行う。一実施形態では、スカラーメモリ９０３から読み出されて実行レーンアレイ９０５の実行レーンに発行される命令の命令フォーマットは、命令あたり２つ以上のオペコードを含むＶＬＩＷ（Very-Long-Instruction-Word）型フォーマットを含む。さらなる実施形態では、ＶＬＩＷフォーマットは、（後述するが、一実施形態では、２つ以上の従来のＡＬＵ演算を指定し得る）各実行レーンのＡＬＵによって実行される数学関数を指示するＡＬＵオペコード、および（特定の実行レーンまたは特定の実行レーンセットについてのメモリ操作を指示する）メモリオペコードの両方を含む。
【００７６】
用語「実行レーン」とは、１つの命令を実行可能な１つ以上の実行部からなるセットを指す（たとえば、命令を実行できる論理回路）。しかしながら、実行レーンは、さまざまな実施形態では、単なる実行部ではなく、よりプロセッサのような機能を含み得る。たとえば、１つ以上の実行部以外に、実行レーンは、受け付けた命令をデコードする論理回路、または、よりＭＩＭＤのような設計の場合、命令をフェッチおよびデコードする論理回路を含んでもよい。ＭＩＭＤのような手法に関しては、本明細書では集中プログラム制御手法が大まかに説明してきたが、さまざまな代替的実施形態（たとえば、アレイ９０５の各実行レーン内にプログラムコードとプログラムコントローラとを含む）では、より分散した手法が実施されてもよい。
【００７７】
実行レーンアレイ９０５と、プログラムコントローラ９０９と、２次元シフトレジスタ構造９０６とを組み合わせることによって、広範囲のプログラム可能な機能のための広く適合可能／構成可能なハードウェアプラットフォームが提供される。たとえば、個々の実行レーンが多種多様な機能を実行でき、かつ、任意の出力アレイ位置に近接した入力画像データに容易にアクセスできるならば、アプリケーションソフトウェア開発者は、広範囲にわたるさまざまな機能能力および寸法（たとえば、ステンシルサイズ）を有するカーネルをプログラミングすることができる。
【００７８】
実行レーンアレイ９０５によって処理されている画像データ用のデータストアとして機能すること以外に、ＲＡＭ９０７は、１つ以上のルックアップテーブルを保持してもよい。さまざまな実施形態では、１つ以上のスカラールックアップテーブルもスカラーメモリ９０３内でインスタンス化されてもよい。
【００７９】
スカラールックアップでは、同じインデックスからの同じルックアップテーブルからの同じデータ値を実行レーンアレイ９０５内の実行レーンの各々に渡すことを伴う。さまざまな実施形態では、スカラープロセッサによって行われるスカラールックアップテーブルの検索動作を指示するスカラーオペコードも含むよう、上述したＶＬＩＷ命令フォーマットが拡大される。オペコードとともに使用するために指定されるインデックスは、即値オペランドであってもよく、または、他のデータ記憶位置からフェッチされてもよい。いずれにせよ、一実施形態では、スカラーメモリ内のスカラールックアップテーブルの検索は、本質的に、同じクロック周期の間に実行レーンアレイ９０５内のすべての実行レーンに同じデータ値を一斉送信することを伴う。ルックアップテーブルの使用および操作のさらなる詳細を以下においてさらに説明する。
【００８０】
図９ｂは、上述したＶＬＩＷ命令語の実施形態（複数可）を要約している。図９ｂに見られるように、ＶＬＩＷ命令語フォーマットは、次の３つの別個の命令についてのフィールドを含む。（１）スカラープロセッサによって実行されるスカラー命令９５１、（２）実行レーンアレイ内のそれぞれのＡＬＵによってＳＩＭＤ式で一斉送信および実行されるＡＬＵ命令９５２、（３）部分ＳＩＭＤ式で一斉送信および実行されるメモリ命令９５３（たとえば、実行レーンアレイの同じ行にある実行レーンが同じＲＡＭを共有する場合、異なる行の各々からの１つの実行レーンが実際に命令を実行する（メモリ命令９５３のフォーマットは、各行のどの実行レーンが命令を実行するのかを識別するオペランドを含み得る）。
【００８１】
１つ以上の即値オペランド用のフィールド９５４も含まれている。命令９５１、９５２、９５３のうちのいずれがどの即値オペランド情報を使用するかは、命令フォーマットで識別されてもよい。また、命令９５１、９５２、９５３の各々は、それら自体の入力オペランドおよび結果情報も含む（たとえば、ＡＬＵ演算のためのローカルレジスタ、ならびにメモリアクセス命令のためのローカルレジスタおよびメモリアドレス）。一実施形態では、スカラー命令９５１は、実行レーンアレイ内の実行レーンがその他２つの命令９５２、９５３を実行する前に、スカラープロセッサによって実行される。つまり、ＶＬＩＷ語の実行は、スカラー命令９５１が実行される第１周期を含み、その次にその他の命令９５２、９５３が実行され得る第２周期を含む（なお、さまざまな実施形態では、命令９５２および９５３は、並列で実行されてもよい）。
【００８２】
一実施形態では、スカラープロセッサによって実行されるスカラー命令は、データ演算部のメモリまたは２Ｄシフトレジスタからシートをロードする／データ演算部のメモリまたは２Ｄシフトレジスタにシートを格納するためにシート生成部に発行されるコマンドを含む。ここで、シート生成部の動作は、ラインバッファ部の動作によって、または、スカラープロセッサが発行したコマンドをシート生成部が完了させるのにかかる周期の数を実行時前に理解することを防ぐその他の変数によって、異なり得る。このように、一実施形態では、シート生成部に発行されるコマンドにスカラー命令９５１が対応するまたはスカラー命令９５１がコマンドをシート生成部に対して発行させるＶＬＩＷ語は、いずれも、その他の２つの命令フィールド９５２、９５３にＮＯＯＰ（no-operation）命令も含む。次に、シート生成部がデータ演算部へのロード／データ演算部からの格納を完了するまで、プログラムコードは、命令フィールド９５２、９５３のＮＯＯＰ命令のループに入る。ここで、シート生成部にコマンドを発行すると、スカラープロセッサは、コマンドが完了するとシート生成部がリセットするインターロックレジスタのビットを設定してもよい。ＮＯＯＰループの間、スカラープロセッサは、インターロックビットのビットを監視する。シート生成部がそのコマンドを完了したことをスカラープロセッサが検出すると、通常の実行が再び開始される。
【００８３】
図１０は、データ演算コンポーネント１００１の一実施形態を示す。図１０に見られるように、データ演算コンポーネント１００１は、２次元シフトレジスタアレイ構造１００６の「上方」に論理的に位置する実行レーンのアレイ１００５を含む。上述したように、さまざまな実施形態では、シート生成部が提供する画像データのシートが２次元シフトレジスタ１００６にロードされる。次に、実行レーンがレジスタ構造１００６からのシートデータを処理する。
【００８４】
実行レーンアレイ１００５およびシフトレジスタ構造１００６は、互いに対して定位置に固定されている。しかしながら、シフトレジスタアレイ１００６内のデータは、戦略的かつ調整された方法でシフトし、実行レーンアレイ内の各実行レーンにデータ内の異なるステンシルを処理させる。このように、各実行レーンは、生成された出力シートに含まれる異なる画素の出力画像値を判断する。図１０のアーキテクチャから、実行レーンアレイ１００５が上下に隣接する実行レーンおよび左右に隣接する実行レーンを含むので、重なり合うステンシルは、縦方向だけでなく、横方向にも配置されていることは明らかである。
【００８５】
データ演算部１００１のいくつかの注目すべきアーキテクチャ上の特徴として、シフトレジスタ構造１００６の寸法は、実行レーンアレイ１００５よりも広い。つまり、実行レーンアレイ１００５の外側にレジスタ１００９の「ハロー（ｈａｌｏ）」が存在する。ハロー１００９は、実行レーンアレイの２つの側面に存在するように図示されているが、実装によっては、ハローは、実行レーンアレイ１００５のより少ない（１つ）またはより多い（３つまたは４つの）側面に存在してもよい。ハロー１００５は、実行レーン１００５の「下」をデータがシフトすると実行レーンアレイ１００５の境界の外側にこぼれ出るデータの「スピルオーバ」空間を提供する役割を果たす。簡単な例として、ステンシルの左端の画素が処理されると、実行レーンアレイ１００５の右端の中心にある５×５ステンシルは、さらに右側に４つのハローレジスタ位置を必要とすることになる。図をわかりやすくするために、図１０は、標準的な実施形態において、いずれの側面（右、下）のレジスタも横接続および縦接続の両方を有し得る場合、ハローの右側のレジスタを横方向にのみシフト接続しているように示しており、ハローの下側のレジスタを縦方向にのみシフト接続しているように示している。さまざまな実施形態では、ハロー領域は、画像処理命令を実行するための対応する実行レーン論理を含まない（たとえば、ＡＬＵは存在しない）。しかしながら、個々のハローレジスタ位置がメモリから個々にデータをロードし、データをメモリに格納できるよう、個々のメモリアクセスユニット（Ｍ）がハロー領域位置の各々に存在する。
【００８６】
アレイの各行および／または各列、またはそれらの一部に連結されたさらなるスピルオーバ空間がＲＡＭ１００７によって提供される（たとえば、行方向に４つの実行レーン、列方向に２つの実行レーンにまたがる実行レーンアレイの「領域」に１つのＲＡＭが割り当てられてもよい。わかりやすくするために、残りの明細書では、主に、行ベースおよび／または列ベースの割り当て方式について言及する）。ここで、実行レーンのカーネル動作は、（いくつかの画像処理ルーチンが必要とし得る）２次元シフトレジスタアレイ１００６の外側の画素値を処理する必要がある場合、画像データの面は、たとえば、ハロー領域１００９からＲＡＭ１００７にさらにこぼれ出る（スピルオーバする）ことができる。たとえば、実行レーンアレイの右端の実行レーンの右側に４つのストレージ要素のみから構成されるハロー領域をハードウェアが含む、６×６ステンシルについて考える。この場合、ステンシルを完全に処理するために、データは、さらに右にシフトされてハロー１００９の右端からはみ出る必要がある。ハロー領域１００９の外にシフトされるデータは、その後、ＲＡＭ１００７にこぼれ出る。ＲＡＭ１００７および図９のステンシルプロセッサのその他の適用例をさらに以下に説明する。
【００８７】
図１１ａ〜図１１ｋは、上述したように実行レーンアレイの「下」の２次元シフトレジスタアレイ内で画像データがシフトされる方法の例を説明する。図１１ａに見られるように、２次元シフトアレイのデータコンテンツが第１アレイ１１０７に図示され、実行レーンアレイがフレーム１１０５によって図示されている。また、実行レーンアレイ内の２つの隣接する実行レーン１１１０を簡略化して図示している。この単純化した図示１１１０では、各実行レーンはレジスタＲ１を含む。レジスタＲ１は、シフトレジスタからデータを受け付けることができるか、（たとえば、周期間の累算器として動作するために）ＡＬＵ出力からデータを受け付けることができるか、または、出力データを出力宛先に書き込むことができる。
【００８８】
また、各実行レーンは、ローカルレジスタＲ２において、その「下」のコンテンツを２次元シフトアレイにおいて利用可能である。よって、Ｒ１は、実行レーンの物理レジスタであるのに対して、Ｒ２は、２次元シフトレジスタアレイの物理レジスタである。実行レーンは、Ｒ１および／またはＲ２が提供するオペランドを処理できるＡＬＵを含む。以下においてさらに詳細に記載するが、一実施形態では、シフトレジスタは、実際には、アレイ位置ごとに複数のストレージ／レジスタ要素（の「深度」）を有して実装されるが、シフトアクティビティは、ストレージ要素の１つの面に限られる（たとえば、ストレージ要素の１つの面のみが周期ごとにシフトできる）。図１１ａ〜１１ｋは、これらの深度がより深いレジスタ位置のうちの１つを、それぞれの実行レーンからの結果Ｘを格納するのに用いられるものとして示している。図をわかりやすくするために、深度がより深い結果レジスタは、対応するレジスタＲ２の下ではなく、横に並べて図示されている。
【００８９】
図１１ａ〜１１ｋは、実行レーンアレイ内に図示された実行レーン位置１１１１のペアと中央位置が揃えられた２つのステンシルの算出に焦点を当てている。図をわかりやすくするために、実行レーン１１１０のペアは、実際には下記の例によると縦方向に隣接している場合に、横方向に隣接するものとして示されている。
【００９０】
最初に、図１１ａに見られるように、実行レーンは、その中央のステンシル位置の中心に位置決めされる。図１１ｂは、両方の実行レーンによって実行されるオブジェクトコードを示す。図１１ｂに見られるように、両方の実行レーンのプログラムコードによって、シフトレジスタアレイ内のデータは、位置を下に１つシフトさせられ、位置を右に１つシフトさせられる。これにより、両方の実行レーンがそれぞれのステンシルの左上隅に揃えられる。次に、プログラムコードは、（Ｒ２において）それぞれの位置にあるデータをＲ１にロードさせる。
【００９１】
図１１ｃに見られるように、次に、プログラムコードは、実行レーンのペアに、シフトレジスタアレイ内のデータを１単位だけ左にシフトさせ、これによって、各実行レーンのそれぞれの位置の右にある値が、各実行レーンの位置にシフトされる。次に、（Ｒ２における）実行レーンの位置までシフトされた新しい値がＲ１の値（前の値）に加算される。その結果がＲ１に書き込まれる。図１１ｄに見られるように、図１１ｃで説明したのと同じ処理が繰り返され、これによって、結果Ｒ１は、ここで、上部実行レーンにおいて値Ａ＋Ｂ＋Ｃを含み、下部実行レーンにおいてＦ＋Ｇ＋Ｈを含む。この時点で、両方の実行レーンは、それぞれのステンシルの上側の行を処理済みである。なお、データは、実行レーンアレイの左側のハロー領域（左側に存在する場合）にこぼれ出るが、ハロー領域が実行レーンアレイの左側に存在しない場合はＲＡＭにこぼれ出る。
【００９２】
図１１ｅに見られるように、次に、プログラムコードは、シフトレジスタアレイ内のデータを１単位だけ上にシフトさせ、これによって、両方の実行レーンがそれぞれのステンシルの中央行の右端に揃えられる。両方の実行レーンのレジスタＲ１は、このとき、ステンシルの最上行および中央行の右端の値の総和を含む。図１１ｆおよび図１１ｇは、両方の実行レーンのステンシルの中央行を左方向に移動する続きの進行を説明する図である。図１１ｇの処理の終わりに両方の実行レーンがそれぞれのステンシル最上行および中央行の値の総和を含むよう、累積加算が続く。
【００９３】
図１１ｈは、各実行レーンを対応するステンシルの最下行に揃えるための別のシフトを示す。図１１ｉおよび図１１ｊは、両方の実行レーンのステンシルに対する処理を完了するための、続きのシフト処理を示す。図１１ｋは、データ配列において各実行レーンをその正しい位置に揃えて結果をそこに書き込むためのさらなるシフト処理を示す。
【００９４】
なお、図１１ａ〜図１１ｋの例では、シフト演算用のオブジェクトコードは、（Ｘ，Ｙ）座標で表されるシフトの方向および大きさを識別する命令フォーマットを含んでもよい。たとえば、位置を１つ上にシフトさせるためのオブジェクトコードは、ＳＨＩＦＴ０、＋１というオブジェクトコードで表されてもよい。別の例として、位置を右に１つシフトすることは、ＳＨＩＦＴ＋１、０というオブジェクトコードで表現されてもよい。また、さまざまな実施形態では、より大きなシフトも、オブジェクトコード（たとえば、ＳＨＩＦＴ０、＋２）で指定されてもよい。ここで、２Ｄシフトレジスタハードウェアが周期あたり位置１つ分のシフトしかサポートしない場合、命令は、マシンによって、複数周期の実行を必要とすると解釈されてもよく、または、周期あたり位置２つ分以上のシフトをサポートするよう２Ｄシフトレジスタハードウェアが設計されてもよい。後者の実施形態をより詳細にさらに後述する。
【００９５】
図１２は、実行レーンおよび対応するシフトレジスタ構造（ハロー領域のレジスタは、対応する実行レーンを含まないが、さまざまな実施形態のメモリを含む）の単位セルをより詳細に示す別の図である。実行レーン、および実行レーンアレイの各位置に対応付けられたレジスタ空間は、一実施形態では、図１２に見られる回路を実行レーンアレイの各ノードにおいてインスタンス化することによって実現される。図１２に見られるように、単位セルは、４つのレジスタＲ２〜Ｒ５から構成されるレジスタファイル１２０２に連結された実行レーン１２０１を含む。いずれの周期の間も、実行レーン１２０１は、レジスタＲ１〜Ｒ５のうちのいずれかから読み出されたり、書き込まれたりしてもよい。２つの入力オペランドを必要とする命令については、実行レーンは、両方のオペランドをＲ１〜Ｒ５のうちのいずれかから取り出してもよい。
【００９６】
一実施形態では、２次元シフトレジスタ構造は、１つの周期の間、レジスタＲ２〜Ｒ４のうちのいずれか１つ（のみ）のコンテンツを出力マルチプレクサ１２０３を通してその隣接するレジスタのレジスタファイルのうちの１つにシフト「アウト」させ、隣接するレジスタ間のシフトが同じ方向になるよう、レジスタＲ２〜Ｒ４のうちのいずれか１つ（のみ）のコンテンツを対応するレジスタファイルから入力マルチプレクサ１２０４を通してシフト「イン」されるコンテンツと置き換えることによって実現される（たとえば、すべての実行レーンが左にシフトする、すべての実行レーンが右にシフトする、など）。同じレジスタのコンテンツがシフトアウトされて、同じ周期上でシフトされるコンテンツと置き換えられることは一般的であり得るが、マルチプレクサ配列１２０３、１２０４は、同じ周期の間、同じレジスタファイル内で異なるシフト元および異なるシフト対象のレジスタを可能にする。
【００９７】
図１２に示すように、シフトシーケンスの間、実行レーンは、そのレジスタファイル１２０２からその左隣、右隣、上隣、および下隣の各々にコンテンツをシフトアウトすることになることが分かる。同じシフトシーケンスと連動して、実行レーンは、そのレジスタファイルに左隣、右隣、上隣、および下隣のうちの特定のレジスタファイルからコンテンツをシフトする。ここでも、シフトアウトする対象およびシフトインする元は、すべての実行レーンについて同じシフト方向に一致していなければならない（たとえば、右隣にシフトアウトする場合、シフトインは左隣からでなければならない）。
【００９８】
一実施形態において、周期あたり実行レーン１つにつき１つのレジスタのコンテンツのみをシフトさせることが可能であるが、その他の実施形態は、２つ以上のレジスタのコンテンツをシフトイン／アウトさせることが可能であってもよい。たとえば、図１２に見られるマルチプレクサ回路１２０３、１２０４の第２インスタンスが図１２の設計に組み込まれている場合、同じ周期で２つのレジスタのコンテンツをシフトアウト／インしてもよい。当然、周期ごとに１つのレジスタのコンテンツのみをシフトさせることができる実施形態では、数値演算間のシフトのためにより多くのクロック周期を消費することによって複数のレジスタからのシフトが数値演算間で生じてもよい（たとえば、数値演算間の２つのシフト演算を消費することによって２つのレジスタのコンテンツが当該数値演算間でシフトされてもよい）。
【００９９】
なお、シフトシーケンス時に実行レーンのレジスタファイルのすべてのコンテンツよりも少ない数のコンテンツがシフトアウトされた場合、各実行レーンのシフトアウトされなかったレジスタのコンテンツは、所定の位置に留まっている（シフトしない）ことが分かる。このように、シフトインされたコンテンツに置き換えられないシフトされなかったコンテンツは、いずれも、シフト周期にわたって、実行レーンにローカルに留まる。各実行レーンに見られるメモリユニット（「Ｍ」）を使用して、実行レーンアレイ内の実行レーンの行および／または列に対応付けられたランダムアクセスメモリ空間からデータをロード／またはそれに格納する。ここで、Ｍユニットは、標準Ｍユニットとして機能し、標準Ｍユニットは、実行レーン自体のレジスタ空間からロード／またはそれに格納できないデータをロード／格納するために利用される場合が多い。さまざまな実施形態では、Ｍユニットの主な動作は、ローカルレジスタからのデータをメモリに書き込み、メモリからデータを読み出してローカルレジスタに書き込むことである。
【０１００】
ハードウェア実行レーン１２０１のＡＬＵユニットがサポートするＩＳＡオペコードに関して、さまざまな実施形態では、ハードウェアＡＬＵがサポートする数値演算オペコードは、（たとえば、ＡＤＤ、ＳＵＢ、ＭＯＶ、ＭＵＬ、ＭＡＤ、ＡＢＳ、ＤＩＶ、ＳＨＬ、ＳＨＲ、ＭＩＮ／ＭＡＸ、ＳＥＬ、ＡＮＤ、ＯＲ、ＸＯＲ、ＮＯＴ）を含む。上述したように、実行レーン１２０１によって、関連するＲＡＭからデータをフェッチ／当該ＲＡＭにデータを格納するためのメモリアクセス命令が実行され得る。これに加えて、ハードウェア実行レーン１２０１は、２次元シフトレジスタ構造内でデータをシフトさせるためのシフト演算命令（右、左、上、下）をサポートする。上述したように、プログラム制御命令は、主に、ステンシルプロセッサのスカラープロセッサによって実行される。
【０１０１】
４．０  実装の実施形態
上述したさまざまな画像処理プロセッサのアーキテクチャの特徴は、必ずしも従来の意味での画像処理に限られないため、画像処理プロセッサを新たに特徴付け得る（または、させ得ない）その他のアプリケーションに適用され得ることを指摘することが適切である。たとえば、上述したさまざまな画像処理プロセッサのアーキテクチャの特徴のうちのいずれかが、実際のカメラ画像の処理とは対照的に、アニメーションの作成ならびに／または生成および／もしくは描画に使用される場合、画像処理プロセッサは、ＧＰＵ（Graphics Processing Unit）として特徴付けられてもよい。加えて、上述した画像処理プロセッサアーキテクチャの特徴を、映像処理、視野処理、画像認識および／または機械学習など、その他の技術用途に適用してもよい。このように適用すると、画像処理プロセッサは、（たとえば、コプロセッサとして）、（たとえば、コンピューティングシステムのＣＰＵ（Central Processing Unit）もしくはその一部である）より汎用的なプロセッサと統合されてもよく、または、コンピューティングシステム内のスタンドアロン型のプロセッサであってもよい。
【０１０２】
上述したハードウェア設計の実施形態は、半導体チップ内に実施されてもよく、および／または、最終的に半導体製造プロセスに向けての回路設計の記述として実施されてもよい。後者の場合、このような回路記述は、（たとえば、ＶＨＤＬまたはＶｅｒｉｌｏｇ）レジスタ転送レベル（ＲＴＬ：Register Transfer Level）回路記述、ゲートレベル回路記述、トランジスタレベル回路記述もしくはマスク記述、またはそれらのさまざまな組合せなどの形態をとり得る。回路記述は、通常、コンピュータ読み取り可能な記憶媒体（ＣＤ−ＲＯＭまたはその他の種類のストレージ技術など）上で実施される。
【０１０３】
上記段落から、後述する画像処理プロセッサをコンピュータシステム上のハードウェアで（たとえば、ハンドヘルド端末のカメラからのデータを処理するハンドヘルド端末のＳＯＣ（System On Chip）の一部として）実施してもよいことを認識することが適切である。なお、画像処理プロセッサがハードウェア回路として実施された場合、画像処理プロセッサによって処理される画像データをカメラから直接受け付けてもよいことが分かる。ここで、画像処理プロセッサは、単品カメラの一部、またはカメラを内蔵したコンピューティングシステムの一部であってもよい。後者の場合、カメラからまたはコンピューティングシステムのシステムメモリから画像データを直接受け付けてもよい（たとえば、カメラは、その画像データを、画像処理プロセッサではなくシステムメモリに送る）。また、上記段落に記載の特徴の多くは、（アニメーションを描画する）ＧＰＵに適用可能である。
【０１０４】
図１３は、コンピューティングシステムを例示的に示している。上述したコンピューティングシステムの構成要素のうちの多くは、内蔵カメラおよび関連する画像処理プロセッサ（たとえば、スマートフォンまたはタブレットコンピュータなどのハンドヘルド端末）を有するコンピューティングシステムに適用可能である。当業者は、これら２つの違いを容易に明確にするであろう。これに加えて、図１３のコンピューティングシステムは、ワークステーションまたはスーパーコンピュータなどの高性能なコンピューティングシステムの多くの特徴も含んでいる。
【０１０５】
図１３に見られるように、基本的なコンピューティングシステムは、ＣＰＵ１３０１（たとえば、マルチコアプロセッサまたはアプリケーションプロセッサ上に配置された複数の汎用処理コア１３１５＿１〜１３１５＿Ｎおよびメインメモリコントローラ１３１７を含んでもよい）と、システムメモリ１３０２と、ディスプレイ１３０３（たとえば、タッチスクリーン、フラットパネル）と、ローカル有線ポイントツーポイントリンク（たとえば、ＵＳＢ）インタフェース１３０４と、さまざまなネットワーク入出力機能部１３０５（Ｅｔｈｅｒｎｅｔ（登録商標）インタフェースおよび／またはセルラーモデムサブシステムなど）と、無線ローカルエリアネットワーク（たとえば、WiFi）インタフェース１３０６と、無線ポイントツーポイントリンク（たとえば、Bluetooth（登録商標））インタフェース１３０７およびＧＰＳ（Global Positioning System）インタフェース１３０８と、さまざまなセンサ１３０９＿１〜１３０９＿Ｎと、１つ以上のカメラ１３１０と、バッテリー１３１１と、電力管理制御部１３１２と、スピーカ／マイクロフォン１３１３と、オーディオコーダ／デコーダ１３１４とを含んでもよい。
【０１０６】
アプリケーションプロセッサまたはマルチコアプロセッサ１３５０は、そのＣＰＵ１２０１内に１つ以上の汎用処理コア１３１５と、１つ以上のＧＰＵ１３１６と、メモリ管理機能部１３１７（たとえば、メモリコントローラ）と、入出力制御機能部１３１８と、画像処理部１３１９とを含んでもよい。汎用処理コア１３１５は、通常、コンピューティングシステムのオペレーティングシステムおよびアプリケーションソフトウェアを実行する。ＧＰＵ１３１６は、通常、グラフィックスを多く使う機能を実行して、たとえば、ディスプレイ１３０３上に提示されるグラフィックス情報を生成する。メモリ制御機能部１３１７は、システムメモリ１３０２とインタフェース接続され、システムメモリ１３０２にデータを書き込む／システムメモリ１３０２からデータを読み出す。電力管理制御部１３１２は、一般に、システム１３００の消費電力を制御する。
【０１０７】
画像処理部１３１９は、上記段落で詳細に記載された画像処理部の実施形態のいずれかに従って実現されてもよい。代替的には、またはこれと組み合わせて、ＩＰＵ１３１９がＧＰＵ１３１６およびＣＰＵ１３０１のいずれかまたは両方に、そのコプロセッサとして連結されてもよい。これに加えて、さまざまな実施形態では、ＧＰＵ１３１６は、詳細に上述した画像処理プロセッサの特徴のいずれかを用いて実現されてもよい。画像処理部１３１９、またはデータを送信するコンピューティングシステムの他の部は、詳細に上述されたように、効率的な通信シーケンスを実現するトランシーバで構成されてもよい。
【０１０８】
タッチスクリーンディスプレイ１３０３、通信インタフェース１３０４〜１３０７、ＧＰＳインタフェース１３０８、センサ１３０９、カメラ１３１０、およびスピーカ／マイクロフォンコーデック１３１３、１３１４の各々は、すべて、内蔵型周辺機器（たとえば、１つ以上のカメラ１３１０）も適宜備えたコンピュータシステム全体に対するさまざまな形態のＩ／Ｏ（入力部および／または出力部）として見ることができる。実現例によっては、これらのＩ／ＯコンポーネントのうちのさまざまなＩ／Ｏコンポーネントがアプリケーションプロセッサ／マルチコアプロセッサ１３５０上に集積されてもよく、ダイからずれて配置されてもよく、またはアプリケーションプロセッサ／マルチコアプロセッサ１３５０のパッケージの外に配置されてもよい。
【０１０９】
一実施形態では、１つ以上のカメラ１３１０は、カメラと視野に存在するオブジェクトとの間の奥行きを測定可能な深度カメラを含む。アプリケーションプロセッサまたはその他のプロセッサの汎用ＣＰＵコア（または、プログラムコードを実行するための命令実行パイプラインを有するその他の機能ブロック）上で実行されるアプリケーションソフトウェア、オペレーティングシステムソフトウェア、デバイスドライバソフトウェア、および／またはファームウェアが、上述した機能のいずれかを実行してもよい。
【０１１０】
本発明の実施形態は、上述したさまざまな処理を含んでもよい。処理は、機械によって実行可能な命令に含まれてもよい。命令を用いて、汎用プロセッサまたは特定用途向けプロセッサに特定の処理を実行させることができる。代替的には、これらの処理は、処理を実行するための結線ロジックおよび／またはプログラム可能なロジックを含んだ専用のハードウェア部品によって実行されてもよく、プログラムを組み込まれたコンピュータ構成要素とカスタムハードウェア部品との任意の組み合わせによって実行されてもよい。
【０１１１】
また、本発明の要素は、機械によって実行可能な命令を格納するための機械読み取り可能な媒体として提供されてもよい。機械読み取り可能な媒体は、フロッピー（登録商標）ディスク、光ディスク、ＣＤ−ＲＯＭ、および光磁気ディスク、ＦＬＡＳＨメモリ、ＲＯＭ、ＲＡＭ、ＥＰＲＯＭ、ＥＥＰＲＯＭ、磁気カードまたは光カード、電子命令を格納するのに適した伝播媒体またはその他の種類の媒体／機械読み取り可能な媒体などを含み得るが、これらに限定されない。たとえば、本発明は、コンピュータプログラムとしてダウンロードされてもよく、コンピュータプログラムは、搬送波またはその他の伝播媒体において具体化されるデータ信号として、通信リンク（たとえば、モデムまたはネットワーク接続）を介してリモートコンピュータ（たとえば、サーバ）から要求元コンピュータ（たとえば、クライアント）に転送され得る。
【０１１２】
上記の明細書において、具体的、例示的な実施形態を用いて本発明を説明したが、特許請求の範囲に記載の本発明のより広義の趣旨および範囲から逸脱することなく、さまざまな変形および変更が実施可能であることは明らかであろう。したがって、明細書および添付の図面は、限定的ではなく例示的なものとみなされるべきである。
【０１１３】
以下において、いくつかの例示的な実施形態が記載される。
例１：プロセッサであって、
ネットワークと、
当該ネットワークに連結された複数の処理コアと、
当該ネットワークに連結されたトランスミッタ回路とを備え、当該トランスミッタ回路は、当該複数の処理コアのうちの１つによって生成された出力データを当該ネットワーク内に送信し、当該トランスミッタ回路は制御論理回路を含み、当該制御論理回路は、当該トランスミッタ回路が出力データのうち先行の第１のパケットの送信を完了する前に、当該トランスミッタ回路に、出力データのうち第２のパケットの送信のための要求を送信させる、プロセッサ。
【０１１４】
例２：当該要求は、
当該第２のパケットを当該第１のパケットが送信されつつあるのと同じ宛先へ送信すべき場合に当該同じ宛先、または、
当該第２のパケットを異なる宛先に送信すべき場合に当該異なる宛先、
に送信されることになる、例１に記載のプロセッサ。
【０１１５】
例３：当該制御論理回路は、
当該第１のパケットおよび当該第２のパケットが同じ宛先に送信されている場合、当該第１のパケットおよび当該第２のパケットのために同じクレジットカウンタを用いることになるか、または、
当該第１のパケットおよび当該第２のパケットが異なる宛先に送信されている場合、当該第１のパケットのために第１のクレジットカウンタを用いることになるとともに当該第２のパケットのために第２のクレジットカウンタを用いることになる、例１または例２に記載のプロセッサ。
【０１１６】
例４：制御論理は、異なる宛先に対する複数のパケットの同時送信を制御するための複数のクレジットカウンタを含む、上述の例のうち少なくとも１つの例に記載のプロセッサ。
【０１１７】
例５：当該クレジットカウンタの各々は、いずれかの特定の宛先に対する送信を制御するために永久的に割当てられるものではない、例２から例４のうち少なくとも１つの例に記載のプロセッサ。
【０１１８】
例６：当該プロセッサは画像処理プロセッサであり、当該第１のパケットおよび当該第２のパケットはデータの画像の複数ラインを含む、上述の例のうち少なくとも１つの例に記載のプロセッサ。
【０１１９】
例７：当該第１のパケットおよび当該第２のパケットのデータ単位は、前記トランスミッタによって送信された後、および、当該データ単位が当該複数の処理コアのうち別の１つ以上の処理コアによって処理される前に、当該プロセッサのメモリ回路によって待ち行列に入れられる、上述の例のうち少なくとも１つの例に記載のプロセッサ。
【０１２０】
例８：当該画像処理プロセッサは、２次元シフトレジスタアレイに連結された、実行レーンのアレイを含む、例６または例７に記載のプロセッサ。
【０１２１】
例９：当該画像処理プロセッサは、画像データのステンシルを処理するための複数のステンシルプロセッサを含む、例６から例８のうち少なくとも１つの例に記載のプロセッサ。
【０１２２】
例１０：部分的に重なっているステンシル上で動作するように構成される、例９に記載のプロセッサ。
【０１２３】
例１１：当該実行レーンのアレイの外側にレジスタの「ハロー」が存在するように、当該実行レーンのアレイよりも広い寸法を有するシフトレジスタ構造を備えたデータ演算部を含むかまたは当該データ演算部に連結される、上述の例のうち少なくとも１つの例に記載のプロセッサ。
【０１２４】
例１２：コンピューティングシステムであって、
複数の汎用処理コアと、
システムメモリと、
当該システムメモリと当該汎用処理コアとの間で連結されるメモリコントローラと、
画像処理プロセッサとを備え、当該画像処理プロセッサは、
ａ）ネットワークと、
ｂ）当該ネットワークに連結された複数の画像処理コアと、
ｃ）当該ネットワークに連結されたトランスミッタ回路とを含み、当該トランスミッタ回路は、当該画像処理コアのうちの１つによって生成された出力データを当該ネットワーク内に送信し、当該トランスミッタ回路は制御論理回路を含み、当該制御論理回路は、当該トランスミッタ回路が出力データのうち先行の第１のパケットの送信を完了する前に、当該トランスミッタ回路に、出力データのうち第２のパケットの送信のための要求を送信させる、コンピューティングシステム。
【０１２５】
例１３：当該要求は、
当該第２のパケットを当該第１のパケットが送信されつつあるのと同じ宛先へ送信すべき場合に当該同じ宛先、または、
当該第２のパケットを異なる宛先に送信すべき場合に当該異なる宛先、
に送信されることになる、例１２に記載のコンピューティングシステム。
【０１２６】
例１４：当該制御論理回路は、
当該第１のパケットおよび当該第２のパケットが同じ宛先に送信されている場合、当該第１のパケットおよび当該第２のパケットのために同じクレジットカウンタを用いることになるか、または、
当該第１のパケットおよび当該第２のパケットが異なる宛先に送信されている場合、当該第１のパケットのために第１のクレジットカウンタを用いることになるとともに当該第２のパケットのために第２にクレジットカウンタを用いることになる、例１２または例１３に記載のコンピューティングシステム。
【０１２７】
例１５：制御論理は、異なる宛先に対する複数のパケットの同時送信を制御するための複数のクレジットカウンタを含む、例１２から例１４のうち少なくとも１つの例に記載のコンピューティングシステム。
【０１２８】
例１６：当該クレジットカウンタの各々は、いずれかの特定の宛先に対する送信を制御するために永久的に割当てられるものではない、例１２から例１５のうち少なくとも１つの例に記載のコンピューティングシステム。
【０１２９】
例１７：当該第１のパケットおよび当該第２のパケットはデータの画像の複数ラインを含む、例１２から例１６のうち少なくとも１つの例に記載コンピューティングシステム。
【０１３０】
例１８：当該第１のパケットおよび第２のパケットのデータ単位は、前記トランスミッタによって送信された後、および、当該データ単位が当該複数の画像処理コアのうち別の１つ以上の画像処理コアによって処理される前に、当該画像処理プロセッサのメモリ回路によって待ち行列に入れられる、例１２から例１７のうち少なくとも１つの例に記載のコンピューティングシステム。
【０１３１】
例１９：当該画像処理プロセッサは、２次元シフトレジスタアレイに連結された、実行レーンのアレイを含む、例１２から例１８のうち少なくとも１つの例に記載のコンピューティングシステム。
【０１３２】
例２０：当該画像処理プロセッサは、画像データのステンシルを処理するための複数のステンシルプロセッサを含む、例１２から例１９のうち少なくとも１つの例に記載のコンピューティングシステム。
【０１３３】
例２１：部分的に重なっているステンシル上で動作するように構成される、例２０に記載のコンピューティングシステム。
【０１３４】
例２２：当該実行レーンのアレイの外側にレジスタの「ハロー」が存在するように、当該実行レーンのアレイよりも広い寸法を有するシフトレジスタ構造を備えたデータ演算部を含むかまたは当該データ演算部に連結される、例１２から例２１のうち少なくとも１つの例に記載のコンピューティングシステム。
【０１３５】
例２３：プロセッサによって実行される方法であって、
当該プロセッサの処理コアの出力データを生成するために当該処理コア上でプログラムコードを処理するステップと、
当該プロセッサ内のネットワークに連結されているトランスミッタ回路によって、当該トランスミッタ回路が先行の第１のパケットの送信を完了する前に、第２のパケットについての送信のための要求を送信するステップとを含み、当該第２のパケットは、当該処理コアによって生成された第２の出力データを含み、当該第１のパケットは、当該処理コアによって生成された第１の出力データを含み、前記方法はさらに、
当該ネットワークに連結されている当該プロセッサのうち１つ以上の他の処理コアで当該第１の出力データおよび当該第２の出力データを処理するステップを含む、方法。
【０１３６】
例２４：当該トランスミッタ回路によって当該第１の出力データを送信した後であって、当該１つ以上の処理コアによって当該第１の出力データを処理する前に、当該第１の出力データを待ち行列に入れるステップをさらに含む、例２３に記載の方法。
【０１３７】
例２５：当該待ち行列に入れるステップは、当該ネットワークに連結されているバッファによって画像データの複数ラインを待ち行列に入れるステップを含む、例２３または例２４に記載の方法。
【０１３８】
例２６：当該トランスミッタ回路が、当該第１のパケットの送信に関与するとともに、第２のパケットの送信に関与するステップをさらに含み、当該第２のパケットは当該第１のパケットとは異なる宛先に送信される、例２３から例２５のうち少なくとも１つの例に記載の方法。
【０１３９】
例２７：当該第１のパケットおよび当該第２のパケットが同じ宛先に送信される場合、前記トランスミッタからの当該第１のパケットおよび当該第２のパケットの送信を制御するために同じクレジットカウンタを用いるステップをさらに含む、例２３から例２６のうち少なくとも１つの例に記載の方法。
【０１４０】
例２８：当該トランスミッタからの第３のパケットの送信を制御するために当該同じクレジットカウンタを用いるステップをさらに含み、当該第３のパケットは、当該第１のパケットおよび当該第２のパケットを送信するとき以外の期間中に当該第１のパケットおよび当該第２のパケットとは異なる宛先に送信される、例２３から例２７のうち少なくとも１つに記載の方法。
【０１４１】
例２９：当該画像処理プロセッサは、２次元シフトレジスタアレイに連結された、実行レーンのアレイを含む、例２３から例２８のうち少なくとも１つの例に記載の方法。
【０１４２】
例３０：当該画像処理プロセッサは、画像データのステンシルを処理するための複数のステンシルプロセッサを含む、例２３から例２９のうち少なくとも１つの例に記載の方法。
【０１４３】
例３１：部分的に重なっているステンシル上で動作するように構成される、例３０に記載の方法。
【０１４４】
例３２：当該実行レーンのアレイの外側にレジスタの「ハロー」が存在するように、当該実行レーンのアレイよりも広い寸法を有するシフトレジスタ構造を備えたデータ演算部を含むかまたは当該データ演算部に連結される、例２３から例３１のうち少なくとも１つの例に記載の方法。
【図１】
2020519996.tif 000003
【図２】
2020519996.tif 000004
【図３】
2020519996.tif 000005
【図４】
2020519996.tif 000006
【図５ａ】
2020519996.tif 000007
【図５ｂ】
2020519996.tif 000008
【図５ｃ】
2020519996.tif 000009
【図６ａ】
2020519996.tif 000010
【図６ｂ】
2020519996.tif 000011
【図７】
2020519996.tif 000012
【図８ａ】
2020519996.tif 000013
【図８ｂ】
2020519996.tif 000014
【図８ｃ】
2020519996.tif 000015
【図８ｄ】
2020519996.tif 000016
【図８ｅ】
2020519996.tif 000017
【図９ａ】
2020519996.tif 000018
【図９ｂ】
2020519996.tif 000019
【図１０】
2020519996.tif 000020
【図１１ａ】
2020519996.tif 000021
【図１１ｂ】
2020519996.tif 000022
【図１１ｃ】
2020519996.tif 000023
【図１１ｄ】
2020519996.tif 000024
【図１１ｅ】
2020519996.tif 000025
【図１１ｆ】
2020519996.tif 000026
【図１１ｇ】
2020519996.tif 000027
【図１１ｈ】
2020519996.tif 000028
【図１１ｉ】
2020519996.tif 000029
【図１１ｊ】
2020519996.tif 000030
【図１１ｋ】
2020519996.tif 000031
【図１２】
2020519996.tif 000032
【図１３】
2020519996.tif 000033
【国際調査報告】
2020519996.tif 000034
2020519996.tif 000035
2020519996.tif 000036