JP5397546B2 - マルチコアプロセッサシステム、制御プログラム、および制御方法 - Google Patents

マルチコアプロセッサシステム、制御プログラム、および制御方法 Download PDF

Info

Publication number
JP5397546B2
JP5397546B2 JP2012526236A JP2012526236A JP5397546B2 JP 5397546 B2 JP5397546 B2 JP 5397546B2 JP 2012526236 A JP2012526236 A JP 2012526236A JP 2012526236 A JP2012526236 A JP 2012526236A JP 5397546 B2 JP5397546 B2 JP 5397546B2
Authority
JP
Japan
Prior art keywords
access
cpu
task
core
core processor
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2012526236A
Other languages
English (en)
Other versions
JPWO2012014287A1 (ja
Inventor
康志 栗原
浩一郎 山下
宏真 山内
貴久 鈴木
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Publication of JPWO2012014287A1 publication Critical patent/JPWO2012014287A1/ja
Application granted granted Critical
Publication of JP5397546B2 publication Critical patent/JP5397546B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • G06F9/526Mutual exclusion algorithms

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Computing Systems (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Multi Processors (AREA)

Description

本発明は、共有資源へのアクセスを制御するマルチコアプロセッサシステム、制御プログラム、および制御方法に関する。
従来該実行終了時に大量のメモリアクセスを行うタスクが知られている。たとえば、レンダリングの処理に関するタスクが挙げられる(たとえば、下記特許文献1を参照。)。レンダリング処理とは、たとえば、3次元物体に対してカメラや光源の位置や方向を指定し、光の物理的な性質に基づいて描画を行うことである。
マルチコアプロセッサで共有する共有メモリを有するマルチコアプロセッサシステムにおいては、たとえば、レンダリング処理を複数のタスクに分割して分散処理を行う。また、該マルチコアプロセッサシステムでは、該各タスクの処理終了時に各CPU(Central Processing Unit)のキャッシュに格納している演算結果を共有メモリに書き戻す処理が必要になる。
特開2008−130091号公報
しかしながら、マルチコアプロセッサシステムでは、上述したレンダリング処理の複数のタスクが負荷分散を考慮してタスク量が平均化されるように各CPUに割り当てられる。そのため、各CPUの処理が同時に終了することになるため、該タスクの処理終了時に共有メモリへのアクセスが複数のCPUで競合する。
共有メモリへのアクセスが複数のCPUで同時に発生した場合、どのCPUからのアクセスを許可するかを調停回路が調停する。調停回路は、たとえば、各CPUに順番にアクセス権を与えるラウンドロビン方式を用いて調停している。調停回路が共有メモリへのアクセスを調停することにより、該共有メモリのアクセスが競合した際のメモリアクセス性能はピーク時の30[%]になることもあるため、各CPUの実行性能が低下する問題点があった。メモリアクセス性能とは、各CPUが共有メモリへのアクセスにかかるアクセス時間である。
本発明は、上述した従来技術による問題点を解消するため、共有メモリへのアクセス時間を減少させることで、CPUの実行性能を向上させることができるマルチコアプロセッサシステム、制御プログラム、および制御方法を提供することを目的とする。
本発明の一の観点によれば、マルチコアプロセッサのうちの一のコアが前記マルチコアプロセッサで共有する共有資源へアクセスしているときに、前記マルチコアプロセッサのうちの前記一のコアを除く他のコアから前記共有資源へのアクセスの前処理を検出し、前記前処理が検出された場合、前記他のコアで実行中のタスクを他のタスクに切り替えるマルチコアプロセッサシステム、制御プログラム、および制御方法が提供される。
本発明の他の観点によれば、マルチコアプロセッサのうちの一のコアが前記マルチコアプロセッサで共有する共有資源へアクセスしているときに、前記マルチコアプロセッサのうちの前記一のコアを除く他のコアから前記共有資源へのアクセスの前処理を検出し、前記前処理が検出された場合、前記他のコアで実行中のタスクをストールさせるマルチコアプロセッサシステム、制御プログラム、および制御方法が提供される。
本マルチコアプロセッサシステム、制御プログラム、および制御方法によれば、共有メモリへのアクセス時間を減少させることで、CPUの実行性能を向上させることができるという効果を奏する。
本発明の一の例を示す説明図である。 本発明の他の一例を示す説明図である。 マルチコアプロセッサシステムのハードウェア例を示すブロック図である。 属性テーブル400の一例を示す説明図である。 大量アクセス開始情報500の一例を示す説明図である。 マルチコアプロセッサシステム300の機能ブロック図である。 タスク2がCPU#0にディスパッチされる例を示す説明図である。 タスク5がCPU#1にディスパッチされる例を示す説明図である。 タスク7がCPU#2にディスパッチされる例を示す説明図である。 CPU#0が大量アクセスを開始する例を示す説明図である。 CPU#1での大量アクセスの検出例を示す説明図である。 CPU#1でタスクディスパッチを行う例を示す説明図である。 スケジューラ351による制御処理手順の一例を示すフローチャート(その1)である。 スケジューラ351による制御処理手順の一例を示すフローチャート(その2)である。 属性チェンジャー371による制御処理手順の一例を示すフローチャートである。
以下に添付図面を参照して、本発明にかかるマルチコアプロセッサシステム、制御プログラム、および制御方法の好適な実施の形態を詳細に説明する。
図1は、本発明の一の例を示す説明図である。一のCPUではタスクAが実行中であり、他のCPUではタスクBが実行中である。他のCPUのレディーキュー121にはタスクCが積まれている。レディーキュー121は、周知のように他のCPUに割り当てられたタスクのうち、実行可能状態であるタスクを管理するために該タスクのコンテキスト情報を保持する。他のCPUは、レディーキュー121に登録されているタスクのコンテキスト情報を取り出すことで、該取り出したタスクを実行することができる。コンテキスト情報はプログラムの内部状態やプログラムがメモリ上のどこに配置されたかを示す情報である。
テーブル101はタスクIDの項目102と命令アドレスの項目103とを有している。テーブル101では、タスクごとに一のCPUと他のCPUとで共有する共有メモリへのアクセスを行う命令アドレスが保持されている。ここでは、一のCPUと他のCPUとのマルチコアプロセッサで共有する共有資源の一例として、共有メモリを挙げる。
また、アクセスフラグはいずれのCPUが共有メモリへ先にアクセスしたかを示す情報である。たとえば、アクセスフラグの値が0の場合、一のCPUが共有メモリへアクセスしていることを示す。アクセスフラグの値が0であることを、アクセスフラグの値が一のCPUを示す値と称する。たとえば、アクセスフラグの値が1の場合、他のCPUが共有メモリへアクセスしていることを示す。アクセスフラグの値が1であることを、アクセスフラグの値が他のCPUを示す値と称する。たとえば、アクセスフラグの値が−の場合、一のCPUと他のCPUとのいずれのCPUも共有メモリへアクセスしていないことを示す。
まず、一のCPUが、たとえば、テーブル101に保持されているタスクAが共有メモリへのアクセスを行う命令アドレスと一のCPUのプログラムカウンタとの一致を該アクセスの前処理として検出する。そして、一のCPUがアクセスフラグを確認することにより、アクセスフラグの値が−であるか否かを判断する。アクセスフラグの値は−であるため、一のCPUがアクセスフラグを0に設定する。
つぎに、他のCPUが、たとえば、テーブル101に保持されているタスクBが共有メモリへのアクセスを行う命令アドレスと他のCPUのプログラムカウンタとの一致を該アクセスの前処理として検出する。そして、他のCPUがアクセスフラグを確認することにより、アクセスフラグの値が−であるか否かを判断する。アクセスフラグの値は0であるため、他のCPUが共有メモリへ一のCPUがアクセス中であると判断し、他のCPUがタスクBからレディーキュー121内のタスクCへ切り替える。
そして、タスクAの実行が終了すると、一のCPUがアクセスフラグの値を−に設定する。つぎに、タスクCの実行が終了すると、他のCPUがレディーキュー121からタスクBを取り出して実行する。そして、他のCPUが、タスクBのプログラムカウンタとテーブル101に保持されているタスクBが共有メモリへのアクセスを行う命令アドレスとの一致を該アクセスの前処理として検出する。
そして、前処理が検出されると、他のCPUがアクセスフラグを確認することにより、アクセスフラグの値が−であるか否かを判断する。さらに、アクセスフラグの値が−であるため、他のCPUがアクセスフラグを1に設定し、タスクBに共有メモリへのアクセスを開始させる。
図2は、本発明の他の一例を示す説明図である。まず、一のCPUが、テーブル101に保持されているタスクAが共有メモリへのアクセスを行う命令アドレスと一のCPUのプログラムカウンタとの一致を該アクセスの前処理として検出する。そして、一のCPUがアクセスフラグを確認し、アクセスフラグの値が−であるか否かを判断する。アクセスフラグの値が−であるため、一のCPUが、アクセスフラグを0に設定する。
つぎに、他のCPUが、テーブル101に保持されているタスクBが共有メモリへのアクセスを行う命令アドレスと他のCPUのプログラムカウンタとの一致を該アクセスの前処理として検出する。そして、他のCPUがアクセスフラグを確認することにより、アクセスフラグの値が−であるか否かを判断する。アクセスフラグの値は0であるため、他のCPUが共有メモリへ一のCPUがアクセス中であると判断し、タスクBをストールさせる。
そして、タスクAの実行が終了すると、一のCPUがアクセスフラグの値を−に設定する。図示しないが、たとえば、他のCPUが、該タスクAの実行の終了を検出し、タスクBを復帰させてもよい。または、たとえば、他のCPUが、あらたに他のタスクが割り当てられた場合に、タスクBを復帰させて、レディーキューに登録させてもよい。
また、図1および図2で示したテーブル101ではタスクごとに1つの命令アドレスのみを保持しているため、該命令アドレスからタスクが終了するまでの区間のみに着目している。すなわち、ここでは、該命令アドレスで実行される処理からタスクが終了するまでを1つのアクセスとしている。これに限らず、たとえば、タスクAの共有メモリへの各アクセスの開始命令アドレスから該アクセスの終了命令アドレスまでをテーブル101に登録してもよい。すなわち、該開始命令アドレスで実行される処理から該終了命令アドレスで実行される処理までが1つのアクセスとする。そして、一のCPUで実行するタスクAの共有メモリへのアクセスごとに他のCPUで実行するタスクBの共有メモリへのアクセスが競合しないように、一のCPUがアクセスフラグを立ててもよい。
本実施の形態では、アクセス量が所定量以上であるアクセスが複数のCPUで競合しない例を示す。アクセス量が所定量以上であるアクセスとは、アクセス密度(単位時間あたりのメモリアクセス回数)が一定の閾値を超えるアクセスを示している。アプリケーションの設計者が、アクセス密度を変化させて、アクセスが競合する場合のアクセス時間とアクセスが競合しない場合のアクセス時間とを測定する。
そして、アクセスが競合しない場合(タスクが順次メモリへアクセス)のアクセス時間が、アクセスが競合する場合のアクセス時間よりも小さくなるアクセス量を所定アクセス量(閾値)とする。また、各タスクの所定アクセス量以上となるアクセスについては測定済であるとして説明する。ここで、タスク処理中でメモリへのアクセス密度が所定アクセス量を超えるアクセスを大量アクセスと称する。
ここで、アクセス競合がある場合とアクセス競合が無い場合とでアクセス時間を比較する。アクセス競合時のメモリアクセス性能はアクセス競合が無い場合と比較して約30[%]に低下すると言われている。上述のようにアクセスが複数のCPUで競合すると、調停回路がアクセス権を調停する。よって、アクセス競合がある場合、調停時間やアクセス権の切り替えなどによって、アクセス時間が長くなる。
アクセス競合が無い場合の単位時間当たりのアクセスデータサイズをXとする。アクセス競合時のメモリアクセス性能はアクセス競合がない場合と比較して約30%に低下すると言われていることを考慮すると、アクセス競合時の単位時間当たりのアクセスデータサイズは0.3Xとなる。一のCPUと他のCPUとのそれぞれのCPUがYサイズのデータアクセスに要する時間は下記となる。
・アクセス競合が無い場合(順次メモリアクセスを行う場合):時間S=Y/X+Y/X=2Y/X
・アクセス競合がある場合(同時にメモリアクセスを行う場合):時間P=Y/0.3X=3.3Y/X
すなわち、アクセス競合がある場合のアクセス時間はアクセス競合が無い場合のアクセス時間と比較して1.65倍(P/S)である。
(マルチコアプロセッサシステムのハードウェア)
図3は、マルチコアプロセッサシステムのハードウェア例を示すブロック図である。マルチコアプロセッサシステム300は、CPU#0〜CPU#2と、共有メモリ303と、スヌープコントローラ301と、を有している。
ここで、CPU#0〜CPU#2では、たとえば、それぞれコアとレジスタとキャッシュとを有している。CPU#0のレジスタ311はPC(Program Counter)331を有し、CPU#1のレジスタ312はPC332を有し、CPU#2のレジスタ313はPC333を有している。
CPU#0はマスタOSであるOS341を実行し、マルチコアプロセッサシステム300の全体の制御を司る。OS341は、ソフトウェアの各プロセスをどのCPUに割り当てるかを制御し、かつCPU#0でのタスクの切り替えを制御する制御プログラムであるスケジューラ351を有している。レディーキュー361は、CPU#0に割り当てられタスクのうち、実行待ち状態であるタスクのコンテキスト情報を保持する。
CPU#1とCPU#2とは、それぞれスレーブOSであるOS342とOS343とを実行している。OS342は、CPU#1に割り当てられたタスクの切り替えを制御する制御プログラムであるスケジューラ352を有している。レディーキュー362は、CPU#1に割り当てられたタスクのうち、実行待ち状態であるタスクのコンテキスト情報を保持する。OS343は、CPU#2に割り当てられたタスクの切り替えを制御する制御プログラムであるスケジューラ353を有している。レディーキュー363は、CPU#2に割り当てられタスクのうち、実行待ち状態であるタスクのコンテキスト情報を保持する。
また、CPU#0はキャッシュ321を有し、CPU#1はキャッシュ322を有し、CPU#2はキャッシュ323を有している。各キャッシュはスヌープコントローラ301を介して接続されている。各CPUのキャッシュが該キャッシュ自身および他のコアのキャッシュのラインの状態を監視し、他のコアのキャッシュと更新状態の情報を交換することにより、アクセスフラグのような共有データの更新を検出する。各キャッシュは更新を検出すると、スヌープコントローラ301を介して、未更新のデータをパージし、更新されたデータをキャッシュする。
各キャッシュが有しているアクセスフラグは各キャッシュで共有の共有データであり、アクセスフラグはいずれのCPUが共有メモリ303へ先にアクセスしたかを示す情報である。たとえば、アクセスフラグが0の場合、CPU#0が共有メモリ303へ大量アクセスしていることを示す。アクセスフラグの値が0であることを、アクセスフラグの値がCPU#0を示す値と称する。たとえば、アクセスフラグが1の場合、CPU#1が共有メモリ303へ大量アクセスしていることを示す。アクセスフラグの値が1であることを、アクセスフラグの値がCPU#1を示す値と称する。アクセスフラグが2の場合、CPU#2が共有メモリ303へ大量アクセスしていることを示す。アクセスフラグの値が2であることを、アクセスフラグの値がCPU#2を示す値と称する。アクセスフラグの値が−の場合、いずれのCPUも共有メモリ303へアクセスしていないことを示す。
また、各CPUと共有メモリ303とは、バス302を介して接続されている。共有メモリ303は、たとえば、マルチコアプロセッサに共有されるメモリである。共有メモリ303は、たとえば、属性テーブル400と、タスクテーブル381と、大量アクセス開始情報500と、ブートプログラムと、アプリケーションソフトウェアと、OS341〜OS343と、を有している。
共有メモリ303は、具体的には、たとえば、ROM(Read Only Memory)と、RAM(Random Access Memory)と、フラッシュROMなどを有している。たとえば、フラッシュROMがブートプログラムを記憶し、ROMがアプリケーションソフトウェアを記憶し、RAMがCPU#0〜CPU#2のワークエリアとして使用される。共有メモリ303に記憶されているプログラムは、各CPUにロードされることで、コーディングされている処理を該各CPUに実行させることとなる。
タスクテーブル381とは、ソフトウェアのプロセスや関数がどのCPUに割り当てられているか、各CPUがどのソフトウェアのプロセスや関数を実行中であるかを示す情報である。
図4は、属性テーブル400の一例を示す説明図である。属性テーブル400では、各タスクの属性について記述されている。属性テーブル400では、タスクIDの項目401と、属性の項目402と、を有している。タスクIDの項目401にはタスクの名称が保持され、属性の項目402には各タスクの属性が保持されている。ここで、属性の項目402には、アクセスか通常のいずれかが保持される。アクセスとは、タスクが共有メモリ303へ大量にアクセスしている状態を示し、通常とは、タスクが共有メモリ303へ大量にアクセスしていない状態を示す。
また、タスクIDの項目401にタスクの名称が保持されていないタスクは属性が未付加なタスクとする。本実施の形態では、タスクはタスク1〜タスク9までとすると、タスク1〜6およびタスク9は属性が付加されているタスクであり、タスク7およびタスク8は属性が未付加なタスクである。
図5は、大量アクセス開始情報500の一例を示す説明図である。大量アクセス開始情報500は、大量アクセス状態に遷移する命令アドレスをタスクのタスクIDごとに保持するテーブルである。
大量アクセス開始情報500は、タスクIDの項目501と、開始アドレスの項目502とを有している。タスクIDの項目501にはタスクの名称が保持される。開始アドレスの項目502には大量アクセス状態に遷移する命令アドレスが保持される。
(マルチコアプロセッサシステム300の機能ブロック図)
図6は、マルチコアプロセッサシステム300の機能ブロック図である。マルチコアプロセッサシステム300は、検出部601と、検出部602と、検出部603と、制御部611と、制御部612と、制御部613と、を有している。
検出部601と検出部602と検出部603とは後述する属性チェンジャーと称するプログラムとして記憶装置内に記憶されている。該各CPUが該属性チェンジャーを記憶装置からロードし、該属性チェンジャー内にコーディングされている処理を実行する。
制御部611と制御部612と制御部613とは、それぞれスケジューラ351と、スケジューラ352と、スケジューラ353として記憶装置内に記憶されている。該各CPUが各スケジューラを記憶装置からロードし、スケジューラ内にコーディングされている処理を実行する。ここでは、CPU#0上で動作する検出部601と制御部611を例に挙げて説明する。
検出部601は、マルチコアプロセッサのうちの該検出部601を実行するCPU#0を除く他のコアがマルチコアプロセッサで共有する共有資源へアクセスしているときに、CPU#0から共有資源へのアクセスの前処理を検出する。
制御部611は、検出部601により前処理が検出された場合、CPU#0で実行中のタスクを他のタスクに切り替える。
また、制御部611は、検出部601により前処理が検出された場合、CPU#0で実行中のタスクをストールさせる。
また、検出部601は、該他のコアから共有資源へのアクセス量が所定量以上のときに、CPU#0から共有資源へのアクセスの前処理を検出する。ここでは、所定量とは上述した所定アクセス量である。
また、検出部601は、該他のコアから共有資源へアクセスしているときに、CPU#0から共有資源へのアクセス量が所定量以上であるアクセスの前処理を検出する。
CPU#1上で動作する検出部602および制御部612と、CPU#2上で動作する検出部603および制御部613とは、それぞれCPU#0上で動作する検出部601および制御部611と同一の処理であるため、説明を省略する。
以上を踏まえ、図を用いて詳細に説明する。
図7は、タスク2がCPU#0にディスパッチされる例を示す説明図である。まず、スケジューラ351が、(1)タスク2をCPU#0にディスパッチすることにより、CPU#0へのタスクのディスパッチを検出することとする。そして、スケジューラ351が、(2)ディスパッチされたタスク2の属性を属性テーブル400から取得することにより、タスク2の属性をチェックする。
タスク2の属性は通常であるため、スケジューラ351が、(3)アクセスフラグの値がCPU#0を示す値であるか否かを判断する。ここでは、アクセスフラグの値が−であるため、いずれのCPUも示していないので、スケジューラ351は、属性チェンジャー371が起動済か否かを判断する。属性チェンジャー371は起動されていないため、スケジューラ351が、(4)属性チェンジャー371を起動する。
属性チェンジャー371は、スケジューラ351により起動されると、大量アクセス開始情報500から、実行中のタスク2が大量アクセス状態に遷移する命令アドレスを取得する。そして、属性チェンジャー371は、取得した命令アドレスとCPU#0のPC331の値とを比較することにより、タスク2の大量アクセス開始を監視する。
図8は、タスク5がCPU#1にディスパッチされる例を示す説明図である。ここで、CPU#0のレディーキュー361にはタスク1とタスク3とが積まれている。そして、スケジューラ351が(1)タスク5をCPU#1にディスパッチすると、スケジューラ352が(2)該ディスパッチを検出する。
そして、スケジューラ352が、(3)ディスパッチされたタスク5の属性を属性テーブル400から取得することにより、タスク5の属性をチェックする。タスク5の属性は通常状態であるため、スケジューラ352が、(4)アクセスフラグの値がCPU#1を示す値であるか否かを判断する。ここでは、アクセスフラグの値が−であり、いずれのCPUも示していないので、スケジューラ352は、属性チェンジャー372が起動済か否かを判断する。属性チェンジャー372は起動されていないため、スケジューラ352が、(5)属性チェンジャー372を起動する。
属性チェンジャー372は、スケジューラ352により起動されると、大量アクセス開始情報500から、実行中のタスク5が大量アクセス状態に遷移する命令アドレスを取得する。そして、属性チェンジャー372は、取得した命令アドレスとCPU#1のPC332の値とを比較することにより、タスク5の大量アクセス開始を監視する。
図9は、タスク7がCPU#2にディスパッチされる例を示す説明図である。ここで、CPU#1のレディーキュー362にはタスク4とタスク6とが積まれている。そして、スケジューラ351が(1)タスク7をCPU#2にディスパッチすると、スケジューラ353が(2)該ディスパッチを検出する。
そして、スケジューラ353が、(3)ディスパッチされたタスク7の属性を属性テーブル400から取得することにより、タスク7の属性をチェックする。タスク7の属性は属性テーブル400に登録されていないため、属性未付加である。そして、スケジューラ353が、(4)アクセスフラグの値がCPU#2を示す値であるか否かを判断する。ここでは、アクセスフラグの値が−であり、いずれのCPUも示していない。つぎに、スケジューラ353は、属性チェンジャーが起動済か否かを判断する。属性チェンジャーは起動されておらず、スケジューラ353は、属性チェンジャーを起動しない。
図10は、CPU#0が大量アクセスを開始する例を示す説明図である。上述のように属性チェンジャー371は、取得した命令アドレスとCPU#0のPC331の値とを比較することにより、タスク2の大量アクセス開始を監視する。そして、属性チェンジャー371は、(1)取得した命令アドレスとCPU#0のPC331の値との一致を検出することにより、共有メモリ303へのアクセス量が所定量以上であるアクセスの前処理を検出することとする。
属性チェンジャー371は、(2)アクセスフラグを、CPU#0を示す値に設定する。属性チェンジャー371は、(3)属性テーブル400内のタスクIDの項目401がタスク2を保持する属性の項目402を通常からアクセスに変更する。そして、属性チェンジャー371は(4)属性チェンジャー371を停止する。
また、スヌープコントローラ301は、<1>CPU#0のキャッシュ321内のアクセスフラグの変更を検出すると、<2>スヌープによりCPU#1のキャッシュ322およびCPU#2のキャッシュ323内のアクセスフラグを更新する。アクセスフラグのアドレス空間は常に全CPUのキャッシュ上に配置される。たとえば、全CPUのキャッシュ上にロック領域が設けられ、該ロック領域にアクセスフラグのアドレス空間が配置される。
図11は、CPU#1での大量アクセスの検出例を示す説明図である。上述のように属性チェンジャー372は、取得した命令アドレスとCPU#1のPC332の値とを比較することにより、タスク5の大量アクセス開始を監視する。そして、属性チェンジャー372は、検出部602により、(1)取得した命令アドレスとCPU#1のPC332の値との一致を検出することにより、共有メモリ303へのアクセス量が所定量以上であるアクセスの前処理を検出することとする。
属性チェンジャー372は、(2)アクセスフラグが−であるか否かを判断する。アクセスフラグが0であるため、属性チェンジャー372は(3)スケジューラ352に他のタスクへのディスパッチ要求を通知する。
図12は、CPU#1でタスクディスパッチを行う例を示す説明図である。そして、スケジューラ352が、制御部612により、ディスパッチ要求を受け付けると、(1)タスク5からタスク6にディスパッチする。また、属性チェンジャー372は停止する。
そして、スケジューラ352がタスク6をディスパッチすることにより、タスク6のディスパッチを検出することとして、図8で示したようにタスク5がディスパッチされた場合と同様の処理をスケジューラ352が実施する。
また、本実施の形態では、上述のようにアクセス量が所定量以上であるアクセスが複数のCPUで競合しない例を示した。これに限らず、たとえば、大量アクセスであるか否かに関係なく1つのCPUが共有メモリ303へアクセスしているときに、他のCPUから共有メモリ303へアクセス量が所定量以上であるアクセスの前処理を検出し、アクセスが競合しないようにしてもよい。また、たとえば、1つのCPUが共有メモリ303へアクセス量が所定量以上であるアクセスを実行しているときに、大量アクセスであるか否かに関係なく他のCPUから共有メモリ303へのアクセスの前処理を検出して、アクセスが競合しないようにしてもよい。
(マルチコアプロセッサシステム300による制御処理手順)
つぎに、マルチコアプロセッサシステム300による制御処理手順について説明する。ここでは、CPU#0で動作するスケジューラ351と属性チェンジャー371を例に挙げて説明するが、他のCPUで動作するスケジューラと属性チェンジャーも同一処理である。
図13および図14は、スケジューラ351による制御処理手順の一例を示すフローチャートである。まず、スケジューラ351が、タスクのディスパッチを検出、または他のタスクへのディパッチ要求を検出したか否かを判断する(ステップS1301)。スケジューラ351が、タスクのディスパッチを検出および他のタスクへのディパッチ要求を検出していないと判断した場合(ステップS1301:No)、ステップS1301へ戻る。
スケジューラ351が、タスクのディスパッチを検出したと判断した場合(ステップS1301:ディスパッチ)、ディスパッチされたタスクの属性をチェックする(ステップS1302)。スケジューラ351が、ディスパッチされたタスクの属性が属性未付加であると判断した場合(ステップS1302:属性未付加)、アクセスフラグの値が自CPUを示す値であるか否かを判断する(ステップS1303)。
スケジューラ351が、アクセスフラグの値が自CPUを示す値であると判断した場合(ステップS1303:Yes)、アクセスフラグの値を解除値に設定する(ステップS1304)。ここでは、−を解除値と称する。スケジューラ351が、アクセスフラグの値が自CPUを示す値でないと判断した場合(ステップS1303:No)、またはステップS1304のつぎに、属性チェンジャー371が起動済か否かを判断する(ステップS1305)。
スケジューラ351が、属性チェンジャー371が起動済であると判断した場合(ステップS1305:起動済)、属性チェンジャー371の停止要求を通知(図15のステップS1503へ)する(ステップS1306)。そして、ステップS1306のつぎに、ステップS1301へ戻る。一方、スケジューラ351が、属性チェンジャー371が起動済でないと判断した場合(ステップS1305:停止中)、ステップS1301へ戻る。
スケジューラ351が、ディスパッチされたタスクの属性が通常であると判断した場合(ステップS1302:通常)、アクセスフラグの値が自CPUを示す値か否かを判断する(ステップS1307)。スケジューラ351が、アクセスフラグの値が自CPUを示す値であると判断した場合(ステップS1307:Yes)、アクセスフラグの値を解除値に設定する(ステップS1308)。スケジューラ351が、アクセスフラグの値が自CPUを示す値でないと判断した場合(ステップS1307:No)、またはステップS1308のつぎに、属性チェンジャー371が起動済か否かを判断する(ステップS1309)。
スケジューラ351が、属性チェンジャー371が起動済でないと判断した場合(ステップS1309:停止中)、属性チェンジャー371の起動要求を通知(ステップS1501へ)する(ステップS1310)。スケジューラ351が、属性チェンジャー371が起動済であると判断した場合(ステップS1309:起動済)、大量アクセス開始情報500の再取得の要求を属性チェンジャー371に通知(図15のステップS1503へ)する(ステップS1311)。そして、ステップS1310またはステップS1311のつぎに、ステップS1301へ戻る。
ステップS1301において、スケジューラ351が、他のタスクのディスパッチ要求を検出した場合(ステップS1301:ディスパッチ要求)、制御部611により、レディーキュー361内の他のタスクにディスパッチする(ステップS1316)。
また、ステップS1302において、スケジューラ351が、ディスパッチされたタスクの属性がアクセスであると判断した場合(ステップS1302:アクセス)、アクセスフラグをチェックする(ステップS1312)。そして、スケジューラ351が、アクセスフラグの値が解除値であると判断した場合(ステップS1312:解除値)、アクセスフラグの値を、自CPUを示す値に設定する(ステップS1313)。
スケジューラ351が、アクセスフラグが自CPUを示していると判断した場合(ステップS1312:自CPU)、またはステップS1313のつぎに、属性チェンジャー371が起動済であるか否かを判断する(ステップS1314)。スケジューラ351が、属性チェンジャー371が起動済であると判断した場合(ステップS1314:起動済)、属性チェンジャー371の停止要求を属性チェンジャー371に通知(図15のステップS1503へ)する(ステップS1315)。
ステップS1312において、スケジューラ351が、アクセスフラグが他CPUを示していると判断した場合(ステップS1312:他CPU)、ステップS1316へ移行する。そして、ステップS1314において、スケジューラ351が、属性チェンジャー371が起動済でないと判断した場合(ステップS1314:停止中)、ステップS1315、またはステップS1316のつぎに、ステップS1301へ戻る。
図15は、属性チェンジャー371による制御処理手順の一例を示すフローチャートである。まず、属性チェンジャー371が、スケジューラ351から起動要求ありか否かを判断し(ステップS1501)、起動要求がないと判断した場合(ステップS1501:No)、ステップS1501へ戻る。つぎに、属性チェンジャー371が、起動要求がありと判断した場合(ステップS1501:Yes)、大量アクセス開始情報500を取得する(ステップS1502)。
そして、属性チェンジャー371が、大量アクセスの前処理を検出、停止要求を検出、または大量アクセス開始情報500の再取得要求を検出したか否かを判断する(ステップS1503)。属性チェンジャー371が、大量アクセスの前処理の検出と、停止要求の検出と、大量アクセス開始情報500の再取得要求の検出とのいずれも検出していないと判断した場合(ステップS1503:No)、ステップS1503に戻る。
属性チェンジャー371が、大量アクセス開始情報500の再取得要求を検出したと判断した場合(ステップS1503:大量アクセス開始情報の再取得要求)、ステップS1502へ戻る。属性チェンジャー371が、検出部601により、大量アクセスの前処理を検出したと判断した場合(ステップS1503:大量アクセスの前処理)、検出部601により、アクセスフラグの値が自CPUを示す値または解除値であるか否かを判断する(ステップS1504)。
属性チェンジャー371が、アクセスフラグの値が自CPUを示す値または解除値であると判断した場合(ステップS1504:Yes)、実行中のタスクの属性をアクセスに変更する(ステップS1505)。そして、属性チェンジャー371が、アクセスフラグの値を、自CPUを示す値に設定し(ステップS1506)、属性チェンジャー371を停止し(ステップS1508)、ステップS1501へ戻る。属性チェンジャー371を停止するとは、具体的には、たとえば、属性チェンジャー371を実行待機状態にさせることを示している。
属性チェンジャー371が、停止要求を検出したと判断した場合(ステップS1503:停止要求)、ステップS1508へ移行する。また、属性チェンジャー371が、アクセスフラグの値が自CPUを示す値および解除値でないと判断した場合(ステップS1504:No)、ディスパッチ要求をスケジューラ351へ通知(ステップS1301へ)し(ステップS1507)、ステップS1508へ移行する。アクセスフラグの値が自CPUを示す値および解除値でない場合とは、他のCPUが大量アクセスを行っていることを示している。
以上説明したように、マルチコアプロセッサシステム、制御プログラム、および制御方法によれば、一のCPUが共有資源へアクセスしているときに、他のCPUから共有資源へのアクセスの前処理を検出する。そして、他のCPUで実行中のタスクを他のタスクに切り替える。これにより、複数のCPUで共有資源へのアクセスが競合しないので、調停回路によるアクセスの調停が不要となる。したがって、一のCPUのアクセスを高速化させることができ、一のCPUの実効性能を向上させることができる。
また、一のCPUが共有資源へアクセス量が所定量以上であるアクセスを実行しているときに、他のCPUから共有資源へのアクセスの前処理を検出すると、他のCPUで実行中のタスクを他のタスクに切り替える。これにより、大量アクセスが発生しているときに、他のCPUからのアクセスが競合しないため、マルチコアプロセッサシステムの実行性能が向上する。
また、一のCPUが共有資源へアクセスしているときに、アクセス量が所定アクセス量以上である他のCPUから共有資源へのアクセスの前処理を検出し、他のCPUで実行中のタスクを他のタスクに切り替える。これにより、複数のCPUで共有資源への大量のアクセスが競合しないため、マルチコアプロセッサシステムの実行性能が向上する。
また、以上説明したように、マルチコアプロセッサシステム、制御プログラム、および制御方法によれば、一のCPUが共有資源へアクセスしているときに、他のCPUから共有資源へのアクセスの前処理を検出する。そして、他のCPUで実行中のタスクをストールさせる。これにより、複数のCPUで共有資源へのアクセスが競合しないので、調停回路によるアクセスの調停が不要となる。したがって、一のCPUのアクセスを高速化させることができ、一のCPUの実効性能を向上させることができる。
また、一のCPUが共有資源へアクセス量が所定量以上であるアクセス実行しているときに、他のCPUから共有資源へのアクセスの前処理を検出すると、他のCPUで実行中のタスクをストールさせる。これにより、大量アクセスが発生しているときに、他のCPUからのアクセスが競合しないため、マルチコアプロセッサシステムの実行性能が向上する。
また、一のCPUが共有資源へアクセスしているときに、アクセス量が所定アクセス量以上である他のCPUから共有資源へのアクセスの前処理を検出すると、他のCPUで実行中のタスクをストールさせる。これにより、複数のCPUで共有資源への大量のアクセスが競合しないため、マルチコアプロセッサの実行性能が向上する。
300 マルチコアプロセッサシステム
303 共有メモリ
601,602,603 検出部
611,612,613 制御部

Claims (6)

  1. マルチコアプロセッサのうちの一のコアから前記マルチコアプロセッサで共有する共有資源へアクセスのアクセス量が所定量以上のときに、前記マルチコアプロセッサのうちの前記一のコアを除く他のコアから前記共有資源へのアクセスの前処理を検出する検出手段と、
    前記検出手段により前記前処理が検出された場合、前記他のコアで実行中のタスクを他のタスクに切り替える制御手段と、
    を備えることを特徴とするマルチコアプロセッサシステム。
  2. マルチコアプロセッサのうちの一のコアから前記マルチコアプロセッサで共有する共有資源へのアクセスのアクセス量が所定量以上のときに、前記マルチコアプロセッサのうちの前記一のコアを除く他のコアから前記共有資源へのアクセスの前処理を検出する検出手段と、
    前記検出手段により前記前処理が検出された場合、前記他のコアで実行中のタスクをストールさせる制御手段と、
    を備えることを特徴とするマルチコアプロセッサシステム。
  3. マルチコアプロセッサのうちの一のコアに、
    前記マルチコアプロセッサのうちの前記一のコアを除く他のコアから前記マルチコアプロセッサで共有する共有資源へのアクセスのアクセス量が所定量以上のときに、前記一のコアから前記共有資源へのアクセスの前処理を検出する検出工程と、
    前記検出工程により前記前処理が検出された場合、前記一のコアで実行中のタスクを他のタスクに切り替える制御工程と、
    を実行させることを特徴とする制御プログラム。
  4. マルチコアプロセッサのうちの一のコアに、
    前記マルチコアプロセッサのうちの前記一のコアを除く他のコアから前記マルチコアプロセッサで共有する共有資源へのアクセスのアクセス量が所定量以上のときに、前記一のコアから前記共有資源へのアクセスの前処理を検出する検出工程と、
    前記検出工程により前記前処理が検出された場合、前記一のコアで実行中のタスクをストールさせる制御工程と、
    を実行させることを特徴とする制御プログラム。
  5. マルチコアプロセッサのうちの一のコアが、
    前記マルチコアプロセッサのうちの前記一のコアを除く他のコアから前記マルチコアプロセッサで共有する共有資源へのアクセスのアクセス量が所定量以上のときに、前記一のコアから前記共有資源へのアクセスの前処理を検出する検出工程と、
    前記検出工程により前記前処理が検出された場合、前記一のコアで実行中のタスクを他のタスクに切り替える制御工程と、
    を実行することを特徴とする制御方法。
  6. マルチコアプロセッサのうちの一のコアが、
    前記マルチコアプロセッサのうちの前記一のコアを除く他のコアから前記マルチコアプロセッサで共有する共有資源へのアクセスのアクセス量が所定量以上のときに、前記一のコアから前記共有資源へのアクセスの前処理を検出する検出工程と、
    前記検出工程により前記前処理が検出された場合、前記一のコアで実行中のタスクをストールさせる制御工程と、
    を実行することを特徴とする制御方法。
JP2012526236A 2010-07-27 2010-07-27 マルチコアプロセッサシステム、制御プログラム、および制御方法 Expired - Fee Related JP5397546B2 (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/JP2010/062629 WO2012014287A1 (ja) 2010-07-27 2010-07-27 マルチコアプロセッサシステム、制御プログラム、および制御方法

Related Child Applications (1)

Application Number Title Priority Date Filing Date
JP2013221663A Division JP5621896B2 (ja) 2013-10-24 2013-10-24 マルチプロセッサシステム、制御プログラム、および制御方法

Publications (2)

Publication Number Publication Date
JPWO2012014287A1 JPWO2012014287A1 (ja) 2013-09-09
JP5397546B2 true JP5397546B2 (ja) 2014-01-22

Family

ID=45529534

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2012526236A Expired - Fee Related JP5397546B2 (ja) 2010-07-27 2010-07-27 マルチコアプロセッサシステム、制御プログラム、および制御方法

Country Status (3)

Country Link
US (1) US20130132708A1 (ja)
JP (1) JP5397546B2 (ja)
WO (1) WO2012014287A1 (ja)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8866826B2 (en) * 2011-02-10 2014-10-21 Qualcomm Innovation Center, Inc. Method and apparatus for dispatching graphics operations to multiple processing resources
US9384047B2 (en) * 2013-03-15 2016-07-05 D.E. Shaw Research, Llc Event-driven computation
US20160077959A1 (en) * 2014-09-12 2016-03-17 Qualcomm Incorporated System and Method for Sharing a Solid-State Non-Volatile Memory Resource
US9710273B2 (en) 2014-11-21 2017-07-18 Oracle International Corporation Method for migrating CPU state from an inoperable core to a spare core
JP7073933B2 (ja) * 2018-06-14 2022-05-24 株式会社デンソー マルチコアマイコン及び並列化方法

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH02501515A (ja) * 1988-04-14 1990-05-24 ディジタル イクイプメント コーポレーション プロセッサブロッキングの影響の減少
JPH0355657A (ja) * 1989-07-25 1991-03-11 Nec Corp マルチタスク・マルチプロセッサシステムにおける共有メモリアクセス方式
JPH06110810A (ja) * 1992-09-24 1994-04-22 Fuji Xerox Co Ltd 共有資源管理方式
JPH08278943A (ja) * 1995-04-05 1996-10-22 Fanuc Ltd 共有バス制御方式
JP2004192052A (ja) * 2002-12-06 2004-07-08 Matsushita Electric Ind Co Ltd ソフトウェア処理方法およびソフトウェア処理システム
JP2004206369A (ja) * 2002-12-25 2004-07-22 Nec Corp 共通資源へのアクセス方式及びアクセスプログラム

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5202991A (en) * 1988-04-14 1993-04-13 Digital Equipment Corporation Reducing the effect processor blocking
US7318128B1 (en) * 2003-08-01 2008-01-08 Sun Microsystems, Inc. Methods and apparatus for selecting processes for execution
US7380038B2 (en) * 2005-02-04 2008-05-27 Microsoft Corporation Priority registers for biasing access to shared resources
JP4353990B2 (ja) * 2007-05-18 2009-10-28 株式会社半導体理工学研究センター マルチプロセッサ制御装置
US20090217280A1 (en) * 2008-02-21 2009-08-27 Honeywell International Inc. Shared-Resource Time Partitioning in a Multi-Core System

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH02501515A (ja) * 1988-04-14 1990-05-24 ディジタル イクイプメント コーポレーション プロセッサブロッキングの影響の減少
JPH0355657A (ja) * 1989-07-25 1991-03-11 Nec Corp マルチタスク・マルチプロセッサシステムにおける共有メモリアクセス方式
JPH06110810A (ja) * 1992-09-24 1994-04-22 Fuji Xerox Co Ltd 共有資源管理方式
JPH08278943A (ja) * 1995-04-05 1996-10-22 Fanuc Ltd 共有バス制御方式
JP2004192052A (ja) * 2002-12-06 2004-07-08 Matsushita Electric Ind Co Ltd ソフトウェア処理方法およびソフトウェア処理システム
JP2004206369A (ja) * 2002-12-25 2004-07-22 Nec Corp 共通資源へのアクセス方式及びアクセスプログラム

Also Published As

Publication number Publication date
JPWO2012014287A1 (ja) 2013-09-09
US20130132708A1 (en) 2013-05-23
WO2012014287A1 (ja) 2012-02-02

Similar Documents

Publication Publication Date Title
US7698540B2 (en) Dynamic hardware multithreading and partitioned hardware multithreading
JP3595504B2 (ja) マルチスレッド式プロセッサにおけるコンピュータ処理方法
US8145849B2 (en) Wake-and-go mechanism with system bus response
US8015379B2 (en) Wake-and-go mechanism with exclusive system bus response
US8127080B2 (en) Wake-and-go mechanism with system address bus transaction master
US20170357536A1 (en) Task processing device
JP6434791B2 (ja) マルチスレッディングを支援するための演算ユニット、それを含むプロセッサ及びプロセッサの動作方法
US20090199028A1 (en) Wake-and-Go Mechanism with Data Exclusivity
JP5397546B2 (ja) マルチコアプロセッサシステム、制御プログラム、および制御方法
CN103473135B (zh) 虚拟化环境下自旋锁lhp现象的处理方法
US20140282564A1 (en) Thread-suspending execution barrier
CN106681836B (zh) 一种信号量的创建方法及装置
KR101686082B1 (ko) 결정적 프로그레스 인덱스 기반 락 제어 및 스레드 스케줄링 방법 및 장치
WO2012132017A1 (ja) 排他制御方法、および排他制御プログラム
US8892819B2 (en) Multi-core system and external input/output bus control method
WO2012120654A1 (ja) タスクスケジューリング方法およびマルチコアシステム
JP2012150583A5 (ja)
US9367349B2 (en) Multi-core system and scheduling method
EP1693743A2 (en) System, method and medium for using and/or providing operating system information to acquire a hybrid user/operating system lock
JP5621896B2 (ja) マルチプロセッサシステム、制御プログラム、および制御方法
WO2011104812A1 (ja) マルチコアプロセッサシステム、割込プログラム、および割込方法
KR101892273B1 (ko) 스레드 프로그레스 트래킹 방법 및 장치
US9043507B2 (en) Information processing system
US20080281999A1 (en) Electronic system with direct memory access and method thereof
US10489218B2 (en) Suppression of speculative accesses to shared memory locations at a processor

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20130702

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20130902

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20130924

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20131007

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees