(57)【要約】      （修正有）【課題】マルチコアプロセッサを用いてキャッシュミスを起こさずに逐次プログラムを実行する制御装置を提供する。【解決手段】プログラムプロファイル情報と、予め用意したキャッシュメモリ情報（各コアのキャッシュメモリの容量、使用率）を用い、逐次プログラムをキャッシュメモリに収まるサイズのプログラムに分割し、分割したプログラムの情報をプログラム実行情報としてメモリへ格納する。逐次プログラムのプログラムプロファイル情報を取得するｓｂ０１。キャッシュメモリの情報を取得するｓｂ０２。プログラムプロファイル情報とキャッシュメモリ情報とに基づいて逐次プログラムの分割する分割アドレスを決定するｓｂ０３。分割プログラムのＩＤ、割り当てコア番号、プログラムの開始アドレス、終了アドレス、及びキャッシュ格納ブロック情報をプログラム実行情報としてメモリへ格納するｓｂ０４。【選択図】図５
2015200947.tif 000002
【特許請求の範囲】
【請求項１】
独立した命令キャッシュメモリを有するコアを複数備えたマルチコアプロセッサを具備し、前記命令キャッシュメモリの容量を超えるサイズの逐次プログラムを実行する制御装置であって、
前記逐次プログラムを格納するメモリと、
前記逐次プログラムの前記メモリ上の配置を解析してプログラムプロファイル情報を生成しメモリへ格納するプログラムプロファイル情報生成手段と、
前記プログラムプロファイル情報に基づいて、前記逐次プログラムを前記命令キャッシュメモリ内に収まるサイズの複数のプログラムに分割し、分割したプログラムのプログラム実行情報をメモリへ記憶するプログラム実行情報生成手段と、
前記プログラム実行情報に従って、前記分割されたプログラムを各コアの命令キャッシュメモリへ格納すると共に、プログラムを格納したキャッシュメモリを書き換え禁止にする手段と、
前記格納されたプログラムの実行を開始した後、前記プログラム実行情報に基づき次に実行する前記分割されたプログラムを別のコアの命令キャッシュメモリへ格納し、プログラムを格納したキャッシュメモリを書き換え禁止にする手段と、
先に実行中のプログラムの終了時に次に実行するプログラムの実行を開始すると共に、先にプログラムを実行したコアのキャッシュメモリの書き換え禁止を解除する手段と、
を具備した制御装置。
【請求項２】
前記分割された各プログラムの処理時間を見積もる処理時間見積手段と、
分割された各ブログラムを命令キャッシュメモリへ格納する時間を見積もるキャッシュ格納時間見積手段と、
実行中プログラムの終了までの残り実行時間が、次に実行するプログラムを命令キャッシュメモリへ格納するために必要な時間に到達したときに、命令キャッシュメモリへのプログラムの格納を開始する手段と、
を具備することを特徴とする請求項１の制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、工作機械を制御する制御装置に関し、特に、マルチコアプロセッサを使用して逐次プログラムを実行する制御装置に関する。
【背景技術】
【０００２】
図１６は従来の数値制御装置の構成を示す図である。数値制御装置１０は、数値制御部１１、ＰＭＣ部１２、サーボモータ制御部１３、アンプインタフェース部１４を備えている。数値制御部１１は、プロセッサコア２０、第１レベルのキャッシュメモリ（Ｌ１キャッシュ）２１、第２レベルのキャッシュメモリ（Ｌ２キャッシュ）２２、ＤＲＡＭ２４、周辺ＬＳＩ２５を備えており、各要素はバス２３を介して相互に接続されている。ＰＭＣ部１２は、プロセッサコア３０、第１レベルのキャッシュメモリ（Ｌ１キャッシュ）３１、第２レベルのキャッシュメモリ（Ｌ２キャッシュ）３２、ＤＲＡＭ３４、周辺ＬＳＩ３５を備えており、各要素はバス３３を介して相互に接続されている。機械側ＩＯユニット１６はフィールドバス１７を介してＰＭＣ部１２の周辺ＬＳＩ３５に接続されている。
【０００３】
サーボモータ制御部１３は、サーボ制御部プロセッサ４０、周辺制御ＬＳＩ４５を備えている。各要素はバス４３を介して相互に接続されている。アンプインタフェース部１４は周辺制御ＬＳＩ５５を備えている。モータ制御用アンプ１８はシリアルサーボバス１９を介してアンプインタフェース部１４の周辺制御ＬＳＩ５５に接続されている。数値制御部１１、ＰＭＣ部１２、サーボモータ制御部１３、および、アンプインタフェース部１４は、内部バス１５を介して相互に接続されている。
【０００４】
数値制御装置１０全体のメインのプロセッサである数値制御部１１のプロセッサコア２０は、一定周期で発生する割り込み毎に、ＰＭＣ部１２およびサーボモータ制御部１３での演算結果を内部バス１５経由で読み取り、それを元に演算した結果をＰＭＣ部１２およびサーボモータ制御部１３に同じく内部バス１５経由で書き込む。
【０００５】
工作機械を制御する数値制御装置のような制御装置では、サーボモータの位置と速度をリアルタイムに制御するために、優先度の高い大規模な逐次プログラムを一定の周期で所定の時間内に処理する必要がある。この逐次プログラムの処理時間は、数値制御装置の性能に大きな影響を与える。数値制御装置の機能追加による前記逐次プログラムのステップ数の増加により、その処理時間も増加する傾向にある。この逐次プログラムの処理時間が延びると、他のプロセスの処理時間を圧迫するだけでなく、この逐次プログラムが所定の時間内に処理を完了できなくなれば、工作機械を制御するシステムとして成り立たなくなってしまう。
【０００６】
この逐次プログラムの処理時間の問題は、もっぱらプロセッサの高速化技術（動作周波数、パイプライン、キャッシュメモリ、ブランチヒストリなど）によって解決されてきた。中でもプロセッサの動作周波数の高速化と、キャッシュメモリの大容量化によるところは大きい。
【０００７】
しかしながら、近年では消費電力と発熱量の増加の問題から、プロセッサの動作周波数は頭打ちとなり、動作周波数を抑えた省電力型のコアを複数実装したマルチコアプロセッサが主流となっている。数値制御装置においても、特許文献１で開示されているようにマルチコアプロセッサを使用する構成が提案されている。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開２０１４―３５５６４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
マルチコアプロセッサでは、スレッド化したプログラムを各コアで並列実行することによる性能向上が見込める一方で、スレッド化が困難な逐次プログラムの実行では、以下のようなキャッシュミスの増加の問題が存在する。
【００１０】
マルチコアプロセッサでは、第２レベル以降のキャッシュメモリを複数のコアで共有する構成が多く取られている。このような構成のマルチコアプロセッサにおいて、一のコアで前記逐次プログラムを実行中に、キャッシュメモリを共有する別のコアで他のプログラムを実行してしまうと、他のプログラムによる共有キャッシュメモリの書き換えが発生する。このため、同じ容量のキャッシュメモリを持つシングルコアのプロセッサで実行した場合に比べて、逐次プログラムでのキャッシュミスが発生しやすくなる。
【００１１】
キャッシュミスが発生した場合、プロセッサは、処理の実行に必要なデータを逐次プログラムが記憶されたメモリから読み出し、必要に応じて新たなデータをキャッシュメモリに格納する。このため、キャッシュメモリを利用できた場合と比較して多くの処理時間を要してしまう。
【００１２】
さらに、第１レベルの命令キャッシュメモリの容量を超える大規模な逐次プロセスを実行する場合、プログラム全体が一度に命令キャッシュメモリに収まらない。このため、逐次プログラムの実行中にも命令キャッシュメモリの書き換えが起こり、メモリ読み出しの待ち時間がプログラムの処理時間を延ばしてしまう。
【００１３】
上述のキャッシュミスを軽減する方法としては、連続するメモリブロックを命令キャッシュメモリへ先読みする命令キャッシュメモリのプリフェッチ機能が知られている。プリフェッチによりキャッシュヒット率は向上するが、キャッシュミスをなくすことは難しい。例えば、動的な条件分岐では、投機的なプリフェッチの失敗によるキャッシュミスが発生する。また、プロセッサの動作周波数に比較して、メモリの読み出し速度が遅いため、プリフェッチが間に合わずメモリの読み出し待ちが発生することもある。
【００１４】
そこで、本発明の目的は、上記従来技術の問題点を解決するため、マルチコアプロセッサを用いてキャッシュミスを起こさずに逐次プログラムを実行する制御装置を提供することである。
【課題を解決するための手段】
【００１５】
本願の請求項１に係る発明は、独立した命令キャッシュメモリを有するコアを複数備えたマルチコアプロセッサを具備し、前記命令キャッシュメモリの容量を超えるサイズの逐次プログラムを実行する制御装置であって、前記逐次プログラムを格納するメモリと、前記逐次プログラムの前記メモリ上の配置を解析してプログラムプロファイル情報を生成しメモリへ格納するプログラムプロファイル情報生成手段と、前記プログラムプロファイル情報に基づいて、前記逐次プログラムを前記命令キャッシュメモリ内に収まるサイズの複数のプログラムに分割し、分割したプログラムのプログラム実行情報をメモリへ記憶するプログラム実行情報生成手段と、前記プログラム実行情報に従って、前記分割されたプログラムを各コアの命令キャッシュメモリへ格納すると共に、プログラムを格納したキャッシュメモリを書き換え禁止にする手段と、前記格納されたプログラムの実行を開始した後、前記プログラム実行情報に基づき次に実行する前記分割されたプログラムを別のコアの命令キャッシュメモリへ格納し、プログラムを格納したキャッシュメモリを書き換え禁止にする手段と、先に実行中のプログラムの終了時に次に実行するプログラムの実行を開始すると共に、先にプログラムを実行したコアのキャッシュメモリの書き換え禁止を解除する手段と、を具備した制御装置である。
【００１６】
請求項２に係る発明は、前記分割された各プログラムの処理時間を見積もる処理時間見積手段と、分割された各ブログラムを命令キャッシュメモリへ格納する時間を見積もるキャッシュ格納時間見積手段と、実行中プログラムの終了までの残り実行時間が、次に実行するプログラムを命令キャッシュメモリへ格納するために必要な時間に到達したときに、命令キャッシュメモリへのプログラムの格納を開始する手段と、を具備することを特徴とする請求項１の制御装置である。
【発明の効果】
【００１７】
本発明により、命令キャッシュメモリの容量を超える規模の逐次プログラムを、キャッシュミスを起こさずに高速に実行することが可能な工作機械の制御装置を提供できる。
【図面の簡単な説明】
【００１８】
【図１】マルチコアプロセッサを用いた本発明の実施形態を示す図である。
【図２】逐次プログラムＰのメモリ上の配置を示す図である。
【図３】プログラムファイル情報生成部の処理を示すフローチャートである。
【図４】プログラムファイル情報の一例を示す図である。
【図５】プログラム実行情報生成部の処理を示すフローチャートである。
【図６】逐次プログラムＰの分割を示す図である。
【図７】命令キャッシュメモリの情報の例を示す図である。
【図８】プログラム実行情報の例を示す図である。
【図９】スケジューラ部の処理を示すフローチャートである。
【図１０】キャッシュ制御部のフローチャートである。
【図１１】請求項１に対応する実施形態のシーケンスを示す図である。
【図１２】処理時間見積部とキャッシュ格納時間見積部の処理を示すフローチャートである。
【図１３】プログラム実行情報の例を示す図である。
【図１４】請求項２の実施形態のスケジューラ部の処理を示すフローチャートである。
【図１５】請求項２に対応する実施形態のシーケンスを示す図である。
【図１６】従来の数値制御装置の構成を示す図である。
【発明を実施するための形態】
【００１９】
以下、本発明の実施形態を図面と共に説明する。なお、従来技術と同一または類似する構成は同じ符号を用いて説明する。  
図１はマルチコアプロセッサを用いた本発明の実施形態を示す図である。数値制御装置１０は、マルチコアプロセッサ７０、サーボモータ制御部１３、アンプインタフェース部１４を備えている。
【００２０】
マルチコアプロセッサ７０は３つのコアを有しており、それらは、第１数値制御部プロセッサコア７１、第２数値制御部プロセッサコア７２、および、ＰＭＣ制御部プロセッサコア７３として割り当てられている。各プロセッサコア７１，７２，７３には独立した第１レベルの命令キャッシュメモリがそれぞれ接続されている。第１数値制御部プロセッサコア７１には第１命令キャッシュメモリ（Ｌ１キャッシュ）７４が接続されている。第２数値制御部プロセッサコア７２には第２命令キャッシュメモリ（Ｌ１キャッシュ）７５が接続されている。ＰＭＣ制御部プロセッサコア７３には第３命令キャッシュメモリ（Ｌ１キャッシュ）７６が接続されている。
【００２１】
マルチコアプロセッサ７０は、第２レベルのキャッシュメモリを複数のコアで共有する構成を備えている。第１命令キャッシュメモリ７４、第２命令キャッシュメモリ７５、および、第３命令キャッシュメモリ７６は、第２レベルのキャッシュメモリであるキャッシュメモリ（Ｌ２キャッシュメモリ）７７に接続されている。
【００２２】
マルチコアプロセッサ７０、ＤＲＡＭ７９、統合化周辺ＬＳＩ６０はバス７８を介して相互に接続されている。機械側ＩＯユニット１６はフィールドバス１７を介して統合化周辺ＬＳＩ６０に接続されている。
【００２３】
サーボモータ制御部１３は、サーボ制御部プロセッサ４０、周辺制御ＬＳＩ４５を備えている。各要素はバス４３を介して相互に接続されている。アンプインタフェース部１４は周辺制御ＬＳＩ５５を備えている。モータ制御用アンプ１８はシリアルサーボバス１９を介してアンプインタフェース部１４の周辺制御ＬＳＩ５５に接続されている。マルチコアプロセッサ７０、サーボモータ制御部１３、および、アンプインタフェース部１４は、内部バス１５を介して相互に接続されている。
【００２４】
図１に示される数値制御装置１０において、逐次ブログラムＰは、例えば、キャッシュ情報にある二つのコア、コア番号１（第１数値制御部プロセッサコア７１）とコア番号２（第２数値制御部プロセッサコア７２）を交互に使用して実行される。
【００２５】
＜請求項１に対応する実施形態＞  
図２は逐次プログラムＰのメモリ（例えば、ＤＲＡＭ７９）上の配置を示す図である。図３はプログラムファイル情報生成部の処理を示すフローチャートである。図４はプログラムファイル情報の一例を示す図である。
【００２６】
図２に示されるように、逐次プログラムＰは、メインプログラムの開始アドレスがｐｓ，終了アドレスがｐｅで表される。そして、サブプログラムＦ１をアドレスｆ１ｂで呼び出す。サブプログラムＦ２をアドレスｆ２ｂで呼び出す。サブプログラムＦ３をアドレスｆ３ｂで呼び出す。サブプログラムＦ１の開始アドレスがｆ１ｓ，終了アドレスがｆ１ｅで表される。サブプログラムＦ２の開始アドレスがｆ２ｓ，終了アドレスがｆ２ｅで表される。サブプログラムＦ３の開始アドレスがｆ３ｓ，終了アドレスがｆ３ｅで表される。
【００２７】
第１の実施形態では、図３に示されるプログラムファイル情報生成部の処理として、メモリ（図１においてＤＲＡＭ７９）上の逐次プログラムＰ（図２）の配置を解析（図３参照）する。この解析により（ｓａ０１）、メインプログラムとメインプログラムから呼出されるサブプログラムの開始アドレス、終了アドレスと、サブプログラムの呼出し元アドレスの情報を収集する。そして、収集された情報をプログラムプロファイル情報としてメモリへ格納する（ｓａ０２）。
【００２８】
図２で示す逐次プログラムＰの場合、メインプログラムの開始アドレスｐｓ、終了アドレスｐｅと、３つのサブプログラムＦ１、Ｆ２、Ｆ３の呼出し元アドレスｆ１ｂ、ｆ２ｂ、ｆ３ｂと開始アドレスｆ１ｓ、ｆ２ｓ、ｆ３ｓと、終了アドレスｆ１ｅ、ｆ２ｅ、ｆ３ｅをプログラムプロファイル情報（図４）としてメモリ（図１においてＤＲＡＭ７９）へ格納する。
【００２９】
次に、プログラム実行情報生成部による逐次プログラムＰの分割方法を説明する。図５のプログラム実行情報生成部の処理を示すフローチャートに示すように、前記プログラムプロファイル情報（図４参照）と、予め用意した図７に示す命令キャッシュメモリ情報（各コアの命令キャッシュメモリの容量、使用率）を用いて、前記逐次プログラムＰを命令キャッシュメモリに収まるサイズのプログラムに分割し、分割したプログラムの情報をプログラム実行情報（図８参照）としてメモリへ格納する。
【００３０】
図５のプログラム実行情報生成部の処理を示すフローチャートを各ステップに従って説明する。逐次プログラムＰのプログラムプロファイル情報（図４参照）を取得する（ｓｂ０１）。命令キャッシュメモリ情報を取得する（ｓｂ０２）。プログラムプロファイル情報と命令キャッシュメモリ情報とに基づいて、逐次プログラムを分割する分割アドレスを決定する（ｓｂ０３）。分割プログラムのＩＤ、割り当てコア番号、プログラムの開始アドレス、終了アドレス、及びキャッシュ格納ブロック情報がプログラム実行情報としてメモリ（図１ではＤＲＡＭ７９）へ格納する（ｓｂ０４）。
【００３１】
次に図６に示す逐次プログラムＰの分割について具体的に説明する。  
図６は逐次プログラムＰの分割を示す図である。図７は命令キャッシュメモリの情報を示す図である。図８はプログラム実行情報を示す図である。  
まず、プログラムプロファイル情報（図４参照）から、コア番号１の命令キャッシュメモリ容量ｃ１＿ｓｉｚｅ×使用率ｃ１＿ｒａｔｅのサイズ以内になるような分割アドレス＜１＞を決定し、分割プログラムＰ１とする。
【００３２】
分割プログラムＰ１の開始アドレスｐ１＿ｓｔａｒｔ、終了アドレスｐ１＿ｅｎｄと、命令キャッシュメモリへ格納するブロック１の開始アドレスｐ１ｂｌｏｃｋ１＿ｓｔａｒｔとサイズｐ１ｂｌｏｃｋ１＿ｓｉｚｅ、ブロック２の開始アドレスｐ１ｂｌｏｃｋ２＿ｓｔａｒｔとサイズｐ１ｂｌｏｃｋ２＿ｓｉｚｅをプログラム実行情報（図８参照）としてメモリへ格納する。
【００３３】
次に、コア番号２の命令キャッシュメモリ容量ｃ２＿ｓｉｚｅ×ｃ２＿ｒａｔｅのサイズ以内になるような分割アドレス＜２＞を決定し、分割プログラムＰ２とする。分割プログラムＰ２の開始アドレスｐ２＿ｓｔａｒｔ、終了アドレスｐ２＿ｅｎｄと、命令キャッシュメモリへ格納するブロック１の開始アドレスｐ２ｂｌｏｃｋ１＿ｓｔａｒｔとサイズｐ２ｂｌｏｃｋ１＿ｓｉｚｅ、ブロック２の開始アドレスｐ２ｂｌｏｃｋ２＿ｓｔａｒｔとサイズｐ２ｂｌｏｃｋ２＿ｓｉｚｅをプログラム実行情報としてメモリへ格納する。
【００３４】
以降、同様に分割アドレス＜３＞、分割アドレス＜４＞を決定し、分割アドレスで分割したプログラムを分割プログラムＰ３、Ｐ４、Ｐ５とし、それぞれのプログラムの開始アドレス、終了アドレス、ブロック開始アドレスとサイズをプログラム実行情報としてメモリへ格納する。
【００３５】
図８はメモリに格納されたプログラム実行情報を示す図である。  
分割プログラムＰ１のプログラム実行情報は、
割当コア番号              ：１
ブロック開始アドレス      ：ｐ１＿ｓｔａｒｔ
プログラム終了アドレス    ：ｐ１＿ｅｎｄ
キャッシュ格納ブロック情報
ブロック１の開始アドレス  ：ｐ１ｂｌｏｃｋ１＿ｓｔａｒｔ
ブロック１のサイズ        ：ｐ１ｂｌｏｃｋ１＿ｓｉｚｅ
ブロック２の開始アドレス  ：ｐ１ｂｌｏｃｋ２＿ｓｔａｒｔ
ブロック２のサイズ        ：ｐ１ｂｌｏｃｋ２＿ｓｉｚｅ
【００３６】
分割プログラムＰ２のプログラム実行情報は、
割当コア番号              ：２
ブロック開始アドレス      ：ｐ２＿ｓｔａｒｔ
プログラム終了アドレス    ：ｐ２＿ｅｎｄ
キャッシュ格納ブロック情報
ブロック１の開始アドレス  ：ｐ２ｂｌｏｃｋ１＿ｓｔａｒｔ
ブロック１のサイズ        ：ｐ２ｂｌｏｃｋ１＿ｓｉｚｅ
ブロック２の開始アドレス  ：ｐ２ｂｌｏｃｋ２＿ｓｔａｒｔ
ブロック２のサイズ        ：ｐ２ｂｌｏｃｋ２＿ｓｉｚｅ
【００３７】
分割プログラムＰ３のプログラム実行情報は、
割当コア番号              ：１
ブロック開始アドレス      ：ｐ３＿ｓｔａｒｔ
プログラム終了アドレス    ：ｐ３＿ｅｎｄ
キャッシュ格納ブロック情報
ブロック１の開始アドレス  ：ｐ３ｂｌｏｃｋ１＿ｓｔａｒｔ
ブロック１のサイズ        ：ｐ３ｂｌｏｃｋ１＿ｓｉｚｅ
ブロック２の開始アドレス  ：ｐ３ｂｌｏｃｋ２＿ｓｔａｒｔ
ブロック２のサイズ        ：ｐ３ｂｌｏｃｋ２＿ｓｉｚｅ
【００３８】
分割プログラムＰ４のプログラム実行情報は、
割当コア番号              ：２
ブロック開始アドレス      ：ｐ４＿ｓｔａｒｔ
プログラム終了アドレス    ：ｐ４＿ｅｎｄ
キャッシュ格納ブロック情報
ブロック１の開始アドレス  ：ｐ４ｂｌｏｃｋ１＿ｓｔａｒｔ
ブロック１のサイズ        ：ｐ４ｂｌｏｃｋ１＿ｓｉｚｅ
ブロック２の開始アドレス  ：ｐ４ｂｌｏｃｋ２＿ｓｔａｒｔ
ブロック２のサイズ        ：ｐ４ｂｌｏｃｋ２＿ｓｉｚｅ
【００３９】
分割プログラムＰ５のプログラム実行情報は、
割当コア番号              ：１
ブロック開始アドレス      ：ｐ５＿ｓｔａｒｔ
プログラム終了アドレス    ：ｐ５＿ｅｎｄ
キャッシュ格納ブロック情報
ブロック１の開始アドレス  ：ｐ５ｂｌｏｃｋ１＿ｓｔａｒｔ
ブロック１のサイズ        ：ｐ５ｂｌｏｃｋ１＿ｓｉｚｅ
ブロック２の開始アドレス  ：ｐ５ｂｌｏｃｋ２＿ｓｔａｒｔ
ブロック２のサイズ        ：ｐ５ｂｌｏｃｋ２＿ｓｉｚｅ
【００４０】
次に、各コアでの分割したプログラムの実行を、図９，図１０，図１１を用いて説明する。図９はスケジューラ部の処理を示すフローチャートである。図１０はキャッシュ制御部のフローチャートである。図１１は請求項１に対応する実施形態のシーケンスを示す図である。なお、図１１において、命令キャッシュメモリは紙面のスペースの都合からキャッシュと略記している。
【００４１】
以下、図９のスケジューラ部の処理のフローチャートを各ステップに従って説明する。制御装置のメモリからプログラム実行情報を取得する（ｓｃ０１）。実行する分割プログラムがある場合には（ｓｃ０２）、命令キャッシュ制御部へ命令キャッシュメモリへの格納を要求する（ｓｃ０３）。命令キャッシュメモリへの格納が完了した場合（ｓｃ０４）、先に実行中の分割プログラムがあるか否か確認し（ｓｃ０５）、先に実行中の分割プログラムがある場合には、先に実行したプログラムが終了を待って（ｓｃ０６）、または、先に実行中の分割プログラムがない場合には、格納が完了した分割プログラムの実行を開始し（ｓｃ０７）、ステップｓｃ０２へ戻り処理を継続する。
【００４２】
図１０はキャッシュ制御部のフローチャートである。以下、各ステップに従って説明する。プログラム格納要求があるか否かを判断し（ｓｄ０１）、プログラム格納要求がある場合には格納するプログラム番号を取得し（ｓｄ０２）、プログラム実行情報から格納する分割プログラムのアドレスとサイズを取得し命令キャッシュメモリへ格納し（ｓｄ０３）、格納した分割プログラムの命令キャッシュメモリブロックを書き換え禁止に設定し（ｓｄ０４）、一方、プログラム格納要求がない場合には、書き換え禁止の解除要求を確認し（ｓｄ０５）、書き換え禁止の解除要求がある場合には、書き換え禁止を解除するプログラム番号を取得し（ｓｄ０６）、プログラム実行情報から書き換え禁止を解除するプログラムのアドレスとサイズを取得し、書き換え禁止を解除する（ｓｄ０７）。
【００４３】
図９のスケジューラ部のフローチャートに示すように、コア共通のスケジューラ部は、逐次プログラムＰの起動開始の充分以前に、前記プログラム実行情報（図８参照）に基づいて、キャッシュ制御部へ、分割プログラムＰ１の命令キャッシュメモリへの格納と、前記プログラムＰ１が格納された命令キャッシュメモリの書き換え禁止（命令キャッシュメモリのロック）を要求する。
【００４４】
前記要求を受け取ったキッシュ制御部は、図１０のフローチャートに示すように、プログラムＰ１を命令キャッシュメモリへ格納し、プログラムＰ１を格納した命令キャッシュメモリをロックした後、スケジューラ部へ完了を返す。スケジューラ部は、前記キャッシュ制御部からの完了を受け取り後、逐次プログラムＰの起動開始時間になると、前記プログラムＰ１を起動する。
【００４５】
次に、スケジューラ部は、前記プログラムＰ１の実行中に、プログラム実行情報に基づいて次に実行するプログラムＰ２のコア２の命令キャッシュメモリへの格納と、プログラムＰ２が格納された命令キャッシュメモリのロックをコア２のキャッシュ制御部へ要求する。前記要求を受け取ったキッシュ制御部は、プログラムＰ２を命令キャッシュメモリへ格納し、プログラムＰ２を格納した命令キャッシュメモリをロックする。
【００４６】
スケジューラ部は、前記キャッシュ制御部への要求の完了後、且つ、先に実行したプログラムＰ１が終了した後、直ちにプログラムＰ２の実行を開始すると共に、先にプログラムＰ１を実行したコア１の命令キャッシュメモリのロックの解除をキャッシュ制御部へ要求する。  
以降、同様の手順でプログラムＰ３、Ｐ４、Ｐ５を実行する。
【００４７】
＜請求項２に対応する実施形態＞  
図１２は処理時間見積部とキャッシュ格納時間見積部の処理を示すフローチャートである。図１３はプログラム実行情報の例を示す図である。図１４は請求項２の実施形態のスケジューラ部の処理を示すフローチャートである。図１５は請求項２に対応する実施形態のシーケンスを示す図である。なお、図１５において、命令キャッシュメモリは紙面のスペースの都合からキャッシュと略記している。
【００４８】
請求項２に対応する実施形態では請求項１に対応する実施形態において更に、処理時間見積部にて、メモリ上のプログラムデータを解析し、分割された各プログラムの処理時間を見積もりプログラム実行情報へ格納し、さらに、命令キャッシュメモリ格納時間見積部にて、プログラム実行情報から、分割された各プログラムを命令キャッシュメモリへ格納する時間を見積もりプログラム実行情報へ格納する構成を備えている（図１２参照）。
【００４９】
図１２は処理時間見積部とキャッシュ格納時間見積部の処理を示すフローチャートである。各ステップに従って説明すると、分割したプログラム実行情報を取得し（ｓｅ０１）、プログラム実行情報に基づいて、プログラムの処理時間を見積もり、プログラム実行情報へ追加格納し（ｓｅ０２）、プログラム実行情報に基づいて、プログラムを命令キャッシュメモリへ格納する時間を見積もり、プログラム実行情報へ追加格納する（ｓｅ０３）。ここで、（ｓｅ０２）の処理は処理時間見積部に対応し、（ｓｅ０３）はキャッシュ格納時間見積部に対応する。
【００５０】
スケジューラ部は、ｎ番目のプログラムＰｎの命令キャッシュメモリへの格納要求を、ｎ−１番目のプログラムを起動してから命令キャッシュメモリ格納開始時間＝（ｎ−１番目のプログラムの処理時間ｐ（ｎ-１）ｒｕｎ＿ｔｉｍｅ  −  ｎ番目のプログラムのキャッシュ格納時間ｐｎｓａｖｅ＿ｔｉｍｅ）だけ経過した後に実行する（ｎ＞１）。なお、プログラムＰ１の命令キャッシュメモリへの格納要求は、逐次プログラムの周期起動時間より命令キャッシュメモリ格納時間だけ以前に実行する。
【００５１】
実施例では、図１４のスケジューラ部の処理のフローチャートに示すように、スケジューラ部は、セットした時間後にタイマイベントをスケジューラ部へ通知するタイマ制御部へ前記命令キャッシュメモリ格納開始時間をセットし、前記セットした時間後に発生するタイマイベントによってｎ番目のプログラムＰｎの命令キャッシュメモリへの格納をキャッシュ制御部へ要求する。
【００５２】
なお、スケジューラ部は、プログラムＰ１を開始するために、前もって、逐次プログラムの起動周期時間よりｐ１ｓａｖｅ＿ｔｉｍｅだけ以前にタイマイベントが発生するように、タイマ制御部へタイマ値をセットする。前記タイマイベントにより、スケジューラ部は、プログラムＰ１をコア１の命令キャッシュメモリへ格納し、プログラムＰ１を格納した命令キャッシュメモリをロックするようキャッシュ制御部へ要求する。
【００５３】
前記要求を受け取ったキャッシュ制御部は、図１０のキャッシュ制御部の処理のフローチャートに従って、プログラムＰ１を命令キャッシュメモリへ格納し、プログラムＰ１を格納した命令キャッシュメモリをロックした後、スケジューラ部へ完了を返す。
【００５４】
スケジューラ部は、前記キャッシュ制御部からの完了の通知を受け取った後、逐次プログラムの起動開始時間になると、前記プログラムＰ１を起動すると共に、タイマ制御部へｐ１ｒｕｎ＿ｔｉｍｅ  −  ｐ２ｓａｖｅ＿ｔｉｍｅのタイマをセットする。次に、前記タイマ制御部からのタイマイベントによって、スケジューラ部は、プログラム実行情報に基づいてコア２のキャッシュ制御部へプログラムＰ２の命令キャッシュメモリへの格納と、プログラムＰ２が格納された命令キャッシュメモリのロックを要求する。
【００５５】
前記要求を受け取ったキッシュ制御部は、プログラムＰ２を命令キャッシュメモリへ格納し、プログラムＰ２を格納した命令キャッシュメモリをロックした後、スケジューラ部へ完了を返す。
【００５６】
スケジューラ部は、前記キャッシュ制御部への要求の完了を受け取り、且つ、先に実行したプログラムＰ１が終了した後、直ちにプログラムＰ２の実行を開始すると共に、タイマ制御部へｐ２ｒｕｎ＿ｔｉｍｅ  −  ｐ３ｓａｖｅ＿ｔｉｍｅのタイマをセットし、先にプログラムＰ１を実行したコア１の命令キャッシュメモリのロックの解除をキャッシュ制御部へ要求する。以降、同様の手順でプログラムＰ３、Ｐ４、Ｐ５を実行する（図１５）。
【００５７】
これにより、逐次プログラムＰの実行による命令キャッシュメモリのロック時間が最小となり、システム全体としての性能向上が見込まれる。
【符号の説明】
【００５８】
１０  数値制御装置
１１  数値制御部
１２  ＰＭＣ部
１３  サーボモータ制御部
１４  アンプインタフェース部
１５  内部バス
１６  機械側ＩＯユニット
１７  フィールドバス
１８  モータ制御用アンプ
１９  シリアルサーボバス
２０  プロセッサコア
２１  Ｌ１キャッシュ
２２  Ｌ２キャッシュ
２３  バス
２４  ＤＲＡＭ
２５  周辺ＬＳＩ
３０  プロセッサコア
３１  Ｌ１キャッシュ
３２  Ｌ２キャッシュ
３３  バス
３４  ＤＲＡＭ
３５  周辺ＬＳＩ
４０  サーボ制御部プロセッサ
４３  バス
４５  周辺制御ＬＳＩ
５５  周辺制御ＬＳＩ
６０  統合化周辺ＬＳＩ
７０  マルチコアプロセッサ
７１  第１数値制御部プロセッサコア
７２  第２数値制御部プロセッサコア
７３  ＰＭＣ制御部プロセッサコア
７４  第１命令キャッシュメモリ
７５  第２命令キャッシュメモリ
７６  第３命令キャッシュメモリ
７７  Ｌ２キャッシュメモリ
７８  バス
７９  ＤＲＡＭ
Ｐ  逐次プログラム
Ｆ１，Ｆ２，Ｆ３  サブプログラム
【図１】
2015200947.tif 000003
【図２】
2015200947.tif 000004
【図３】
2015200947.tif 000005
【図４】
2015200947.tif 000006
【図５】
2015200947.tif 000007
【図７】
2015200947.tif 000008
【図８】
2015200947.tif 000009
【図９】
2015200947.tif 000010
【図１０】
2015200947.tif 000011
【図１２】
2015200947.tif 000012
【図１４】
2015200947.tif 000013
【図１６】
2015200947.tif 000014
【図６】
2015200947.tif 000015
【図１１】
2015200947.tif 000016
【図１３】
2015200947.tif 000017
【図１５】
2015200947.tif 000018