(57)【要約】  データ変数を並列処理するための効率的な方法及び装置。並列処理アレイは、データ変数を並行して処理するように構成された計算要素を有する。並列プロセッサの複数の計算要素に対するアルゴリズムがロードされる。アルゴリズムは、複数の処理ステップを含む。複数の計算要素の各々は、計算要素に関連するデータ変数を処理するように構成される。並列プロセッサの複数の計算要素に対する選択コードがロードされ、選択コードは、アルゴリズム・ステップのどれが、計算要素によりデータ変数に適用されるかを識別する。アルゴリズムの処理ステップは、計算要素によりデータ変数に適用され、各々の計算要素に対して、選択コードにより識別された処理ステップのみがデータ変数に適用される。
2009523293.tif 000002
【特許請求の範囲】
【請求項１】
データ変数を並行して処理するように構成された計算要素を有する並列処理アレイにおいて、
並列プロセッサの複数の計算要素に対するアルゴリズムをロードする、
ステップを含み、前記アルゴリズムは複数の処理ステップを含み、前記複数の計算要素の各々は該計算要素に関連するデータ変数を処理するように構成されており、
前記並列プロセッサの前記複数の計算要素に対する選択コードをロードする、
ステップを含み、前記選択コードはアルゴリズム・ステップのどれが前記計算要素により前記データ変数に適用されるかを識別し、
前記アルゴリズムの処理ステップを前記計算要素により前記データ変数に適用する、
ステップを含み、各々の前記計算要素に対して、前記選択コードにより識別された処理ステップのみが前記データ変数に適用される、
ことを特徴とする方法。
【請求項２】
前記計算要素の各々に対して、
前記処理ステップの各々は、前記処理ステップが前記データ変数に適用されるかどうかを判断する、関連する選択コードを有することを特徴とする請求項１に記載の方法。
【請求項３】
前記処理ステップの各々は、前記計算要素のいずれかが前記処理ステップを前記データ変数のいずれかに適用するかどうかを判断する、関連する選択コードを有することを特徴とする請求項１に記載の方法。
【請求項４】
前記処理ステップは、数値加算及びデータシフトを含むことを特徴とする請求項１に記載の方法。
【請求項５】
前記アルゴリズムをロードするステップは、該アルゴリズムを、前記複数の計算要素間で共有されるメモリにロードするステップを含むことを特徴とする請求項１に記載の方法。
【請求項６】
前記アルゴリズムをロードするステップは、該アルゴリズムを複数のメモリにロードするステップを含み、前記複数のメモリは前記計算要素の１つと関連することを特徴とする請求項１に記載の方法。
【請求項７】
データ変数を並行して処理するように構成された計算要素を有する並列処理アレイにおいて処理する方法のための、コンピュータ実施可能命令を有するコンピュータ可読媒体であって、
並列プロセッサの複数の計算要素に対するアルゴリズムをロードする、
ステップを含み、前記アルゴリズムは複数の処理ステップを含み、前記複数の計算要素の各々は該計算要素に関連するデータ変数を処理するように構成されており、
前記並列プロセッサの前記複数の計算要素に対する選択コードをロードする、
ステップを含み、前記選択コードはアルゴリズム・ステップのどれが前記計算要素により前記データ変数に適用されるかを識別し、
前記アルゴリズムの処理ステップを前記計算要素により前記データ変数に適用する、
ステップを含み、各々の前記計算要素に対して、前記選択コードにより識別された処理ステップのみが前記データ変数に適用される、
ことを特徴とするコンピュータ可読媒体。
【請求項８】
前記処理ステップの各々は、前記処理ステップが前記データ変数に適用されるかどうかを判断する、関連する選択コードを有することを特徴とする請求項７に記載のコンピュータ可読媒体。
【請求項９】
前記処理ステップの各々は、前記計算要素のいずれかが前記処理ステップを前記データ変数のいずれかに適用するかどうかを判断する、関連する選択コードを有することを特徴とする請求項７に記載のコンピュータ可読媒体。
【請求項１０】
前記処理ステップは、数値加算及びデータシフトを含むことを特徴とする請求項７に記載のコンピュータ可読媒体。
【請求項１１】
前記アルゴリズムをロードするステップは、該アルゴリズムを、前記複数の計算要素間で共有されるメモリにロードするステップを含むことを特徴とする請求項７に記載のコンピュータ可読媒体。
【請求項１２】
前記アルゴリズムをロードするステップは、該アルゴリズムを複数のメモリにロードするステップを含み、前記複数のメモリは前記計算要素の１つと関連することを特徴とする請求項７に記載のコンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般的に、並列処理に関する。より具体的には、本発明は、並列処理システムにおけるマルチメディア・データ処理をスケジューリングするための方法及び装置に関する。
【０００２】
本出願は、引用によりかつあらゆる目的でこの開示全体を本明細書に組み入れる、２００６年１月１０日に出願された米国特許仮出願番号第６０／７５８，０６５号に基づく優先権を主張するものである。
【背景技術】
【０００３】
マルチメディア・データの使用増加は、このようなデータを処理し、それをリアル・タイムで供給するためのより高速かつより効率的な方法に対する需要の増加をもたらした。詳細には、画像及びそれに付随した音響のような、マルチメディア・データを並行してより迅速かつより効率的に処理するための方法に対する需要が増加している。多くの場合、例えば、音響及びビデオがリアル・タイムで供給されるのに十分なだけ迅速に達成されなければならない相対的に数多くの計算を依然として必要とする、マルチメディア・データの圧縮及び／又は圧縮解除のような計算集中処理の際に、並行して処理する必要性が生じる。
したがって、マルチメディア・データの並列処理における努力を引き続き強化することが望ましい。このようなデータの並列処理に対するより高速かつより効率的な手法を開発することが特に望ましい。これらの手法は、ブロック並列処理、サブブロック並列処理、及び双線形フィルタ並列処理に対処する必要がある。
【発明の開示】
【０００４】
本発明は、方法及びコンピュータ可読媒体としてといった多数の方法で実施することができる。本発明の種々の実施形態を後述する。
データ変数を並行して処理するように構成された計算要素を有する並列処理アレイにおいて、この方法は、並列プロセッサの複数の計算要素に対するアルゴリズムをロードする、ステップを含み、アルゴリズムは複数の処理ステップを含み、複数の計算要素の各々は計算要素に関連するデータ変数を処理するように構成されており、並列プロセッサの前記複数の計算要素に対する選択コードをロードする、ステップを含み、選択コードはアルゴリズム・ステップのどれが計算要素によりデータ変数に適用されるかを識別し、アルゴリズムの処理ステップを計算要素によりデータ変数に適用する、ステップを含み、各々の前記計算要素に対して、選択コードにより識別された処理ステップのみがデータ変数に適用される、ことを含む。
【０００５】
別の態様においては、データ変数を並行して処理するように構成された計算要素を有する並列処理アレイにおいて処理する方法のための、コンピュータ実施可能命令を有するコンピュータ可読媒体であって、この方法は、並列プロセッサの複数の計算要素に対するアルゴリズムをロードする、ステップを含み、アルゴリズムは複数の処理ステップを含み、複数の計算要素の各々は計算要素に関連するデータ変数を処理するように構成されており、並列プロセッサの複数の計算要素に対する選択コードをロードする、ステップを含み、選択コードはアルゴリズム・ステップのどれが計算要素によりデータ変数に適用されるかを識別し、アルゴリズムの処理ステップを計算要素によりデータ変数に適用する、ステップを含み、各々の計算要素に対して、選択コードにより識別された処理ステップのみがデータ変数に適用される、ことを含む。
本発明の他の目的及び特徴は、明細書、特許請求の範囲、及び添付の図面を検討することにより明らかとなるであろう。
【発明を実施するための最良の形態】
【０００６】
同じ参照符号は、図面全体を通して対応する部分を指す。
本明細書において記載される革新は、並列処理拡張の３つの主な領域に対処し、すなわち、ブロック並列処理、サブブロック並列処理、及び類似性アルゴリズム並列処理に対処する。
【０００７】
ブロック並列処理
ある意味では、この革新は、マルチメディア・データの並列処理のためのより効率的な方法に関する。種々の画像形式において、画像は、「後期」ブロック、すなわち、典型的にはマトリックス形態で見られる画像内の他のブロックの右下に一般的にあるブロックが「初期」ブロックすなわち、後期ブロックの左上のそれらの画像からの情報によって決まるように、ブロックに再分割されることが知られている。初期ブロックは、後期のものが初期ブロックから、依存データと呼ばれることが多い、情報を必要とするので、後期のものの前に処理されなければならない。したがって、ブロック（又はその一部）は、その依存データ順に、種々の並列プロセッサに伝送される。初期ブロックが最初に並列プロセッサに送られ、後期ブロックは後で送られる。ブロックは、特定の位置にある並列プロセッサに格納され、必要に応じて周囲にシフトされ、その結果、それが処理されるときに、その依存データが、特定の組の前の初期ブロックに指定された相対的位置をもって位置するようになる。このように、その依存データは、同じコマンドによって抽出することができる。すなわち、初期ブロックは、各々のプロセッサに、特定の位置からのその依存データを抽出するように命令する単一の組のコマンドによって後期ブロックを処理することができるように周囲にシフトされる。各々の並列プロセッサが同じコマンドの組によってそのブロックを処理するのを可能にすることで、本発明の方法は、単一の包括的なコマンドの組が送られることを可能にする代わりに、別個のコマンドを各々のプロセッサに送ることに対する必要性を排除する。このことが、より高速かつより効率的な処理をもたらす。
【０００８】
図１は、典型的に見られる及び／又はメモリ内に格納されるマトリックス形態で、例示的な画像フレームを概念的に示す。この例においては、１０８０ｉＨＤ画像マトリックス１０は、各々１２０個のマクロブロック１２の６８ラインに再分割される。典型的には、この１０８０ｉフレームのような画像は、個々のマクロブロック１２によって処理される。すなわち、１つ又はそれ以上のマクロブロック１２は、並列処理アレイの各々の計算要素（又はプロセッサ）によって処理される。しかしながら、本発明はマクロブロック１２の処理に関連させて説明されることが多いが、本発明が並行して処理することができる、ブロックと言われることが多い、如何なる部分への画像及び他のデータの分割をも含むことを認識すべきである。
上記のように、図１の１０８０ｉＨＤフレームのような画像のマクロブロックは、図２Ａ−２Ｂにさらに示されるように、依存データを含む。これらに限定されるものではないが、ｈ．２６４最新式ビデオコード化規格及びＶＣ−１  ＭＰＥＧ−４規格のような規格に従って、画像のブロックＲの処理は、ブロックａ、ｄ、ｂ、及びｃからの依存データ（例えば、補間に必要なデータ等）を必要とする。すなわち、これらの規格に従って、画像の各々のブロックの処理は、すぐ左のブロック、並びに対角線方向にすぐ左上のブロック、真上のブロック、及び対角線方向にすぐ右上のブロックからの依存データを必要とする。したがって、ブロックａはまた、ブロックｄ及びｂからの情報に依存し、ブロックｂは、ブロックｄからの情報に依存し、以下同様であるが、ブロックｄは、その他のどのブロックからの情報にも依存しない。したがって、これらのブロックの並列処理は、ブロックｄがまず処理され、続いてブロックｄに依存するブロックａ及びｂが処理され、次いでブロックａ、ｄ、及びｂからの情報に依存するブロックＲ及びｃが処理され、以下同様に、対角線状の処理を必要とすることが分かる。
【０００９】
次に、図３Ａ−３Ｃを参照すれば、最適な並列処理については、初期ブロックが後期ブロックの前に処理されるように、ブロックを順序正しくプロセッサにマッピングし処理できることが分かる。図３Ａは、画像がビューアに現れる際の、例示的な画像のマクロブロック構造を示す。上記のように、図３Ａのブロックは、後期ブロックについてのその依存データを保持する順に処理される。図３Ｂは、後期ブロックについてのその依存データを保持するために処理されなければならない順に、処理されなければならない対角線を示す。各々の横列は別個の対角線を示し、各々の対角線はその上の横列からの依存データのみを必要とする。例えば、ブロック（）0は、画像の最も左上角に位置するので第１に処理され、依存データをもたない。ブロック０0は、ブロック（）0のみからの依存データを必要とするので、次に処理され、次の横列に現れる。ブロック１1及び１0は、ブロック１1がブロック（）0及び０0からの依存データを必要とし、ブロック１0は、ブロック０0からの依存データを必要とするので、次に処理され、次の横列に現れる。したがって、点線によって強調表示される、図３Ａにおけるブロックの各々の対角線を、図３Ｂに示される並列処理アレイの横列にマッピングできることが分かる。
【００１０】
図３Ｂに示されるように、ブロックを計算要素の横列にマッピングすると、必要とされる全ての依存データが各々の横列の上に保持されるが、依然として難点が存在する。より詳細には、ブロック毎の依存データは、依然として多くの場合、そのブロックに対する異なる位置に位置する。例えば、図３Ａから、ブロック４1が３1、１0、２0、及び３0という時計回りの順に、次のブロックに位置する依存データを有することが分かる。図３Ｂに示されるようにプロセッサにマッピングされるときに、これらのプロセッサは、プロセッサ３1、１0、２0、及び３0がブロック４1の上に「Ｌ字」形状に配置される状態で、矢印によって示されるように配置される。これとは対照的に、ブロック９3についての依存データは、矢印によって示されるように配置される、ブロック８3、８2、７2、及び６2に配置される。これは、各々のブロックが処理アレイ内に示される位置において処理されるように、各々の計算要素は、それに依存データを抽出するように指示するそれ自体のコマンドを必要とすることになることを示す。言い換えれば、ブロック毎の依存データが（ブロック４1及び９3によって示されるように）ブロック毎に異なって配置されるので、別個のデータ抽出コマンドを各々のプロセッサに送り、画像を処理することができる速度に減速しなければならない。
【００１１】
本発明の実施形態においては、そのブロックの処理の前にブロック毎の依存データをシフトすることによって、この問題が克服される。当業者であれば、何らかの方法で依存データをシフトできることを認識するであろう。しかしながら、依存データをシフトする１つの便利な手法は、依存データを含むブロックが上述の「Ｌ字」形状にシフトされる、図３Ｃに示される。すなわち、ブロックＸが処理されるときに、それは、ブロックＡ−Ｄからの依存データを必要とする。画像内では、これらのブロックは、それぞれ、Ｘの真上、すぐ左上、すぐ左、及びすぐ右上に位置する。次に、並列処理アレイ内では、これらのブロックは、それぞれ、Ｘの２つ上のプロセッサ位置、３つ上のプロセッサ位置、１つ上のプロセッサ位置、及びすぐ右上のプロセッサ位置にシフトすることができる。例えば、図３Ｂにおいて、ブロック９3の処理について、ブロック８Xとブロック６Xとを含む横列は、各々が１つ右の位置にシフトして、ブロック８3、ブロック８2、ブロック７2、及びブロック６2を特徴的な「Ｌ字」形状に配置することができる。
【００１２】
ブロックＸの処理前にこのような全ての依存データをこの「Ｌ字」形状にシフトすることによって、同じコマンドの組を用いて、各々のブロックＸを処理することができる。このことは、プロセッサ毎に別個のコマンドの組をロードすることを要求する代わりに、単一のロード動作においてコマンドの組を並列プロセッサにロードするだけでよいことを意味する。このことは、特に大規模な処理アレイについては、画像を処理するときに、かなりの時間の節約をもたらし得る。
当業者であれば、上述の手法が本発明の１つの実施形態に過ぎないことを認識するであろう。より具体的には、データを上述の「Ｌ字」形状にシフトすることができるが、本発明は、この構成へのデータ・ブロックのシフトに限定されるものではないことを認識するであろう。むしろ、本発明は、処理されることになるブロックＸ毎に共通に用いることができる、任意の構成、又は特徴的な位置への依存データのシフトを含む。特に、種々の画像形式は、依存データを図２Ａに示されるもの以外のブロックに位置させて、「Ｌ字」形状以外の他の特徴的な位置又は形状をより使用しやすくすることができる。
【００１３】
当業者であれば、多数のマクロブロックを有する１０８０ｉＨＤフレームの内容でここまで本発明を説明してきたが、本発明は如何なる再分割部分にも分けることができる如何なる画像形式をも含むことも認識するであろう。すなわち、本発明の方法は、如何なるフレームの如何なる再分割部分と併せて用いることもできる。図４Ａ−４Ｅは、種々のタイプのフレームの対角線をどのように様々な数のプロセッサの横列にマッピングできるかを示して、この点を例示する。図４Ａにおいて、ＨＤフレームの対角線は、最大６１のプロセッサが単一の横列に用いられる状態で、２５７の横列のプロセッサが用いられる、台形の（又は代替的に菱形の、又は場合によってはさらにその両方の組み合わせの）レイアウトを生成する、示されるように連続した横列のプロセッサにマッピングすることができる。より小さいフレームは、より少ない横列及びより少ないプロセッサを使用する。例えば、図４Ｂにおいて、ＣＩＦフレームは、最大１９のプロセッサが任意の横列に用いられる状態で、５９の横列のプロセッサを使用する。同様に、図４Ｃにおいて、６２５ＳＤフレームは、並列処理アレイにマッピングされるときに、１１７の横列と、１横列当たり最大３６のプロセッサとを占有することになる。同様に、図４Ｄにおいて、ＳＩＦフレームは、同じアレイにマッピングされるときに、５１の横列と、１横列当たり最大１６のプロセッサとを占有することになる。図４Ｅにおいて、５２５ＳＤフレームは、１０７の横列と、１横列当たり最大３０のプロセッサとを占有することになる。これらの例から分かるように、本発明を用いて、並列処理アレイに如何なる画像をもマッピングし、上述のようにデータを横列にシフトすることができ、単一コマンド又はコマンドの組によってブロックの処理を可能にする。
【００１４】
本発明は、並列処理アレイのブロックと計算要素との間の厳密な１対１の対応関係に限定されるものではないことも認識すべきである。すなわち、本発明は、ブロックの一部が計算要素の一部にマッピングされ、これによりこれらのブロックが処理される効率及び速度を増加させる実施形態を含む。図５Ａ−５Ｂは、画像ブロックが２つに分割される、１つのこのような実施形態を示す。次に、これらの分割部分の各々は、各々の分割部分がプロセッサの半分にマッピングされ処理されることを除けば、上記のように処理される。図５Ａを参照すれば、ブロックは、示されるように、上部半分と下部半分に分割される。すなわち、左上方ブロックは、０及び２の、２つのサブブロックに分割される。同様に、その次のブロックは、サブブロック１及び３に分割され、以下同様である。各々のサブブロックは依存目的のために完全なブロックと同じものとして機能する、すなわち、サブブロック１はブロック０のみからの依存データを必要とし、最も左のサブブロック２がブロック０及び１からの依存データを必要とすること等に注目されたい。次に、図５Ｂを参照すれば、これらのサブブロックは、サブブロック０及び１が第１の横列にマッピングされ、サブブロック２及びサブブロック３が第２の横列にマッピングされ、以下同様である状態で、示されるように、プロセッサの半分にマッピングされる。次に、本発明のプロセスは、サブブロックが必要に応じてプロセッサの横列に沿ってシフトされる状態で、上記と同じ方法で用いることができる。
【００１５】
このように、従来の実施形態におけるより多くのプロセッサが単一の時間において占有されて、より多くの並列処理アレイを使用することを可能にし、よって、より高速の画像処理をもたらすことが分かる。特に、図３Ｂを参照すれば、使用されるプロセッサの数は、１横列おきに１つだけ増加し、すなわち、第１の２つの横列は１横列当たり１つのプロセッサを使用し、次の２つの横列は１横列当たり２つのプロセッサを使用すること等に注目されたい。これとは対照的に、図５Ｂは、その実施形態が、横列毎に１つだけ使用されるプロセッサの数を増加させる、すなわち、第１の横列が１つのプロセッサを使用し、第２の横列が２つを使用すること等を示す。このように、図５Ａ−５Ｂの実施形態は、一度により多くのプロセッサを使用し、さらなる高速処理をもたらす。
図６Ａ−６Ｂは、画像ブロックが４つの再分割部分に分割される、別のこのような実施形態を示す。例えば、画像の左上ブロックは、サブブロック０、２、４、及び６に分割される。次に、これらのサブブロックは、その依存データによって必要な順にプロセッサの一部にマッピングされる。すなわち、各々のプロセッサは、各々がサブブロックの横列を処理することができる４つの「サブ横列」に分割することができる。次に、種々のサブブロックは、示されるように、プロセッサのサブ横列にマッピングすることができる。例えば、０、１、２、及び３のサブブロックは、（第１のプロセッサがサブブロック０、サブブロック１、一方の２のサブブロック、及び一方の３のサブブロックを処理し、第２のプロセッサが他方の２及び３のサブブロックを処理する状態で）全てが第１の横列における２つのプロセッサにマッピングし、それにより処理することができる。この実施形態は、１つの代わりに、第１の横列において２つのプロセッサを用いることと、１横列当たり２だけプロセッサ数が増加し、よって、１横列当たりさらに多くのプロセッサを使用できるようにすることに注目されたい。
【００１６】
本発明は、ブロック及びプロセッサを１６の再分割部分に分割することをさらに含む。さらに、本発明は、「並列の」多数のブロック処理、すなわち、１横列当たりの多数のブロック処理を含む。図７Ａ−７Ｃは、両方のこれらの概念を示す。図７Ａは、示されるように、ブロックを１６のサブブロック（）0−８0に分割することを示す。当業者であれば、別個のブロックは、その依存データを正確に求めることができるように配置される限り、別個に処理できることを認識するであろう。図７Ｂは、関連のないブロック、すなわち、互いからの依存データを必要としないブロックを並行して処理することができることを示す。各々のブロックは、簡単にするためにサブブロックが添字なしに示される状態で、図７Ａにおけるように分割される。ここで、例えば、第１のブロックは、同じ番号が上記のように同時に処理される状態で、０から９まで表記された１６のサブブロックに分割される。各々の横列にあるブロックが互いからの依存データを必要としない限り、それらは、同じ横列において、共に処理することができる。その結果、プロセッサの１つのグループは、同時に多数の関連のないブロックを処理することができる。例えば、（それぞれ０−９、１０−１９、２０−２９、及び３０−３９と表記されたサブブロックを有する）図７Ｂにおける４つのブロックの上部の横列は、単一の組のプロセッサにおいて処理することができる。
（左側に沿って番号付けられた）プロセッサ及びそれらにロードされる対応するサブブロックの図表の図７Ｃがこの点を示す。ここで、（プロセッサが左側に沿って表記される）サブブロック０−９をプロセッサ０−９の再分割部分にロードして、示されたダイヤモンド状のパターンを形成することができる。次に、さらなるブロックは、サブブロック１０−１９がプロセッサ４−１３にロードされる状態等で、重なる組のプロセッサにロードすることができる。このように、ブロックのさらなる再分割部分、並びに重なる組のプロセッサへの多数のブロックの「連鎖」の両方が、より迅速により多くのプロセッサを使用することを可能にし、より高速の処理をもたらす。
【００１７】
図７Ａ−７Ｃは、４×４の処理を示す。同様に、８×８の処理でこの同じ技術を実施することができることを理解すべきである。
異なるプロセッサにおける異なるブロックを処理するのに加えて、同じブロック内の異なるタイプのデータを異なるプロセッサにおいて処理できることにも注目すべきである。特に、本発明は、同じブロックからの強度情報、ルーマ情報、及びクロマ情報の別個の処理を含む。すなわち、１つのブロックからの強度情報は、そのブロックからのルーマ情報とは別に処理することができ、それは、そのブロックからのクロマ情報とは別に処理することができる。当業者であれば、ルーマ及びクロマ情報は、上記のように、プロセッサにマッピングし処理することができ（すなわち、必要に応じて、シフトする等）、処理における効率を増加させるために、再分割部分が異なるプロセッサにマッピングされる状態で、さらに再分割できることに気づくであろう。図８Ａ−８Ｃはこれを示す。図８Ａにおいて、ルーマ・データの１つのブロックは、クロマ・データの対応する「半分のブロック」が同じプロセッサ又は異なるプロセッサにマッピングされる状態で、１つのプロセッサにマッピングすることができる。特に、強度、ルーマ、及びクロマ・データは、図７Ｂと同様に、おそらく少なくとも部分的に重なる組の横列において、隣接する組のプロセッサにマッピングできることに注目されたい。ルーマ及びクロマ情報は、図５Ａ−５Ｂ及び図６Ａ−６Ｂと関連させて記載されたように、個々の計算要素の再分割部分において処理するために、サブブロックに分割することもできる。特に、図８Ｂ−８Ｃは、それぞれ２つ及び４つのサブブロックへの１つのフレームのルーマ及びクロマ・データの分割を示す。次に、図８Ｂの２つのサブブロックは、図５Ａ−５Ｂと関連させて記載されたように、プロセッサの異なる半体において処理することができる。同様に、図８Ｃの４つのサブブロックは、図６Ａ−６Ｂにおいて記載されたもののように、プロセッサの異なる４半体において処理することができる。
【００１８】
上述の実施形態の幾つかはプロセッサの同じ横列による異なるブロックの並列処理を含むが、本発明は、プロセッサの同じ縦列に沿った異なるブロックの処理を含み、処理の効率及び速度を増加させることにも注目すべきである。種々のブロックによって占有されるプロセッサを概念的に示す、図９Ａ−９Ｃは、後半の概念の実施形態を記載する。ここで、プロセッサの横列は、垂直軸に沿って延びる一方で、縦列は、水平軸に沿って延びる。このようにして、典型的なブロックは、処理アレイの横列にマッピングされるときに、領域１００−１０４によって記載された全体的に台形形状のプロセッサを占有することになることが分かる。特に、領域１０４は多数のプロセッサを占有することはなく、よって、処理アレイの全体的な使用を減少させることに注目されたい。このことは、領域１００−１０４を占有するブロックの右下のデータの別のブロックを処理することによって、少なくとも部分的に改善することができる。このブロックは、領域１０６−１１２を占有して、特に次のブロック間の「遷移」領域１０４−１０６において、より多くのプロセッサを使用することを可能にする。このように、領域１００−１０４におけるブロックの処理が完了した後においてのみ、ユーザが領域１０６−１１２のブロックを処理することになる場合より迅速にかつ多くのアレイを使用して処理を達成することができる。
図９Ｂ−９Ｃは、この概念のさらなる拡張部分を示す。特に、マッピングされたブロックのこの垂直的な「連鎖」は、２つ又はそれ以上のブロックにわたって継続し、かなりより高いアレイの使用をもたらすことができることに注目されたい。特に、ブロックは、領域１１６−１２０が１つのブロックによって占有され、領域１２２−１２６が別のブロックによって占有される状態等で、次々と隣接する縦列にマッピングすることができる。
【００１９】
台形形状の代わりに又はそれと組み合わせて菱形形状を用いることができることに注目すべきである。さらに、異なるサイズ又は組み合わせの菱形及び／又は台形によって異なる形式のマッピングのいずれかの組み合わせを実現して、同時に多数の流れ処理を容易にすることができる。
当業者であれば、本発明の上述のプロセス及び方法は、多くの異なる並列プロセッサによって実行できることに気づくであろう。本発明は、各々が画像データのブロックを処理し、このようなデータをシフトして、依存関係を保持することができる多数の計算要素を有する如何なる並列プロセッサによる使用をも考慮する。多くのこのような並列プロセッサが考慮されるが、１つの適切な例が、２００６年１０月１９日に出願された「統合プロセッサ・アレイ、命令シーケンサ、及びＩ／Ｏコントローラ」という名称の米国特許出願第１１／５８４，４８０号に記載され、この開示全体は、引用によりかつあらゆる目的のために本明細書に組み入れられる。
【００２０】
サブブロック並列処理
図１０Ａ−１０Ｃは、サブブロック並列処理に関連する革新を示す。上述のビデオ規格によると、各々のマクロブロック１２は、４つ又はそれ以上のサブブロック２０に分割される状態で、１６の横列掛ける１６の縦列（１６×１６）のデータ・ビット（すなわち、画素）のマトリックスである。具体的には、各々のマトリックスは、サイズが８×８である、少なくとも４つの等しい４象限のサブブロック２０に分けられる。各々の４象限のサブブロック２０は、８×４、４×８、及び４×４であるサイズを有するサブブロック２０にさらに分けることができる。このように、如何なる所与のブロック１２も、８×８、４×８、８×４、及び４×４であるサイズを有するサブブロック２０に分けることができる。
図１０Ａは、１つの８×８のサブブロック２０ａ、２つの４×８のサブブロック２０ｂ、２つの８×４のサブブロック２０ｃ、及び４つの４×４のサブブロック２０ｄを有するブロック１２を示す。各々のサイズのサブブロック２０の数は、もしあれば、変わる場合があり、同じくブロック１２内のその位置も変わる場合がある。さらに、種々のサイズのサブブロック２０の数及び位置は、ブロック１２毎に変わる場合がある。
【００２１】
このように、並列法のサブブロックを有するブロック１２を処理するためには、第１に、サブブロックの位置及びサイズが求められなければならない。これは、ブロック１２毎に行うべき時間のかかる決定であり、かなりの処理のオーバーヘッドをブロック１２の並列処理に付加する。それは、プロセッサに、（幾つかのサブブロック２０が、上述のように、処理するために他のサブブロックからの依存データを必要とする場合があり、そのため種々のサブブロックの位置及びサイズを第１に求めなければならないことに留意して）二度ブロック１２を分析すること、すなわち、一度サブブロック２０の数及び位置を求め、次いで再度正しい順番でサブブロックを処理することを要求する。
この問題を軽減するために、本革新は、ブロック１２内の全サブブロック２０のタイプ（すなわち、位置及びサイズ）を識別するタイプ・データの特別なブロックの挿入を要求し、よって、プロセッサがこの決定を下す必要性を回避する。図１０Ｂは、ブロック１２を示し、場合によっては、任意の所与のサブブロック２０についての第１のデータ位置（まずサブブロック２０の最も左上の入力を意味する）を形成することができる１６のデータ位置２２を示す。ブロック１２毎に、これらの１６の位置２２は、このデータ位置が新しいサブブロック２０の第１の入力となるかどうかのフラグをたてる必要があるデータを含むことになる。位置にフラグがたてられている場合には、この位置は、データ・ブロック２０の開始点と考えられ、そのすぐ左の位置（もしあれば）は、すぐ左のサブブロック２０の最後の縦列と考えられ、真上の位置（もしあれば）は、真上のサブブロック２０の最後の横列と考えられる。それにフラグがたてられていない場合には、この入力は、同じサブブロック２０の継続を示す。したがって、これらの１６のフラグ・データ位置２２は、サブブロック２０の位置及びサイズを求めるのに必要な全データを含むことが分かる。
【００２２】
図１０Ｃは、１６×４のサイズを有する、タイプ・データ２４のブロックが各々のブロック１２と関連付けられる、本革新によるタイプ・データ・ブロックを示す。ブロック２４の４つの横列は、フラグ・データ位置２２を含むブロック１２内の４つの横列に対応する。したがって、タイプ・データ２４のブロックの各々の横列において１番目、５番目、９番目、及び１３番目のデータ位置を分析するだけで、サブブロック２０の位置及びサイズを求めることができる。ブロック１２のさらなる分析は、この目的では必要とされない。さらに、ブロック２０内の残りのデータ位置を用いて、サブブロック・タイプ（Ｉ局所予測されたもの、運動ベクトルによりＰ予測されたもの、及びＢ双方向予測されたもの）、ブロック・ベクトル等のような、他のデータを格納することができる。このように、図１０Ｃから分かるように、新しいサブブロックの始まりとなるそれらのデータ位置２２のみにフラグがたてられ、ブロック２４の各々の横列の１番目、５番目、９番目、及び１３番目のデータ位置は、そのフラグたてと一致する。
【００２３】
類似性アルゴリズム並列処理
並列処理最適化の別のソースは、特定の類似性（例えば、類似計算）を有する同時処理アルゴリズムを含む。コンピュータ処理は、２つの基本計算、すなわち、数値計算とデータ移動とを含む。これらの計算は、数値計算を計算するか又は所望のデータを新しい位置に移動させる（若しくはコピーする）かのいずれかを行う処理アルゴリズムによって実現される。このようなアルゴリズムは、特定の基準が満たされる場合には、１つの計算が行われ、満たされていない場合には、計算が行われないか又は異なる計算が行われるかのいずかを行う、一連の「ＩＦ」文を用いて従来は処理されている。複数のＩＦ文を介して移動することによって、所望の合計計算が、データ毎に実行される。しかしながら、この方法には欠点が存在する。第１に、それは、時間がかかり、並列処理の助けにならない。第２に、ＩＦ文毎に、同様に次の計算に遷移するか又は別の計算が行われるかのいずれかを行う両方の計算が存在するので、それは無駄になる。したがって、アルゴリズムがＩＦ文を介して作るパス毎に、プロセッサの機能（及び貴重なウェーハ空間）の半分もが未使用のままになる。第３に、それは、固有のコードを作成して、アルゴリズムの各々の置換を固有のデータの組の各々に実行するように要求する。
【００２４】
この解決法は、多数の別個の計算又はデータ移動に対する全ての計算を含むアルゴリズムの実行であり、ここでは、データの全ては、場合によっては種々のデータの全てが並行して処理されるように、アルゴリズム内の全てのステップを受ける。次に、選択コードを用いて、アルゴリズムのどの部分がどのデータに適用されることになるかを判断する。このように、同じコード（アルゴリズム）が、一般的には全データに適用され、選択コードは、各々のデータが各々の計算をどのように行うかを判断するように調整される必要があるだけである。ここでの利点は、処理ステップの多くが同じである複数のデータが処理されている場合には、共通の計算と共通でないものの両方を有する１つのアルゴリズム・コードを適用することにより、システムが単純化されることである。この技術を同様なアルゴリズムに適用するためには、類似性は、命令自体に注目することにより、又は、よりきめ細かい表示において命令を表示し、次いで類似性に注目することにより見出すことができる。
【００２５】
図１１Ａ及び図１１Ｂは、上述の概念の例を示す。この例は、（任意のデータ・アルゴリズムについてこの技術を用いることができるが）特定の数値計算が行われる、画素間の中間値を生成するのに用いられる双線形フィルタを含む。アルゴリズムは、数値加算及びデータ・シフト・ステップの同じ基本の組を用いて種々の値を計算する必要があるが、これらのステップの順番及び番号付けは、行われる計算に基づいて異なる。そのため、図１１Ａにおいては、１／２及び３／４Ｂｉ−Ｃｕｂｉｃ式についての第１の計算は、７つの計算ステップを行うことを要求する、番号５３である。第２の計算は、６つの計算ステップを要求し、そのうちの４つが前の計算で行われたものと同じ４つのステップと共通で、それと同じ順である、番号１８である。第１の式についての最後の２つの計算は、再度第１の２つの計算との重なり計算ステップを有する。１／２Ｂｉ−Ｃｕｂｉｃ式についての付加的な計算、並びに図１１Ｂの３つのＢｉ−Ｌｉｎｅａｒ式は、全てが同じ計算ステップの種々の組み合わせを含み、その全てが、行うべき４つの計算を有する。
【００２６】
式毎に、アルゴリズムの各々のステップと関連付けられた選択コードと共に、各々が図１２に示されるそれ自体のメモリ３４をもつ４つの処理要素３２を有する並列プロセッサ３０を用いて４つの計算を実行することができる。４つの変数のうちのどれがそのステップを受けるかを決定する各々のステップと関連付けられた選択コードが存在する。例えば、図１１Ａ及び図１１Ｂの計算に示される９つのアルゴリズム・ステップが存在する。図１１Ａの第１の式について、第１のステップは、第３及び第４の変数にのみ適用され、これは、そのステップと関連付けられた「００１１」の選択コードによって決定される（そのステップ及び変数についてのコードが「１」である場合には、ステップに特定の変数を適用し、「０」の場合には適用しない）。このように、「００１１」の選択コードは、ステップが第３及び第４の変数にのみ適用され、第１及び第２の変数には適用されないことを決定する。第２のステップは、選択コード「０１００」によって決定されるように第２の変数にのみ適用される。同じ方法は、示された選択コードを用いて全ステップ及び全式の変数に適用される。
【００２７】
選択コードを用いる利点は、図１１Ａ及び図１１Ｂに示された２０の種々の計算を行うために２０のアルゴリズム・コード（又は８つの区別できる数値計算を行うために最低限でも８つの異なるアルゴリズム・コード）を生成し、４つの処理要素の各々にそれらのアルゴリズム・コードの各々をロードする代わりに、単一のアルゴリズム・コードを生成しロードする（分散メモリ構成については、多数の処理要素にロードするか又は全処理要素間に共有される単一のメモリ位置にロードするかのいずれかを行う）だけでよいことである。選択コードを、生成し、種々の処理要素にロードして、かなり過度に単純化した、所望の計算を実行すればよい。アルゴリズム・コードは、一度だけ、選択的に、かつ変数の全てに並行して適用されるだけであるため、並列処理の速度及び効率が増加する。
図１１Ａ及び図１１Ｂは、データ計算の適用のための選択コードの使用を示すが、どのアルゴリズム・ステップをデータに適用すべきかを選択的に決定するために用いられる選択コードは、データを移動させるのに用いられるアルゴリズムにも同様に適用可能である。
【００２８】
説明目的のための以上の記載は、本発明の完全な理解を提供するために、特定の術語を用いた。しかしながら、当業者であれば、本発明を実施するために特定の詳細を必要としないことが明らかであろう。したがって、本発明の特定の実施形態の以上の記載は、例証及び記載目的で提示される。それらは、網羅的であること又は本発明を開示される正確な形態に限定することが意図されるものではない。多くの修正及び変形が、上記の教示を考慮して可能である。例えば、本発明を用いて、如何なる画像形式の如何なる再分割部分をも処理することができる。すなわち、本発明は、それらが１０８０ｉＨＤ画像、ＣＩＦ画像、ＳＩＦ画像、又はその他のあらゆるものであっても、どのような形式の並列画像においても処理することができる。これらの画像は、それらが画像のマクロブロック又はその他のあらゆるものであっても、どのような再分割部分にも分けることもできる。同様に、如何なる画像データも、それが強度情報、ルーマ情報、クロマ情報、又はその他のあらゆるものであっても、そのように処理することができる。本発明の原理及びその実用的な適用を最良に説明するために、これらの実施形態を選択し記載し、これにより当業者であれば、考慮される特定の使用に適する種々の修正によって本発明及び種々の実施形態を最良に使用することが可能になる。
【００２９】
本発明は、それらの方法を実行するための方法及び装置の形態として具現することができる。本発明は、プログラム・コードが、コンピュータのような、機械にロードされ、それによって実行されるときに、機械が本発明を実行するための装置となる、フロッピー・ディスケット、ＣＤ−ＲＯＭ、ハード・ドライブ、ファームウェア、又はその他のあらゆる機械可読媒体のような、有形媒体として具現されるプログラムの形態として具現することもできる。本発明は、例えば、記録媒体に格納され、機械にロードされ、及び／又はそれによって実行されるか、又は、電気配線又はケーブルを通じて、光ファイバ、或いは電磁放射を介してといった、何らかの伝送媒体を通じて伝送される、プログラム・コードの形態として具現することもでき、プログラム・コードは、コンピュータのような、機械にロードされ、それによって実行されるときに、機械が本発明を実行するための装置となる。汎用プロセッサ上で実施されるときには、プログラム・コード・セグメントは、特定の論理回路に対して同じように動作する固有のデバイスを提供するためにプロセッサと組み合わされる。
【図面の簡単な説明】
【００３０】
【図１】１０８０ｉ高解像度（ＨＤ）フレームのマクロブロックを概念的に示す。
【図２Ａ】画像フレーム内のマクロブロックのようなブロックの配置をさらに示す。
【図２Ｂ】画像フレーム内のマクロブロックのようなブロックの配置をさらに示す。
【図３Ａ】画像内の配置から個々の並列プロセッサへのマクロブロックのマッピングを示す。
【図３Ｂ】画像内の配置から個々の並列プロセッサへのマクロブロックのマッピングを示す。
【図３Ｃ】画像内の配置から個々の並列プロセッサへのマクロブロックのマッピングを示す。
【図４Ａ】種々の画像形式についての、個々の並列プロセッサへの画像のマッピングを示す。
【図４Ｂ】種々の画像形式についての、個々の並列プロセッサへの画像のマッピングを示す。
【図４Ｃ】種々の画像形式についての、個々の並列プロセッサへの画像のマッピングを示す。
【図４Ｄ】種々の画像形式についての、個々の並列プロセッサへの画像のマッピングを示す。
【図４Ｅ】種々の画像形式についての、個々の並列プロセッサへの画像のマッピングを示す。
【図５Ａ】個々の並列プロセッサへの画像の再分割部分をマッピングするための１６×８マッピングを示す。
【図５Ｂ】個々の並列プロセッサへの画像の再分割部分をマッピングするための１６×８マッピングを示す。
【図６Ａ】個々の並列プロセッサへの画像の再分割部分をマッピングするための１６×４マッピングを示す。
【図６Ｂ】個々の並列プロセッサへの画像の再分割部分をマッピングするための１６×４マッピングを示す。
【図７Ａ】本発明の実施形態に従った、画像ブロックを並列プロセッサにマッピングするための代替的な手法を示す。
【図７Ｂ】本発明の実施形態に従った、画像ブロックを並列プロセッサにマッピングする代替的な手法を示す。
【図７Ｃ】本発明の実施形態に従った、画像ブロックを並列プロセッサにマッピングする代替的な手法を示す。
【図８Ａ】ルーマ及びクロマ情報を含む、画像形式のデータ構造の詳細をさらに示す。
【図８Ｂ】ルーマ及びクロマ情報を含む、画像形式のデータ構造の詳細をさらに示す。
【図８Ｃ】ルーマ及びクロマ情報を含む、画像形式のデータ構造の詳細をさらに示す。
【図９Ａ】本発明の実施形態に従った、多数の画像ブロックを並列プロセッサにマッピングする種々の代替的な手法を示す。
【図９Ｂ】本発明の実施形態に従った、多数の画像ブロックを並列プロセッサにマッピングする種々の代替的な手法を示す。
【図９Ｃ】本発明の実施形態に従った、多数の画像ブロックを並列プロセッサにマッピングする種々の代替的な手法を示す。
【図１０Ａ】本発明の実施形態に従った、データ・ブロックのデータ位置、サブブロック位置、サブブロックのフラグ・データ位置、及びタイプ・データのブロックを示す。
【図１０Ｂ】本発明の実施形態に従った、データ・ブロックのデータ位置、サブブロック位置、サブブロックのフラグ・データ位置、及びタイプ・データのブロックを示す。
【図１０Ｃ】本発明の実施形態に従った、データ・ブロックのデータ位置、サブブロック位置、サブブロックのフラグ・データ位置、及びタイプ・データのブロックを示す。
【図１１Ａ】どの処理ステップがどのデータ変数に適用されるかを識別するためのアルゴリズム処理ステップ及び選択コードを示す。
【図１１Ｂ】どの処理ステップがどのデータ変数に適用されるかを識別するためのアルゴリズム処理ステップ及び選択コードを示す。
【図１２】並列プロセッサを示す。
【図１】
2009523293.tif 000003
【図２Ａ】
2009523293.tif 000004
【図２Ｂ】
2009523293.tif 000005
【図３Ａ】
2009523293.tif 000006
【図３Ｂ】
2009523293.tif 000007
【図３Ｃ】
2009523293.tif 000008
【図４Ａ】
2009523293.tif 000009
【図４Ｂ】
2009523293.tif 000010
【図４Ｃ】
2009523293.tif 000011
【図４Ｄ】
2009523293.tif 000012
【図４Ｅ】
2009523293.tif 000013
【図５Ａ】
2009523293.tif 000014
【図５Ｂ】
2009523293.tif 000015
【図６Ａ】
2009523293.tif 000016
【図６Ｂ】
2009523293.tif 000017
【図７Ａ】
2009523293.tif 000018
【図７Ｂ】
2009523293.tif 000019
【図７Ｃ】
2009523293.tif 000020
【図８Ａ】
2009523293.tif 000021
【図８Ｂ】
2009523293.tif 000022
【図８Ｃ】
2009523293.tif 000023
【図９Ａ】
2009523293.tif 000024
【図９Ｂ】
2009523293.tif 000025
【図９Ｃ】
2009523293.tif 000026
【図１０Ａ】
2009523293.tif 000027
【図１０Ｂ】
2009523293.tif 000028
【図１０Ｃ】
2009523293.tif 000029
【図１１Ａ】
2009523293.tif 000030
【図１１Ｂ】
2009523293.tif 000031
【図１２】
2009523293.tif 000032
【国際調査報告】
2009523293.tif 000033