(57)【特許請求の範囲】
【請求項１】
対象データの入力先として定義されている入力先スレッドごとに該入力先スレッドの割当先コアの識別情報を記憶する記憶手段と、
前記入力先スレッドのマルチコアプロセッサへの割当が検出されると、前記記憶手段により記憶された前記入力先スレッドの割当先コアの識別情報を更新する更新手段と、
前記対象データの書き込み要求を検出する検出手段と、
前記検出手段により前記書き込み要求が検出された前記対象データに基づいて、前記記憶手段から、前記更新手段による更新後の識別情報を特定する特定手段と、
前記マルチコアプロセッサのうち、前記特定手段により前記更新後の識別情報が特定された前記入力先スレッドの割当先コアのメモリへ前記対象データを格納する格納手段と、
を備えることを特徴とするマルチコアプロセッサシステム。
【請求項２】
前記書き込み要求の要求元コアが前記入力先スレッドの割当先コアに含まれていない場合、前記要求元コアのメモリ内に前記対象データが格納されているか否かを前記対象データに含まれるアドレス情報に基づいて判断する判断手段と、
前記判断手段により前記要求元コアのメモリ内に前記対象データが格納されていると判断した場合、前記要求元コアのメモリ内の前記対象データを消去する消去手段と、
を備えることを特徴とする請求項１に記載のマルチコアプロセッサシステム。
【請求項３】
前記格納手段は、
前記特定手段により前記更新後の識別情報が特定されなかった場合、前記書き込み要求の要求元コアのメモリへ前記対象データを格納することを特徴とする請求項１または２に記載のマルチコアプロセッサシステム。
【請求項４】
マルチコアプロセッサのコアごとのメモリへのアクセスを制御する制御回路と対象データの入力先として定義されている入力先スレッドごとに該入力先スレッドの割当先コアの識別情報を記憶する記憶手段とにアクセス可能な前記マルチコアプロセッサに、
前記入力先スレッドの前記マルチコアプロセッサへの割当が検出されると、前記記憶手段により記憶された前記入力先スレッドの割当先コアの識別情報を更新する更新工程と、
前記対象データの書き込み要求を検出する検出工程と、
前記検出工程により前記書き込み要求が検出された前記対象データに基づいて、前記記憶手段から、前記更新工程による更新後の識別情報を特定する特定工程と、
前記制御回路に、前記マルチコアプロセッサのうち、前記特定工程により前記更新後の識別情報が特定された前記入力先スレッドの割当先コアのメモリへ前記対象データを格納させる格納処理工程と、
を実行させることを特徴とする制御プログラム。
【請求項５】
マルチコアプロセッサのコアごとのメモリへのアクセスを制御する制御回路と対象データの入力先として定義されている入力先スレッドごとに該入力先スレッドの割当先コアの識別情報を記憶する記憶手段とにアクセス可能な前記マルチコアプロセッサが、
前記入力先スレッドの前記マルチコアプロセッサへの割当が検出されると、前記記憶手段により記憶された前記入力先スレッドの割当先コアの識別情報を更新する更新工程と、
前記対象データの書き込み要求を検出する検出工程と、
前記検出工程により前記書き込み要求が検出された前記対象データに基づいて、前記記憶手段から、前記更新工程による更新後の識別情報を特定する特定工程と、
前記制御回路に、前記マルチコアプロセッサのうち、前記特定工程により前記更新後の識別情報が特定された前記入力先スレッドの割当先コアのメモリへ前記対象データを格納させる格納処理工程と、
を実行することを特徴とする制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、メモリへデータを格納するマルチコアプロセッサシステム、制御プログラム、および制御方法に関する。
【背景技術】
【０００２】
従来、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）がメモリよりもアクセス速度が早いキャッシュを有する場合、ＣＰＵからデータの書き込み要求が発生すると、キャッシュにデータが格納される。これにより、ＣＰＵはキャッシュからデータを読み出すことができるので、データの読み出しを高速化することができる。【０００３】
マルチコアプロセッサシステムでは、各スレッドがどのＣＰＵに割り当てられるかについては割当状態に応じて決定されるため、対象プログラム内で複数のスレッド間で共有されるデータがあれば、該データは複数のＣＰＵで利用される可能性がある。ここで、マルチコアプロセッサへのスレッドの割り当ては、たとえば、最も負荷の小さいＣＰＵへ割り当てる。【０００４】
そこで、マルチコアプロセッサシステムにおいてＣＰＵごとに分散キャッシュを有する場合には、データの書き込み要求が発生した場合にすべてのＣＰＵの分散キャッシュに該データを格納する技術（第１の従来技術）が知られている。そして、分散キャッシュ間のデータの一貫性を保つために、スヌープ処理が行われる。スヌープ処理では、一のＣＰＵの分散キャッシュでキャッシュラインの変化が検出されると、スヌープバスを介して他のＣＰＵの分散キャッシュが更新される。【０００５】
また、マルチコアプロセッサの分散キャッシュのうちのいずれかの分散キャッシュにデータが保持される。そして、分散キャッシュにデータを格納していないＣＰＵは、該データを保持しているＣＰＵの分散キャッシュにアクセスを行うことにより、該データを読み出す技術（第２の従来技術）が知られている（たとえば、下記特許文献１を参照。）。【０００６】
また、マルチコアプロセッサシステムにおいてＣＰＵごとにローカルメモリを有する場合に、一のＣＰＵのローカルメモリへ他のＣＰＵがデータを書き込む技術が知られている（たとえば、下記特許文献２を参照。）。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開平１−２５１２５０
【特許文献２】特開平１１−３９２１４
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかしながら、第２の従来技術では、データを分散キャッシュに格納していない他のＣＰＵが該データを読み出すには、該データを分散キャッシュに格納した一のＣＰＵへアクセスしなければならない。よって、一のＣＰＵと他のＣＰＵとでは該データへのアクセスに速度差が発生する。すなわち、第２の従来技術では、データを分散キャッシュに格納していないＣＰＵは読み出し速度が遅くなる問題点があった。【０００９】
一方、第１の従来技術では、各ＣＰＵの分散キャッシュにデータが格納されるため、第２の従来技術のように読み出し速度は遅くならないが、マルチコアプロセッサのうちのすべてのＣＰＵが分散キャッシュに格納したデータを読み出すとは限らない。すなわち、該ＣＰＵの分散キャッシュの領域が読み出されないデータに占拠される問題点があった。【００１０】
本発明は、上述した第１および第２の従来技術による問題点を解消するため、キャッシュの読み出し速度に影響を与えることなく、キャッシュの領域を有効的に活用することができるマルチコアプロセッサシステム、制御プログラム、および制御方法を提供することを目的とする。
【課題を解決するための手段】
【００１１】
本発明の一観点によれば、対象データの入力先として定義されている入力先スレッドごとに該入力先スレッドの割当先コアの識別情報を記憶する記憶手段と、前記入力先スレッドのマルチコアプロセッサへの割当が検出されると、前記記憶手段により記憶された前記入力先スレッドの割当先コアの識別情報を更新する更新手段と、前記対象データの書き込み要求を検出する検出手段と、前記検出手段により前記書き込み要求が検出された前記対象データに基づいて、前記記憶手段から、前記更新手段による更新後の識別情報を特定する特定手段と、前記マルチコアプロセッサのうち、前記特定手段により前記更新後の識別情報が特定された前記入力先スレッドの割当先コアのメモリへ前記対象データを格納する格納手段と、を備えるマルチコアプロセッサシステムを提供する。
【発明の効果】
【００１２】
本マルチコアプロセッサシステム、制御プログラム、および制御方法によれば、キャッシュの読み出し速度に影響を与えることなく、キャッシュの領域を有効的に活用することができるという効果を奏する。
【図面の簡単な説明】
【００１３】
【図１】本実施の形態の一例を示す説明図である。
【図２】スレッドの割当例を示す説明図である。
【図３】マルチコアプロセッサシステム１００のハードウェアの一例を示すブロック図である。
【図４】変換テーブル４００の一例を示す説明図である。
【図５】分散キャッシュ１１１の詳細例を示す説明図である。
【図６】スヌープバス１０３の詳細例を示す説明図である。
【図７】依存関係に関するリスト群７００の一例を示す説明図である。
【図８】スレッド管理テーブル８００の一例を示す説明図である。
【図９】マルチコアプロセッサシステム１００の機能ブロック図である。
【図１０】スレッド１の割当例を示す説明図である。
【図１１】スレッド２の割当例を示す説明図である。
【図１２】変数ｘが格納される例を示す説明図である。
【図１３】ＯＳ１９１による更新処理手順を示すフローチャート（その１）である。
【図１４】ＯＳ１９１による更新処理手順を示すフローチャート（その２）である。
【図１５】図１３および図１４で示した変換テーブルの更新処理（ステップＳ１３０５またはステップＳ１３１２）の詳細な説明を示すフローチャートである。
【図１６】各ＭＭＵによる特定処理手順を示すフローチャートである。
【図１７】分散キャッシュコントローラによる格納処理手順（スヌープバス１０３からの書き込み要求）を示すフローチャートである。
【図１８】分散キャッシュコントローラによる格納処理手順（ＭＭＵからの書き込み要求）を示すフローチャートである。
【図１９】アプリケーションの一例を示す説明図である。
【図２０】デコード結果の格納例を示す説明図である。
【図２１】ＰＣＭ結果の格納例を示す説明図である。
【発明を実施するための形態】
【００１４】
本発明にかかるマルチコアプロセッサシステム、制御プログラム、および制御方法の好適な実施の形態を詳細に説明する。なお、本実施の形態のマルチコアプロセッサシステムにおいて、マルチコアプロセッサとは、コアが複数搭載されたプロセッサである。コアが複数搭載されていれば、複数のコアが搭載された単一のプロセッサでもよく、シングルコアのプロセッサが並列されているプロセッサ群でもよい。なお、本実施の形態では、説明を単純化するため、シングルコアのプロセッサが並列されているプロセッサ群を例に挙げて説明する。
【００１５】
図１は、本実施の形態の一例を示す説明図である。図１のスレッド１｛・・・｝とスレッド２｛・・・｝とのそれぞれの｛・・・｝内には、それぞれのコーディング例が記述されている。
【００１６】
スレッド１では、変数ｚへ５が代入され、変数ｘに１０が代入される。その後、スレッド１では変数ｚと１０との加算結果が変数ｗへ代入される。よって、スレッド１において変数ｘと変数ｚと変数ｗとが出力データであり、スレッド１において変数ｚが入力データである。
【００１７】
スレッド２では、変数ｙへ変数ｘが代入され、変数ｚと１００との乗算結果が変数ａに代入される。よって、スレッド２において変数ｙと変数ａとが出力データであり、変数ｘと変数ｚとが入力データである。
【００１８】
変数ｘの入力先スレッドはスレッド２であり、変数ｚの入力先スレッドはスレッド１とスレッド２である。テーブルは、出力データの項目と入力先スレッドの項目と割当先ＣＰＵの識別情報の項目とを有し、出力データごとに該出力データの入力先スレッドと該入力先スレッドの割当先ＣＰＵとが記述されている。
【００１９】
スレッド１とスレッド２とを有するプログラムの開発時に該プログラムの開発者がコンパイラを用いることにより出力データと該出力データの入力先スレッドとを特定することができる。また、入力先スレッドの割当先ＣＰＵについては、スレッド１とスレッド２との割当状態に応じて変化する。
【００２０】
スレッド１はＣＰＵ１０１に割り当てられているため、出力データの項目の情報が変数ｚであり、かつ入力先スレッドの識別情報の項目の情報がスレッド１の場合、割当先ＣＰＵの識別情報の項目の情報はＣＰＵ１０１である。
【００２１】
まず、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）１９１が（１）スレッド２をＣＰＵに割り当てると、ＯＳ１９１が、出力データの項目の情報が変数ｚであり、かつ入力先スレッドの識別情報の項目の情報がスレッド２の場合の割当先ＣＰＵの識別情報の項目の情報をＣＰＵ１０２に更新する。
【００２２】
さらに、ＯＳ１９１が、（２）出力データの項目の情報が変数ｘであり、かつ入力先スレッドの識別情報の項目の情報がスレッド２の場合の割当先ＣＰＵの識別情報の項目の情報をＣＰＵ１０２に更新する。なお、ここでは、ＯＳ１９１がスレッド２をＣＰＵ１０２に割り当てることにより、該スレッド２の割当を検出することとする。
【００２３】
そして、ＯＳ１９１が、（３）変数ｘの書き込み要求を検出すると、ＯＳ１９１が、（４）変数ｘに基づいてテーブルから割当先ＣＰＵの識別情報の項目に保持されている情報を検索することにより、割当先ＣＰＵの識別情報を特定する。つぎに、ＯＳ１９１が、（５）特定した割当先ＣＰＵの識別情報がＣＰＵ１０２を示しているため、ＣＰＵ１０２の分散キャッシュ１１２へ変数ｘを格納する。
【００２４】
したがって、マルチコアプロセッサのＣＰＵのキャッシュのうち、対象データを入力として用いるスレッドが割り当てられているＣＰＵのキャッシュにのみ対象データを保持することができる。すなわち、対象データの読み出しが不要なＣＰＵのキャッシュに対象データが格納されないため、入力先スレッドが対象データを読み出す読み出し速度に影響を与えることなく、各キャッシュの領域を有効的に活用することができる。
【００２５】
また、上述したようにスレッドの割当についてはＣＰＵの割当状態に応じて入力先スレッドの割り当てが決定するため、対象データが格納されるＣＰＵのキャッシュも該入力先スレッドの割当状態に応じて変化する。
【００２６】
図２は、スレッドの割当例を示す説明図である。（ａ）割当例１では、図１で示した例の様に、スレッド１がＣＰＵ１０１に割り当てられ、スレッド２がＣＰＵ１０２に割り当てられる。（ｂ）割当例２では、スレッド１とスレッド２とが共にＣＰＵ１０１に割り当てられる。
【００２７】
本実施の形態において割当例１では、分散キャッシュ１１１と分散キャッシュ１１２とのうち、変数ｘは分散キャッシュ１１２のみに格納され、変数ｚは分散キャッシュ１１１と分散キャッシュ１１２とに格納される。一方、本実施の形態において割当例２では、分散キャッシュ１１１と分散キャッシュ１１２とのうち、変数ｘは分散キャッシュ１１１のみに格納され、変数ｚも分散キャッシュ１１１のみに格納される。本実施の形態では、各出力データの入力先スレッドの割当先ＣＰＵを記憶および更新することにより、該出力データを格納するＣＰＵの分散キャッシュを決定している。
【００２８】
つぎに、本実施の形態では、各出力データの入力先スレッドの割当先ＣＰＵについてＭＭＵ（Ｍｅｍｏｒｙ  Ｍａｎａｇｅｍｅｎｔ  Ｕｎｉｔ）とスレッド管理テーブルを用いて管理する例を示す。
【００２９】
（マルチコアプロセッサシステム１００のハードウェア）
図３は、マルチコアプロセッサシステム１００のハードウェアの一例を示すブロック図である。図３において、マルチコアプロセッサシステム１００は、たとえば、ＣＰＵ１０１およびＣＰＵ１０２と、ＭＭＵ１４１およびＭＭＵ１４２と、分散キャッシュ１１１および分散キャッシュ１１２と、共有メモリ１０４と、を有している。本実施の形態では、ＣＰＵ１０１とＣＰＵ１０２とを併せてマルチコアプロセッサと称する。
【００３０】
また、図示していないがマルチコアプロセッサシステム１００では、たとえば、ユーザや他の機器との入出力装置として、インターネットなどのネットワークと接続するＩ／Ｆ（Ｉｎｔｅｒｆａｃｅ）と、ディスプレイと、キーボード１０９と、を備えている。
【００３１】
ここで、ＣＰＵ１０１とＭＭＵ１４１とがＩ／Ｆ１８１を介して接続され、ＭＭＵ１４１と分散キャッシュ１１１（具体的には、分散キャッシュコントローラ１２１）とがＩ／Ｆ１７１を介して接続されている。ＣＰＵ１０２とＭＭＵ１４２とがＩ／Ｆ１８２を介して接続され、ＭＭＵ１４２と分散キャッシュ１１２（具体的には、分散キャッシュコントローラ１２２）とがＩ／Ｆ１７２を介して接続されている。各分散キャッシュの分散キャッシュコントローラと共有メモリ１０４とがスヌープバス１０３を介して接続されている。
【００３２】
ＣＰＵ１０１とＣＰＵ１０２とは、それぞれコアとレジスタとを有している。コアとは、具体的には、ＣＰＵの演算機能を実現する回路である。ＣＰＵ１０１はマスタＣＰＵであり、ＯＳ１９１を実行し、マルチコアプロセッサシステム１００の全体の制御を司る。ＯＳ１９１は、ソフトウェアの各スレッドをどのＣＰＵに割り当てるかを制御する機能を有し、ＣＰＵ１０１に割り当てられたスレッドの切り替えを制御する機能を有している。ＣＰＵ１０２はスレーブＣＰＵであり、ＯＳ１９２を実行する。ＯＳ１９２はＣＰＵ１０２に割り当てられたスレッドの切り替えを制御する機能を有している。
【００３３】
ＭＭＵ１４１とＭＭＵ１４２は、アクセス要求をそれぞれＣＰＵ１０１とＣＰＵ１０２から受け付けると、該アクセス要求に付随している論理アドレスから物理アドレスに変換テーブル４００を用いて変換する機能を有している。ＭＭＵ１４１とＭＭＵ１４２についてはそれぞれＣＰＵ１０１の内部とＣＰＵ１０２の内部に含まれていてもよい。さらに、マルチコアプロセッサシステム１００ではＭＭＵ１４１とＭＭＵ１４２とをハードウェアとしているが、ＭＭＵ１４１とＭＭＵ１４２とをソフトウェアとしてそれぞれＯＳ１９１とＯＳ１９２との機能の一部であってもよい。
【００３４】
（変換テーブル４００の一例）
図４は、変換テーブル４００の一例を示す説明図である。論理アドレスとはプログラムのコーディング上で定義されている仮想メモリ空間上のアドレスであり、物理アドレスとは共有メモリ上のアドレスである。変換テーブル４００では、論理アドレスごとに該論理アドレスを共有メモリ上にマッピングさせることにより得られる物理アドレスを有している。変換テーブル４００では、論理アドレスの項目４０１と、物理アドレスの項目４０２と領域情報の項目４０３とを有している。
【００３５】
各ＣＰＵから通知されるアクセス要求には論理アドレスが付随されているため、変換テーブル４００内の論理アドレスの項目４０１に保持されている情報から該アクセス要求の論理アドレスを検索することにより、物理アドレスを特定することができる。また、領域情報の項目４０３には、各論理アドレスで示される仮想メモリ空間上に配置される対象データの入力先スレッドの割当先ＣＰＵを判別可能な情報が保持されている。領域情報の項目４０３は各ＣＰＵに対応するＣＰＵフラグを有している。領域情報の項目４０３はＣＰＵ１０１に対応するＣＰＵ１０１フラグとＣＰＵ１０２に対応するＣＰＵ１０２フラグとを有している。
【００３６】
たとえば、領域情報の項目４０３のうち、ＣＰＵ１０１フラグが１であり、ＣＰＵ１０２フラグが０であれば、対象データの入力先スレッドの割当先ＣＰＵはＣＰＵ１０１である。また、たとえば、領域情報の項目４０３のうち、ＣＰＵ１０１フラグが０であり、ＣＰＵ１０２のフラグが１であれば、対象データの入力先スレッドの割当先ＣＰＵはＣＰＵ１０１である。
【００３７】
領域情報の項目４０３のうち、ＣＰＵ１０１フラグおよびＣＰＵ１０２フラグについてはスレッドの割当状態に応じてＯＳ１９１がどのフラグを立てるか（１に設定するか）を決定する。
【００３８】
図３に戻って、分散キャッシュ１１１は、分散キャッシュコントローラ１２１と分散キャッシュメモリ１３１とを有している。分散キャッシュコントローラ１２１が分散キャッシュメモリ１３１への書き込みや読み出しを制御する。分散キャッシュ１１２は、分散キャッシュコントローラ１２２と分散キャッシュメモリ１３２とを有している。分散キャッシュコントローラ１２２が分散キャッシュメモリ１３２への書き込みや読み出しを制御する。
【００３９】
分散キャッシュ１１１の分散キャッシュコントローラ１２１は、スヌープバス１０３へ物理アドレスやデータやコマンド情報をマスタＩ／Ｆ１５１を介して渡す。そして、分散キャッシュコントローラ１２１は、スヌープバス１０３から物理アドレスやデータやコマンド情報をスレーブＩ／Ｆ１６１を介して受け付ける。分散キャッシュ１１２の分散キャッシュコントローラ１２２は、スヌープバス１０３へ物理アドレスやデータやコマンド情報をマスタＩ／Ｆ１５２を介して渡す。分散キャッシュコントローラ１２１は、スヌープバス１０３から物理アドレスやデータやコマンド情報をスレーブＩ／Ｆ１６２を介して受け付ける。
【００４０】
（分散キャッシュ１１１の詳細例）
図５は、分散キャッシュ１１１の詳細例を示す説明図である。上述のように分散キャッシュ１１１では分散キャッシュコントローラ１２１と分散キャッシュメモリ１３１を有している。分散キャッシュメモリ１３１では、データごとに物理アドレスとＳＴＡＴＥとデータとが記憶されている。
【００４１】
分散キャッシュメモリ１３１では、物理アドレスとＳＴＡＴＥを併せてタグ情報と称し、タグ情報とデータとを併せてキャッシュラインと称する。分散キャッシュコントローラ１２１は、ＭＭＵ１４１またはスヌープバス１０３からの対象データのアクセス要求に付随する物理アドレスに基づいて分散キャッシュメモリ１３１に対象データが記憶されているか否かを判断することができる。
【００４２】
ここで、ＳＴＡＴＥについて説明する。ＳＴＡＴＥは２ビットの情報であり、ＳＴＡＴＥの値によって各キャッシュラインのとりうる状態が決まる。該状態はスヌープ方式を実現するプロトコルによって異なるが、代表的な状態としては以下の４つの状態である。
・Ｍ（Ｍｏｄｉｆｉｅｄ）状態：キャッシュラインが当該キャッシュだけに存在し、変更されていることを示す状態
・Ｅ（Ｅｘｃｌｕｓｉｖｅ）状態：キャッシュラインが当該キャッシュだけに存在し、変更されていないことを示す状態
・Ｓ（Ｓｈａｒｅｄ）状態：キャッシュラインが複数のキャッシュに存在することを示す状態
・Ｉ（Ｉｎｖａｌｉｄ）状態：キャッシュラインは無効であることを示す状態
【００４３】
分散キャッシュコントローラ１２１は該４つの状態に対応して動作する。分散キャッシュコントローラ１２１による動作については、図１７および図１８のフローチャートを用いて後述する。また、分散キャッシュ１１２については、分散キャッシュ１１１と同様の機能であるため、詳細な説明を省略する。
【００４４】
図３に戻って、スヌープバス１０３は、共有メモリ１０４と分散キャッシュとを接続し、スヌープ処理に対応するバスである。
【００４５】
（スヌープバス１０３の詳細例）
図６は、スヌープバス１０３の詳細例を示す説明図である。図６中の線は物理的な一本の信号線であり、黒丸は信号線同士の接続を表す。スヌープバス１０３は、アドレス信号線と、コマンド信号線と、データ信号線と、コントローラ６０１と、セレクト信号線と、を有している。スヌープバス１０３は、マスタＩ／Ｆ１５１およびマスタＩ／Ｆ１５２と、スレーブＩ／Ｆ１６１およびスレーブＩ／Ｆ１６２と、から信号を受ける。
【００４６】
マスタＩ／Ｆ１５１およびマスタＩ／Ｆ１５２は、たとえば、物理アドレスをアドレス信号線へ、読み出し要求であるか書き込み要求であるかを示すコマンド情報をコマンド信号線へ送出する。そして、送出された物理アドレスは、コントローラ６０１が受信する。
【００４７】
コントローラ６０１は、物理アドレスとあらかじめコントローラ６０１に登録されたマッピング情報に基づいて、対応するスレーブＩ／Ｆへのセレクト信号線にセレクト信号を出力する。セレクト信号を受け取ったスレーブＩ／ＦはマスタＩ／Ｆ１５１およびマスタＩ／Ｆ１５２からの物理アドレスとコマンド情報を受け取り、該スレーブＩ／Ｆはコマンド情報に応じてデータのやりとりを行う。
【００４８】
さらに、スヌープバス１０３には、たとえば、ブロードキャストとブロックとインバリデートとの３つの機能がある。ブロードキャストとは、マスタＩ／Ｆから、コマンド情報とデータ情報との組み合わせの要求を、あらかじめブロードキャスト先として設定されたすべてのスレーブＩ／Ｆに送出する機能である。ブロックとは、現在のバス接続を強制的に解除する機能である。インバリデートとは、各分散キャッシュメモリに対して対象物理アドレスに対応するキャッシュラインを無効化させる機能である。これらの機能を使用することで、スヌープバス１０３は、キャッシュコヒーレンシ機構として要求される機能を満たす。
【００４９】
図３に戻って、共有メモリ１０４は、ＣＰＵ１０１とＣＰＵ１０２とに共有されるメモリである。共有メモリ１０４は、たとえば、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）と、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）と、フラッシュＲＯＭなどを有している。共有メモリ１０４は、たとえば、スレッド管理テーブル８００と、ＯＳ１９１およびＯＳ１９２のブートプログラムや後述する制御プログラムやアプリケーションプログラムと、依存関係に関するリスト群７００と、を記憶している。
【００５０】
たとえば、ＲＯＭまたはフラッシュＲＯＭは該プログラムなどを記憶し、ＲＡＭはＣＰＵ１０１とＣＰＵ１０２とのワークエリアとして使用される。共有メモリ１０４に記憶されているＯＳ１９１とＯＳ１９２は、それぞれＣＰＵ１０１とＣＰＵ１０２とにロードされることで、コーディングされている処理を各ＣＰＵに実行させることとなる。
【００５１】
（依存関係に関するリスト群７００の一例）
図７は、依存関係に関するリスト群７００の一例を示す説明図である。依存関係に関するリスト群７００では、スレッドごとに該スレッド内の出力データと該出力データの入力先スレッドに関する情報と、スレッドごとに該スレッド内の入力データと該入力データの出力元スレッドに関する情報とを有している。
【００５２】
スレッド１に関するリスト７０１は出力テーブル７１１と入力テーブル７２１とを有し、スレッド２に関するリスト７０２は出力テーブル７１２と入力テーブル７２２とを有している。出力テーブル７１１は、出力データの項目と入力先スレッドの項目とを有している。出力テーブル７１１では、出力データの項目に保持されているデータごとに該データの入力先スレッドが入力先スレッドの項目に保持されている。入力テーブル７２１では、入力データの項目と出力元スレッドの項目とを有している。入力テーブル７２１では、入力データの項目に保持されているデータごとに該データの出力元スレッドが出力元スレッドの項目に保持されている。
【００５３】
出力テーブル７１２は、出力データの項目と入力先スレッドの項目とを有している。出力テーブル７１２では、出力データの項目に保持されているデータごとに該データの入力先スレッドが入力先スレッドの項目に保持されている。入力テーブル７２２では、入力データの項目と出力元スレッドの項目とを有している。入力テーブル７２２では、入力データの項目に保持されているデータごとに該データの出力元スレッドが出力元スレッドの項目に保持されている。
【００５４】
各スレッドの依存関係に関するリストについては、たとえば、プログラムの設計者がコンパイラを用いて該プログラム内の各データを解析することにより作成することができる。
【００５５】
（スレッド管理テーブル８００の一例）
図８は、スレッド管理テーブル８００の一例を示す説明図である。スレッド管理テーブル８００はスレッドごとに該スレッドの割当状態と該スレッドの実行状態とが記述されている。スレッド管理テーブル８００はスレッドの識別情報の項目８０１と割当先ＣＰＵの識別情報の項目８０２と実行状態の項目８０３とを有している。
【００５６】
たとえば、ＯＳ１９１が、プログラムの起動指示を受け付けると、該プログラム内のすべてのスレッドの識別情報をスレッド管理テーブル８００内のスレッドの識別情報の項目８０１に登録する。そして、たとえば、ＯＳ１９１がスレッドごとに該スレッドの割当先ＣＰＵを決定すると、ＯＳ１９１が該割当先ＣＰＵの識別情報をスレッド管理テーブル８００内の割当先ＣＰＵの識別情報の項目８０２に登録する。割当先ＣＰＵの識別情報が「−」のスレッドは割当先ＣＰＵが決定していない状態を示す。
【００５７】
実行状態については、たとえば、実行中であるか、未割当（図中「−」で示す。）であるか、レディーキューに登録されている実行待機であるかを示す。たとえば、ＯＳ１９１やＯＳ１９２はタスクスイッチを行うと、該タスクスイッチによって切り替えられたスレッドに関する実行状態の項目８０３の実行状態を書き換える。図８では、スレッド１およびスレッド２に関する割当先ＣＰＵの識別情報の項目８０２に保持されている割当先ＣＰＵの識別情報は「−」であり、実行状態の項目８０３に保持されている実行状態は「−」となっている。
【００５８】
また、スレッド管理テーブル８００は共有メモリ１０４の他に各分散キャッシュメモリに記憶させ、いずれかの分散キャッシュメモリ内のスレッド管理テーブル８００に変化があれば、スヌープバス１０３を介してスヌープ処理をさせてもよい。
【００５９】
図３に戻って、上述したディスプレイとネットワークなどに接続するＩ／Ｆとキーボードとについて説明する。ディスプレイは、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。該ディスプレイは、たとえば、ＴＦＴ液晶ディスプレイなどを採用することができる。
【００６０】
該Ｉ／Ｆは、通信回線を通じてＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネットなどのネットワークに接続され、ネットワークを介して他の装置に接続される。該Ｉ／Ｆには、たとえばモデムやＬＡＮアダプタなどを採用することができる。キーボードは、数字、各種指示などの入力のためのキーを備え、データの入力を行う。また、キーボードは、タッチパネル式の入力パッドやテンキーなどであってもよい。
【００６１】
図９は、マルチコアプロセッサシステム１００の機能ブロック図である。マルチコアプロセッサシステム１００では、記憶部９０１と、更新部９０２と、検出部９０３と、特定部９０４と、格納部９０５と、判断部９０６と、消去部９０７と、を有している。
【００６２】
記憶部９０１は、たとえば、ＭＭＵが変換テーブル４００を記憶し、共有メモリ１０４がスレッド管理テーブル８００を記憶することにより実現される。更新部９０２は、たとえば、制御プログラム内にプログラミング言語等を用いて定義され、ＯＳ１９１内に該制御プログラムを組み込む。そして、ＣＰＵ１０１が共有メモリ１０４内に記憶されているＯＳ１９１をロードし、ＣＰＵ１０１が該ＯＳ１９１内の制御プログラムにコーディングされている処理を実行することにより更新部９０２が実現される。
【００６３】
また、たとえば、検出部９０３と特定部９０４とをＨＤＬ記述によって機能定義し、該ＨＤＬ記述を論理合成して論理回路等の素子を組み合わせることで、各ＭＭＵ内に検出部９０３と特定部９０４とを実現することができる。また、たとえば、検出部９０３と特定部９０４とは共有メモリ１０４内に制御プログラムとして記憶される。そして、たとえば、ＣＰＵ１０１やＣＰＵ１０２のようにプログラムを実行可能な機能を有するＭＭＵが該制御プログラムをロードして該制御プログラムにコーディングされている処理を実行してもよい。格納部９０５と判断部９０６と消去部９０７とは、分散キャッシュ１１１や分散キャッシュ１１２により実現される。
【００６４】
記憶部９０１は、対象データの入力先として定義されている入力先スレッドごとに該入力先スレッドの割当先ＣＰＵの識別情報を記憶する。
【００６５】
更新部９０２は、入力先スレッドのマルチコアプロセッサへの割当が検出されると、記憶部９０１により記憶されたスレッドの割当先ＣＰＵの識別情報を更新する。
【００６６】
検出部９０３は、対象データの書き込み要求を検出する。
【００６７】
特定部９０４は、検出部９０３により書き込み要求が検出された対象データに基づいて記憶部９０１から、更新部９０２による更新後の識別情報を特定する。
【００６８】
格納部９０５は、マルチコアプロセッサのうち、特定部９０４により更新後の識別情報が特定された入力先スレッドの割当先ＣＰＵの分散キャッシュメモリへ対象データを格納する。
【００６９】
判断部９０６は、書き込み要求の要求元ＣＰＵが入力先スレッドの割当先ＣＰＵに含まれていない場合、要求元ＣＰＵの分散キャッシュメモリ内に対象データが格納されているか否かを対象データに含まれるアドレス情報に基づいて判断する。本実施の形態では、具体的には、たとえば、書き込み要求に物理アドレスが付随され、かつ分散キャッシュメモリ内の各キャッシュラインに物理アドレスが格納されている。たとえば、書き込み要求の物理アドレスとキャッシュラインの物理アドレスとの一致により対象データが格納されているか否かが判断される。
【００７０】
消去部９０７は、判断部９０６により要求元ＣＰＵの分散キャッシュメモリ内に対象データが格納されていると判断した場合、要求元ＣＰＵの分散キャッシュメモリ内の対象データを消去する。分散キャッシュメモリ内の対象データを消去するとは、具体的には、たとえば、対象データを無効化することである。
【００７１】
また、格納部９０５は、特定部９０４により更新後の識別情報が特定されなかった場合、書き込み要求の要求元ＣＰＵの分散キャッシュメモリへ対象データを格納する。特定部９０４により更新後の識別情報が特定されなかった場合とは、具体的には、たとえば、入力先スレッドが未割当の場合である。
【００７２】
以上を踏まえて、実施例を用いて詳細に説明する。
【００７３】
図１０は、スレッド１の割当例を示す説明図である。まず、ＯＳ１９１が、スレッド１の割当指示を受け付けると、スレッド管理テーブル８００を参照することにより各ＣＰＵの割当状態を確認し、ＣＰＵ１０１とＣＰＵ１０２のいずれかのＣＰＵにスレッド１を割り当てる。ＯＳ１９１は（１）スレッド１をＣＰＵ１０１に割り当てることにより、スレッド１のマルチコアプロセッサへの割当を検出する。
【００７４】
つぎに、ＯＳ１９１は、スレッド管理テーブル８００内のスレッドの識別情報の項目８０１からスレッド１に一致する識別情報を検索する。ＯＳ１９１は、更新部９０２により、（２）割当先ＣＰＵの識別情報の項目８０２に保持されている割当先ＣＰＵの識別情報をＣＰＵ１０１に更新する。さらに、ＯＳ１９１は、実行状態の項目８０３に保持されている実行状態を実行中に更新する。
【００７５】
さらに、ＯＳ１９１が、出力テーブル７１１から出力データの項目に保持されているデータ順に入力先スレッドの項目に保持されている情報を検索する。変数ｘの場合、入力先スレッドの項目に保持されている情報はスレッド２である。ＯＳ１９１は、スレッド管理テーブル８００内のスレッドの識別情報の項目８０１からスレッド２と一致する識別情報を検索し、該スレッド２に関する割当先ＣＰＵの識別情報の項目８０２に保持されている割当先ＣＰＵの識別情報を検索する。ここでは、スレッドの割当先ＣＰＵの識別情報は「−」が検索される。
【００７６】
変数ｘの入力先スレッドであるスレッド２が未割当であるため、ＯＳ１９１は、（３）変換テーブル４００内のＣＰＵ１０１フラグを１に更新する。すなわち、対象データの入力先スレッドが未割当の場合、書き込み要求の要求元ＣＰＵのメモリに対象データを格納する。これにより、対象データを少なくとも一つのＣＰＵの分散キャッシュに格納でき、かつ他のＣＰＵの分散キャッシュの領域を有効的に活用することができる。
【００７７】
また、本実施の形態では、入力先スレッドの割当先ＣＰＵが不明な場合（入力先スレッドが未割当の場合）、変数ｘの出力元スレッドのＣＰＵ１０１フラグを立てるが、これに限らず、たとえば、すべてのＣＰＵフラグを立ててもよい。または、たとえば、いずれのＣＰＵフラグも立てずに変数ｘを共有メモリ１０４へ直接書き込むように設定してもよい。ＯＳ１９１が上述した変数ｘに関する処理と同様に変数ｚに関しても変換テーブル４００内の変数ｚに関するレコードのＣＰＵ１０１フラグを１に更新する。
【００７８】
また、図１０の例では、ＯＳ１９１はスレッドの割当が発生する都度、変換テーブル４００内のＣＰＵフラグを更新しているが、これに限らず、たとえば、ＯＳ１９１は書き込み要求が発生したときに変換テーブル４００内のＣＰＵフラグを更新してもよい。
【００７９】
図１１は、スレッド２の割当例を示す説明図である。まず、ＯＳ１９１が、スレッド２の割当指示を受け付けると、スレッド管理テーブル８００を参照することにより各スレッドの割当状態を確認し、ＣＰＵ１０１とＣＰＵ１０２のいずれかのＣＰＵにスレッド２を割り当てる。ＯＳ１９１は（１）スレッド２をＣＰＵに割り当てることにより、スレッド２の割当を検出する。
【００８０】
つぎに、ＯＳ１９１は、スレッド管理テーブル８００内のスレッドの識別情報の項目８０１からスレッド２と一致する識別情報を検索する。ＯＳ１９１が、（２）スレッドの識別情報の項目８０１の識別情報がスレッド２である割当先ＣＰＵの識別情報の項目８０２に保持されている割当先ＣＰＵの識別情報をＣＰＵ１０２に更新する。さらに、ＯＳ１９１が、（２）スレッドの識別情報の項目８０１の識別情報がスレッド２である実行状態の項目８０３に保持されている実行状態を実行中に更新する。
【００８１】
つづいて、ＯＳ１９１がスレッド２に関するリスト７０２から出力テーブル７１２を取得する。そして、ＯＳ１９１が、出力テーブル７１２から出力データの項目に保持されている出力データ順に入力先スレッドの項目に保持されている入力先スレッドの識別情報を検索する。ここで、スレッド２内の出力データである変数ｙと変数ａとに関する変換テーブル４００の更新処理は、図１０で説明した変数ｘの更新処理と同一であるため、詳細な説明を省略する。
【００８２】
つぎに、ＯＳ１９１が、スレッド２に関するリスト７０２から入力テーブル７２２を取得する。そして、ＯＳ１９１が、入力テーブル７２２から入力データの項目に保持されている入力データ順に出力元スレッドの項目に保持されている出力元スレッドの識別情報を検索する。ここでは、スレッド２の入力データである変数ｘと変数ｚの出力元スレッドはスレッド１であるため、検索結果はスレッド１である。そして、ＯＳ１９１が、検索した出力元スレッドの出力テーブルを取得する。すなわち、スレッド１に関するリスト７０１から出力テーブル７１１が取得される。
【００８３】
ＯＳ１９１が、出力テーブル７１１から出力データの項目に保持されている出力データ順に入力先スレッドの項目に保持されている入力先スレッドの識別情報を検索する。ここで、スレッド１内の出力データである変数ｘと変数ｚとに関する変換テーブル４００の更新処理は、図１０で説明した変数ｘの更新処理と同一であるため、詳細な説明を省略する。これにより、（３）変換テーブル４００内の変数ｘに関するレコードのＣＰＵフラグが更新される。
【００８４】
図１２は、変数ｘが格納される例を示す説明図である。つぎに、スレッド１内で変数ｘの書き込み要求が発生すると、ＯＳ１９１が、該書き込み要求を検出し、（１）論理アドレスと書き込みデータとが付随されている書き込み要求をＭＭＵ１４１へ通知する。ＭＭＵ１４１は、検出部９０３により、受け付けた書き込み要求に付随されている論理アドレスと同一の変換テーブル４００内の論理アドレスの項目４０１に保持されている論理アドレスを検索する。そして、ＭＭＵ１４１は、該検索した論理アドレスに対応する物理アドレスの項目４０２に保持されている物理アドレスを検索することにより、（２）論理アドレスから物理アドレスに変換する。
【００８５】
そして、ＭＭＵ１４１が、特定部９０４により、変換テーブル４００内の検索した論理アドレスに対応するＣＰＵフラグを読み出すことにより、（３）変数ｘの入力先スレッドの割当先ＣＰＵを特定する。検索した論理アドレスに対応するＣＰＵフラグとは、検索した論理アドレスを含むレコード上にあるＣＰＵフラグである。ＭＭＵ１４１が、物理アドレスと書き込みデータと各ＣＰＵフラグを書き込み要求に付随させ、分散キャッシュコントローラ１２１へ該書き込み要求を通知する。
【００８６】
分散キャッシュコントローラ１２１は、該書き込み要求を受け付けると、各ＣＰＵフラグを参照し、１であるＣＰＵフラグが示すＣＰＵに対して書き込みデータを格納する。ここでは、ＣＰＵフラグが０であり、ＣＰＵフラグが１であるため、分散キャッシュコントローラ１２１は、格納部９０５により、（５）ＣＰＵ１０１の分散キャッシュメモリ１３１へ書き込みデータを格納せず、（６）ＣＰＵ１０２の分散キャッシュメモリ１３２へ書き込みデータを格納する。
【００８７】
（ＯＳ１９１による更新処理手順）
図１３および図１４は、ＯＳ１９１による更新処理手順を示すフローチャートである。まず、ＯＳ１９１が、スレッドの起動指示を受け付けたか否かを判断する（ステップＳ１３０１）。ＯＳ１９１が、スレッドの起動指示を受け付けていないと判断した場合（ステップＳ１３０１：Ｎｏ）、ステップＳ１３０１へ戻る。ＯＳ１９１が、スレッドの起動指示を受け付けたと判断した場合（ステップＳ１３０１：Ｙｅｓ）、起動指示を受け付けたスレッド（対象スレッド）の割当先ＣＰＵを決定する（ステップＳ１３０２）。
【００８８】
つぎに、ＯＳ１９１が、更新部９０２により、決定結果に基づきスレッド管理テーブル８００を更新する（ステップＳ１３０３）。そして、ＯＳ１９１が、対象スレッドの出力データごとに該出力データの入力先スレッドが記述された出力テーブルを取得し（ステップＳ１３０４）、更新部９０２により、変換テーブル４００の更新処理を実行する（ステップＳ１３０５）。
【００８９】
そして、ＯＳ１９１が、対象スレッドの入力データごとに該入力データの出力元スレッドが記述された入力テーブルを取得し（ステップＳ１３０６）、対象スレッド内の入力データのうち、未選択な入力データがあるか否かを判断する（ステップＳ１３０７）。ＯＳ１９１が、未選択な入力データがあると判断した場合（ステップＳ１３０７：Ｙｅｓ）、未選択な入力データから１つの入力データ（選択入力データ）を選択する（ステップＳ１３０８）。
【００９０】
そして、ＯＳ１９１が、選択入力データに関する領域情報内の対象スレッドの割当先ＣＰＵに対応するフラグを１に設定する（ステップＳ１３０９）。ＯＳ１９１が、選択入力データの出力元スレッドを入力テーブルに基づいて検索し（ステップＳ１３１０）、検索した出力元スレッド内の出力データごとに該出力データの入力先スレッドが記述された出力テーブルを取得する（ステップＳ１３１１）。そして、ＯＳ１９１が、更新部９０２により、変換テーブル４００の更新処理を実行し（ステップＳ１３１２）、ステップＳ１３０７へ戻る。
【００９１】
また、ステップＳ１３０７において、ＯＳ１９１が、対象スレッド内の入力データのうち、未選択な入力データがないと判断した場合（ステップＳ１３０７：Ｎｏ）、ステップＳ１３０１へ戻る。
【００９２】
図１５は、図１３および図１４で示した変換テーブルの更新処理（ステップＳ１３０５またはステップＳ１３１２）の詳細な説明を示すフローチャートである。まず、ＯＳ１９１が、取得した出力テーブル内の出力データのうち、未選択の出力データがあるか否かを判断する（ステップＳ１５０１）。そして、ＯＳ１９１が、取得した出力テーブル内の出力データのうち、未選択の出力データがあると判断した場合（ステップＳ１５０１：Ｙｅｓ）、未選択の出力データから１つの出力データ（選択出力データ）を選択する（ステップＳ１５０２）。
【００９３】
そして、ＯＳ１９１が、出力テーブルに基づき選択出力データの入力先スレッドを検索し（ステップＳ１５０３）、検索した入力先スレッドの割当先ＣＰＵをスレッド管理テーブル８００に基づき特定する（ステップＳ１５０４）。つぎに、ＯＳ１９１が、選択出力データに関するＣＰＵフラグのうち、特定した割当先ＣＰＵに対応するＣＰＵフラグを１に設定する（ステップＳ１５０５）。
【００９４】
そして、ＯＳ１９１が、選択出力データに関するＣＰＵフラグのうち、特定した割当先ＣＰＵを除くＣＰＵに対応するＣＰＵフラグを０に設定し（ステップＳ１５０６）、全入力先スレッドの割当先ＣＰＵを特定したか否かを判断する（ステップＳ１５０７）。ＯＳ１９１が、全入力先スレッドの割当先ＣＰＵを特定したと判断した場合（ステップＳ１５０７：Ｙｅｓ）、ステップＳ１５０１へ戻る。
【００９５】
ＯＳ１９１が、全入力先スレッドの割当先ＣＰＵを特定していないと判断した場合（ステップＳ１５０７：Ｎｏ）、選択出力データに関するＣＰＵフラグのうち、対象スレッドの割当先ＣＰＵに対応するフラグを１に設定する（ステップＳ１５０８）。これにより、対象データを少なくとも一つのＣＰＵの分散キャッシュに格納でき、かつ他のＣＰＵの分散キャッシュの領域を有効的に活用することができる。そして、ＯＳ１９１が、ステップＳ１５０８のつぎにステップＳ１５０１へ戻る。
【００９６】
また、ＯＳ１９１が、取得した出力テーブル内の出力データのうち、未選択の出力データがないと判断した場合（ステップＳ１５０１：Ｎｏ）、ステップＳ１３０６（ステップＳ１３０７）へ移行する。
【００９７】
（各ＭＭＵによる特定処理手順）
図１６は、各ＭＭＵによる特定処理手順を示すフローチャートである。まず、ＭＭＵが、検出部９０３により、対象データの書き込み要求を検出したか否かを判断する（ステップＳ１６０１）。ＭＭＵが、対象データの書き込み要求を検出していないと判断した場合（ステップＳ１６０１：Ｎｏ）、ステップＳ１６０１へ戻る。
【００９８】
ＭＭＵが、対象データの書き込み要求を検出したと判断した場合（ステップＳ１６０１：Ｙｅｓ）、特定部９０４により、検出した書き込み要求に付随する論理アドレスに基づいて変換テーブル４００から対象データに関するレコードを検索する（ステップＳ１６０２）。そして、ＭＭＵが、論理アドレスに変わって検索したレコード内の物理アドレスを書き込み要求に関連付ける（ステップＳ１６０３）。
【００９９】
つぎに、ＭＭＵが、特定部９０４により、検索したレコードからＣＰＵフラグを書き込み要求に関連付けて（ステップＳ１６０４）、分散キャッシュコントローラへ書き込み要求を通知し（ステップＳ１６０５）、ステップＳ１６０１へ戻る。
【０１００】
（各分散キャッシュコントローラによる格納処理手順）
図１７は、分散キャッシュコントローラによる格納処理手順（スヌープバス１０３からの書き込み要求）を示すフローチャートである。まず、分散キャッシュコントローラが、スヌープバス１０３からの書き込み要求を受け付けたか否かを判断する（ステップＳ１７０１）。分散キャッシュコントローラが、スヌープバス１０３からの書き込み要求を受け付けていないと判断した場合（ステップＳ１７０１：Ｎｏ）、ステップＳ１７０１へ戻る。
【０１０１】
一方、分散キャッシュコントローラが、スヌープバス１０３からの書き込み要求を受け付けたと判断した場合（ステップＳ１７０１：Ｙｅｓ）、ステップＳ１７０２へ移行する。ステップＳ１７０２において、分散キャッシュコントローラが、対象キャッシュラインが該分散キャッシュコントローラに対応する分散キャッシュメモリ上にあるか否かを判断する（ステップＳ１７０２）。分散キャッシュコントローラが、対象キャッシュラインが該分散キャッシュコントローラに対応する分散キャッシュメモリ上にないと判断した場合（ステップＳ１７０２：Ｎｏ）、出力先ＣＰＵが１つだけか否かを判断する（ステップＳ１７０３）。
【０１０２】
分散キャッシュコントローラが、出力先ＣＰＵが１つだけであると判断した場合（ステップＳ１７０３：Ｙｅｓ）、Ｍ状態で対象キャッシュラインをフェッチする（ステップＳ１７０４）。Ｍ状態で対象キャッシュラインをフェッチするとはタグ情報のＳＴＡＴＥをＭ状態に設定してフェッチすることを示している。そして、分散キャッシュコントローラが、出力先ＣＰＵが１つだけでないと判断した場合（ステップＳ１７０３：Ｎｏ）、Ｓ状態で対象キャッシュラインをフェッチする（ステップＳ１７０５）。Ｓ状態で対象キャッシュラインをフェッチするとはタグ情報のＳＴＡＴＥをＳ状態に設定してフェッチすることを示している。
【０１０３】
ステップＳ１７０４またはステップＳ１７０５のつぎに、分散キャッシュコントローラが、該分散キャッシュコントローラに対応する分散キャッシュメモリ内の対象キャッシュライン上のデータを更新し（ステップＳ１７０６）、ステップＳ１７０１へ戻る。また、分散キャッシュコントローラが、対象キャッシュラインが該分散キャッシュコントローラに対応する分散キャッシュメモリ上にあると判断した場合（ステップＳ１７０２：Ｙｅｓ）、ステップＳ１７０６へ移行する。
【０１０４】
図１８は、分散キャッシュコントローラによる格納処理手順（ＭＭＵからの書き込み要求）を示すフローチャートである。まず、分散キャッシュコントローラが、ＭＭＵからの書き込み要求を受け付けたか否かを判断する（ステップＳ１８０１）。分散キャッシュコントローラが、ＭＭＵからの書き込み要求を受け付けていないと判断した場合（ステップＳ１８０１：Ｎｏ）、ステップＳ１８０１へ戻る。
【０１０５】
一方、分散キャッシュコントローラが、ＭＭＵからの書き込み要求を受け付けたと判断した場合（ステップＳ１８０１：Ｙｅｓ）、書き込み要求にＣＰＵフラグが付随されているか否かを判断する（ステップＳ１８０２）。分散キャッシュコントローラが、書き込み要求にＣＰＵフラグが付随されていないと判断した場合（ステップＳ１８０２：Ｎｏ）、通常のスヌープ対応キャッシュコントローラとして動作し（ステップＳ１８０３）、ステップＳ１８０１へ戻る。
【０１０６】
通常のスヌープ対応キャッシュコントローラとしての動作とは、対象キャッシュラインが分散キャッシュメモリ上に格納されているか否かをタグ情報に基づいて判断し、格納されていれば、対象キャッシュラインを更新する。一方、対象キャッシュラインが分散キャッシュメモリ上に格納されていない場合、分散キャッシュメモリ上に対象キャッシュラインをフェッチする。そして、すべてのＣＰＵの分散キャッシュコントローラへ対象キャッシュラインの格納を通知する。
【０１０７】
ステップＳ１８０２において、分散キャッシュコントローラが、書き込み要求にＣＰＵフラグが付随されていると判断した場合（ステップＳ１８０２：Ｙｅｓ）、判断部９０６により、書き込み要求の要求元ＣＰＵに対応するＣＰＵフラグが１か否かを判断する（ステップＳ１８０４）。分散キャッシュコントローラが、書き込み要求の要求元ＣＰＵに対応するＣＰＵフラグが１であると判断した場合（ステップＳ１８０４：Ｙｅｓ）、対象キャッシュラインが分散キャッシュメモリ上にあるか否かを判断する（ステップＳ１８０５）。
【０１０８】
分散キャッシュコントローラが、対象キャッシュラインが分散キャッシュメモリ上にないと判断した場合（ステップＳ１８０５：Ｎｏ）、出力先ＣＰＵが１つであるか否かを判断する（ステップＳ１８０６）。分散キャッシュコントローラが、出力先ＣＰＵが１つであると判断した場合（ステップＳ１８０６：Ｙｅｓ）、Ｍ状態で対象キャッシュラインをフェッチする（ステップＳ１８０７）。
【０１０９】
分散キャッシュコントローラが、出力先ＣＰＵが１つでないと判断した場合（ステップＳ１８０６：Ｎｏ）、Ｓ状態で対象キャッシュラインをフェッチする（ステップＳ１８０８）。ステップＳ１８０７またはステップＳ１８０８のつぎに、分散キャッシュコントローラが、分散キャッシュメモリ内の対象キャッシュライン上のデータを更新する（ステップＳ１８０９）。
【０１１０】
また、ステップＳ１８０５において、分散キャッシュコントローラが、対象キャッシュラインが分散キャッシュメモリ上にあると判断した場合（ステップＳ１８０５：Ｙｅｓ）、ステップＳ１８０９へ移行する。
【０１１１】
ステップＳ１８０４において、分散キャッシュコントローラが、書き込み要求の要求元ＣＰＵに対応するＣＰＵフラグが１でないと判断した場合（ステップＳ１８０４：Ｎｏ）、対象キャッシュラインが分散キャッシュメモリ上にあるか否かを判断する（ステップＳ１８１０）。
【０１１２】
まず、分散キャッシュコントローラが、対象キャッシュラインが分散キャッシュメモリ上にあると判断した場合（ステップＳ１８１０：Ｙｅｓ）、対象キャッシュラインのデータを共有メモリ１０４に書き戻す（ステップＳ１８１１）。そして、分散キャッシュコントローラが、消去部９０７により、対象キャッシュラインを無効化する（ステップＳ１８１２）。対象キャッシュラインを無効化するとは、対象キャッシュラインのＳＴＡＴＥをＩ状態に設定することである。ＳＴＡＴＥをＩ状態に設定することは、該対象キャッシュラインを消去することを示す。
【０１１３】
ステップＳ１８１０において、分散キャッシュコントローラが、対象キャッシュラインが分散キャッシュメモリ上にないと判断した場合（ステップＳ１８１０：Ｎｏ）、ステップＳ１８１３へ移行する。ステップＳ１８０９、ステップＳ１８１０：Ｎｏの場合、またはステップＳ１８１２のつぎに、ＣＰＵフラグで指定された分散キャッシュへ書き込み要求を通知し（ステップＳ１８１３）、ステップＳ１８０１へ戻る。
【０１１４】
（アプリケーションの一例）
ここで、具体的なアプリケーションとしてマルチチャンネルオーディオデコーダを例に挙げる。マルチチャンネルオーディオデコーダでは、音声データをデコードして出力する処理である。
【０１１５】
まず、圧縮された音声データが１単位分デコードされる。そして、デコード結果は１から７チャンネルまではそれぞれ４ＫＢ（Ｂｙｔｅ）サイズである。デコード結果はチャンネルごとにフィルタ処理や加工・合成（ＰＣＭ（Ｐｕｌｓｅ  Ｃｏｄｅ  Ｍｏｄｕｌａｔｉｏｎ））処理が行われる。
【０１１６】
フィルタ処理やＰＣＭ処理が行われた音声データは全チャンネル分集約され、集約後の音声データは機器に搭載された再生装置（スピーカー）のチャンネル数に合わせてダウンミックス処理が行われる。そして、ダウンミックス処理後の音声データは該再生装置へ出力される。１単位の音声データは数十ｍｓ程度なので、マルチチャンネルオーディオデコーダでは、再生装置へ出力中に次の音声データのデコード処理やフィルタ処理、ＰＣＭ処理を行うことを繰り返して長時間の音声データを再生している。
【０１１７】
フィルタ処理やＰＣＭ処理はチャンネルごとに実行することができるため、多チャンネルの音声データでは各チャンネルをマルチコアプロセッサで並列にフィルタ処理およびＰＣＭ処理を実行することが可能である。
【０１１８】
図１９は、アプリケーションの一例を示す説明図である。ここでは、図１９のようにデコード処理と、各チャンネルのフィルタ処理およびＰＣＭ処理と、ダウンミックスおよび出力の処理とのスレッドに分けて実装する例を挙げる。デコード処理を行うスレッドがスレッドＤＥＣであり、フィルタ処理およびＰＣＭ処理を行うスレッドがスレッドＣＨ１〜スレッドＣＨ７およびスレッドＣＨ７．１であり、フィルタ処理およびＰＣＭ処理を行うスレッドがスレッドＤＭである。
【０１１９】
まず、スレッドＤＥＣでは全チャネル分のデコードした音声データ（デコード結果）を出力する。そして、スレッドＣＨ１〜スレッドＣＨ７およびスレッドＣＨ７．１はそれぞれ１チャンネル分のデコードされた音声データ（デコード結果）を入力として１チャンネル分の加工した音声データ（ＰＣＭ結果）をそれぞれが出力する。そして、スレッドＤＭでは全チャネル分の加工された音声データを入力とする。
【０１２０】
図２０は、デコード結果の格納例を示す説明図である。図２０では、スレッドＣＨ１とスレッドＣＨ２とがＣＰＵ２００１に割り当てられ、スレッドＣＨ３とスレッドＣＨ４とがＣＰＵ２００２に割り当てられる。スレッドＣＨ５とスレッドＣＨ６とがＣＰＵ２００３に割り当てられ、スレッドＣＨ７と、スレッドＣＨ７．１と、スレッドＤＥＣと、スレッドＤＭと、がＣＰＵ２００４に割り当てられる。ここでは、スレッドＤＥＣのみが実行中（図中実線のスレッド）であり、他のスレッドはすべて実行待機中（図中破線のスレッド）である。
【０１２１】
図２０に示すマルチコアプロセッサシステムが記憶部９０１〜格納部９０５を有していると、スレッドＤＥＣのデコード結果のうち、スレッドＣＨ１とスレッドＣＨ２への入力であるデコード結果はＣＰＵ２００１の分散キャッシュ２０１１のみに出力される。そして、スレッドＤＥＣのデコード結果のうち、スレッドＣＨ３とスレッドＣＨ４への入力であるデコード結果はＣＰＵ２００２の分散キャッシュ２０１２のみに出力される。
【０１２２】
さらに、スレッドＤＥＣのデコード結果のうち、スレッドＣＨ５とスレッドＣＨ６への入力であるデコード結果はＣＰＵ２００３の分散キャッシュ２０１３のみに出力される。スレッドＤＥＣのデコード結果のうち、スレッドＣＨ７とスレッドＣＨ７．１への入力であるデコード結果はＣＰＵ２００４の分散キャッシュ２０１４のみに格納される。
【０１２３】
図２０では、スレッドＤＥＣから分散キャッシュ２０１３と分散キャッシュ２０１２と分散キャッシュ２０１１内のデコード結果へ矢印が出ている。実際には、ＣＰＵ２００４のＭＭＵと、分散キャッシュ２０１４内の分散キャッシュコントローラと、スヌープバスを介して各分散キャッシュへデコード結果が格納されている。
【０１２４】
図２１は、ＰＣＭ結果の格納例を示す説明図である。スレッドＣＨ１〜スレッドＣＨ７およびスレッドＣＨ７．１が実行中（図中実線のスレッド）であり、スレッドＤＥＣとスレッドＤＭとは実行待機中（図中破線のスレッド）である。図２１で示すマルチコアプロセッサシステムが記憶部９０１〜格納部９０５を有していると、各ＰＣＭの結果はスレッドＤＭで用いられるため、各ＰＣＭの結果はスレッドＤＭが割り当てられているＣＰＵの分散キャッシュにのみ格納される。
【０１２５】
図２１では、各チャンネルのスレッドから分散キャッシュ２０１４内の各ＰＣＭの結果へ矢印が出ている。実際には、各チャンネルのスレッドが割り当てられたＣＰＵのＭＭＵと、該ＣＰＵの分散キャッシュ内の分散キャッシュコントローラと、スヌープバスを介して分散キャッシュ２０１４へ各ＰＣＭの結果が格納される。
【０１２６】
以上説明したように、マルチコアプロセッサシステム、制御プログラム、および制御方法によれば、マルチコアプロセッサのうち、対象データを入力として用いる入力先スレッドの割当先ＣＰＵの分散キャッシュにのみ対象データを格納する。これにより、対象データの読み出しが不要なＣＰＵの分散キャッシュに対象データが格納されない。したがって、入力先スレッドが対象データを読み出す読み出し速度に影響を与えることなく、各分散キャッシュの領域を有効的に活用することができる。
【０１２７】
また、対象データの書き込み要求の要求元ＣＰＵが入力先スレッドの割当先ＣＰＵに含まれていない場合、該要求元ＣＰＵの分散キャッシュにすでに対象データが格納されている場合、該要求元ＣＰＵの分散キャッシュにすでに対象データを消去する。これにより、読み出されないデータの領域を消去することができ、対象データを読み出さないＣＰＵの分散キャッシュの領域を有効的に活用することができる。
【０１２８】
また、対象データの入力先スレッドがマルチコアプロセッサへ未割当の場合、書き込み要求の要求元ＣＰＵのメモリに対象データを格納する。これにより、対象データを少なくとも一つのＣＰＵの分散キャッシュに格納でき、かつ他のＣＰＵの分散キャッシュの領域を有効的に活用することができる。
【符号の説明】
【０１２９】
１００  マルチコアプロセッサシステム
１０１，１０２，２００１，２００２，２００３，２００４  ＣＰＵ
１２１，１２２  分散キャッシュコントローラ
１３１，１３２  分散キャッシュメモリ
９０１  記憶部
９０２  更新部
９０３  検出部
９０４  特定部
９０５  格納部
９０６  判断部
９０７  消去部
【図１】
0005505501.tif 000002
【図２】
0005505501.tif 000003
【図３】
0005505501.tif 000004
【図４】
0005505501.tif 000005
【図５】
0005505501.tif 000006
【図６】
0005505501.tif 000007
【図７】
0005505501.tif 000008
【図８】
0005505501.tif 000009
【図９】
0005505501.tif 000010
【図１０】
0005505501.tif 000011
【図１１】
0005505501.tif 000012
【図１２】
0005505501.tif 000013
【図１３】
0005505501.tif 000014
【図１４】
0005505501.tif 000015
【図１５】
0005505501.tif 000016
【図１６】
0005505501.tif 000017
【図１７】
0005505501.tif 000018
【図１８】
0005505501.tif 000019
【図１９】
0005505501.tif 000020
【図２０】
0005505501.tif 000021
【図２１】
0005505501.tif 000022