(57)【特許請求の範囲】
【請求項１】
複数のコアと、
前記コアに対応する複数のポートを備えたメモリコントローラと、
前記ポートごとに分割された物理アドレス空間を備えた共用メモリと、
ソフトウェアごとに当該ソフトウェアを割り当てるコアの数を記憶するデータベースから、実行対象ソフトウェアを割り当てるコアの数を取得する取得手段と、
前記取得手段によって取得された前記実行対象ソフトウェアを割り当てるコアの数と前記複数のコアの使用状況とに基づいて、前記実行対象ソフトウェアを割り当てるコアを決定する決定手段と、
前記決定手段によって決定されたコアに対応する特定のポートが複数存在する場合、前記特定のポートのうち、任意のポートを選択する選択手段と、
前記特定のポートのうち、前記選択手段によって選択されたポートを除く残余のポートの接続を解除する通知を前記残余のポートに通知する解除通知手段と、
複数存在する前記特定のポートに分割された物理アドレス空間を集約する集約手段と、
前記集約手段によって集約された物理アドレス空間を、前記選択されたポートが新たにアクセス可能な物理アドレス空間に設定するとともに、前記複数のポートのうち前記決定手段によって決定されたコアに対応する特定のポートに分割された物理アドレス空間の中から、前記実行対象ソフトウェアで規定された論理アドレス空間に対応する物理アドレス空間を前記決定されたコアごとに設定する設定手段と、
前記設定手段によって設定された新たにアクセス可能な物理アドレス空間を前記選択されたポートに通知するとともに、前記設定手段によって設定された物理アドレス空間と前記設定された物理アドレス空間に対応する論理アドレス空間とを前記特定のポートに通知するアドレス通知手段と、
前記アドレス通知手段によって前記特定のポートに通知した後に、前記実行対象ソフトウェアに実行開始を通知する実行開始通知手段と、
を備えることを特徴とするマルチコアプロセッサシステム。
【請求項２】
前記決定手段によって決定されたコアが複数存在する場合、複数の決定されたコアがバリア同期コードの実行を開始するまで前記複数の決定されたコアを待機させる前記バリア同期コードを前記複数の決定されたコアが実行して、前記複数の決定されたコアが待機から復帰した時刻を、前記実行対象ソフトウェアを前記複数の決定されたコアで同時に実行する開始時刻として検出する検出手段をさらに備え、
前記アドレス通知手段は、
前記設定手段によって設定された物理アドレス空間と前記設定された物理アドレス空間に対応する論理アドレス空間とを前記特定のポートに通知し、
前記検出手段は、
前記アドレス通知手段によって前記特定のポートへの通知を完了した時刻を前記開始時刻として検出し、
前記実行開始通知手段は、
前記検出手段によって開始時刻が検出された後に、前記実行対象ソフトウェアに実行開始を通知することを特徴とする請求項１に記載のマルチコアプロセッサシステム。
【請求項３】
前記コアの数と前記ポートの数とが等しいことを特徴とする請求項２に記載のマルチコアプロセッサシステム。
【請求項４】
複数のコアのおのおのに対応する複数のポートのおのおのに分割された物理アドレス空間を備えた共用メモリを制御する前記複数のポートを備えたメモリコントローラの制御を前記複数のコアの中の特定のコアが、
ソフトウェアごとに当該ソフトウェアを割り当てるコアの数を記憶するデータベースから、実行対象ソフトウェアを割り当てるコアの数を取得する取得工程と、
前記取得工程によって取得された前記実行対象ソフトウェアを割り当てるコアの数と前記複数のコアの使用状況とに基づいて、前記実行対象ソフトウェアを割り当てるコアを決定する決定工程と、
前記決定工程によって決定されたコアに対応する特定のポートが複数存在する場合、前記特定のポートのうち選択されたポートを除く残余のポートの接続を解除する通知を前記残余のポートに通知して複数存在する前記特定のポートに分割された物理アドレス空間を集約した物理アドレス空間を、前記選択されたポートが新たにアクセス可能な物理アドレス空間に設定するとともに、前記複数のポートのうち前記決定工程によって決定されたコアに対応する特定のポートに分割された物理アドレス空間の中から、前記実行対象ソフトウェアで規定された論理アドレス空間に対応する物理アドレス空間を前記決定されたコアごとに設定する設定工程と、
前記設定工程によって設定された新たにアクセス可能な物理アドレス空間を前記選択されたポートに通知するとともに、前記設定工程によって設定された物理アドレス空間と前記設定された物理アドレス空間に対応する論理アドレス空間とを前記特定のポートに通知するアドレス通知工程と、
前記アドレス通知工程によって前記特定のポートに通知した後に、前記実行対象ソフトウェアに実行開始を通知する実行開始通知工程と、
を実行することを特徴とするメモリコントローラ制御方法。
【請求項５】
複数のコアのおのおのに対応する複数のポートのおのおのに分割された物理アドレス空間を備えた共用メモリを制御する前記複数のポートを備えたメモリコントローラの制御を前記複数のコアの中の特定のコアに、
ソフトウェアごとに当該ソフトウェアを割り当てるコアの数を記憶するデータベースから、実行対象ソフトウェアを割り当てるコアの数を取得する取得工程と、
前記取得工程によって取得された前記実行対象ソフトウェアを割り当てるコアの数と前記複数のコアの使用状況とに基づいて、前記実行対象ソフトウェアを割り当てるコアを決定する決定工程と、
前記決定工程によって決定されたコアに対応する特定のポートが複数存在する場合、前記特定のポートのうち選択されたポートを除く残余のポートの接続を解除する通知を前記残余のポートに通知して複数存在する前記特定のポートに分割された物理アドレス空間を集約した物理アドレス空間を、前記選択されたポートが新たにアクセス可能な物理アドレス空間に設定するとともに、前記複数のポートのうち前記決定工程によって決定されたコアに対応する特定のポートに分割された物理アドレス空間の中から、前記実行対象ソフトウェアで規定された論理アドレス空間に対応する物理アドレス空間を前記決定されたコアごとに設定する設定工程と、
前記設定工程によって設定された新たにアクセス可能な物理アドレス空間を前記選択されたポートに通知するとともに、前記設定工程によって設定された物理アドレス空間と前記設定された物理アドレス空間に対応する論理アドレス空間とを前記特定のポートに通知するアドレス通知工程と、
前記アドレス通知工程によって前記特定のポートに通知した後に、前記実行対象ソフトウェアに実行開始を通知する実行開始通知工程と、
を実行させることを特徴とするメモリコントローラ制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、メモリコントローラを制御するマルチコアプロセッサシステム、メモリコントローラ制御方法、およびメモリコントローラ制御プログラムに関する。
【背景技術】
【０００２】
従来から、複数個のＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）からアクセスされるメモリとして、データを記憶可能な複数のメモリバンクと、データの入出力を可能とする複数の入出力ポートを備えるマルチポートメモリの技術が知られている。また、ＣＰＵがメモリのデータを読み書きする際にメモリを制御する装置として、メモリコントローラを用いる技術も知られている。メモリコントローラの機能として、メモリとバスの間、またはＣＰＵとバスの間に、バッファ機構を設け、バッファにデータを一時保留するほか、分岐先のポートへの自動分岐を行う機能を持つという技術が開示されている（たとえば、下記特許文献１を参照。）。【０００３】
また、メモリへのリクエストとレスポンスの経路を分離し、ＣＰＵからのリクエストではマルチポートメモリを制御するメモリコントローラが即座にダミーレスポンスを返す機構により、ＣＰＵは次の処理に即座に移行できるといった技術が開示されている（たとえば、下記特許文献２を参照。）。【０００４】
また、マルチポートを使用する技術として、アドレス空間を機能種別ごとに分割し、分割されたアドレス空間ごとにポートを用意することで、複数の機能を同時に実行し、高速に処理を実行できるという技術が開示されている（たとえば、下記特許文献３を参照。）。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特表平１１−５１０２８５号公報
【特許文献２】特開２００８−１１７１０９号公報
【特許文献３】特開２００３−１１４７９７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、上述した従来技術において、特許文献１にかかる技術では、メモリとバッファ間、バスとバッファ間を高クロックにすることで、経路上のレイテンシを最小にすることができる。しかし、特許文献１にかかる技術は、高クロックにすることで、消費電力が増加するという問題があった。また、特許文献２にかかる技術では、リクエストとレスポンスの経路を分離してもアクセス競合は発生し続けるという問題があった。また、特許文献１にかかる技術と同様に、バスからバッファの間が高クロックとなるため、消費電力が増加するという問題があった。【０００７】
また、特許文献３にかかる技術では、機能が異なる２つのソフトウェアが同一のアドレス空間にアクセスする場合に、アクセス競合を起こすという問題があった。また、機能種別ごとにポートを用意する必要があり、機能種別が増加するにつれ、ポート数も増加することになり、消費電力が増加するという問題があった。【０００８】
本発明は、上述した従来技術による問題点を解消するため、アクセス競合を回避できるマルチコアプロセッサシステム、メモリコントローラ制御方法、およびメモリコントローラ制御プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００９】
本実施例の一実施態様によると、複数のコアと、コアに対応する複数のポートを備えたメモリコントローラと、ポートごとに分割された物理アドレス空間を備えた共用メモリと、ソフトウェアごとにソフトウェアを割り当てるコアの数を記憶するデータベースから、実行対象ソフトウェアを割り当てるコアの数を取得し、取得された実行対象ソフトウェアを割り当てるコアの数と前記複数のコアの使用状況とに基づいて、実行対象ソフトウェアを割り当てるコアを決定し、複数のポートのうち決定されたコアに対応する特定のポートがアクセス可能な物理アドレス空間の中から、実行対象ソフトウェアで規定された論理アドレス空間に対応する物理アドレス空間を決定されたコアごとに設定し、設定された物理アドレス空間と設定された物理アドレス空間に対応する論理アドレス空間とを特定のポートに通知し、特定のポートに通知した後に、実行対象ソフトウェアに実行開始を通知するマルチコアプロセッサシステムを提供する。
【発明の効果】
【００１０】
本マルチコアプロセッサシステム、メモリコントローラ制御方法、およびメモリコントローラ制御プログラムによれば、ＣＰＵがアクセスするアドレス範囲と他のＣＰＵがアクセスするアドレス範囲とが異なり、アクセス競合を回避できるという効果を奏する。
【図面の簡単な説明】
【００１１】
【図１】実施の形態にかかるマルチコアプロセッサシステムのハードウェアを示すブロック図である。
【図２】マルチコアプロセッサシステム１００のハードウェアの一部とソフトウェアを示すブロック図である。
【図３】物理アドレス空間の分割と論理アドレス空間の結合の例を示す説明図である。
【図４】マルチコアプロセッサシステム１００内の各部の関係を説明するブロック図である。
【図５】ポート接続器２０３のブロック図である。
【図６】アドレス変換器２０４と設定の一例を示す説明図である。
【図７】並列度情報テーブル４０１の記憶内容の一例を示す説明図である。
【図８】分散ソフトウェアと並列ソフトウェアが混載した状態を示す説明図である。
【図９】図８におけるＣＰＵのディスパッチ周期パターンを示す説明図である。
【図１０】タイミングｔ１におけるソフトウェアの実行状態とメモリコントローラ２０２の設定状態を示す説明図である。
【図１１】タイミングｔ１におけるメモリコントローラ２０２の状態を示す説明図である。
【図１２】タイミングｔ２におけるソフトウェアの実行状態とメモリコントローラ２０２の設定状態を示す説明図である。
【図１３】タイミングｔ２におけるメモリコントローラ２０２の状態を示す説明図である。
【図１４】タイミングｔ３におけるソフトウェアの実行状態とメモリコントローラ２０２の設定状態を示す説明図である。
【図１５】タイミングｔ３におけるメモリコントローラ２０２の状態を示す説明図である。
【図１６】スケジューリング処理を示すフローチャートである。
【図１７】アドレス空間変換処理を示すフローチャートである。
【発明を実施するための形態】
【００１２】
以下に添付図面を参照して、本発明にかかるマルチコアプロセッサシステム、メモリコントローラ制御方法、およびメモリコントローラ制御プログラムの好適な実施の形態を詳細に説明する。
【００１３】
（マルチコアプロセッサシステム）
図１は、実施の形態にかかるマルチコアプロセッサシステムのハードウェアを示すブロック図である。図１において、マルチコアプロセッサシステム１００は、ＣＰＵを複数搭載するＣＰＵｓ１０１と、ＲＯＭ（Ｒｅａｄ‐Ｏｎｌｙ  Ｍｅｍｏｒｙ）１０２と、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）１０３と、を備えている。また、マルチコアプロセッサシステム１００は、フラッシュＲＯＭ１０４と、フラッシュＲＯＭコントローラ１０５と、フラッシュＲＯＭ１０６と、を備えている。また、マルチコアプロセッサシステム１００は、ユーザやその他の機器との入出力装置として、ディスプレイ１０７と、Ｉ／Ｆ（Ｉｎｔｅｒｆａｃｅ）１０８と、キーボード１０９と、を備えている。また、各部はバス１１０によってそれぞれ接続されている。
【００１４】
ここで、ＣＰＵｓ１０１は、マルチコアプロセッサシステム１００の全体の制御を司る。ＣＰＵｓ１０１は、シングルコアのプロセッサを並列して接続したすべてのＣＰＵを指している。ＣＰＵｓ１０１の詳細は、図２にて後述する。また、マルチコアプロセッサシステムとは、コアが複数搭載されたプロセッサを含むコンピュータのシステムである。本実施形態では、ＣＰＵの接続方法によらず、メモリを共有する、すなわちＴＣＭＰ（Ｔｉｇｈｔｌｙ  Ｃｏｕｐｌｅｄ  Ｍｕｌｔｉ  Ｐｒｏｃｅｓｓｏｒ）のアーキテクチャーを前提とする。なお、本実施の形態では、説明を単純化するため、シングルコアのプロセッサが並列されているプロセッサ群を例に挙げて説明する。
【００１５】
ＲＯＭ１０２は、ブートプログラムなどのプログラムを記憶している。ＲＡＭ１０３は、ＣＰＵｓ１０１のワークエリアとして使用される。フラッシュＲＯＭ１０４は、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）などのシステムソフトウェアやアプリケーションソフトウェアなどを記憶している。たとえば、ＯＳを更新する場合、マルチコアプロセッサシステム１００は、Ｉ／Ｆ１０８によって新しいＯＳを受信し、フラッシュＲＯＭ１０４に格納されている古いＯＳを、受信した新しいＯＳに更新する。
【００１６】
フラッシュＲＯＭコントローラ１０５は、ＣＰＵｓ１０１の制御に従ってフラッシュＲＯＭ１０６に対するデータのリード／ライトを制御する。フラッシュＲＯＭ１０６は、フラッシュＲＯＭコントローラ１０５の制御で書き込まれたデータを記憶する。データの具体例としては、マルチコアプロセッサシステム１００を使用するユーザがＩ／Ｆ１０８を通して取得した画像データ、映像データなどである。フラッシュＲＯＭ１０６は、たとえば、メモリカード、ＳＤカードなどを採用することができる。
【００１７】
ディスプレイ１０７は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。このディスプレイ１０７は、たとえば、ＴＦＴ液晶ディスプレイなどを採用することができる。
【００１８】
Ｉ／Ｆ１０８は、通信回線を通じてＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネットなどのネットワーク１１１に接続され、ネットワーク１１１を介して他の装置に接続される。そして、Ｉ／Ｆ１０８は、ネットワーク１１１と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。Ｉ／Ｆ１０８には、たとえばモデムやＬＡＮアダプタなどを採用することができる。
【００１９】
キーボード１０９は、数字、各種指示などの入力のためのキーを備え、データの入力を行う。また、キーボード１０９は、タッチパネル式の入力パッドやテンキーなどであってもよい。
【００２０】
図２は、マルチコアプロセッサシステム１００のハードウェアの一部とソフトウェアを示すブロック図である。図２で示されるハードウェアは、共用メモリ２０１と、メモリコントローラ２０２と、ＣＰＵｓ１０１に含まれるＣＰＵ＃１〜ＣＰＵ＃４とである。メモリコントローラ２０２と、ＣＰＵ＃１〜ＣＰＵ＃４はバス１１０によって接続されている。また、以下に登場する符号のうち、＃１〜＃４のいずれかが付属する符号は、それぞれＣＰＵ＃１〜ＣＰＵ＃４に対応する符号であることを意味する。
【００２１】
共用メモリ２０１は、メモリコントローラ２０２を通してアクセス可能な記憶領域である。記憶領域とは、たとえば、ＲＯＭ１０２、ＲＡＭ１０３、フラッシュＲＯＭ１０４である。また、共用メモリ２０１は、アクセス可能な回線であるポート＃１〜ポート＃４を持つ。ＣＰＵ＃１〜ＣＰＵ＃４は、ポート＃１〜ポート＃４のいずれのポートにもアクセスすることが可能である。また、本実施の形態では、ＣＰＵ＃１はポート＃１を制御し、ＣＰＵ＃２はポート＃２を制御し、ＣＰＵ＃３はポート＃３を制御し、ＣＰＵ＃４はポート＃４を制御する。
【００２２】
また、共用メモリ２０１は、ポート＃１〜ポート＃４ごとに物理アドレス空間を分断した共用メモリブロック＃１〜共用メモリブロック＃４に分けられる。共用メモリブロック＃１〜共用メモリブロック＃４は、物理アドレス空間が連続していてもよいし、離れていてもよい。また、共用メモリ２０１で１つのメモリバンクとして存在してもよいし、１つの共用メモリブロックが１つのメモリバンクとして存在してもよい。
【００２３】
また、初期状態としてポート＃１は共用メモリブロック＃１にアクセス可能とする。同様に、ポート＃２〜ポート＃４も、それぞれ共用メモリブロック＃２〜共用メモリブロック＃４にアクセス可能とする。しかし、ポートの設定により、１つのポートは複数の共用メモリブロックにアクセス可能としてもよい。たとえば、ポート＃１の設定を変更することにより、ポート＃１は共用メモリブロック＃１と共用メモリブロック＃２にアクセス可能としてもよい。
【００２４】
メモリコントローラ２０２は、共用メモリ２０１へのデータの読み出し、書き込みを制御する機能を有する。本実施の形態では、メモリコントローラ２０２は、共用メモリ２０１にアクセスするポート＃１〜ポート＃４の設定を変更することで、ＣＰＵ＃１〜ＣＰＵ＃４の共用メモリ２０１へのアクセスを制御する。
【００２５】
ポート接続器２０３は、メモリコントローラ２０２の内部に存在し、ポート＃１〜ポート＃４の接続、または非接続を行う。図２の例では、ポート接続器２０３は、バス１１０側のポート＃３を非接続としている。アドレス変換器２０４は、メモリコントローラ２０２の内部に存在し、ポート＃１〜ポート＃４のアドレス変換を行う。変換方法の一例は、図３にて後述する。ＣＰＵ＃１〜ＣＰＵ＃４には、キャッシュメモリ＃１〜キャッシュメモリ＃４が搭載されている。
【００２６】
図２で示されるソフトウェアは、スケジューラ＃１〜スケジューラ＃４、ソフトウェア２０５−１〜ソフトウェア２０５−４である。また、ソフトウェアがアクセスする記憶領域として、キャッシュメモリブロック２０６−１〜キャッシュメモリブロック２０６−４と共用メモリブロック２０７−１〜共用メモリブロック２０７−４が存在する。
【００２７】
スケジューラ＃１〜スケジューラ＃４は、ＯＳ、またはユーザから起動要求が行われたソフトウェアを、ＣＰＵ＃１〜ＣＰＵ＃４の使用状況から、どのＣＰＵで実行するかを決定する。たとえば、スケジューラ＃１〜スケジューラ＃４は、ＣＰＵ＃１〜ＣＰＵ＃４のうち最も使用されていないＣＰＵを起動要求が行われたＣＰＵとして決定する。また、スケジューラ＃１〜スケジューラ＃４は、起動要求が行われたソフトウェアに基づいて、ポート接続器２０３とアドレス変換器２０４に設定を通知する。
【００２８】
ソフトウェア２０５−１は、ＣＰＵ＃１で実行されている。ＣＰＵ＃１は、ソフトウェア２０５−１によってキャッシュメモリブロック２０６−１にアクセスするほか、キャッシュメモリブロック２０６−１に必要なデータが存在しない場合に、ポート＃１を経由して共用メモリブロック２０７−１にアクセスする。
【００２９】
ソフトウェア２０５−２は、ＣＰＵ＃２とＣＰＵ＃３で実行されている。ＣＰＵ＃２は、ソフトウェア２０５−２によってキャッシュメモリブロック２０６−２−１にアクセスするほか、キャッシュメモリブロック２０６−２−１に必要なデータが存在しない場合、ポート＃２を経由して共用メモリブロック２０７−２にアクセスする。ＣＰＵ＃３も、ソフトウェア２０５−２によってキャッシュメモリブロック２０６−２−２にアクセスするほか、キャッシュメモリブロック２０６−２−２に必要なデータが存在しない場合、ポート＃２を経由して共用メモリブロック２０７−２にアクセスする。
【００３０】
ソフトウェア２０５−３とソフトウェア２０５−４は、ＣＰＵ＃４で実行されている。ＣＰＵ＃４は、ソフトウェア２０５−３とソフトウェア２０５−４によってそれぞれのソフトウェアに対応するキャッシュメモリブロック２０６−３、キャッシュメモリブロック２０６−４にアクセスする。キャッシュメモリブロックに必要なデータが存在しない場合、ＣＰＵ＃４は、ポート＃４を経由して共用メモリブロック２０７−３、共用メモリブロック２０７−４にアクセスする。
【００３１】
図３は、物理アドレス空間の分割と論理アドレス空間の結合の例を示す説明図である。ハードウェアとして、共用メモリ２０１を含む共用メモリブロック＃１〜共用メモリブロック＃４の物理アドレス空間は、次のように設定する。共用メモリブロック＃１の物理アドレス空間は、０ｘ００００〜０ｘ００ｆｆとする。同様に、共用メモリブロック＃２の物理アドレス空間は、０ｘ１０００〜０ｘ１０ｆｆとする。共用メモリブロック＃３の物理アドレス空間は、０ｘ２０００〜０ｘ２０ｆｆとする。共用メモリブロック＃４の物理アドレス空間は、０ｘ３０００〜０ｘ３０ｆｆとする。
【００３２】
前述の状態で、ソフトウェア２０５−１によってアクセスされる論理アドレス空間が、０ｘ００００〜０ｘ００ｆｆである場合を想定する。ＣＰＵ＃１は、ポート＃１にアクセスするため、ポート接続器２０３によってポート＃１を接続状態にする。また、ＣＰＵ＃１は、論理アドレス空間と共用メモリブロック＃１の物理アドレス空間とが等しいため、アドレス変換器２０４をアドレススルーに設定する。アドレススルーの設定とは、論理アドレスを変換せずに物理アドレスとし、共用メモリ２０１にアクセスする設定である。
【００３３】
次に、ソフトウェア２０５−２によってアクセスされる論理アドレス空間が、０ｘ００００〜０ｘ０１ｆｆである場合を想定する。ＣＰＵ＃２で実行されるソフトウェア２０５−２のマスタスレッドも、論理アドレスとして０ｘ００００〜０ｘ０１ｆｆにアクセスすることを想定する。ＣＰＵ＃２は、ポート＃２にアクセスするため、ポート接続器２０３によってポート＃２を接続状態にする。
【００３４】
また、ＣＰＵ＃２は、アドレス変換器２０４によって、論理アドレス空間と、共用メモリブロック＃２および共用メモリブロック＃３の物理アドレス空間と、を変換する通知をする。通知を受けることによりポート＃２は、論理アドレス０ｘ００００〜０ｘ００ｆｆを物理アドレス０ｘ１０００〜０ｘ１０ｆｆに変換し、論理アドレス０ｘ０１００〜０ｘ０１ｆｆを物理アドレス０ｘ２０００〜０ｘ２０ｆｆに変換する。たとえば、ＣＰＵ＃２が０ｘ００１０である論理アドレスにアクセスすると、アドレス変換器２０４によって、０ｘ１０１０である物理アドレスに変換される。これにより、アドレス変換器２０４は、連続していなかった物理アドレス空間を、連続した論理空間としてソフトウェアに提供することができる。
【００３５】
同様に、ＣＰＵ＃３で実行されるソフトウェア２０５−２のスレーブスレッドは、論理アドレスとして０ｘ００００〜０ｘ０１ｆｆにアクセスすることを想定する。ＣＰＵ＃３は、ポート＃２にアクセスし、ポート＃３にはアクセスしないため、ポート接続器２０３によってポート＃３を非接続状態にする。
【００３６】
また、ソフトウェア２０５−３によってアクセスされる論理アドレス空間が、０ｘ００００〜０ｘ００ｆｆである場合を想定する。ＣＰＵ＃４は、ポート＃４にアクセスするため、ポート接続器２０３によってポート＃４を接続状態にする。
【００３７】
また、ＣＰＵ＃４は、アドレス変換器２０４によって、論理アドレス空間と共用メモリブロック＃４の物理アドレス空間を変換する通知をする。通知を受けることによりポート＃４は、論理アドレス０ｘ００００〜０ｘ００ｆｆを物理アドレス０ｘ３０００〜０ｘ３０ｆｆに変換する。また、論理アドレス０ｘ００００〜０ｘ００ｆｆを物理アドレス０ｘ３０００〜０ｘ３０ｆｆに変換する状態を初期の変換状態とし、ＣＰＵ＃４がアドレススルーを設定した場合に、アドレス変換器２０４は、初期の変換状態でアドレスを変換するようにしてもよい。
【００３８】
（マルチコアプロセッサシステム１００）
次に、マルチコアプロセッサシステム１００の動作について説明する。図４は、マルチコアプロセッサシステム１００内の各部の関係を説明するブロック図である。マルチコアプロセッサシステム１００は、たとえば、取得部４０２と、決定部４０３と、設定部４０４と、アドレス通知部４０５と、選択部４０６と、解除通知部４０７と、集約部４０８と、検出部４０９と、実行開始通知部４１０と、を含む。制御部となる取得部４０２〜実行開始通知部４１０は、記憶装置に記憶されたプログラムをＣＰＵｓ１０１が実行する。記憶装置とは、たとえば、図１に示したＲＯＭ１０２、ＲＡＭ１０３、フラッシュＲＯＭ１０４などである。または、Ｉ／Ｆ１０８を経由して他のＣＰＵが実行してもよい。
【００３９】
また、マルチコアプロセッサシステム１００は、複数のコアと、コアに対応する複数のポートを備えたメモリコントローラ２０２と、ポートごとに分割された物理アドレス空間を備えた共用メモリ２０１を備える。複数のコアとは、ＣＰＵｓ１０１に属するすべてのＣＰＵであってもよいし、ＣＰＵｓ１０１のうち、本実施の形態を適用する一部のＣＰＵであってもよい。コアに対応する複数のポートとは、ＣＰＵがアクセスする特定のポートであり、たとえば、ＣＰＵ＃１であればポート＃１、ＣＰＵ＃２であればポート＃２といったように、ＣＰＵごとに対応したポートが決定している。図４ではＣＰＵ数とポート数が一致しているためＣＰＵとポートが１対１対応となるが、ＣＰＵ数に比べポート数が少ない場合は、異なるＣＰＵに対応するポートが一致していてもよい。
【００４０】
また各ポートは、共用メモリ２０１の物理アドレス空間を分割した物理アドレス空間にアクセス可能であると設定されている。たとえば、共用メモリ２０１の物理アドレス空間が０ｘ００００〜０ｘ０１ｆｆであった場合に、ポート＃１は０ｘ００００〜０ｘ００ｆｆの物理アドレス空間にアクセス可能とし、ポート＃２は０ｘ０１００〜０ｘ０１ｆｆの物理アドレス空間にアクセス可能とする。分割方法は、前述のように物理アドレス空間をポートごとに均等に分割してもよいし、不均等に分割してもよい。
【００４１】
マルチコアプロセッサシステム１００は、ソフトウェアごとに対象のソフトウェアを割り当てるコアの数を記憶するデータベースとして、並列度情報テーブル４０１にアクセス可能である。たとえば、ソフトウェア２０５−１は、ＣＰＵ１つを割り当てる分散ソフトウェアとして、ソフトウェア２０５−２は、ＣＰＵ２つを割り当てる並列ソフトウェアとして登録されている。並列度情報テーブル４０１の詳細は、図７にて後述する。
【００４２】
取得部４０２は、並列度情報テーブル４０１から、実行対象ソフトウェアを割り当てるコアの数を取得する機能を有する。実行対象ソフトウェアとは、ユーザ、またはＯＳによって起動要求を受けたソフトウェアか、または、スケジューラによって実行後にＣＰＵの割り当てを解除された後に再びスケジューラにより実行されようとしているソフトウェアである。たとえば、ソフトウェア２０５−２を実行対象とする場合、取得部４０２は、並列度情報テーブル４０１から割り当てるＣＰＵ数が２つであることを取得する。なお、取得されたデータは、ＲＡＭ１０３、フラッシュＲＯＭ１０４などの記憶領域に記憶される。
【００４３】
決定部４０３は、取得部４０２によって取得された実行対象ソフトウェアを割り当てるコアの数と複数のコアの使用状況とに基づいて、実行対象ソフトウェアを割り当てるコアを決定する機能を有する。
【００４４】
決定部４０３の具体例として、たとえば、ソフトウェア２０５−２を実行対象ソフトウェアとし、取得部４０２によって割り当てるＣＰＵ数が２つであると取得できた場合を想定する。決定部４０３は、ＣＰＵｓ１０１の中から、低負荷のＣＰＵとしてＣＰＵ＃２とＣＰＵ＃３を、ソフトウェア２０５−２を割り当てるＣＰＵとして決定する。なお、決定されたＣＰＵの情報は、ＲＡＭ１０３、フラッシュＲＯＭ１０４などの記憶領域に記憶される。
【００４５】
設定部４０４は、複数のポートのうち決定部４０３によって決定されたコアに対応する特定のポートがアクセス可能な物理アドレス空間を取得する。取得された物理アドレス空間の中から、設定部４０４は、実行対象ソフトウェアで規定された論理アドレス空間に対応する物理アドレス空間を決定されたコアごとに設定する機能を有する。また、設定部４０４は、集約部４０８によって集約された物理アドレス空間を、選択部４０６によって選択されたポートが新たにアクセス可能な物理アドレス空間に設定してもよい。
【００４６】
たとえば、決定されたコアがＣＰＵ＃２とＣＰＵ＃３であり、前述のＣＰＵに対応するポートがポート＃２、ポート＃３であることを想定する。続けて、ポート＃２が共用メモリ２０１にアクセス可能な物理アドレス空間が０ｘ１０００〜０ｘ１０ｆｆであり、ポート＃３が共用メモリ２０１にアクセス可能な物理アドレス空間が０ｘ２０００〜０ｘ２０ｆｆであることを想定する。
【００４７】
この時、設定部４０４は、物理アドレス空間０ｘ１０００〜０ｘ１０ｆｆ、０ｘ２０００〜０ｘ２０ｆｆから、実行対象ソフトウェアで規定された論理アドレス空間に対応する物理アドレス空間を決定されたＣＰＵごとに設定する。規定された論理アドレス空間が０ｘ００００〜０ｘ０１ｆｆであれば、ＣＰＵ＃２がポート＃２にアクセスする際に、論理アドレス空間０ｘ００００〜０ｘ００ｆｆを物理アドレス空間０ｘ１０００〜０ｘ１０ｆｆに対応づけて設定する。同様に、ＣＰＵ＃３がポート＃３にアクセスする際に、論理アドレス空間０ｘ０１００〜０ｘ０１ｆｆを物理アドレス空間０ｘ２０００〜０ｘ２０ｆｆに対応づけて設定する。なお、設定されたアドレス対応情報は、ＲＡＭ１０３、フラッシュＲＯＭ１０４などの記憶領域に記憶される。
【００４８】
アドレス通知部４０５は、設定部４０４によって設定された物理アドレス空間と設定された物理アドレス空間に対応する論理アドレス空間とを特定のポートに通知する機能を有する。また、アドレス通知部４０５は、設定部４０４によって設定された新たにアクセス可能な物理アドレス空間を選択部４０６によって選択されたポートに通知してもよい。
【００４９】
たとえば、ＣＰＵ＃２がポート＃２にアクセスする際に論理アドレス空間０ｘ００００〜０ｘ００ｆｆを物理アドレス空間０ｘ０１００〜０ｘ０１ｆｆに対応づけて設定された場合を想定する。この時アドレス通知部４０５は、ＣＰＵ＃２が設定したアドレス対応情報をアドレス変換器２０４のポート＃２に通知する。また、集約部４０８によって集約された物理アドレス空間が、０ｘ００００〜０ｘ０１ｆｆであり、選択部４０６によってポート＃２が選択された場合を想定する。この時アドレス通知部４０５は、ポート＃２が新たにアクセス可能な物理アドレス空間として、０ｘ００００〜０ｘ０１ｆｆをポート＃２に通知する。
【００５０】
また、アドレス対応情報として、ある程度範囲が決められている場合は、設定可能なパターンを用意してもよい。たとえば、ポートが４つ存在し、共用メモリ２０１の物理アドレス空間が４つに分割される場合、分割された物理アドレス空間とレジスタ内のビット列を対応づけてもよい。また、論理アドレス空間は、０ｘ００００から開始しアドレス空間が連続となるように対応づけてもよい。
【００５１】
これにより、レジスタの特定のビットを“１”にすることで、物理アドレスと論理アドレスを対応づけることができる。このように、アドレス通知部４０５は、物理アドレス空間の上限値と下限値、論理アドレスの上限値と下限値を通知するようにしてもよいし、設定可能なパターンを用意することで、通知処理を簡略化してもよい。
【００５２】
前述した、共用メモリ２０１の物理アドレス空間が４つに分割された場合を想定する。このとき、設定部４０４が物理アドレス空間０ｘ０２００〜０ｘ０２ｆｆに対応するレジスタのビットを“１”にし、物理アドレス空間０ｘ０２００〜０ｘ０２ｆｆと論理アドレス空間０ｘ００００〜０ｘ００ｆｆを対応づけて設定する。そしてアドレス通知部４０５は、設定されたレジスタの値を通知してもよい。また、集約部４０８によって、４つに分割された物理アドレス空間のうち、先頭と３番目の物理アドレス空間が集約された場合、アドレス通知手段としては、対応するビット“０ｂ１０１０”を通知してもよい。なお、通知したアドレス対応情報は、ＲＡＭ１０３、フラッシュＲＯＭ１０４などの記憶領域に記憶されてもよい。
【００５３】
選択部４０６は、決定部４０３によって決定されたコアに対応する特定のポートが複数存在する場合、特定のポートのうち、任意のポートを選択する機能を有する。たとえば、決定部４０３によってＣＰＵ＃２、ＣＰＵ＃３が決定され、対応するポートがポート＃２、ポート＃３というように複数存在した場合に、任意のポートとしてポート＃２を選択する。
【００５４】
ポートの選択基準はどのように行ってもよいが、たとえば、実行対象ソフトウェアのマスタスレッドを実行しているＣＰＵに対応しているポートを選択してもよい。また、複数存在するポートの性能が非対称であり、複数のポートのうち、特定のポートの能力が他のポートの能力が上回っているなら、他より性能が上回っているポートを選択してもよい。なお、選択されたポートの情報は、ＲＡＭ１０３、フラッシュＲＯＭ１０４などの記憶領域に記憶される。
【００５５】
解除通知部４０７は、特定のポートのうち、選択部４０６によって選択されたポートを除く残余のポートの接続を解除する通知を残余のポートに通知する機能を有する。たとえば、特定のポートがポート＃２、ポート＃３となり、選択部４０６によってポート＃２が選択された場合、残余となるポート＃３に対して、ポートの接続を解除する通知をポート接続器２０３のポート＃３に通知する。なお、通知した接続解除情報は、ＲＡＭ１０３、フラッシュＲＯＭ１０４などの記憶領域に記憶されてもよい。
【００５６】
集約部４０８は、複数存在する特定のポートがアクセス可能な物理アドレス空間を集約する機能を有する。たとえば、特定のポートがポート＃２、ポート＃３であり、ポート＃２、ポート＃３の物理アドレス空間がそれぞれ、０ｘ００００〜０ｘ００ｆｆ、０ｘ０１００〜０ｘ０１ｆｆである場合を想定する。前述の状態で、集約部４０８は、集約した物理アドレス空間を０ｘ００００〜０ｘ０１ｆｆとする。なお、集約された物理アドレス情報は、ＲＡＭ１０３、フラッシュＲＯＭ１０４などの記憶領域に記憶される。
【００５７】
検出部４０９は、決定部４０３によって決定されたコアが複数存在する場合、実行対象ソフトウェアを決定されたコア間で同時に実行する開始時刻を検出する機能を有する。また、検出部４０９は、アドレス通知部４０５によって特定のポートへの通知を完了した時刻を開始時刻として検出する。たとえば、決定されたＣＰＵがＣＰＵ＃２、ＣＰＵ＃３であり、特定のポートがポート＃２であった場合、ＣＰＵ＃２またはＣＰＵ＃３がポート＃２にアドレス通知部４０５の実行を完了した時刻を実行対象ソフトウェアの開始時刻として検出することができる。なお、検出が行われたことを示す情報はＲＡＭ１０３、フラッシュＲＯＭ１０４などの記憶領域に記憶される。
【００５８】
実行開始通知部４１０は、アドレス通知部４０５によって特定のポートに通知した後に、実行対象ソフトウェアに実行開始を通知する機能を有する。また、実行開始通知部４１０は、検出部４０９によって開始時刻が検出された後に、実行対象ソフトウェアに実行開始を通知してもよい。
【００５９】
たとえば、ＣＰＵ＃２がポート＃２にアドレス通知を行った後に、ＣＰＵ＃２は、実行対象ソフトウェアに実行開始を通知することができる。また、決定された複数のＣＰＵがＣＰＵ＃２、ＣＰＵ＃３である場合に、検出部４０９によって開始時刻が検出された後に、ＣＰＵ＃２、ＣＰＵ＃３が実行対象ソフトウェアに実行開始を通知することができる。なお、実行開始通知は、ＲＡＭ１０３、フラッシュＲＯＭ１０４などの記憶領域に記憶されてもよい。
【００６０】
図５は、ポート接続器２０３のブロック図である。ポート接続器２０３は、メモリコントローラ２０２の一形態であり、バス１１０とアドレス変換器２０４の間に存在し、各ポートの接続、非接続を制御する。各ポートの接続、非接続は、ＣＰＵ＃１〜ＣＰＵ＃４によってアクセスされる設定レジスタ５０１によって制御される。設定レジスタ５０１は、設定レジスタ５０１＃１〜設定レジスタ５０１＃４を含み、各ポートの接続、非接続を制御する。
【００６１】
たとえば、設定レジスタ５０１＃１は、スイッチ＃１を制御し、ポート＃１の接続、非接続を設定する。設定レジスタ５０１＃１は、設定値が“１”であればポート＃１を接続にし、設定値が“０”であればポート＃１を非接続にする。他の設定レジスタも同様に、設定レジスタ５０１＃２〜設定レジスタ５０１＃４が、それぞれポート＃２〜ポート＃４の接続、非接続を行う。非接続となったポートは、ポート内の結線に電力が供給されなくなる。結果、ポートが不要の場合にポートを非接続とすることで、省電力効果を得ることができる。
【００６２】
図６は、アドレス変換器２０４と設定の一例を示す説明図である。符号６０１で示す説明図は、アドレス変換器２０４を示す。アドレス変換器２０４は、メモリコントローラ２０２の一形態であり、ポート接続器２０３と共用メモリ２０１の間に存在し、各ポートの論理アドレスと物理アドレスを変換する。各ポートの論理アドレスと物理アドレスの変換は、ＣＰＵ＃１〜ＣＰＵ＃４によってアクセスされる変換レジスタ６０３＃１〜変換レジスタ６０３＃４によって制御される。
【００６３】
一実施形態として変換レジスタ６０３＃１は、ＴＬＢ（Ｔｒａｎｓｌａｔｉｏｎ  Ｌｏｏｋａｓｉｄｅ  Ｂｕｆｆｅｒ）＃１を制御する。制御されたＴＬＢ＃１は、ポート＃１の論理アドレス空間と物理アドレス空間を変換する。符号６０２で示す説明図は、変換レジスタ６０３＃１とＴＬＢ＃１との関係の一例を示す説明図である。変換レジスタ６０３＃１の設定に応じて、ＴＬＢ＃１に設定される内容が変化する。たとえば、ＣＰＵ＃１が、変換レジスタ６０３＃１を“０ｂ００００”に設定した場合、ＴＬＢ＃１の設定は設定なしとなり、アドレススルーの設定となる。
【００６４】
また、ＣＰＵ＃１が、変換レジスタ６０３＃１を“０ｂ１０００”に設定した場合、ＴＬＢ＃１の設定がＴＬＢ＃１設定６０４−１となる。ＴＬＢ＃１設定６０４−１は、論理アドレス空間０ｘ００００〜０ｘ００ｆｆを、共用メモリブロック＃１の物理アドレス空間に指定している。
【００６５】
また、ＣＰＵ＃１が、変換レジスタ６０３＃１を“０ｂ１１００”に設定した場合、ＴＬＢ＃１の設定がＴＬＢ＃１設定６０４−２となる。ＴＬＢ＃１設定６０４−２は、論理アドレス空間０ｘ００００〜０ｘ０１ｆｆを、共用メモリブロック＃１と共用メモリブロック＃２の物理アドレス空間に指定している。このように、ポート＃１が共用メモリブロック＃１に、ポート＃２が共用メモリブロック＃２にアクセス可能であった状態から、ポート＃１にポート＃１とポート＃２のアクセス可能な物理アドレス空間を集約することになる。
【００６６】
また、ＣＰＵ＃１が、変換レジスタ６０３＃１を“０ｂ１０１０”に設定した場合、ＴＬＢ＃１の設定がＴＬＢ＃１設定６０４−３となる。ＴＬＢ＃１設定６０４−３は、論理アドレス空間０ｘ００００〜０ｘ０１ｆｆを、共用メモリブロック＃１と共用メモリブロック＃３の物理アドレスに指定している。このように、ポート＃１が共用メモリブロック＃１に、ポート＃３が共用メモリブロック＃３にアクセス可能であった状態から、ポート＃１にポート＃１とポート＃３のアクセス可能な物理アドレス空間を集約することになる。
【００６７】
また、ＣＰＵ＃１が、変換レジスタ６０３＃１を“０ｂ１１１０”に設定した場合、ＴＬＢ＃１の設定がＴＬＢ＃１設定６０４−４となる。ＴＬＢ＃１設定６０４−４は、論理アドレス空間０ｘ００００〜０ｘ０２ｆｆを、共用メモリブロック＃１〜共用メモリブロック＃３の物理アドレスに指定している。このように、ポート＃１〜ポート＃３がそれぞれ共用メモリブロック＃１〜共用メモリブロック＃３にアクセス可能であった状態から、ポート＃１にポート＃１〜ポート＃３のアクセス可能な物理アドレス空間を集約することになる。
【００６８】
同様にＴＬＢ＃２〜ＴＬＢ＃４も、変換レジスタ６０３＃２〜変換レジスタ６０３＃４によって、アドレス変換方法が指定される。また、本実施の形態では、変換レジスタ６０３によってＴＬＢの内容を指定していたが、変換レジスタ６０３にて直接ＴＬＢの内容を記述してもよい。
【００６９】
図７は、並列度情報テーブル４０１の記憶内容の一例を示す説明図である。並列度情報テーブル４０１は、たとえば、ソフトウェア名称、並列度情報、並列数Ｐという３つのフィールドを含む。ソフトウェア名称フィールドは、ソフトウェアの名称を格納する。たとえば、ソフトウェアに対応するプロセスの開始アドレスが設定されており、ＣＰＵは、プロセスの開始アドレスを参照して処理を実行することができる。
【００７０】
並列度情報フィールドは、各ＣＰＵが分散されてソフトウェアを処理するか、複数のＣＰＵが並列に動作してソフトウェアを処理するかを示す識別子を格納する。格納される識別子は、“分散”と“並列”である。“分散”識別子は、名称フィールドに格納されたソフトウェアが１つのＣＰＵで実行される分散ソフトウェアであることを示す。“並列”識別子は、名称フィールドに格納されたソフトウェアが２つ以上のＣＰＵで実行される並列ソフトウェアであることを示す。並列数Ｐフィールドは、名称フィールドに格納されたソフトウェアが実行される際のＣＰＵ数を示す。たとえば、ＵＩ処理は、分散ソフトウェアであり、１つのＣＰＵで実行される。Ｗｅｂブラウザは、並列ソフトウェアであり、３つのＣＰＵで実行される。
【００７１】
図８は、分散ソフトウェアと並列ソフトウェアが混載した状態を示す説明図である。マルチコアプロセッサシステム１００は、ソフトウェアとして、並列ソフトウェアＰ１、並列ソフトウェアＰ２、分散ソフトウェアＳ１〜分散ソフトウェアＳ６を実行している。ＣＰＵ＃１〜ＣＰＵ＃４は、メモリコントローラ２０２を通じて、共用メモリ２０１にアクセスする。
【００７２】
次に各ＣＰＵのソフトウェア実行状態を説明する。ＣＰＵ＃１は、ＯＳ＃１によって並列ソフトウェアＰ１のマスタスレッドＰ１と分散ソフトウェアＳ２と分散ソフトウェアＳ３を順次実行する。ＣＰＵ＃２は、ＯＳ＃２によって並列ソフトウェアＰ１のスレーブスレッドＰ１−１と並列ソフトウェアＰ２のマスタスレッドＰ２と分散ソフトウェアＳ４を順次実行する。ＣＰＵ＃３は、ＯＳ＃３によって並列ソフトウェアＰ１のスレーブスレッドＰ１−２と並列ソフトウェアＰ２のスレーブスレッドＰ２−１と分散ソフトウェアＳ５を順次実行する。ＣＰＵ＃４は、ＯＳ＃４によって分散ソフトウェアＳ１と並列ソフトウェアＰ２のスレーブスレッドＰ２−２と分散ソフトウェアＳ６を順次実行する。
【００７３】
図９は、図８におけるＣＰＵのディスパッチ周期パターンを示す説明図である。ＣＰＵ＃１〜ＣＰＵ＃４は、変換器設定処理によってメモリコントローラ２０２の設定を定期的にポート＃１〜ポート＃４に通知する。変換器設定処理とは、ポート接続器２０３の設定レジスタ５０１の設定と、アドレス変換器２０４の変換レジスタ６０３の設定を行う処理である。
【００７４】
たとえば、ポート＃１では、変換器設定処理ｕ＃１−１によって分散ソフトウェアの設定を行うことができる。変換器設定処理ｕ＃１−１が実行されるタイミングで、ポート＃２では変換器設定処理ｕ＃２−１によって、ポート＃３では変換器設定処理ｕ＃３−１によって、ポート＃４では変換器設定処理ｕ＃４−１によって、分散ソフトウェアの設定が行われる。設定処理の一例としては、ポート接続器２０３に行う接続設定、解除設定と、アドレス変換器２０４に行う論理単独空間設定、論理連続空間設定である。論理連続空間設定を行うことにより、複数のポートがアクセス可能な物理アドレス空間を、１つのポートがアクセス可能な物理アドレス空間に集約することになる。
【００７５】
また、一定期間経過後、ポート＃１〜ポート＃４は、変換器設定処理ｕ＃１−２〜変換器設定処理ｕ＃４−２によって設定が更新される。一例として、ポート＃１は、変換器設定処理ｕ＃１−２によって分散ソフトウェアの設定に更新される。ポート＃２〜ポート＃４は変換器設定処理ｕ＃２−２〜変換器設定処理ｕ＃４−２によって並列ソフトウェアＰ２の設定に更新される。この例において並列ソフトウェアＰ２の設定は同時に実行されるため、ポート＃２〜ポート＃４を制御するＣＰＵは、バリア同期コード９０３−１〜バリア同期コード９０３−３を実行することができる。
【００７６】
バリア同期コードとは、同期が必要なすべてのＣＰＵの処理が終了するのを待つコードである。たとえば、本実施の形態では、ポート＃２の制御をＣＰＵ＃２が行い、ポート＃３の制御をＣＰＵ＃３が行い、ポート＃４の制御をＣＰＵ＃４が行う。よって、ＣＰＵ＃２が変換器設定処理Ｕ＃２−２を行った後、ＣＰＵ＃２は、バリア同期コード９０３−１を実行し待機する。
【００７７】
ＣＰＵ＃３、ＣＰＵ＃４も同様に、変換器設定処理を行った後、バリア同期コードを実行し待機する。ＣＰＵ＃２〜ＣＰＵ＃４がバリア同期コードを実行した段階で、ソフトウェアを実行開始する開始時刻として検出し、待機していたＣＰＵは復帰し、並列ソフトウェアＰ２を実行する。これにより、並列ソフトウェアＰ２のアクセスをＣＰＵ＃２〜ＣＰＵ＃４が同時に行うことができる。
【００７８】
並列ソフトウェアＰ１との同期コード９０１は、並列ソフトウェアＰ１が連続する論理アドレス空間にアクセスするためのコードである。同期コード９０１は、たとえばタイミングｔ１では、変換器設定処理ｕ＃１−３〜変換器設定処理ｕ＃３−３とバリア同期コード９０４−１〜バリア同期コード９０４−３によって並列ソフトウェアＰ１の設定を行う。
【００７９】
同様に、並列ソフトウェアＰ２との同期コード９０２は、並列ソフトウェアＰ２が連続する論理アドレス空間にアクセスするためのコードである。同期コード９０２は、たとえばタイミングｔ３では、変換器設定処理ｕ＃２−５〜変換器設定処理ｕ＃４−５とバリア同期コード９０５−１〜バリア同期コード９０５−３によって並列ソフトウェアＰ２の設定を行う。タイミングｔ１〜タイミングｔ３における、マルチコアプロセッサシステム１００でのソフトウェアの実行状態と、メモリコントローラ２０２の設定状態を、図１０〜図１５にて示す。
【００８０】
図１０は、タイミングｔ１におけるソフトウェアの実行状態とメモリコントローラ２０２の設定状態を示す説明図である。タイミングｔ１におけるマルチコアプロセッサシステム１００は、ＣＰＵ＃１〜ＣＰＵ＃３にて、並列ソフトウェアＰ１を実行し、ＣＰＵ＃４にて分散ソフトウェアＳ１を実行する。また、メモリコントローラ２０２の設定状態としては、ポート＃１がマスタポートとなり、ＣＰＵ＃１〜ＣＰＵ＃３における並列ソフトウェアＰ１の実行により、ポート＃１が共用メモリ２０１のアクセスを行う。また、ポート＃２とポート＃３は非接続状態である。ポート＃４もマスタポートとなり、ＣＰＵ＃４における分散ソフトウェアＳ１の実行により、ポート＃４が共用メモリ２０１のアクセスを行う。
【００８１】
図１１は、タイミングｔ１におけるメモリコントローラ２０２の状態を示す説明図である。符号１１０１で示す図は、ポート接続器２０３の状態と、アドレス変換器２０４の状態を示す。符号１１０２で示す表群は、ＴＬＢ＃１とＴＬＢ＃４の設定状態を示す。ポート＃１では、変換器設定処理ｕ＃１−３によって、設定レジスタ５０１−１に“１”が設定される。これによりポート＃１は接続状態となる。続けてポート＃１では、変換器設定処理ｕ＃１−３によって、変換レジスタ６０３＃１を“０ｂ１１１０”に設定することでＴＬＢ＃１にＴＬＢ＃１設定１１０３が設定される。これにより、ポート＃１は、共用メモリブロック＃１〜共用メモリブロック＃３にアクセスし、かつ、連続する論理アドレス空間０ｘ００００〜０ｘ０２ｆｆを並列ソフトウェアＰ１に提供することができる。
【００８２】
ポート＃２では、変換器設定処理ｕ＃２−３によって、設定レジスタ５０１−２に“０”が設定される。これによりポート＃２は非接続状態となる。同様に、ポート＃３では、変換器設定処理ｕ＃３−３によって、設定レジスタ５０１−３に“０”が設定される。これによりポート＃３も非接続状態となる。ポート＃４では、変換器設定処理ｕ＃４−３によって、設定レジスタ５０１−４に“１”が設定される。これによりポート＃４は接続状態となる。続けて、続けてポート＃４では、変換器設定処理ｕ＃４−３によって、ＴＬＢ＃４にＴＬＢ＃４設定１１０４が設定される。これにより、ポート＃４は、共用メモリブロック＃４にアクセスし、かつ、物理アドレス空間から変換された論理アドレス空間を分散ソフトウェアＳ１に提供することができる。
【００８３】
図１２は、タイミングｔ２におけるソフトウェアの実行状態とメモリコントローラ２０２の設定状態を示す説明図である。タイミングｔ２におけるマルチコアプロセッサシステム１００は、ＣＰＵ＃１にて分散ソフトウェアＳ３を実行する。同様に、マルチコアプロセッサシステム１００は、ＣＰＵ＃２にて分散ソフトウェアＳ４を、ＣＰＵ＃３にて分散ソフトウェアＳ５を、ＣＰＵ＃４にて分散ソフトウェアＳ６をそれぞれ実行する。また、メモリコントローラ２０２の設定状態としては、ポート＃１〜ポート＃４がマスタポートとなり、共用メモリ２０１のアクセスを行う。
【００８４】
図１３は、タイミングｔ２におけるメモリコントローラ２０２の状態を示す説明図である。符号１３０１で示す図は、ポート接続器２０３の状態と、アドレス変換器２０４の状態を示す。符号１３０２で示す表群は、ＴＬＢ＃１〜ＴＬＢ＃４の設定状態を示す。ポート＃１では、変換器設定処理ｕ＃１−４によって、設定レジスタ５０１−１に“１”が設定される。これによりポート＃１は接続状態となる。続けてポート＃１では、変換器設定処理ｕ＃１−４によって、ＴＬＢ＃１にＴＬＢ＃１設定１３０３が設定される。これにより、ポート＃１は、共用メモリブロック２０１＃１にアクセスし、かつ、物理アドレス空間から変換された論理アドレス空間を分散ソフトウェアＳ３に提供することができる。
【００８５】
ポート＃２〜ポート＃４も同様である。ポート＃２は、変換器設定処理ｕ＃２−４によって接続状態となり、共用メモリブロック２０１＃２にアクセスし、ＴＬＢ＃２にＴＬＢ＃２設定１３０４が設定され、論理アドレス空間を分散ソフトウェアＳ４に提供する。ポート＃３は、変換器設定処理ｕ＃３−４によって接続状態となり、共用メモリブロック２０１＃３にアクセスし、ＴＬＢ＃３にＴＬＢ＃３設定１３０５が設定され、論理アドレス空間を分散ソフトウェアＳ５に提供する。ポート＃４は、変換器設定処理ｕ＃４−４によって接続状態となり、共用メモリブロック２０１＃４にアクセスし、ＴＬＢ＃４にＴＬＢ＃４設定１３０６が設定され、論理アドレス空間を分散ソフトウェアＳ６に提供する。
【００８６】
図１４は、タイミングｔ３におけるソフトウェアの実行状態とメモリコントローラ２０２の設定状態を示す説明図である。タイミングｔ３におけるマルチコアプロセッサシステム１００は、ＣＰＵ＃１にて分散ソフトウェアＳ２を実行し、ＣＰＵ＃２〜ＣＰＵ＃４にて、並列ソフトウェアＰ２を実行する。また、メモリコントローラ２０２の設定状態としては、ポート＃１はマスタポートとなり、ＣＰＵ＃１における分散ソフトウェアＳ２の実行により、ポート＃１が共用メモリ２０１のアクセスを行う。また、ポート＃２もマスタポートとなり、ＣＰＵ＃２〜ＣＰＵ＃４における並列ソフトウェアＰ２の実行により、ポート＃２が共用メモリ２０１のアクセスを行う。また、ポート＃３とポート＃４は非接続状態である。
【００８７】
図１５は、タイミングｔ３におけるメモリコントローラ２０２の状態を示す説明図である。符号１５０１で示す図は、ポート接続器２０３の状態と、アドレス変換器２０４の状態を示す。符号１５０２で示す表群は、ＴＬＢ＃１とＴＬＢ＃２の設定状態を示す。ポート＃１では、変換器設定処理ｕ＃１−５によって、設定レジスタ５０１−１に“１”が設定される。これによりポート＃１は接続状態となる。続けてポート＃１では、変換器設定処理ｕ＃１−５によって、変換レジスタ６０３＃１を“０ｂ１０００”に設定することでＴＬＢ＃１にＴＬＢ＃１設定１５０３が設定される。これにより、ポート＃１は、共用メモリブロック２０１＃１にアクセスし、物理アドレス空間から変換された論理アドレス空間を分散ソフトウェアＳ２に提供することができる。
【００８８】
ポート＃２では、変換器設定処理ｕ＃２−５によって、設定レジスタ５０１−２に“１”が設定される。これによりポート＃２は接続状態となる。続けてポート＃２では、変換器設定処理ｕ＃２−５によって、ＴＬＢ＃２にＴＬＢ＃２設定１５０４が設定される。これにより、ポート＃２は、共用メモリブロック２０１＃２〜共用メモリブロック２０１＃４にアクセスし、かつ、連続する論理アドレス空間０ｘ００００〜０ｘ０２ｆｆを並列ソフトウェアＰ２に提供することができる。
【００８９】
ポート＃３では、変換器設定処理ｕ＃３−５によって、設定レジスタ５０１−３に“０”が設定される。これによりポート＃３は非接続状態となる。同様に、ポート＃４では、変換器設定処理ｕ＃４−５によって、設定レジスタ５０１−４に“０”が設定される。これによりポート＃４も非接続状態となる。
【００９０】
図１６は、スケジューリング処理を示すフローチャートである。スケジューリング処理は、ソフトウェアが起動されたときの機能としてスケジューラ＃１〜スケジューラ＃４で実行される。ステップＳ１６０１〜ステップＳ１６０４、ステップＳ１６１０、ステップＳ１６１１は、ＣＰＵｓ１０１のうち、特定のＣＰＵで実行され、ステップＳ１６０５〜ステップＳ１６０９は、ステップＳ１６０３で検出されたＣＰＵで実行される。本実施の形態では、前述した特定のＣＰＵがＣＰＵ＃１であることを想定する。
【００９１】
ＣＰＵ＃１は、対象のソフトウェアの起動要求を受ける（ステップＳ１６０１）。起動要求は、たとえば、ユーザがＵＩの操作によって発行される。続けて、ＣＰＵ＃１は、並列度情報テーブル４０１から、対象のソフトウェアの並列度情報と並列数Ｐを取得する（ステップＳ１６０２）。続けて、ＣＰＵ＃１は、低負荷のＣＰＵを並列数Ｐ個検出する（ステップＳ１６０３）。
【００９２】
たとえば、ＣＰＵ＃１は、スケジューラ＃１〜スケジューラ＃４の情報より、ＣＰＵの使用状況に応じて負荷の低いＣＰＵから、Ｐ個のＣＰＵを検出することができる。ＣＰＵの使用状況とは、ＣＰＵ使用率でもよいし、ＣＰＵのメモリ使用率でもよい。たとえば、Ｐ＝２であり、ＣＰＵの使用状況の高い順が、ＣＰＵ４、ＣＰＵ３、ＣＰＵ２、ＣＰＵ１であった場合、ＣＰＵ＃１は、ＣＰＵ２、ＣＰＵ１を検出することができる。
【００９３】
検出後、ＣＰＵ＃１は、検出されたＣＰＵ群のうち、先頭のＣＰＵを選択する（ステップＳ１６０４）。選択されたＣＰＵは、アドレス空間変換処理を実行する（ステップＳ１６０５）。アドレス空間変換処理の詳細は、図１７にて後述する。処理後、選択されたＣＰＵは、対象のソフトウェアの並列度情報が“並列”か否かを判断する（ステップＳ１６０６）。
【００９４】
並列度情報が“分散”である場合（ステップＳ１６０６：Ｎｏ）、選択されたＣＰＵは、ポート接続器２０３、アドレス変換器２０４を制御するドライバタスクを実行する（ステップＳ１６０８）。ドライバタスクの動作内容は、ステップＳ１６０５の処理にて設定されたポート接続器２０３、アドレス変換器２０４への設定と、バリア同期コードの実行を一定周期で行うタスクである。
【００９５】
並列度情報が“並列”である場合（ステップＳ１６０６：Ｙｅｓ）、選択されたＣＰＵは、続けて、選択されたＣＰＵが対象のソフトウェアのメインスレッドを動作するＣＰＵかを判断する（ステップＳ１６０７）。選択されたＣＰＵがメインスレッドを実行するＣＰＵである場合（ステップＳ１６０７：Ｙｅｓ）、選択されたＣＰＵは、ステップＳ１６０８の処理に移行する。選択されたＣＰＵがスレーブスレッドを実行するＣＰＵである場合（ステップＳ１６０７：Ｎｏ）、またはステップＳ１６０８の処理終了後、選択されたＣＰＵは、スケジューリング処理の結果に従ったディスパッチを行う（ステップＳ１６０９）。
【００９６】
ステップＳ１６０９終了後、ＣＰＵ＃１は、選択されたＣＰＵが検出されたＣＰＵ群の末尾のＣＰＵであるかを判断する（ステップＳ１６１０）。末尾のＣＰＵでない場合（ステップＳ１６１０：Ｎｏ）、ＣＰＵ＃１は、検出されたＣＰＵ群の、次のＣＰＵを選択し（ステップＳ１６１１）、ステップＳ１６０５の処理に移行する。末尾のＣＰＵである場合（ステップＳ１６１０：Ｙｅｓ）、ＣＰＵ＃１はスケジューリング処理を終了する。
【００９７】
図１７は、アドレス空間変換処理を示すフローチャートである。アドレス空間変換処理は、ステップＳ１６０４、またはステップＳ１６１１で選択されたＣＰＵによって実行される。選択されたＣＰＵは、並列数Ｐが１かを判断する（ステップＳ１７０１）。並列数Ｐが１である場合（ステップＳ１７０１：Ｙｅｓ）、選択されたＣＰＵは、ポート接続器２０３接続設定（ステップＳ１７０２）と、アドレス変換器２０４論理単独空間設定（ステップＳ１７０３）を実行し、アドレス空間変換処理を終了する。
【００９８】
ポート接続器２０３接続設定とは、選択されたＣＰＵに対応するポートを接続状態にする処理である。たとえば、選択されたＣＰＵがＣＰＵ＃１であれば、ＣＰＵ＃１は、ポート＃１の接続状態を制御する設定レジスタ５０１＃１を“１”に設定することができる。アドレス変換器２０４論理単独空間設定とは、ソフトウェアの論理アドレス空間を、選択されたＣＰＵに対応するポートの共用メモリブロック＃１〜共用メモリブロック＃４のいずれか１つの物理アドレス空間に対応づける設定である。
【００９９】
並列数Ｐが１でない場合（ステップＳ１７０１：Ｎｏ）、選択されたＣＰＵは、選択されたＣＰＵがメインスレッドを実行するＣＰＵかを判断する（ステップＳ１７０４）。選択されたＣＰＵがメインスレッドを実行するＣＰＵである場合（ステップＳ１７０４：Ｙｅｓ）、選択されたＣＰＵは、ポート接続器２０３接続設定（ステップＳ１７０５）と、アドレス変換器２０４論理連続空間設定（ステップＳ１７０６）を実行する。アドレス変換器２０４論理連続空間設定とは、ソフトウェアの論理アドレス空間を、選択されたＣＰＵに対応するポートの共用メモリブロック＃１〜共用メモリブロック＃４のうち２つ以上の共用メモリブロックの物理アドレス空間に集約して対応づける設定である。また、対応づけられた論理アドレスは連続空間となるように設定される。
【０１００】
選択されたＣＰＵがスレーブスレッドを実行するＣＰＵである場合（ステップＳ１７０４：Ｎｏ）、選択されたＣＰＵは、ポート接続器２０３解除設定を実行する（ステップＳ１７０７）。ポート接続器２０３解除設定とは、選択されたＣＰＵに対応するポートを非接続状態にする処理である。また、ポート接続器２０３接続設定、ポート接続器２０３解除設定、アドレス変換器２０４論理単独空間設定、アドレス変換器２０４論理連続空間設定が、図９にて前述した変換器設定処理となる。
【０１０１】
ステップＳ１７０６、またはステップＳ１７０７の処理終了後、選択されたＣＰＵは、スレッドディスパッチャに同時実行設定を行う（ステップＳ１７０８）。たとえば、対象となるソフトウェアを同時に実行するソフトウェアとして、選択されたＣＰＵは、スレッドディスパッチャに対象となるソフトウェアを登録する。続けて、選択されたＣＰＵは、バリア同期コードと周期タイミングを設定し（ステップＳ１７０９）、アドレス空間変換処理を終了する。バリア同期コードを並列ソフトウェアが実行される前に実行することで、並列ソフトウェアを実行するＣＰＵ群は、並列ソフトウェアを同時に実行する開始時刻を検出することができる。周期タイミングの設定とは、対象となるソフトウェアをＣＰＵ間で同じタイミングで割り当てるように設定することである。
【０１０２】
以上説明したように、マルチコアプロセッサシステム、メモリコントローラ制御方法、およびメモリコントローラ制御プログラムによれば、ポートごとに物理アドレス空間を分割した状態にて、実行対象ソフトウェアを割り当てるＣＰＵを決定する。続けて、ＣＰＵに対応したポートがアクセス可能な物理アドレス空間の中から、実行対象ソフトウェアで規定された論理アドレスを指定して、ポートに通知した後に、実行対象ソフトウェアを起動する。
【０１０３】
これにより、実行対象ソフトウェアを実行するＣＰＵがアクセスするポートの物理アドレス空間と、他のＣＰＵがアクセスするポートの物理アドレス空間が異なるため、アクセス競合を回避することができる。
【０１０４】
また、マルチコアプロセッサシステムは、実行対象ソフトウェアを割り当てるＣＰＵに対応する特定のポートが複数存在する場合、任意の一つのポートを選択し、選択しなかったポートの接続を解除してもよい。続けて、マルチコアプロセッサシステムは、特定のポートの物理アドレス空間を集約し、集約した物理アドレス空間を選択したポートの物理アドレス空間に設定してもよい。
【０１０５】
これにより、ソフトウェア間でのアクセス競合を回避することができ、さらに、不要なポートを解除したことで省電力効果を得ることができる。また、複数のＣＰＵを使用する実行対象ソフトウェアにて、マスタスレッドとスレーブスレッドでアクセスする論理アドレス空間が離れている場合には、物理アドレス空間の集約を行わなくてもよい。これにより、ソフトウェア内でのアクセス競合も回避することができる。
【０１０６】
また、マルチコアプロセッサシステムは、実行対象ソフトウェアを割り当てるＣＰＵが複数存在する場合に、特定のポートへのアドレス変換通知を完了した後に、実行対象ソフトウェアに実行開始を通知してもよい。
【０１０７】
これにより、ソフトウェア間のアクセス競合を回避することができ、さらに、複数のＣＰＵに割り当てられるソフトウェアを混載することができる。混載の具体例としては、図８で示したように、並列ソフトウェアＰ１がＣＰＵ＃１〜ＣＰＵ＃３に割り当てられ、並列ソフトウェアＰ２がＣＰＵ＃２〜ＣＰＵ＃４に割り当てられた状態である。混載された場合でも、並列ソフトウェアが各コアで同じタイミングに実行対象となるようにする。実行対象となった際には、メモリコントローラの特定のポートにアドレス変換通知を行い、通知完了後に並列ソフトウェアを実行することで、正常に動作することができる。
【０１０８】
また、マルチコアプロセッサシステムは、コアの数とポートの数が等しくてもよい。これにより、ＣＰＵとポートが１対１対応となり、ＣＰＵ間にてアクセス競合を回避することができる。また、ＣＰＵの数よりポートの数が少ない場合にも、一部のＣＰＵ間でアクセス競合を避けることができる。
【０１０９】
たとえば、ＣＰＵを４つ備え、ポートを３つ備えるマルチコアプロセッサシステムにて、ＣＰＵ＃１にはポート＃１、ＣＰＵ＃２にはポート＃２、ＣＰＵ＃３とＣＰＵ＃４にはポート＃３が対応づけることができる。この場合、ＣＰＵ＃１と、ＣＰＵ＃２と、ＣＰＵ＃３またはＣＰＵ＃４の間ではアクセス競合を避けることができる。また、ＣＰＵ＃３とＣＰＵ＃４にて割り当てられるソフトウェアが、お互いのメモリにアクセスする頻度が高いソフトウェアであれば、１つのポートで同じ論理アドレス空間を使用してもよい。
【０１１０】
このように、依存関係が高いソフトウェアを割り当てる複数のＣＰＵが決定されているならば、ＣＰＵ数分ポートを用意し、決定されているＣＰＵに対応するポートに関しては１つにまとめることで、ポート結線にかかるコストを抑えることができる。
【０１１１】
なお、本実施の形態で説明したメモリコントローラ制御方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本メモリコントローラ制御プログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本メモリコントローラ制御プログラムは、インターネット等のネットワークを介して配布してもよい。
【符号の説明】
【０１１２】
１００  マルチコアプロセッサシステム
＃１〜＃４  ＣＰＵ、ポート
１１０  バス
２０１  共用メモリ
２０２  メモリコントローラ
２０３  ポート接続器
２０４  アドレス変換器
４０１  並列度情報テーブル
４０２  取得部
４０３  決定部
４０４  設定部
４０５  アドレス通知部
４０６  選択部
４０７  解除通知部
４０８  集約部
４０９  検出部
４１０  実行開始通知部
【図１】
0005472447.tif 000002
【図２】
0005472447.tif 000003
【図３】
0005472447.tif 000004
【図４】
0005472447.tif 000005
【図５】
0005472447.tif 000006
【図６】
0005472447.tif 000007
【図７】
0005472447.tif 000008
【図８】
0005472447.tif 000009
【図９】
0005472447.tif 000010
【図１０】
0005472447.tif 000011
【図１１】
0005472447.tif 000012
【図１２】
0005472447.tif 000013
【図１３】
0005472447.tif 000014
【図１４】
0005472447.tif 000015
【図１５】
0005472447.tif 000016
【図１６】
0005472447.tif 000017
【図１７】
0005472447.tif 000018