(57)【要約】【課題】複数のプロセッサ、キャッシュメモリ及び共有メモリを有したマルチプロセッサシステムで画像処理を行うときに、ハードウェア規模の増大を防ぎ、効率よくキャッシュメモリおよび共有メモリの整合性を管理できるメモリ管理システムを提供することである。【解決手段】複数のプロセッサ１０１〜１０５と、複数のプロセッサ１０１〜１０５からアクセス可能な共有メモリ１３１と、を具備し、複数のプロセッサの各々のプロセッサは、指定領域の破棄と書戻しをプログラムから命令できるキャッシュメモリ１１１〜１１５を備え、各々のプロセッサ上で動作するプログラムは、処理単位となるプログラムの実行直前で、キャッシュメモリの入力データ領域を破棄命令にて破棄し、処理単位となるプログラムの実行直後で、キャッシュメモリの出力データ領域を書戻し命令にて共有メモリに書戻す。【選択図】図１
2008204292.tif 000002
【特許請求の範囲】
【請求項１】
複数のプロセッサと、
前記複数のプロセッサからアクセス可能な共有メモリと、を具備し、
前記複数のプロセッサの各々のプロセッサは、
指定領域の破棄と書戻しをプログラムから命令できるキャッシュメモリを備え、
前記各々のプロセッサ上で動作するプログラムは、
処理単位となるプログラムの実行直前で、前記キャッシュメモリにおける入力データを格納した入力データ領域を、前記の指定領域の破棄命令を用いて破棄し、
処理単位となるプログラムの実行直後で、前記キャッシュメモリにおける出力データを格納した出力データ領域を、前記の指定領域の書戻し命令を用いて前記共有メモリに書戻す、
ことを特徴とするメモリ管理システム。
【請求項２】
請求項１記載のメモリ管理システムにおいて、
前記複数のプロセッサの各々のプロセッサ上で動作するプログラムは、
前記キャッシュメモリにおける処理単位の入力データ領域及び出力データ領域を、プログラムの実行順序を制御する依存情報テーブルの入出力関係から求める、
ことを特徴とするメモリ管理システム。
【請求項３】
請求項１記載のメモリ管理システムにおいて、
前記複数のプロセッサの各々のプロセッサ上で動作するプログラムは、
前記キャッシュメモリにおける処理単位の入力データ領域及び出力データ領域を、動画像符号化ストリームのヘッダ情報の内容に基づいて処理単位となるプログラムが使用する入力データと計算結果としての出力データとの入出力関係から求める、
ことを特徴とするメモリ管理システム。
【請求項４】
請求項１記載のメモリ管理システムにおいて、
前記複数のプロセッサの各々のプロセッサ上で動作するプログラムは、
連続的に行う２つの処理単位となるプログラムについて、同一プロセッサ上で、先行する処理単位となるプログラムの処理結果を後続の処理単位となるプログラムが利用する場合、前記キャッシュメモリにおける入力データを格納した入力データ領域の破棄を省略する、
ことを特徴とするメモリ管理システム。
【請求項５】
複数のプロセッサと、
前記複数のプロセッサからアクセス可能な共有メモリと、を具備し、
前記複数のプロセッサの各々のプロセッサは、指定領域の破棄と書戻しをプログラムから命令できるキャッシュメモリを備え、
前記共有メモリは、プログラムの実行順序を制御する依存情報テーブルと、この依存情報テーブルによる依存解決処理に基づいて実行可能と判定された処理単位のプログラムを格納するキューとを備え、
前記プログラムが、前記依存情報テーブルと前記キューを用いて、複数のプロセッサで処理される処理単位のプログラムに関して互いに依存関係にない処理単位のプログラムについては同時に動作させるようにし、互いに依存関係にある処理単位のプログラムについては同時に動作させないようにし、
前記各々のプロセッサが、前記キャッシュメモリに書き込みを行う際には、前記プログラムが、処理単位のプログラムの実行直前及び実行直後それぞれのタイミングでそれぞれ破棄及び書戻しの命令を発行し、前記キャッシュメモリの内容と前記共有メモリの内容の整合を可能とする、
ことを特徴とするメモリ管理システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のプロセッサ、キャッシュメモリ及び共有メモリを有したマルチプロセッサシステムにおいて、効率的なキャッシュメモリの管理を可能とするメモリ管理システムに関するものである。
【背景技術】
【０００２】
プロセッサの処理性能を上げるため、動作速度の遅いメインメモリ（主記憶領域）とプロセッサとの間に高速アクセスが可能なキャッシュメモリを設け、プロセッサがメインメモリにアクセスする頻度を少なくすることが行われている。
【０００３】
キャッシュメモリに対するデータの書き込み方式にはライトスルー方式とライトバック方式がある。ライトスルー方式は、メインメモリへの書き込みが発生したときに、キャッシュメモリとメインメモリの両方に対して書き込みを行う方式である。
【０００４】
ライトバック方式は、メインメモリへの書き込みが発生したときに、まず、キャッシュメモリにのみ書き込みを行い、次にメインメモリへ書き込みを行う方式である。このライトバック方式は、読み出し時間だけでなく、書き込み時間をも短縮することができるため、キャッシュメモリの高速性を活かすことができる。しかし、このライトバック方式では、キャッシュメモリとメインメモリとの間のデータの整合性を取る制御を行う必要がある。例えば、キャッシュメモリのデータをフラッシュ（解放）するときなどは、キャッシュメモリを無効化した上で、キャッシュメモリのデータをメインメモリに書き戻す必要がある。
【０００５】
キャッシュメモリの無効化をする場合に無効化にかかる時間を短縮する技術として、ラインインデックスを生成するカウンタを用いてすべてのキャッシュラインのタグアドレスを順に読み出し、設定されたアドレスの範囲に該当するかをチェックし、該当するキャッシュラインを無効化するキャッシュメモリ装置が提案されている。
【０００６】
複数のマイクロプロセッサを含むマルチコアシステムでそれぞれのコアに対してキャッシュメモリを持つと、共有メモリとキャッシュメモリ、キャッシュメモリとキャッシュメモリの間のデータの整合性（コヒーレンシーと呼ばれる）を保つ機構が必要になる。一般的なマルチコアシステムを対象にしたキャッシュ管理技術としては、特許文献１のように排他アクセスと共用状態を管理する仕組みを組み込む技術がある。
【０００７】
しかし、画像処理におけるデータアクセスのパターンは、画像処理がデータフロー処理であるという特性上(特に動画像の復号処理では)実際にデータにアクセスする前に、パラメータ等の情報から特定することが可能であるという特徴を生かしていないため、画像処理プログラムのもつメモリアクセスの空間的局所性および時間的局所性を十分に利用することができていない。そのため、キャッシュメモリの利用効率が低くなるという問題がある。
【０００８】
キャッシュメモリの利用効率の低下を補う方法としては、キャッシュ情報を入手して画像ブロック情報からキャッシュの重複をみつけて利用効率を向上させる技術も存在するが、重複判定を行うためのハードウェアは４つを超えるマルチコアシステムで使用すると４×４＝１６の組合せで重複を検出するハードウェアが必要となり規模が大きくなるため利用することができない。
【特許文献１】特開２００５−１４８７７１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００９】
そこで、本発明は上記の問題に鑑みてなされたもので、複数のプロセッサ、キャッシュメモリ及び共有メモリを有したマルチプロセッサシステムで画像処理を行うときに、ハードウェア規模を増大させることなく、効率よくキャッシュメモリおよび共有メモリの整合性を管理することができるメモリ管理システムを提供することを目的とする。
【課題を解決するための手段】
【００１０】
本願発明の一態様によれば、複数のプロセッサと、前記複数のプロセッサからアクセス可能な共有メモリと、を具備し、前記複数のプロセッサの各々のプロセッサは、指定領域の破棄と書戻しをプログラムから命令できるキャッシュメモリを備え、前記各々のプロセッサ上で動作するプログラムは、  処理単位となるプログラムの実行直前で、前記キャッシュメモリにおける入力データを格納した入力データ領域を、前記の指定領域の破棄命令を用いて破棄し、処理単位となるプログラムの実行直後で、前記キャッシュメモリにおける出力データを格納した出力データ領域を、前記の指定領域の書戻し命令を用いて前記共有メモリに書戻す、ことを特徴とするメモリ管理システムが提供される。
【００１１】
本願発明の他の態様によれば、複数のプロセッサと、前記複数のプロセッサからアクセス可能な共有メモリと、を具備し、前記複数のプロセッサの各々のプロセッサは、指定領域の破棄と書戻しをプログラムから命令できるキャッシュメモリを備え、前記共有メモリは、プログラムの実行順序を制御する依存情報テーブルと、この依存情報テーブルによる依存解決処理に基づいて実行可能と判定された処理単位のプログラムを格納するキューとを備え、前記プログラムが、前記依存情報テーブルと前記キューを用いて、複数のプロセッサで処理される処理単位のプログラムに関して互いに依存関係にない処理単位のプログラムについては同時に動作させるようにし、互いに依存関係にある処理単位のプログラムについては同時に動作させないようにし、前記各々のプロセッサが、前記キャッシュメモリに書き込みを行う際には、前記プログラムが、処理単位のプログラムの実行直前及び実行直後それぞれのタイミングでそれぞれ破棄及び書戻しの命令を発行し、前記キャッシュメモリの内容と前記共有メモリの内容の整合を可能とする、ことを特徴とするメモリ管理システムが提供される。
【発明の効果】
【００１２】
本発明によれば、複数のプロセッサ、キャッシュメモリ及び共有メモリを有したマルチプロセッサシステムで画像処理を行うときに、ハードウェア規模を増大させることなく、効率よくキャッシュメモリおよび共有メモリの整合性を管理することができるメモリ管理システムを実現することができる。
【発明を実施するための最良の形態】
【００１３】
発明の実施の形態について図面を参照して説明する。  
［第１の実施形態］
図１は本発明の第１の実施形態のメモリ管理システムが適用される画像処理装置のブロック図を示している。図２はＨＯＳＴタスクの動作（構文解析コアの動作）を説明するフローチャート、図３はＰＥタスクの動作（信号処理コアの動作）を説明するフローチャートである。図４は依存情報テーブルを示している。図５はストリームの構文解析処理、図６は直交変換の信号処理ステージ、図７は動き補償の信号処理ステージ、図８は残差加算の信号処理ステージ、図９は画面内予測の信号処理ステージ、図１０はデブロッキングフィルタ（ＤＢＦ）の信号処理ステージを示している。
【００１４】
画像処理装置は、画像符号化ストリームに符号化された画像を入力とし、表示可能な復号画像を出力する復号器である。  
画像処理装置は、ビットストリームに符号化された画像データを入力データとし、所定の出力装置（例えば、液晶ディスプレイ）に表示可能な復号画像データを出力するデコーダとしての機能を有し、構文解析コア１０１、第１の信号処理コア１０２、第２の信号処理コア１０３、第３の信号処理コア１０４、第４の信号処理コア１０５、キャッシュメモリ１１１〜１１５及び共有メモリ１３１を備え、それぞれがバス（又はインターコネクト）１２１を介して接続されるものである。
【００１５】
構文解析コア１０１、第１の信号処理コア１０２、第２の信号処理コア１０３、第３の信号処理コア１０４、及び、第４の信号処理コア１０５はプロセッサである。また、キャッシュメモリ１１１は、構文解析コア１０１用のキャッシュメモリである。同様に、キャッシュメモリ１１２は第１の信号処理コア１０２用のキャッシュメモリであり、キャッシュメモリ１１３は第２の信号処理コア１０３用のキャッシュメモリであり、キャッシュメモリ１１４は第３の信号処理コア１０４用のキャッシュメモリであり、キャッシュメモリ１１５は第４の信号処理コア１０５用のキャッシュメモリである。尚、本実施形態では、構文解析コア１０１、第１の信号処理コア１０２、第２の信号処理コア１０３、第３の信号処理コア１０４、及び、第４の信号処理コア１０５の５つのプロセッサを有する構成を示したが、本発明の趣旨を逸脱しない範囲で、任意の数のプロセッサ構成を取ることが可能である。
【００１６】
共有メモリ１３１は、先に明記した複数のコア（構文解析コア１０１、第１の信号処理コア１０２、第２の信号処理コア１０３、第３の信号処理コア１０４、第４の信号処理コア１０５）からアクセス可能な共有のメモリであって、実行可能キュー１３２、依存情報テーブル１３３、ＨＯＳＴタスク１３４、ＰＥタスク１３５、画像処理内容のプログラムモジュールであるステージ１３６〜１３８、及び、その他の各種データを記憶するものである。
【００１７】
実行可能キュー１３２は、どの画像処理を行うべきか（すなわち、どのステージを起動すべきか）についての命令（情報）が書き込まれるものであって、キュー構造（先入れ先出し）のデータ列として書き込まれる。本実施形態では、実行可能な（他の信号処理との依存関係が解決された）処理単位のプログラムとしてのステージが登録（記憶）される。
【００１８】
依存情報テーブル１３３は、依存情報作成処理（図１３を参照）において作成される情報であって、ある画像処理について、構文解析処理又は他の信号処理（ステージ）との間の依存関係の解決状況(ある画像処理に必要な入力データが構文解析処理又は他の信号処理の出力データとして出力されたか否か)（図１４を参照）を含む依存情報の表（図４を参照）をマクロブロック毎に備えたものである。
【００１９】
ＨＯＳＴタスク１３４は、ステージの実行依頼（キュー１３２へのステージの追加）をするＨＯＳＴタスク処理（図２を参照）を行うためのプログラムモジュールであって、構文解析コア１０１により起動されるものである。
【００２０】
ＰＥタスク１３５は、ＨＯＳＴタスク処理において行われたステージの実行依頼を受け取って画像処理を実行するとともに、他のステージの実行依頼（キュー１３２への他のステージの追加）をするＰＥタスク処理（図３を参照）を行うためのプログラムモジュールであって、第１の信号処理コア１０２乃至第４の信号処理コア１０５の各々により起動されるものである。
【００２１】
ステージ１３６〜１３８は、実行可能キュー１３２に格納される信号処理ステージ（図６〜図１０を参照）を行うためのプログラムモジュールであって、第１の信号処理コア１０２乃至第４の信号処理コア１０５の各々により起動されるものである。
【００２２】
以上の構成において、入力される画像符号化ストリームは構文解析コア１０１にて構文解析されて、必要なパラメータ（図５の「構文解析処理参照」）が取り出され、そのパラメータはキャッシュメモリに書き込まれた後、共有メモリ１３１に書き込まれる。引き続いて、図２のＨＯＳＴタスクの動作が行われ、構文解析の結果を用いて図３の依存情報テーブル１３３の作成処理及び依存解決処理がなされ、他の信号処理との依存関係が解決された実行可能なステージがあれば、実行可能（ready）キュー１３２に格納することによって登録しいていく。そして、ＨＯＳＴタスク１３４からＰＥタスク１３５へ実行依頼を出してＰＥタスク１３５がそれぞれのステージを実行することで、画像処理（復号処理）を行って、表示可能なデコード画像データを出力する。
【００２３】
従って、本実施形態では、大量の情報を高速に処理可能とするために、構文解析コア１０１及び第１の信号処理コア１０２乃至第４の信号処理コア１０５を含む複数のコアと、この複数の第１の信号処理コア１０２乃至第４の信号処理コア１０５からアクセス可能な共有メモリ１３１と、を具備し、複数のコアの各々のコアは、指定領域の破棄（無効化と同義）と書戻しをプログラムから命令できるキャッシュメモリ１１１〜１１５を備え、共有メモリ１３１は、プログラムの実行順序を制御する依存情報テーブル１３３と、この依存情報テーブルによる依存解決処理に基づいて実行可能と判定された処理単位のプログラム（＝ステージ）を格納するキュー１３２とを備え、プログラムが、依存情報テーブル１３３とキュー１３２を用いて、複数のコアで処理される処理単位のプログラムに関して互いに依存関係にない処理単位のプログラムについては同時に動作させるようにし、互いに依存関係にある処理単位のプログラムについては同時に動作させないようにし、各々のコアが、キャッシュメモリに書き込みを行う際には、プログラムが、処理単位のプログラムの実行直前及び実行直後それぞれのタイミングで破棄及び書戻しそれぞれの命令を発行し、キャッシュメモリの内容と共有メモリの内容の整合を取るようにすることを特徴とする。
【００２４】
以下、さらに詳しく説明する。  
画像処理装置は、画像符号化ストリームから構文解析を行って、復号を行うために必要なパラメータを取り出す構文解析処理部と、取り出されたパラメータを元に信号処理計算を行って復号画像を算出する信号処理部と、の２つの部分から構成される。
【００２５】
これらの構文解析処理部と信号処理部は、構文解析処理を実行することを主な目的とした構文解析コア１０１と、画像信号処理を実行することを主な目的とした第１の信号処理コア１０２、第２の信号処理コア１０３、第３の信号処理コア１０４、第４の信号処理コア１０５と、コア１０１〜１０５のそれぞれに対応して設けられ、各々対応したコアからのみ参照可能なキャッシュメモリ１１１〜１１５と、全てのコアから参照可能な共有メモリ１３１と、以上を接続するバス(又はインターコネクト)１２１と、排他制御を行うためのテストアンドセット，セマフォ等のハードウェア機構(図示せず)と、で構成される計算機システム上で動作する。なお、排他制御とは、画像処理実行中のプログラムモジュールに対してその処理中のコア以外の他のコアからの読み出しや書き込みを防ぐ制御を言い、排他制御を設定することをロックと呼び、排他制御を解除（解放）することをアンロックと呼ぶ。
【００２６】
共有メモリ１３１上には、構文解析処理および画像信号処理に必要な手続きを入出力が明確な単位で分割したプログラムモジュールであるステージ１３６〜１３８と、構文解析コア１０１上で動作してステージ１３６〜１３８の実行を依頼するプログラムモジュールであるＨＯＳＴタスク１３４と、第１の信号処理コア１０２乃至第４の信号処理コア１０５上で動作してステージ１３６〜１３８の実行依頼を受け取りステージの実行を開始する機能および実行後にステージの実行を依頼する機能を持つプログラムモジュールであるＰＥタスク１３５と、をプログラムとして格納している。
【００２７】
さらに、共有メモリ１３１上には、ステージ１３６〜１３８間の依存関係および依存解決状況を記録するための依存情報の表(テーブル)であって、プログラムの実行順序を制御する依存情報テーブル１３３と、依存解決処理によって実行可能と判定されたステージを登録する実行可能(ready)キュー１３２と、を格納する。なお、ステージは、処理単位のプログラムである。
【００２８】
キャッシュメモリ１１１〜１１５は、対応する各コア１０１〜１０５からのみ読み書き可能な(共有メモリ１３１と比べて)高速で小容量のメモリである。以後、キャッシュメモリを単にキャッシュと略記することがある。指定アドレスのデータがキャッシュメモリ上で“無効”の場合、共有メモリ１３１にアクセスしてデータを取得してコアに返し、“有効”の場合はキャッシュメモリ上にあるデータをコアに返す。
【００２９】
また、各コアは、プログラムから指定したキャッシュデータ領域（入力データ領域）の“破棄”(無効化と呼ばれる)と、プログラムから指定したキャッシュデータ領域（出力データ領域）に書かれたデータの共有メモリ１３１への“書戻し”(ライトバックと呼ばれる)を指示できる。つまり、プログラムが使用する入力データを格納したメモリ領域としての入力データ領域に対し、指定領域の破棄命令を使用して、キャッシュメモリから、データを破棄し、プログラムの計算結果である出力データを格納したメモリ領域としての出力データ領域に対し、指定領域の書戻し命令を使用して、キャッシュメモリから、データを共有メモリへ書戻す。
【００３０】
なお、入力データ領域及び出力データ領域については、後述するように、元来、共有メモリ上に形成されている（図２２参照）が、これらの入出力データ領域に対応するキャッシュメモリ上のデータ領域（メモリ領域）も同様に入力データ領域及び出力データ領域と呼んでいる。ただし、キャッシュメモリ上には、入力データ領域及び出力データ領域の２つの領域が常に存在するわけではなく、データの入出力それぞれの動作に応じてキャッシュメモリ上に入力データ領域又は出力データ領域が設定される。つまり、プログラムから見て、プログラムから出力する（書き込む）対応部分のメモリ領域を出力データ領域とし、プログラムに入力する（読み込む）対応部分のメモリ領域を入力データ領域としている。
【００３１】
本実施形態は、H.264復号器を実現したものであり、構文解析ステージとしてH.264/AVC Syntax解析ステージを、信号処理ステージとして、画面内予測ステージ、直交変換ステージ、動き補償ステージ、残差加算ステージ及びデブロッキングフィルタ(DBF)ステージを、有している（図５〜図１０参照）。
【００３２】
H.264の復号処理においては、マクロブロック(MB)と呼ばれる単位を基本として復号処理が行われる。マクロブロックについては、図１１の「フレームとマクロブロックアドレス」参照。（図１１における０〜９８までの９９個の数字がマクロブロックアドレスであり、以降ＭＢに続いて添え字0〜98がある場合はそのアドレスのマクロブロックであることを示す。）このマクロブロックごとに、画面内予測ステージを使用する(画面内予測,Ｉ)または動き補償ステージを使用する(画面間予測,Ｐ)のいずれを使用するのかが、ストリーム上で指定されるパラメータによって選択され、それぞれ異なったステージ構成で復号処理を行う。また、構文解析ステージでDBFステージの動作モード(BS値)が０と判定された場合、DBFステージを必要としない場合もある。
【００３３】
構文解析ステージは、符号化画像ストリームを入力として画面内予測または画面間予測のいずれを選択するか、DBFの使用を選択するか、直交変換ステージで使用する係数の行列(Coeff)、画面内予測の場合は画面内予測モード、画面間予測の場合は動きベクトル、デブロッキングフィルタ(DBF)ステージの動作モード(BS値)を出力する(図５の「ストリームの構文解析処理」参照)。
【００３４】
直交変換ステージは、マクロブロックのCoeffを入力として直交変換および逆量子化後の残差ブロックを出力する(図６の「直交変換の信号処理ステージ」参照)。
【００３５】
動き補償ステージは、動きベクトルを入力として参照画像を元に動き補償を行い、予測画像を出力する(図７の「動き補償の信号処理ステージ」参照)。
【００３６】
残差加算ステージは、残差ブロックおよび予測画像を入力として、それらの画素同士の加算を行い、復号画像を出力する(図８の「残差加算の信号処理ステージ」参照)。
【００３７】
画面内予測ステージは、画面内予測モード、左(方向Ａ)，上(方向B)，右上(方向C)，左上(方向Ｄ)の近傍マクロブロック(図１２の「マクロブロック近傍」参照)の復号画像を入力としてMBの復号画像を出力する(図９の「画面内予測信号処理ステージ」参照)。図１２でCurrは現在のMBである。近傍マクロブロックはA,B,C,D（図１２）の全ての方向が必ず参照されるわけではなく、画面内予測モードおよびマクロブロックの位置によって、参照しない方向が決定できる。
【００３８】
デブロッキングフィルタステージ(DBFステージ)は、復号画像および、左(方向Ａ)，上(方向B)の近傍マクロブロックのDBF済み復号画像を入力として入力された復号画像を対象にDBFをかけて、DBF済み画像を出力する(図１０の「デブロッキングフィルタ(DBF)信号処理ステージ」参照)。
【００３９】
依存情報テーブル１３３は、ステージ１３６〜１３８間の依存関係の解消状況(あるステージS0（例えば符号136）が使用する各データが利用可能になったかどうかの状況を表す)を記録する。例えば、図４の「依存情報テーブル」のような形で、ステージの有効/無効および、ステージ間の依存関係の解消状況（ステージ実行完了情報が実行済みとなる状況）を記録する。依存情報作成処理及び依存解決処理については、後述する。
【００４０】
ステージごとに有効/無効が設定された行のステージは、有効または無効になることを示す。無効と設定されている間、ステージは実行可能ステージになることはない。図４の列方向のステージがすべて完了（実行済み）すると、行方向のステージが実行可能になったことを表す。例えば画面内予測ステージは、現在でコード対象となっているマクロブロックの残差ブロックを出力する直交変換ステージと、予測画像を作成するための周辺マクロブロック(左，上，右上，左上)の画面内予測ステージの５ステージに依存する（図４参照）。あるコアがこの依存情報テーブル１３３を参照・更新する場合は、依存情報テーブル１３３のロックを取得して、他の全てのコアと排他に参照・更新する。このときのロックは、依存情報テーブル１３３が参照・更新しているコア以外のコア（例えば、第１の信号処理コア１０２により依存解決処理が実行されている場合は、構文解析コア１０１及び第２の信号処理コア１０３乃至第４の信号処理コア１０５）による依存情報の読み出し及び書き込みを防止するために行われる。
【００４１】
実行可能キュー１３２は、あるステージS0（例えば符号136）が使用する(依存する)データが全て利用可能な状態になった(依存が解消された)時に、その実行可能となったステージを登録する先入れ先出しのキューである。あるコアが、キューヘのステージの追加(実行依頼)とキューからのステージの取り出し(依頼受付)を行う際には、実行可能キュー１３２のロックを取得して、他の全てのコアと排他に参照・更新する。このときのロックは、キューに対するステージの追加及び取り出しを行っているコア以外のコアによるキューの読み出し及び書き込みを防止するために行われる。
【００４２】
次に、ＨＯＳＴタスクの動作について説明する。  
ＨＯＳＴタスク１３４は、構文解析コア１０１で動作するプログラムモジュールである。図２は、ＨＯＳＴタスクの動作のフローチャートを示している。
【００４３】
ステップＳ1：ＨＯＳＴタスク１３４は構文解析ステージを実行する。これによって画像符号化ストリームが解析され、必要なパラメータが取り出される。  
ステップＳ2：構文解析ステージが終了したら、構文解析ステージが出力したデータを保存しているキャッシュデータ領域を指定して、共有メモリ１３１に書き戻す。  
ステップＳ3：依存情報テーブル１３３のロックを取得した上で、ステージ間の依存情報を作成（後述の図１３参照）し、実行可能の可否及び実行順序決定に係る依存解決処理（後述の図１４参照）を行って、再びロックを解放する。
【００４４】
ステップＳ4：依存解決処理によって実行可能なステージがあったかを判定する。実行可能なステージが無い場合は、ステップＳ1に戻る。  
ステップＳ5〜Ｓ7：実行可能と判定されたステージがある場合、実行可能キュー１３２のロックを取得した上で、実行可能になったステージを実行可能キュー１３２に登録し、新たにステージを登録したことを他のコア１０２〜１０５ヘ通知を行い、実行可能キュー１３２のロックを解放する。  
その後に、ステップＳ1に戻る。
【００４５】
次に、ＰＥタスクの動作について説明する。  
ＰＥタスク１３５は、信号処理コアで動作するプログラムモジュールである。図３は、ＰＥタスクの動作のフローチャートを示している。  
ステップＳ11〜Ｓ12：実行可能キュー１３２のロックを取得した上で、実行可能キュー１３２にステージが登録されているかチェックする。
【００４６】
ステップS13〜S14：実行可能キュー１３２にステージが登録されている場合、実行可能キュー１３２からステージを取り出して、ロックを解放し、ステップS15を実行する。
【００４７】
ステップS23〜S25 ：ステップS12で実行可能キュー１３２にステージが登録されていない場合、実行可能キュー１３２のロックを解放し、他のコアから新たにステージを登録したことが通知されるまで待ち合わせを行い、新たにステージを登録したことが通知されるとステップＳ11に戻る。
【００４８】
ステップS15：実行可能キュー１３２から取り出したステージが依存しているキャッシュデータ領域のデータを“破棄”し、共有メモリ１３１から読み出す(そのキャッシュデータ領域を最初にアクセスする場合は必ず共有メモリ１３１にあるデータを参照する)。このときのキャッシュデータ領域は、キャッシュメモリ上のプログラムから見ての入力データ領域である。  
ステップS16：ステージを実行する。ステージ実行中には、プログラムによるキャッシュデータの破棄およびキャッシュデータの書戻しを行う必要はない。  
ステップS17：ステージが終了したら、ステージが出力したデータを保存しているキャッシュデータ領域を指定して、共有メモリ１３１に書き戻す。このときのキャッシュデータ領域は、キャッシュメモリ上のプログラムから見ての出力データ領域である。  
ステップS18：依存情報テーブル１３３のロックを取得した上で、依存解決処理（図１４参照）を行って、再びロックを解放する。
【００４９】
ステップS19：依存解決処理によって実行可能なステージがあったかを判定する。  
ステップS20〜S22：依存解決処理によって実行可能と判定されたステージがある場合、実行可能キュー１３２のロックを取得した上で、実行可能になったステージを実行可能キュー１３２に登録（追加）と、新たにステージを登録したことを他のコアヘ通知を行い、実行可能キュー１３２のロックを解放する。  
その後に、ステップＳ11に戻る。
【００５０】
次に、ＱＣＩＦサイズ（横MB数９×縦MB数11）の画像（図１１参照）におけるMB0（最左上MB）のＩスライスの復号処理における実施例を説明する。Ｉスライスは、H.264/AVCにおいて、画面内予測のみで符号化したスライスである。  
画面内予測を行う場合でも、画面左上のマクロブロックMB0 は画面外に対してはデータ依存が生じないのでマクロブロック間のデータ依存が生じない。
【００５１】
図１５は「ＩスライスMB0の復号処理内容」を示している。図１５において、四角がデータを示し、丸が処理ステージを示す。データおよびステージ間の矢印はデータの流れを示しており、矢印方向にデータの依存関係があることを示している。ここで、依存関係とは、データの定義・使用関係により生じる一種の実行順序関係である。  
復号処理は以下の４ステップを、構文解析コア１つ、信号処理コア３つで各コアが協調動作して復号処理を行う。
【００５２】
ステップ1. MB0に相当する画像符号化ストリームを入力として構文解析を行い、MB0 のCoeff，予測モード，BS値を出力する。  
ステップ2. MB0のCoeffを入力として直交変換を行い、MB0の残差ブロックを出力する。  
ステップ3. MB0の残差ブロックおよびMB0の予測モードを入力として画面内予測を行い、MB0の復号画像を出力する。  
ステップ4. MB0の復号画像およびBS値を入力としてDBFを行い、DBF済み復号画像を出力する。
【００５３】
図１６は、図１５の復号処理のシーケンス図（ＩスライスのMB0 近辺）を示している。
【００５４】
図１６のシーケンス図において、左から、「実行待ちキュー」レーンとして示してある実行可能キューレーンは、実行可能キュー１３２にアクセスしているコアが何であるかを四角で示している。「依存解決器」レーンとして示してある依存情報テーブルレーンは、依存情報テーブル１３３にアクセスしているコアが何であるかを四角で示している。「構文解析コア」のレーンは、構文解析コアで何の処理が行われているかを四角で示し、「第１乃至第３の信号処理コア」の各レーンは、各信号処理コアで何の処理が行われているかを示している。この図１６では、縦方向の上から下へ順番に処理が進む（時間が経過する）ことを示す。（四角の大きさが時間に比例しているわけではない）。したがって、左右方向（横方向）は同じ時間を示している。
【００５５】
図１６では、「実行待ちキュー」レーンに上から下へ時間順に示されている構文解析コア，第１の信号処理コア，第１の信号処理コア，第２の信号処理コア，構文解析コア，…は、それぞれの時間においてそれぞれのコアが実行可能キュー１３２を使用していることを表しており、同様に、「依存解決器」レーンに上から下へ時間順に示されている構文解析コア，第１の信号処理コア，構文解析コア，第２の信号処理コア，…は、それぞれの時間においてそれぞれのコアが依存解決器としての依存情報テーブル１３３を使用していることを表している。
【００５６】
コア間で互いに競合しない（依存関係にない）処理の例としては、図１６の例えば「実行待ちキュー」レーンの上から３つ目に示されている第１の信号処理コア（図１の符号１０２）は「第１の信号処理コア」レーンのMB0 実行依頼処理を行っており、そのとき同じ行（同じ時間）に示されている「依存解決器」レーンの構文解析コアは「構文解析コア」レーンのMB1依存解決処理を行っている。  
以下の説明で(1)〜(16)及び※１〜※３は図１６の中において用いられている符号(1)〜(16)及び※１〜※３と一致している。
【００５７】
構文解析コア１０１は図２の「HOSTタスクの動作」に示す手続きに従って、MB0に対して以下のように動作する。  
（1）MB0の構文解析ステージを実行し、スライス情報（ＰスライスなのかＩスライスなのか）と、MB0のCoeff、予測モード、BS値を出力する。  
（2）MB0の構文解析ステージの依存解決処理を行う。依存情報テーブル１３３の読み書きはキヤッシュメモリを介さずに直接共有メモリ１３１を参照・更新する。
【００５８】
（2.1）依存情報テーブル１３３のロックを取得する。  
（2.2）図１３の「依存情報作成処理」の手続きに従って依存情報作成処理を行う。ここで、図１３の「依存情報作成処理」のフローチャートを説明する。
【００５９】
ステップＳ31：ステージ項目有効/無効を設定する。  
ステップＳ32：依存元ステージ完了情報を設定し、処理を終了する。  
.図１７は「MB0依存情報テーブルの初期状態」を示している。また、図１８は「MB0依存情報テーブルの依存解決処理後」の状態を示している。
【００６０】
MB0構文解析ステージの結果からＩスライス（画面内予測のみを使用するスライス）であると判定し、ステージの有効性フィールドに直交変換を有効，動き補償を無効，残差加算を無効，画面内予測を有効，DBFを有効に設定する。  
MB0は画面最左上に位置するため、画面内予測の左MB、上MB、左上MB、右上MB、及び、DBFの左MB、上MBそれぞれに「済」の印をつける。DBFの残差加算ステージ欄に「済」の印をつける。
【００６１】
（2.3）図１９は「MB0依存情報テーブルの構文解析の依存解決処理後」の状態を示している。MB0の構文解析ステージの出力、Coeffに依存しているMB0の直交変換ステージのMB0の構文解析ステージ欄に「済」の印をつける。同様に、BS値、予測モードについても、それぞれDBFステージ，画面内予測ステージの該当する欄に「済」の印を付ける。
【００６２】
（2.4）「済」の印を付けた各ステージについて実行可能になったか判定する。直交変換ステージは全てのデータがそろったので実行可能と判定し、DBFはMB0の画面内予測が「未」であるため、画面内予測はMB0の直交変換が「未」であるため、データ待ちと判定する。  
（2.5）依存情報テーブル１３３のロックを解放する。
【００６３】
（3）構文解析コア１０１は実行依頼処理（キューへのステージの追加）を行う。実行可能キュー１３２ヘの読み書きはキャッシュを介さずに直接共有メモリ１３１を参照・更新する。  
(3.1)実行可能キュー１３２のロックを取得する。  
(3.2)実行可能キュー１３２に実行可能と判定したMB0直交変換ステージを登録する。
【００６４】
(3.3)実行可能キュー１３２ヘの登録が完了したら、新たな依頼を追加したことを他のコアに通知する。(通知を受け取ったことの確認は行わない)(※1)（図１６参照）。  
(3.4)実行可能キュー１３２のロックを解放する。  
構文解析コア１０１はここまで実行を完了すると、図２の「ＨＯＳＴタスクの動作」に示される手続きに従って、MB1の構文解析ステージの実行を開始する。
【００６５】
構文解析コア１０１と並列に動作している第１の信号処理コア（図１の符号１０２）は図３の「ＰＥタスクの動作」に示す手続きに従って、以下のように動作する。
【００６６】
(4)第１の信号処理コアは依頼受け付け処理（キューからのステージの取り出し）を行う。実行可能キュー１３２ヘの読み書きはキャッシュを介さずに直接共有メモリ１３１を参照・更新する。  
(4.1)実行可能キュー１３２のロックを取得する。  
(4.2)実行可能キュー１３２に実行可能なステージが登録されているか確認する。この場合は、未だ登録されているものはない。  
(4.3)実行可能キュー１３２のロックを解放する。  
(4.4)実行可能キュー１３２に新たなステージが登録されたことが他のコアから通知されるまで待ち合わせる。  
(4.5)構文解析コア１０１から新たなステージの登録の通知を受ける(※1)と第１の信号処理コアは待ち合わせから復帰する。
【００６７】
(5)第１の信号処理コアは依頼受け付け処理を再び行う。実行可能キュー１３２ヘの読み書きはキャッシュを介さずに直接共有メモリ１３１を参照・更新する。  
(5.1)実行可能キュー１３２のロックを取得する。  
(5.2)実行可能キュー１３２に実行可能なステージが登録されているか確認する。この場合は、実行可能キュー１３２にMB0直交変換ステージが登録されている。  
(5.3)実行可能キュー１３２からMB0直交変換ステージを取り出す。  
(5.4)実行可能キュー１３２のロックを解放する。
【００６８】
(6)第１の信号処理コアはMB0直交変換ステージの実行処理を行う。  
(6.1)MB0直交変換ステージの依存情報テーブル１３３を確認し(この時、依存情報テーブル１３３のロックは必要ない)、「済」と印がついているCoeffのデータ領域についてキャッシュ内容の“破棄”をする。  
(6.2)Coeffを入力としてMB0直交変換ステージの処理を実行して、残差ブロックを出力する。信号処理ステージの実行中は直接共有メモリ１３１ヘの読み書き、キャッシュの明示的な破棄および書戻しを行わず、すべてキャッシュを介してデータ領域を参照する。  
(6.3)キャッシュにある残差ブロックの内容を共有メモリ１３１に“書戻し”する。
【００６９】
(7)第１の信号処理コアは図１４の「依存解決処理」の手続きに従って、MB0の直交変換ステージの依存解決処理を行う。  
ここで、図１４の「依存解決処理」のフローチャートを説明する。 
ステップＳ41：ステージ項目のステージ実行完了情報フィールドの終了したＭＢのステージ欄に実行完了情報を書き込む。  
ステップＳ42：ステージ項目のステージ実行完了情報フィールドから全ての実行完了情報を参照。  
ステップＳ43：参照した全ての情報が完了済みか否か判断する。
【００７０】
ステップＳ44：Ｓ43でYesであると、ステージ項目は実行可能であると判定して、処理を終了する。  
ステップＳ45：Ｓ43であると、Noステージ項目は実行不可能であると判定して、処理を終了する。  
依存情報テーブル１３３の読み書きはキャッシュを介さずに直接共有メモリ１３１を参照・更新する。
【００７１】
(7.1)依存情報テーブル１３３のロックを取得する。  
(7.2)図２０は「MB0依存情報テーブルの直交変換の依存解決処理後」の状態を示している。MB0の直交変換ステージの出力である残差ブロックに依存している画面内予測ステージのMB0直交変換ステージのフィールドに「済」の印をつける。  
(7.4)「済」の印を付けた各ステージについて実行可能になったか判定する。画面内予測ステージは全てのデータがそろったので実行可能と判定する。  
(7.5)依存情報テーブル１３３のロックを解放する。
【００７２】
(8)第１の信号処理コアは実行依頼処理を行う。  
(8.1)実行可能キュー１３２のロックを取得する。  
(8.2)実行可能キュー１３２に実行可能と判定したMB0画面内予測ステージを登録する。
【００７３】
(8.3)実行可能キュー１３２ヘの登録が完了したら、新たな依頼を追加したことを他のコアに通知する。(通知を受け取ったことの確認は行わない)(※2)（図１６参照）。  
(8.4)実行可能キュー１３２のロックを解放する。  
構文解析コア１０１，第１の信号処理コアと並列に動作している第２の信号処理コアは図３の「ＰＥタスクの動作」に示す手続きに従って、以下のように動作する。
【００７４】
(9)第２の信号処理コアは依頼受け付け処理を行う。実行可能キュー１３２ヘの読み書きはキャッシュを介さずに直接共有メモリ１３１を参照・更新する。  
(9.1)実行可能キュー１３２のロックを取得する。  
(9.2)実行可能キュー１３２に実行可能なステージが登録されているか確認する。この場合は、未だ登録されているものはない。  
(9.3)実行可能キュー１３２のロックを解放する。
【００７５】
(9.4)実行可能キュー１３２に新たなステージが登録されたことが他のコアから通知されるまで待ち合わせる。  
(9.5)構文解析コア１０１から新たなステージの登録の通知を受ける(※1)と第２の信号処理コアは待ち合わせから復帰する。  
(9.6)実行可能キュー１３２のロックを取得する。  
(9.7)実行可能キュー１３２に実行可能なステージが登録されているか確認する。すでに第１の信号処理コアがステージを取り出しているので、登録されているステージがない。
【００７６】
(9.8)実行可能キュー１３２のロックを解放する。  
(9.9)実行可能キュー１３２に新たなステージが登録されたことが他のコアから通知されるまで待ち合わせる。  
(9.10)第１の信号処理コアから新たなステージの登録の通知を受ける(※2)と第２の信号処理コアは待ち合わせから復帰する。
【００７７】
(10)第２の信号処理コアは依頼受け付け処理を再び行う。実行可能キュー１３２ヘの読み書きはキャッシュを介さずに直接共有メモリ１３１を参照・更新する。  
(10.1)実行可能キュー１３２のロックを取得する。  
(10.2)実行可能キュー１３２に実行可能なステージが登録されているか確認する。この場合は、実行可能キュー１３２にMB0画面内予測ステージが登録されている。  
(10.3)実行可能キュー１３２からMB0画面内予測ステージを取り出す。  
(10.4)実行可能キュー１３２のロックを解放する。
【００７８】
(11)第２の信号処理コアはMB0画面内予測ステージの実行処理を行う。  
(11.1)MB0画面内予測ステージの依存情報テーブル１３３を確認し(この時、依存情報テーブル１３３のロックは必要ない)、「済」と印がついている予測モードのデータ領域と残差ブロックのデータ領域についてキャッシュ内容の“破棄”をする。  
(11.2)予測モードと残差ブロックを入力としてMB0画面内予測ステージの処理を実行して、復号画像を出力する。信号処理ステージの実行中は直接共有メモリ１３１ヘの読み書き、キャッシュの明示的な破棄および書戻しを行わず、すべてキャッシュを介してデータ領域を参照する。  
(11.3)キャッシュにある復号画像の内容を共有メモリ１３１に“書戻し”する。
【００７９】
(12)第２の信号処理コアは図１４の「依存解決処理」の手続きに従って、MB0画面内予測ステージの依存解決処理を行う。依存情報テーブル１３３の読み書きはキャッシュを介さずに直接共有メモリ１３１を参照・更新する。  
(12.1)依存情報テーブル１３３のロックを取得する。  
(12.2)図２１の「MB0依存情報テーブルの画面内予測の依存解決処理後」の状態を示している。MB0画面内予測ステージの出力である復号画像に依存している、DBFステージ,MB1(右側のMB)の画面内予測ステージ，ＭＢ11(下側のMB)の画面内予測ステージ，MB12(右下のMB)の画面内予測ステージの、MB13画面内予測ステージのフィールドに「済」の印をつける。  
(12.3)「済」の印を付けた各ステージについて実行可能になったか判定する。 MB0 DBFステージは全てのデータがそろったので実行可能と判定する。MB1画面内予測ステージ,MB11画面内予測ステージ，MB12画面内予測ステージは未生成のデータがあるためデータ待ちと判定する。  
(12.4)依存情報テーブル１３３のロックを解放する。
【００８０】
(13)第２の信号処理コアは実行依頼処理を行う。実行可能キュー１３２ヘの読み書きはキャッシュを介さずに直接共有メモリ１３１を参照・更新する。  
(13.1)実行可能キュー１３２のロックを取得する。  
(13.2)実行可能キュー１３２に実行可能と判定したMB0 DBF ステージを登録する。  
(13.3)実行可能キュー１３２ヘの登録が完了したら、新たな依頼を追加したことを他のコアに通知する。(通知を受け取ったことの確認は行わない)(※3)（図１６参照）。  
(13.4)実行可能キュー１３２のロックを解放する。  
構文解析コア１０１，第２の信号処理コア（図１の符号１０３）と並列に動作している第１の信号処理コアは、(8)の完了後、依頼受付処理から通知待ち合わせの状態にある。
【００８１】
(14)第１の信号処理コアは第２の信号処理コアの※3の通知を受け待ち合わせから復帰し、依頼受け付け処理を行う。実行可能キュー１３２ヘの読み書きはキャッシュを介さずに直接共有メモリ１３１を参照・更新する。  
(14.1)実行可能キュー１３２のロックを取得する。  
(14.2)実行可能キュー１３２に実行可能なステージが登録されているか確認する。この場合は、実行可能キュー１３２にMBO DBF ステージが登録されている。  
(14.3)実行可能キュー１３２からMBO DBF ステージを取り出す。  
(14.4)実行可能キュー１３２のロックを解放する。
【００８２】
(15)第１の信号処理コアはMBO DBF ステージの実行処理を行う。  
(15.1)MBO DBF ステージの依存情報テーブル１３３を確認し(この時、依存情報テーブル１３３のロックは必要ない)、「済」と印がついているBS値のデータ領域と復号画像のデータ領域についてキャッシュ内容の“破棄”をする。  
(15.2)BS値と復号画像を入力としてMBO DBF ステージの処理を実行して、DBF済復号画像を出力する。信号処理ステージの実行中は直接共有メモリ１３１ヘの読み書き、キャッシュの明示的な破棄および書戻しを行わず、すべてキャッシュを介してデータ領域を参照する。  
(15.3)キャッシュにあるDBF済復号画像のデータ領域の内容を共有メモリ１３１に“書戻し”する。
【００８３】
(16)第１の信号処理コアは図１４の「依存解決処理」の手続きに従って、MBO DBF ステージの依存解決処理を行う。依存情報テーブル１３３の読み書きはキャッシュを介さずに直接共有メモリ１３１を参照・更新する。  
(16.1)依存情報テーブル１３３のロックを取得する。  
(16.2)MB0 DBF ステージの出力であるDBF済み復号画像に依存している、MB1(右側のMB)のDBFステージ，MB11(下側のMB)のDBFステージの依存情報テーブル１３３MB0 DBF ステージのフィールドに「済」の印をつける。  
(16.4)「済」の印を付けた各ステージについて実行可能になったか判定する。MB1 DBFステージ，MB11 DBF ステージのいずれも未生成のデータがあるためデータ待ちと判定する。  
(16.5)依存情報テーブル１３３のロックを解放する。
【００８４】
以上の第１の実施形態のステップによって、画面内予測を用いていてかつマクロブロック間のデータ依存がない場合の１マクロブロック分の復号処理を完了することができる。
【００８５】
以上述べた第１の実施形態では、処理単位となるプログラムの直前および直後のみにキャッシュデータ領域の破棄と書戻しの挿入を限定するものであり、プログラムからのキャッシュ操作命令の挿入を最小限にとどめてキャッシュの整合性を維持することができる。
【００８６】
尚、本発明は上述の第１の実施形態におけるキャッシュ操作命令の挿入限定に限らず、次のような手段（１）及び（２）を用いて、キャッシュ操作命令の挿入箇所を判断することで、キャッシュメモリの破棄対象及び書戻し対象の領域を指定しても良い。
【００８７】
例えば、（１）キャッシュメモリにおける処理単位の入力データ領域および出力データ領域を、プログラムの実行順序を制御する依存情報テーブルの入出力関係から求めても良い。
【００８８】
１）キャッシュメモリにおける処理単位の入力データ領域inおよび出力データ領域outを、プログラムの実行順序を制御する依存情報テーブルの順番と対応するように確保する。図２２に示すように、入力データ領域及び出力データ領域には、依存情報テーブルのマクロブロックと同じ順番に入出力データを並べてある。
【００８９】
２）依存情報テーブルで依存関係を解決するとき、その時求めた位置をindexとすると、
キャッシュメモリの操作対象とする入力データ領域の位置は
in + index * (入力データのサイズ)
出力データ領域の位置は
out + index * (出力データのサイズ)
で求めることができる。＊は乗算の意である。
【００９０】
（２）キャッシュメモリにおける処理単位の入力データ領域および出力データ領域を、動画像符号化ストリームのヘッダ情報の内容に基づいて処理単位となるプログラムのデータの入出力関係から求めても良い。
【００９１】
例えばITU H.264の動画像符号化ストリームのヘッダ情報である、シーケンスパラメータセット、ピクチャーパラメータセット、スライスヘッダを例にとると、これらのヘッダ上で、処理単位となるデブロッキングフィルタ処理のプログラムを使用するかどうか判断できる。このストリームのヘッダ情報に基づいて、キャッシュメモリの操作対象となるメモリ領域を切り替える。図２３において、（ａ）はＤＢＦが有効な場合、（ｂ）はＤＢＦが無効な場合であり、ＤＢＦが無効な場合は残差加算の処理後、直接復号画像（ＤＢＦ済）を出力とする。
【００９２】
さらに、（３）連続的に行う２つの処理単位となるプログラムで、同一プロセッサ上で、先行する処理単位となるプログラムの処理結果を後続の処理単位となるプログラムが利用する場合には、キャッシュメモリの入力データ領域のデータの破棄を省略するようにしてもよい。
【００９３】
異なるプロセッサ上で、プログラムの処理結果を後続の処理単位となるプログラムが利用する場合には、図２４に示すように一度、共有メモリに書き戻した後、後続の処理単位となるプログラムは該当の入力データ領域を破棄し、改めて共有メモリから更新されたデータを読み込むようにしなければならない。この再読み込みは、入力データ領域の破棄後に自動的に実行される。なお、図２４(a)は異なるプロセッサ上での動作のフローチャート、(b)は異なるプロセッサ上での動作を説明する図である。一方、依存情報テーブル等から同一のプロセッサ上で後続の処理単位となるプログラムが実行できることが判明した場合は、図２５に示すように、キャッシュメモリに対する書戻しと破棄の処理は省略してもよい。なお、図２５(a)は同一プロセッサ上での動作のフローチャート、(b)は同一プロセッサ上での動作を説明する図である。
【００９４】
以上述べた第１の実施形態によれば、複数のプロセッサと、それらからアクセス可能な共有メモリを持ち、各々のプロセッサは指定領域の書戻しと破棄をプログラムから命令できるキャッシュメモリを持つシステムにおいて、処理単位となるプログラムの直前および直後のみにキャッシュデータ領域の破棄と書戻しの挿入を限定でき、プログラムからのキャッシュ操作命令の挿入を最小限にとどめてキャッシュの整合性を維持することができる。
【００９５】
また、データ依存情報、または、動画像符号化ストリーム等のヘッダ情報の内容に基づいてキャッシュ操作命令の挿入箇所を自動的に判断することで、キャッシュの破棄対象および書戻し対象の領域を指定することができる。
【００９６】
さらに、同一プロセッサで処理を行う場合にキャッシュ破棄/書き戻しする無駄を省くこともできる。
【００９７】
その結果、複数のプロセッサ、キャッシュメモリ及び共有メモリを有したマルチプロセッサシステムにおいて、画像処理を行うときに、例えばキャッシュ管理装置といったハードウェア規模を増大させることなく、効率よくキャッシュメモリおよび共有メモリの整合性を管理することができるメモリ管理システムを実現することができる。
【００９８】
［第２の実施形態］
本発明の第２の実施形態では、画面内予測を用いていてマクロブロック間のデータ依存がある場合について説明する。 
図２６は本発明の第２の実施形態のメモリ管理システムにおける「ＩスライスMB11 の復号処理内容」を示している。
【００９９】
復号処理は以下の４ステップを、構文解析コア１つ、信号処理コア３つで各コアが協調動作して復号処理を行う。 
ステップ1. MB11 に相当する画像符号化ストリームを入力として構文解析を行い、MB11 のCoeff, 予測モード, BS 値を出力する。 
ステップ2. MB11 のCoeff を入力として直交変換を行い、MB11 の残差ブロックを出力する。
【０１００】
ステップ3. MB11 の残差ブロック, MB11 の予測モード, MB10 の復号画像, MB 2 の復号画像, MB1 の復号画像, MB3 の復号画像を入力として画面内予測を行い、MB11 の復号画像を出力する。  
ステップ4. MB11 の復号画像, MB10 のDBF 済復号画像, MB2 のDBF 済復号画像, BS 値を入力としてDBF を行い、DBF 済み復号画像を出力する。
【０１０１】
図２７は図２６の復号処理内容におけるシーケンス図（ＩスライスMB11近辺）を示している。  
構文解析コア１０１は図２の「HOST タスクの動作」に示す手続きに従って、MB11 に対して以下のように動作する。  
以下の説明で(1)〜(20)及び※１〜※３は図２７の中において用いられている符号(1)〜(20)及び※１〜※３と一致している。
【０１０２】
(1) MB11 の構文解析ステージを実行し、スライス情報(PスライスなのかＩスライスなのか)と、MB11 のCoeff 、予測モード、BS 値を出力する。 
(2) MB11 の構文解析ステージの依存解決処理を行う。依存情報テーブル１３３の読み書きはキャッシュを介さずに直接共有メモリ１３１を参照・更新する。 
(2.1) 依存情報テーブル１３３のロックを取得する。 
(2.2) 図２８は「MB11 依存情報テーブルの依存情報作成前」の状態を示している。また、図２９は「MB11 依存情報テーブルの依存情報作成後」の状態を示している。図１３の「依存情報作成処理」の手続きに従って依存情報作成処理を行う。MB11 構文解析ステージの結果からＩ スライス(画面内予測のみを使用するスライス)であると判定し、ステージの有効性フィールドに直交変換を有効, 動き補償を無効, 残差加算を無効, 画面内予測を有効, DBF を有効に設定する。
【０１０３】
(2.3) 図３０は「MB11 依存情報テーブルの構文解析の依存解決処理後」の状態を示している。MB11 の構文解析ステージの出力、Coeff に依存しているMB11 の直交変換ステージのMB11 の構文解析ステージ欄に「済」の印をつける。同様に、BS 値、予測モードについても、それぞれDBF ステージ, 画面内予測ステージの該当する欄に「済」の印を付ける。
【０１０４】
(2.4)「済」の印を付けた各ステージについて実行可能になったか判定する。直交変換ステージは全てのデータがそろったので実行可能と判定し、DBF はMB11 の画面内予測が「未」であるため、画面内予測はMB11 の直交変換が「未」であるため、データ待ちと判定する。 
(2.5) 依存情報テーブル１３３のロックを解放する。 
(3) 構文解析コア１０１は実行依頼処理（キューへのステージの追加）を行う。実行可能キュー１３２への読み書きはキャッシュを介さずに直接共有メモリ１３１を参照・更新する。 
(3.1) 実行可能キュー１３２のロックを取得する。 
(3.2) 実行可能キュー１３２に実行可能と判定したMB11 直交変換ステージを登録する。
【０１０５】
(3.3) 実行可能キュー１３２への登録が完了したら、新たな依頼を追加したことを他のコアに通知する。(通知を受け取ったことの確認は行わない)（※1）（図２７参照）。 
(3.4) 実行可能キュー１３２のロックを解放する。  
構文解析コア１０１はここまで実行を完了すると、図２の「HOST タスクの動作」に示される手続きに従って、MB12 の構文解析ステージの実行を開始する。
【０１０６】
構文解析コア１０１と並列に動作している第２の信号処理コア は図３の「PE タスクの動作」に示す手続きに従って、以下のように動作する。
【０１０７】
(4) 第２の信号処理コア は依頼受け付け処理（キューからのステージの取り出し）を行う。実行可能キュー１３２への読み書きはキャッシュを介さずに直接共有メモリ１３１を参照・更新する。 
(4.1) 実行可能キュー１３２のロックを取得する。
【０１０８】
(4.2) 実行可能キュー１３２に実行可能なステージが登録されているか確認する。この場合は、未だ登録されているものはない。 
(4.3) 実行可能キュー１３２のロックを解放する。 
(4.4) 実行可能キュー１３２に新たなステージが登録されたことが他のコアから通知されるまで待ち合わせる。 
(4.5) 構文解析コア１０１から新たなステージの登録の通知を受ける(※1)と第２の信号処理コア は待ち合わせから復帰する。 
(4.6) 実行可能キュー１３２のロックを取得する。 
(4.7) 実行可能キュー１３２に実行可能なステージが登録されているか確認する。この場合は、実行可能キュー１３２にMB11 直交変換ステージが登録されている。 
(4.8) 実行可能キュー１３２からMB11 直交変換ステージを取り出す。 
(4.9) 実行可能キュー１３２のロックを解放する。 
(5) 第２の信号処理コア はMB11 直交変換ステージの実行処理を行う。 
(5.1) MB11 直交変換ステージの依存情報テーブル１３３を確認し(この時、依存情報テーブル１３３のロックは必要ない)、「済」と印がついているCoeff のデータ領域についてキャッシュ内容の“破棄”をする。 
(5.2) Coeff を入力としてMB11 直交変換ステージの処理を実行して、残差ブロックを出力する。信号処理ステージの実行中は直接共有メモリ１３１への読み書き、キャッシュの明示的な破棄および書戻しを行わず、すべてキャッシュを介してデータ領域を参照する。 
(5.3) キャッシュにある残差ブロックの内容を共有メモリ１３１に“書戻し”する。 
(6) 第２の信号処理コア は図１４の「依存解決処理」の手続きに従って、MB11 の直交変換ステージの依存解決処理を行う。依存情報テーブル１３３の読み書きはキャッシュを介さずに直接共有メモリ１３１を参照・更新する。 
(6.1) 依存情報テーブル１３３のロックを取得する。 
(6.2) 図３１は「MB11依存情報テーブルの直交変換の依存解決処理後」の状態を示している。MB11 の直交変換ステージの出力である残差ブロックに依存しているMB11 画面内予測ステージのMB11 直交変換ステージのフィールドに「済」の印をつける。
【０１０９】
(6.3)「済」の印を付けた各ステージについて実行可能になったか判定する。MB11 画面内予測ステージはMB10 画面内予測ステージが完了していないので、データ待ちと判定する。 
(6.4) 依存情報テーブル１３３のロックを解放する。
【０１１０】
(7) 第２の信号処理コア は実行依頼すべき処理がないので実行依頼処理をスキップする。
【０１１１】
構文解析コア１０１, 第２の信号処理コア と並列に動作している第３の信号処理コア は図３の「PE タスクの動作」に示す手続きに従って、以下のように動作している。
【０１１２】
(8) 第３の信号処理コア はMB10 画面内予測ステージの実行処理を行う。 
(8.1) MB10 画面内予測ステージの依存情報テーブル１３３を確認し(この時、依存情報テーブル１３３のロックは必要ない)、「済」と印がついている予測モードのデータ領域と残差ブロックのデータ領域についてキャッシュ内容の“破棄”をする。 
(8.2) 予測モードと残差ブロックを入力としてMB10 画面内予測ステージの処理を実行して、復号画像を出力する。信号処理ステージの実行中は直接共有メモリ１３１への読み書き、キャッシュの明示的な破棄および書戻しを行わず、すべてキャッシュを介してデータ領域を参照する。
【０１１３】
(8.3) キャッシュにある復号画像の内容を共有メモリ１３１に“書戻し”する。
【０１１４】
(9) 第３の信号処理コア （図１の符号１０４）は図１４の「依存解決処理」の手続きに従って、MB10 画面内予測ステージの依存解決処理を行う。依存情報テーブル１３３の読み書きはキャッシュを介さずに直接共有メモリ１３１を参照・更新する。 
(9.1) 依存情報テーブル１３３のロックを取得する。 
(9.2) 図３２は「MB11 依存情報テーブルの画面内予測の依存解決処理後」の状態を示している。MB10 画面内予測ステージの出力である復号画像に依存している、MB10 DBF ステージ, MB11 画面内予測ステージ, MB19 画面内予測ステージ, MB20 画面内予測ステージの、MB10 画面内予測ステージのフィールドに「済」の印をつける。 
(9.3)「済」の印を付けた各ステージについて実行可能になったか判定する。MB10 DBF ステージとMB11 画面内予測ステージは全てのデータがそろったので実行可能と判定する。 MB18 画面内予測ステージ, MB19 画面内予測ステージは未生成のデータがあるためデータ待ちと判定する。 
(9.4) 依存情報テーブル１３３のロックを解放する。
【０１１５】
(10) 第３の信号処理コア は実行依頼処理（キューへのステージの追加）を行う。実行可能キュー１３２への読み書きはキャッシュを介さずに直接共有メモリ１３１を参照・更新する。
【０１１６】
(10.1) 実行可能キュー１３２のロックを取得する。 
(10.2) 実行可能キュー１３２に実行可能と判定したMB11 画面内予測ステージを登録する。  
(10.3) 実行可能キュー１３２への登録が完了したら、新たな依頼を追加したことを他のコアに通知する。(通知を受け取ったことの確認は行わない)（※2）（図２７参照）。 
(10.4) 実行可能キュー１３２のロックを解放する。
【０１１７】
構文解析コア１０１, 第２の信号処理コア, 第３の信号処理コアと並列に動作している第１の信号処理コア は図３の「ＰＥタスクの動作」に示す手続きに従って、以下のように動作している。
【０１１８】
(11) 第１の信号処理コア は依頼受け付け処理（キューからのステージの取り出し）を行う。実行可能キュー１３２への読み書きはキャッシュを介さずに直接共有メモリ１３１を参照・更新する。 
(11.1) 第３の信号処理コア から新たなステージの登録の通知を受ける(※2)と第１の信号処理コア は待ち合わせから復帰する。 
(11.2) 実行可能キュー１３２のロックを取得する。 
(11.3) 実行可能キュー１３２に実行可能なステージが登録されているか確認する。この場合は、実行可能キュー１３２にMB11 画面内予測ステージが登録されている。 
(11.4) 実行可能キュー１３２からMB11 画面内予測ステージを取り出す。 
(11.5) 実行可能キュー１３２のロックを解放する。
【０１１９】
(12) 第１の信号処理コア はMB11 画面内予測ステージの実行処理を行う。 
(12.1) MB11 画面内予測ステージの依存情報テーブル１３３を確認し(この時、依存情報テーブル１３３のロックは必要ない)、「済」と印がついている予測モードのデータ領域と残差ブロックのデータ領域についてキャッシュ内容の“破棄”をする。  
(12.2) 予測モードと残差ブロックを入力としてMB11 画面内予測ステージの処理を実行して、復号画像を出力する。信号処理ステージの実行中は直接共有メモリ１３１への読み書き、キャッシュの明示的な破棄および書戻しを行わず、すべてキャッシュを介してデータ領域を参照する。 
(12.3) キャッシュにある復号画像の内容を共有メモリ１３１に“書戻し”する。
【０１２０】
(13) 第１の信号処理コア は図１４の「依存解決処理」の手続きに従って、MB11 画面内予測ステージの依存解決処理を行う。依存情報テーブル１３３の読み書きはキャッシュを介さずに直接共有メモリ１３１を参照・更新する。 
(13.1) 依存情報テーブル１３３のロックを取得する。 
(13.2) 図３３は「MB11依存情報テーブルの画面内予測の依存解決処理後」の状態を示している。MB11 画面内予測ステージの出力である復号画像に依存している、DBF ステージ, MB12 画面内予測ステージ, MB19 画面内予測ステージ, MB20 画面内予測ステージの、MB21 画面内予測ステージのフィールドに「済」の印をつける。
【０１２１】
(13.3)「済」の印を付けた各ステージについて実行可能になったか判定する。MB11 DBF ステージはMB10 のDBF ステージが完了していないのでデータを待ち合わせる。MB12 画面内予測ステージ, MB19 画面内予測ステージ, MB20 画面内予測ステージはそれぞれ未生成のデータがあるので待ち合わせる。 
(13.4) 依存情報テーブル１３３のロックを解放する。  
(14) 第１の信号処理コア は実行依頼すべき処理がないので実行依頼処理をスキップする。
【０１２２】
構文解析コア１０１, 第１の信号処理コア, 第２の信号処理コア と並列に動作している第３の信号処理コア は図３の「PE タスクの動作」に示す手続きに従って、以下のように動作している。
【０１２３】
(15) 第３の信号処理コア はMB10 DBF ステージの実行処理を行う。 
(15.1) MB10 DBF ステージの依存情報テーブル１３３を確認し(この時、依存情報テーブル１３３のロックは必要ない)、「済」と印がついているBS 値のデータ領域についてキャッシュの内容を“破棄”する。復号画像のデータ領域については直前に同一のプロセッサで実行されているのでキャッシュの“破棄”を行わない。 
(15.2) BS 値と復号画像を入力としてMB10 DBF ステージの処理を実行して、DBF 済復号画像を出力する。信号処理ステージの実行中は直接共有メモリ１３１への読み書き、キャッシュの明示的な破棄および書戻しを行わず、すべてキャッシュを介してデータ領域を参照する。 
(15.3) キャッシュにあるDBF 済復号画像のデータ領域の内容を共有メモリ１３１に“書戻し”する。
【０１２４】
(16) 第３の信号処理コア は図１４の「依存解決処理」の手続きに従って、MB10 DBF ステージの依存解決処理を行う。依存情報テーブル１３３の読み書きはキャッシュを介さずに直接共有メモリ１３１を参照・更新する。
【０１２５】
(16.1) 依存情報テーブル１３３のロックを取得する。 
(16.2) 図３４は「MB11依存情報テーブルの画面内予測の依存解決処理後」の状態を示している。MB10 DBF ステージの出力であるDBF 済み復号画像に依存している、MB11 のDBF ステージ, MB18 のDBF ステージの依存情報テーブル MB10 DBF ステージのフィールドに「済」の印をつける。 
(16.3)「済」の印を付けた各ステージについて実行可能になったか判定する。MB11 DBF ステージのステージは全てのデータが揃ったので実行可能と判定する。 MB18 DBF ステージは未生成のデータがあるためデータ待ちと判定する。 
(16.4) 依存情報テーブル１３３のロックを解放する。
【０１２６】
(17) 第１の信号処理コア は実行依頼処理（キューへのステージの追加）を行う。実行可能キュー１３２への読み書きはキャッシュを介さずに直接共有メモリ１３１を参照・更新する。  
(17.1) 実行可能キュー１３２のロックを取得する。 
(17.2) 実行可能キュー１３２に実行可能と判定したMB11 DBF ステージを登録する。
【０１２７】
(17.3) 実行可能キュー１３２への登録が完了したら、新たな依頼を追加したことを他のコアに通知する。(通知を受け取ったことの確認は行わない)（※3）（図２７参照）。 
(17.4) 実行可能キュー１３２のロックを解放する。  
構文解析コア１０１, 第２の信号処理コア と並列に動作している第１の信号処理コア は、(14)の完了後、依頼受付処理から通知待ち合わせの状態にある。
【０１２８】
(18) 第１の信号処理コア は第２の信号処理コア の※3 の通知を受け待ち合わせから復帰し、依頼受け付け処理（キューからのステージの取り出し）を行う。実行可能キュー１３２への読み書きはキャッシュを介さずに直接共有メモリ１３１を参照・更新する。 
(18.1) 実行可能キュー１３２のロックを取得する。 
(18.2) 実行可能キュー１３２に実行可能なステージが登録されているか確認する。この場合は、実行可能キュー１３２にMB11 DBF ステージが登録されている。 
(18.3) 実行可能キュー１３２からMB11 DBF ステージを取り出す。 
(18.4) 実行可能キュー１３２のロックを解放する。
【０１２９】
(19) 第１の信号処理コア はMB11 DBF ステージの実行処理を行う。 
(19.1) MB11 DBF ステージの依存情報テーブル１３３を確認し(この時、依存情報テーブル１３３のロックは必要ない)、「済」と印がついているBS 値のデータ領域と復号画像のデータ領域についてキャッシュ内容の“破棄”をする。 
(19.2) BS 値と復号画像を入力としてMB11 DBF ステージの処理を実行して、DBF 済復号画像を出力する。信号処理ステージの実行中は直接共有メモリ１３１への読み書き、キャッシュの明示的な破棄および書戻しを行わず、すべてキャッシュを介してデータ領域を参照する。 
(19.3) キャッシュにあるDBF 済復号画像のデータ領域の内容を共有メモリ１３１に“書戻し”する。
【０１３０】
(20) 第１の信号処理コア は図１４の「依存解決処理」の手続きに従って、MB11 DBF ステージの依存解決処理を行う。依存情報テーブル１３３の読み書きはキャッシュを介さずに直接共有メモリ１３１を参照・更新する。 
(20.1) 依存情報テーブル１３３のロックを取得する。
【０１３１】
(20.2) MB11 DBF ステージの出力であるDBF 済み復号画像に依存している、MB12 のDBF ステージ, MB19 のDBF ステージの依存情報テーブル MB11 DBF ステージのフィールドに「済」の印をつける。 
(20.3)「済」の印を付けた各ステージについて実行可能になったか判定する。MB12 DBF ステージ, MB19 DBF ステージのいずれも未生成のデータがあるためデータ待ちと判定する。 
(20.4) 依存情報テーブル１３３のロックを解放する。
【０１３２】
以上の第２の実施形態のステップによって、画面内予測を用いていてマクロブロック間のデータ依存がある場合の1 マクロブロック分の復号処理を完了することができる。
【０１３３】
［第３の実施形態］
本発明の第３の実施形態では、構文解析結果の動きベクトルによる動き補償を用いる場合の復号処理について説明する。 
図３５は本発明の第３の実施形態のメモリ管理システムにおける「ＰスライスMB0 復号処理」を示している。
【０１３４】
復号処理は以下の４ステップを、構文解析コア１つ、信号処理コア３つで各コアが協調動作して復号処理を行う。  
ステップ1. MB0 に相当する画像符号化ストリームを入力として構文解析を行い、MB0 のCoeff，MB0 の動きベクトル, MB0 のBS 値を出力する。  
ステップ2. MB0 のCoeff を入力として直交変換を行い、MB0 の残差ブロックを出力する。
【０１３５】
ステップ3. MB0 の残差ブロック, MB0 の動きベクトルを入力として動き補償を行い、MB0 の予測画像を出力する。  
ステップ4. MB0 の予測画像, MB0 の残差ブロックを入力として残差加算を行い、MB0 の復号画像を出力する。 
ステップ5. MB0 の復号画像, MB10 のDBF 済復号画像, MB2 のDBF 済復号画像, MB0 のBS 値を入力としてDBF を行い、MB0 のDBF 済み復号画像を出力する。
【０１３６】
図３６は図３５のＰスライスMB0 復号処理におけるシーケンス図（ＰスライスのMB0 近辺）を示している。Ｐスライスは、１つの別画面の画像サンプルを用いた予測によって、符号化したスライスである。  
構文解析コア１０１は図２の「HOST タスクの動作」に示す手続きに従って、MB0 に対して以下のように動作する。  
以下の説明で(1)〜(18)及び※１〜※３は図３６の中において用いられている符号(1)〜(18)及び※１〜※３と一致している。
【０１３７】
(1) MB0 の構文解析ステージを実行し、スライス情報(P スライスなのかＩ スライスなのか)と、MB0 のCoeff 、動きベクトル、BS 値を出力する。 
(2) MB0 の構文解析ステージの依存解決処理を行う。依存情報テーブル１３３の読み書きはキャッシュを介さずに直接共有メモリ１３１を参照・更新する。 
(2.1) 依存情報テーブル１３３のロックを取得する。
【０１３８】
(2.2) 図３７は「MB0 依存情報テーブルの初期状態」を示している。また、図３８は「MB0 依存情報テーブルの依存情報作成後」の状態を示している。図１３の「依存情報作成処理」の手続きに従って依存情報作成処理を行う。MB0 構文解析ステージの結果から動き補償を用いるマクロブロックであると判定し、ステージの有効性フィールドに直交変換を有効, 動き補償を有効, 残差加算を有効, 画面内予測を無効, DBF を有効に設定する。MB0 は画面最左上に位置するため、BF 左MB、上MB それぞれに「無効」の印をつける。
【０１３９】
(2.3) 図３９は「MB0 依存情報テーブルの構文解析の依存解決処理後」の状態を示している。MB0 の構文解析ステージの出力、MB0 Coeff に依存しているMB0 の直交変換ステージのMB0 の構文解析ステージ欄に「済」の印をつける。同様に、MB0 BS 値、MB0 動きベクトルについても、それぞれ対応する, MB0 DBF ステージ, MB0 動き補償ステージの該当する欄に「済」の印を付ける。
【０１４０】
(2.4)「済」の印を付けた各ステージについて実行可能になったか判定する。MB0 直交変換ステージは全てのデータがそろったので実行可能と判定し、MB0 DBF はMB0 残差加算が「未」であるため、データ待ちと判定する。 
(2.5) 依存情報テーブル１３３のロックを解放する。
【０１４１】
(3) 構文解析コア１０１は実行依頼処理（キューへのステージの追加）を行う。実行可能キュー１３２への読み書きはキャッシュを介さずに直接共有メモリ１３１を参照・更新する。 
(3.1) 実行可能キュー１３２のロックを取得する。 
(3.2) 実行可能キュー１３２に実行可能と判定したMB0 直交変換ステージを登録する。
【０１４２】
(3.3) 実行可能キュー１３２への登録が完了したら、新たな依頼を追加したことを他のコアに通知する。(通知を受け取ったことの確認は行わない)（※1）（図３６参照）。 
(3.4) 実行可能キュー１３２のロックを解放する。  
構文解析コア１０１はここまで実行を完了すると、図２の「HOST タスクの動作」に示される手続きに従って、MB1 の構文解析ステージの実行を開始する。  
構文解析コア１０１と並列に動作している第１の信号処理コア は図３の「PE タスクの動作」に示す手続きに従って、以下のように動作する。
【０１４３】
(4) 第１の信号処理コア は依頼受け付け処理（キューからのステージの取り出し）を行う。実行可能キュー１３２への読み書きはキャッシュを介さずに直接共有メモリ１３１を参照・更新する。 
(4.1) 実行可能キュー１３２のロックを取得する。 
(4.2) 実行可能キュー１３２に実行可能なステージが登録されているか確認する。この場合は、未だ登録されているものはない。
【０１４４】
(4.3) 実行可能キュー１３２のロックを解放する。 
(4.4) 実行可能キュー１３２に新たなステージが登録されたことが他のコアから通知されるまで待ち合わせる。 
(4.5) 構文解析コア１０１から新たなステージの登録の通知を受ける(※1)と第１の信号処理コア は待ち合わせから復帰する。
【０１４５】
(4.6) 実行可能キュー１３２のロックを取得する。 
(4.7) 実行可能キュー１３２に実行可能なステージが登録されているか確認する。この場合は、実行可能キュー１３２にMB0 直交変換ステージが登録されている。 
(4.8) 実行可能キュー１３２からMB0 直交変換ステージを取り出す。 
(4.9) 実行可能キュー１３２のロックを解放する。
【０１４６】
(5) 第１の信号処理コア はMB0 直交変換ステージの実行処理を行う。 
(5.1) MB0 直交変換ステージの依存情報テーブル１３３を確認し(この時、依存情報テーブル１３３のロックは必要ない)、「済」と印がついているCoeff のデータ領域についてキャッシュ内容の“破棄”をする。 
(5.2) Coeff を入力としてMB0 直交変換ステージの処理を実行して、残差ブロックを出力する。信号処理ステージの実行中は直接共有メモリ１３１への読み書き、キャッシュの明示的な破棄および書戻しを行わず、すべてキャッシュを介してデータ領域を参照する。
【０１４７】
(5.3) キャッシュにある残差ブロックの内容を共有メモリ１３１に“書戻し”する。
【０１４８】
(6) 第１の信号処理コア は図１４の「依存解決処理」の手続きに従って、MB0 の直交変換ステージの依存解決処理を行う。依存情報テーブル１３３の読み書きはキャッシュを介さずに直接共有メモリ１３１を参照・更新する。 
(6.1) 依存情報テーブル１３３のロックを取得する。 
(6.2) 図４０は「MB0 依存情報テーブルのMB0 直交変換の依存解決処理後」の状態を示している。MB0 の直交変換ステージの出力である残差ブロックに依存している残差加算ステージのMB0 直交変換ステージのフィールドに「済」の印をつける。
【０１４９】
(6.3) 済の印を付けた各ステージについて実行可能になったか判定する。MB0 残差加算ステージは、MB0 動き補償ステージが「未」であるため、データ待ちと判定する。 
(6.4) 依存情報テーブル１３３のロックを解放する。
【０１５０】
(7) 第１の信号処理コア は実行依頼処理（キューへのステージの追加）を行う。新たに実行可能なステージがないのでスキップする。  
構文解析コア１０１, 第１の信号処理コア と並列に動作している第２の信号処理コア は図３の「PE タスクの動作」に示す手続きに従って、以下のように動作する。
【０１５１】
(8) 第２の信号処理コア は依頼受け付け処理（キューからのステージの取り出し）を行う。実行可能キュー１３２への読み書きはキャッシュを介さずに直接共有メモリ１３１を参照・更新する。 
(8.1) 実行可能キュー１３２のロックを取得する。 
(8.2) 実行可能キュー１３２に実行可能なステージが登録されているか確認する。この場合は、未だ登録されているものはない。 
(8.3) 実行可能キュー１３２のロックを解放する。  
(8.4) 実行可能キュー１３２に新たなステージが登録されたことが他のコアから通知されるまで待ち合わせる。
【０１５２】
(8.5) 構文解析コア１０１から新たなステージの登録の通知を受ける(※1)と第２の信号処理コア は待ち合わせから復帰する。 
(8.6) 実行可能キュー１３２のロックを取得する。 
(8.7) 実行可能キュー１３２に実行可能なステージが登録されているか確認する。この場合は、実行可能キュー１３２にMB0 動き補償ステージが登録されているステージはない。 
(8.8) 実行可能キュー１３２のロックを解放する。
【０１５３】
(9) 第２の信号処理コア はMB0 動き補償ステージの実行処理を行う。 
(9.1) MB0 動き補償ステージの依存情報テーブル１３３を確認し(この時、依存情報テーブル１３３のロックは必要ない)、「済」と印がついている予測モードのデータ領域と残差ブロックのデータ領域についてキャッシュ内容の“破棄”をする。 
(9.2) 動きベクトルを入力としてMB0 動き補償ステージの処理を実行して、予測画像を出力する。
【０１５４】
信号処理ステージの実行中は直接共有メモリ１３１への読み書き、キャッシュの明示的な破棄および書戻しを行わず、すべてキャッシュを介してデータ領域を参照する。 
(9.3) キャッシュにある復号画像の内容を共有メモリ１３１に“書戻し”する。
【０１５５】
(10) 第２の信号処理コア は図１４の「依存解決処理」の手続きに従って、MB0 動き補償ステージの依存解決処理を行う。依存情報テーブル１３３の読み書きはキャッシュを介さずに直接共有メモリ１３１を参照・更新する。 
(10.1) 依存情報テーブル１３３のロックを取得する。 
(10.2) 図４１は「MB0 依存情報テーブルの動き補償の依存解決処理後」の状態を示している。MB0 動き補償ステージの出力である復号画像に依存している、MB0 の残差加算ステージの、MB0 動き補償ステージのフィールドに「済」の印をつける。 
(10.3) 「済」の印を付けた各ステージについて実行可能になったか判定する。MB0 残差加算ステージは全てのデータがそろったので実行可能と判定する。 
(10.4) 依存情報テーブル１３３のロックを解放する。
【０１５６】
(11) 第２の信号処理コア は実行依頼処理（キューへのステージの追加）を行う。実行可能キュー１３２への読み書きはキャッシュを介さずに直接共有メモリ１３１を参照・更新する。  
(11.1) 実行可能キュー１３２のロックを取得する。
【０１５７】
(11.2) 実行可能キュー１３２に実行可能と判定したMB0 残差加算ステージを登録する。  
(11.3) 実行可能キュー１３２への登録が完了したら、新たな依頼を追加したことを他のコアに通知する。(通知を受け取ったことの確認は行わない)（※2）（図３６参照）。
【０１５８】
(11.4) 実行可能キュー１３２のロックを解放する。  
構文解析コア１０１, 第２の信号処理コア と並列に動作している第３の信号処理コア は、依頼受付処理から通知待ち合わせの状態にある。
【０１５９】
(12) 第３の信号処理コア は第３の信号処理コア の※2 の通知を受け待ち合わせから復帰し、依頼受け付け処理（キューからのステージの取り出し）を行う。実行可能キュー１３２への読み書きはキャッシュを介さずに直接共有メモリ１３１を参照・更新する。 
(12.1) 実行可能キュー１３２のロックを取得する。
【０１６０】
(12.2) 実行可能キュー１３２に実行可能なステージが登録されているか確認する。この場合は、実行可能キュー１３２にMB0 残差加算ステージが登録されている。 
(12.3) 実行可能キュー１３２からMB0 残差加算ステージを取り出す。 
(12.4) 実行可能キュー１３２のロックを解放する。
【０１６１】
(13) 第３の信号処理コア はMB0 残差加算ステージの実行処理を行う。  
(13.1) MB0 残差加算ステージの依存情報テーブル１３３を確認し(この時、依存情報テーブル１３３のロックは必要ない)、「済」と印がついているMB0 残差ブロックとMB0 予測画像のデータ領域についてキャッシュ内容の“破棄”をする。
【０１６２】
(13.2) MB0 残差ブロックとMB0 予測画像を入力としてMB0 残差加算ステージの処理を実行して、復号画像を出力する。信号処理ステージの実行中は直接共有メモリ１３１への読み書き、キャッシュの明示的な破棄および書戻しを行わず、すべてキャッシュを介してデータ領域を参照する。 
(13.3) キャッシュにある復号画像のデータ領域の内容を共有メモリ１３１に“書戻し”する。
【０１６３】
(14) 第３の信号処理コア は図１４の「依存解決処理」の手続きに従って、MB0 残差加算ステージの依存解決処理を行う。依存情報テーブル１３３の読み書きはキャッシュを介さずに直接共有メモリ１３１を参照・更新する。 
(14.1) 依存情報テーブル１３３のロックを取得する。  
(14.2) 図４２は「MB0 依存情報テーブルのMB0 残差加算依存解決処理後」の状態を示している。MB0 残差加算ステージの出力である復号画像に依存している、MB0 DBF ステージ, MB1 の画面内予測ステージ, MB11 の画面内予測ステージ, MB12 の画面内予測ステージの、MB0 残差加算ステージのフィールドに「済」の印をつける。 
(14.3)「済」の印を付けた各ステージについて実行可能になったか判定する。MB0 DBF ステージは全てのフィールドが「済」となったので実行可能と判定する。MB1 の画面内予測ステージ, MB11 の画面内予測ステージ, MB12 の画面内予測ステージも「未」のデータがあるため、データ待ちと判定する。 
(14.4) 依存情報テーブル１３３のロックを解放する。
【０１６４】
(15) 第３の信号処理コア は実行依頼処理（キューへのステージの追加）を行う。実行可能キュー１３２への読み書きはキャッシュを介さずに直接共有メモリ１３１を参照・更新する。  
(15.1) 実行可能キュー１３２のロックを取得する。  
(15.2) 実行可能キュー１３２に実行可能と判定したMB0 DBF ステージを登録する。
【０１６５】
(15.3) 実行可能キュー１３２への登録が完了したら、新たな依頼を追加したことを他のコアに通知する。(通知を受け取ったことの確認は行わない)（※2）（図３６参照）。 
(15.4) 実行可能キュー１３２のロックを解放する。  
構文解析コア１０１, 第２の信号処理コア, 第３の信号処理コア と並列に動作している第１の信号処理コア は、依頼受付処理から通知待ち合わせの状態にある。
【０１６６】
(16) 第１の信号処理コア は第３の信号処理コア の※2 の通知を受け待ち合わせから復帰し、依頼受け付け処理（キューからのステージの取り出し）を行う。実行可能キュー１３２への読み書きはキャッシュを介さずに直接共有メモリ１３１を参照・更新する。  
(16.1) 実行可能キュー１３２のロックを取得する。
【０１６７】
(16.2) 実行可能キュー１３２に実行可能なステージが登録されているか確認する。この場合は、実行可能キュー１３２にMB0 DBF ステージが登録されている。 
(16.3) 実行可能キュー１３２からMB0 DBF ステージを取り出す。 
(16.4) 実行可能キュー１３２のロックを解放する。
【０１６８】
(17) 第１の信号処理コア はMB0 DBF ステージの実行処理を行う。 
(17.1) MB0 DBF ステージの依存情報テーブル１３３を確認し(この時、依存情報テーブル１３３のロックは必要ない)、「済」と印がついているBS 値のデータ領域と復号画像のデータ領域についてキャッシュ内容の“破棄”をする。
【０１６９】
(17.2) BS 値と復号画像を入力としてMB0 DBF ステージの処理を実行して、DBF 済復号画像を出力する。信号処理ステージの実行中は直接共有メモリ１３１への読み書き、キャッシュの明示的な破棄および書戻しを行わず、すべてキャッシュを介してデータ領域を参照する。  
(17.3) キャッシュにあるDBF 済復号画像のデータ領域の内容を共有メモリ１３１に“書戻し”する。
【０１７０】
(18) 第１の信号処理コア は図１４の「依存解決処理」の手続きに従って、MB0 DBF ステージの依存解決処理を行う。依存情報テーブル１３３の読み書きはキャッシュを介さずに直接共有メモリ１３１を参照・更新する。  
(18.1) 依存情報テーブル１３３のロックを取得する。
【０１７１】
(18.2) MB0 DBF ステージの出力であるDBF 済み復号画像に依存している、MB1(右側のMB)のDBF ステージ, MB11( 下側のMB)のDBF ステージの依存情報テーブル MB0 DBF ステージのフィールドに「済」の印をつける。  
(18.3) 「済」の印を付けた各ステージについて実行可能になったか判定する。MB1 DBF ステージ, MB11 DBF ステージのいずれも未生成のデータがあるためデータ待ちと判定する。  
(18.4) 依存情報テーブル１３３のロックを解放する。  
以上の第３の実施形態のステップによって、動き補償を用いる場合の復号処理の１マクロブロック分の処理を完了することができる。
【０１７２】
以上述べたように本発明によれば、複数のプロセッサ、キャッシュメモリ及び共有メモリを有したマルチプロセッサシステムにおいて、画像処理を行うときに、ハードウェア規模を増大させることなく、効率よくキャッシュメモリおよび共有メモリの整合性を管理することができるメモリ管理システムを実現することができる。
【図面の簡単な説明】
【０１７３】
【図１】本発明の第１の実施形態のメモリ管理システムが適用される画像処理装置のブロック図。
【図２】ＨＯＳＴタスクの動作（構文解析コアの動作）を説明するフローチャート。
【図３】ＰＥタスクの動作（信号処理コアの動作）を説明するフローチャート。
【図４】依存情報テーブルを示している。
【図５】ストリームの構文解析処理を示す図。
【図６】直交変換の信号処理ステージを示す図。
【図７】動き補償の信号処理ステージを示す図。
【図８】残差加算の信号処理ステージを示す図。
【図９】画面内予測の信号処理ステージを示す図。
【図１０】デブロッキングフィルタ（ＤＢＦ）の信号処理ステージを示す図。
【図１１】フレームとマクロブロックアドレスを説明する図。
【図１２】マクロブロック近傍を説明する図。
【図１３】依存情報作成処理のフローチャート。
【図１４】依存解決処理のフローチャート。
【図１５】本発明の第１の実施形態のメモリ管理システムにおける、Ｉスライス MB 0 のデコード処理を示す図。
【図１６】図１５の復号処理のシーケンス（ＩスライスのMB0 近辺）を示す図。
【図１７】MB0 依存情報テーブルの初期状態を示す図。
【図１８】MB0 依存情報テーブルの依存情報作成後の状態を示す図。
【図１９】MB0 依存情報テーブルの構文解析依存解決処理後の状態を示す図。
【図２０】MB0 依存情報テーブルの直交変換の依存解決処理後の状態を示す図。
【図２１】MB0 依存情報テーブルのMB0 画面内予測の依存解決処理後の状態を示す図。
【図２２】依存情報テーブルとキャッシュメモリにおける入力データ領域及び出力データ領域の関係を示す図。
【図２３】ストリームのヘッダ情報に基づき、ＤＦＢ処理を有効とした場合と無効とした場合とにおける、Ｉスライス MB 0 のデコード処理を示す図。
【図２４】連続的に行う２つの処理単位となるプログラムで、異なるプロセッサ上で、先行する処理単位となるプログラムの処理結果を後続の処理単位となるプログラムが利用する場合の動作例を示す図。
【図２５】連続的に行う２つの処理単位となるプログラムで、同一プロセッサ上で、先行する処理単位となるプログラムの処理結果を後続の処理単位となるプログラムが利用する場合の動作例を示す図。
【図２６】本発明の第２の実施形態のメモリ管理システムにおける「ＩスライスMB11 の復号処理内容」を示す図。
【図２７】図２６の復号処理内容におけるシーケンス（ＩスライスMB11近辺）を示す図。
【図２８】MB11 依存情報テーブルの依存情報作成前の状態を示す図。
【図２９】MB11 依存情報テーブルの依存情報作成後の状態を示す図。
【図３０】MB11 依存情報テーブルの構文解析の依存解決処理後の状態を示す図。
【図３１】MB11 依存情報テーブルの直交変換の依存解決処理後の状態を示す図。
【図３２】MB11 依存情報テーブルの画面内予測の依存解決処理後の状態を示す図。
【図３３】MB11 依存情報テーブルの画面内予測の依存解決処理後の状態を示す図。
【図３４】MB11 依存情報テーブルの画面内予測の依存解決処理後の状態を示す図。
【図３５】本発明の第３の実施形態のメモリ管理システムにおける、ＰスライスMB0 復号処理を示す図。
【図３６】図３５のＰスライスMB0 復号処理におけるシーケンス（ＰスライスのMB0 近辺）を示す図。
【図３７】MB0 依存情報テーブルの初期状態を示す図。
【図３８】MB0 依存情報テーブルの依存情報作成後の状態を示す図。
【図３９】MB0 依存情報テーブルの構文解析の依存解決処理後の状態を示す図。
【図４０】MB0 依存情報テーブルのMB0 直交変換の依存解決処理後の状態を示す図。
【図４１】MB0 依存情報テーブルのMB0 動き補償の依存解決処理後の状態を示す図。
【図４２】MB0 依存情報テーブルのMB0 残差加算依存解決処理後の状態を示す図。
【符号の説明】
【０１７４】
１０１…構文解析コア
１０２〜１０５…第１乃至第４の信号処理コア
１１１〜１１５…キャッシュメモリ
１２１…バス（又はインターコネクト）
１３１…共有メモリ
１３２…実行可能キュー
１３３…依存情報テーブル
１３４…ＨＯＳＴタスク
１３５…ＰＥタスク
１３６〜１３８…ステージ
【図１】
2008204292.tif 000003
【図２】
2008204292.tif 000004
【図３】
2008204292.tif 000005
【図４】
2008204292.tif 000006
【図５】
2008204292.tif 000007
【図６】
2008204292.tif 000008
【図７】
2008204292.tif 000009
【図８】
2008204292.tif 000010
【図９】
2008204292.tif 000011
【図１０】
2008204292.tif 000012
【図１１】
2008204292.tif 000013
【図１２】
2008204292.tif 000014
【図１３】
2008204292.tif 000015
【図１４】
2008204292.tif 000016
【図１５】
2008204292.tif 000017
【図１６】
2008204292.tif 000018
【図１７】
2008204292.tif 000019
【図１８】
2008204292.tif 000020
【図１９】
2008204292.tif 000021
【図２０】
2008204292.tif 000022
【図２１】
2008204292.tif 000023
【図２２】
2008204292.tif 000024
【図２３】
2008204292.tif 000025
【図２４】
2008204292.tif 000026
【図２５】
2008204292.tif 000027
【図２６】
2008204292.tif 000028
【図２７】
2008204292.tif 000029
【図２８】
2008204292.tif 000030
【図２９】
2008204292.tif 000031
【図３０】
2008204292.tif 000032
【図３１】
2008204292.tif 000033
【図３２】
2008204292.tif 000034
【図３３】
2008204292.tif 000035
【図３４】
2008204292.tif 000036
【図３５】
2008204292.tif 000037
【図３６】
2008204292.tif 000038
【図３７】
2008204292.tif 000039
【図３８】
2008204292.tif 000040
【図３９】
2008204292.tif 000041
【図４０】
2008204292.tif 000042
【図４１】
2008204292.tif 000043
【図４２】
2008204292.tif 000044