JP5725181B2 - 割当方法、およびマルチコアプロセッサシステム - Google Patents
割当方法、およびマルチコアプロセッサシステム Download PDFInfo
- Publication number
- JP5725181B2 JP5725181B2 JP2013526647A JP2013526647A JP5725181B2 JP 5725181 B2 JP5725181 B2 JP 5725181B2 JP 2013526647 A JP2013526647 A JP 2013526647A JP 2013526647 A JP2013526647 A JP 2013526647A JP 5725181 B2 JP5725181 B2 JP 5725181B2
- Authority
- JP
- Japan
- Prior art keywords
- thread
- cpu
- allocation
- core
- shared resource
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5016—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
- G06F9/5044—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering hardware capabilities
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Multi Processors (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Description
本発明は、スレッドを割り当てる割当方法、およびマルチコアプロセッサシステムに関する。
従来、マルチコアプロセッサシステムにおいて、キャッシュヒット率を測定し、各スレッドのキャッシュヒット率が高くなるようにスレッドをスケジューリングする技術が知られている(たとえば、下記特許文献1〜3を参照。)。
また、スレッドごとにキャッシュの優先度を設け、キャッシュの優先度に応じて同一のCPU(Central Processing Unit)に割り当てられるスレッドのキャッシュの使用量を決定する技術が知られている(たとえば、下記特許文献4を参照。)。
しかしながら、たとえば、キャッシュのヒット率が低いスレッドが複数のCPUで同時に実行された場合、複数のCPUから共有メモリへのアクセスが競合し、共有メモリへのアクセスの待ち時間が発生する問題点がある。これにより、各スレッドの実行が進まなくなってしまい、スレッドの実行性能が低下する問題点がある。
本発明は、上述した従来技術による問題点を解消するため、共有メモリへのアクセス競合によるスレッドの性能劣化の低減を図ることができる割当方法、およびマルチコアプロセッサシステムを提供することを目的とする。
本発明の一側面によれば、マルチコアプロセッサのうちの特定のコアが、前記マルチコアプロセッサで共有する共有資源が有する記憶領域の使用数をスレッド群のスレッドごとに記憶する記憶装置から、対象スレッドの記憶領域の使用数と、前記マルチコアプロセッサのコアごとに割当済のスレッドの記憶領域の使用数と、を特定し、前記割当済のスレッドの特定された記憶領域の使用数から前記コアごとに最大値を検出し、前記マルチコアプロセッサのうちの割当先候補に選択されたコアの検出された最大値と前記対象スレッドの特定された記憶領域の使用数とのうちの大きい方の値と、前記選択されたコア以外のコアの検出された最大値との総和が、前記共有資源内の記憶領域数以下であるか否かを判断し、前記総和が前記記憶領域数以下であると判断された場合、前記対象スレッドを前記選択されたコアに割り当てる割当方法、およびマルチコアプロセッサシステムが提案される。
本発明の一側面によれば、共有メモリへのアクセス競合によるスレッドの性能劣化の低減を図ることができるという効果を奏する。
マルチコアプロセッサシステムにおいて、マルチコアプロセッサとは、コアが複数搭載されたプロセッサである。コアが複数搭載されていれば、複数のコアが搭載された単一のプロセッサでもよく、シングルコアのプロセッサが並列されているプロセッサ群でもよい。なお、本実施の形態では、説明を単純化するため、シングルコアのプロセッサが並列されているプロセッサ群を例に挙げて説明する。
マルチコアプロセッサの各コアで実行されるスレッドの総バンク使用数が、共有資源の総バンク数を上回ってしまうと、あるバンクに対し複数のスレッドからアクセスを受けることになる。このため、いずれのスレッドの組み合わせで並列実行されても、メモリバンク不足により発生するアクセス競合の低減を図る。すなわち、並列実行時のスレッドの使用バンク数の総和が共有資源のメモリバンク数を超えないように対象スレッドの割り当てを行う。このように、各コアで使用バンク数が最大のスレッドが同時に実行されたとしても、バンク不足を可能な限り回避することができる。したがって、共有資源へのアクセス競合によるスレッドの性能劣化の低減を図ることができる。
図1は、マルチコアプロセッサシステムの処理例を示す説明図である。まず、マルチコアプロセッサで共有する共有資源が有するバンクの使用数をスレッドごとに記憶装置に記憶させておく。ここで、スレッドとは、CPUが実行する処理の単位である。記憶装置と共有資源とは、同一であってもよいし、異なる資源であってもよい。たとえば、共有資源がRAM(Randam Access Memory)や2次キャッシュであり、記憶装置がフラッシュROM(Read Only Memory)などのストレージである。共有資源の記憶領域は、複数のバンクに分割されている。バンクとは、共有資源のコントローラが共有資源を管理する際の記憶領域の単位である。共有資源のコントローラが、メモリインターリーブ機能により、CPU201からの書き込み命令や読み出し命令を同時に複数のバンクに発行することができるため、異なるバンクへのアクセスであれば競合しない。図1では、共有資源のバンク数は10である。
図1では、スレッド101−1〜101−8が各CPU201に割当済である。CPU201−1には、スレッド101−1,101−2が割り当てられ、CPU201−2には、スレッド101−3,101−4が割り当てられている。CPU201−3には、スレッド101−5,101−6が割り当てられ、CPU201−4には、スレッド101−7,101−8が割り当てられている。
まず、CPU201−1が実行するマスタOS(Operating System)が、記憶装置から、対象スレッド100のバンクの使用数と、各CPU201に割当済のスレッド101のバンクの使用数と、を特定する。対象スレッド100は、割り当ての対象となるスレッドである。たとえば、対象スレッド100は、起動指示がマスタOSによって受け付けられたスレッドである。各スレッドのバンクの使用数は図1中の各スレッドの括弧( )の中に記述されている。たとえば、対象スレッド100のバンクの使用数は2である。
つぎに、マスタOSが、割当済のスレッド101の特定されたバンクの使用数のうちの最大値BをCPU201ごとに検出する。たとえば、CPU201−1に割当済のスレッド101のバンクの使用数のうちの最大値B1は3であり、CPU201−2に割当済のスレッド101のバンクの使用数のうちの最大値B2は2である。CPU201−3に割当済のスレッド101のバンクの使用数のうちの最大値B3は2であり、CPU201−4に割当済のスレッド101のバンクの使用数のうちの最大値B4は3である。
そして、マスタOSが、マルチコアプロセッサのうちの割当先候補に選択されたCPU201の検出された最大値と対象スレッド100の特定されたバンクの使用数とのうちの大きい方の値を選択する。図1では、マスタOSが割当先候補としてCPU201−1を選択する。対象スレッド100のバンクの使用数は2であり、CPU201−1の検出された最大値は3であるため、マスタOSが大きい方の値として3を選択する。図1中点線枠で囲われたスレッドが、選択された大きい方の値のスレッドと、CPU201−1以外のCPU201の検出された最大値のスレッドである。すなわち、対象スレッド100をCPU201−1に割り当てた場合において、対象スレッド100と割当済のスレッド101とが並列実行される組み合わせの中で、図1中点線枠で囲われたスレッドの組み合わせが、最も総バンク使用数が大きくなる。
そして、たとえば、マスタOSが、選択された大きい方の値と、CPU201−1以外のCPU201の検出された最大値との総和SUMが、共有資源のバンク数以下であるか否かを判断する。マスタOSが、総和SUMが共有資源のバンク数以下であると判断した場合、対象スレッド100を選択されたCPU201に割り当てる。総和SUMは10であるため、マスタOSが対象スレッド100をCPU201−1に割り当てる。これにより、対象スレッド100をCPU201−1に割り当てた場合、いずれのスレッドの組み合わせで並列実行されても、バンク数不足に陥ることがない。また、マスタOSは、割当先候補としてCPU201−1以外のCPU201を選択してもよいし、CPU201を順に選択してもよい。割当先候補の選択については、実施例にて後述する。
CPU201−1〜201−4は、それぞれに複数のスレッドが割り当てられた場合、タイムスライスで切り替えながら実行するため、いずれのスレッドの組み合わせで並列実行されるか不明である。図1で示した例では、いずれのスレッドの組み合わせであっても、共有資源へのアクセスが競合しないように割り当てるため、アクセス競合によるスレッドの性能劣化の低減を図ることができる。
(マルチコアプロセッサシステム)
図2は、マルチコアプロセッサシステムのハードウェア構成例を示す説明図である。マルチコアプロセッサシステム200は、CPU201−1〜201−nと、2次キャッシュ202と、I/O203と、I/F204と、を有している。さらに、マルチコアプロセッサシステム200は、RAMコントローラ205と、RAM206と、フラッシュROMコントローラ207と、フラッシュROM208と、ROMコントローラ209と、ROM210と、を有している。
図2は、マルチコアプロセッサシステムのハードウェア構成例を示す説明図である。マルチコアプロセッサシステム200は、CPU201−1〜201−nと、2次キャッシュ202と、I/O203と、I/F204と、を有している。さらに、マルチコアプロセッサシステム200は、RAMコントローラ205と、RAM206と、フラッシュROMコントローラ207と、フラッシュROM208と、ROMコントローラ209と、ROM210と、を有している。
RAMコントローラ205と、フラッシュROMコントローラ207と、ROMコントローラ209と、2次キャッシュ202と、I/O203と、I/F204とは、バス211を介して接続されている。CPU201−1〜201−n(n≧2)は、2次キャッシュ202を介して各部と接続されている。RAM206は、RAMコントローラ205を介して各部と接続されている。フラッシュROM208は、フラッシュROMコントローラ207を介して各部と接続されている。ROM210は、ROMコントローラ209を介して各部と接続されている。
CPU201−1はマスタCPUであり、マルチコアプロセッサシステム200の全体を制御する。CPU201−2〜201−nはスレーブCPUである。CPU201−1〜201−nは、それぞれ1次キャッシュ261−1〜261−n、レジスタ、コア、MMU(Memory Management Unit)を有している。MMUは、CPU201から書き込み命令や読み出し命令を受け付けると、各命令に含まれる論理アドレスを物理アドレスに変更する。CPU201−1〜201−nは、それぞれOS221−1〜221−nを実行している。
OS221−1は、マルチコアプロセッサの全体のマスタOSである。OS221−1は、ウエイトキュー250を有し、ウエイトキュー250にスレッドのバイナリ情報へのポインタが積まれると、OS221−1はスレッドの起動指示を受け付けたと判断する。
また、OS221−1〜221−nは、図示していないが、それぞれランキューを有している。各ランキューには各CPU201に割り当てられたスレッドのコンテキスト情報のポインタが積まれる。コンテキスト情報とは、たとえば、ロードされたスレッドの実行状態や該スレッド内の変数などが含まれる情報である。OS221−1〜221−nはランキュー内のコンテキスト情報のポインタを取得し、スレッドのコンテキスト情報にアクセスすることで、スレッドを直ぐに実行することができる。
CPU201−1〜201−nがそれぞれ有する1次キャッシュ261−1〜261−nはOS221が実行するスレッドからRAM206やフラッシュROM208への書込処理を一時的に記憶する。各1次キャッシュ261は、RAM206やフラッシュROM208から読み出されたデータを一時的に記憶する。各1次キャッシュ261は、スヌープ回路によって接続されている。スヌープ回路は、CPU201が有する1次キャッシュ261で共有するデータがいずれかの1次キャッシュ261で更新された場合、該更新を検出し、他の1次キャッシュ261の該データも更新する。
2次キャッシュ202は、キャッシュメモリと2次キャッシュコントローラ251を有している。2次キャッシュ202では、各CPU201が有する1次キャッシュ261から追い出されたデータやRAM206、フラッシュROM208から読み出されたデータを記憶する。2次キャッシュ202は、1次キャッシュ261よりも記憶容量が大きくかつCPU201からのアクセス速度が遅いが、RAM206よりも記憶容量が小さくかつCPU201からのアクセス速度が速い。
2次キャッシュ202のキャッシュメモリは、バンク231−1〜231−lに分割され、2次キャッシュコントローラ251は、メモリインターリーブ機能を有している。2次キャッシュコントローラ251はCPU201からの書き込み命令や読み出し命令を同時に複数のバンク231に発行することができる。したがって、異なるバンク231へのアクセスであれば競合が発生しない。
また、2次キャッシュコントローラ251は、図示しないアクセスキューをバンク231ごとに有している。2次キャッシュコントローラ251は、いずれのバンク231へのアクセスであるかを判断後、アクセス先のバンク231用のアクセスキューにアクセス要求(書き込み命令または読み出し命令)を登録する。そして、2次キャッシュコントローラ251は、アクセスキューに登録されたアクセス要求順にバンク231へのアクセスを行う。
たとえば、バンク231−1〜231−lは、それぞれ空き領域か否かを示すフラグを有してよい。そして、2次キャッシュコントローラ251が、CPU201から読み出し命令または書き込み命令を受け付けた場合、読み出し命令または書き込み命令に関するデータ群がバンク231に記憶されているか否かを判断する。
たとえば、2次キャッシュコントローラ251が、該データ群がいずれかのバンク231に記憶されていない場合、バンク231−1〜231−lの空き領域か否かを示すフラグにより、空き領域のバンク231を特定する。そして、たとえば、2次キャッシュコントローラ251が、特定したバンク231へデータ群を記憶させ、特定したバンク231のフラグを使用領域に変更する。また、たとえば、データ群のうちのいずれかのデータがバンク231に記憶されている場合、データ群のうちの残余のデータも該バンク231と同一バンク231に記憶させることとしてもよい。
また、バンク231−1〜231−lは、バンク231に対する最新のアクセス時刻を有していてもよい。たとえば、2次キャッシュコントローラ251は、読み出し命令または書き込み命令に関するデータ群がバンク231に記憶されていない場合、最新のアクセス時刻が最も古いバンク231を特定する。そして、2次キャッシュコントローラ251は、特定したバンク231に記憶されているデータ群をRAM206やフラッシュROM208へ追い出し、あらたな命令によるデータ群を特定したバンク231に記憶させ、アクセス時刻を更新する。
また、バンク231は、バンク231のキャッシュラインごとに空き領域であるか否かのフラグや最新のアクセス時刻を有していてもよい。また、各OS221がスレッドとバンク231とを関連付けて空き領域であるか否かのフラグを管理してもよい。
つぎに、RAM206は、たとえば、CPU201−1〜201−nのワークエリアとして使用される。RAM206の記憶領域はバンク241−1〜241−mに分割されている。そのため、RAMコントローラ205は、メモリインターリーブ機能を有している。RAMコントローラ205は、メモリインターリーブ機能により、CPU201からの書き込み命令や読み出し命令を同時に複数のバンク241に発行することができるため、異なるバンク241へのアクセスであれば競合しない。
また、RAMコントローラ205は、アクセスキューをバンク241ごとに有している。RAMコントローラ205は、いずれのバンク241へのアクセスであるかを判断後、アクセス先のバンク241用のアクセスキューにアクセス要求を登録する。そして、RAMコントローラ205は、アクセスキューに登録されたアクセス要求順にバンク241へのアクセスを行う。
たとえば、バンク241−1〜241−mは、それぞれ空き領域か否かを示すフラグを有してよい。まず、CPU201は、スレッドを実行するためにはコンテキスト情報をRAM206へ記憶させる。そして、RAMコントローラ205が、CPU201からスレッドのコンテキスト情報に関する書き込み命令を受け付けた場合、バンク241−1〜241−mの空き領域か否かを示すフラグにより、コンテキスト情報分の空き領域のバンク241を特定する。コンテキスト情報は、上述したようにスレッドのプログラムコードやスレッドの実行時に用いる変数などを有している。そして、たとえば、RAMコントローラ205が、特定したバンク241へコンテキスト情報を記憶させ、特定したバンク241のフラグを使用領域に変更する。これにより、RAMコントローラ205はスレッドごとにバンク241を割り当てることができる。
また、たとえば、RAMコントローラ205が、空き領域であるバンク241を特定できなかった場合、任意のバンク241に記憶されたデータをフラッシュROM208へ一時的に退避させ、任意のバンク241へコンテキスト情報を記憶させる。
さらに、たとえば、実行中のスレッドはあらたなデータをRAM206に記憶させるために、記憶領域を動的に増やすことがある。このとき、スレッドは、すでに利用中の記憶領域(たとえば、コンテキスト情報の記憶領域)に連続した記憶領域にあらたなデータを記憶させるため、あらたなデータは、すでに利用中のバンク241と同一バンク241に記憶される。これにより、複数のスレッドがマルチコアプロセッサで同時に並列実行されても、RAM206のバンク数を超えないようにスレッドを割り当てることで、スレッドは、異なるバンク241を利用することができる。利用中の記憶領域については、CPU201がそれぞれ有するMMUが論理アドレスと物理アドレスを変換する変換テーブルにより管理している。
また、バンク241−1〜241−mは、バンク241に対する最新のアクセス時刻を有していてもよい。これにより、LRU(Least Recently Used)によって、各スレッドにバンクを振り分けることができる。たとえば、RAM206は、読み出し命令または書き込み命令に関するデータ群がバンク241に記憶されていない場合、最新のアクセス時刻が最も古いバンク241を特定する。そして、RAM206は、特定したバンク241へデータ群を記憶させ、アクセス時刻を更新する。そして、RAM206は、特定したバンク241に記憶されているデータ群をフラッシュROM208へ一時的にスワップさせ、あらたな命令によるデータ群を特定したバンク241に記憶させ、アクセス時刻を更新する。アクセスされていない時間が最も長いバンク241のデータをスワップ対象にすることができる。
また、バンク241は、バンク241のキャッシュラインごとに空き領域であるか否かのフラグや最新のアクセス時刻を有していてもよい。RAMコントローラ205は、キャッシュラインごとに管理していたとしても、データ群は、連続した記憶領域に記憶させるため、たとえば、プログラムのコードのような大きなデータであれば、すべて同一バンク241に割り当てることができる。また、各OS221がスレッドとバンク241とを関連付けて空き領域であるか否かのフラグを管理してもよい。
また、本明細書では、RAM206のバンク数として、mを用いるが、これに限らず、あらかじめスレッドが利用可能な上限値をRAM206のバンク数として定義してもよい。
ROM210は、ブートプログラムなどのプログラムを記憶している。ROMコントローラ209は、ROM210へのアクセスを制御する。フラッシュROM208は、OS221などのシステムソフトウェアやアプリのプログラムを記憶している。フラッシュROM208は、たとえば、マルチコアプロセッサシステム200に内蔵されていてもよいし、メモリカード、SDカードなどの記録媒体であってもよい。フラッシュROMコントローラ207は、フラッシュROM208へのアクセスを制御する。
(スレッドテーブル)
図3は、実施例1〜5にかかるスレッドテーブルの一例を示す説明図である。実施例6のスレッドテーブルと実施例7のスレッドテーブルについては後述する。スレッドテーブル300は、スレッドID、処理時間、使用数のフィールドを有している。各フィールドに値が設定されることで、スレッド情報(たとえば、301−1)がレコードとして記憶される。
図3は、実施例1〜5にかかるスレッドテーブルの一例を示す説明図である。実施例6のスレッドテーブルと実施例7のスレッドテーブルについては後述する。スレッドテーブル300は、スレッドID、処理時間、使用数のフィールドを有している。各フィールドに値が設定されることで、スレッド情報(たとえば、301−1)がレコードとして記憶される。
スレッドIDのフィールドには、スレッドの識別情報が登録される。処理時間のフィールドには、各スレッドの処理時間が登録される。各スレッドの処理時間については、たとえば、各スレッドの設計時にシミュレーションツールによりあらかじめ計測されてよい。使用数のフィールドには、RAM206の複数のバンクのうち、各スレッドが実行時に使用するバンクの使用数が登録される。各スレッドのバンクの使用数は、各スレッドの設計時にシミュレーションツールによりあらかじめ計数されてもよい。また、各スレッドのバンクの使用数は、各スレッドの実行時に計測された値でもよい。スレッドテーブル300については、フラッシュROM208に記憶されてよい。
(割当テーブル)
図4は、実施例1〜6にかかる割当テーブルの一例を示す説明図である。実施例7の割当テーブルについては後述する。割当テーブル400は、CPUID、スレッドIDのフィールドを有している。各フィールドに値が設定されることで、スレッド情報(たとえば、401−1)がレコードとして記憶される。
図4は、実施例1〜6にかかる割当テーブルの一例を示す説明図である。実施例7の割当テーブルについては後述する。割当テーブル400は、CPUID、スレッドIDのフィールドを有している。各フィールドに値が設定されることで、スレッド情報(たとえば、401−1)がレコードとして記憶される。
CPUIDのフィールドには、CPU201の識別情報が登録される。スレッドIDのフィールドには、各CPU201に割り当てられたスレッドの識別情報が登録される。マスタOSであるOS221−1がスレッドを各CPU201に割り当てる都度、割当テーブル400にスレッドの割当結果を設定することにより、あらたなレコードが生成される。また、OS221−1〜221−nがスレッドの実行が終了すると、割当テーブル400から、実行が終了したスレッドに関するレコードを削除する。割当テーブル400は、フラッシュROM208に記憶されていることとする。
(実施例1〜6にかかるマスタOSの機能例を示すブロック図)
図5は、実施例1〜6にかかるマスタOSの機能例を示すブロック図である。実施例7にかかるマスタOSの機能例を示すブロック図については後述する。マスタOSであるOS221−1は、特定部501と、検出部502と、選択部503と、判断部504と、割当部505と、分類判断部506と、を有している。特定部501から分類判断部506の処理が、マスタOSにコーディングされている。CPU201−1が、フラッシュROM208に記憶されているOS221−1を読み出し、OS221−1にコーディングされている処理を実行する。これにより、特定部501から分類判断部506の機能が実現される。以下、特定部501から分類判断部506については、実施例1〜実施例6を用いて詳細に説明する。実施例1〜6では、n=4とし、l=10とし、m=10とする。また、実施例7については、図5で示すブロック図を包含するブロック図を用いて説明する。
図5は、実施例1〜6にかかるマスタOSの機能例を示すブロック図である。実施例7にかかるマスタOSの機能例を示すブロック図については後述する。マスタOSであるOS221−1は、特定部501と、検出部502と、選択部503と、判断部504と、割当部505と、分類判断部506と、を有している。特定部501から分類判断部506の処理が、マスタOSにコーディングされている。CPU201−1が、フラッシュROM208に記憶されているOS221−1を読み出し、OS221−1にコーディングされている処理を実行する。これにより、特定部501から分類判断部506の機能が実現される。以下、特定部501から分類判断部506については、実施例1〜実施例6を用いて詳細に説明する。実施例1〜6では、n=4とし、l=10とし、m=10とする。また、実施例7については、図5で示すブロック図を包含するブロック図を用いて説明する。
(実施例1)
つぎに、実施例1について説明する。たとえ、選択された使用バンク数のスレッド群が各々のCPU201で同時に並列実行されても、バンク数不足に陥ることがないようにする。そこで、実施例1では、CPU201を順に選択して、並列実行時のスレッドの使用バンク数の総和が共有資源のバンク数を超えないようなCPU201を対象スレッドの割当先として検出する。これにより、共有資源へのアクセス競合によるスレッドの性能劣化の低減を図ることができる。
つぎに、実施例1について説明する。たとえ、選択された使用バンク数のスレッド群が各々のCPU201で同時に並列実行されても、バンク数不足に陥ることがないようにする。そこで、実施例1では、CPU201を順に選択して、並列実行時のスレッドの使用バンク数の総和が共有資源のバンク数を超えないようなCPU201を対象スレッドの割当先として検出する。これにより、共有資源へのアクセス競合によるスレッドの性能劣化の低減を図ることができる。
図6は、実施例1にかかる各CPU201の選択時の判断例を示す説明図である。まず、特定部501は、対象スレッド600のバンクの使用数と、各CPU201に割当済のスレッド601(601−1〜601−7)のバンクの使用数と、をスレッドテーブル300から特定する。ここで、対象スレッド600とは、たとえば、図2に示すOS221−1が起動指示を受け付けたスレッドである。
たとえば、特定部501は、割当テーブル400から、CPU201の識別情報に基づいて各CPU201に割当済のスレッド601の識別情報を抽出する。そして、たとえば、特定部501は、スレッドテーブル300から、対象スレッド600の識別情報と、抽出した各CPU201に割当済のスレッド601の識別情報に基づいて、それぞれのスレッドのバンクの使用数を特定する。各スレッドのRAM206のバンクの使用数が図6中のスレッドの括弧( )内に記述されている。
検出部502は、割当済のスレッド601の特定部501により特定されたバンクの使用数から最大値BをCPU201ごとに検出する。図6では、CPU201−1の最大値B1は3であり、CPU201−2の最大値B2は2であり、CPU201−3の最大値B3は2であり、CPU201−4の最大値B4は3である。
選択部503は、検出部502による検出後、マルチコアプロセッサから、順にCPU201を割当先候補として選択する。たとえば、選択部503は、CPU201の識別情報順に選択する。よって、選択部503は、CPU201−1→CPU201−2→CPU201−3→CPU201−4の順に選択する。
判断部504は、選択部503によりCPU201が選択される都度、選択されたCPU201の検出された最大値と対象スレッド600の特定されたバンクの使用数とのうちの大きい方の値を選択する。そして、判断部504は、選択した大きいほうの値と、選択されたCPU201以外のCPU201の検出された最大値との総和SUMが、RAM206のバンク数m以下であるか否かを判断する。たとえば、判断部504は、下記式(1)を算出する。
SUMi(i=1〜n)
=ΣB1,・・・,MAX(Bi,c),・・・,Bn・・・(1)
=ΣB1,・・・,MAX(Bi,c),・・・,Bn・・・(1)
MAX(Bi,c)は、選択されたCPU201の検出された最大値と対象スレッド600の特定されたバンクの使用数とのうちの大きい方の値である。そして、たとえば、判断部504は、総和SUMiがRAM206のバンク数m以下であるか否かを判断する。
はじめに、図6の左上に示すように、選択部503は、CPU201−1を選択する。このとき、総和SUM1(点線枠で囲われたスレッドの総バンク使用数)は10であるため、判断部504は、RAM206のバンク数m以下であると判断する。
つぎに、図6の右上に示すように、選択部503は、CPU201−2を選択する。このとき、総和SUM2(点線枠で囲われたスレッドの総バンク使用数)は11であるため、判断部504は、RAM206のバンク数m以下でないと判断する。
そして、図6の左下に示すように、選択部503は、CPU201−3を選択する。このとき、総和SUM3(点線枠で囲われたスレッドの総バンク使用数)は11であるため、判断部504は、RAM206のバンク数m以下でないと判断する。
最後に、図6の右下に示すように、選択部503は、CPU201−4を選択する。このとき、総和SUM4(点線枠で囲われたスレッドの総バンク使用数)は10であるため、判断部504は、RAM206のバンク数m以下であると判断する。
割当部505は、判断部504により総和SUMがRAM206のバンク数m以下であると判断されたCPU201に対象スレッド600を割り当てる。たとえば、割当部505は、CPU201−1またはCPU201−4に対象スレッド600を割り当てる。つぎに、総和SUMがRAM206のバンク数m以下であると判断された割当先候補が複数ある場合において、割当部505がいずれの割当先候補に割り当てるかについて図7を用いて説明する。
図7は、実施例1にかかる割当例を示す説明図である。たとえば、割当部505は、判断部504により総和SUMがRAM206のバンク数m以下であると判断されたCPU201−1とCPU201−4のそれぞれに割当済のスレッド601の処理時間の合計値を算出する。たとえば、割当部505は、スレッドテーブル300を参照することにより、割当済のスレッド601の処理時間を特定することができる。図7では、CPU201−1に割当済のスレッド601の処理時間の合計値は、50[ms]であり、CPU201−4に割当済のスレッド601の処理時間の合計値は、30[ms]であるため、対象スレッド600はCPU201−4に割り当てられる。
(実施例1にかかるマスタOSが行う処理手順)
図8は、実施例1にかかるマスタOSが行う処理手順を示すフローチャートである。まず、マスタOSが、スレッドの起動指示を受け付けたか否かを判断する(ステップS801)。マスタOSが、スレッドの起動指示を受け付けていないと判断した場合(ステップS801:No)、ステップS801へ戻る。
図8は、実施例1にかかるマスタOSが行う処理手順を示すフローチャートである。まず、マスタOSが、スレッドの起動指示を受け付けたか否かを判断する(ステップS801)。マスタOSが、スレッドの起動指示を受け付けていないと判断した場合(ステップS801:No)、ステップS801へ戻る。
マスタOSが、スレッドの起動指示を受け付けたと判断した場合(ステップS801:Yes)、特定部501により、CPU201ごとに割当済のスレッドのバンクの使用数を特定する(ステップS802)。そして、マスタOSが、特定部501により、起動指示を受け付けたスレッド(対象スレッド)のバンクの使用数cを特定し(ステップS803)、検出部502により、特定したバンクの使用数から、最大値B(1〜n)をCPU201ごとに検出する(ステップS804)。
つぎに、マスタOSが、選択部503により、i=1とし(ステップS805)、選択部503により、i≦CPU数であるか否かを判断する(ステップS806)。マスタOSが、i≦CPU数であると判断した場合(ステップS806:Yes)、i番目のCPU201を選択する(ステップS807)。マスタOSが、i番目のCPU201の最大値Biと対象スレッドの使用バンク数cのうち、大きい値(MAX(Bi,c))を選択する(ステップS808)。
そして、マスタOSが、SUMi=ΣB1,・・・,MAX(Bi,c),・・・,Bnを算出し(ステップS809)、総和SUMi≦RAM206のバンク数mであるか否かを判断する(ステップS810)。マスタOSが、総和SUMi≦RAM206のバンク数mであると判断した場合(ステップS810:Yes)、i番目のCPU201を割当先候補として検出し(ステップS811)、i=i+1とし(ステップS812)、ステップS806へ戻る。マスタOSが、総和SUMi≦RAM206のバンク数mでないと判断した場合(ステップS810:No)、ステップS812へ移行する。
ステップS806において、マスタOSが、i≦CPU数でないと判断した場合(ステップS806:No)、検出したCPU201ごとに割当済のスレッドの処理時間の合計値を算出する(ステップS813)。そして、マスタOSが、検出したCPU201の中で、算出した合計値が最小のCPU201に対象スレッドを割り当て(ステップS814)、ステップS801へ移行する。図示していないが、マスタOSは、割当結果を割当テーブル400に出力する。
実施例1によれば、複数のCPU201の中で、アクセス競合による性能劣化を低減させることができるCPU201に対象スレッドを割り当てることができる。さらに、総和SUMがRAM206のバンク数m以下となる割当先候補の数が複数ある場合、割当済のスレッドの処理時間が最小なコアに対象スレッドを割り当てる。これにより、RAM206へのアクセス競合による性能劣化を低減し、かつ負荷分散を行うことができる。
(実施例2)
つぎに、実施例2について説明する。実施例1では先頭のCPUから順に選択したが、実施例2では、複数のCPU201から、検出された最大値が大きい順にCPU201を割当先候補として選択する。最大値が大きい順であれば、対象スレッドの使用バンク数よりも大きい可能性が高く、無作為にCPU201を選択するよりも、並列実行時のスレッドの使用バンク数の総和に変化が生じにくい。したがって、アクセス競合による性能劣化の低減を図りつつ、対象スレッドの割当先を高速に決定することができる。
つぎに、実施例2について説明する。実施例1では先頭のCPUから順に選択したが、実施例2では、複数のCPU201から、検出された最大値が大きい順にCPU201を割当先候補として選択する。最大値が大きい順であれば、対象スレッドの使用バンク数よりも大きい可能性が高く、無作為にCPU201を選択するよりも、並列実行時のスレッドの使用バンク数の総和に変化が生じにくい。したがって、アクセス競合による性能劣化の低減を図りつつ、対象スレッドの割当先を高速に決定することができる。
図9は、実施例2にかかるCPU201の選択例を示す説明図である。図9では、スレッド901−1〜901−7がCPU201に割当済である。また、各スレッドのRAM206のバンクの使用数が図9中のスレッドの括弧( )内に記述されている。
まず、実施例2の特定部501と検出部502のそれぞれの処理は、実施例1で説明した処理と同一であるため、省略する。図9の例では、CPU201−1の最大値B1が4であり、CPU201−2の最大値B2が2であり、CPU201−3の最大値B3が1であり、CPU201−4の最大値B4が3である。
つぎに、選択部503は、検出部502によって検出された最大値Bが大きい順にCPU201を選択する。したがって、選択部503は、CPU201−1→CPU201−4→CPU201−2→CPU201−3の順で選択する。
はじめに、図9の左上に示すように、選択部503は、CPU201−1を選択する。このとき、総和SUM1(点線枠で囲われたスレッドの総バンク使用数)は10であるため、判断部504は、総和SUM1がRAM206のバンク数m以下であると判断する。
つぎに、図9の右上に示すように、選択部503は、CPU201−4を選択する。このとき、総和SUM4(点線枠で囲われたスレッドの総バンク使用数)は10であるため、判断部504は、総和SUM4がRAM206のバンク数m以下であると判断する。
そして、図9の中央下に示すように、選択部503は、CPU201−2を選択する。このとき、総和SUM2(点線枠で囲われたスレッドの総バンク使用数)は11であるため、判断部504は、総和SUM2がRAM206のバンク数m以下でないと判断する。
つぎに、検出部502によって検出されたCPU201−3の最大値がCPU201−2の最大値以下であるため、総和SUM3は総和SUM2未満となることがない。よって、判断部504は、総和SUM3を算出せずとも、総和SUM3がRAM206のバンク数m以下でないと判断する。
そして、割当部505は、CPU201−1またはCPU201−4のいずれか一方に対象スレッド900を割り当てる。割当部505については、実施例1で説明した処理と同一であるため、詳細な説明を省略する。
また、たとえば、割当部505は、総和SUMがRAM206のバンク数m以下でないと判断された時点で、すでに総和SUMがRAM206のバンク数m以下であると判断された割当先候補から対象スレッド900の割当先を決定してもよい。これにより、すべてのCPU201の選択時に対して判断部504の処理を行わずとも、並列実行時のスレッドの使用バンク数の総和が共有資源のバンク数を超えないようなCPU201を検出することができ、割当処理を高速化することができる。
(実施例2にかかるマスタOSが行う処理手順)
図10は、実施例2にかかるマスタOSが行う処理手順を示すフローチャートである。まず、マスタOSが、スレッドの起動指示を受け付けたか否かを判断する(ステップS1001)。マスタOSが、スレッドの起動指示を受け付けていないと判断した場合(ステップS1001:No)、ステップS1001へ戻る。
図10は、実施例2にかかるマスタOSが行う処理手順を示すフローチャートである。まず、マスタOSが、スレッドの起動指示を受け付けたか否かを判断する(ステップS1001)。マスタOSが、スレッドの起動指示を受け付けていないと判断した場合(ステップS1001:No)、ステップS1001へ戻る。
マスタOSが、スレッドの起動指示を受け付けたと判断した場合(ステップS1001:Yes)、特定部501により、CPU201ごとに割当済のスレッドのバンクの使用数を特定する(ステップS1002)。そして、マスタOSが、特定部501により、起動指示を受け付けたスレッド(対象スレッド)のバンクの使用数cを特定し(ステップS1003)、検出部502により、特定したバンクの使用数から、最大値B(1〜n)をCPU201ごとに検出する(ステップS1004)。
つぎに、マスタOSが、選択部503により、未選択のCPU201があるか否かを判断する(ステップS1005)。マスタOSが、未選択のCPU201があると判断した場合(ステップS1005:Yes)、未選択のCPU201のうち、検出された最大値が最も大きいCPU201(x番目のCPU201)を選択する(ステップS1006)。
マスタOSが、x番目のCPU201の最大値Bと対象スレッドの使用バンク数cのうち、大きい値(MAX(Bx,c))を選択する(ステップS1007)。マスタOSが、SUMx=ΣB1,・・・,MAX(Bx,c),・・・,Bnを算出し(ステップS1008)、総和SUMx≦RAM206のバンク数mであるか否かを判断する(ステップS1009)。マスタOSが、総和SUMx≦RAM206のバンク数mであると判断した場合(ステップS1009:Yes)、選択されたCPU201を割当先候補として検出し(ステップS1010)、ステップS1005へ移行する。
マスタOSが、総和SUMx≦RAM206のバンク数mでないと判断した場合(ステップS1009:No)、ステップS1011へ移行する。また、ステップS1005において、マスタOSが、未選択のCPU201がないと判断した場合(ステップS1005:No)、ステップS1011へ移行する。
そして、マスタOSが、検出したCPU201ごとに割当済のスレッドの処理時間の合計値を算出し(ステップS1011)、検出したCPU201の中で、算出した合計値が最小のCPU201に対象スレッドを割り当て(ステップS1012)、ステップS1001へ戻る。図示していないが、マスタOSは、割当結果を割当テーブル400に出力する。
実施例2によれば、使用バンク数の総和に変化が発生しにくいCPUから順に選択することで、アクセス競合による性能劣化の低減を図りつつ、対象スレッドの割当先CPUの決定を高速化することができる。
(実施例3)
つぎに、実施例3について説明する。実施例1や実施例2では、CPUを順に選択したが、実施例3では、検出された最大値が最大となるCPU201のみを選択する。検出された最大値が最も大きいCPU201であれば、対象スレッド1100の使用バンク数よりも大きい可能性が最も高いので並列実行時のスレッドの使用バンク数の総和に変化が生じにくい。したがって、アクセス競合による性能劣化の低減を図りつつ、対象スレッド1100の割当先を高速に決定することができる。
つぎに、実施例3について説明する。実施例1や実施例2では、CPUを順に選択したが、実施例3では、検出された最大値が最大となるCPU201のみを選択する。検出された最大値が最も大きいCPU201であれば、対象スレッド1100の使用バンク数よりも大きい可能性が最も高いので並列実行時のスレッドの使用バンク数の総和に変化が生じにくい。したがって、アクセス競合による性能劣化の低減を図りつつ、対象スレッド1100の割当先を高速に決定することができる。
図11は、実施例3にかかるCPU201の選択例を示す説明図である。図11では、スレッド1101−1〜1101−7がCPU201に割当済である。また、各スレッドのRAM206のバンクの使用数が図11中のスレッドの括弧( )内に記述されている。まず、実施例3の特定部501と検出部502のそれぞれの処理は、実施例1で説明した処理と同一であるため、省略する。
つぎに、選択部503は、検出部502により検出された最大値Bが最も大きいCPU201を選択する。図11の例では、CPU201−1の最大値B1が4であり、CPU201−2の最大値B2が2であり、CPU201−3の最大値B3が1であり、CPU201−4の最大値B4が3であるため、選択部503は、CPU201−1を選択する。
図11では、総和SUM1が10であるため、判断部504が、総和SUM1がRAM206のバンク数m以下であると判断する。そして、割当部505が、対象スレッド1100をCPU201−1に割り当てる。これにより、RAM206のアクセス競合による性能劣化の低減を図り、かつ割当処理を高速化することができる。
(実施例3にかかるマスタOSが行う処理手順)
図12は、実施例3にかかるマスタOSが行う処理手順を示すフローチャートである。まず、マスタOSが、スレッドの起動指示を受け付けたか否かを判断する(ステップS1201)。マスタOSが、スレッドの起動指示を受け付けていないと判断した場合(ステップS1201:No)、ステップS1201へ戻る。
図12は、実施例3にかかるマスタOSが行う処理手順を示すフローチャートである。まず、マスタOSが、スレッドの起動指示を受け付けたか否かを判断する(ステップS1201)。マスタOSが、スレッドの起動指示を受け付けていないと判断した場合(ステップS1201:No)、ステップS1201へ戻る。
マスタOSが、スレッドの起動指示を受け付けたと判断した場合(ステップS1201:Yes)、特定部501により、CPU201ごとに割当済のスレッドのバンクの使用数を特定する(ステップS1202)。そして、マスタOSが、特定部501により、起動指示を受け付けたスレッド(対象スレッド)のバンクの使用数cを特定し(ステップS1203)、検出部502により、特定したバンクの使用数から、最大値B(1〜n)をCPU201ごとに検出する(ステップS1204)。
つぎに、マスタOSが、選択部503により、検出された最大値Bが最大であるCPU201(x番目のCPU201)を選択する(ステップS1205)。マスタOSが、x番目のCPU201の最大値Bxと対象スレッドの使用バンク数cのうち、大きい値(MAX(Bx,c))を選択する(ステップS1206)。
マスタOSが、SUMx=ΣB1,・・・,MAX(Bx,c),・・・,Bnを算出し(ステップS1207)、総和SUMx≦RAM206のバンク数mであるか否かを判断する(ステップS1208)。マスタOSが、総和SUMx≦RAM206のバンク数mであると判断した場合(ステップS1208:Yes)、x番目のCPU201に対象スレッドを割り当て(ステップS1209)、ステップS1201へ戻る。
ステップS1208において、マスタOSが、総和SUMx≦RAM206のバンク数mでないと判断した場合(ステップS1208:No)、CPU201ごとに割当済のスレッドの処理時間の合計値を算出する(ステップS1210)。そして、マスタOSが、合計値が最小となるCPU201に対象スレッドを割り当て(ステップS1211)、ステップS1201へ戻る。図示していないが、マスタOSは、割当結果を割当テーブル400に出力する。
実施例3によれば、並列実行時のスレッドの使用バンク数の総和に最も変化が生じにくいCPU201を選択することで、アクセス競合による性能劣化の低減を図りつつ、対象スレッドの割当先CPUの決定を高速化することができる。
(実施例4)
つぎに、実施例4について説明する。実施例4では、どのCPU201を選択してもバンク数不足に陥る場合、並列実行時のスレッドの使用バンク数の総和が最小となるCPU201に割り当てる。これにより、アクセスの競合の発生を最小限に抑えることができる。
つぎに、実施例4について説明する。実施例4では、どのCPU201を選択してもバンク数不足に陥る場合、並列実行時のスレッドの使用バンク数の総和が最小となるCPU201に割り当てる。これにより、アクセスの競合の発生を最小限に抑えることができる。
図13は、実施例4にかかる割当例を示す説明図である。実施例4では、選択部503がいずれのCPU201を選択しても、判断部504が、総和SUMがRAM206のバンク数m以下でないと判断する場合について説明する。図13では、スレッド1301−1〜1301−7がCPU201に割当済である。また、各スレッドのRAM206のバンクの使用数が図13中のスレッドの括弧( )内に記述されている。
図13の左上で示すように、選択部503がCPU201−1を選択する。このとき、SUM1(点線枠で囲われたスレッドの総バンク使用数)が11であるため、判断部504は、SUM1がRAM206のバンク数m以下でないと判断する。
図13の右上で示すように、選択部503がCPU201−2を選択する。このとき、SUM2(点線枠で囲われたスレッドの総バンク使用数)が12であるため、判断部504は、SUM2がRAM206のバンク数m以下でないと判断する。
図13の左下で示すように、選択部503がCPU201−3を選択する。このとき、SUM3(点線枠で囲われたスレッドの総バンク使用数)が12であるため、判断部504は、SUM3がRAM206のバンク数m以下でないと判断する。
図13の右下で示すように、選択部503がCPU201−4を選択する。このとき、SUM4(点線枠で囲われたスレッドの総バンク使用数)が11であるため、判断部504は、SUM4がRAM206のバンク数m以下でないと判断する。
割当部505は、判断部504によりいずれのCPU201が選択部503により選択されても、総和SUMがRAM206のバンク数m以下でないと判断された場合、総和SUMが最小であるCPU201に対象スレッドを割り当てる。図13では、CPU201−1とCPU201−4の総和SUM1,4が11で最小の総和であるため、割当部505は、対象スレッド1300をCPU201−1またはCPU201−4に割り当てる。総和SUMが最小であるCPU201が複数ある場合、たとえば、割当部505は、割当済のスレッド1301の処理時間の合計値が最小なスレッドに割り当ててもよい。
(実施例4にかかるマスタOSが行う処理手順)
図14は、実施例4にかかるマスタOSが行う処理手順を示すフローチャートである。まず、マスタOSが、スレッドの起動指示を受け付けたか否かを判断する(ステップS1401)。マスタOSが、スレッドの起動指示を受け付けていないと判断した場合(ステップS1401:No)、ステップS1401へ戻る。
図14は、実施例4にかかるマスタOSが行う処理手順を示すフローチャートである。まず、マスタOSが、スレッドの起動指示を受け付けたか否かを判断する(ステップS1401)。マスタOSが、スレッドの起動指示を受け付けていないと判断した場合(ステップS1401:No)、ステップS1401へ戻る。
マスタOSが、スレッドの起動指示を受け付けたと判断した場合(ステップS1401:Yes)、特定部501により、CPU201ごとに割当済のスレッドのバンクの使用数を特定する(ステップS1402)。そして、マスタOSが、特定部501により、起動指示を受け付けたスレッド(対象スレッド)のバンクの使用数cを特定し(ステップS1403)、検出部502により、特定したバンクの使用数から、最大値B(1〜n)をCPU201ごとに検出する(ステップS1404)。
つぎに、マスタOSが、選択部503により、i=1とし(ステップS1405)、選択部503により、i≦CPU数であるか否かを判断する(ステップS1406)。マスタOSが、i≦CPU数であると判断した場合(ステップS1406:Yes)、i番目のCPU201を選択する(ステップS1407)。マスタOSが、i番目のCPU201の最大値Biと対象スレッドの使用バンク数cのうち、大きい値(MAX(Bi,c))を選択する(ステップS1408)。
そして、マスタOSが、SUMi=ΣB1,・・・,MAX(Bi,c),・・・,Bnを算出し(ステップS1409)、総和SUMi≦RAM206のバンク数mであるか否かを判断する(ステップS1410)。マスタOSが、総和SUMi≦RAM206のバンク数mであると判断した場合(ステップS1410:Yes)、i番目のCPU201を割当先候補として検出し(ステップS1411)、i=i+1とし(ステップS1412)、ステップS1406へ戻る。マスタOSが、総和SUMi≦RAM206のバンク数mでないと判断した場合(ステップS1410:No)、ステップS1412へ移行する。
ステップS1406において、マスタOSが、i≦CPU数でないと判断した場合(ステップS1406:No)、総和SUMがバンク数以下である割当先候補を検出したか否かを判断する(ステップS1413)。
マスタOSが、総和SUMがバンク数以下である割当先候補を検出したと判断した場合(ステップS1413:Yes)、検出したCPU201に対象スレッドを割り当て(ステップS1414)、ステップS1401へ戻る。マスタOSが、総和SUMがバンク数以下である割当先候補を検出していないと判断した場合(ステップS1413:No)、SUMが最小であるCPU201に対象スレッドを割り当て(ステップS1415)、ステップS1401へ戻る。図示していないが、マスタOSは、割当結果を割当テーブル400に出力する。
実施例4によれば、いずれのCPU201を割当先候補として選択してもバンク数不足に陥る場合、総和SUMが最小となるCPU201に対象スレッドを割り当てることで、アクセス競合の発生を可能な限り低減させることができる。アクセス競合の発生を低減させることで、RAM206内のデータのスワップ回数を減少させることができ、スレッドの性能劣化の低減を図ることができる。
(実施例5)
つぎに、実施例5について説明する。割当済のスレッドのバンクの使用数と対象スレッドのバンクの使用数との合計値がRAM206のバンク数m以下であれば、どのスレッドの並列処理の組み合わせであっても、バンク数不足に陥ることがない。このため、実施例5では、実施例1〜実施例4で挙げた処理の実行に先立って、スレッドの使用バンク数に関係なくスレッドを割り当てる。したがって、上記条件を満たした場合は、実施例1〜実施例4で挙げた処理を行わないため、割当処理の高速化を図ることができる。
つぎに、実施例5について説明する。割当済のスレッドのバンクの使用数と対象スレッドのバンクの使用数との合計値がRAM206のバンク数m以下であれば、どのスレッドの並列処理の組み合わせであっても、バンク数不足に陥ることがない。このため、実施例5では、実施例1〜実施例4で挙げた処理の実行に先立って、スレッドの使用バンク数に関係なくスレッドを割り当てる。したがって、上記条件を満たした場合は、実施例1〜実施例4で挙げた処理を行わないため、割当処理の高速化を図ることができる。
図15は、実施例5にかかる割当例を示す説明図である。実施例5では、対象スレッド1500と割当済のスレッド1501−1〜1501−7とのバンクの全使用数がRAM206のバンクの使用数以下の場合に、対象スレッド1500をいずれのCPU201に割り当ててもアクセス競合が発生しない。そこで、割当部505は、選択部503から判断部504の処理に先立って、対象スレッド1500をいずれかのCPU201に割り当てる。また、各スレッドのRAM206のバンクの使用数が図15中のスレッドの括弧( )内に記述されている。
まず、たとえば、割当部505が、特定部501により特定された対象スレッド1500のバンクの使用数と、各CPU201に割当済のスレッドのバンクの使用数と、の合計値を算出する。つぎに、たとえば、割当部505が、算出した合計値がRAM206のバンク数m以下であるか否かを判断する。図15の例では、全使用バンク数が9である。そして、割当部505は、算出した合計値がRAM206のバンク数m以下であると判断した場合、検出部502と判断部504の処理を行わずに、対象スレッド1500をいずれかのCPU201に割り当てる。
(実施例5にかかるマスタOSが行う処理手順)
図16および図17は、実施例5にかかるマスタOSが行う処理手順を示すフローチャートである。まず、マスタOSが、スレッドの起動指示を受け付けたか否かを判断する(ステップS1601)。マスタOSが、スレッドの起動指示を受け付けていないと判断した場合(ステップS1601:No)、ステップS1601へ戻る。
図16および図17は、実施例5にかかるマスタOSが行う処理手順を示すフローチャートである。まず、マスタOSが、スレッドの起動指示を受け付けたか否かを判断する(ステップS1601)。マスタOSが、スレッドの起動指示を受け付けていないと判断した場合(ステップS1601:No)、ステップS1601へ戻る。
マスタOSが、スレッドの起動指示を受け付けたと判断した場合(ステップS1601:Yes)、特定部501により、CPU201ごとに割当済のスレッドのバンクの使用数を特定する(ステップS1602)。そして、マスタOSが、特定部501により、起動指示を受け付けたスレッド(対象スレッド)のバンクの使用数cを特定する(ステップS1603)。マスタOSが、割当部505により、全使用バンク数=割当済のスレッドのバンクの使用数+対象スレッドのバンクの使用数cを算出し(ステップS1604)、算出した全使用バンク数≦RAM206のバンク数mであるか否かを判断する(ステップS1605)。
マスタOSが、全使用バンク数≦RAM206のバンク数mであると判断した場合(ステップS1605:Yes)、CPU201ごとに割当済のスレッドの処理時間の合計値を算出する(ステップS1606)。マスタOSが、CPU201の中で、算出した合計値が最小のCPU201に対象スレッドを割り当て(ステップS1607)、ステップS1601へ戻る。
マスタOSが、全使用バンク数≦RAM206のバンク数mでないと判断した場合(ステップS1605:No)、検出部502により、特定したバンクの使用数から、最大値B(1〜n)をCPU201ごとに検出する(ステップS1608)。
つぎに、マスタOSが、選択部503により、i=1とし(ステップS1609)、選択部503により、i≦CPU数であるか否かを判断する(ステップS1610)。マスタOSが、i≦CPU数であると判断した場合(ステップS1610:Yes)、i番目のCPU201を選択する(ステップS1611)。マスタOSが、i番目のCPU201の最大値Biと対象スレッドの使用バンク数cのうち、大きい値(MAX(Bi,c))を選択する(ステップS1612)。
そして、マスタOSが、SUMi=ΣB1,・・・,MAX(Bi,c),・・・,Bnを算出し(ステップS1613)、総和SUMi≦RAM206のバンク数mであるか否かを判断する(ステップS1614)。マスタOSが、総和SUMi≦RAM206のバンク数mであると判断した場合(ステップS1614:Yes)、i番目のCPU201を割当先候補として検出し(ステップS1615)、i=i+1とし(ステップS1616)、ステップS1610へ戻る。マスタOSが、総和SUMi≦RAM206のバンク数mでないと判断した場合(ステップS1614:No)、ステップS1616へ移行する。
ステップS1610において、マスタOSが、i≦CPU数でないと判断した場合(ステップS1610:No)、検出したCPU201ごとに割当済のスレッドの処理時間の合計値を算出する(ステップS1617)。そして、マスタOSが、検出したCPU201の中で、算出した合計値が最小のCPU201に対象スレッドを割り当て(ステップS1618)、ステップS1601へ移行する。図示していないが、マスタOSは、割当結果を割当テーブル400に出力する。
実施例5によれば、どのスレッドの組み合わせで並列処理されても、バンク数不足に陥ることがないため、割当処理の高速化を図ることができる。
(実施例6)
つぎに、実施例6について説明する。実行されるスレッドによっては、アクセス先となる共有資源へのアクセス頻度が異なったりする場合がある。このように性質が異なるスレッドに対して一律に割り当て処理を行うと、スレッドの性質に合致しない割り当てがなされ、バンク不足によるアクセス競合が発生する場合がある。このため、実施例6では、事前にスレッドを種類ごとに分類し、分類されたスレッド群で割り当てを行うことで、スレッドの性質に応じて、アクセス競合の発生による性能劣化の低減を図る。
つぎに、実施例6について説明する。実行されるスレッドによっては、アクセス先となる共有資源へのアクセス頻度が異なったりする場合がある。このように性質が異なるスレッドに対して一律に割り当て処理を行うと、スレッドの性質に合致しない割り当てがなされ、バンク不足によるアクセス競合が発生する場合がある。このため、実施例6では、事前にスレッドを種類ごとに分類し、分類されたスレッド群で割り当てを行うことで、スレッドの性質に応じて、アクセス競合の発生による性能劣化の低減を図る。
実施例6では、スレッドをA〜Cに分類している。Cに分類されたスレッドは、たとえば、図2示すRAM206へのアクセスに関する第1の条件に分類されたスレッドである。ここで、第1の条件とは、たとえば、RAM206へのアクセス頻度が高いか否かに関する条件である。Bに分類されたスレッドは、たとえば、第1の条件を満たさず、図2に示す2次キャッシュ202へのアクセスに関する第2の条件に分類されたスレッドである。ここで、第2の条件とは、たとえば、2次キャッシュ202へのアクセス頻度が高いか否かである。Aに分類されたスレッドは、たとえば、1次キャッシュ261へのアクセスが多いスレッドであり、第1の条件と第2の条件を満たさないスレッドである。
また、Cに分類されたスレッドは、RAM206へのアクセス頻度が高いので、2次キャッシュ202や1次キャッシュ2611へのアクセス頻度も高い。Bに分類されたスレッドは、RAM206へのアクセス頻度は低いが、2次キャッシュ202へのアクセス頻度が高いので、1次キャッシュ2611へのアクセス頻度も高い。
ここで、各スレッドのA〜Cへの分類について説明する。マルチコアプロセッサシステム200の2次キャッシュ202の容量、RAM206の容量、2次キャッシュ202のバンク数l、RAM206のバンク数m、それぞれのバンクサイズがあらかじめわかっていることとする。マルチコアプロセッサシステム200のモデルを用いて、各スレッドのメモリアクセス領域がシミュレーションツールによって計測されることにより、各スレッドのバンクの使用量が算出される。また、スレッドのバンクの使用量は、各スレッドの実行中に算出された値でもよい。これにより、各スレッドの設計者が、算出されたバンクの使用量に基づいてスレッドをA〜Cのいずれかに分類する。たとえば、第1の条件とは、RAM206へのアクセス頻度が数百回以上であり、RAM206のバンクの使用数が2以上であるが挙げられる。たとえば、第2の条件は、第1の条件を満たさないが、2次キャッシュ202へのアクセス頻度が数百回以上であり、2次キャッシュ202のバンクの使用数が2以上であるなどが挙げられる。また、スレッドのバンクの使用量と同時に各スレッドの処理時に要した処理時間が計測されてもよい。
(実施例6にかかるスレッドテーブル)
図18は、実施例6にかかるスレッドテーブルの一例を示す説明図である。スレッドテーブル1800は、スレッドID、分類、処理時間、使用数1、使用数2のフィールドを有している。各フィールドに値が設定されることで、スレッド情報(たとえば、1801−1)がレコードとして記憶される。
図18は、実施例6にかかるスレッドテーブルの一例を示す説明図である。スレッドテーブル1800は、スレッドID、分類、処理時間、使用数1、使用数2のフィールドを有している。各フィールドに値が設定されることで、スレッド情報(たとえば、1801−1)がレコードとして記憶される。
スレッドIDのフィールドには、スレッドの識別情報が登録される。分類のフィールドには、各スレッドがA〜Cのうちのいずれに分類されているかが登録されている。処理時間のフィールドには、各スレッドの処理時間が登録される。使用数1のフィールドには、RAM206の複数のバンクのうちのスレッドが使用するバンクの使用数が登録される。使用数2のフィールドには、2次キャッシュ202の複数のバンクのうちのスレッドが使用するバンクの使用数が登録される。スレッドテーブル1800については、たとえば、フラッシュROM208に記憶されていることとする。
図19は、対象スレッドがAに分類されている場合の例を示す説明図である。まず、分類判断部506が、対象スレッド1900の分類を特定する。たとえば、分類判断部506は、スレッドテーブル1800から、対象スレッド1900の識別情報に基づいて対象スレッド1900に関するスレッド情報の分類のフィールドに登録されている情報を特定する。図19では、対象スレッド1900は、Aに分類されていることが示されている。
割当部505は、分類判断部506により対象スレッド1900の分類がAであると判断された場合、特定部501と検出部502と判断部504との処理を行わずに、マルチコアプロセッサからいずれのスレッドも割り当てられていないCPU201を特定する。そして、割当部505は、特定したCPU201に対象スレッド1900を割り当てる。
たとえば、割当部505は、対象スレッド1900の分類がAである場合、各CPU201の識別情報に基づいて割当テーブル400を参照することにより、いずれのスレッドも割り当てられていないCPU201を特定する。そして、たとえば、割当部505は、特定したCPU201に対象スレッド1900を割り当てる。図19の例では、割当部505は、CPU201−4をいずれのスレッドも割り当てられていないCPU201として特定し、対象スレッド1900をCPU201―4に割り当てる。
図19の例では、対象スレッド1900のアクセス頻度は低い。そのため、割当部505がいずれのスレッドも割り当てられていないCPU201−4に対象スレッド1900を割り当てても、割当済のスレッド1901からRAM206や2次キャッシュ202へのアクセスに対する影響が低い。そして、対象スレッド1900がいずれのスレッドも割り当てられていないCPU201−4に割り当てられることで、CPU201−4では他のスレッドとの切り替え処理がない。そのため、CPU201−4の1次キャッシュ261には対象スレッド1900に関するデータを多く記憶させることができるため、対象スレッド1900のキャッシュヒット率を向上させることができる。
図20は、対象スレッドがCに分類されている場合の例を示す説明図である。分類判断部506が、対象スレッド2000の分類を特定する。たとえば、分類判断部506は、スレッドテーブル1800から、対象スレッド2000の識別情報に基づいて対象スレッド2000に関するスレッド情報の分類のフィールドに登録されている情報を特定する。
特定部501が、分類判断部506により対象スレッド2000がCに分類されていると判断された場合、スレッドテーブル1800から、対象スレッド2000のRAM206のバンクの使用数を特定する。さらに、特定部501が、割当済のスレッド2001のRAM206のバンクの使用数を特定する。各スレッドのRAM206のバンクの使用数が図20中のスレッドの括弧( )内に記述されている。
また、検出部502、選択部503、判断部504、割当部505の処理については、実施例1〜5で説明した処理と同一であるため、ここでは、簡易的な例を挙げて説明する。図20では、たとえば、選択部503が、割当先候補としてCPU201−1を選択する。総和SUM1(点線枠で囲われたスレッドのRAM206の総バンク使用数)が10であり、判断部504は、SUM1がRAM206のバンク数m以下であると判断する。そして、割当部505は、対象スレッド2000をCPU201−1に割り当てる。
図21は、対象スレッドがBに分類されている場合の例1を示す説明図である。図21の例1では、対象スレッド2100の分類がBであり、かつ割当済のスレッド2101の分類がすべてBの場合について説明する。分類判断部506が、対象スレッド2100の分類を特定する。たとえば、分類判断部506は、スレッドテーブル1800から、対象スレッド2100の識別情報に基づいて対象スレッド2100に関するスレッド情報の分類のフィールドに登録されている情報を特定する。そして、分類判断部506は、対象スレッド2100の分類がBであると判断した場合、割当済のスレッド2101の分類を特定する。たとえば、分類判断部506は、スレッドテーブル1800から、割当済のスレッド2101の識別情報に基づいて割当済のスレッド2101に関するスレッド情報の分類のフィールドに設定されている情報を特定する。
特定部501が、分類判断部506により対象スレッド2100の分類がBであり、かつ割当済のスレッド2101の中に分類がCのスレッドがないと判断された場合、対象スレッド2100の2次キャッシュ202のバンクの使用数を特定する。さらに、特定部501が、割当済のスレッド2101の2次キャッシュ202のバンクの使用数を特定する。2次キャッシュ202のバンクの使用数が図21中のスレッドの括弧( )内に記述されている。
また、検出部502、選択部503、判断部504、割当部505の処理については、実施例1〜5で説明した処理と同一であるため、ここでは、簡易的な例を挙げて説明する。図21では、選択部503が、たとえば、割当先候補としてCPU201−1を選択する。総和SUM1(点線枠で囲われたスレッドの2次キャッシュ202の総バンク使用数)が10であり、判断部504は、たとえば、SUM1が2次キャッシュ202のバンク数l以下であると判断する。そして、割当部505は、たとえば、対象スレッド2100をCPU201−1に割り当てる。
図22は、対象スレッドがBに分類されている場合の例2を示す説明図である。図22の例2では、対象スレッド2200の分類がBであっても、割当済のスレッド2201の中に、分類がCのスレッドがある場合について説明する。分類がCであるスレッドと分類がBであるスレッドが並列実行された場合に、RAM206のバンク不足が発生すると、RAM206は2次キャッシュ202より容量が大きいため、2次キャッシュ202のバンク不足も発生する。よって、図22の例2では、対象スレッド2200の分類がBであっても、RAM206のバンク不足が発生しないように対象スレッド2200を割り当てることとする。
たとえば、分類判断部506は、スレッドテーブル1800から、対象スレッド2200の識別情報に基づいて対象スレッド2200に関するスレッド情報の分類のフィールドに登録されている情報を特定する。そして、分類判断部506は、対象スレッド2200の分類がBであると判断した場合、割当済のスレッド2201の分類を特定する。たとえば、分類判断部506は、スレッドテーブル1800から、割当済のスレッド2201の識別情報に基づいて割当済のスレッド2201に関するスレッド情報の分類のフィールドに設定されている情報を特定する。
つぎに、たとえば、特定部501が、対象スレッド2200の分類がBであっても、割当済のスレッド2201の中にCに分類されているスレッドがある場合、スレッドテーブル1800から対象スレッド2200のRAM206のバンクの使用数を特定する。
そして、特定部501が、スレッドテーブル1800から割当済のスレッド2201のRAM206のバンクの使用数を特定する。各スレッドの2次キャッシュ202のバンクの使用数が図22中のスレッドの括弧( )内に記述されている。
また、検出部502、選択部503、判断部504、割当部505の処理については、実施例1〜5で説明した処理と同一であるため、ここでは、簡易的な例を挙げて説明する。図22では、選択部503が、たとえば、割当先候補としてCPU201−4を選択する。総和SUM4(点線枠で囲われたスレッドのRAM206の総バンク使用数)が10であり、判断部504は、たとえば、SUM4がRAM206のバンク数m以下であると判断する。そして、割当部505は、たとえば、対象スレッド2200をCPU201−4に割り当てる。
また、図示していないが、対象スレッドの分類がB,Cの場合に、割当済のスレッドの中の分類がAであるスレッドについては、共有資源へのアクセス頻度が低いため、特定部501による共有資源の使用バンク数の特定対象となるスレッドから除外してもよい。
(実施例6にかかるマスタOSが行う処理手順)
図23は、実施例6にかかるマスタOSが行う処理手順の一例を示すフローチャートである。まず、マスタOSが、スレッドの起動指示を受け付けたか否かを判断する(ステップS2301)。マスタOSが、スレッドの起動指示を受け付けていないと判断した場合(ステップS2301:No)、ステップS2301へ戻る。
図23は、実施例6にかかるマスタOSが行う処理手順の一例を示すフローチャートである。まず、マスタOSが、スレッドの起動指示を受け付けたか否かを判断する(ステップS2301)。マスタOSが、スレッドの起動指示を受け付けていないと判断した場合(ステップS2301:No)、ステップS2301へ戻る。
マスタOSが、スレッドの起動指示を受け付けたと判断した場合(ステップS2301:Yes)、各CPU201で実行中のスレッドおよび実行待機中のスレッドと起動指示を受け付けたスレッドを割当未決定キューへ分類順に登録する(ステップS2302)。これにより、実行中のスレッドや実行待機中のスレッドであっても、マスタOSが再割り当てすることができる。
そして、マスタOSが、割当未決定キューに登録された分類がCのスレッドのRAM206のバンクの使用数を特定し、割当未決定キューに登録された分類がCのスレッドをRAM206のバンクの使用数順にソートする(ステップS2303)。これにより、RAM206のバンクの使用数が大きいスレッドの割当先CPUを先に決定することができる。
そして、マスタOSが、割当未決定キューに登録された分類がBのスレッドの2次キャッシュ202のバンクの使用数を特定し、割当未決定キューに登録された分類がBのスレッドを2次キャッシュ202のバンクの使用数順にソートする(ステップS2304)。これにより、2次キャッシュ202のバンクの使用数が大きいスレッドの割当先CPUを先に決定することができる。
そして、マスタOSが、割当未決定キューが空か否かを判断し(ステップS2305)、割当未決定キューが空であると判断した場合(ステップS2305:Yes)、ステップS2301へ戻る。マスタOSが、割当未決定キューが空でないと判断した場合(ステップS2305:No)、割当未決定キューの先頭からスレッドを取り出す(ステップS2306)。
そして、マスタOSが、取り出されたスレッドの分類は何か判断する(ステップS2307)。マスタOSが、取り出されたスレッドの分類がAであると判断した場合(ステップS2307:A)、Aの割当処理を実行し(ステップS2308)、ステップS2305へ戻る。
マスタOSが、取り出されたスレッドの分類がBであると判断した場合(ステップS2307:B)、割当済のスレッドのうち、分類がCのスレッドがあるか否かを判断する(ステップS2309)。マスタOSが、割当済のスレッドのうち、分類がCのスレッドがないと判断した場合(ステップS2309:No)、Bの割当処理を実行し(ステップS2310)、ステップS2305へ戻る。
ステップS2307において、マスタOSが、取り出されたスレッドの分類がCの場合(ステップS2307:C)、ステップS2311へ移行する。ステップS2309において、マスタOSが、割当済のスレッドのうち、分類がCのスレッドがあると判断した場合(ステップS2309:Yes)、ステップS2311へ移行する。ステップS2307のCの場合またはステップS2309のYesの場合のつぎに、マスタOSが、Cの割当処理を実行し(ステップS2311)、ステップS2305へ戻る。
図24は、図23で示したAの割当処理(ステップS2308)の詳細な説明を示すフローチャートである。まず、マスタOSが、いずれのスレッドも割り当てられていないCPU201を検出し(ステップS2401)、検出したか否かを判断する(ステップS2402)。
マスタOSが、いずれのスレッドも割り当てられていないCPU201を検出したと判断した場合(ステップS2402:Yes)、検出したCPU201に取り出されたスレッドを割り当て(ステップS2403)、S2305へ戻る。
マスタOSが、いずれのスレッドも割り当てられていないCPU201を検出していないと判断した場合(ステップS2402:No)、CPU201ごとに割当済のスレッドの処理時間の合計値を算出する(ステップS2404)。そして、マスタOSが、算出した合計値が最小のCPU201に取り出されたスレッドを割り当て(ステップS2405)、ステップS2305へ移行する。そして、図示していないが、マスタOSが割当結果を割当テーブル400に出力する。また、取り出されたスレッドが実行中または実行待機状態のスレッドであり、割当先が変更されれば、マスタOSはマイグレーションを行う。
図25は、図23で示したBの割当処理(ステップS2310)の詳細な処理手順を示すフローチャートである。マスタOSが、特定部501により、CPU201ごとに割当済のスレッドの2次キャッシュ202のバンクの使用数を特定する(ステップS2501)。そして、マスタOSが、特定部501により、取り出されたスレッド(対象スレッド)の2次キャッシュ202のバンクの使用数cを特定し(ステップS2502)、検出部502により、特定したバンクの使用数から、最大値B(1〜n)をCPU201ごとに検出する(ステップS2503)。
つぎに、マスタOSが、選択部503により、i=1とし(ステップS2504)、選択部503により、i≦CPU数であるか否かを判断する(ステップS2505)。マスタOSが、i≦CPU数であると判断した場合(ステップS2505:Yes)、i番目のCPU201を選択する(ステップS2506)。マスタOSが、i番目のCPU201の最大値Biと対象スレッドの2次キャッシュ202の使用バンク数cのうち、大きい値(MAX(Bi,c))を選択する(ステップS2507)。
そして、マスタOSが、SUMi=ΣB1,・・・,MAX(Bi,c),・・・,Bnを算出し(ステップS2508)、SUMi≦2次キャッシュ202のバンク数lであるか否かを判断する(ステップS2509)。マスタOSが、総和SUMi≦2次キャッシュ202のバンク数lであると判断した場合(ステップS2509:Yes)、i番目のCPU201を割当先候補として検出し(ステップS2510)、i=i+1とし(ステップS2511)、ステップS2505へ戻る。マスタOSが、総和SUMi≦2次キャッシュ202のバンク数lでないと判断した場合(ステップS2509:No)、ステップS2511へ移行する。
ステップS2505において、マスタOSが、i≦CPU数でないと判断した場合(ステップS2505:No)、検出したCPU201ごとに割当済のスレッドの処理時間の合計値を算出する(ステップS2512)。そして、マスタOSが、検出したCPU201の中で、算出した合計値が最小のCPU201に対象スレッドを割り当て(ステップS2513)、ステップS2305へ移行する。そして、図示していないが、マスタOSが割当結果を割当テーブル400に出力する。また、対象スレッドが実行中または実行待機状態のスレッドであり、割当先が変更されれば、マスタOSはマイグレーションを行う。
図26は、図23で示したCの割当処理(ステップS2311)の詳細な処理手順を示すフローチャートである。マスタOSが、特定部501により、CPU201ごとに割当済のスレッドのRAM206のバンクの使用数を特定する(ステップS2601)。そして、マスタOSが、特定部501により、取り出されたスレッド(対象スレッド)のRAM206のバンクの使用数cを特定し(ステップS2602)、検出部502により、特定したバンクの使用数から、最大値B(1〜n)をCPU201ごとに検出する(ステップS2603)。
つぎに、マスタOSが、選択部503により、i=1とし(ステップS2604)、選択部503により、i≦CPU数であるか否かを判断する(ステップS2605)。マスタOSが、i≦CPU数であると判断した場合(ステップS2605:Yes)、i番目のCPU201を選択する(ステップS2606)。マスタOSが、i番目のCPU201の最大値Biと対象スレッドのRAM206の使用バンク数cのうち、大きい値(MAX(Bi,c))を選択する(ステップS2607)。
そして、マスタOSが、SUMi=ΣB1,・・・,MAX(Bi,c),・・・,Bnを算出し(ステップS2608)、総和SUMi≦RAM206のバンク数mであるか否かを判断する(ステップS2609)。マスタOSが、総和SUMi≦RAM206のバンク数mであると判断した場合(ステップS2609:Yes)、i番目のCPU201を割当先候補として検出し(ステップS2610)、i=i+1とし(ステップS2611)、ステップS2605へ戻る。マスタOSが、総和SUMi≦RAM206のバンク数mでないと判断した場合(ステップS2609:No)、ステップS2611へ移行する。
ステップS2605において、マスタOSが、i≦CPU数でないと判断した場合(ステップS2605:No)、検出したCPU201ごとに割当済のスレッドの処理時間の合計値を算出する(ステップS2612)。そして、マスタOSが、検出したCPU201の中で、算出した合計値が最小のCPU201に対象スレッドを割り当て(ステップS2613)、ステップS2305へ移行する。そして、図示していないが、マスタOSが割当結果を割当テーブル400に出力する。また、対象スレッドが実行中または実行待機状態のスレッドであり、割当先が変更されれば、マスタOSはマイグレーションを行う。
実施例6によれば、事前にスレッドを種類ごとに分類し、分類されたスレッド群で割り当てを行うことで、スレッドの性質に応じて、アクセス競合の発生による性能劣化の低減を図ることができる。
(実施例7)
つぎに、実施例7について説明する。アクセス競合を重視してスレッドを割り当てると、各スレッドの割り当て状態によっては、アクセス競合を無視してスレッドを割り当てた場合よりもスレッドの処理時間が長くなってしまう場合がある。このため、実施例7では、アクセス競合が発生しないように割り当てる第1のスケジューリングと、第1のスケジューリングと異なる第2のスケジューリングと、のうち、いずれのスケジューリングが最適かを判断する。これにより、第1のスケジューリングが選択された場合は、アクセス競合による対象スレッドの性能劣化の低減を図ることができる。第2のスケジューリングが選択された場合は、同一のCPU201に割り当てられたスレッドによる対象スレッドの性能劣化の低減を図ることができる。
つぎに、実施例7について説明する。アクセス競合を重視してスレッドを割り当てると、各スレッドの割り当て状態によっては、アクセス競合を無視してスレッドを割り当てた場合よりもスレッドの処理時間が長くなってしまう場合がある。このため、実施例7では、アクセス競合が発生しないように割り当てる第1のスケジューリングと、第1のスケジューリングと異なる第2のスケジューリングと、のうち、いずれのスケジューリングが最適かを判断する。これにより、第1のスケジューリングが選択された場合は、アクセス競合による対象スレッドの性能劣化の低減を図ることができる。第2のスケジューリングが選択された場合は、同一のCPU201に割り当てられたスレッドによる対象スレッドの性能劣化の低減を図ることができる。
ここで、実施例7では、第2のスケジューリングの一例として、負荷分散によるスケジューリングを挙げる。n=2とし、l=2とし、m=3とする。
(実施例7にかかるスレッドテーブル)
図27は、実施例7にかかるスレッドテーブルの一例を示す説明図である。スレッドテーブル2700は、スレッドID、分類、処理時間、アクセス時間の割合、使用数1、使用数2のフィールドを有している。各フィールドに値が設定されることで、スレッド情報(たとえば、2701−1)がレコードとして記憶される。
図27は、実施例7にかかるスレッドテーブルの一例を示す説明図である。スレッドテーブル2700は、スレッドID、分類、処理時間、アクセス時間の割合、使用数1、使用数2のフィールドを有している。各フィールドに値が設定されることで、スレッド情報(たとえば、2701−1)がレコードとして記憶される。
スレッドIDのフィールドには、スレッドの識別情報が登録される。分類のフィールドには、各スレッドがA〜Cのうちのいずれに分類されているかが登録されている。処理時間のフィールドには、各スレッドの処理時間が登録される。アクセス時間の割合のフィールドには、スレッドの処理時間のうち、RAM206へのアクセスにかける時間の割合が登録される。アクセス時間の割合については、各スレッドの設計時にシミュレーションツールによりあらかじめ計測されていることとする。また、各スレッドのアクセス時間の割合は、各スレッドの実行時に計測されてもよい。実施例7では、アクセス時間の割合をRAM206と2次キャッシュ202とで共通の割合を用いているが、より正確にオーバーヘッドを見積もるために、2次キャッシュ202へのアクセスにかかる時間の割合もあらかじめ計測しておいてもよい。
使用数1のフィールドには、RAM206の複数のバンクのうちのスレッドが使用するバンクの使用数が登録される。使用数2のフィールドには、2次キャッシュ202の複数のバンクのうちのスレッドが使用するバンクの使用数が登録される。スレッドテーブル2700については、たとえば、フラッシュROM208に記憶されていることとする。
(実施例7にかかる割当テーブル)
図28は、実施例7にかかる割当テーブルの一例を示す説明図である。割当テーブル2800は、CPUID、スレッドID、処理経過時間のフィールドを有している。各フィールドに値が設定されることで、スレッド情報(たとえば、2801−1)がレコードとして記憶される。
図28は、実施例7にかかる割当テーブルの一例を示す説明図である。割当テーブル2800は、CPUID、スレッドID、処理経過時間のフィールドを有している。各フィールドに値が設定されることで、スレッド情報(たとえば、2801−1)がレコードとして記憶される。
CPUIDのフィールドには、CPU201の識別情報が登録される。スレッドIDのフィールドには、各CPU201に割り当てられたスレッドの識別情報が登録される。処理経過時間のフィールドには、実行中のスレッドの経過時間が登録される。割当テーブル2800は、フラッシュROM208に記憶されていることとする。
(アクセス競合のオーバーヘッド情報)
図29は、アクセス競合のオーバーヘッド情報の一例を示す説明図である。アクセス競合のオーバーヘッド情報2900は、競合発生レイヤー、オーバーヘッド割合のフィールドを有している。各フィールドに値が設定されることにより、割合情報(たとえば、2901−1,2901−2)がレコードとして記憶される。
図29は、アクセス競合のオーバーヘッド情報の一例を示す説明図である。アクセス競合のオーバーヘッド情報2900は、競合発生レイヤー、オーバーヘッド割合のフィールドを有している。各フィールドに値が設定されることにより、割合情報(たとえば、2901−1,2901−2)がレコードとして記憶される。
競合発生レイヤーのフィールドには、2次キャッシュ202とRAM206が登録されている。オーバーヘッド割合のフィールドには、2次キャッシュ202でアクセスが競合した場合の処理時間の増加率RL2と、RAM206でアクセスが競合した場合の処理時間の増加率RMが登録されている。
増加率RMと増加率RL2については、各スレッドの設計時にシミュレーションツールによりあらかじめ計測されていることとする。たとえば、設計者がパターン1〜3のシミュレーションを行う。たとえば、パターン1では、スレッドの実行時に2次キャッシュ202およびRAM206でのアクセス競合を発生させない。たとえば、パターン2では、スレッドの実行時に常時2次キャッシュ202でアクセス競合を発生させる。たとえば、パターン3では、スレッドの実行時に常時RAM206でアクセス競合を発生させる。そして、たとえば、設計者が、パターン1のシミュレーション結果とパターン2のシミュレーション結果を比較することにより、増加率RL2を決定する。たとえば、設計者が、パターン1のシミュレーション結果とパターン3のシミュレーション結果を比較することにより、増加率RMを決定する。
(実施例7にかかるOS221の機能例を示すブロック図)
図30は、実施例7にかかるOS221の機能例を示すブロック図である。ここでは、実施例7にかかるOS221−1の機能例を示すブロック図と、OS221−k(k=1〜n)の機能例を示すブロック図を挙げる。OS221−1は、第1のスケジューリング部3001と、第2のスケジューリング部3002と、切替部3006と、第1の算出部3003と、第2の算出部3004と、比較部3005と、を有している。OS221−k(k=1〜n)は、計測部3020−kを有している。
図30は、実施例7にかかるOS221の機能例を示すブロック図である。ここでは、実施例7にかかるOS221−1の機能例を示すブロック図と、OS221−k(k=1〜n)の機能例を示すブロック図を挙げる。OS221−1は、第1のスケジューリング部3001と、第2のスケジューリング部3002と、切替部3006と、第1の算出部3003と、第2の算出部3004と、比較部3005と、を有している。OS221−k(k=1〜n)は、計測部3020−kを有している。
第1のスケジューリング部3001から比較部3005の処理が、マスタOSであるOS221−1にコーディングされている。CPU201−1が、フラッシュROM208に記憶されているOS221−1を読み出し、OS221−1にコーディングされている処理を実行する。これにより、第1のスケジューリング部3001から比較部3005の機能が実現される。計測部3020−kの処理がOS221−kにコーディングされており、CPU201−kが、フラッシュROM208に記憶されているOS221−kを読み出し、OS221−kにコーディングされている処理を実行する。これにより、計測部3020−kの機能が実現される。以下、第1のスケジューリング部3001から比較部3005について図31〜図33を用いて詳細に説明する。
図31は、第1,2のスケジューリングによる割当例を示す説明図である。ここで、図31では、CPU201−1にスレッド3101が割り当てられ、CPU201−2にスレッド3102が割り当てられている。そして、ウエイトキュー250にスレッド3103とスレッド3104が積まれることにより、OS221−1がスレッド3101とスレッド3104の起動指示を受け付ける。スレッド3101の分類はBであり、スレッド3102の分類はCであり、スレッド3103の分類はCであり、スレッド3104の分類はCである。
第1のスケジューリング部3001は、図5で示した特定部501〜分類判断部506を有していることとする。第1のスケジューリング部3001については、実施例1〜6で説明した処理と同一であるとし詳細な説明を省略する。ここで、第1のスケジューリング部3001による第1のスケジューリングでは、CPU201−1にスレッド3101とスレッド3104が割り当てられ、CPU201−2にスレッド3103とスレッド3102が割り当てられる。
第2のスケジューリング部3002は、第1のスケジューリング部3001によるスケジューリングと異なる第2のスケジューリングを行う。ここでは、第2のスケジューリングの一例として、負荷分散によるスケジューリングを示す。たとえば、第2のスケジューリング部3002は、起動指示を受け付けたスレッドと各CPU201で実行中のスレッドおよび実行待機中のスレッドをすべて割当未決定キューに登録する。そして、第2のスケジューリング部3002は、割当未決定キューに登録されているスレッドを処理時間または残処理時間の短い順に対象スレッドとして選択する。残処理時間とは、割当テーブル2800に登録される処理経過時間とスレッドテーブル2700に登録されている処理時間の差分値である。
そして、たとえば、第2のスケジューリング部3002は、算出部3011と割当部3012を有している。第2のスケジューリング部3002の算出部3011は、第2のスケジューリング部3002による割り当てにおいて、割当済のスレッドの処理時間または残処理時間の合計値をCPU201ごとに算出する。そして、第2のスケジューリング部3002の割当部3012は算出部3011により算出された合計値が最小のCPU201に対象スレッドを割り当てる。第2のスケジューリング部3002による第2のスケジューリングでは、CPU201−1にスレッド3101とスレッド3102が割り当てられ、CPU201−2にスレッド3104とスレッド3103が割り当てられる。
また、たとえば、計測部3020−k(k=1〜n)は、スレッドのディスパッチが発生する都度、スレッドの実行開始時刻からのスレッドの処理経過時間を計測する。計測結果については、割当テーブル2800の処理経過時間のフィールドに設定される。
図32は、算出の一の例を示す説明図である。第1の算出部3003は、第1のスケジューリング部3001による第1のスケジューリングにおいて、CPU201ごとに割当済のスレッドの処理時間または残処理時間の合計値を算出する。残処理時間は、処理時間から計測部3020−kによって計測された処理経過時間を引いた値である。
ここで、実行中であるスレッド3101とスレッド3102については、残処理時間と、2次キャッシュ202のバンクの使用数と、RAM206のバンクの使用数と、の一例を挙げる。さらに、起動指示が発生したスレッド3103とスレッド3104については、処理時間と、2次キャッシュ202のバンクの使用数と、RAM206のバンクの使用数と、の一例を挙げる。
スレッド3101の残処理時間は1.8[ms]であり、スレッド3101の2次キャッシュ202のバンクの使用数は1であり、スレッド3101のRAM206のバンクの使用数は1である。
スレッド3102の残処理時間は2[ms]であり、スレッド3102の2次キャッシュ202のバンクの使用数は2であり、スレッド3102のRAM206のバンクの使用数は2である。
スレッド3103の処理時間は2[ms]であり、スレッド3103の2次キャッシュ202のバンクの使用数は2であり、スレッド3103のRAM206のバンクの使用数は2である。
スレッド3104の処理時間は1.8[ms]であり、スレッド3104の2次キャッシュ202のバンクの使用数は2であり、スレッド3104のRAM206のバンクの使用数は1である。
第1の算出部3003は、第1のスケジューリング部3001による第1のスケジューリングにおいて、CPU201ごとに割当済のスレッドの処理時間または残処理時間の合計値を算出する。たとえば、CPU201−1は、スレッド3101とスレッド3104が割り当てられているため、合計値は3.6[ms]である。CPU201−2は、スレッド3103とスレッド3102が割り当てられているため、合計値は4[ms]である。そして、第1の算出部3003は、算出した割当済のスレッドの処理時間または残処理時間の合計値のうち、最大値を第1の算出結果とする。
第2の算出部3004は、第2のスケジューリング部3002による第2のスケジューリングにおいて、CPU201ごとに割当済のスレッドの処理時間または残処理時間の合計値を算出する。たとえば、CPU201−1は、スレッド3101とスレッド3102が割り当てられているため、合計値は3.8[ms]である。CPU201−2は、スレッド3104とスレッド3103が割り当てられているため、合計値は3.8[ms]である。
そして、たとえば、第2の算出部3004は、RAM206のアクセス競合によるオーバーヘッドと、2次キャッシュ202のアクセス競合によるオーバーヘッドを算出する。実施例7では、分類がCのスレッド同士が並列実行される場合にRAM206のアクセス競合によるオーバーヘッドが算出される。そして、実施例7では、分類がBのスレッド同士が並列実行される場合に2次キャッシュ202のアクセス競合によるオーバーヘッドが算出されることとする。
たとえば、第2の算出部3004は、並列実行されるスレッドを予測する。そして、たとえば、第2の算出部3004は、予測された並列実行される複数のスレッドのRAM206のバンクの使用数の合計値がRAM206のバンク数mより大きければ、RAM206での競合が発生すると判断する。どのようなスレッドの組み合わせで並列実行されるかについては、ここでは限定していないが、たとえば、割当順で決定してもよいし、RAM206のバンクの使用数に応じて決定してもよい。そして、たとえば、第2の算出部3004は、下記式(2)に基づいてオーバーヘッドOcxを算出する。
Ocx(x=1〜n)=Σ(SBpx×Apx×RL2)+Σ(SCpx×Apx×RM)・・・(2)
Σ(SBpx×Apx×RL2)は、2次キャッシュ202で競合すると判断された場合の2次キャッシュ202での競合によるオーバーヘッドの合計値である。SBpxはCPU201−xに割り当てられ、並列処理によって2次キャッシュ202でアクセス競合が発生すると予測されたスレッドBpの処理時間(実行中のスレッドBpであれば残処理時間)である。Apxは、CPU201−xで実行中のスレッドBpのアクセス時間の割合である。アクセス時間の割合は、スレッドテーブル2700に登録されている。増加率RL2はアクセス競合のオーバーヘッド情報2900に登録されている。
Σ(SCpx×Apx×RM)は、RAM206で競合すると判断された場合のRAM206での競合によるオーバーヘッドの合計値である。SCpxはCPU201−xに割り当てられ、並列処理によってRAM206でアクセス競合が発生すると予測されたスレッドCpの処理時間(実行中のスレッドBpであれば残処理時間)である。Apxは、CPU201−xで実行中のスレッドCpのアクセス時間の割合である。アクセス時間の割合は、スレッドテーブル2700に登録されている。増加率RMはアクセス競合のオーバーヘッド情報2900に登録されている。
図31の例では、スレッド3102とスレッド3103とのRAM206の総バンク使用数が4であり、RAM206のバンク数mが3である。よって、第2の算出部3004は、スレッド3102とスレッド3103とはRAM206へのアクセスが競合すると判断し、CPU201ごとにアクセス競合によるオーバーヘッドを算出する。第2の算出部3004は、式(2)に基づいて各CPU201でのRAM206のアクセス競合によるオーバーヘッドを算出する。
増加率RMが0.3であり、スレッド3102のアクセス時間の割合Apが0.7であり、スレッド3103のアクセス時間の割合Apが0.7である。したがって、Oc1=2[ms]×0.7×0.3=0.42となり、Oc2=2[ms]×0.7×0.3=0.42となる。
たとえば、第2の算出部3004は、CPU201−1の処理時間の合計値(3.8[ms])にオーバーヘッドOc1(0.42[ms])が加算され、CPU201−2の処理時間の合計値(3.8[ms])にオーバーヘッドOc2(0.42[ms])が加算される。CPU201−1の加算結果は4.22[ms]であり、CPU201−2の加算結果は4.22[ms]である。
第1の算出部3003は、CPU201ごとに算出された算出結果うちの最大値を第1の算出結果とし、第2の算出部3004は、CPU201ごとに算出された算出結果のうちの最大値を第2の算出結果とする。比較部3005は、第1の算出結果と第2の算出結果との関係が所定条件を満たすか否かを判断する。たとえば、比較部3005は、第1の算出結果が第2の算出結果未満であるか否かを判断する。
切替部3006は、比較部3005による比較結果に応じて、第1のスケジューリングと第2のスケジューリングとを切り替える。たとえば、切替部3006は、第1の算出結果が第2の算出結果未満であれば、第1のスケジューリング部3001による第1のスケジューリングを行うように制御する。また、たとえば、切替部3006は、第1の算出結果が第2の算出結果未満でなければ、第2のスケジューリング部3002による第2のスケジューリングを行うように制御する。図32の例では、第1の算出結果が4[ms]であり、第2の算出結果が4.22[ms]であるため、切替部3006は、第1のスケジューリング部3001により第1のスケジューリングを行うように制御する。
また、ここでは、第2の算出部3004は、分類がCの組み合わせでRAM206へのアクセスが競合すると判断された場合、2次キャッシュ202のアクセス競合のオーバーヘッドを算出しない。2次キャッシュ202のアクセス競合によるオーバーヘッドは、RAM206のアクセス競合によるオーバーヘッドよりも小さいので、ここでは、割当処理の高速化のために算出しないこととしている。また、たとえば、第2の算出部3004が、分類がCの組み合わせでRAM206へのアクセスが競合すると判断されても、2次キャッシュ202のアクセス競合によるオーバーヘッドを算出することにより、より精度の高い処理時間を算出できる。
図33は、算出の他の例を示す説明図である。図33では、増加率RMが0.05の場合を例に挙げて説明する。第1の算出部3003による算出処理と、第2の算出部3004による算出処理については、図32で説明した処理と同一であるため、詳細な説明を省略する。
増加率RMが0.05であり、スレッド3102のアクセス時間の割合Apが0.7であり、スレッド3103のアクセス時間の割合Apが0.7である。これにより、Oc1=2[ms]×0.7×0.05=0.07となり、Oc2=2[ms]×0.7×0.05=0.07となる。
たとえば、第2の算出部3004は、CPU201−1の処理時間の合計値にオーバーヘッドOc1を加算し、CPU201−2の処理時間の合計値にオーバーヘッドOc2を加算する。CPU201−1の加算結果は3.87[ms]であり、CPU201−2の加算結果は3.87[ms]である。
図33の例では、第1の算出結果が4[ms]であり、第2の算出結果が3.87[ms]であり、第1の算出結果が第2の算出結果以上であるため、切替部3006は、第2のスケジューリング部3002により第2のスケジューリングを行うように制御する。
増加率RMや増加率R2Lが大きいほど、アクセス競合によるオーバーヘッドの影響が大きくなる。さらに、スレッドの並列処理の組み合わせによってアクセス競合が発生するほど、オーバーヘッドが増加する。
(実施例7にかかるマスタOSが行う処理手順)
図34は、実施例7にかかるマスタOSが行う処理手順の一例を示すフローチャートである。まず、マスタOSが、スレッドの起動指示を受け付けたか否かを判断する(ステップS3401)。マスタOSが、スレッドの起動指示を受け付けていないと判断した場合(ステップS3401:No)、ステップS3401へ戻る。
図34は、実施例7にかかるマスタOSが行う処理手順の一例を示すフローチャートである。まず、マスタOSが、スレッドの起動指示を受け付けたか否かを判断する(ステップS3401)。マスタOSが、スレッドの起動指示を受け付けていないと判断した場合(ステップS3401:No)、ステップS3401へ戻る。
マスタOSが、スレッドの起動指示を受け付けたと判断した場合(ステップS3401:Yes)、第2のスケジューリング部3002により、第2のスケジューリング処理を実行する(ステップS3402)。第2のスケジューリング処理を実行するが、ここでは、マスタOSが第2のスケジューリング処理による割当結果を反映させていない。そして、マスタOSが、第2の算出部3004により、第2のスケジューリング処理で割り当てた場合における、CPU201ごとに割当済のスレッドの処理時間の合計値を算出する(ステップS3403)。そして、マスタOSが、第2の算出部3004により、CPU201ごとにオーバーヘッドOcを算出する(ステップS3404)。そして、マスタOSが、第2の算出部3004により、CPU201ごとに算出した合計値にオーバーヘッドOcを加算(加算結果がTLx)する(ステップS3405)。
つぎに、マスタOSが、第1のスケジューリング部3001により、第1のスケジューリング処理を実行する(ステップS3406)。第1のスケジューリング処理については、実施例1〜6で説明した例と同一であるため、ここでは、詳細な説明を省略する。また、第1のスケジューリング処理を実行するが、ここでは、マスタOSが第1のスケジューリング処理による割当結果を反映させていない。そして、マスタOSが、第1の算出部3003により、第1のスケジューリング処理で割り当てた場合における、CPU201ごとに割当済のスレッドの処理時間の合計値を算出(算出結果がTcx)する(ステップS3407)。
つぎに、マスタOSが、比較部3005により、MAX(TLx)≦MAX(Tcx)であるか否かを判断する(ステップS3408)。MAX(Tcx)は、CPU201ごとに算出された合計値の(TLx)の中の最大値である。MAX(TLx)は、CPU201ごとに算出された合計値(Tcx)の中の最大値である。
ここでは、MAX(TLx)とMAX(Tcx)が同一値の場合、第2のスケジューリング処理を行うようにしているが、第1のスケジューリング処理を行うようにしてもよい。また、第1のスケジューリング処理で実行中のスレッドや実行待機状態のスレッドの再割り当てを行い、第2のスケジューリング処理で再割り当てを行わない場合には、MAX(TLx)とMAX(Tcx)が同一値であれば第2のスケジューリング処理を行う。第2のスケジューリングで再割り当てが行われなければ、マスタOSが再割り当てによる割当テーブル400の書き換えを行う時間を短縮することができる。たとえば、第1のスケジューリング処理で実行中のスレッドや実行待機状態のスレッドの再割り当てを行わず、第2のスケジューリング処理で再割り当てを行う場合には、MAX(TLx)とMAX(Tcx)が同一値であれば第1のスケジューリング処理を行うこととする。
そして、マスタOSが、MAX(TLx)≦MAX(Tcx)であると判断した場合(ステップS3408:Yes)、切替部3006により、第2のスケジューリング処理による割り当て結果に基づき、割り当て(ステップS3409)、一連の処理を終了する。第2のスケジューリング処理による割り当てでは、起動指示を受け付けたスレッドの割り当てだけでなく、実行中のスレッドが再割り当てされるため、実行中のスレッドを移行させる処理も発生する。また、マスタOSが、割当結果に沿って、割当テーブル2800を更新する。
また、マスタOSが、MAX(TLx)≦MAX(Tcx)でないと判断した場合(ステップS3408:No)、切替部3006により、第1のスケジューリング処理による割り当て結果に基づき、割り当て(ステップS3410)、一連の処理を終了する。第1のスケジューリング処理による割り当てでは、起動指示を受け付けたスレッドの割り当てだけでなく、実行中のスレッドが再割り当てされるため、実行中のスレッドを移行させる処理も発生する。また、マスタOSが、割当結果に沿って、割当テーブル2800を更新する。
図35は、図34で示した第2のスケジューリング処理(ステップS3402)の詳細な説明を示すフローチャートである。マスタOSが、実行中、およびウエイトキュー250に存在するスレッドを割当未決定キューに入れる(ステップS3501)、割当未決定キューが空か否かを判断する(ステップS3502)。これにより、実行中のスレッドや実行待機中のスレッドであっても、マスタOSが再割り当てすることができる。マスタOSが、割当未決定キューが空であると判断した場合(ステップS3502:Yes)、ステップS3403へ戻る。
マスタOSが、割当未決定キューが空でないと判断した場合(ステップS3502:No)、割当未決定キューからスレッドを取り出す(ステップS3503)。マスタOSが、CPU201ごとに割り当て決定済のスレッドの処理時間の合計値を算出する(ステップS3504)、処理時間の合計値が最も小さいCPU201を取り出されたスレッドの割当先CPUに決定し(ステップS3505)、ステップS3501へ戻る。
実施例7によれば、アクセス競合が発生しないように割り当てる第1のスケジューリングと、第1のスケジューリングと異なる第2のスケジューリングとの、それぞれのスケジューリングにおける処理時間を見積もり、最適なスケジューリングに切り替える。これにより、たとえアクセス競合が発生したとしても、処理時間が短い最適なスケジューリングを行うことができ、スレッドの性能劣化を低減させることができる。
(マルチコアプロセッサシステム200の適用例)
図36は、マルチコアプロセッサシステム200の適用例を示す図である。図36において、ネットワークNWは、サーバ3601,3602とクライアント3631〜3634とが通信可能なネットワークNWであり、たとえば、LAN(Local Area Network)、WAN(Wide Area Network)、インターネット、携帯電話網などで構成される。
図36は、マルチコアプロセッサシステム200の適用例を示す図である。図36において、ネットワークNWは、サーバ3601,3602とクライアント3631〜3634とが通信可能なネットワークNWであり、たとえば、LAN(Local Area Network)、WAN(Wide Area Network)、インターネット、携帯電話網などで構成される。
サーバ3602は、クラウド3620を構成するサーバ群(サーバ3621〜3625)の管理サーバである。クライアント3631〜3634のうち、クライアント3631はノート型パソコン、クライアント3632はデスクトップ型パソコン、クライアント3633は携帯電話機(スマートフォン、PHS(Personal Handyphone System)でもよい)、クライアント3634はタブレット型端末である。図36のサーバ3601,3602,3621〜3625、クライアント3631〜3634は、たとえば、図1に示したコンピュータにより実現される。
また、本実施の形態は、図1に示した各CPU201、および共有資源がそれぞれ異なるコンピュータ(たとえば図36の携帯電話機やサーバ)に搭載され、複数のコンピュータがネットワークNWを介して分散型の並列処理を行う構成に適用することもできる。
以上説明したように、本割当方法、およびマルチコアプロセッサシステムによれば、マルチコアプロセッサで並列実行時のスレッドの使用バンク数の総和が共有資源のバンク数を超えないような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が、いずれのスレッドも割り当てられていないCPUに対象スレッドを割り当てる。特定のスレッドでないスレッドとは、共有資源へのアクセスが頻繁に発生しないスレッドであることを示す。実施例6では分類がAのスレッドである。分類がAのスレッドは1次キャッシュへ頻繁にアクセスする。そこで、他のスレッドと対象スレッドを同一CPUに割り当てないようにすることで、複数のスレッドのデータが1次キャッシュ内で混在してしまうのを避けることができる。これにより、1次キャッシュ内のデータのスワップ数を減らすことができ、スレッドの性能劣化の低減を図ることができる。
また、第1の共有資源の第1の条件と、第1の共有資源よりもアクセス速度の速い第2の共有資源の第2の条件とにスレッドがあらかじめ分類されていることとする。第1の条件で分類される第1のスレッドと第2の条件で分類される第2のスレッドと、が並列処理されると、第1のスレッドの影響で第2のスレッドのアクセスミスが増加する恐れがある。そこで、第1のスレッドがいずれかのCPUに割り当てられていたら、特定のCPUが、第2の条件に分類される対象スレッドの割当先を第1の共有資源の使用バンク数に応じて決定する。これにより、特定のCPUが、第1の共有資源でのアクセス競合によるスレッドの性能劣化の低減を図ることができる。
また、第1のスレッドがいずれのCPUにも割り当てられていなければ、特定のCPUが、第2の条件に分類される対象スレッドの割当先を第2の共有資源の使用バンク数に応じて決定する。これにより、特定のCPUが、第2の共有資源でのアクセス競合によるスレッドの性能劣化の低減を図ることができる。
また、対象スレッドが第1の条件に分類されるスレッドの場合、いずれに分類されるス
レッドがCPUに割り当てられていても、特定のCPUが、対象スレッドの割当先を第1
の共有資源の使用バンク数に応じて決定する。これにより、特定のCPUが、第1の共有
資源でのアクセス競合によるスレッドの性能劣化の低減を図ることができる。
レッドがCPUに割り当てられていても、特定のCPUが、対象スレッドの割当先を第1
の共有資源の使用バンク数に応じて決定する。これにより、特定のCPUが、第1の共有
資源でのアクセス競合によるスレッドの性能劣化の低減を図ることができる。
また、アクセス競合を重視してスレッドが割り当てられると、各スレッドの割り当て状態によっては、アクセス競合を無視してスレッドが割り当てられた場合よりもスレッドの処理時間が長くなってしまう場合がある。そこで、特定のCPUが、アクセス競合が発生しないように割り当てる第1のスケジューリングと、第1のスケジューリングと異なる第2のスケジューリングと、のうち、いずれのスケジューリングで割り当てるかを動的に切り替える。これにより、第1のスケジューリングが選択された場合は、アクセス競合による対象スレッドの性能劣化の低減を図ることができる。第2のスケジューリングが選択された場合は、同一のCPU201に割り当てられたスレッドの性能による対象スレッドの性能劣化の低減を図ることができる。
また、特定のCPUが、第2のスケジューリングにおける処理時間にアクセス競合により発生する負荷時間を加算する。これにより、特定のCPUが、アクセス競合による性能劣化の影響を含めてスケジューリングを決定することができる。
また、特定のCPUが、負荷時間を割当済のスレッドの処理時間と共有資源の競合による負荷の割合に応じて算出する。これにより、特定のCPUが、アクセス競合による影響をより正確に再現させることができる。
また、特定のCPUが、第1のスケジューリングによる処理時間の算出結果と、第2のスケジューリングによる処理時間の算出結果と、の関係が所定条件を満たすか否かを判断し、判断結果に応じて、いずれのスケジューリングを行うかが決定する。これにより、マルチコアプロセッサシステムの設計者が第2のスケジューリングのスケジューリング方法に応じて所定条件を定めることができる。
なお、本実施の形態で説明した割当方法は、あらかじめ用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本割当プログラムは、ハードディスク、フレキシブルディスク、CD−ROM、MO、DVD等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本割当プログラムは、インターネット等のネットワークを介して配布してもよい。
上述した実施の形態に関し、さらに以下の付記を開示する。
(付記1)マルチコアプロセッサのうちの特定のコアが、
前記マルチコアプロセッサで共有する共有資源が有する記憶領域の使用数をスレッド群のスレッドごとに記憶する記憶装置から、対象スレッドの記憶領域の使用数と、前記マルチコアプロセッサのコアごとに割当済のスレッドの記憶領域の使用数と、を特定する特定処理と、
前記割当済のスレッドの特定された記憶領域の使用数から前記コアごとに最大値を検出する検出処理と、
前記マルチコアプロセッサのうちの割当先候補に選択されたコアの検出された最大値と前記対象スレッドの特定された記憶領域の使用数とのうちの大きい方の値と、前記選択されたコア以外のコアの検出された最大値との総和が、前記共有資源内の記憶領域数以下であるか否かを判断する判断処理と、
前記総和が前記記憶領域数以下であると判断された場合、前記対象スレッドを前記選択されたコアに割り当てる割当処理と、
を実行することを特徴とする割当方法。
前記マルチコアプロセッサで共有する共有資源が有する記憶領域の使用数をスレッド群のスレッドごとに記憶する記憶装置から、対象スレッドの記憶領域の使用数と、前記マルチコアプロセッサのコアごとに割当済のスレッドの記憶領域の使用数と、を特定する特定処理と、
前記割当済のスレッドの特定された記憶領域の使用数から前記コアごとに最大値を検出する検出処理と、
前記マルチコアプロセッサのうちの割当先候補に選択されたコアの検出された最大値と前記対象スレッドの特定された記憶領域の使用数とのうちの大きい方の値と、前記選択されたコア以外のコアの検出された最大値との総和が、前記共有資源内の記憶領域数以下であるか否かを判断する判断処理と、
前記総和が前記記憶領域数以下であると判断された場合、前記対象スレッドを前記選択されたコアに割り当てる割当処理と、
を実行することを特徴とする割当方法。
(付記2)前記検出処理による検出後、前記マルチコアプロセッサから、順にコアを割当先候補として選択する選択処理を実行し、
前記判断処理は、
前記選択処理によりコアが選択される都度、選択されたコアの検出された最大値と前記対象スレッドの前記記憶領域の使用数とのうちの大きい方の値と、前記選択されたコア以外のコアの検出された最大値との総和が、前記記憶領域数以下であるか否かを判断し、
前記割当処理は、
前記判断処理により前記総和が前記記憶領域数以下であると判断されたコアに前記対象スレッドを割り当てることを特徴とする付記1に記載の割当方法。
前記判断処理は、
前記選択処理によりコアが選択される都度、選択されたコアの検出された最大値と前記対象スレッドの前記記憶領域の使用数とのうちの大きい方の値と、前記選択されたコア以外のコアの検出された最大値との総和が、前記記憶領域数以下であるか否かを判断し、
前記割当処理は、
前記判断処理により前記総和が前記記憶領域数以下であると判断されたコアに前記対象スレッドを割り当てることを特徴とする付記1に記載の割当方法。
(付記3)前記割当処理は、
前記総和が前記記憶領域数以下であると判断された割当先候補の数が複数ある場合、前記割当済のスレッドの処理時間が最小なコアに前記対象スレッドを割り当てることを特徴とする付記2に記載の割当方法。
前記総和が前記記憶領域数以下であると判断された割当先候補の数が複数ある場合、前記割当済のスレッドの処理時間が最小なコアに前記対象スレッドを割り当てることを特徴とする付記2に記載の割当方法。
(付記4)前記選択処理は、
前記マルチコアプロセッサから、前記検出処理によって検出された最大値が大きい順にコアを割当先候補として選択することを特徴とする付記2に記載の割当方法。
前記マルチコアプロセッサから、前記検出処理によって検出された最大値が大きい順にコアを割当先候補として選択することを特徴とする付記2に記載の割当方法。
(付記5)前記選択されたコアが、前記マルチコアプロセッサのうちの前記検出された最大値が最大となるコアであることを特徴とする付記1に記載の割当方法。
(付記6)前記割当処理は、
前記選択されたコアがいずれのコアであっても前記総和が前記記憶領域数以下でない場合、前記総和が最小となるコアに割り当てることを特徴とする付記1または2に記載の割当方法。
前記選択されたコアがいずれのコアであっても前記総和が前記記憶領域数以下でない場合、前記総和が最小となるコアに割り当てることを特徴とする付記1または2に記載の割当方法。
(付記7)前記割当処理は、
前記特定処理による特定後、前記割当済のスレッドの特定された記憶領域の使用数と前記対象スレッドの前記記憶領域の使用数との合計値が前記記憶領域数以下であれば、前記検出処理と前記判断処理を実行せずに、前記マルチコアプロセッサのうちのいずれかのコアに割り当てることを特徴とする付記1に記載の割当方法。
前記特定処理による特定後、前記割当済のスレッドの特定された記憶領域の使用数と前記対象スレッドの前記記憶領域の使用数との合計値が前記記憶領域数以下であれば、前記検出処理と前記判断処理を実行せずに、前記マルチコアプロセッサのうちのいずれかのコアに割り当てることを特徴とする付記1に記載の割当方法。
(付記8)前記対象スレッドと前記割当済のスレッドが前記スレッド群の中の特定のスレッドであることを特徴とする付記1〜7のいずれか一つに記載の割当方法。
(付記9)前記割当処理は、
前記対象スレッドが前記スレッド群のうちの特定のスレッドでない場合、前記特定処理と前記検出処理と前記判断処理とを実行せずに、前記対象スレッドを前記マルチコアプロセッサのうちのいずれのスレッドも割り当てられていないコアに割り当てることを特徴とする付記1〜7のいずれか一つに記載の割当方法。
前記対象スレッドが前記スレッド群のうちの特定のスレッドでない場合、前記特定処理と前記検出処理と前記判断処理とを実行せずに、前記対象スレッドを前記マルチコアプロセッサのうちのいずれのスレッドも割り当てられていないコアに割り当てることを特徴とする付記1〜7のいずれか一つに記載の割当方法。
(付記10)第1の共有資源の記憶領域の使用数と、前記第1の共有資源よりもアクセス速度が速い第2の共有資源の記憶領域の使用数と、が前記スレッド群のスレッドごとに前記記憶装置に記憶されており、
前記特定処理が、
前記対象スレッドが、前記スレッド群の中の前記第1の共有資源へのアクセスに関する第1の条件に分類されたスレッドである場合、前記記憶装置から、前記対象スレッドの前記第1の共有資源の記憶領域の使用数と前記割当済のスレッドの前記第1の共有資源の記憶領域の使用数を特定することを特徴とする付記1〜7のいずれか一つに記載の割当方法。
前記特定処理が、
前記対象スレッドが、前記スレッド群の中の前記第1の共有資源へのアクセスに関する第1の条件に分類されたスレッドである場合、前記記憶装置から、前記対象スレッドの前記第1の共有資源の記憶領域の使用数と前記割当済のスレッドの前記第1の共有資源の記憶領域の使用数を特定することを特徴とする付記1〜7のいずれか一つに記載の割当方法。
(付記11)第1の共有資源の記憶領域の使用数と、前記第1の共有資源よりもアクセス速度が速い第2の共有資源の記憶領域の使用数と、が前記スレッド群のスレッドごとに前記記憶装置に記憶されており、
前記特定処理が、
前記対象スレッドが、前記スレッド群の中の前記第2の共有資源へのアクセスに関する第2の条件に分類されたスレッドであり、かつ前記割当済のスレッドの中に、前記第1の共有資源へのアクセスに関する第1の条件に分類されたスレッドがない場合、前記記憶装置から、前記対象スレッドの前記第2の共有資源の記憶領域の使用数と前記割当済のスレッドの前記第2の共有資源の記憶領域の使用数と前記割当済のスレッドの前記第2の共有資源の記憶領域の使用数を特定することを特徴とする付記1〜7のいずれか一つに記載の割当方法。
前記特定処理が、
前記対象スレッドが、前記スレッド群の中の前記第2の共有資源へのアクセスに関する第2の条件に分類されたスレッドであり、かつ前記割当済のスレッドの中に、前記第1の共有資源へのアクセスに関する第1の条件に分類されたスレッドがない場合、前記記憶装置から、前記対象スレッドの前記第2の共有資源の記憶領域の使用数と前記割当済のスレッドの前記第2の共有資源の記憶領域の使用数と前記割当済のスレッドの前記第2の共有資源の記憶領域の使用数を特定することを特徴とする付記1〜7のいずれか一つに記載の割当方法。
(付記12)第1の共有資源の記憶領域の使用数と、前記第1の共有資源よりもアクセス速度が速い第2の共有資源の記憶領域の使用数と、が前記スレッド群のスレッドごとに前記記憶装置に記憶されており、
前記特定処理が、
前記対象スレッドが前記スレッド群の中の前記第2の共有資源へのアクセスに関する第2の条件に分類されたスレッドであっても、前記割当済のスレッドの中に、前記第1の共有資源へのアクセスに関する第1の条件に分類されたスレッドがある場合、前記記憶装置から、前記対象スレッドの前記第1の共有資源の記憶領域の使用数と前記割当済のスレッドの前記第1の共有資源の記憶領域の使用数を特定することを特徴とする付記1〜7のいずれか一つに記載の割当方法。
前記特定処理が、
前記対象スレッドが前記スレッド群の中の前記第2の共有資源へのアクセスに関する第2の条件に分類されたスレッドであっても、前記割当済のスレッドの中に、前記第1の共有資源へのアクセスに関する第1の条件に分類されたスレッドがある場合、前記記憶装置から、前記対象スレッドの前記第1の共有資源の記憶領域の使用数と前記割当済のスレッドの前記第1の共有資源の記憶領域の使用数を特定することを特徴とする付記1〜7のいずれか一つに記載の割当方法。
(付記13)前記割当処理による第1のスケジューリングで割り当てた場合における、前記コアごとに前記割当済のスレッドの処理時間の合計値を算出する第1の算出処理と、
前記第1のスケジューリングと異なる第2のスケジューリングで割り当てた場合における、前記割当済のスレッドの処理時間の合計値を前記コアごとに算出する第2の算出処理と、
前記第1の算出処理による算出結果と、前記第2の算出処理による算出結果とを比較する比較処理と、
前記比較処理による比較結果に応じて、前記第1のスケジューリングと前記第2のスケジューリングとを切り替える切替処理と、を実行することを特徴とする付記1〜12のいずれか一つに記載の割当方法。
前記第1のスケジューリングと異なる第2のスケジューリングで割り当てた場合における、前記割当済のスレッドの処理時間の合計値を前記コアごとに算出する第2の算出処理と、
前記第1の算出処理による算出結果と、前記第2の算出処理による算出結果とを比較する比較処理と、
前記比較処理による比較結果に応じて、前記第1のスケジューリングと前記第2のスケジューリングとを切り替える切替処理と、を実行することを特徴とする付記1〜12のいずれか一つに記載の割当方法。
(付記14)前記第2の算出処理は、
さらに、前記割当済のスレッドの処理時間の合計値に前記共有資源の競合による負荷時間が加算されることを特徴とする付記13に記載の割当方法。
さらに、前記割当済のスレッドの処理時間の合計値に前記共有資源の競合による負荷時間が加算されることを特徴とする付記13に記載の割当方法。
(付記15)前記負荷時間が、前記割当済のスレッドの処理時間と前記共有資源の競合による負荷の割合に応じて算出されることを特徴とする付記14に記載の割当方法。
(付記16)前記比較処理は、
前記第1の算出処理による算出結果と、前記第2の算出処理による算出結果との関係が所定条件を満たすか否かを判断し、
前記切替処理は、
前記比較処理による比較結果が前記所定条件を満たす場合、前記第1のスケジューリングを実行し、前記比較処理による比較結果が前記所定条件を満たさない場合、前記第2のスケジューリングを実行することを特徴とする付記13〜15のいずれか一つに記載の割当方法。
前記第1の算出処理による算出結果と、前記第2の算出処理による算出結果との関係が所定条件を満たすか否かを判断し、
前記切替処理は、
前記比較処理による比較結果が前記所定条件を満たす場合、前記第1のスケジューリングを実行し、前記比較処理による比較結果が前記所定条件を満たさない場合、前記第2のスケジューリングを実行することを特徴とする付記13〜15のいずれか一つに記載の割当方法。
(付記17)マルチコアプロセッサと、
前記マルチコアプロセッサで共有する共有資源が有する記憶領域の使用数をスレッド群のスレッドごとに記憶する記憶装置と、を備え、
前記マルチコアプロセッサのうちの特定のコアが、
前記記憶装置から、対象スレッドの記憶領域の使用数と、前記マルチコアプロセッサのコアごとに割当済のスレッドの記憶領域の使用数と、を特定する特定手段と、
前記割当済のスレッドの特定された記憶領域の使用数から前記コアごとに最大値を検出する検出手段と、
前記マルチコアプロセッサのうちの割当先候補に選択されたコアの検出された最大値と前記対象スレッドの特定された記憶領域の使用数とのうちの大きい方の値と、前記選択されたコア以外のコアの検出された最大値との総和が、前記共有資源内の記憶領域数以下であるか否かを判断する判断手段と、
前記総和が前記記憶領域数以下であると判断された場合、前記対象スレッドを前記選択されたコアに割り当てる割当手段と、
を備えることを特徴とするマルチコアプロセッサシステム。
前記マルチコアプロセッサで共有する共有資源が有する記憶領域の使用数をスレッド群のスレッドごとに記憶する記憶装置と、を備え、
前記マルチコアプロセッサのうちの特定のコアが、
前記記憶装置から、対象スレッドの記憶領域の使用数と、前記マルチコアプロセッサのコアごとに割当済のスレッドの記憶領域の使用数と、を特定する特定手段と、
前記割当済のスレッドの特定された記憶領域の使用数から前記コアごとに最大値を検出する検出手段と、
前記マルチコアプロセッサのうちの割当先候補に選択されたコアの検出された最大値と前記対象スレッドの特定された記憶領域の使用数とのうちの大きい方の値と、前記選択されたコア以外のコアの検出された最大値との総和が、前記共有資源内の記憶領域数以下であるか否かを判断する判断手段と、
前記総和が前記記憶領域数以下であると判断された場合、前記対象スレッドを前記選択されたコアに割り当てる割当手段と、
を備えることを特徴とするマルチコアプロセッサシステム。
200 マルチコアプロセッサシステム
201−1〜201−n CPU
202 2次キャッシュ
206 RAM
231−1〜231−l バンク
241−1〜241−m バンク
501 特定部
502 検出部
503 選択部
504 判断部
505 割当部
506 分類判断部
201−1〜201−n CPU
202 2次キャッシュ
206 RAM
231−1〜231−l バンク
241−1〜241−m バンク
501 特定部
502 検出部
503 選択部
504 判断部
505 割当部
506 分類判断部
Claims (16)
- マルチコアプロセッサのうちの特定のコアが、
前記マルチコアプロセッサで共有する共有資源が有する記憶領域の使用数をスレッド群のスレッドごとに記憶する記憶装置から、対象スレッドの記憶領域の使用数と、前記マルチコアプロセッサのコアごとに割当済のスレッドの記憶領域の使用数と、を特定する特定処理と、
前記割当済のスレッドの特定された記憶領域の使用数から前記コアごとに最大値を検出する検出処理と、
前記マルチコアプロセッサのうちの割当先候補に選択されたコアの検出された最大値と前記対象スレッドの特定された記憶領域の使用数とのうちの大きい方の値と、前記選択されたコア以外のコアの検出された最大値との総和が、前記共有資源内の記憶領域数以下であるか否かを判断する判断処理と、
前記総和が前記記憶領域数以下であると判断された場合、前記対象スレッドを前記選択されたコアに割り当てる割当処理と、
を実行することを特徴とする割当方法。 - 前記検出処理による検出後、前記マルチコアプロセッサから、順にコアを割当先候補として選択する選択処理を実行し、
前記判断処理は、
前記選択処理によりコアが選択される都度、選択されたコアの検出された最大値と前記対象スレッドの前記記憶領域の使用数とのうちの大きい方の値と、前記選択されたコア以外のコアの検出された最大値との総和が、前記記憶領域数以下であるか否かを判断し、
前記割当処理は、
前記判断処理により前記総和が前記記憶領域数以下であると判断されたコアに前記対象スレッドを割り当てることを特徴とする請求項1に記載の割当方法。 - 前記割当処理は、
前記総和が前記記憶領域数以下であると判断された割当先候補の数が複数ある場合、前記割当済のスレッドの処理時間が最小なコアに前記対象スレッドを割り当てることを特徴とする請求項2に記載の割当方法。 - 前記選択処理は、
前記マルチコアプロセッサから、前記検出処理によって検出された最大値が大きい順にコアを割当先候補として選択することを特徴とする請求項2に記載の割当方法。 - 前記選択されたコアが、前記マルチコアプロセッサのうちの前記検出された最大値が最大となるコアであることを特徴とする請求項1に記載の割当方法。
- 前記割当処理は、
前記選択されたコアがいずれのコアであっても前記総和が前記記憶領域数以下でない場合、前記総和が最小となるコアに割り当てることを特徴とする請求項1または2に記載の割当方法。 - 前記割当処理は、
前記特定処理による特定後、前記割当済のスレッドの特定された記憶領域の使用数と前記対象スレッドの前記記憶領域の使用数との合計値が前記記憶領域数以下であれば、前記検出処理と前記判断処理を実行せずに、前記マルチコアプロセッサのうちのいずれかのコアに割り当てることを特徴とする請求項1に記載の割当方法。 - 前記対象スレッドと前記割当済のスレッドが前記スレッド群の中の特定のスレッドであることを特徴とする請求項1〜7のいずれか一つに記載の割当方法。
- 第1の共有資源の記憶領域の使用数と、前記第1の共有資源よりもアクセス速度が速い第2の共有資源の記憶領域の使用数と、が前記スレッド群のスレッドごとに前記記憶装置に記憶されており、
前記特定処理が、
前記対象スレッドが、前記スレッド群の中の前記第1の共有資源へのアクセスに関する第1の条件に分類されたスレッドである場合、前記記憶装置から、前記対象スレッドの前記第1の共有資源の記憶領域の使用数と前記割当済のスレッドの前記第1の共有資源の記憶領域の使用数を特定することを特徴とする請求項1〜7のいずれか一つに記載の割当方法。 - 第1の共有資源の記憶領域の使用数と、前記第1の共有資源よりもアクセス速度が速い第2の共有資源の記憶領域の使用数と、が前記スレッド群のスレッドごとに前記記憶装置に記憶されており、
前記特定処理が、
前記対象スレッドが、前記スレッド群の中の前記第2の共有資源へのアクセスに関する第2の条件に分類されたスレッドであり、かつ前記割当済のスレッドの中に、前記第1の共有資源へのアクセスに関する第1の条件に分類されたスレッドがない場合、前記記憶装置から、前記対象スレッドの前記第2の共有資源の記憶領域の使用数と前記割当済のスレッドの前記第2の共有資源の記憶領域の使用数と前記割当済のスレッドの前記第2の共有資源の記憶領域の使用数を特定することを特徴とする請求項1〜7のいずれか一つに記載の割当方法。 - 第1の共有資源の記憶領域の使用数と、前記第1の共有資源よりもアクセス速度が速い第2の共有資源の記憶領域の使用数と、が前記スレッド群のスレッドごとに前記記憶装置に記憶されており、
前記特定処理が、
前記対象スレッドが前記スレッド群の中の前記第2の共有資源へのアクセスに関する第2の条件に分類されたスレッドであっても、前記割当済のスレッドの中に、前記第1の共有資源へのアクセスに関する第1の条件に分類されたスレッドがある場合、前記記憶装置から、前記対象スレッドの前記第1の共有資源の記憶領域の使用数と前記割当済のスレッドの前記第1の共有資源の記憶領域の使用数を特定することを特徴とする請求項1〜7のいずれか一つに記載の割当方法。 - 前記割当処理による第1のスケジューリングで割り当てた場合における、前記コアごとに前記割当済のスレッドの処理時間の合計値を算出する第1の算出処理と、
前記第1のスケジューリングと異なる第2のスケジューリングで割り当てた場合における、前記割当済のスレッドの処理時間の合計値を前記コアごとに算出する第2の算出処理と、
前記第1の算出処理による算出結果と、前記第2の算出処理による算出結果とを比較する比較処理と、
前記比較処理による比較結果に応じて、前記第1のスケジューリングと前記第2のスケジューリングとを切り替える切替処理と、を実行することを特徴とする請求項1〜11のいずれか一つに記載の割当方法。 - 前記第2の算出処理は、
さらに、前記割当済のスレッドの処理時間の合計値に前記共有資源の競合による負荷時間が加算されることを特徴とする請求項12に記載の割当方法。 - 前記負荷時間が、前記割当済のスレッドの処理時間と前記共有資源の競合による前記処理時間が増加する割合に応じて算出されることを特徴とする請求項13に記載の割当方法。
- 前記比較処理は、
前記第1の算出処理による算出結果と、前記第2の算出処理による算出結果との関係が所定条件を満たすか否かを判断し、
前記切替処理は、
前記比較処理による比較結果が前記所定条件を満たす場合、前記第1のスケジューリングを実行し、前記比較処理による比較結果が前記所定条件を満たさない場合、前記第2のスケジューリングを実行することを特徴とする請求項12〜14のいずれか一つに記載の割当方法。 - マルチコアプロセッサと、
前記マルチコアプロセッサで共有する共有資源が有する記憶領域の使用数をスレッド群のスレッドごとに記憶する記憶装置と、を備え、
前記マルチコアプロセッサのうちの特定のコアが、
前記記憶装置から、対象スレッドの記憶領域の使用数と、前記マルチコアプロセッサのコアごとに割当済のスレッドの記憶領域の使用数と、を特定する特定手段と、
前記割当済のスレッドの特定された記憶領域の使用数から前記コアごとに最大値を検出する検出手段と、
前記マルチコアプロセッサのうちの割当先候補に選択されたコアの検出された最大値と前記対象スレッドの特定された記憶領域の使用数とのうちの大きい方の値と、前記選択されたコア以外のコアの検出された最大値との総和が、前記共有資源内の記憶領域数以下であるか否かを判断する判断手段と、
前記総和が前記記憶領域数以下であると判断された場合、前記対象スレッドを前記選択されたコアに割り当てる割当手段と、
を備えることを特徴とするマルチコアプロセッサシステム。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/JP2011/067555 WO2013018184A1 (ja) | 2011-07-29 | 2011-07-29 | 割当方法、およびマルチコアプロセッサシステム |
Publications (2)
Publication Number | Publication Date |
---|---|
JPWO2013018184A1 JPWO2013018184A1 (ja) | 2015-03-02 |
JP5725181B2 true JP5725181B2 (ja) | 2015-05-27 |
Family
ID=47628752
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2013526647A Expired - Fee Related JP5725181B2 (ja) | 2011-07-29 | 2011-07-29 | 割当方法、およびマルチコアプロセッサシステム |
Country Status (3)
Country | Link |
---|---|
US (1) | US9189279B2 (ja) |
JP (1) | JP5725181B2 (ja) |
WO (1) | WO2013018184A1 (ja) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP6281442B2 (ja) * | 2014-08-14 | 2018-02-21 | 富士通株式会社 | 割り当て制御プログラム、割り当て制御方法及び割り当て制御装置 |
US11099891B2 (en) * | 2019-04-22 | 2021-08-24 | International Business Machines Corporation | Scheduling requests based on resource information |
JP7457589B2 (ja) * | 2020-07-01 | 2024-03-28 | 日立Astemo株式会社 | 情報処理装置、情報処理方法、および情報処理システム |
US11861403B2 (en) * | 2020-10-15 | 2024-01-02 | Nxp Usa, Inc. | Method and system for accelerator thread management |
CN113391928B (zh) * | 2021-08-17 | 2021-11-16 | 上海燧原科技有限公司 | 硬件的资源分配方法、装置、电子设备及存储介质 |
Family Cites Families (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH04338837A (ja) | 1991-05-16 | 1992-11-26 | Hitachi Ltd | プロセススケジュール方式 |
CA2078315A1 (en) | 1991-09-20 | 1993-03-21 | Christopher L. Reeve | Parallel processing apparatus and method for utilizing tiling |
JPH07141305A (ja) * | 1993-11-16 | 1995-06-02 | Hitachi Ltd | 並列計算機の実行制御方法 |
JPH09101916A (ja) | 1995-10-06 | 1997-04-15 | Fujitsu Ltd | マルチプロセス処理装置 |
JPH1027167A (ja) * | 1996-07-12 | 1998-01-27 | Hitachi Ltd | 並列計算機の負荷分散方法 |
US20050273310A1 (en) | 2004-06-03 | 2005-12-08 | Newburn Chris J | Enhancements to performance monitoring architecture for critical path-based analysis |
JP2006285430A (ja) | 2005-03-31 | 2006-10-19 | Matsushita Electric Ind Co Ltd | Cpuメモリアクセス解析装置 |
US20090031314A1 (en) * | 2007-07-25 | 2009-01-29 | Microsoft Corporation | Fairness in memory systems |
US8302098B2 (en) * | 2007-12-06 | 2012-10-30 | Oracle America, Inc. | Hardware utilization-aware thread management in multithreaded computer systems |
JP2009237858A (ja) * | 2008-03-27 | 2009-10-15 | Chugoku Electric Power Co Inc:The | サーバタスク管理プログラム及びサーバタスク管理方法 |
JP2010277300A (ja) * | 2009-05-28 | 2010-12-09 | Panasonic Corp | マルチプロセッサシステムにおける省電力制御装置およびモバイル端末 |
US9354944B2 (en) * | 2009-07-27 | 2016-05-31 | Advanced Micro Devices, Inc. | Mapping processing logic having data-parallel threads across processors |
US8869154B1 (en) * | 2010-03-29 | 2014-10-21 | Crimson Corporation | Controlling processor usage on a computing device |
-
2011
- 2011-07-29 JP JP2013526647A patent/JP5725181B2/ja not_active Expired - Fee Related
- 2011-07-29 WO PCT/JP2011/067555 patent/WO2013018184A1/ja active Application Filing
-
2014
- 2014-01-28 US US14/166,164 patent/US9189279B2/en not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
JPWO2013018184A1 (ja) | 2015-03-02 |
US9189279B2 (en) | 2015-11-17 |
WO2013018184A1 (ja) | 2013-02-07 |
US20140143788A1 (en) | 2014-05-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP5725181B2 (ja) | 割当方法、およびマルチコアプロセッサシステム | |
CN115422284B (zh) | 存储设备、分布式存储系统以及数据处理方法 | |
US8112524B2 (en) | Recommending moving resources in a partitioned computer | |
EP1970805B1 (en) | Multi-objective allocation of computational jobs in client-server or hosting environments | |
JP6644231B1 (ja) | 画像分析装置、及び画像分析システム | |
US11487568B2 (en) | Data migration based on performance characteristics of memory blocks | |
US20100229175A1 (en) | Moving Resources In a Computing Environment Having Multiple Logically-Partitioned Computer Systems | |
US20170046293A1 (en) | Dynamic assignment of groups of resources in a peripheral component interconnect express network | |
CN109542603A (zh) | 一种提高不同优先级任务间隔离性的多维资源隔离系统 | |
CN104008013A (zh) | 一种核资源分配方法、装置及众核系统 | |
JP7205033B2 (ja) | キャッシュの割当方法と装置、記憶媒体、電子装置 | |
CN107969153B (zh) | 一种资源分配方法、装置及numa系统 | |
US11716384B2 (en) | Distributed resource management by improving cluster diversity | |
CN113032101B (zh) | 虚拟机的资源分配方法、服务器及计算机可读存储介质 | |
JP2018515844A (ja) | データ処理方法及びシステム | |
CN113676511B (zh) | 一种云存储方法、系统、设备及存储介质 | |
CN112100185A (zh) | 区块链数据平衡负载的索引系统及方法 | |
JP2023511467A (ja) | 機械学習ワークロードのためのタスクスケジューリング | |
CN114625500A (zh) | 云环境下拓扑感知的微服务应用调度的方法及应用 | |
CN113672375A (zh) | 资源分配预测方法、装置、设备及存储介质 | |
CN112148471A (zh) | 分布式计算系统中资源调度的方法和装置 | |
CN109325266A (zh) | 面向在线云服务的响应时间分布预测方法 | |
CN115878332B (zh) | 深度学习网络中的内存资源分配方法、装置、设备及介质 | |
EP3602309B1 (en) | A memory allocation manager and method performed thereby for managing memory allocation | |
CN112068955B (zh) | 一种异构多核平台处理器内的通信优化方法及电子设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20150105 |
|
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: 20150303 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20150316 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 5725181 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
LAPS | Cancellation because of no payment of annual fees |