以下に添付図面を参照しながら、本発明の好適な実施の形態について詳細に説明する。なお、本明細書及び図面において、実質的に同一の機能構成を有する構成要素については、同一の符号を付することにより重複説明を省略する。
<1.プログラム作成支援装置の概要>
まず、図1を参照して、本発明の実施形態に係るプログラム作成支援装置の概要について説明する。なお、図1は、本実施形態に係るプログラム作成支援装置の機能の概要を説明するための説明図である。
本実施形態に係るプログラム作成支援装置は、GPUを利用するアプリケーションプログラムを効率的に作成するための支援をする装置である。本実施形態に係るプログラム作成支援装置は、作成したアプリケーションプログラムについて、パーソナルコンピュータ等の計算機のCPU側で実行するプログラムと、GPU側で実行するプログラムとについて、実行予測時間をそれぞれ予測する。そして、プログラム作成支援装置は、予測された実行予測時間が許容時間内に収まっているか否かを判定して、作成したプログラムがオンラインリアルタイム制御で必要な所定の時間内に演算処理を終えることができるか否かを判定する。
具体的には、ユーザは、図1に示すように、作成したアプリケーションプログラム(例えば、C言語ソースプログラム)を、表示装置に表示された予測処理画面1内の該当する入力領域内に入力する。入力領域としては、CPU側で実行するプログラムを入力するCPU側プログラム入力領域2、GPU側で実行するプログラムを入力するGPU側プログラム入力領域3等がある。GPU側プログラム入力領域3内には、例えば、ブロックプログラム入力領域4、スレッドプログラム入力領域5、グローバルメモリ入力領域6、関数名入力領域7が設けられている。
ブロックプログラム入力領域4には、GPUのマルチプロセッサにより処理されるプログラム(「ブロックプログラム」ともいう。)が入力される。また、スレッドプログラム入力領域5には、GPUのストリーミングプロセッサにより処理されるプログラム(「スレッドプログラム」ともいう。)が入力される。グローバルメモリ入力領域6には、ビデオメモリに記憶された、GPU側実行プログラムにて共通に使用される変数(「グローバル変数」ともいう。)が入力される。関数名入力領域7には、CPU側実行プログラムからGPU側実行プログラムを呼び出すための関数名が入力される。
ユーザは、例えばコピーアンドペースト等により、アプリケーションプログラムからCPU側で実行するプログラムをCPU側プログラム入力領域2に入力し、GPU側で実行するプログラムをGPU側プログラム入力領域3に入力それぞれ入力する。そして、実行予測時間算出処理を開始する指示を与えると、プログラム作成支援装置は、実行予測時間算出処理を開始し、各入力領域内に入力されたプログラムソースを解析して、最大予測実行時間を算出する。プログラム作成支援装置によって算出された最大予測実行時間は、例えば予測処理画面1内の最大実行予測時間の出力結果表示領域8に表示される。
このように、ユーザは、各入力領域へ該当するソースプログラムを入力し、プログラム作成支援装置による実行予測時間算出処理を実行させるだけで、短時間でリアルタイム制御に必要な所定の時間内に演算処理を終えることができるか否かを知ることができる。すなわち、図17および図18に示した従来の手法のように、プログラムの実装・デバッグ、実行環境の構築の繰り返しを行うことなく、短時間でリアルタイム制御に必要な応答時間を確保したプログラム設計の確認が可能となる。そして、プログラムの実装・デバッグ、実行環境の構築は1回のみ行えばよく、GPUを用いたアプリケーションプログラムの作成に要する時間をより短縮することができる。
以下、本実施形態に係るプログラム作成支援装置の構成とその機能について、詳細に説明していく。
<2.ハードウェア構成例>
まず、図2および図3に基づいて、本発明の実施形態に係るプログラム作成支援装置10のハードウェア構成について、詳細に説明する。なお、図2は、本発明の実施形態に係るプログラム作成支援装置10のハードウェア構成を説明するブロック図である。図3は、本実施形態に係るGPU102のハードウェア構成を説明する説明図である。
プログラム作成支援装置10は、主に、CPU101と、GPU102と、ROM103と、RAM105と、を備える。また、プログラム作成支援装置10は、更に、バス107と、入力装置109と、出力装置111と、ストレージ装置113と、ドライブ115と、接続ポート117と、通信装置119とを備える。
CPU101は、演算処理装置および制御装置として機能し、ROM103、RAM105、ストレージ装置113、またはリムーバブル記録媒体121に記録された各種プログラムに従って、プログラム作成支援装置10内の動作全般またはその一部を制御する。GPU102は、CPU101とともに、演算処理装置および制御装置として機能し、ROM103、RAM105、ストレージ装置113、またはリムーバブル記録媒体121に記録された各種プログラムに従って、プログラム作成支援装置10内の動作全般またはその一部を制御する超高速並列処理装置である。
GPU102は、例えば、図3に示すように、複数のマルチプロセッサ(第1演算処理部)140を備える。各マルチプロセッサ140は、シェアードメモリ(第1メモリ)142と、当該シェアードメモリ142にアクセス可能な複数のストリーミングプロセッサ(第2演算処理部)144とからなる。シェアードメモリ142は、小容量であるが高速にデータ転送することができる。ストリーミングプロセッサ144により頻繁に読み出されるデータをシェアードメモリ142に格納するようにプログラムを設計することで、高速演算処理を実現することができる。また、ストリーミングプロセッサ144は、それぞれローカルメモリ(図示せず。)を備えている。ローカルメモリはシェアードメモリ142よりさらに高速にデータ転送することが可能である。
また、GPU102は、ビデオメモリ(共通メモリ)20にアクセス可能に設けられる。ビデオメモリ20は、大容量であるがデータ転送速度はシェアードメモリ142より遅い。したがって、ビデオメモリ20には、GPU102で実行されるプログラムにて共通して使用される変数等の情報が記憶される。
ROM103は、CPU101あるいはGPU102が使用するプログラムや演算パラメータ等を記憶する。RAM105は、CPU101あるいはGPU102が使用するプログラムや、プログラムの実行において適宜変化するパラメータ等を一次記憶する。これらはCPUバス等の内部バスにより構成されるバス107により相互に接続されている。本実施形態において、ROM103は、第2メモリとして機能する。
バス107は、ブリッジを介して、PCI(Peripheral Component Interconnect/Interface)バスなどの外部バスに接続されている。
入力装置109は、例えば、マウス、キーボード、タッチパネル、ボタン、スイッチおよびレバーなどユーザが操作する操作手段である。また、入力装置109は、例えば、赤外線やその他の電波を利用したリモートコントロール手段(いわゆる、リモコン)であってもよいし、プログラム作成支援装置10の操作に対応したPDA等の外部接続機器123であってもよい。さらに、入力装置109は、例えば、上記の操作手段を用いてユーザにより入力された情報に基づいて入力信号を生成し、CPU101あるいはGPU102に出力する入力制御回路などから構成されている。プログラム作成支援装置10のユーザは、この入力装置109を操作することにより、プログラム作成支援装置10に対して各種のデータを入力したり処理動作を指示したりすることができる。
出力装置111は、取得した情報をユーザに対して視覚的または聴覚的に通知することが可能な装置で構成される。このような装置として、CRTディスプレイ装置、液晶ディスプレイ装置、プラズマディスプレイ装置、ELディスプレイ装置およびランプなどの表示装置や、スピーカおよびヘッドホンなどの音声出力装置や、プリンタ装置、携帯電話、ファクシミリなどがある。出力装置911は、例えば、プログラム作成支援装置10が行った各種処理により得られた結果を出力する。具体的には、表示装置は、プログラム作成支援装置10が行った各種処理により得られた結果を、テキストまたはイメージで表示する。他方、音声出力装置は、再生された音声データや音響データ等からなるオーディオ信号をアナログ信号に変換して出力する。
ストレージ装置113は、プログラム作成支援装置10の記憶部の一例として構成されたデータ格納用の装置である。ストレージ装置113は、例えば、HDD(Hard Disk Drive)等の磁気記憶部デバイス、半導体記憶デバイス、光記憶デバイス、または光磁気記憶デバイス等により構成される。このストレージ装置113は、CPU101あるいはGPU102が実行するプログラムや各種データ、および外部から取得した各種のデータなどを格納する。
ドライブ115は、記録媒体用リーダライタであり、プログラム作成支援装置10に内蔵、あるいは外付けされる。ドライブ115は、装着されている磁気ディスク、光ディスク、光磁気ディスク、または半導体メモリ等のリムーバブル記録媒体121に記録されている情報を読み出して、RAM105に出力する。また、ドライブ115は、装着されている磁気ディスク、光ディスク、光磁気ディスク、または半導体メモリ等のリムーバブル記録媒体121に記録を書き込むことも可能である。リムーバブル記録媒体121は、例えば、CDメディア、DVDメディア、Blu−rayメディア等である。また、リムーバブル記録媒体121は、コンパクトフラッシュ(登録商標)(CompactFlash:CF)、フラッシュメモリ、または、SDメモリカード(Secure Digital memory card)等であってもよい。また、リムーバブル記録媒体121は、例えば、非接触型ICチップを搭載したICカード(Integrated Circuit card)または電子機器等であってもよい。
接続ポート117は、機器をプログラム作成支援装置10に直接接続するためのポートである。接続ポート117の一例として、USB(Universal Serial Bus)ポート、IEEE1394ポート、SCSI(Small Computer System Interface)ポート、RS−232Cポート等がある。この接続ポート117に外部接続機器123を接続することで、プログラム作成支援装置10は、外部接続機器123から直接各種のデータを取得したり、外部接続機器123に各種のデータを提供したりする。
通信装置119は、例えば、通信網125に接続するための通信デバイス等で構成された通信インターフェースである。通信装置119は、例えば、有線または無線LAN(Local Area Network)、Bluetooth(登録商標)、またはWUSB(Wireless USB)用の通信カード等である。また、通信装置119は、光通信用のルータ、ADSL(Asymmetric Digital Subscriber Line)用のルータ、または、各種通信用のモデム等であってもよい。この通信装置919は、例えば、インターネットや他の通信機器との間で、例えばTCP/IP等の所定のプロトコルに則して信号等を送受信することができる。また、通信装置119に接続される通信網125は、有線または無線によって接続されたネットワーク等により構成され、例えば、インターネット、家庭内LAN、赤外線通信、ラジオ波通信または衛星通信等であってもよい。
以上、本発明の実施形態に係るプログラム作成支援装置10の機能を実現可能なハードウェア構成の一例を示した。上記の各構成要素は、汎用的な部材を用いて構成されていてもよいし、各構成要素の機能に特化したハードウェアにより構成されていてもよい。従って、本実施形態を実施する時々の技術レベルに応じて、適宜、利用するハードウェア構成を変更することが可能である。
<3.プログラム作成支援装置の機能構成>
次に、図4に基づいて、プログラム作成支援装置10におけるアプリケーションプログラムの実行時間を予測する実行予測時間算出処理を行う予測処理部200について説明する。図4は、本実施形態に係るプログラム作成支援装置10の予測処理部200の機能構成を示す機能ブロック図である。予測処理部200は、図4に示すように、プログラム取得部210と、演算処理部220と、出力部230と、設定情報記憶部240と、メモリ250とからなる。
プログラム取得部210は、最大実行予測時間を算出するアプリケーションプログラムを取得する。本実施形態では、プログラム取得部210は、ユーザが図1に示した予測処理画面1内の各入力領域に入力したソースプログラムを取得する。プログラム取得部210は、取得したソースプログラムをメモリ250に記憶し、演算処理部220に対してソースプログラムが取得された旨の情報を通知する。
演算処理部220は、プログラム取得部210により取得されたソースプログラムを解析し、最大実行予測時間を算出する。演算処理部220は、例えば図2のCPU101により実現される。演算処理部220は、CPU側で実行されるソースプログラムとGPU側で実行されるソースプログラムとについてそれぞれ実行予測時間を算出し、ソースプログラム全体としての最大実行予測時間を算出する。演算処理部220による最大実行予測時間の算出処理の詳細については後述する。演算処理部220は、算出した最大実行予測時間を出力部230へ出力し、ユーザへ通知する。
出力部230は、例えば図2の出力装置111であって、最大実行予測時間を出力する。具体的には、出力部230は情報を表示するディスプレイ等の表示装置とすることができ、この場合、図1に示すように、表示装置に表示された予測処理画面1内の出力結果表示領域8に最大実行予測時間を表示させることができる。なお、予測処理画面1の出力結果表示領域8には、最大実行予測時間のみならず、例えばCPU側で実行されるソースプログラムおよびGPU側で実行されるソースプログラムの各実行予測時間等を表示させるようにしてもよい。また、出力部230は、最大実行予測時間を音声出力するスピーカ等であってもよい、
設定情報記憶部240は、演算処理部220による最大実行予測時間の算出処理において必要となる設定情報を記憶する記憶部であり、例えば図2のROM103やRAM105等により実現される。設定情報としては、例えば、GPUプログラムの呼び出しオーバーヘッド定数や、ロジック実行時間、メモリ参照時間、シェアードメモリ参照時間、グローバルメモリ参照時間等があり、プログラムの各ステップを構成する基本的処理の実行時間の情報の設定値とも言える。これらの設定値はCPUおよびGPU等の仕様またはユーザによる実測値もしくは経験値に基づいて決定してもよい。そして、設定情報は、プログラム作成支援装置10に予め記憶されていてもよく、ユーザが入力して設定してもよい。
メモリ250は、演算処理部220による最大実行予測時間の算出処理において必要な情報を一時的に記憶する記憶部であり、例えば図2のRAM105等により実現される。
<4.最大実行予測時間の算出処理>
プログラム作成支援装置10の予測処理部200は、上述の各機能部を機能させて、アプリケーションプログラムの最大実行予測時間を算出する。ここで、アプリケーションプログラムの最大実行予測時間は、CPU側実行プログラムの実行予測時間(A)、GPU側実行プログラムの実行予測時間(C、D)、およびCPU側実行プログラムからGPU側実行プログラムを呼び出すオーバーヘッド時間(B)の和で表される。予測処理部200の演算処理部220は、これらの時間を順次算出し、加算して、最大実行予測時間を算出する。
以下、図5〜図15に基づいて、本実施形態に係る予測処理部200による最大実行予測時間の算出処理を説明していく。なお、以下においては、既にユーザによって、CPU側実行プログラムがCPU側実行プログラム入力領域2に、GPU側実行プログラムがGPU側実行プログラム入力領域3に入力され、予測処理部200のプログラム取得部210によって入力された各プログラムがメモリ250に記憶された状態であるとする。また、本実施形態におけるアプリケーションプログラムはC言語によって記述されているものとして説明する。しかし、本発明はかかる例に限定されず、アプリケーションプログラムの記述言語はC言語以外のプログラム言語であってもよい。
[4−1.呼び出しオーバーヘッド時間(B)の算出処理]
まず、図5に基づいて、CPU側実行プログラムからGPU側実行プログラムを呼び出すオーバーヘッド時間(B)の算出処理を説明する。図5は、CPU側実行プログラムからGPU側実行プログラムを呼び出すオーバーヘッド時間(B)の算出処理を示すフローチャートである。
CPU側実行プログラムからGPU側実行プログラムを呼び出すオーバーヘッド時間(B)の算出処理は、図5に示すように、まず、演算処理部220によりCPU側実行プログラム内で、関数名入力領域7に入力された関数が呼び出された箇所を探索する(S100)。関数名入力領域7には、CPU側実行プログラムがGPU側実行プログラムを呼び出すための関数名がユーザによって入力される。例えば、図1に示す例では、関数「func1」が、CPU側実行プログラムがGPU側実行プログラムを呼び出す関数名であり、CPU側実行プログラムに関数「func1」が出現する度にGPU側実行プログラムが実行されることになる。
次いで、演算処理部220は、CPU側実行プログラムにおけるGPU側実行プログラムの呼び出し箇所がfor文で囲まれているか否かを判定する(S102)。すなわち、ステップS102では、繰り返し処理によって複数回CPU側実行プログラムがGPU側実行プログラムを呼び出しているか否かを判定している。GPU側実行プログラムを複数回呼び出していれば、その分GPU側実行プログラムの呼び出し時間がかかるため、最大実行予測時間に考慮する必要がある。
ステップS102にてGPU側実行プログラムの呼び出し箇所がfor文で囲まれていれば、演算処理部220は、for文のループ回数(繰り返し処理によりGPU側実行プログラムが呼び出される回数)をカウントし、繰り返し回数nにセットする(S104)。一方、ステップS102にてGPU側実行プログラムの呼び出し箇所がfor文で囲まれていなければ、演算処理部220は、繰り返し回数nに1をセットする(S106)。
その後、演算処理部220は、当該GPU側実行プログラムの呼び出し箇所におけるGPU側実行プログラムのオーバーヘッド時間を算出する(S108)。CPU側実行プログラムからGPU側実行プログラムを1回呼び出すのに要する時間であるGPUプログラムの呼び出しオーバーヘッド定数mは、設定情報記憶部240に記憶されている。演算処理部220は、呼び出しオーバーヘッド定数mを設定情報記憶部240から取得し、呼び出しオーバーヘッド定数mにステップS104またはS106にてセットされた繰り返し回数nを掛けて、オーバーヘッド時間Bに加算する。
そして、演算処理部220は、CPU側実行プログラムにおけるGPU側実行プログラムの呼び出し箇所すべてについてチェックしたか否かを判定し(S110)、チェックしていない呼び出し箇所があれば、次の呼び出し箇所についてステップS102〜S108の処理を繰り返す(S112)。一方、ステップS110にてすべてのGPU側実行プログラムの呼び出し箇所についてチェックしていると判定した場合には、当該処理を終了する。図5に示す処理が終了した段階でのオーバーヘッド時間Bが、アプリケーションプログラムにおけるオーバーヘッド時間Bとなる。
[4−2.CPU側実行プログラムの実行予測時間(A)の算出処理]
次いで、図6、図9および図10に基づいて、CPU側実行プログラムの実行予測時間(A)の算出処理を説明する。図6は、CPU側実行プログラムの実行予測時間(A)の算出処理を示すフローチャートである。図9は、変数一覧リストの一構成例を示す説明図である。図10は、ロジック行一覧リストの一構成例を示す説明図である。
CPU側実行プログラムの実行予測時間(A)は、CPU側実行プログラムで行われるロジック処理の実行時間(総ロジック実行時間A1)と、当該プログラムを実行するにあたりメモリを参照している時間(総メモリ参照時間A2)との加算値で表すことができる。そこで、まず、演算処理部220は、図6に示すように、CPU側実行プログラム内における変数宣言を探索し、変数一覧リストに格納する(S200)。変数一覧リストは、CPU側実行プログラムの実行予測時間を算出するための作業用テーブルであり、例えば図9に示すように、変数名、変数の型、サイズ等が格納される。変数一覧リストは、図4のメモリ250に記憶されている。
次いで、演算処理部220は、CPU側実行プログラム内のロジック部の行番号を、ロジック行一覧リストに格納する(S202)。ロジック行一覧リストも、CPU側実行プログラムの実行予測時間を算出するための作業用テーブルであり、例えば図10に示すように、ロジック部の行番号、回数、変数参照回数等が格納される。ロジック行一覧リストも、図4のメモリ250に記憶されている。
さらに、演算処理部220は、ロジック行一覧リストの各行について、ロジック行がfor文で囲まれているか否かを判定する(S204)。すなわち、ステップS204では、繰り返し処理によって複数回当該ロジック行が実行されているか否かを判定している。ステップS204にてロジック行がfor文で囲まれていれば、演算処理部220は、for文のループ回数をカウントし、ロジック行一覧リストの「回数」にセットする(S206)。一方、ステップS204にてロジック行がfor文で囲まれていなければ、演算処理部220は、ロジック行一覧リストの「回数」に1をセットする(S208)。
その後、演算処理部220は、ロジック行一覧リストに格納されたすべてのロジック行についてステップS204〜S208の処理を実行したか否かをチェックする(S210)。すべてのロジック行についてチェックしていない場合には、演算処理部220は、次のロジック行について、ステップS204〜S208の処理を繰り返す(S212)。一方、S210にてすべてのロジック行についてチェックした場合には、演算処理部220は、ロジック行一覧リストの各行について、変数一覧リストに登録されている変数の出現回数をカウントし、ロジック行一覧リストの「変数参照回数」に格納する(S214)。
ステップS214では、CPU側実行プログラムを実行する際に、CPU101が何回メモリにアクセスするかをカウントしている。演算処理部220は、ロジック行一覧リストの各行について、変数一覧リストに登録されている変数の出現回数に、ロジック行一覧リストの該当行の「回数」を掛け合わせて、「変数参照回数」に格納する。
次いで、演算処理部220は、CPU側実行プログラムにおける総ロジック実行時間A1を算出する(S216)。ロジック行を1つ実行するのに要するロジック実行時間L1は、設定情報記憶部240に記憶されている。演算処理部220は、ロジック実行時間L1を設定情報記憶部240から取得し、ロジック実行時間L1にロジック行一覧リストの「回数」の積算値を掛け合わせて、総ロジック実行時間A1を算出する。
さらに、演算処理部220は、CPU側実行プログラムにおける総メモリ参照時間A2を算出する(S218)。変数を1回参照するのに要するメモリ参照時間M1も、設定情報記憶部240に記憶されている。演算処理部220は、メモリ参照時間M1を設定情報記憶部240から取得し、メモリ参照時間M1にロジック行一覧リストの「変数参照回数」の積算値を掛け合わせて、総メモリ参照時間A2を算出する。
その後、演算処理部220は、ステップS216で算出した総ロジック実行時間A1と、ステップS218で算出した総メモリ参照時間A2とを加算し、CPU側実行プログラムの実行予測時間Aとする。
[4−3.GPU側実行プログラムの実行予測時間(C、D)の算出処理]
次いで、図7、図8、図11〜図15に基づいて、GPU側実行プログラムの実行予測時間(C、D)の算出処理を説明する。図7は、GPU側実行プログラムのうち、ブロックプログラムについての実行予測時間(C)の算出処理を示すフローチャートである。図8は、GPU側実行プログラムのうち、スレッドプログラムについての実行予測時間(D)の算出処理を示すフローチャートである。図11は、グローバル変数一覧リストの一構成例を示す説明図である。図12は、シェアード変数一覧リストの一構成例を示す説明図である。図13は、ブロックプログラムのロジック行一覧リストの一構成例を示す説明図である。図14は、ローカル変数一覧リストの一構成例を示す説明図である。図15は、スレッドプログラムのロジック行一覧リストの一構成例を示す説明図である。
上述したように、GPU側実行プログラムは、マルチプロセッサ140により実行されるブロックプログラム(第1プログラム)と、ストリーミングプロセッサ144によりされるスレッドプログラム(第2プログラム)とからなる。ブロックプログラムにおいてのみ使用される変数であるシェアード変数はシェアードメモリ142に格納することで、マルチプロセッサ140へ高速に伝送することができる。同様に、スレッドプログラムにおいてのみ使用される変数であるスレッド変数は、ストリーミングプロセッサ144のローカルメモリ(図示せず。)に格納することで、ストリーミングプロセッサ144へより高速に伝送することができる。なお、GPU102に搭載されているマルチプロセッサ140の個数をブロック数ともいい、GPU102に搭載されているストリーミングプロセッサ144の個数をスレッド数ともいう。
(4−3−1.準備処理)
GPU側実行プログラムの実行予測時間(C、D)の算出処理の準備処理として、演算処理部220は、図1のグローバルメモリ入力領域6に入力された変数宣言を探索し、グローバル変数一覧リストに格納する。グローバルメモリ入力領域6に入力された変数は、GPU側実行プログラムにて共通の変数(グローバル変数)であり、ビデオメモリ20に格納されている。グローバル変数一覧リストは、GPU側実行プログラムの実行予測時間を算出するための作業用テーブルであり、例えば図11に示すように、グローバル変数名、グローバル変数の型、サイズ等が格納される。グローバル変数一覧リストは、図4のメモリ250に記憶されている。
なお、GPU側実行プログラムにて宣言される変数のうち、グローバル変数以外の変数は、上述したように、通常、シェアードメモリ142またはストリーミングプロセッサ144のローカルメモリ(図示せず。)に格納される。演算処理部220は、グローバル変数一覧リストを作成すると、以下の手順に従って、ブロックプログラムについての実行予測時間(C)およびスレッドプログラムについての実行予測時間(D)を算出する。
(4−3−2.ブロックプログラムについての実行予測時間(C)の算出処理)
ブロックプログラムについての実行予測時間(C)の算出処理では、まず、演算処理部220は、図7に示すように、ブロックプログラム入力領域4に入力されたプログラムから、シェアード変数を探索し、シェアード変数一覧リストに格納する(S300)。ブロックプログラムにて宣言された変数であるシェアード変数は、各マルチプロセッサ140のシェアードメモリ142に記憶されている。一般に、当該シェアード変数が格納されたシェアードメモリ142にアクセス可能なストリーミングプロセッサ144にて実行されるプログラムに高い頻度で出現する変数がシェアード変数として設定される。
シェアード変数一覧リストは、GPU側実行プログラムの実行予測時間を算出するための作業用テーブルであり、例えば図12に示すように、シェアード変数名、シェアード変数の型、サイズ等が格納される。シェアード変数一覧リストは、図4のメモリ250に記憶されている。
次いで、演算処理部220は、ブロックプログラム入力領域4に入力されたプログラム内のロジック部の行番号を、ブロックプログラムのロジック行一覧リストに格納する(S302)。ブロックプログラムのロジック行一覧リストも、GPU側実行プログラムの実行予測時間を算出するための作業用テーブルであり、例えば図13に示すように、ロジック部の行番号、回数、シェアード変数参照回数、グローバル変数参照回数等が格納される。ブロックプログラムのロジック行一覧リストも、図4のメモリ250に記憶されている。
さらに、演算処理部220は、ブロックプログラムのロジック行一覧リストの各行について、ロジック行がfor文で囲まれているか否かを判定する(S304)。すなわち、ステップS304では、繰り返し処理によって複数回当該ロジック行が実行されているか否かを判定している。ステップS304にてロジック行がfor文で囲まれていれば、演算処理部220は、for文のループ回数をカウントし、ブロックプログラムのロジック行一覧リストの「回数」にセットする(S306)。一方、ステップS304にてロジック行がfor文で囲まれていなければ、演算処理部220は、ブロックプログラムのロジック行一覧リストの「回数」に1をセットする(S308)。
その後、演算処理部220は、ブロックプログラムのロジック行一覧リストに格納されたすべてのロジック行についてステップS304〜S308の処理を実行したか否かをチェックする(S310)。すべてのロジック行についてチェックしていない場合には、演算処理部220は、次のロジック行について、ステップS304〜S308の処理を繰り返す(S312)。一方、S310にてすべてのロジック行についてチェックした場合には、演算処理部220は、ブロックプログラムのロジック行一覧リストの各行について、シェアード変数一覧リストに登録されているシェアード変数の出現回数をカウントし、ブロックプログラムのロジック行一覧リストの「シェアード変数参照回数」に格納する(S314)。
ステップS314では、GPU側実行プログラムを実行する際に、GPU102が何回シェアードメモリ142にアクセスするかをカウントしている。演算処理部220は、ブロックプログラムのロジック行一覧リストの各行について、シェアード変数一覧リストに登録されている変数の出現回数に、ロジック行一覧リストの該当行の「回数」を掛け合わせて、「シェアード変数参照回数」に格納する。
また、演算処理部220は、ブロックプログラムのロジック行一覧リストの各行について、グローバル変数一覧リストに登録されているグローバル変数の出現回数をカウントし、ブロックプログラムのロジック行一覧リストの「グローバル変数参照回数」に格納する(S316)。ステップS316では、GPU側実行プログラムを実行する際に、GPU102が何回ビデオメモリ20にアクセスするかをカウントしている。演算処理部220は、ブロックプログラムのロジック行一覧リストの各行について、グローバル変数一覧リストに登録されている変数の出現回数に、ロジック行一覧リストの該当行の「回数」を掛け合わせて、「グローバル変数参照回数」に格納する。
その後、演算処理部220は、GPU側実行プログラムのブロックプログラムにおける総ロジック実行時間C1を算出する(S318)。ブロックプログラムのロジック行を1つ実行するのに要するロジック実行時間L2は、設定情報記憶部240に記憶されている。演算処理部220は、ロジック実行時間L2を設定情報記憶部240から取得し、ロジック実行時間L2にブロックプログラムのロジック行一覧リストの「回数」の積算値を掛け合わせて、総ロジック実行時間C1を算出する。
次いで、演算処理部220は、GPU側実行プログラムのブロックプログラムにおける総シェアードメモリ参照時間C2を算出する(S320)。シェアード変数を1回参照するのに要するシェアードメモリ参照時間M2も、設定情報記憶部240に記憶されている。演算処理部220は、シェアードメモリ参照時間M2を設定情報記憶部240から取得し、シェアードメモリ参照時間M2にブロックプログラムのロジック行一覧リストの「シェアード変数参照回数」の積算値を掛け合わせて、総シェアードメモリ参照時間C2を算出する。
さらに、演算処理部220は、GPU側実行プログラムのブロックプログラムにおける総グローバルメモリ参照時間C3を算出する(S322)。グローバル変数を1回参照するのに要するグローバルメモリ参照時間Gも、設定情報記憶部240に記憶されている。演算処理部220は、グローバルメモリ参照時間Gを設定情報記憶部240から取得し、グローバルメモリ参照時間Gにブロックプログラムのロジック行一覧リストの「グローバル変数参照回数」の積算値を掛け合わせて、総グローバルメモリ参照時間C3を算出する。
その後、演算処理部220は、ステップS318で算出した総ロジック実行時間C1と、ステップS320で算出した総シェアードメモリ参照時間C2と、ステップS322で算出した総グローバルメモリ参照時間C3とを加算し、ブロックプログラムの実行予測時間Cとする。
(4−3−3.スレッドプログラムについての実行予測時間(D)の算出処理)
スレッドプログラムについての実行予測時間(D)の算出処理も、図7に示したブロックプログラムについての実行予測時間(C)の算出処理と同様に行うことができる。以下、図8に基づいて、スレッドプログラムについての実行予測時間(D)の算出処理を説明するが、図7と同様の処理については詳細な説明を省略する。
まず、演算処理部220は、図8に示すように、スレッドプログラム入力領域5に入力されたプログラムから、ローカル変数を探索し、ローカル変数一覧リストに格納する(S400)。スレッドプログラムにて宣言された変数であるローカル変数は、スレッドプログラムのみで使用され、各ストリーミングプロセッサ144内のローカルメモリ(レジスタ)に記憶されている。ローカル変数一覧リストは、GPU側実行プログラムの実行予測時間を算出するための作業用テーブルであり、例えば図14に示すように、ローカル変数名、ローカル変数の型、サイズ等が格納される。ローカル変数一覧リストは、図4のメモリ250に記憶されている。
次いで、演算処理部220は、スレッドプログラム入力領域4に入力されたプログラム内のロジック部の行番号を、スレッドプログラムのロジック行一覧リストに格納する(S402)。スレッドプログラムのロジック行一覧リストも、GPU側実行プログラムの実行予測時間を算出するための作業用テーブルであり、例えば図13に示すように、ロジック部の行番号、回数、ローカル変数参照回数、グローバル変数参照回数等が格納される。スレッドプログラムのロジック行一覧リストも、図4のメモリ250に記憶されている。
さらに、演算処理部220は、スレッドプログラムのロジック行一覧リストの各行について、ロジック行がfor文で囲まれているか否かを判定する(S404)。ステップS404も、図7のステップS304と同様に処理することができる。ステップS404にてロジック行がfor文で囲まれていれば、演算処理部220は、for文のループ回数をカウントし、スレッドプログラムのロジック行一覧リストの「回数」にセットする(S406)。一方、ステップS404にてロジック行がfor文で囲まれていなければ、演算処理部220は、スレッドプログラムのロジック行一覧リストの「回数」に1をセットする(S408)。
その後、演算処理部220は、スレッドプログラムのロジック行一覧リストに格納されたすべてのロジック行についてステップS404〜S408の処理を実行したか否かをチェックする(S410)。すべてのロジック行についてチェックしていない場合には、演算処理部220は、次のロジック行について、ステップS404〜S408の処理を繰り返す(S412)。一方、S410にてすべてのロジック行についてチェックした場合には、演算処理部220は、スレッドプログラムのロジック行一覧リストの各行について、ローカル変数一覧リストに登録されているローカル変数の出現回数をカウントし、スレッドプログラムのロジック行一覧リストの「ローカル変数参照回数」に格納する(S414)。
ステップS414では、GPU側実行プログラムを実行する際に、GPU102が何回ストリーミングプロセッサ144のローカルメモリにアクセスするかをカウントしている。演算処理部220は、スレッドプログラムのロジック行一覧リストの各行について、ローカル変数一覧リストに登録されている変数の出現回数に、ロジック行一覧リストの該当行の「回数」を掛け合わせて、「ローカル変数参照回数」に格納する。
また、演算処理部220は、スレッドプログラムのロジック行一覧リストの各行について、グローバル変数一覧リストに登録されているグローバル変数の出現回数をカウントし、スレッドプログラムのロジック行一覧リストの「グローバル変数参照回数」に格納する(S416)。ステップS416の処理は、図7のステップS316と同様に処理することができる。演算処理部220は、スレッドプログラムのロジック行一覧リストの各行について、グローバル変数一覧リストに登録されている変数の出現回数に、ロジック行一覧リストの該当行の「回数」を掛け合わせて、「グローバル変数参照回数」に格納する。
その後、演算処理部220は、GPU側実行プログラムのスレッドプログラムにおける総ロジック実行時間D1を算出する(S418)。スレッドプログラムのロジック行を1つ実行するのに要するロジック実行時間L3は、設定情報記憶部240に記憶されている。演算処理部220は、ロジック実行時間L3を設定情報記憶部240から取得し、ロジック実行時間L3にスレッドプログラムのロジック行一覧リストの「回数」の積算値を掛け合わせて、総ロジック実行時間D1を算出する。
次いで、演算処理部220は、GPU側実行プログラムのスレッドプログラムにおける総ローカルメモリ参照時間D2を算出する(S420)。ローカル変数を1回参照するのに要するローカルメモリ参照時間M3も、設定情報記憶部240に記憶されている。演算処理部220は、ローカルメモリ参照時間M3を設定情報記憶部240から取得し、ローカルメモリ参照時間M3にスレッドプログラムのロジック行一覧リストの「ローカル変数参照回数」の積算値を掛け合わせて、総ローカルメモリ参照時間D2を算出する。
さらに、演算処理部220は、GPU側実行プログラムのスレッドプログラムにおける総グローバルメモリ参照時間D3を算出する(S422)。ステップS422の処理は、図7のステップS322の処理と同様にすることができる。演算処理部220は、グローバルメモリ参照時間Gを設定情報記憶部240から取得し、グローバルメモリ参照時間Gにスレッドプログラムのロジック行一覧リストの「グローバル変数参照回数」の積算値を掛け合わせて、総グローバルメモリ参照時間C3を算出する。
その後、演算処理部220は、ステップS418で算出した総ロジック実行時間D1と、ステップS420で算出した総ローカルメモリ参照時間D2と、ステップS422で算出した総グローバルメモリ参照時間D3とを加算し、スレッドプログラムの実行予測時間Dとする。
(4−3−4.GPU側実行プログラムの実行予測時間(C、D)の算出処理)
演算処理部220は、図7および図8に示した処理により、ブロックプログラムの実行予測時間Cとスレッドプログラムの実行予測時間Dとを加算して、GPU側実行プログラムの実行予測時間を取得する。
[4−4.最大実行予測時間]
演算処理部220は、CPU側実行プログラムの実行予測時間(A)、GPU側実行プログラムの実行予測時間(C、D)、およびCPU側実行プログラムからGPU側実行プログラムを呼び出すオーバーヘッド時間(B)を算出すると、これらの値を加算する。この加算値がアプリケーションプログラムの最大実行予測時間となる。演算処理部220は、アプリケーションプログラムの最大実行予測時間を算出すると、出力部230へ出力する。これにより、図1の予測処理画面1内の出力結果表示領域8に、アプリケーションプログラムの最大実行予測時間が表示される。
なお、出力結果表示領域8に、CPU側実行プログラムの実行予測時間(A)、GPU側実行プログラムの実行予測時間(C、D)、およびCPU側実行プログラムからGPU側実行プログラムを呼び出すオーバーヘッド時間(B)をそれぞれ表示させるようにしてもよい。これにより、ユーザは、どの箇所の処理に時間を要しているかを確認することができ、アプリケーションプログラムの設計を効率よく行うことが可能となる。
また、出力結果表示領域8に表示される最大実行予測時間が、オンラインリアルタイム制御で必要な時間(許容時間)内に収まっているか否かをユーザに提示することにより、アプリケーションプログラムの再設計の要否を明確に伝えることができる。例えば、最大実行予測時間が許容時間を超えている場合には、出力結果表示領域8に表示された最大実行予測時間の文字の色、あるいは領域の色等を、最大実行予測時間が許容時間以下である場合と相違させるようにして、ユーザに当該情報を提示することができる。
以上、本発明の実施形態に係るプログラム作成支援装置10の構成とこれによるプログラム作成支援処理について説明した。本実施形態によれば、GPUを用いて処理されるオンラインリアルタイム制御のためのアプリケーションプログラムを設計する際に、容易にアプリケーションプログラムの最大実行予測時間を取得することが可能となる。これにより、オンライオンリアルタイム制御の要件である必要な時間(許容時間)内に収めることができる。また、GPUを適用する際に必要な設計やプログラミング作業の時間を短縮できるので、コストを削減でき、工期も短縮することができる。さらには、従来、最適化計算は多大な時間を要していたため、精度を出すための十分な計算を実行できなかったが、本実施形態に係るプログラム作成支援装置10では、GPUのマルチプロセッサに最適化計算を並列実行させており、また、本プログラム作成支援装置10の構成により、必要な時間(許容時間)内に収めることができるため、プロセス制御システムにおける最適化制御精度を向上させ、操業変動への追従性も向上させることも期待される。
<5.適用例>
本実施形態に係るプログラム作成支援装置10を利用して作成されるアプリケーションプログラムの一例を図16に示す。図16は、熱プラント燃焼のオンライン最適化制御を行うアプリケーションプログラムの一例を示している。熱プラント燃焼のオンライン最適化制御装置は、実プロセスにおける燃料ガス温度や燃料ガス流量等の実績データや操業条件が入力値として入力されると、複数の候補解(例えば、燃料ガス温度や燃焼ガス流量等の設定候補値(設計変数))についてそれぞれ制御シミュレータによりシミュレートし、最適な設定値を決定して、制御情報としてプロセスコンピュータへ出力する。
熱プラント燃焼のオンライン最適化制御を行うアプリケーションプログラムは、リアルタイムに制御情報を出力する必要があるため、高速に処理を実行する必要がある。そこで、GPUをパーソナルコンピュータのCPUと並列処理させることにより、当該要求を満たすようにすることが考えられるが、CPUとGPUとで実行する処理の振り分けやメモリの使用の仕方によって演算処理速度は大きく変化する。したがって、これらの点を考慮したアプリケーションプログラムの設計が必要である。一方で、熱プラント燃焼のオンライン最適化制御を行うアプリケーションプログラムの構成は複雑であり、ユーザがオンラインリアルタイム制御で必要な所定の時間内に演算処理を終えることができるかを判断するのは困難である。
そこで、本実施形態に係るプログラム作成支援装置10を利用して、熱プラント燃焼のオンライン最適化制御を行うアプリケーションプログラムを作成することで、容易に当該プログラムの最大実行予測時間を算出することができる。また、算出された最大実行予測時間が許容時間を超えている場合でも、プログラムの再設計が容易であり、GPUを適用する際に必要な設計やプログラミング作業の時間を短縮できる。
作成されたアプリケーションプログラムは、例えば、CPU側実行プログラムにて最適化制御の全体処理を行い、GPU側実行プログラムにてシミュレーションの細部処理を実行するように構成される。また、GPU側実行プログラムも、GPU102のマルチプロセッサ140、ストリーミングプロセッサ144、シェアードメモリ142やローカルメモリ(図示せず。)等のハードウェア特性に応じて適切な処理が割り当てられている。
図16に示す例では、設計変数(1〜j個)について実行される多目的最適化処理はGPU102のマルチプロセッサ140で並列計算され、伝熱計算の繰り返し処理はマルチプロセッサ140内のストリーミングプロセッサ144で並列計算される。例えば、GPU102にマルチプロセッサ140が30個、各マルチプロセッサ140にストリーミングプロセッサ144が8個搭載されている場合、設計変数(1〜j個)について実行される最適化処理は、30個のマルチプロセッサ140により並列計算される。一方、単純計算が繰り返される伝熱計算の繰り返し処理は、例えば最大128個のストリーミングプロセッサ144で並列計算される。
ストリーミングプロセッサ144による繰り返し計算処理の1つとして、レンガとレンガとの間の熱交換計算処理がある。図16に示すように、熱プラントにおいては、例えばレンガA、レンガB、レンガCのように複数種類のレンガが用いられている。すべてのレンガについて、レンガ間の熱交換計算処理をそれぞれ独立して計算することが可能であるが、本実施例においては、スレッド数の上限により、いくつかのグループに分けてレンガ間の熱交換計算処理を実行している。
例えば、熱プラント内のレンガ部のうち中央レンガ部を除く部分を、縦方向にq分割、横方向にp分割したとする。縦方向にq分割された区域のうち、m分割分の区域にはレンガAが、n分割分の区域にはレンガBが、l分割分の区域にはレンガCが用いられている。一方、レンガA、レンガB、レンガCの横方向における分割数は、すべてpとする。
本実施例においては、ストリーミングプロセッサ144により熱プラントの同一種類のレンガ間の熱交換計算処理が並列して実行されている。例えば、レンガAについては、横方向の区域が同一であるm炉のレンガ間の熱交換計算処理が並列処理される。同様に、レンガBについては、横方向の区域が同一であるn炉のレンガ間の熱交換計算処理が並列処理され、レンガCについては、横方向の区域が同一であるl炉のレンガ間の熱交換計算処理が並列処理される。仮に、すべてのレンガについて独立してレンガ間の熱交換計算処理を実行すると、(m+n+l)×k個の処理を順次実行することになるが、ストリーミングプロセッサ144に並列処理させることで、3×k個の処理を実行する時間でレンガ間の熱交換計算処理を実行させることができる。
レンガ間の熱交換計算処理と同様に、熱プラントの各燃焼室におけるガスとレンガとの間での熱交換計算処理や、送風管における空洞とガスとの間およびレンガとレンガとの間での各熱交換計算処理も、マルチプロセッサ140のスペック等の特性を考慮して、可能な限り並列計算させることができる。これにより、オンライオンリアルタイム制御の要件である必要な時間(許容時間)内に処理を収めることができる。
このように、GPU102の各ハードウェア特性を考慮して、熱プラント内の伝熱計算のメッシュ分割の計算処理を最適に割り当て設計することで、厳密物理モデルのプログラミング実行を達成することができる。そして、このような計算処理の最適な割り当ては、本実施形態に係るプログラム作成支援装置10を利用することで容易に実現することができる。
以上、添付図面を参照しながら本発明の好適な実施形態について詳細に説明したが、本発明はかかる例に限定されない。本発明の属する技術の分野における通常の知識を有する者であれば、特許請求の範囲に記載された技術的思想の範疇内において、各種の変更例または修正例に想到し得ることは明らかであり、これらについても、当然に本発明の技術的範囲に属するものと了解される。
例えば、上記実施形態では、解析対象のプログラムを実行する演算処理ユニットとして、CPUとGPUとをそれぞれ1つずつ用いた場合について説明したが、本発明はかかる例に限定されない。GPUは複数あってもよい。この場合、予測処理画面1内に、各GPUに対してそれぞれGPU側プログラム入力領域を設けることで、プログラム取得部によって各GPUにて実行されるプログラムを取得することが可能となり、各プログラムについて実行予測時間を算出することが可能となる。