(57)【特許請求の範囲】
【請求項１】
ＣＰＵおよびＧＰＵを用いて実行されるプログラムの作成に際して、作成したプログラムの実行予測時間を求めるプログラム作成支援装置であって、
実行予測時間を求める対象であるプログラムを取得するプログラム取得部と、
前記プログラムの実行予測時間の算出に用いられる、ＣＰＵおよびＧＰＵによる基本的処理に要する時間の情報を含む設定情報を記憶する設定情報記憶部と、
前記設定情報記憶部に記憶された設定情報を参照して、前記プログラムのうち前記ＣＰＵにて実行されるＣＰＵ側実行プログラムの実行予測時間と、前記プログラムのうち前記ＧＰＵにて実行されるＧＰＵ側実行プログラムの実行予測時間と、前記ＣＰＵと前記ＧＰＵとの間におけるプログラム呼び出し時間と、を算出し、これらの時間を加算して前記プログラムの最大実行予測時間として算出する演算処理部と、
前記演算処理部の演算結果の最大実行予測時間を出力する出力部と、
を備えることを特徴とする、プログラム作成支援装置。
【請求項２】
前記ＧＰＵは、
複数の第１演算処理部と、
前記各第１演算処理部に複数搭載され、当該第１演算処理部より高速演算処理可能な第２演算処理部と、
を備え、
前記演算処理部は、
前記ＧＰＵ側実行プログラムの実行予測時間を、
前記第１演算処理部により実行される第１プログラムの実行時間と、前記第２演算処理部により実行される第２プログラムの実行時間とを加算して算出することを特徴とする、請求項１に記載のプログラム作成支援装置。
【請求項３】
前記演算処理部は、
前記ＧＰＵ側実行プログラムの第１プログラムの実行時間を、
当該第１プログラムにおけるロジック処理の実行に要するロジック実行時間と、前記各第１演算処理部に設けられた第１メモリを参照する第１メモリ参照時間と、前記ＧＰＵによりアクセス可能な共通メモリを参照する共通メモリ参照時間と、を加算して算出することを特徴とする、請求項２に記載のプログラム作成支援装置。
【請求項４】
前記演算処理部は、
前記ＧＰＵ側実行プログラムの第２プログラムの実行時間を、
当該第２プログラムにおけるロジック処理の実行に要するロジック実行時間と、前記各第２演算処理部に設けられた第２メモリを参照する第２メモリ参照時間と、前記ＧＰＵによりアクセス可能な共通メモリを参照する共通メモリ参照時間と、を加算して算出することを特徴とする、請求項２または３に記載のプログラム作成支援装置。
【請求項５】
前記演算処理部は、
前記ＣＰＵ側実行プログラムの実行時間を、
当該ＣＰＵ側実行プログラムにおけるロジック処理の実行に要するロジック実行時間と、前記ＣＰＵによりアクセス可能なメモリを参照するメモリ参照時間と、を加算して算出することを特徴とする、請求項１〜４のいずれか１項に記載のプログラム作成支援装置。
【請求項６】
前記演算処理部は、前記プログラム内における前記ＣＰＵと前記ＧＰＵとの間のプログラムの呼び出し数と、前記ＣＰＵと前記ＧＰＵとの間でのプログラムの呼び出し１回に要する基本呼び出し時間とに基づいて、前記ＣＰＵと前記ＧＰＵとの間におけるプログラム呼び出し時間を算出することを特徴とする、請求項１〜５のいずれか１項に記載のプログラム作成支援装置。
【請求項７】
複数の入力領域からなり、前記解析対象のプログラムを実行されるハードウェアに応じて所定の前記入力領域に分離して入力可能な入力画面を表示する表示部と、
前記入力画面の前記各入力領域に情報を入力する入力部と、
をさらに備え、
前記プログラム取得部は、前記入力画面の各入力領域から前記解析対象のプログラムを取得することを特徴とする、請求項１〜６のいずれか１項に記載のプログラム作成支援装置。
【請求項８】
前記解析対象のプログラムは、プロセス制御システムにおけるオンライン最適化制御に用いられることを特徴とする、請求項１〜７のいずれか１項に記載のプログラム作成支援装置。
【請求項９】
ＣＰＵおよびＧＰＵを用いて実行されるプログラムの作成に際して、作成したプログラムの実行予測時間を求めるプログラム作成支援方法であって、
実行予測時間を求める対象であるプログラムを取得するプログラム取得ステップと、
前記プログラムの実行予測時間の算出に用いられる、ＣＰＵおよびＧＰＵによる基本的処理に要する時間の情報を含む予め設定された設定情報を参照して、前記プログラムのうち前記ＣＰＵにて実行されるＣＰＵ側実行プログラムの実行予測時間と、前記プログラムのうち前記ＧＰＵにて実行されるＧＰＵ側実行プログラムの実行予測時間と、前記ＣＰＵと前記ＧＰＵとの間におけるプログラム呼び出し時間と、を算出する第１算出ステップと、
前記ＣＰＵ側実行プログラムの実行予測時間、前記ＧＰＵ側実行プログラムの実行予測時間、およびプログラム呼び出し時間を加算して前記プログラムの最大実行予測時間として第２算出ステップと、
少なくとも前記第２算出ステップの演算結果の最大実行予測時間を出力する出力ステップと、
を含むことを特徴とする、プログラム作成支援方法。
【請求項１０】
コンピュータを、ＣＰＵおよびＧＰＵを用いて実行されるプログラムの作成に際して、作成したプログラムの実行予測時間を求めるプログラム作成支援装置として機能させるためのコンピュータプログラムであって、
実行予測時間を求める対象となるプログラムを取得するプログラム取得部と、
前記プログラムの実行予測時間の算出に用いられる、ＣＰＵおよびＧＰＵによる基本的処理に要する時間の情報を含む設定情報を記憶する設定情報記憶部と、
前記設定情報記憶部に記憶された設定情報を参照して、前記プログラムのうち前記ＣＰＵにて実行されるＣＰＵ側実行プログラムの実行予測時間と、前記プログラムのうち前記ＧＰＵにて実行されるＧＰＵ側実行プログラムの実行予測時間と、前記ＣＰＵと前記ＧＰＵとの間におけるプログラム呼び出し時間と、を算出し、これらの時間を加算して前記プログラムの最大実行予測時間として算出する演算処理部と、
前記演算処理部の演算結果の最大実行予測時間を出力する出力部と、
を備えるプログラム作成支援装置としてコンピュータを機能させることを特徴とする、コンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＧＰＵを利用したプログラム作成支援装置、プログラム作成支援方法およびコンピュータプログラムに関する。
【背景技術】
【０００２】
プロセス制御システムにおいて、最適化制御をオンラインで実施する場合、オンラインリアルタイム制御で必要な所定の時間内に演算処理を終える必要がある。この際、製造プロセスの厳密物理モデルとの連動や最適化計算で多量の演算処理を要すると、所定の時間内に演算処理を終えることができない場合がある。そこで、演算処理を所定の時間内で終えるために、現状では厳密モデルを簡易化したり、最適化計算範囲を狭めたりすることにより対処してきたが、制御精度への悪影響が避けられなかった。
【０００３】
また、ネットワークを介して多数のパソコンを分散処理するグリッド技術を用いる方法もあるが、当該技術では、分散処理のためのオーバーヘッドやネットワークの伝送遅れの影響で、所定の時間内に演算処理を終えることができない場合があった。さらには、多量の演算処理をＧＰＵ（Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）を使用して、１台のパソコン側演算装置との並列処理させるオフラインの科学技術演算処理が行われている。しかし、現状、ＧＰＵを用いた科学技術演算処理は、例えば気象予測のようなオフライン処理に適用されるのみであり、プロセス制御においてのオンライン処理へは適用されていない。
【０００４】
このように、演算結果の精度を保持しつつ演算処理を高速化するために、様々な手法が提案されている。例えば、特許文献１には、制御変数、状態変数、イベント変数を制御演算用ＣＰＵシステムとシステム解析用ＣＰＵシステムとの間で共用できる双方向メモリに格納して、制御演算用ＣＰＵシステムで動作する制御演算の制御変数をシステム解析用ＣＰＵシステムから最適化可能にするプロセス制御装置が開示されている。特許文献１の装置によれば、グリッド技術を用いて膨大な計算量を必要とするモデリングやシステム同定に対する処理能力を向上させることができ、制御演算の負荷を軽減することができる。
【０００５】
また、特許文献２には、グラフィックス処理ユニット（ＧＰＵ）を用いて機械学習処理を実行し、当該実行結果に基づいてコンピュータアプリケーションによって使用できるように解を提供するコンピュータ実施方法が開示されている。特許文献２の方法によれば、ＧＰＵを用いて機械学習処理および非グラフィックスアプリケーション処理を実行することで、処理速度を高めることができる。
【０００６】
さらに、特許文献３には、粒子を用いた流体計算手法に基づく粒子法シミュレーションをＧＰＵへ実装する実装方法が開示されている。特許文献３の方法によれば、ＧＰＵを効率よく利用して、粒子シミュレーションの近傍粒子探索に用いる格子のメモリ効率を良好にし、近傍粒子探索を効率化することができる。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開平８−２２３０５号公報
【特許文献２】特開２００５−１８２７８５号公報
【特許文献３】特開２００９−６９９３０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかし、上記特許文献１〜３の技術を、リアルタイム制御分野のシステム構成に適用することは困難である。特許文献１の技術は、多数のパソコンをネットワーク結合するグリッド技術を用いているため、システム構成が複雑である。また、特許文献２の技術は、オフライン処理を前提としており、プロセス制御システムのオンラインリアルタイム制御への適用は困難である。さらに、特許文献３の技術は、ＧＰＵを効率よく利用して処理の効率化を図っているが、ＧＰＵを適切に利用したアプリケーションプログラムの設計には多大な時間とコストを要する。
【０００９】
ＣＰＵおよびＧＰＵを用いて実行されるアプリケーションプログラムの作成においては、ＣＰＵおよびＧＰＵそれぞれの特性にあった処理を実行させることで、効率的な演算処理を実現することができる。そして、作成したアプリケーションプログラムについて、当該アプリケーションプログラムを実際に製造ラインのプロセス制御等において稼動させる前に、オンラインリアルタイム制御で必要な所定の時間内に演算処理を終えることができるか否かを判断することで、システムを安定して稼動させることができる。
【００１０】
パーソナルコンピュータ等の計算機のＣＰＵとＧＰＵとでアプリケーションプログラムを並列処理する場合、従来、アプリケーションプログラムの実動作時間の判定は、図１７および図１８に示すように行われた。まず、ユーザにより、Ｃ言語で記述されたソースプログラムをＣＰＵ側で実行させるプログラム（標準Ｃ言語ソースプログラム）とＧＰＵ側で実行させるプログラム（拡張Ｃ言語ソースプログラム）とに手作業で分離される（Ｓ１０）。そして、ユーザによって分離された各々のソースプログラムを動作可能とするためプログラミングの実装の手直しとデバッグが行われ（Ｓ１２）、実動作時間が測定される（Ｓ１４）。その後、ユーザは、実動作時間が許容時間以下であるか否かを判定し（Ｓ１６）、実動作時間が許容時間以下あれば処理を終了し、実動作時間が許容時間より大きければステップＳ１０の処理に戻り、ソースプログラムを改めて分離して処理を繰り返す。
【００１１】
このように、従来は、ステップＳ１０〜Ｓ１４の処理を試行錯誤で繰り返し行うため、多大な時間とコストが発生していた。また、実動作時間測定のための実行環境の構築とテストデータの準備が必要であることも、多大な時間とコストを要する要因となっている。一方で、ステップＳ１０のソースプログラムの分離処理は機械によって自動的に行うこともなされているが、例えばループ処理を抽出してプログラムを分離するような簡単な分離機能を備えるに留まり、プロセス制御システムの複雑なプログラムを適切に分離することは困難である。
【００１２】
そこで、本発明は、上記問題に鑑みてなされたものであり、本発明の目的とするところは、ＧＰＵを適切に用いたアプリケーションプログラムの作成に際して、当該プログラムの実システムでの安定した動作が可能なアプリケーションプログラムを従来よりも効率的に作成することを支援することが可能な、新規かつ改良されたプログラム作成支援装置、プログラム作成支援方法およびコンピュータプログラムを提供することにある。
【課題を解決するための手段】
【００１３】
上記課題を解決するために、本発明のある観点によれば、ＣＰＵおよびＧＰＵを用いて実行されるプログラムの作成に際して、作成したプログラムの実行予測時間を求めるプログラム作成支援装置が提供される。プログラム作成支援装置は、実行予測時間を求める対象となるプログラムを取得するプログラム取得部と、プログラムの実行予測時間の算出に用いられる、ＣＰＵおよびＧＰＵによる基本的処理に要する時間の情報を含む設定情報を記憶する設定情報記憶部と、設定情報記憶部に記憶された設定情報を参照して、プログラムのうちＣＰＵにて実行されるＣＰＵ側実行プログラムの実行予測時間と、プログラムのうちＧＰＵにて実行されるＧＰＵ側実行プログラムの実行予測時間と、ＣＰＵとＧＰＵとの間におけるプログラム呼び出し時間と、を算出し、これらの時間を加算してプログラムの最大実行予測時間として算出する演算処理部と、演算処理部の演算結果の最大実行予測時間を出力する出力部と、を備えることを特徴とする。
【００１４】
本発明によれば、ＣＰＵおよびＧＰＵを利用して実行されるプログラムの作成において、作成されたプログラムを、ＣＰＵおよびＧＰＵの各演算処理ユニットによって実行されるプログラムに分離して、演算処理部２２０によりそれぞれの実行予測時間が算出される。このように、プログラムの実行・デバッグ、実行環境の構築をすることなく、ＧＰＵを適切に用いたアプリケーションプログラムの効率的な作成を支援することができる。
【００１５】
ここで、ＧＰＵは、複数の第１演算処理部と、各第１演算処理部に複数搭載され、当該第１演算処理部より高速演算処理可能な第２演算処理部と、を備え、演算処理部は、ＧＰＵ側実行プログラムの実行予測時間を、第１演算処理部により実行される第１プログラムの実行時間と、第２演算処理部により実行される第２プログラムの実行時間とを加算して算出してもよい。
【００１６】
また、演算処理部は、ＧＰＵ側実行プログラムの第１プログラムの実行時間を、当該第１プログラムにおけるロジック処理の実行に要するロジック実行時間と、各第１演算処理部に設けられた第１メモリを参照する第１メモリ参照時間と、ＧＰＵによりアクセス可能な共通メモリを参照する共通メモリ参照時間と、を加算して算出してもよい。
【００１７】
さらに、演算処理部は、ＧＰＵ側実行プログラムの第２プログラムの実行時間を、当該第２プログラムにおけるロジック処理の実行に要するロジック実行時間と、各第２演算処理部に設けられた第２メモリを参照する第２メモリ参照時間と、ＧＰＵによりアクセス可能な共通メモリを参照する共通メモリ参照時間と、を加算して算出してもよい。
【００１８】
また、演算処理部は、ＣＰＵ側実行プログラムの実行時間を、当該ＣＰＵ側実行プログラムにおけるロジック処理の実行に要するロジック実行時間と、ＣＰＵによりアクセス可能なメモリを参照するメモリ参照時間と、を加算して算出してもよい。
【００１９】
さらに、演算処理部は、プログラム内におけるＣＰＵとＧＰＵとの間のプログラムの呼び出し数と、ＣＰＵとＧＰＵとの間でのプログラムの呼び出し１回に要する基本呼び出し時間とに基づいて、ＣＰＵとＧＰＵとの間におけるプログラム呼び出し時間を算出してもよい。
【００２０】
本発明のプログラム作成支援装置は、複数の入力領域からなり、解析対象のプログラムを実行されるハードウェアに応じて所定の入力領域に分離して入力可能な入力画面を表示する表示部と、入力画面の各入力領域に情報を入力する入力部と、をさらに備えてもよい。このとき、プログラム取得部は、入力画面の各入力領域から解析対象のプログラムを取得することができる。
【００２１】
解析対象のプログラムは、例えばプロセス制御システムにおけるオンライン最適化制御に用いられるプログラムとしてもよい。
【００２２】
また、上記課題を解決するために、本発明の別の観点によれば、ＣＰＵおよびＧＰＵを用いて実行されるプログラムの作成に際して、作成したプログラムの実行予測時間を求めるプログラム作成支援方法が提供される。かかるプログラム作成支援方法は、実行予測時間を求める対象となるプログラムを取得するプログラム取得ステップと、プログラムの実行予測時間の算出に用いられる、ＣＰＵおよびＧＰＵによる基本的処理に要する時間の情報を含む予め設定された設定情報を参照して、プログラムのうちＣＰＵにて実行されるＣＰＵ側実行プログラムの実行予測時間と、プログラムのうちＧＰＵにて実行されるＧＰＵ側実行プログラムの実行予測時間と、ＣＰＵとＧＰＵとの間におけるプログラム呼び出し時間と、を算出する第１算出ステップと、ＣＰＵ側実行プログラムの実行予測時間、ＧＰＵ側実行プログラムの実行予測時間、およびプログラム呼び出し時間を加算してプログラムの最大実行予測時間として算出する第２算出ステップと、少なくとも第２算出ステップの演算結果の最大実行予測時間を出力する出力ステップと、を含むことを特徴とする。
【００２３】
さらに、上記課題を解決するために、本発明の別の観点によれば、コンピュータを、ＣＰＵおよびＧＰＵを用いて実行されるプログラムの作成に際して、作成したプログラムの実行予測時間を求めるプログラム作成支援装置として機能させるためのコンピュータプログラムが提供される。かかるコンピュータプログラムは、実行予測時間を求める対象となるプログラムを取得するプログラム取得部と、プログラムの実行予測時間の算出に用いられる、ＣＰＵおよびＧＰＵによる基本的処理に要する時間の情報を含む設定情報を記憶する設定情報記憶部と、設定情報記憶部に記憶された設定情報を参照して、プログラムのうちＣＰＵにて実行されるＣＰＵ側実行プログラムの実行予測時間と、プログラムのうちＧＰＵにて実行されるＧＰＵ側実行プログラムの実行予測時間と、ＣＰＵとＧＰＵとの間におけるプログラム呼び出し時間と、を算出し、これらの時間を加算してプログラムの最大実行予測時間として算出する演算処理部と、演算処理部の演算結果の最大実行予測時間を出力する出力部と、を備えるプログラム作成支援装置としてコンピュータを機能させることを特徴とする。
【００２４】
かかるプログラムは、コンピュータが備える記憶装置に格納され、コンピュータが備えるＣＰＵに読み込まれて実行されることにより、そのコンピュータを上記のプログラム作成支援装置として機能させる。また、当該プログラムが記録された、コンピュータで読み取り可能な記録媒体も提供される。記録媒体は、例えば磁気ディスクや光ディスクなどである。
【発明の効果】
【００２５】
以上説明したように本発明によれば、ＧＰＵを適切に用いたアプリケーションプログラムの作成に際して、設定情報を用いて最大実行予測時間を従来よりも高精度に評価することにより、当該プログラムの実システムでの安定した動作が可能なアプリケーションプログラムを従来よりも効率的に作成することを支援することが可能なプログラム作成支援装置、プログラム作成支援方法およびコンピュータプログラムを提供することができる。
【図面の簡単な説明】
【００２６】
【図１】本発明の実施形態に係るプログラム作成支援装置の機能の概要を説明するための説明図である。
【図２】同実施形態に係るプログラム作成支援装置のハードウェア構成を説明するブロック図である。
【図３】同実施形態に係るＧＰＵのハードウェア構成を説明する説明図である。
【図４】同実施形態に係るプログラム作成支援装置の予測処理部の機能構成を示す機能ブロック図である。
【図５】ＣＰＵ側実行プログラムからＧＰＵ側実行プログラムを呼び出すオーバーヘッド時間（Ｂ）の算出処理を示すフローチャートである。
【図６】ＣＰＵ側実行プログラムの実行予測時間（Ａ）の算出処理を示すフローチャートである。
【図７】ＧＰＵ側実行プログラムのうち、ブロックプログラムについての実行予測時間（Ｃ）の算出処理を示すフローチャートである。
【図８】ＧＰＵ側実行プログラムのうち、スレッドプログラムについての実行予測時間（Ｄ）の算出処理を示すフローチャートである。
【図９】変数一覧リストの一構成例を示す説明図である。
【図１０】ロジック行一覧リストの一構成例を示す説明図である。
【図１１】グローバル変数一覧リストの一構成例を示す説明図である。
【図１２】シェアード変数一覧リストの一構成例を示す説明図である。
【図１３】ブロックプログラムのロジック行一覧リストの一構成例を示す説明図である。
【図１４】ローカル変数一覧リストの一構成例を示す説明図である。
【図１５】スレッドプログラムのロジック行一覧リストの一構成例を示す説明図である。
【図１６】同実施形態に係るプログラム作成支援装置を利用して作成されるアプリケーションプログラムの一例を示す説明図である。
【図１７】従来のアプリケーションプログラムの分離処理を示す説明図である。
【図１８】従来のＧＰＵを用いたアプリケーションプログラムの作成方法を示すフローチャートである。
【発明を実施するための形態】
【００２７】
以下に添付図面を参照しながら、本発明の好適な実施の形態について詳細に説明する。なお、本明細書及び図面において、実質的に同一の機能構成を有する構成要素については、同一の符号を付することにより重複説明を省略する。
【００２８】
＜１．プログラム作成支援装置の概要＞
まず、図１を参照して、本発明の実施形態に係るプログラム作成支援装置の概要について説明する。なお、図１は、本実施形態に係るプログラム作成支援装置の機能の概要を説明するための説明図である。
【００２９】
本実施形態に係るプログラム作成支援装置は、ＧＰＵを利用するアプリケーションプログラムを効率的に作成するための支援をする装置である。本実施形態に係るプログラム作成支援装置は、作成したアプリケーションプログラムについて、パーソナルコンピュータ等の計算機のＣＰＵ側で実行するプログラムと、ＧＰＵ側で実行するプログラムとについて、実行予測時間をそれぞれ予測する。そして、プログラム作成支援装置は、予測された実行予測時間が許容時間内に収まっているか否かを判定して、作成したプログラムがオンラインリアルタイム制御で必要な所定の時間内に演算処理を終えることができるか否かを判定する。
【００３０】
具体的には、ユーザは、図１に示すように、作成したアプリケーションプログラム（例えば、Ｃ言語ソースプログラム）を、表示装置に表示された予測処理画面１内の該当する入力領域内に入力する。入力領域としては、ＣＰＵ側で実行するプログラムを入力するＣＰＵ側プログラム入力領域２、ＧＰＵ側で実行するプログラムを入力するＧＰＵ側プログラム入力領域３等がある。ＧＰＵ側プログラム入力領域３内には、例えば、ブロックプログラム入力領域４、スレッドプログラム入力領域５、グローバルメモリ入力領域６、関数名入力領域７が設けられている。
【００３１】
ブロックプログラム入力領域４には、ＧＰＵのマルチプロセッサにより処理されるプログラム（「ブロックプログラム」ともいう。）が入力される。また、スレッドプログラム入力領域５には、ＧＰＵのストリーミングプロセッサにより処理されるプログラム（「スレッドプログラム」ともいう。）が入力される。グローバルメモリ入力領域６には、ビデオメモリに記憶された、ＧＰＵ側実行プログラムにて共通に使用される変数（「グローバル変数」ともいう。）が入力される。関数名入力領域７には、ＣＰＵ側実行プログラムからＧＰＵ側実行プログラムを呼び出すための関数名が入力される。
【００３２】
ユーザは、例えばコピーアンドペースト等により、アプリケーションプログラムからＣＰＵ側で実行するプログラムをＣＰＵ側プログラム入力領域２に入力し、ＧＰＵ側で実行するプログラムをＧＰＵ側プログラム入力領域３に入力それぞれ入力する。そして、実行予測時間算出処理を開始する指示を与えると、プログラム作成支援装置は、実行予測時間算出処理を開始し、各入力領域内に入力されたプログラムソースを解析して、最大予測実行時間を算出する。プログラム作成支援装置によって算出された最大予測実行時間は、例えば予測処理画面１内の最大実行予測時間の出力結果表示領域８に表示される。
【００３３】
このように、ユーザは、各入力領域へ該当するソースプログラムを入力し、プログラム作成支援装置による実行予測時間算出処理を実行させるだけで、短時間でリアルタイム制御に必要な所定の時間内に演算処理を終えることができるか否かを知ることができる。すなわち、図１７および図１８に示した従来の手法のように、プログラムの実装・デバッグ、実行環境の構築の繰り返しを行うことなく、短時間でリアルタイム制御に必要な応答時間を確保したプログラム設計の確認が可能となる。そして、プログラムの実装・デバッグ、実行環境の構築は１回のみ行えばよく、ＧＰＵを用いたアプリケーションプログラムの作成に要する時間をより短縮することができる。
【００３４】
以下、本実施形態に係るプログラム作成支援装置の構成とその機能について、詳細に説明していく。
【００３５】
＜２．ハードウェア構成例＞
まず、図２および図３に基づいて、本発明の実施形態に係るプログラム作成支援装置１０のハードウェア構成について、詳細に説明する。なお、図２は、本発明の実施形態に係るプログラム作成支援装置１０のハードウェア構成を説明するブロック図である。図３は、本実施形態に係るＧＰＵ１０２のハードウェア構成を説明する説明図である。
【００３６】
プログラム作成支援装置１０は、主に、ＣＰＵ１０１と、ＧＰＵ１０２と、ＲＯＭ１０３と、ＲＡＭ１０５と、を備える。また、プログラム作成支援装置１０は、更に、バス１０７と、入力装置１０９と、出力装置１１１と、ストレージ装置１１３と、ドライブ１１５と、接続ポート１１７と、通信装置１１９とを備える。
【００３７】
ＣＰＵ１０１は、演算処理装置および制御装置として機能し、ＲＯＭ１０３、ＲＡＭ１０５、ストレージ装置１１３、またはリムーバブル記録媒体１２１に記録された各種プログラムに従って、プログラム作成支援装置１０内の動作全般またはその一部を制御する。ＧＰＵ１０２は、ＣＰＵ１０１とともに、演算処理装置および制御装置として機能し、ＲＯＭ１０３、ＲＡＭ１０５、ストレージ装置１１３、またはリムーバブル記録媒体１２１に記録された各種プログラムに従って、プログラム作成支援装置１０内の動作全般またはその一部を制御する超高速並列処理装置である。
【００３８】
ＧＰＵ１０２は、例えば、図３に示すように、複数のマルチプロセッサ（第１演算処理部）１４０を備える。各マルチプロセッサ１４０は、シェアードメモリ（第１メモリ）１４２と、当該シェアードメモリ１４２にアクセス可能な複数のストリーミングプロセッサ（第２演算処理部）１４４とからなる。シェアードメモリ１４２は、小容量であるが高速にデータ転送することができる。ストリーミングプロセッサ１４４により頻繁に読み出されるデータをシェアードメモリ１４２に格納するようにプログラムを設計することで、高速演算処理を実現することができる。また、ストリーミングプロセッサ１４４は、それぞれローカルメモリ（図示せず。）を備えている。ローカルメモリはシェアードメモリ１４２よりさらに高速にデータ転送することが可能である。
【００３９】
また、ＧＰＵ１０２は、ビデオメモリ（共通メモリ）２０にアクセス可能に設けられる。ビデオメモリ２０は、大容量であるがデータ転送速度はシェアードメモリ１４２より遅い。したがって、ビデオメモリ２０には、ＧＰＵ１０２で実行されるプログラムにて共通して使用される変数等の情報が記憶される。
【００４０】
ＲＯＭ１０３は、ＣＰＵ１０１あるいはＧＰＵ１０２が使用するプログラムや演算パラメータ等を記憶する。ＲＡＭ１０５は、ＣＰＵ１０１あるいはＧＰＵ１０２が使用するプログラムや、プログラムの実行において適宜変化するパラメータ等を一次記憶する。これらはＣＰＵバス等の内部バスにより構成されるバス１０７により相互に接続されている。本実施形態において、ＲＯＭ１０３は、第２メモリとして機能する。
【００４１】
バス１０７は、ブリッジを介して、ＰＣＩ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ／Ｉｎｔｅｒｆａｃｅ）バスなどの外部バスに接続されている。
【００４２】
入力装置１０９は、例えば、マウス、キーボード、タッチパネル、ボタン、スイッチおよびレバーなどユーザが操作する操作手段である。また、入力装置１０９は、例えば、赤外線やその他の電波を利用したリモートコントロール手段（いわゆる、リモコン）であってもよいし、プログラム作成支援装置１０の操作に対応したＰＤＡ等の外部接続機器１２３であってもよい。さらに、入力装置１０９は、例えば、上記の操作手段を用いてユーザにより入力された情報に基づいて入力信号を生成し、ＣＰＵ１０１あるいはＧＰＵ１０２に出力する入力制御回路などから構成されている。プログラム作成支援装置１０のユーザは、この入力装置１０９を操作することにより、プログラム作成支援装置１０に対して各種のデータを入力したり処理動作を指示したりすることができる。
【００４３】
出力装置１１１は、取得した情報をユーザに対して視覚的または聴覚的に通知することが可能な装置で構成される。このような装置として、ＣＲＴディスプレイ装置、液晶ディスプレイ装置、プラズマディスプレイ装置、ＥＬディスプレイ装置およびランプなどの表示装置や、スピーカおよびヘッドホンなどの音声出力装置や、プリンタ装置、携帯電話、ファクシミリなどがある。出力装置９１１は、例えば、プログラム作成支援装置１０が行った各種処理により得られた結果を出力する。具体的には、表示装置は、プログラム作成支援装置１０が行った各種処理により得られた結果を、テキストまたはイメージで表示する。他方、音声出力装置は、再生された音声データや音響データ等からなるオーディオ信号をアナログ信号に変換して出力する。
【００４４】
ストレージ装置１１３は、プログラム作成支援装置１０の記憶部の一例として構成されたデータ格納用の装置である。ストレージ装置１１３は、例えば、ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）等の磁気記憶部デバイス、半導体記憶デバイス、光記憶デバイス、または光磁気記憶デバイス等により構成される。このストレージ装置１１３は、ＣＰＵ１０１あるいはＧＰＵ１０２が実行するプログラムや各種データ、および外部から取得した各種のデータなどを格納する。
【００４５】
ドライブ１１５は、記録媒体用リーダライタであり、プログラム作成支援装置１０に内蔵、あるいは外付けされる。ドライブ１１５は、装着されている磁気ディスク、光ディスク、光磁気ディスク、または半導体メモリ等のリムーバブル記録媒体１２１に記録されている情報を読み出して、ＲＡＭ１０５に出力する。また、ドライブ１１５は、装着されている磁気ディスク、光ディスク、光磁気ディスク、または半導体メモリ等のリムーバブル記録媒体１２１に記録を書き込むことも可能である。リムーバブル記録媒体１２１は、例えば、ＣＤメディア、ＤＶＤメディア、Ｂｌｕ−ｒａｙメディア等である。また、リムーバブル記録媒体１２１は、コンパクトフラッシュ（登録商標）（ＣｏｍｐａｃｔＦｌａｓｈ：ＣＦ）、フラッシュメモリ、または、ＳＤメモリカード（Ｓｅｃｕｒｅ  Ｄｉｇｉｔａｌ  ｍｅｍｏｒｙ  ｃａｒｄ）等であってもよい。また、リムーバブル記録媒体１２１は、例えば、非接触型ＩＣチップを搭載したＩＣカード（Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ  ｃａｒｄ）または電子機器等であってもよい。
【００４６】
接続ポート１１７は、機器をプログラム作成支援装置１０に直接接続するためのポートである。接続ポート１１７の一例として、ＵＳＢ（Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ）ポート、ＩＥＥＥ１３９４ポート、ＳＣＳＩ（Ｓｍａｌｌ  Ｃｏｍｐｕｔｅｒ  Ｓｙｓｔｅｍ  Ｉｎｔｅｒｆａｃｅ）ポート、ＲＳ−２３２Ｃポート等がある。この接続ポート１１７に外部接続機器１２３を接続することで、プログラム作成支援装置１０は、外部接続機器１２３から直接各種のデータを取得したり、外部接続機器１２３に各種のデータを提供したりする。
【００４７】
通信装置１１９は、例えば、通信網１２５に接続するための通信デバイス等で構成された通信インターフェースである。通信装置１１９は、例えば、有線または無線ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、Ｂｌｕｅｔｏｏｔｈ（登録商標）、またはＷＵＳＢ（Ｗｉｒｅｌｅｓｓ  ＵＳＢ）用の通信カード等である。また、通信装置１１９は、光通信用のルータ、ＡＤＳＬ（Ａｓｙｍｍｅｔｒｉｃ  Ｄｉｇｉｔａｌ  Ｓｕｂｓｃｒｉｂｅｒ  Ｌｉｎｅ）用のルータ、または、各種通信用のモデム等であってもよい。この通信装置９１９は、例えば、インターネットや他の通信機器との間で、例えばＴＣＰ／ＩＰ等の所定のプロトコルに則して信号等を送受信することができる。また、通信装置１１９に接続される通信網１２５は、有線または無線によって接続されたネットワーク等により構成され、例えば、インターネット、家庭内ＬＡＮ、赤外線通信、ラジオ波通信または衛星通信等であってもよい。
【００４８】
以上、本発明の実施形態に係るプログラム作成支援装置１０の機能を実現可能なハードウェア構成の一例を示した。上記の各構成要素は、汎用的な部材を用いて構成されていてもよいし、各構成要素の機能に特化したハードウェアにより構成されていてもよい。従って、本実施形態を実施する時々の技術レベルに応じて、適宜、利用するハードウェア構成を変更することが可能である。
【００４９】
＜３．プログラム作成支援装置の機能構成＞
次に、図４に基づいて、プログラム作成支援装置１０におけるアプリケーションプログラムの実行時間を予測する実行予測時間算出処理を行う予測処理部２００について説明する。図４は、本実施形態に係るプログラム作成支援装置１０の予測処理部２００の機能構成を示す機能ブロック図である。予測処理部２００は、図４に示すように、プログラム取得部２１０と、演算処理部２２０と、出力部２３０と、設定情報記憶部２４０と、メモリ２５０とからなる。
【００５０】
プログラム取得部２１０は、最大実行予測時間を算出するアプリケーションプログラムを取得する。本実施形態では、プログラム取得部２１０は、ユーザが図１に示した予測処理画面１内の各入力領域に入力したソースプログラムを取得する。プログラム取得部２１０は、取得したソースプログラムをメモリ２５０に記憶し、演算処理部２２０に対してソースプログラムが取得された旨の情報を通知する。
【００５１】
演算処理部２２０は、プログラム取得部２１０により取得されたソースプログラムを解析し、最大実行予測時間を算出する。演算処理部２２０は、例えば図２のＣＰＵ１０１により実現される。演算処理部２２０は、ＣＰＵ側で実行されるソースプログラムとＧＰＵ側で実行されるソースプログラムとについてそれぞれ実行予測時間を算出し、ソースプログラム全体としての最大実行予測時間を算出する。演算処理部２２０による最大実行予測時間の算出処理の詳細については後述する。演算処理部２２０は、算出した最大実行予測時間を出力部２３０へ出力し、ユーザへ通知する。
【００５２】
出力部２３０は、例えば図２の出力装置１１１であって、最大実行予測時間を出力する。具体的には、出力部２３０は情報を表示するディスプレイ等の表示装置とすることができ、この場合、図１に示すように、表示装置に表示された予測処理画面１内の出力結果表示領域８に最大実行予測時間を表示させることができる。なお、予測処理画面１の出力結果表示領域８には、最大実行予測時間のみならず、例えばＣＰＵ側で実行されるソースプログラムおよびＧＰＵ側で実行されるソースプログラムの各実行予測時間等を表示させるようにしてもよい。また、出力部２３０は、最大実行予測時間を音声出力するスピーカ等であってもよい、
【００５３】
設定情報記憶部２４０は、演算処理部２２０による最大実行予測時間の算出処理において必要となる設定情報を記憶する記憶部であり、例えば図２のＲＯＭ１０３やＲＡＭ１０５等により実現される。設定情報としては、例えば、ＧＰＵプログラムの呼び出しオーバーヘッド定数や、ロジック実行時間、メモリ参照時間、シェアードメモリ参照時間、グローバルメモリ参照時間等があり、プログラムの各ステップを構成する基本的処理の実行時間の情報の設定値とも言える。これらの設定値はＣＰＵおよびＧＰＵ等の仕様またはユーザによる実測値もしくは経験値に基づいて決定してもよい。そして、設定情報は、プログラム作成支援装置１０に予め記憶されていてもよく、ユーザが入力して設定してもよい。
【００５４】
メモリ２５０は、演算処理部２２０による最大実行予測時間の算出処理において必要な情報を一時的に記憶する記憶部であり、例えば図２のＲＡＭ１０５等により実現される。
【００５５】
＜４．最大実行予測時間の算出処理＞
プログラム作成支援装置１０の予測処理部２００は、上述の各機能部を機能させて、アプリケーションプログラムの最大実行予測時間を算出する。ここで、アプリケーションプログラムの最大実行予測時間は、ＣＰＵ側実行プログラムの実行予測時間（Ａ）、ＧＰＵ側実行プログラムの実行予測時間（Ｃ、Ｄ）、およびＣＰＵ側実行プログラムからＧＰＵ側実行プログラムを呼び出すオーバーヘッド時間（Ｂ）の和で表される。予測処理部２００の演算処理部２２０は、これらの時間を順次算出し、加算して、最大実行予測時間を算出する。
【００５６】
以下、図５〜図１５に基づいて、本実施形態に係る予測処理部２００による最大実行予測時間の算出処理を説明していく。なお、以下においては、既にユーザによって、ＣＰＵ側実行プログラムがＣＰＵ側実行プログラム入力領域２に、ＧＰＵ側実行プログラムがＧＰＵ側実行プログラム入力領域３に入力され、予測処理部２００のプログラム取得部２１０によって入力された各プログラムがメモリ２５０に記憶された状態であるとする。また、本実施形態におけるアプリケーションプログラムはＣ言語によって記述されているものとして説明する。しかし、本発明はかかる例に限定されず、アプリケーションプログラムの記述言語はＣ言語以外のプログラム言語であってもよい。
【００５７】
［４−１．呼び出しオーバーヘッド時間（Ｂ）の算出処理］
まず、図５に基づいて、ＣＰＵ側実行プログラムからＧＰＵ側実行プログラムを呼び出すオーバーヘッド時間（Ｂ）の算出処理を説明する。図５は、ＣＰＵ側実行プログラムからＧＰＵ側実行プログラムを呼び出すオーバーヘッド時間（Ｂ）の算出処理を示すフローチャートである。
【００５８】
ＣＰＵ側実行プログラムからＧＰＵ側実行プログラムを呼び出すオーバーヘッド時間（Ｂ）の算出処理は、図５に示すように、まず、演算処理部２２０によりＣＰＵ側実行プログラム内で、関数名入力領域７に入力された関数が呼び出された箇所を探索する（Ｓ１００）。関数名入力領域７には、ＣＰＵ側実行プログラムがＧＰＵ側実行プログラムを呼び出すための関数名がユーザによって入力される。例えば、図１に示す例では、関数「func1」が、ＣＰＵ側実行プログラムがＧＰＵ側実行プログラムを呼び出す関数名であり、ＣＰＵ側実行プログラムに関数「func1」が出現する度にＧＰＵ側実行プログラムが実行されることになる。
【００５９】
次いで、演算処理部２２０は、ＣＰＵ側実行プログラムにおけるＧＰＵ側実行プログラムの呼び出し箇所がfor文で囲まれているか否かを判定する（Ｓ１０２）。すなわち、ステップＳ１０２では、繰り返し処理によって複数回ＣＰＵ側実行プログラムがＧＰＵ側実行プログラムを呼び出しているか否かを判定している。ＧＰＵ側実行プログラムを複数回呼び出していれば、その分ＧＰＵ側実行プログラムの呼び出し時間がかかるため、最大実行予測時間に考慮する必要がある。
【００６０】
ステップＳ１０２にてＧＰＵ側実行プログラムの呼び出し箇所がfor文で囲まれていれば、演算処理部２２０は、for文のループ回数（繰り返し処理によりＧＰＵ側実行プログラムが呼び出される回数）をカウントし、繰り返し回数ｎにセットする（Ｓ１０４）。一方、ステップＳ１０２にてＧＰＵ側実行プログラムの呼び出し箇所がfor文で囲まれていなければ、演算処理部２２０は、繰り返し回数ｎに１をセットする（Ｓ１０６）。
【００６１】
その後、演算処理部２２０は、当該ＧＰＵ側実行プログラムの呼び出し箇所におけるＧＰＵ側実行プログラムのオーバーヘッド時間を算出する（Ｓ１０８）。ＣＰＵ側実行プログラムからＧＰＵ側実行プログラムを１回呼び出すのに要する時間であるＧＰＵプログラムの呼び出しオーバーヘッド定数ｍは、設定情報記憶部２４０に記憶されている。演算処理部２２０は、呼び出しオーバーヘッド定数ｍを設定情報記憶部２４０から取得し、呼び出しオーバーヘッド定数ｍにステップＳ１０４またはＳ１０６にてセットされた繰り返し回数ｎを掛けて、オーバーヘッド時間Ｂに加算する。
【００６２】
そして、演算処理部２２０は、ＣＰＵ側実行プログラムにおけるＧＰＵ側実行プログラムの呼び出し箇所すべてについてチェックしたか否かを判定し（Ｓ１１０）、チェックしていない呼び出し箇所があれば、次の呼び出し箇所についてステップＳ１０２〜Ｓ１０８の処理を繰り返す（Ｓ１１２）。一方、ステップＳ１１０にてすべてのＧＰＵ側実行プログラムの呼び出し箇所についてチェックしていると判定した場合には、当該処理を終了する。図５に示す処理が終了した段階でのオーバーヘッド時間Ｂが、アプリケーションプログラムにおけるオーバーヘッド時間Ｂとなる。
【００６３】
［４−２．ＣＰＵ側実行プログラムの実行予測時間（Ａ）の算出処理］
次いで、図６、図９および図１０に基づいて、ＣＰＵ側実行プログラムの実行予測時間（Ａ）の算出処理を説明する。図６は、ＣＰＵ側実行プログラムの実行予測時間（Ａ）の算出処理を示すフローチャートである。図９は、変数一覧リストの一構成例を示す説明図である。図１０は、ロジック行一覧リストの一構成例を示す説明図である。
【００６４】
ＣＰＵ側実行プログラムの実行予測時間（Ａ）は、ＣＰＵ側実行プログラムで行われるロジック処理の実行時間（総ロジック実行時間Ａ１）と、当該プログラムを実行するにあたりメモリを参照している時間（総メモリ参照時間Ａ２）との加算値で表すことができる。そこで、まず、演算処理部２２０は、図６に示すように、ＣＰＵ側実行プログラム内における変数宣言を探索し、変数一覧リストに格納する（Ｓ２００）。変数一覧リストは、ＣＰＵ側実行プログラムの実行予測時間を算出するための作業用テーブルであり、例えば図９に示すように、変数名、変数の型、サイズ等が格納される。変数一覧リストは、図４のメモリ２５０に記憶されている。
【００６５】
次いで、演算処理部２２０は、ＣＰＵ側実行プログラム内のロジック部の行番号を、ロジック行一覧リストに格納する（Ｓ２０２）。ロジック行一覧リストも、ＣＰＵ側実行プログラムの実行予測時間を算出するための作業用テーブルであり、例えば図１０に示すように、ロジック部の行番号、回数、変数参照回数等が格納される。ロジック行一覧リストも、図４のメモリ２５０に記憶されている。
【００６６】
さらに、演算処理部２２０は、ロジック行一覧リストの各行について、ロジック行がfor文で囲まれているか否かを判定する（Ｓ２０４）。すなわち、ステップＳ２０４では、繰り返し処理によって複数回当該ロジック行が実行されているか否かを判定している。ステップＳ２０４にてロジック行がfor文で囲まれていれば、演算処理部２２０は、for文のループ回数をカウントし、ロジック行一覧リストの「回数」にセットする（Ｓ２０６）。一方、ステップＳ２０４にてロジック行がfor文で囲まれていなければ、演算処理部２２０は、ロジック行一覧リストの「回数」に１をセットする（Ｓ２０８）。
【００６７】
その後、演算処理部２２０は、ロジック行一覧リストに格納されたすべてのロジック行についてステップＳ２０４〜Ｓ２０８の処理を実行したか否かをチェックする（Ｓ２１０）。すべてのロジック行についてチェックしていない場合には、演算処理部２２０は、次のロジック行について、ステップＳ２０４〜Ｓ２０８の処理を繰り返す（Ｓ２１２）。一方、Ｓ２１０にてすべてのロジック行についてチェックした場合には、演算処理部２２０は、ロジック行一覧リストの各行について、変数一覧リストに登録されている変数の出現回数をカウントし、ロジック行一覧リストの「変数参照回数」に格納する（Ｓ２１４）。
【００６８】
ステップＳ２１４では、ＣＰＵ側実行プログラムを実行する際に、ＣＰＵ１０１が何回メモリにアクセスするかをカウントしている。演算処理部２２０は、ロジック行一覧リストの各行について、変数一覧リストに登録されている変数の出現回数に、ロジック行一覧リストの該当行の「回数」を掛け合わせて、「変数参照回数」に格納する。
【００６９】
次いで、演算処理部２２０は、ＣＰＵ側実行プログラムにおける総ロジック実行時間Ａ１を算出する（Ｓ２１６）。ロジック行を１つ実行するのに要するロジック実行時間Ｌ１は、設定情報記憶部２４０に記憶されている。演算処理部２２０は、ロジック実行時間Ｌ１を設定情報記憶部２４０から取得し、ロジック実行時間Ｌ１にロジック行一覧リストの「回数」の積算値を掛け合わせて、総ロジック実行時間Ａ１を算出する。
【００７０】
さらに、演算処理部２２０は、ＣＰＵ側実行プログラムにおける総メモリ参照時間Ａ２を算出する（Ｓ２１８）。変数を１回参照するのに要するメモリ参照時間Ｍ１も、設定情報記憶部２４０に記憶されている。演算処理部２２０は、メモリ参照時間Ｍ１を設定情報記憶部２４０から取得し、メモリ参照時間Ｍ１にロジック行一覧リストの「変数参照回数」の積算値を掛け合わせて、総メモリ参照時間Ａ２を算出する。
【００７１】
その後、演算処理部２２０は、ステップＳ２１６で算出した総ロジック実行時間Ａ１と、ステップＳ２１８で算出した総メモリ参照時間Ａ２とを加算し、ＣＰＵ側実行プログラムの実行予測時間Ａとする。
【００７２】
［４−３．ＧＰＵ側実行プログラムの実行予測時間（Ｃ、Ｄ）の算出処理］
次いで、図７、図８、図１１〜図１５に基づいて、ＧＰＵ側実行プログラムの実行予測時間（Ｃ、Ｄ）の算出処理を説明する。図７は、ＧＰＵ側実行プログラムのうち、ブロックプログラムについての実行予測時間（Ｃ）の算出処理を示すフローチャートである。図８は、ＧＰＵ側実行プログラムのうち、スレッドプログラムについての実行予測時間（Ｄ）の算出処理を示すフローチャートである。図１１は、グローバル変数一覧リストの一構成例を示す説明図である。図１２は、シェアード変数一覧リストの一構成例を示す説明図である。図１３は、ブロックプログラムのロジック行一覧リストの一構成例を示す説明図である。図１４は、ローカル変数一覧リストの一構成例を示す説明図である。図１５は、スレッドプログラムのロジック行一覧リストの一構成例を示す説明図である。
【００７３】
上述したように、ＧＰＵ側実行プログラムは、マルチプロセッサ１４０により実行されるブロックプログラム（第１プログラム）と、ストリーミングプロセッサ１４４によりされるスレッドプログラム（第２プログラム）とからなる。ブロックプログラムにおいてのみ使用される変数であるシェアード変数はシェアードメモリ１４２に格納することで、マルチプロセッサ１４０へ高速に伝送することができる。同様に、スレッドプログラムにおいてのみ使用される変数であるスレッド変数は、ストリーミングプロセッサ１４４のローカルメモリ（図示せず。）に格納することで、ストリーミングプロセッサ１４４へより高速に伝送することができる。なお、ＧＰＵ１０２に搭載されているマルチプロセッサ１４０の個数をブロック数ともいい、ＧＰＵ１０２に搭載されているストリーミングプロセッサ１４４の個数をスレッド数ともいう。
【００７４】
（４−３−１．準備処理）
ＧＰＵ側実行プログラムの実行予測時間（Ｃ、Ｄ）の算出処理の準備処理として、演算処理部２２０は、図１のグローバルメモリ入力領域６に入力された変数宣言を探索し、グローバル変数一覧リストに格納する。グローバルメモリ入力領域６に入力された変数は、ＧＰＵ側実行プログラムにて共通の変数（グローバル変数）であり、ビデオメモリ２０に格納されている。グローバル変数一覧リストは、ＧＰＵ側実行プログラムの実行予測時間を算出するための作業用テーブルであり、例えば図１１に示すように、グローバル変数名、グローバル変数の型、サイズ等が格納される。グローバル変数一覧リストは、図４のメモリ２５０に記憶されている。
【００７５】
なお、ＧＰＵ側実行プログラムにて宣言される変数のうち、グローバル変数以外の変数は、上述したように、通常、シェアードメモリ１４２またはストリーミングプロセッサ１４４のローカルメモリ（図示せず。）に格納される。演算処理部２２０は、グローバル変数一覧リストを作成すると、以下の手順に従って、ブロックプログラムについての実行予測時間（Ｃ）およびスレッドプログラムについての実行予測時間（Ｄ）を算出する。
【００７６】
（４−３−２．ブロックプログラムについての実行予測時間（Ｃ）の算出処理）
ブロックプログラムについての実行予測時間（Ｃ）の算出処理では、まず、演算処理部２２０は、図７に示すように、ブロックプログラム入力領域４に入力されたプログラムから、シェアード変数を探索し、シェアード変数一覧リストに格納する（Ｓ３００）。ブロックプログラムにて宣言された変数であるシェアード変数は、各マルチプロセッサ１４０のシェアードメモリ１４２に記憶されている。一般に、当該シェアード変数が格納されたシェアードメモリ１４２にアクセス可能なストリーミングプロセッサ１４４にて実行されるプログラムに高い頻度で出現する変数がシェアード変数として設定される。
【００７７】
シェアード変数一覧リストは、ＧＰＵ側実行プログラムの実行予測時間を算出するための作業用テーブルであり、例えば図１２に示すように、シェアード変数名、シェアード変数の型、サイズ等が格納される。シェアード変数一覧リストは、図４のメモリ２５０に記憶されている。
【００７８】
次いで、演算処理部２２０は、ブロックプログラム入力領域４に入力されたプログラム内のロジック部の行番号を、ブロックプログラムのロジック行一覧リストに格納する（Ｓ３０２）。ブロックプログラムのロジック行一覧リストも、ＧＰＵ側実行プログラムの実行予測時間を算出するための作業用テーブルであり、例えば図１３に示すように、ロジック部の行番号、回数、シェアード変数参照回数、グローバル変数参照回数等が格納される。ブロックプログラムのロジック行一覧リストも、図４のメモリ２５０に記憶されている。
【００７９】
さらに、演算処理部２２０は、ブロックプログラムのロジック行一覧リストの各行について、ロジック行がfor文で囲まれているか否かを判定する（Ｓ３０４）。すなわち、ステップＳ３０４では、繰り返し処理によって複数回当該ロジック行が実行されているか否かを判定している。ステップＳ３０４にてロジック行がfor文で囲まれていれば、演算処理部２２０は、for文のループ回数をカウントし、ブロックプログラムのロジック行一覧リストの「回数」にセットする（Ｓ３０６）。一方、ステップＳ３０４にてロジック行がfor文で囲まれていなければ、演算処理部２２０は、ブロックプログラムのロジック行一覧リストの「回数」に１をセットする（Ｓ３０８）。
【００８０】
その後、演算処理部２２０は、ブロックプログラムのロジック行一覧リストに格納されたすべてのロジック行についてステップＳ３０４〜Ｓ３０８の処理を実行したか否かをチェックする（Ｓ３１０）。すべてのロジック行についてチェックしていない場合には、演算処理部２２０は、次のロジック行について、ステップＳ３０４〜Ｓ３０８の処理を繰り返す（Ｓ３１２）。一方、Ｓ３１０にてすべてのロジック行についてチェックした場合には、演算処理部２２０は、ブロックプログラムのロジック行一覧リストの各行について、シェアード変数一覧リストに登録されているシェアード変数の出現回数をカウントし、ブロックプログラムのロジック行一覧リストの「シェアード変数参照回数」に格納する（Ｓ３１４）。
【００８１】
ステップＳ３１４では、ＧＰＵ側実行プログラムを実行する際に、ＧＰＵ１０２が何回シェアードメモリ１４２にアクセスするかをカウントしている。演算処理部２２０は、ブロックプログラムのロジック行一覧リストの各行について、シェアード変数一覧リストに登録されている変数の出現回数に、ロジック行一覧リストの該当行の「回数」を掛け合わせて、「シェアード変数参照回数」に格納する。
【００８２】
また、演算処理部２２０は、ブロックプログラムのロジック行一覧リストの各行について、グローバル変数一覧リストに登録されているグローバル変数の出現回数をカウントし、ブロックプログラムのロジック行一覧リストの「グローバル変数参照回数」に格納する（Ｓ３１６）。ステップＳ３１６では、ＧＰＵ側実行プログラムを実行する際に、ＧＰＵ１０２が何回ビデオメモリ２０にアクセスするかをカウントしている。演算処理部２２０は、ブロックプログラムのロジック行一覧リストの各行について、グローバル変数一覧リストに登録されている変数の出現回数に、ロジック行一覧リストの該当行の「回数」を掛け合わせて、「グローバル変数参照回数」に格納する。
【００８３】
その後、演算処理部２２０は、ＧＰＵ側実行プログラムのブロックプログラムにおける総ロジック実行時間Ｃ１を算出する（Ｓ３１８）。ブロックプログラムのロジック行を１つ実行するのに要するロジック実行時間Ｌ２は、設定情報記憶部２４０に記憶されている。演算処理部２２０は、ロジック実行時間Ｌ２を設定情報記憶部２４０から取得し、ロジック実行時間Ｌ２にブロックプログラムのロジック行一覧リストの「回数」の積算値を掛け合わせて、総ロジック実行時間Ｃ１を算出する。
【００８４】
次いで、演算処理部２２０は、ＧＰＵ側実行プログラムのブロックプログラムにおける総シェアードメモリ参照時間Ｃ２を算出する（Ｓ３２０）。シェアード変数を１回参照するのに要するシェアードメモリ参照時間Ｍ２も、設定情報記憶部２４０に記憶されている。演算処理部２２０は、シェアードメモリ参照時間Ｍ２を設定情報記憶部２４０から取得し、シェアードメモリ参照時間Ｍ２にブロックプログラムのロジック行一覧リストの「シェアード変数参照回数」の積算値を掛け合わせて、総シェアードメモリ参照時間Ｃ２を算出する。
【００８５】
さらに、演算処理部２２０は、ＧＰＵ側実行プログラムのブロックプログラムにおける総グローバルメモリ参照時間Ｃ３を算出する（Ｓ３２２）。グローバル変数を１回参照するのに要するグローバルメモリ参照時間Ｇも、設定情報記憶部２４０に記憶されている。演算処理部２２０は、グローバルメモリ参照時間Ｇを設定情報記憶部２４０から取得し、グローバルメモリ参照時間Ｇにブロックプログラムのロジック行一覧リストの「グローバル変数参照回数」の積算値を掛け合わせて、総グローバルメモリ参照時間Ｃ３を算出する。
【００８６】
その後、演算処理部２２０は、ステップＳ３１８で算出した総ロジック実行時間Ｃ１と、ステップＳ３２０で算出した総シェアードメモリ参照時間Ｃ２と、ステップＳ３２２で算出した総グローバルメモリ参照時間Ｃ３とを加算し、ブロックプログラムの実行予測時間Ｃとする。
【００８７】
（４−３−３．スレッドプログラムについての実行予測時間（Ｄ）の算出処理）
スレッドプログラムについての実行予測時間（Ｄ）の算出処理も、図７に示したブロックプログラムについての実行予測時間（Ｃ）の算出処理と同様に行うことができる。以下、図８に基づいて、スレッドプログラムについての実行予測時間（Ｄ）の算出処理を説明するが、図７と同様の処理については詳細な説明を省略する。
【００８８】
まず、演算処理部２２０は、図８に示すように、スレッドプログラム入力領域５に入力されたプログラムから、ローカル変数を探索し、ローカル変数一覧リストに格納する（Ｓ４００）。スレッドプログラムにて宣言された変数であるローカル変数は、スレッドプログラムのみで使用され、各ストリーミングプロセッサ１４４内のローカルメモリ（レジスタ）に記憶されている。ローカル変数一覧リストは、ＧＰＵ側実行プログラムの実行予測時間を算出するための作業用テーブルであり、例えば図１４に示すように、ローカル変数名、ローカル変数の型、サイズ等が格納される。ローカル変数一覧リストは、図４のメモリ２５０に記憶されている。
【００８９】
次いで、演算処理部２２０は、スレッドプログラム入力領域４に入力されたプログラム内のロジック部の行番号を、スレッドプログラムのロジック行一覧リストに格納する（Ｓ４０２）。スレッドプログラムのロジック行一覧リストも、ＧＰＵ側実行プログラムの実行予測時間を算出するための作業用テーブルであり、例えば図１３に示すように、ロジック部の行番号、回数、ローカル変数参照回数、グローバル変数参照回数等が格納される。スレッドプログラムのロジック行一覧リストも、図４のメモリ２５０に記憶されている。
【００９０】
さらに、演算処理部２２０は、スレッドプログラムのロジック行一覧リストの各行について、ロジック行がfor文で囲まれているか否かを判定する（Ｓ４０４）。ステップＳ４０４も、図７のステップＳ３０４と同様に処理することができる。ステップＳ４０４にてロジック行がfor文で囲まれていれば、演算処理部２２０は、for文のループ回数をカウントし、スレッドプログラムのロジック行一覧リストの「回数」にセットする（Ｓ４０６）。一方、ステップＳ４０４にてロジック行がfor文で囲まれていなければ、演算処理部２２０は、スレッドプログラムのロジック行一覧リストの「回数」に１をセットする（Ｓ４０８）。
【００９１】
その後、演算処理部２２０は、スレッドプログラムのロジック行一覧リストに格納されたすべてのロジック行についてステップＳ４０４〜Ｓ４０８の処理を実行したか否かをチェックする（Ｓ４１０）。すべてのロジック行についてチェックしていない場合には、演算処理部２２０は、次のロジック行について、ステップＳ４０４〜Ｓ４０８の処理を繰り返す（Ｓ４１２）。一方、Ｓ４１０にてすべてのロジック行についてチェックした場合には、演算処理部２２０は、スレッドプログラムのロジック行一覧リストの各行について、ローカル変数一覧リストに登録されているローカル変数の出現回数をカウントし、スレッドプログラムのロジック行一覧リストの「ローカル変数参照回数」に格納する（Ｓ４１４）。
【００９２】
ステップＳ４１４では、ＧＰＵ側実行プログラムを実行する際に、ＧＰＵ１０２が何回ストリーミングプロセッサ１４４のローカルメモリにアクセスするかをカウントしている。演算処理部２２０は、スレッドプログラムのロジック行一覧リストの各行について、ローカル変数一覧リストに登録されている変数の出現回数に、ロジック行一覧リストの該当行の「回数」を掛け合わせて、「ローカル変数参照回数」に格納する。
【００９３】
また、演算処理部２２０は、スレッドプログラムのロジック行一覧リストの各行について、グローバル変数一覧リストに登録されているグローバル変数の出現回数をカウントし、スレッドプログラムのロジック行一覧リストの「グローバル変数参照回数」に格納する（Ｓ４１６）。ステップＳ４１６の処理は、図７のステップＳ３１６と同様に処理することができる。演算処理部２２０は、スレッドプログラムのロジック行一覧リストの各行について、グローバル変数一覧リストに登録されている変数の出現回数に、ロジック行一覧リストの該当行の「回数」を掛け合わせて、「グローバル変数参照回数」に格納する。
【００９４】
その後、演算処理部２２０は、ＧＰＵ側実行プログラムのスレッドプログラムにおける総ロジック実行時間Ｄ１を算出する（Ｓ４１８）。スレッドプログラムのロジック行を１つ実行するのに要するロジック実行時間Ｌ３は、設定情報記憶部２４０に記憶されている。演算処理部２２０は、ロジック実行時間Ｌ３を設定情報記憶部２４０から取得し、ロジック実行時間Ｌ３にスレッドプログラムのロジック行一覧リストの「回数」の積算値を掛け合わせて、総ロジック実行時間Ｄ１を算出する。
【００９５】
次いで、演算処理部２２０は、ＧＰＵ側実行プログラムのスレッドプログラムにおける総ローカルメモリ参照時間Ｄ２を算出する（Ｓ４２０）。ローカル変数を１回参照するのに要するローカルメモリ参照時間Ｍ３も、設定情報記憶部２４０に記憶されている。演算処理部２２０は、ローカルメモリ参照時間Ｍ３を設定情報記憶部２４０から取得し、ローカルメモリ参照時間Ｍ３にスレッドプログラムのロジック行一覧リストの「ローカル変数参照回数」の積算値を掛け合わせて、総ローカルメモリ参照時間Ｄ２を算出する。
【００９６】
さらに、演算処理部２２０は、ＧＰＵ側実行プログラムのスレッドプログラムにおける総グローバルメモリ参照時間Ｄ３を算出する（Ｓ４２２）。ステップＳ４２２の処理は、図７のステップＳ３２２の処理と同様にすることができる。演算処理部２２０は、グローバルメモリ参照時間Ｇを設定情報記憶部２４０から取得し、グローバルメモリ参照時間Ｇにスレッドプログラムのロジック行一覧リストの「グローバル変数参照回数」の積算値を掛け合わせて、総グローバルメモリ参照時間Ｃ３を算出する。
【００９７】
その後、演算処理部２２０は、ステップＳ４１８で算出した総ロジック実行時間Ｄ１と、ステップＳ４２０で算出した総ローカルメモリ参照時間Ｄ２と、ステップＳ４２２で算出した総グローバルメモリ参照時間Ｄ３とを加算し、スレッドプログラムの実行予測時間Ｄとする。
【００９８】
（４−３−４．ＧＰＵ側実行プログラムの実行予測時間（Ｃ、Ｄ）の算出処理）
演算処理部２２０は、図７および図８に示した処理により、ブロックプログラムの実行予測時間Ｃとスレッドプログラムの実行予測時間Ｄとを加算して、ＧＰＵ側実行プログラムの実行予測時間を取得する。
【００９９】
［４−４．最大実行予測時間］
演算処理部２２０は、ＣＰＵ側実行プログラムの実行予測時間（Ａ）、ＧＰＵ側実行プログラムの実行予測時間（Ｃ、Ｄ）、およびＣＰＵ側実行プログラムからＧＰＵ側実行プログラムを呼び出すオーバーヘッド時間（Ｂ）を算出すると、これらの値を加算する。この加算値がアプリケーションプログラムの最大実行予測時間となる。演算処理部２２０は、アプリケーションプログラムの最大実行予測時間を算出すると、出力部２３０へ出力する。これにより、図１の予測処理画面１内の出力結果表示領域８に、アプリケーションプログラムの最大実行予測時間が表示される。
【０１００】
なお、出力結果表示領域８に、ＣＰＵ側実行プログラムの実行予測時間（Ａ）、ＧＰＵ側実行プログラムの実行予測時間（Ｃ、Ｄ）、およびＣＰＵ側実行プログラムからＧＰＵ側実行プログラムを呼び出すオーバーヘッド時間（Ｂ）をそれぞれ表示させるようにしてもよい。これにより、ユーザは、どの箇所の処理に時間を要しているかを確認することができ、アプリケーションプログラムの設計を効率よく行うことが可能となる。
【０１０１】
また、出力結果表示領域８に表示される最大実行予測時間が、オンラインリアルタイム制御で必要な時間（許容時間）内に収まっているか否かをユーザに提示することにより、アプリケーションプログラムの再設計の要否を明確に伝えることができる。例えば、最大実行予測時間が許容時間を超えている場合には、出力結果表示領域８に表示された最大実行予測時間の文字の色、あるいは領域の色等を、最大実行予測時間が許容時間以下である場合と相違させるようにして、ユーザに当該情報を提示することができる。
【０１０２】
以上、本発明の実施形態に係るプログラム作成支援装置１０の構成とこれによるプログラム作成支援処理について説明した。本実施形態によれば、ＧＰＵを用いて処理されるオンラインリアルタイム制御のためのアプリケーションプログラムを設計する際に、容易にアプリケーションプログラムの最大実行予測時間を取得することが可能となる。これにより、オンライオンリアルタイム制御の要件である必要な時間（許容時間）内に収めることができる。また、ＧＰＵを適用する際に必要な設計やプログラミング作業の時間を短縮できるので、コストを削減でき、工期も短縮することができる。さらには、従来、最適化計算は多大な時間を要していたため、精度を出すための十分な計算を実行できなかったが、本実施形態に係るプログラム作成支援装置１０では、ＧＰＵのマルチプロセッサに最適化計算を並列実行させており、また、本プログラム作成支援装置１０の構成により、必要な時間（許容時間）内に収めることができるため、プロセス制御システムにおける最適化制御精度を向上させ、操業変動への追従性も向上させることも期待される。
【０１０３】
＜５．適用例＞
本実施形態に係るプログラム作成支援装置１０を利用して作成されるアプリケーションプログラムの一例を図１６に示す。図１６は、熱プラント燃焼のオンライン最適化制御を行うアプリケーションプログラムの一例を示している。熱プラント燃焼のオンライン最適化制御装置は、実プロセスにおける燃料ガス温度や燃料ガス流量等の実績データや操業条件が入力値として入力されると、複数の候補解（例えば、燃料ガス温度や燃焼ガス流量等の設定候補値（設計変数））についてそれぞれ制御シミュレータによりシミュレートし、最適な設定値を決定して、制御情報としてプロセスコンピュータへ出力する。
【０１０４】
熱プラント燃焼のオンライン最適化制御を行うアプリケーションプログラムは、リアルタイムに制御情報を出力する必要があるため、高速に処理を実行する必要がある。そこで、ＧＰＵをパーソナルコンピュータのＣＰＵと並列処理させることにより、当該要求を満たすようにすることが考えられるが、ＣＰＵとＧＰＵとで実行する処理の振り分けやメモリの使用の仕方によって演算処理速度は大きく変化する。したがって、これらの点を考慮したアプリケーションプログラムの設計が必要である。一方で、熱プラント燃焼のオンライン最適化制御を行うアプリケーションプログラムの構成は複雑であり、ユーザがオンラインリアルタイム制御で必要な所定の時間内に演算処理を終えることができるかを判断するのは困難である。
【０１０５】
そこで、本実施形態に係るプログラム作成支援装置１０を利用して、熱プラント燃焼のオンライン最適化制御を行うアプリケーションプログラムを作成することで、容易に当該プログラムの最大実行予測時間を算出することができる。また、算出された最大実行予測時間が許容時間を超えている場合でも、プログラムの再設計が容易であり、ＧＰＵを適用する際に必要な設計やプログラミング作業の時間を短縮できる。
【０１０６】
作成されたアプリケーションプログラムは、例えば、ＣＰＵ側実行プログラムにて最適化制御の全体処理を行い、ＧＰＵ側実行プログラムにてシミュレーションの細部処理を実行するように構成される。また、ＧＰＵ側実行プログラムも、ＧＰＵ１０２のマルチプロセッサ１４０、ストリーミングプロセッサ１４４、シェアードメモリ１４２やローカルメモリ（図示せず。）等のハードウェア特性に応じて適切な処理が割り当てられている。
【０１０７】
図１６に示す例では、設計変数（１〜ｊ個）について実行される多目的最適化処理はＧＰＵ１０２のマルチプロセッサ１４０で並列計算され、伝熱計算の繰り返し処理はマルチプロセッサ１４０内のストリーミングプロセッサ１４４で並列計算される。例えば、ＧＰＵ１０２にマルチプロセッサ１４０が３０個、各マルチプロセッサ１４０にストリーミングプロセッサ１４４が８個搭載されている場合、設計変数（１〜ｊ個）について実行される最適化処理は、３０個のマルチプロセッサ１４０により並列計算される。一方、単純計算が繰り返される伝熱計算の繰り返し処理は、例えば最大１２８個のストリーミングプロセッサ１４４で並列計算される。
【０１０８】
ストリーミングプロセッサ１４４による繰り返し計算処理の１つとして、レンガとレンガとの間の熱交換計算処理がある。図１６に示すように、熱プラントにおいては、例えばレンガＡ、レンガＢ、レンガＣのように複数種類のレンガが用いられている。すべてのレンガについて、レンガ間の熱交換計算処理をそれぞれ独立して計算することが可能であるが、本実施例においては、スレッド数の上限により、いくつかのグループに分けてレンガ間の熱交換計算処理を実行している。
【０１０９】
例えば、熱プラント内のレンガ部のうち中央レンガ部を除く部分を、縦方向にｑ分割、横方向にｐ分割したとする。縦方向にｑ分割された区域のうち、ｍ分割分の区域にはレンガＡが、ｎ分割分の区域にはレンガＢが、ｌ分割分の区域にはレンガＣが用いられている。一方、レンガＡ、レンガＢ、レンガＣの横方向における分割数は、すべてｐとする。
【０１１０】
本実施例においては、ストリーミングプロセッサ１４４により熱プラントの同一種類のレンガ間の熱交換計算処理が並列して実行されている。例えば、レンガＡについては、横方向の区域が同一であるｍ炉のレンガ間の熱交換計算処理が並列処理される。同様に、レンガＢについては、横方向の区域が同一であるｎ炉のレンガ間の熱交換計算処理が並列処理され、レンガＣについては、横方向の区域が同一であるｌ炉のレンガ間の熱交換計算処理が並列処理される。仮に、すべてのレンガについて独立してレンガ間の熱交換計算処理を実行すると、（ｍ＋ｎ＋ｌ）×ｋ個の処理を順次実行することになるが、ストリーミングプロセッサ１４４に並列処理させることで、３×ｋ個の処理を実行する時間でレンガ間の熱交換計算処理を実行させることができる。
【０１１１】
レンガ間の熱交換計算処理と同様に、熱プラントの各燃焼室におけるガスとレンガとの間での熱交換計算処理や、送風管における空洞とガスとの間およびレンガとレンガとの間での各熱交換計算処理も、マルチプロセッサ１４０のスペック等の特性を考慮して、可能な限り並列計算させることができる。これにより、オンライオンリアルタイム制御の要件である必要な時間（許容時間）内に処理を収めることができる。
【０１１２】
このように、ＧＰＵ１０２の各ハードウェア特性を考慮して、熱プラント内の伝熱計算のメッシュ分割の計算処理を最適に割り当て設計することで、厳密物理モデルのプログラミング実行を達成することができる。そして、このような計算処理の最適な割り当ては、本実施形態に係るプログラム作成支援装置１０を利用することで容易に実現することができる。
【０１１３】
以上、添付図面を参照しながら本発明の好適な実施形態について詳細に説明したが、本発明はかかる例に限定されない。本発明の属する技術の分野における通常の知識を有する者であれば、特許請求の範囲に記載された技術的思想の範疇内において、各種の変更例または修正例に想到し得ることは明らかであり、これらについても、当然に本発明の技術的範囲に属するものと了解される。
【０１１４】
例えば、上記実施形態では、解析対象のプログラムを実行する演算処理ユニットとして、ＣＰＵとＧＰＵとをそれぞれ１つずつ用いた場合について説明したが、本発明はかかる例に限定されない。ＧＰＵは複数あってもよい。この場合、予測処理画面１内に、各ＧＰＵに対してそれぞれＧＰＵ側プログラム入力領域を設けることで、プログラム取得部によって各ＧＰＵにて実行されるプログラムを取得することが可能となり、各プログラムについて実行予測時間を算出することが可能となる。
【符号の説明】
【０１１５】
１０      プログラム作成支援装置
１０１    ＣＰＵ
１０２    ＧＰＵ
１４０    マルチプロセッサ
１４２    シェアードメモリ
１４４    ストリーミングプロセッサ
２００    予測処理部
２１０    プログラム取得部
２２０    演算処理部
２３０    出力部
２４０    設定情報記憶部
２５０    メモリ
【図１】
0005429214.tif 000002
【図２】
0005429214.tif 000003
【図３】
0005429214.tif 000004
【図４】
0005429214.tif 000005
【図５】
0005429214.tif 000006
【図６】
0005429214.tif 000007
【図７】
0005429214.tif 000008
【図８】
0005429214.tif 000009
【図９】
0005429214.tif 000010
【図１０】
0005429214.tif 000011
【図１１】
0005429214.tif 000012
【図１２】
0005429214.tif 000013
【図１３】
0005429214.tif 000014
【図１４】
0005429214.tif 000015
【図１５】
0005429214.tif 000016
【図１６】
0005429214.tif 000017
【図１７】
0005429214.tif 000018
【図１８】
0005429214.tif 000019