JP6489985B2 - プログラム開発支援装置およびプログラム開発支援ソフトウェア - Google Patents

プログラム開発支援装置およびプログラム開発支援ソフトウェア Download PDF

Info

Publication number
JP6489985B2
JP6489985B2 JP2015186569A JP2015186569A JP6489985B2 JP 6489985 B2 JP6489985 B2 JP 6489985B2 JP 2015186569 A JP2015186569 A JP 2015186569A JP 2015186569 A JP2015186569 A JP 2015186569A JP 6489985 B2 JP6489985 B2 JP 6489985B2
Authority
JP
Japan
Prior art keywords
arithmetic
data
process execution
execution function
function
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2015186569A
Other languages
English (en)
Other versions
JP2017062554A (ja
Inventor
悠記 小林
悠記 小林
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Renesas Electronics Corp
Original Assignee
Renesas Electronics Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Renesas Electronics Corp filed Critical Renesas Electronics Corp
Priority to JP2015186569A priority Critical patent/JP6489985B2/ja
Priority to US15/249,336 priority patent/US10310823B2/en
Priority to CN201610839473.XA priority patent/CN106557312B/zh
Publication of JP2017062554A publication Critical patent/JP2017062554A/ja
Application granted granted Critical
Publication of JP6489985B2 publication Critical patent/JP6489985B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/35Creation or generation of source code model driven
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/20Software design
    • G06F8/22Procedural
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/20Software design
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/541Interprogram communication via adapters, e.g. between incompatible applications

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)

Description

