JP5780292B2 - 同期方法、マルチコアプロセッサシステム、および同期システム - Google Patents

同期方法、マルチコアプロセッサシステム、および同期システム Download PDF

Info

Publication number
JP5780292B2
JP5780292B2 JP2013504460A JP2013504460A JP5780292B2 JP 5780292 B2 JP5780292 B2 JP 5780292B2 JP 2013504460 A JP2013504460 A JP 2013504460A JP 2013504460 A JP2013504460 A JP 2013504460A JP 5780292 B2 JP5780292 B2 JP 5780292B2
Authority
JP
Japan
Prior art keywords
synchronization
cpu
cpus
memory area
shared memory
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
JP2013504460A
Other languages
English (en)
Other versions
JPWO2012124078A1 (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
Publication of JPWO2012124078A1 publication Critical patent/JPWO2012124078A1/ja
Application granted granted Critical
Publication of JP5780292B2 publication Critical patent/JP5780292B2/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
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/78Architectures of general purpose stored program computers comprising a single central processing unit
    • G06F15/7839Architectures of general purpose stored program computers comprising a single central processing unit with memory
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • G06F9/30087Synchronisation or serialisation instructions
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • 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/544Buffers; Shared memory; Pipes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • G06F15/163Interprocessor communication
    • G06F15/167Interprocessor communication using a common memory, e.g. mailbox
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/50Control mechanisms for virtual memory, cache or TLB
    • G06F2212/507Control mechanisms for virtual memory, cache or TLB using speculative control
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/45Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
    • G06F8/458Synchronisation, e.g. post-wait, barriers, locks
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3824Operand accessing
    • G06F9/3834Maintaining memory consistency
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3838Dependency mechanisms, e.g. register scoreboarding
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • 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/466Transaction processing
    • G06F9/467Transactional memory

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Multi Processors (AREA)
  • Hardware Redundancy (AREA)

Description

本発明は、同期処理を行う同期方法、マルチコアプロセッサシステム、および同期システムに関する。
従来から、1つのCPU(Central Processing Unit)に対して、複数のプログラムを動作させるマルチプログラミング技術が存在する。具体的に、OS(Operating System)は、CPUの処理時間を分割する機能を有し、分割された時間にプロセスやスレッドを割り当てることにより、CPUが同時に複数のプロセスやスレッドを動作する。ここで、プロセスやスレッドはプログラムの実行単位である。ソフトウェアは、プロセスやスレッドの集まりとなる。また一般的に、プロセス間ではメモリ空間が独立しており、スレッド間ではメモリ空間を共有する。
また、近年、CPUが1つ搭載されたコンピュータであるシングルコアプロセッサシステムに代わって、CPUが複数搭載されたコンピュータであるマルチコアプロセッサシステムをとる装置が増えている。複数のCPUに複数のスレッドを並列に割り当てることで、高速に処理を実行することができる。
このように複数のスレッドが並列に実行される場合、スレッド間の同期をとるために、同期処理が頻繁に実行される。同期処理としては、排他制御処理とバリア同期処理が存在する。
排他制御処理は、一方のスレッドがリソース等の使用権を獲得すると、一方のスレッドがリソースの使用権を解放するまで、他のスレッドを待機させる処理である。たとえば、複数のスレッド間が共有のデータにアクセスする際には、排他制御処理がプログラム内に追加される。バリア同期処理は、複数のスレッドの処理を特定のコード位置までで一旦停止させ、全てのスレッドが特定のコード位置に到達した際に、次の処理を継続する処理である。たとえば、複数のスレッドを特定の位置から同時に実行させたい場合、バリア同期処理がプログラム内に追加される。
OSは、同期処理を行う同期命令をライブラリ等でアプリケーションソフトウェア(以下、アプリと称す。)に提供する。たとえば、排他制御処理を行う同期命令として、Mutex、バリア同期処理を行う同期命令としてバリア同期命令などが存在する。
なお、同期処理の開始を宣言するCPUは、同期命令によって同期信号を同期処理の受信側となるCPUに通知する。同期信号を受信したCPUは、同期処理が完了した状態を意味する信号を同期信号の通知元CPUに送信する。以下、同期処理が完了した状態を意味する信号をレディ信号と呼称する。
同期処理に関する技術として、たとえば、スレッド間で同期処理を行う際に、同期ポイントに到達したCPU数を数える同期計数部を有し、全てのCPUが同期ポイントに到達したか否かを判断する技術が開示されている。なお、同期ポイントとは、実行コード内での同期命令が挿入された位置である。複数のCPUのレジスタの同期処理として、たとえば、スレッドのコピーを行った後、親スレッドの汎用レジスタが書き込まれるごとに、更新後の汎用レジスタの値を親スレッドから子スレッドのCPUに送信して、投機実行する技術が開示されている(たとえば、下記特許文献1、2を参照。)。
特開平7−200486号公報 特開2003−29986号公報
しかしながら、上述した従来技術において、同期処理の完了確認を速く行うことが可能ではあるが、設計者によって設定された冗長な同期処理が存在する場合、無駄な待ち合わせ時間が発生してしまい、性能劣化が発生するという問題があった。
本発明は、上述した従来技術による問題点を解消するため、冗長な同期処理によって発生する性能劣化を回避できる同期方法、マルチコアプロセッサシステム、および同期システムを提供することを目的とする。
上述した課題を解決し、目的を達成するため、本発明の一側面によれば、第1CPUによって発行された同期命令に基づいて、同期する複数のCPUと複数のCPU数とを特定のテーブルに登録し、複数のCPUのそれぞれが第1CPUからの同期信号に基づいて、同期ポイントへの到達数をカウントするとともに複数のCPUが実行する処理によってアクセスされる第1共有メモリ領域の複製である第2共有メモリ領域を作成し、同期ポイントへの到達数が複数のCPU数に到達したときに、第1共有メモリ領域と第2共有メモリ領域とを比較し、比較結果に基づいて複数のCPUが実行した処理を判定する同期方法、マルチコアプロセッサシステム、および同期システムが提案される。
本発明の一側面によれば、冗長な同期処理によって発生する性能劣化を回避できるという効果を奏する。
図1は、マルチコアプロセッサシステム100の動作例を示す説明図である。 図2は、実施の形態1にかかるマルチコアプロセッサシステム100のハードウェア例を示すブロック図である。 図3は、マルチコアプロセッサシステム100の機能例を示すブロック図である。 図4は、プロセステーブル301の記憶内容の一例を示す説明図である。 図5は、同期情報テーブル302の記憶内容の一例を示す説明図である。 図6は、マルチコアプロセッサシステム100の同期処理の動作例を示す説明図である。 図7は、図6におけるマルチコアプロセッサシステム100の時刻t1における状態を示す説明図である。 図8は、図6におけるマルチコアプロセッサシステム100の時刻t2における状態を示す説明図である。 図9は、図6におけるマルチコアプロセッサシステム100の時刻t3における状態を示す説明図である。 図10は、図6におけるマルチコアプロセッサシステム100の時刻t5における状態を示す説明図である。 図11は、図6におけるマルチコアプロセッサシステム100の時刻t6における状態を示す説明図である。 図12は、動画再生アプリへの適用例を示す説明図である。 図13は、同期処理時における同期マスタCPUでの処理手順の一例を示すフローチャートである。 図14は、同期処理時における被同期対象CPUでの処理手順の一例を示すフローチャート(その1)である。 図15は、同期処理時における被同期対象CPUでの処理手順の一例を示すフローチャート(その2)である。
以下に添付図面を参照して、開示の同期方法、マルチコアプロセッサシステム、および同期システムの実施の形態を詳細に説明する。
図1は、マルチコアプロセッサシステム100の動作例を示す説明図である。マルチコアプロセッサシステム100は、CPU#0、CPU#1、CPU#2とメモリ101を含む。以下、接尾記号"#n"が付随された記号は、n番目のCPUに対応する記号であることを示している。CPU#0〜CPU#2とメモリ101はバス102で接続されている。CPU#0〜CPU#2は、マルチコアプロセッサシステム100を制御する。メモリ101は、CPU#0〜CPU#2からアクセス可能な記憶領域である。また、メモリ101内には共有メモリ領域103が含まれる。共有メモリ領域103は、CPU#0〜CPU#2から共有してアクセスされる領域である。
また、CPU#0〜CPU#2は、並列処理を行うスレッド0〜スレッド2を実行している。図1では時刻t1にて、スレッド0の実行コードによってCPU#0が、共有メモリ領域103にアクセスするため、同期命令を実行する場合を想定する。なお、実行コード内での同期命令の位置を同期ポイントと定義する。また、同期命令を実行可能な位置に到達した場合を、同期ポイントに到達したと呼称する。
また、スレッド0のように、同期処理の開始を宣言し、他のスレッドの同期状態を監視するスレッドを同期マスタスレッドと呼称し、同期マスタスレッドを実行しているCPUを同期マスタCPUと呼称する。同様に、同期処理を行う他のスレッドを被同期対象スレッドと呼称し、被同期対象スレッドを実行しているCPUを被同期対象CPUと呼称する。スレッド1、スレッド2は、被同期対象スレッドとなる。また、同期処理を行うCPUを、同期対象CPUと呼称する。同期対象CPUは、同期マスタCPUと、被同期対象CPUとなる。図1の例では、同期対象CPUは、CPU#0〜CPU#2となり、同期マスタCPUがCPU#0、被同期対象CPUがCPU#1、CPU#2となる。
また、同期マスタCPUは、同期命令を実行すると被同期対象CPUに対して同期信号を通知する。したがって、CPU#0は、時刻t1にて同期信号をCPU#1、CPU#2に通知する。
しかしながら、時刻t1の時点にて、CPU#1、CPU#2は、クリティカルセクション中であり、同期信号を受信できない状態である。クリティカルセクションとは、他の処理が割り込むことを禁止している部分である。時刻t2にて、CPU#2がクリティカルセクションを終了すると、CPU#2は同期信号を受信する。
同期信号を受信したCPU#2は、共有メモリ領域103の複製である、複製先共有メモリ領域104を作成する。CPU#2は、複製先共有メモリ領域104にアクセスして、スレッド2の後続処理を投機実行する。また、CPU#2は、同期ポイントに到達したことを通知するため、CPU#0、CPU#1にレディ信号を通知する。
続けて時刻t3にて、CPU#1がクリティカルセクションを終了すると、CPU#1は同期信号を受信する。同期信号を受信したCPU#1は、レディ信号をCPU#0、CPU#2に送信する。レディ信号を受信したCPU#2は、全ての被同期CPUが同期ポイントに到達していることを判定すると、共有メモリ領域103のデータと複製先共有メモリ領域104のデータを比較する。比較結果が一致を示す場合、同期コードの挿入が冗長であったとして、CPU#2は、投機実行を継続する。なお、全ての被同期CPUが同期ポイントに到達していたかの判定方法は、図7〜図11にて説明を行う。
このように、マルチコアプロセッサシステム100は、N個のCPUが同期処理する場合、同期ポイントへの到達数M<Nならデータを複製して投機実行し、M=Nなら複製元と複製先のデータが同一時に投機実行を継続する。これにより、マルチコアプロセッサシステム100は、冗長な同期処理による性能劣化を回避できる。
(マルチコアプロセッサシステム100のハードウェア)
図2は、実施の形態1にかかるマルチコアプロセッサシステム100のハードウェア例を示すブロック図である。図2において、マルチコアプロセッサシステム100は、CPUを複数搭載するCPUs201と、ROM(Read−Only Memory)202と、RAM(Random Access Memory)203と、を含む。
また、マルチコアプロセッサシステム100は、フラッシュROM204と、フラッシュROMコントローラ205と、フラッシュROM206と、を含む。また、マルチコアプロセッサシステム100は、ユーザやその他の機器との入出力装置として、ディスプレイ207と、I/F(Interface)208と、キーボード209と、を含む。また、各部はバス102によってそれぞれ接続されている。なお、図1に示したメモリ101は、RAM203であってもよいし、RAM203の一部であってもよい。また、メモリ101は、RAM203以外の記憶領域となるROM202、フラッシュROM204、フラッシュROM206を含んでいてもよい。
ここで、CPUs201は、マルチコアプロセッサシステム100の全体の制御を司る。CPUs201は、シングルコアのプロセッサを並列して接続した全てのCPUを指している。CPUs201は、CPU#0〜CPU#nを含む。nは、2以上の整数である。CPU#0〜CPU#nは、それぞれ専用のキャッシュメモリを有してもよい。また、マルチコアプロセッサシステムとは、コアが複数搭載されたプロセッサを含むコンピュータのシステムである。コアが複数搭載されていれば、複数のコアが搭載された単一のプロセッサでもよく、シングルコアのプロセッサが並列されているプロセッサ群でもよい。なお、本実施の形態では、シングルコアのプロセッサであるCPUが並列されている形態を例にあげて説明する。
ROM202は、ブートプログラムなどのプログラムを記憶している。RAM203は、CPUs201のワークエリアとして使用される。フラッシュROM204は、読出し速度が高速なフラッシュROMであり、たとえば、NOR型フラッシュメモリである。フラッシュROM204は、OSなどのシステムソフトウェアやアプリケーションソフトウェアなどを記憶している。たとえば、OSを更新する場合、マルチコアプロセッサシステム100は、I/F208によって新しいOSを受信し、フラッシュROM204に格納されている古いOSを、受信した新しいOSに更新する。
フラッシュROMコントローラ205は、CPUs201の制御にしたがってフラッシュROM206に対するデータのリード/ライトを制御する。フラッシュROM206は、データの保存、運搬を主に目的としたフラッシュROMであり、たとえば、NAND型フラッシュメモリである。フラッシュROM206は、フラッシュROMコントローラ205の制御で書き込まれたデータを記憶する。データの具体例としては、マルチコアプロセッサシステム100を使用するユーザがI/F208を通して取得した画像データ、映像データなどや、また本実施の形態にかかる同期方法を実行するプログラムなどを記憶してもよい。フラッシュROM206は、たとえば、メモリカード、SDカードなどを採用することができる。
ディスプレイ207は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。ディスプレイ207は、たとえば、TFT液晶ディスプレイなどを採用することができる。
I/F208は、通信回線を通じてLAN(Local Area Network)、WAN(Wide Area Network)、インターネットなどのネットワーク210に接続され、ネットワーク210を介して他の装置に接続される。そして、I/F208は、ネットワーク210と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。I/F208には、たとえばモデムやLANアダプタなどを採用することができる。
キーボード209は、数字、各種指示などの入力のためのキーを有し、データの入力を行う。また、キーボード209は、タッチパネル式の入力パッドやテンキーなどであってもよい。
(マルチコアプロセッサシステム100の機能)
次に、マルチコアプロセッサシステム100の機能について説明する。図3は、マルチコアプロセッサシステム100の機能例を示すブロック図である。なお、マルチコアプロセッサシステム100は、各機能からアクセスされるテーブルとして、プロセステーブル301、同期情報テーブル302にアクセス可能である。また、CPU#0〜CPU#2は、専有のメモリ領域として、それぞれ、専有メモリ領域303#0〜専有メモリ領域303#2にアクセス可能である。
マルチコアプロセッサシステム100は、同期処理部310と同期信号受信部311、同期信号受信部312を含む。同期処理部310は、同期マスタCPUに含まれる機能であり、同期信号受信部311、同期信号受信部312は、被同期対象CPUに含まれる機能である。なお、同期処理部310〜同期信号受信部312は、CPU#0〜CPU#2のカーネル空間にて動作する。また、同期処理部310は、登録部321、送信部322、受信部323、通知部324を含む。さらに、同期信号受信部311は、受信部331、カウント部332、比較部333、作成部334、設定部335、切替部336、送信部337、通知部338を含む。続けて、同期信号受信部312は、受信部341、比較部342、切替部343、比較部344、通知部345を含む。
この制御部となる機能(登録部321〜通知部345)は、記憶装置に記憶されたプログラムをCPU#0〜CPU#nが実行することにより、その機能を実現する。記憶装置とは、具体的には、たとえば、図2に示したROM202、RAM203、フラッシュROM204、フラッシュROM206などである。または、I/F208を経由して他のCPUが実行することにより、その機能を実現してもよい。
また、図3に示すマルチコアプロセッサシステム100は、CPU#0がユーザ空間にてスレッド0を実行し、CPU#1がユーザ空間にてスレッド1を実行し、CPU#2がユーザ空間にてスレッド2を実行する場合を想定している。さらに図3では、スレッド0が同期マスタスレッドとなった場合を想定し、CPU#0が同期マスタCPU、CPU#1とCPU#2が被同期対象CPUとなった場合を想定している。たとえば、スレッド1が同期マスタスレッドとなった場合、CPU#1に同期処理部310の機能が含まれる。
また、同期信号受信部311#1と同期信号受信部312#1は被同期対象CPUとなるCPU#1の機能であり、同期信号受信部311#2と同期信号受信部312#2は被同期対象CPUとなるCPU#2の機能である。なお、図3では省略されているが、同期信号受信部311#2は、受信部331〜通知部338と同等の機能を含み、同期信号受信部312#2は、受信部341〜通知部345と同等の機能を含む。
プロセステーブル301は、スレッドとCPUs201が関連付けられたテーブルである。なお、プロセステーブル301は、OS等によってスレッドが生成、終了するたびに更新される。プロセステーブル301の詳細は、図4にて後述する。同期情報テーブル302は、同期処理を行うCPU数と、CPU番号が格納されている。同期情報テーブル302の詳細は、図5にて後述する。
専有メモリ領域303は、各CPUが専有してアクセスするメモリ領域である。たとえば、CPU#0は、スレッド0にてアクセスされるデータを専有メモリ領域303#0に格納する。また、CPU#0は、スレッド0とスレッド1から共有してアクセスされるデータを共有メモリ領域103に格納する。
また、マルチコアプロセッサシステム100は、到達数Mを記憶する記憶領域にアクセス可能である。到達数Mは、同期対象CPUのうち、同期ポイントに到達したCPU数と定義してもよいし、または、被同期対象CPUのうち、同期ポイントに到達したCPU数と定義してもよい。前者の定義であれば、マルチコアプロセッサシステム100は到達数Mを、同期マスタCPUを含めてカウントし、後者の定義であれば、マルチコアプロセッサシステム100は到達数Mを、同期マスタCPUを含めずにカウントする。本実施の形態では、到達数Mの定義を、後者の定義を用いて説明を行う。
同期処理部310は、同期処理の送信側である同期マスタCPUに含まれる機能である。同期信号受信部311、同期信号受信部312は、同期処理の受信側である被同期対象CPUに含まれる機能である。同期信号受信部311は、被同期対象スレッドが同期ポイントに到達した際に動作する。同期信号受信部312は、被同期対象CPUからのレディ信号を受信した際に動作する。
登録部321は、第1CPUによって発行された同期命令に基づいて、同期する複数のCPUと複数のCPU数とを同期情報テーブル302に登録する機能を有する。たとえば、登録部321は、同期対象CPUとなるCPU#0、CPU#1、CPU#2と、CPU数3を同期情報テーブル302に登録する。また、登録部321は、被同期対象CPU数を同期情報テーブル302に登録してもよい。図3の場合、登録部321は、被同期対象CPU数2を同期情報テーブル302に登録する。なお、本実施の形態では、到達数Mの定義を、同期マスタCPUを含めずにカウントすることを想定しているため、被同期対象CPU数を同期情報テーブル302に登録する例で説明を行う。
また、登録部321は、処理とCPUとの関連を示すプロセステーブル301に基づいて同期情報テーブル302に登録してもよい。なお、登録されたという情報は、CPU#0のレジスタ、キャッシュメモリ、RAM203などに記憶されてもよい。
送信部322は、複数のCPUのうち第1CPUを除く他のCPUに同期信号と同期ポイントへの到達数を送信する。たとえば、送信部322は、CPU#1とCPU#2に同期信号と到達数M=0が格納されたRAM203上のポイントを送信する。なお、送信したという情報は、CPU#0のレジスタ、キャッシュメモリ、RAM203などに記憶されてもよい。
受信部323は、複数のCPUのうち第1CPUを除く他のCPUから同期信号の応答となる信号を受信する。たとえば、受信部323は、CPU#1とCPU#2から、同期信号の応答となるレディ信号を受信する。また、レディ信号は、同期信号と同一の情報であってもよい。なお、受信結果は、CPU#0のレジスタ、キャッシュメモリ、RAM203などに記憶されてもよい。
通知部324は、複数のCPUのうち第1CPUを除く他のCPUの全てから同期信号の応答となる信号を受信した場合、第1CPUで実行するスレッドに同期処理の完了を通知する機能を有する。たとえば、通知部324は、CPU#1とCPU#2とからレディ信号を受信した場合、同期処理の完了をスレッド0に通知する。なお、通知したという情報は、CPU#0のレジスタ、キャッシュメモリ、RAM203などに記憶されてもよい。
受信部331は、同期命令に基づく同期信号を受信する機能を有する。たとえば、受信部331は、送信部322によって送信された同期信号を受信する。なお、受信結果は、CPU#1のレジスタ、キャッシュメモリ、RAM203などに記憶されてもよい。
カウント部332は、同期信号に基づいて同期ポイントへの到達数をカウントする機能を有する。たとえば、カウント部332は、同期ポイントへの到達数Mをカウントする。なお、カウントを行ったという情報は、CPU#1のレジスタ、キャッシュメモリ、RAM203などに記憶されてもよい。
比較部333は、カウント部332によって到達数がカウントされた場合、同期ポイントへの到達数と所定値を比較する機能を有する。ここで、所定値Nは、同期命令に基づいて同期されるCPU数であり、たとえば、CPU#0〜CPU#2から、N=3としてもよい。また、所定値Nは、被同期対象CPU数としてもよい。この場合、所定値Nは、N=2となる。たとえば、比較部333は、到達数Mと所定値Nを比較する。なお、比較結果は、CPU#1のレジスタ、キャッシュメモリ、RAM203などに記憶される。
作成部334は、比較部333による比較結果が一致しない場合、同期ポイントへの到達数に基づいて第1共有メモリ領域を複製して第2共有メモリ領域を作成する機能を有する。なお、第1共有メモリ領域には、複数のCPUのうち各CPUが実行するスレッド群から共有してアクセスされるデータが格納されている。たとえば、作成部334は、共有メモリ領域103を複製して複製先共有メモリ領域104#1_1を作成する。
さらに、作成部334は、第1共有メモリ領域の複製である第3共有メモリ領域を作成してもよい。たとえば、作成部334は、共有メモリ領域103を複製して、複製先共有メモリ領域104#1_2を作成する。なお、複製先共有メモリ領域104を作成したという情報は、CPU#1のレジスタ、キャッシュメモリ、RAM203などに記憶されてもよい。
設定部335は、比較部333による比較結果が一致しない場合、同期ポイントに到達したCPUが実行するスレッドのアクセス先を第1共有メモリ領域のデータから作成部334によって作成された第2共有メモリ領域のデータに設定する機能を有する。たとえば、設定部335は、スレッド1のアクセス先を共有メモリ領域103に格納されたデータから複製先共有メモリ領域104#1_1に格納されたデータに設定する。なお、設定されたという情報は、CPU#1のレジスタ、キャッシュメモリ、RAM203などに記憶されてもよい。
切替部336は、比較部333による比較結果が一致しない場合、同期信号受信部311の実行と同期信号受信部312の実行とを切り替える機能を有する。具体的には、切替部336は、比較部333による比較結果が一致しない場合、同期信号に対する同期信号受信部311の呼び出しを被活性化し、レディ信号に対する同期信号受信部312の呼び出しを活性化する。なお、切替を行ったという情報は、CPU#1のレジスタ、キャッシュメモリ、RAM203などに記憶されてもよい。
送信部337は、同期信号に対応するレディ信号と同期ポイントへの到達数とを複数のCPUに送信する機能を有する。たとえば、送信部337は、レディ信号と到達数Mを、CPU#0、CPU#2に送信する。なお、送信を行ったという情報は、CPU#1のレジスタ、キャッシュメモリ、RAM203などに記憶されてもよい。
通知部338は、比較部333による比較結果が一致しない場合、同期信号受信後の処理を投機実行させる指示を、処理を実行するスレッドに通知する機能を有する。または、通知部338は、比較部333による比較結果が一致する場合、同期信号受信後の処理を実行させる指示を、処理を実行するスレッドに通知する機能を有する。たとえば、通知部338は、比較部333による比較結果が一致しない場合、スレッド1に投機実行させる指示を通知する。また、通知部338は、比較部333による比較結果が一致する場合、スレッドを実行させる指示を通知する。なお、通知を行ったという結果は、CPU#1のレジスタ、キャッシュメモリ、RAM203などに記憶されてもよい。
受信部341は、送信部337によって送信されたレディ信号と同期ポイントへの到達数とを受信する機能を有する。たとえば、受信部341は、CPU#2から送信されたレディ信号と到達数Mを受信する。なお、受信結果は、CPU#1のレジスタ、キャッシュメモリ、RAM203などに記憶されてもよい。
比較部342は、受信部341によってレディ信号と同期ポイントへの到達数とが受信された場合、同期ポイントへの到達数と所定値とを比較する機能を有する。たとえば、比較部342は、到達数Mと所定値Nを比較する。なお、比較結果は、CPU#1のレジスタ、キャッシュメモリ、RAM203などに記憶される。
切替部343は、比較部342による比較結果が一致を示す場合、同期信号受信部311の実行と同期信号受信部312の実行とを切り替える機能を有する。具体的には、切替部343は、比較部342による比較結果が一致する場合、同期信号に対する同期信号受信部311の呼び出しを活性化し、レディ信号に対する同期信号受信部312の呼び出しを非活性化する。なお、切替を行ったという情報は、CPU#1のレジスタ、キャッシュメモリ、RAM203などに記憶されてもよい。
比較部344は、比較部342による比較結果が一致を示す場合、第1共有メモリ領域のデータと第2共有メモリ領域のデータとを比較する機能を有する。たとえば、比較部344は、共有メモリ領域103に格納されているデータと複製先共有メモリ領域104#1_1に格納されているデータとを比較する。また、比較部344は、第2共有メモリ領域のデータと第3共有メモリ領域のデータとを比較してもよい。たとえば、比較部344は、複製先共有メモリ領域104#1_1に格納されているデータと複製先共有メモリ領域104#1_2に格納されているデータを比較する。なお、比較結果は、CPU#1のレジスタ、キャッシュメモリ、RAM203などに記憶される。
通知部345は、比較部344の比較結果に基づいて、同期信号受信後の処理を継続または中断する指示を通知する機能を有する。具体的には、一致を示す比較結果を有する場合、通知部345は比較後に処理を継続する指示をスレッド1に通知する。また、不一致を示す比較結果を有する場合、通知部345は同期信号受信後に実行した処理を中断する指示をスレッド1に通知する。なお、通知を行ったという情報は、CPU#1のレジスタ、キャッシュメモリ、RAM203などに記憶される。
このように、マルチコアプロセッサシステム100は、複数のコアのうち特定のコアによって発行された同期信号を複数のコアのうち特定のコア以外の他のコアによって受信する。続けて、マルチコアプロセッサシステム100は、同期ポイントへ到達し同期信号の受信が完了した場合、同期信号に対応するレディ信号と同期ポイントへ到達したコア数とを複数のコアに送信する。送信されたレディ信号と同期ポイントへ到達したコア数が他のコアによって受信された場合、マルチコアプロセッサシステム100は、他のコアの数と同期ポイントへ到達したコア数とを同期ポイントへ到達したコアの各々によって比較する。
コア数の比較となる第1の比較結果が一致しない場合、マルチコアプロセッサシステム100は、複数のコアのうち各コアが実行するスレッド群から共有してアクセスされる複製元のデータを同期ポイントへ到達したコアごとに複製する。また、第1の比較結果が一致しない場合、マルチコアプロセッサシステム100は、同期ポイントへ到達したコアが実行するスレッドのアクセス先をデータから複製された複製先のデータに設定する。また、第1の比較結果が一致する場合、マルチコアプロセッサシステム100は、複製元のデータと複製先のデータとを同期ポイントへ到達したコアによって比較する。
第1の比較結果が一致しない場合、マルチコアプロセッサシステム100は、スレッドを投機実行させる指示を同期ポイントへ到達したコアからスレッドに通知する。また、データの比較となる第2の比較結果が一致する場合、マルチコアプロセッサシステム100は、スレッドの投機実行を継続させる指示を同期ポイントへ到達したコアからスレッドに通知する。また、第2の比較結果が一致しない場合、マルチコアプロセッサシステム100は、スレッドを再実行させる指示を同期ポイントへ到達したコアからスレッドに通知する。
図4は、プロセステーブル301の記憶内容の一例を示す説明図である。プロセステーブル301は、PID、PPID、PGID、CPU番号という4つのフィールドを含む。PIDフィールドには、PID(Process ID)という、プロセスまたはスレッドを一意に特定可能な識別子が格納される。以下、説明の記載をスレッドに統一して行う。また、以下のプロセステーブル301の説明では、PIDフィールドに格納されたスレッドを対象スレッドとする。
PPIDフィールドには、PPID(Parent PID)という、対象スレッドの親スレッドのPIDが格納される。PGIDフィールドには、PGID(Process Group ID)という、対象スレッドが含まれるスレッドグループ番号が格納される。また、本実施の形態では、PIDとPGIDが同一であるとき、スレッドグループ内の親スレッドであると想定する。CPU番号フィールドには、対象スレッドが割り当てられたCPU番号が格納される。
たとえば、PID=1001のスレッドは、PGID=1001のグループに属しており、CPU#1に割り当てられている。以下、PID=xのスレッドをスレッドxとして呼称する。スレッド1001は、PID=PGID=1001となるため、PGID=1001のスレッドグループでの親スレッドとなる。なお、スレッド1001は、PPID=1に設定されている。スレッド1は、たとえば、マルチコアプロセッサシステム100で動作中のOSがUNIX(登録商標)であれば、initプロセスとなる。
スレッド1002は、PGID=1001のスレッドグループに属しており、CPU#4に割り当てられている。また、スレッド1002は、PPID=1001であるため、スレッド1001の子スレッドである。同様に、スレッド1003、スレッド1004、スレッド1005は、PGID=1001のスレッドグループに属しており、スレッド1001の子スレッドである。また、スレッド1003は、CPU#5に割り当てられ、スレッド1004は、CPU#6に割り当てられ、スレッド1005は、CPU#8に割り当てられている。
また、スレッド1006は、PID=PGID=1006となるため、PGID=1006のスレッドグループでの親スレッドとなる。さらに、スレッド1006は、CPU#0に割り当てられる。スレッド1007は、PGID=1006のスレッドグループに属しており、CPU#2に割り当てられている。また、スレッド1007は、PPID=1006であるため、スレッド1006の子スレッドである。
図5は、同期情報テーブル302の記憶内容の一例を示す説明図である。テーブルは、被同期対象CPU数、同期対象CPUという2つのフィールドを含む。被同期対象CPU数フィールドには、被同期対象CPUの総数が格納される。同期対象CPUフィールドには、同期対象CPUのCPU番号が格納される。たとえば、図5では、被同期対象数が4となり、同期対象CPUとして、CPU#1、CPU#4、CPU#5、CPU#6、CPU#8であるというレコードが格納されている。
図6は、マルチコアプロセッサシステム100の同期処理の動作例を示す説明図である。図6では、同期マスタCPUとなるCPU#1が同期開始を行い、CPU#4、CPU#5、CPU#6、CPU#8が、被同期対象CPUとして、同期処理を実行する場合の動作例を示す。また、CPU#1は図4で示したスレッド1001を実行し、CPU#4はスレッド1002を実行し、CPU#5はスレッド1003を実行し、CPU#6はスレッド1004を実行し、CPU#8はスレッド1005を実行する。
時刻t1にて、CPU#1が同期ポイントに到達すると、CPU#1は、プロセステーブル301から、同期情報テーブル302のレコードを生成する。具体的には、CPU#1は、CPU#1が実行するスレッド1001と同一のスレッドグループに含まれる、スレッド1001〜スレッド1005を抽出する。抽出後、CPU#1は、同期情報テーブル302の新規レコードの被同期対象CPU数フィールドに、スレッド1002〜スレッド1005を実行するCPU数であるN=4を登録する。また、CPU#1は、新規レコードの同期対象CPUフィールドにスレッド1001〜スレッド1005を実行するCPU番号である#1、#4、#5、#6、#8を登録する。
登録後、CPU#1は、同期情報テーブル302を参照して、同期対象CPUに同期信号を通知する。しかしながら、CPU#4、CPU#5、CPU#6、CPU#8は、クリティカルセクション中であり、同期信号を受信できない状態である。なお、同期信号を通知後、CPU#1は、被同期対象CPUからのレディ信号を監視する。また、CPU#1は、スレッド1001と無関係な他のスレッドを実行していてもよい。
続けて、時刻t2にて、CPU#5がクリティカルセクションを終了し同期ポイントに到達すると、CPU#5は、レディ信号をブロードキャスト送信し、スレッド1003の後続処理を投機実行する。同様に、時刻t3にて、CPU#8がクリティカルセクションを終了し同期ポイントに到達すると、CPU#8は、レディ信号をブロードキャスト送信し、スレッド1005の後続処理を投機実行する。また、時刻t4にて、CPU#4がクリティカルセクションを終了し同期ポイントに到達すると、CPU#4は、レディ信号をブロードキャスト送信し、スレッド1002の後続処理を投機実行する。
最後に、時刻t5にて、CPU#6がクリティカルセクションを終了し同期ポイントに到達すると、CPU#6は、レディ信号をブロードキャスト送信する。全てのCPUが同期ポイントに到達したことを検出したCPU#4、CPU#5、CPU#8は、時刻t6にて投機実行を継続するか中断するかを判断する。以下、マルチコアプロセッサシステム100の時刻t1、時刻t2、時刻t3、時刻t5、時刻t6における状態を、それぞれ図7〜図11にて示す。なお、時刻t4におけるマルチコアプロセッサシステム100の状態は、時刻t3と大きく変わらないため、図示を省略する。
図7は、図6におけるマルチコアプロセッサシステム100の時刻t1における状態を示す説明図である。同期ポイントに到達したCPU#1は、処理(1)として、同期信号を同期対象CPUのうち、自CPUを除いたCPU#4、CPU#5、CPU#6、CPU#8に通知する。また、同期信号の通知に合わせて、CPU#1は、被同期対象CPUのうち、同期ポイントへ到達したCPU数を示す到達数MをM=0として通知し、さらに、同期情報テーブル302を通知する。なお、具体的には、到達数Mと同期情報テーブル302は、CPUs201が共有してアクセス可能なメモリ101に格納されているため、それぞれが格納されているアドレスを通知してもよい。
図8は、図6におけるマルチコアプロセッサシステム100の時刻t2における状態を示す説明図である。時刻t2にて同期ポイントに到達したCPU#5は、処理(2)として、到達数Mの値を、M=N−(N−1)=1としてインクリメントする。さらに、CPU#5は、M=1とレディ信号を、同期対象CPUのうち、自CPUを除いたCPU#1、CPU#4、CPU#6、CPU#8に通知する。また、CPU#5は、M<Nであることから、まだ同期ポイントに未到達である被同期対象CPUが存在することを判定し、スレッド1003の後続処理を投機実行する。なお、投機実行の動作については、図9にて説明を行う。
また、到達数Mへのインクリメントに関して、仮に同じタイミングで発行されてもポインタ変数の先の実体数字を変更できるCPUは、同時期には1つのCPUである。到達数Mへのインクリメントは、実装ロジックがインクリメント命令であるため、全く同じタイミングでアクセスが行われたとしても、確実に1つずつインクリメントが行われることになる。
図9は、図6におけるマルチコアプロセッサシステム100の時刻t3における状態を示す説明図である。時刻t3にて同期ポイントに到達したCPU#8は、処理(3)として、到達数Mの値を、M=M+1=2としてインクリメントする。さらに、CPU#8は、M=2とレディ信号を、同期対象CPUのうち、自CPUを除いたCPU#1、CPU#4、CPU#5、CPU#6に通知する。また、CPU#8は、M<Nであることから、まだ同期ポイントに未到達である被同期対象CPUが存在することを判定し、スレッド1005の後続処理を投機実行する。
なお、時刻t2にて同期ポイントに到達したCPU#5は、スレッド1003の後続処理を投機実行する。具体的に、CPU#5は、共有メモリ領域103を複製した複製先共有メモリ領域104#5_1、複製先共有メモリ領域104#5_2を作成する。作成後、CPU#5は、複製先共有メモリ領域104#5_1をアクセス先としてスレッド1003の後続処理を投機実行する。なお、複製先共有メモリ領域104#5_2はスレッド1003からアクセスされない。したがって、複製先共有メモリ領域104#5_2に格納されているデータは、同期処理完了時までデータが変更されずに保存される。
なお、図示していないが、時刻t4において同期ポイントに到達したCPU#4は、処理(4)として、到達数Mの値を、M=M+1=3としてインクリメントする。さらに、CPU#4は、M=3とレディ信号を、同期対象CPUのうち、自CPUを除いたCPU#1、CPU#5、CPU#6、CPU#8に通知する。また、CPU#4は、M<Nであることから、まだ同期ポイントに未到達である被同期対象CPUが存在することを判定し、スレッド1002の後続処理を投機実行する。
図10は、図6におけるマルチコアプロセッサシステム100の時刻t5における状態を示す説明図である。時刻t5にて同期ポイントに到達したCPU#6は、処理(5)として、到達数Mの値を、M=M+1=4としてインクリメントする。さらに、CPU#6は、M=4とレディ信号を、同期対象CPUのうち、自CPUを除いたCPU#1、CPU#4、CPU#5、CPU#8に通知する。なお、CPU#6は、M=N=4であることから、被同期対象CPUが全て同期ポイントに到達したことを判定し、スレッド1004の後続処理を実行する。
また、時刻t5の時点にて、時刻t2にて同期ポイントに到達したCPU#5はスレッド1003の後続処理を投機実行している。同様に、時刻t3にて同期ポイントに到達したCPU#8はスレッド1005の後続処理を投機実行し、時刻t4にて同期ポイントに到達したCPU#4はスレッド1002の後続処理を投機実行している。CPU#4、CPU#5、CPU#8は、レディ信号を受信すると、投機実行の成否を複製先共有メモリ領域104のデータを比較することで判定する。具体的な判定方法は、図11にて説明する。
図11は、図6におけるマルチコアプロセッサシステム100の時刻t6における状態を示す説明図である。時刻t6にて、レディ信号を受信したCPU#4、CPU#5、CPU#8は、2つの複製先共有メモリ領域104のデータが一致するかを判定する。たとえば、CPU#4は、複製先共有メモリ領域104#4_1と複製先共有メモリ領域104#4_2のデータを比較する。
図11では、複製先共有メモリ領域104#4_1と複製先共有メモリ領域104#4_2が一致しない状態を想定している。比較してデータが一致しない場合、スレッド1002の投機実行は、共有メモリ領域103を変更することを示している。したがって、投機実行が本来不可能であることを意味するため、CPU#4は、投機実行を中断し、後続処理を再実行する。同様に、CPU#8も、複製先共有メモリ領域104#8_1と複製先共有メモリ領域104#8_2が一致しなかったため、スレッド1005の投機実行を中断して投機実行の結果を破棄し、後続処理を再実行する。
また、CPU#5は、複製先共有メモリ領域104#5_1と複製先共有メモリ領域104#5_2のデータを比較する。図11では、複製先共有メモリ領域104#5_1と複製先共有メモリ領域104#5_2が一致する状態を想定している。比較してデータが一致する場合、スレッド1003の投機実行は、CPU#5の専有メモリ領域のリードライト処理で完結しており、共有メモリ領域103を変更せず、冗長な同期処理であったことを示している。したがって、CPU#5は、投機実行を継続する。
なお、共有メモリ領域103のデータは、同期マスタCPUによる同期処理以外の他の処理や、または同期対象CPU以外の他のCPUによって変更される可能性がある。変更される場合としては、同期対象CPUでの他の処理が意図的、または不具合によってデータを変更する場合、または、本来同期対象CPUに含まれるはずの他のCPUがデータを変更してしまう場合等がある。このような動作は、従来例にかかるマルチコアプロセッサシステム100であっても起こりうる。
たとえば、本実施の形態にかかるマルチコアプロセッサシステム100において、複製先共有メモリ領域104#x_1と共有メモリ領域103で投機実行の成否を判定する場合を想定する。なお、xは投機実行したCPU番号であると想定する。このとき、全く同じようにデータが変更されると、投機実行が失敗しているにも関わらず、成功として判断されてしまう。このように、複製先共有メモリ領域104#x_1と共有メモリ領域103を比較すると、不具合が隠されてしまう可能性が存在する。したがって、マルチコアプロセッサシステム100は、投機実行の成否の判定を、共有メモリ領域103のデータを用いずに、複製先共有メモリ領域104で行う。
また、マルチコアプロセッサシステム100は、CPU#xが投機実行を継続する場合に、投機実行のデータアクセス先を、複製先共有メモリ領域104#x_1から共有メモリ領域103に切り替える。このとき、複製先共有メモリ領域104#x_1と共有メモリ領域103とでデータが一致しない場合、マルチコアプロセッサシステム100は、OSの機能によってメモリエラー等を発行してもよい。
なお、同期マスタCPUによって共有メモリ領域103のデータが書き換えられないことを想定してもよい場合、マルチコアプロセッサシステム100は、複製先共有メモリ領域104#x_1のみを作成してもよい。この場合、CPU#xは、共有メモリ領域103と複製先共有メモリ領域104#x_1を比較して、投機実行が成功したか否かの有無を判定する。これにより、作成される複製先共有メモリ領域104を一つにでき、処理を高速化することができる。
図12は、動画再生アプリへの適用例を示す説明図である。図12では、動画再生アプリの処理群のブロック図を示しており、処理群のうち、排他制御処理、バリア同期処理を行う箇所、クリティカルセクションとなる処理を示している。
初めに、動画再生アプリは、ストリームデータ読出スレッド1201、デマルチプレクススレッド1202、ビデオスレッド1203、オーディオスレッド1204、AV出力スレッド1205を含む。
ストリームデータ読出スレッド1201は、ストリームを読み出す機能を有する。具体的に、ストリームデータ読出スレッド1201は、OSの機能であるファイルシステム1211を利用して、ストレージコンテンツストリーム1261から、動画データを読み込み、ストリームバッファ1262に格納する。また、ストリームデータ読出スレッド1201は、ストリーム枯渇監視部1212によって、ストリームバッファ1262が枯渇してきたことを検出する。検出された場合、ストリームデータ読出スレッド1201は、ファイル読出部1213によって、ファイルシステム1211から、新たな動画データをストリームバッファ1262に書き込む。
デマルチプレクススレッド1202は、読み出したストリームをビデオとオーディオデータに分割する機能を有する。具体的に、デマルチプレクススレッド1202は、ストリームバッファ1262から動画データを読み込み、デマルチプレクス部1221により、VES(Video Elementary Stream)データと、AES(Audio Elementary Stream)データに分離する。分離後、デマルチプレクススレッド1202は、VESデータをVESデータ出力部1222によりVESバッファ1263に格納し、AESデータをAESデータ出力部1223によりAESバッファ1264に格納する。
また、デマルチプレクススレッド1202は、VESデータ枯渇監視部1224によって、VESバッファ1263が枯渇してきた場合、デマルチプレクス部1221に分離要求を通知する。同様に、デマルチプレクススレッド1202は、AESデータ枯渇監視部1225によって、AESバッファ1264が枯渇してきた場合、デマルチプレクス部1221に分離要求を通知する。
ビデオスレッド1203は、ビデオ処理を行う機能を有する。具体的に、ビデオスレッド1203は、VES読出部1231によってVESデータを読み出し、ビデオデコード部1232によってVESデータをデコードし、VF(Video Frame)データを生成する。生成後、ビデオスレッド1203は、VFデータ出力部1233によってVFバッファ1265に格納する。また、ビデオスレッド1203は、VFデータ枯渇監視部1234によって、VFバッファ1265が枯渇してきた場合、VES読出部1231に読出要求を通知する。
オーディオスレッド1204は、オーディオ処理を行う機能を有する。具体的に、オーディオスレッド1204は、AES読出部1241によってAESデータを読み出し、オーディオデコード部1242によってAESデータをデコードし、AF(Audio Frame)データを生成する。生成後、オーディオスレッド1204は、AFデータ出力部1243によってAFバッファ1266に格納する。また、オーディオスレッド1204は、AFデータ枯渇監視部1244によって、AFバッファ1266が枯渇してきた場合、AES読出部1241に読出要求を通知する。
AV出力スレッド1205は、デコードされたビデオとオーディオデータを同期し表示する機能を有する。具体的には、AV出力スレッド1205は、AV出力同期部1251によって、ビデオドライバ1252、オーディオドライバ1253を同期させて動画データを出力する。ビデオドライバ1252は、VFバッファ1265からVFデータを読み出し、ディスプレイ207に出力する。オーディオドライバ1253は、AFバッファ1266からAFデータを読み出し、I/F208に接続されたスピーカ等に出力する。
このように、ストリームデータ読出スレッド1201〜AV出力スレッド1205は、独立な処理を行うため、非常に並列処理に適した構造のようにみえる。しかしながら、デマルチプレクススレッド1202〜AV出力スレッド1205は、VESバッファ1263〜AFバッファ1266で連動して動作するため、排他制御処理、バリア同期処理を挿入して設計されやすくなる。
具体的にどのような排他制御処理が挿入されるかというと、たとえば、VESデータ出力部1222とVES読出部1231は、VESバッファ1263に共通してアクセスする。したがって、同時にアクセスするのを避けるため、VESデータ出力部1222とVES読出部1231に排他制御処理が挿入される。同様のケースが、AESデータ出力部1223とAES読出部1241、VFデータ出力部1233とビデオドライバ1252、AFデータ出力部1243とオーディオドライバ1253でも発生する。
また、VESバッファ1263の上書きを回避するため、VESデータ出力部1222の処理が、開発者によってクリティカルセクションに設定される場合もありうる。同様のケースが、AESデータ出力部1223、VFデータ出力部1233、AFデータ出力部1243でも発生する。
また、VESデータ枯渇監視部1224は、枯渇を監視する方法として、たとえば、VESバッファ1263の書き込み位置と読み込み位置を参照する。監視中に書き込み位置と読み込み位置が変更されるのを回避するため、VESデータ枯渇監視部1224の処理が、開発者によってクリティカルセクションに設定される場合もありうる。同様のケースが、AESデータ枯渇監視部1225、VFデータ枯渇監視部1234、AFデータ枯渇監視部1244でも発生する。
また、デマルチプレクス部1221の分離完了前にVESデータ出力部1222が実行開始するのを回避するため、バリア同期処理が挿入される場合もありうる。さらに、VESデータ出力部1222が実行中に、VESデータ枯渇監視部1224が実行開始するのを回避するため、バリア同期処理が挿入される場合もありうる。同様のケースが、デマルチプレクス部1221、AESデータ出力部1223、AESデータ枯渇監視部1225でも発生する。また、AV出力同期部1251は、ビデオドライバ1252とオーディオドライバ1253をたとえば1フレーム単位で同期をとって処理するため、バリア同期処理が挿入される場合がありうる。
このような様々な排他制御処理、バリア同期処理が設定されうる動画再生アプリがシングルコアプロセッサシステム向けに設計される場合には、単純な排他フラグを用い、1つのバッファを切り替えながら読み書きすればよい。また、シングルコアプロセッサシステムでは、排他状態でビデオスレッド1203が動作できなくても、オーディオスレッド1204が動作することで、CPUリソースを漏れなく利用することになる。
しかし、シングルコアプロセッサシステム向けの動画再生アプリをマルチコアプロセッサシステム100が動作した場合、全ての排他制御処理のコードをそのまま実行するため、互いのCPUがロックをかけあってしまい、処理が進行しなくなる。
処理が進行しないことを回避するためには、開発者は、プログラム自体を並列処理に適した形式に変更することになる。具体的に、開発者は、スレッドに含まれる各機能部や動作条件を変更することで、プログラム自体を並列処理に適した形式に変更する。しかし、本実施の形態にかかるマルチコアプロセッサシステム100は、プログラムを変更することなく、マルチコアの並列性を最大限に有効活用することができる。
以下、図4、図5で示したプロセステーブル301、同期情報テーブル302を使用して、マルチコアプロセッサシステム100は、同期処理を実行する。同期処理の処理手順の一例を図13〜図15にて示す。図13では、同期処理時における同期マスタCPUでの処理手順の一例を示し、図14、図15にて、同期処理時における被同期対象CPUでの処理手順の一例を示す。さらに、図14では、被同期対象CPUにて、同期信号受信部311が動作している状態でのフローチャートを示し、図15では、被同期対象CPUにて、同期信号受信部312が動作している状態でのフローチャートを示す。また、図13〜図15のフローチャートの例にて、説明を簡略化するため、同期マスタCPUがCPU#1であると想定し、被同期対象CPUをCPU#4であると想定する。
図13は、同期処理時における同期マスタCPUでの処理手順の一例を示すフローチャートである。初めに、CPU#1は、ユーザ空間にて同期マスタスレッドを実行し、カーネル空間にて同期処理部310を実行している。
CPU#1は、通常処理を実行し(ステップS1301)、通常処理内にある、同期コードとなるシステムコールを発行する(ステップS1302)。システムコールが発行されると、CPU#1は、ユーザモードからカーネルモードに遷移し、カーネル空間で実行されている同期処理部310を実行する。
CPU#1は、同期コードを検出したか否かを判断する(ステップS1305)。なお、同期コードとは、排他制御コードやバリア同期コードである。検出していない場合(ステップS1305:No)、CPU#1は、一定時間経過後に再びステップS1305の処理を実行する。なお、CPU#1は、一定時間経過の間、たとえば、ユーザモードに遷移し、同期マスタスレッドを実行したり、他のユーザスレッドを実行したりする。
検出した場合(ステップS1305:Yes)、CPU#1は、プロセステーブル301から被同期対象CPU数を取得する(ステップS1306)。取得後、CPU#1は、プロセステーブル301から、同期対象CPUを抽出する(ステップS1307)。抽出後、CPU#1は、同期情報テーブル302に、取得した被同期対象CPU数と、抽出した同期対象CPUを登録する(ステップS1308)。登録後、CPU#1は、同期信号と到達数M=0を被同期対象CPUにブロードキャスト送信する(ステップS1309)。
送信後、CPU#1は、全ての被同期対象CPUからレディ信号を受信したか否かを判断する(ステップS1310)。なお、レディ信号を送信する処理は、被同期対象CPUの処理内のステップS1408とステップS1411である。受信していない場合(ステップS1310:No)、CPU#1は、一定時間経過後に再びステップS1310の処理を実行する。受信した場合(ステップS1310:Yes)、CPU#1は、同期処理の完了を同期マスタスレッドに通知し(ステップS1311)、同期処理部310の処理を終了する。
また、ユーザモードに遷移したCPU#1は、同期処理の完了を受け付けたか否かを判断する(ステップS1303)。受け付けていない場合(ステップS1303:No)、CPU#1は、一定時間経過後に再びステップS1310の処理を実行する。受け付けた場合(ステップS1303:Yes)、CPU#1は、後続処理を実行し(ステップS1304)、同期マスタスレッドの処理を終了する。
図14は、同期処理時における被同期対象CPUでの処理手順の一例を示すフローチャート(その1)である。初めに、CPU#4は、ユーザ空間にて被同期対象スレッドを実行し、同期信号を受信した場合、カーネル空間にて同期信号受信部311を実行する。
CPU#4は、通常処理を実行し(ステップS1401)、クリティカルセクション処理を実行する(ステップS1402)。クリティカルセクション処理の終了後、CPU#4は、同期信号を受信したため、ユーザモードからカーネルモードに遷移する。なお、クリティカルセクション処理が存在しない場合、CPU#4は、同期信号を受信してすぐに同期信号受信部311の処理を実行する。なお、同期信号を送信する処理は、同期マスタCPUの処理内のステップS1309である。
CPU#4は、到達数Mをインクリメントし(ステップS1404)、M=Nとなるか否かを判断する(ステップS1405)。M=Nでない場合(ステップS1405:No)、CPU#4は、複製先共有メモリ領域104を2つ作成する(ステップS1406)。作成後、CPU#4は、同期信号受信部311を停止し、同期信号受信部312を起動する(ステップS1407)。
具体的な同期信号受信部311の停止、同期信号受信部312の起動方法としては、たとえば実行される関数を切り替える方法がある。たとえば、CPU#4は、同期信号かレディ信号を受信した場合に実行する関数ポインタを、同期信号受信部311を実行するコードを示すアドレスから、同期信号受信部312を実行するコードを示すアドレスに切り替える。これにより、CPU#4が次に同期信号、またはレディ信号を受信した場合、CPU#4は、同期信号受信部312を実行する。
続けて、CPU#4は、レディ信号と到達数Mを、自CPUを除く同期対象CPUにブロードキャスト送信する(ステップS1408)。送信後、CPU#4は、後続処理のアクセス先を複製先共有メモリ領域104のいずれか一方に設定し(ステップS1409)、後続処理の投機実行を被同期対象スレッドに指示し(ステップS1410)、同期信号受信部311を終了する。
M=Nである場合(ステップS1405:Yes)、CPU#4は、レディ信号と到達数Mを、自CPUを除く同期対象CPUにブロードキャスト送信する(ステップS1411)。送信後、CPU#4は、後続処理の実行を被同期対象スレッドに指示し(ステップS1412)、同期信号受信部311を終了する。また、同期信号受信部311を終了し、ユーザモードに遷移したCPU#4は、ステップS1410、ステップS1412による指示によって後続処理実行し(ステップS1403)、被同期対象スレッドの処理を終了する。
図15は、同期処理時における被同期対象CPUでの処理手順の一例を示すフローチャート(その2)である。図15では、レディ信号を受信したCPU#4がカーネル空間にて同期信号受信部312を実行する場合について説明を行う。なお、ユーザ空間で実行している被同期対象スレッドの処理を示すステップS1501〜ステップS1503は、図14で示したステップS1401〜ステップS1403と等しいため、説明を省略する。なお、レディ信号を送信する処理は、被同期対象CPUの処理内のステップS1408とステップS1411である。
CPU#4は、M=Nであるか否かを判断する(ステップS1504)。M=Nでない場合(ステップS1504:No)、CPU#4は、一定時間経過後に再びステップS150の4処理を実行する。M=Nである場合(ステップS1504:Yes)、CPU#4は、同期信号受信部312を停止し、同期信号受信部311を起動する(ステップS1505)。
続けて、CPU#4は、2つの複製先共有メモリ領域104のデータを比較する(ステップS1506)。CPU#4は、比較結果が一致を示したか否かを判断する(ステップS1507)。一致を示す比較結果である場合(ステップS1507:Yes)、CPU#4は、後続処理のアクセス先を共有メモリ領域103に設定し(ステップS1508)、後続処理の投機実行の継続を被同期対象スレッドに指示する(ステップS1509)。
不一致を示す比較結果である場合(ステップS1507:No)、CPU#4は、後続処理のアクセス先を共有メモリ領域103に設定し(ステップS1510)、被同期対象スレッドの投機実行を中断させる(ステップS1511)。続けて、CPU#4は、後続処理の再実行を被同期対象スレッドに指示し(ステップS1512)、同期信号受信部312の処理を終了する。また、ユーザモードに遷移したCPU#4は、ステップS1509、ステップS1512による指示によって後続処理を実行する(ステップS1503)。
以上説明したように、同期方法、マルチコアプロセッサシステム、および同期システムによれば、N個のCPUが同期処理する場合、同期ポイント到達数M<Nならデータを複製して投機実行し、M=Nなら複製元と複製先のデータが同一時に投機実行を継続する。本来同期処理をとらなくてもよい冗長な同期処理が実行された場合、複製先のデータは変更されない。したがって、複製元と複製先のデータを比較することで、マルチコアプロセッサシステムは、冗長な同期処理だったか否かを判定することができる。
また、マルチコアプロセッサシステムは、複数のCPUの少なくとも一部が、同期信号受信後に処理の実行を継続してもよい。これにより、マルチコアプロセッサシステムは、冗長な同期処理で発生する無駄な待ち時間を有効に活用することができる。
また、マルチコアプロセッサシステムは、冗長な同期処理の存在するソースコードをそのまま動作することができる。同期処理を本当に行わなければならないか否かの判定は、非常に困難である。したがって、従来例のソフトウェアは、フェールセーフの考え方から、冗長な同期処理が追加されており、結果、性能劣化が発生していた。しかし、マルチコアプロセッサシステムは、冗長な同期処理が追加されているソフトウェアをそのまま実行可能とすることで、開発コストを低減することができる。
また、マルチコアプロセッサシステムは、複製元と複製先のデータが一致する場合に、比較後に処理を継続してもよい。一致した場合、冗長な同期処理であったため、マルチコアプロセッサシステムは投機実行した処理を継続することで、待ち時間を有効に活用することができる。
また、マルチコアプロセッサシステムは、複製元と複製先のデータが不一致な場合に、投機実行を中断してもよい。不一致であった場合、冗長な同期処理でなかったため、マルチコアプロセッサシステムは投機実行した処理を中断することで、後続の処理を矛盾なく実行することができる。
また、マルチコアプロセッサシステムは、処理とCPUとの関連を示すテーブルに基づいて同期処理を行うCPU数を決定してもよい。処理とCPUとの関連を示すテーブルは、OSがスレッドを管理するためにあらかじめ用意してあるテーブルである。したがって、マルチコアプロセッサシステムは、本実施の形態にかかる同期方法を適用するために既存のテーブルをそのまま流用できるため、適用にかかるコストを小さくすることができる。
また、マルチコアプロセッサシステムは、複製元のデータから複製先1のデータと複製先2のデータと、のように、二つの複製先を作成し、データ比較の際には、複製先1のデータと複製先2のデータを比較して、冗長な同期処理であったか否かを判定してもよい。複製元のデータは、同期マスタCPUによって変更される可能性があるため、投機実行の処理が共有データを変更するか否かを判定する判定対象として相応しくない。したがって、マルチコアプロセッサシステムは、複製先1のデータと複製先2のデータを比較することで、冗長な同期処理であったか否かをより正確に判定できる。
また、マルチコアプロセッサシステムは、同期マスタCPUから送信される同期信号を受信した後、第1受信部を被活性化し、被同期CPUから送信されるレディ信号を受信する第2受信部を活性化してもよい。これにより、マルチコアプロセッサシステムは、1つ目に受信した信号に対応する処理と2つ目に受信した信号に対応する処理とで異なる処理を行うことができる。したがって、同期信号とレディ信号は同一の信号であってもよい。
なお、本実施の形態で説明した同期方法は、あらかじめ用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本同期方法を実行するプログラムは、ハードディスク、フレキシブルディスク、CD−ROM、MO、DVD等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本同期方法を実行するプログラムは、インターネット等のネットワークを介して配布してもよい。
上述した実施の形態に関し、さらに以下の付記を開示する。
(付記1)第1CPUによって発行された同期命令に基づいて、同期する複数のCPUと前記複数のCPU数とを特定のテーブルに登録し、
前記複数のCPUのそれぞれが前記第1CPUからの同期信号に基づいて、同期ポイントへの到達数をカウントするとともに前記複数のCPUが実行する処理によってアクセスされる第1共有メモリ領域の複製である第2共有メモリ領域を作成し、
前記同期ポイントへの到達数が前記複数のCPU数に到達したときに、前記第1共有メモリ領域と前記第2共有メモリ領域とを比較し、
前記比較結果に基づいて前記複数のCPUが実行した処理を判定すること
を特徴とする同期方法。
(付記2)前記複数のCPUの少なくとも一部は、前記同期信号受信後に処理の実行を継続すること
を特徴とする付記1に記載の同期方法。
(付記3)一致を示す比較結果を有するCPUは比較後に処理を継続すること
を特徴とする付記1または付記2に記載の同期方法。
(付記4)不一致を示す比較結果を有するCPUが前記同期信号受信後に実行した処理を中断すること
を特徴とする付記1乃至付記3の何れか一に記載の同期方法。
(付記5)処理とCPUとの関連を示すテーブルに基づいて前記特定のテーブルに登録すること
を特徴とする付記1乃至付記4の何れか一に記載の同期方法。
(付記6)前記第2共有メモリ領域を作成する処理は、
さらに、前記第1共有メモリ領域の複製である第3共有メモリ領域を作成し、
前記第1共有メモリ領域と前記第2共有メモリ領域とを比較する処理は、
前記第2共有メモリ領域と前記第3共有メモリ領域とを比較すること
を特徴とする付記1乃至付記5の何れか一に記載の同期方法。
(付記7)複数のCPU間で共有する第1共有メモリ領域と、
同期命令に基づく同期信号を受信する第1受信部と、
前記同期信号に基づいて同期ポイントへの到達数をカウントするカウント部と、
前記同期ポイントへの到達数に基づいて前記第1共有メモリ領域を複製して第2共有メモリ領域を作成する作成部と、
前記同期ポイントへの到達数が所定値に到達したときに、前記第1共有メモリ領域と前記第2共有メモリ領域とを比較する第1比較部と、
を含むことを特徴とするマルチコアプロセッサシステム。
(付記8)前記複数のCPUは前記同期命令に基づいて同期されるCPUであり、
前記所定値は前記複数のCPU数であること
を特徴とする付記7に記載のマルチコアプロセッサシステム。
(付記9)前記同期ポイントへの到達数と前記所定値とを比較する第2比較部と、
前記複数のCPU内の少なくとも一のCPUからの信号に基づいて、前記第2比較部を活性化する第2受信部と、
を含むことを特徴とする付記7または付記8に記載のマルチコアプロセッサシステム。
(付記10)前記第1受信部は、前記同期信号の受信後に非活性化されること
を特徴とする付記7乃至付記9の何れか一に記載のマルチコアプロセッサシステム。
(付記11)前記第1比較部の比較結果に基づいて、前記同期信号受信後の処理を継続または中断することを通知する通知部、
を含むことを特徴とする付記9または付記10に記載のマルチコアプロセッサシステム。
(付記12)少なくとも第1CPUと第2CPUとを含む複数のCPUと、
前記複数のCPU間で共有する第1共有メモリ領域と、
と含み、
前記第1CPUは、前記複数のCPU間での同期処理を指示する同期命令に基づく同期信号を前記第2CPUに供給し、
前記第2CPUは、前記同期信号に基づいて、前記第1共有メモリ領域を複製して第2共有メモリ領域を作成するとともに、所定の処理を実行し、
前記複数のCPUが同期するときに、前記第1共有メモリ領域と前記第2共有メモリ領域とを比較し、
前記比較結果に基づいて実行された前記所定の処理の処遇を決定すること
を特徴とする同期システム。
(付記13)比較結果が一致を示すときは、前記所定の処理の続きが実行されること
を特徴とする付記12に記載の同期システム。
(付記14)比較結果が不一致を示すとき、前記所定の処理が再実行されること
を特徴とする付記12または付記13に記載の同期システム。
100 マルチコアプロセッサシステム
101 メモリ
102 バス
103 共有メモリ領域
104 複製先共有メモリ領域
301 プロセステーブル
302 同期情報テーブル
303 専有メモリ領域
310 同期処理部
311、312 同期信号受信部
321 登録部
322、337 送信部
323、331、341 受信部
324、338、345 通知部
332 カウント部
333、342、344 比較部
334 作成部
335 設定部
336、343 切替部

Claims (10)

  1. 第1共有メモリ領域にアクセスして同期処理を実行する複数のCPUのうちの第1CPUが、
    前記同期処理に含まれる同期命令に基づく同期信号を前記複数のCPUのうちの前記第1CPU以外の他のCPUに発行し、
    前記他のCPUの各々が、
    前記第1CPUから前記同期信号を受信したことに応じて、前記同期処理内における前記同期命令の位置を示す同期ポイントへの到達数を1増やし、
    前記同期ポイントへの到達数を1増やした結果、前記他のCPUのうちの自CPU以外のCPUに前記同期ポイントに到達したことを示すレディ信号を送信し、
    前記同期ポイントへの到達数を1増やした結果、前記同期ポイントへの到達数が前記他のCPUの数に到達していない場合、前記第1共有メモリ領域の複製である第2共有メモリ領域を作成して、前記同期処理に後続する後続処理を前記第2共有メモリ領域にアクセスして実行し、
    前記他のCPUのうちの自CPU以外のCPUから前記レディ信号を受信した際に前記同期ポイントへの到達数が前記のCPUの数である場合、前記第1共有メモリ領域と前記第2共有メモリ領域とを比較し、
    前記比較結果に基づいて前記後続処理を継続するか否かを判定すること
    を特徴とする同期方法。
  2. 前記他のCPUの各々が、
    前記比較結果が一致を示す場合、前記後続処理を継続すること
    を特徴とする請求項1に記載の同期方法。
  3. 前記他のCPUの各々が、
    前記比較結果が不一致を示す場合、前記後続処理を中断すること
    を特徴とする請求項1または請求項2に記載の同期方法。
  4. 第1共有メモリ領域にアクセスして同期処理を実行する複数のCPUを含むマルチコアプロセッサシステムであって、
    前記複数のCPUのうちの第1CPUは、
    前記同期処理に含まれる同期命令に基づく同期信号を前記複数のCPUのうちの前記第1CPU以外の他のCPUに発行し、
    前記他のCPUの各々は、
    前記第1CPUから前記同期信号を受信したことに応じて、前記同期処理内における前記同期命令の位置を示す同期ポイントへの到達数を1増やし、
    前記同期ポイントへの到達数を1増やした結果、前記他のCPUのうちの自CPU以外のCPUに前記同期ポイントに到達したことを示すレディ信号を送信し、
    前記同期ポイントへの到達数を1増やした結果、前記同期ポイントへの到達数が所定値に到達していない場合、前記第1共有メモリ領域の複製である第2共有メモリ領域を作成して、前記同期処理に後続する後続処理を前記第2共有メモリ領域にアクセスして実行し、
    前記他のCPUのうちの自CPU以外のCPUから前記レディ信号を受信した際に前記同期ポイントへの到達数が前記所定値である場合、前記第1共有メモリ領域と前記第2共有メモリ領域とを比較し、
    前記比較結果に基づいて前記後続処理を継続するか否かを判定する
    ことを特徴とするマルチコアプロセッサシステム。
  5. 前記所定値は前記他のCPUの数であること
    を特徴とする請求項4に記載のマルチコアプロセッサシステム。
  6. 前記他のCPUの各々は、
    前記比較結果が不一致である場合、前記同期信号を受信する処理を停止すること
    を特徴とする請求項4または請求項5に記載のマルチコアプロセッサシステム。
  7. 前記他のCPUの各々は、
    前記比較結果に基づいて、前記後続処理を継続または中断すること
    を特徴とする請求項6に記載のマルチコアプロセッサシステム。
  8. 第1共有メモリ領域にアクセスして同期処理を実行する少なくとも第1CPUを含む複数のCPUを含む同期システムであって、
    前記第1CPUは、
    前記同期処理に含まれる同期命令に基づく同期信号を前記複数のCPUのうちの前記第1CPU以外の他のCPUに発行し、
    前記他のCPUの各々は、
    前記第1CPUから前記同期信号を受信したことに応じて、前記同期処理内における前記同期命令の位置を示す同期ポイントへの到達数を1増やし、
    前記同期ポイントへの到達数を1増やした結果、前記他のCPUのうちの自CPU以外のCPUに前記同期ポイントに到達したことを示すレディ信号を送信し、
    前記同期ポイントへの到達数を1増やした結果、前記同期ポイントへの到達数が前記他のCPUの数に到達していない場合、前記第1共有メモリ領域の複製である第2共有メモリ領域を作成して、前記同期処理に後続する後続処理を前記第2共有メモリ領域にアクセスして実行し、
    前記他のCPUのうちの自CPU以外のCPUから前記レディ信号を受信した際に前記同期ポイントへの到達数が前記他のCPUの数である場合、前記第1共有メモリ領域と前記第2共有メモリ領域とを比較し、
    前記比較結果に基づいて前記後続処理を継続するか否かを判定すること
    を特徴とする同期システム。
  9. 前記他のCPUの各々は、
    前記比較結果が一致を示す場合、前記後続処理を継続すること
    を特徴とする請求項8に記載の同期システム。
  10. 前記他のCPUの各々は、
    前記比較結果が不一致を示す場合、前記後続処理を再実行すること
    を特徴とする請求項8または請求項9に記載の同期システム。
JP2013504460A 2011-03-16 2011-03-16 同期方法、マルチコアプロセッサシステム、および同期システム Expired - Fee Related JP5780292B2 (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/JP2011/056262 WO2012124078A1 (ja) 2011-03-16 2011-03-16 同期方法、マルチコアプロセッサシステム、および同期システム

Publications (2)

Publication Number Publication Date
JPWO2012124078A1 JPWO2012124078A1 (ja) 2014-07-17
JP5780292B2 true JP5780292B2 (ja) 2015-09-16

Family

ID=46830207

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2013504460A Expired - Fee Related JP5780292B2 (ja) 2011-03-16 2011-03-16 同期方法、マルチコアプロセッサシステム、および同期システム

Country Status (3)

Country Link
US (1) US9558152B2 (ja)
JP (1) JP5780292B2 (ja)
WO (1) WO2012124078A1 (ja)

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5778478B2 (ja) * 2011-05-23 2015-09-16 ルネサスエレクトロニクス株式会社 データ処理システム
JP6018537B2 (ja) * 2013-04-25 2016-11-02 京セラドキュメントソリューションズ株式会社 画像形成装置
US9712491B2 (en) * 2014-03-03 2017-07-18 Qualcomm Connected Experiences, Inc. Access control lists for private networks of system agnostic connected devices
KR102164798B1 (ko) 2014-09-11 2020-10-13 삼성전자 주식회사 디스플레이 구동 회로 및 이를 포함하는 디스플레이 장치
US11237828B2 (en) * 2016-04-26 2022-02-01 Onnivation, LLC Secure matrix space with partitions for concurrent use
US10133496B1 (en) * 2016-06-15 2018-11-20 Amazon Technologies, Inc. Bindable state maintaining components
CN111597039B (zh) * 2020-04-30 2023-09-15 海尔优家智能科技(北京)有限公司 用于内存优化的方法、装置及设备
US20220391264A1 (en) * 2021-06-03 2022-12-08 Nvidia Corporation Techniques for efficiently synchronizing multiple program threads
CN114866499B (zh) * 2022-04-27 2024-02-23 曙光信息产业(北京)有限公司 片上多核系统的同步广播通信方法、装置和存储介质

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH07200486A (ja) * 1993-12-28 1995-08-04 Nec Corp 情報処理装置
JP2000215182A (ja) * 1999-01-20 2000-08-04 Nec Corp クラスタ型並列計算機システムおよびプロセッサ間バリア同期方法
JP2010146550A (ja) * 2008-12-16 2010-07-01 Internatl Business Mach Corp <Ibm> 実行中の命令に基づいてコア機能を構成するマルチコア・プロセッサおよび使用の方法

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2594979B2 (ja) * 1987-10-23 1997-03-26 株式会社日立製作所 マルチプロセツサシステム
JPH11306038A (ja) * 1998-04-16 1999-11-05 Sony Corp 並列演算処理装置およびその方法
US6581089B1 (en) 1998-04-16 2003-06-17 Sony Corporation Parallel processing apparatus and method of the same
JP2000047887A (ja) * 1998-07-30 2000-02-18 Toshiba Corp 投機的マルチスレッド処理方法および投機的マルチスレッド処理装置
JP3702815B2 (ja) 2001-07-12 2005-10-05 日本電気株式会社 プロセッサ間レジスタ継承方法及びその装置
JP4609929B2 (ja) * 2004-11-29 2011-01-12 富士通株式会社 情報処理装置、システム制御装置、システム制御方法
JP4448784B2 (ja) * 2005-03-15 2010-04-14 株式会社日立製作所 並列計算機の同期方法及びプログラム
US20070143755A1 (en) * 2005-12-16 2007-06-21 Intel Corporation Speculative execution past a barrier
US8448162B2 (en) * 2005-12-28 2013-05-21 Foundry Networks, Llc Hitless software upgrades
US9009020B1 (en) * 2007-12-12 2015-04-14 F5 Networks, Inc. Automatic identification of interesting interleavings in a multithreaded program

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH07200486A (ja) * 1993-12-28 1995-08-04 Nec Corp 情報処理装置
JP2000215182A (ja) * 1999-01-20 2000-08-04 Nec Corp クラスタ型並列計算機システムおよびプロセッサ間バリア同期方法
JP2010146550A (ja) * 2008-12-16 2010-07-01 Internatl Business Mach Corp <Ibm> 実行中の命令に基づいてコア機能を構成するマルチコア・プロセッサおよび使用の方法

Also Published As

Publication number Publication date
WO2012124078A1 (ja) 2012-09-20
US20140019717A1 (en) 2014-01-16
US9558152B2 (en) 2017-01-31
JPWO2012124078A1 (ja) 2014-07-17

Similar Documents

Publication Publication Date Title
JP5780292B2 (ja) 同期方法、マルチコアプロセッサシステム、および同期システム
JP5516747B2 (ja) マルチコアプロセッサシステム、監視制御方法、および監視制御プログラム
JP5780243B2 (ja) スケジューリング方法、およびマルチコアプロセッサシステム
KR100436675B1 (ko) 멀티쓰레드 프로세서에서 공유 파이프라인 및 다른파이프라인 스테이지의 선택적인 플러쉬
KR101546033B1 (ko) Smt 기계에서 비교 및 전달 명령어를 사용한 안정적 실행
US9965359B2 (en) Log forwarding to avoid deadlocks during parallel log replay in asynchronous table replication
US8793528B2 (en) Dynamic hypervisor relocation
US7689809B2 (en) Transparent return to parallel mode by rampoline instruction subsequent to interrupt processing to accommodate slave processor not supported by operating system
JP5933000B2 (ja) 中央処理ユニット及び画像処理ユニットの同期機構
KR20090025295A (ko) 가상 트랜잭션 메모리를 위한 글로벌 오버플로우 방법
TW201741874A (zh) 根據儲存資歷實施來自不同執行緒轉送的執行緒不可知之載入儲存緩衝區
CN108475209B (zh) 用于应用程序迁移的系统和方法
US20150277946A1 (en) Dispatching multiple threads in a computer
JP2012198803A (ja) 演算処理装置及び演算処理方法
EP2805516A1 (en) Decode time instruction optimization for load reserve and store conditional sequences
EP1134655A2 (en) Information processing unit, and exception processing method for application-specific instruction
TW200903338A (en) Transactional debugger for a transactional memory system
US20140082624A1 (en) Execution control method and multi-processor system
JP5708450B2 (ja) マルチコアプロセッサシステム、レジスタ利用方法、およびレジスタ利用プログラム
CN101425052B (zh) 一种事务性内存的实现方法
JP2008269114A (ja) マルチスレッドプロセッサ及びそれに用いるスレッド間同期操作方法
KR102472878B1 (ko) 가상 머신 환경에서의 블록 커밋 방법 및 그 방법을 수행하는 가상화 시스템
TW201835758A (zh) 在基於區塊的微架構中在具有不同特權位準的模式之間的推測性轉換
JP6328632B2 (ja) 実行可能コード・データのロック・フリー・ストリーミング
CN117806706B (zh) 存储顺序违例处理方法、装置、电子设备及介质

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20141007

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20141205

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20150331

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20150601

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20150629

R150 Certificate of patent or registration of utility model

Ref document number: 5780292

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees