(57)【要約】【課題】ＣＰＵの負荷だけでなく、メモリアクセス時の負荷を負荷分散の対象にするマルチコアプロセッサおよびマルチコアシステムの負荷分散方法を提供する。【解決手段】プログラム実行中に一定間隔で、負荷分散の管理手段２１が起動され、負荷情報収集手段２２がハードウェアの各コアから負荷情報を取得し、取得した負荷情報２３と２４を利用して、負荷分散判定手段２５は、システムにおける負荷の偏りを判定する。負荷の状態が判定基準を超える場合、負荷分散が必要であると判断して、移動対象選択手段２６で移動対象スレッドとその移動先を選択する。移動対象スレッドとその移動先はスレッド移動手段２７に通知され、実際のスレッド移動が行われる。【選択図】図４
2008191949.tif 000002
【特許請求の範囲】
【請求項１】
複数のコアを有する複数のマルチコアプロセッサと、各マルチコアプロセッサの資源を共有する共有資源とを有するマルチコアシステムであって、
前記各マルチコアプロセッサの負荷情報と、前記共有資源に対するアクセス時の負荷情報とを取得する負荷情報収集手段と、
前記負荷情報収集手段により取得した前記各マルチコアプロセッサの負荷情報と、前記アクセス時の負荷情報との条件に基づいて、負荷分散を行うか否かの判定を行う負荷分散判定手段と、
前記負荷分散判定手段により、前記負荷分散を行うと判断された際には、負荷を分散する負荷分散手段とを有するマルチコアシステム。
【請求項２】
前記負荷分散判定手段は、前記条件の少なくとも１つに基づいて前記負荷の基準値を設け、前記負荷が前記基準値を超えた際に、前記負荷分散を行うと判断することを特徴とする請求項１に記載のマルチコアシステム。
【請求項３】
前記負荷分散判定手段により、前記負荷分散を行うと判断された際には、前記負荷分散手段は、前記負荷分散を実行する際に、前記負荷が均等になるように前記負荷分散を実行することを特徴とする請求項１または２に記載のマルチコアシステム。
【請求項４】
前記負荷分散は、スレッドの移動対象を選択し、選択された対象に前記スレッドを移動することで前記負荷が均等になるように前記負荷分散を行うことを特徴とする請求項１から３のいずれか１項に記載のマルチコアシステム。
【請求項５】
前記条件は、前記各マルチコアプロセッサに対してＯＳが管理している前記スレッドを割り当てる割当情報、前記各マルチコアプロセッサの性能を示す計算能力情報、前記共有資源に対するアクセス性能を示すアクセス性能情報、前記共有資源に対する利用方法を示す共有資源利用情報の少なくとも１つであることを特徴とする請求項１または２に記載のマルチコアシステム。
【請求項６】
前記割当情報は、前記各マルチコアプロセッサに割り当てられている前記スレッドの実行時間情報と、データを待っている状態に関する情報と、ローカルなキャッシュと共有キャッシュとのキャッシュミス回数情報とを含むことを特徴とする請求項５項に記載のマルチコアシステム。
【請求項７】
前記共有資源は、共有メモリであり、前記アクセス時の負荷情報は、前記共有メモリに対するメモリアクセス時の負荷情報であり、前記メモリアクセス時の負荷情報は、前記マルチコアプロセッサの各コアが共有している資源である共有キャッシュと、メモリインタフェースとの利用状況に関する情報と、前記共有メモリにアクセスするバスの利用情報とを含むことを特徴とする請求項１に記載のマルチコアシステム。
【請求項８】
複数のコアを有する複数のマルチコアプロセッサと、各マルチコアプロセッサの資源を共有する共有資源との負荷情報を基に負荷分散を行うマルチコアシステムの負荷分散方法であって、
前記各マルチコアプロセッサの前記負荷情報と、前記共有資源に対するアクセス時の前記負荷情報とを取得する負荷情報収集工程と、
前記負荷情報収集工程により取得した前記各マルチコアプロセッサの前記負荷情報と、前記アクセス時の前記負荷情報との条件に基づいて、前記負荷分散を行うか否かの判定を行う負荷分散判定工程と、
前記負荷分散判定工程により、前記負荷分散を行うと判断された際には、負荷を分散する負荷分散工程とを有するマルチコアシステムの負荷分散方法。
【請求項９】
前記負荷分散判定工程は、前記条件の少なくとも１つに基づいて前記負荷の基準値を設け、前記負荷が前記基準値を超えた際に、前記負荷分散を行うと判断することを特徴とする請求項８に記載のマルチコアシステムの負荷分散方法。
【請求項１０】
前記負荷分散判定工程により、前記負荷分散を行うと判断された際には、前記負荷分散手段は、前記負荷分散を実行する際に、前記負荷が均等になるように前記負荷分散を実行することを特徴とする請求項８または９に記載のマルチコアシステムの負荷分散方法。
【請求項１１】
前記負荷分散は、スレッドの移動対象を選択し、選択された対象に前記スレッドを移動することで前記負荷が均等になるように前記負荷分散を行うことを特徴とする請求項８から１０のいずれか１項に記載のマルチコアシステムの負荷分散方法。
【請求項１２】
前記条件は、前記各マルチコアプロセッサに対してＯＳが管理している前記スレッドを割り当てる割当情報、前記各マルチコアプロセッサの性能を示す計算能力情報、前記共有資源に対するアクセス性能を示すアクセス性能情報、前記共有資源に対する利用方法を示す共有資源利用情報の少なくとも１つであることを特徴とする請求項８または９に記載のマルチコアシステムの負荷分散方法。
【請求項１３】
前記割当情報は、前記各マルチコアプロセッサに割り当てられている前記スレッドの実行時間情報と、データを待っている状態に関する情報と、ローカルなキャッシュと共有キャッシュとのキャッシュミス回数情報とを含むことを特徴とする請求項１２項に記載のマルチコアシステムの負荷分散方法。
【請求項１４】
前記共有資源は、共有メモリであり、前記アクセス時の負荷情報は、前記共有メモリに対するメモリアクセス時の負荷情報であり、前記メモリアクセス時の負荷情報は、前記マルチコアプロセッサの各コアプロセッサが共有している資源である共有キャッシュと、メモリインタフェースとの利用状況に関する情報と、前記共有メモリにアクセスするバスの利用情報とを含むことを特徴とする請求項８に記載のマルチコアシステムの負荷分散方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マルチコアプロセッサを複数使用したシステムで実行する並列プログラムの負荷分散に関し、特に、メモリアクセスを含めて効率的な並列実行を行うマルチコアシステムおよびマルチコアシステムの負荷分散方法に関する。
【背景技術】
【０００２】
今日、マルチコアプロセッサを複数接続した共有メモリシステムは、マルチコアプロセッサと共有メモリ、それらを接続するバスまたはネットワークから構成されることが典型的である。
【０００３】
マルチコアプロセッサの場合、一般的な構成では複数のコアがキャッシュを共有し、さらにメモリへアクセスするインタフェースも共有している。
【０００４】
このシステムは共有メモリシステムであるが、マルチコアを構成する各ＣＰＵがメモリへアクセスするバスを共有しているため、従来の共有メモリと比較すると、メモリへのアクセスの偏りによって待ち時間が大きくなる可能性がある。
【０００５】
マルチコアは共有キャッシュのミスが複数同時に発生した場合、プロセッサからメモリへのアクセスは、プロセッサ内部で調停が行われて逐次的なアクセスとなるため、遅延が大きくなることが考えられる。さらに、複数のマルチコアプロセッサが共有メモリにアクセスする際にも、同様の現象が発生することが考えられる。そこで、この現象を防止するための技術が提案されている。
【０００６】
例えば特許文献１では、マルチコアなどを使用した計算機システムの資源割り当て方法が提案されている。この割り当ては、プログラムの静的解析情報から、実行に必要な資源や演算距離テーブルを利用して、新しいプロセスの配置を決定する。
【０００７】
また特許文献２では、並列計算機の負荷分散方法として、プロセッサの負荷と通信の負荷を考慮した割り当てを行う。ここでは、スイッチを用いて接続されている並列計算機の利用状況を調べ、関連するプロセスとの通信に使用するスイッチの負荷が最も低くなるように割り当てる。
【０００８】
さらに特許文献３では、複数のスレッドコンテキストを保持するマルチスレッディングプロセッサにおいて、効率的に実行可能なスレッドを組み合わせて実行する。その手段は、スレッドの動作状態を判定し、それを基準にスレッド数やその組み合わせを決定する。スレッドの動作状態は、フェッチストール回数、メモリアクセスレイテンシ、キャッシュミス回数、ＩＰＣカウンタのいずれか１つを利用する。
【特許文献１】特開２００６−２４１８０号公報
【特許文献２】特開平９−３４８４７号公報
【特許文献３】ＷＯ２００４／０４４７４５号公報
【発明の開示】
【発明が解決しようとする課題】
【０００９】
しかしながら、従来の負荷分散では、コアの負荷状態を利用して負荷分散を行っている。マルチコアプロセッサの場合、複数のコアがメモリインタフェースを共有し、さらに共有メモリを全てのプロセッサが共有している。このため、演算に必要なデータアクセスにおける競合が発生する可能性が高く、メモリアクセスの遅延が効率的な実行を阻害し、性能低下の原因となることが考えられる。
【００１０】
また、マルチコアプロセッサの場合、スレッドが複数同時に実行しているので、共有資源でアクセス競合が発生する可能性があり、これが実行性能の低下要因となる可能性がある。そのため、共有資源である共有キャッシュやメモリアクセスに関する情報が必要となる。
【００１１】
また、メモリアクセスの競合は、並列実行の単位であるスレッドを各コアへどのように割り当てるかにもよるため、静的にはわからない。
【００１２】
そこで本発明は、マルチコアプロセッサを複数使用したシステムで実行する並列プログラムの負荷分散において、ＣＰＵの負荷だけでなく、キャッシュやメモリのアクセス時の負荷情報を利用して、メモリアクセス時の負荷を負荷分散の対象にすることで、メモリアクセスを含めて効率的な並列実行を行う負荷分散を行うマルチコアシステムおよびマルチコアシステムの負荷分散方法を提供することを目的とする。
【課題を解決するための手段】
【００１３】
上記の目的を達成するため、請求項１に記載の発明は、複数のコアプロセッサを有する複数のマルチコアプロセッサと、各マルチコアプロセッサの資源を共有する共有資源とを有するマルチコアシステムであって、前記各マルチコアプロセッサの負荷情報と、前記共有資源に対するアクセス時の負荷情報とを取得する負荷情報収集手段と、前記負荷情報収集手段により取得した前記各マルチコアプロセッサの負荷情報と、前記アクセス時の負荷情報との条件に基づいて、負荷分散を行うか否かの判定を行う負荷分散判定手段と、前記負荷分散判定手段により、負荷分散を行うと判断された際には、負荷を分散する負荷分散手段とを有するマルチコアシステムであることを特徴とする。
【００１４】
請求項２に記載の発明は、請求項１に記載のマルチコアシステムにおいて、前記負荷分散判定手段は、前記条件の少なくとも１つに基づいて前記負荷の基準値を設け、前記負荷が前記基準値を超えた際に、負荷分散を行うと判断することを特徴とする。
【００１５】
請求項３に記載の発明は、請求項１または２に記載のマルチコアシステムにおいて、前記負荷分散判定手段により、前記負荷分散を行うと判断された際には、前記負荷分散手段は、前記負荷分散を実行する際に、前記負荷が均等になるように前記負荷分散を実行することを特徴とする。
【００１６】
請求項４に記載の発明は、請求項１から３のいずれか１に記載のマルチコアシステムにおいて、前記負荷分散は、スレッドの移動対象を選択し、選択された対象に前記スレッドを移動することで前記負荷が均等になるように前記負荷分散を行うことを特徴とする。
【００１７】
請求項５に記載の発明は、請求項１または２に記載のマルチコアシステムにおいて、前記条件は、前記各マルチコアプロセッサに対してＯＳが管理している前記スレッドを割り当てる割当情報、前記各マルチコアプロセッサの性能を示す計算能力情報、前記共有資源に対するアクセス性能を示すアクセス性能情報、前記共有資源に対する利用方法を示す共有資源利用情報の少なくとも１つであることを特徴とする。
【００１８】
請求項６に記載の発明は、請求項５に記載のマルチコアシステムにおいて、前記割当情報は、前記各マルチコアプロセッサに割り当てられている前記スレッドの実行時間情報と、データを待っている状態に関する情報と、ローカルなキャッシュと共有キャッシュとのキャッシュミス回数情報とを含むことを特徴とする。
【００１９】
請求項７に記載の発明は、請求項１に記載のマルチコアシステムにおいて、前記共有資源は、共有メモリであり、前記アクセス時の負荷情報は、前記共有メモリに対するメモリアクセス時の負荷情報であり、前記メモリアクセス時の負荷情報は、前記マルチコアプロセッサの各コアプロセッサが共有している資源である共有キャッシュと、メモリインタフェースとの利用状況に関する情報と、前記共有メモリにアクセスするバスの利用情報とを含むことを特徴とする。
【００２０】
請求項８に記載の発明は、複数のコアプロセッサを有する複数のマルチコアプロセッサと、各マルチコアプロセッサの資源を共有する共有資源との負荷情報を基に負荷分散を行うマルチコアシステムの負荷分散方法であって、前記各マルチコアプロセッサの前記負荷情報と、前記共有資源に対するアクセス時の前記負荷情報とを取得する負荷情報収集工程と、前記負荷情報収集工程により取得した前記各マルチコアプロセッサの前記負荷情報と、前記アクセス時の前記負荷情報との条件に基づいて、前記負荷分散を行うか否かの判定を行う負荷分散判定工程と、前記負荷分散判定工程により、前記負荷分散を行うと判断された際には、負荷を分散する負荷分散工程とを有するマルチコアシステムの負荷分散方法であることを特徴とする。
【００２１】
請求項９に記載の発明は、請求項８に記載のマルチコアシステムの負荷分散方法において、前記負荷分散判定工程は、前記条件の少なくとも１つに基づいて前記負荷の基準値を設け、前記負荷が前記基準値を超えた際に、前記負荷分散を行うと判断することを特徴とする。
【００２２】
請求項１０に記載の発明は、請求項８または９に記載のマルチコアシステムの負荷分散方法において、前記負荷分散判定工程により、前記負荷分散を行うと判断された際には、前記負荷分散手段は、前記負荷分散を実行する際に、前記負荷が均等になるように前記負荷分散を実行することを特徴とする。
【００２３】
請求項１１に記載の発明は、請求項８から１０のいずれか１項に記載のマルチコアシステムの負荷分散方法において、前記負荷分散は、スレッドの移動対象を選択し、選択された対象に前記スレッドを移動することで前記負荷が均等になるように前記負荷分散を行うことを特徴とする。
【００２４】
請求項１２に記載の発明は、請求項８または９に記載のマルチコアシステムの負荷分散方法において、前記条件は、前記各マルチコアプロセッサに対してＯＳが管理しているスレッドを割り当てる割当情報、前記各マルチコアプロセッサの性能を示す計算能力情報、前記共有資源に対するアクセス性能を示すアクセス性能情報、前記共有資源に対する利用方法を示す共有資源利用情報の少なくとも１つであることを特徴とする。
【００２５】
請求項１３に記載の発明は、請求項１２に記載のマルチコアシステムの負荷分散方法において、前記割当情報は、前記各マルチコアプロセッサに割り当てられている前記スレッドの実行時間情報と、データを待っている状態に関する情報と、ローカルなキャッシュと共有キャッシュとのキャッシュミス回数情報とを含むことを特徴とする。
【００２６】
請求項１４に記載の発明は、請求項８に記載のマルチコアシステムの負荷分散方法において、前記共有資源は、共有メモリであり、前記アクセス時の負荷情報は、前記共有メモリに対するメモリアクセス時の負荷情報であり、前記メモリアクセス時の負荷情報は、前記マルチコアプロセッサの各コアプロセッサが共有している資源である共有キャッシュと、メモリインタフェースとの利用状況に関する情報と、前記共有メモリにアクセスするバスの利用情報とを含むことを特徴とする。
【発明の効果】
【００２７】
本発明によれば、負荷分散の基準として、コアの負荷情報に加えて、メモリアクセスの負荷情報を利用する。そして、コアの負荷が高い場合だけでなく、メモリアクセスの負荷が高く、コアの実行で待ち時間が長くなっている場合も負荷分散の対象とする。また、負荷分散の移動先を選ぶ場合も、同様の情報を利用する。これにより、システム全体として効率的な実行が可能な負荷分散を実現するマルチコアシステムおよびマルチコアシステムの負荷分散方法を提供することを可能とする。
【発明を実施するための最良の形態】
【００２８】
次に、本発明を実施するための好適な実施の形態について説明する。本実施形態のマルチコアシステムの動作について図１、図２を用いて詳細に説明する。図１は、本実施形態のマルチコアシステムで構成される共有メモリシステムの典型的な例をブロック図で示した一例である。図２は、本実施形態におけるマルチコアの構成をブロック図で示した一例である。
【００２９】
図１はマルチコアで構成された共有メモリシステムの典型的な構成の一例である。このシステムは、マルチコア１〜マルチコア３が、共有メモリ５に対して、接続網４を用いて接続される。マルチコアプロセッサは、典型的には図２に示す構造をとる。図２のマルチコア１０は、内部にローカルキャッシュを含むことができる複数のＣＰＵであるコア１１〜１３を含み、それが接続網１６を介して共有キャッシュ１４とメモリインタフェース１５に接続される。
【００３０】
図２に示すマルチコアプロセッサを要素として構成された図１の共有メモリシステムは、その性能を最大限に利用するために、プログラムを並列化して並列実行が行われる。共有メモリにおける並列実行では、一般にループの繰り返し間に依存関係のないループを並列化して、スレッドに分割して並列に実行される。
【００３１】
並列化された各スレッドは、ＯＳによってマルチコア１〜マルチコア３の各コア１１、〜コア１３に対して割り当てられる。並列プログラムの各スレッドの負荷は、一般に割り当て時点では不明である。このため、ＯＳはスレッドを空き状態のコアに適宜割り当てるため、スレッドの割り当ては実行時の状況に依存される。
【００３２】
この後、各スレッドは、それぞれプログラムの一部を実行する。その負荷は、担当するプログラムの処理に依存されるため、同じプロセッサ上のコアに割り当てられたスレッドの組み合わせにより、共有キャッシュやメモリアクセスインタフェースの負荷が大きく変わることもある。このような実行時の負荷のばらつきを平準化するため、負荷分散機能は、スレッドの移動を行う。
【００３３】
プロセッサの負荷情報では、負荷の高さだけでなく、各コアでのキャッシュミスとそのために発生したプロセッサの待ち時間を利用する。また、マルチコアプロセッサのコアが共有しているメモリインタフェースの負荷情報、共有メモリに対するアクセスの負荷情報を利用し、メモリアクセスがシステム性能の限界まで使用されているかを確認する。これらの情報を用いて、負荷分散を必要とする偏りが存在するか確認する。負荷の偏りがあった場合、負荷分散の移動対象となるスレッドを選定する。
次に、移動先を選ぶが、ここでもコアの負荷とメモリアクセスの負荷情報を利用する。その後、スレッドが割り当てられていないコアやメモリを含めた負荷の低いコアを選び、スレッドの移動(マイグレーション)を行う。この結果、各マルチコアからのメモリアクセスも均等化され、待ち時間が少ない、効率的実行が可能な配置が実現される。
【００３４】
（実施形態１）
マルチコアシステム上での並列プログラムの実行では、一定時間間隔で負荷分散が行われる。この負荷分散は図３に示す手順で行う。図３は、本実施形態のマルチシステムにおける負荷分散方法をフローチャート図で示す。
【００３５】
まず最初に、負荷分散の処理で利用する各種の情報を取得する（ステップＳ１０１）。そして、この情報を用いて負荷の偏りを調べ、偏りがある場合に負荷を分散するためにスレッドの移動を行う。この情報には、コア１１〜コア１３の負荷情報、キャッシュミス回数やメモリアクセスに関する情報などがある。
【００３６】
次に、各コアの負荷情報として、実際に計算を行っている時間や計算に必要なデータを待っている時間を調べる。これにより、通常の負荷分散で利用するＣＰＵの負荷の状態と、各スレッドを実行している時間で実際に処理をしている時間とデータ待ちの時間がわかる。次に、プロセッサの負荷情報として、複数のコアが利用している共有キャッシュおよびメモリインタフェースの情報を調べる（ステップＳ１０２）。これは、プロセッサからメモリにどの程度アクセスしているか、またプロセッサからメモリへのアクセスが、ハードの性能に対してどの程度行われているかを確認する。そして、システムの負荷情報として、共有メモリに関する負荷情報を取得する（ステップＳ１０３）。これはシステム全体として、共有メモリに対するアクセスがどの程度行われているかを明らかにする。
【００３７】
以上の情報と、ＯＳが管理するスレッドの割り当てに関する情報とを利用して、まずシステム全体で負荷の偏りがどの程度であるかを調べる（ステップＳ１０４）。基本的に各コアの負荷に大きな偏りがある場合、およびプロセッサからメモリへのアクセスがその性能の限界近くまで行われ、プロセッサ内のコアで待ち時間が大きくなっている場合（ステップＳ１０４／ＹＥＳ）、負荷分散を行う。上記以外の場合（ステップＳ１０４／ＮＯ）、処理を終了する。負荷分散を行う場合、負荷を均等化するため、移動対象となるスレッドを選び、その移動先のコアを決定する（ステップＳ１０５）。そして、選んだスレッドを新しいコアに移動して実行を再開する（ステップＳ１０６）。これにより、コアにおける計算負荷の均等化に加えて、プロセッサからメモリへのアクセスを効率的に行う割り当てを実現する。
【００３８】
移動対象のスレッドと移動先のコアは、収集した情報とシステムの性能情報を利用して決定される。移動スレッド候補を選ぶ一例として、メモリアクセスに大きな差はないが、コアの負荷が大きく異なり、かつ複数のスレッドが割り当てられている場合がある。また、メモリアクセス時の負荷が特定のプロセッサに集中して性能の上限近くまでになっている場合、コアの負荷に関わらず、そのプロセッサのコアに割り当てられているスレッドが移動対象となる。さらに、少数のコアで高い負荷が発生しており、それ以外の全てのコアで負荷があまり高くない場合、負荷を均等にするために、負荷の高いスレッドのみをプロセッサに残して、他のスレッドを全て他のプロセッサに移動することも考えられる。
【００３９】
スレッドの移動先のコアは、負荷を均等にする可能性の高いことが基準になる。しかし、スレッド移動に伴う性能への影響を事前に知ることはできないため、移動対象を選ぶのに利用した情報で移動した効果を見積もり、移動先を決定する。この時、各コアの負荷だけでなく、メモリアクセスの負荷を均等にすることも考慮する。一例として、スレッドの割り当てられていないコアが複数ある場合、プロセッサからメモリへのアクセスの負荷が低いプロセッサのコアを選ぶ。これにより、コアの負荷だけでなく、プロセッサからのメモリアクセスの負荷を考慮したスレッド配置が実現される。
【００４０】
本実施形態によれば、マルチコアシステムにおける並列プログラムのメモリアクセスを含めた効率的並列実行を行うスレッド配置を、実行時に実現することが可能になる。その理由は、負荷分散を行う際にメモリアクセスの負荷情報を参照し、従来にも行われているコアの負荷情報を基に負荷分散を行う技術とあわせて負荷分散の判定を行うことで、マルチコアシステムの負荷を分散しているためである。
【００４１】
（実施形態２）
具体例として、４つのコアを持つマルチコアプロセッサが４つと共有メモリを、バスで接続した図１と同様の構成のシステムについて説明する。このシステムで並列プログラムを実行させる場合、一定時間を経過すると以下に述べる手順で負荷分散が行われる。
【００４２】
提案手法では、コアに割り当てられているスレッドの情報として、スレッドの実行時間、そのうちデータを待っている状態に関する情報、ローカルなキャッシュと共有キャッシュのそれぞれに関して、キャッシュミス回数などの情報を取得する。次に、メモリアクセスに関する情報として、プロセッサに含まれる複数のコアが共有している資源である、共有キャッシュとメモリインタフェースの利用状況に関する情報、そしてシステムの共有メモリにアクセスするバスの利用情報を取得する。これらの情報は、実行性能の解析などを目的として、ツールやＯＳが利用できる形でシステムやプロセッサが提供している機能を利用して取得する。
【００４３】
ここで、スレッドの割り当てがどうなっているかは、プログラムおよびスレッドの実行開始時点の状況により様々な可能性が存在する。例えば、並列プログラムでスレッドが６個生成され実行しており、各プロセッサのコアへ重複なく４／２／０／０と割り当てられているとする。この状態は各コアにスレッドが１つ割り当てられているため、コアの負荷のみを利用した負荷分散ではスレッドの移動は発生しない。
【００４４】
しかし、メモリアクセスを見た場合は、二つのプロセッサに負荷が集中しているため、メモリアクセスの負荷を判定基準に利用している提案手法では、この場合も負荷分散の対象にすることが可能となる。
【００４５】
負荷分散の判定基準は、システムの性能と管理方針で様々な設定が可能である。例えば、プロセッサに対してできるだけ均等にスレッドを割り当てることや、共有キャッシュを有効に活用するため、メモリ負荷の上限までは同じプロセッサのコアを割り当てることなどが考えられる。
【００４６】
負荷に偏りがある場合でも、メモリアクセス性能からみて負荷が低く、実行性能を低下させる要因となっていない場合には、スレッド移動のオーバヘッドがあるため、通常負荷分散は行わない。
【００４７】
前記の割り当てにおいて、共有キャッシュのミスが多く発生し、さらに各スレッドのデータ待ち時間も大きい場合、メモリへのアクセスが性能低下の原因となっている可能性がある。この場合はメモリアクセス情報から、メモリへのアクセスがシステム性能と比べてどの程度であるかを確認する。そして、システム性能と同じレベルのアクセスがあり、かつスレッドのデータ待ち時間がメモリ競合がない場合と比べて著しく大きい場合、メモリアクセスがネックとなり性能が低下していると考えられる。したがって、このような場合はスレッドをメモリ負荷の低いプロセッサに移動することで、競合が解消され、性能向上が期待できる。そこで次に、負荷の偏りが確認されたプロセッサに割り当てられているスレッドについて、負荷分散で移動の対象となるスレッドを決定する。スレッドの実行情報から、共有キャッシュのミスヒット回数やデータ待ち時間などを利用し、メモリへのアクセス頻度や、競合のない場合の待ち時間と比べてどの程度待ち時間が長いのか、などメモリによる実行への影響を調べる。
【００４８】
この結果とシステムの負荷分散の判定基準から、移動対象のスレッドを決定する。判定基準は、システムの性能や運用方針で決められる。ここでは、メモリアクセスの負荷により、最も影響を受けているスレッドが選ばれたとする。
【００４９】
移動対象のスレッドがメモリアクセスの負荷が原因で決定されたので、移動先もメモリアクセス負荷を基準に決定する。ここで、プロセッサからメモリへのアクセス情報から、二つのプロセッサからメモリアクセスがないことがわかる。また、スレッドの割り当て情報からも、二つのプロセッサとそこに含まれるコアにはスレッドが割り当てられていないことがわかる。そこで、メモリアクセスの負荷を分散するため、この二つのプロセッサの任意の一つを選び、さらにそこに含まれるコアの任意の一つを移動先とする。そして最後に、選択したスレッドを移動先のコアに移動した後、実行を再開する。
【００５０】
（実施形態３）
図４を用いて本実施形態の負荷分散管理手段について説明する。図４は、本実施形態のマルチシステムの負荷分散管理手段を示すブロック図である。
【００５１】
図４に示すように、本手法は、プログラム実行中に一定間隔で、負荷分散の管理手段２１が起動され、負荷情報収集手段２２がハードウェアの各コアから負荷情報を取得し、コアの負荷情報テーブル２３に記録し、さらに、共有メモリなど共有資源のアクセス情報を取得し共有資源の負荷情報テーブル２４に記録する。各コアの負荷情報２３には、ＯＳが管理しているスレッドの割り当て情報を含まれる。このようにして集めた負荷情報２３と２４を利用して、負荷分散判定手段２５は、システムにおける負荷の偏りを判定する。この判定の基準は、各コアの計算能力やメモリアクセス性能などのハードウェア性能、および利用方法などに依存して決定される、各システムで前もって定められた基準である。負荷の状態が判定基準を超える場合、負荷分散が必要であると判断して、移動対象選択手段２６で移動対象スレッドとその移動先を選択する。最後に、移動対象スレッドとその移動先はスレッド移動手段２７に通知され、実際のスレッド移動が行われる。
【００５２】
本実施形態によれば、負荷分散を実行する際に、各コアの負荷情報だけでなく、メモリアクセス時の負荷情報も参照することで、マルチコアシステムの並列プログラムにおけるメモリアクセスを含めたスレッド配置を効率的に行うことが可能になる。
【００５３】
また本実施形態のように、マルチコアプロセッサの場合には、複数のスレッドが共有資源を利用して同時に実行するため、負荷が高い場合、特定資源の物理的な上限に達することによって、実行性能が低下することがある。この場合は、その資源に対して最も負荷をかけ、スレッド実行にも影響の大きいスレッドを選んで移動対象とする。実際には、システム全体の負荷の状態を判定し、対象資源の負荷が低いマルチコアがある場合は、負荷の高いスレッドをそのマルチコアに移動することで、残りのスレッドの実行も効率的に実行を継続することができる。
さらに本実施形態によれば、負荷が高く、待ち時間が発生している時に共有資源の利用で物理的上限に達していない場合には、スレッドの移動が必要ないものと判断することができる。
【産業上の利用可能性】
【００５４】
本実施形態のマルチコアシステム、マルチコアシステムの負荷分散を利用すれば、コンピュータプログラムの高速化に適用できる。
【図面の簡単な説明】
【００５５】
【図１】マルチコアで構成される共有メモリシステムの典型的な一例を示すブロック図である。
【図２】本実施形態におけるマルチコアの構成の一例を示すブロック図である。
【図３】本実施形態のマルチシステムにおける負荷分散方法を示すフローチャート図である。
【図４】本実施形態のマルチシステムの負荷分散管理手段を示すブロック図である。
【符号の説明】
【００５６】
１、２、３    マルチコア
４、１６    接続網
５    共有メモリ
１０    マルチコア
１１、１２、１３    コア
１４    共有キャッシュ
１５    メモリＩ／Ｆ
２１    負荷分散管理手段
２２    負荷情報収集手段
２３    コアの負荷情報
２４    共有資源負荷情報
２５    負荷分散判定手段
２６    移動対象選択手段
２７    スレッド移動手段
【図１】
2008191949.tif 000003
【図２】
2008191949.tif 000004
【図３】
2008191949.tif 000005
【図４】
2008191949.tif 000006