本発明は、プログラム開発支援装置およびプログラム開発支援ソフトウェアに関し、特にグラフ形式で記述されたユーザアプリケーションからターゲットデバイス上の演算装置を用いて動作するプログラムを開発するためのグラフGUIプログラミング環境に好適に利用できるものである。
The Khronos Group(以降Khronosと呼ぶ)により策定された画像認識向けAPI(Application Programming Interface)であるOpenVXは、グラフ形式で記述されたユーザアプリケーションをグラフマネージャが解釈し、ターゲットデバイス上の演算装置を用いて効率的に処理するものである。
図1にOpenVXのためにグラフ形式で記述されたユーザアプリケーションの一例を示し、図2にそれに対応するOpenVXコードの例を示す。OpenVXコードでは、まずvx**Node()という関数群を使ってグラフ構造の定義を行う。その後、vxVerifyGraph()関数でグラフ構造を解析し、グラフ中に表される処理の並列性や処理順序を決める。そして、vxProcessGraph()関数で処理を実行する。ここでは、図1に示すように、入力画像inについてvxThresholdノードで二値化処理を行った後、vxSubtractとvxAddノードで減算及び加算を行い、最後にそれらの結果を加算して出力画像outを生成している。この例では、vxThresholdを最初に処理する必要があるが、vxSubtractと1回目のvxAddはどちらを先に処理してもよく、並列に処理してもよい。なお、ここでいうグラフは有向グラフ(Directed Acyclic Graph)である。
グラフ上で使用するノード(Base Node)は、互換性を保つため、Khronosによって必要精度や挙動などの仕様が厳密に定義されている。例えば画素ごとのエッジ方向を算出するvxPhaseノードは、0〜255の8bit精度で出力するものと定義されている。
有向グラフを入力手段とするプログラム開発環境は、OpenVXの他にも提案されている。
特許文献1には、グラフィカルユーザーインターフェース(GUI:Graphical User Interface)のディスプレイ上で、演算機能を表現したノードを接続線で繋いで構成されるグラフを使用して、目的とする制御プログラムを組み立てる、制御プログラム組み立てシステムが開示されている。種々のシステムに対して有向グラフをモデリングの共通手段として、システムの統合を容易にすることができる。
特許文献2には、マルチプロセッサシステム上で実行されるシミュレーションシステムにおいて、プログラムの実行を並列化により高速化する技術が開示されている。
OpenVXのターゲットデバイスとしては、SoC(System-on-a-Chip)などのシステムLSI(Large Scale Integrated circuit)が挙げられる。ターゲットデバイスとして使用される、SoCなどのシステムLSIの中には、CPU(Central Processing Unit)の他に画像処理に特有の演算機能が強化された画像処理プロセッサや、特殊な演算を高速化するアクセラレータをさらに搭載しているものがある。例えばルネサスエレクトロニクス株式会社のR-Car V2Hには、CPUの他に2Dと3Dのグラフィックスエンジンが搭載され、さらにImage Recognition Engineと呼ばれるアクセラレータが搭載されている。
特開2004−265393号公報 特開2011−096107号公報
特許文献1及び2について本発明者が検討した結果、以下のような新たな課題があることがわかった。
OpenVXのように、グラフ形式で記述されたユーザアプリケーションからターゲットデバイス上の演算装置を用いて動作するプログラムを開発するためのグラフGUIプログラミング環境では、開発者はあるノードに対する処理を、複数の異なる種類の演算装置に実装することができる。このとき、異なる種類の演算装置では、得られる処理結果は同じであるが、得られるまでの処理時間やそのときの消費電力量が異なるだろう。例えば、CPUの他に演算装置(アクセラレータ)が搭載されるターゲットデバイスでは、CPUとアクセラレータとでは内部構成が大幅に異なるので、結果として、ある処理に対する処理時間や消費電力量は変わると考えられる。ここで、「異なる種類の演算装置」とは、演算を実行するための回路構成を異にする演算装置を意味する。例えば、CPUとアクセラレータのように、大きく異なる場合に限らず、同じCPUでも乗算回路を使用して乗算を実行する命令と、同じ乗算を乗算回路を使用せずに加算回路の繰り返しによる関数で実行する場合も、異なる種類の演算装置に該当する。
同じ処理を実行できる演算装置が複数候補あるため、ユーザの設計自由度が向上するというメリットがある半面、それぞれの処理に対して最適な演算装置を選ぶためには、演算装置の割当てを様々に変えながら処理時間や消費電力量を評価する必要がある。このため、演算装置の種類が多い場合や、ユーザアプリケーションを構成する処理が多い場合、すなわち、グラフが複雑な場合には、数多くの組み合わせを評価・探索する必要があり、設計生産性のさらなる向上が求められる。
グラフGUIプログラミング環境は、ユーザアプリケーションの生産性を向上させるために好適な環境である。これまでに、部品を結合する要領でユーザアプリケーションを簡便に作成する方法や、同種の演算器を複数搭載したマルチプロセッサなどのシステムを対象にした方法が提案されてきた。例えば、マウス操作によりユーザアプリケーションを構築する方法がある。特許文献1では、GUIを用いてプログラムを生成する方法が開示されている。特許文献2では、グラフをループにまたがって最適化する手法が示されている。
しかしながら、従来技術では、グラフ上で並列に実行するノードや同種の演算器への割当てを最適化する方法が知られているに留まる。異種の演算装置への割当てを指定する方法がないために、演算装置の種類が多い場合や、ユーザアプリケーションを構成する処理が多い場合、すなわち、グラフが複雑な場合には、効率よく数多くの組み合わせを評価・探索することができないという問題があることがわかった。
このような課題を解決するための手段を以下に説明するが、その他の課題と新規な特徴は、本明細書の記述及び添付図面から明らかになるであろう。
一実施の形態によれば、下記の通りである。
すなわち、グラフ情報に基づいてグラフ形式で記述されるデータ処理をターゲットデバイスで実行するためのプログラムを生成する、プログラム開発支援装置であって、グラフィカルユーザーインターフェース(GUI)部と、プログラム生成部と、処理実行関数データベースと、データ転送関数データベースとを有する。グラフ情報は、前記データ処理に含まれる複数の処理のそれぞれをノードとしデータの流れを有向接続線とするグラフであって、前記GUI部に表示される。前記データ処理に含まれるある処理が、ターゲットデバイスに搭載される異種の複数の演算装置で実行可能である場合に、処理実行関数データベースにはそれぞれの演算装置で当該処理を実行するための複数の処理実行関数が保持され、データ転送関数データベースにはそれぞれの演算装置で当該処理を実行するための複数のデータ転送関数が保持される。GUI部は、当該処理が前記複数の演算装置で実行可能であることを表示して、どの演算装置で実行させるかをユーザに選択させる。プログラム生成部は、選択された演算装置に対応する適切な処理実行関数とデータ転送関数を、処理実行関数データベースとデータ転送関数データベースのそれぞれから読み込んで、目的とするデータ処理をターゲットデバイスで実行させるためのプログラムを生成する。
前記一実施の形態によって得られる効果を簡単に説明すれば下記のとおりである。
すなわち、目的とするデータ処理に含まれる1つの処理が異種の演算装置によって実行可能である場合に、どの演算装置で実行させるかを容易に指定することができ、かつ、指定された演算装置によって実行されるプログラムが生成されるので、容易に数多くの組み合わせを評価・探索することでき、設計の生産性を向上することができる。
図1は、ユーザアプリケーションのOpenVXによるグラフ形式での記述例を示す説明図である。 図2は、図1のグラフ形式記述に対応するOpenVXコードの例を示す説明図である。 図3は、実施形態1に係るプログラム開発支援装置の構成を示すブロック図である。 図4は、実施形態1に係るプログラム開発支援装置が実装されるハードウェアの構成例を示すブロック図である。 図5は、ターゲットデバイスの構成例を示すブロック図である。 図6は、演算装置B(30)が備える設定レジスタ31の一例を示す説明図である。 図7は、データ転送装置40が備える設定レジスタ41の一例を示す説明図である。 図8は、グラフ情報入力・編集画面の一例を示す説明図である。 図9は、実行する演算装置の切り替え操作の一例である、ダブルクリックを用いる方法を示す説明図である。 図10は、実行する演算装置の切り替え操作の一例である、コンテキストメニューを用いる方法を示す説明図である。 図11は、ダブルクリックを用いる方法のフローチャートである。 図12は、処理実行関数データベース5に格納される処理実行関数の例を示す説明図である。 図13は、グラフ形式で記述されたユーザアプリケーションの一例を示す説明図である。 図14は、図13のユーザアプリケーションから生成されたプログラムの一例を示す説明図である。 図15は、プログラム生成部の動作を示すフローチャートである。 図16は、図14のプログラムで使用されるデータ転送関数を示す説明図である。 図17は、図14のプログラムで使用される各種の関数を示す説明図である。 図18は、データ変換機能が付加されたデータ転送関数を使用したプログラムの一例を示す説明図である。 図19は、データ転送関数に付随するデータ配列変換機能の一例について模式的に説明するための説明図である。
実施の形態について詳述する。なお、発明を実施するための形態を説明するための全図において、同一の機能を有する要素には同一の符号を付して、その繰り返しの説明を省略する。
〔実施形態1〕
図3は、本実施形態1に係るプログラム開発支援装置10の構成を示すブロック図であり、図4は、そのプログラム開発支援装置10が実装されるハードウェアの構成例を示すブロック図である。また、図5は、ターゲットデバイス50の構成例を示すブロック図である。
プログラム開発支援装置10は、表示装置7と例えばマウスなどの入力装置8を備えた計算機9上で動作するソフトウェア(プログラム開発支援ソフトウェア)として実現されている。プログラム開発支援ソフトウェアは、種々の態様のコンピュータ可読媒体を介して、計算機9に供給される。コンピュータ可読媒体には、例えば、磁気記録媒体、光磁気記録媒体、光学的記録媒体、半導体記憶媒体などの有体物の媒体の他、ネットワークなどの通信手段を経由して計算機9に供給される、電気信号、光信号、及び、電磁波などの無体物の媒体も含まれ得る。有体物の媒体としては、例えば、磁気テープ、磁気ディスク、光磁気ディスク、Blu−ray Disk(登録商標)、DVD(Digital Versatile Disc; 登録商標)、各種コンパクトディスク(CD、CD−ROM,CD−R,CD−RW等)、USBメモリ等が該当する。また無体物の媒体の通信手段としては、イーサネット(登録商標)、光ファイバー、無線LAN(Local Area Network)などが該当する。
プログラム開発支援装置10は、グラフィカルユーザーインターフェース(GUI)部1と、グラフ情報保持部2と、プログラム生成部3と、処理実行関数データベース5と、データ転送関数データベース6とを含んで構成され、グラフ情報に基づいてグラフ形式で記述されるデータ処理を、ターゲットデバイス50で実行させるためのプログラム4を生成する。ここで、ターゲットデバイス50は、複数の演算装置(20、30、…)を有する。また、グラフ情報とは、ユーザアプリケーションである前記データ処理に含まれる複数の処理のそれぞれをノードとしデータの流れを有向接続線とするグラフである。
GUI部1は、このグラフ情報を表示装置7に表示することによって、ユーザに対して、作成したいアプリケーションのデータ処理を入力、編集することができる環境を提供する。グラフ情報保持部2は、入力されたグラフ情報を保持する。保持する時のデータフォーマットは任意である。
処理実行関数データベース5は、ターゲットデバイス50に搭載される複数の演算装置(20、30、…)のうち、データ処理に含まれる処理を実行可能な演算装置のそれぞれについて、その処理をその演算装置によって実行させるための処理実行関数を保持するデータベースである。ある1つの処理が複数種類の演算装置のいずれによっても実行可能である場合には、実行可能な演算装置毎に処理実行関数が準備され保持されている。処理実行関数データベース5は、前記データ処理に含まれる個々の処理をターゲットデバイスに搭載されている演算装置によって実行させるための処理実行関数を保持している。
データ転送関数データベース6は、処理実行関数データベース5に保持される処理実行関数を、対応する演算装置で実行させるためのデータ転送関数を保持するデータベースである。データ転送関数の機能には、単純なデータ転送の他に、データ形式の変換や、メモリ上のデータ配列の変換が含まれてもよい。
プログラム生成部3は、グラフ情報保持部2に保持されるグラフ情報に基づいて、処理実行関数データベース5から適切な処理実行関数を読込み、データ転送関数データベース6から適切なデータ転送関数を読み込んで、プログラム4を生成して出力する。
ユーザアプリケーションのデータ処理を構成する複数の処理のうちのある処理が、ターゲットデバイス50に搭載される複数の演算装置のうち、互いに種類の異なる、演算装置A(20)と演算装置B(30)のうちのどちらの演算装置によっても実行可能であるとする。
図5に示されるターゲットデバイス50は、当該処理を実行可能な2個の演算装置A(20)と演算装置B(30)のみを例示するものであり、演算装置A(20)にはプログラムメモリ22とデータメモリ23とが接続され、演算装置B(30)にはプログラムメモリ32とデータメモリ33とが接続されている。ターゲットデバイス50は、さらに、演算装置A(20)のデータメモリ23と演算装置B(30)のデータメモリ33との間でデータ転送を行うデータ転送装置40を備える。
ここで、特に制限されないが、演算装置A(20)は例えばCPUであり、演算装置B(30)はアクセラレータ、データ転送装置40はダイレクトメモリアクセスコントローラ(DMAC:Direct Memory Access Controller)である。また、演算装置B(30)の設定レジスタ31とデータ転送装置40の設定レジスタ41は、それぞれCPUである演算装置A(20)によって設定可能とされる。
演算装置B(30)は設定レジスタ31を備え、実行する演算処理の種類を変更しまたは関数の引数やリターン値などの処理のパラメータが設定され、起動などの制御コマンドが設定可能とされ、演算終了などを示す状態(ステータス)が読み出し可能とされる。図6には、演算装置B(30)が備える設定レジスタ31の一例が示される。設定レジスタ31は複数のワードb_start、b_finish、b_func、b_return、b_arg1〜b_arg5を含んで構成される。ワードb_startは、演算装置B(30)に処理を開始させるための起動コマンドを書き込むワードである。ワードb_finishは、演算装置B(30)による処理が実行中か完了したかの状態を示すワードである。ワードb_funcは、演算装置B(30)が実行する処理の内容(種類)を指定するワードである。ワードb_returnは、演算装置B(30)が実行した関数のリターン値が格納されるワードである。ワードb_arg1〜b_arg5は、演算装置B(30)が実行する関数の各種引数を書き込むためのワードである。
データ転送装置40は設定レジスタ41を備え、転送元と転送先のアドレスや転送されるデータの量などのパラメータが設定され、また、転送開始などの制御コマンドが設定可能とされ、データ転送の状況を表示するステータスレジスタが含まれてもよい。図7には、データ転送装置40が備える設定レジスタ41の一例が示される。データ転送装置40がDMACである場合の例であり、設定レジスタ41は複数のワードdma_start、dma_finish、dma_direction、dma_addr_a、dma_addr_b及びdma_sizeを含んで構成される。ワードdma_startは、データ転送装置40にDMA転送を開始させるための転送起動コマンドを書き込むワードである。ワードdma_finishは、データ転送装置40によるDMA転送が実行中か完了したかの状態を示すワードである。ワードdma_directionは、DMA転送の方向を設定するワードである。即ち、ワードdma_directionは、演算装置A(20)のデータメモリ23から演算装置B(30)のデータメモリ33へのデータ転送であるのか、逆に、演算装置A(20)のデータメモリ23から演算装置B(30)のデータメモリ33へのデータ転送であるのかを設定する。ワードdma_addr_aは、演算装置A(20)のデータメモリ23の先頭アドレスを設定するワードであり、ワードdma_addr_bは、演算装置B(30)のデータメモリ33の先頭アドレスを設定するワードである。演算装置A(20)から演算装置B(30)への転送の場合には、ワードdma_addr_aがソースアドレス、ワードdma_addr_bがデスティネーションアドレスになり、逆に、演算装置B(30)から演算装置A(20)への転送の場合には、ワードdma_addr_bがソースアドレス、ワードdma_addr_aがデスティネーションアドレスになる。ワードdma_sizeは、データ転送の対象であるデータのサイズを設定するワードである。
ただし、このような構成はあくまでも一例に過ぎず、演算装置A(20)と演算装置B(30)が互いに異なるアーキテクチャを持つCPUであってもよく、プログラムメモリ22、32とデータメモリ23、33がプログラムとデータをともに格納する物理的には1つのメモリであってもよいし、2つの演算装置に共通の1つのメモリであってもよい。逆に、それぞれのメモリがキャッシュメモリなどを含んで階層化されていてもよい。図5はターゲットデバイス50についての極めて単純な一例を示すに過ぎない。
処理実行関数データベース5は、ある1つの処理が複数種類の演算装置のいずれによっても実行可能である場合には、実行可能な演算装置毎に処理実行関数が準備され保持する。ある処理が演算装置A(20)でも演算装置B(30)でも実行可能な場合には、処理実行関数データベース5は、当該処理を演算装置A(20)で実行するための第1処理実行関数と演算装置B(30)で実行するための第2処理実行関数とを保持する。このとき、データ転送関数データベース6は、第1処理実行関数を演算装置A(20)で実行させるための第1データ転送関数と、第2処理実行関数を演算装置B(30)で実行させるための第2データ転送関数とを保持している。当該処理が演算装置A(20)のみで実行可能な場合には、当該処理を演算装置A(20)で実行するための第1処理実行関数が保持されている。ユーザアプリケーションのデータ処理を構成する複数の処理のそれぞれについて、どちらの演算装置で実行可能かによって、少なくとも一方の演算装置で実行するための処理実行関数が準備され保持されている。
データ転送関数データベース6は、処理実行関数データベース5に保持される処理実行関数を、対応する演算装置で実行させるためのデータ転送関数を保持するデータベースである。演算装置A(20)がCPU、演算装置B(30)がアクセラレータである場合、データ処理の一部をアクセラレータである演算装置B(30)によって実行させるためのデータ転送関数が、データ転送関数データベース6に格納される。即ち、演算装置A(20)のデータメモリ23から演算装置B(30)のデータメモリ33へのデータ転送を行うデータ転送関数と、演算装置B(30)により演算結果をデータメモリ33から演算装置A(20)のデータメモリ23へ転送するデータ転送関数とが、データ転送関数データベース6に格納される。このとき、データ転送関数の機能には、単純なデータ転送の他に、データ形式の変換や、メモリ上のデータ配列の変換が含まれてもよい。
GUI部1は、データ処理に上記のような処理が含まれるときに、表示装置7に表示するグラフ情報において、その処理に対応するノードに、その処理を実行可能な演算装置を表示させる。上記の例では、演算装置A(20)または演算装置B(30)で実行可能であることを表示装置7に表示させ、どちらの演算装置で実行させるかを入力装置8によって選択可能とする。
プログラム生成部3は、入力装置8によって選択された演算装置に対応して、処理実行関数データベース5から適切な処理実行関数を選択的に読み込み、データ転送関数データベースから適切なデータ転送関数を選択的に読み込んで、プログラム4を生成する。
これにより、目的とするデータ処理に含まれる1つの処理が異種の演算装置によって実行可能である場合に、どの演算装置で実行させるかを容易に指定することができ、かつ、指定された演算装置によって実行されるプログラムが生成されるので、容易に数多くの組み合わせを評価・探索することでき、設計の生産性を向上することができる。
プログラム開発支援装置10の動作について、さらに詳しく説明する。
図8に、グラフ情報入力・編集画面90の一例を示す。グラフ情報入力・編集画面90は、既に入力されたグラフ情報が表示装置7に表示されており、入力装置であるマウス8のカーソル91によって選択、編集が可能とされている。グラフ上の各ノード61〜64は、ユーザアプリケーションのデータ処理を構成する各処理を表し、接続線71〜75はデータの流れを表している。また、画面上にはコード生成ボタン92と処理ノード追加ボタン93がある。GUI部1は、以下に説明するように、マウスなどの入力装置8からの入力に呼応して動作する、画面上でマウスカーソル91を用いてグラフ形式でアプリケーションを作成する。グラフ情報はグラフ情報保持部2に格納されており、GUI部1がグラフ情報を更新する。コード生成ボタン92が押されると、グラフ情報保持部2に保持されているグラフ情報から、プログラム生成部3によって対応するプログラム4が生成される。処理ノード追加ボタン93を押すことによって、新たな処理ノードを追加することができる。即ち、GUI部1によって入力されたグラフ情報はグラフ情報保持部2に保持され、プログラム生成部3によって対応するプログラム4が生成される。その後、GUI部1による編集によってグラフ情報保持部2に保持されているグラフ情報が更新されると、それに応じて、更新されたグラフ情報に対応するプログラム4が、プログラム生成部3によって改めて生成される。
グラフ情報中には、各ノード61〜64に対して実行する演算装置情報81〜84が付加されており、初期状態(デフォルト状態)では各ノードには演算装置A(20)が割り当てられている。図8では、実行する演算装置情報81〜84は処理ノード61〜64の上に表示する吹き出しとして表わされている。ここに図示される表示形態は一例であって、他の表示形態であってもよい。
図9及び図10は、ある処理ノードについて実行する演算装置を切り替える操作の一例を示す説明図である。図9にはダブルクリックを用いる方法が示され、図10にはコンテキストメニューを用いる方法が示される。図11は、ダブルクリックを用いる方法のフローチャートである。処理Yを実行するノード63の演算装置を、演算装置A(20)から演算装置B(30)に切り替える例である。
ダブルクリックを用いる方法では、マウスカーソル91を切り替えたい処理ノード63上に移動し、ダブルクリックすることで、実行する演算装置を切り替えることができる。GUI部1では、図11に示すフローチャートが実行される。まず、処理ノードがダブルクリックされたか否かを判定する(Step1)。処理ノード63がダブルクリックされた場合、ノード63の処理名および現在割り当てられている演算装置を取得する(Step2)。そして、処理実行関数データベース5から処理名に対応する処理関数の候補一覧を取得する(Step3)。そして、処理関数候補が複数ある場合、現在割り当てられている演算装置の次の演算装置にノードの演算装置割り当てを変更する(Step4)。処理関数の候補が1つしかない場合には、ノードの演算装置割り当ては変更しない(Step4)。
これにより、ある処理を実行可能な演算装置が3個以上である場合にも、高い操作性が保たれる。
図12は、処理実行関数データベース5に格納される処理実行関数の例を示す説明図である。処理実行関数データベース5には、処理名ごとに、各演算装置A(20)またはB(30)で実行する場合の関数名が格納されている。図中の「−」(ハイフン)は、該当の演算装置では対応する関数が実装されていないことを示す。処理ノード61の処理Wを演算装置A(20)で実行するための処理実行関数はfuncW(in1,out1)であるが、処理Wを演算装置B(30)で実行するための処理実行関数は実装されていない。処理ノード62の処理Xは、演算装置A(20)で実行するときには処理実行関数funcX(in1,out1)が使用され、演算装置B(30)で実行するときには処理実行関数start_B_funcX(in1,out1)が使用される。同様に、処理ノード63の処理Yは、演算装置A(20)で実行するときには処理実行関数funcY(in1,out1)が使用され、演算装置B(30)で実行するときには処理実行関数start_B_funcY(in1,out1)が使用される。処理ノード64の処理Zを演算装置A(20)で実行するための処理実行関数はfuncZ(in1,out1)であるが、処理Zを演算装置B(30)で実行するための処理実行関数は実装されていない。
演算装置の切り替え方法は上記のダブルクリックを用いる方法以外に、シングルクリックで切り替えるようにしてもよいし、キーボードの所定キー(例えばcキー)を押すことで切り替えるようにしてもよい。
または、図10に示すように、マウスを右クリックして表示するコンテキストメニュー94で切り替えるようにしてもよい。図10に示すコンテキストメニューを用いる方法では、マウスカーソル91を切り替えたい処理ノード63上に移動し、右クリックすることで実行する演算装置を切り替えることができる。コンテキストメニュー94には、「演算装置切替え」または「処理ノード削除」の選択肢が示され、ユーザの操作によって選択される。「演算装置切替え」が選択されると、ノード63の演算装置は、演算装置B(30)に切り替えられる。このとき、GUI部1では図11に示したのと同様のフローチャートが実行される。Step4で複数の処理関数の候補がある場合、コンテキストメニュー94中に複数の処理関数候補または演算装置名を表示して選択できるようにしてもよい。
これにより、処理を実行する演算装置をノードごとに容易に切替えることができるので、設計の生産性を向上することができる。ユーザは、GUIによる簡単な操作をするだけで、処理を実行する演算装置が切替えられ、切替えに伴って必要な、プログラム4の書き換えは、ユーザからは隠蔽されて、プログラム開発支援装置10内で自動的に行われる。
以降では、処理ノードごとに実行する演算装置が設定されたグラフ情報から、プログラムを生成する方法についてさらに詳しく説明する。
図13に、グラフ形式で記述されたユーザアプリケーションの一例を示し、図14にそのユーザアプリケーションから生成されたプログラムの一例を示す。このユーザアプリケーションは処理W、処理X、処理Y、処理Zの4つの処理を順に実行するものである。また、処理W、処理X、処理Zは演算装置A(20)で実行し、処理Yは演算装置B(30)で実行されるものとする。接続線の下に表示されるda1〜da5及びdb3とdb4は、図14のプログラム例で使用される変数名である。
図15は、プログラム生成部3の動作を示すフローチャートである。まずグラフの起点ノードを選択する(Step5)。次に、処理実行関数データベース5から、選択されたノードの処理名および割り当てられた演算装置に対応する処理関数を取得する(Step6)。次に、現在選択されたノードに割当てられた演算装置Sと前回選択したノードに割り当てられた演算装置Dを比較する(Step7)。そして、演算装置SとDが異なる場合(Step8)、データ転送関数データベース6から、演算装置Sから演算装置Dへの転送に必要な転送関数を取得し、プログラム4に出力する(Step9)。次に、Step6で取得した処理関数をプログラム4に出力する。そして、グラフ中の後続ノードを選択し(Step11)、選択中のノードが終点ノードではない場合には(Step12)、Step6に戻る。後続ノードが存在しない場合に、処理を終了する。なお、最後に選択したノードの割当てが演算装置A(20)ではない場合には、演算装置A(20)への転送関数を出力してから終了するものとする。
図16は、図14のプログラムで使用されるデータ転送関数を示す説明図である。データ転送関数データベース6には、入力側演算装置と出力側演算装置の組に対し、データ転送関数が格納されている。図16に示されるように、演算装置A(20)から演算装置B(30)へのデータ転送を行うデータ転送関数copy_to_B(src, dst, size)と、逆に演算装置B(30)から演算装置A(20)へのデータ転送を行うデータ転送関数copy_from_B(src, dst, size)とがデータ転送関数データベース6に準備されている。
図14において、行1〜行7は、必要なメモリ領域の確保処理である。関数alloc_A()を用いて演算装置A(20)のメモリ領域を確保している。演算装置B(30)で行う処理Yのために、処理Yの前後で演算装置A(20)と演算装置B(30)との間でデータ転送が必要となる。このため、演算装置B(30)の入出力用メモリ領域を関数alloc_B()を用いて別途確保している(行5〜行6)。
入力データを読み込む関数load_input()を呼んだ(行9)後、処理W及び処理Xを演算装置A(20)で実行する関数funcW()及びfuncX()を行11及び行13でそれぞれ呼ぶ。
その後、処理Yは演算装置B(30)で行うため、演算装置A(20)から演算装置B(30)へデータのコピーを行う。すなわち、行15でcopy_to_B()関数を用いて、処理Xの出力である演算装置A(20)上のデータda3から処理Yの入力となる演算装置B(30)のデータdb3へコピーする。
その後、行16において、演算装置B(30)で処理Yを実行する関数start_B_funcY()を呼ぶ。
その後、行17において、関数copy_from_B()を用いて、処理Yの出力である演算装置B(30)のデータメモリ33上のデータdb4から処理Zの入力である演算装置A(20)のデータメモリ23上のデータda4にコピーする。
そして、行19において処理Zを演算装置A(20)で実行する関数funcZ()を呼ぶ。
以上説明したように、基本的には全ての処理を演算装置A(20)で実行する中で、一部の処理を演算装置B(30)で実行するように変更するために、その前後にデータ転送用の関数呼び出しを挿入する。
図17は、図14のプログラムで使用される各種の関数を示す説明図である。
行1〜7の演算装置B(30)のデータメモリ33の領域確保関数alloc_B()では、確保する領域サイズを設定レジスタ31の中のb_arg1に設定し、プログラムメモリ32中の領域確保関数へのポインタを表すFUNC_B_ALLOCをb_funcに設定し、b_startレジスタに"1"を書き込むことにより、演算装置B(30)を起動する。その後、b_finishが"1"となるまで待ち、演算装置B(30)の処理完了後に演算装置B(30)からの戻り値b_returnをalloc_B()の戻り値として返す。
行9〜15の演算装置B(30)で実行する処理Yの関数start_B_funcY()では、2つの引数in1及びout1を設定レジスタ31中のb_arg1及びb_arg2に設定し、プログラムメモリ32の中の関数Yへのポインタを表すFUNC_B_Yをb_funcに設定し、b_startレジスタに"1"を書き込むことによって演算装置B(30)を起動する。その後、b_finishが"1"となるまで待ってから終了する。ここで、in1及びout1が表すアドレスは演算装置B(30)のデータメモリ33中のアドレスであり、演算装置B(30)は、in1で表される、データメモリ33に転送された入力データを処理する。また、out1で表わされる、データメモリ33に出力データ領域に処理Yの結果を格納する。
行17〜23のcopy_to_B()関数では、データ転送装置40を用いて演算装置A(20)のデータメモリ23から、演算装置B(30)のデータメモリ33へデータを転送する。転送元のaddr_aをデータ転送装置40内の設定レジスタ41のdma_addr_aに設定し、転送先のaddr_bをdma_addr_bに設定し、転送方向をdma_addr_directionに設定した後に、dma_startレジスタに"1"を書き込んでデータ転送を開始する。その後、dma_finishが"1"となるまで待ってから終了する。
行24〜30のcopy_from_B()関数では、データ転送装置40を用いて演算装置B(30)のデータメモリ33から演算装置A(20)のデータメモリを転送する。転送元のaddr_bをデータ転送装置40内の設定レジスタ41のdma_addr_bに設定し、転送先のaddr_aをdma_addr_aに設定し、転送方向をdma_addr_directionに設定してから、dma_startレジスタに"1"を書き込むことによってデータ転送を開始する。その後、dma_finishが"1"となるまで待ってから終了する。
なお、図17に示す関数を始め、処理関数データベース5とデータ転送関数データベースに準備しておくべき各種の関数は、予め、ターゲットデバイス50の開発と並行して開発し用意しておくものとしてよい。
以上説明したように、本実施形態によれば、ある処理を実行する演算装置を簡単に切り替えることができ、また、演算装置の割当てに合わせて必要なデータ転送処理が自動的に生成されるため、設計生産性を大幅に向上させることができる。なお、本実施形態では演算装置A(20)と演算装置B(30)のみの例について説明したが、3個以上の演算装置を含むターゲットデバイスに対しても同様に拡張することができる。
演算装置A(20)がCPUのような汎用性のあるプロセッサであり、演算装置B(30)がアクセラレータであるような場合には、通常、ユーザアプリケーションのデータ処理を構成するすべての処理が、CPUである演算装置A(20)によって実行可能であり、そのうちの一部の処理はアクセラレータである演算装置B(30)によっても実行可能である。このとき、処理実行関数データベース5には、すべての処理について演算装置A(20)で実行するための処理実行関数と、一部の処理について演算装置B(30)で実行するための処理実行関数とが格納される。GUI部1では、グラフ情報中の全てのノード61〜64について、実行する演算装置情報81〜84の初期状態(デフォルト状態)として演算装置A(20)であるCPUが割り当てるとよい。その後、上述した方法により、各ノードについて演算装置の割り当てを変更することができるユーザーインターフェースが提供される。
これにより、ユーザアプリケーションのデータ処理に含まれる全ての処理が、CPUで実行されるように、デフォルト状態(初期状態)が設定され、アクセラレータによっても実行可能な処理が、GUIによって容易に切替え可能とされ、設計の生産性を向上することができる。
〔実施形態2〕
実施形態1では、データ転送関数として単純なコピーのみについて説明したが、演算装置の割当てに合わせて必要となるデータ転送関数には、データフォーマットを変換する関数が含まれてもよい。
〔エンディアン変換〕
データ転送関数に、ビッグエンディアンをリトルエンディアンとの間の変換関数が含まれる実施形態について説明する。
図8に示されるデータ処理において、ノード63の処理Yを演算装置Aから演算装置Bに切り替えて図13に示されるようなグラフ情報が生成されたとき、これに基づいて生成されるプログラム4は、図14に示される。ここで、例えば、演算装置A(20)が、データがリトルエンディアンであることを前提とする命令を多く含むCPUであり、演算装置B(30)が、ビッグエンディアンのデータを入出力とするアクセラレータとする。その場合には、図14に示されるプログラム4において、演算装置Bへのデータ転送関数copy_to_Bにリトルエンディアンからビッグエンディアンへのデータ変換機能が付加され、演算装置Bからのデータ転送関数copy_from_Bにビッグエンディアンからリトルエンディアンへのデータ変換機能が付加される。
エンディアンを変換する機能の実装方法は任意である。例えば、エンディアンを変換する機能は、演算装置A(20)がCPUであるときに、そのソフトウェアで実装されてもよいし、演算装置B(30)がアクセラレータであるときに、それに付随するハードウェアで実装されても良い。
図18は、データ変換機能が付加されたデータ転送関数を使用したプログラムの一例を示す説明図である。図14との違いは、行17にリトルエンディアンからビッグエンディアンへのデータ変換機能が、LittleEndianToBigEndian関数として追加され、行21にビッグエンディアンからリトルエンディアンへのデータ変換機能が、BigEndianToLittleEndian関数として追加されている点である。これらの関数は、図18に例示されるように、コピー関数copy_to_Bやcopy_from_Bとは別の関数として定義されてもよいし、コピー関数copy_to_Bやcopy_from_Bの内部機能として規定されてもよい。演算装置が多数であって変換の組合せが多数になる場合に、データ変換はCPUなどの特定の汎用演算装置で実行される別の関数として定義されることにより選択の自由度が広がり、または、データ転送関数データベースのサイズの増加を抑えることができる。一方、データ変換がアクセラレータ側に実装されたハードウェアによって実行される場合には、コピー関数copy_to_Bやcopy_from_Bや処理実行関数start_B_funcYに内蔵される機能として実装されても良い。
3個以上の演算装置を含むターゲットデバイスに対しても同様に拡張することができる。ある演算装置へのデータ転送関数にエンディアン変換機能が付加されるのは、直前に処理を実行する演算装置の出力データのエンディアンと当該演算装置の入力データのエンディアンが異なる場合である。
〔固定小数点/浮動小数点、単精度/倍精度〕
以上の説明は、エンディアンではなく、固定小数点か浮動小数点か、或いは、単精度か倍精度かなどのビット精度について、データ転送関数の転送前と後の演算装置の間で、データフォーマットが異なる場合にも同様に適用される。固定小数点から浮動小数点へのデータフォーマット変換、浮動小数点から固定小数点へのデータデータフォーマット変換、或いは、単精度から倍精度へのデータフォーマット変換、倍精度から単精度へのデータフォーマット変換は、適宜、データ転送関数に付加機能として追加される。ここで、単精度、倍精度は1バイトで表記される数値、2バイトで表記される数値に限らず、3バイト以上で表記されるデータについても同様に拡張される。また、バイト単位のデータに限らず、任意のビット長のデータに変更されてもよい。
〔データ配列変換〕
図19は、データ転送関数に付随するデータ配列変換機能の一例について模式的に説明するための説明図である。演算装置の割当てに合わせて必要となるデータ転送関数に付随する、データフォーマット変換には、演算装置に適するデータ配列の変換が含まれてもよい。例えば、1つの演算装置A(20)が、汎用プロセッサの一種であるCPUであり、演算装置B(30)がSIMD(Single Instruction Multiple Data)型の並列プロセッサアーキテクチャを採用するアクセラレータであるような場合に、データ配列の変換を行う。演算装置A(20)の入出力データは、図19の下側に示すように順次アドレスによってアクセスされることを前提としたデータ配列が適しており、一方、SIMD型並列プロセッサの場合には、図19の上側に示すように、並列に動作するプロセッサエレメントPE(Processor Element)が並列にデータアクセスするのに適したデータ配列とされるのがよい。そのため、演算装置A(20)による処理の直後に演算装置B(30)での処理を実行するときには、図19の下から上方向のデータ配列変換を行い、演算装置B(30)での処理の結果は、図19の上から下方向のデータ配列変換を行って、演算装置A(20)による処理に戻す。
このようなデータ配列の変換は、上述のエンディアン等のデータフォーマット変換と組み合わせて行ってもよい。
以上のように、データ転送関数に、データフォーマット変換やデータ配列変換の機能を適宜付加することによって、データフォーマットが異なっている場合にも、容易に演算装置の切り替えに対応することができる。即ち、異なる種類の演算装置間でデータフォーマットやデータ配列が異なる場合であっても、処理を実行する演算装置の切り替えに際してデータフォーマットやデータ配列の変換も合わせてプログラミングされるため、処理を実行する演算装置をノードごとに容易に切替えることができるので、設計の生産性を向上することができる。
以上本発明者によってなされた発明を実施形態に基づいて具体的に説明したが、本発明はそれに限定されるものではなく、その要旨を逸脱しない範囲において種々変更可能であることは言うまでもない。
例えば、ターゲットデバイスが同一の処理を互いに異なる複数の態様で実行することができればそれを複数の異なる演算装置として位置付けることができるので、ターゲットデバイスの構成は、物理的に明確に分離された複数の演算装置を備えない構成であってもよい。
1 グラフィカルユーザーインターフェース(GUI)部
2 グラフ情報保持部
3 プログラム生成部
4 出力プログラム
5 処理実行関数データベース
6 データ転送関数データベース
7 表示装置(ディスプレイ)
8 入力装置(マウス)
9 計算機
10 プログラム開発支援装置
20、30 演算装置
31 演算装置の設定レジスタ
22、32 プログラムメモリ
23、33 データメモリ
40 データ転送装置
41 データ転送装置の設定レジスタ
50 ターゲットデバイス
61〜64 ノード
71〜75 接続線
81〜84 演算装置情報
90 グラフ情報入力・編集画面
91 マウスカーソル
92 コード生成ボタン
93 処理ノード追加ボタン
94 コンテキストメニュー

