第1CPUによって発行された同期命令に基づいて、同期する複数のCPUと前記複数のCPU数とを特定のテーブルに登録し、前記複数のCPUのそれぞれが前記第1CPUからの同期信号に基づいて、同期ポイントへの到達数をカウントするとともに前記複数のCPUが実行する処理によってアクセスされる第1共有メモリ領域の複製である第2共有メモリ領域を作成し、前記同期ポイントへの到達数が前記複数のCPU数に到達したときに、前記第1共有メモリ領域と前記第2共有メモリ領域とを比較し、前記比較結果に基づいて前記複数のCPUが実行した処理を判定することを特徴とする同期方法。前記複数のCPUの少なくとも一部は、前記同期信号受信後に処理の実行を継続することを特徴とする請求項1に記載の同期方法。一致を示す比較結果を有するCPUは比較後に処理を継続することを特徴とする請求項1または請求項2に記載の同期方法。不一致を示す比較結果を有するCPUが前記同期信号受信後に実行した処理を中断することを特徴とする請求項1乃至請求項3の何れか一に記載の同期方法。処理とCPUとの関連を示すテーブルに基づいて前記特定のテーブルに登録することを特徴とする請求項1乃至請求項4の何れか一に記載の同期方法。前記第2共有メモリ領域を作成する処理は、さらに、前記第1共有メモリ領域の複製である第3共有メモリ領域を作成し、前記第1共有メモリ領域と前記第2共有メモリ領域とを比較する処理は、前記第2共有メモリ領域と前記第3共有メモリ領域とを比較することを特徴とする請求項1乃至請求項5の何れか一に記載の同期方法。複数のCPU間で共有する第1共有メモリ領域と、前記同期命令に基づく同期信号を受信する第1受信部と、前記同期信号に基づいて同期ポイントへの到達数をカウントするカウント部と、前記同期ポイントへの到達数に基づいて前記第1共有メモリ領域を複製して第2共有メモリ領域を作成する作成部と、前記同期ポイントへの到達数が所定値に到達したときに、前記第1共有メモリ領域と前記第2共有メモリ領域とを比較する第1比較部と、を含むことを特徴とするマルチコアプロセッサシステム。前記複数のCPUは前記同期命令に基づいて同期されるCPUであり、前記所定値は前記複数のCPU数であることを特徴とする請求項7に記載のマルチコアプロセッサシステム。前記同期ポイントへの到達数と前記所定値とを比較する第2比較部と、前記複数のCPU内の少なくとも一のCPUからの信号に基づいて、前記第2比較部を活性化する第2受信部と、を含むことを特徴とする請求項7または請求項8に記載のマルチコアプロセッサシステム。前記第1受信部は、前記同期信号の受信後に非活性化されることを特徴とする請求項7乃至請求項9の何れか一に記載のマルチコアプロセッサシステム。前記第1比較部の比較結果に基づいて、前記同期信号受信後の処理を継続または中断することを通知する通知部、を含むことを特徴とする請求項9または請求項10に記載のマルチコアプロセッサシステム。少なくとも第1CPUと第2CPUとを含む複数のCPUと、前記複数のCPU間で共有する第1共有メモリ領域と、と含み、前記第1CPUは、前記複数のCPU間での同期処理を指示する同期命令に基づく同期信号を前記第2CPUに供給し、前記第2CPUは、前記同期信号に基づいて、前記第1共有メモリ領域を複製して第2共有メモリ領域を作成するとともに、所定の処理を実行し、前記複数のCPUが同期するときに、前記第1共有メモリ領域と前記第2共有メモリ領域とを比較し、前記比較結果に基づいて実行された前記所定の処理の処遇を決定することを特徴とする同期システム。比較結果が一致を示すときは、前記所定の処理の続きが実行されることを特徴とする請求項12に記載の同期システム。比較結果が不一致を示すとき、前記所定の処理が再実行されることを特徴とする請求項12または請求項13に記載の同期システム。しかしながら、上述した従来技術において、同期処理の完了確認を速く行うことが可能ではあるが、設計者によって設定された冗長な同期処理が存在する場合、無駄な待ち合わせ時間が発生してしまい、性能劣化が発生するという問題があった。本発明は、上述した従来技術による問題点を解消するため、冗長な同期処理によって発生する性能劣化を回避できる同期方法、マルチコアプロセッサシステム、および同期システムを提供することを目的とする。上述した課題を解決し、目的を達成するため、本発明の一側面によれば、第1CPUによって発行された同期命令に基づいて、同期する複数のCPUと複数のCPU数とを特定のテーブルに登録し、複数のCPUのそれぞれが第1CPUからの同期信号に基づいて、同期ポイントへの到達数をカウントするとともに複数のCPUが実行する処理によってアクセスされる第1共有メモリ領域の複製である第2共有メモリ領域を作成し、同期ポイントへの到達数が複数のCPU数に到達したときに、第1共有メモリ領域と第2共有メモリ領域とを比較し、比較結果に基づいて複数のCPUが実行した処理を判定する同期方法、マルチコアプロセッサシステム、および同期システムが提案される。本発明の一側面によれば、冗長な同期処理によって発生する性能劣化を回避できるという効果を奏する。以下に添付図面を参照して、開示の同期方法、マルチコアプロセッサシステム、および同期システムの実施の形態を詳細に説明する。図1は、マルチコアプロセッサシステム100の動作例を示す説明図である。マルチコアプロセッサシステム100は、CPU0、CPU1、CPU2とメモリ101を含む。以下、接尾記号nが付随された記号は、n番目のCPUに対応する記号であることを示している。CPU0~CPU2とメモリ101はバス102で接続されている。CPU0~CPU2は、マルチコアプロセッサシステム100を制御する。メモリ101は、CPU0~CPU2からアクセス可能な記憶領域である。また、メモリ101内には共有メモリ領域103が含まれる。共有メモリ領域103は、CPU0~CPU2から共有してアクセスされる領域である。また、CPU0~CPU2は、並列処理を行うスレッド0~スレッド2を実行している。図1では時刻t1にて、スレッド0の実行コードによってCPU0が、共有メモリ領域103にアクセスするため、同期命令を実行する場合を想定する。なお、実行コード内での同期命令の位置を同期ポイントと定義する。また、同期命令を実行可能な位置に到達した場合を、同期ポイントに到達したと呼称する。また、スレッド0のように、同期処理の開始を宣言し、他のスレッドの同期状態を監視するスレッドを同期マスタスレッドと呼称し、同期マスタスレッドを実行しているCPUを同期マスタCPUと呼称する。同様に、同期処理を行う他のスレッドを被同期対象スレッドと呼称し、被同期対象スレッドを実行しているCPUを被同期対象CPUと呼称する。スレッド1、スレッド2は、被同期対象スレッドとなる。また、同期処理を行うCPUを、同期対象CPUと呼称する。同期対象CPUは、同期マスタCPUと、被同期対象CPUとなる。図1の例では、同期対象CPUは、CPU0~CPU2となり、同期マスタCPUがCPU0、被同期対象CPUがCPU1、CPU2となる。また、同期マスタCPUは、同期命令を実行すると被同期対象CPUに対して同期信号を通知する。したがって、CPU0は、時刻t1にて同期信号をCPU1、CPU2に通知する。しかしながら、時刻t1の時点にて、CPU1、CPU2は、クリティカルセクション中であり、同期信号を受信できない状態である。クリティカルセクションとは、他の処理が割り込むことを禁止している部分である。時刻t2にて、CPU2がクリティカルセクションを終了すると、CPU2は同期信号を受信する。同期信号を受信したCPU2は、共有メモリ領域103の複製である、複製先共有メモリ領域104を作成する。CPU2は、複製先共有メモリ領域104にアクセスして、スレッド2の後続処理を投機実行する。また、CPU2は、同期ポイントに到達したことを通知するため、CPU0、CPU1にレディ信号を通知する。続けて時刻t3にて、CPU1がクリティカルセクションを終了すると、CPU1は同期信号を受信する。同期信号を受信したCPU1は、レディ信号をCPU0、CPU2に送信する。レディ信号を受信したCPU2は、全ての被同期CPUが同期ポイントに到達していることを判定すると、共有メモリ領域103のデータと複製先共有メモリ領域104のデータを比較する。比較結果が一致を示す場合、同期コードの挿入が冗長であったとして、CPU2は、投機実行を継続する。なお、全ての被同期CPUが同期ポイントに到達していたかの判定方法は、図7~図11にて説明を行う。このように、マルチコアプロセッサシステム100は、N個のCPUが同期処理する場合、同期ポイントへの到達数M<Nならデータを複製して投機実行し、M=Nなら複製元と複製先のデータが同一時に投機実行を継続する。これにより、マルチコアプロセッサシステム100は、冗長な同期処理による性能劣化を回避できる。マルチコアプロセッサシステム100のハードウェア図2は、実施の形態1にかかるマルチコアプロセッサシステム100のハードウェア例を示すブロック図である。図2において、マルチコアプロセッサシステム100は、CPUを複数搭載するCPUs201と、ROMRead‐OnlyMemory202と、RAMRandomAccessMemory203と、を含む。また、マルチコアプロセッサシステム100は、フラッシュROM204と、フラッシュROMコントローラ205と、フラッシュROM206と、を含む。また、マルチコアプロセッサシステム100は、ユーザやその他の機器との入出力装置として、ディスプレイ207と、I/FInterface208と、キーボード209と、を含む。また、各部はバス102によってそれぞれ接続されている。なお、図1に示したメモリ101は、RAM203であってもよいし、RAM203の一部であってもよい。また、メモリ101は、RAM203以外の記憶領域となるROM202、フラッシュROM204、フラッシュROM206を含んでいてもよい。ここで、CPUs201は、マルチコアプロセッサシステム100の全体の制御を司る。CPUs201は、シングルコアのプロセッサを並列して接続した全てのCPUを指している。CPUs201は、CPU0~CPUnを含む。nは、2以上の整数である。CPU0~CPUnは、それぞれ専用のキャッシュメモリを有してもよい。また、マルチコアプロセッサシステムとは、コアが複数搭載されたプロセッサを含むコンピュータのシステムである。コアが複数搭載されていれば、複数のコアが搭載された単一のプロセッサでもよく、シングルコアのプロセッサが並列されているプロセッサ群でもよい。なお、本実施の形態では、シングルコアのプロセッサである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は、通信回線を通じてLANLocalAreaNetwork、WANWideAreaNetwork、インターネットなどのネットワーク210に接続され、ネットワーク210を介して他の装置に接続される。そして、I/F208は、ネットワーク210と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。I/F208には、たとえばモデムやLANアダプタなどを採用することができる。キーボード209は、数字、各種指示などの入力のためのキーを有し、データの入力を行う。また、キーボード209は、タッチパネル式の入力パッドやテンキーなどであってもよい。マルチコアプロセッサシステム100の機能次に、マルチコアプロセッサシステム100の機能について説明する。図3は、マルチコアプロセッサシステム100の機能例を示すブロック図である。なお、マルチコアプロセッサシステム100は、各機能からアクセスされるテーブルとして、プロセステーブル301、同期情報テーブル302にアクセス可能である。また、CPU0~CPU2は、専有のメモリ領域として、それぞれ、専有メモリ領域3030~専有メモリ領域3032にアクセス可能である。マルチコアプロセッサシステム100は、同期処理部310と同期信号受信部311、同期信号受信部312を含む。同期処理部310は、同期マスタCPUに含まれる機能であり、同期信号受信部311、同期信号受信部312は、被同期対象CPUに含まれる機能である。なお、同期処理部310~同期信号受信部312は、CPU0~CPU2のカーネル空間にて動作する。また、同期処理部310は、登録部321、送信部322、受信部323、通知部324を含む。さらに、同期信号受信部311は、受信部331、カウント部332、比較部333、作成部334、設定部335、切替部336、送信部337、通知部338を含む。続けて、同期信号受信部312は、受信部341、比較部342、切替部343、比較部344、通知部345を含む。この制御部となる機能登録部321~通知部345は、記憶装置に記憶されたプログラムをCPU0~CPUnが実行することにより、その機能を実現する。記憶装置とは、具体的には、たとえば、図2に示したROM202、RAM203、フラッシュROM204、フラッシュROM206などである。または、I/F208を経由して他のCPUが実行することにより、その機能を実現してもよい。また、図3に示すマルチコアプロセッサシステム100は、CPU0がユーザ空間にてスレッド0を実行し、CPU1がユーザ空間にてスレッド1を実行し、CPU2がユーザ空間にてスレッド2を実行する場合を想定している。さらに図3では、スレッド0が同期マスタスレッドとなった場合を想定し、CPU0が同期マスタCPU、CPU1とCPU2が被同期対象CPUとなった場合を想定している。たとえば、スレッド1が同期マスタスレッドとなった場合、CPU1に同期処理部310の機能が含まれる。また、同期信号受信部3111と同期信号受信部3121は被同期対象CPUとなるCPU1の機能であり、同期信号受信部3112と同期信号受信部3122は被同期対象CPUとなるCPU2の機能である。なお、図3では省略されているが、同期信号受信部3112は、受信部331~通知部338と同等の機能を含み、同期信号受信部3122は、受信部341~通知部345と同等の機能を含む。プロセステーブル301は、スレッドとCPUs201が関連付けられたテーブルである。なお、プロセステーブル301は、OS等によってスレッドが生成、終了するたびに更新される。プロセステーブル301の詳細は、図4にて後述する。同期情報テーブル302は、同期処理を行うCPU数と、CPU番号が格納されている。同期情報テーブル302の詳細は、図5にて後述する。専有メモリ領域303は、各CPUが専有してアクセスするメモリ領域である。たとえば、CPU0は、スレッド0にてアクセスされるデータを専有メモリ領域3030に格納する。また、CPU0は、スレッド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となるCPU0、CPU1、CPU2と、CPU数3を同期情報テーブル302に登録する。また、登録部321は、被同期対象CPU数を同期情報テーブル302に登録してもよい。図3の場合、登録部321は、被同期対象CPU数2を同期情報テーブル302に登録する。なお、本実施の形態では、到達数Mの定義を、同期マスタCPUを含めずにカウントすることを想定しているため、被同期対象CPU数を同期情報テーブル302に登録する例で説明を行う。また、登録部321は、処理とCPUとの関連を示すプロセステーブル301に基づいて同期情報テーブル302に登録してもよい。なお、登録されたという情報は、CPU0のレジスタ、キャッシュメモリ、RAM203などに記憶されてもよい。送信部322は、複数のCPUのうち第1CPUを除く他のCPUに同期信号と同期ポイントへの到達数を送信する。たとえば、送信部322は、CPU1とCPU2に同期信号と到達数M=0が格納されたRAM203上のポイントを送信する。なお、送信したという情報は、CPU0のレジスタ、キャッシュメモリ、RAM203などに記憶されてもよい。受信部323は、複数のCPUのうち第1CPUを除く他のCPUから同期信号の応答となる信号を受信する。たとえば、受信部323は、CPU1とCPU2から、同期信号の応答となるレディ信号を受信する。また、レディ信号は、同期信号と同一の情報であってもよい。なお、受信結果は、CPU0のレジスタ、キャッシュメモリ、RAM203などに記憶されてもよい。通知部324は、複数のCPUのうち第1CPUを除く他のCPUの全てから同期信号の応答となる信号を受信した場合、第1CPUで実行するスレッドに同期処理の完了を通知する機能を有する。たとえば、通知部324は、CPU1とCPU2とからレディ信号を受信した場合、同期処理の完了をスレッド0に通知する。なお、通知したという情報は、CPU0のレジスタ、キャッシュメモリ、RAM203などに記憶されてもよい。受信部331は、同期命令に基づく同期信号を受信する機能を有する。たとえば、受信部331は、送信部322によって送信された同期信号を受信する。なお、受信結果は、CPU1のレジスタ、キャッシュメモリ、RAM203などに記憶されてもよい。カウント部332は、同期信号に基づいて同期ポイントへの到達数をカウントする機能を有する。たとえば、カウント部332は、同期ポイントへの到達数Mをカウントする。なお、カウントを行ったという情報は、CPU1のレジスタ、キャッシュメモリ、RAM203などに記憶されてもよい。比較部333は、カウント部332によって到達数がカウントされた場合、同期ポイントへの到達数と所定値を比較する機能を有する。ここで、所定値Nは、同期命令に基づいて同期されるCPU数であり、たとえば、CPU0~CPU2から、N=3としてもよい。また、所定値Nは、被同期対象CPU数としてもよい。この場合、所定値Nは、N=2となる。たとえば、比較部333は、到達数Mと所定値Nを比較する。なお、比較結果は、CPU1のレジスタ、キャッシュメモリ、RAM203などに記憶される。作成部334は、比較部333による比較結果が一致しない場合、同期ポイントへの到達数に基づいて第1共有メモリ領域を複製して第2共有メモリ領域を作成する機能を有する。なお、第1共有メモリ領域には、複数のCPUのうち各CPUが実行するスレッド群から共有してアクセスされるデータが格納されている。たとえば、作成部334は、共有メモリ領域103を複製して複製先共有メモリ領域1041_1を作成する。さらに、作成部334は、第1共有メモリ領域の複製である第3共有メモリ領域を作成してもよい。たとえば、作成部334は、共有メモリ領域103を複製して、複製先共有メモリ領域1041_2を作成する。なお、複製先共有メモリ領域104を作成したという情報は、CPU1のレジスタ、キャッシュメモリ、RAM203などに記憶されてもよい。設定部335は、比較部333による比較結果が一致しない場合、同期ポイントに到達したCPUが実行するスレッドのアクセス先を第1共有メモリ領域のデータから作成部334によって作成された第2共有メモリ領域のデータに設定する機能を有する。たとえば、設定部335は、スレッド1のアクセス先を共有メモリ領域103に格納されたデータから複製先共有メモリ領域1041_1に格納されたデータに設定する。なお、設定されたという情報は、CPU1のレジスタ、キャッシュメモリ、RAM203などに記憶されてもよい。切替部336は、比較部333による比較結果が一致しない場合、同期信号受信部311の実行と同期信号受信部312の実行とを切り替える機能を有する。具体的には、切替部336は、比較部333による比較結果が一致しない場合、同期信号に対する同期信号受信部311の呼び出しを被活性化し、レディ信号に対する同期信号受信部312の呼び出しを活性化する。なお、切替を行ったという情報は、CPU1のレジスタ、キャッシュメモリ、RAM203などに記憶されてもよい。送信部337は、同期信号に対応するレディ信号と同期ポイントへの到達数とを複数のCPUに送信する機能を有する。たとえば、送信部337は、レディ信号と到達数Mを、CPU0、CPU2に送信する。なお、送信を行ったという情報は、CPU1のレジスタ、キャッシュメモリ、RAM203などに記憶されてもよい。通知部338は、比較部333による比較結果が一致しない場合、同期信号受信後の処理を投機実行させる指示を、処理を実行するスレッドに通知する機能を有する。または、通知部338は、比較部333による比較結果が一致する場合、同期信号受信後の処理を実行させる指示を、処理を実行するスレッドに通知する機能を有する。たとえば、通知部338は、比較部333による比較結果が一致しない場合、スレッド1に投機実行させる指示を通知する。また、通知部338は、比較部333による比較結果が一致する場合、スレッドを実行させる指示を通知する。なお、通知を行ったという結果は、CPU1のレジスタ、キャッシュメモリ、RAM203などに記憶されてもよい。受信部341は、送信部337によって送信されたレディ信号と同期ポイントへの到達数とを受信する機能を有する。たとえば、受信部341は、CPU2から送信されたレディ信号と到達数Mを受信する。なお、受信結果は、CPU1のレジスタ、キャッシュメモリ、RAM203などに記憶されてもよい。比較部342は、受信部341によってレディ信号と同期ポイントへの到達数とが受信された場合、同期ポイントへの到達数と所定値とを比較する機能を有する。たとえば、比較部342は、到達数Mと所定値Nを比較する。なお、比較結果は、CPU1のレジスタ、キャッシュメモリ、RAM203などに記憶される。切替部343は、比較部342による比較結果が一致を示す場合、同期信号受信部311の実行と同期信号受信部312の実行とを切り替える機能を有する。具体的には、切替部343は、比較部342による比較結果が一致する場合、同期信号に対する同期信号受信部311の呼び出しを活性化し、レディ信号に対する同期信号受信部312の呼び出しを非活性化する。なお、切替を行ったという情報は、CPU1のレジスタ、キャッシュメモリ、RAM203などに記憶されてもよい。比較部344は、比較部342による比較結果が一致を示す場合、第1共有メモリ領域のデータと第2共有メモリ領域のデータとを比較する機能を有する。たとえば、比較部344は、共有メモリ領域103に格納されているデータと複製先共有メモリ領域1041_1に格納されているデータとを比較する。また、比較部344は、第2共有メモリ領域のデータと第3共有メモリ領域のデータとを比較してもよい。たとえば、比較部344は、複製先共有メモリ領域1041_1に格納されているデータと複製先共有メモリ領域1041_2に格納されているデータを比較する。なお、比較結果は、CPU1のレジスタ、キャッシュメモリ、RAM203などに記憶される。通知部345は、比較部344の比較結果に基づいて、同期信号受信後の処理を継続または中断する指示を通知する機能を有する。具体的には、一致を示す比較結果を有する場合、通知部345は比較後に処理を継続する指示をスレッド1に通知する。また、不一致を示す比較結果を有する場合、通知部345は同期信号受信後に実行した処理を中断する指示をスレッド1に通知する。なお、通知を行ったという情報は、CPU1のレジスタ、キャッシュメモリ、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フィールドには、PIDProcessIDという、プロセスまたはスレッドを一意に特定可能な識別子が格納される。以下、説明の記載をスレッドに統一して行う。また、以下のプロセステーブル301の説明では、PIDフィールドに格納されたスレッドを対象スレッドとする。PPIDフィールドには、PPIDParentPIDという、対象スレッドの親スレッドのPIDが格納される。PGIDフィールドには、PGIDProcessGroupIDという、対象スレッドが含まれるスレッドグループ番号が格納される。また、本実施の形態では、PIDとPGIDが同一であるとき、スレッドグループ内の親スレッドであると想定する。CPU番号フィールドには、対象スレッドが割り当てられたCPU番号が格納される。たとえば、PID=1001のスレッドは、PGID=1001のグループに属しており、CPU1に割り当てられている。以下、PID=xのスレッドをスレッドxとして呼称する。スレッド1001は、PID=PGID=1001となるため、PGID=1001のスレッドグループでの親スレッドとなる。なお、スレッド1001は、PPID=1に設定されている。スレッド1は、たとえば、マルチコアプロセッサシステム100で動作中のOSがUNIX登録商標であれば、initプロセスとなる。スレッド1002は、PGID=1001のスレッドグループに属しており、CPU4に割り当てられている。また、スレッド1002は、PPID=1001であるため、スレッド1001の子スレッドである。同様に、スレッド1003、スレッド1004、スレッド1005は、PGID=1001のスレッドグループに属しており、スレッド1001の子スレッドである。また、スレッド1003は、CPU5に割り当てられ、スレッド1004は、CPU6に割り当てられ、スレッド1005は、CPU8に割り当てられている。また、スレッド1006は、PID=PGID=1006となるため、PGID=1006のスレッドグループでの親スレッドとなる。さらに、スレッド1006は、CPU0に割り当てられる。スレッド1007は、PGID=1006のスレッドグループに属しており、CPU2に割り当てられている。また、スレッド1007は、PPID=1006であるため、スレッド1006の子スレッドである。図5は、同期情報テーブル302の記憶内容の一例を示す説明図である。テーブルは、被同期対象CPU数、同期対象CPUという2つのフィールドを含む。被同期対象CPU数フィールドには、被同期対象CPUの総数が格納される。同期対象CPUフィールドには、同期対象CPUのCPU番号が格納される。たとえば、図5では、被同期対象数が4となり、同期対象CPUとして、CPU1、CPU4、CPU5、CPU6、CPU8であるというレコードが格納されている。図6は、マルチコアプロセッサシステム100の同期処理の動作例を示す説明図である。図6では、同期マスタCPUとなるCPU1が同期開始を行い、CPU4、CPU5、CPU6、CPU8が、被同期対象CPUとして、同期処理を実行する場合の動作例を示す。また、CPU1は図4で示したスレッド1001を実行し、CPU4はスレッド1002を実行し、CPU5はスレッド1003を実行し、CPU6はスレッド1004を実行し、CPU8はスレッド1005を実行する。時刻t1にて、CPU1が同期ポイントに到達すると、CPU1は、プロセステーブル301から、同期情報テーブル302のレコードを生成する。具体的には、CPU1は、CPU1が実行するスレッド1001と同一のスレッドグループに含まれる、スレッド1001~スレッド1005を抽出する。抽出後、CPU1は、同期情報テーブル302の新規レコードの被同期対象CPU数フィールドに、スレッド1002~スレッド1005を実行するCPU数であるN=4を登録する。また、CPU1は、新規レコードの同期対象CPUフィールドにスレッド1001~スレッド1005を実行するCPU番号である1、4、5、6、8を登録する。登録後、CPU1は、同期情報テーブル302を参照して、同期対象CPUに同期信号を通知する。しかしながら、CPU4、CPU5、CPU6、CPU8は、クリティカルセクション中であり、同期信号を受信できない状態である。なお、同期信号を通知後、CPU1は、被同期対象CPUからのレディ信号を監視する。また、CPU1は、スレッド1001と無関係な他のスレッドを実行していてもよい。続けて、時刻t2にて、CPU5がクリティカルセクションを終了し同期ポイントに到達すると、CPU5は、レディ信号をブロードキャスト送信し、スレッド1003の後続処理を投機実行する。同様に、時刻t3にて、CPU8がクリティカルセクションを終了し同期ポイントに到達すると、CPU8は、レディ信号をブロードキャスト送信し、スレッド1005の後続処理を投機実行する。また、時刻t4にて、CPU4がクリティカルセクションを終了し同期ポイントに到達すると、CPU4は、レディ信号をブロードキャスト送信し、スレッド1002の後続処理を投機実行する。最後に、時刻t5にて、CPU6がクリティカルセクションを終了し同期ポイントに到達すると、CPU6は、レディ信号をブロードキャスト送信する。全てのCPUが同期ポイントに到達したことを検出したCPU4、CPU5、CPU8は、時刻t6にて投機実行を継続するか中断するかを判断する。以下、マルチコアプロセッサシステム100の時刻t1、時刻t2、時刻t3、時刻t5、時刻t6における状態を、それぞれ図7~図11にて示す。なお、時刻t4におけるマルチコアプロセッサシステム100の状態は、時刻t3と大きく変わらないため、図示を省略する。図7は、図6におけるマルチコアプロセッサシステム100の時刻t1における状態を示す説明図である。同期ポイントに到達したCPU1は、処理1として、同期信号を同期対象CPUのうち、自CPUを除いたCPU4、CPU5、CPU6、CPU8に通知する。また、同期信号の通知に合わせて、CPU1は、被同期対象CPUのうち、同期ポイントへ到達したCPU数を示す到達数MをM=0として通知し、さらに、同期情報テーブル302を通知する。なお、具体的には、到達数Mと同期情報テーブル302は、CPUs201が共有してアクセス可能なメモリ101に格納されているため、それぞれが格納されているアドレスを通知してもよい。図8は、図6におけるマルチコアプロセッサシステム100の時刻t2における状態を示す説明図である。時刻t2にて同期ポイントに到達したCPU5は、処理2として、到達数Mの値を、M=N-N-1=1としてインクリメントする。さらに、CPU5は、M=1とレディ信号を、同期対象CPUのうち、自CPUを除いたCPU1、CPU4、CPU6、CPU8に通知する。また、CPU5は、M<Nであることから、まだ同期ポイントに未到達である被同期対象CPUが存在することを判定し、スレッド1003の後続処理を投機実行する。なお、投機実行の動作については、図9にて説明を行う。また、到達数Mへのインクリメントに関して、仮に同じタイミングで発行されてもポインタ変数の先の実体数字を変更できるCPUは、同時期には1つのCPUである。到達数Mへのインクリメントは、実装ロジックがインクリメント命令であるため、全く同じタイミングでアクセスが行われたとしても、確実に1つずつインクリメントが行われることになる。図9は、図6におけるマルチコアプロセッサシステム100の時刻t3における状態を示す説明図である。時刻t3にて同期ポイントに到達したCPU8は、処理3として、到達数Mの値を、M=M1=2としてインクリメントする。さらに、CPU8は、M=2とレディ信号を、同期対象CPUのうち、自CPUを除いたCPU1、CPU4、CPU5、CPU6に通知する。また、CPU8は、M<Nであることから、まだ同期ポイントに未到達である被同期対象CPUが存在することを判定し、スレッド1005の後続処理を投機実行する。なお、時刻t2にて同期ポイントに到達したCPU5は、スレッド1003の後続処理を投機実行する。具体的に、CPU5は、共有メモリ領域103を複製した複製先共有メモリ領域1045_1、複製先共有メモリ領域1045_2を作成する。作成後、CPU5は、複製先共有メモリ領域1045_1をアクセス先としてスレッド1003の後続処理を投機実行する。なお、複製先共有メモリ領域1045_2はスレッド1003からアクセスされない。したがって、複製先共有メモリ領域1045_2に格納されているデータは、同期処理完了時までデータが変更されずに保存される。なお、図示していないが、時刻t4において同期ポイントに到達したCPU4は、処理4として、到達数Mの値を、M=M1=3としてインクリメントする。さらに、CPU4は、M=3とレディ信号を、同期対象CPUのうち、自CPUを除いたCPU1、CPU5、CPU6、CPU8に通知する。また、CPU4は、M<Nであることから、まだ同期ポイントに未到達である被同期対象CPUが存在することを判定し、スレッド1002の後続処理を投機実行する。図10は、図6におけるマルチコアプロセッサシステム100の時刻t5における状態を示す説明図である。時刻t5にて同期ポイントに到達したCPU6は、処理5として、到達数Mの値を、M=M1=4としてインクリメントする。さらに、CPU6は、M=4とレディ信号を、同期対象CPUのうち、自CPUを除いたCPU1、CPU4、CPU5、CPU8に通知する。なお、CPU6は、M=N=4であることから、被同期対象CPUが全て同期ポイントに到達したことを判定し、スレッド1004の後続処理を実行する。また、時刻t5の時点にて、時刻t2にて同期ポイントに到達したCPU5はスレッド1003の後続処理を投機実行している。同様に、時刻t3にて同期ポイントに到達したCPU8はスレッド1005の後続処理を投機実行し、時刻t4にて同期ポイントに到達したCPU4はスレッド1002の後続処理を投機実行している。CPU4、CPU5、CPU8は、レディ信号を受信すると、投機実行の成否を複製先共有メモリ領域104のデータを比較することで判定する。具体的な判定方法は、図11にて説明する。図11は、図6におけるマルチコアプロセッサシステム100の時刻t6における状態を示す説明図である。時刻t6にて、レディ信号を受信したCPU4、CPU5、CPU8は、2つの複製先共有メモリ領域104のデータが一致するかを判定する。たとえば、CPU4は、複製先共有メモリ領域1044_1と複製先共有メモリ領域1044_2のデータを比較する。図11では、複製先共有メモリ領域1044_1と複製先共有メモリ領域1044_2が一致しない状態を想定している。比較してデータが一致しない場合、スレッド1002の投機実行は、共有メモリ領域103を変更することを示している。したがって、投機実行が本来不可能であることを意味するため、CPU4は、投機実行を中断し、後続処理を再実行する。同様に、CPU8も、複製先共有メモリ領域1048_1と複製先共有メモリ領域1048_2が一致しなかったため、スレッド1005の投機実行を中断して投機実行の結果を破棄し、後続処理を再実行する。また、CPU5は、複製先共有メモリ領域1045_1と複製先共有メモリ領域1045_2のデータを比較する。図11では、複製先共有メモリ領域1045_1と複製先共有メモリ領域1045_2が一致する状態を想定している。比較してデータが一致する場合、スレッド1003の投機実行は、CPU5の専有メモリ領域のリードライト処理で完結しており、共有メモリ領域103を変更せず、冗長な同期処理であったことを示している。したがって、CPU5は、投機実行を継続する。なお、共有メモリ領域103のデータは、同期マスタCPUによる同期処理以外の他の処理や、または同期対象CPU以外の他のCPUによって変更される可能性がある。変更される場合としては、同期対象CPUでの他の処理が意図的、または不具合によってデータを変更する場合、または、本来同期対象CPUに含まれるはずの他のCPUがデータを変更してしまう場合等がある。このような動作は、従来例にかかるマルチコアプロセッサシステム100であっても起こりうる。たとえば、本実施の形態にかかるマルチコアプロセッサシステム100において、複製先共有メモリ領域104x_1と共有メモリ領域103で投機実行の成否を判定する場合を想定する。なお、xは投機実行したCPU番号であると想定する。このとき、全く同じようにデータが変更されると、投機実行が失敗しているにも関わらず、成功として判断されてしまう。このように、複製先共有メモリ領域104x_1と共有メモリ領域103を比較すると、不具合が隠されてしまう可能性が存在する。したがって、マルチコアプロセッサシステム100は、投機実行の成否の判定を、共有メモリ領域103のデータを用いずに、複製先共有メモリ領域104で行う。また、マルチコアプロセッサシステム100は、CPUxが投機実行を継続する場合に、投機実行のデータアクセス先を、複製先共有メモリ領域104x_1から共有メモリ領域103に切り替える。このとき、複製先共有メモリ領域104x_1と共有メモリ領域103とでデータが一致しない場合、マルチコアプロセッサシステム100は、OSの機能によってメモリエラー等を発行してもよい。なお、同期マスタCPUによって共有メモリ領域103のデータが書き換えられないことを想定してもよい場合、マルチコアプロセッサシステム100は、複製先共有メモリ領域104x_1のみを作成してもよい。この場合、CPUxは、共有メモリ領域103と複製先共有メモリ領域104x_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により、VESVideoElementaryStreamデータと、AESAudioElementaryStreamデータに分離する。分離後、デマルチプレクススレッド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データをデコードし、VFVideoFrameデータを生成する。生成後、ビデオスレッド1203は、VFデータ出力部1233によってVFバッファ1265に格納する。また、ビデオスレッド1203は、VFデータ枯渇監視部1234によって、VFバッファ1265が枯渇してきた場合、VES読出部1231に読出要求を通知する。オーディオスレッド1204は、オーディオ処理を行う機能を有する。具体的に、オーディオスレッド1204は、AES読出部1241によってAESデータを読み出し、オーディオデコード部1242によってAESデータをデコードし、AFAudioFrameデータを生成する。生成後、オーディオスレッド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がCPU1であると想定し、被同期対象CPUをCPU4であると想定する。図13は、同期処理時における同期マスタCPUでの処理手順の一例を示すフローチャートである。初めに、CPU1は、ユーザ空間にて同期マスタスレッドを実行し、カーネル空間にて同期処理部310を実行している。CPU1は、通常処理を実行しステップS1301、通常処理内にある、同期コードとなるシステムコールを発行するステップS1302。システムコールが発行されると、CPU1は、ユーザモードからカーネルモードに遷移し、カーネル空間で実行されている同期処理部310を実行する。CPU1は、同期コードを検出したか否かを判断するステップS1305。なお、同期コードとは、排他制御コードやバリア同期コードである。検出していない場合ステップS1305:No、CPU1は、一定時間経過後に再びステップS1305の処理を実行する。なお、CPU1は、一定時間経過の間、たとえば、ユーザモードに遷移し、同期マスタスレッドを実行したり、他のユーザスレッドを実行したりする。検出した場合ステップS1305:Yes、CPU1は、プロセステーブル301から被同期対象CPU数を取得するステップS1306。取得後、CPU1は、プロセステーブル301から、同期対象CPUを抽出するステップS1307。抽出後、CPU1は、同期情報テーブル302に、取得した被同期対象CPU数と、抽出した同期対象CPUを登録するステップS1308。登録後、CPU1は、同期信号と到達数M=0を被同期対象CPUにブロードキャスト送信するステップS1309。送信後、CPU1は、全ての被同期対象CPUからレディ信号を受信したか否かを判断するステップS1310。なお、レディ信号を送信する処理は、被同期対象CPUの処理内のステップS1408とステップS1411である。受信していない場合ステップS1310:No、CPU1は、一定時間経過後に再びステップS1310の処理を実行する。受信した場合ステップS1310:Yes、CPU1は、同期処理の完了を同期マスタスレッドに通知しステップS1311、同期処理部310の処理を終了する。また、ユーザモードに遷移したCPU1は、同期処理の完了を受け付けたか否かを判断するステップS1303。受け付けていない場合ステップS1303:No、CPU1は、一定時間経過後に再びステップS1310の処理を実行する。受け付けた場合ステップS1303:Yes、CPU1は、後続処理を実行しステップS1304、同期マスタスレッドの処理を終了する。図14は、同期処理時における被同期対象CPUでの処理手順の一例を示すフローチャートその1である。初めに、CPU4は、ユーザ空間にて被同期対象スレッドを実行し、同期信号を受信した場合、カーネル空間にて同期信号受信部311を実行する。CPU4は、通常処理を実行しステップS1401、クリティカルセクション処理を実行するステップS1402。クリティカルセクション処理の終了後、CPU4は、同期信号を受信したため、ユーザモードからカーネルモードに遷移する。なお、クリティカルセクション処理が存在しない場合、CPU4は、同期信号を受信してすぐに同期信号受信部311の処理を実行する。なお、同期信号を送信する処理は、同期マスタCPUの処理内のステップS1309である。CPU4は、到達数MをインクリメントしステップS1404、M=Nとなるか否かを判断するステップS1405。M=Nでない場合ステップS1405:No、CPU4は、複製先共有メモリ領域104を2つ作成するステップS1406。作成後、CPU4は、同期信号受信部311を停止し、同期信号受信部312を起動するステップS1407。具体的な同期信号受信部311の停止、同期信号受信部312の起動方法としては、たとえば実行される関数を切り替える方法がある。たとえば、CPU4は、同期信号かレディ信号を受信した場合に実行する関数ポインタを、同期信号受信部311を実行するコードを示すアドレスから、同期信号受信部312を実行するコードを示すアドレスに切り替える。これにより、CPU4が次に同期信号、またはレディ信号を受信した場合、CPU4は、同期信号受信部312を実行する。続けて、CPU4は、レディ信号と到達数Mを、自CPUを除く同期対象CPUにブロードキャスト送信するステップS1408。送信後、CPU4は、後続処理のアクセス先を複製先共有メモリ領域104のいずれか一方に設定しステップS1409、後続処理の投機実行を被同期対象スレッドに指示しステップS1410、同期信号受信部311を終了する。M=Nである場合ステップS1405:Yes、CPU4は、レディ信号と到達数Mを、自CPUを除く同期対象CPUにブロードキャスト送信するステップS1411。送信後、CPU4は、後続処理の実行を被同期対象スレッドに指示しステップS1412、同期信号受信部311を終了する。また、同期信号受信部311を終了し、ユーザモードに遷移したCPU4は、ステップS1410、ステップS1412による指示によって後続処理実行しステップS1403、被同期対象スレッドの処理を終了する。図15は、同期処理時における被同期対象CPUでの処理手順の一例を示すフローチャートその2である。図15では、レディ信号を受信したCPU4がカーネル空間にて同期信号受信部312を実行する場合について説明を行う。なお、ユーザ空間で実行している被同期対象スレッドの処理を示すステップS1501~ステップS1503は、図14で示したステップS1401~ステップS1403と等しいため、説明を省略する。なお、レディ信号を送信する処理は、被同期対象CPUの処理内のステップS1408とステップS1411である。CPU4は、M=Nであるか否かを判断するステップS1504。M=Nでない場合ステップS1504:No、CPU4は、一定時間経過後に再びステップS150の4処理を実行する。M=Nである場合ステップS1504:Yes、CPU4は、同期信号受信部312を停止し、同期信号受信部311を起動するステップS1505。続けて、CPU4は、2つの複製先共有メモリ領域104のデータを比較するステップS1506。CPU4は、比較結果が一致を示したか否かを判断するステップS1507。一致を示す比較結果である場合ステップS1507:Yes、CPU4は、後続処理のアクセス先を共有メモリ領域103に設定しステップS1508、後続処理の投機実行の継続を被同期対象スレッドに指示するステップS1509。不一致を示す比較結果である場合ステップS1507:No、CPU4は、後続処理のアクセス先を共有メモリ領域103に設定しステップS1510、被同期対象スレッドの投機実行を中断させるステップS1511。続けて、CPU4は、後続処理の再実行を被同期対象スレッドに指示しステップS1512、同期信号受信部312の処理を終了する。また、ユーザモードに遷移したCPU4は、ステップ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等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本同期方法を実行するプログラムは、インターネット等のネットワークを介して配布してもよい。