(57)【特許請求の範囲】
【請求項１】
プロセッサに逐次処理を実行させるためのソースコードと該ソースコードをコンパイルしたバイナリコードとから生成されたコードプロファイルに基づき、全ての変数についてその読み書きにかかる総実行ステップ数をそれぞれ検出し、各変数についての総実行ステップ数と該総実行ステップ数を主要な要素として決まる優先順位とを対応つけたアクセスステップ数表を生成するアクセスステップ数表生成手段と、
前記アクセスステップ数表の変数のうち、優先順位が所定の閾値に勝る変数を検索し、検索された変数の読み書きにかかるコードの前後にゲストハードウエア標識を挿入した新たなソースコードを生成して格納するソースコード格納手段と、
を備えることを特徴とする処理装置。
【請求項２】
コンピュータが実行する処理方法であって、
プロセッサに逐次処理を実行させるためのソースコードと該ソースコードをコンパイルしたバイナリコードとから生成されたコードプロファイルに基づき、全ての変数についてその読み書きにかかる総実行ステップ数をそれぞれ検出し、
各変数についての総実行ステップ数と該総実行ステップ数を主要な要素として決まる優先順位とを対応つけたアクセスステップ数表を生成し、
前記アクセスステップ数表の変数のうち、優先順位が所定の閾値に勝る変数を検索し、
検索された変数の読み書きにかかるコードの前後にゲストハードウエア標識を挿入した新たなソースコードを生成する、
ことを特徴とする処理方法。
【請求項３】
プロセッサに逐次処理を実行させるためのソースコードと該ソースコードをコンパイルしたバイナリコードとから生成されたコードプロファイルのデータベースを備えたコンピュータに、
前記コードプロファイルに基づき、全ての変数についてその読み書きにかかる総実行ステップ数をそれぞれ検出し、各変数についての総実行ステップ数と該総実行ステップ数を主要な要素として決まる優先順位とを対応つけたアクセスステップ数表を生成するステップと、
前記アクセスステップ数表の変数のうち、優先順位が所定の閾値に勝る変数を検索するステップと、
検索された変数の読み書きにかかるコードの前後にゲストハードウエア標識を挿入した新たなソースコードを生成して格納するステップと、
を実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プロセッサとメモリにより遂次処理を行うシステムに、その行っている処理の一部を分担するゲストハードウエアを付加したシステムを設計する際に、プロセッサに残す遂次処理（ソフトウエア）と、動作合成系によりゲストハードウエアを合成してゲストハードウエアで処理させる部分を、ソフトウエアのソースコード上で区別するための標識を与える処理装置、処理方法およびそのプログラムに関する。この標識は、プロセッサからの参照／更新を行わず、ゲストハードウエアによってのみ参照／更新する変数を識別する標識となるものである。
【背景技術】
【０００２】
プロセッサとメモリにより遂次処理を行うシステムに、その行っている処理の一部を分担するゲストハードウエアを付加したシステムを設計することが行われる。この際、プロセッサに残す遂次処理（ソフトウエア）と、動作合成系により合成したゲストハードウエアに行わせる処理について、元のソフトウエアのソースコード上で分割を決定することが必要となる。
【０００３】
これにつき、従来は、設計者の知識や経験や創意発案にもとづき、具体的な根拠としては、ソフトウエアのソースコードに即して、対象部分の実際の実行回数（コードプロファイル）をコードごとに参照し、その数値の多い少ないを判断材料として、分割の候補を生成し、その後、ゲストハードウエアの動作合成を試み、その成否を確認するとともに、並行して性能評価を行う、ということを繰り返し、最終的に分割を決定してきた。先行文献としては、従来技術での設計工程もしくは設計手法の解説となり、数多くあるが、そのなかで、東芝セミコンダクター社のＭｅＰの開発フロー（非特許文献１）を示す。
【０００４】
非特許文献１に記載のものは、トップダウンフローの○囲みの番号１にあるように、第１に行う工程である「機能分割（人手）」が、設計者の知識や経験で分割の候補を生成していることになり、従来例の典型である。
【非特許文献１】「ＭｅＰの開発フロー」、東芝セミコンダクタ社、[平成２０年２月２７日検索]、インターネット、＜http://www.semicon.toshiba.co.jp/product/micro/mep/development_flow/index.html＞
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかしながら、上記した分割の候補の作成は、経験依存度の大きい知的集約作業であり、候補の作成であるため、実際には使用しないこともありえるモデル（設計見本）を作製する工程であり、そのため、自動化可能なハードウエア動作合成系の処理時間に比べて、その作業負荷が大きい。
【０００６】
また、この分割の妥当性が、動作合成系の処理負荷（時間）も大きく左右することが知られており、現実的に重要な判断を設計対象についての情報が少ない設計初期に行わなければならない。
【０００７】
考慮すべき事項が非定型で経験依存も大きかったことから、疲労による誤りの混入を誘発することもあり、工程期間および品質改善の障害となっていた。
【０００８】
もともと、分割候補の作成のポイントは、もとのソフトウエアでソースコードに記載してある変数のうち、どれをゲストハードウエアに搭載するか、とくにゲストハードウエアのみに閉じたレジスタに搭載する変数をどれにするか、つまりどれくらいの数のレジスタを搭載するかであった。
【０００９】
そこで、ソフトウエアのソースコードに即して、対象部分の実際の実行回数を調査し、その多い少ないにより、変数をゲストハードウエアに搭載するかどうかを判断することも行われているが、ソースコード上で広い範囲に分散して頻繁にアクセスされている変数を見落とすことになっていた。
【００１０】
また、プロセッサが変数のアクセスに実際にどれだけのステップ数を消費しているかは、ソースコードを分析しただけではわからず、よい分割候補を得るにはやはり設計者の知見の占める割合があいかわらず非常に大きかった。
【００１１】
以上から、結果として設計されるゲストハードウエアには、搭載されるレジスタが多めになり、ハードウエアの規模の増大も招いていた。
【００１２】
本発明の目的は、プロセッサに残す遂次処理（ソフトウエア）と動作合成系により合成したゲストハードウエアに行わせる処理の分割の際に、誤りの混入や変数の見落としを避けることができるようにすることである。
【課題を解決するための手段】
【００１３】
上記目的を達成するために、請求項１にかかる発明の処理装置は、プロセッサに逐次処理を実行させるためのソースコードと該ソースコードをコンパイルしたバイナリコードとから生成されたコードプロファイルに基づき、全ての変数についてその読み書きにかかる総実行ステップ数をそれぞれ検出し、各変数についての総実行ステップ数と該総実行ステップ数を主要な要素として決まる優先順位とを対応つけたアクセスステップ数表を生成するアクセスステップ数表生成手段と、前記アクセスステップ数表の変数のうち、優先順位が所定の閾値に勝る変数を検索し、検索された変数の読み書きにかかるコードの前後にゲストハードウエア標識を挿入した新たなソースコードを生成して格納するソースコード格納手段と、備えることを特徴とする。
請求項２にかかる発明の処理方法は、コンピュータが実行する処理方法であって、プロセッサに逐次処理を実行させるためのソースコードと該ソースコードをコンパイルしたバイナリコードとから生成されたコードプロファイルに基づき、全ての変数についてその読み書きにかかる総実行ステップ数をそれぞれ検出し、各変数についての総実行ステップ数と該総実行ステップ数を主要な要素として決まる優先順位とを対応つけたアクセスステップ数表を生成し、前記アクセスステップ数表の変数のうち、優先順位が所定の閾値に勝る変数を検索し、検索された変数の読み書きにかかるコードの前後にゲストハードウエア標識を挿入した新たなソースコードを生成する、ことを特徴とする。
請求項３にかかる発明のプログラムは、プロセッサに逐次処理を実行させるためのソースコードと該ソースコードをコンパイルしたバイナリコードとから生成されたコードプロファイルのデータベースを備えたコンピュータに、前記コードプロファイルに基づき、全ての変数についてその読み書きにかかる総実行ステップ数をそれぞれ検出し、各変数についての総実行ステップ数と該総実行ステップ数を主要な要素として決まる優先順位とを対応つけたアクセスステップ数表を生成するステップと、前記アクセスステップ数表の変数のうち、優先順位が所定の閾値に勝る変数を検索するステップと、検索された変数の読み書きにかかるコードの前後にゲストハードウエア標識を挿入した新たなソースコードを生成して格納するステップと、を実行させることを特徴とする。
【発明の効果】
【００１４】
本発明によれば、プロセッサに残す遂次処理（ソフトウエア）と動作合成系により合成したゲストハードウエアに行わせる処理の分割に際して、ソースコードの中のゲストハードウエアに実装するレジスタに置く変数を識別するゲートハードウエア標識が、そのソースコードに挿入されるので、疲労による誤りの混入やゲートハードウエアに実装するレジスタに置く変数の見落としを避けることができる。また、優先順位が閾値に勝る変数がゲートハードウエア搭載レジスタに割り当てられることになるので、変数アクセスに関する性能向上を図る際にその優先順位と閾値を利用することで、効果を概算推定でき、搭載レジスタの要否を評価できるので、ゲストハードウエアを備えるべきレジスタ規模を小さくすることができ、そのハードウエア規模を小さくすることもできる。
【発明を実施するための最良の形態】
【００１５】
本発明では、ゲストハードウエアによりプロセッサの遂次処理を代行させることで、性能の向上を目指す場合に、どの変数をゲストハードウエアのレジスタとして置くかを検討する際に、変数の読み書きにかかるステップ数について表としたもの（アクセスステップ数表）を作成し、各変数に優先順位付けを行い、その優先順位が所定の閾値に勝るかどうかで、ゲストハードウエアに実装するレジスタに置く変数と、メモリに置きプロセッサとの通信に用いる変数とに分別し、その分別結果に応じて、ソースコード上にゲストハードウエア標識を付与する。よって、変数の参照と格納について性能向上の見込みの大きいものから複数の設計候補を容易に得ることができる。このように、本発明では、ゲストハードウエアにレジスタとして搭載すべき変数を、ソースコード上にゲートハードウエア標識により識別できるようにするものである。
【００１６】
＜実施例＞
図１に本発明の実施例の処理装置の全体構成を示す。１０はプロセッサでの遂次処理ソフトウエアとして記述されているソースコード、２０はそのソースコード１０をコンパイルしてバイナリコード３０を生成するコンパイラ、４０はソースコード１０とバイナリコード３０からコードプロファイルを作成するコードプロファイラ、５０はコードプロファイルＤＢ（データベース）（例えば、図３参照）である。
【００１７】
６０はコードファイルＤＢ５０に基づいてアクセスステップ数表７０を生成するアクセスステップ数表生成部、８０はアクセスステップ数表７０の生成の際にオプションとしての「ポリシー」を加えるポリシー記述、９０はソースコード１０に記述された変数をゲストハードウエアに搭載するか否かの判断材料としてのゲートハードウエア搭載閾値、１００はソースコード１０をコメント形式のゲストハードウエア標識を挿入したものに書き換えそれを格納するソースコード格納部、１１０はソースコード１０の字句解析を行いソースコード格納部１００に対して書き換えのコマンド送出を行うソースコードスキャン部、１２０はソースコード書き換えのためのゲストハードウエア標識を生成するゲストハードウエア標識生成部である。
【００１８】
本実施例の処理装置は、コンピュータとプログラムによって実現でき、プログラムを記録媒体に記録することも、ネットワークを通して提供することも可能である。図２はそのプログラムのフローチャートである。以下、このフローチャートに沿って各部の動作を説明する。
【００１９】
コードプロファイルＤＢを準備した（ステップＳ１）後、アクセスステップ数表生成部６０は、コードプロファイルＤＢ５０に基づき、変数の読み書きにかかるステップ数を表としたアクセスステップ数表７０を生成する（ステップＳ２）。このとき、アクセスステップ数表７０における「優先順位」のフィールドの生成にあたって、オプション処理として、各種のアクセスステップ数のフィールドに対して重み付けや評価の優先判断、あるいは変数の構造に基づく合算（たとえば、配列変数について合算）を行うための、関数である「ポリシー」をポリシー記述８０から与えておくこともできる。
【００２０】
アクセスステップ数表生成部６０は、コードプロファイルにおけるソースコード形式を先頭から追っていき変数を検出する。検出した変数に対して、アセンブリ言語形式での対応部分を検索する。これはコードプロファイルＤＢ５０への検索によって実現し、そのコードにおける、１命令実行ステップ数と、所定の繰り返しの結果としての、そのコードの総実行ステップ数を特定する。総実行ステップ数に関しては、アクセスステップ数表７０内の該当変数の「延べステップ数」のフィールドに、変数への書き込みと読み出しを区別して加算していく。図４に「変数名」と「延べステップ数」のフィールドをもつアクセスステップ数表の例を示した。ソースコード記載上の変数が局所変数である場合には、スコープを示すために、関数名と合成するなどの手段を講ずることで、唯一特定ができる。
【００２１】
なお、コードプロファイルＤＢ５０から検索される１命令実行ステップ数に関しては、アクセスステップ数表７０内に「単位ステップ数」のフィールドを用意しておき、変数への書き込みと読み出しを区別して書き込んでいく（１命令実行ステップ数の取り扱いについては、実現形態としてはオプション）（図５）。
【００２２】
さらに、アクセスステップ数表生成部６０が、ソースコード形式のスキャンを終了したとき、アクセスステップ数表７０内のすべての変数について、「延べステップ数」の読み出し書き込みフィールドの加算値の大きいものから、「優先順位」を与える。
【００２３】
このとき、前記したように、オプションとして、ポリシー記述８０によって、「ポリシー」と呼ぶ関数あるいは手順を準備しておき、「ポリシー」に従って、アクセスステップ数表７０内の各フィールドの値の重み付けなど、各フィールドの単純な総和以外の関数あるいは手順を作用させて、その評価値を、「優先順位」の決定の際に、反映させることもできる。
【００２４】
「ポリシー」を、たとえば、読み出しの単位ステップ数が３より大きいものについては、「延べステップ数」を２倍にするなどと定義すれば、組み上がったシステムでさまざまな要因により、プロセッサがメモリにアクセスする際に想定される調停待ちの影響を組み込むといったことができる。
【００２５】
最終的には、アクセスステップ数表７０内のすべての変数について、重複しない「優先順位」を与える。図４に各「変数」に対して、「単位ステップ数」、「延べステップ数」、および「優先順位」を付与した最終的なアクセスステップ数表７０を示す。
【００２６】
ソースコードスキャン部１１０は、ソースコード１０の字句分析で検出した変数について、アクセスステップ数表７０を検索し、「優先順位」が、ゲストハードウエア搭載閾値９０で設定された閾値に勝るか否かを比較する（ステップＳ３）。変数の「優先順位」が閾値より勝るとき、ソースコード１０の当該変数コード部分にゲストハードウエア標識を挿入する（ステップＳ４）。これは、ソースコード格納部１００にゲストハードウエア標識を書き加えるためのコマンドを送ることで実現する。
【００２７】
ゲストハードウエア標識生成部１２０は、ソースコード１０に書き加えるゲストハードウエア標識を生成する。図６にゲストハードウエア標識の例とゲストハードウエア標識を挿入したソースコードの例を示す。
【００２８】
図７にゲストハードウエア標識を挿入したソースコードの例を示す。左のゲストハードウエア標識を挿入したソースコード（１）は、最左側のアクセスステップ数表について、閾値を５としたとき、「優先順位」が１の変数「max」についてはゲートハードウエア化候補としてのゲストハードウエア標識を与えるが、「優先順位」が７の変数「ret.value」には与えない例である。右側のゲストハードウエア標識を挿入したソースコード（２）は、閾値を３２としたとき、「優先順位」が１の変数「max」と１７の変数「ret.value」についてゲストハードウエア化候補としてのゲストハードウエア標識を与える例である。
【００２９】
＜実施例の効果＞
本実施例は、検出した変数のコード部分の前後の行にゲストハードウエア標識を入れるものであり、このように検出した標識を記入しておくことで、ソースコード１０に意図しない修正を行った場合の誤りの発見に役立ち、また、ゲストハードウエアを動作合成系で生成するに先だってこの技術を適用しておくことで、あらかじめ、動作合成対象内に保有するレジスタを明示することができ、動作合成系の処理負荷を軽減することができる。
【００３０】
前述したように、機能分割の候補の作成は、これまで経験依存度の大きい工程であったが、本実施例によれば、優先順位の閾値とアクセスステップ数表のポリシーを決めることに集約できる。そのほかの手順の自動化で、作業時間も動作合成系等の工程と同程度にでき、疲労による誤りの混入を避けることができる。
【００３１】
また、ソフトウエアのソースコードに即して、対象部分だけではなく、全体にわたってのアクセスステップ数に基づいて、変数をゲストハードウエアに搭載するかどうかの判断を行うので、読み書きがソースコード上の広い範囲に分散して頻繁さを見落としやすい変数や、読み書きのためのプロセッサの負荷が大きい変数へのアクセスの見落としを防ぐことができる。
【００３２】
さらに、ゲストハードウエア標識およびその標識においてレジスタに割り当てる変数を明示することの効果として次のようなものがある。まず、ゲストハードウエアを動作合成系で生成するに先だって本実施例を適用しておけば、ゲストハードウエアに搭載したレジスタによって実現する変数をあらかじめ示しておけるので、動作合成系の処理時間を削減することができる。
【００３３】
従来の開発方法として、プロセッサからの読み書きを行わず、ゲストハードウエアに搭載するレジスタとして実装する変数を、ソースコードのうえで、変数の名前規則や変数の型など、あらかじめ識別しやすいものに書き換えて指定することもあったが、その場合には、一度、ゲストハードウエアによってのみ参照／更新することとして設計・記述した変数に対して、ソースコード内の、その時点では、ソフトウエアとして残すとしておいた部分から、参照／更新を記載することができてしまう。
【００３４】
これは、ゲストハードウエアを搭載したシステムとしては、参照／更新できないように設計したかったので、誤りであるが、コンパイルしてソフトウエアだけで動作させた場合には、その結果に不具合は発生することはなく、すなわち、開発途中では誤りに気がつくことが困難であった。
【００３５】
これに対して、本実施例では、ソースコードに明示的に示すわけではないので、ある時点で、ソフトウエアとして残すとしていた部分に、ゲストハードウエアに搭載したレジスタへの読み書きを記載した場合には、あらたに、ゲストハードウエア搭載のレジスタである旨の識別子が付与される。ソースコード上のソフトウエアとして処理する部分にこの標識が提示されるので、この段階で記載の意図が誤りであれば気づくことができる。
【００３６】
本実施例の構成要素であるアクセスステップ数表については、次の効果がある。アクセスステップ数表には、対象となるソフトウエアを実行した場合の、それぞれの変数のアクセスに必要であったステップ数がすべて記されていることから、優先順位が閾値に勝る変数についてのゲストハードウエア搭載レジスタへの割り当てが行われた場合の、変数アクセスに関する性能向上効果を推定する際に、この数値を利用することで、効果を概算推定できる。その結果、搭載するレジスタの要否を性能との対比で評価判断できるため、恣意的に、レジスタを多めに持つ必要がなく、ゲストハードウエアの規模を小さくすることもできる。またこの概算推定は、ゲストハードウエアの合成を待たずに行えるので、工程を著しく短縮できる。
【００３７】
アクセスステップ数表の優先順位が閾値に勝る変数については、動作合成系に対するレジスタの生成の指示のために用いることができるが、さらに、生成したゲストハードウエア標識付きのソースコードの当該標識部分について、変数のリストを作成し、レジスタに割り当てた変数のリストとの差をとれば、ゲストハードウエアとプロセッサとの間で通信に使用する全変数のリストを得ることができる。これは、動作合成時には、入出力レジスタの生成指示のために用いることができ、いずれも動作合成系の処理負荷を削減し、合成されたゲストハードウエアの性能、品質を高めることができる。
【図面の簡単な説明】
【００３８】
【図１】本発明の実施例の処理装置の全体構成を示すブロック図である。
【図２】同実施例の処理装置の処理のフローチャートである。
【図３】同実施例のコードプロファイルＤＢの説明図である。
【図４】同実施例のアクセスステップ数表の作例例である。
【図５】同実施例の最終的なアクセスステップ数表の作成例である。
【図６】同実施例のゲストハードウエア標識とその挿入例の説明図である。
【図７】同実施例のゲストハードウエア標識の挿入例の説明図である。
【符号の説明】
【００３９】
１０：ソースコード、２０：コンパイラ、３０：バイナリコード、４０：コードプロファイラ、５０：コードプロファイルＤＢ、６０：アクセスステップ数表生成部、７０：アクセスステップ数表、８０：ポリシー記述、９０：ゲストハードウエア搭載閾値、１００：ソースコード格納部、１１０：ソースコードスキャン部、１２０：ゲストハードウエア標識生成部。
【図１】
0005077952.tif 000002
【図２】
0005077952.tif 000003
【図３】
0005077952.tif 000004
【図４】
0005077952.tif 000005
【図５】
0005077952.tif 000006
【図６】
0005077952.tif 000007
【図７】
0005077952.tif 000008