Claims (20)

  1. 複数の演算装置を有するターゲットデバイス上で動作することによってデータ処理を行なうプログラムを生成する、プログラム開発支援装置であって、
    表示装置と入力装置と計算機とを備え、前記計算機の機能として実装される、グラフィカルユーザーインターフェース部と、グラフ情報保持部と、プログラム生成部と、処理実行関数データベースと、データ転送関数データベースとを有し、
    前記グラフィカルユーザーインターフェース部は、前記ターゲットデバイスによって実行される前記データ処理のグラフ情報を、前記データ処理に含まれる複数の処理のそれぞれをノードとしデータの流れを有向接続線とするグラフとして、前記表示装置に表示し、
    前記グラフ情報保持部は、前記グラフ情報を保持し、
    前記処理実行関数データベースは、前記複数の演算装置のうち前記処理を実行可能な演算装置のそれぞれについて、前記処理を当該演算装置によって実行させるための処理実行関数を保持し、
    前記データ転送関数データベースは、前記処理実行関数を対応する演算装置で実行させるためのデータ転送関数を保持し、
    前記プログラム生成部は、前記グラフ情報に基づいて、前記処理実行関数データベースから適切な処理実行関数を読込み、前記データ転送関数データベースから適切なデータ転送関数を読み込んで、前記プログラムを生成し、
    前記複数の処理のうちの第1の処理が、前記複数の演算装置のうち、互いに種類の異なる、第1演算装置と第2演算装置のうちのどちらの演算装置によっても実行可能であり、
    前記処理実行関数データベースは、前記第1の処理を前記第1演算装置で実行するための第1処理実行関数と、前記第1の処理を前記第2演算装置で実行するための第2処理実行関数とを保持し、
    前記データ転送関数データベースは、前記第1処理実行関数を前記第1演算装置で実行させるための第1データ転送関数と、前記第2処理実行関数を前記第2演算装置で実行させるための第2データ転送関数とのうちの少なくとも一方を保持し、
    前記グラフィカルユーザーインターフェース部は、前記データ処理に前記第1の処理が含まれるときに、前記第1の処理に対応するノードに、前記第1演算装置または前記第2演算装置で実行可能であることを前記表示装置に表示可能であり、前記第1演算装置または前記第2演算装置のうちのどちらの演算装置で実行させるかを前記入力装置によって選択可能とし、
    前記プログラム生成部は、前記入力装置によって選択された演算装置に対応して、前記処理実行関数データベースから前記第1処理実行関数または前記第2処理実行関数を選択的に読み込み、前記データ転送関数データベースから前記第1データ転送関数または前記第2データ転送関数を選択的に読み込んで、前記プログラムを生成する、
    プログラム開発支援装置。
  2. 請求項1において、前記第1処理は、前記複数の演算装置のうち、前記第1演算装置と前記第2演算装置とは種類が異なる、第3演算装置によっても実行可能であり、
    前記処理実行関数データベースは、前記第1の処理を前記第3演算装置で実行するための第3処理実行関数をさらに保持し、
    前記データ転送関数データベースは、前記第3処理実行関数を前記第3演算装置で実行させるための第3データ転送関数を保持し、
    前記グラフィカルユーザーインターフェース部は、前記データ処理に前記第1の処理が含まれるときに、前記第1の処理に対応するノードに、前記第1演算装置または前記第2演算装置または前記第3演算装置で実行可能であることを前記表示装置に表示させ、前記第1演算装置または前記第2演算装置または前記第3演算装置のうちのどの演算装置で実行させるかを前記入力装置によって選択可能とし、
    前記プログラム生成部は、前記入力装置によって選択された演算装置に対応して、前記処理実行関数データベースから前記第1処理実行関数または前記第2処理実行関数または前記第3処理実行関数を選択的に読み込み、前記データ転送関数データベースから前記第1データ転送関数または前記第2データ転送関数または前記第3データ転送関数を選択的に読み込んで、前記プログラムを生成する、
    プログラム開発支援装置。
  3. 請求項1において、前記第1演算装置は汎用プロセッサであり、前記第2演算装置はアクセラレータであり、
    前記データ処理に含まれる全ての処理は、前記第1演算装置で実行可能であり、一部の処理は前記第2演算装置でも実行可能であり、
    前記処理実行関数データベースは、前記全ての処理のそれぞれについて前記第1演算装置で実行させるための第1処理実行関数群と、前記一部の処理について前記第2演算装置で実行させるための第2処理実行関数群とを保持し、
    前記データ転送関数データベースは、前記第2処理実行関数群に含まれるそれぞれの処理実行関数について、当該処理実行関数を前記第2演算装置で実行させるために前記第1演算装置から前記第2演算装置へ当該処理実行関数の入力データを転送する入力データ転送関数と、当該処理実行関数が前記第2演算装置で実行された結果を前記第1演算装置へ転送する出力データ転送関数とを保持し、
    前記グラフィカルユーザーインターフェース部は、初期段階では前記データ処理に含まれる全ての処理を前記第1演算装置によって実行されるものとして表示し、
    前記プログラム生成部は、初期段階では前記処理実行関数データベースから前記第1処理実行関数群を優先的に読み込んで、前記プログラムを生成し、
    前記グラフィカルユーザーインターフェース部は、前記一部の処理に対応するノードに、前記第1演算装置または前記第2演算装置で実行可能であることを前記表示装置に表示可能であり、前記第1演算装置または前記第2演算装置のうちのどちらの演算装置で実行させるかを前記入力装置によって選択可能とし、
    前記プログラム生成部は、あるノードについて前記入力装置によって選択された演算装置が前記第2演算装置であるときに、前記処理実行関数データベースから前記第2処理実行関数群から対応する処理実行関数を読み込み、前記データ転送関数データベースから対応する入力データ転送関数と出力データ転送関数とを読み込んで、前記プログラムを更新する、
    プログラム開発支援装置。
  4. 請求項3において、前記入力装置はマウスであり、
    前記グラフィカルユーザーインターフェース部は、前記マウスのカーソルによって選択されたノードが前記一部の処理に対応するノードであるときに、前記第1演算装置または前記第2演算装置で実行可能であることを前記表示装置にコンテキストメニューとして表示し、前記第1演算装置または前記第2演算装置のうちのどちらの演算装置で実行させるかを前記マウスのカーソルによって選択可能とされる、
    プログラム開発支援装置。
  5. 請求項3において、前記入力装置はマウスであり、
    前記グラフィカルユーザーインターフェース部は、前記マウスによって選択されたノードが前記一部の処理に対応するノードであるときに、前記ノードに対応する処理を実行する演算装置を、前記第1演算装置から前記第2演算装置に切り替え、当該ノードが再度選択されたときには、前記ノードに対応する処理を実行する演算装置を、前記第2演算装置から前記第2演算装置に切り替える、
    プログラム開発支援装置。
  6. 請求項5において、ノードは前記マウスのダブルクリックによって選択される、
    プログラム開発支援装置。
  7. 請求項5において、前記一部の処理のさらに一部の処理はさらに他の演算装置でも実行可能であり、
    前記グラフィカルユーザーインターフェース部は、前記マウスによって選択されたノードが前記一部の処理にさらに含まれる前記一部の処理に対応するノードであるときに、前記ノードに対応する処理を実行する演算装置を、前記第1演算装置と前記第2演算装置と前記他の演算装置の間で、所定の順序に従って順次切り替える、
    プログラム開発支援装置。
  8. 請求項1において、
    前記第1処理実行関数の入力データのフォーマットが、前記第1処理実行関数の直前に前記第1演算装置とは異なる演算装置で実行される処理実行関数の出力データのフォーマットと異なるとき、前記第1データ転送関数は、前記入力データを前記異なる演算装置から転送するとともに、前記出力データのフォーマットを前記入力データのフォーマットに変換する機能を有し、
    前記第2処理実行関数の入力データのフォーマットが、前記第2処理実行関数の直前に前記第2演算装置とは異なる演算装置で実行される処理実行関数の出力データのフォーマットと異なるとき、前記第2データ転送関数は、前記入力データを前記異なる演算装置から転送するとともに、前記出力データのフォーマットを前記入力データのフォーマットに変換する機能を有する、
    プログラム開発支援装置。
  9. 請求項8において、前記フォーマットは、ビッグエンディアンかリトルエンディアンか、固定小数点か浮動小数点か、ビット精度によって規定される、
    プログラム開発支援装置。
  10. 請求項1において、
    前記第1処理実行関数の入力データのデータ配列が、前記第1処理実行関数の直前に前記第1演算装置とは異なる演算装置で実行される処理実行関数の出力データのデータ配列と異なるとき、前記第1データ転送関数は、前記入力データを前記異なる演算装置から転送するとともに、前記出力データのデータ配列を前記入力データのデータ配列に変換する機能を有し、
    前記第2処理実行関数の入力データのデータ配列が、前記第2処理実行関数の直前に前記第2演算装置とは異なる演算装置で実行される処理実行関数の出力データのデータ配列と異なるとき、前記第2データ転送関数は、前記入力データを前記異なる演算装置から転送するとともに、前記出力データデータ配列を前記入力データのデータ配列に変換する機能を有する、
    プログラム開発支援装置。
  11. 表示装置と入力装置とが接続される計算機上で動作することによって、複数の演算装置を有するターゲットデバイス上で動作することによってデータ処理を行なうプログラムを生成する、プログラム開発支援ソフトウェアであって、
    グラフィカルユーザーインターフェース部と、グラフ情報保持部と、プログラム生成部と、処理実行関数データベースと、データ転送関数データベースとを有し、
    前記グラフィカルユーザーインターフェース部は、前記ターゲットデバイスによって実行される前記データ処理のグラフ情報を、前記データ処理に含まれる複数の処理のそれぞれをノードとしデータの流れを有向接続線とするグラフとして、前記表示装置に表示し、
    前記グラフ情報保持部は、前記グラフ情報を保持し、
    前記処理実行関数データベースは、前記複数の演算装置のうち前記処理を実行可能な演算装置のそれぞれについて、前記処理を当該演算装置によって実行させるための処理実行関数を保持し、
    前記データ転送関数データベースは、前記処理実行関数を対応する演算装置で実行させるためのデータ転送関数を保持し、
    前記プログラム生成部は、前記グラフ情報に基づいて、前記処理実行関数データベースから適切な処理実行関数を読込み、前記データ転送関数データベースから適切なデータ転送関数を読み込んで、前記プログラムを生成し、
    前記複数の処理のうちの第1の処理が、前記複数の演算装置のうち、互いに種類の異なる、第1演算装置と第2演算装置のうちのどちらの演算装置によっても実行可能であり、
    前記処理実行関数データベースは、前記第1の処理を前記第1演算装置で実行するための第1処理実行関数と、前記第1の処理を前記第2演算装置で実行するための第2処理実行関数とを保持し、
    前記データ転送関数データベースは、前記第1処理実行関数を前記第1演算装置で実行させるための第1データ転送関数と、前記第2処理実行関数を前記第2演算装置で実行させるための第2データ転送関数とのうちの少なくとも一方を保持し、
    前記グラフィカルユーザーインターフェース部は、前記データ処理に前記第1の処理が含まれるときに、前記第1の処理に対応するノードに、前記第1演算装置または前記第2演算装置で実行可能であることを前記表示装置に表示可能であり、前記第1演算装置または前記第2演算装置のうちのどちらの演算装置で実行させるかを前記入力装置によって選択可能とし、
    前記プログラム生成部は、前記入力装置によって選択された演算装置に対応して、前記処理実行関数データベースから前記第1処理実行関数または前記第2処理実行関数を選択的に読み込み、前記データ転送関数データベースから前記第1データ転送関数または前記第2データ転送関数を選択的に読み込んで、前記プログラムを生成する、
    プログラム開発支援ソフトウェア。
  12. 請求項11において、前記第1処理は、前記複数の演算装置のうち、前記第1演算装置と前記第2演算装置とは種類が異なる、第3演算装置によっても実行可能であり、
    前記処理実行関数データベースは、前記第1の処理を前記第3演算装置で実行するための第3処理実行関数をさらに保持し、
    前記データ転送関数データベースは、前記第3処理実行関数を前記第3演算装置で実行させるための第3データ転送関数を保持し、
    前記グラフィカルユーザーインターフェース部は、前記データ処理に前記第1の処理が含まれるときに、前記第1の処理に対応するノードに、前記第1演算装置または前記第2演算装置または前記第3演算装置で実行可能であることを前記表示装置に表示させ、前記第1演算装置または前記第2演算装置または前記第3演算装置のうちのどの演算装置で実行させるかを前記入力装置によって選択可能とし、
    前記プログラム生成部は、前記入力装置によって選択された演算装置に対応して、前記処理実行関数データベースから前記第1処理実行関数または前記第2処理実行関数または前記第3処理実行関数を選択的に読み込み、前記データ転送関数データベースから前記第1データ転送関数または前記第2データ転送関数または前記第3データ転送関数を選択的に読み込んで、前記プログラムを生成する、
    プログラム開発支援ソフトウェア。
  13. 請求項11において、前記第1演算装置は汎用プロセッサであり、前記第2演算装置はアクセラレータであり、
    前記データ処理に含まれる全ての処理は、前記第1演算装置で実行可能であり、一部の処理は前記第2演算装置でも実行可能であり、
    前記処理実行関数データベースは、前記全ての処理のそれぞれについて前記第1演算装置で実行させるための第1処理実行関数群と、前記一部の処理について前記第2演算装置で実行させるための第2処理実行関数群とを保持し、
    前記データ転送関数データベースは、前記第2処理実行関数群に含まれるそれぞれの処理実行関数について、当該処理実行関数を前記第2演算装置で実行させるために前記第1演算装置から前記第2演算装置へ当該処理実行関数の入力データを転送する入力データ転送関数と、当該処理実行関数が前記第2演算装置で実行された結果を前記第1演算装置へ転送する出力データ転送関数とを保持し、
    前記グラフィカルユーザーインターフェース部は、初期段階では前記データ処理に含まれる全ての処理を前記第1演算装置によって実行されるものとして表示し、
    前記プログラム生成部は、初期段階では前記処理実行関数データベースから前記第1処理実行関数群を優先的に読み込んで、前記プログラムを生成し、
    前記グラフィカルユーザーインターフェース部は、前記一部の処理に対応するノードに、前記第1演算装置または前記第2演算装置で実行可能であることを前記表示装置に表示可能であり、前記第1演算装置または前記第2演算装置のうちのどちらの演算装置で実行させるかを前記入力装置によって選択可能とし、
    前記プログラム生成部は、あるノードについて前記入力装置によって選択された演算装置が前記第2演算装置であるときに、前記処理実行関数データベースから前記第2処理実行関数群から対応する処理実行関数を読み込み、前記データ転送関数データベースから対応する入力データ転送関数と出力データ転送関数とを読み込んで、前記プログラムを更新する、
    プログラム開発支援ソフトウェア。
  14. 請求項13において、前記入力装置はマウスであり、
    前記グラフィカルユーザーインターフェース部は、前記マウスのカーソルによって選択されたノードが前記一部の処理に対応するノードであるときに、前記第1演算装置または前記第2演算装置で実行可能であることを前記表示装置にコンテキストメニューとして表示し、前記第1演算装置または前記第2演算装置のうちのどちらの演算装置で実行させるかを前記マウスのカーソルによって選択可能とされる、
    プログラム開発支援ソフトウェア。
  15. 請求項13において、前記入力装置はマウスであり、
    前記グラフィカルユーザーインターフェース部は、前記マウスによって選択されたノードが前記一部の処理に対応するノードであるときに、前記ノードに対応する処理を実行する演算装置を、前記第1演算装置から前記第2演算装置に切り替え、当該ノードが再度選択されたときには、前記ノードに対応する処理を実行する演算装置を、前記第2演算装置から前記第2演算装置に切り替える、
    プログラム開発支援ソフトウェア。
  16. 請求項15において、ノードは前記マウスのダブルクリックによって選択される、
    プログラム開発支援ソフトウェア。
  17. 請求項15において、前記一部の処理のさらに一部の処理はさらに他の演算装置でも実行可能であり、
    前記グラフィカルユーザーインターフェース部は、前記マウスによって選択されたノードが前記一部の処理にさらに含まれる前記一部の処理に対応するノードであるときに、前記ノードに対応する処理を実行する演算装置を、前記第1演算装置と前記第2演算装置と前記他の演算装置の間で、所定の順序に従って順次切り替える、
    プログラム開発支援ソフトウェア。
  18. 請求項11において、
    前記第1処理実行関数の入力データのフォーマットが、前記第1処理実行関数の直前に前記第1演算装置とは異なる演算装置で実行される処理実行関数の出力データのフォーマットと異なるとき、前記第1データ転送関数は、前記入力データを前記異なる演算装置から転送するとともに、前記出力データのフォーマットを前記入力データのフォーマットに変換する機能を有し、
    前記第2処理実行関数の入力データのフォーマットが、前記第2処理実行関数の直前に前記第2演算装置とは異なる演算装置で実行される処理実行関数の出力データのフォーマットと異なるとき、前記第2データ転送関数は、前記入力データを前記異なる演算装置から転送するとともに、前記出力データのフォーマットを前記入力データのフォーマットに変換する機能を有する、
    プログラム開発支援ソフトウェア。
  19. 請求項18において、前記フォーマットは、ビッグエンディアンかリトルエンディアンか、固定小数点か浮動小数点か、ビット精度によって規定される、
    プログラム開発支援ソフトウェア。
  20. 請求項11において、
    前記第1処理実行関数の入力データのデータ配列が、前記第1処理実行関数の直前に前記第1演算装置とは異なる演算装置で実行される処理実行関数の出力データのデータ配列と異なるとき、前記第1データ転送関数は、前記入力データを前記異なる演算装置から転送するとともに、前記出力データのデータ配列を前記入力データのデータ配列に変換する機能を有し、
    前記第2処理実行関数の入力データのデータ配列が、前記第2処理実行関数の直前に前記第2演算装置とは異なる演算装置で実行される処理実行関数の出力データのデータ配列と異なるとき、前記第2データ転送関数は、前記入力データを前記異なる演算装置から転送するとともに、前記出力データデータ配列を前記入力データのデータ配列に変換する機能を有する、
    プログラム開発支援ソフトウェア。
