JP2005293342A - 動的再構成可能プロセッサおよびコンパイラ装置 - Google Patents
動的再構成可能プロセッサおよびコンパイラ装置 Download PDFInfo
- Publication number
- JP2005293342A JP2005293342A JP2004108827A JP2004108827A JP2005293342A JP 2005293342 A JP2005293342 A JP 2005293342A JP 2004108827 A JP2004108827 A JP 2004108827A JP 2004108827 A JP2004108827 A JP 2004108827A JP 2005293342 A JP2005293342 A JP 2005293342A
- Authority
- JP
- Japan
- Prior art keywords
- configuration information
- unit
- output
- column
- input
- 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.)
- Pending
Links
Images
Landscapes
- Microcomputers (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
【課題】動的再構成可能プロセッサ向けプログラムの開発にかかる負担を軽減する。
【解決手段】動的再構成可能プロセッサ90は、M行N列(但し、M≧2、N≧1)に配列された、設定された構成情報に従って入出力先および演算内容を切り替え可能な演算ユニット63と、1列目の演算ユニット63毎に設けられた、当該演算ユニット63へ入力するデータを局所メモリ40からロードするロードユニット61と、N列目の演算ユニット63毎に設けられた、当該演算ユニット63から出力するデータを局所メモリ40にストアするストアユニット63と、ロードユニット61がロードしたデータの1列目の対応する演算ユニット63へのデータ入力を遅延させる遅延ユニット62と、を有する。
【選択図】図1
【解決手段】動的再構成可能プロセッサ90は、M行N列(但し、M≧2、N≧1)に配列された、設定された構成情報に従って入出力先および演算内容を切り替え可能な演算ユニット63と、1列目の演算ユニット63毎に設けられた、当該演算ユニット63へ入力するデータを局所メモリ40からロードするロードユニット61と、N列目の演算ユニット63毎に設けられた、当該演算ユニット63から出力するデータを局所メモリ40にストアするストアユニット63と、ロードユニット61がロードしたデータの1列目の対応する演算ユニット63へのデータ入力を遅延させる遅延ユニット62と、を有する。
【選択図】図1
Description
本発明は、動的再構成可能プロセッサおよび動的再構成可能プロセッサ向けプログラムのコンパイラ装置に関する。
設定された構成情報に従って入出力先および演算内容を切り替え可能な演算ユニットが複数配列されて構成された動的再構成可能プロセッサ(DRP:Dynamically Reconfigurable Processor)が知られている(例えば特許文献1)。
図28は、従来の動的再構成可能プロセッサを有する情報処理装置の概略図である。
図示するように、情報処理装置は、ホストプロセッサ(CPU)100と、メモリ(MEM)200と、局所メモリ(RAM)400と、動的再構成可能プロセッサ(DRP)900と、を有する。ホストプロセッサ100、メモリ200および局所メモリ400は、内部バス300で互いに接続されている。また、局所メモリ400および動的再構成可能プロセッサ900は、局所メモリ400から動的再構成可能プロセッサ900へデータおよびプログラムを転送するための入力配線700と、動的再構成可能プロセッサ900から局所メモリ400へデータを転送するための出力配線800とを介して互いに接続されている。
メモリ200には、ホストプロセッサ100および動的再構成可能プロセッサ900が使用するデータ、プログラムが格納される。ホストプロセッサ100は、メモリ200に記憶されたホストプロセッサ100用のプログラムに従い、動的再構成可能プロセッサ900の起動、終結、および、動的再構成可能プロセッサ900へのデータ、プログラムの転送を制御する。局所メモリ400は、動的再構成可能プロセッサ900が使用するデータ、プログラムが格納される。動的再構成可能プロセッサ900は、構成情報を格納する構成情報格納部500と、演算部600と、を有する。
演算部600は、M行L列(図28では4行4列)に配列された演算ユニット(EX)630と、1列目の演算ユニット630毎に設けられたM個(M行1列)のロードユニット(LD)610と、L列目の演算ユニット630毎に設けられたM個(M行1列)のストアユニット(ST)640と、を有する。
ロードユニット610は、設定された構成情報に従い、1列目の対応する(同行の)演算ユニット630へ入力するデータを局所メモリ400からロードする。
演算ユニット630は、図示していないが、複数の入出力ポートと、四則演算等の各種演算を行う複数の演算回路と、入出力ポートおよび演算回路の接続を切替えるスイッチと、を有する。そして、演算ユニット630は、設定された構成情報に従い、スイッチを制御して、データの入力元、演算内容および演算結果の出力先を切り替える。
ストアユニット640は、設定された構成情報に従い、N列目の対応する(同行の)演算ユニット630から出力されるデータを局所メモリ400へストアする。
構成情報格納部500は、ロードユニット用構成情報メモリ(ML)510と、M行L列の演算ユニットの列毎に設けられたL個の演算ユニット用構成情報メモリ(ME)530と、ストアユニット用構成情報メモリ(MS)540と、を有する。
ロードユニット用構成情報メモリ510は、M個のロードユニット610各々に設定するロードユニット用構成情報(データをロードするアドレス等のパラメータ情報)を格納する。
演算ユニット用構成情報メモリ530は、対応する列のM個の演算ユニット630各々に設定する演算ユニット用構成情報(データ入出力先および演算内容を特定する情報)を格納する。
ストアユニット用構成情報メモリ540は、M個のストアユニット640各々に設定するストアユニット用構成情報(データをストアするアドレス等のパラメータ情報)を格納する。
以上のような構成において、ホストプロセッサ100は、動的再構成可能プロセッサ900が使用するデータ、プログラムをメモリ200から局所メモリ400へ転送する。ここで、プログラムは、上述の、ロードユニット用構成情報、演算ユニット用構成情報、および、ストアユニット用構成情報を含む。
次に、ロードユニット用構成情報メモリ510は、局所メモリ400からロードユニット用構成情報を読み込み、各ロードユニット610に構成情報を設定する。また、各演算ユニット用構成情報メモリ530は、対応する列の演算ユニット用構成情報を読込み、当該列の各演算ユニット630に構成情報を設定する。また、ストアユニット用構成情報メモリ540は、局所メモリ400からストアユニット用構成情報を読み込み、各ストアユニット540に構成情報を設定する。
さて、以上のようにして演算部600の各ユニットに構成情報が設定されると、先ず、ロードユニット610が、設定された構成情報に従い、局所メモリ400からデータをロードし、これを1列目の対応する(同行の)演算ユニット630へ転送する。次に、演算ユニット630が、設定された構成情報に従い、データの入力元、演算内容および演算結果の出力先を切り替えて演算処理を行う。そして、ストアユニット640が、設定された構成情報に従い、L列目の対応する(同行)演算ユニット630から出力されたデータを局所メモリ400にストアする。
このように、動的再構成可能プロセッサ900では、プログラムによって複数の演算ユニット630各々の演算内容および演算順番を変更することができ、従って動的に機能を変更することができる。
ところで、動的再構成可能プロセッサ向けプログラムの開発は、動的再構成可能プロセッサ毎に行っている。つまり、M行L列の演算ユニットを有する動的再構成可能プロセッサ向けに開発されたプログラムを、演算ユニットの列数の少ないM行N列(但しN<L)の演算ユニットを有する動的再構成可能プロセッサに使用することができず、このM行N列の演算ユニットを有する動的再構成可能プロセッサ向けに新たにプログラムを開発しなければならない。
本発明は上記事情に鑑みてなされたものであり、本発明の目的は動的再構成可能プロセッサ向けプログラムの開発にかかる負担を軽減することにある。
上記課題を解決するために、本発明の動的再構成可能プロセッサでは、1列目の各演算ユニットへのデータ入力を遅延する遅延ユニットを設けている。
例えば、本発明の動的再構成可能プロセッサは、設定された構成情報に従って入出力先および演算内容を切り替え可能な演算ユニットが、M行N列(但し、M≧2、N≧1)に配列されて構成された、動的再構成可能プロセッサであって、
設定された構成情報に従って1列目の演算ユニットへのデータ入力を遅延させる遅延ユニットを有する。
設定された構成情報に従って1列目の演算ユニットへのデータ入力を遅延させる遅延ユニットを有する。
また、本発明のコンパイラ装置では、本発明の動的再構成可能プロセッサよりも演算ユニットの列数が多い他の動的再構成可能プロセッサ向けに開発された入力プログラムを、複数回に分割して本発明の動的再構成可能プロセッサに実行させる出力プログラムに変換する。ここで、出力プログラムは、ある回の実行により、本発明の動的再構成可能プロセッサを構成するM行N列の演算ユニットのN列目から出力された各データが、次の回の実行のときに、当該各データの出力サイクルのサイクル差で前記M行N列の演算ユニットの1列目に入力されるように、遅延ユニットを制御するための構成情報を含む。
例えば、本発明のコンパイラ装置は、動的再構成可能プロセッサを構成するM行L列の演算ユニットに設定する構成情報を含む入力プログラムを、本発明の動的再構成可能プロセッサを構成する遅延ユニットおよびM行N(但しN<L)列の演算ユニットに設定する構成情報を含む出力プログラムに変換するコンパイラ装置であって、
前記入力プログラムを記憶する入力プログラム記憶手段と、
前記入力プログラムに含まれる前記M行L列の演算ユニットの構成情報をN列毎に分割して、num(但し、numはM/Nより大きい最小の整数)回分の前記M行N列の演算ユニットの構成情報(分割構成情報と呼ぶ)を生成する構成情報分割手段と、
u回目の分割構成情報を前記M行N列の演算ユニットに設定した場合にN列目の演算ユニットから出力される各データの出力サイクルのサイクル差を算出する処理を、前記uが1からnum-1となるまで繰り返す遅延解析手段と、
t回目の分割構成情報が設定された前記M行N列の演算ユニットのN列目から出力される各データが、前記遅延解析手段により算出された当該各データの出力サイクルのサイクル差で前記M行N列の演算ユニットの1列目に入力されるように、前記遅延ユニットを制御するための構成情報を、K+1回目の分割構成情報に含める処理を、tが1からnum-1となるまで繰り返して、num回分の分割構成情報を含む出力プログラムを生成するプログラム出力手段と、を有する。
前記入力プログラムを記憶する入力プログラム記憶手段と、
前記入力プログラムに含まれる前記M行L列の演算ユニットの構成情報をN列毎に分割して、num(但し、numはM/Nより大きい最小の整数)回分の前記M行N列の演算ユニットの構成情報(分割構成情報と呼ぶ)を生成する構成情報分割手段と、
u回目の分割構成情報を前記M行N列の演算ユニットに設定した場合にN列目の演算ユニットから出力される各データの出力サイクルのサイクル差を算出する処理を、前記uが1からnum-1となるまで繰り返す遅延解析手段と、
t回目の分割構成情報が設定された前記M行N列の演算ユニットのN列目から出力される各データが、前記遅延解析手段により算出された当該各データの出力サイクルのサイクル差で前記M行N列の演算ユニットの1列目に入力されるように、前記遅延ユニットを制御するための構成情報を、K+1回目の分割構成情報に含める処理を、tが1からnum-1となるまで繰り返して、num回分の分割構成情報を含む出力プログラムを生成するプログラム出力手段と、を有する。
本発明の動的再構成可能プロセッサによれば、遅延ユニットにより、N列目(最終列目)の演算ユニットから出力された各データを、1列目の対応する(同行の)演算ユニットに、当該各データのN列目の演算ユニットからの出力サイクル差を与えて入力することができる。したがって、本発明の動的再構成可能プロセッサよりも演算ユニットの列数が多い他の動的再構成可能プロセッサ向けに開発された入力プログラムを、複数回に分割して実行できる。
また、本発明のコンパイラ装置によれば、本発明の動的再構成可能プロセッサよりも演算ユニットの列数が多い他の動的再構成可能プロセッサ向けに開発された入力プログラムを、本発明の動的再構成可能プロセッサ向けの出力プログラムに変換することができる。
このように、本発明によれば、動的再構成可能プロセッサ向けプログラムの開発にかかる負担を軽減することができる。
以下、本発明の実施の形態を説明する。
<<第1実施形態>>
先ず、本発明の第1実施形態として動的再構成可能プロセッサを説明する。
先ず、本発明の第1実施形態として動的再構成可能プロセッサを説明する。
図1は、本発明の第1実施形態が適用された動的再構成可能プロセッサを有する情報処理装置の概略図である。
図示するように、本実施形態の情報処理装置は、ホストプロセッサ(CPU)10と、メモリ(MEM)20と、局所メモリ(RAM)40と、動的再構成可能プロセッサ(DRP)90と、を有する。ホストプロセッサ10、メモリ20および局所メモリ40は、内部バス30で互いに接続されている。また、局所メモリ40および動的再構成可能プロセッサ90は、局所メモリ40から動的再構成可能プロセッサ90へデータおよびプログラムを転送するための入力配線70と、動的再構成可能プロセッサ90から局所メモリ40へデータを転送するための出力配線80とを介して互いに接続されている。
メモリ20には、ホストプロセッサ10および動的再構成可能プロセッサ90が使用するデータ、プログラムが格納される。ホストプロセッサ10は、メモリ20に記憶されたホストプロセッサ10用のプログラムに従い、動的再構成可能プロセッサ90の起動、終結、および、動的再構成可能プロセッサ90へのデータ、プログラムの転送を制御する。局所メモリ40は、動的再構成可能プロセッサ90が使用するデータ、プログラムが格納される。動的再構成可能プロセッサ90は、構成情報を格納する構成情報格納部50と、演算部60と、を有する。
演算部60は、M行N列(図1では2行2列)に配列された演算ユニット(EX)63と、1列目の演算ユニット63毎に設けられたM個(M行1列)のロードユニット(LD)61と、行毎にロードユニット61と1列目の演算ユニット63との間に設けられたM個(M行1列)の遅延ユニット(DY)62と、N列目の演算ユニット63毎に設けられたM個(M行1列)のストアユニット(ST)64と、を有する。
ロードユニット61は、設定されたロードユニット用構成情報に従い、1列目の対応する(同行の)演算ユニット63へ入力するデータを局所メモリ40からロードする。
遅延ユニット62は、対応する(同行)ロードユニット61から出力されたデータを、設定された遅延ユニット用構成情報が示す遅延サイクル数分遅延させ、1列目の対応する(同行の)演算ユニット63へ出力する。
演算ユニット63は、図示していないが、複数の入出力ポートと、四則演算等の各種演算を行う複数の演算回路と、入出力ポートおよび演算回路の接続を切替えるスイッチと、を有する。そして、演算ユニット63は、設定された演算ユニット用構成情報に従い、スイッチを制御して、データの入力元、演算内容および演算結果の出力先を切り替える。なお、演算ユニット63同士の配線は上下左右の4方向であり、どの方向にも双方向にデータ(例えば8ビットデータ)を転送可能である。
図2は、演算ユニット用構成情報メモリ53に格納される演算ユニット用構成情報の一例を示す図である。図示するように、演算ユニット用構成情報は、演算ユニット63の列番号(X座標)を登録するフィールド531と、演算ユニット63の行番号(Y座標)を登録するフィールド532と、演算ユニット63に行わせる演算種別を登録するフィールド533と、第1オペランドがどの方向の演算ユニット63または遅延ユニット62から来るかを示す情報を登録するフィールド534と、第2オペランドがどの方向の演算ユニット63または遅延ユニット62から来るかを示す情報を登録するフィールド535と、第3オペランドがどの方向の演算ユニット63または遅延ユニット62から来るかを示す情報を登録するフィールド536と、を有する。ここでは、フィールド534〜536に方向を示す情報として、自演算ユニットのアドレス(列番号、行番号)を(X,Y)とした場合に、上(X-1,Y)を「00」、右(X,Y+1)を「01」、下(X+1,Y)を「10」、そして、左(X,Y-1)を「11」としている。なお、フィールド534〜536のいずれにも登録されていない方向が、演算結果の出力先となる。また、図2に示す例では、演算ユニット用構成情報が、演算ユニット63のアドレス(1列目、2行目)、演算種別:加算(add)、第1オペランド入手先:左、第2オペランド入手先:上、第3オペランド入手先:右であることを表している。この演算ユニット用構成情報は、演算部60に含まれている演算ユニット63の数分存在する。
ストアユニット64は、設定されたストアユニット用構成情報に従い、N列目の対応する(同行の)演算ユニット63から出力されるデータを局所メモリ40へストアする。
構成情報格納部50は、ロードユニット用構成情報メモリ(ML)51と、遅延ユニット用構成情報メモリ(MD)52と、M行N列の演算ユニットの列毎に設けられたN個の演算ユニット用構成情報メモリ(ME)53と、ストアユニット用構成情報メモリ(MS)54と、を有する。
ロードユニット用構成情報メモリ51は、M個のロードユニット61各々に設定するロードユニット用構成情報(データをロードするアドレス等のパラメータ情報)を格納する。遅延ユニット用構成情報メモリ52は、M個の遅延ニット62各々に設定する遅延ユニット用構成情報(遅延サイクル数)を格納する。演算ユニット用構成情報メモリ53は、対応する列のM個の演算ユニット63各々に設定する演算ユニット用構成情報(データ入出力先および演算内容を特定する情報)を格納する。そして、ストアユニット用構成情報メモリ54は、M個のストアユニット64各々に設定するストアユニット用構成情報(データをストアするアドレス等のパラメータ情報)を格納する。
以上のような構成において、ホストプロセッサ10は、動的再構成可能プロセッサ90が使用するデータ、プログラムを、メモリ20から局所メモリ40へ転送する。ここで、プログラムは、上述の、ロードユニット用構成情報、遅延ユニット用構成情報、演算ユニット用構成情報、および、ストアユニット用構成情報を含む。
次に、ロードユニット用構成情報メモリ51は、局所メモリ40からロードユニット用構成情報を読み込み、各ロードユニット61に構成情報を設定する。また、遅延ユニット用構成情報メモリ52は、局所メモリ40から遅延ユニット用構成情報を読み込み、各遅延ユニット62に構成情報を設定する。また、各演算ユニット用構成情報メモリ53は、対応する列の演算ユニット用構成情報を読込み、当該列の各演算ユニット63に構成情報を設定する。また、ストアユニット用構成情報メモリ54は、局所メモリ40からストアユニット用構成情報を読み込み、各ストアユニット64に構成情報を設定する。
さて、以上のようにして演算部60の各ユニットに構成情報が設定されると、先ず、ロードユニット61が、設定された構成情報に従い、局所メモリ40からデータをロードし、これを対応する(同行の)遅延ユニット62に転送する。次に、遅延ユニット62が、ロードユニット61から送られてきたデータを、設定された構成情報が示す遅延サイクル分だけ遅延させ、それから1列目の対応する(同行の)演算ユニット63へ転送する。次に、演算ユニット63が、設定された構成情報に従い、データの入力元、演算内容および演算結果の出力先を切り替えて演算処理を行う。そして、ストアユニット64が、設定された構成情報に従い、N列目の対応する(同行)演算ユニット63から出力されたデータを局所メモリ40にストアする。
このように、本実施形態の動的再構成可能プロセッサ90では、プログラムによって複数の演算ユニット63各々の演算内容および演算順番を変更することができ、従って動的に機能を変更することができる。また、遅延ユニット62により、N列目の演算ユニット63から出力される各データを、1列目の対応する(同行の)演算ユニット63に、当該各データのN列目の演算ユニット63からの出力サイクル差を与えて入力できる。つまり、M行N列の演算ユニット63から出力される複数のデータを、局所メモリ40を介して、M行N列の演算ユニット63に再投入する場合に、局所メモリ40によって吸収されてしまう出力サイクルのサイクル差を再現して、当該複数のデータをM行N列の演算ユニット63に再投入できる。したがって、本実施形態の動的再構成可能プロセッサ90よりも演算ユニット63の列数が多い他の動的再構成可能プロセッサ(遅延ユニット62を有さない既存の動的再構成可能プロセッサ)向けに開発された入力プログラムを、複数回に分割して実行できる。この場合、1回目の実行で使用する遅延ユニット用構成情報は、各遅延ユニット62での遅延サイクル数を「0」にするものとする。また、2回目以降の実行で使用する遅延ユニット用構成情報は、1つ前の実行でN列目の演算ユニット63から出力される各データのサイクル差を再現するために必要な、各遅延ユニット62での遅延サイクル数とする。
なお、動的再構成可能プロセッサ90は、遅延ユニット62および遅延ユニット用構成情報メモリ52が追加されている点を除き、図28に示す動的再構成可能プロセッサ900と同様である。そこで、以下では、遅延ユニット62および遅延ユニット用構成情報メモリ52について説明し、その他の構成の説明は省略する。
図3は、図1に示す遅延ユニット62の回路構成例を示す図である。この例では最大で3サイクルまで遅延することができる回路を示している。ここで、符号6201は、対応する(同列の)のロードユニット61から出力されたデータ(例えば8ビットデータ)を取り込むためのデータ入力線(IN)であり、符号6202は、データを1列目の対応する(同列の)演算ユニット63へ転送するためのデータ出力線(OUT)であり、そして、符号6215は、クロック信号線(CLK)である。また、符号6203〜6205は、遅延ユニット用構成情報メモリ52から遅延ユニット用構成情報を取り込むための構成情報入力線である。構成情報入力線6203はデータ遅延を行うか否かを決定するためのイネーブル信号線(E)であり、そして、構成情報入力線6204、6205は、遅延サイクル数(1サイクル〜3サイクル)を決定するためのビット線(D1、D2)である。
図示するように、遅延ユニット62は、複数のアンド回路6206〜6209と、複数のフリップフロップ回路6210〜6214と、を有する。
フリップフロップ回路(FFB1)6210には、イネーブル信号線6203およびビット線6204が入力されている。そして、イネーブル信号線6203がONの場合、ビット線6204がONならば、出力結果(Q)をON、出力結果の否定値(NOT Q)をOFFとし、一方、ビット線6204がOFFならば、出力結果をOFF、出力結果の否定値をONとする。
アンド回路(A1)6206には、データ入力線6201およびフリップフロップ回路6210の出力結果が入力されている。フリップフロップ回路6210の出力結果がONのときにデータ入力線6201のデータを出力し(ON)、OFFのときに出力しない(OFF)。
アンド回路(A2)6207には、データ入力線6201およびフリップフロップ回路6210の出力結果の否定値が入力されている。フリップフロップ回路6210の出力結果の否定値がONのときにデータ入力線6201のデータを出力し(ON)、OFFのときに出力しない(OFF)。
フリップフロップ回路(FFB2)6211には、イネーブル信号線6203およびビット線6205が入力されている。そして、イネーブル信号線6203がONの場合、ビット線6205がONならば、出力結果(Q)をON、出力結果の否定値(NOT Q)をOFFとし、一方、ビット線6205がOFFならば、出力結果をOFF、出力結果の否定値をONとする。
アンド回路(A3)6208には、アンド回路6208の出力信号線およびフリップフロップ回路6211の出力結果が入力されている。フリップフロップ回路6211の出力結果がONのときにアンド回路6207の出力信号線のデータを出力し(ON)、OFFのときに出力しない。
アンド回路(A4)6209には、アンド回路6207の出力信号線およびフリップフロップ回路6211の出力結果の否定値が入力されている。フリップフロップ回路6211の出力結果の否定値がONのときにアンド回路6207の出力信号線のデータを出力し(ON)、OFFのときに出力しない。
フリップフロップ回路(FFA1)6212には、アンド回路6206の出力信号線が入力されており、クロック信号線6215のクロック信号に従い、入力されたデータを1サイクル遅延して出力する。
フリップフロップ回路(FFA2)6213には、フリップフロップ回路6212の出力信号線が入力されており、クロック信号線6215のクロック信号に従い、入力されたデータを1サイクル遅延して出力する。ここで、フリップフロップ回路6214の出力信号線は、アンド回路6207の出力信号線に接続されている。
フリップフロップ回路(FFA3)6214には、アンド回路6208の出力信号線が入力されており、クロック信号線6215のクロック信号に従い、入力されたデータを1サイクル遅延して出力する。ここで、フリップフロップ回路6214の出力信号線は、アンド回路6209の出力信号線に接続されている。
さて、以上のような構成を有する遅延ユニット62の動作は、イネーブル信号線6203がONの場合、次のようになる。
(1-1)ビット信号線6204:OFF ビット信号線6205:OFF
遅延サイクル数=0
アンド回路6206、6208がOFFとなり、アンド回路6207、6209がONNとなる。したがって、データ入力線6201のデータは、フリップフロップ回路6212〜6214を経由することなく、データ出力線6202から出力されるため、遅延サイクル数は0となる。
遅延サイクル数=0
アンド回路6206、6208がOFFとなり、アンド回路6207、6209がONNとなる。したがって、データ入力線6201のデータは、フリップフロップ回路6212〜6214を経由することなく、データ出力線6202から出力されるため、遅延サイクル数は0となる。
(1-2)ビット信号線6204:OFF ビット信号線6205:ON
遅延サイクル数=1
アンド回路6206、6209がOFFとなり、アンド回路6207、6208がONNとなる。したがって、データ入力線6201のデータは、フリップフロップ回路6214を経由して、データ出力線6202から出力されるため、遅延サイクル数は1となる。
遅延サイクル数=1
アンド回路6206、6209がOFFとなり、アンド回路6207、6208がONNとなる。したがって、データ入力線6201のデータは、フリップフロップ回路6214を経由して、データ出力線6202から出力されるため、遅延サイクル数は1となる。
(1-3)ビット信号線6204:ON ビット信号線6205:OFF
遅延サイクル数=2
アンド回路6206、6209がONとなり、アンド回路6207、6208がOFFとなる。したがって、データ入力線6201のデータは、フリップフロップ回路6212、6213を経由して、データ出力線6202から出力されるため、遅延サイクル数は2となる。
遅延サイクル数=2
アンド回路6206、6209がONとなり、アンド回路6207、6208がOFFとなる。したがって、データ入力線6201のデータは、フリップフロップ回路6212、6213を経由して、データ出力線6202から出力されるため、遅延サイクル数は2となる。
(1-4)ビット信号線6204:ON ビット信号線6205:ON
遅延サイクル数=3
アンド回路6206、6208がONとなり、アンド回路6207、6209がOFFとなる。したがって、データ入力線6201のデータは、フリップフロップ回路6212、6213、6214を経由して、データ出力線6202から出力されるため、遅延サイクル数は3となる。
遅延サイクル数=3
アンド回路6206、6208がONとなり、アンド回路6207、6209がOFFとなる。したがって、データ入力線6201のデータは、フリップフロップ回路6212、6213、6214を経由して、データ出力線6202から出力されるため、遅延サイクル数は3となる。
図4は、図1に示す遅延ユニット用構成情報メモリ52の回路構成例を示す図である。この例では4個(4行1列)の図2に示す遅延ユニット62に遅延ユニット用構成情報を設定することができる回路を示している。ここで、符号5201は、ホストプロセッサ10から出力されるフリップフロップのセット信号を取り込むためのセット信号線(SET)であり、符号5202は、ホストプロセッサ10から出力されるフリップフロップのリセット信号を取り込むためのリセット信号線(RESET)であり、符号5203は、クロック信号線(CLK)である。また、符号5204は、局所メモリ40から出力された遅延ユニット用構成情報(1つの遅延ユニット62につき2ビット)を取り込むための構成情報入力線である。また、符号5214、5215は、4個の遅延ユニット62へのイネーブル信号線(E)62031〜62034を順番にONにするための駆動信号線である。そして、符号5212は、4個の遅延ユニット62へのビット線(D1)62041〜62044上に順番にビットデータを出力するためのデータ信号線であり、符号5213は、4個の遅延ユニット62へのビット線(D2)62051〜62054上に順番にビットデータを出力するためのデータ信号線である。
図示するように、遅延ユニット用構成情報メモリ52は、送りレジスタを構成する複数のフロップフロップ回路(FF)52051〜52054と、遅延ユニット63のアドレスを記憶するフリップフロップ回路(YC)52061〜52064と、フリップフロップ回路52061〜52064毎に設けられた2つのアンド回路52071〜52074、52068〜52084と、遅延ユニット63に設定する構成情報(2ビット)を記憶するフリップフロップ回路(DC)52091〜52094と、フリップフロップ回路52091〜52094毎に設けられた2つのアンド回路52101〜52104、52111〜52114と、遅延ユニット62のイネーブル信号線62031〜62034毎に設けられたアンド回路52171〜52174と、アンド回路52171の2つの入力の両方に設けられたノット回路52181、52161と、アンド回路52172の2つの入力の一方に設けられたノット回路52182と、アンド回路52173の2つの入力の一方に設けられたノット回路52163と、を有する。
ここで、アンド回路52071、52081各々の2つの入力の一方は、フリップフロップ回路52051の出力に接続され、他方は、フリップフロップ回路52061の出力に接続されている。なお、フリップフロップ回路52061の2つの出力は、OFF(ビット値=0)、OFFである。このため、フリップフロップ回路52061からアンド回路52071への出力はOFFであり、また、フリップフロップ回路52061からアンド回路52081への出力はOFFである。
また、アンド回路52072、52082各々の2つの入力の一方は、フリップフロップ回路52052の出力に接続され、他方は、フリップフロップ回路52062の出力に接続されている。なお、フリップフロップ回路52062の2つの出力は、OFF、ON(ビット値=1)である。このため、フリップフロップ回路52062からアンド回路52072への出力はOFFであり、また、フリップフロップ回路52062からアンド回路52082への出力はONである。
また、アンド回路52073、52083各々の2つの入力の一方は、フリップフロップ回路52053の出力に接続され、他方は、フリップフロップ回路52063の出力に接続されている。なお、フリップフロップ回路52063の2つの出力は、ON、OFFである。このため、フリップフロップ回路52063からアンド回路52073への出力はONであり、また、フリップフロップ回路52063からアンド回路52083への出力はOFFである。
また、アンド回路52074、52084各々の2つの入力の一方は、フリップフロップ回路52054の出力に接続され、他方は、フリップフロップ回路52064の出力に接続されている。なお、フリップフロップ回路52064の2つの出力は、ON、ONである。このため、フリップフロップ回路52064からアンド回路52074への出力はONであり、また、フリップフロップ回路52064からアンド回路52084への出力はONである。
アンド回路52071〜52074の出力は駆動信号線5215に接続されており、また、アンド回路52081〜52084の出力は駆動信号線5214に接続されている。駆動信号線5214は、ノット回路52181の入力、ノット回路52182の入力、アンド回路52173の入力、そして、アンド回路52174の入力に接続されており、駆動信号線5215は、ノット回路52161の入力、アンド回路52172の入力、ノット回路52163の入力、そして、アンド回路52174の入力に接続されている。
アンド回路52101、52111各々の2つの入力の一方は、フリップフロップ回路52051の出力に接続され、他方は、フリップフロップ回路52091の出力に接続されている。また、アンド回路52102、52112各々の2つの入力の一方は、フリップフロップ回路52052の出力に接続され、他方は、フリップフロップ回路52092の出力に接続されている。また、アンド回路52103、52113各々の2つの入力の一方は、フリップフロップ回路52053の出力に接続され、他方は、フリップフロップ回路52063の出力に接続されている。また、アンド回路52104、52114各々の2つの入力の一方は、フリップフロップ回路52054の出力に接続され、他方は、フリップフロップ回路52064の出力に接続されている。
なお、アンド回路52101〜52104の出力はデータ信号線5213に接続されており、アンド回路52111〜52114の出力はデータ信号線5212に接続されている。また、フリップフロップ回路52091には、構成情報入力線5204を介して1行目の遅延ユニット62に設定する遅延ユニット用構成情報が格納され、フリップフロップ回路52092には、構成情報入力線5204を介して2行目の遅延ユニット62に設定する遅延ユニット用構成情報が格納され、フリップフロップ回路52093には、構成情報入力線5204を介して3行目の遅延ユニット62に設定する遅延ユニット用構成情報が格納され、そして、フリップフロップ回路52094には、構成情報入力線5204を介して4行目の遅延ユニット62に設定する遅延ユニット用構成情報が格納される。
さて、以上のような構成を有する遅延ユニット用構成情報メモリ52は、セット信号5201にパルス信号が入力され、これにより、フロップフロップ回路52051〜52054が、1サイクルずつずれて順番にパルス信号を出力することににより、次のように動作する。
(2-1)フロップフロップ回路52051がパルス出力
1行目の遅延ユニット62に遅延ユニット用構成情報が設定される。アンド回路52071、52081の出力が駆動信号線5215、5214上に出力され、これにより、駆動信号線5214、5215が共にOFFとなる。したがって、アンド回路52171の出力つまり1行目の遅延ユニット62へのイネーブル信号線62031のみがONとなる。また、アンド回路52101、52111の出力がデータ信号線5213、5212上に出力され、これにより、フリップフロップ回路52091に記憶されている1行目の遅延ユニット62用の遅延ユニット用構成情報が、データ信号線5212、5213を介して、1行目の遅延ユニット62へのビット線62041、62051に出力される。
1行目の遅延ユニット62に遅延ユニット用構成情報が設定される。アンド回路52071、52081の出力が駆動信号線5215、5214上に出力され、これにより、駆動信号線5214、5215が共にOFFとなる。したがって、アンド回路52171の出力つまり1行目の遅延ユニット62へのイネーブル信号線62031のみがONとなる。また、アンド回路52101、52111の出力がデータ信号線5213、5212上に出力され、これにより、フリップフロップ回路52091に記憶されている1行目の遅延ユニット62用の遅延ユニット用構成情報が、データ信号線5212、5213を介して、1行目の遅延ユニット62へのビット線62041、62051に出力される。
(2-2)フロップフロップ回路52052がパルス出力
2行目の遅延ユニット62に遅延ユニット用構成情報が設定される。アンド回路52072、52082の出力が駆動信号線5215、5214上に出力され、これにより、駆動信号線5214、5215がOFF、ONとなる。したがって、アンド回路52172の出力つまり2行目の遅延ユニット62へのイネーブル信号線62032のみがONとなる。また、アンド回路52102、52112の出力がデータ信号線5213、5212上に出力され、これにより、フリップフロップ回路52092に記憶されている2行目の遅延ユニット62用の遅延ユニット用構成情報が、データ信号線5212、5213を介して、2行目の遅延ユニット62へのビット線62042、62052に出力される。
2行目の遅延ユニット62に遅延ユニット用構成情報が設定される。アンド回路52072、52082の出力が駆動信号線5215、5214上に出力され、これにより、駆動信号線5214、5215がOFF、ONとなる。したがって、アンド回路52172の出力つまり2行目の遅延ユニット62へのイネーブル信号線62032のみがONとなる。また、アンド回路52102、52112の出力がデータ信号線5213、5212上に出力され、これにより、フリップフロップ回路52092に記憶されている2行目の遅延ユニット62用の遅延ユニット用構成情報が、データ信号線5212、5213を介して、2行目の遅延ユニット62へのビット線62042、62052に出力される。
(2-3)フロップフロップ回路52053がパルス出力
3行目の遅延ユニット62に遅延ユニット用構成情報が設定される。アンド回路52073、52083の出力が駆動信号線5215、5214上に出力され、これにより、駆動信号線5214、5215がON、OFFとなる。したがって、アンド回路52173の出力つまり3行目の遅延ユニット62へのイネーブル信号線62033のみがONとなる。また、アンド回路52103、52113の出力がデータ信号線5213、5212上に出力され、これにより、フリップフロップ回路52093に記憶されている3行目の遅延ユニット62用の遅延ユニット用構成情報が、データ信号線5212、5213を介して、3行目の遅延ユニット62へのビット線62043、62053に出力される。
3行目の遅延ユニット62に遅延ユニット用構成情報が設定される。アンド回路52073、52083の出力が駆動信号線5215、5214上に出力され、これにより、駆動信号線5214、5215がON、OFFとなる。したがって、アンド回路52173の出力つまり3行目の遅延ユニット62へのイネーブル信号線62033のみがONとなる。また、アンド回路52103、52113の出力がデータ信号線5213、5212上に出力され、これにより、フリップフロップ回路52093に記憶されている3行目の遅延ユニット62用の遅延ユニット用構成情報が、データ信号線5212、5213を介して、3行目の遅延ユニット62へのビット線62043、62053に出力される。
(2-4)フロップフロップ回路52054がパルス出力
4行目の遅延ユニット62に遅延ユニット用構成情報が設定される。アンド回路52074、52084の出力が駆動信号線5215、5214上に出力され、これにより、駆動信号線5214、5215が共にONとなる。したがって、アンド回路52174の出力つまり4行目の遅延ユニット62へのイネーブル信号線62034のみがONとなる。また、アンド回路52104、52114の出力がデータ信号線5213、5212上に出力され、これにより、フリップフロップ回路52094に記憶されている4行目の遅延ユニット62用の遅延ユニット用構成情報が、データ信号線5212、5213を介して、4行目の遅延ユニット62へのビット線62044、62054に出力される。
4行目の遅延ユニット62に遅延ユニット用構成情報が設定される。アンド回路52074、52084の出力が駆動信号線5215、5214上に出力され、これにより、駆動信号線5214、5215が共にONとなる。したがって、アンド回路52174の出力つまり4行目の遅延ユニット62へのイネーブル信号線62034のみがONとなる。また、アンド回路52104、52114の出力がデータ信号線5213、5212上に出力され、これにより、フリップフロップ回路52094に記憶されている4行目の遅延ユニット62用の遅延ユニット用構成情報が、データ信号線5212、5213を介して、4行目の遅延ユニット62へのビット線62044、62054に出力される。
<<第2実施形態>>
次に、本発明の第2実施形態として、上記の第1実施形態で説明した動的再構成可能プロセッサ向けプログラムのコンパイラ装置を説明する。本実施形態のコンパイラ装置は、第1実施形態で説明した動的再構成可能プロセッサ90よりも演算ユニットの列数が多い既存の動的再構成可能プロセッサ(図28に示すような、遅延ユニット63および遅延ユニット用構成情報メモリ52を有さない動的再構成可能プロセッサ900)向けに開発されたプログラムを、第1実施形態で説明した動的再構成可能プロセッサ90向けのプログラムに変換する装置である。
次に、本発明の第2実施形態として、上記の第1実施形態で説明した動的再構成可能プロセッサ向けプログラムのコンパイラ装置を説明する。本実施形態のコンパイラ装置は、第1実施形態で説明した動的再構成可能プロセッサ90よりも演算ユニットの列数が多い既存の動的再構成可能プロセッサ(図28に示すような、遅延ユニット63および遅延ユニット用構成情報メモリ52を有さない動的再構成可能プロセッサ900)向けに開発されたプログラムを、第1実施形態で説明した動的再構成可能プロセッサ90向けのプログラムに変換する装置である。
図5は、本発明の第2実施形態が適用されたコンパイラ装置の概略構成図である。図示するように、コンパイラ装置1000は、演算部2000と、記憶部3000と、プログラムの入出力を行う入出力部4000と、を有する。
記憶部3000は、コンパイル対象のプログラムである入力プログラムを記憶する入力プログラム記憶部3100と、構成情報のコード生成に利用する辞書を記憶する辞書記憶部3200と、演算部60の各ユニット61〜64に設定する構成情報を管理するための配置テーブルを記憶する配置テーブル記憶部3300と、入力プログラムのコンパイル結果である出力プログラムを記憶する出力プログラム記憶部3400と、を有する。
図6は、辞書記憶部3200に記憶される辞書の一例を示している。辞書は入力プログラム中に記述されている変数(配列)毎に生成される。図示するように、別の変数に対する辞書へのポインタを格納するフィールド1501と、変数名を表す文字列へのポインタを格納するフィールド1502と、変数の型を格納するフィールド1503と、配列の大きさがコンパイル時に固定であるか否かを表す情報を格納するフィールド1504と、配列添字の下限値を格納するフィールド1505と、配列添字の上限値を格納するフィールド1506、配列が初期設定される場合の初期値へのポインタを格納するフィールド1507と、を有する。ここで、フィールド1504に格納されている情報が"fixed"の場合、配列の大きさは固定である。一方、該情報が"dynamic"の場合、配列の大きさはプログラム実行時に決まる。また、フィールド1507にポインタが格納されている場合、当該ポインタで示される位置には、配列に設定される初期値が格納される。
なお、図6に示す例では1次元配列に対する辞書を示しているが、一般の次元の場合も同様である。
図7は、配置テーブル記憶部3300に記憶される配置テーブルの一例を示している。図示するように、配置テーブルは動的再構成可能プロセッサを構成するユニット毎に設けられたエントリ1640を有する。エントリ1640には、対応するユニットの設定情報が格納される。図7において、左端のエントリ1640の列は入力列1610であり、列1610の各行のエントリ1640が各行のロードユニットに対応する。右端のエントリ1640の列は出力列1630であり、列1630の各行のエントリ1640が各行のストアユニットに対応する。そして、入力列1610および出力列1630で挟まれたエントリ1640の複数の列が配置列1620であり、各行各列のエントリ1640が各行各列の演算ユニットに相当する。
図8は、図7に示す配置テーブルのエントリ1640に格納される設定情報を説明するための図である。図示するように、設定情報は、演算種別を登録するフィールド1641と、図7において上側に位置するエントリ1640に対するオペランド入出力情報(入力オペランド"in"および出力オペランド"out"のいずれか)を登録するフィールド1642と、右側に位置するエントリ1640に対するオペランド入出力情報を登録するフィールド1643と、下側に位置するエントリ1640に対するオペランド入出力情報を登録するフィールド1644と、左側に位置するエントリ1640に対するオペランド入出力情報を登録するフィールド1645と、上側に位置するエントリ1640に対するオペランド指定情報(指定"connect"および未指定"open"のいずれか)を登録するフィールド1648と、右側に位置するエントリ1640に対するオペランド指定情報を登録するフィールド1649と、下側に位置するエントリ1640に対するオペランド指定情報を登録するフィールド1650と、左側に位置するエントリ1640に対するオペランド指定情報登録するフィールド1651と、対応するユニットでの処理の実行タイミング(サイクル数)を登録するフィールド1646と、対応するユニットがロードユニットあるいは出力ユニットである場合に、ロードあるいはストアすべきデータの辞書へのポインタを格納するフィールド1647と、を有する。
なお、動的再構成可能プロセッサに処理を続けて複数回実行させる場合、処理回数と同じ数の配置テーブルが配置テーブル記憶部3300に記憶される。このため、配置テーブル記憶部3300には、配置テーブル毎に、配置テーブル同士を接続するための配置テーブルリストも記憶される。図9は、配置テーブル記憶部3300に記憶される配置テーブルリストの一例を示している。図示するように、配置テーブルリストは、次の配置テーブルへのポインタを格納するフィールド1710と、配置テーブルへのポインタを格納するフィールド1720と、配置テーブルに利用する辞書へのポインタを格納するフィールド1730と、を有する。
図5に戻って説明を続ける。演算部2000は、構文解析部2100と、構成情報分割部2200と、遅延情報解析部2300と、コード生成部2400と、を有する。
構文解析部2100は、入力プログラムの構文解析を行って辞書および配置テーブルを生成する。構文情報分割部2200は、入力プログラムに含まれている構成情報を当該プログラムが対象とする既存の動的再構成可能プロセッサよりも演算ユニットの列数が少ない第1実施形態の動的再構成可能プロセッサ向けの構成情報に分割し、その結果を辞書および配置テーブルに反映させる。遅延解析部2300は、分割された構成情報を第1実施形態の動的再構成可能プロセッサに設定した場合における当該動的再構成可能プロセッサから出力される各データの出力サイクルを解析し、出力サイクルのずれ(遅延)を配置テーブルに反映する。そして、コード生成部2400は、辞書および配置テーブルを用いて、第1実施形態の動的再構成可能プロセッサ向けの出力プログラムを生成する。ここで、出力プログラムは、第1実施形態の動的再構成可能プロセッサ90に処理を複数回実行させるプログラムである。
なお、図5に示すコンパイラ装置1000は、例えば図10に示すような、ホストプロセッサ111と、メモリ112と、HDD等の外部記憶装置113と、キーボード、マウス等の入力装置114と、CRT、LCD等の表示装置115と、NIC等の通信装置116と、これらを接続するバス118と、を有する一般的なコンピュータシステムにおいて、ホストプロセッサ111がメモリ112上にロードしたプログラム(コンパイラプログラム)を実行することにより実現できる。この場合、入出力部4000には入力装置114、表示装置115および/または通信装置116が、そして、記憶部3000にはメモリ112および/または外部記憶装置113が用いられる。
以下に、構文解析部2100、構文情報分割部2200、遅延解析部2300、および、コード生成部2400の動作について、図11に示す入力プログラムが入力プログラム記憶部3100に記憶されている場合を例にとり説明する。なお、図11に示す入力プログラムは、C言語で記述されている。
図11に示す入力プログラムにおいて、1行目の記述2001は、関数名および引数の宣言である。ここで、引数ならびに3つの配列"a","b","c"は、宣言された関数への入力であり、配列"x"は該関数からの出力である。2行目の記述2002は、8行目の記述2008および11行目の記述2011で記述されている関数に対して不定個数の引数を指定するための引数配列の宣言である。3行目の記述2003は、図28に示すような既存の動的再構成可能プロセッサ向けの構成情報を配列"conf1"へ初期値設定するための記述である。
また、4行目の記述2004は、引数配列"args"を初期化するための記述である。5行目の記述2005は、引数配列"args"に、配列"a"の先頭アドレスをaとし、要素数を100とし、そして、入力座標0から配列"a"の値を入力することを設定するための記述である。ここで、入力座標0は1行目のロードユニットに対応する。6行目の記述2006は、引数配列"args"に、配列"b"の先頭アドレスをbとし、要素数を100とし、そして、入力座標2から配列"b"の値を入力することを設定するための記述である。ここで、入力座標2は3行目のロードユニットに対応する。7行目の記述2007は、引数配列"args"に、配列"c"の先頭アドレスをcとし、要素数を100とし、そして、入力座標3から配列"c"の値を入力することを設定するための記述である。ここで、入力座標3は4行目のロードユニットに対応する。
また、8行目の記述2008は、以上のようにして設定された配列"a","b","c"に関する情報をロードユニット用構成情報メモリに設定するための関数呼出しである。設定された配列"a","b","c"に関する情報は、配列毎にロードユニット用構成情報としてロードユニット用構成情報メモリに設定される。ここで、ロードユニット用構成情報は、対象となるロードユニットの行番号(Y座標)、配列のLS(Logical Space)アドレス先頭および配列のLS回数を有する。したがって、配列"a","b","c"のロードユニット用構成情報は、それぞれ、行番号が0,2,3、LSアドレス先頭がa,b,c、LS回数が100,100,100となる。
また、9行目の記述2009は、引数配列"args"を初期化するための記述である。10行目の記述2010は、引数配列"args"に、配列"x"の先頭アドレスをxとし、要素数を100とし、そして、出力座標1から配列"x"の値を出力することを設定するための記述である。ここで、出力座標1は2行目のストアユニットに対応する。
また、11行目の記述2011は、以上のようにして設定された配列"x"に関する情報をストアユニット用構成情報メモリに設定するための関数呼出しである。設定された配列"x"に関する情報は、配列毎にストアユニット用構成情報としてストアユニット用構成情報メモリに設定される。ここで、ストアユニット用構成情報は、対象となるストアユニットの行番号(Y座標)、配列のLSアドレス先頭および配列のLS回数を有する。したがって、配列"x"のストアユニット用構成情報は、それぞれ、行番号が1、LSアドレス先頭がx、LS回数が100となる。これにより、入力プログラムを実行した場合に、2行目のストアユニットから出力されたデータの100要素(LS)分が、局所メモリ上の配列x[0]からx[99]に格納される。
また、12行目の記述2012は、記述2003で初期値設定された配列"conf1"に関する情報を演算ユニット用構成情報メモリに設定するための関数呼出しである。設定された配列"conf1"に関する情報は、図2に示すフォーマットを有する演算ユニット用構成情報として、同じ列番号(X座標)毎に演算ユニットの行数分(M個)並べて演算ユニット用構成情報メモリに設定される。
また、13行目の記述2103は、動的再構成可能プロセッサをホストプロセッサから起動するための関数呼出しである。そして、14行目の記述2014は動的再構成可能プロセッサの実行の終了をホストプロセッサ側から待つための関数呼出しである。ホストプロセッサは、動的再構成可能プロセッサの実行が終了し、この関数がリターンするまで、この関数呼出し以降の処理を実行することができない。
図12は、構文解析部2100の辞書作成処理を説明するためのフロー図である。
先ず、構文解析部2100は、入力プログラム記憶部3100に記憶されている入力プログラムから宣言されている未注目の配列に注目し、当該配列の型を特定する(S701)。例えば図11に示す入力プログラムにおいて、配列"a"に注目した場合、その型は"char"となる。
次に、構文解析部2100は、注目配列の要素(初期値)あるいは要素数を設定する記述に基づいて、該配列の大きさが固定である否かを調べると共に、配列の大きさに基づいて配列添字の下限値および上限値を決定する(S702)。例えば図11に示す入力プログラムにおいて、記述2005により配列"a"の要素数は100であるので、配列"a"の大きさは固定と判断され、配列添字の下限値が0、上限値が要素数-1=99に決定される。また、記述2002により、配列"args"の大きさは固定でないと判断され、配列添字の下限値および上限値が共に0に決定される。
次に、構文解析部2100は、注目配列に初期値が設定されているか否かを調べ、初期値が設定されている場合は、その初期値へのポインタを特定する(S703)。例えば図11に示す入力プログラムにおいて、記述2003により配列"conf1"に初期値が設定されているので、その初期値へのポインタが格納される。
以上のようにして、注目配列について、型、配列の大きさの固定の有無、配列添字の下限値および上限値、そして、初期値へのポインタを特定したならば、これらの情報を有する辞書(図6参照)を作成し、辞書記憶部3200に記憶する(S704)。ここで、当該辞書の1つ前に作成した辞書があるならば(S705)、この1つ前に作成した辞書のフィールド1501に、今回作成した辞書へのポインタを格納する(S706)。
その後、構文解析部2100は、入力プログラムで宣言されている全ての配列に着目したならば、このフローを終了し、そうでないならばS701に戻る(S707)。
図13は、図11に示す入力プログラムに対して、図12に示すフロー(辞書作成処理)を実行した結果、作成された辞書を説明するための図である。図示するように、入力プログラムに含まれている配列"a","b","c","x","args","conf1"のそれぞれについて辞書1510〜1560が作成される。配列"conf1"には、記述2003により配列"conf1"に初期値(演算ユニット用構成情報)1561が設定されているので、配列"conf1"の辞書1560には、初期値1561へのポインタが格納される。
図14は、構文解析部2100の配置テーブル作成処理を説明するためのフロー図である。
なお、配置テーブル記憶部3300には、図7に示すような、入力プログラムが対象とする動的再構成可能プロセッサに対応する配置テーブルの雛形(各エントリ1640が空欄の状態、既存雛形テーブルと呼ぶ)が予め登録されているものとする。
まず、構文解析部2100は、入力プログラム記憶部3100に記憶されている入力プログラムから、ロードユニット用構成情報メモリに設定する配列の内容を判定する(S751)。例えば図11に示す入力プログラムでは、記述2004〜記述2008により配列"a"が1行目のロードユニットに、配列"b"が3行目のロードユニットに、そして、配列"c"が4行目のロードユニットに設定されることを判定する。それから、構文解析部2100は、ロードユニットのエントリ1640各々の設定情報のフィールド1647(図9参照)に、上述の辞書作成処理(図12のフロー)で作成された当該ロードユニットに設定される配列の辞書へのポインタを登録する(S752)。
次に、構文解析部2100は、入力プログラムから、ストアユニット用構成情報メモリに設定する配列の内容を判定する(S753)。例えば図11に示す入力プログラムでは、記述2009〜記述2011により配列"x"が2行目のストアユニットに設定されることを判定する。それから、構文解析部2100は、ストアユニットのエントリ1640各々の設定情報のフィールド1647に、上述の辞書作成処理(図12のフロー)で作成された当該ストアユニットに設定される配列の辞書へのポインタを登録する(S754)。
次に、構文解析部2100は、入力プログラムから、演算ユニット用構成情報メモリに設定する配列の情報を特定する(S755)。例えば図11に示す入力プログラムでは、記述2003、記述2012により演算ユニット用構成情報メモリに設定する配列"conf1"の内容が"0x0a11b7…"であることを特定する。それから、図2に示すフォーマットに従い、特定した配列の情報に含まれている演算ユニット用構成情報各々を認識し、演算ユニットのエントリ1640各々に設定情報を登録する(S756)。
具体的には、演算ユニット用構成情報各々について、該演算ユニット用構成情報のフィールド531、532に登録されている列番号および行番号に対応する演算ユニットのエントリ1640を特定し、該エントリ1640の設定情報のフィールド1641に、該演算ユニット用構成情報のフィールド533に登録されている演算種別を、そして、該設定情報のフィールド1642〜1645、1648〜1651に、該演算ユニット用構成情報のフィールド534〜536の登録内容から特定されるオペランドの入力先および演算結果の出力先を登録する。なお、該エントリ1640の設定情報のフィールド1646に登録するサイクル数はNULLとしておく。
図15は、図11に示す入力プログラムに対して、図14に示すフロー(配置テーブル作成処理)を実行した結果、作成された配置テーブルを説明するための図である。ここでは、入力プログラムの記述2003で配列"conf1"に初期設定された演算ユニット用構成情報"0x0a11b7…"が、動的再構成可能プロセッサに次式で表される処理を行わせるものである場合を想定している。
x[i] = a[i]*b[i] + b[i]*c[i] + c[i]
但し、x[i]は配列添字iで特定される配列"x"の構成要素であり、a[i]は配列添字iで特定される配列"a"の構成要素であり、b[i]は配列添字iで特定される配列"b"の構成要素であり、c[i]は配列添字iで特定される配列"c"の構成要素である。
但し、x[i]は配列添字iで特定される配列"x"の構成要素であり、a[i]は配列添字iで特定される配列"a"の構成要素であり、b[i]は配列添字iで特定される配列"b"の構成要素であり、c[i]は配列添字iで特定される配列"c"の構成要素である。
図15において、入力列1610のエントリ1640に記述された記号a,b,cは、対応するロードユニットに入力する配列"a","b","c"の辞書へのポインタである。また、出力列1630のエントリ1640に記述された記号xは、対応するストアユニットから出力する配列"x"の辞書へのポインタである(図13参照)。
また、配置列1620の各エントリ1640に記述された記号は、対応する演算ユニットに行わせる演算の演算種別を示している。記号Tは入力したデータを1サイクル後にそのまま出力するスルー命令を、記号*は乗算した結果を1サイクル後に出力する乗算命令を、記号+は加算した結果を1サイクル後に出力する加算命令を、そして、記号Dは入力したデータを2サイクルの遅延後にそのまま出力する遅延命令を、それぞれ示している。
また、エントリ1640間の矢印は、データの入出力を示している。例えば、配置列1620の4行1列目のエントリ1640は、左側のエントリ1640(入力列1610の4行目)からデータを入力し、右側のエントリ1640(配置列1620の4行2列目)に出力することを示している。この場合、図9に示す設定情報は、左側のエントリ1640との結線の状態を示すフィールド1651が"connect"、その種類を示すフィールド1645が"in"となり、かつ、右側のエントリ1640との結線の状態を示すフィールド1649が"connect"、その種類を示すフィールド1643が"out"となる。
なお、図15において遅延命令を用いているのは、各演算で複数のオペランドが同じタイミングで入力できるように調整するためである。この調整によって、入力列1610の1行目のエントリ1640、3行目のエントリ1640および4行目のエントリ1640に、それぞれ、配列"a"の構成要素a[i]、配列"b"の構成要素b[i]および配列"c"の構成要素c[i]が同時入力されたときに、上述の式(x[i] = a[i]*b[i] + b[i]*c[i] + c[i])が正しく計算され、7サイクル後に、出力列1630の2行目のエントリから演算結果である配列"x"の構成要素x[i]が出力される。
図16は、構成情報分割部2200の処理を説明するためのフロー図である。
先ず、構成情報分割部2200は、予め登録された情報から、入力プログラムが対象とする動的再構成可能プロセッサの配置列1620の列数(演算ユニットの列数)Lを取得すると共に、出力プログラムが対象とする動的再構成可能プロセッサの配置列1620の列数Nを取得する。ここで、入力プログラムが対象とする動的再構成可能プロセッサが図28に示す動的再構成可能プロセッサ900であるのでL=4となり、出力プログラムが対象とする動的再構成可能プロセッサが図1に示す第1実施形態の動的再構成可能プロセッサ90であるのでN=2となる。また、構成情報分割部2200は、配列"conf1"に初期設定されている演算ユニット用構成情報へのポインタ"tmp0"をポインタ"tmp"の初期値とすると共に、配列"conf1"に対する辞書1560(図13参照)を削除する。このとき、配列"conf1"に対する辞書1560のフィールド1503、1504の内容を保持しておく。さらに、カウント値p、qを共に0に設定する(S1201)。
次に、構成情報分割部2200は、p*NがLより小さいか否かを調べることで、入力プログラムに含まれているM行L列の演算ユニットの構成情報から、M行N列の演算ユニットの構成情報を、新たに切出すことが可能か否かを判断する(S1202)。p*NがLより小さい場合は、M行N列の演算ユニットの構成情報を新たに切出すことが可能としてS1203に進む。一方、p*NがL以上の場合はS1204に進む。
S1203において、構成情報分割部2200は、カウント値pを1つインクリメントする。それから、配列"comf_p"に対する辞書を作成する。そして、作成した辞書のフィールド1503、1504に削除した配列"conf1"に対する辞書のフィールド1503、1504の内容を登録する。また、構成情報分割部2200は、1列当たりの演算ユニット用構成情報の大きさKを特定し、このKに基づいて配列添字の下限値(0)および上限値(0+N*Kバイトに相当する値)を決定して、作成した辞書のフィールド1505、1506に登録する。本実施形態では、1つの演算ユニットに対する演算ユニット用構成情報を2バイトとしている。また、1列につき4つの演算ユニットが配置されている。したがって、K=8バイトとなる。次に、構成情報分割部2200は、削除した配列"conf1"に対する辞書のフィールド1507にポイントされていた演算ユニット用構成情報のうち、ポインタ"tmp"が指示す位置からN*Kバイト分をコピーし、該コピーへのポインタを、作成した辞書のフィールド1507に登録する。それから、ポインタ"tmp"をN*Kバイト分インクリメントし、S1202に戻る。
本実施形態では、L=4、N=2であるので、2つの配列"conf_1","conf_2"に対する辞書が作成される。
次に、S1204において、構成情報分割部2200は、入力プログラムの分割数を示す値numをカウント値pとする。また、ポインタ"tmp0"が指示す位置にある演算ユニット用構成情報(削除した配列"conf1"に対する辞書のフィールド1507にポイントされていた演算ユニット用構成情報)を削除する。次に、構成情報分割部2200は、配置テーブルリストをnum個作成して順番を付す。また、配置列1620の列数をNとする配置テーブル(分割配置テーブルと呼ぶ)をnum個作成し、順番を付して接続する。そして、配置テーブルリストのフィールド1720に同じ順番が付された分割配置テーブルへのポインタを登録すると共に、配置テーブルリストのフィールド1710に次の順番が付された分割配置テーブルへのポインタを登録する。また、作成した各分割配置テーブルの入力列1610の各エントリ1640のサイクル数を-1に初期化する。さらに、カウント値uを1に設定する。
次に、構成情報分割部2200は、u番目の配置テーブルリストのフィールド1730に、配列"conf_u"に対する辞書へのポインタを登録する。また、構文解析部2100が配置テーブル作成処理(図14のフロー)により作成し、配置テーブル記憶部3300に記憶した配置テーブルの配置列1620の第N*q+1列目から第N*(q+1)列目までを、u番目の分割配置テーブルの配置列1620にコピーする(S1205)。
次に、構成情報分割部2200は、qが0か否かを調べることで、u番目の分割配置テーブルが、構文解析部2100が作成した配置テーブルの配置列1620の先頭列を含むものであるか否かを判断する(S1206)。qが0の場合は、先頭列を含むとしてS1207に進む。一方、qが0でない場合は、先頭列を含まないとしてS1208に進む。
S1207において、構成情報分割部2200は、構文解析部2100が作成した配置テーブルの入力列1610を、u番目の分割配置テーブルの入力列1610にコピーする。その後、S1210に進む。
S1208において、構成情報分割部2200は、qが値numと一致するか否かを調べることで、U番目の分割配置テーブルが、構文解析部2100が作成した配置テーブルの配置列1620の最終列を含むものであるか否かを判断する。qが値numと一致する場合は、最終列を含むとしてS1209に進む。一方、qが値numと一致しない場合は、最終列を含まないとしてS1210に進む。
S1209において、構成情報分割部2200は、構文解析部2100が作成した配置テーブルの出力列1630を、u番目の分割配置テーブルの出力列1630にコピーする。この際、入力プログラムが対象とする動的再構成可能プロセッサの演算ユニットの列数Lが、出力プログラムが対象とする動的再構成可能プロセッサの演算ユニットの列数Nの倍数であるか否かを調べる。倍数である場合は、S1210に進む。一方、倍数でない場合は、出力列1630のエントリ1640のうち、配列が設定されているエントリ1640を特定する。次に、これと同行の、配置列1620のS+1列目からN列目までの各エントリ1640に、右側のエントリ1640(1列前の同行のエントリ1640)を入力、左側のエントリ1640(1列後の同行のエントリ1640)を出力、そして、演算種別をスルー命令とする設定情報を設定する。ここで、S=LmodNである。それから、S1210に進む。
S1210において、構成情報分割部2200は、カウント値qを1つインクリメントし、それから、カウント値uが値num未満であるか否かを調べる(S1211)。カウント値uが値num未満の場合は、未処理の配置テーブルリストが存在することを意味するので、カウント値uを1つインクリメントし(S1212)、その後、S1205に戻る。一方、カウント値uが値num以上の場合は、このフローを終了する。
図17は、図13に示す辞書および図15に示す配置テーブルに対して、図16に示すフローを実行した結果、新たに作成された辞書を説明するための図である。図示するように、配列"conf1"に対する辞書1560が削除され、配列"conf_1","conf_2"に対する辞書1560a、1560bが追加されている。また、配列"conf1"からポイントされていた32バイトの演算ユニット用構成情報1561は、前半16バイトの演算ユニット用構成情報1561aおよび後半16バイトの演算ユニット用構成情報1561bに分割され、それぞれ、配列"conf_1","conf_2"からポイントされている。
図18は、図13に示す辞書および図15に示す配置テーブルに対して、図16に示すフローを実行した結果、新たに作成された分割配置テーブルおよび配置テーブルリストを説明するための図である。出力プログラムが対象とする第1実施形態の動的再構成可能プロセッサ90の配置列数Nが2であるので、図13に示す辞書および図15に示す配置テーブルから、2つの配置テーブルリスト1701、1702と、2つの分割配置テーブル1601、1602が生成される。配置テーブルリスト1701、1702のフィールド1710には、それぞれ、分割配置テーブル1601、1602の先頭を指示すポインタが格納される。また、各分割配置テーブル1601、1602の入力列1610、出力列1630の各エントリ1640には、サイクル数「-1」が設定されている。
分割配置テーブル1601の配置列1620は、図15に示す配置テーブルの配置列1620の前半の2列を並べたものである。また、分割配置テーブル1601の出力列1630の各エントリ1640には、1列前(配置列1620の最終列)の同行のエントリ1640の出力が入力されるように、設定情報のフィールド1651に"connect"が登録され、フィールド1645に"in"が登録される(図9参照)。
分割配置テーブル1602の配置列1620は、図15に示す配置テーブルの配置列1620の後半の2列を並べたものである。また、分割配置テーブル1602の入力列1610の各エントリ1640には、順番上1つ前に位置する分割配置テーブル1601の配置列1620の最終列の各エントリ1640から、設定情報のフィールド1643、1649に登録されている1列後の同行のエントリ1640との配線状況をコピーしたものである。
図19は、遅延解析部2300の処理を説明するためのフロー図である。
先ず、遅延解析部2300は、構成情報分割部2200が作成した各分割配置テーブルの配置列1620中の各エントリ1640のサイクル数を0に初期化する。また、カウント値pを0に設定すると共に、カウント値uを1に設定する。また、構成情報分割部2200が作成したu番目の配置テーブルリストが指示す分割配置テーブルをUとする(S1301)。
次に、遅延解析部2300は、カウント値pを1つインクリメントする。それから、分割配置テーブルUの配置列1620中の1行1列目のエントリ1640をE1とする(S1303)。そして、エントリE1の設定情報(フィールド1645、1651の情報)に基づいて、当該エントリE1の1列前(入力列1610)の同行のエントリ1640との配線状況が"connect"且つ"in"であるか否かを調べる(S1304)。
S1304において、エントリE1の1列前の同行のエントリ1640との配線状況が"connect"且つ"in"でない場合、S1308に進む。一方、エントリE1の1列前の同行のエントリ1640との配線状況が"connect"且つ"in"である場合、カウント値pが1でないならば(S1305でNo)、S1307に進み、カウント値pが1であるならば(S1305でYes)、エントリE1の1列前の同行のエントリ1640のサイクル数を0に変更し(S1306)、それからS1307に進む。
S1307において、遅延解析部2300は、エントリE1のサイクル数を、エントリE1の1列前の同行のエントリ1640のサイクル数+1とし、S1308に進む。
S1308において、遅延解析部2300は、配置列1620の1列目に未処理(E1としていない)のエントリ1640が存在するか否かを調べ、存在する場合は、この未処理のエントリ1640をE1とし(S1309)、S1304に戻る。一方、存在しない場合は、S1310へ進む。
図20は、図19のS1303〜S1309の処理により、図18に示す第1番目の分割配置テーブル1601において、配置列1620の第1列目および入力列1610の各エントリ1640のサイクル数が更新された様子を示している。図示するように、配置列1620の1列目の1行目、3行目、4行目に、入力列からの入力がある。このため、これらのエントリ1640のサイクル数が0から1に更新され、これらと同行の入力列のエントリ1640のサイクル数が-1から0に更新される(更新部分A)。
さて、S1310において、遅延解析部2300は、分割配置テーブルUの配置列1620中の1行1列目のエントリ1640をE2とする(S1303)。次に、遅延解析部2300は、エントリE2のサイクル数が0より大きいか否かを調べる(S1311)。0より大きい場合はS1312に進み、0以下の場合はS1313に進む。
S1312において、遅延解析部2300は、エントリE2の設定情報に基づいて、当該エントリE2に隣接するエントリ1640のうち、配線状況が"connect"且つ"状況がout"となるエントリ1640を特定し、特定した全てのエントリ1640のサイクル数をエントリE2のサイクル数+1に変更する。但し、特定したエントリ1640の演算種別が遅延命令の場合は、このエントリ1640のサイクル数を、エントリE2のサイクル数+1+遅延命令による遅延サイクル数に変更する。それから、エントリE2のサイクル数を0に変更する。その後、S1313に進む。
S1313において、遅延解析部2300は、配置列1620にエントリE2に続く未処理(E2としていない)のエントリ1640が存在するか否かを調べ、存在する場合は、この未処理のエントリ1640をE2とし(S1314)、S1311に戻る。一方、存在しない場合は、配置列1620に、サイクル数が0より大きいサイクル数を持つエントリ1640が存在するか否かを調べる(S1315)。存在する場合は、S1310に戻り、存在しない場合はS1316に進む。
図21は、図19のS1310〜S1314の処理により、図20に示す第1番目の分割配置テーブル1601において、配置列1620の1列目の各エントリ1640が処理された様子を示している。配置列1620の1列目において、1行目、3行目、4行目のエントリ1640のサイクル数が1から0に変更され、2行目のエントリ1640のサイクル数が0から2へ変更される。また、配置列1620の2列目の2行目、3行目、4行目のエントリ1640のサイクル数がそれぞれ4、3、2に変更される。なお、2列目の2行目、3行目のエントリ1640は、演算種別が遅延命令であるので、1列目の同行のエントリの更新前のサイクル数+1に、遅延命令によるサイクル数が加えられる(更新部分B)。
図22は、図19のS1310〜S1315の処理により、図20に示す第1番目の分割配置テーブル1601において、配置列1620の各エントリ1640が処理され、その結果、出力列1630のエントリ1640が更新された様子を示している。出力列1630の各エントリ1640のサイクル数は、1行目から順番に、-1、5、4、3となる。また、配置列1620中の全てのエントリ1640のサイクル数が0となる(更新部分C)。
さて、S1316において、遅延解析部2300は、分割配置テーブルUの出力列1630の各エントリ1640のうち、-1以外のサイクル数を持つ各エントリ1640のサイクル数の最小値をmに設定する。そして、前記-1以外のサイクル数を持つ各エントリ1640のサイクル数からmを減算する。
次に、遅延解析部2300は、カウント値pが分割配置テーブルのテーブル数numと一致するか否かを調べ(S1317)。一致する場合は、分割配置テーブルUの出力列1630の内容を、次の分割配置テーブル(u+1番目の分割配置テーブル)の入力列1610のコピーし(S1318)、それから、S1319に進む。一致しない場合は、直ちにS1319に進む。
S1319において、遅延解析部2300は、カウント値uが分割配置テーブルのテーブル数num未満であるか否かを調べる。カウント値uがテーブル数num未満の場合は、未処理の配置テーブルリストが存在することを意味するので、カウント値uを1つインクリメントして(S1320)、その後、S1303に戻る。一方、カウント値uがテーブル数num以上の場合は、このフローを終了する。
図23は、図19のS1316〜S1318の処理により、図22に示す分割配置テーブルが処理された様子を示している。先ず、S1316により第1番目の分割配置テーブル1601の出力列1630の各エントリ1640のサイクル数が1行目から順に、-1、2、1、0に変更され(更新部分D)、まら、第2番目の分割配置テーブル1602の入力列1610に、第1番目の分割配置テーブル1601の出力列1630がコピーされている(更新部分E)。
図24は、図19の処理により、図22に示す第2番目の分割配置テーブル1602が処理された様子を示している。図示するように、第2番目の分割配置テーブル1602が対象となる場合、カウント値p=2であるので、S1306の処理は行われない。このため、第1番目の分割配置テーブル1601の出力列1630からコピーした内容はそのまま残る。それ以外は、第1番目の分割配置テーブル1601の場合と同様に処理される。その結果、配置列の各エントリ1640のサイクル数は0となり、出力列1630の各エントリ1640のサイクル数は、1行目から順に、-1、5、-1、-1となる(更新部分F)。
図25は、コード生成部2400の処理を説明するためのフロー図である。
先ず、コード生成部2400は、遅延解析部2300が作成した各分割配置テーブルの出力列1630において、0以上のサイクル数を持つエントリ1640のエントリ数の最大値を求め、これをtnとする。次に、一時配列"t_1"〜"t_tn"各々に対する辞書(tn個の辞書)を作成する。これらの辞書の要素数data_sizeは、第1番目の分割配置テーブルの入力列1610に設定される配列の要素数(図11に示す入力プログラムの場合は要素数100)と同じに設定する。次に、辞書記憶部3200に記憶されている構成報分割部2200で生成された辞書から、関数名および引数の宣言を生成し、出力プログラムに追加する。また、該辞書にある引数以外の全ての変数および一時配列"t_1"〜"t_tn"に対する宣言を生成し、出力プログラムに追加する。この際、配列"conf_i"に対する初期値として、配列"conf_i"に対する辞書からポイントされている構成情報を設定する(S1401)。
例えば、構成報分割部2200が生成した辞書が図13に示すものであり、遅延解析部2300が作成した分割配置テーブルが図24に示すものである場合、値tnは3となり、したがって一時配列"t_1"〜"t_3"に対する辞書が作成され、その要素数data_sizeは100となる。そして、S1401での処理の結果、出力プログラムとして、図26に示す記述3001〜3005が作成される。ここで、記述3001は関数名および引数の宣言、記述3002は引数配列の宣言、記述3003は一時配列"t_1"〜"t_3"の宣言、そして、記述3004、3005は、配列"conf_1","conf_2"各々に構成情報を初期設定するための記述である。
次に、コード生成部2400は、カウント値p、tを共に1に初期化する。そして、構成報分割部2200が作成したt番目の配置テーブルリストが指示す分割配置テーブルをTとする(S1402)。次に、コード生成部2400は、カウント値p=1ならば(S1403でYES)、引数配列"args"を初期化するための記述を生成し(図26の記述3006参照)、出力プログラムに追加する。また、分割配置テーブルTの入力列1610の第1行目のエントリ1640をG1とする(S1404)。それから、S1405に進む。一方、カウント値p=1でないならば、S1409に進む。
S1405において、コード生成部2400は、エントリG1のサイクル数が0以上であるか否かを調べる。そして、0以上であるならば、構成報分割部2200が生成した辞書からエントリG1にポイントされている配列の先頭アドレスn、要素数sを取得する。そして、引数配列"args"に、先頭アドレスを"n"とし、要素数を"s"とし、入力座標l(=エントリG1の行番号)からエントリG1にポイントされている配列を入力し、且つ、エントリG1と同行の遅延ユニットに、エントリG1に設定されているサイクル数分遅延させて出力することを設定するための記述を生成し、出力プログラムに追加する(S1406)。その後、S1407に進む。一方、エントリG1のサイクル数が0未満の場合は、直ちにS1407に進む。
S1407において、コード生成部2400は、分割配置テーブルTの入力列1610にエントリG1の次の行があるか否かを調べ、あるならば、この次の行のエントリ1640をG1とし(S1408)、S1405に戻る。
例えば、構成報分割部2200が生成した辞書が図13に示すものであり、遅延解析部2300が作成した分割配置テーブルが図24に示すものである場合、S1405〜S1408の処理により、図26に示す記述3007〜3009が作成される。ここで、記述3007は、引数配列"args"に、配列"a"の先頭アドレスをaとし、要素数を100とし、入力座標0から配列"a"の値を入力し、且つ、同行の遅延ユニットに0サイクル数分遅延させて出力することを設定するための記述である。記述3008は、引数配列"args"に、配列"b"の先頭アドレスをbとし、要素数を100とし、入力座標2から配列"b"の値を入力し、且つ、同行の遅延ユニットに0サイクル数分遅延させて出力することを設定するための記述である。そして、記述3009は、引数配列"args"に、配列"c"の先頭アドレスをcとし、要素数を100とし、入力座標3から配列"c"の値を入力し、且つ、同行の遅延ユニットに0サイクル数分遅延させて出力することを設定するための記述である。
一方、S1407において、分割配置テーブルTの入力列1610にエントリG1の次の行がない場合、コード生成部2400は、S1405〜S1408で設定した各配列に関する情報をロードユニット用構成情報メモリおよび遅延ユニット用構成情報メモリに設定するための関数呼出しを生成し(図26の記述3010参照)、出力プログラムに追加する。また、引数配列"args"を初期化するための記述を生成し(図26の記述3011参照)、出力プログラムに追加する。それから、分割配置テーブルTの出力列1630の第1行目のエントリ1640をエントリG2とする(S1409)。その後、S1410に進む。
S1410において、コード生成部2400は、エントリG2のサイクル数が0以上であるか否かを調べる。そして、0以上であるならば、配列"t_w"の先頭アドレスn、要素数sを取得する。ここで、値wは、サイクル数が0以上であるエントリG2の出現回数である。次に、コード生成部2400は、引数配列"args"に、先頭アドレスを"n"とし、要素数を"s"とし、出力座標l(=エントリG2の行番号)から配列"t_w"が、エントリG2のサイクル数分遅延して出力することを設定するための記述を生成し、出力プログラムに追加する(S1411)。その後、S1412に進む。なお、分割配置テーブルTに次の分割配置テーブルがある場合、その入力列1610には、分割配置テーブルTの出力列1630の内容がコピーされている。したがって、分割配置テーブルTの出力列1630のエントリG2に対する記述が、次の分割配置テーブルの入力列1610のエントリG2と同行のエントリ1640に対する記述としても機能する。つまり、次の分割配置テーブルの入力列1610のエントリG2と同行のエントリ1640に対しては、引数配列"args"に、先頭アドレスを"n"とし、要素数を"s"とし、入力座標l(=エントリG2の行番号)から配列"t_w"を入力し、エントリG2と同行の遅延ユニットに、当該エントリG2のサイクル数分遅延させて出力することを設定するための記述として機能する。一方、エントリG2のサイクル数が0未満の場合は、直ちにS1412に進む。
S1412において、コード生成部2400は、分割配置テーブルTの出力列1630にエントリG2の次の行があるか否かを調べ、あるならば、この次の行のエントリ1640をG2とし(S1413)、S1410に戻る。
例えば、遅延解析部2300が作成した分割配置テーブルが図24に示すものである場合、S1410〜S1413の処理により、図26に示す記述3012〜3014が作成される。ここで、記述3012は、引数配列"args"に、配列"t_1"の先頭アドレスをt_1とし、要素数を100とし、出力座標0から配列"t_1"の値が2サイクル数分遅延して出力することを設定するための記述である。記述3013は、引数配列"args"に、配列"t_2"の先頭アドレスをt_2とし、要素数を100とし、出力座標2から配列"t_2"の値が1サイクル数分遅延して出力することを設定するための記述である。そして、記述3014は、引数配列"args"に、配列"t_3"の先頭アドレスをt_3とし、要素数を100とし、出力座標3から配列"t_3"の値が0サイクル数分遅延して出力することを設定するための記述である。
一方、S1412において、分割配置テーブルTの出力列1630にエントリG2の次の行がない場合、コード生成部2400は、S1410〜S1413で設定した各配列に関する情報をストアユニット用構成情報メモリに設定するための関数呼出しを生成し(図26の記述3015参照)、出力プログラムに追加する。また、初期値設定された配列"conf_t"に関する情報を演算ユニット用構成情報メモリに設定するための関数呼出しを生成し(図26の記述3016参照)、出力プログラムに追加する。さらに、動的再構成可能プロセッサをホストプロセッサから起動するための関数呼出しと、動的再構成可能プロセッサの実行の終了をホストプロセッサ側から待つための関数呼出しとを生成し(図26の記述3017、3018参照)、出力プログラムに追加する(S1413)。
次に、コード生成部2400は、カウント値tが分割配置テーブルのテーブル数num未満であるか否かを調べる(S1414)。カウント値tがテーブル数num未満の場合は、未処理の配置テーブルリストが存在することを意味するので、カウント値p、tをそれぞれ1つインクリメントして(S1415)、その後、S1403に戻る。一方、カウント値tがテーブル数num以上の場合は、このフローを終了する。
例えば、遅延解析部2300が作成した分割配置テーブルが図24に示すものである場合、2番目の配置テーブルリスト1702が指示す分割配置テーブル1602を処理するべく、S1403〜S1415が2回実行される。しかし、2回目の処理では、S1403でp=2でるため、S1409以降のみが実行され、S1404〜S1408は実行されない。その結果、図26に示すように、記述3010〜3018に相当する記述3019〜3025のみが出力プログラムに追加され、記述S3006〜S3009に相当する記述は追加されない。
図27(A)は、図26に示す出力プログラムを、図1に示す第1実施形態の動的再構成可能プロセッサ90に実行させた場合のタイムチャートを示しており、図27(B)は、図11に示す入力プログラムを図28に示す既存の動的再構成可能プロセッサ900に実行させた場合のタイムチャートを示している。
入力プログラムの場合、図15に示す構文解析直後の配置テーブルから分かるように、入力データが7サイクルで出力される。このため、図27(B)に示すように、配列"a","b","c"の各要素a[1],b[1],c[1]は、第7サイクルで配列"x"の要素x[1]に格納される(T4000)。同様にして、a[100],b[100],c[100]は第106サイクルでx[100]に格納される(T4005)。
一方、出力プログラムの場合、図22に示す遅延解析中の配置テーブルから分かるように、1番目の分割配置テーブルの出力列におけるサイクル数の最大値が5なので、図27(A)に示すように、配列"a","b","c"の各要素a[1],b[1],c[1]は、第5サイクルで各々配列"t_1","t_2","t_3"の要素t_1[1],t_2[2],t_3[3](局所メモリ40)に格納される(T4010)。同様にして、a[100],b[100],c[100]は第104サイクルでt_1[100],t_2[100],t_3[100]に格納される(T4015)。そして、この直後に、動的再構成可能プロセッサの構成情報が、1番目の分割配置テーブルに基づくものから2番目の分割配置テーブルに基づくものに変更される(T4100)。図27(A)に示す例では、第105サイクルで開始して、第106サイクルで完了したことを表わしている。
次に、t_1[1],t_2[1],t_3[1]は1サイクルで局所メモリ40からロードされ、第107サイクルでロードユニット61に入力される。図24に示すように、2番目の分割配置テーブルの入力列1610の第4行目に0サイクルの遅延で入力されたデータが5サイクルで出力列1630の第2行目に到達する。したがって、第107サイクルに入力されたt_1[1],t_2[1],t_3[1]、は第112サイクルで配列"x"の要素x[1]に格納される(T4200)。同様にして、t_1[100],t_2[100],t_3[100]は第211サイクルでx[100]に格納される(T4205)。
このように、本実施形態のコンパイラ装置によれば、第1実施形態の動的再構成可能プロセッサよりの演算ユニットの列数の多い既存の動的再構成可能プロセッサ向けのプログラムを有効利用して、第1実施形態の動的再構成可能プロセッサ向けのプログラムを自動的に得ることができる。
10・・・ホストプロセッサ、20・・・メモリ、30・・・バス、40・・・局所メモリ、50・・・構成情報格納部、51・・・ロードユニット用構成情報メモリ、52・・・遅延ユニット用構成情報メモリ、53・・・演算ユニット用構成情報メモリ、54・・・ストアユニット用構成情報メモリ、60・・・演算部、61・・・ロードユニット、62・・・遅延ユニット、63・・・演算ユニット、64・・・ストアユニット、2000・・・演算部、2100・・・構文解析部、2200・・・構成情報分割部、2300・・・遅延解析部、2400・・・コード生成部、3000・・・記憶部、3100・・・入力プログラム記憶部、3200・・・辞書記憶部、3300・・・配置テーブル記憶部、3400・・・出力プログラム記憶部、4000・・・入出力部
Claims (6)
- 設定された構成情報に従って入出力先および演算内容を切り替え可能な演算ユニットが、M行N列(但し、M≧2、N≧1)に配列されて構成された、動的再構成可能プロセッサであって、
設定された構成情報に従って1列目の演算ユニットへのデータ入力を遅延させる遅延ユニットを有すること
を特徴とする動的再構成可能プロセッサ。 - 請求項1に記載の動的再構成可能プロセッサであって、
1列目の演算ユニット毎に設けられた、当該演算ユニットへ入力するデータをメモリからロードする、M個のロードユニットと、
N列目の演算ユニット毎に設けられた、当該演算ユニットから出力するデータを前記メモリにストアする、M個のストアユニットと、を備え、
少なくとも2つの前記ロードユニットは、同列の前記ストアユニットが互いに異なるサイクルで前記メモリにストアしたデータを、前記メモリからロードし、
前記遅延ユニットは、前記少なくとも2つのロードユニットがロードしたデータが前記異なるサイクルにより特定されるサイクル差で1列目の対応する演算ユニットに入力するように、当該対応する演算ユニットへのデータ入力を遅延させること
を特徴とする動的再構成可能プロセッサ。 - 請求項1又は2記載の動的再構成可能プロセッサと、
前記動的再構成可能プロセッサに構成情報を設定すると共に、前記動的再構成可能プロセッサとデータを入出力するための局所メモリと、
前記動的再構成可能プロセッサに設定する構成情報および前記動的再構成可能プロセッサに投入するデータが記憶されたメモリと、
前記メモリに記憶された構成情報およびデータを前記局所メモリに転送するホストプロセッサと、を有すること
を特徴とする情報処理装置。 - 動的再構成可能プロセッサを構成するM行L列の演算ユニットに設定する構成情報を含む入力プログラムを、請求項1又は2に記載の動的再構成可能プロセッサを構成する遅延ユニットおよびM行N(但しN<L)列の演算ユニットに設定する構成情報を含む出力プログラムに変換するコンパイラ装置であって、
前記入力プログラムを記憶する入力プログラム記憶手段と、
前記入力プログラムに含まれる前記M行L列の演算ユニットの構成情報をN列毎に分割して、num(但し、numはM/Nより大きい最小の整数)回分の前記M行N列の演算ユニットの構成情報(分割構成情報と呼ぶ)を生成する構成情報分割手段と、
u回目の分割構成情報を前記M行N列の演算ユニットに設定した場合にN列目の演算ユニットから出力される各データの出力サイクルのサイクル差を算出する処理を、前記uが1からnum-1となるまで繰り返す遅延解析手段と、
t回目の分割構成情報が設定された前記M行N列の演算ユニットのN列目から出力される各データが、前記遅延解析手段により算出された当該各データの出力サイクルのサイクル差で前記M行N列の演算ユニットの1列目に入力されるように、前記遅延ユニットを制御するための構成情報を、K+1回目の分割構成情報に含める処理を、tが1からnum-1となるまで繰り返して、num回分の分割構成情報を含む出力プログラムを生成するプログラム出力手段と、を有すること
を特徴とするコンパイラ装置。 - コンピュータで読取り可能なプログラムであって、
前記プログラムは、動的再構成可能プロセッサを構成するM行L列の演算ユニットに設定する構成情報を含む入力プログラムを、請求項1又は2に記載の動的再構成可能プロセッサを構成する遅延ユニットおよびM行N(但しN<L)列の演算ユニットに設定する構成情報を含む出力プログラムに変換するプログラムであり、
前記コンピュータに、
前記入力プログラムを記憶する入力プログラム記憶手段、
前記入力プログラムに含まれる前記M行L列の演算ユニットの構成情報をN列毎に分割して、num(但し、numはM/Nより大きい最小の整数)回分の前記M行N列の演算ユニットの構成情報(分割構成情報と呼ぶ)を生成する構成情報分割手段、
u回目の分割構成情報を前記M行N列の演算ユニットに設定した場合にN列目の演算ユニットから出力される各データの出力サイクルのサイクル差を算出する処理を、前記uが1からnum-1となるまで繰り返す遅延解析手段、そして、
t回目の分割構成情報が設定された前記M行N列の演算ユニットのN列目から出力される各データが、前記遅延解析手段により算出された当該各データの出力サイクルのサイクル差で前記M行N列の演算ユニットの1列目に入力されるように、前記遅延ユニットを制御するための構成情報を、K+1回目の分割構成情報に含める処理を、tが1からnum-1となるまで繰り返して、num回分の分割構成情報を含む出力プログラムを生成するプログラム出力手段として、機能させること
を特徴とするコンピュータで読取り可能なプログラム。 - コンパイラ装置が、動的再構成可能プロセッサを構成するM行L列の演算ユニットに設定する構成情報を含む入力プログラムを、請求項1又は2に記載の動的再構成可能プロセッサを構成する遅延ユニットおよびM行N(但しN<L)列の演算ユニットに設定する構成情報を含む出力プログラムに変換する変換方法であって、
前記入力プログラムに含まれる前記M行L列の演算ユニットの構成情報をN列毎に分割して、num(但し、numはM/Nより大きい最小の整数)回分の前記M行N列の演算ユニットの構成情報(分割構成情報と呼ぶ)を生成し、記憶手段に記憶する構成情報分割ステップと、
前記記憶手段に記憶された構成情報を読み出し、u回目の分割構成情報を前記M行N列の演算ユニットに設定した場合にN列目の演算ユニットから出力される各データの出力サイクルのサイクル差を算出し、前記記憶手段に記憶する処理を、前記uが1からnum-1となるまで繰り返す遅延解析ステップと、
前記記憶手段に記憶された構成情報およびサイクル差を読み出し、t回目の分割構成情報が設定された前記M行N列の演算ユニットのN列目から出力される各データが、前記遅延解析手段により算出された当該各データの出力サイクルのサイクル差で前記M行N列の演算ユニットの1列目に入力されるように、前記遅延ユニットを制御するための構成情報を、K+1回目の分割構成情報に含める処理を、tが1からnum-1となるまで繰り返して、num回分の分割構成情報を含む出力プログラムを生成するプログラム出力ステップと、を行うこと
を特徴とする変換方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2004108827A JP2005293342A (ja) | 2004-04-01 | 2004-04-01 | 動的再構成可能プロセッサおよびコンパイラ装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2004108827A JP2005293342A (ja) | 2004-04-01 | 2004-04-01 | 動的再構成可能プロセッサおよびコンパイラ装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2005293342A true JP2005293342A (ja) | 2005-10-20 |
Family
ID=35326191
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2004108827A Pending JP2005293342A (ja) | 2004-04-01 | 2004-04-01 | 動的再構成可能プロセッサおよびコンパイラ装置 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2005293342A (ja) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR100730280B1 (ko) * | 2005-12-06 | 2007-06-19 | 삼성전자주식회사 | 재구성 프로세서에서 루프 버퍼를 최적화하기 위한 장치 및방법 |
US8645955B2 (en) | 2006-06-12 | 2014-02-04 | Samsung Electronics Co., Ltd. | Multitasking method and apparatus for reconfigurable array |
KR101390974B1 (ko) | 2008-01-30 | 2014-05-02 | 삼성전자주식회사 | 다중 모드를 제공하는 재구성 가능한 장치 및 방법 |
-
2004
- 2004-04-01 JP JP2004108827A patent/JP2005293342A/ja active Pending
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR100730280B1 (ko) * | 2005-12-06 | 2007-06-19 | 삼성전자주식회사 | 재구성 프로세서에서 루프 버퍼를 최적화하기 위한 장치 및방법 |
US8645955B2 (en) | 2006-06-12 | 2014-02-04 | Samsung Electronics Co., Ltd. | Multitasking method and apparatus for reconfigurable array |
KR101390974B1 (ko) | 2008-01-30 | 2014-05-02 | 삼성전자주식회사 | 다중 모드를 제공하는 재구성 가능한 장치 및 방법 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Page et al. | Compiling Occam into field-programmable gate arrays | |
JP5763783B2 (ja) | 正規表現をコンパイルするための方法および装置 | |
US8930922B2 (en) | Software-to-hardware compiler with symbol set inference analysis | |
US11714780B2 (en) | Compiler flow logic for reconfigurable architectures | |
DE102018006791A1 (de) | Prozessoren, Verfahren und Systeme mit einem konfigurierbaren räumlichen Beschleuniger mit einem Sequenzer-Datenflussoperator | |
US10599404B1 (en) | M/A for compiling parallel program having barrier synchronization for programmable hardware | |
JPH06250846A (ja) | コンパイル装置 | |
JPH10143334A (ja) | プリンタ及びプリンタにインタプリタをダウンロードさせる方法 | |
JPS61276032A (ja) | 情報処理装置 | |
TW518511B (en) | Method of executing an interpreter program | |
US9594668B1 (en) | Debugger display of vector register contents after compiler optimizations for vector instructions | |
CA2081473A1 (en) | Analyzing inductive expressions in a multilanguage optimizing compiler | |
Shapiro | Validation of a VLSI chip using hierarchical colored Petri nets | |
JP2005293342A (ja) | 動的再構成可能プロセッサおよびコンパイラ装置 | |
US20160110200A1 (en) | Flexible instruction execution in a processor pipeline | |
US20210142144A1 (en) | Multi-size convolutional layer | |
US20230325312A1 (en) | Merging Buffer Access Operations in a Coarse-grained Reconfigurable Computing System | |
Leupers et al. | Instruction set extraction from programmable structures | |
US11635947B2 (en) | Instruction translation support method and information processing apparatus | |
Rjabov et al. | Interactions of Zynq-7000 devices with general purpose computers through PCI-express: A case study | |
JPH07129399A (ja) | 命令属性レジスターを使用して多機能命令を実行する マイクロコンピュータ | |
JP3284522B2 (ja) | プログラム生成装置 | |
US7774748B1 (en) | System and method for automatic conversion of a partially-explicit instruction set to an explicit instruction set | |
JPH11242598A (ja) | コンパイル方法およびコンパイル装置ならびにオブジェクトプログラム実行方法およびオブジェクトプログラム実行装置ならびにプログラム記憶媒体 | |
US20240020264A1 (en) | Estimating a Scaled Cost of Implementing an Operation Unit Graph on a Reconfigurable Processor |