(57)【要約】【課題】プログラム実行時の処理速度が改善されるデュアルコア向け自動コード生成装置を提供する。【解決手段】キーボード１０３およびマウス１０４によって入力される制御仕様１０１に基づいて制御コードを生成する。この際、キーボード１０３およびマウス１０４によって入力されるマルチコア構成条件１０２から、異なるＣＰＵで共通使用する静的変数がある場合に、一定の基準によって、実装するＣＰＵを選択する。【選択図】図１
2008262340.tif 000002
【特許請求の範囲】
【請求項１】
入力手段（１０３，１０４）によって入力される制御仕様（１０１）に基づいて制御コードを生成する際に、入力手段（１０３，１０４）によって入力されるマルチコア構成条件（１０２）から、異なるＣＰＵで共通使用する静的変数がある場合に、一定の基準によって、実装するＣＰＵを選択するようにしたことを特徴とするデュアルコア向け自動コード生成装置。
【請求項２】
請求項１に記載のデュアルコア向け自動コード生成装置において、
実装するＣＰＵを選択する判定基準として、単位時間当たりのアクセス時間を算出し用いることを特徴とするデュアルコア向け自動コード生成装置。
【請求項３】
請求項２に記載のデュアルコア向け自動コード生成装置において、
単位時間として、同一の静的変数にアクセスする周期の最小公倍数を用いることを特徴とするデュアルコア向け自動コード生成装置。
【請求項４】
請求項１に記載のデュアルコア向け自動コード生成装置において、
実装するＣＰＵを選択する判定基準として、アクセス回数のみを用いることを特徴とするデュアルコア向け自動コード生成装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、デュアルコア向けの自動コード生成技術に関するものである。
【背景技術】
【０００２】
車両を制御するためのコードを自動で生成する技術が知られている（例えば特許文献１）。
一方、シングルコアにおいて、静的変数への書き込み／参照を管理する方法として、次のような手法が一般的に行われている。
【０００３】
静的変数への書き込み／参照を特定のアクセス関数に限定して、静的変数とアクセス関数をセットで定義して扱う。
【特許文献１】特開２００３−２９６１１１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
シングルコアにおいては、静的変数とアクセス関数は必ず同一ＣＰＵに定義されるため、書込／参照を行うために必要なアクセス時間はそれぞれ一律である。
一方、デュアルコアにおいては、異なるＣＰＵの静的変数にアクセスした場合に、自ＣＰＵの静的変数にアクセスするよりも時間が余分に掛かる。そのため、異なるＣＰＵで共通使用する静的変数がある場合には、その静的変数とアクセス関数の処理時間が最適になるよう考慮しなければならないという問題がある。
【０００５】
本発明は、上記問題点に着目してなされたものであり、その目的は、プログラム実行時の処理速度が改善されるデュアルコア向け自動コード生成装置を提供することにある。
【課題を解決するための手段】
【０００６】
請求項１に記載の発明によれば、入力手段によって入力される制御仕様に基づいて制御コードを生成する際に、入力手段によって入力されるマルチコア構成条件から、異なるＣＰＵで共通使用する静的変数がある場合に、一定の基準によって、実装するＣＰＵが選択される。よって、デュアルコアにおいて、異なるＣＰＵで共有する静的変数がある場合に、自動コード生成装置によって生成されたコードのプログラム実行時の処理速度を改善することが可能となる。
【０００７】
請求項２に記載のように、請求項１に記載のデュアルコア向け自動コード生成装置において、実装するＣＰＵを選択する判定基準として、単位時間当たりのアクセス時間を算出し用いることにより、様々な処理タイミングが混在した状態でも判定を行なうことが可能となる。
【０００８】
請求項３に記載のように、請求項２に記載のデュアルコア向け自動コード生成装置において、単位時間として、同一の静的変数にアクセスする周期の最小公倍数を用いることにより、静的変数のアクセス時間について、必要十分な単位時間を求めることができる。
【０００９】
請求項４に記載のように、請求項１に記載のデュアルコア向け自動コード生成装置において、実装するＣＰＵを選択する判定基準として、アクセス回数のみを用いる。これは、静的変数へのアクセス時間が可変で指標とできない場合や、アクセス時間の情報が無い場合等において、有用である。
【発明を実施するための最良の形態】
【００１０】
以下、本発明を具体化した一実施形態を図面に従って説明する。
図１には、本実施形態におけるデュアルコア向け自動コード生成装置の全体構成を示す。図１において、自動コード生成装置はパソコンにて構成され、プログラム生成ルーチン１０５と静的変数実装判定ルーチン１０６とアクセス時間記憶ファイル１０７とプログラム出力ルーチン１０８と制御コード記憶ファイル１０９を具備している。パソコンにはキーボード１０３とマウス１０４が接続され、キーボード１０３とマウス１０４によって制御仕様１０１およびマルチコア構成条件１０２が入力される。本実施形態では制御仕様１０１は車載用制御ＥＣＵ（電子制御ユニット）の制御仕様である。この制御仕様１０１は自動コード生成装置において制御プログラムに変換される。プログラム生成ルーチン１０５は制御仕様１０１に応じた制御プログラムの制御コードを、静的変数実装判定ルーチン１０６を介して制御コード記憶ファイル１０９に要求する。制御コード記憶ファイル１０９には多数の制御コードが記憶されており、要求により、制御仕様１０１に対応する制御プログラムの制御コードが選択される。プログラム生成ルーチン１０５は選択した制御コードを受け取り、プログラム出力ルーチン１０８を介して自動コード生成装置の外部に出力する。
【００１１】
静的変数実装判定ルーチン１０６はアクセス時間を算出してアクセス時間記憶ファイル１０７に記憶する。このアクセス時間に基づいて、異なるＣＰＵで共通使用する静的変数がある場合に、実装するＣＰＵが選択されることになる。
【００１２】
図２には、デュアルコアの構成例を示す。
図３には、全体フローの例を示す。
図３のフローを用いて、異なるＣＰＵで共通使用する静的変数がある場合における、実装するＣＰＵを選択するための判定方法を説明する。
【００１３】
図３のステップ３０１において、制御仕様１に対応する制御プログラムを読み込む。このとき、デフォルト状態として、静的変数は書き込みを行うプログラム部品と同じＣＰＵに配置されているものとする。
【００１４】
図２の例では、ＲＯＭ１（２０１）の制御ロジック部品１が書き込む全ての静的変数がＲＡＭ１（２０９）の変数定義部品１に定義されている。同様に、ＲＯＭ２（２０２）の制御ロジック部品２が書き込む全ての静的変数がＲＡＭ２（２１０）の変数定義部品２に定義されている。
【００１５】
次に、図３のステップ３０２において別ＣＰＵからのアクセスがあるか否か、即ち、異なるＣＰＵで共通使用する静的変数があるか否か判定する。このとき、図２の例では、ＣＰＵ１（２０３）の処理において、ＲＯＭ１（２０１）の制御ロジック部品１がＲＡＭ１（２０９）の変数定義部品１へのアクセス２０６しか存在しない場合は別ＣＰＵからのアクセスが無いためステップ３０６へ進む。一方、図２のＲＯＭ１（２０１）の制御ロジック部品１からＲＡＭ２（２１０）の変数定義部品２へのアクセス２０５がある場合は、別ＣＰＵからのアクセスがあると判断し、ステップ３０３へ進む。
【００１６】
図３のステップ３０３において、静的変数について単位時間当たりのアクセス時間を算出する。図２の例では、単位時間当たりのＣＰＵ１（２０３）のアクセス時間の合計は、ＲＡＭ１（２０９）の変数定義部品１へのアクセス２０６の時間と回数の積と、ＲＡＭ２（２１０）の変数定義部品２へのアクセス２０５の時間と回数の積の和によって算出することができる。同様に、ＣＰＵ２（２０４）のアクセス時間の合計は、ＲＡＭ１（２０９）の変数定義部品１へのアクセス２０８の時間と回数の積と、ＲＡＭ２（２１０）の変数定義部品２へのアクセス２０７の時間と回数の積の和によって算出する。
【００１７】
図３のステップ３０３の処理を実行した後に、ステップ３０４に移行する。ステップ３０４においてはステップ３０３で算出した各ＣＰＵの単位時間当たりのアクセス時間を比較して、静的変数を別ＣＰＵに配置した方が総アクセス時間が短くなる場合は、ステップ３０５で、静的変数の配置場所が別ＣＰＵになるよう制御プログラムを書き換える。図２の例では、静的変数定義情報をＲＡＭ１（２０９）の変数定義部品１からＲＡＭ２（２１０）の変数定義部品２へ、或いは逆に移動する。
【００１８】
図３のステップ３０５の処理を実行した後にステップ３０６に移行する。また、ステップ３０４において同じＣＰＵに配置した方がＣＰＵの単位時間当たりのアクセス時間が短くなる場合はステップ３０５を迂回してステップ３０６に移行する。ステップ３０６では、全ての静的変数について実装ＣＰＵ判定が終了したか否か判定し、終了していないとステップ３０２に戻り、終了した場合は処理を終了する。
【００１９】
以上の、異なるＣＰＵで共通使用する静的変数がある場合に、全体での処理時間が短くなるＣＰＵ側へ静的変数を実装する操作について、図４の例を用いて説明する。
図４は車載用制御ＥＣＵ（電子制御ユニット）を示し、エンジン燃料噴射制御用のＣＰＵ１と、オートマチックトランスミッション制御用のＣＰＵ２を有している。
【００２０】
ＣＰＵ１においてクランクアングルを入力してクランクアングルからエンジン回転数が算出され、エンジン燃料噴射制御に用いられる。一方、ＣＰＵ２において、ＣＰＵ１で算出したエンジン回転数からトランスミッションインプット回転数が算出され、このトランスミッションインプット回転数およびＣＰＵ１で算出したエンジン回転数がオートマチックトランスミッション制御に用いられる。
【００２１】
このような前提の下に、図３におけるステップ３０１で、制御プログラムを読み込む。デフォルト状態として、図４のＣＰＵ１には、Ａ／Ｄ入力処理（４０１）と、回転数算出処理（４０２）があり、それぞれの処理が書き込みを行う静的変数として、ｒａｍＲＣＡ（４０３）、ｒａｍＲＥＮ（４０４）があり、それらの静的変数はＲＡＭ１に定義されているとする。ＣＰＵ２には、ＲＡＭ算出処理（４０６）と、シフト制御処理（４０７）があり、それぞれｒａｍＲＥＮ（４０４）を参照する。また、静的変数であるｒａｍＲＴＣ（４０５）はＣＰＵ２内の処理から書き込みされるため、ＲＡＭ２に定義されているとする。
【００２２】
図３のステップ３０２で、別ＣＰＵからのアクセスがあるか否か、即ち、異なるＣＰＵで共通使用する静的変数があるか否か判定する。図４のｒａｍＲＣＡ（４０３）及びｒａｍＲＴＣ（４０５）については同一ＣＰＵ内のみのアクセスしか存在しないため、図３のステップ３０６へ進む。図４のｒａｍＲＥＮ（４０４）の場合は、ＣＰＵ１内での書き込みの他、ＣＰＵ２からの参照が存在するため、図３のステップ３０３へ進む。
【００２３】
ステップ３０３で、静的変数について単位時間当たりのアクセス時間を算出する。ここでは、図５に示すタイミングチャートのようになっているものとする。図５は、［Ｉ］としてＣＰＵ１側にｒａｍＲＥＮ（４０４）を設定した場合と、［ＩＩ］としてＣＰＵ２側にｒａｍＲＥＮ（４０４）を設定した場合を示し、かつ、［Ｉ］，［ＩＩ］において、図４での回転数算出処理（４０２）からｒａｍＲＥＮ（４０４）への書き込み、ＲＡＭ算出処理（４０６）からｒａｍＲＥＮ（４０４）への参照、シフト制御処理（４０７）からｒａｍＲＥＮ（４０４）への参照のタイミングを示している。この図５において、簡単のため同一ＣＰＵ内からのアクセス時間を３サイクル、即ち、ＣＰＵの動作クロックにおけるクロックパルス数「３」とするとともに、別ＣＰＵからのアクセス時間を５サイクル、即ち、ＣＰＵの動作クロックにおけるクロックパルス数「５」とする。また、回転数算出処理（４０２）からｒａｍＲＥＮ（４０４）への書き込みは２ｍｓ毎に行われ、ＲＡＭ算出処理（４０６）とシフト制御処理（４０７）からｒａｍＲＥＮ（４０４）への参照は、３ｍｓ毎に行われるとする。
【００２４】
アクセス時間を求める単位時間として、２ｍｓと３ｍｓの最小公倍数である６ｍｓを用いた場合、ＣＰＵ１からのアクセス回数は３回、ＣＰＵ２からのアクセス回数は４回（＝２回＋２回）となり、静的変数ｒａｍＲＥＮ（４０４）についての単位時間当たりのアクセス時間は以下のように求めることができる。
【００２５】
１．ＣＰＵ１配置でのアクセス時間の合計は、２９サイクル（＝３回×３サイクル＋４回×５サイクル）、即ち、ＣＰＵの動作クロックにおけるクロックパルス数「２９」（＝３回×３クロックパルス＋４回×５クロックパルス）
２．ＣＰＵ２配置でのアクセス時間の合計は、２７サイクル（＝３回×５サイクル＋４回×３サイクル）、即ち、ＣＰＵの動作クロックにおけるクロックパルス数「２７」（＝３回×５クロックパルス＋４回×３クロックパルス）。
【００２６】
図３のステップ３０４において、ステップ３０３で算出した単位時間当たりのアクセス時間を比較して、ステップ３０５においてアクセス時間が短くなるよう静的変数の配置場所を書き換える。
【００２７】
図５の場合、ｒａｍＲＥＮ（４０４）への参照時間は、現在のＣＰＵ１に配置した場合には２９サイクル、即ち、２９クロックパルスであるが、ＣＰＵ２に配置し直した場合には２７サイクル、即ち、２７クロックパルスとなるため、静的変数の配置場所をＣＰＵ２に移動する。
【００２８】
上記実施形態によれば、以下のような効果を得ることができる。
（１）入力手段としてのキーボード１０３およびマウス１０４によって入力される制御仕様１０１に基づいて制御コードを生成する際に、入力手段としてのキーボード１０３およびマウス１０４によって入力されるマルチコア構成条件１０２から、異なるＣＰＵで共通使用する静的変数がある場合に、一定の基準によって、実装するＣＰＵを選択するようにした。詳しくは、デュアルコアにおいて、異なるＣＰＵで共有する静的変数がある場合には、単位時間当たりのアクセス回数（アクセス関数の呼ばれる回数）と、アクセス時間の両方の評価を自動で行うことにより、総アクセス時間（全体での処理時間）が短くなるＣＰＵ側へ静的変数を実装する。これにより、当該装置によって生成されたコードのプログラム実行時の処理速度が改善される。
【００２９】
（２）実装するＣＰＵを選択する判定基準として、単位時間当たりのアクセス時間を算出し用いたので、様々な処理タイミング（アクセスする周期）が混在した状態でも判定を行なうことが可能となる。
【００３０】
（３）単位時間として、同一の静的変数にアクセスする周期（アクセスする関数の処理タイミング）の最小公倍数を用いたので、静的変数のアクセス時間について、必要十分な単位時間を求めることができる。
【００３１】
なお、図３，４ではアクセス時間を基準として、実装するＣＰＵを選択することとしたが、この図３，４に代わり、次のようにしてもよい。
静的変数へのアクセス時間が可変で指標とできない場合や、アクセス時間の情報が無いなど、アクセス回数のみを判断指標としなければならない場合がある。そこで、図６に示すごとく、異なるＣＰＵで共通使用する静的変数がある場合に、高負荷時のアクセス回数が少なくなるよう静的変数を実装する操作について、図７の例を用いて説明する。図８にはエンジン回転数とアクセス回数の関係を示す。
【００３２】
図７に示すように、ＣＰＵ１においてクランクアングルを入力してクランクアングルからエンジン回転数が算出される。一方、ＣＰＵ２において、ＣＰＵ１で算出したエンジン回転数から燃料噴射量が算出されるとともにエンジン回転数から点火時期が算出される。
【００３３】
このような前提の下に、図６において、ステップ５０１で制御プログラムを読み込む。デフォルト状態として、図７のＣＰＵ１には、Ａ／Ｄ入力処理（６０１）と、回転数算出処理（６０２）があり、それぞれの処理が書き込みを行う静的変数として、ｒａｍＲＣＡ（６０３）、ｒａｍＲＥＮ（６０４）があり、それらの静的変数はＲＡＭ１に定義されているとする。一方、ＣＰＵ２には、噴射量算出処理（６０５）と点火時期算出処理（６０７）があり、それぞれｒａｍＲＥＮ（６０４）を参照する。また、静的変数であるｒａｍＩＮＪ（６０６）とｒａｍＩＧＮ（６０８）はＣＰＵ２内の処理から書き込みされるため、ＲＡＭ２に定義されているとする。
【００３４】
図６のステップ５０２で別ＣＰＵからのアクセスがあるか否か、即ち、異なるＣＰＵで共通使用する静的変数があるか否か判定する。図７のｒａｍＲＣＡ（６０３）及びｒａｍＩＮＪ（６０６）、ｒａｍＩＧＮ（６０８）については同一ＣＰＵ内のみのアクセスしか存在しないため、図６のステップ５０６へ進む。図７のｒａｍＲＥＮ（６０４）の場合は、ＣＰＵ１内での書き込みの他、ＣＰＵ２からの参照が存在するため、ステップ５０３へ進む。
【００３５】
ステップ５０３で静的変数について高負荷時における単位時間当たりのアクセス回数を算出する。ここでは簡単のため回転数算出処理（６０２）からｒａｍＲＥＮ（６０４）への書き込みは１０ｍｓ毎に行われ、噴射量算出処理（６０５）と点火時期算出処理（６０７）からｒａｍＲＥＮ（６０４）への参照は、エンジンの１回転に付き１回ずつ計２回行われるとする。
【００３６】
アクセス回数を求める条件として、エンジン回転数（１分間当たり回転数。単位ｒｅｖ／ｍｉｎ）を用いた場合、６００（ｒｅｖ／ｍｉｎ）、６０００（ｒｅｖ／ｍｉｎ）でのアクセス回数はそれぞれ以下のように求めることができる。
【００３７】
６００（ｒｅｖ／ｍｉｎ）の場合、
［１−１］１分間当たりのＣＰＵ１からのアクセス回数の合計は、１ｍｉｎ／（１０ｍｓ／６００００ｍｓ）＝６０００（回／ｍｉｎ）・・・図８参照
［１−２］１分間当たりのＣＰＵ２からのアクセス回数の合計は、６００（ｒｅｖ／ｍｉｎ）×２＝１２００（回／ｍｉｎ）・・・図８参照
６０００（ｒｅｖ／ｍｉｎ）の場合、
［２−１］１分間当たりのＣＰＵ１からのアクセス回数の合計は、１ｍｉｎ／（１０ｍｓ／６００００ｍｓ）＝６０００（回／ｍｉｎ）・・・図８参照
［２−２］１分間当たりのＣＰＵ２からのアクセス回数の合計は、６０００（ｒｅｖ／ｍｉｎ）×２＝１２０００（回／ｍｉｎ）・・・図８参照
図６のステップ５０４において、ステップ５０３で算出した単位時間当たりのアクセス回数を比較して、ステップ５０５においてアクセス回数が最も多いケースを含むＣＰＵ側に静的変数の配置場所を書き換える。図８に示すごとく、ＣＰＵ１からｒａｍＲＥＮ（６０４）へのアクセス回数は時間同期であるため、条件に依らず１分間当たり６０００（回／ｍｉｎ）である。ＣＰＵ２からｒａｍＲＥＮ（６０４）へのアクセス回数は回転数に応じて増加するため、低負荷時は１２００（回／ｍｉｎ）であるが、高負荷時には１２０００（回／ｍｉｎ）となる。よって、１２０００（回／ｍｉｎ）がアクセス回数の最大数となり、静的変数の配置場所をＣＰＵ２に移動する。
【００３８】
以上のように、実装するＣＰＵを選択する判定基準として、アクセス回数のみを用いる。これは、静的変数へのアクセス時間が可変で指標とできない場合や、アクセス時間の情報が無い場合等において、有用である。
【図面の簡単な説明】
【００３９】
【図１】本実施形態におけるデュアルコア向け自動コード生成装置の全体構成図。
【図２】デュアルコアの構成図。
【図３】全体フロー図。
【図４】ＣＰＵとＲＡＭの関係図。
【図５】アクセス動作を説明するためのタイミングチャート。
【図６】別例の全体フロー図。
【図７】別例のＣＰＵとＲＡＭの関係図。
【図８】エンジン回転数とアクセス回数の関係を示す図。
【符号の説明】
【００４０】
１０１…制御仕様、１０２…マルチコア構成条件、１０３…キーボード、１０４…マウス、１０５…プログラム生成ルーチン、１０６…静的変数実装判定ルーチン、１０９…制御コード記憶ファイル。
【図１】
2008262340.tif 000003
【図２】
2008262340.tif 000004
【図３】
2008262340.tif 000005
【図４】
2008262340.tif 000006
【図５】
2008262340.tif 000007
【図６】
2008262340.tif 000008
【図７】
2008262340.tif 000009
【図８】
2008262340.tif 000010