JP6468053B2 - 情報処理装置、並列処理プログラム、及び、共有メモリアクセス方法 - Google Patents

情報処理装置、並列処理プログラム、及び、共有メモリアクセス方法 Download PDF

Info

Publication number
JP6468053B2
JP6468053B2 JP2015091361A JP2015091361A JP6468053B2 JP 6468053 B2 JP6468053 B2 JP 6468053B2 JP 2015091361 A JP2015091361 A JP 2015091361A JP 2015091361 A JP2015091361 A JP 2015091361A JP 6468053 B2 JP6468053 B2 JP 6468053B2
Authority
JP
Japan
Prior art keywords
shared memory
thread
memory area
access
threads
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2015091361A
Other languages
English (en)
Other versions
JP2016207130A (ja
Inventor
優人 田▲邨▼
優人 田▲邨▼
耕太 中島
耕太 中島
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2015091361A priority Critical patent/JP6468053B2/ja
Priority to US15/072,423 priority patent/US20160320984A1/en
Publication of JP2016207130A publication Critical patent/JP2016207130A/ja
Application granted granted Critical
Publication of JP6468053B2 publication Critical patent/JP6468053B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/546Message passing systems or structures, e.g. queues

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Memory System (AREA)
  • Multi Processors (AREA)

Description

本発明は、情報処理装置、並列処理プログラム、及び、共有メモリアクセス方法に関する。
並列処理を行う情報処理装置は、複数のスレッドがアクセスする共有メモリ領域のデータの整合性を保つために、排他制御の機能を備える。
排他制御の方式として、1つのスレッドが共有メモリへのアクセス処理中は、他のプロセッサが、共有メモリへのアクセス処理の開始を待機する方式(以下、ロック方式と称する)がある。各スレッドは、例えば、共有メモリ領域の排他状態を示す変数を参照して、共有メモリ領域にアクセス可能であるか否かを判定する。
一方、情報処理装置のプロセッサが備える、ハードウェア・トランザクション・メモリ(Hardware Transactional Memory:HTM)を使用する排他制御の方式(HTM方式と称する)がある。HTMの機構は、ユーザが指定した命令列(以下、対象ルーチン)が、他のスレッドが実行する処理に対して、アトミックなトランザクションとして実行されることを保証する。HTMは、対象ルーチンの実行中に、他のスレッドとのメモリアクセスの競合が発生した場合に、対象ルーチンの実行をロールバックする。HTMに関する技術は、例えば、特許文献1〜3に記載される。
ユーザは、プログラムの生成時に、ロック方式とHTM方式とから、プログラムに採用する排他制御の方式を選択する。
特表2013−513888号公報 特表2013−520753号公報 特開2012−128628号公報
しかしながら、HTM方式の排他制御に基づくプログラムの処理時間は、共有メモリにアクセスするスレッドの数が1つの場合、ロック方式の排他制御に基づくプログラムに対して遅くなる場合がある。実行中のスレッドの数は、プログラムの処理に応じて、変化する。したがって、プログラムの生成時に、プログラムに採用する排他制御の方式を、適切に選択することは容易ではない。
1つの側面は、本発明は、共有メモリの排他制御の性能を向上する情報処理装置、並列処理プログラム、及び、共有メモリアクセス方法を提供することを目的とする。
第1の側面によれば、共有メモリ領域を有する記憶部と、1つまたは複数のスレッドを実行する処理部と、を有し、前記処理部は、前記スレッドが前記共有メモリ領域のアクセス処理を実行する際に、当該共有メモリ領域にアクセスする複数のスレッドを実行中か否かを判定し、
前記複数のスレッドを実行中ではない場合、一のスレッドによる前記共有メモリ領域へのアクセス処理中に、他のスレッドによる前記共有メモリ領域へのアクセス処理の開始を待機する第1の制御に基づいて、前記共有メモリ領域へのアクセス処理を実行し、前記複数のスレッドを実行中の場合、一のスレッドによる前記共有メモリ領域へのアクセス処理中に、前記共有メモリ領域に対する他のスレッドによる書き込みが発生した場合に、前記アクセス処理を取り消す第2の制御に基づいて、前記共有メモリ領域へのアクセス処理を実行する。
第1の側面によれば、共有メモリの排他制御が高速化し、性能が向上する。
ロック方式の排他制御を説明する図である。 コンフリクトが発生しない場合の、HTM方式の排他制御を説明する図である。 コンフリクトが発生する場合における、HTM方式に基づく排他制御を説明する図である。 同一の共有メモリ領域Smにアクセスする、実行中のスレッド数が2つである場合のメモリアクセス処理の性能を示す図である。 同一の共有メモリ領域Smにアクセスする、実行中のスレッド数が1つである場合のメモリアクセス処理の性能を示す図である。 プログラムの実行時の、スレッド数の変化を模式的に説明する図である。 本実施の形態における情報処理装置の処理の概要を説明する図である。 本実施の形態における情報処理装置100のハードウェア構成図である。 図8に示した情報処理装置100のソフトウェアブロック図である。 図9に示した同時走行スレッド数記憶領域170に記憶する、同一の共有メモリ領域Smにアクセスする実行中のスレッド数の取得処理を説明する図である。 本実施の形態における情報処理装置100の排他制御プログラム133の処理の流れを説明するフローチャート図である。 排他制御方式の切り替わりを模式的に説明する図である。 同一の共有メモリ領域Smにアクセスする、実行中のスレッド数が2つである場合の、本実施の形態の排他制御方式に基づくメモリアクセス処理の性能を示す図である。 同一の共有メモリ領域Smにアクセスする、実行中のスレッド数が1つである場合の、本実施の形態の排他制御方式に基づくメモリアクセス処理の性能を示す図である。 図8に示したアプリケーションプログラム132の一部のプログラムpr1の一例を示す図である。 図9、図11に示した排他取得モジュール141のプログラムpr2の一例を示す図である。 図9、図11に示した排他解除モジュール151のプログラムpr3の一例を示す図である。 HTM方式の排他取得モジュール142、及び、HTM方式の排他解除モジュール152の処理の流れを説明するフローチャート図である。 ロック方式の排他取得モジュール143、及び、ロック方式の排他解除モジュール153の処理の流れを説明するフローチャート図である。
以下、図面にしたがって本発明の実施の形態について説明する。ただし、本発明の技術的範囲はこれらの実施の形態に限定されず、特許請求の範囲に記載された事項とその均等物まで及ぶものである。
並列処理を行う情報処理装置において、複数のスレッドが、共有資源に対して同時にアクセスした場合、共有資源の不整合が発生する場合がある。排他制御は、複数のスレッドが、同時に共有資源にアクセスすることを抑制する制御を示す。排他制御を行うことにより、共有資源の不整合が発生することを回避可能になる。
スレッドは、オペレーションシステム上で動作するプログラムの最小の実行単位を示す。本実施の形態における情報処理装置は、複数のスレッドを同時に実行するマルチスレッド処理を実現する情報処理装置である。本実施の形態における共有資源は、複数のスレッドがアクセス可能な共有メモリの領域であって、共有メモリが有する一部または全部の領域である。
初めに、図1〜図3にしたがって、排他制御を実現する複数の方式を説明する。図1は、ロック方式の排他制御を、図2、図3は、ハードウェア・トランザクション・メモリ(Hardware Transactional Memory:HTM)方式の排他制御を説明する。
[ロック方式]
図1は、ロック方式の排他制御を説明する図である。図1は、2つのスレッド(スレッドthA、スレッドthB)を例示する。また、図1に示す矢印は時間の遷移を示す。スレッドthA及びスレッドthB(以下、スレッドthともいう)は、共有メモリの同一の領域(共有メモリ領域)にアクセスする。
また、図1に示す、クリティカルセクション(Critical section)は、同一の共有メモリ領域に対するアクセス命令を含む、一連の命令列の処理(以下、アクセス処理ともいう)を実行するセクションを示す。アクセス処理は、同一の共有メモリ領域に対するデータの書き込み処理、または、同一の共有メモリ領域からのデータの読み出し処理のいずれかまたは両方を含む。
ロック方式は、一のスレッドによる共有メモリ領域へのアクセス処理中に、他のスレッドによる共有メモリ領域へのアクセス処理の開始を待機することによって排他制御を実現する方式である。ロック方式は、例えば、スピンロック方式、ミューテックス(Mutex)、及び、セマフォ(Semaphore)等に基づくロック方式である。本実施の形態は、メモリ上のロック変数に基づくスピンロック方式を使用する場合を例示する。
ロック方式によると、各スレッドthは、同一の共有メモリ領域に対するアクセス処理、即ち、クリティカルセクションの開始時に、ロックを取得する。メモリ上の変数を示すロック変数が非ロック状態を示す場合、ロックを取得可能である。したがって、各スレッドthは、ロック変数の値を、非ロック状態からロック状態に変更してロックを取得する。
一方、各スレッドthは、ロック変数がロック状態を示す場合には、ロックを取得できない。ロック変数がロック状態を示す場合、他のスレッドによって、ロック変数がロック状態に更新されている状態を示し、他のスレッドによってロックが取得中であることを意味する。したがって、各スレッドthは、他のスレッドによってロック変数が非ロック状態に更新され、ロックが解除されるまでロックの取得を待機する。
各スレッドthは、ロックを取得すると、クリティカルセクションを開始する。そして、各スレッドthは、クリティカルセクションを終了すると、ロック変数をロック状態から非ロック状態に更新し、ロックを解除する。
図1によると、スレッドthAは、タイミングt1にロックを取得後、クリティカルセクションを開始する。そして、スレッドthAは、クリティカルセクションを終了すると、タイミングt2に、ロックを開放する。
一方、スレッドthBは、スレッドthAによるクリティカルセクション開始後のタイミングt3に、ロックを取得しようとする。ただし、既に、スレッドthAがロックを取得中であるため、スレッドthBは、スレッドthAによるロックの解除を待機する。そして、タイミングt2に、スレッドthAがロックを解除すると、スレッドthBはロックを取得し、クリティカルセクションを開始する。スレッドthBは、クリティカルセクションを終了すると、ロックを解除する。
図1に示すように、ロック方式によると、スレッドthAがロックを取得している間、スレッドthBは、ロックの取得を待機する。即ち、スレッドthAが、クリティカルセクションを終了するまで、スレッドthBはクリティカルセクションを開始できない。これにより、情報処理装置は、複数のスレッドが同時に共有メモリ領域にアクセスすることを回避でき、共有メモリ領域のデータの不整合が発生することを回避できる。
なお、スレッドthA、及び、スレッドthBは、同一のプログラムの実行に基づいて生成されるスレッドであってもよいし、異なるプログラムの実行に基づいてそれぞれ生成されるスレッドであってもよい。また、スレッドthAのクリティカルセクションの処理と、スレッドthBのクリティカルセクションの処理は、同一の処理であってもよいし、異なる処理であってもよい。
次に、図2、図3にしたがって、HTM方式の排他制御を説明する。
[HTM方式]
HTM方式は、情報処理装置のCPU(Central Processing Unit:CPU)が搭載する、ハードウェアのHTMの機構を使用する方式である。HTM方式は、一のスレッドによる共有メモリ領域へのアクセス処理中に、共有メモリ領域に対する他のスレッドによる書き込みが発生した場合に、アクセス処理を取り消すことによって排他制御を実現する方式である。
HTMは、並列プログラミングをサポートするための機構である。HTMは、並列プログラミングの実行時の排他による衝突を低減し、性能を向上する。例えば、Sun Microsystems(登録商標)のRock、IBM(登録商標)の、Blue Gene/Q Compute chip、Intel(登録商標)のHaswellマイクロアーキテクチャのCore i7等のCPUは、HTMの機構を搭載する。
HTMは、ユーザが指定した命令列を、単一のアトミックなトランザクション(atomic and isolated transaction)として実行する。HTMは、アトミックなトランザクションとして指定された命令列(以下、対象ルーチン)が実行する処理が、他のスレッドが並列して実行する他の処理に対して、単一のトランザクションとして実行されることを保証する。ユーザは、プログラムの生成時に、アトミックなトランザクションとして処理させる対象ルーチンの前後に、HTMの開始命令、及び、終了命令を付加する。
HTMは、開始命令から終了命令までの間に、対象ルーチンがアクセス処理の対象とするメモリのアドレスに、他のスレッドが書き込み処理を行った場合に、コンフリクト(メモリアクセスの競合)を検出する。コンフリクトを検出すると、HTMは、対象ルーチンをアボート(中断、abort)し、対象ルーチンをロールバック(rollback)する。一方、HTMは、コンフリクトを検出しない場合は、対象ルーチンを続行し、完了させる。このように、HTM方式によると、各スレッドthは、投機的に、対象ルーチンを実行する。
具体的に、HTMは、開始命令の実行に応答して、前処理を行う。前処理は、プロセッサコアの内部状態(レジスタ情報)の記憶(退避)処理や、対象ルーチンがアクセス処理(読み出し、書き込み)の対象とするメモリ領域のデータの読み出し、及び、読み出したデータの一時領域への記憶処理等を示す。
そして、HTM方式によると、スレッドthは、対象ルーチンによる書き込み処理を、前処理で記憶した一時領域(例えば、L1(level1)キャッシュ)に対して行う。つまり、スレッドthは、HTMの終了命令の実行時まで、対象ルーチンの処理結果の、メモリへの反映を保留する。また、HTMは、開始命令から終了命令までの間に、一時領域に記憶した、対象ルーチンがアクセス処理の対象とするメモリのアドレスに、他のスレッドが書き込みした場合に、コンフリクトを検出する。
コンフリクトを検出すると、HTMは、トランザクションをアボート(中断)する。具体的に、HTMは、対象ルーチンの処理を中断し、EAXレジスタを除く、CPUの内部状態(レジスタ情報)を開始命令の実行時の状態に戻す(ロールバック)。また、HTMは、一時領域に記憶した、書き込み処理の結果データを破棄する。EAXレジスタは、アボートの理由を示す情報を保持する。そして、HTMは、プログラムの実行を、開始命令に指定されたアボートルーチンに遷移させる。アボートルーチンは、例えば、EAXレジスタの値に基づいて、対象ルーチンの再実行の指示等を行う。
一方、開始命令から終了命令までの間にコンフリクトを検出しなかった場合、HTMは、対象ルーチンの終了命令の実行時に、後処理を行う。後処理は、一時領域に保持した書き込み処理の結果データをメモリに書き込む処理等を示す。
図2、図3は、HTM方式に基づく排他制御を説明する図である。本実施の形態において、HTMの対象ルーチンは、共有メモリ領域にアクセスする処理(クリティカルセクション)を示す。ユーザは、プログラムの生成時に、クリティカルセクションの前後に、HTMの開始命令及び終了命令を付加する。
図2は、コンフリクトが発生しない場合の、HTM方式の排他制御を説明する図である。図2に示す矢印は時間の遷移を示す。コンフリクトが発生しない場合、即ち、一のスレッドthによる共有メモリ領域へのアクセス処理中に、共有メモリ領域に対する他のスレッドthによる書き込みが発生しない場合、HTMは、一のスレッドthのアクセス処理を完了させる。
スレッドthAは、タイミングt1に、HTMの開始命令を実行し、クリティカルセクションを開始する。前述したとおり、クリティカルセクションの実行時、スレッドthAは、開始命令の実行時に共有メモリ領域から読み出し、一時領域(ローカルエリア)に記憶した、アクセス対象のデータに対して、クリティカルセクションの処理を実行する。したがって、スレッドthAは、クリティカルセクションの実行中に、共有メモリ領域を直接、更新しない。
一方、スレッドthBは、スレッドthAによる開始命令の実行後のタイミングt3に、開始命令を実行する。スレッドthBも、スレッドthAと同様にして、開始命令の実行時に共有メモリ領域から読み出し一時領域に記憶したデータに対して、クリティカルセクションの処理を実行する。
図2の例では、スレッドthBのクリティカルセクションがアクセス処理の対象とする共有メモリ領域は、スレッドthAのクリティカルセクションがアクセス処理の対象とする共有メモリ領域と異なる。即ち、スレッドthBによるクリティカルセクション中に、スレッドthBがアクセス処理の対象とする共有メモリ領域に、スレッドthAによる書き込みが発生しない場合を示す。
したがって、HTMは、タイミングt2に示す、スレッドthAの終了命令の実行時に(スレッドthAによる結果データの共有メモリ領域への書き込み時に)、コンフリクトを検出しない。したがって、HTMは、スレッドthBのクリティカルセクションの処理をアボートしない。また、HTMは、スレッドthAのクリティカルセクションの処理を確定(完了)させる。
そして、スレッドthBがクリティカルセクションを終了すると、スレッドthBは、タイミングt4に、HTMの終了命令を実行する。HTMは、スレッドthBのクリティカルセクションの処理を更新した結果データを、共有メモリ領域に書き込む。
図2に示すように、各スレッドthによる共有メモリ領域へのアクセス処理中に、共有メモリ領域に対する他のスレッドthによる書き込みが発生しない場合、複数のスレッドthA、thBのクリティカルセクションが並列に実行可能になる。即ち、HTM方式によると、コンフリクトが発生しない場合、スレッドthA、thBが並列に実行可能になる。
図3は、コンフリクトが発生する場合における、HTM方式に基づく排他制御を説明する図である。図3において、図2で示したものと同一のものは、同一の記号で示す。コンフリクトが発生する場合、即ち、一のスレッドthによる共有メモリ領域へのアクセス処理中に、共有メモリ領域に対する他のスレッドthによる書き込みが発生した場合、HTMは、アクセス処理を取り消す。
図3の例によると、スレッドthBのクリティカルセクションがアクセス処理の対象とする共有メモリ領域は、スレッドthAのクリティカルセクションがアクセス処理の対象とする共有メモリ領域と重複する。即ち、スレッドthBによるクリティカルセクション中に、スレッドthBがアクセス処理対象とする共有メモリ領域に、スレッドthAによる書き込みが発生する場合を示す。
したがって、HTMは、タイミングt2に示す、スレッドthAの終了命令の実行時に(スレッドthAによる結果データのメモリへの書き込み時に)、コンフリクトを検出し、スレッドthBのクリティカルセクションをアボートする。そして、HTMは、スレッドthBのクリティカルセクションの処理をロールバックする。つまり、HTMは、スレッドthBのクリティカルセクションの処理を取り消す。
また、スレッドthBは、コンフリクトが発生した場合、例えば、クリティカルセクションの処理を再実行する。スレッドthBは、同様にして、HTMの開始命令を実行し、クリティカルセクションを開始する。そして、コンフリクトが発生しない場合、スレッドthBは、クリティカルセクションを終了し、終了時にHTMの終了命令を実行する。
このように、スレッドthBによる共有メモリ領域へのアクセス処理中に、共有メモリ領域に対するスレッドthAによる書き込みが発生した場合、HTMは、スレッドthBによる共有メモリ領域へのアクセス処理を取り消す。したがって、同一の共有メモリ領域に対して同時にメモリアクセス処理が発生することを回避可能になり、共有メモリ領域が記憶するデータの不整合を回避可能になる。
図2、図3に示すように、HTMは、メモリアクセスの競合(コンフリクト)を検出した場合にのみ、クリティカルセクションの処理をロールバックする。したがって、HTM方式によると、メモリアクセスの競合が発生しない場合には、複数のスレッドthによるクリティカルセクションを、並列に実行可能になる。これにより、共有メモリ領域へのアクセス処理を、効率的に実行可能になる。
[排他制御の方式による性能]
次に、図4、図5にしたがって、図1〜図3で説明した、ロック方式とHTM方式の排他制御方式に基づくメモリアクセス処理の性能の相違を説明する。図4、図5は、同一の共有メモリ領域にアクセスする、実行中のスレッドthの数に応じた性能を示す。図4、図5の例に示す性能は、共有メモリ領域へのアクセス処理を有するプログラムの処理時間に基づいて算出した性能を示す。
図4は、同一の共有メモリ領域にアクセスする、実行中のスレッド数が2つである場合のメモリアクセス処理の性能を示す図である。図4に示すグラフの横軸は、一度の排他制御に基づいて読み書きする対象データのサイズ(Byte)を示し、縦軸は、性能を正規化した値を示す。縦軸の値は、値「1」に近づくほど、プログラムの処理時間が短く抑えられ、性能が高いことを示す。
図4は、ロック方式、及び、HTM方式の排他制御方式に基づくメモリアクセス処理の性能を示す。グラフに示す図形(丸、四角、三角、ひし形)のそれぞれは、テストパターンに対応する。また、白色で示す各図形はロック方式の排他制御に基づくメモリアクセス処理の性能を示し、黒色で示す図形はHTM方式の排他制御に基づくメモリアクセス処理の性能を示す。
図4のグラフによると、読み書き対象のデータのサイズが、64Byteから4096Byteまで間、HTM方式の排他制御に基づくプログラムは、ロック方式の排他制御に基づくプログラムに対して、性能が高い。
図2、図3で説明したとおり、HTMは、対象ルーチン(クリティカルセクション)を投機的に実行する。したがって、HTM方式によると、情報処理装置は、メモリアクセスの競合が発生しない場合、複数のスレッドthによる共有メモリ領域へのメモリアクセス処理を並列に実行できる。これに対し、ロック方式によると、情報処理装置は、メモリアクセス処理を並列に実行できない。したがって、実行中のスレッド数が2つの場合、HTM方式の排他制御に基づくプログラムは、ロック方式の排他制御に基づくプログラムに対して、性能が高い。
なお、読み書き対象のデータのサイズが、4096Byteを超える場合、各方式の排他制御に基づくプログラムの性能はほぼ同じである。図2、図3で前述したとおり、HTMは開始命令の実行時に、前処理を行う。前処理は、アクセス対象のデータを共有メモリ領域から読み出して一時領域に記憶する処理を含む。したがって、図4の例のテストパターンによると、読み書き対象のデータサイズが所定の値を超える場合、前処理の負荷が高くなり、HTM方式の排他制御に基づくプログラムの性能が、ロック方式の排他制御に基づくプログラムの性能と同等になる。
図5は、同一の共有メモリ領域にアクセスする、実行中のスレッド数が1つである場合のメモリアクセス処理の性能を示す図である。図5に示すグラフの横軸及び縦軸、及び、図形は、図4と同様である。図4で説明したとおり、白色で示す各図形はロック方式の排他制御に基づくメモリアクセス処理の性能を示し、黒色で示す図形はHTM方式の排他制御に基づくメモリアクセス処理の性能を示す。
図5のグラフによると、読み書き対象のデータのサイズが、HTM方式の排他制御に基づくプログラムは、ロック方式の排他制御に基づくプログラムに対して、性能が低い。したがって、図4の同一の共有メモリ領域にアクセスする実行中のスレッド数が2つの場合と異なり、スレッド数が1つの場合は、HTM方式の排他制御に基づくプログラムより、ロック方式の排他制御に基づくプログラムの方が、性能が高い。
図2、図3で前述したとおり、HTM方式によると、HTMは、前処理及び後処理を行う。これに対し、ロック方式は、前処理及び後処理を行わないため、オーバヘッドが小さい。したがって、同一の共有メモリ領域にアクセスする実行中のスレッドthの数が1つのみである場合、オーバヘッドが小さいロック方式の排他制御方式に基づくプログラムは、HTM方式の排他制御に基づくプログラムより性能が高い。
図4、図5に示すように、HTM方式とロック方式の間で、同一の共有メモリ領域にアクセスする実行中のスレッドthの数に応じて、より性能が高い排他制御の方式が異なる。つまり、同一の共有メモリ領域にアクセスする実行中のスレッド数が複数である場合はHTM方式の性能がより高いのに対し、単数である場合はロック方式の性能がより高い。
図6は、プログラムの実行時の、スレッド数の変化を模式的に説明する図である。プログラム実行時の、実行(走行)中のスレッドthの数は、一定ではない。実行中のスレッドthの数は、プログラムが実行する処理の変化に応じて、時々刻々と変化する。したがって、プログラムが実行する処理の変化に応じて、同一の共有メモリ領域Smにアクセスする、実行中のスレッドthの数も変化する。
図6に示すように、ある時間帯は、同一の共有メモリ領域Smにアクセスする実行中のスレッドth(th1〜thn)の数が2つ以上であるのに対し、別の時間帯は、同一の共有メモリ領域Smにアクセスする実行中のスレッドth1の数が1つに遷移する。このように、プログラムの処理に応じて、同一の共有メモリ領域Smにアクセスする、実行中のスレッドthの数は変化する。したがって、予め、プログラムの生成時に、ロック方式とHTM方式とから、適切な排他制御の方式を選択することは容易ではない。
[本実施の形態の概要]
したがって、本実施の形態における情報処理装置は、スレッドthが共有メモリ領域Smにアクセスする際に、当該共有メモリ領域Smにアクセスする、複数のスレッドthを実行中か否かを判定する。そして、情報処理装置は、複数のスレッドthを実行中ではない場合は、第1の方式(ロック方式)に基づいて共有メモリ領域Smへのアクセス処理を実行する。また、情報処理装置は、複数のスレッドthが実行中の場合は、第2の制御(HTM方式)に基づいて、共有メモリ領域Smへのアクセス処理を実行する。
図1で前述したとおり、ロック方式によると、情報処理装置は、一のスレッドthによる共有メモリ領域Smへのアクセス処理中に、他のスレッドthによる共有メモリ領域Smへのアクセス処理の開始を待機する。また、図2、図3で前述したとおり、HTM方式によると、情報処理装置は、一のスレッドthによる共有メモリ領域Smへのアクセス処理中に、共有メモリ領域Smに対する他のスレッドthによる書き込みが発生した場合に、アクセス処理を取り消す。
図7は、本実施の形態における情報処理装置の処理の概要を説明する図である。図7において、図6で示したものと同一のものは、同一の記号で示す。
図7に示すように、同一の共有メモリ領域Smにアクセスする実行中のスレッドthの数が複数ではない場合、即ち、1つの場合、情報処理装置はロック方式を選択し、複数の場合はHTM方式を選択する。つまり、情報処理装置は、プログラムの実行中に、同一の共有メモリ領域Smにアクセスする実行中(走行中)のスレッドthの数の変化に応じて、排他制御の方式を切り替える。
したがって、情報処理装置は、プログラムの実行中に、同一の共有メモリ領域Smにアクセスするスレッドthの走行状態に基づいて、より高い性能の排他制御の方式を選択し、切り替えることができる。したがって、情報処理装置は、共有メモリ領域Smの整合性を維持しながら、各スレッドthによる共有メモリ領域Smへのアクセス処理を効率的に実行することができる。つまり、情報処理装置は、共有メモリ領域Smのアクセス処理の排他制御の性能を向上できる。
[情報処理装置のハードウェア構成]
図8は、本実施の形態における情報処理装置100のハードウェア構成図である。図8に示す情報処理装置100は、例えば、CPU101、メモリ102、通信インタフェース部103を有する。各部は、バス106を介して相互に接続する。メモリ102は、RAM(Random Access Memory:RAM)120や不揮発性メモリ121等を備える。
CPU101は、バス106を介してメモリ102等と接続するとともに、情報処理装置100の全体の制御を行う。また、図8に示すCPU101は、図示していないが、複数のプロセッサコアを有し、マルチスレッド処理を実現する。また、図8に示すCPU101は、図2、図3で説明したHTM200の機構を備える。また、通信インタフェース部103は、他の装置(図示せず)と通信して、データの送受信等を行う。
メモリ102のRAM120は、CPU101が処理を行うデータ等を記憶する。また、例えば、RAM120は、共有メモリ領域Smを有する。ただし、この例に限定されるものではなく、不揮発性メモリ121が、共有メモリ領域Smを有していてもよい。
メモリ102の不揮発性メモリ121は、オペレーションシステム格納領域131、アプリケーションプログラム格納領域132を備える。不揮発性メモリ121は、例えば、不揮発性半導体メモリ等を示す。
オペレーションシステム格納領域131のオペレーションシステム(以下、オペレーションシステム131)は、CPU101の実行によって、情報処理装置100で動作するオペレーションシステムの処理を実現する。また、オペレーションシステム格納領域131は、排他制御プログラム格納領域133を有する。排他制御プログラム格納領域133の排他制御プログラム(以下、排他制御プログラム133)は、共有メモリ領域Smの排他制御処理を実現する。排他制御プログラム133の処理は、図9にしたがって後述する。
アプリケーションプログラム格納領域132のアプリケーションプログラム(以下、アプリケーションプログラム132)は、CPU101の実行によって、オペレーションシステム131上で動作し、所定の処理を実現する。また、アプリケーションプログラム132は、共有メモリ領域Smにアクセスする際に、排他制御プログラム133を呼び出す。
[情報処理装置100のソフトウェアブロック]
図9は、図8に示した情報処理装置100のソフトウェアブロック図である。図8に示した排他制御プログラム133は、排他取得モジュール141、排他解除モジュール151を有する。各モジュールの処理の詳細は、図11のフローチャート図にしたがって後述する。
排他取得モジュール141は、HTM方式の排他取得モジュール142と、ロック方式の排他取得モジュール143とを有する。また、排他解除モジュール151は、HTM方式の排他解除モジュール152と、ロック方式の排他解除モジュール153とを有する。
排他取得モジュール141は、RAM120等のメモリが有する同時走行スレッド数記憶領域170を参照し、同一の共有メモリ領域Smにアクセスする実行中のスレッド数を取得する。そして、排他取得モジュール141は、取得したスレッド数に基づいて、HTM方式の排他取得モジュール142、または、ロック方式の排他取得モジュール143のいずれかを呼び出す。
HTM方式の排他取得モジュール142は、HTM方式に基づく排他制御の開始処理を行う。具体的に、HTM方式の排他取得モジュール142は、HTM200(図8)が処理対象とするトランザクション(対象ルーチン)の開始を、HTM200に通知する、開始命令を呼び出す。
ロック方式の排他取得モジュール143は、RAM120等のメモリ上のロック変数160に基づいて、ロック方式に基づく排他制御の開始(取得)処理を行う。具体的に、ロック方式の排他取得モジュール143は、ロック変数160が非ロック状態に遷移するまで、クリティカルセクションの開始を待機する。また、ロック方式の排他取得モジュール143は、ロック変数160が非ロック状態に遷移すると、ロック変数160をロック状態に更新する。
排他解除モジュール151は、排他取得モジュール141と同様に、同時走行スレッド数記憶領域170を参照し、同一の共有メモリ領域Smにアクセスする実行中のスレッド数を取得する。そして、排他解除モジュール151は、取得したスレッド数に基づいて、HTM方式の排他解除モジュール152、または、ロック方式の排他解除モジュール153のいずれかを呼び出す。
HTM方式の排他解除モジュール152は、HTM方式に基づく排他制御の終了処理を行う。具体的に、HTM方式の排他解除モジュール152は、HTM200が処理対象とするトランザクションの終了をHTM200に通知する、終了命令を呼び出す。また、ロック方式の排他解除モジュール153は、ロック方式に基づく排他制御の終了(解除)処理を行う。具体的に、ロック方式の排他解除モジュール153は、ロック変数160を非ロック状態に更新する。
[スレッド数]
図10は、図9に示した同時走行スレッド数記憶領域170に記憶する、同一の共有メモリ領域Smにアクセスする実行中のスレッド数の取得処理を説明する図である。
並列処理を行う情報処理装置100は、例えば、スレッドスケジューラ180を実行する。スレッドスケジューラ180は、例えば、スレッドthのスケジューリングを行うオペレーションシステム131のプロセスである。スレッドスケジューラ180は、実行開始すべきスレッドを選択し、CPU101(図8)のプロセッサコア(図示せず)に割り当てる。また、スレッドスケジューラ180は、同一の共有メモリ領域にアクセスする実行中のスレッド数(同時走行スレッド数ともいう、numThreads)を取得し、同時走行スレッド数記憶領域170に記憶する。
各スレッドthは、例えば、同時走行スレッド数記憶領域170を参照し、同一の共有メモリ領域Smにアクセスする実行中スレッド数を取得する(図10のp1)。そして、スレッドthは、取得したスレッド数に基づいて選択した排他制御の方式に基づいて、共有メモリ領域Smにアクセスする(p2)。
なお、スレッドthが、同一の共有メモリ領域Smにアクセスする実行中スレッド数を取得する方法は、図10の例に限定されるものではない。例えば、情報処理装置100のオペレーションシステム131が、同一の共有メモリ領域Smにアクセスする実行中スレッド数を管理してもよい。この場合、スレッドthは、オペレーションシステム131のシステムコールを実行することによって、同一の共有メモリ領域Smにアクセスする実行中スレッド数を取得する。
次に、図11にしたがって、図8、図9で説明した排他制御プログラム133の処理の流れを説明する。
[排他制御プログラム133の処理]
図11は、本実施の形態における情報処理装置100の排他制御プログラム133の処理の流れを説明するフローチャート図である。
S11:アプリケーションプログラム132は、クリティカルセクションの実行開始前に、排他制御プログラム133の排他取得モジュール141を呼び出す。
S12:排他取得モジュール141は、図10で説明した同時走行スレッド数記憶領域170を参照し、同一の共有メモリ領域Smにアクセスする、同時走行スレッド数が2個以上であるか否かを判定する。
S13:同時走行スレッド数が2個以上である場合(S12のYes)、排他取得モジュール141は、HTM方式の排他取得モジュール142を読み出す。HTM方式の排他取得モジュール142は、HTM方式の実行開始命令を実行して、HTM方式の前処理を行う。工程S13の処理の詳細は、図18のフローチャート図で後述する。
S14:一方、同時走行スレッド数が1個の場合(S12のNo)、排他取得モジュール141は、ロック方式の排他取得モジュール143を読み出す。ロック方式の排他取得モジュール143は、ロック変数160に基づいてロックを取得する。工程S14の処理の詳細は、図19のフローチャート図で後述する。
S15:排他取得処理(工程S13、または、工程S14)が終了すると、排他取得モジュール141は、アプリケーションプログラム132に制御を戻す。そして、スレッドは、アプリケーションプログラム132の処理である、共有メモリ領域Smへのアクセス処理(クリティカルセクション)を実行する。
なお、HTM方式の排他制御を選択した場合、クリティカルセクションの実行中に、HTM200がコンフリクト(メモリアクセスの競合)を検出すると、HTM200は、クリティカルセクションをアボートし、ロールバックする。例えば、スレッドthがクリティカルセクションの処理を再実行する場合、スレッドthは、再度、HTM方式の実行開始命令を実行する(S13)。
S16:クリティカルセクションが終了すると、アプリケーションプログラム132は、排他制御プログラム133の排他解除モジュール151を呼び出す。
S17:排他解除モジュール151は、排他取得処理(S13、S14)が、HTM方式またはロック方式のいずれの方式に基づくかを判定する。
S18:排他取得処理がHTM方式に基づく場合(HTM方式)、排他解除モジュール151は、HTM方式の排他解除モジュール152を読み出す。HTM方式の排他解除モジュール152は、HTM方式の実行終了命令を実行し、HTM方式の後処理を行う。工程S18の処理の詳細は、図18のフローチャート図で後述する。
S19:排他取得処理がロック方式に基づく場合(ロック方式)、排他解除モジュール151は、ロック方式の排他解除モジュール153を読み出す。ロック方式の排他解除モジュール153は、ロック変数160に基づいてロックを解除する。工程S19の処理の詳細は、図19のフローチャート図で後述する。
図11に示すように、排他制御プログラム133は、排他取得モジュール141の方式と同様の方式にしたがって、排他解除モジュール151の処理を行う。したがって、排他制御プログラム133は、同一の共有メモリ領域Smにアクセスする実行中のスレッド数の数が遷移した場合であっても、排他取得時の排他制御方式に基づいて、適切に排他解除処理を行うことができる。
次に、図11に示したフローチャート図にしたがって排他制御の方式を選択した場合の、排他制御方式の切り替わりを説明する。
[排他制御の切り替わり]
図12は、排他制御方式の切り替わりを模式的に説明する図である。図12に示す矢印ttは時間の遷移を示す。また、図12に示す、点線の横線で示す矩形はロック方式の排他制御に基づくクリティカルセクションを、縦線で示す矩形はHTM方式の排他制御に基づくクリティカルセクションを示す。また、右上がりの斜線で示す矩形は、同時走行スレッド数記憶領域170(図10)の値(同一の共有メモリ領域にアクセスするスレッドの同時走行数)の取得処理を示す。
図12は、アプリケーションプログラム132(図8)が、スレッドthA、thBを実行する場合を例示する。また、図12は、スレッドthAが走行を開始後に、スレッドthBが走行を開始する場合を例示する。スレッドthA、thBは、同一の共有メモリ領域Smにアクセスする。
アプリケーションプログラム132は、タイミングt11に、スレッドthAの走行を開始する。スレッドthAの走行開始により、スレッドスケジューラ180は、同時走行スレッド数記憶領域170の値を「0」から「1」に更新する。
スレッドthAは、スレッドthBが走行を開始する前に、クリティカルセクションを開始する。スレッドthAは、排他取得モジュール141を呼び出し(図11のS11)、スレッドスケジューラ180が更新した同時走行スレッド数記憶領域170の値「1」に基づいてロック方式を選択する(S12)。そして、スレッドthAは、ロック方式に基づいて排他を取得し(S14)、クリティカルセクションを実行する(S15)。
一方、アプリケーションプログラム132は、スレッドthAの走行中に(タイミングt12)、スレッドthBの走行を開始する。スレッドthBの走行開始により、スレッドスケジューラ180は、同時走行スレッド数記憶領域170の値を「1」から「2」に更新する。そして、スレッドthBは、クリティカルセクションの開始前(タイミングt13)に、同時走行スレッド数記憶領域170の値「2」の情報に基づいて、HTM方式を選択する(S12)。
ただし、タイミングt13の時点では、既に、スレッドthAが、ロック方式に基づいて排他を取得中である。同一の共有メモリ領域Smに対して、異なる排他制御方式に基づいて排他制御を行っても、排他制御の機能は成立しない。即ち、同一の共有メモリ領域Smに対する排他制御方式は、同一の排他制御方式である必要性がある。したがって、スレッドthBは、スレッドthAが、ロック方式に基づいて排他を解除するまで(図11のS19)の間、HTM方式に基づく排他取得処理を待機する。
そして、タイミングt14に、スレッドthAが、排他取得時に選択した方式(即ち、ロック方式)に基づいて排他の解除を行うと(図11のS19)、スレッドthBは、HTM方式の排他取得処理を行う(S12、S13)。そして、スレッドthBは、クリティカルセクションを開始する(S15)。クリティカルセクションの終了後、スレッドthBは、排他取得時に選択したHTM方式に基づいて、排他の解除処理を行う(S18)。
このように、複数のスレッドthを実行中ではない場合、スレッドthAはロック方式を選択するが、ロック方式の排他取得中に、新たなスレッドthBが走行を開始し、同時走行スレッド数記憶領域170の値が「1」から「2」に遷移する場合がある。この場合、スレッドthBは、ロック方式の排他制御に基づく共有メモリ領域Smへのアクセス処理中は、HTM方式の排他制御に基づく共有メモリ領域Smへのアクセス処理(クリティカルセクション)の開始を待機する。
即ち、情報処理装置100は、複数のスレッドを実行中ではない場合に、新たなスレッドの実行を開始し複数のスレッドの実行中に遷移したとき、ロック方式に基づくアクセス処理中は、新たなスレッドによるHTM方式に基づくアクセス処理の開始を待機する。これにより、情報処理装置100は、アクセス処理中に、同一の共有メモリ領域Smにアクセスする実行中のスレッド数が1個から複数個に増加した場合であっても、複数個のスレッドthに共通の排他制御方式にしたがって、適切に排他制御を実現できる。
タイミングt14から、スレッドthAが走行を終了するタイミングt15までの間、同時走行スレッド数記憶領域170は値「2」である。したがって、スレッドthA、thBは、HTM方式の排他制御に基づいて、共有メモリ領域Smのアクセス処理(クリティカルセクション)を行う。
また、スレッドthAのクリティカルセクションの終了命令の実行時に、スレッドthBのクリティカルセクションとの間でメモリアクセスの競合が発生した場合、HTM200は、スレッドthBのクリティカルセクションをアボートし、ロールバックする(x1)。クリティカルセクションを再実行する場合、スレッドthBは、同時走行スレッド数記憶領域170の値に基づいて、HTM方式に基づいて排他を取得し(S13)、クリティカルセクションを実行する(S15)。
そして、タイミングt15にスレッドthAが走行を停止(終了)すると、スレッドスケジューラ180は、同時走行スレッド数記憶領域170を値「2」から値「1」に更新する。なお、スレッドthBは、同時走行スレッド数記憶領域170が値「1」に更新された後であっても、クリティカルセクションの終了時(タイミングt16)に、排他取得時に選択した方式(即ち、HTM方式)に基づいて、排他解除処理を行う(S18)。
即ち、情報処理装置100は、複数のスレッドを実行中の場合に、いずれかのスレッドの実行が終了して複数のスレッドを実行中ではない場合に遷移したとき、HTM方式に基づくアクセス処理の終了時に、HTM方式に基づく終了(排他解除)処理を行う。これにより、情報処理装置100は、アクセス処理中に、同一の共有メモリ領域Smにアクセスする実行中のスレッド数が複数個から1個に減少した場合であっても、排他取得時の排他制御方式に基づいて、適切に、排他解除処理を行うことができる。
そして、スレッドthBは、スレッドthAの停止後であるタイミングt17に、クリティカルセクションを開始する。このとき、スレッドthBは、同時走行スレッド数記憶領域170の値「1」に基づいてロック方式を選択する(図11のS12)。したがって、スレッドthBは、ロック方式の排他制御に基づいて、共有メモリ領域Smのアクセス処理(クリティカルセクション)を行う。
次に、図13、図14にしたがって、本実施の形態におけるメモリアクセス処理の性能を説明する。図13、図14は、同一の共有メモリ領域Smにアクセスする、実行中のスレッドthの数のパターンに応じた、本実施の形態における排他制御方式の性能を示す。
[本実施の形態における排他制御方式の性能]
図13は、同一の共有メモリ領域Smにアクセスする、実行中のスレッドthの数が2つである場合の、本実施の形態の排他制御方式に基づくメモリアクセス処理の性能を示す図である。図13は、図4に示した、ロック方式、及び、HTM方式の排他制御方式に基づくメモリアクセス処理の性能に加えて、本実施の形態における排他制御方式に基づくメモリアクセス処理の性能を示す。
図13に示すグラフの横軸及び縦軸、及び、図形は、図4、図5と同様である。図13の、右上がりの斜線で示す各図形は、本実施の形態の排他制御方式に基づくメモリアクセス処理の性能を示す。
本実施の形態における排他制御方式は、同一の共有メモリ領域Smにアクセスする、実行中のスレッドthの数が2つ以上の場合に、HTM方式の排他制御方式を採用する。したがって、図13に示すグラフによると、本実施の形態の排他制御方式に基づくメモリアクセス処理の性能は、黒色の図形に示すHTM方式に基づくメモリアクセス処理の性能と同様である。
図14は、同一の共有メモリ領域Smにアクセスする、実行中のスレッドthの数が1つである場合の、本実施の形態の排他制御方式に基づくメモリアクセス処理の性能を示す図である。図14に示すグラフの横軸及び縦軸、及び、図形は、図13と同様である。
本実施の形態における排他制御方式は、同一の共有メモリ領域Smにアクセスする、実行中のスレッドthの数が1つの場合は、ロック方式の排他制御方式を採用する。したがって、図14に示すグラフによると、本実施の形態の排他制御方式に基づくメモリアクセス処理の性能は、白色の図形に示すロック方式に基づくメモリアクセス処理の性能と同様である。
図13、図14に示すように、本実施の形態の排他制御方式に基づくメモリアクセス処理の性能は、ロック方式とHTM方式のうち、実行中のスレッドthの数に応じた、より性能が高い方式に基づくメモリアクセス処理と同様の性能となる。このように、情報処理装置100は、プログラムの実行中に、スレッドthの走行状態に基づいて性能をより向上する排他制御方式に切り替えることによって、メモリアクセス処理を効率的に実行し、排他制御の性能を向上できる。
次に、図15〜図17にしたがって、図8に示したアプリケーションプログラム132の一例と、図9に示した排他取得モジュール141、及び、排他解除モジュール151のプログラム例を説明する。
[プログラムの例]
図15は、図8に示したアプリケーションプログラム132の一部のプログラムpr1の一例を示す図である。図15に示す、記述c1は排他取得モジュール141(図9)の呼出し命令を示し、記述c2は、排他解除モジュール151(図9)の呼出し命令を示す。また、命令群c3は、共有メモリ領域Smにアクセスする処理(クリティカルセクション)を実行する命令である。
プログラムpr1は、クリティカルセクション(c3、図11のS15)の実行開始前に、記述c1を実行する。これにより、プログラムpr1は、本実施の形態の排他取得モジュール141を呼出し、排他を取得する(図11のS11)。また、プログラムpr1は、クリティカルセクション(c3、S15)の終了後、記述c2を実行する。これにより、プログラムpr1は、本実施の形態の排他解除モジュール151を呼出し、排他を解除する(S16)。
図16は、図9、図11に示した排他取得モジュール141のプログラムpr2の一例を示す図である。図16に示す排他取得モジュール141は、図15に示した記述c1によって呼び出されるモジュールである。
図16に示す記述c11は、ロック変数「spinlock」160の宣言文を示す。また、記述c12は、同一の共有メモリ領域Smにアクセスする、実行中のスレッド数「numThreads」(図10の同時走行スレッド数記憶領域170)の値が1より大きいか否かを判定する記述である(図11のS12)。
記述c13は、実行中のスレッド数「numThreads」の値が1より大きい場合(図11のS12のYes)の処理を示す。具体的に、記述c13は、排他制御の方式「access_form」をHTM方式に設定し、HTM方式の排他取得モジュール142(rtm_wrapped_lock())を呼び出す命令(S13)を示す。
記述c14は、実行中のスレッド数「numThreads」の値が1以下である場合の処理を示す(図11のS12のNo)。具体的に、記述c14は、排他制御の方式「access_form」をロック方式に設定し、ロック方式の排他取得モジュール143(spin_lock())を呼び出す命令(S14)を示す。なお、図16に図示していないが、ロック方式の排他取得モジュール143(spin_lock())は、ロック変数「spinlock」160を参照する。
図17は、図9、図11に示した排他解除モジュール151のプログラムpr3の一例を示す図である。図17の排他解除モジュール151は、図15に示した記述c2によって呼び出されるモジュールである。
図17に示す記述c21は、ロック変数「spinlock」160の宣言文を示す。また、記述c22は、排他取得モジュール141が設定した排他制御の方式「access_form」がHTM方式であるか否かを判定する(図11のS17)記述である。
記述c23は、排他取得モジュール141が設定した排他制御の方式「access_form」がHTM方式である場合に(図11のS17のHTM方式)、HTM方式の排他解除モジュール152(rtm_wrapped_unlock())を呼び出す命令(S18)を示す。また、記述c24は、排他取得モジュール141が設定した排他制御の方式「access_form」がロック方式である場合に(S17のロック方式)、ロック方式の排他解除モジュール153(spin_unlock())を呼び出す命令(S19)を示す。なお、図17に図示していないが、ロック方式の排他解除モジュール153(spin_unlock())は、ロック変数「spinlock」160を参照する。
次に、図18にしたがってHTM方式の排他取得モジュール142、及び、HTM方式の排他解除モジュール152の処理の流れを説明する。また、図19にしたがってロック方式の排他取得モジュール143、及び、ロック方式の排他解除モジュール153の処理の流れを説明する。
[HTM方式の処理]
図18は、HTM方式の排他取得モジュール142、及び、HTM方式の排他解除モジュール152の処理の流れを説明するフローチャート図である。
図18の(A)は、HTM方式の排他取得モジュール142の処理(図11のS13)の流れを示すフローチャート図である。
S21:HTM方式の排他取得モジュール142は、ロック方式に基づくロックが解放されているか否かを判定する。図12で説明したとおり、同一の共有メモリ領域Smに対する、異なる排他制御方式に基づく排他制御は有効ではない。したがって、排他を取得しようとするスレッドthの、HTM方式の排他取得モジュール142は、排他取得中のスレッドthがロック方式に基づいて排他を解除するまでの間、HTM方式に基づく排他取得処理の実行を待機する。
S22:ロック方式に基づくロックが解放済みの場合、または、ロック方式に基づいて排他が解除された場合(S21のYes)、排他取得モジュール141は、HTM200の開始命令を実行し、HTM方式の前処理を行う。HTM方式の前処理は、図2、図3で前述したとおりである。
図18の(B)は、HTM方式の排他解除モジュール152の処理の流れを示すフローチャート図である。
S31:HTM方式の排他解除モジュール152は、HTM200の終了命令を実行し、HTM方式の後処理を行う。HTM方式の後処理は、図2、図3で前述したとおりである。これにより、共有メモリ領域Smへのアクセス処理(クリティカルセクションの処理)が確定(完了)する。
[ロック方式の処理]
図19は、ロック方式の排他取得モジュール143、及び、ロック方式の排他解除モジュール153の処理の流れを説明するフローチャート図である。
図19の(A)は、ロック方式の排他取得モジュール143の処理(図11のS14)の流れを示すフローチャート図である。
S41:ロック方式の排他取得モジュール143は、ロック方式に基づくロックが解放されているか否かを判定する。ロック方式の排他取得モジュール143は、ロック変数「spinlock」160(図16、図17)の値がロック状態を示すか否かに基づいて、ロックが解放されているか否かを判定する。
S42:ロック方式に基づくロックが解放済みの場合、または、ロック方式に基づいて排他が解除された場合(S41のYes)、排他取得モジュール141は、ロックを取得する。即ち、排他取得モジュール141は、ロック変数160の値を、非ロック状態を示す値から、ロック状態を示す値に更新する。
図19の(B)は、ロック方式の排他解除モジュール153の処理(図11のS19)の流れを示すフローチャート図である。
S51:ロック方式の排他解除モジュール153は、ロックを開放する。即ち、ロック方式の排他解除モジュール153は、ロック変数160の値を、ロック状態を示す値から、非ロック状態を示す値に更新する。
[他の実施の形態]
上記の実施の形態は、オペレーションシステム131が、本実施の形態の排他制御プログラム133を有する場合を例示した。ただし、この例に限定されるものではない。アプリケーションプログラム132が、本実施の形態の排他制御プログラム133を含んでいてもよい。
以上の実施の形態をまとめると、次の付記のとおりである。
(付記1)
共有メモリ領域を有する記憶部と、
1つまたは複数のスレッドを実行する処理部と、を有し、
前記処理部は、
前記スレッドが前記共有メモリ領域のアクセス処理を実行する際に、当該共有メモリ領域にアクセスする複数のスレッドを実行中か否かを判定し、
前記複数のスレッドを実行中ではない場合、一のスレッドによる前記共有メモリ領域へのアクセス処理中に、他のスレッドによる前記共有メモリ領域へのアクセス処理の開始を待機する第1の制御に基づいて、前記共有メモリ領域へのアクセス処理を実行し、
前記複数のスレッドを実行中の場合、一のスレッドによる前記共有メモリ領域へのアクセス処理中に、前記共有メモリ領域に対する他のスレッドによる書き込みが発生した場合に、前記アクセス処理を取り消す第2の制御に基づいて、前記共有メモリ領域へのアクセス処理を実行する、
情報処理装置。
(付記2)
付記1において、
前記処理部は、前記複数のスレッドを実行中ではない場合、新たなスレッドの実行を開始して前記複数のスレッドを実行中の場合に遷移したとき、前記第1の制御に基づく前記アクセス処理中は、前記新たなスレッドによる前記第2の制御に基づく前記共有メモリ領域へのアクセス処理の開始を待機する、
情報処理装置。
(付記3)
付記1または2において、
前記第2の制御は、前記一のスレッドによる前記共有メモリ領域へのアクセス処理中に、前記共有メモリ領域に対する前記他のスレッドによる書き込みが発生しない場合に、前記アクセス処理を完了させる、
情報処理装置。
(付記4)
付記1乃至3のいずれかにおいて、
前記処理部は、前記複数のスレッドを実行中の場合、いずれかの前記スレッドの実行が終了して前記複数のスレッドを実行中ではない場合に遷移したとき、前記第2の制御に基づく前記共有メモリ領域へのアクセス処理の終了時に、前記第2の制御に基づく終了処理を行う、
情報処理装置。
(付記5)
スレッドが共有メモリ領域のアクセス処理を実行する際に、当該共有メモリ領域にアクセスする複数のスレッドを実行中か否かを判定し、
前記複数のスレッドを実行中ではない場合、一のスレッドによる前記共有メモリ領域へのアクセス処理中に、他のスレッドによる前記共有メモリ領域へのアクセス処理の開始を待機する第1の制御に基づいて、前記共有メモリ領域へのアクセス処理を実行し、
前記複数のスレッドを実行中の場合、一のスレッドによる前記共有メモリ領域へのアクセス処理中に、前記共有メモリ領域に対する他のスレッドによる書き込みが発生した場合に、前記アクセス処理を取り消す第2の制御に基づいて、前記共有メモリ領域へのアクセス処理を実行する、
処理をコンピュータに実行させる並列処理プログラム。
(付記6)
付記5において、
前記複数のスレッドを実行中ではない場合の前記アクセス処理の実行は、新たなスレッドの実行を開始して前記複数のスレッドを実行中の場合に遷移したとき、前記第1の制御に基づく前記アクセス処理中は、前記新たなスレッドによる前記第2の制御に基づく前記共有メモリ領域へのアクセス処理の開始を待機する、
並列処理プログラム。
(付記7)
付記5または6において、
前記複数のスレッドを実行中の場合の前記アクセス処理の実行は、前記一のスレッドによる前記共有メモリ領域へのアクセス処理中に、前記共有メモリ領域に対する前記他のスレッドによる書き込みが発生しない場合に、前記アクセス処理を完了させる、
並列処理プログラム。
(付記8)
付記5乃至7のいずれかにおいて、
前記複数のスレッドを実行中の場合の前記アクセス処理の実行は、いずれかの前記スレッドの実行が終了して前記複数のスレッドを実行中ではない場合に遷移したとき、前記第2の制御に基づく前記共有メモリ領域へのアクセス処理の終了時に、前記第2の制御に基づく終了処理を行う、
並列処理プログラム。
(付記9)
処理部が、スレッドが共有メモリ領域のアクセス処理を実行する際に、当該共有メモリ領域にアクセスする複数のスレッドを実行中か否かを判定し、
処理部が、前記複数のスレッドを実行中ではない場合、一のスレッドによる前記共有メモリ領域へのアクセス処理中に、他のスレッドによる前記共有メモリ領域へのアクセス処理の開始を待機する第1の制御に基づいて、前記共有メモリ領域へのアクセス処理を実行し、
処理部が、前記複数のスレッドを実行中の場合、一のスレッドによる前記共有メモリ領域へのアクセス処理中に、前記共有メモリ領域に対する他のスレッドによる書き込みが発生した場合に、前記アクセス処理を取り消す第2の制御に基づいて、前記共有メモリ領域へのアクセス処理を実行する、
共有メモリアクセス方法。
(付記10)
付記9において、
前記複数のスレッドを実行中ではない場合の前記アクセス処理の実行は、新たなスレッドの実行を開始して前記複数のスレッドを実行中の場合に遷移したとき、前記第1の制御に基づく前記アクセス処理中は、前記新たなスレッドによる前記第2の制御に基づく前記共有メモリ領域へのアクセス処理の開始を待機する、
共有メモリアクセス方法。
(付記11)
付記9または10において、
前記複数のスレッドを実行中の場合の前記アクセス処理の実行は、前記一のスレッドによる前記共有メモリ領域へのアクセス処理中に、前記共有メモリ領域に対する前記他のスレッドによる書き込みが発生しない場合に、前記アクセス処理を完了させる、
共有メモリアクセス方法。
(付記12)
付記9乃至11のいずれかにおいて、
前記複数のスレッドを実行中の場合の前記アクセス処理の実行は、いずれかの前記スレッドの実行が終了して前記複数のスレッドを実行中ではない場合に遷移したとき、前記第2の制御に基づく前記共有メモリ領域へのアクセス処理の終了時に、前記第2の制御に基づく終了処理を行う、
共有メモリアクセス方法。
100:情報処理装置、101:CPU、102:メモリ、103:通信インタフェース部、106:バス、Sm:共有メモリ領域、th:スレッド、131:オペレーションシステム、133:排他制御プログラム、132:アプリケーションプログラム

Claims (5)

  1. 共有メモリ領域を有する記憶部と、
    1つまたは複数のスレッドを実行する処理部と、を有し、
    前記処理部は、
    あるスレッドが前記共有メモリ領域のアクセス処理を実行する際に、当該共有メモリ領域にアクセスする複数のスレッドを実行中か否かを判定し、
    前記複数のスレッドを実行中ではない場合、一のスレッドによる前記共有メモリ領域へのアクセス処理中に、他のスレッドによる前記共有メモリ領域へのアクセス処理の開始を待機する第1の制御に基づいて、前記あるスレッドによる当該共有メモリ領域へのアクセス処理を実行し、
    前記複数のスレッドを実行中の場合、一のスレッドによる前記共有メモリ領域へのアクセス処理中に、前記共有メモリ領域に対する他のスレッドによる書き込みが発生した場合に、前記アクセス処理を取り消す第2の制御に基づいて、前記あるスレッドによる当該共有メモリ領域へのアクセス処理を実行する、
    情報処理装置。
  2. 請求項1において、
    前記処理部は、前記複数のスレッドを実行中ではない場合、新たなスレッドの実行を開始して前記複数のスレッドを実行中の場合に遷移したとき、前記第1の制御に基づく前記アクセス処理中は、前記新たなスレッドによる前記第2の制御に基づく前記共有メモリ領域へのアクセス処理の開始を待機する、
    情報処理装置。
  3. 請求項1または2において、
    前記第2の制御は、前記一のスレッドによる前記共有メモリ領域へのアクセス処理中に、前記共有メモリ領域に対する前記他のスレッドによる書き込みが発生しない場合に、前記アクセス処理を完了させる、
    情報処理装置。
  4. あるスレッドが共有メモリ領域のアクセス処理を実行する際に、当該共有メモリ領域にアクセスする複数のスレッドを実行中か否かを判定し、
    前記複数のスレッドを実行中ではない場合、一のスレッドによる前記共有メモリ領域へのアクセス処理中に、他のスレッドによる前記共有メモリ領域へのアクセス処理の開始を待機する第1の制御に基づいて、前記あるスレッドによる当該共有メモリ領域へのアクセス処理を実行し、
    前記複数のスレッドを実行中の場合、一のスレッドによる前記共有メモリ領域へのアクセス処理中に、前記共有メモリ領域に対する他のスレッドによる書き込みが発生した場合に、前記アクセス処理を取り消す第2の制御に基づいて、前記あるスレッドによる当該共有メモリ領域へのアクセス処理を実行する、
    処理をコンピュータに実行させる並列処理プログラム。
  5. 処理部が、あるスレッドが共有メモリ領域のアクセス処理を実行する際に、当該共有メモリ領域にアクセスする複数のスレッドを実行中か否かを判定し、
    処理部が、前記複数のスレッドを実行中ではない場合、一のスレッドによる前記共有メモリ領域へのアクセス処理中に、他のスレッドによる前記共有メモリ領域へのアクセス処理の開始を待機する第1の制御に基づいて、前記あるスレッドによる当該共有メモリ領域へのアクセス処理を実行し、
    処理部が、前記複数のスレッドを実行中の場合、一のスレッドによる前記共有メモリ領域へのアクセス処理中に、前記共有メモリ領域に対する他のスレッドによる書き込みが発生した場合に、前記アクセス処理を取り消す第2の制御に基づいて、前記あるスレッドによる当該共有メモリ領域へのアクセス処理を実行する、
    共有メモリアクセス方法。
JP2015091361A 2015-04-28 2015-04-28 情報処理装置、並列処理プログラム、及び、共有メモリアクセス方法 Expired - Fee Related JP6468053B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2015091361A JP6468053B2 (ja) 2015-04-28 2015-04-28 情報処理装置、並列処理プログラム、及び、共有メモリアクセス方法
US15/072,423 US20160320984A1 (en) 2015-04-28 2016-03-17 Information processing device, parallel processing program and method for accessing shared memory

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2015091361A JP6468053B2 (ja) 2015-04-28 2015-04-28 情報処理装置、並列処理プログラム、及び、共有メモリアクセス方法

Publications (2)

Publication Number Publication Date
JP2016207130A JP2016207130A (ja) 2016-12-08
JP6468053B2 true JP6468053B2 (ja) 2019-02-13

Family

ID=57204844

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2015091361A Expired - Fee Related JP6468053B2 (ja) 2015-04-28 2015-04-28 情報処理装置、並列処理プログラム、及び、共有メモリアクセス方法

Country Status (2)

Country Link
US (1) US20160320984A1 (ja)
JP (1) JP6468053B2 (ja)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2018166955A (ja) * 2017-03-30 2018-11-01 株式会社平和 遊技機
US10831500B2 (en) 2018-06-10 2020-11-10 International Business Machines Corporation Adaptive locking in elastic threading systems
GB2579246B (en) 2018-11-28 2021-10-13 Advanced Risc Mach Ltd Apparatus and data processing method for transactional memory

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2003036338A2 (en) * 2001-10-25 2003-05-01 The Johns Hopkins University An optical sensor and method for detecting projectile impact location and velocity vector
US6779090B2 (en) * 2002-05-21 2004-08-17 International Business Machines Corporation Spinlock for shared memory
US8065491B2 (en) * 2007-12-30 2011-11-22 Intel Corporation Efficient non-transactional write barriers for strong atomicity
US8725992B2 (en) * 2008-02-01 2014-05-13 International Business Machines Corporation Programming language exposing idiom calls to a programming idiom accelerator
JP5270268B2 (ja) * 2008-09-05 2013-08-21 インターナショナル・ビジネス・マシーンズ・コーポレーション 共有データへの排他的アクセスを許すためのコンピュータ・システム、並びにその方法及びコンピュータ読み取り可能な記録媒体
JP5509655B2 (ja) * 2009-03-31 2014-06-04 トヨタ自動車株式会社 燃料電池システム及びこれを備えた車両
US8495311B2 (en) * 2009-06-25 2013-07-23 International Business Machines Corporation Updating shared variables atomically
US8973004B2 (en) * 2009-06-26 2015-03-03 Oracle America, Inc. Transactional locking with read-write locks in transactional memory systems
CN105683906B (zh) * 2013-10-14 2018-11-23 国际商业机器公司 用于利用锁省略和锁定的选择进行数据共享的自适应处理

Also Published As

Publication number Publication date
US20160320984A1 (en) 2016-11-03
JP2016207130A (ja) 2016-12-08

Similar Documents

Publication Publication Date Title
US10289454B2 (en) Systems and methods for implementing work stealing using a configurable separation of stealable and non-stealable work items
EP3701377B1 (en) Method and apparatus for updating shared data in a multi-core processor environment
US9471399B2 (en) Orderable locks for disclaimable locks
JP2005284749A (ja) 並列処理コンピュータ
JP2009501366A (ja) スレッドレベルの投機実行を拡張するためのプリミティブ
GB2414573A (en) Control of access to a shared resource in a data processing apparatus
US9164799B2 (en) Multiprocessor system
US9495225B2 (en) Parallel execution mechanism and operating method thereof
JP6468053B2 (ja) 情報処理装置、並列処理プログラム、及び、共有メモリアクセス方法
US9152509B2 (en) Transactional memory conflict management
KR20200061361A (ko) 예외 마스크 갱신 명령 후 트랜잭션의 비중지 처리의 허가
US20150370568A1 (en) Integrated circuit processor and method of operating a integrated circuit processor
US9311260B2 (en) Context preservation during thread level speculative execution
US9354890B1 (en) Call stack structure for enabling execution of code outside of a subroutine and between call stack frames
JP7042105B2 (ja) プログラム実行制御方法および車両制御装置
JPWO2008155801A1 (ja) 情報処理装置及びレジスタ制御方法
US7996848B1 (en) Systems and methods for suspending and resuming threads
US9619277B2 (en) Computer with plurality of processors sharing process queue, and process dispatch processing method
JP2017201486A (ja) 情報処理装置、情報処理プログラム、及び情報処理方法
US20130166887A1 (en) Data processing apparatus and data processing method
JPH07319716A (ja) 計算機システムの資源の排他制御方式
JP4006428B2 (ja) 計算機システム
CN114327828B (zh) 一种共享数据的无锁并发访问方法、装置、设备及介质
US11327756B2 (en) Methods and processors for performing resource deduction for execution of smart contract
CN114020658A (zh) 一种多线程的链表处理方法及相关装置

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20180206

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20180926

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20181002

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20181203

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20181231

R150 Certificate of patent or registration of utility model

Ref document number: 6468053

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees