(57)【特許請求の範囲】
【請求項１】
プロセッサコア毎に設けられたタスクが格納される格納領域からタスクを取得して実行するプロセッサコアを複数備えた情報処理装置であって、
第１プロセッサコアの前記格納領域に格納されたタスクを第２プロセッサコアにより取得するワークスチールを行う場合に、取得対象とする前記タスクに対応して設けられた領域であり、前記第１プロセッサコア及び前記第２プロセッサコアによるアクセス競合をトランザクショナルメモリ機能で検知するためのアボート用領域に対して書き込み処理を行う書込処理部と、
第１プロセッサコアにより前記第１プロセッサコアの前記格納領域から前記タスクを取得する場合に、取得対象とする前記タスクに対応して設けられた前記アボート用領域に対して読み込み処理を行う読込処理部と、
を含む情報処理装置。
【請求項２】
前記読込処理部は、前記第１プロセッサコアの前記格納領域に格納されている前記タスクが１つで、かつ前記第１プロセッサコアにより前記第１プロセッサコアの前記格納領域から前記タスクを取得する場合に、取得対象とする前記タスクに対応して設けられた前記アボート用領域に対して読み込み処理を行う、
請求項１記載の情報処理装置。
【請求項３】
前記読込処理部は、前記読み込み処理を行った後、前記第１プロセッサコアに対応して設けられたフラグ格納領域に、前記第１プロセッサコアによりトランザクションが実行中であることを示す情報を格納してから前記タスクを取得し、該タスクの取得が終了した後に、前記フラグ格納領域に前記第１プロセッサコアによりトランザクションが未実行であることを示す情報を格納し、
前記書込処理部は、前記書き込み処理を行った後、前記ワークスチールの実行中に、前記読込処理部により前記アボート用領域に対して読み込み処理が行われて前記ワークスチールが終了した場合に、前記第１プロセッサコアの前記フラグ格納領域に、前記第１プロセッサコアによりトランザクションが未実行であることを示す情報が格納されるまで前記第２プロセッサコアを待機させる、
請求項１又は請求項２記載の情報処理装置。
【請求項４】
プロセッサコア毎に設けられたタスクが格納される格納領域からタスクを取得して実行する第１プロセッサコア及び第２プロセッサコアを含む複数のプロセッサコアを備えたコンピュータの前記第２プロセッサコアに、
前記第１プロセッサコアの前記格納領域に格納されたタスクを前記第２プロセッサコアにより取得するワークスチールを行う場合に、取得対象とする前記タスクに対応して設けられた領域であり、前記第１プロセッサコア及び前記第２プロセッサコアによるアクセス競合をトランザクショナルメモリ機能で検知するためのアボート用領域に対する書き込み処理を実行させ、
前記コンピュータの前記第１プロセッサコアに、
前記第１プロセッサコアにより前記第１プロセッサコアの前記格納領域から前記タスクを取得する場合に、取得対象とする前記タスクに対応して設けられた前記アボート用領域に対する読み込み処理を実行させる、
情報処理プログラム。
【請求項５】
プロセッサコア毎に設けられたタスクが格納される格納領域からタスクを取得して実行する第１プロセッサコア及び第２プロセッサコアを含む複数のプロセッサコアを備えたコンピュータの前記第２プロセッサコアに、
前記第１プロセッサコアの前記格納領域に格納されたタスクを前記第２プロセッサコアにより取得するワークスチールを行う場合に、取得対象とする前記タスクに対応して設けられた領域であり、前記第１プロセッサコア及び前記第２プロセッサコアによるアクセス競合をトランザクショナルメモリ機能で検知するためのアボート用領域に対する書き込み処理を実行させ、
前記コンピュータの前記第１プロセッサコアに、
前記第１プロセッサコアにより前記第１プロセッサコアの前記格納領域から前記タスクを取得する場合に、取得対象とする前記タスクに対応して設けられた前記アボート用領域に対する読み込み処理を実行させる、
情報処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
開示の技術は、情報処理装置、情報処理プログラム、及び情報処理方法に関する。
【背景技術】
【０００２】
従来、ハードウェアトランザクショナルメモリ（Hardware Transactional Memory、以下、「ＨＴＭ」という）を用いて、タスク（処理）の実行順序を制御する技術が知られている。
【０００３】
また、ソフトウェアトランザクショナルメモリ（Software Transactional Memory、以下、「ＳＴＭ」という）を用いて、アクセス競合が発生した場合に、優先順位に基づいて実行するタスクを決定する技術が知られている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１４−０８５８３９号公報
【特許文献２】特表２０１０−５１０５９０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
ところで、マルチコアシステムのタスクスケジューリングでは、プロセッサコア（以下、単に「コア」という）毎にタスクの格納領域が設けられてスケジューリングが行われる。また、各コアが自身のタスクの格納領域にタスクが格納されていない場合は、自身以外のコアのタスクの格納領域からタスクを取得して実行することで負荷分散が行われる。なお、以下では、各コアが自身のタスクの格納領域にタスクが格納されていない場合に、自身以外のコアのタスクの格納領域からタスクを取得することを「ワークスチール」という。このように、ワークスチールでは、タスクスケジューリングでタスクを割り当てられたコア以外のコアがそのタスクを実行するものであるため、タスク実行時のキャッシュヒット率の低下等により、タスクの実行効率が低下する場合がある。
【０００６】
しかしながら、従来技術では、ワークスチールが行われた場合におけるタスクの実行制御については考慮されていない。
【０００７】
開示の技術は、一つの側面として、ワークスチールが行われた場合にタスクの実行効率の低下を抑制することを目的とする。
【課題を解決するための手段】
【０００８】
開示の技術は、一つの側面として、プロセッサコア毎に設けられたタスクが格納される格納領域からタスクを取得して実行するプロセッサコアを複数備えた情報処理装置に関する。開示の技術は、第１プロセッサコアの前記格納領域に格納されたタスクを第２プロセッサコアにより取得するワークスチールを行う場合に、以下に示す書き込み処理を行う書込処理部を含む。すなわち、書込処理部は、取得対象とする前記タスクに対応して設けられた領域であり、前記第１プロセッサコア及び前記第２プロセッサコアによるアクセス競合をトランザクショナルメモリ機能で検知するためのアボート用領域に対して書き込み処理を行う。さらに、開示の技術は、第１プロセッサコアにより前記第１プロセッサコアの前記格納領域から前記タスクを取得する場合に、取得対象とする前記タスクに対応して設けられた前記アボート用領域に対して読み込み処理を行う読込処理部を含む。
【発明の効果】
【０００９】
一つの側面として、ワークスチールが行われた場合にタスクの実行効率の低下を抑制することができる、という効果を有する。
【図面の簡単な説明】
【００１０】
【図１】コアがタスクキューからタスクを取得して実行することを説明するための図である。
【図２】ワークスチールを説明するための図である。
【図３】タスクキューの排他制御を説明するための図である。
【図４】第１コアのタスクキューに１つのタスクが格納されており、第１コアがタスクを実行中で、第２コアがワークスチールを行っている状態を説明するための図である。
【図５】第１コアのタスクキューに１つのタスクが格納されており、第１コアがタスクを終了し、第２コアがワークスチールを行っている状態を説明するための図である。
【図６】ＨＴＭ機能を説明するための図である。
【図７】ＨＴＭ機能を説明するための図である。
【図８】実施形態に係る情報処理装置の機能ブロック図である。
【図９】実施形態に係るタスクキューを説明するための図である。
【図１０】実施形態に係る情報処理装置として機能するコンピュータの概略構成を示すブロック図である。
【図１１】実施形態に係るタスク実行処理の一例を示すフローチャートである。
【図１２】実施形態に係る待機処理の一例を示すフローチャートである。
【図１３】コアが他のコアからワークスチールが行われずに、タスクを取得する場合を説明するための図である。
【図１４】第１コアがタスクを実行中で、第２コアが第１コアからワークスチールを行い、ワークスチールが異常終了されずに終了する場合を説明するための図である。
【図１５】第１コアがタスクを実行中で、第２コアが第１コアからワークスチールを行い、ワークスチールが異常終了される場合を説明するための図である。
【図１６】第１コアがタスクを実行中で、第２コアが第１コアからワークスチールを行い、ワークスチールが異常終了される場合を説明するためのタイミングチャートである。
【図１７】タスクキューをアプリケーションプログラムにより実現した場合の例を説明するための図である。
【発明を実施するための形態】
【００１１】
以下、図面を参照して、開示の技術の実施形態の一例を詳細に説明する。
【００１２】
まず、実施形態の詳細を説明する前に、ワークスチールが行われた場合の問題点について説明する。なお、ここでは、説明を簡単にするために、２つのコアを有するマルチコアシステムを例として説明する。
【００１３】
図１に示すように、コア１０Ａに対応して、コア１０Ａに割り当てられたスレッドが取得対象とするタスクＴが格納される格納領域の一例としてのタスクキュー１２Ａが設けられている。タスクキュー１２Ａは、メモリ等の記憶領域上に設けられ、タスクＴは、例えばタスク情報を含むタスク構造体としてタスクキュー１２Ａに格納される。タスク情報には、一例として、実行されるコマンド、及びコマンドの引数等のタスクＴの実行に必要な情報が含まれる。
【００１４】
同様に、コア１０Ｂに対応して、コア１０Ｂに割り当てられたスレッドが取得対象とするタスクＴが格納されるタスクキュー１２Ｂが設けられている。なお、以下では、コア１０Ａ及びコア１０Ｂを総称する場合は「コア１０」といい、タスクキュー１２Ａ及びタスクキュー１２Ｂを総称する場合は「タスクキュー１２」という。また、以下では、錯綜を回避するために、コア１０に割り当てられたスレッドがタスクＴを取得することを、「スレッド」の文言を省略して、コア１０がタスクＴを取得する、と表現する。同様に、コア１０に割り当てられたスレッドがタスクＴを実行することを、「スレッド」の文言を省略して、コア１０がタスクＴを実行する、と表現する。
【００１５】
また、タスクキュー１２は、タスクＴが格納された順に取得されるFirst In, First Out（ＦＩＦＯ）で実現される。図１に示すように、各コア１０は、各コア１０に対応するタスクキュー１２の先頭（図１の例では１番下）からタスクＴを取得して実行する。
【００１６】
次に、図２及び図３を参照して、ワークスチールについて説明する。なお、図２及び図３では、一例として、コア１０Ｂがワークスチールを行うコアであり、コア１０Ａがワークスチールを行われるコアである場合について説明する。
【００１７】
図２に示すように、コア１０Ｂは、コア１０Ｂのタスクキュー１２ＢにタスクＴが格納されていない場合、コア１０Ａのタスクキュー１２ＡからタスクＴを取得するワークスチールを行い、取得したタスクＴを実行する。これにより、各コア１０間での負荷分散が実現される。
【００１８】
また、本実施形態に係るタスクキュー１２は、複数のコア１０により同時に同じタスクＴが実行されないように、排他制御が行われる。従って、図３に示すように、コア１０Ｂがコア１０Ａからワークスチールを行っている間は、タスクキュー１２Ａがロックされる。すなわち、コア１０Ｂがコア１０Ａからワークスチールを行っている間は、コア１０ＡがタスクＴを実行可能な状態であっても、コア１０Ａは、タスクキュー１２ＡのタスクＴを取得できない。
【００１９】
次に、図４に示すように、タスクキュー１２Ａに１つのタスクＴ２が格納されている状態で、コア１０ＡがタスクＴ１を実行中に、コア１０Ｂがワークスチールを行う場合について説明する。この場合、前述したように、コア１０Ｂがコア１０Ａからワークスチールを行っている間は、タスクキュー１２Ａがロックされる。
【００２０】
すなわち、図５に示すように、コア１０Ｂがコア１０Ａからワークスチールを行っている間に、コア１０ＡがタスクＴ１の実行を終了して新たなタスクを実行可能となった場合、コア１０Ａはタスクキュー１２ＡからタスクＴ２を取得できない。従って、タスクＴ２は、コア１０Ｂで実行される。しかしながら、タスクＴ２がタスクＴ１と関連するタスクである場合等、タスクＴ２はコア１０Ｂよりもコア１０Ａで実行された方が、キャッシュメモリのヒット率が高くなる可能性が高く、早期にタスクが終了する可能性が高い。
【００２１】
そこで、本実施形態では、図５に示す状態となった場合に、コア１０Ｂによるワークスチールを異常終了させて、コア１０ＡでタスクＴ２を実行させることで、ワークスチールが行われた場合にタスクの実行効率の低下の抑制を図る。
【００２２】
次に、本実施形態で用いる各コアが有するＨＴＭ機能を説明する。一例として図６に示すように、コア１０Ａは、メモリ１４から処理対象とするデータを読み出して、トランザクションを開始する。また、コア１０Ａは、トランザクションを開始した後、クリティカルセクションの処理の実行中は、演算結果をメモリ１４には反映せずにコア１０Ａ内に保持する。そして、一例として図７に示すように、コア１０Ａは、クリティカルセクションの処理が終了すると、処理の結果得られた演算結果をメモリ１４に書き込んだ後、トランザクションを終了する。
【００２３】
また、コア１０Ａは、クリティカルセクションの処理の実行中に、他のコアとのアクセス競合を検知すると、トランザクションを異常終了（アボート）することでデータの一貫性を保つ。すなわち、ＨＴＭ機能による排他制御方式は、処理の開始順序ではなく、アクセス競合の検知順序による排他制御方式と言える。
【００２４】
ＨＴＭ機能でのアボート処理を行う条件としては、一例として以下の３つが挙げられる。
（１）各コアが、自身が読み込みを行った記憶領域のアドレス（所謂read-set）の少なくとも１つに、他のコアが書き込みを行う、との条件。
（２）各コアが、自身が書き込みを行う予定の記憶領域のアドレス（所謂write-set）の少なくとも１つに、他のコアが書き込みを行う、との条件。
（３）各コアが、自身が書き込みを行う予定の記憶領域のアドレスの少なくとも１つに、他のコアが読み込みを行う、との条件。
なお、本実施形態では、一例として上記（３）の条件を用いてワークスチールを異常終了させる。
【００２５】
次に、図８を参照して本実施形態に係る情報処理装置２０の機能的な構成を説明する。図８に示すように、情報処理装置２０は、タスクキュー２２、フラグ格納領域２４、読込処理部２６、及び書込処理部２８を含む。情報処理装置２０は複数のコアを備えており、タスクキュー２２はコア毎に設けられている。また、各タスクキュー２２は、例えばメモリ等の記憶領域上に設けられ、対応するコアにより実行されるタスクが格納される格納領域である。
【００２６】
図９に示すように、本実施形態では、各コア４２は、各コア４２に対応するタスクキュー２２のタスクＴ毎に用意された所定の記憶領域をアボート用領域Ａとして使用する。アボート用領域Ａは、各コア４２によるアクセス競合をＨＴＭ機能で検知するための領域である。なお、以下では、タスクキュー２２をコア毎に区別して説明する場合は、符号の末尾にコアの符号の末尾のアルファベットと同様のアルファベットを付して説明する。すなわち、コア４２Ａはタスクキュー２２ＡからタスクＴを取得して実行し、コア４２Ｂはタスクキュー２２ＢからタスクＴを取得して実行する。また、以下では、コア４２Ａ及びコア４２Ｂを総称する場合は「コア４２」という。また、以下では、錯綜を回避するために、ワークスチールを行うコアを「第２コア４２」ともいい、自身のコアのタスクキュー２２からタスクＴを取得して実行するコアを「第１コア４２」ともいう。
【００２７】
フラグ格納領域２４は、コア４２毎に設けられており、後述する読込処理部２６によりトランザクションが実行中であるか否かを示す情報が設定されるフラグＦが格納される。本実施形態では、一例として、読込処理部２６によりトランザクションが実行中である場合は、フラグＦには「１」が設定される。また、本実施形態では、一例として、読込処理部２６によりトランザクションが未実行である（実行中でない）場合は、フラグＦには「０」が設定される。また、本実施形態では、フラグＦの初期値は「０」に設定される。
【００２８】
読込処理部２６は、第１コア４２が有するＨＴＭ機能を使用として、トランザクションを開始する。一例として、本実施形態では、読込処理部２６は、Intel（登録商標）社の提供するTransactional Synchronization Extensions（TSX）命令（より具体的にはXBEGIN命令）を使用してトランザクションを開始する。また、読込処理部２６は、トランザクションを開始した後、第１コア４２により第１コア４２のタスクキュー２２からタスクＴを取得する場合に、取得対象とするタスクＴに対応して設けられたアボート用領域Ａに読み込み処理を行う。また、読込処理部２６は、アボート用領域Ａに対する読み込み処理の前に、第１コア４２のフラグＦを「１」に設定する。また、読込処理部２６は、アボート用領域Ａに対する読み込み処理を行った後に、第１コア４２のタスクキュー２２からタスクＴを取得する。また、読込処理部２６は、タスクＴを取得した後、第１コア４２が有するＨＴＭ機能を使用として、トランザクションを終了する。一例として、本実施形態では、読込処理部２６は、TSX命令（より具体的にはXEND命令）を使用してトランザクションを終了する。また、読込処理部２６は、トランザクションを終了した後、第１コア４２のフラグＦを「０」に設定する。そして、読込処理部２６は、取得したタスクＴを実行する。
【００２９】
書込処理部２８は、第２コア４２が有するＨＴＭ機能を使用して、トランザクションを開始する。本実施形態では、書込処理部２８は、TSX命令（より具体的にはXBEGIN命令）を使用してトランザクションを開始する。書込処理部２８は、トランザクションを開始した後、第２コア４２により第１コア４２のタスクキュー２２に格納されたタスクＴを取得するワークスチールを行う場合に、タスクＴに対応して設けられたアボート用領域Ａに書き込み処理を行う。具体的には、書込処理部２８は、アボート用領域Ａのアドレスをwrite-setに設定する。また、書込処理部２８は、アボート用領域Ａに対する書き込み処理を行った後に、第１コア４２のタスクキュー２２からタスクＴを取得する。また、書込処理部２８は、タスクＴを取得した後、第２コア４２が有するＨＴＭ機能を使用して、トランザクションを終了する。本実施形態では、書込処理部２８は、TSX命令（より具体的にはXEND命令）を使用してトランザクションを終了する。そして、書込処理部２８は、取得したタスクＴを実行する。また、書込処理部２８は、実行中のワークスチールが異常終了された場合は、ワークスチール対象のタスクＴが元々格納されていたタスクキュー２２に対応する第１コア４２のフラグＦを参照し、フラグＦが「０」となるまで第２コア４２を待機させる。
【００３０】
情報処理装置２０は、例えば図１０に示すコンピュータ４０で実現することができる。コンピュータ４０は、複数のコア４２Ａ、４２Ｂ、・・・を有するCentral Processing Unit（ＣＰＵ）４１、一時記憶領域としてのメモリ４３、及び不揮発性の記憶部４４を備える。ＣＰＵ４１の各コア４２は、前述したＨＴＭ機能を有する。また、コンピュータ４０は、表示装置及び入力装置等の入出力装置４５を備える。また、コンピュータ４０は、記録媒体４９に対するデータの読み込みと書き込みとを制御するＲｅａｄ／Ｗｒｉｔｅ（Ｒ／Ｗ）部４６、及びネットワークに接続されるネットワークＩ／Ｆ４７を備える。ＣＰＵ４１、メモリ４３、記憶部４４、入出力装置４５、Ｒ／Ｗ部４６、及びネットワークＩ／Ｆ４７は、バス４８を介して互いに接続される。
【００３１】
記憶部４４は、Hard Disk Drive（ＨＤＤ）、Solid State Drive（ＳＳＤ）、フラッシュメモリ等によって実現することができる。記憶媒体としての記憶部４４には、コンピュータ４０を情報処理装置２０として機能させるための情報処理プログラム６０が記憶される。情報処理プログラム６０は、読込処理プロセス７１及び書込処理プロセス７２を有する。また、メモリ４３は、タスクキュー２２及びフラグ格納領域２４として機能する情報記憶領域７４を有する。なお、情報記憶領域７４は、記憶部４４に設けられてもよいし、ＣＰＵ４１及びコア４２が有するキャッシュメモリに設けられてもよい。
【００３２】
ＣＰＵ４１の各コア４２は、情報処理プログラム６０を記憶部４４から読み出してメモリ４３に展開し、情報処理プログラム６０が有するプロセスを実行する。ＣＰＵ４１の各コア４２は、読込処理プロセス７１を実行することで、図８に示す読込処理部２６として動作する。ＣＰＵ４１の各コア４２は、書込処理プロセス７２を実行することで、図８に示す書込処理部２８として動作する。これにより、情報処理プログラム６０を実行したコンピュータ４０が、情報処理装置２０として機能することになる。
【００３３】
なお、本実施形態では、上記の読込処理部２６により実現される機能のうち、タスクキュー２２からタスクＴを取得する機能、及び取得したタスクＴを実行する機能は、オペレーティングシステム（ＯＳ）の機能で実現される。また、同様に、上記の書込処理部２８により実現される機能のうち、タスクキュー２２からタスクＴを取得する機能、及び取得したタスクＴを実行する機能も、ＯＳの機能で実現される。従って、情報処理プログラム６０は、ＯＳの機能で実現されない読込処理部２６及び書込処理部２８の機能をＯＳに追加する修正を行うことでＯＳの一部のプログラムとして実現される。
【００３４】
また、情報処理プログラム６０により実現される機能は、例えば半導体集積回路、より詳しくはApplication Specific Integrated Circuit（ＡＳＩＣ）等で実現することも可能である。
【００３５】
次に、本実施形態に係る情報処理装置２０の作用を説明する。情報処理装置２０が情報処理プログラム６０を実行することで、図１１に示すタスク実行処理及び図１２に示す待機処理を実行する。図１１に示すタスク実行処理は、例えば情報処理装置２０の電源がオン状態とされ、情報処理装置２０のオペレーティングシステムの起動が完了された場合等に各コア４２により実行が開始される。また、図１２に示す待機処理は、例えば、コア４２がワークスチールを行っている間に、ワークスチールが異常終了した場合に該コア４２により実行が開始される。なお、ここでは、単に「コア４２」と記載した場合は、タスク実行処理及び待機処理を実行しているコア４２自身を意味する。また、ここでは、単に「タスクキュー２２」と記載した場合は、タスク実行処理及び待機処理を実行しているコア４２のタスクキュー２２を意味する。まだ、ここでは、単に「フラグＦ」と記載した場合は、タスク実行処理及び待機処理を実行しているコア４２のフラグＦを意味する。
【００３６】
図１１に示すタスク実行処理のステップ１００で、読込処理部２６は、タスクキュー２２にタスクＴが格納されているか否かを判定する。この判定が否定判定となった場合は、処理はステップ１２２に移行し、肯定判定となった場合は、処理はステップ１０２に移行する。
【００３７】
ステップ１０２で、読込処理部２６は、タスクキュー２２に格納されているタスクＴの数が１つであるか否かを判定する。この判定が否定判定となった場合は、処理はステップ１１８に移行し、肯定判定となった場合は、処理はステップ１０４に移行する。ステップ１０４で、読込処理部２６は、フラグＦを「１」に設定する。
【００３８】
次のステップ１０６で、読込処理部２６は、コア４２のＨＴＭ機能を呼び出してトランザクションを開始する。次のステップ１０８で、読込処理部２６は、タスクＴに対応するアボート用領域Ａに対して読み込み処理を行う。次のステップ１１０で、読込処理部２６は、タスクキュー２２からタスクＴを取得する。次のステップ１１２で、読込処理部２６は、コア４２のＨＴＭ機能を呼び出して、ステップ１０６で開始したトランザクションを終了する。本ステップ１１２の処理により、ステップ１１０で取得されたタスクＴがタスクキュー２２から削除される。
【００３９】
次のステップ１１４で、読込処理部２６は、フラグＦを「０」に設定する。次のステップ１１６で、読込処理部２６は、ステップ１１０で取得したタスクＴをコア４２により実行した後、処理はステップ１００に戻る。
【００４０】
一方、ステップ１１８で、読込処理部２６は、タスクキュー２２からタスクＴを取得する。次のステップ１２０で、読込処理部２６は、ステップ１１８で取得したタスクＴを実行した後、処理はステップ１００に戻る。
【００４１】
一方、ステップ１２２で、書込処理部２８は、他のコア４２のタスクキュー２２にタスクＴが格納されているか否かを判定する。この判定が否定判定となった場合は、処理はステップ１００に戻り、肯定判定となった場合は、処理はステップ１２４に移行する。なお、以下の各ステップの処理は、ステップ１２２でタスクＴが格納されていると判定されたタスクキュー２２の何れか１つを対象（以下、「対象タスクキュー２２」という）として実行される。
【００４２】
ステップ１２４で、書込処理部２８は、コア４２のＨＴＭ機能を呼び出してトランザクションを開始する。次のステップ１２６で、書込処理部２８は、対象タスクキュー２２の取得対象とするタスクＴのアボート用領域Ａに書き込み処理を行う。次のステップ１２８で、書込処理部２８は、ステップ１２６で書き込み処理が行われたアボート用領域Ａに対応するタスクＴを対象タスクキュー２２から取得する。
【００４３】
次のステップ１３０で、書込処理部２８は、コア４２のＨＴＭ機能を呼び出して、ステップ１２４で開始したトランザクションを終了する。本ステップ１３０の処理により、ステップ１２８で取得されたタスクＴが対象タスクキュー２２から削除される。次のステップ１３２で、書込処理部２８は、ステップ１２８で取得したタスクＴをコア４２により実行した後、処理はステップ１００に戻る。
【００４４】
一方、図１２に示す待機処理のステップ１５０で、書込処理部２８は、ワークスチール対象のコア４２のフラグＦが「０」であるか否かを判定する。書込処理部２８は、ワークスチール対象のコア４２のフラグＦが「０」になるまでステップ１５０を繰り返し実行し、ステップ１５０の判定が肯定判定となった場合は、本待機処理は終了する。待機処理が終了すると、待機処理を実行していたコア４２は、前述したタスク実行処理の実行を開始する。
【００４５】
次に、図１３〜図１６を参照して、前述したタスク実行処理及び待機処理の具体的な処理の例を説明する。なお、図１３〜図１５の各図面の矢印に付している数字は、処理の実行順序を表している。また、図１６の各ステップに付している数字は、図１５の各矢印に付している数字と対応する。
【００４６】
まず、図１３を参照して、コア４２Ａが他のコア４２によりワークスチールを行われずに、タスクＴを取得する場合について説明する。図１３に示すように、コア４２Ａは、タスクキュー２２ＡにタスクＴが１つ格納されているため、上記ステップ１０４で、フラグＦを「１」に設定する（図１３中の１）。次に、コア４２Ａは、上記ステップ１０６で、コア４２ＡのＨＴＭ機能を呼び出してトランザクションを開始する（図１３中の２）。次に、コア４２Ａは、上記ステップ１０８で、タスクＴに対応するアボート用領域Ａに対して読み込み処理を行う（図１３中の３）。次に、コア４２Ａは、上記ステップ１１０で、タスクキュー２２ＡからタスクＴを取得する（図１３中の４）。次に、コア４２Ａは、上記ステップ１１２で、コア４２ＡのＨＴＭ機能を呼び出してトランザクションを終了する（図１３中の５）。そして、コア４２Ａは、上記ステップ１１４で、フラグＦを「０」に設定（図１３中の６）した後、上記ステップ１１６で、タスクＴを実行する。
【００４７】
次に、図１４を参照して、コア４２ＡがタスクＴ１を実行中で、コア４２Ｂがコア４２Ａからワークスチールを行い、ワークスチールが異常終了されずに終了する場合について説明する。図１４に示すように、コア４２Ｂは、タスクキュー２２ＢにタスクＴが格納されておらず、タスクキュー２２ＡにタスクＴ２が格納されているため、上記ステップ１２４で、コア４２ＢのＨＴＭ機能を呼び出してトランザクションを開始する（図１４中の１）。次に、コア４２Ｂは、上記ステップ１２６で、タスクＴ２に対応するアボート用領域Ａに書き込み処理を行う（図１４中の２）。次に、コア４２Ｂは、上記ステップ１２８で、タスクキュー２２ＡからタスクＴ２を取得する（図１４中の３）。そして、コア４２Ｂは、上記ステップ１３０で、コア４２ＢのＨＴＭ機能を呼び出してトランザクションを終了（図１４中の４）した後、上記ステップ１３２で、タスクＴ２を実行する。
【００４８】
次に、図１５及び図１６を参照して、コア４２ＡがタスクＴ１を実行中で、コア４２Ｂがコア４２Ａからワークスチールを行い、ワークスチールが異常終了される場合について説明する。図１５及び図１６に示すように、コア４２Ａは、上記ステップ１０４から上記ステップ１１６までの処理を実行して、タスクＴ１を実行中である。
【００４９】
一方、コア４２Ｂは、タスクキュー２２ＢにタスクＴが格納されておらず、タスクキュー２２ＡにタスクＴ２が格納されているため、上記ステップ１２４で、コア４２ＢのＨＴＭ機能を呼び出してトランザクションを開始する（図１５中の１）。次に、コア４２Ｂは、上記ステップ１２６で、タスクＴ２に対応するアボート用領域Ａに書き込み処理を行う（図１５中の２）。次に、コア４２Ｂは、上記ステップ１２８で、タスクキュー２２ＡからタスクＴ２を取得する（図１５中の３）。
【００５０】
ここで、例えばコア４２Ｂがタスクキュー２２ＡからタスクＴ２の取得を開始してから、上記ステップ１３０でトランザクションを終了するまでの間（すなわち、ワークスチールの実行中）に、コア４２ＡでタスクＴ１の実行が終了する（図１５中の４）ものとする。コア４２Ａは、タスクＴ１の実行が終了すると、上記ステップ１００以降の処理を再度実行する。コア４２Ａは、タスクキュー２２ＡにタスクＴ２が１つ格納されているため、上記ステップ１０４で、フラグＦを「１」に設定する（図１５中の５）。
【００５１】
次に、コア４２Ａは、上記ステップ１０６で、コア４２ＡのＨＴＭ機能を呼び出してトランザクションを開始する（図１５中の６）。次に、コア４２Ａは、上記ステップ１０８で、タスクＴ２に対応するアボート用領域Ａに対して読み込み処理を行う（図１５中の７）。
【００５２】
すなわち、コア４２Ｂがワークスチールを実行中のタスクＴ２に対応し、かつ書き込み処理を行ったアボート用領域Ａに対して、コア４２Ａが読み込み処理を行うこととなる。従って、前述した（３）の条件を満たすことになるため、コア４２ＢのＨＴＭ機能により、コア４２Ｂが実行中のワークスチールが異常終了（アボート）される。
【００５３】
次に、コア４２Ａは、上記ステップ１１０の処理で、タスクキュー２２ＡからタスクＴ２を取得する（図１５中の８）。次に、コア４２Ａは、上記ステップ１１２で、コア４２ＡのＨＴＭ機能を呼び出してトランザクションを終了する（図１５中の９）。そして、コア４２Ａは、上記ステップ１１４で、フラグＦを「０」に設定した（図１５中の１０）後、上記ステップ１１６でタスクＴ２を実行する。
【００５４】
一方、コア４２Ｂは、実行中のワークスチールが異常終了されると、上記待機処理を実行し、上記ステップ１５０の処理で、コア４２ＡのフラグＦが「０」となるまで待機する（図１５中の１１）。例えば、タスクＴ２に対するワークスチールが異常終了された後に、コア４２Ｂがすぐに上記タスク実行処理の実行を開始した場合、コア４２Ｂが再度タスクＴ２に対してワークスチールを行う場合がある。これに対し、本実施形態では、コア４２Ｂは、実行中のワークスチールが異常終了された後にコア４２Ａのフラグが「０」になるまで待機する。すなわち、コア４２Ｂは、コア４２ＡによるタスクＴ２の取得が終了するまで待機するため、コア４２Ｂが再度タスクＴ２に対してワークスチールを行うことが防止される。従って、不要なワークスチールの実行を抑制することができる。
【００５５】
以上説明したように、本実施形態によれば、第１プロセッサコアにより第１プロセッサコアのタスクキューからタスクを取得する場合に、取得対象とするタスクに対応して設けられたアボート用領域に対して読み込み処理を行う。また、第２プロセッサコアにより第１プロセッサコアのタスクキューに格納されたタスクを取得するワークスチールを行う場合に、アボート用領域に対して書き込み処理を行う。従って、第２プロセッサコアがワークスチールを行っている間に、第１プロセッサコアによる読み込み処理により、ワークスチールを終了することができる。これにより、該タスクを第１プロセッサコアが実行することができる結果、ワークスチールが行われた場合にタスクの実行効率の低下を抑制することができる。
【００５６】
なお、上記実施形態では、タスクの格納領域として、タスクキューを適用した場合について説明したが、これに限定されない。例えば、タスクの格納領域としてスタックを適用する形態としてもよい。
【００５７】
また、上記実施形態では、タスクキュー２２に１つのタスクＴが格納されている場合に、第１コア４２がタスクＴのアボート用領域Ａに読み込み処理を行う場合について説明したが、これに限定されない。例えば、タスクキュー２２に複数のタスクＴが格納されている場合に、第１コア４２が各タスクＴのアボート用領域Ａに読み込み処理を行う形態としてもよい。この場合、例えば、第１コア４２は、タスクキュー２２に格納されている各タスクＴのタスク情報及び第１コア４２の処理性能等に基づいてタスクＴの実行時間を推定する。そして、第１コア４２は、推定した実行時間が所定値以下の場合に、各タスクＴのアボート用領域Ａに読み込み処理を行う形態が例示される。これにより、比較的短時間で実行が終了するタスクＴに対する第２コア４２によるワークスチールが抑制される。
【００５８】
また、上記実施形態では、第２コア４２が実行中のワークスチールが異常終了した場合に、第１コア４２のフラグＦが「０」になるまで待機する場合について説明したが、これに限定されない。例えば、第２コア４２が実行中のワークスチールが異常終了した場合に、所定期間の間待機する形態が例示される。この場合に待機する期間は、例えば情報処理装置２０の実機を用いた実験等により、第１コア４２によるタスクＴを取得する処理にかかる期間にマージンを加味した期間等を適用すればよい。また、例えば、第１コア４２が複数ある場合は、第２コア４２はワークスチールの異常終了後に待機せずに、ワークスチール対象とした第１コア４２（上記実施形態ではコア４２Ａ）以外の第１コア４２に対してワークスチールを行う形態としてもよい。また、例えば、第２コア４２はワークスチールの異常終了後に、自身のタスクキュー２２にタスクＴが格納されるまで待機する形態としてもよい。
【００５９】
また、上記実施形態では、タスクキュー２２をＯＳの機能で実現する場合について説明したが、これに限定されない。例えば、ユーザが開発したアプリケーションプログラムによりタスクキュー２２を実現する形態としてもよい。この場合、一例として図１７に示すように、ユーザレベルのスレッドをオペレーティングシステムにより各コア４２に割り当てる（バインドする）形態が例示される。
【００６０】
また、上記実施形態では、情報処理プログラム６０がＯＳの一部のプログラムとして実現される場合について説明したが、これに限定されない。例えば、情報処理プログラム６０が、ＯＳ上で稼働するアプリケーションプログラムとして実現される形態としてもよい。
【００６１】
また、上記実施形態では、ＨＴＭを用いてワークスチールを異常終了させる場合について説明したが、これに限定されない。例えば、ＳＴＭを用いてワークスチールを異常終了させる形態としてもよい。
【００６２】
また、上記実施形態では、情報処理プログラム６０が記憶部４４に予め記憶（インストール）されている態様を説明したが、これに限定されない。情報処理プログラム６０は、ＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ、ＵＳＢメモリ、メモリカード等の記録媒体に記録された形態で提供することも可能である。
【００６３】
以上の実施形態に関し、更に以下の付記を開示する。
【００６４】
（付記１）
プロセッサコア毎に設けられたタスクが格納される格納領域からタスクを取得して実行するプロセッサコアを複数備えた情報処理装置であって、
第１プロセッサコアの前記格納領域に格納されたタスクを第２プロセッサコアにより取得するワークスチールを行う場合に、取得対象とする前記タスクに対応して設けられた領域であり、前記第１プロセッサコア及び前記第２プロセッサコアによるアクセス競合をトランザクショナルメモリ機能で検知するためのアボート用領域に対して書き込み処理を行う書込処理部と、
第１プロセッサコアにより前記第１プロセッサコアの前記格納領域から前記タスクを取得する場合に、取得対象とする前記タスクに対応して設けられた前記アボート用領域に対して読み込み処理を行う読込処理部と、
を含む情報処理装置。
【００６５】
（付記２）
前記読込処理部は、前記第１プロセッサコアの前記格納領域に格納されている前記タスクが１つで、かつ前記第１プロセッサコアにより前記第１プロセッサコアの前記格納領域から前記タスクを取得する場合に、取得対象とする前記タスクに対応して設けられた前記アボート用領域に対して読み込み処理を行う、
付記１記載の情報処理装置。
【００６６】
（付記３）
前記読込処理部は、前記読み込み処理を行った後、前記第１プロセッサコアに対応して設けられたフラグ格納領域に、前記第１プロセッサコアによりトランザクションが実行中であることを示す情報を格納してから前記タスクを取得し、該タスクの取得が終了した後に、前記フラグ格納領域に前記第１プロセッサコアによりトランザクションが未実行であることを示す情報を格納し、
前記書込処理部は、前記書き込み処理を行った後、前記ワークスチールの実行中に、前記読込処理部により前記アボート用領域に対して読み込み処理が行われて前記ワークスチールが終了した場合に、前記第１プロセッサコアの前記フラグ格納領域に、前記第１プロセッサコアによりトランザクションが未実行であることを示す情報が格納されるまで前記第２プロセッサコアを待機させる、
付記１又は付記２記載の情報処理装置。
【００６７】
（付記４）
プロセッサコア毎に設けられたタスクが格納される格納領域からタスクを取得して実行する第１プロセッサコア及び第２プロセッサコアを含む複数のプロセッサコアを備えたコンピュータの前記第２プロセッサコアに、
前記第１プロセッサコアの前記格納領域に格納されたタスクを前記第２プロセッサコアにより取得するワークスチールを行う場合に、取得対象とする前記タスクに対応して設けられた領域であり、前記第１プロセッサコア及び前記第２プロセッサコアによるアクセス競合をトランザクショナルメモリ機能で検知するためのアボート用領域に対する書き込み処理を実行させ、
前記コンピュータの前記第１プロセッサコアに、
前記第１プロセッサコアにより前記第１プロセッサコアの前記格納領域から前記タスクを取得する場合に、取得対象とする前記タスクに対応して設けられた前記アボート用領域に対する読み込み処理を実行させる、
情報処理プログラム。
【００６８】
（付記５）
前記コンピュータの前記第１プロセッサコアに、
前記第１プロセッサコアの前記格納領域に格納されている前記タスクが１つで、かつ前記第１プロセッサコアにより前記第１プロセッサコアの前記格納領域から前記タスクを取得する場合に、取得対象とする前記タスクに対応して設けられた前記アボート用領域に対する読み込み処理を実行させる、
付記４記載の情報処理プログラム。
【００６９】
（付記６）
前記コンピュータの前記第１プロセッサコアに、
前記読み込み処理を行った後、前記第１プロセッサコアに対応して設けられたフラグ格納領域に、前記第１プロセッサコアによりトランザクションが実行中であることを示す情報を格納してから前記タスクを取得させ、該タスクの取得が終了した後に、前記フラグ格納領域に前記第１プロセッサコアによりトランザクションが未実行であることを示す情報を格納させ、
前記コンピュータの前記第２プロセッサコアに、
前記書き込み処理を行った後、前記ワークスチールの実行中に、前記アボート用領域に対して前記読み込み処理が行われて前記ワークスチールが終了した場合に、前記第１プロセッサコアの前記フラグ格納領域に、前記第１プロセッサコアによりトランザクションが未実行であることを示す情報が格納されるまで待機させる、
付記４又は付記５記載の情報処理プログラム。
【００７０】
（付記７）
プロセッサコア毎に設けられたタスクが格納される格納領域からタスクを取得して実行する第１プロセッサコア及び第２プロセッサコアを含む複数のプロセッサコアを備えたコンピュータの前記第２プロセッサコアに、
前記第１プロセッサコアの前記格納領域に格納されたタスクを前記第２プロセッサコアにより取得するワークスチールを行う場合に、取得対象とする前記タスクに対応して設けられた領域であり、前記第１プロセッサコア及び前記第２プロセッサコアによるアクセス競合をトランザクショナルメモリ機能で検知するためのアボート用領域に対する書き込み処理を実行させ、
前記コンピュータの前記第１プロセッサコアに、
前記第１プロセッサコアにより前記第１プロセッサコアの前記格納領域から前記タスクを取得する場合に、取得対象とする前記タスクに対応して設けられた前記アボート用領域に対する読み込み処理を実行させる、
情報処理方法。
【００７１】
（付記８）
前記コンピュータの前記第１プロセッサコアに、
前記第１プロセッサコアの前記格納領域に格納されている前記タスクが１つで、かつ前記第１プロセッサコアにより前記第１プロセッサコアの前記格納領域から前記タスクを取得する場合に、取得対象とする前記タスクに対応して設けられた前記アボート用領域に対する読み込み処理を実行させる、
付記７記載の情報処理方法。
【００７２】
（付記９）
前記コンピュータの前記第１プロセッサコアに、
前記読み込み処理を行った後、前記第１プロセッサコアに対応して設けられたフラグ格納領域に、前記第１プロセッサコアによりトランザクションが実行中であることを示す情報を格納してから前記タスクを取得させ、該タスクの取得が終了した後に、前記フラグ格納領域に前記第１プロセッサコアによりトランザクションが未実行であることを示す情報を格納させ、
前記コンピュータの前記第２プロセッサコアに、
前記書き込み処理を行った後、前記ワークスチールの実行中に、前記アボート用領域に対して前記読み込み処理が行われて前記ワークスチールが終了した場合に、前記第１プロセッサコアの前記フラグ格納領域に、前記第１プロセッサコアによりトランザクションが未実行であることを示す情報が格納されるまで待機させる、
付記７又は付記８記載の情報処理方法。
【００７３】
（付記１０）
プロセッサコア毎に設けられたタスクが格納される格納領域からタスクを取得して実行する第１プロセッサコア及び第２プロセッサコアを含む複数のプロセッサコアを備えたコンピュータの前記第２プロセッサコアに、
第１プロセッサコアの前記格納領域に格納されたタスクを前記第２プロセッサコアにより取得するワークスチールを行う場合に、取得対象とする前記タスクに対応して設けられた領域であり、前記第１プロセッサコア及び前記第２プロセッサコアによるアクセス競合をトランザクショナルメモリ機能で検知するためのアボート用領域に対する書き込み処理を実行させ、
前記コンピュータの前記第１プロセッサコアに、
前記第１プロセッサコアにより前記第１プロセッサコアの前記格納領域から前記タスクを取得する場合に、取得対象とする前記タスクに対応して設けられた前記アボート用領域に対する読み込み処理を実行させる、
情報処理プログラムを記憶した記憶媒体。
【符号の説明】
【００７４】
２０  情報処理装置
２２  タスクキュー
２４  フラグ格納領域
２６  読込処理部
２８  書込処理部
４０  コンピュータ
４１  ＣＰＵ
４２Ａ、４２Ｂ  コア
４３  メモリ
４４  記憶部
４９  記録媒体
６０  情報処理プログラム
Ａ  アボート用領域
Ｔ  タスク
【図１】
0006645348.tif 000002
【図２】
0006645348.tif 000003
【図３】
0006645348.tif 000004
【図４】
0006645348.tif 000005
【図５】
0006645348.tif 000006
【図６】
0006645348.tif 000007
【図７】
0006645348.tif 000008
【図８】
0006645348.tif 000009
【図９】
0006645348.tif 000010
【図１０】
0006645348.tif 000011
【図１１】
0006645348.tif 000012
【図１２】
0006645348.tif 000013
【図１３】
0006645348.tif 000014
【図１４】
0006645348.tif 000015
【図１５】
0006645348.tif 000016
【図１６】
0006645348.tif 000017
【図１７】
0006645348.tif 000018