(57)【特許請求の範囲】
【請求項１】
マルチコアプロセッサへのプロセスの割り当て処理を検出する検出手段と、
前記検出手段により前記割り当て処理が検出された場合、前記マルチコアプロセッサの各コアに割り当てられた前記割り当て処理後の各プロセスの前記マルチコアプロセッサが共有する共有資源へのアクセス回数と、前記割り当て処理で割り当てられたプロセスの優先度と、を取得する取得手段と、
前記取得手段により取得された前記割り当て処理で割り当てられたプロセスの優先度が高いか否かを所定基準に基づいて判断する判断手段と、
前記判断手段により前記割り当て処理で割り当てられたプロセスの優先度が高いと判断された場合、前記取得手段により取得されたアクセス回数に基づいてアクセス比率を算出する算出手段と、
前記マルチコアプロセッサから前記共有資源へのアクセスを調停する調停回路へ前記算出手段により算出されたアクセス比率を通知する通知手段と、
を備えることを特徴とするマルチコアプロセッサシステム。
【請求項２】
前記判断手段は、
前記判断手段により前記割り当て処理で割り当てられたプロセスの優先度が高くないと判断された場合、前記各コアに割り当てられたプロセスのうち、前記取得手段により取得された優先度が高いプロセスがあるか否かを前記所定基準に基づいて判断し、
前記算出手段は、
前記判断手段により前記各コアに割り当てられたプロセスの中で該優先度が高いプロセスがあると判断された場合、前記取得手段により取得されたアクセス回数に基づいてアクセス比率を算出することを特徴とする請求項１に記載のマルチコアプロセッサシステム。
【請求項３】
前記取得手段は、
前記割り当て処理で割り当てられたプロセスの優先度と、前記各プロセスの前記アクセス回数および前記各プロセスの実行時間により定められたアクセス頻度とを取得し、
前記判断手段は、
前記取得手段により取得された前記割り当て処理で割り当てられたプロセスの優先度が高いか否かを前記所定基準に基づいて判断し、
前記算出手段は、
前記判断手段により前記割り当て処理で割り当てられたプロセスの優先度が高いと判断された場合、前記取得手段により取得されたアクセス頻度に基づいてアクセス比率を算出することを特徴とする請求項１に記載のマルチコアプロセッサシステム。
【請求項４】
前記取得手段は、
前記検出手段により検出された割り当て処理で割り当てられたプロセスの優先度と、前記各プロセスの優先度と前記アクセス回数および前記各プロセスの実行時間により定められたアクセス頻度とを取得し、
前記判断手段は、
前記取得手段により取得された前記割り当て処理で割り当てられたプロセスの優先度が高いか否かを前記所定基準に基づいて判断し、
前記判断手段は、
前記判断手段により前記割り当て処理で割り当てられたプロセスの優先度が高くないと判断された場合、
前記判断手段は、
前記各コアに割り当てられたプロセスのうち、前記取得手段により取得された優先度が高いプロセスがあるか否かを前記所定基準に基づいて判断し、
前記算出手段は、
前記判断手段により前記割り当て処理で割り当てられたプロセスの優先度が高いと判断された場合、前記取得手段により取得されたアクセス頻度に基づいてアクセス比率を算出することを特徴とする請求項１に記載のマルチコアプロセッサシステム。
【請求項５】
前記検出手段は、
プロセスの切り替え処理を検出し、
前記取得手段は、
前記検出手段により前記切り替え処理が検出された場合、前記各コアに割り当てられた前記切り替え処理後の各プロセスの優先度と、前記各プロセスの前記アクセス回数を取得し、
前記判断手段は、
前記各コアに割り当てられたプロセスのうち、前記取得手段により取得された優先度が高いプロセスがあるか否かを前記所定基準に基づいて判断し、
前記算出手段は、
前記判断手段により前記各コアに割り当てられたプロセスの中で該優先度が高いプロセスがあると判断された場合、前記取得手段により取得されたアクセス回数に基づいてアクセス比率を算出することを特徴とする請求項１に記載のマルチコアプロセッサシステム。
【請求項６】
前記取得手段は、
前記検出手段により前記切り替え処理が検出された場合、前記各コアに割り当てられたプロセスの優先度と、前記各プロセスの前記アクセス回数および前記各プロセスの実行時間により定められたアクセス頻度を取得し、
前記判断手段は、
前記各コアに割り当てられたプロセスのうち、前記取得手段により取得された優先度が高いプロセスがあるか否かを前記所定基準に基づいて判断し、
前記算出手段は、
前記判断手段により前記各コアに割り当てられたプロセスのうち、該優先度が高いプロセスがあると判断された場合、前記取得手段により取得されたアクセス頻度に基づいてアクセス比率を算出することを特徴とする請求項５に記載のマルチコアプロセッサシステム。
【請求項７】
前記検出手段は、
プロセスの完了を検出し、
前記取得手段は、
前記検出手段により前記完了が検出された場合、前記各コアに割り当てられた前記完了後の各プロセスの優先度と、前記各プロセスのアクセス回数を取得し、
前記判断手段は、
前記各コアに割り当てられたプロセスのうち、前記取得手段により取得された優先度が高いプロセスがあるか否かを前記所定基準に基づいて判断し、
前記算出手段は、
前記判断手段により前記各プロセスの中で前記優先度が高いプロセスがあると判断された場合、前記取得手段により取得されたアクセス回数に基づいてアクセス比率を算出することを特徴とする請求項１〜６のいずれか一つに記載のマルチコアプロセッサシステム。
【請求項８】
前記取得手段は、
前記検出手段により前記完了が検出された場合、前記各プロセスの優先度と、前記各プロセスの前記アクセス回数および前記各プロセスの実行時間により定められたアクセス頻度を取得し、
前記判断手段は、
前記各コアに割り当てられたプロセスのうち、前記取得手段により取得された優先度が高いプロセスがあるか否かを前記所定基準に基づいて判断し、
前記算出手段は、
前記判断手段により前記各プロセスの中で前記優先度が高いプロセスがあると判断された場合、前記取得手段により取得されたアクセス頻度に基づいてアクセス比率を算出することを特徴とする請求項７に記載のマルチコアプロセッサシステム。
【請求項９】
マルチコアプロセッサへのプロセスの割り当て処理を検出する検出工程と、
前記検出工程により前記割り当て処理が検出された場合、前記マルチコアプロセッサの各コアに割り当てられた前記割り当て処理後の各プロセスの前記マルチコアプロセッサが共有する共有資源へのアクセス回数と、前記検出工程により検出された割り当て処理で割り当てられたプロセスの優先度と、を取得する取得工程と、
前記取得工程により取得された前記割り当て処理で割り当てられたプロセスの優先度が高いか否かを所定基準に基づいて判断する判断工程と、
前記判断工程により前記割り当て処理で割り当てられたプロセスの優先度が高いと判断された場合、前記取得工程により取得されたアクセス回数に基づいてアクセス比率を算出する算出工程と、
前記マルチコアプロセッサから前記共有資源へのアクセスを調停する調停回路へ前記算出工程により算出されたアクセス比率を通知する通知工程と、
を前記マルチコアプロセッサの一のコアに実行させることを特徴とする制御プログラム。
【請求項１０】
マルチコアプロセッサへのプロセスの割り当て処理を検出する検出工程と、
前記検出工程により前記割り当て処理が検出された場合、前記マルチコアプロセッサの各コアに割り当てられた前記割り当て処理後の各プロセスの前記マルチコアプロセッサが共有する共有資源へのアクセス回数と、前記割り当て処理で割り当てられたプロセスの優先度と、を取得する取得工程と、
前記取得工程により取得された前記割り当て処理で割り当てられたプロセスの優先度が高いか否かを所定基準に基づいて判断する判断工程と、
前記判断工程により前記割り当て処理で割り当てられたプロセスの優先度が高いと判断された場合、前記取得工程により取得されたアクセス回数に基づいてアクセス比率を算出する算出工程と、
前記マルチコアプロセッサから前記共有資源へのアクセスを調停する調停回路へ前記算出工程により算出されたアクセス比率を通知する通知工程と、
を前記マルチコアプロセッサの一のコアが実行することを特徴とする制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マルチコアプロセッサが共有する共有資源へのアクセスを調停する調停回路を制御するマルチコアプロセッサシステム、制御プログラム、および制御方法に関する。
【背景技術】
【０００２】
従来、共有型のマルチコアプロセッサシステムにおいて、マルチコアプロセッサのうちの一のＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）がキャッシュ上の共有データの更新を行った場合、他のＣＰＵが該共有データから更新後の最新のデータにアクセスするために、キャッシュ間の一貫性を保つことが必要である。キャッシュ間の一貫性を保つことをキャッシュのコヒーレンシと称する。キャッシュのコヒーレンシの方式として、スヌープ方式が挙げられる。【０００３】
スヌープ方式では、各ＣＰＵのキャッシュが該キャッシュ自身および他のＣＰＵのキャッシュのラインの状態を監視し、他のＣＰＵのキャッシュと更新状態の情報を交換することにより、共有データの更新を検出する。各キャッシュは更新を検出すると、データバスを介して、未更新のデータをパージし、更新されたデータをキャッシュする。【０００４】
マルチコアプロセッサにおいて、複数のＣＰＵからバスへのアクセス要求が同時に発生した際に、どのＣＰＵからのアクセスを許可するかを調停回路がラウンドロビン方式を用いて調停していた。ラウンドロビン方式では各ＣＰＵに順番にバスのアクセス権を与える。【０００５】
調停回路にはリクエストバッファを備えており、調停回路はリクエストバッファの登録されているアクセス要求を先頭から順に許可する。ラウンドロビン方式では、たとえば、一のＣＰＵおよび他のＣＰＵに割り当てられているプロセスに関するアクセス要求の場合、該アクセス要求の持ち時間（タイムスライス）が終了するとアクセス要求が一端中断され、リクエストバッファの最後に入れられる。【０００６】
また、アプリケーションの処理単位であるプロセスは、関数などの単位を示すプロセス（以下、「粗粒度プロセス」と称する。）とループ処理などを示すプロセス（以下、「中粒度プロセス」と称する。）の２つに分類することができる。さらに、中粒度プロセスは、ループイタレーション間に依存関係のないプロセス（以下、「ｄｏａｌｌプロセス」と称する。）と、ループイタレーション間に依存関係のあるプロセス（以下、「ｄｏａｃｒｏｓｓプロセス」と称する。）の２つに分類することができる（たとえば、下記特許文献１および非特許文献１を参照。）。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００８−２１７８２５号公報
【非特許文献】
【０００８】
【非特許文献１】笠原博徳著「並列処理技術」コロナ社、１９９１年６月２０日、ｐ．１３１
【発明の概要】
【発明が解決しようとする課題】
【０００９】
しかしながら、ｄｏａｃｒｏｓｓプロセスが並列に複数のプロセスに分割されてそれぞれ異なるＣＰＵに割り当てられた場合、イタレーション間に依存関係があるため、頻繁にスヌープ処理を行う必要があった。すなわち、バスの使用回数が増大する。【００１０】
一方、ｄｏａｌｌプロセスが並列に複数のプロセスに分割されてそれぞれ異なるＣＰＵに割り当てられた場合、イタレーションごとに独立して計算が可能であるため、ループ処理の最後に同期を取っていた。また、粗粒度プロセスはイタレーションによるスヌープ処理の必要がない。【００１１】
従来では、ラウンドロビン方式で各ＣＰＵに順番にバスのアクセス権を与えているため、ｄｏａｌｌプロセスまたは粗粒度プロセスがバスを使用している間、ｄｏａｃｒｏｓｓプロセスがバスを介したスヌープ処理ができない。すなわち、バスへのアクセス回数が多いｄｏａｃｒｏｓｓプロセスの実行時間が増大する問題点があった。【００１２】
本発明は、上述した従来技術による問題点を解消するため、バスへのアクセス権待ちを防止することで、プロセスの実行時間を減少させることができるマルチコアプロセッサシステム、制御プログラム、および制御方法を提供することを目的とする。
【課題を解決するための手段】
【００１３】
上述した課題を解決し、目的を達成するため、開示のマルチコアプロセッサシステムと、制御プログラム、および制御方法は、プロセスの割り当て処理を検出し、検出された割り当て処理で割り当てられたプロセスの優先度と、マルチコアプロセッサの各コアに割り当てられた各プロセスの共有資源へのアクセス回数を取得し、取得された前記割り当て処理で割り当てられたプロセスの優先度が所定基準に応じて高いか否かを判断し、前記割り当て処理で割り当てられたプロセスの優先度が高いと判断された場合、取得されたアクセス回数に基づいてアクセス比率を算出し、算出されたアクセス比率を調停回路へ通知することを要件とする。
【発明の効果】
【００１４】
本マルチコアプロセッサシステム、制御プログラム、および制御方法によれば、バスへのアクセス権待ちを防止することで、プロセスの実行時間を減少させることができるという効果を奏する。
【図面の簡単な説明】
【００１５】
【図１】本実施の形態にかかるマルチコアプロセッサシステムのハードウェアを示すブロック図である。
【図２】優先度テーブル１２３の一例を示す説明図である。
【図３】粗粒度プロセスの一例を示す説明図である。
【図４】ｄｏａｌｌプロセスの一例を示す説明図である。
【図５】ｄｏａｃｒｏｓｓプロセスの一例を示す説明図である。
【図６】スケジューラ１１１の動作を示すブロック図である。
【図７】プロセスの割り当て例１を示す説明図である。
【図８】通知されたアクセス比率に基づいてアクセスが調停される例１を示す説明図である。
【図９】プロセスの割り当て例２を示す説明図である。
【図１０】通知されたアクセス比率に基づいてアクセスが調停される例２を示す説明図である。
【図１１】プロセスの割り当て例３を示す説明図である。
【図１２】通知されたアクセス比率に基づいてアクセスが調停される例３を示す説明図である。
【図１３】スケジューラ１１１による制御処理手順例を示すフローチャートである。
【発明を実施するための形態】
【００１６】
以下に添付図面を参照して、本発明にかかるマルチコアプロセッサシステム、制御プログラム、および制御方法の好適な実施の形態を詳細に説明する。なお、本実施の形態のマルチコアプロセッサシステムにおいて、マルチコアプロセッサとは、コアが複数搭載されたプロセッサである。コアが複数搭載されていれば、複数のコアが搭載された単一のプロセッサでもよく、シングルコアのプロセッサが並列されているプロセッサ群でもよい。なお、本実施の形態では、説明を単純化するため、シングルコアのプロセッサが並列されているプロセッサ群を例に挙げて説明する。
【００１７】
（マルチコアプロセッサシステムのハードウェア）
図１は、本実施の形態にかかるマルチコアプロセッサシステムのハードウェアを示すブロック図である。図１において、マルチコアプロセッサシステム１００は、ＣＰＵ♯０〜ＣＰＵ＃７と、共有メモリ１０３と、バス１０１と、調停回路１０２と、を備えている。ＣＰＵ＃０〜ＣＰＵ＃７は調停回路１０２を介してバス１０１に接続され、マルチコアプロセッサシステム１００のＣＰＵ＃０〜７を除く各部はバス１０１によってそれぞれ接続されている。本実施の形態では、ＣＰＵ＃０〜７が共有する共有資源はバス１０１である。
【００１８】
ここで、ＣＰＵ＃０〜ＣＰＵ＃７は、それぞれレジスタやキャッシュを備えている。ＣＰＵ＃０は、マスタＯＳを実行し、マルチコアプロセッサシステム１００の全体の制御を司る。マスタＯＳは、アプリケーションの割り当てを制御するスケジューラ１１１を備えている。スケジューラ１１１は、アクセス比率の決定とタイムスライスの算出を行うことで調停回路１０２を制御する制御プログラムを備えている。ＣＰＵ＃１〜ＣＰＵ＃７は、それぞれスレーブＯＳを実行し、スケジューラ１１１により割り当てられたプロセスを実行する。
【００１９】
調停回路１０２は、ＣＰＵ＃０〜ＣＰＵ＃７からバス１０１へのアクセスをアクセス比率に応じて調停する回路である。たとえば、調停回路１０２は、ＣＰＵ＃０〜ＣＰＵ＃７からのアクセス要求をリクエストバッファへ登録し、リクエストバッファに登録されている順にアクセス要求を取り出し、取り出したアクセス要求を許可する。
【００２０】
そして、共有メモリ１０３は、マルチコアプロセッサに共有されるメモリであり、プロセステーブル１２１や優先度テーブル１２３やブートプログラムを記憶している。共有メモリ１０３は、たとえば、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）と、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）と、フラッシュＲＯＭなどを備えている。
【００２１】
たとえば、ＲＯＭが、該プログラムなどを記憶し、ＲＡＭは、ＣＰＵ＃０〜ＣＰＵ＃７のワークエリアとして使用される。共有メモリ１０３に記憶されているプログラムは、各ＣＰＵにロードされることで、コーディングされている処理をＣＰＵに実行させることとなる。本実施の形態では、調停回路１０２を制御する制御プログラムがスケジューラ１１１に備えられており、ＣＰＵ＃０がマスタＯＳをロードしてコーディングされている処理を実行するため、該制御プログラムにコーディングされている処理はＣＰＵ＃０が実行することとなる。
【００２２】
プロセステーブル１２１は、各プロセスがどのＣＰＵに割り当てられているか、割り当てられているＣＰＵが該アプリケーションに関する処理を実行中であるか否かを示す情報である。ここで、プロセスとは、周知のようにアプリケーション内で行われる処理の実行単位である。各ＣＰＵは、プロセステーブル１２１を読み出して各ＣＰＵのキャッシュに記憶しておく。スケジューラ１１１はプロセスをＣＰＵ＃０〜ＣＰＵ＃７のいずれかに割り当てると、プロセステーブル１２１に該プロセスがどのＣＰＵに割り当てられたかを登録する。各ＣＰＵはプロセスの切り替え（以下、「タスクスイッチ」と称する。）が発生するとプロセステーブル１２１にどのプロセスが実行状態になったかを登録する。さらに、各ＣＰＵはプロセスが完了するとプロセステーブル１２１から該完了したプロセスの情報を削除する。
【００２３】
そして、各ＣＰＵは、プロセステーブル１２１を書き換えると、スヌープ処理を実行することで、全ＣＰＵのキャッシュに記憶されているプロセステーブル１２１を更新する。スケジューラ１１１はプロセステーブル１２１を参照することによりタスクディスパッチ、タスクスイッチ、またはタスク完了を検出している。
【００２４】
優先度テーブル１２３は各プロセスの優先度およびアクセス頻度に関するテーブルである。共有メモリ１０３に記憶されているが、各ＣＰＵがブートされると共に、各ＣＰＵが優先度テーブル１２３を読み出して自身のキャッシュに記憶する。
【００２５】
図２は、優先度テーブル１２３の一例を示す説明図である。優先度テーブル１２３では、各プロセスの優先度およびアクセス頻度を示すテーブルであって、プロセスの項目２０１と、粒度の項目３０２と、優先度の項目２０３と、アクセス回数／イタレーション回数の項目２０４と、バスアクセス頻度の項目２０５を備えている。
【００２６】
プロセスの項目２０１には、各プロセスの名称が保持されている。アプリケーションの設計者がアプリケーションを複数のプロセスに分割したり、コンパイラが各アプリケーションを複数のプロセスへ分割することで、アプリケーションごとにどのプロセスが実行されるかが決まっている。
【００２７】
粒度の項目２０２には、プロセスの項目２０１に保持されたプロセスが粗粒度プロセスであるか、ｄｏａｃｒｏｓｓプロセスであるか、ｄｏａｌｌプロセスであるかが保持されている。各プロセスの粒度についてはコンパイラを用いて解析することができる。ここで、プロセスの粒度について図を用いて例を説明する。
【００２８】
図３は、粗粒度プロセスの一例を示す説明図である。図３では、ＣＰＵ＃２〜ＣＰＵ＃７を省略して記載している。粗粒度プロセスは、たとえば、リスト３００内のＦｕｎｃ＿ｓｔａｒｔ（ｈｎｄｌ，＆a）のような関数単位の処理が該当する。
【００２９】
図４は、ｄｏａｌｌプロセスの一例を示す説明図である。図４では、ＣＰＵ＃２〜ＣＰＵ＃７を省略して記載している。ｄｏａｌｌプロセスは、たとえば、リスト４００内のｆｏｒ文のような処理が該当する。リスト４００内のｆｏｒ文では１イタレーション（ｉ）において各係数のｉ番目の値のみを用いる処理である。
【００３０】
図４では、イタレーション０〜（Ｎ／２−１）までを一つのプロセスとし、イタレーションＮ／２〜（Ｎ−１）までを一つのプロセスとしてリスト４００内のｆｏｒ文に関する処理が２つのプロセスに分割されている。該２つのプロセス間において依存関係がないため、プロセスの完了時にのみプロセス間で同期が取られる。
【００３１】
図５は、ｄｏａｃｒｏｓｓプロセスの一例を示す説明図である。図５では、ＣＰＵ＃２〜ＣＰＵ＃７を省略して記載している。ｄｏａｃｒｏｓｓプロセスは、たとえば、リスト５００内のｆｏｒ文のような処理が該当する。リスト５００内のｆｏｒ文ではａ［ｉ］の算出にｂ［ｉ−２］が用いられているため、イタレーション（ｉ）間に依存関係がある。イタレーション間に依存関係があるために処理の途中で頻繁にスヌープ処理を行うので、バス１０１へのアクセス回数が多い。
【００３２】
図２に戻って、優先度の項目２０３には、優先度が高いか否かが保持されており、「高」が保持されていれば優先度が高いことを示し、「低」が保持されていれば優先度が高くないことを示している。本実施の形態では、ｄｏａｃｒｏｓｓプロセスの優先度は高く、ｄｏａｌｌプロセスおよび粗粒度プロセスの優先度は高くないと設定されている。また、アプリケーションの設計者が任意に優先度を決定しても良い。
【００３３】
アクセス回数／イタレーション回数の項目２０４には、粒度の項目２０２で粗粒度プロセスまたはｄｏａｌｌプロセスであることが示されている場合、キャッシュへのアクセス回数が保持されている。アクセス回数／イタレーション回数の項目２０４には、粒度の項目２０２でｄｏａｃｒｏｓｓプロセスであることが示されている場合、イタレーション回数が保持されている。各プロセスのアクセス回数／イタレーション回数についてはコンパイラを用いて解析することができる。
【００３４】
バスアクセス頻度の項目２０５には、各プロセスのバス１０１へのアクセス頻度が保持されている。バスアクセス頻度は何秒に一回、キャッシュへアクセスしているかの指標である。ここで、バスアクセス頻度の算出方法について説明する。粗粒度プロセスのバスアクセス頻度およびｄｏａｌｌプロセスのバスアクセス頻度は下記式（１）に基づいて決定され、ｄｏａｃｒｏｓｓプロセスのバスアクセス頻度は下記式（２）に基づいて決定される。
【００３５】
粗粒度プロセスのバスアクセス頻度およびｄｏａｌｌプロセスのバスアクセス頻度＝ｔ［ｓ］／（ａ（１−σ））［回数］                                    ・・・（１）
【００３６】
ｄｏａｃｒｏｓｓプロセスのバスアクセス頻度＝ｔ［ｓ］／ｉ［回数］  ・・・（２）
【００３７】
ｔはプロセスの実行時間であり、ａはキャッシュアクセス回数であり、σはキャッシュヒット率であり、１−σはキャッシュミスヒット率であり、ｉはイタレーション回数である。
【００３８】
プロセスＡの場合において、ｔ＝０．０１［ｓ］であり、アクセス回数が２０００回であり、σ＝０．９であるとすると、アクセス頻度は０．００００５となる。プロセスＡ−１の場合において、ｔ＝０．０１［ｓ］であり、アクセス回数が１０００回であり、σ＝０．９５であるとすると、アクセス頻度は０．０００２となる。
【００３９】
プロセスＡ−１−１の場合において、ｔ＝０．０１［ｓ］であり、イタレーション回数が１００００回であるとすると、アクセス頻度は０．００００００１となる。プロセスＡ−１−２の場合において、ｔ＝０．０１［ｓ］であり、アクセス回数が１０００回であり、σ＝０．９であるとすると、アクセス頻度は０．０００１となる。
【００４０】
プロセスＡ−２の場合において、ｔ＝０．０１［ｓ］であり、アクセス回数が１０００回であり、σ＝０．９であるとすると、アクセス頻度は０．０００１となる。プロセスＢの場合において、ｔ＝０．０１［ｓ］であり、アクセス回数が１０００回であり、σ＝０．９であるとすると、アクセス頻度は０．０００１となる。プロセスＣの場合において、ｔ＝０．０１［ｓ］であり、アクセス回数が１０００回であり、σ＝０．９であるとすると、アクセス頻度は０．０００１となる。
【００４１】
また、図１に戻って、図示していないが、マルチコアプロセッサシステム１００では、Ｉ／Ｆ（ＩｎｔｅｒＦａｃｅ）やディスプレイやキーボードなどを備えている。Ｉ／Ｆは、通信回線を通じてＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネットなどのネットワークに接続され、当該ネットワークを介して他の装置に接続される。そして、Ｉ／Ｆは、ネットワークと内部のインターフェースを司り、外部装置からのデータの入出力を制御する。Ｉ／Ｆには、たとえばモデムやＬＡＮアダプタなどを採用することができる。
【００４２】
ディスプレイは、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。ディスプレイは、たとえば、ＣＲＴ、ＴＦＴ液晶ディスプレイ、プラズマディスプレイなどを採用することができる。キーボードは、文字、数字、各種指示などの入力のためのキーを備え、データの入力を行う。また、タッチパネル式の入力パッドやテンキーなどであってもよい。
【００４３】
（スケジューラ１１１の動作説明）
図６は、スケジューラ１１１の動作を示すブロック図である。一例としてスケジューラ１１１は、検出部６０１と、取得部６０２と、判断部６０３と、算出部６０４と、通知部６０５と、を含む。各機能（検出部６０１〜通知部６０５）は、たとえば、共有メモリ１０３に記憶されたスケジューラ１１１をＣＰＵ♯０に実行させることにより該各機能を実現することができる。
【００４４】
検出部６０１は、マルチコアプロセッサの割り当て状態の変化を検出する。取得部６０２は、検出部６０１により割り当て状態の変化が検出された場合、マルチコアプロセッサの各ＣＰＵに割り当てられた変化後の各プロセスのバス１０１へのアクセス回数を取得する。
【００４５】
算出部６０４は、取得部６０２により取得されたアクセス回数に基づいてアクセス比率を算出する。通知部６０５は、算出部６０４により算出されたアクセス比率を調停回路１０２へ通知する。
【００４６】
ここで、マルチコアプロセッサの割り当て状態の変化とは、たとえば、プロセスの割り当て、プロセスの切り替え、プロセスの完了が挙げられる。まず、プロセスの割り当てが検出された場合、つぎに、プロセスの切り替えが検出された場合、最後に、プロセスの完了が検出された場合の各機能の処理について説明する。
【００４７】
検出部６０１は、プロセスの割り当て処理を検出し、取得部６０２は、検出部６０１により検出された割り当て処理で割り当てられたプロセスの優先度と、各ＣＰＵに割り当てられた割り当て処理後の各プロセスの優先度とアクセス回数を取得する。
【００４８】
そして、判断部６０３は、取得部６０２により取得された割り当て処理で割り当てられたプロセスの優先度が高いか否かおよび各ＣＰＵに割り当てられた各プロセスの中に優先度の高いプロセスがあるか否かを所定基準に基づいて判断する。算出部６０４は、判断部６０３により割り当て処理で割り当てられたプロセスの優先度が高いもしくは優先度の高いプロセスがあると判断された場合、取得部６０２により取得されたアクセス回数に基づいてアクセス比率を算出する。通知部６０５は、算出部６０４により算出されたアクセス比率を調停回路１０２へ通知する。
【００４９】
また、取得部６０２は、検出部６０１により検出された割り当て処理で割り当てられたプロセスの優先度と、各ＣＰＵに割り当てられた各プロセスの優先度とアクセス回数および各プロセスの実行時間により定められたアクセス頻度とを取得する。
【００５０】
判断部６０３は、取得部６０２により取得された割り当て処理で割り当てられたプロセスの優先度が高いか否かおよび各ＣＰＵに割り当てられた各プロセスの中に優先度の高いプロセスがあるか否かを所定基準に基づいて判断する。そして、算出部６０４は、判断部６０３により割り当て処理で割り当てられたプロセスの優先度が高いもしくは優先度の高いプロセスがあると判断された場合、取得部６０２により取得されたアクセス頻度に基づいてアクセス比率を算出する。通知部６０５は、算出部６０４により算出されたアクセス比率を調停回路１０２へ通知する。
【００５１】
また、検出部６０１は、プロセスの切り替え処理を検出し、取得部６０２は、検出部６０１により切り替え処理が検出された場合、各ＣＰＵに割り当てられた切り替え処理後の各プロセスの優先度と、各プロセスのアクセス回数を取得する。
【００５２】
判断部６０３は、各ＣＰＵに割り当てられたプロセスのうち、取得部６０２により取得された優先度が高いプロセスがあるか否かを所定基準に基づいて判断する。そして、算出部６０４は、判断部６０３により各ＣＰＵに割り当てられたプロセスの中で該優先度が高いプロセスがあると判断された場合、取得部６０２により取得されたアクセス回数に基づいてアクセス比率を算出する。通知部６０５は、算出部６０４により算出されたアクセス比率を調停回路１０２へ通知する。
【００５３】
また、取得部６０２は、検出部６０１により切り替え処理が検出された場合、各ＣＰＵに割り当てられたプロセスの優先度と、各プロセスのアクセス回数および各プロセスの実行時間により定められたアクセス頻度を取得する。
【００５４】
判断部６０３は、各コアに割り当てられたプロセスのうち、取得部６０２により取得された優先度が高いプロセスがあるか否かを所定基準に基づいて判断する。そして、算出部６０４は、判断部６０３により各コアに割り当てられたプロセスのうち、優先度が高いプロセスがあると判断された場合、取得部６０２により取得されたアクセス頻度に基づいてアクセス比率を算出する。
【００５５】
また、検出部６０１は、プロセスの完了を検出し、取得部６０２は、検出部６０１により完了が検出された場合、各ＣＰＵに割り当てられた完了後の各プロセスの優先度と、各プロセスのアクセス回数を取得する。判断部６０３は、各ＣＰＵに割り当てられたプロセスのうち、取得部６０２により取得された優先度が高いプロセスがあるか否かを所定基準に基づいて判断する。
【００５６】
算出部６０４は、判断部６０３により各プロセスの中で優先度が高いプロセスがあると判断された場合、取得部６０２により取得されたアクセス回数に基づいてアクセス比率を算出する。通知部６０５は、算出部６０４により算出されたアクセス比率を調停回路１０２へ通知する。
【００５７】
また、取得部６０２は、検出部６０１により完了が検出された場合、各ＣＰＵに割り当てられた各プロセスの優先度と、各プロセスのアクセス回数および各プロセスの実行時間により定められたアクセス頻度を取得し、判断部６０３は、各コアに割り当てられたプロセスのうち、取得部６０２により取得された優先度が高いプロセスがあるか否かを所定基準に基づいて判断する。
【００５８】
算出部６０４は、判断部６０３により各プロセスの中で優先度が高いプロセスがあると判断された場合、取得部６０２により取得されたアクセス頻度に基づいてアクセス比率を算出する。通知部６０５は、算出部６０４により算出されたアクセス比率を調停回路１０２へ通知する。
【００５９】
以上を踏まえて図を用いて詳細に説明する。
【００６０】
図７は、プロセスの割り当て例１を示す説明図である。まず、ＣＰＵ＃０にはプロセスＡが割り当てられ、ＣＰＵ＃６にはプロセスＢが割り当てられている。そして、スケジューラ１１１がプロセスＣのＣＰＵ＃７へのタスクディスパッチを検出する。
【００６１】
そして、スケジューラ１１１が該タスクディスパッチを検出すると、プロセスＣの優先度を優先度テーブル１２３から取得する。そして、スケジューラ１１１が、プロセスＣの優先度が高いか否かを判断する。ここで、プロセスＣの優先度は高くないと判断される。スケジューラ１１１が、プロセスＣの優先度が高くないと判断すると、各ＣＰＵのアクセス比率を１対１に決定する。すなわち、スケジューラ１１１が調停回路１０２に各ＣＰＵからバス１０１へのアクセスをラウンドロビン方式で制御させる。
【００６２】
つぎに、スケジューラ１１１が各ＣＰＵに割り当てられたプロセスを特定し、特定したプロセスのアクセス回数／イタレーション回数とプロセスＣのアクセス回数を優先度テーブル１２３から取得する。ここでは、プロセスＡとプロセスＢが特定され、プロセスＡのアクセス回数が２０００回であり、プロセスＢのアクセス回数が１０００回であり、プロセスＣのアクセス回数が１０００回である。そして、スケジューラ１１１がタイムスライスを下記式（３）により算出する。
【００６３】
タイムスライス＝所定時間［ｍｓ］／アクセス回数の合計値［回数］    ・・・（３）
【００６４】
スケジューラ１１１がアクセス回数の合計値を算出し、所定時間を算出した合計値で割ることにより、タイムスライスを算出する。本実施の形態では所定時間を０．１［ｍｓ］とする。よって、タイムスライスは下記となる。
【００６５】
タイムスライス＝０．１／（２０００＋１０００＋１０００）
＝０．００００２５
【００６６】
そして、スケジューラ１１１が、決定したアクセス比率と算出したタイムスライスを調停回路１０２へ通知する。
【００６７】
図８は、通知されたアクセス比率に基づいてアクセスが調停される例１を示す説明図である。図８では、アクセス比率が１対１であるため、各ＣＰＵからのアクセス要求（図中の□であり、□の中の番号が各ＣＰＵに付された番号に対応している。）がリクエストバッファ８００へ交互に登録されている。そして、リクエストバッファ８００の先頭から順にアクセスが許可される。また、ｔｓがタイムスライスであり、ｔｓは０．００００２５である。
【００６８】
図９は、プロセスの割り当て例２を示す説明図である。まず、ＣＰＵ＃３にはプロセスＡ−２マスタが割り当てられ、ＣＰＵ＃４にはプロセスＡ−２スレーブが割り当てられている。ＣＰＵ＃５にはプロセスＡ−２スレーブが割り当てられ、ＣＰＵ＃６にはプロセスＢが割り当てられ、ＣＰＵ＃７にはプロセスＣが割り当てられている。
【００６９】
ＣＰＵ＃０にはプロセスＡが割り当てられていたが、プロセスＡからプロセスＡ−１へのタスク切り替えがＣＰＵ＃０で発生したとすると、スケジューラ１１１が該タスク切り替えを検出し、各ＣＰＵに割り当てられたプロセスを特定する。プロセスＡ−１と、プロセスＡ−２マスタと、２つのプロセスＡ−２スレーブと、プロセスＢとプロセスＣが特定される。なお、上述のようにスケジューラ１１１はプロセステーブル１２１を参照することによりタスクスイッチ、またはタスク完了を検出することができる。
【００７０】
そして、スケジューラ１１１が、特定したプロセスの優先度を優先度テーブル１２３から取得する。つぎに、スケジューラ１１１が、特定したプロセスの中で、優先度の高いプロセスがあるか否かを判断する。プロセスＡ−１の優先度と、プロセスＡ−２マスタの優先度と、２つのプロセスＡ−２スレーブの優先度と、プロセスＢの優先度と、プロセスＣの優先度とは、高くないため、スケジューラ１１１が特定したプロセスの中で、優先度の高いプロセスがないと判断する。
【００７１】
つぎに、スケジューラ１１１が、割り当てられたプロセスの中で、優先度の高いプロセスが無い場合、各ＣＰＵのアクセス比率を１対１に決定する。すなわち、スケジューラ１１１が調停回路１０２に各ＣＰＵからバス１０１へのアクセスをラウンドロビン方式で制御させる。
【００７２】
つぎに、スケジューラ１１１が特定したプロセスのアクセス回数／イタレーション回数を優先度テーブル１２３から取得する。ここでは、プロセスＡとプロセスＢが特定され、プロセスＡ−１のアクセス回数が１０００回であり、プロセスＡ−２のアクセス回数が１０００回であり、プロセスＢのアクセス回数が１０００回であり、プロセスＣのアクセス回数が１０００回である。そして、スケジューラ１１１がタイムスライスを上記式（３）により算出する。よって、ここでのタイムスライスは下記の様になる。
【００７３】
タイムスライス＝０．１／（１０００＋１０００＋１０００＋１０００）
＝０．００００２５
【００７４】
そして、スケジューラ１１１が、決定したアクセス比率と算出したタイムスライスを調停回路１０２へ通知する。
【００７５】
図１０は、通知されたアクセス比率に基づいてアクセスが調停される例２を示す説明図である。図１０では、アクセス比率が１対１であるため、各ＣＰＵからのアクセス要求（図中□であり、□の中の番号がＣＰＵの番号に対応している。）がリクエストバッファ８００へ交互に登録されている。そして、リクエストバッファ８００の先頭から順にアクセスが許可される。また、ｔｓがタイムスライスであり、ｔｓは０．００００２５である。
【００７６】
図１１は、プロセスの割り当て例３を示す説明図である。まず、ＣＰＵ＃２にはプロセスＡ−１−２が割り当てられ、ＣＰＵ＃３にはプロセスＡ−２マスタが割り当てられ、ＣＰＵ＃４にはプロセスＡ−２スレーブが割り当てられている。ＣＰＵ＃５にはプロセスＡ―２スレーブが割り当てられ、ＣＰＵ＃６にはプロセスＢが割り当てられ、ＣＰＵ＃７にはプロセスＣが割り当てられている。
【００７７】
ＣＰＵ＃０にはプロセスＡ−１が割り当てられていたが、プロセスＡ−１からプロセスＡ−１−１へのタスク切り替えがＣＰＵ＃０で発生した。さらに、ＣＰＵ＃１へのプロセスＡ−１−１スレーブのタスクディスパッチが発生した。ここで、該タスク切り替えの後に発生した該タスクディスパッチをスケジューラ１１１が検出する。
【００７８】
スケジューラ１１１が、タスクディスパッチを検出すると、該タスクディスパッチにより割り当てられたプロセスＡ−１−１スレーブの優先度を優先度テーブル１２３から取得し、Ａ−１−１スレーブの優先度が高いか否かを優先度テーブル１２３から判断する。Ａ−１−１の優先度が高いため、Ａ−１−１スレーブの優先度が高いと判断される。
【００７９】
Ａ−１−１スレーブの優先度が高いと判断されると、スケジューラ１１１がアクセス回数に応じたアクセス比率を算出する。ここで、たとえば、アクセス回数に基づいてアクセス比率を算出しても良いし、アクセス回数に基づいて算出されたアクセス頻度に基づいてアクセス比率を算出してもよい。アクセス回数に基づいてアクセス比率が算出される例を説明する。スケジューラ１１１が、優先度テーブル１２３から各ＣＰＵに割り当てられたプロセスのアクセス回数／イタレーション回数を取得する。
【００８０】
そして、プロセスＡ−１−１のアクセス回数が１００００回であり、プロセスＡ−１−２が１０００回であり、プロセスＡ−２が１０００回であり、プロセスＢが１０００回であり、プロセスＣが１０００回である。そして、スケジューラ１１１が、ｄｏａｃｒｏｓｓプロセスが割り当てられているＣＰＵ数を特定し、下記のようにアクセス比率を算出する。
【００８１】
ＣＰＵ＃０の率：ＣＰＵ＃１の率：ＣＰＵ＃２の率：ＣＰＵ＃３の率：ＣＰＵ＃４の率：ＣＰＵ＃５の率：ＣＰＵ＃６の率：ＣＰＵ＃７の率＝プロセスＡ−１−１のアクセス回数／２：プロセスＡ−１−１のアクセス回数／２：プロセスＡ−１−２のアクセス回数：プロセスＡ−２のアクセス回数：プロセスＡ−２のアクセス回数：プロセスＢのアクセス回数：プロセスＣのアクセス回数
＝５０００：５０００：１０００：１０００：１０００：１０００：１０００：１０００
＝５：５：１：１：１：１：１：１
【００８２】
なお、ｄｏａｃｒｏｓｓプロセスが割り当てられているＣＰＵの率については、イタレーション回数／該プロセスが割り当てられたＣＰＵ数としている。また、ｄｏａｌｌプロセスが割り当てられているＣＰＵの率については、上記ではアクセス回数としているが、アクセス回数／該プロセスが割り当てられているＣＰＵ数であってもよい。
【００８３】
つぎに、アクセス頻度に基づいてアクセス比率が算出される例を説明する。アクセス頻度は何秒に一回、キャッシュへアクセスしているかの指標である。各ＣＰＵに割り当てられたプロセスのアクセス頻度を優先度テーブル１２３から取得する。そして、スケジューラ１１１が、アクセス頻度に応じたアクセス比率を決定する。
【００８４】
プロセスＡ−１−１のアクセス頻度が１０＾−６［ｓ／回数］であり、プロセスＡ−１−２が１０＾―４であり、プロセスＡ−２が１０＾−４であり、プロセスＢが１０＾−４であり、プロセスＣが１０＾−４である。なお、「＾」は乗数を示し、１０＾−６であれば、１０の−６乗である。プロセスＡ−１−１は各ＣＰＵに割り当てられたプロセスの中でプロセスＡ−１−１を除くプロセスよりも１００倍キャッシュへのアクセスが多い。そして、プロセスＡ−１−１は２つのプロセスに分割されている。
【００８５】
まず、スケジューラ１１１がアクセス頻度に基づいてプロセス間のアクセス比率を算出する。プロセス間の比率は下記のようになる。
【００８６】
プロセスＡ−１−１の率：プロセスＡ−１−２の率：プロセスＡ−２の率：プロセスＢの率：プロセスＣの率＝１００：１：１：１：１
【００８７】
そして、スケジューラ１１１が、ｄｏａｃｒｏｓｓプロセスが割り当てられているＣＰＵ数を特定する。ここでは、プロセスＡ−１−１が２つのＣＰＵに割り当てられている。そして、スケジューラ１１１がアクセス比率を下記のように決定する。
【００８８】
ＣＰＵ＃０の率：ＣＰＵ＃１の率：ＣＰＵ＃２の率：ＣＰＵ＃３の率：ＣＰＵ＃４の率：ＣＰＵ＃５の率：ＣＰＵ＃６の率：ＣＰＵ＃７の率＝プロセスＡ−１−１の率／２：プロセスＡ−１−１の率／２：プロセスＡ−１−２の率：プロセスＡ−２の率：プロセスＡ−２の率：プロセスＡ−２の率：プロセスＢの率：プロセスＣの率
＝５０：５０：１：１：１：１：１：１
【００８９】
プロセスＡ−１−１の場合において、実行時間（ｔ）＝１０［ｍｓ］であり、イタレーション回数が１００００回であるため、プロセスＡ−１−１は０．１［ｍｓ］期間に１００回キャッシュへアクセスする。すなわち、プロセスＡ−１−１は２つに分割されているため、プロセスＡ−１−１が割り当てられているＣＰＵ＃０およびＣＰＵ＃１はそれぞれ０．１［ｍｓ］期間に５０回バス１０１へアクセスする。
【００９０】
一方、プロセスＡ−１−２の場合において、ｔ＝０．０１［ｓ］であり、アクセス回数が１０００回であるため、プロセスＡ−１−２は０．１［ｍｓ］期間に１回キャッシュへアクセスする。すなわち、プロセスＡ−１−２が割り当てられているＣＰＵ＃２は０．１［ｍｓ］期間に１回バス１０１へアクセスする。
【００９１】
プロセスＡ−１−１とプロセスＡ−１−２ではアクセス回数は１０倍しか違わないが、実行時間が同一であるため、所定時間においてプロセスＡ−１−１はプロセスＡ−１−２の１００倍キャッシュへアクセスする。したがって、アクセス頻度に応じて相対的なアクセス比率を算出することで、実行時間とアクセス回数に応じた最適なアクセス比率を決定できる。そして、スケジューラ１１１がタイムスライスを上記式（３）により算出する。タイムスライスは下記の様になる。
【００９２】
タイムスライス＝０．１／（１０００＋１０００＋１０００＋１０００）
＝０．００００２５
【００９３】
そして、スケジューラ１１１が、算出したアクセス比率とタイムスライスとを調停回路１０２へ通知する。
【００９４】
図１２は、通知されたアクセス比率に基づいてアクセスが調停される例３を示す説明図である。図１２では、アクセス頻度に基づいて算出されたアクセス比率が調停回路１０２へ通知された場合について説明する。ここでは、調停回路１０２による調停方式には重み付けラウンドロビン方式が用いられる。ＣＰＵ＃０またはＣＰＵ＃１からのアクセス要求の場合、該アクセス要求のタイムスライスが終了するとアクセス要求が一端中断され、５０回（単位時間あたりのアクセス回数）に１回だけリクエストバッファ８００の最後に入れ、それ以外はリクエストバッファ８００の先頭に入れる。
【００９５】
すなわち、ＣＰＵ＃０およびＣＰＵ＃１からのアクセス要求がリクエストバッファ８００へ５０回登録されると、ＣＰＵ＃２〜ＣＰＵ＃７からのアクセス要求が１回登録される。
【００９６】
従来ではｄｏａｃｏｒｓｓプロセスが割り当てられているＣＰＵ＃０からバス１０１へのアクセスには、アクセス比率がすべて１対１であったため、０．１［ｍｓ］の間に７８回のアクセス待ちが発生していた。一方、例３ではｄｏａｃｏｒｓｓプロセスが割り当てられているＣＰＵ＃０からバス１０１へのアクセスには、０．１［ｍｓ］の間に６回のアクセス待ちとなり、アクセス権の待機時間を減少させることにより、実行時間を減少させることができる。
【００９７】
また、本実施の形態では、アクセス頻度は何秒に一回、キャッシュへアクセスしているかの指標であるが、所定時間内に何回キャッシュへアクセスするかの指標であっても良い。
【００９８】
また、本実施の形態では、検出した割り当て状態の変化後に各ＣＰＵに割り当てられたプロセスの優先度を取得し、優先度の高いプロセスが割り当てられていれば、アクセス回数に基づいてアクセス比率を決定することとしてもよい。
【００９９】
（スケジューラ１１１による制御処理手順）
図１３は、スケジューラ１１１による制御処理手順例を示すフローチャートである。ここでは、アクセス頻度に基づいてアクセス比率が算出される例を示す。まず、スケジューラ１１１が、マルチコアプロセッサの割り当て状態の変化を検出したか否かを判断する（ステップＳ１３０１）。スケジューラ１１１が、割り当て状態の変化を検出していないと判断した場合（ステップＳ１３０１：Ｎｏ）、ステップＳ１３０１へ戻る。
【０１００】
一方、スケジューラ１１１が、タスクディスパッチを検出した場合（ステップＳ１３０１：タスクディスパッチ）、ディスパッチされたプロセスの優先度を取得し（ステップＳ１３０２）、取得した優先度が高いか否かを判断する（ステップＳ１３０３）。スケジューラ１１１が、取得した優先度が高くないと判断した場合（ステップＳ１３０３：Ｎｏ）、ステップＳ１３０４へ移行する。
【０１０１】
一方、スケジューラ１１１が、ステップＳ１３０１においてタスクスイッチまたはタスク完了を検出した場合（ステップＳ１３０１：タスクスイッチまたはタスク完了）、ステップＳ１３０４へ移行する。そして、スケジューラ１１１が、各ＣＰＵに割り当てられたプロセスの優先度を取得し（ステップＳ１３０４）、取得した優先度に基づいて優先度の高いプロセスが実行中であるか否かを判断する（ステップＳ１３０５）。ここで、各ＣＰＵに割り当てられたプロセスとは、各ＣＰＵで実行中のプロセスである。
【０１０２】
スケジューラ１１１が、優先度の高いプロセスが実行中でないと判断した場合（ステップＳ１３０５：Ｎｏ）、アクセス比率をすべて同一比率に決定し（ステップＳ１３０６）、ステップＳ１３０９へ移行する。すなわち、スケジューラ１１１が、各ＣＰＵからのアクセスを調停回路１０２にラウンドロビン方式で調停させるように制御する。
【０１０３】
スケジューラ１１１が、取得した優先度が高いと判断した場合（ステップＳ１３０３：Ｙｅｓ）、または優先度の高いプロセスが実行中であると判断した場合（ステップＳ１３０５：Ｙｅｓ）、各ＣＰＵに割り当てられたプロセスのアクセス頻度を取得する（ステップＳ１３０７）。そして、スケジューラ１１１が、アクセス頻度に基づいて各ＣＰＵのアクセス比率を算出し（ステップＳ１３０８）、ステップＳ１３０９へ移行する。
【０１０４】
ステップＳ１３０６またはステップＳ１３０８のつぎに、スケジューラ１１１が、各ＣＰＵに割り当てられたプロセスのアクセス回数を取得する（ステップＳ１３０９）。そして、スケジューラ１１１が、各ＣＰＵに割り当てられたプロセスのアクセス回数の合計値を算出し（ステップＳ１３１０）、タイムスライス＝単位時間／算出した合計値を算出する（ステップＳ１３１１）。そして、アクセス比率とタイムスライスを調停回路へ通知し（ステップＳ１３１２）、ステップＳ１３０１へ戻る。
【０１０５】
以上説明したように、マルチコアプロセッサシステム、制御プログラム、および制御方法によれば、各コアの割り当て状態に変化があると、各コアに割り当てられた変化後のプロセスのアクセス回数に基づきアクセス比率を算出する。すなわち、実行中のプロセスの組み合わせに応じて最適なアクセス比率が決定される。これにより、アクセス回数が多いプロセスのバスアクセス待ち時間を減少させることができ、該プロセスの実行時間を減少させることができる。
【０１０６】
また、プロセスの割り当て処理を検出した場合、該割り当て処理により割り当てられたプロセスの優先度が高い場合に、各ＣＰＵに割り当てられたプロセスのアクセス回数に基づいてアクセス比率を算出する。これにより、優先度が高くかつアクセス回数が多いプロセスのバスアクセス待ちの時間を減少させることで該プロセスが割り当てられているＣＰＵの処理を高速化することができ、スループットを向上させることができる。
【０１０７】
また、プロセスの割り当て処理を検出した場合、該割り当て処理により割り当てられたプロセスの優先度が高い場合および優先度の高いプロセスが実行中の場合に、各ＣＰＵに割り当てられたプロセスのアクセス回数に基づいてアクセス比率を算出する。これにより、優先度が高くかつアクセス回数が多いプロセスのバスアクセス待ちの時間を減少させることで該プロセスが割り当てられているＣＰＵの処理を高速化することができ、スループットを向上させることができる。
【０１０８】
また、プロセスの切り替え処理を検出した場合、切り替え後にも優先度が高いプロセスが実行中であれば、各プロセスのアクセス回数に基づいてアクセス比率を算出する。これにより、アクセス回数が多いプロセスのバスアクセス待ちの時間を減少させることで該プロセスが割り当てられているＣＰＵの処理を高速化することができ、スループットを向上させることができる。
【０１０９】
また、プロセスの完了を検出した場合、該プロセスの完了後にも優先度が高いプロセスが実行中であれば、各プロセスのアクセス回数に基づいてアクセス比率を算出する。これにより、アクセス回数が多いプロセスのバスアクセス待ちの時間を減少させることで該プロセスが割り当てられているＣＰＵの処理を高速化することができ、スループットを向上させることができる。
【０１１０】
また、アクセス頻度に基づいて相対的なアクセス比率を算出することで、所定時間内にアクセス回数が多いプロセスのバスアクセス待ちの時間を減少させることができる。
【符号の説明】
【０１１１】
１００  マルチコアプロセッサシステム
１０２  調停回路
６０１  検出部
６０２  取得部
６０３  判断部
６０４  算出部
６０５  通知部
【図１】
0005429363.tif 000002
【図２】
0005429363.tif 000003
【図３】
0005429363.tif 000004
【図４】
0005429363.tif 000005
【図５】
0005429363.tif 000006
【図６】
0005429363.tif 000007
【図７】
0005429363.tif 000008
【図８】
0005429363.tif 000009
【図９】
0005429363.tif 000010
【図１０】
0005429363.tif 000011
【図１１】
0005429363.tif 000012
【図１２】
0005429363.tif 000013
【図１３】
0005429363.tif 000014