(57)【要約】【課題】複数のＣＰＵを備えたデータ処理装置にて、同期のための処理の効率化を図る。【解決手段】データ処理装置１１は、複数のＣＰＵ１（１ａ〜１ｄ）と、各ＣＰＵ１に対して設けられた終了フラグ７（７ａ〜７ｄ）と、一部の終了フラグ７がセットされてから全ての終了フラグ７がセットされるまでの状態を示すカウンタ１３と、一部の終了フラグ７がセットされると、カウンタ１３の値を更新する第１更新手段（１５）と、第１の更新手段によりカウンタ１３の値が更新された後、全ての終了フラグ７がセットされると、カウンタ１３の値を更に更新すると共に、全ての終了フラグ７をリセットする第２更新手段（１６，１７）と、を備える。そして、各ＣＰＵ１は、第２更新手段により更新されるカウンタ１３の値に応じて、同期が必要な処理を実行すると共に、その同期が必要な処理を完了して自身の終了フラグ７をセットした後に、同期が不要な処理を実行する。【選択図】図１
2016024614.tif 000002
【特許請求の範囲】
【請求項１】
複数のＣＰＵ（１ａ〜１ｄ）を備えたデータ処理装置において、
前記各ＣＰＵに対して設けられ、前記各ＣＰＵが、同期が必要な処理の実行完了を個別にセット可能な終了フラグ（７ａ〜７ｄ）と、
前記各ＣＰＵの終了フラグのうちの、一部である所定数の終了フラグがセットされてから、全ての前記終了フラグがセットされるまでの状態を示すカウンタ（１３）と、
前記各ＣＰＵの終了フラグのうち、前記所定数の終了フラグがセットされると、前記カウンタの値を更新する第１更新手段（１５，Ｓ２０７）と、
前記第１の更新手段により前記カウンタの値が更新された後、全ての前記終了フラグがセットされると、前記カウンタの値を更に更新すると共に、前記全ての終了フラグをリセットする第２更新手段（１６，１７，Ｓ２１０〜Ｓ２４０）と、を備え、  
前記各ＣＰＵは、前記第２更新手段により更新される前記カウンタの値に応じて、同期が必要な処理を実行すると共に、その同期が必要な処理を完了して自身の前記終了フラグをセットした後に、同期が不要な処理を実行すること（Ｓ１１０〜Ｓ１６０）、
を特徴とするデータ処理装置。
【請求項２】
請求項１に記載のデータ処理装置において、
前記第１更新手段（１５）と前記第２更新手段（１６，１７）とのうち、少なくとも一方は、ハードウェア回路であること、
を特徴とするデータ処理装置。
【請求項３】
請求項１または請求項２に記載のデータ処理装置において、
前記第１更新手段（１５）と前記第２更新手段（１６，１７）は、ハードウェア回路であること、
を特徴とするデータ処理装置。
【請求項４】
請求項１に記載のデータ処理装置において、
前記各ＣＰＵのうち、予め定められた１つのＣＰＵが、前記第２更新手段（Ｓ２１０〜Ｓ２４０）として機能すること、
を特徴とするデータ処理装置。
【請求項５】
請求項１に記載のデータ処理装置において、
前記各ＣＰＵのうち、全ての前記終了フラグがリセットされている状態から、最初に前記終了フラグをセットしたＣＰＵが、前記第２更新手段（Ｓ２１０〜Ｓ２４０）として機能すること、
を特徴とするデータ処理装置。
【請求項６】
請求項５に記載のデータ処理装置において、
前記所定数は１であり、
前記各ＣＰＵのうち、全ての前記終了フラグがリセットされている状態から、最初に前記終了フラグをセットしたＣＰＵは、前記第１更新手段（Ｓ２０７）としても機能すること、
を特徴とするデータ処理装置。
【請求項７】
請求項１ないし請求項６の何れか１項に記載のデータ処理装置において、
前記各ＣＰＵは、前記終了フラグのセットを専用命令で行うこと、
を特徴とするデータ処理装置。
【請求項８】
請求項１ないし請求項７の何れか１項に記載のデータ処理装置において、
前記所定数は１であり、
前記第１更新手段は、
前記各ＣＰＵの終了フラグのうち、何れか１つの終了フラグがセットされると、前記カウンタの最下位ビットに１をセットすることにより、前記カウンタの値を更新するようになっており、
前記第２更新手段は、
全ての前記終了フラグがセットされると、前記カウンタを１インクリメントすることにより、前記カウンタの値を更新するようになっており、
前記各ＣＰＵは、前記カウンタの値が２増加する毎に、前記同期が必要な処理を実行すること、
を特徴とするデータ処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のＣＰＵを備えたデータ処理装置に関する。
【背景技術】
【０００２】
複数のＣＰＵを備えたマルチプロセッサシステムにおいて、ＣＰＵ間の同期を実現するために、ＣＰＵ毎に用意した同期フラグを用いる技術がある（例えば、特許文献１参照）。従来の技術では、各ＣＰＵがアクセスするメモリの同期フラグ領域に、ＣＰＵ毎の同期フラグが用意される。その同期フラグは１ビット以上のカウンタである。各ＣＰＵは、他のＣＰＵと同期する場合（例えばメモリ領域内の同じ変数や、同じＩ／Ｏを、時間順序を守ってアクセスする必要がある場合）、自身の同期フラグに、どの処理まで実行したかを示す値をセットする。そして、各ＣＰＵは、ある処理を終了してから次の処理に進む前に、他のＣＰＵの全ての同期フラグを参照し続けて、全ての同期フラグが、次の処理に進むことが可能な値になるまで待つ。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００５−７１１０９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
従来の技術では、各ＣＰＵは、同期のために他のＣＰＵの同期フラグを全て参照する必要がある。このため、ＣＰＵの数が増加すると、同期に必要なフラグの参照回数が加速度的に増加する。よって、データ処理装置の全体として、同期のための処理負荷が増加する。
【０００５】
そこで、本発明は、複数のＣＰＵを備えたデータ処理装置において、同期のための処理の効率化を目的としている。
【課題を解決するための手段】
【０００６】
第１発明のデータ処理装置は、複数のＣＰＵを備えたデータ処理装置であり、終了フラグと、カウンタと、第１更新手段及び第２更新手段と、を備える。
終了フラグは、各ＣＰＵに対して設けられ、各ＣＰＵが、同期が必要な処理の実行完了を個別にセット可能なフラグである。
【０００７】
一方、カウンタは、各ＣＰＵに共通のものである。そして、カウンタは、各ＣＰＵの終了フラグのうちの、一部である所定数の終了フラグがセットされてから、全ての終了フラグがセットされるまでの状態を示す。
【０００８】
第１更新手段は、各ＣＰＵの終了フラグのうち、前記所定数の終了フラグがセットされると、カウンタの値を更新する。第２更新手段は、第１の更新手段によりカウンタの値が更新された後、全ての終了フラグがセットされると、カウンタの値を更に更新すると共に、全ての終了フラグをリセットする。このため、カウンタは、第１更新処理により更新される値になってから、第２更新処理により更新される値になるまでを、「所定数の終了フラグがセットされてから、全ての終了フラグがセットされるまでの状態」として示すこととなる。
【０００９】
そして、各ＣＰＵは、第２更新手段により更新されるカウンタの値に応じて、同期が必要な処理を実行すると共に、その同期が必要な処理を完了して自身の終了フラグをセットした後に、同期が不要な処理を実行する。
【００１０】
このデータ処理装置によれば、各ＣＰＵは、共通の１つのカウンタを参照して、同期が必要な処理（以下、同期必要処理ともいう）を進めることができる。このため、データ処理装置の全体として、前述した従来の技術よりも、同期のための処理負荷を低減することができる。よって、同期のための処理の効率化が達成される。
【００１１】
また、各ＣＰＵは、カウンタの値に応じて同期必要処理を実行するが、同期必要処理を完了して自身の終了フラグをセットしてから、次の同期必要処理を開始するまでの間に、同期が不要な処理を実行する。このため、処理の効率が一層向上する。
【００１２】
また例えば、各処理の中に、処理負荷が小さい場合のみ実行する等必ずしも実行しなくても良い部分がある場合には、その処理の実行前または実行中にカウンタの値が第１更新手段により更新される値になった場合に、その実行しなくても良い部分の処理をスキップする、といった制御も実施できる。その場合、他の処理へすぐに移れるようにすることができ、処理の効率化に寄与することとなる。
【００１３】
なお、特許請求の範囲に記載した括弧内の符号は、一つの態様として後述する実施形態に記載の具体的手段との対応関係を示すものであって、本発明の技術的範囲を限定するものではない。
【図面の簡単な説明】
【００１４】
【図１】第１実施形態のマルチコアプロセッサの構成を表す構成図である。
【図２】各ＣＰＵの処理動作の説明図である。
【図３】各ＣＰＵが行う処理を表すフローチャートである。
【図４】第２実施形態のマルチコアプロセッサの構成を表す構成図である。
【図５】第３実施形態のカウンタ操作処理を表すフローチャートである。
【図６】第４実施形態のカウンタ操作処理を表すフローチャートである。
【発明を実施するための形態】
【００１５】
以下に、本発明が適用された実施形態のデータ処理装置としてのマルチコアプロセッサについて説明する。本実施形態のマルチコアプロセッサは、複数のＣＰＵを１つのパッケージに集積したマイクロプロセッサである。内蔵される複数のＣＰＵは、ＣＰＵコアあるいは単にコアとも呼ばれるため、この種のマイクロプロセッサは、マルチコアプロセッサと呼ばれる。
【００１６】
［第１実施形態］
図１に示すように、第１実施形態のマルチコアプロセッサ（以下単に、プロセッサという）１１は、複数（この例では４つ）のＣＰＵ１ａ〜１ｄと、各ＣＰＵ１ａ〜１ｄが実行するプログラムや固定のデータ等が格納されたＲＯＭ２と、各ＣＰＵ１ａ〜１ｄが共通に使用するメモリ３及びＩ／Ｏ（入出力装置）４，５と、それらを相互に接続するバス６と、を備える。メモリ３は、この例ではＲＡＭである。
【００１７】
また、プロセッサ１１は、ＣＰＵ１ａ〜１ｄ毎に設けられた４つの終了フラグ７ａ〜７ｄを備える。各ＣＰＵ１ａ〜１ｄから各終了フラグ７ａ〜７ｄへは、終了フラグ７ａ〜７ｄをセットする（この例では、終了フラグ７ａ〜７ｄに“１”を書き込む）ための専用線９ａ〜９ｄが設けられている。そして、各ＣＰＵ１ａ〜１ｄは、自身に対応する終了フラグ７ａ〜７ｄのセットを、１つの専用命令で行う。その専用命令は、例えば「ｓｅｔｆ」といったビット操作命令である。
【００１８】
尚、ＣＰＵ１ａ〜１ｄについて、各々を特に区別しない場合には、符号として適宜「１」を用いる。同様に、終了フラグ７ａ〜７ｄについて、各々を特に区別しない場合には、符号として適宜「７」を用いる。
【００１９】
更に、プロセッサ１１は、ＣＰＵ１ａ〜１ｄに共通のカウンタ１３を備える。そして、プロセッサ１１は、終了フラグ７ａ〜７ｄに応じてカウンタ１３を操作するハードウェア回路として、ＯＲ（オア）回路１５、ＡＮＤ（アンド）回路１６及び加算回路１７を備える。
【００２０】
カウンタ１３は、本実施形態では、２ビット以上のカウンタである。ＣＰＵ１ａ〜１ｄは、バス６を介してカウンタ１３にアクセス可能になっている。
ＯＲ回路１５は、終了フラグ７ａ〜７ｄの論理和の値を、カウンタ１３の最下位ビット（以下、ＬＳＢ（Least Significant Bit）という）にセットする。このため、ＯＲ回路１５は、終了フラグ７ａ〜７ｄのうちの一部である所定数（この例では１つ）の終了フラグ７がセットされると、カウンタ１３のＬＳＢを“０”から“１”にする。カウンタ１３のＬＳＢを“０”から“１”にすることは、カウンタ１３の値（以下、カウンタ値ともいう）を１つ大きい値に更新すること（即ち、カウンタ１３を１インクリメントすること）に等しい。
【００２１】
加算回路１７は、カウンタ１３の２ビット目以上のデータ値に１を加算した値を出力する。
ＡＮＤ回路１６は、全ての終了フラグ７ａ〜７ｄがセットされると、カウンタ１３に対してＷＥ（ライトイネーブル）信号を出力する。すると、カウンタ１３の２ビット目以上に、加算回路１７の出力値が書き込まれる。また、カウンタ１３がＷＥ信号を出力すると、全ての終了フラグ７ａ〜７ｄがリセット（“０”にクリア）されて、ＯＲ回路１５によりカウンタ１３のＬＳＢが“０”になる。全ての終了フラグ７ａ〜７ｄがセットされた場合、カウンタ１３全体としては、１インクリメントされることとなる。
【００２２】
このため、カウンタ１３は、全ての終了フラグ７ａ〜７ｄがリセットされている状態から、全ての終了フラグ７ａ〜７ｄがセットされた状態になると、合計で２インクリメントされる。つまり、全ての終了フラグ７ａ〜７ｄがリセットされている状態から、終了フラグ７ａ〜７ｄの何れか１つがセットされると、カウンタ１３は、ＯＲ回路１５により１インクリメントされる（ＬＳＢが“１”になる）。その後、全ての終了フラグ７ａ〜７ｄがセットされると、カウンタ１３は、ＡＮＤ回路１６により更に１インクリメントされる。そして、終了フラグ７ａ〜７ｄは全てリセットされる。
【００２３】
また、カウンタ１３のＬＳＢが“１”であること（カウンタ値が奇数であること）は、終了フラグ７ａ〜７ｄのうちの１つがセットされてから、全ての終了フラグ７ａ〜７ｄがセットされるまでの状態であることを示す。
【００２４】
また、カウンタ値は、予め定められた最終値の次は０に戻る。カウンタ値が０から再び０に戻るまでの期間が、１周期である（図２参照）。
次に、各ＣＰＵ１ａ〜１ｄの処理について説明する。
【００２５】
〈概要〉
プロセッサ１１は、例えば、自動車のエンジンを制御する電子制御装置に設けられ、各ＣＰＵ１ａ〜１ｄは、エンジンを制御するための制御処理を実行する。エンジン等を制御するための制御処理は、周期性のある周期制御処理（周期制御システム処理）である。
【００２６】
本実施形態では、周期制御処理の特徴として、大域的な粗粒度での同期が可能という特性に着目しており、制御処理を、同期が必要な区間と、それ以外の区間（つまり同期が不要な区間）とに分割している。ここで言う同期は、排他も含む。区間とは、処理の全体における一部の処理のことである。このため、同期が必要な区間は、同期が必要な処理（同期必要処理）であり、順序を守って実行されるべき処理である。同様に、同期が不要な区間は、同期が不要な処理（以下、同期不要処理ともいう）であり、いつ実行しても良い処理（即ち、他の処理との時間的な関連性が無い処理）である。
【００２７】
また、本実施形態では、ＣＰＵ１ａ〜１ｄにまたがって、カウンタ値で定義される同期ウインドウ（図２のＷ１，Ｗ２を参照）を設け、その各同期ウインドウに、同期が必要な区間（図２の区間１，区間２を参照）を配置している。更に、同期が必要な区間の間に、同期が不要な区間（図２の網掛け部分を参照）を挟んで配置することで、粗粒度で無駄の少ない同期を実現している。
【００２８】
〈具体的な処理の配置〉
最初に、処理を、同期が必要な処理毎に分割し、分割した同期必要処理と、それに続く同期不要処理とを合わせて、単位処理としている。
【００２９】
そして、図２において、「区間１」，「区間２」およびそれらに続く網掛け部分で示すように、同期必要処理と同期不要処理とからなる単位処理を、各ＣＰＵ１ａ〜１ｄに配置（スケジューリング）している。また、各単位処理は、カウンタ値と対応付けられている。
【００３０】
図２において、「区間ｍ」（ｍは１以上の整数）は、同期が必要な区間（同期必要処理）であり、その「区間ｍ」に続く網掛け部分は、同期が不要な区間（同期不要処理）である。同期が不要な区間は、他のＣＰＵ１の実行内容に関係なく実行可能である。
【００３１】
また、図２の例では、カウンタ値が０及び１の場合が、同期ウインドウＷ１に該当し、その同期ウインドウＷ１に、「区間１」を配置している。そして、カウンタ値が２及び３の場合が、同期ウインドウＷ２に該当し、その同期ウインドウＷ２に「区間２」を配置している。つまり、カウンタ値がｎ（ｎは０以上の偶数）及び「ｎ＋１」の場合が、同期ウインドウＷｍ（ｍ＝ｎ／２＋１）に該当し、その同期ウインドウＷｍに、同期が必要な「区間ｍ」が配置されている。
【００３２】
例えば、ＣＰＵ１ａの「区間１」は、Ｉ／Ｏ４にアクセスする処理で、ＣＰＵ１ｂの「区間１」は、Ｉ／Ｏ５にアクセスする処理で、ＣＰＵ１ｃの「区間１」は、メモリ３内の変数Ｄａにアクセスする処理で、ＣＰＵ１ｄの「区間１」は、メモリ３内の変数Ｄｂにアクセスする処理である。また、ＣＰＵ１ａの「区間１」は、Ｉ／Ｏ５にアクセスする処理で、ＣＰＵ１ｂの「区間１」は、Ｉ／Ｏ４にアクセスする処理で、ＣＰＵ１ｃの「区間１」は、メモリ３内の変数Ｄｃにアクセスする処理で、ＣＰＵ１ｄの「区間１」は、メモリ３内の変数Ｄｄにアクセスする処理である。このように、同一のアクセス対象に複数のＣＰＵ１が同時にアクセスしないようにスケジュールされている。
【００３３】
〈各ＣＰＵの処理動作〉
図２に示すように、各ＣＰＵ１ａ〜１ｄは、カウンタ値が０の場合には、「区間１」であって、「カウンタ値＝０」に対応する単位処理のうちの同期必要処理を実行し、その同期必要処理を完了すると、自身の終了フラグ７ａ〜７ｄをセットする。そして、各ＣＰＵ１ａ〜１ｄは、その後、単位処理のうちの同期不要処理（図２の「区間１」に続く網掛け部分）を実行する。尚、終了フラグ７ａ〜７ｄの何れか１つがセットされると、カウンタ１３が１インクリメントされる（ＬＳＢが“１”になる）。
【００３４】
そして、全てのＣＰＵ１ａ〜１ｄが終了フラグ７ａ〜７ｄをセットすると、カウンタ１３が１インクリメントされて、全ての終了フラグ７ａ〜７ｄがリセットされる。前述したように、カウンタ１３は、全ての終了フラグ７ａ〜７ｂがリセットされている状態から、全ての終了フラグ７ａ〜７ｄがセットされると、合計で２インクリメントされる。
【００３５】
このため、各ＣＰＵ１ａ〜１ｄは、同期不要処理を完了すると、カウンタ値を参照して、カウンタ１３が２インクリメントされるまで待ち合わせを行う。
そして、各ＣＰＵ１ａ〜１ｄは、カウンタ１３が２インクリメントされたことを検知すると、次の単位処理であって、この例では「カウンタ値＝２」に対応する単位処理のうちの同期必要処理（図２の「区間２」）を開始する。尚、ＣＰＵ１は、同期不要処理を完了した時点で、カウンタ１３が既に２インクリメントされていれば、すぐに次の単位処理のうちの同期必要処理を開始する。このように、各ＣＰＵ１ａ〜１ｄは、全てのＣＰＵ１ａ〜１ｄが今回の同期必要処理を完了していることを、カウンタ値によって確認してから、次の同期必要処理を開始する。
【００３６】
そして、各ＣＰＵ１ａ〜１ｄは、図２の「区間２」の実行を完了すると、自身の終了フラグ７ａ〜７ｄをセットし、その後、同期不要処理（図２の「区間２」に続く網掛け部分）を実行する。
【００３７】
以後は、上記と同様の動作が繰り返される。そして、カウンタ値が所定の最終値から０に戻ると（つまり、１周期分の周期制御処理が全て終わると）、各ＣＰＵ１ａ〜１ｄは、再び「カウンタ値＝０」に対応する単位処理から実行することとなる。
【００３８】
次に、各ＣＰＵ１ａ〜１ｄが行う処理について、図３を用い改めて説明する。
図３に示すように、各ＣＰＵ１は、動作を開始すると、Ｓ１１０にて、カウンタ値を読み込み、次のＳ１２０にて、カウンタ１３のＬＳＢが“０”であるか否かを判定する。
【００３９】
各ＣＰＵ１は、カウンタ１３のＬＳＢが“０”ではない（即ち“１”である）と判定した場合には（Ｓ１２０：ＮＯ）、Ｓ１１０に戻る。
また、各ＣＰＵ１は、カウンタ１３のＬＳＢが“０”と判定した場合には（Ｓ１２０：ＹＥＳ）、カウンタ１３が２インクリメントされた（即ち、カウンタ値がＡＮＤ回路１６により更新されて、次の単位処理を実行しても良い状態になった）と判断して、Ｓ１３０へ進む。
【００４０】
各ＣＰＵ１は、Ｓ１３０では、現在のカウンタ値（即ち、Ｓ１１０で読み込んだカウンタ値）に対応したタスクの先頭アドレス（詳しくは、そのタスクのプログラムの先頭アドレス）へジャンプする。
【００４１】
尚、ここでのタスクは、前述した単位処理のことである。また、そのタスク内に、当該ＣＰＵ１の終了フラグ７をセットするための命令（本実施形態では前述の専用命令）が含まれており、その命令は後述のＳ１５０で実行される。また、ＲＯＭ２には、カウンタ値に対応したタスクの先頭アドレスが記述されたタスクテーブルが記憶されている。そして、各ＣＰＵ１は、Ｓ１３０では、そのタスクテーブルを参照して、現在のカウンタ値に対応したタスクの先頭アドレスを特定し、その特定した先頭アドレスへジャンプする。
【００４２】
各ＣＰＵ１は、タスクの先頭アドレスにジャンプすることで、まず、タスクのうち、同期必要処理を実行する（Ｓ１４０）。そして、各ＣＰＵ１は、同期必要処理の実行を完了すると、自身の終了フラグ７をセットし（Ｓ１５０）、次に、タスクのうち、同期不要処理を実行する（Ｓ１６０）。
【００４３】
各ＣＰＵ１は、同期不要処理を終了すると、Ｓ１１０に戻り、カウンタ１３のＬＳＢが“０”になれば（あるいは、既に“０”であれば）、再びＳ１３０以降の処理を行うことにより、次の単位処理（タスク）を実行する。
【００４４】
以上のようなプロセッサ１１では、各ＣＰＵ１ａ〜１ｄに対して終了フラグ７ａ〜７ｄが設けられている。また、各ＣＰＵ１ａ〜１ｄに共通のカウンタ１３が設けられている。そして、終了フラグ７ａ〜７ｄのうちの１つがセットされると、カウンタ１３が１インクリメントされ、全ての終了フラグ７ａ〜７ｄがセットされると、カウンタ１３が更に１インクリメントされると共に、終了フラグ７ａ〜７ｄがリセットされる。
【００４５】
そして、各ＣＰＵ１ａ〜１ｄは、全ての終了フラグ７ａ〜７ｄがセットされることで更新される偶数のカウンタ値に応じて、同期必要処理を実行すると共に、その同期必要処理を完了して自身の終了フラグ７をセットした後に、同期不要処理を実行する。
【００４６】
このようなプロセッサ１１において、各ＣＰＵ１ａ〜１ｄは、共通のカウンタ１３を参照して、同期必要処理を進めることができる。このため、プロセッサ１１の全体として、前述した従来の技術よりも、同期のための処理負荷を低減することができる。よって、同期のための処理の効率化が達成される。
【００４７】
また、各ＣＰＵ１ａ〜１ｄは、カウンタ値に応じて同期必要処理を実行するが、同期必要処理を完了して自身の終了フラグ７をセットしてから、次の同期必要処理を開始するまでの間に、同期不要処理を実行する。このため、処理の効率が一層向上する。
【００４８】
また、各処理の中に、必ずしも実行しなくても良い部分がある場合、ＣＰＵ１ａ〜１ｄのうちの少なくとも１つは、カウンタ１３のＬＳＢが“１”になった場合（カウンタ値がＯＲ回路１５により更新される奇数になった場合）に、その実行しなくても良い部分の処理をスキップする、といった制御を実施するように構成することができる。その場合、他の処理へすぐに移れるようにすることができ、処理の効率化に寄与することとなる。
【００４９】
また、各ＣＰＵ１ａ〜１ｄは、１つの専用命令で自身の終了フラグ７ａ〜７ｄをセットすることができる。よって、処理負荷が軽減される。また、同期必要処理から同期不要処理へ素早く移行することがきる。
【００５０】
また、カウンタ１３の操作（カウンタ値の更新）は、ＣＰＵ１ａ〜１ｄ以外の専用のハードウェア回路によって実施されるため、ＣＰＵ１ａ〜１ｄの処理負荷が一層軽減される。
【００５１】
ところで、カウンタ１３のビット数は、必ずしも２ビット以上でなくてもよく、最小の１ビットであっても良い。つまり、カウンタ１３のビット数は任意である。周期制御処理の１周期中にカウンタ値がオーバーフローする場合は、オーバーフローを考慮したインクリメントの検出ができるようにすれば良い。
【００５２】
尚、一部のＣＰＵ１に同期が不要な処理が続く場合、そのＣＰＵ１に同期が不要な複数の区間をまとめて処理させることも可能である。この場合、まとめた区間の次の区間の開始前に、カウンタ値が「２×[まとめた区間数]」だけインクリメントされるのを待ち合わせるようにすれば良い。また、カウンタ１３のビット数がＮであるとすると、「２の（Ｎ−１）乗」個までの処理をまとめることが可能である。
【００５３】
［第２実施形態］
次に、第２実施形態のプロセッサについて説明する。尚、第１実施形態と同様の構成要素や処理については、第１実施形態と同じ符号を用いることで、説明を省略する。そして、このことは、後述する他の実施形態についても同様である。
【００５４】
図４に示す第２実施形態のプロセッサ２１は、第１実施形態のプロセッサ１１と比較すると、前述の専用線９ａ〜９ｄが設けられておらず、各ＣＰＵ１ａ〜１ｄは、バス６を介して自身の終了フラグ７をセットする。このため、各ＣＰＵ１ａ〜１ｄは、一般的なソフトウェアの命令により、自身の終了フラグ７をセットする。
【００５５】
例えば、終了フラグ７ａ〜７ｄの個々に対するビット操作命令が無い場合には、各ＣＰＵ１ａ〜１ｄは、終了フラグ７ａ〜７ｄの全てを複数ビットのデータとして内部レジスタに読み出す命令と、読み出した複数ビットのうち、自身の終了フラグ７に該当するビットだけを“０”から“１”に置換する演算命令と、その演算命令実行後のデータを終了フラグ７ａ〜７ｄに書き込む命令と、を実行すれば良い。
【００５６】
このような第２実施形態のプロセッサ２１によっても、第１実施形態と同様の効果（但し、前述の専用命令による効果以外）が得られる。
［第３実施形態］
第３実施形態のプロセッサは、第１又は第２実施形態のプロセッサ１１，２１と比較すると、ＡＮＤ回路１６と加算回路１７を備えていない。そして、ＣＰＵ１ａ〜１ｄのうち、予め定められた１つのＣＰＵ１（ここではＣＰＵ１ａとして説明する）が、ＡＮＤ回路１６及び加算回路１７と同様の機能を果たす。その１つのＣＰＵ１ａは、例えばバス６を介して終了フラグ７ａ〜７ｄにアクセスすることができるようになっている。
【００５７】
図５に示すように、ＣＰＵ１ａは、単位処理のうちの同期必要処理を完了して、自身の終了フラグ７ａをセットすると、図５の右側に示すカウンタ操作処理を実行し、その後、同期不要処理を実行する。つまり、カウンタ操作処理は、ＣＰＵ１ａにおいて、図３のＳ１５０とＳ１６０との間で実行される。
【００５８】
ＣＰＵ１ａは、カウンタ操作処理では、Ｓ２１０にて、終了フラグ７ａ〜７ｄを読み込み、次のＳ２２０にて、終了フラグ７ａ〜７ｄが全て“１”になっている（即ち、セットされている）か否かを判定する。そして、終了フラグ７ａ〜７ｄが全て“１”でなければ、Ｓ２１０に戻る。
【００５９】
また、ＣＰＵ１ａは、Ｓ２２０にて、終了フラグ７ａ〜７ｄが全て“１”になっていると判定した場合には、Ｓ２３０に進み、カウンタ値を１インクリメントする。例えば、ＣＰＵ１ａは、現在のカウンタ値を読み出し、その読み出した値に１を加算した値を、カウンタ１３に書き込む。そして、ＣＰＵ１ａは、次のＳ２４０にて、全ての終了フラグ７ａ〜７ｄをリセットし、その後、当該カウンタ操作処理を終了する。
【００６０】
このような第３実施形態のプロセッサによっても、第１，第２実施形態と同様の効果が得られる。尚、ＣＰＵ１ａ〜１ｄのうち、終了フラグ７ａ〜７ｄを参照するのは、ＣＰＵ１ａだけで済む。
【００６１】
また、変形例として、図５のカウンタ操作処理は、同期不要処理の後で実行されても良い。
［第４実施形態］
第４実施形態のプロセッサは、第１又は第２実施形態のプロセッサ１１，２１と比較すると、ＯＲ回路１５、ＡＮＤ回路１６及び加算回路１７を備えていない。そして、各ＣＰＵ１ａ〜１ｄのうち、全ての終了フラグ７ａ〜７ｄがリセットされている状態から最初に終了フラグ７をセットしたＣＰＵ１が、ＯＲ回路１５、ＡＮＤ回路１６及び加算回路１７と同様の機能を果たす。
【００６２】
このため、各ＣＰＵ１ａ〜１ｄは、単位処理のうちの同期必要処理を完了して、自身の終了フラグ７ａをセットすると、図６のカウンタ操作処理を実行し、その後、同期不要処理を実行する。つまり、図６のカウンタ操作処理は、図３のＳ１５０とＳ１６０との間で実行される。また、各ＣＰＵ１ａ〜１ｄは、例えばバス６を介して終了フラグ７ａ〜７ｄにアクセスすることができるようになっている。
【００６３】
図６に示すように、各ＣＰＵ１は、カウンタ操作処理では、Ｓ２００にて、終了フラグ７ａ〜７ｄを読み込み、次のＳ２０５にて、終了フラグ７ａ〜７ｄのうち、自身の終了フラグ７だけが“１”であるか否かを判定する。そして、各ＣＰＵ１は、Ｓ２０５で否定判定（ＮＯと判定）した場合、即ち、自身の終了フラグ７以外の終了フラグ７も“１”であった場合には、そのまま当該カウンタ操作処理を終了する。
【００６４】
また、各ＣＰＵ１は、Ｓ２０５で肯定判定（ＹＥＳと判定）した場合、即ち、自身の終了フラグ７だけが“１”である場合には、最初に終了フラグ７をセットしたのが自分であるということであるため、Ｓ２０７に進み、カウンタ１３のＬＳＢに“１”をセットする。つまり、ＯＲ回路１５と同様の機能を果たす。
【００６５】
上記Ｓ２０７の処理を行ったＣＰＵ１は、その後、第３実施形態で説明した図５のＳ２１０〜Ｓ２４０と同じ処理を行うことにより、ＡＮＤ回路１６及び加算回路１７と同様の機能を果たし、その後、当該カウンタ操作処理を終了する。
【００６６】
このような第４実施形態のプロセッサによっても、第１，第２実施形態と同様の効果が得られる。尚、各ＣＰＵ１は、図６のカウンタ操作処理において、Ｓ２００，Ｓ２０５の処理を行うのは１回だけで済む。また、ＣＰＵ１ａ〜１ｄのうち、Ｓ２０７〜Ｓ２４０の処理を行うのは、Ｓ２０５で肯定判定した１つのＣＰＵ１だけで済む。
【００６７】
一方、変形例として、ＯＲ回路１５を設けるのであれば、図６のＳ２０７は削除することができる。
以上、本発明の実施形態について説明したが、本発明は上記実施形態に限定されることなく、種々の形態を採り得る。また、前述の数値も一例であり他の値でも良い。
【００６８】
例えば、第１〜第３実施形態において、ＯＲ回路１５を設けずに、ＣＰＵ１ａ〜１ｄが、カウンタ１３のＬＳＢに“１”をセットするように変形しても良い。具体例としては、各ＣＰＵ１ａ〜１ｄが、自身の終了フラグ７をセットした際に、カウンタ１３のＬＳＢに“１”をセットするよう構成しても良い。
【００６９】
また、前述の所定数は１に限らず、ＣＰＵ１の総数よりも小さい任意の数に設定することができる。例えば、ＯＲ回路１５に代えて、終了フラグ７ａ〜７ｄのうちの２つあるいは３つがセットされると、カウンタ１３のＬＳＢに“１”をセットする回路を設けても良い。また、カウンタ値をどのように更新していくかも任意であり、２ずつ増加させたり、３ずつ増加させたりするように構成しても良い。
【００７０】
また、上記実施形態における１つの構成要素が有する機能を複数の構成要素として分散させたり、複数の構成要素が有する機能を１つの構成要素に統合させたりしてもよい。また、上記実施形態の構成の少なくとも一部を、同様の機能を有する公知の構成に置き換えてもよい。また、上記実施形態の構成の一部を省略してもよい。また、上記実施形態の構成の少なくとも一部を、他の上記実施形態の構成に対して付加又は置換してもよい。なお、特許請求の範囲に記載した文言によって特定される技術思想に含まれるあらゆる態様が本発明の実施形態である。また、上述したプロセッサの他、当該プロセッサを構成要素とする制御装置やシステム、当該プロセッサの各ＣＰＵが実行するプログラム、このプログラムを記録した媒体、データ処理方法など、種々の形態で本発明を実現することもできる。
【符号の説明】
【００７１】
１ａ〜１ｄ…ＣＰＵ７ａ〜７ｄ…終了フラグ、１３…カウンタ、１５…ＯＲ回路、１６…ＡＮＤ回路、１７…加算回路
【図１】
2016024614.tif 000003
【図２】
2016024614.tif 000004
【図３】
2016024614.tif 000005
【図４】
2016024614.tif 000006
【図５】
2016024614.tif 000007
【図６】
2016024614.tif 000008