JP5429396B2 - 情報処理装置、情報処理プログラム、および情報処理方法 - Google Patents
情報処理装置、情報処理プログラム、および情報処理方法 Download PDFInfo
- Publication number
- JP5429396B2 JP5429396B2 JP2012537510A JP2012537510A JP5429396B2 JP 5429396 B2 JP5429396 B2 JP 5429396B2 JP 2012537510 A JP2012537510 A JP 2012537510A JP 2012537510 A JP2012537510 A JP 2012537510A JP 5429396 B2 JP5429396 B2 JP 5429396B2
- Authority
- JP
- Japan
- Prior art keywords
- thread
- common variable
- value
- information processing
- storage destination
- 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/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/4881—Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
-
- 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/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Description
本発明は、書き込み要求を制御する情報処理装置、情報処理プログラム、および情報処理方法に関する。
従来より、マルチスレッド処理では1つのプロセスを複数のスレッドに分割し、該複数のスレッドを平行して実行させる。変数によっては複数のスレッド間で書き込みが行われる。ここで、複数のスレッド間で書き込みが行われる変数を共通変数と称する。
シングルコアプロセッサシステムにおいて共通変数を有するスレッドを実行するには逐次処理を行うことで、スレッドの実行順序が変わってしまうことにより最終的な共通変数の値が異なるのを防止することができる。
ここで、共通変数に関して、ブラウザ処理のバナー表示処理を例に挙げて説明する。バナー表示処理では表示するデータを共有メモリへ格納する。バナー表示処理が複数ある場合、各バナー表示で表示するデータをHTML(Hyper Text Markup Language)文書に記載されたバナーの表示順(Zオーダー)に沿ってメモリへ格納する。表示によってはバナー同士が重なって表示される場合があるため、バナーの表示順を遵守してバナー表示処理が実行されなければならないため、上述したように逐次処理が行われる。
また、共有メモリ型マルチコアプロセッサシステムでは、各スレッドはマルチコアプロセッサから任意のCPU(Central Processing Unit)に割り当てられることで、該スレッドの処理が実行される。マルチコアプロセッサシステムでは、各CPUが他のCPUの実行状況に関係なく、該各CPUに割り当てられたスレッドを実行する。各CPUは共通変数を有するスレッドを実行する場合、該共通変数を有する他のすべてのスレッドと逐次処理を行うか同期処理を行う必要がある。
また、CPUごとに共通変数をそれぞれのCPUのキャッシュ上に格納し、CPU間通信を行うことで、他のスレッドの実行状況に基づいて共有メモリへ共通変数を書き込んでいた(たとえば、下記特許文献1,2を参照。)。
しかしながら、逐次処理ではスループットが低下する問題点があり、同期処理ではオーバーヘッドにより実行効率が低下してしまう問題点があった。また、マルチコアプロセッサシステムにおいて、CPUごとに共通変数をそれぞれのCPUのキャッシュ上に格納する場合、複数のスレッドが同一CPUに割り当てられると、逐次処理を行うため、スループットが低下する問題点があった。さらに、CPU間通信によってオーバーヘッドが発生し、実行効率が低下してしまう問題点があった。
本発明は、上述した従来技術による問題点を解消するため、スループットおよび実行効率を向上させることができる情報処理装置、情報処理プログラム、および情報処理方法を提供することを目的とする。
本発明の一観点によれば、対象プロセス内の同一の共通変数の値についての書き込み要求を有するスレッド群の各スレッドの前記共通変数の値の格納先を、前記書き込み要求で定義された特定の格納先から前記スレッドごとにそれぞれ異なる格納先に設定し、前記スレッド群のスレッドごとに前記共通変数の値を設定された前記スレッドの格納先に格納し、前記スレッド群のすべてのスレッドが終了すると、前記スレッドごとに格納された前記共通変数の各値を前記対象プロセスで定義された前記スレッド群の実行順に読み出し、読み出した前記共通変数の各値を前記実行順に前記特定の格納先へ上書きする情報処理装置、情報処理プログラム、および情報処理方法が提供される。
本情報処理装置、情報処理プログラム、および情報処理方法によれば、スループットおよび実行効率を向上させることができるという効果を奏する。
以下に添付図面を参照して、本発明にかかる情報処理装置、情報処理プログラム、および情報処理方法の好適な実施の形態を詳細に説明する。
図1は、本発明の一実施例を示す説明図である。ここでは、アプリケーションの一例として、ブラウザ内のバナー表示1およびバナー表示2を挙げる。図1では、ブラウザのバナー表示の重なり箇所を共通変数aとしている。テーブル100はブラウザ処理のスレッドの実行順序を示す情報である。テーブル100では、スレッドIDの項目101と順番の項目102とを有している。スレッドIDの項目101にはスレッドの識別情報が登録されている。順番の項目102には実行順番が登録されている。実行順番はブラウザ処理がHTML文書を解析することにより得られる情報である。テーブル103は共通変数aを有するスレッドごとの共通変数aの値の格納先を示す情報である。テーブル103はスレッドIDの項目104と共通変数aの格納先の項目105とを有している。
まず、OSが、ブラウザ処理が起動されると、ブラウザ処理に含まれるバナー表示処理1とバナー表示処理2との共通変数aの値の格納先を、該共通変数aの書き込み要求で定義された特定の格納先からスレッドごとにそれぞれ異なる格納先をメモリ上に確保する。そして、OSが、(1)テーブル103に確保した各格納先を設定する。
つぎに、OSが、(2)バナー表示処理2からの共通変数aの書き込み要求を検出すると、(3)バナー表示処理2の共通変数aの値の格納先に検出した書き込み要求の共通変数aの値を格納する。つぎに、OSが、(4)バナー表示処理1からの共通変数aの書き込み要求を検出すると、(5)バナー表示処理1の共通変数aの値の格納先に検出した書き込み要求の共通変数aの値を格納する。
そして、OSが、バナー表示処理1およびバナー表示処理2の終了を検出すると、共通変数aの各値をテーブル103に登録された番号の順番に読み出し、(6)読み出した共通変数aの値を特定の格納先へ上書きする。共通変数aの値にはバナー表示処理2の共通変数aの値である5が登録される。
バナー表示処理2における共通変数aの値の書き込み処理のあとに、バナー表示処理1における共通変数aの値の書き込み処理が実行されても、共通変数aの値はバナー表示処理2における共通変数aの値となる。
本実施の形態では情報処理装置の一例としてマルチコアプロセッサシステムを挙げて説明する。ここで、マルチコアプロセッサシステムにおいて、マルチコアプロセッサとは、コアが複数搭載されたプロセッサである。コアが複数搭載されていれば、複数のコアが搭載された単一のプロセッサでもよく、シングルコアのプロセッサが並列されているプロセッサ群でもよい。なお、本実施の形態では、説明を単純化するため、シングルコアのプロセッサが並列されているプロセッサ群を例に挙げて説明する。
また、本実施の形態では、各スレッドの格納先を各スレッドの出力領域と称し、実行順を優先度としている。本実施の形態ではスレッドの優先度の値が1であれば、最も優先度が低いスレッドであり、優先度の値が大きくなれば、優先度が高いスレッドとなる。優先度が低いスレッド順に特定の格納先へ該スレッドの出力領域に格納された共通変数の値が格納される。
(情報処理装置のハードウェア)
図2は、情報処理装置のハードウェアを示すブロック図である。図2において、情報処理装置200は、CPU#0と、CPU#1と、共有キャッシュ202と、共有メモリ201と、を有している。CPU#0と、CPU#1と、共有キャッシュ202とは、それぞれバス203を介して接続されている。
図2は、情報処理装置のハードウェアを示すブロック図である。図2において、情報処理装置200は、CPU#0と、CPU#1と、共有キャッシュ202と、共有メモリ201と、を有している。CPU#0と、CPU#1と、共有キャッシュ202とは、それぞれバス203を介して接続されている。
CPU#0は、分散キャッシュ210と、レジスタと、コアと、を有している。CPU#1は、分散キャッシュ211と、レジスタと、コアと、を有している。CPU#0はOS230を実行し、情報処理装置200の全体の制御を司る。OS230はマスタOSであり、スレッドをどのCPUに割り当てるかを制御する機能を有し、該CPU#0に割り当てられたスレッドを実行する。CPU#1はOS231を実行し、OS231に割り当てられたスレッドを実行する。OS231はスレーブOSであり、CPU#1に割り当てられたスレッドを実行する。
実行待ちキュー223は、マスタOSであるOS230が有するキューである。たとえば、割り当て指示が発生したスレッドは実行待ちキュー223に入れられ、OS230が実行待ちキュー223からスレッドを取り出し、OS230がどのCPUに割り当てるかを決定する。
レディーキュー220は、OS230が有するキューである。CPU#0に割り当てられたスレッドで、実行待機状態であるスレッドはすべてレディーキュー220に登録される。レディーキュー220に登録されたスレッドは、OS230によって登録された順や優先度に応じて取り出され、CPU#0に実行される。
レディーキュー221は、OS231が有するキューである。CPU#1に割り当てられたスレッドで、実行待機状態であるスレッドはすべてレディーキュー221に登録される。レディーキュー221に登録されたスレッドは、OS231によって登録された順や優先度に応じて取り出され、CPU#1に実行される。
分散キャッシュ210と分散キャッシュ211とはスヌープバス212を介して接続されている。スヌープバス212は分散キャッシュ210と分散キャッシュ211とで共有されるデータの更新を一方の分散キャッシュで検出すると、他方の分散キャッシュ内の該共有されるデータを更新する。
共有キャッシュ202は、具体的には、たとえば、RAMであって、CPU#0とCPU#1とに共有されるキャッシュである。
共有メモリ201は、具体的には、たとえば、ROM(Read Only Memory)と、RAM(Random Access Memory)と、フラッシュROMなどを有している。たとえば、フラッシュROMがブートプログラムを記憶し、ROMがアプリケーションソフトウェアを記憶し、RAMがCPU#0〜CPU#1のワークエリアとして使用される。共有メモリ201に記憶されているプログラムは、各CPUにロードされることで、コーディングされている処理を該各CPUに実行させることとなる。共有メモリ201は、たとえば、スレッドリストと、共通変数情報と、スレッド管理テーブルと、を記憶している。
スレッド管理テーブルについては図示しないが、具体的には、たとえば、各スレッドがいずれのCPUに割り当てられたかを保持するテーブルである。本実施の形態では、共通変数を含むスレッドについては、処理終了フラグを各分散キャッシュ上に設定して、該スレッドの処理が終了したか否かを各OSが管理している。これに限らず、スレッド管理テーブル上で各スレッドの処理状態を管理してもよい。
図3は、共通変数情報の一例を示す説明図である。共通変数情報300はプロセスA内の共通変数に関する情報である。共通変数情報300はアドレス情報の項目301とサイズの項目302とスレッドIDの項目303とを有している。アドレス情報の項目301には共有メモリ201上のアドレス情報が保持され、サイズの項目302はアドレス情報の項目301に保持されている。スレッドIDの項目303は共通変数を含むスレッドの識別情報が保持されている。
プロセスAの共通変数は、共有メモリ201上の共通変数Aのアドレスに格納される変数と共有メモリ201上の共通変数Bのアドレスに格納される変数である。共通変数Aはスレッド1とスレッド2とスレッド3とに共通する変数であり、共通変数Bはスレッド1とスレッド2とスレッド4とに共通する変数である。
図4は、スレッドリストの一例を示す説明図である。スレッドリスト400は、プロセスIDの項目401と、スレッドIDの項目402と、優先度の項目403と、出力領域の項目404と、出力領域設定値の項目405と、を有している。
プロセスIDの項目401には共通変数を有するプロセスの識別情報が保持されている。スレッドIDの項目402には、プロセスIDの項目401に識別情報が保持されているプロセスの各スレッドの識別情報が保持されている。
優先度の項目403には、スレッドIDの項目402に識別情報が保持されている各スレッドの優先度が保持されている。
出力領域の項目404には、スレッドIDの項目402に識別情報が保持されている各スレッドの共通変数のキャッシュ上に設定される出力領域のアドレスが保持されている。
出力領域設定値の項目405には、スレッドIDの項目402に識別情報が保持されている各スレッドの共通変数のキャッシュ上に設定される出力領域のサイズが保持されている。各出力領域のサイズは、共通変数のアドレスのサイズと、共通変数のサイズと、共通変数の書き込みフラグのサイズと、の3つの情報を保持可能なサイズである。
本実施の形態では、共通変数Aと共通変数Bとの2つの共通変数を例に挙げて説明するため、いずれの共通変数が該共通変数を含む各スレッドの出力領域に格納済であるかを各OSが判別する。そのため、該各スレッドの割り当て時に、該スレッドの割り当てを行うOS230が、各スレッドが有する共通変数ごとに書き込みフラグを出力領域上に設定する。
ここでは、プロセスIDの項目401と、スレッドIDの項目402と、優先度の項目403と、出力領域設定値の項目405と、については、あらかじめ情報処理装置200の設計者により登録されていることとする。
たとえば、スレッドリスト400内のプロセスIDの項目401に登録されているプロセスAを例に挙げると、プロセスA内で共通変数を有するスレッドはスレッド1〜スレッド4であるプロセスAで定義されたスレッド群の実行順序はスレッド1〜スレッド4の順である。
(情報処理装置200のブロック図)
図5は、情報処理装置200を示すブロック図である。情報処理装置200は、設定部501と、第1の格納部502と、第2の格納部503と、切り替え部504と、を有している。設定部501は、共有メモリ201に記憶された情報処理プログラムを有するOS230をCPU#0が実行することにより、該部の機能が実現される。第1の格納部502および切り替え部504は、共有メモリ201に記憶された情報処理プログラムを有するOSを各CPUが実行することにより、該部の機能が実現される。第2の格納部503は共有メモリ201に記憶された情報処理プログラムを有する書き込みスレッドをいずれかのCPUが実行することにより、該部の機能が実現される。
図5は、情報処理装置200を示すブロック図である。情報処理装置200は、設定部501と、第1の格納部502と、第2の格納部503と、切り替え部504と、を有している。設定部501は、共有メモリ201に記憶された情報処理プログラムを有するOS230をCPU#0が実行することにより、該部の機能が実現される。第1の格納部502および切り替え部504は、共有メモリ201に記憶された情報処理プログラムを有するOSを各CPUが実行することにより、該部の機能が実現される。第2の格納部503は共有メモリ201に記憶された情報処理プログラムを有する書き込みスレッドをいずれかのCPUが実行することにより、該部の機能が実現される。
設定部501は、対象プロセス内の同一の共通変数の値についての書き込み要求を有するスレッド群の各スレッドの共通変数の値の格納先を、書き込み要求で定義された特定の格納先からスレッドごとにそれぞれ異なる格納先に設定する。本実施の形態では、スレッドごとにそれぞれ異なる格納先を共有キャッシュ202内に設定する。
第1の格納部502は、スレッド群のスレッドごとに共通変数の値を設定部501により設定されたスレッドの格納先に格納する。
第2の格納部503は、スレッド群のすべてのスレッドが終了すると、第1の格納部502によりスレッドごとに格納された共通変数の各値を対象プロセスで定義されたスレッド群の実行順に読み出し、読み出した共通変数の各値を実行順に特定の格納先へ上書きする。
また、第1の格納部502は、設定部501によりスレッド群のうちの一のスレッドの格納先が設定されなかった場合において、スレッド群のうちの一のスレッドよりも実行順が先であるすべてのスレッドの共通変数の値についての書き込み要求が終了していれば、特定の格納先へ前記一のスレッドの共通変数の値を格納する。
また、第1の格納部502は、設定部501により前記スレッド群のうちの一のスレッドの格納先が設定されなかった場合において、スレッド群のうちの一のスレッドよりも実行順が先であるすべてのスレッドの共通変数の値についての書き込み要求が終了していなければ、特定の格納先へ一のスレッドの共通変数の値を格納しない。
切り替え部504は、第1の格納部502により特定の格納先へ一の共通変数の値が格納されなかった場合、一のスレッドから他のスレッドに実行を切り替える。
図6は、逐次処理フラグの設定例を示す説明図である。まず、OS230が、スレッドリスト400内のプロセスIDの項目401に保持されているプロセスごとに逐次処理フラグを各分散キャッシュ上に設定する。図6ではプロセスAの逐次処理フラグのみを示す。
また、OS230が、各分散キャッシュ上に設定した逐次処理フラグの領域を保護する。ここで、分散キャッシュ上の領域を保護するとは、具体的には、該領域を追い出し禁止に設定し、他の変数の書き込みを禁止することを示している。なお、たとえば、逐次処理フラグの分散キャッシュ上におけるアドレスについては共有メモリ201に記憶させる。
図7は、スレッド1の割り当て例を示す説明図である。OS230が、(1)実行待ちキュー223からスレッド1を検出すると、OS230が、(2)スレッドリスト400から検出したスレッド1の識別情報とスレッド1が所属するプロセスAの識別情報とを検索することにより、該スレッド1が共通変数を有するスレッドであるか否かを判断する。ここでは、プロセスAのスレッド1は共通変数を含むスレッドであると判断される。
つぎに、OS230が、スレッド1が所属するプロセスAの逐次処理フラグがセットされているか否かを判断する。逐次処理フラグはセットされていないため、書き込みスレッドが実行中であるか否かをOS230が判断する。書き込みスレッドは実行されていないため、OS230が、(3)CPU#1へ書き込みスレッドを割り当てる。
つぎに、OS230が、(4)スレッドリスト400内のスレッド1に関する出力領域設定値に基づいて共有キャッシュ202内の領域にスレッド1の出力領域を設定する。OS230が、スレッド1の出力領域が設定された共有キャッシュ202内の領域を保護する。ここで、共有キャッシュ202内の領域を保護するとは、具体的には、たとえば、該領域に他の変数の書き込みを禁止することを示している。
また、スレッド1の出力領域のうち、後方の1バイト目の領域は共通変数Bの書き込みフラグであり、後方の2バイト目の領域は共通変数Aの書き込みフラグである。つぎに、OS230が、(5)各分散キャッシュ上にスレッドの処理終了フラグの領域を設定し、該領域を保護する。そして、OS230が、(6)スレッド1をCPU#0に割り当てる。
図8は、スレッド1〜スレッド4の割り当て例を示す説明図である。図8では、スレッド1とスレッド3とがCPU#0に割り当てられ、スレッド2とスレッド4とがCPU#1に割り当てられている。スレッドリスト400では、スレッド1の出力領域の項目404に0x011〜0x029が登録され、スレッド2の出力領域の項目404に0x03a〜0x052が登録され、スレッド3の出力領域の項目404に0x053〜0x05eが登録され、スレッド4の出力領域の項目404に0x05f〜0x06cが登録されている。
図9は、スレッド1から共通変数Aの書き込み要求の検出例を示す説明図である。OS230が、スレッド1からの共通変数Aの書き込み要求を検出する。具体的には、たとえば、OS230が、スレッド1からの書き込み要求を検出すると、書き込み先のアドレスが共通変数情報300に保持されているアドレスであるか否かを判断することにより、共通変数の書き込み要求を検出することができる。
つぎに、OS230が、スレッドリスト400内からスレッド1の出力領域を特定し、共通変数Aのアドレスと、共通変数Aの値とを共有キャッシュ202上の特定した出力領域に格納する。さらに、OS230が、スレッド1の出力領域内の共通変数Bの書き込みフラグに値が設定されていないことを確認すると、OS230が、スレッド1の出力領域内の共通変数Aの書き込みフラグに1を設定する。これにより、共通変数Aのアドレスと共通変数Aの値とがスレッド1の出力領域に格納済であり、かつスレッド1の出力領域の先頭に格納されていることをOS230が判別することができる。
図10は、スレッド1から共通変数Bの書き込み要求の検出例を示す説明図である。OS230が、スレッド1からの共通変数Bの書き込み要求を検出する。つぎに、OS230が、スレッドリスト400内からスレッド1の出力領域を特定し、共通変数Bのアドレスと、共通変数Bの値とを共有キャッシュ202上の特定した出力領域に格納する。さらに、OS230が、スレッド1の出力領域内の共通変数Aの書き込みフラグに1が設定されていることを確認すると、OS230が、スレッド1の出力領域内の共通変数Bの書き込みフラグに2を設定する。
図11は、スレッド3から共通変数Aの書き込み要求の検出例を示す説明図である。OS230が、スレッド3からの共通変数Aの書き込み要求を検出する。つぎに、OS230が、スレッドリスト400内からスレッド3の出力領域を特定し、共通変数Aのアドレスと共通変数Aの値とを共有キャッシュ202上の特定した出力領域に格納する。
図12は、スレッド3の終了例を示す説明図である。図12では、共有キャッシュ202上の各スレッドに設定された出力領域に各スレッドの共通変数が格納されている。OS230が、(1)スレッド3の終了を検出すると、(2)分散キャッシュ210上のスレッド3の処理終了フラグを1に設定する。スヌープバス212は、(3)分散キャッシュ210上のスレッド3の処理終了フラグの変化を検出すると、(4)分散キャッシュ211上のスレッド3の処理終了フラグを更新する。
図13は、スレッド2の終了例を示す説明図である。図13では、スレッド1の実行とスレッド3の実行とスレッド4の実行とが終了している。OS231が、(1)スレッド2の終了を検出すると、(2)分散キャッシュ211上のスレッド2の処理終了フラグを1に設定する。スヌープバス212は、(3)分散キャッシュ211上のスレッド2の処理終了フラグの変化を検出すると、(4)分散キャッシュ210上のスレッド2の処理終了フラグを更新する。
図14は、共有キャッシュ202から共有メモリ201へ格納する例を示す説明図である。書き込みスレッドが、(1)プロセスAで共通変数を有するスレッド群のすべてのスレッドの終了を該各スレッドの処理終了フラグに基づいて検出する。書き込みスレッドが、(2)スレッドリスト400からプロセスAで定義されたスレッド群の優先度を特定し、共通変数の値を共有キャッシュ202から共有メモリ201の各共通変数の領域に格納する。
たとえば、書き込みスレッドが、プロセスAの中で最も優先度が低いのはスレッド1であるため、(3)共有キャッシュ202内のスレッド1の出力領域から共通変数Aの値を読み出す。スレッド1の出力領域内で共通変数Aの値であるか共通変数Bの値であるかは各共通変数の書き込みフラグにより書き込みスレッドが判断することができる。共通変数Aの書き込みフラグが1であり、共通変数Bの書き込みフラグが2である。
よって、共通変数Aのアドレスおよび共通変数Aの値のつぎに、共通変数Bのアドレスおよび共通変数Bの値が格納されていることを書き込みスレッドは特定する。さらに、各共通変数のサイズについては書き込みスレッドが共通変数情報300を参照することにより特定することができる。これにより、書き込みスレッドは共通変数Aの値を読み出すことができる。
そして、書き込みスレッドが、(4)読み出した共通変数Aの値を共有メモリ201の共通変数Aの領域に格納する。共通変数Aの領域については、共通変数Aの値と併せて格納された共通変数Aのアドレスにより特定することができる。
図15は、出力領域の解放例を示す説明図である。図15では、共有メモリ201内の共通変数Aの値は5であり、共有メモリ201内の共通変数Aの値はスレッド3での書き込み要求の共通変数Aの値である。図15では、共有メモリ201内の共通変数Bの値は4であり、共有メモリ201内の共通変数Bの値はスレッド4での書き込み要求の共通変数Bの値である。
書き込みスレッドが、(1)共有キャッシュ202内に設定されたプロセスAに関する出力領域を解放し、書き込みスレッドが、(2)スレッドリスト400内のプロセスAに関する出力領域の値を削除する。そして、書き込みスレッドが、(3)スレッド1〜スレッド4のそれぞれの処理完了フラグを各分散キャッシュから削除する。スレッドリスト400内に登録されているプロセスのすべてのスレッドの実行が終了すると、書き込みスレッドは処理を終了する。
つぎに、共有変数を有するスレッドの出力領域が共有キャッシュ202内に設定できない場合に、逐次処理を行う例を説明する。
図16は、スレッド2の出力領域が設定されていない例を示す説明図である。ここでは、共通変数Aのみを例に挙げ、共通変数Aを有するスレッド1〜スレッド3と、いずれの共通変数も有さないスレッド5およびスレッド6と、を用いて説明する。よって、スレッドリスト400内の出力領域設定値が共通変数Aのみの設定値となっている。スレッド1とスレッド3とスレッド5とがCPU#0に割り当てられ、スレッド2とスレッド6とがCPU#1に割り当てられている。さらに、スレッド3の出力領域には共通変数Aの値が格納されていることとする。
まず、OS231が、(1)スレッド2からの共通変数Aへの書き込み要求を検出すると、OS231がスレッドリスト400内からスレッド2の出力領域を特定する。ここで、(2)特定された出力領域が共通変数Aの値を格納可能な領域でないため、OS231が、(3)スレッド2が所属するプロセスAの逐次処理フラグをセットする。特定された出力領域が共通変数Aの値を格納可能な領域であるか否かについては、OS231が該出力領域と出力領域設定値とを比較することにより判断することができる。
そして、スヌープバス212が、(4)分散キャッシュ211内のプロセスAの逐次処理フラグがセットされたことを検出すると、(5)分散キャッシュ210内のプロセスAの逐次処理フラグを更新する。
図17は、スレッド2からスレッド6へディスパッチされる例を示す説明図である。OS231が、スレッド2の所属するプロセスのスレッドの中で、スレッド2より優先度の低いスレッドを特定する。ここでは、スレッド1が特定される。定義された優先度がスレッド2よりも先のスレッド1の処理終了フラグが処理完了値でないため、OS231が、スレッド2からレディーキュー221に登録されているスレッド6へディスパッチする。
図18は、逐次処理フラグがセットされた場合の共通変数Aへの書き込み要求例を示す説明図である。まず、OS230が、(1)スレッド3からスレッド1へのディスパッチを検出する。そして、スレッド1の所属するプロセスAの逐次処理フラグがセットされているため、OS230が、スレッド1の所属するプロセスAのスレッドの中で、スレッド1より優先度の低いスレッドを特定する。ここでは、いずれのスレッドも特定されないため、OS230がスレッド1の処理を実行する。OS230が、(2)スレッド1から共通変数Aへの書き込み要求を検出すると、(3)共有メモリ201内の共通変数Aの領域へスレッド1の共通変数Aの値を格納する。
図19は、スレッド1の処理終了後にスレッド2がディスパッチされる例を示す説明図である。図19では、スレッド1の処理終了フラグがセットされているため、スレッド1の処理が終了している。OS231が、(1)スレッド2のディスパッチを検出する。そして、OS231がスレッド2の所属するプロセスAの共通変数Aを含むスレッド群の中で、スレッド2よりも優先度の低いスレッドをスレッドリスト400に基づいて特定する。
具体的には、たとえば、OS231がスレッドリスト400からスレッド2の優先度を検索する。ここでは、スレッド2の優先度は2である。つぎに、OS231が、スレッドリスト400からプロセスIDの項目401がプロセスAの識別情報であるスレッドの識別情報のうち、優先度が2よりも小さい値であるスレッドの識別情報を特定する。ここでは、スレッド1の優先度が1であるため、スレッド1が特定される。
そして、OS231が、(2)スレッド1の処理終了フラグがセットされているか否かをチェックする。スレッド1の処理終了フラグがセットされているため、OS231がスレッドリスト400からスレッド1の出力領域を特定し、OS231がスレッド1の共通変数Aの値がスレッド1の出力領域に格納されているか否かをスレッド1の出力領域に設定された共通変数Aの書き込みフラグに基づいて判断する。ここでは、共通変数Aの値はスレッド1の出力領域に格納されていないと判断され、OS231がスレッド1の共通変数Aの値が共有メモリ201の共通変数Aの領域に格納済であると判断する。つぎに、OS231が、(3)スレッド2から共通変数Aへの書き込み要求を検出する。そして、OS231が、(4)スレッド2の共通変数Aの値を共有メモリ201の共通変数Aの領域に格納する。
また、スレッド2の処理とスレッド3の処理が終了すると、書き込みスレッドによって、スレッド3の出力領域に格納されたスレッド3の共通変数Aの値が共有メモリ201の共通変数Aの領域に格納される。
(情報処理手順)
図20は、OS230による情報処理手順を示すフローチャートである。まず、マスタOSであるOS230が、各プロセスの逐次処理フラグを各CPUの分散キャッシュ上に設定し(ステップS2001)、実行待ちキューからスレッドを検出したか否かを判断する(ステップS2002)。OS230が、実行待ちキューからスレッドを検出していないと判断した場合(ステップS2002:No)、ステップS2002へ戻る。
図20は、OS230による情報処理手順を示すフローチャートである。まず、マスタOSであるOS230が、各プロセスの逐次処理フラグを各CPUの分散キャッシュ上に設定し(ステップS2001)、実行待ちキューからスレッドを検出したか否かを判断する(ステップS2002)。OS230が、実行待ちキューからスレッドを検出していないと判断した場合(ステップS2002:No)、ステップS2002へ戻る。
OS230が、実行待ちキューからスレッドを検出したと判断した場合(ステップS2002:Yes)、検出したスレッドがスレッドリスト内に含まれているか否かを判断する(ステップS2003)。OS230が、検出したスレッドがスレッドリスト内に含まれていないと判断した場合(ステップS2003:No)、ステップS2010へ移行する。
OS230が、検出したスレッドがスレッドリスト内に含まれていると判断した場合(ステップS2003:Yes)、検出したスレッドが所属するプロセスの逐次処理フラグがセットされているか否かを判断する(ステップS2004)。OS230が、検出したスレッドが所属するプロセスの逐次処理フラグがセットされていないと判断した場合(ステップS2004:No)、ステップS2010へ移行する。
OS230が、検出したスレッドが所属するプロセスの逐次処理フラグがセットされていると判断した場合(ステップS2004:Yes)、いずれかのCPUで書き込みスレッドを実行中であるか否かを判断する(ステップS2005)。OS230が、いずれかのCPUで書き込みスレッドを実行中であると判断した場合(ステップS2005:Yes)、ステップS2007へ移行する。
OS230が、いずれのCPUでも書き込みスレッドを実行中でないと判断した場合(ステップS2005:No)、書き込みスレッドを任意のCPUに割り当て(ステップS2006)、検出したスレッドの出力領域を設定済であるか否かを判断する(ステップS2007)。OS230が、検出したスレッドの出力領域を設定済であると判断した場合(ステップS2007:Yes)、ステップS2010へ移行する。
OS230が、検出したスレッドの出力領域を設定済でないと判断した場合(ステップS2007:No)、検出したスレッドの出力領域を共有キャッシュ上に設定する(ステップS2008)。つぎに、OS230が、検出したスレッドの処理終了フラグの領域を各CPUの分散キャッシュ上に設定し(ステップS2009)、検出したスレッドを任意のCPUに割り当て(ステップS2010)、ステップS2002へ戻る。
図21および図22は、各OSによる情報処理手順を示すフローチャートである。図21および図22では情報処理手順は各OSがそれぞれで実行する情報処理の手順を示している。まず、OSが、ディスパッチまたはすべてのスレッドの処理終了を検出したか否かを判断する(ステップS2101)。OSが、ディスパッチおよびすべてのスレッドの処理終了を検出していないと判断した場合(ステップS2101:No)、ステップS2101へ戻る。
OSが、ディスパッチを検出したと判断した場合(ステップS2101:ディスパッチ)、ディスパッチされたスレッドがスレッドリスト内に含まれるスレッドであるか否かを判断する(ステップS2102)。OSが、ディスパッチされたスレッドがスレッドリスト内に含まれるスレッドでないと判断した場合(ステップS2102:No)、ステップS2101へ戻る。
OSが、ディスパッチされたスレッドがスレッドリスト内に含まれるスレッドであると判断した場合(ステップS2102:Yes)、ディスパッチされたスレッドが所属するプロセスの逐次処理フラグがセットされているか否かを判断する(ステップS2103)。OSが、ディスパッチされたスレッドが所属するプロセスの逐次処理フラグがセットされていないと判断した場合(ステップS2103:No)、ステップS2109へ移行する。
OSが、ディスパッチされたスレッドが所属するプロセスの逐次処理フラグがセットされたと判断した場合(ステップS2103:Yes)、共通変数の書き込み要求、ディスパッチ、またはスレッドの終了を検出したか否かを判断する(ステップS2104)。OSが、共通変数の書き込み要求、ディスパッチ、およびスレッドの終了を検出していないと判断した場合(ステップS2104:No)、ステップS2104へ戻る。
OSが、ディスパッチを検出したと判断した場合(ステップS2104:ディスパッチ)、ステップS2102へ戻る。OSが、スレッドの終了を検出したと判断した場合(ステップS2104:スレッドの終了)、終了を検出したスレッドに対応する処理終了フラグを処理終了値にセットし(ステップS2105)、ステップS2101へ戻る。
OSが、共通変数の書き込み要求を検出したと判断した場合(ステップS2104:共通変数の書き込み要求)、書き込み要求を検出したスレッドに対応する共有キャッシュ上の出力領域に格納可能か否かを判断する(ステップS2106)。OSが、書き込み要求を検出したスレッドに対応する共有キャッシュ上の出力領域に格納可能であると判断した場合(ステップS2106:可能)、スレッドに対応する出力領域に共通変数の値を格納する(ステップS2107)。
OSが、書き込み要求を検出したスレッドに対応する共有キャッシュ上の出力領域に格納不可能であると判断した場合(ステップS2106:不可能)、逐次処理フラグをセットする(ステップS2108)。つぎに、OSが、ディスパッチされたスレッドの所属するプロセスのスレッドの中で、ディスパッチされたスレッドより優先度の低いスレッドを特定する(ステップS2109)。
OSが、優先度の低いスレッドを特定したか否かを判断する(ステップS2110)。OSが、優先度の低いスレッドを特定していないと判断した場合(ステップS2110:No)、ステップS2119へ移行する。OSが、優先度の低いスレッドを特定したと判断した場合(ステップS2110:Yes)、特定したすべてのスレッドの処理終了フラグが処理終了値であるか否かを判断する(ステップS2111)。
OSが、特定したすべてのスレッドの処理終了フラグが処理終了値でないと判断した場合(ステップS2111:No)、レディーキューから他のスレッドをディスパッチし(ステップS2112)、ステップS2101へ戻る。OSが、特定したすべてのスレッドの処理終了フラグが処理終了値であると判断した場合(ステップS2111:Yes)、特定したスレッドのうち、未選択のスレッドがあるか否かを判断する(ステップS2113)。
OSが、未選択のスレッドがあると判断した場合(ステップS2113:Yes)、未選択のスレッドのうち、優先度の最も低いスレッドを選択する(ステップS2114)。そして、OSが、選択したスレッドに対応する出力領域が共有キャッシュ上に存在するか否かを判断する(ステップS2115)。
OSが、選択したスレッドに対応する出力領域が共有キャッシュ上に存在しないと判断した場合(ステップS2115:No)、ステップS2113へ戻る。OSが、選択したスレッドに対応する出力領域が共有キャッシュ上に存在すると判断した場合(ステップS2115:Yes)、選択したスレッドに対応する出力領域に格納された共通変数の値を共有メモリの該共通変数の領域へ格納する(ステップS2116)。
OSが、選択したスレッドに対応する出力領域を解放し(ステップS2117)、スレッドリスト内の選択したスレッドに関する出力領域の情報を削除し(ステップS2118)、ステップS2113へ戻る。
ステップS2113において、OSが、未選択のスレッドがないと判断した場合(ステップS2113:No)、ディスパッチされたスレッドの処理を実行する(ステップS2119)。そして、OSが、ディスパッチされたスレッドの処理終了、またはディスパッチを検出したか否かを判断する(ステップS2120)。
OSが、ディスパッチされたスレッドの処理終了、およびディスパッチを検出していないと判断した場合(ステップS2120:No)、ステップS2120へ戻る。OSが、ディスパッチを検出したと判断した場合(ステップS2120:ディスパッチ)、ステップS2102へ戻る。OSが、ディスパッチされたスレッドの処理終了を検出したと判断した場合(ステップS2120:スレッドの処理終了)、ディスパッチされたスレッドに対応する処理終了フラグを書き込み完了値に設定し(ステップS2121)、ステップS2101へ戻る。
ステップS2101において、OSが、すべてのスレッドの処理終了を検出したと判断した場合(ステップS2101:処理終了)、一連の処理を終了する。
図23および図24は、書き込みスレッドによる情報処理手順を示すフローチャートである。書き込みスレッドが、スレッドリスト中のプロセスの中で、逐次処理フラグがセットされているプロセスがあるか否かを判断する(ステップS2301)。書き込みスレッドが、スレッドリスト中のプロセスの中で、逐次処理フラグがセットされているプロセスがあると判断した場合(ステップS2301:Yes)、逐次処理フラグがセットされているプロセスの中で、未選択なプロセスがあるか否かを判断する(ステップS2302)。
書き込みスレッドが、未選択なプロセスがあると判断した場合(ステップS2302:Yes)、逐次処理フラグがセットされているプロセスの中で、未選択なプロセスから任意のプロセスを選択する(ステップS2303)。そして、書き込みスレッドが、選択したプロセスの共通変数を含むスレッド群のうち、未選択なスレッドがあるか否かを判断する(ステップS2304)。書き込みスレッドが、未選択なスレッドがないと判断した場合(ステップS2304:No)、ステップS2302へ戻る。
書き込みスレッドが、未選択なスレッドがあると判断した場合(ステップS2304:Yes)、未選択なスレッドのうち、優先度の最も低いスレッドを選択する(ステップS2305)。そして、書き込みスレッドが、選択したスレッドの処理終了フラグが処理終了値であるか否かを判断する(ステップS2306)。
書き込みスレッドが、選択したスレッドの処理終了フラグが処理終了値でないと判断した場合(ステップS2306:No)、ステップS2302へ戻る。書き込みスレッドが、選択したスレッドの処理終了フラグが処理終了値であると判断した場合(ステップS2306:Yes)、選択したスレッドに対応する出力領域に格納された共通変数の値を共有メモリの該共通変数の領域へ格納する(ステップS2307)。
つぎに、書き込みスレッドが、選択したスレッドに対応する出力領域を解放し(ステップS2308)、スレッドリスト内の選択したスレッドに関する出力領域の情報を削除し(ステップS2309)、ステップS2304へ戻る。
ステップS2302において、書き込みスレッドが、逐次処理フラグがセットされているプロセスの中で、未選択なプロセスがないと判断した場合(ステップS2302:No)、ステップS2317へ移行する。
ステップS2301において、書き込みスレッドが、逐次処理フラグがセットされているプロセスがないと判断した場合(ステップS2301:No)、スレッドリスト内のプロセスの中で、共通変数を含むスレッド群のすべてのスレッドの処理終了フラグが処理終了値にセットされているプロセスがあるか否かを判断する(ステップS2310)。書き込みスレッドが、すべてのスレッドの処理終了フラグが処理終了値にセットされているプロセスがないと判断した場合(ステップS2310:No)、ステップS2301へ戻る。
書き込みスレッドが、すべてのスレッドの処理終了フラグが処理終了値にセットされているプロセスがあると判断した場合(ステップS2310:Yes)、すべてのスレッドの処理終了フラグが処理終了値であるプロセスの中で、未選択なプロセスがあるか否かを判断する(ステップS2311)。書き込みスレッドが、未選択なプロセスがあると判断した場合(ステップS2311:Yes)、未選択なプロセスから任意のプロセスを選択する(ステップS2312)。
つぎに、書き込みスレッドが、選択したプロセスの共通変数を含むスレッド群の各スレッドに対応する出力領域を開放し(ステップS2313)、スレッドリスト内の選択したプロセスの共通変数を含むスレッド群の各スレッドに関する出力領域の情報を削除する(ステップS2314)。
そして、書き込みスレッドが、選択したプロセスの逐次処理フラグをリセットし(ステップS2315)、選択したプロセスの共通変数を含むスレッド群の各スレッドの処理終了フラグを各分散キャッシュから解放し(ステップS2316)、ステップS2311へ戻る。書き込みスレッドが、未選択なプロセスがないと判断した場合(ステップS2311:No)、スレッドリスト中のすべてのプロセスのスレッドがすべて終了したか否かを判断する(ステップS2317)。
書き込みスレッドが、スレッドリスト中のすべてのプロセスのスレッドがすべて終了していないと判断した場合(ステップS2317:No)、ステップS2301へ戻る。書き込みスレッドが、スレッドリスト中のすべてのプロセスのスレッドがすべて終了したと判断した場合(ステップS2317:Yes)、一連の処理を終了する。
以上説明したように、情報処理装置、情報処理プログラム、および情報処理方法によれば、対象プロセスで共通変数を有するスレッド群の各スレッドの共通変数の値をそれぞれ異なる領域に格納する。そして、該スレッド群のすべてのスレッドが終了後に対象プロセスで定義されたスレッド群の順に特定の格納先に上書きする。スレッド群の実行順序と定義されたスレッド群の実行順序とが異なっていても、最終的な共通変数の値が異なるのを防止することができ、スループットおよび実行効率を向上させることができる。
また、該スレッド群の一のスレッドの共通変数の値を格納する格納先が設定できない場合、一のスレッドよりも実行順が早いスレッドの実行が終了していれば、一のスレッドの共通変数の値を特定の格納先に格納する。これにより、実行順に特定の格納先へ共通変数の値を格納することができる。
また、該スレッド群の一のスレッドの共通変数の値を格納する格納先が設定できない場合、一のスレッドよりも実行順が早いスレッドの実行が終了していなければ、一のスレッドの共通変数の値を特定の格納先に格納しない。そして、一のスレッドから他のスレッドに実行を切り替える。これにより、実行順が異なる状態で、特定の格納先へ共通変数の値が格納されるのを防止することができる。
200 情報処理装置
501 設定部
502 第1の格納部
503 第2の格納部
504 切り替え部
501 設定部
502 第1の格納部
503 第2の格納部
504 切り替え部
Claims (5)
- 対象プロセス内の同一の共通変数の値についての書き込み要求を有するスレッド群の各スレッドの前記共通変数の値の格納先を、前記書き込み要求で定義された特定の格納先から前記スレッドごとにそれぞれ異なる格納先に設定する設定手段と、
前記スレッド群のスレッドごとに前記共通変数の値を前記設定手段により設定された前記スレッドの格納先に格納する第1の格納手段と、
前記スレッド群のすべてのスレッドが終了すると、前記第1の格納手段により前記スレッドごとに格納された前記共通変数の各値を前記対象プロセスで定義された前記スレッド群の実行順に読み出し、読み出した前記共通変数の各値を前記実行順に前記特定の格納先へ上書きする第2の格納手段と、
を備えることを特徴とする情報処理装置。 - 前記第1の格納手段は、
前記設定手段により前記スレッド群のうちの一のスレッドの格納先が設定されなかった場合において、前記スレッド群のうちの前記一のスレッドよりも前記実行順が先であるすべてのスレッドの共通変数の値についての書き込み要求が終了していれば、前記特定の格納先へ前記一のスレッドの共通変数の値を格納することを特徴とする請求項1に記載の情報処理装置。 - 実行中のスレッドから異なるスレッドに実行を切り替える切り替え手段を備え、
前記第1の格納手段は、
前記設定手段により前記スレッド群のうちの一のスレッドの格納先が設定されなかった場合において、前記スレッド群のうちの前記一のスレッドよりも前記実行順が先であるすべてのスレッドの共通変数の値についての書き込み要求が終了していなければ、前記特定の格納先へ前記一のスレッドの共通変数の値を格納せず、
前記切り替え手段は、
前記一のスレッドから他のスレッドに実行を切り替えることを特徴とする請求項1に記載の情報処理装置。 - 対象プロセス内の同一の共通変数の値についての書き込み要求を有するスレッド群の各スレッドの前記共通変数の値の格納先を、前記書き込み要求で定義された特定の格納先から前記スレッドごとにそれぞれ異なる格納先に設定する設定工程と、
前記スレッド群のスレッドごとに前記共通変数の値を前記設定工程により設定された前記スレッドの格納先に格納する第1の格納工程と、
前記スレッド群のすべてのスレッドが終了すると、前記第1の格納工程により前記スレッドごとに格納された前記共通変数の各値を前記対象プロセスで定義された前記スレッド群の実行順に読み出し、読み出した前記共通変数の各値を前記実行順に前記特定の格納先へ上書きする第2の格納工程と、
をコンピュータに実行させることを特徴とする情報処理プログラム。 - 対象プロセス内の同一の共通変数の値についての書き込み要求を有するスレッド群の各スレッドの前記共通変数の値の格納先を、前記書き込み要求で定義された特定の格納先から前記スレッドごとにそれぞれ異なる格納先に設定する設定工程と、
前記スレッド群のスレッドごとに前記共通変数の値を前記設定工程により設定された前記スレッドの格納先に格納する第1の格納工程と、
前記スレッド群のすべてのスレッドが終了すると、前記第1の格納工程により前記スレッドごとに格納された前記共通変数の各値を前記対象プロセスで定義された前記スレッド群の実行順に読み出し、読み出した前記共通変数の各値を前記実行順に前記特定の格納先へ上書きする第2の格納工程と、
をコンピュータが実行することを特徴とする情報処理方法。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/JP2010/067468 WO2012046301A1 (ja) | 2010-10-05 | 2010-10-05 | 情報処理装置、情報処理プログラム、および情報処理方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
JPWO2012046301A1 JPWO2012046301A1 (ja) | 2014-02-24 |
JP5429396B2 true JP5429396B2 (ja) | 2014-02-26 |
Family
ID=45927321
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2012537510A Expired - Fee Related JP5429396B2 (ja) | 2010-10-05 | 2010-10-05 | 情報処理装置、情報処理プログラム、および情報処理方法 |
Country Status (3)
Country | Link |
---|---|
US (1) | US9384046B2 (ja) |
JP (1) | JP5429396B2 (ja) |
WO (1) | WO2012046301A1 (ja) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11768701B2 (en) * | 2019-09-17 | 2023-09-26 | Western Digital Technologies, Inc. | Exception analysis for data storage devices |
Family Cites Families (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP3139392B2 (ja) | 1996-10-11 | 2001-02-26 | 日本電気株式会社 | 並列処理システム |
JP3661614B2 (ja) | 2001-07-12 | 2005-06-15 | 日本電気株式会社 | キャッシュメモリ制御方法及びマルチプロセッサシステム |
JP2003167737A (ja) * | 2001-11-30 | 2003-06-13 | Nec Corp | スタック使用方法 |
AU2002217653A1 (en) * | 2001-12-12 | 2003-07-09 | Telefonaktiebolaget Lm Ericsson (Publ) | Collision handling apparatus and method |
CA2387200A1 (en) * | 2002-05-22 | 2003-11-22 | Ibm Canada Limited-Ibm Canada Limitee | Implementation of thread-static data in multi-threaded computer systems |
US7712081B2 (en) * | 2005-01-19 | 2010-05-04 | International Business Machines Corporation | Using code motion and write and read delays to increase the probability of bug detection in concurrent systems |
KR100974106B1 (ko) * | 2005-06-29 | 2010-08-04 | 인텔 코포레이션 | 캐싱 방법, 장치 및 시스템 |
US8185895B2 (en) * | 2005-11-30 | 2012-05-22 | International Business Machines Corporation | Method, apparatus and program storage device for providing an anchor pointer in an operating system context structure for improving the efficiency of accessing thread specific data |
US8108659B1 (en) * | 2006-11-03 | 2012-01-31 | Nvidia Corporation | Controlling access to memory resources shared among parallel synchronizable threads |
-
2010
- 2010-10-05 WO PCT/JP2010/067468 patent/WO2012046301A1/ja active Application Filing
- 2010-10-05 JP JP2012537510A patent/JP5429396B2/ja not_active Expired - Fee Related
-
2013
- 2013-04-04 US US13/856,925 patent/US9384046B2/en not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
US9384046B2 (en) | 2016-07-05 |
WO2012046301A1 (ja) | 2012-04-12 |
JPWO2012046301A1 (ja) | 2014-02-24 |
US20130227579A1 (en) | 2013-08-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9417935B2 (en) | Many-core process scheduling to maximize cache usage | |
EP3425502A1 (en) | Task scheduling method and device | |
JP5516744B2 (ja) | スケジューラ、マルチコアプロセッサシステムおよびスケジューリング方法 | |
JP4448784B2 (ja) | 並列計算機の同期方法及びプログラム | |
TWI488111B (zh) | 轉譯程式函數以正確處理本地範圍變數的系統及方法和應用其之計算系統 | |
CN108595258B (zh) | 一种gpgpu寄存器文件动态扩展方法 | |
US20120166498A1 (en) | Garbage collection in a multiple virtual machine environment | |
JP5636109B2 (ja) | コンテキスト切り替え | |
US20050022173A1 (en) | Method and system for allocation of special purpose computing resources in a multiprocessor system | |
KR101626378B1 (ko) | 병렬도를 고려한 병렬 처리 장치 및 방법 | |
US8645963B2 (en) | Clustering threads based on contention patterns | |
WO2012153200A1 (en) | Process grouping for improved cache and memory affinity | |
JP2010211696A5 (ja) | プログラムおよび情報処理装置 | |
WO2011011153A1 (en) | Scheduling of threads by batch scheduling | |
CN101324851A (zh) | 线程调度方法及其装置 | |
WO2011011154A2 (en) | Batch scheduling with segregation | |
EP3054384B1 (en) | System and method for memory synchronization of a multi-core system | |
JP5591969B1 (ja) | マルチコアプロセッサおよび制御方法 | |
JP5429396B2 (ja) | 情報処理装置、情報処理プログラム、および情報処理方法 | |
US20130132708A1 (en) | Multi-core processor system, computer product, and control method | |
KR101885030B1 (ko) | 하이브리드 트랜잭셔널 메모리 시스템에서의 트랜잭션 처리 방법 및 트랜잭션 처리 장치 | |
JP5776813B2 (ja) | マルチコアプロセッサシステム、マルチコアプロセッサシステムの制御方法および制御プログラム | |
JP7042105B2 (ja) | プログラム実行制御方法および車両制御装置 | |
TWI783401B (zh) | 記憶體管理方法和相關產品 | |
WO2012046300A1 (ja) | 情報処理装置、情報処理プログラム、および情報処理方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
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: 20131105 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20131118 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 5429396 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
LAPS | Cancellation because of no payment of annual fees |