JP2015186569A 2015-09-24 2015-09-24 プログラム開発支援装置およびプログラム開発支援ソフトウェア Active JP6489985B2 (ja)

Priority Applications (3)

Application Number Priority Date Filing Date Title
JP2015186569A JP6489985B2 (ja) 2015-09-24 2015-09-24 プログラム開発支援装置およびプログラム開発支援ソフトウェア
US15/249,336 US10310823B2 (en) 2015-09-24 2016-08-26 Program development support system and program development support software
CN201610839473.XA CN106557312B (zh) 2015-09-24 2016-09-21 程序开发支援装置以及程序开发支援软件

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2015186569A JP6489985B2 (ja) 2015-09-24 2015-09-24 プログラム開発支援装置およびプログラム開発支援ソフトウェア

Publications (2)

Publication Number Publication Date
JP2017062554A JP2017062554A (ja) 2017-03-30
JP6489985B2 true JP6489985B2 (ja) 2019-03-27

Family

ID=58407292

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2015186569A Active JP6489985B2 (ja) 2015-09-24 2015-09-24 プログラム開発支援装置およびプログラム開発支援ソフトウェア

Country Status (3)

Country Link
US (1) US10310823B2 (ja)
JP (1) JP6489985B2 (ja)
CN (1) CN106557312B (ja)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107729098B (zh) * 2017-09-25 2021-06-29 北京小米移动软件有限公司 用户界面显示方法及装置
KR20200136679A (ko) * 2019-05-28 2020-12-08 삼성에스디에스 주식회사 이종 언어 함수를 포함하는 워크플로우 실행 방법 및 그 장치

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5317734A (en) * 1989-08-29 1994-05-31 North American Philips Corporation Method of synchronizing parallel processors employing channels and compiling method minimizing cross-processor data dependencies
US6378066B1 (en) * 1999-02-04 2002-04-23 Sun Microsystems, Inc. Method, apparatus, and article of manufacture for developing and executing data flow programs, and optimizing user input specifications
JP4514465B2 (ja) 2003-02-13 2010-07-28 株式会社ミツトヨ 制御プログラム組立てシステム及びプログラム
US7478375B1 (en) * 2004-04-23 2009-01-13 Computer Associates Think, Inc. Directed acyclic graph (DAG) exploration through separation of concerns
US7586492B2 (en) * 2004-12-20 2009-09-08 Nvidia Corporation Real-time display post-processing using programmable hardware
JP5016807B2 (ja) * 2005-10-07 2012-09-05 株式会社日立ハイテクノロジーズ データ処理システム
US7941200B2 (en) * 2005-12-08 2011-05-10 Roche Diagnostics Operations, Inc. System and method for determining drug administration information
JP2007213417A (ja) * 2006-02-10 2007-08-23 Canon Inc プログラムコード生成装置、方法、及びコンピュータプログラム
JP2008198143A (ja) * 2007-02-15 2008-08-28 Fuji Electric Fa Components & Systems Co Ltd プログラマブルコントローラ用プログラム作成支援装置およびプログラム作成支援方法
JP2010073062A (ja) * 2008-09-19 2010-04-02 Ricoh Co Ltd 画像処理装置、画像処理方法及びプログラム
JP4886838B2 (ja) * 2009-10-30 2012-02-29 インターナショナル・ビジネス・マシーンズ・コーポレーション 並列化方法、システム、及びプログラム
JP2012038068A (ja) * 2010-08-06 2012-02-23 Mitsubishi Heavy Ind Ltd プログラム作成装置及び画像制御システム
US9116738B2 (en) * 2012-11-13 2015-08-25 International Business Machines Corporation Method and apparatus for efficient execution of concurrent processes on a multithreaded message passing system
JP6257254B2 (ja) * 2013-10-08 2018-01-10 キヤノン株式会社 設計支援装置、設計支援方法、及びプログラム

