JP5300005B2 - スレッド実行制御方法、およびシステム - Google Patents

スレッド実行制御方法、およびシステム Download PDF

Info

Publication number
JP5300005B2
JP5300005B2 JP2008304369A JP2008304369A JP5300005B2 JP 5300005 B2 JP5300005 B2 JP 5300005B2 JP 2008304369 A JP2008304369 A JP 2008304369A JP 2008304369 A JP2008304369 A JP 2008304369A JP 5300005 B2 JP5300005 B2 JP 5300005B2
Authority
JP
Japan
Prior art keywords
thread
core
lock
complex
complex core
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.)
Active
Application number
JP2008304369A
Other languages
English (en)
Other versions
JP2010128895A (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.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
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 International Business Machines Corp filed Critical International Business Machines Corp
Priority to JP2008304369A priority Critical patent/JP5300005B2/ja
Publication of JP2010128895A publication Critical patent/JP2010128895A/ja
Application granted granted Critical
Publication of JP5300005B2 publication Critical patent/JP5300005B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Multi Processors (AREA)

Description

本発明は、ヘテロジニアス・マルチコアプロセッサにおけるスレッド実行制御方法、プログラム、およびシステムに関する。特に、スレッドのクリティカルセクションを効率的に実行するための方法およびシステムに関する。
パーソナル・コンピュータ上での動画再生等のアプリケーションの普及に伴い、プロセッサの性能向上が求められている。プロセッサの性能は、プロセッサの動作周波数の増加やキャッシュメモリの容量サイズの増加により向上する。しかし、それに伴いプロセッサの消費電力や発熱量が増大する等の問題が生じるため、動作周波数の増加等により性能を向上させることは困難であった。そこで2つ以上のプロセッサコア(以下、簡略化のため「コア」という)を搭載したマルチコアプロセッサが登場した。マルチコアプロセッサは、複数の処理を並列に実行することができることから、消費電力や発熱量の問題を回避しながら性能向上を実現することが可能である。
マルチコアプロセッサには、ホモジニアス・マルチコアプロセッサとヘテロジニアス・マルチコアプロセッサとがある。ホモジニアス・マルチコアプロセッサは、同じアーキテクチャのコアを複数搭載しており、例えば、動作周波数やキャッシュメモリの容量を抑え、かつ投機実行等に必要な複雑なハードウェア機構を省いたシンプルコアを単一チップ上に複数搭載することができる。一方、ヘテロジニアス・マルチコアプロセッサは、異なる種類のコアを搭載しており、例えば、Cell(Cell Broadband Engine(登録商標))がある。Cellは、OS等の処理に適した1個のプロセッサコア(PPE)と、メディア処理に適した8個のプロセッサコア(SPE)、を搭載している。
マルチコアプロセッサは、複数の処理を並列に実行することができる。しかし、並列度の高いアプリケーションプログラムにおいても、並列に実行できないクリティカルセクションが存在する場合が多い。クリティカルセクションでは、ロックを用いた排他制御が行われ、ロックを取得した単一のスレッドのみが実行できる。そのため、ロックを取得できなかったスレッドのクリティカルセクションはロックが取得できるまで、待たなければならず、アプリケーションプログラムの実行性能が低下してしまうという問題点がある。
特に、シンプルコアを複数搭載したホモジニアス・マルチコアプロセッサは、クリティカルセクションを低速かつ逐次的に実行するため、多数のロック待ち状態のスレッドを生み出し、アプリケーションプログラムの実行性能を低下させてしまう。
ところで、複数の異なる種類のプロセッサコアを搭載したヘテロジニアス・マルチコアプロセッサにおいては、タスクを効率的に実行するために、並列する複数のタスクを適切なコアに割り当てる手法がある(特許文献1)。特許文献1に記載の手法は、各タスクのIPC(Instructions Per Cycle)やキャッシュミス率等を測定し、実行時間が短くなるように各タスクをプロセッサコアに割り当てる。例えば、キャッシュミスが頻発するタスクはキャッシュの大きなプロセッサコアに割り当てる。
特開2008−90546号公報
特許文献1に記載の手法は、キャッシュミス率等のタスクの実行状況に応じてタスクをコアに割り当てる手法であって、スレッド(タスク)のクリティカルセクションを考慮して、スレッド(タスク)を割り当てるわけではない。そのため、スレッドのクリティカルセクションのロック待ちによる、アプリケーションプログラムの実行性能の低下を解決することはできない。
また、特許文献1に記載の手法は、コアの性能に応じてタスクを割り当てるわけではない。そのため、スレッド(タスク)は、自身に合った性能を有するコアに割り当てられるとは限らない。
本発明は、ヘテロジニアス・マルチコアプロセッサにおいて、スレッドのロック取得待ち時間を短縮することにより、アプリケーションプログラムの実行性能の低下を防ぐことを目的とする。
本発明は、上記課題に鑑み、以下のような解決手段を提供する。本発明は、複数のシンプルコアと少なくとも1つのコンプレックスコアとを搭載したヘテロジニアス・マルチコアプロセッサを用い、クリティカルセクションをコンプレックスコアにて高速に実行し、アプリケーションの性能低下を防ぐためのスレッド実行制御方法およびシステムを提供する。
ここで、「コンプレックスコア」とは、動作周波数が高く、キャッシュメモリの容量が大きく、かつ投機実行等の機能を備え、スレッドを高速で実行することができるコアである。また、「クリティカルセクション」とは、スレッド内に含まれる処理のうち、同時に1つのスレッドしか実行できない処理を意味する。
本発明の1つの態様によると、スレッド実行制御方法は、前記複数のシンプルコアそれぞれまたは前記少なくとも1つのコンプレックスコアそれぞれにて実行されているスレッドのうち、一のスレッドがあるクリティカルセクションのロックを取得している際に、前記複数のシンプルコアにて実行されている他のスレッドが同一のロックの取得を試み、前記他のスレッドが前記一のスレッドとのロック競合に遭遇したことに応じて、前記他のスレッドを前記コンプレックスコアに移送するステップと、前記コンプレックスコアに移送された前記他のスレッドがロックを取得した後、前記コンプレックスコアが前記他のスレッドのクリティカルセクションを実行するステップと、を含む。
本態様によると、まず、ヘテロジニアス・マルチコアプロセッサに搭載されているコアにて実行されているスレッドのうちの一のスレッドがクリティカルセクションのロックを取得している際に、シンプルコアにて実行されている他のスレッドが同一のロックの取得を試みた際にロック競合に遭遇したことに応じて、ロック競合に遭遇した他のスレッドをコンプレックスコアに移送する。ロック競合に遭遇した他のスレッドは、ロックが取得できないため、ロック取得待ちとなる。次に、移送された他のスレッドがロックを取得した後、コンプレックスコアが他のスレッドのクリティカルセクションを実行する。
それにより、並列に実行できないクリティカルセクションを高速に実行できるコンプレックスコアにて実行して、クリティカルセクションの実行時間を短縮することができる。ロック競合に遭遇したスレッドはロックが取得できるまで待つ。その待ち時間は、そのスレッドより前に実行されるスレッドのクリティカルセクションの実行時間である。そのため、スレッドのクリティカルセクションの実行時間を短縮することにより、スレッドのロック取得の待ち時間を削減することができる。なお、ロックとは、他のスレッドを排他制御する排他ロックを意味する。
また、本態様は、シンプルコアの負荷とコンプレックスコアの負荷との比較結果に基づいて、シンプルコアからコンプレックスコアへのスレッド移送を許可するか否かを許可情報として記憶するステップを更に含み、ロック競合に遭遇した前記他のスレッドを前記コンプレックスコアに移送するステップは、前記許可情報がスレッド移送可となっている場合に、ロック競合に遭遇した前記他のスレッドを前記コンプレックスコアに移送する。
それにより、コンプレックスコアに負荷がかかり過ぎていて、シンプルコアでクリティカルセクションを実行したほうが早く処理が終わる場合に、クリティカルセクションをシンプルコアにて実行するようにすることができる。その結果、スレッドのロック取得の待ち時間を短くなるように、クリティカルセクションを実行するコアを選択することができる。
本発明は、FreeBSDやLinux等の、既存の技術と組み合わせることができ、そのように組み合わせた技術もまた、本発明の技術範囲に含まれる。同様に、本発明の技法を含むパーソナル・コンピュータや携帯端末(PDA)等も、本発明の技術範囲に含まれる。更に、本発明の技法は、スレッド実行制御方法の諸段階を、FPGA(現場でプログラム可能なゲートアレイ)、ASIC(特定用途向け集積回路)、これらと同等のハードウェアロジック素子、プログラム可能な集積回路、またはこれらの組み合わせが記憶し得るプログラムの形態、すなわちプログラム製品として提供し得る。具体的には、データ入出力、データバス、メモリバス、システムバス等を備えるカスタムLSI(大規模集積回路)の形態として、本発明に係るスレッド実行制御システムを提供でき、そのように集積回路に記憶されたプログラム製品の形態も、本発明の技術範囲に含まれる。
本発明によれば、複数のシンプルコアと少なくとも1つのコンプレックスコアとを搭載したヘテロジニアス・マルチコアプロセッサを用い、クリティカルセクションをコンプレックスコアにて実行し、アプリケーションの性能低下を防ぐためのスレッド実行制御方法およびシステムを提供することができる。また、ロック競合に遭遇したスレッドのクリティカルセクションをコンプレックスコアにて実行することにより、スレッドのロック取得の待ち時間を削減することができ、アプリケーションプログラムの実行性能の低下を防ぐことができる。
以下、本発明の実施形態について図を参照しながら説明する。なお、これらはあくまでも一例であって、本発明の技術的範囲はこれらに限られるものではない。なお、以下の説明において、ヘテロジニアス・マルチコアプロセッサは1つのコンプレックスコアと複数のシンプルコアを備える。
図1は、ロック競合に遭遇したスレッドのタイムチャートを示す図である。図1を用いて、本発明の一実施形態係るスレッドの実行制御方法の概要について、従来技術と対比して説明する。
図1(a)は、従来技術に係るホモジニアス・マルチコアプロセッサにおける、ロック競合に遭遇したスレッドのタイムチャートである。一方、図1(b)は、本発明の一実施形態に係るヘテロジニアス・マルチコアプロセッサにおける、ロック競合に遭遇したスレッドのタイムチャートである。
図1(a)および(b)では3つのスレッド、スレッドA、スレッドB、およびスレッドCがそれぞれシンプルコア1、シンプルコア2、シンプルコア3で実行され、各スレッドはクリティカルセクションにおいて、それぞれロックの取得を試みる。なお、スレッドのロック取得における優先順位は、スレッドA、スレッドB、スレッドCの順であるとする。
図1(a)に示すように、最初にスレッドAがロックを取得する(lock)と、スレッドBおよびスレッドCはロックが解放されるのを待つ(wait)。スレッドAのクリティカルセクションが完了し、ロックを解放する(unlock)と、次に、スレッドBがロックを取得し(lock)、スレッドCは更にロックが解放されるのを待つ(wait)。スレッドAはロック解放後、クリティカルセクション以外の処理をスレッドBのクリティカルセクションと平行して実行し、全ての処理が完了するとスレッドAは完了する。スレッドBおよびスレッドCも同様である。
図1(a)に示すように、スレッドAがロックを解放してからスレッドBがロックを取得するまでには、時間差T1がある。スレッドAとスレッドBとはシンプルコアが異なるため、スレッドAがロックを解放したことをスレッドBが認識するまで時間がかかるためである。同様に、スレッドBがロックを解放してからスレッドCがロックを取得するまでには、時間差T2がある。
図1(a)に示す従来技術に係るホモジニアス・マルチコアプロセッサにおいて、スレッドCがロック競合に遭遇してからロックを取得するまでには、シンプルコアによるスレッドAのクリティカルセクションの実行時間と、時間差T1と、シンプルコアによるスレッドBのクリティカルセクションの実行時間T10と、時間差T2との合計時間、待たなければならない。
一方、図1(b)に示すように、本発明の一実施形態に係るヘテロジニアス・マルチコアプロセッサにおいては、図1(a)と同様に、最初にスレッドAがロックを取得し(lock)、スレッドBおよびスレッドCはロックが解放されるのを待つ(wait)。それと同時に、スレッドBおよびスレッドCは、それぞれ自身をコンプレックスコアへ移送(migrate)する。ここで、移送とは、明示的にスレッドに実行するコアを指定することをいう。
スレッドAがロックを解放する(unlock)と、スレッドBはコンプレックスコア上でロックを取得し(lock)、クリティカルセクションを実行する。スレッドBは、クリティカルセクション完了すると、完了と同時に自身を元のシンプルコア2へ移送する。シンプルコア2に移送されたスレッドBはクリティカルセクション以外の処理をスレッドCのクリティカルセクションと平行して実行し、全ての処理が完了するとスレッドBは完了する。スレッドCも同様である。
コンプレックスコアでのクリティカルセクションの実行時間は、シンプルコアでの実行時間に比べ短い。また、図1(b)に示すように、コンプレックスコアにおいて、スレッドBがロックを解放して(unlock)からスレッドCがロックを取得する(lock)までには、図1(a)の場合と異なり時間差がない。これは、スレッドBとスレッドCとが同じコンプレックスコア上にあるので、スレッドBがロックを解放したことをスレッドCが認識するまで時間がかからないためである。
図1(b)に示す本発明の一実施形態に係るヘテロジニアス・マルチコアプロセッサにおいて、スレッドCがロック競合に遭遇してからロックを取得するまでには、シンプルコアによるスレッドAのクリティカルセクションの実行時間と、時間差T1と、コンプレックスコアによるスレッドBのクリティカルセクションの実行時間T110と、の合計時間、待たなければならない。
本発明の一実施形態に係るヘテロジニアス・マルチコアプロセッサを用いることにより、スレッドCがロック競合に遭遇してからロック取得までの待ち時間は、従来技術と比較して、シンプルコアとコンプレックスコアとのスレッドBのクリティカルセクションの実行時間の差T10−T110と、スレッドBがロックを解放してからスレッドCがロックを取得するまでの時間差T2との分、短縮される。
このように、ロックが競合しロックを取得できなかったスレッドをコンプレックスコアに移送し、スレッドのクリティカルセクションの実行をコンプレックスコア上で行うことにより、シンプルコア上で行うよりも実行時間を短縮することができる。また、ロック待ちのスレッドをコンプレックスコア上にまとめることにより、スレッド間のロックの解放とロックの取得との時間差を無くすことができる。その結果、各スレッドのクリティカルセクションをそれぞれのシンプルコアで実行する場合に比べ、ロック競合が生じているスレッドのロック競合に遭遇してからロック取得までの待ち時間を削減することができ、クリティカルセクションにより生じるアプリケーションプログラムの実行性能の低下を防ぐことができる。
図2は、本発明の一実施形態に係る、スレッド移送システム1を示す図である。図1(b)にて概要を示した、本発明の一実施形態におけるスレッドの実行制御方法を実現するためのスレッド移送システムについて図2を用いて説明する。
スレッド移送システム1は、シンプルコア30−n(図2においては、n=1〜4)とコンプレックスコア50とを搭載したヘテロジニアス・マルチコアプロセッサを利用する。スレッド移送システム1は、移送制御部20と、OSカーネル40と、スレッド60−m(図2においては、m=1〜3)と、にて構成される。移送制御部20は、シンプルコア30−4にて実行されるスレッドである。なお、コンプレックスコアを複数搭載するヘテロジニアス・マルチコアプロセッサの場合には、コンプレックスコアにて実行されてもよい。スレッド60−nはシンプルコア30−nまたはコンプレックスコア50にて実行される。なお、シンプルコア、スレッドは複数あるが、以下の説明において、移送対象をスレッド60とし、そのスレッド60が実行されているコアをシンプルコア30とする。
移送制御部20は、シンプルコア30上のスレッド60をコンプレックスコア50へ移送可能か否かの判断を行い、その判断結果(許可情報)を保持する。シンプルコア30上のスレッド60をコンプレックスコア50へ移送可能か否かの判断は、一定間隔、例えば10秒毎、に行う。移送制御部20に保持されている許可情報は、スレッド60にスレッド移送が生じた際にスレッド60にて参照される。ここで、スレッド移送が生じた際とは、スレッドがロック競合に遭遇した際のことである。
シンプルコア30上のスレッド60をコンプレックスコア50へ移送可能か否かの判断は、複数のシンプルコア30−nそれぞれの負荷とコンプレックスコア50の負荷とをサンプリングし、複数のシンプルコア30−nの平均負荷とコンプレックスコア50の負荷とを比較して行う。コンプレックスコア50の負荷が複数のシンプルコア30−nの平均負荷に比べて高い場合には、許可情報を移送不可とする。一方、それ以外の場合には、許可情報を移送可とする。
シンプルコア30上のスレッド60は、ロック競合に遭遇すると自身をコンプレックスコア50へ移送する処理を行う。なお、ロック競合に遭遇しない場合には、スレッド60はロックを取得し、シンプルコア30にて実行される。スレッド60は、移送制御部20に保持されている許可情報を確認する確認部と、後述する処理3を行う移送部とを備える。ロック競合に遭遇するとシンプルコア30上のスレッド60は、まず、コンプレックスコア50へスレッド移送が可能か否かの判断を行うために、移送制御部20に保持されている許可情報を確認する(101)。許可情報が「移送可」となっている場合には、スレッド60はスレッド移送するための処理を行う。一方、許可情報が「移送不可」となっている場合には、スレッド60はロックが取得できるまで、シンプルコア30上にて待つ。
ここで、スレッドがロック競合に遭遇するとは、スレッドがロックを取得しようとした際に、他のスレッドによってそのロックが取得されていることである。
シンプルコア30上のスレッド60はスレッド移送するための処理を行う前に、まずスレッド60は自身が既にコンプレックスコア50上にいるか否かを判断する。既に、スレッド60がコンプレックスコア50にいる場合には、スレッド移送を行う必要がないためである。
一方、スレッド60がコンプレックスコア50にいない場合には、スレッド60は以下の3つの処理を行う。
処理1:現在のシンプルコア30を特定する情報を、スレッドローカルな記憶領域(スタック領域)に記憶する(102)。
処理2:スレッドローカルな記憶領域に記憶されているネストカウンタを1にセットする(103)。
処理3:スレッド60が自身をコンプレックスコア50へ移送する(105)。
コンプレックスコア50に移送されたスレッド60はコンプレックスコアにて処理が完了すると、元のシンプルコア30へ再移送される(106)。そのため、再移送の際の移送先である、現在のシンプルコア30をスレッドローカルな記憶領域に記憶する処理1を行う。
ネストカウンタは、クリティカルセクションがネストしている場合、コンプレックスコア50に移送されたスレッド60のクリティカルセクションが完了した時に、スレッドを移送元のシンプルコア30に再移送するために用いられる。ネストカウンタが0である場合には、ネストカウンタを1にセットする処理2を行う。なお、ネストカウンタが0よりも大きい場合には、スレッド60はコンプレックスコア50へ移送されず、クリティカルセクション開始時にネストカウンタをインクリメントする。
処理3にて、スレッド60はコンプレックスコア50へ移送するためのシステムコールを呼び出し(104)、OSカーネルが提供する機能を利用して自身をコンプレックスコア50へ移送する(105)。スレッド60のスレッド移送が完了した後、スレッド60はロック取得を再び試みる。これは、スレッド60がコンプレックスコアに移送された後、スレッド60が実行されるまでのある程度の時間が経過する間にロックが解放されている場合を考慮して、一度のみロックの取得を試みる。この時点でロックの取得が成功すれば、スレッド60はそのままクリティカルセクションをコンプレックスコア50上で実行する。一方、ロックの取得に失敗した場合、スレッド60は、コンプレックスコア50の実行キューの中に置かれ、ロックが取得できるまで待つ。
コンプレックスコア50上のスレッド60は、クリティカルセクションが完了すると、ロックを解放し、自身を元のシンプルコアへ再移送する処理を行う。コンプレックスコア50上のスレッド60はスレッドローカルな記憶領域のネストカウンタをデクリメントした後、ネストカウンタが0であるか否かの判断を行う。ネストカウンタが0である場合には、スレッド60のクリティカルセクションは全て完了したと判断し、自身を元のシンプルコアへ再移送するためのシステムコールを呼び出す(図示せず)。システムコール内で、コンプレックスコア50上のスレッド60は、自身をシンプルコア30へ移送する(106)。一方、ネストカウンタが0でない場合には、スレッド60には、コンプレックスコア50にて実行するクリティカルセクションが残っていると判断し、自身を元のシンプルコアへ再移送する処理を行わない。
上述したスレッド移送システム1を用いることにより、ロック競合に遭遇したスレッドをコンプレックスコアにて実行することできる。その結果、ロック競合に遭遇したスレッドがロックを取得するまでの待ち時間を短縮することができる。
図3は、本発明の一実施形態に係る、ロック取得時のスレッド移送アルゴリズムを示す図である。シンプルコア上のスレッドがロック競合に遭遇すると処理が開始する。
S10:スレッドは、スレッドローカルな記憶領域のネストカウンタが0であるか否か判断する。判断結果が、YESの場合にはステップS30へ処理を移し、NOの場合にはステップS20へ処理を移す。
S20:スレッドは、ネストカウンタをインクリメントし、ステップS70へ処理を移す。
S30:スレッドは、移動制御部の許可情報を参照し、コンプレックスコアへのスレッド移送が可能であるか否かを判断する。判断結果が、YESの場合にはステップS40へ処理を移す。一方、NOの場合には、スレッドはそのままシンプルコアに残り、ステップS70へ処理を移す。
S40:スレッドは、自身がすでにコンプレックスコアにいるか否かを判断する。判断結果が、YESの場合にはすでにコンプレックスコアにいるスレッドについてステップS70へ処理を移し、NOの場合にはステップS50へ処理を移す。
S50:スレッドは、現在のシンプルコアを特定する情報を、スレッドローカルな記憶領域に記憶し(処理1)、スレッドローカルな記憶領域に記憶されているネストカウンタを1にセットし(処理2)、その後、自身をコンプレックスコアへ移送する(処理3)。
S60:スレッドは、ロックの取得を試みる。スレッドがロックの取得に成功した場合には、処理は完了し、コンプレックスコアにてクリティカルセクションが実行される。一方、スレッドがロックの取得に失敗した場合には、ステップS70へ処理を移す。
S70:スレッドは、ロックが取得できるまで待つ。なお、ステップS20、S30から処理が移ってきた場合には、スレッドはコンプレックスコアにてロック取得を待ち、ステップS40、S60から移ってきた場合には、スレッドはシンプルコアにてロック取得を待つ。
図4は、本発明の一実施形態に係る、ロック解放時のスレッド移送アルゴリズムを示す図である。スレッドは、クリティカルセクションの実行を完了した後、処理を開始する。
S110:スレッドは、ロックを解放する。
S120:スレッドは、スレッドローカルな記憶領域のネストカウンタが0であるか否かの判断を行う。判断結果が、YESの場合には処理を完了し、NOの場合にはステップS130へ処理を移す。
S130:スレッドは、ネストカウンタをデクリメントする。
S140:スレッドは、再度、ネストカウンタが0であるか否かの判断を行う。判断結果が、YESの場合にはS150へ処理を移し、NOの場合には処理を完了する。
S150:スレッドは、スレッドローカルな記憶領域に記憶されている元のシンプルコアを特定する情報に基づいて、システムコールを呼び出す。システムコール内で、システムコールを呼び出したスレッドは、自身を元のシンプルコアへ移送する。
[実装例]
本発明の実装例として、Java(登録商標)のsynchronizedブロックにおけるロック取得待ち時間を削減するために、Linux2.6が提供するスレッド移送のためのシステムコールを用いるプログラム例について説明する。
現在の多くのJava実行環境において、スレッドは、ロックの取得に失敗しても、すぐにconditional waitすることはなく、しばらくの間spin−waitしながらロックの取得を試みる。spin−wait中にロックが取得できない場合にのみ、スレッドはconditional waitする。ここで、conditional waitとは、あるスレッドを他のスレッドがあることを終えるまで停止することをいう。また、spin−waitとは2つのスレッドが別々なプロセッサ上で走っていて、片方のスレッドがある処理を終えるまでもう片方のスレッドを待たせておきたい場合等に、待つ方のスレッドはループに入って、もう片方のスレッドが、処理を終えるまで意味のないループ処理を継続することをいう。
spin−wait中に取得可能なロックに対して本発明を適用すると、スレッド移送のためのシステムコールに要する時間が、ロック取得のための待ち時間を超えてしまい性能が低下する可能性がある。そのため、spin−wait中に取得できないロックに対してのみ本発明を適用する。
次の式(I)に、本発明の実装例に係るロック取得時にスレッド移送を行うコードを示す。式(I)を用いて、ロック取得時のスレッド移送処理について説明する。式(I)の11行目に示すように、スレッド移送は、スレッドが使用するコアを指定することができるsched_setaffinityシステムコールを通して行われる。スレッド移送完了後、13行目に示すように、pthread_mutex_trylockシステムコールを通して、1度だけロックの取得を試みる。pthread_mutex_trylockシステムコールは、ロックの取得を試み、他のスレッドによってロックが取得されていない場合にはロックを取得し、他のスレッドによってロックが取得されている場合にはロックを取得しない。
pthread_mutex_trylockシステムコールにて、ロックの取得に成功すれば、スレッドはconditional waitすることなしに、クリティカルセクションをコンプレックスコア上で実行する。一方、ロック取得に失敗した場合には、pthread_mutex_trylockシステムコールを通してスレッドをconditional waitとする。
Figure 0005300005
次の式(II)にロック解放時にスレッド移送を行うコードを示す。式(II)を用いて、ロック解放時のスレッド移送処理について説明する。3行目に示すように、ロックの解放は、pthread_mutex_unlockシステムコールを通して行われる。続いて、7行目にて、sched_setaffinityシステムコールを通して、スレッドを元のシンプルコアに移送した後、11行目にて再度sched_setaffinityシステムコールを呼び出す。これは、元のシンプルコアに移送されたスレッドのaffinity値を元の値に戻すことにより、このスレッドの実行を1つのコアに限定するのを避けるためである。ただし、2回目のsched_setaffinityシステムコールでは、既にスレッドがaffinityの付いたコアで実行されているため、スレッドの移送は起こらずオーバヘッドは少ない。これにより、後続のスレッドに対して速やかに複雑コアを明け渡すことが可能になる。なお、affinity値とは、スレッドを実行するコアを指定したものである。
Figure 0005300005
上述した、本発明の実装例において、図2に示した移送制御部が移送許可の情報をセット、リセットする手法について説明する。なお、移送許可の情報をセットするとは「移送可」とすることを意味し、一方、リセットするとは「移送不可」とすることを意味する。
Linux 2.6では、コア毎に実行キューが存在する。本手法では、各コアの負荷を、スレッドがconditional waitから復帰してから実際にコア上で実行されるまでの時間を実行キューの長さで見積もり、その時間に応じて移送許可の情報をセット、リセットする。移送制御部は、各コアの実行キューの長さをサンプリングし、次の式(III)が成り立つ場合には移送許可の情報をセットし、成り立たない場合には移送許可の情報をリセットする。
Figure 0005300005
ここで、Lsimpleはシンプルコアの実行キューの長さの平均、Lcomplexは複雑コアの実行キューの長さ、Rはコンプレックスコアとシンプルコアの処理速度の比である。ここでは、Rを動作周波数の比として次の式(IV)のように定義する。
Figure 0005300005
ここでFcomplexおよびFsimpleはそれぞれコンプレックスコアとシンプルコアの動作周波数である。ただし、コアの処理速度は、アプリケーションに依存するため、典型的なベンチマークを使って処理速度を計測しておき、その処理速度の比を使うことも可能である。また、本手法では、シンプルコアの実行キューの平均長を用いているが、移送をより保守的に行いたい場合は、シンプルコアの実行キューの長さの最小値を用いることもできる。このようにして、スレッドがシンプルコアからコンプレックスコアへ移送する際に参照する移送許可の情報を、移送制御部がセット、リセットすることができる。
以上、本発明を実施形態に則して説明したが、本発明は上述した実施形態に限るものではない。また、本発明の実施形態に記載された効果は、本発明から生じる最も好適な効果を列挙したに過ぎず、本発明による効果は、本発明の実施形態または実施例に記載されたものに限定されるものではない。
ロック競合に遭遇したスレッドのタイムチャートを示す図である。 本発明の一実施形態に係る、スレッド移送システムを示す図である。 本発明の一実施形態に係る、ロック取得時のスレッド移送アルゴリズムを示す図である。 本発明の一実施形態に係る、ロック解放時のスレッド移送アルゴリズムを示す図である。
符号の説明
1 スレッド移送システム
10 ヘテロジニアス・マルチコアプロセッサ
20 移動制御部
30 シンプルコア
40 OSカーネル
50 コンプレックスコア
60 スレッド

Claims (7)

  1. ヘテロジニアス・マルチコアプロセッサのスレッド実行制御方法であって、
    前記ヘテロジニアス・マルチコアプロセッサは、複数のシンプルコアと少なくとも1つのコンプレックスコアとを搭載し、
    前記スレッド実行制御方法は、
    前記複数のシンプルコアそれぞれまたは前記少なくとも1つのコンプレックスコアそれぞれにて実行されているスレッドのうち、一のスレッドがクリティカルセクションのロックを取得するステップと
    前記複数のシンプルコアにて実行されている他のスレッドが、前記一のスレッドによって取得されたロックと同一のロックの取得を試みるステップと
    前記同一のロックの取得を試みた他のスレッドが前記一のスレッドとのロック競合に遭遇したことに応じて、スレッド自身を前記コンプレックスコアに移送するステップと、
    前記コンプレックスコアに移送された他のスレッドが、前記同一のロックの取得を試み、前記同一のロックを取得するステップと
    前記同一のロックを取得した前記移送された他のスレッドが、前記コンプレックスコアにて、クリティカルセクションを実行するステップと、
    を含むスレッド実行制御方法。
  2. 一定時間間隔毎に、前記複数のシンプルコアのうち特定のシンプルコアにて実行されるスレッドが、前記シンプルコアの負荷と前記コンプレックスコアの負荷とを比較し、比較結果に基づいて、前記シンプルコアから前記コンプレックスコアへのスレッド移送を許可するか否かを許可情報として記憶するステップを更に含み、
    前記コンプレックスコアに移送するステップは、前記許可情報がスレッド移送可となっている場合に、移送する、請求項1に記載のスレッド実行制御方法。
  3. レッドはネストカウンタを有し、
    前記コンプレックスコアに移送するステップは、
    前記ロック競合に遭遇した他のスレッドが、スレッド自身を前記コンプレックスコアに移送する際に、前記ネストカウンタを1にセットするステップと、
    前記ロック競合に遭遇した他のスレッドが、スレッド自身が存在するシンプルコアを特定する情報をスレッド自身のスタック領域に記憶するステップと、
    を更に含む請求項1に記載のスレッド実行制御方法。
  4. 前記実行するステップは、
    前記コンプレックスコアに移送された他のスレッドが、前記コンプレックスコアによりクリティカルセクションが完了したことに応じて、ロックを解放するステップと、
    前記コンプレックスコアに移送された他のスレッドが、スレッド自身を、当該スレッド自身のスタック領域に記憶されている移送元のシンプルコアを特定する情報に基づいて、前記移送元のシンプルコアに移送するステップと、
    を更に含む請求項に記載のスレッド実行制御方法
  5. 前記ロックを解放するステップは、
    前記コンプレックスコアに移送された他のスレッドが、前記ロックを解放した前記ネストカウンタをデクリメントし、前記ネストカウンタが0であるか否か判断するステップと
    記判断するステップにて、前記ネストカウンタが0であると判断した場合に、前記コンプレックスコアに移送された他のスレッドが、スレッド自身を前記移送元のシンプルコアに移送するステップと、
    を更に含む請求項に記載のスレッド実行制御方法。
  6. ヘテロジニアス・マルチコアプロセッサを備えるコンピュータに、請求項1に記載の方法の各ステップを実行させるためのスレッド実行制御プログラム。
  7. ヘテロジニアス・マルチコアプロセッサを備えるコンピュータにおける、スレッド実行制御システムであって、
    前記ヘテロジニアス・マルチコアプロセッサは、複数のシンプルコアと少なくとも1つのコンプレックスコアとを搭載し
    記複数のシンプルコアにてそれぞれ実行されるスレッドは、
    クリティカルセクションのロックを取得する手段と、
    前記複数のシンプルコアのうちの一のシンプルコアにて実行されているスレッドによって取得されたロックと同一のロックの取得を試みる手段と
    前記同一のロックの取得を試み、ロック競合に遭遇したことに応じて、スレッド自身を前記コンプレックスコアに移送する手段と、を備え、
    前記コンプレックスコアに移送されたスレッドは、
    前記同一のロックの取得を試み、前記同一のロックを取得する手段と、
    前記コンプレックスコアにて、クリティカルセクションを実行する手段と、
    を備えるスレッド実行制御システム。
JP2008304369A 2008-11-28 2008-11-28 スレッド実行制御方法、およびシステム Active JP5300005B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2008304369A JP5300005B2 (ja) 2008-11-28 2008-11-28 スレッド実行制御方法、およびシステム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2008304369A JP5300005B2 (ja) 2008-11-28 2008-11-28 スレッド実行制御方法、およびシステム

Publications (2)

Publication Number Publication Date
JP2010128895A JP2010128895A (ja) 2010-06-10
JP5300005B2 true JP5300005B2 (ja) 2013-09-25

Family

ID=42329232

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2008304369A Active JP5300005B2 (ja) 2008-11-28 2008-11-28 スレッド実行制御方法、およびシステム

Country Status (1)

Country Link
JP (1) JP5300005B2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2024177197A1 (en) * 2023-02-21 2024-08-29 Samsung Electronics Co., Ltd. Method and electronic device for data packet flow distribution in multi-core processor

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8683468B2 (en) 2011-05-16 2014-03-25 Advanced Micro Devices, Inc. Automatic kernel migration for heterogeneous cores
JP5773065B2 (ja) * 2012-03-19 2015-09-02 富士通株式会社 スケジューリングプログラム、マルチコアプロセッサシステム、およびスケジューリング方法
US9378069B2 (en) 2014-03-05 2016-06-28 International Business Machines Corporation Lock spin wait operation for multi-threaded applications in a multi-core computing environment

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7159220B2 (en) * 2001-09-28 2007-01-02 Intel Corporation Flexible acceleration of java thread synchronization on multiprocessor computers
US7234143B2 (en) * 2002-06-20 2007-06-19 Hewlett-Packard Development Company, L.P. Spin-yielding in multi-threaded systems
US20040019722A1 (en) * 2002-07-25 2004-01-29 Sedmak Michael C. Method and apparatus for multi-core on-chip semaphore
US7437581B2 (en) * 2004-09-28 2008-10-14 Intel Corporation Method and apparatus for varying energy per instruction according to the amount of available parallelism
US7509463B2 (en) * 2005-12-01 2009-03-24 Sony Computer Entertainment, Inc. Cell processor atomic compare and swap using dedicated synergistic processor element

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2024177197A1 (en) * 2023-02-21 2024-08-29 Samsung Electronics Co., Ltd. Method and electronic device for data packet flow distribution in multi-core processor

Also Published As

Publication number Publication date
JP2010128895A (ja) 2010-06-10

Similar Documents

Publication Publication Date Title
US11314562B2 (en) Systems and methods for performing concurrency restriction and throttling over contended locks
US7603502B2 (en) Resource accessing with locking
US8875151B2 (en) Load balancing method and apparatus in symmetric multi-processor system
US7844973B1 (en) Methods and apparatus providing non-blocking access to a resource
JP4759273B2 (ja) データ処理装置及び共用資源へのアクセス制御方法
US7653791B2 (en) Realtime-safe read copy update with per-processor read/write locks
US8713573B2 (en) Synchronization scheduling apparatus and method in real-time multi-core system
Attiya et al. Transactional scheduling for read-dominated workloads
JPH07191944A (ja) 多重プロセッサによる多数の資源への命令におけるデッドロックを防止するためのシステムおよび方法
CN110727675B (zh) 一种链表的处理方法及装置
TW200540705A (en) Methods and apapratus for processor task migration in a multi-processor system
JP2007537504A (ja) コンピュータ装置用のオペレーティング・システムの、またはそれに関する改良
CN107003896B (zh) 具有共享事务处理资源的装置和数据处理方法
WO2009113381A1 (ja) マルチプロセッサシステム、マルチプロセッサシステムのos間デバイス共有方法
JP5516728B2 (ja) マルチコアプロセッサシステム、制御プログラム、および制御方法
US8495642B2 (en) Mechanism for priority inheritance for read/write locks
JP5300005B2 (ja) スレッド実行制御方法、およびシステム
KR100850387B1 (ko) 패시브 스레드 및 액티브 세마포어를 갖는 처리 아키텍쳐
US9047121B2 (en) System and method for scheduling jobs in a multi-core processor
US7984444B1 (en) Composite abortable locks
EP2256627A2 (en) Queuing for locks on data
CN117707798A (zh) 多线程并发状态下的死锁消除方法、装置、设备及介质
JP2011175378A (ja) マルチプロセッサシステム、及びマルチプロセッサシステムの動作方法
JP7346649B2 (ja) 同期制御システムおよび同期制御方法
US20170236062A1 (en) Thread coordination in a rule engine using a state machine

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20110908

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20130214

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20130219

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20130513

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: 20130528

RD14 Notification of resignation of power of sub attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7434

Effective date: 20130529

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20130613

R150 Certificate of patent or registration of utility model

Ref document number: 5300005

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150