(57)【特許請求の範囲】
【請求項１】
複数の演算装置を有するターゲットデバイス上で動作することによってデータ処理を行なうプログラムを生成する、プログラム開発支援装置であって、
表示装置と入力装置と計算機とを備え、前記計算機の機能として実装される、グラフィカルユーザーインターフェース部と、グラフ情報保持部と、プログラム生成部と、処理実行関数データベースと、データ転送関数データベースとを有し、
前記グラフィカルユーザーインターフェース部は、前記ターゲットデバイスによって実行される前記データ処理のグラフ情報を、前記データ処理に含まれる複数の処理のそれぞれをノードとしデータの流れを有向接続線とするグラフとして、前記表示装置に表示し、
前記グラフ情報保持部は、前記グラフ情報を保持し、
前記処理実行関数データベースは、前記複数の演算装置のうち前記処理を実行可能な演算装置のそれぞれについて、前記処理を当該演算装置によって実行させるための処理実行関数を保持し、
前記データ転送関数データベースは、前記処理実行関数を対応する演算装置で実行させるためのデータ転送関数を保持し、
前記プログラム生成部は、前記グラフ情報に基づいて、前記処理実行関数データベースから適切な処理実行関数を読込み、前記データ転送関数データベースから適切なデータ転送関数を読み込んで、前記プログラムを生成し、
前記複数の処理のうちの第１の処理が、前記複数の演算装置のうち、互いに種類の異なる、第１演算装置と第２演算装置のうちのどちらの演算装置によっても実行可能であり、
前記処理実行関数データベースは、前記第１の処理を前記第１演算装置で実行するための第１処理実行関数と、前記第１の処理を前記第２演算装置で実行するための第２処理実行関数とを保持し、
前記データ転送関数データベースは、前記第１処理実行関数を前記第１演算装置で実行させるための第１データ転送関数と、前記第２処理実行関数を前記第２演算装置で実行させるための第２データ転送関数とのうちの少なくとも一方を保持し、
前記グラフィカルユーザーインターフェース部は、前記データ処理に前記第１の処理が含まれるときに、前記第１の処理に対応するノードに、前記第１演算装置または前記第２演算装置で実行可能であることを前記表示装置に表示可能であり、前記第１演算装置または前記第２演算装置のうちのどちらの演算装置で実行させるかを前記入力装置によって選択可能とし、
前記プログラム生成部は、前記入力装置によって選択された演算装置に対応して、前記処理実行関数データベースから前記第１処理実行関数または前記第２処理実行関数を選択的に読み込み、前記データ転送関数データベースから前記第１データ転送関数または前記第２データ転送関数を選択的に読み込んで、前記プログラムを生成する、
プログラム開発支援装置。
【請求項２】
請求項１において、前記第１処理は、前記複数の演算装置のうち、前記第１演算装置と前記第２演算装置とは種類が異なる、第３演算装置によっても実行可能であり、
前記処理実行関数データベースは、前記第１の処理を前記第３演算装置で実行するための第３処理実行関数をさらに保持し、
前記データ転送関数データベースは、前記第３処理実行関数を前記第３演算装置で実行させるための第３データ転送関数を保持し、
前記グラフィカルユーザーインターフェース部は、前記データ処理に前記第１の処理が含まれるときに、前記第１の処理に対応するノードに、前記第１演算装置または前記第２演算装置または前記第３演算装置で実行可能であることを前記表示装置に表示させ、前記第１演算装置または前記第２演算装置または前記第３演算装置のうちのどの演算装置で実行させるかを前記入力装置によって選択可能とし、
前記プログラム生成部は、前記入力装置によって選択された演算装置に対応して、前記処理実行関数データベースから前記第１処理実行関数または前記第２処理実行関数または前記第３処理実行関数を選択的に読み込み、前記データ転送関数データベースから前記第１データ転送関数または前記第２データ転送関数または前記第３データ転送関数を選択的に読み込んで、前記プログラムを生成する、
プログラム開発支援装置。
【請求項３】
請求項１において、前記第１演算装置は汎用プロセッサであり、前記第２演算装置はアクセラレータであり、
前記データ処理に含まれる全ての処理は、前記第１演算装置で実行可能であり、一部の処理は前記第２演算装置でも実行可能であり、
前記処理実行関数データベースは、前記全ての処理のそれぞれについて前記第１演算装置で実行させるための第１処理実行関数群と、前記一部の処理について前記第２演算装置で実行させるための第２処理実行関数群とを保持し、
前記データ転送関数データベースは、前記第２処理実行関数群に含まれるそれぞれの処理実行関数について、当該処理実行関数を前記第２演算装置で実行させるために前記第１演算装置から前記第２演算装置へ当該処理実行関数の入力データを転送する入力データ転送関数と、当該処理実行関数が前記第２演算装置で実行された結果を前記第１演算装置へ転送する出力データ転送関数とを保持し、
前記グラフィカルユーザーインターフェース部は、初期段階では前記データ処理に含まれる全ての処理を前記第１演算装置によって実行されるものとして表示し、
前記プログラム生成部は、初期段階では前記処理実行関数データベースから前記第１処理実行関数群を優先的に読み込んで、前記プログラムを生成し、
前記グラフィカルユーザーインターフェース部は、前記一部の処理に対応するノードに、前記第１演算装置または前記第２演算装置で実行可能であることを前記表示装置に表示可能であり、前記第１演算装置または前記第２演算装置のうちのどちらの演算装置で実行させるかを前記入力装置によって選択可能とし、
前記プログラム生成部は、あるノードについて前記入力装置によって選択された演算装置が前記第２演算装置であるときに、前記処理実行関数データベースから前記第２処理実行関数群から対応する処理実行関数を読み込み、前記データ転送関数データベースから対応する入力データ転送関数と出力データ転送関数とを読み込んで、前記プログラムを更新する、
プログラム開発支援装置。
【請求項４】
請求項３において、前記入力装置はマウスであり、
前記グラフィカルユーザーインターフェース部は、前記マウスのカーソルによって選択されたノードが前記一部の処理に対応するノードであるときに、前記第１演算装置または前記第２演算装置で実行可能であることを前記表示装置にコンテキストメニューとして表示し、前記第１演算装置または前記第２演算装置のうちのどちらの演算装置で実行させるかを前記マウスのカーソルによって選択可能とされる、
プログラム開発支援装置。
【請求項５】
請求項３において、前記入力装置はマウスであり、
前記グラフィカルユーザーインターフェース部は、前記マウスによって選択されたノードが前記一部の処理に対応するノードであるときに、前記ノードに対応する処理を実行する演算装置を、前記第１演算装置から前記第２演算装置に切り替え、当該ノードが再度選択されたときには、前記ノードに対応する処理を実行する演算装置を、前記第２演算装置から前記第２演算装置に切り替える、
プログラム開発支援装置。
【請求項６】
請求項５において、ノードは前記マウスのダブルクリックによって選択される、
プログラム開発支援装置。
【請求項７】
請求項５において、前記一部の処理のさらに一部の処理はさらに他の演算装置でも実行可能であり、
前記グラフィカルユーザーインターフェース部は、前記マウスによって選択されたノードが前記一部の処理にさらに含まれる前記一部の処理に対応するノードであるときに、前記ノードに対応する処理を実行する演算装置を、前記第１演算装置と前記第２演算装置と前記他の演算装置の間で、所定の順序に従って順次切り替える、
プログラム開発支援装置。
【請求項８】
請求項１において、
前記第１処理実行関数の入力データのフォーマットが、前記第１処理実行関数の直前に前記第１演算装置とは異なる演算装置で実行される処理実行関数の出力データのフォーマットと異なるとき、前記第１データ転送関数は、前記入力データを前記異なる演算装置から転送するとともに、前記出力データのフォーマットを前記入力データのフォーマットに変換する機能を有し、
前記第２処理実行関数の入力データのフォーマットが、前記第２処理実行関数の直前に前記第２演算装置とは異なる演算装置で実行される処理実行関数の出力データのフォーマットと異なるとき、前記第２データ転送関数は、前記入力データを前記異なる演算装置から転送するとともに、前記出力データのフォーマットを前記入力データのフォーマットに変換する機能を有する、
プログラム開発支援装置。
【請求項９】
請求項８において、前記フォーマットは、ビッグエンディアンかリトルエンディアンか、固定小数点か浮動小数点か、ビット精度によって規定される、
プログラム開発支援装置。
【請求項１０】
請求項１において、
前記第１処理実行関数の入力データのデータ配列が、前記第１処理実行関数の直前に前記第１演算装置とは異なる演算装置で実行される処理実行関数の出力データのデータ配列と異なるとき、前記第１データ転送関数は、前記入力データを前記異なる演算装置から転送するとともに、前記出力データのデータ配列を前記入力データのデータ配列に変換する機能を有し、
前記第２処理実行関数の入力データのデータ配列が、前記第２処理実行関数の直前に前記第２演算装置とは異なる演算装置で実行される処理実行関数の出力データのデータ配列と異なるとき、前記第２データ転送関数は、前記入力データを前記異なる演算装置から転送するとともに、前記出力データデータ配列を前記入力データのデータ配列に変換する機能を有する、
プログラム開発支援装置。
【請求項１１】
表示装置と入力装置とが接続される計算機上で動作することによって、複数の演算装置を有するターゲットデバイス上で動作することによってデータ処理を行なうプログラムを生成する、プログラム開発支援ソフトウェアであって、
グラフィカルユーザーインターフェース部と、グラフ情報保持部と、プログラム生成部と、処理実行関数データベースと、データ転送関数データベースとを有し、
前記グラフィカルユーザーインターフェース部は、前記ターゲットデバイスによって実行される前記データ処理のグラフ情報を、前記データ処理に含まれる複数の処理のそれぞれをノードとしデータの流れを有向接続線とするグラフとして、前記表示装置に表示し、
前記グラフ情報保持部は、前記グラフ情報を保持し、
前記処理実行関数データベースは、前記複数の演算装置のうち前記処理を実行可能な演算装置のそれぞれについて、前記処理を当該演算装置によって実行させるための処理実行関数を保持し、
前記データ転送関数データベースは、前記処理実行関数を対応する演算装置で実行させるためのデータ転送関数を保持し、
前記プログラム生成部は、前記グラフ情報に基づいて、前記処理実行関数データベースから適切な処理実行関数を読込み、前記データ転送関数データベースから適切なデータ転送関数を読み込んで、前記プログラムを生成し、
前記複数の処理のうちの第１の処理が、前記複数の演算装置のうち、互いに種類の異なる、第１演算装置と第２演算装置のうちのどちらの演算装置によっても実行可能であり、
前記処理実行関数データベースは、前記第１の処理を前記第１演算装置で実行するための第１処理実行関数と、前記第１の処理を前記第２演算装置で実行するための第２処理実行関数とを保持し、
前記データ転送関数データベースは、前記第１処理実行関数を前記第１演算装置で実行させるための第１データ転送関数と、前記第２処理実行関数を前記第２演算装置で実行させるための第２データ転送関数とのうちの少なくとも一方を保持し、
前記グラフィカルユーザーインターフェース部は、前記データ処理に前記第１の処理が含まれるときに、前記第１の処理に対応するノードに、前記第１演算装置または前記第２演算装置で実行可能であることを前記表示装置に表示可能であり、前記第１演算装置または前記第２演算装置のうちのどちらの演算装置で実行させるかを前記入力装置によって選択可能とし、
前記プログラム生成部は、前記入力装置によって選択された演算装置に対応して、前記処理実行関数データベースから前記第１処理実行関数または前記第２処理実行関数を選択的に読み込み、前記データ転送関数データベースから前記第１データ転送関数または前記第２データ転送関数を選択的に読み込んで、前記プログラムを生成する、
プログラム開発支援ソフトウェア。
【請求項１２】
請求項１１において、前記第１処理は、前記複数の演算装置のうち、前記第１演算装置と前記第２演算装置とは種類が異なる、第３演算装置によっても実行可能であり、
前記処理実行関数データベースは、前記第１の処理を前記第３演算装置で実行するための第３処理実行関数をさらに保持し、
前記データ転送関数データベースは、前記第３処理実行関数を前記第３演算装置で実行させるための第３データ転送関数を保持し、
前記グラフィカルユーザーインターフェース部は、前記データ処理に前記第１の処理が含まれるときに、前記第１の処理に対応するノードに、前記第１演算装置または前記第２演算装置または前記第３演算装置で実行可能であることを前記表示装置に表示させ、前記第１演算装置または前記第２演算装置または前記第３演算装置のうちのどの演算装置で実行させるかを前記入力装置によって選択可能とし、
前記プログラム生成部は、前記入力装置によって選択された演算装置に対応して、前記処理実行関数データベースから前記第１処理実行関数または前記第２処理実行関数または前記第３処理実行関数を選択的に読み込み、前記データ転送関数データベースから前記第１データ転送関数または前記第２データ転送関数または前記第３データ転送関数を選択的に読み込んで、前記プログラムを生成する、
プログラム開発支援ソフトウェア。
【請求項１３】
請求項１１において、前記第１演算装置は汎用プロセッサであり、前記第２演算装置はアクセラレータであり、
前記データ処理に含まれる全ての処理は、前記第１演算装置で実行可能であり、一部の処理は前記第２演算装置でも実行可能であり、
前記処理実行関数データベースは、前記全ての処理のそれぞれについて前記第１演算装置で実行させるための第１処理実行関数群と、前記一部の処理について前記第２演算装置で実行させるための第２処理実行関数群とを保持し、
前記データ転送関数データベースは、前記第２処理実行関数群に含まれるそれぞれの処理実行関数について、当該処理実行関数を前記第２演算装置で実行させるために前記第１演算装置から前記第２演算装置へ当該処理実行関数の入力データを転送する入力データ転送関数と、当該処理実行関数が前記第２演算装置で実行された結果を前記第１演算装置へ転送する出力データ転送関数とを保持し、
前記グラフィカルユーザーインターフェース部は、初期段階では前記データ処理に含まれる全ての処理を前記第１演算装置によって実行されるものとして表示し、
前記プログラム生成部は、初期段階では前記処理実行関数データベースから前記第１処理実行関数群を優先的に読み込んで、前記プログラムを生成し、
前記グラフィカルユーザーインターフェース部は、前記一部の処理に対応するノードに、前記第１演算装置または前記第２演算装置で実行可能であることを前記表示装置に表示可能であり、前記第１演算装置または前記第２演算装置のうちのどちらの演算装置で実行させるかを前記入力装置によって選択可能とし、
前記プログラム生成部は、あるノードについて前記入力装置によって選択された演算装置が前記第２演算装置であるときに、前記処理実行関数データベースから前記第２処理実行関数群から対応する処理実行関数を読み込み、前記データ転送関数データベースから対応する入力データ転送関数と出力データ転送関数とを読み込んで、前記プログラムを更新する、
プログラム開発支援ソフトウェア。
【請求項１４】
請求項１３において、前記入力装置はマウスであり、
前記グラフィカルユーザーインターフェース部は、前記マウスのカーソルによって選択されたノードが前記一部の処理に対応するノードであるときに、前記第１演算装置または前記第２演算装置で実行可能であることを前記表示装置にコンテキストメニューとして表示し、前記第１演算装置または前記第２演算装置のうちのどちらの演算装置で実行させるかを前記マウスのカーソルによって選択可能とされる、
プログラム開発支援ソフトウェア。
【請求項１５】
請求項１３において、前記入力装置はマウスであり、
前記グラフィカルユーザーインターフェース部は、前記マウスによって選択されたノードが前記一部の処理に対応するノードであるときに、前記ノードに対応する処理を実行する演算装置を、前記第１演算装置から前記第２演算装置に切り替え、当該ノードが再度選択されたときには、前記ノードに対応する処理を実行する演算装置を、前記第２演算装置から前記第２演算装置に切り替える、
プログラム開発支援ソフトウェア。
【請求項１６】
請求項１５において、ノードは前記マウスのダブルクリックによって選択される、
プログラム開発支援ソフトウェア。
【請求項１７】
請求項１５において、前記一部の処理のさらに一部の処理はさらに他の演算装置でも実行可能であり、
前記グラフィカルユーザーインターフェース部は、前記マウスによって選択されたノードが前記一部の処理にさらに含まれる前記一部の処理に対応するノードであるときに、前記ノードに対応する処理を実行する演算装置を、前記第１演算装置と前記第２演算装置と前記他の演算装置の間で、所定の順序に従って順次切り替える、
プログラム開発支援ソフトウェア。
【請求項１８】
請求項１１において、
前記第１処理実行関数の入力データのフォーマットが、前記第１処理実行関数の直前に前記第１演算装置とは異なる演算装置で実行される処理実行関数の出力データのフォーマットと異なるとき、前記第１データ転送関数は、前記入力データを前記異なる演算装置から転送するとともに、前記出力データのフォーマットを前記入力データのフォーマットに変換する機能を有し、
前記第２処理実行関数の入力データのフォーマットが、前記第２処理実行関数の直前に前記第２演算装置とは異なる演算装置で実行される処理実行関数の出力データのフォーマットと異なるとき、前記第２データ転送関数は、前記入力データを前記異なる演算装置から転送するとともに、前記出力データのフォーマットを前記入力データのフォーマットに変換する機能を有する、
プログラム開発支援ソフトウェア。
【請求項１９】
請求項１８において、前記フォーマットは、ビッグエンディアンかリトルエンディアンか、固定小数点か浮動小数点か、ビット精度によって規定される、
プログラム開発支援ソフトウェア。
【請求項２０】
請求項１１において、
前記第１処理実行関数の入力データのデータ配列が、前記第１処理実行関数の直前に前記第１演算装置とは異なる演算装置で実行される処理実行関数の出力データのデータ配列と異なるとき、前記第１データ転送関数は、前記入力データを前記異なる演算装置から転送するとともに、前記出力データのデータ配列を前記入力データのデータ配列に変換する機能を有し、
前記第２処理実行関数の入力データのデータ配列が、前記第２処理実行関数の直前に前記第２演算装置とは異なる演算装置で実行される処理実行関数の出力データのデータ配列と異なるとき、前記第２データ転送関数は、前記入力データを前記異なる演算装置から転送するとともに、前記出力データデータ配列を前記入力データのデータ配列に変換する機能を有する、
プログラム開発支援ソフトウェア。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラム開発支援装置およびプログラム開発支援ソフトウェアに関し、特にグラフ形式で記述されたユーザアプリケーションからターゲットデバイス上の演算装置を用いて動作するプログラムを開発するためのグラフＧＵＩプログラミング環境に好適に利用できるものである。
【背景技術】
【０００２】
The Khronos Group（以降Khronosと呼ぶ）により策定された画像認識向けＡＰＩ（Application Programming Interface）であるOpenVXは、グラフ形式で記述されたユーザアプリケーションをグラフマネージャが解釈し、ターゲットデバイス上の演算装置を用いて効率的に処理するものである。
【０００３】
図１にOpenVXのためにグラフ形式で記述されたユーザアプリケーションの一例を示し、図２にそれに対応するOpenVXコードの例を示す。OpenVXコードでは、まずvx＊＊Node()という関数群を使ってグラフ構造の定義を行う。その後、vxVerifyGraph()関数でグラフ構造を解析し、グラフ中に表される処理の並列性や処理順序を決める。そして、vxProcessGraph()関数で処理を実行する。ここでは、図１に示すように、入力画像inについてvxThresholdノードで二値化処理を行った後、vxSubtractとvxAddノードで減算及び加算を行い、最後にそれらの結果を加算して出力画像outを生成している。この例では、vxThresholdを最初に処理する必要があるが、vxSubtractと1回目のvxAddはどちらを先に処理してもよく、並列に処理してもよい。なお、ここでいうグラフは有向グラフ（Directed Acyclic Graph）である。
【０００４】
グラフ上で使用するノード(Base Node)は、互換性を保つため、Khronosによって必要精度や挙動などの仕様が厳密に定義されている。例えば画素ごとのエッジ方向を算出するvxPhaseノードは、0〜255の8bit精度で出力するものと定義されている。
【０００５】
有向グラフを入力手段とするプログラム開発環境は、OpenVXの他にも提案されている。
【０００６】
特許文献１には、グラフィカルユーザーインターフェース（ＧＵＩ：Graphical User Interface）のディスプレイ上で、演算機能を表現したノードを接続線で繋いで構成されるグラフを使用して、目的とする制御プログラムを組み立てる、制御プログラム組み立てシステムが開示されている。種々のシステムに対して有向グラフをモデリングの共通手段として、システムの統合を容易にすることができる。
【０００７】
特許文献２には、マルチプロセッサシステム上で実行されるシミュレーションシステムにおいて、プログラムの実行を並列化により高速化する技術が開示されている。
【０００８】
OpenVXのターゲットデバイスとしては、ＳｏＣ（System-on-a-Chip）などのシステムＬＳＩ（Large Scale Integrated circuit）が挙げられる。ターゲットデバイスとして使用される、ＳｏＣなどのシステムＬＳＩの中には、ＣＰＵ（Central Processing Unit）の他に画像処理に特有の演算機能が強化された画像処理プロセッサや、特殊な演算を高速化するアクセラレータをさらに搭載しているものがある。例えばルネサスエレクトロニクス株式会社のR-Car V2Hには、ＣＰＵの他に２Ｄと３Ｄのグラフィックスエンジンが搭載され、さらにImage Recognition Engineと呼ばれるアクセラレータが搭載されている。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開２００４−２６５３９３号公報
【特許文献２】特開２０１１−０９６１０７号公報
【発明の概要】
【発明が解決しようとする課題】
【００１０】
特許文献１及び２について本発明者が検討した結果、以下のような新たな課題があることがわかった。
【００１１】
OpenVXのように、グラフ形式で記述されたユーザアプリケーションからターゲットデバイス上の演算装置を用いて動作するプログラムを開発するためのグラフＧＵＩプログラミング環境では、開発者はあるノードに対する処理を、複数の異なる種類の演算装置に実装することができる。このとき、異なる種類の演算装置では、得られる処理結果は同じであるが、得られるまでの処理時間やそのときの消費電力量が異なるだろう。例えば、ＣＰＵの他に演算装置（アクセラレータ）が搭載されるターゲットデバイスでは、ＣＰＵとアクセラレータとでは内部構成が大幅に異なるので、結果として、ある処理に対する処理時間や消費電力量は変わると考えられる。ここで、「異なる種類の演算装置」とは、演算を実行するための回路構成を異にする演算装置を意味する。例えば、ＣＰＵとアクセラレータのように、大きく異なる場合に限らず、同じＣＰＵでも乗算回路を使用して乗算を実行する命令と、同じ乗算を乗算回路を使用せずに加算回路の繰り返しによる関数で実行する場合も、異なる種類の演算装置に該当する。
【００１２】
同じ処理を実行できる演算装置が複数候補あるため、ユーザの設計自由度が向上するというメリットがある半面、それぞれの処理に対して最適な演算装置を選ぶためには、演算装置の割当てを様々に変えながら処理時間や消費電力量を評価する必要がある。このため、演算装置の種類が多い場合や、ユーザアプリケーションを構成する処理が多い場合、すなわち、グラフが複雑な場合には、数多くの組み合わせを評価・探索する必要があり、設計生産性のさらなる向上が求められる。
【００１３】
グラフＧＵＩプログラミング環境は、ユーザアプリケーションの生産性を向上させるために好適な環境である。これまでに、部品を結合する要領でユーザアプリケーションを簡便に作成する方法や、同種の演算器を複数搭載したマルチプロセッサなどのシステムを対象にした方法が提案されてきた。例えば、マウス操作によりユーザアプリケーションを構築する方法がある。特許文献１では、ＧＵＩを用いてプログラムを生成する方法が開示されている。特許文献２では、グラフをループにまたがって最適化する手法が示されている。
【００１４】
しかしながら、従来技術では、グラフ上で並列に実行するノードや同種の演算器への割当てを最適化する方法が知られているに留まる。異種の演算装置への割当てを指定する方法がないために、演算装置の種類が多い場合や、ユーザアプリケーションを構成する処理が多い場合、すなわち、グラフが複雑な場合には、効率よく数多くの組み合わせを評価・探索することができないという問題があることがわかった。
【００１５】
このような課題を解決するための手段を以下に説明するが、その他の課題と新規な特徴は、本明細書の記述及び添付図面から明らかになるであろう。
【課題を解決するための手段】
【００１６】
一実施の形態によれば、下記の通りである。
【００１７】
すなわち、グラフ情報に基づいてグラフ形式で記述されるデータ処理をターゲットデバイスで実行するためのプログラムを生成する、プログラム開発支援装置であって、グラフィカルユーザーインターフェース（ＧＵＩ）部と、プログラム生成部と、処理実行関数データベースと、データ転送関数データベースとを有する。グラフ情報は、前記データ処理に含まれる複数の処理のそれぞれをノードとしデータの流れを有向接続線とするグラフであって、前記ＧＵＩ部に表示される。前記データ処理に含まれるある処理が、ターゲットデバイスに搭載される異種の複数の演算装置で実行可能である場合に、処理実行関数データベースにはそれぞれの演算装置で当該処理を実行するための複数の処理実行関数が保持され、データ転送関数データベースにはそれぞれの演算装置で当該処理を実行するための複数のデータ転送関数が保持される。ＧＵＩ部は、当該処理が前記複数の演算装置で実行可能であることを表示して、どの演算装置で実行させるかをユーザに選択させる。プログラム生成部は、選択された演算装置に対応する適切な処理実行関数とデータ転送関数を、処理実行関数データベースとデータ転送関数データベースのそれぞれから読み込んで、目的とするデータ処理をターゲットデバイスで実行させるためのプログラムを生成する。
【発明の効果】
【００１８】
前記一実施の形態によって得られる効果を簡単に説明すれば下記のとおりである。
【００１９】
すなわち、目的とするデータ処理に含まれる１つの処理が異種の演算装置によって実行可能である場合に、どの演算装置で実行させるかを容易に指定することができ、かつ、指定された演算装置によって実行されるプログラムが生成されるので、容易に数多くの組み合わせを評価・探索することでき、設計の生産性を向上することができる。
【図面の簡単な説明】
【００２０】
【図１】図１は、ユーザアプリケーションのOpenVXによるグラフ形式での記述例を示す説明図である。
【図２】図２は、図１のグラフ形式記述に対応するOpenVXコードの例を示す説明図である。
【図３】図３は、実施形態１に係るプログラム開発支援装置の構成を示すブロック図である。
【図４】図４は、実施形態１に係るプログラム開発支援装置が実装されるハードウェアの構成例を示すブロック図である。
【図５】図５は、ターゲットデバイスの構成例を示すブロック図である。
【図６】図６は、演算装置Ｂ（３０）が備える設定レジスタ３１の一例を示す説明図である。
【図７】図７は、データ転送装置４０が備える設定レジスタ４１の一例を示す説明図である。
【図８】図８は、グラフ情報入力・編集画面の一例を示す説明図である。
【図９】図９は、実行する演算装置の切り替え操作の一例である、ダブルクリックを用いる方法を示す説明図である。
【図１０】図１０は、実行する演算装置の切り替え操作の一例である、コンテキストメニューを用いる方法を示す説明図である。
【図１１】図１１は、ダブルクリックを用いる方法のフローチャートである。
【図１２】図１２は、処理実行関数データベース５に格納される処理実行関数の例を示す説明図である。
【図１３】図１３は、グラフ形式で記述されたユーザアプリケーションの一例を示す説明図である。
【図１４】図１４は、図１３のユーザアプリケーションから生成されたプログラムの一例を示す説明図である。
【図１５】図１５は、プログラム生成部の動作を示すフローチャートである。
【図１６】図１６は、図１４のプログラムで使用されるデータ転送関数を示す説明図である。
【図１７】図１７は、図１４のプログラムで使用される各種の関数を示す説明図である。
【図１８】図１８は、データ変換機能が付加されたデータ転送関数を使用したプログラムの一例を示す説明図である。
【図１９】図１９は、データ転送関数に付随するデータ配列変換機能の一例について模式的に説明するための説明図である。
【発明を実施するための形態】
【００２１】
実施の形態について詳述する。なお、発明を実施するための形態を説明するための全図において、同一の機能を有する要素には同一の符号を付して、その繰り返しの説明を省略する。
【００２２】
〔実施形態１〕
図３は、本実施形態１に係るプログラム開発支援装置１０の構成を示すブロック図であり、図４は、そのプログラム開発支援装置１０が実装されるハードウェアの構成例を示すブロック図である。また、図５は、ターゲットデバイス５０の構成例を示すブロック図である。
【００２３】
プログラム開発支援装置１０は、表示装置７と例えばマウスなどの入力装置８を備えた計算機９上で動作するソフトウェア（プログラム開発支援ソフトウェア）として実現されている。プログラム開発支援ソフトウェアは、種々の態様のコンピュータ可読媒体を介して、計算機９に供給される。コンピュータ可読媒体には、例えば、磁気記録媒体、光磁気記録媒体、光学的記録媒体、半導体記憶媒体などの有体物の媒体の他、ネットワークなどの通信手段を経由して計算機９に供給される、電気信号、光信号、及び、電磁波などの無体物の媒体も含まれ得る。有体物の媒体としては、例えば、磁気テープ、磁気ディスク、光磁気ディスク、Ｂｌｕ−ｒａｙ  Ｄｉｓｋ（登録商標）、ＤＶＤ（Digital Versatile Disc; 登録商標）、各種コンパクトディスク（ＣＤ、ＣＤ−ＲＯＭ，ＣＤ−Ｒ，ＣＤ−ＲＷ等）、ＵＳＢメモリ等が該当する。また無体物の媒体の通信手段としては、イーサネット（登録商標）、光ファイバー、無線ＬＡＮ（Local Area Network）などが該当する。
【００２４】
プログラム開発支援装置１０は、グラフィカルユーザーインターフェース（ＧＵＩ）部１と、グラフ情報保持部２と、プログラム生成部３と、処理実行関数データベース５と、データ転送関数データベース６とを含んで構成され、グラフ情報に基づいてグラフ形式で記述されるデータ処理を、ターゲットデバイス５０で実行させるためのプログラム４を生成する。ここで、ターゲットデバイス５０は、複数の演算装置（２０、３０、…）を有する。また、グラフ情報とは、ユーザアプリケーションである前記データ処理に含まれる複数の処理のそれぞれをノードとしデータの流れを有向接続線とするグラフである。
【００２５】
ＧＵＩ部１は、このグラフ情報を表示装置７に表示することによって、ユーザに対して、作成したいアプリケーションのデータ処理を入力、編集することができる環境を提供する。グラフ情報保持部２は、入力されたグラフ情報を保持する。保持する時のデータフォーマットは任意である。
【００２６】
処理実行関数データベース５は、ターゲットデバイス５０に搭載される複数の演算装置（２０、３０、…）のうち、データ処理に含まれる処理を実行可能な演算装置のそれぞれについて、その処理をその演算装置によって実行させるための処理実行関数を保持するデータベースである。ある１つの処理が複数種類の演算装置のいずれによっても実行可能である場合には、実行可能な演算装置毎に処理実行関数が準備され保持されている。処理実行関数データベース５は、前記データ処理に含まれる個々の処理をターゲットデバイスに搭載されている演算装置によって実行させるための処理実行関数を保持している。
【００２７】
データ転送関数データベース６は、処理実行関数データベース５に保持される処理実行関数を、対応する演算装置で実行させるためのデータ転送関数を保持するデータベースである。データ転送関数の機能には、単純なデータ転送の他に、データ形式の変換や、メモリ上のデータ配列の変換が含まれてもよい。
【００２８】
プログラム生成部３は、グラフ情報保持部２に保持されるグラフ情報に基づいて、処理実行関数データベース５から適切な処理実行関数を読込み、データ転送関数データベース６から適切なデータ転送関数を読み込んで、プログラム４を生成して出力する。
【００２９】
ユーザアプリケーションのデータ処理を構成する複数の処理のうちのある処理が、ターゲットデバイス５０に搭載される複数の演算装置のうち、互いに種類の異なる、演算装置Ａ（２０）と演算装置Ｂ（３０）のうちのどちらの演算装置によっても実行可能であるとする。
【００３０】
図５に示されるターゲットデバイス５０は、当該処理を実行可能な２個の演算装置Ａ（２０）と演算装置Ｂ（３０）のみを例示するものであり、演算装置Ａ（２０）にはプログラムメモリ２２とデータメモリ２３とが接続され、演算装置Ｂ（３０）にはプログラムメモリ３２とデータメモリ３３とが接続されている。ターゲットデバイス５０は、さらに、演算装置Ａ（２０）のデータメモリ２３と演算装置Ｂ（３０）のデータメモリ３３との間でデータ転送を行うデータ転送装置４０を備える。
【００３１】
ここで、特に制限されないが、演算装置Ａ（２０）は例えばＣＰＵであり、演算装置Ｂ（３０）はアクセラレータ、データ転送装置４０はダイレクトメモリアクセスコントローラ（ＤＭＡＣ：Direct Memory Access Controller）である。また、演算装置Ｂ（３０）の設定レジスタ３１とデータ転送装置４０の設定レジスタ４１は、それぞれＣＰＵである演算装置Ａ（２０）によって設定可能とされる。
【００３２】
演算装置Ｂ（３０）は設定レジスタ３１を備え、実行する演算処理の種類を変更しまたは関数の引数やリターン値などの処理のパラメータが設定され、起動などの制御コマンドが設定可能とされ、演算終了などを示す状態（ステータス）が読み出し可能とされる。図６には、演算装置Ｂ（３０）が備える設定レジスタ３１の一例が示される。設定レジスタ３１は複数のワードb_start、b_finish、b_func、b_return、b_arg1〜b_arg5を含んで構成される。ワードb_startは、演算装置Ｂ（３０）に処理を開始させるための起動コマンドを書き込むワードである。ワードb_finishは、演算装置Ｂ（３０）による処理が実行中か完了したかの状態を示すワードである。ワードb_funcは、演算装置Ｂ（３０）が実行する処理の内容（種類）を指定するワードである。ワードb_returnは、演算装置Ｂ（３０）が実行した関数のリターン値が格納されるワードである。ワードb_arg1〜b_arg5は、演算装置Ｂ（３０）が実行する関数の各種引数を書き込むためのワードである。
【００３３】
データ転送装置４０は設定レジスタ４１を備え、転送元と転送先のアドレスや転送されるデータの量などのパラメータが設定され、また、転送開始などの制御コマンドが設定可能とされ、データ転送の状況を表示するステータスレジスタが含まれてもよい。図７には、データ転送装置４０が備える設定レジスタ４１の一例が示される。データ転送装置４０がＤＭＡＣである場合の例であり、設定レジスタ４１は複数のワードdma_start、dma_finish、dma_direction、dma_addr_a、dma_addr_b及びdma_sizeを含んで構成される。ワードdma_startは、データ転送装置４０にＤＭＡ転送を開始させるための転送起動コマンドを書き込むワードである。ワードdma_finishは、データ転送装置４０によるＤＭＡ転送が実行中か完了したかの状態を示すワードである。ワードdma_directionは、ＤＭＡ転送の方向を設定するワードである。即ち、ワードdma_directionは、演算装置Ａ（２０）のデータメモリ２３から演算装置Ｂ（３０）のデータメモリ３３へのデータ転送であるのか、逆に、演算装置Ａ（２０）のデータメモリ２３から演算装置Ｂ（３０）のデータメモリ３３へのデータ転送であるのかを設定する。ワードdma_addr_aは、演算装置Ａ（２０）のデータメモリ２３の先頭アドレスを設定するワードであり、ワードdma_addr_bは、演算装置Ｂ（３０）のデータメモリ３３の先頭アドレスを設定するワードである。演算装置Ａ（２０）から演算装置Ｂ（３０）への転送の場合には、ワードdma_addr_aがソースアドレス、ワードdma_addr_bがデスティネーションアドレスになり、逆に、演算装置Ｂ（３０）から演算装置Ａ（２０）への転送の場合には、ワードdma_addr_bがソースアドレス、ワードdma_addr_aがデスティネーションアドレスになる。ワードdma_sizeは、データ転送の対象であるデータのサイズを設定するワードである。
【００３４】
ただし、このような構成はあくまでも一例に過ぎず、演算装置Ａ（２０）と演算装置Ｂ（３０）が互いに異なるアーキテクチャを持つＣＰＵであってもよく、プログラムメモリ２２、３２とデータメモリ２３、３３がプログラムとデータをともに格納する物理的には１つのメモリであってもよいし、２つの演算装置に共通の１つのメモリであってもよい。逆に、それぞれのメモリがキャッシュメモリなどを含んで階層化されていてもよい。図５はターゲットデバイス５０についての極めて単純な一例を示すに過ぎない。
【００３５】
処理実行関数データベース５は、ある１つの処理が複数種類の演算装置のいずれによっても実行可能である場合には、実行可能な演算装置毎に処理実行関数が準備され保持する。ある処理が演算装置Ａ（２０）でも演算装置Ｂ（３０）でも実行可能な場合には、処理実行関数データベース５は、当該処理を演算装置Ａ（２０）で実行するための第１処理実行関数と演算装置Ｂ（３０）で実行するための第２処理実行関数とを保持する。このとき、データ転送関数データベース６は、第１処理実行関数を演算装置Ａ（２０）で実行させるための第１データ転送関数と、第２処理実行関数を演算装置Ｂ（３０）で実行させるための第２データ転送関数とを保持している。当該処理が演算装置Ａ（２０）のみで実行可能な場合には、当該処理を演算装置Ａ（２０）で実行するための第１処理実行関数が保持されている。ユーザアプリケーションのデータ処理を構成する複数の処理のそれぞれについて、どちらの演算装置で実行可能かによって、少なくとも一方の演算装置で実行するための処理実行関数が準備され保持されている。
【００３６】
データ転送関数データベース６は、処理実行関数データベース５に保持される処理実行関数を、対応する演算装置で実行させるためのデータ転送関数を保持するデータベースである。演算装置Ａ（２０）がＣＰＵ、演算装置Ｂ（３０）がアクセラレータである場合、データ処理の一部をアクセラレータである演算装置Ｂ（３０）によって実行させるためのデータ転送関数が、データ転送関数データベース６に格納される。即ち、演算装置Ａ（２０）のデータメモリ２３から演算装置Ｂ（３０）のデータメモリ３３へのデータ転送を行うデータ転送関数と、演算装置Ｂ（３０）により演算結果をデータメモリ３３から演算装置Ａ（２０）のデータメモリ２３へ転送するデータ転送関数とが、データ転送関数データベース６に格納される。このとき、データ転送関数の機能には、単純なデータ転送の他に、データ形式の変換や、メモリ上のデータ配列の変換が含まれてもよい。
【００３７】
ＧＵＩ部１は、データ処理に上記のような処理が含まれるときに、表示装置７に表示するグラフ情報において、その処理に対応するノードに、その処理を実行可能な演算装置を表示させる。上記の例では、演算装置Ａ（２０）または演算装置Ｂ（３０）で実行可能であることを表示装置７に表示させ、どちらの演算装置で実行させるかを入力装置８によって選択可能とする。
【００３８】
プログラム生成部３は、入力装置８によって選択された演算装置に対応して、処理実行関数データベース５から適切な処理実行関数を選択的に読み込み、データ転送関数データベースから適切なデータ転送関数を選択的に読み込んで、プログラム４を生成する。
【００３９】
これにより、目的とするデータ処理に含まれる１つの処理が異種の演算装置によって実行可能である場合に、どの演算装置で実行させるかを容易に指定することができ、かつ、指定された演算装置によって実行されるプログラムが生成されるので、容易に数多くの組み合わせを評価・探索することでき、設計の生産性を向上することができる。
【００４０】
プログラム開発支援装置１０の動作について、さらに詳しく説明する。
【００４１】
図８に、グラフ情報入力・編集画面９０の一例を示す。グラフ情報入力・編集画面９０は、既に入力されたグラフ情報が表示装置７に表示されており、入力装置であるマウス８のカーソル９１によって選択、編集が可能とされている。グラフ上の各ノード６１〜６４は、ユーザアプリケーションのデータ処理を構成する各処理を表し、接続線７１〜７５はデータの流れを表している。また、画面上にはコード生成ボタン９２と処理ノード追加ボタン９３がある。ＧＵＩ部１は、以下に説明するように、マウスなどの入力装置８からの入力に呼応して動作する、画面上でマウスカーソル９１を用いてグラフ形式でアプリケーションを作成する。グラフ情報はグラフ情報保持部２に格納されており、ＧＵＩ部１がグラフ情報を更新する。コード生成ボタン９２が押されると、グラフ情報保持部２に保持されているグラフ情報から、プログラム生成部３によって対応するプログラム４が生成される。処理ノード追加ボタン９３を押すことによって、新たな処理ノードを追加することができる。即ち、ＧＵＩ部１によって入力されたグラフ情報はグラフ情報保持部２に保持され、プログラム生成部３によって対応するプログラム４が生成される。その後、ＧＵＩ部１による編集によってグラフ情報保持部２に保持されているグラフ情報が更新されると、それに応じて、更新されたグラフ情報に対応するプログラム４が、プログラム生成部３によって改めて生成される。
【００４２】
グラフ情報中には、各ノード６１〜６４に対して実行する演算装置情報８１〜８４が付加されており、初期状態（デフォルト状態）では各ノードには演算装置Ａ（２０）が割り当てられている。図８では、実行する演算装置情報８１〜８４は処理ノード６１〜６４の上に表示する吹き出しとして表わされている。ここに図示される表示形態は一例であって、他の表示形態であってもよい。
【００４３】
図９及び図１０は、ある処理ノードについて実行する演算装置を切り替える操作の一例を示す説明図である。図９にはダブルクリックを用いる方法が示され、図１０にはコンテキストメニューを用いる方法が示される。図１１は、ダブルクリックを用いる方法のフローチャートである。処理Ｙを実行するノード６３の演算装置を、演算装置Ａ（２０）から演算装置Ｂ（３０）に切り替える例である。
【００４４】
ダブルクリックを用いる方法では、マウスカーソル９１を切り替えたい処理ノード６３上に移動し、ダブルクリックすることで、実行する演算装置を切り替えることができる。ＧＵＩ部１では、図１１に示すフローチャートが実行される。まず、処理ノードがダブルクリックされたか否かを判定する（Step1）。処理ノード６３がダブルクリックされた場合、ノード６３の処理名および現在割り当てられている演算装置を取得する（Step2）。そして、処理実行関数データベース５から処理名に対応する処理関数の候補一覧を取得する（Step3）。そして、処理関数候補が複数ある場合、現在割り当てられている演算装置の次の演算装置にノードの演算装置割り当てを変更する（Step4）。処理関数の候補が１つしかない場合には、ノードの演算装置割り当ては変更しない（Step4）。
【００４５】
これにより、ある処理を実行可能な演算装置が３個以上である場合にも、高い操作性が保たれる。
【００４６】
図１２は、処理実行関数データベース５に格納される処理実行関数の例を示す説明図である。処理実行関数データベース５には、処理名ごとに、各演算装置Ａ（２０）またはＢ（３０）で実行する場合の関数名が格納されている。図中の「−」（ハイフン）は、該当の演算装置では対応する関数が実装されていないことを示す。処理ノード６１の処理Ｗを演算装置Ａ（２０）で実行するための処理実行関数はfuncW(in1,out1)であるが、処理Ｗを演算装置Ｂ（３０）で実行するための処理実行関数は実装されていない。処理ノード６２の処理Ｘは、演算装置Ａ（２０）で実行するときには処理実行関数funcX(in1,out1)が使用され、演算装置Ｂ（３０）で実行するときには処理実行関数start_B_funcX(in1,out1)が使用される。同様に、処理ノード６３の処理Ｙは、演算装置Ａ（２０）で実行するときには処理実行関数funcY(in1,out1)が使用され、演算装置Ｂ（３０）で実行するときには処理実行関数start_B_funcY(in1,out1)が使用される。処理ノード６４の処理Ｚを演算装置Ａ（２０）で実行するための処理実行関数はfuncZ(in1,out1)であるが、処理Ｚを演算装置Ｂ（３０）で実行するための処理実行関数は実装されていない。
【００４７】
演算装置の切り替え方法は上記のダブルクリックを用いる方法以外に、シングルクリックで切り替えるようにしてもよいし、キーボードの所定キー（例えばｃキー）を押すことで切り替えるようにしてもよい。
【００４８】
または、図１０に示すように、マウスを右クリックして表示するコンテキストメニュー９４で切り替えるようにしてもよい。図１０に示すコンテキストメニューを用いる方法では、マウスカーソル９１を切り替えたい処理ノード６３上に移動し、右クリックすることで実行する演算装置を切り替えることができる。コンテキストメニュー９４には、「演算装置切替え」または「処理ノード削除」の選択肢が示され、ユーザの操作によって選択される。「演算装置切替え」が選択されると、ノード６３の演算装置は、演算装置Ｂ（３０）に切り替えられる。このとき、ＧＵＩ部１では図１１に示したのと同様のフローチャートが実行される。Step4で複数の処理関数の候補がある場合、コンテキストメニュー９４中に複数の処理関数候補または演算装置名を表示して選択できるようにしてもよい。
【００４９】
これにより、処理を実行する演算装置をノードごとに容易に切替えることができるので、設計の生産性を向上することができる。ユーザは、ＧＵＩによる簡単な操作をするだけで、処理を実行する演算装置が切替えられ、切替えに伴って必要な、プログラム４の書き換えは、ユーザからは隠蔽されて、プログラム開発支援装置１０内で自動的に行われる。
【００５０】
以降では、処理ノードごとに実行する演算装置が設定されたグラフ情報から、プログラムを生成する方法についてさらに詳しく説明する。
【００５１】
図１３に、グラフ形式で記述されたユーザアプリケーションの一例を示し、図１４にそのユーザアプリケーションから生成されたプログラムの一例を示す。このユーザアプリケーションは処理Ｗ、処理Ｘ、処理Ｙ、処理Ｚの４つの処理を順に実行するものである。また、処理Ｗ、処理Ｘ、処理Ｚは演算装置Ａ（２０）で実行し、処理Ｙは演算装置Ｂ（３０）で実行されるものとする。接続線の下に表示されるda1〜da5及びdb3とdb4は、図１４のプログラム例で使用される変数名である。
【００５２】
図１５は、プログラム生成部３の動作を示すフローチャートである。まずグラフの起点ノードを選択する（Step5）。次に、処理実行関数データベース５から、選択されたノードの処理名および割り当てられた演算装置に対応する処理関数を取得する（Step6）。次に、現在選択されたノードに割当てられた演算装置Ｓと前回選択したノードに割り当てられた演算装置Ｄを比較する（Step7）。そして、演算装置ＳとＤが異なる場合（Step8）、データ転送関数データベース６から、演算装置Ｓから演算装置Ｄへの転送に必要な転送関数を取得し、プログラム４に出力する（Step9）。次に、Step6で取得した処理関数をプログラム４に出力する。そして、グラフ中の後続ノードを選択し（Step11）、選択中のノードが終点ノードではない場合には（Step12）、Step6に戻る。後続ノードが存在しない場合に、処理を終了する。なお、最後に選択したノードの割当てが演算装置Ａ（２０）ではない場合には、演算装置Ａ（２０）への転送関数を出力してから終了するものとする。
【００５３】
図１６は、図１４のプログラムで使用されるデータ転送関数を示す説明図である。データ転送関数データベース６には、入力側演算装置と出力側演算装置の組に対し、データ転送関数が格納されている。図１６に示されるように、演算装置Ａ（２０）から演算装置Ｂ（３０）へのデータ転送を行うデータ転送関数copy_to_B(src, dst, size)と、逆に演算装置Ｂ（３０）から演算装置Ａ（２０）へのデータ転送を行うデータ転送関数copy_from_B(src, dst, size)とがデータ転送関数データベース６に準備されている。
【００５４】
図１４において、行１〜行７は、必要なメモリ領域の確保処理である。関数alloc_A()を用いて演算装置Ａ（２０）のメモリ領域を確保している。演算装置Ｂ（３０）で行う処理Ｙのために、処理Ｙの前後で演算装置Ａ（２０）と演算装置Ｂ（３０）との間でデータ転送が必要となる。このため、演算装置Ｂ（３０）の入出力用メモリ領域を関数alloc_B()を用いて別途確保している（行５〜行６）。
【００５５】
入力データを読み込む関数load_input()を呼んだ（行９）後、処理Ｗ及び処理Ｘを演算装置Ａ（２０）で実行する関数funcW()及びfuncX()を行１１及び行１３でそれぞれ呼ぶ。
【００５６】
その後、処理Ｙは演算装置Ｂ（３０）で行うため、演算装置Ａ（２０）から演算装置Ｂ（３０）へデータのコピーを行う。すなわち、行１５でcopy_to_B()関数を用いて、処理Ｘの出力である演算装置Ａ（２０）上のデータda3から処理Ｙの入力となる演算装置Ｂ（３０）のデータdb3へコピーする。
【００５７】
その後、行１６において、演算装置Ｂ（３０）で処理Ｙを実行する関数start_B_funcY()を呼ぶ。
【００５８】
その後、行１７において、関数copy_from_B()を用いて、処理Ｙの出力である演算装置Ｂ（３０）のデータメモリ３３上のデータdb4から処理Ｚの入力である演算装置Ａ（２０）のデータメモリ２３上のデータda4にコピーする。
【００５９】
そして、行１９において処理Ｚを演算装置Ａ（２０）で実行する関数funcZ()を呼ぶ。
【００６０】
以上説明したように、基本的には全ての処理を演算装置Ａ（２０）で実行する中で、一部の処理を演算装置Ｂ（３０）で実行するように変更するために、その前後にデータ転送用の関数呼び出しを挿入する。
【００６１】
図１７は、図１４のプログラムで使用される各種の関数を示す説明図である。
【００６２】
行１〜７の演算装置Ｂ（３０）のデータメモリ３３の領域確保関数alloc_B()では、確保する領域サイズを設定レジスタ３１の中のb_arg1に設定し、プログラムメモリ３２中の領域確保関数へのポインタを表すFUNC_B_ALLOCをb_funcに設定し、b_startレジスタに"1"を書き込むことにより、演算装置Ｂ（３０）を起動する。その後、b_finishが"1"となるまで待ち、演算装置Ｂ（３０）の処理完了後に演算装置Ｂ（３０）からの戻り値b_returnをalloc_B()の戻り値として返す。
【００６３】
行９〜１５の演算装置Ｂ（３０）で実行する処理Ｙの関数start_B_funcY()では、２つの引数in1及びout1を設定レジスタ３１中のb_arg1及びb_arg2に設定し、プログラムメモリ３２の中の関数Ｙへのポインタを表すFUNC_B_Yをb_funcに設定し、b_startレジスタに"1"を書き込むことによって演算装置Ｂ（３０）を起動する。その後、b_finishが"1"となるまで待ってから終了する。ここで、in1及びout1が表すアドレスは演算装置Ｂ（３０）のデータメモリ３３中のアドレスであり、演算装置Ｂ（３０）は、in1で表される、データメモリ３３に転送された入力データを処理する。また、out1で表わされる、データメモリ３３に出力データ領域に処理Ｙの結果を格納する。
【００６４】
行１７〜２３のcopy_to_B()関数では、データ転送装置４０を用いて演算装置Ａ（２０）のデータメモリ２３から、演算装置Ｂ（３０）のデータメモリ３３へデータを転送する。転送元のaddr_aをデータ転送装置４０内の設定レジスタ４１のdma_addr_aに設定し、転送先のaddr_bをdma_addr_bに設定し、転送方向をdma_addr_directionに設定した後に、dma_startレジスタに"1"を書き込んでデータ転送を開始する。その後、dma_finishが"1"となるまで待ってから終了する。
【００６５】
行２４〜３０のcopy_from_B()関数では、データ転送装置４０を用いて演算装置Ｂ（３０）のデータメモリ３３から演算装置Ａ（２０）のデータメモリを転送する。転送元のaddr_bをデータ転送装置４０内の設定レジスタ４１のdma_addr_bに設定し、転送先のaddr_aをdma_addr_aに設定し、転送方向をdma_addr_directionに設定してから、dma_startレジスタに"1"を書き込むことによってデータ転送を開始する。その後、dma_finishが"1"となるまで待ってから終了する。
【００６６】
なお、図１７に示す関数を始め、処理関数データベース５とデータ転送関数データベースに準備しておくべき各種の関数は、予め、ターゲットデバイス５０の開発と並行して開発し用意しておくものとしてよい。
【００６７】
以上説明したように、本実施形態によれば、ある処理を実行する演算装置を簡単に切り替えることができ、また、演算装置の割当てに合わせて必要なデータ転送処理が自動的に生成されるため、設計生産性を大幅に向上させることができる。なお、本実施形態では演算装置Ａ（２０）と演算装置Ｂ（３０）のみの例について説明したが、３個以上の演算装置を含むターゲットデバイスに対しても同様に拡張することができる。
【００６８】
演算装置Ａ（２０）がＣＰＵのような汎用性のあるプロセッサであり、演算装置Ｂ（３０）がアクセラレータであるような場合には、通常、ユーザアプリケーションのデータ処理を構成するすべての処理が、ＣＰＵである演算装置Ａ（２０）によって実行可能であり、そのうちの一部の処理はアクセラレータである演算装置Ｂ（３０）によっても実行可能である。このとき、処理実行関数データベース５には、すべての処理について演算装置Ａ（２０）で実行するための処理実行関数と、一部の処理について演算装置Ｂ（３０）で実行するための処理実行関数とが格納される。ＧＵＩ部１では、グラフ情報中の全てのノード６１〜６４について、実行する演算装置情報８１〜８４の初期状態（デフォルト状態）として演算装置Ａ（２０）であるＣＰＵが割り当てるとよい。その後、上述した方法により、各ノードについて演算装置の割り当てを変更することができるユーザーインターフェースが提供される。
【００６９】
これにより、ユーザアプリケーションのデータ処理に含まれる全ての処理が、ＣＰＵで実行されるように、デフォルト状態（初期状態）が設定され、アクセラレータによっても実行可能な処理が、ＧＵＩによって容易に切替え可能とされ、設計の生産性を向上することができる。
【００７０】
〔実施形態２〕
実施形態１では、データ転送関数として単純なコピーのみについて説明したが、演算装置の割当てに合わせて必要となるデータ転送関数には、データフォーマットを変換する関数が含まれてもよい。
【００７１】
〔エンディアン変換〕
データ転送関数に、ビッグエンディアンをリトルエンディアンとの間の変換関数が含まれる実施形態について説明する。
【００７２】
図８に示されるデータ処理において、ノード６３の処理Ｙを演算装置Ａから演算装置Ｂに切り替えて図１３に示されるようなグラフ情報が生成されたとき、これに基づいて生成されるプログラム４は、図１４に示される。ここで、例えば、演算装置Ａ（２０）が、データがリトルエンディアンであることを前提とする命令を多く含むＣＰＵであり、演算装置Ｂ（３０）が、ビッグエンディアンのデータを入出力とするアクセラレータとする。その場合には、図１４に示されるプログラム４において、演算装置Ｂへのデータ転送関数copy_to_Bにリトルエンディアンからビッグエンディアンへのデータ変換機能が付加され、演算装置Ｂからのデータ転送関数copy_from_Bにビッグエンディアンからリトルエンディアンへのデータ変換機能が付加される。
【００７３】
エンディアンを変換する機能の実装方法は任意である。例えば、エンディアンを変換する機能は、演算装置Ａ（２０）がＣＰＵであるときに、そのソフトウェアで実装されてもよいし、演算装置Ｂ（３０）がアクセラレータであるときに、それに付随するハードウェアで実装されても良い。
【００７４】
図１８は、データ変換機能が付加されたデータ転送関数を使用したプログラムの一例を示す説明図である。図１４との違いは、行１７にリトルエンディアンからビッグエンディアンへのデータ変換機能が、LittleEndianToBigEndian関数として追加され、行２１にビッグエンディアンからリトルエンディアンへのデータ変換機能が、BigEndianToLittleEndian関数として追加されている点である。これらの関数は、図１８に例示されるように、コピー関数copy_to_Bやcopy_from_Bとは別の関数として定義されてもよいし、コピー関数copy_to_Bやcopy_from_Bの内部機能として規定されてもよい。演算装置が多数であって変換の組合せが多数になる場合に、データ変換はＣＰＵなどの特定の汎用演算装置で実行される別の関数として定義されることにより選択の自由度が広がり、または、データ転送関数データベースのサイズの増加を抑えることができる。一方、データ変換がアクセラレータ側に実装されたハードウェアによって実行される場合には、コピー関数copy_to_Bやcopy_from_Bや処理実行関数start_B_funcYに内蔵される機能として実装されても良い。
【００７５】
３個以上の演算装置を含むターゲットデバイスに対しても同様に拡張することができる。ある演算装置へのデータ転送関数にエンディアン変換機能が付加されるのは、直前に処理を実行する演算装置の出力データのエンディアンと当該演算装置の入力データのエンディアンが異なる場合である。
【００７６】
〔固定小数点／浮動小数点、単精度／倍精度〕
以上の説明は、エンディアンではなく、固定小数点か浮動小数点か、或いは、単精度か倍精度かなどのビット精度について、データ転送関数の転送前と後の演算装置の間で、データフォーマットが異なる場合にも同様に適用される。固定小数点から浮動小数点へのデータフォーマット変換、浮動小数点から固定小数点へのデータデータフォーマット変換、或いは、単精度から倍精度へのデータフォーマット変換、倍精度から単精度へのデータフォーマット変換は、適宜、データ転送関数に付加機能として追加される。ここで、単精度、倍精度は１バイトで表記される数値、２バイトで表記される数値に限らず、３バイト以上で表記されるデータについても同様に拡張される。また、バイト単位のデータに限らず、任意のビット長のデータに変更されてもよい。
【００７７】
〔データ配列変換〕
図１９は、データ転送関数に付随するデータ配列変換機能の一例について模式的に説明するための説明図である。演算装置の割当てに合わせて必要となるデータ転送関数に付随する、データフォーマット変換には、演算装置に適するデータ配列の変換が含まれてもよい。例えば、１つの演算装置Ａ（２０）が、汎用プロセッサの一種であるＣＰＵであり、演算装置Ｂ（３０）がＳＩＭＤ（Single Instruction Multiple Data）型の並列プロセッサアーキテクチャを採用するアクセラレータであるような場合に、データ配列の変換を行う。演算装置Ａ（２０）の入出力データは、図１９の下側に示すように順次アドレスによってアクセスされることを前提としたデータ配列が適しており、一方、ＳＩＭＤ型並列プロセッサの場合には、図１９の上側に示すように、並列に動作するプロセッサエレメントＰＥ（Processor Element）が並列にデータアクセスするのに適したデータ配列とされるのがよい。そのため、演算装置Ａ（２０）による処理の直後に演算装置Ｂ（３０）での処理を実行するときには、図１９の下から上方向のデータ配列変換を行い、演算装置Ｂ（３０）での処理の結果は、図１９の上から下方向のデータ配列変換を行って、演算装置Ａ（２０）による処理に戻す。
【００７８】
このようなデータ配列の変換は、上述のエンディアン等のデータフォーマット変換と組み合わせて行ってもよい。
【００７９】
以上のように、データ転送関数に、データフォーマット変換やデータ配列変換の機能を適宜付加することによって、データフォーマットが異なっている場合にも、容易に演算装置の切り替えに対応することができる。即ち、異なる種類の演算装置間でデータフォーマットやデータ配列が異なる場合であっても、処理を実行する演算装置の切り替えに際してデータフォーマットやデータ配列の変換も合わせてプログラミングされるため、処理を実行する演算装置をノードごとに容易に切替えることができるので、設計の生産性を向上することができる。
【００８０】
以上本発明者によってなされた発明を実施形態に基づいて具体的に説明したが、本発明はそれに限定されるものではなく、その要旨を逸脱しない範囲において種々変更可能であることは言うまでもない。
【００８１】
例えば、ターゲットデバイスが同一の処理を互いに異なる複数の態様で実行することができればそれを複数の異なる演算装置として位置付けることができるので、ターゲットデバイスの構成は、物理的に明確に分離された複数の演算装置を備えない構成であってもよい。
【符号の説明】
【００８２】
１  グラフィカルユーザーインターフェース（ＧＵＩ）部
２  グラフ情報保持部
３  プログラム生成部
４  出力プログラム
５  処理実行関数データベース
６  データ転送関数データベース
７  表示装置（ディスプレイ）
８  入力装置（マウス）
９  計算機
１０  プログラム開発支援装置
２０、３０  演算装置
３１  演算装置の設定レジスタ
２２、３２  プログラムメモリ
２３、３３  データメモリ
４０  データ転送装置
４１  データ転送装置の設定レジスタ
５０  ターゲットデバイス
６１〜６４  ノード
７１〜７５  接続線
８１〜８４  演算装置情報
９０  グラフ情報入力・編集画面
９１  マウスカーソル
９２  コード生成ボタン
９３  処理ノード追加ボタン
９４  コンテキストメニュー
【図１】
0006489985.tif 000002
【図２】
0006489985.tif 000003
【図３】
0006489985.tif 000004
【図４】
0006489985.tif 000005
【図５】
0006489985.tif 000006
【図６】
0006489985.tif 000007
【図７】
0006489985.tif 000008
【図８】
0006489985.tif 000009
【図９】
0006489985.tif 000010
【図１０】
0006489985.tif 000011
【図１１】
0006489985.tif 000012
【図１２】
0006489985.tif 000013
【図１３】
0006489985.tif 000014
【図１４】
0006489985.tif 000015
【図１５】
0006489985.tif 000016
【図１６】
0006489985.tif 000017
【図１７】
0006489985.tif 000018
【図１８】
0006489985.tif 000019
【図１９】
0006489985.tif 000020