Also Published As

Publication number Publication date
CN106557312B (zh) 2021-07-09
US20170090882A1 (en) 2017-03-30
CN106557312A (zh) 2017-04-05
US10310823B2 (en) 2019-06-04
JP2017062554A (ja) 2017-03-30

Similar Documents

Publication Publication Date Title
JP2021192257A (ja) プログラム可能な最適化を有するメモリネットワークプロセッサ
US6877150B1 (en) Method of transforming software language constructs to functional hardware equivalents
WO2020062086A1 (zh) 选择处理器的方法和装置
JP6237278B2 (ja) コンパイルプログラム、コンパイル方法およびコンパイル装置
CN111027703B (zh) 一种量子线路查询的方法、装置、存储介质及电子装置
JP5966509B2 (ja) プログラム、コード生成方法および情報処理装置
JP7088897B2 (ja) データアクセス方法、データアクセス装置、機器及び記憶媒体
JP3246438B2 (ja) 可変ターゲットコンパイル処理方法、その処理装置、そのプログラムの記憶媒体および変換テーブルの記憶媒体
WO2009131007A1 (ja) Simd型並列計算機システム、simd型並列計算方法及び制御プログラム
JPWO2017037903A1 (ja) 半導体システムおよび計算方法
JP6489985B2 (ja) プログラム開発支援装置およびプログラム開発支援ソフトウェア
CN114341795A (zh) 用于系统设计的会话设计机器人
JP5979965B2 (ja) 回路設計支援装置及び回路設計支援方法及びプログラム
US8782587B2 (en) Systems and methods for generating a higher level description of a circuit design based on connectivity strengths
JPH07141192A (ja) 翻訳処理方法
US11308025B1 (en) State machine block for high-level synthesis
KR102471553B1 (ko) 컴퓨팅 기기에 의해 수행되는 방법, 장치, 기기 및 컴퓨터 판독가능 저장 매체
JP4898365B2 (ja) 組み込み用プログラム開発装置、及びプログラム自動生成方法
JP6253048B2 (ja) 不揮発性論理集積回路設計支援システム
JP2018041301A (ja) Rtl最適化システム及びrtl最適化プログラム
JP6993573B2 (ja) プログラム解析方法、プログラム解析装置およびプログラム解析プログラム
JP6137962B2 (ja) 情報処理装置、情報処理方法及びプログラム
JP2015161983A (ja) ソースコード生成装置
JP5757320B2 (ja) データ処理装置、データ処理方法およびデータ処理プログラム
JP5267376B2 (ja) 動作合成装置、動作合成方法、ならびに、プログラム

Legal Events

Date Code Title Description
RD02 Notification of acceptance of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7422

Effective date: 20170330

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20180511

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20190131

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20190212

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20190226

R150 Certificate of patent or registration of utility model

Ref document number: 6489985

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150