JP4594957B2 - コンパイル装置 - Google Patents

コンパイル装置 Download PDF

Info

Publication number
JP4594957B2
JP4594957B2 JP2007122809A JP2007122809A JP4594957B2 JP 4594957 B2 JP4594957 B2 JP 4594957B2 JP 2007122809 A JP2007122809 A JP 2007122809A JP 2007122809 A JP2007122809 A JP 2007122809A JP 4594957 B2 JP4594957 B2 JP 4594957B2
Authority
JP
Japan
Prior art keywords
data
block
scale factor
group
source program
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.)
Expired - Fee Related
Application number
JP2007122809A
Other languages
English (en)
Other versions
JP2007200363A (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.)
Asahi Kasei Corp
Original Assignee
Asahi Kasei 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 Asahi Kasei Corp filed Critical Asahi Kasei Corp
Priority to JP2007122809A priority Critical patent/JP4594957B2/ja
Publication of JP2007200363A publication Critical patent/JP2007200363A/ja
Application granted granted Critical
Publication of JP4594957B2 publication Critical patent/JP4594957B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Landscapes

  • Devices For Executing Special Programs (AREA)

Description

本発明は、ソースプログラムを翻訳してオブジェクトプログラムを生成する装置に係り、特に、ブロックフローティング方式による演算をソフトウェアで行う場合において、ソースプログラムにおける演算の記述を容易とし、ソースプログラムの記述を簡素化してバグの発生を低減するのに好適なコンパイル装置に関する。
デジタル信号処理における数値表現方法として、固定小数点表現または浮動小数点表現がある。
浮動小数点表現では、各データが指数部と仮数部をもち、これにより、高い精度と広いダイナミックレンジが確保可能という利点がある反面、複雑で大規模なハードウェアが必要となるという問題がある。一方、固定小数点表現では、ハードウェアが簡単で回路規模も小さくてすむが、演算精度の低下が問題となる。
そこで、固定小数点表現における問題の対策法として提案されたのがブロックフローティングという方式である。この方式では、所定数(例えば、m個)のデータを1つのデータブロックとし、データブロックに対し1個のブロックスケールファクタをもたせ、データブロックのm個のデータに対し共通のスケーリングを行うことにより、限られたダイナミックレンジを有効に用いて精度の劣化を抑える。
ブロックフローティング方式による演算をソフトウェアで実現する場合には、所定のプログラム言語(例えば、C言語)によりソースプログラムを記述し、関連のコンパイラで翻訳してオブジェクトプログラムを生成し、生成したオブジェクトプログラムをコンピュータに実行させることにより行う。
しかしながら、ブロックフローティング方式による演算をソフトウェアで実現する場合、1または複数のデータを含んでデータグループを構成し、さらに複数のデータグループを含んでデータブロックを構成し、データブロックは、各データグループのグループスケールファクタおよびデータブロックのブロックスケールファクタを含むデータ構造を取り扱うこととなるため、ソースプログラムを記述する際には、そのデータ構造を構造体として定義しなければならない。したがって、ブロックフローティング方式による演算を記述するまでの準備が容易でない。
また、構造体の定義により構造化データを一つのまとまった変数として演算に使用することができるが、使用できるといっても一定の限度があり、構造体変数間の単純な代入や演算を行う程度しかできない。ここでいう単純な演算とは、同一構造体変数同士の演算、すなわち、データグループのデータ同士の演算、またはスケールファクタ同士の演算である。ブロックフローティング方式による演算を実現するには、スケールファクタに基づいてデータをスケーリングして演算を行う必要があるので、構造体変数間の単純な演算では不十分であり、演算の種別ごとに固有の関数を作成しなければならない。例えば、2つのデータブロック間のデータを加算する関数としてbfp_add(x1,x2)という関数をそれぞれ作成した場合、下式(1)の演算を行うには、下式(2)のように構造体変数を入籠型に記述しなければならない。下式(1),(2)において、A,B,Cは、ブロックフローティング方式のデータ構造を構造体として定義し、その定義に従ってソースプログラム中で作成した構造体変数(オブジェクト)である。
Y=A+B+C ・・・(1)
Y=bfp_add(bfp_add(A,B),C) ・・・(2)
したがって、ソースプログラムの記述が煩雑となり、バグの少ないプログラムを作成することが難しい。
さらに、オブジェクトプログラムの実行レベルにおいて複数のデータブロック間で加算を行う場合には、データブロック内の各データがスケーリングされていることから、加算時に、データブロック間でデータの桁位置を一致させなければならない。例えば、2つのデータブロック間で加算を行う場合に、一方のデータブロックについてグループスケールファクタが「2」であるデータA「0.1」と、他方のデータブロックについてグループスケールファクタが「3」であるデータB「0.11」とを加算するときは、データAを2ビット右シフトして「0.001」とするとともに、データBを3ビット右シフトして「0.00011」とした上でそれらを加算する。そして、再び正規化することにより、加算結果としては、グループスケールファクタが「2」で「0.111」のデータを得ることができる。
したがって、データブロック間で加算を行う場合には、データブロック内の各データを正規化し、さらにデータブロック間で各データを正規化しなければならず、演算処理が複雑となる。演算処理の複雑化は、演算負荷の増大、演算速度の低下、回路素子数の増加等の問題を生じさせる。なお、このことは、複数のデータブロック間で減算を行う場合についても同様である。
さらに、オブジェクトプログラムの実行レベルにおいて複数のデータブロック間で乗累算(複数の乗算結果を足し合わせてその総和を求める演算をいう。以下、同じ。)を行う場合には、例えば、データブロックA,Bを乗算し、その乗算結果とデータブロックCとを加算することを考えたときには、▲1▼データブロックA,Bの乗算、▲2▼乗算結果とデータブロックCとの桁合わせ(スケーリング)、および▲3▼乗算結果とデータブロックCとの加算という3つの手順を経る。しかし、乗算後にスケーリングを行うのは、スケーリングによる桁落ちを防止するため乗算時よりも余分なビット長を構造化変数に割り当てなければならず、演算時に必要なデータ容量が大きくなるばかりか、ビット長の変換を伴うことから演算効率が低下する可能性があった。
そこで、本発明は、このような従来の技術の有する未解決の課題に着目してなされたものであって、ブロックフローティング方式による演算をソフトウェアで行う場合において、ソースプログラムにおける演算の記述を容易とし、ソースプログラムの記述を簡素化してバグの発生を低減するのに好適なコンパイル装置を提供することを第1の目的としている。また、ブロックフローティング方式による加算または減算をソフトウェアで行う場合において、演算処理の簡素化を図るのに好適なコンパイル装置を提供することを第2の目的としている。また、ブロックフローティング方式による乗累算をソフトウェアで行う場合において、演算に必要なデータ容量を低減するとともに、演算効率を向上するのに好適なコンパイル装置を提供することを第3の目的としている。
〔発明1〕 上記目的を達成するために、発明1のコンパイル装置は、データ型としてブロックフローティング型のブロックフローティング変数を用いて演算式を記述したソースプログラムが与えられたときに、与えられたソースプログラムをオブジェクトプログラムに翻訳するコンパイル装置であって、
前記ブロックフローティング変数は、1又は複数のデータを含んで構成されたデータグループと、前記データグループに含まれる各データに共通の指数である各データグループのグループスケールファクタと、複数の前記データグループを含んで構成されたデータブロックに含まれる各データグループに共通の指数であるブロックスケールファクタと、を含んで構成されたデータブロックのデータ構造を表す変数であり、
前記ソースプログラムのなかから前記演算式を検出する演算式検出手段と、前記演算式検出手段で検出した演算式に基づいて、演算の対象となる前記ブロックフローティング変数に対応するデータブロックを用いた演算を行う処理を構成する所定の命令コードとして展開する演算式展開手段と、前記演算式展開手段で展開した命令コードを前記オブジェクトプログラムに変換するオブジェクトコード変換手段とを備える。
このような構成であれば、ブロックフローティング変数を用いて演算式を記述したソースプログラムが与えられると、演算式検出手段により、与えられたソースプログラムのなかから演算式が検出され、演算式展開手段により、検出された演算式が所定の命令コードとして展開される。そして、オブジェクトコード変換手段により、展開された命令コードがオブジェクトプログラムに変換される。
本発明によれば、ブロックフローティング変数を用いて演算式を記述したソースプログラムが与えられると、演算式検出手段により、与えられたソースプログラムのなかから演算式が検出され、演算式展開手段により、検出された演算式が所定の命令コードとして展開される。そして、オブジェクトコード変換手段により、展開された命令コードがオブジェクトプログラムに変換される。
以下、本発明の実施の形態を図面を参照しながら説明する。図1ないし図5は、本発明に係るデータ演算処理装置の実施の形態を示す図である。
本実施の形態は、本発明に係るコンパイル装置を、図1に示すように、コンピュータ100において、ブロックフローティング方式による演算式を記述したソースプログラムを翻訳し、コンピュータ100が実行可能なオブジェクトプログラムを生成する場合について適用したものである。以下、翻訳・生成のことをコンパイルと総称する。
まず、コンピュータ100の構成を図1を参照しながら詳細に説明する。図1は、コンピュータの構成を示すブロック図である。
コンピュータ100は、図1に示すように、制御プログラムに基づいて演算およびシステム全体を制御するCPU30と、所定領域にあらかじめCPU30の制御プログラム等を格納しているROM32と、ROM32等から読み出したデータやCPU30の演算過程で必要な演算結果を格納するためのRAM34と、外部装置に対してデータの入出力を媒介するI/F38とで構成されており、これらは、データを転送するための信号線であるバス39で相互にかつデータ授受可能に接続されている。
I/F38には、外部装置として、ヒューマンインターフェースとしてデータの入力が可能なキーボードやマウス等からなる入力装置40と、データやテーブル等をファイルとして格納する記憶装置42と、画像信号に基づいて画面を表示する表示装置44とが接続されている。
記憶装置42には、ソースプログラムおよびオブジェクトプログラムがファイル形式で格納される。本発明のコンパイル対象となるソースプログラムは、所定のプログラム言語(例えば、C言語)により記述することができるほか、ブロックフローティング方式による演算式をブロックフローティング変数を用いて記述することができる。ここで、ブロックフローティング変数とは、ブロックフローティング方式のデータ構造を表す変数である。ブロックフローティング方式のデータ構造は、図2に示すように、k個のデータを含んでデータグループを構成し、さらに複数のデータグループを含んでデータブロックを構成し、データブロックは、各データグループのグループスケールファクタおよびデータブロックのブロックスケールファクタを含む。図2は、ブロックフローティング方式のデータ構造を示す図である。
また、ブロックフローティング変数の特徴は、ブロックフローティング方式のデータ構造を、グループスケールファクタおよびブロックスケールファクタを明示せずに表す点である。例えば、データブロックのデータグループ数を「3」、各データグループのデータ数を「2」とした場合、ブロックフローティング変数は、ソースプログラム中で下式(3)に示すように定義することができる。この場合、グループスケールファクタを3つ、ブロックスケールファクタを1つ伴うが、ソースプログラム中ではそれらを明示する必要はない。これにより、ソースプログラムの記述を簡素化することができる。
bfloat A[3][2]; ・・・(3)
CPU30は、マイクロプロセッシングユニットMPU等からなり、ROM32の所定領域に格納されている所定のプログラムを起動させ、そのプログラムに従って、図3のフローチャートに示すブロックフローティングコンパイル処理を実行するようになっている。図3は、ブロックフローティングコンパイル処理を示すフローチャートである。
ブロックフローティングコンパイル処理は、ブロックフローティング変数を用いて演算式を記述したソースプログラムが与えられたときに、与えられたソースプログラムをコンパイルする処理であって、CPU30において実行されると、図3に示すように、まず、ステップS100に移行するようになっている。
ステップS100では、ソースプログラムを入力し、字句解析、構文解析および意味解析を行い、解析結果を中間言語、記号表等の形式で格納し、ステップS104に移行する。
ステップS104では、ステップS100の解析結果のなかから加算を行う演算式が存在するか否かを判定し、加算を行う演算式が存在すると判定したとき(Yes)は、ステップS106に移行して、解析結果に含まれる演算式のうち加算に係る部分について、加算の対象となる複数のブロックフローティング変数に対応するデータブロックを用いた加算を行う処理を構成する命令コードとして展開する。なお、ステップS106で展開する命令コードにより構成される処理については、その具体的な構成を後段で詳述する。
次いで、ステップS108に移行して、ステップS100の解析結果のなかから乗累算を行う演算式が存在するか否かを判定し、乗累算を行う演算式が存在すると判定したとき(Yes)は、ステップS110に移行して、解析結果に含まれる演算式のうち乗累算に係る部分について、乗累算の対象となる複数のブロックフローティング変数に対応するデータブロックを用いた乗累算を行う処理を構成する命令コードとして展開する。ステップS110で展開する命令コードにより構成される処理については、その具体的な構成を後段で詳述する。
次いで、ステップS112に移行して、ステップS104〜S110以外の他のコンパイル処理を実行し、ステップS114に移行して、ステップS106,110で生成した命令コードをオブジェクトプログラムに埋め込み、オブジェクトプログラムを生成して出力し、一連の処理を終了する。
一方、ステップS104で、読み込んだプログラム行のなかから加算を行う演算式が存在しないと判定したとき(No)は、ステップS108に移行する。
一方、ステップS108で、読み込んだプログラム行のなかから乗累算を行う演算式が存在しないと判定したとき(No)は、ステップS112に移行する。
次に、上記ステップS106で展開する命令コードにより構成される処理を図4を参照しながら詳細に説明する。図4は、ステップS106で展開する命令コードにより構成される処理の一例を示すフローチャートである。
命令コードにより構成される処理は、ブロックフローティング方式による演算式のうち加算に係る部分について展開したオブジェクトプログラムの一部をなす処理であって、DSPにおいて実行されると、図4に示すように、まず、ステップS200に移行するようになっている。なお、図4は、ソースプログラムにおける下式(4)に示す加算式を展開したときに得られるコンパイル結果である。下式(4)において、A,B,C,Yは、ブロックフローティング変数であり、オブジェクトプログラムにおいてブロックフローティング変数A,B,Cは、データブロックA,B,Cにそれぞれ対応する。
Y=A+B+C ・・・(4)
ステップS200では、データブロックA,B,Cのブロックスケールファクタを読み込み、ステップS202に移行して、読み込んだブロックスケールファクタのうち絶対値が最大のデータを含むデータブロックのものを共通ブロックスケールファクタとして選択し、ステップS204に移行する。
ステップS204では、データブロックAの先頭のグループスケールファクタを読み込み、ステップS206に移行して、読み込んだグループスケールファクタと共通ブロックスケールファクタとの差分からなる差分スケールファクタを算出し、ステップS208に移行して、算出した差分スケールファクタに相当するシフト量でデータグループの各データに対して右シフトを行い、ステップS210に移行する。
ステップS210では、データブロックAのすべてのデータグループについてステップS106,S108の処理を行ったか否かを判定し、すべてのデータグループについて処理を行ったと判定したとき(Yes)は、ステップS214に移行するが、そうでないと判定したとき(No)は、ステップS212に移行して、データブロックAの次のグループスケールファクタを読み込み、ステップS206に移行する。
ステップS214では、データブロックBについてステップS204からS212までの処理と同様のスケーリングを行い、ステップS216に移行して、データブロックCについてステップS204からS212までの処理と同様のスケーリングを行い、ステップS218に移行する。
ステップS218では、データブロックA,B,Cの各データを加算し、ステップS220に移行して、ステップS218での加算結果をデータブロックYに格納し、ステップS222に移行して、データブロックYの各データを正規化し、一連の処理を終了する。
なお、ステップS222での正規化は、データグループのデータのうち絶対値が最大のものについて、最上位ビットから連続する「0」の個数を算出してこれをグループスケールファクタとし、データグループの各データを、グループスケールファクタに相当するシフト量で左シフトする。これをグループ正規化といい、データブロックのすべてのデータグループについて行う。各データグループの正規化が終了すると、グループスケールファクタのうち最小のものをブロックスケールファクタとする。この一連の処理をブロック正規化といい、単に正規化ということもある。以下、ステップS338において同じである。
次に、上記ステップS110で展開する命令コードにより構成される処理を図5を参照しながら詳細に説明する。図5は、ステップS110で展開する命令コードにより構成される処理の一例を示すフローチャートである。
命令コードにより構成される処理は、ブロックフローティング方式による演算式のうち乗累算に係る部分について展開したオブジェクトプログラムの一部をなす処理であって、DSPにおいて実行されると、図5に示すように、まず、ステップS300に移行するようになっている。なお、図5は、下式(5)に示す累乗算式を実現しようとする場合に、ソースプログラムにおいてその基本演算単位となる下式(6)に示す乗累算式を展開したときに得られるコンパイル結果である。下式(5),(6)において、S、Ai,Bi,A,B,C,Yは、ブロックフローティング変数であり、オブジェクトプログラムにおいてブロックフローティング変数A,B,Cは、データブロックA,B,Cにそれぞれ対応する。
Figure 0004594957
Figure 0004594957
ステップS300では、データブロックA,B,Cのブロックスケールファクタを読み込み、ステップS302に移行して、データブロックA,Bのブロックスケールファクタの和である乗算結果ブロックスケールファクタと、データブロックCのブロックスケールファクタとの差分からなる補正ブロックスケールファクタを算出し、ステップS304に移行して、補正ブロックスケールファクタの符号に基づき、データブロックCがデータブロックAとBの乗算結果データブロックよりも絶対値が大きいデータを含むか否かを判定し、データブロックCが絶対値が大きいデータを含むと判定したとき(Yes)は、ステップS306に移行する。
ステップS306では、データブロックAの先頭のグループスケールファクタを読み込み、ステップS308に移行して、読み込んだグループスケールファクタとデータブロックAのブロックスケールファクタとの差分からなる差分スケールファクタを算出し、ステップS310に移行して、算出した差分スケールファクタに補正ブロックスケールファクタを加算し、ステップS312に移行して、加算を行った差分スケールファクタに相当するシフト量でデータグループの各データに対して右シフトを行い、ステップS314に移行する。
ステップS314では、データブロックAのすべてのデータグループについてステップS308からS312までの処理を行ったか否かを判定し、すべてのデータグループについて処理を行ったと判定したとき(Yes)は、ステップS318に移行するが、そうでないと判定したとき(No)は、ステップS316に移行して、データブロックAの次のグループスケールファクタを読み込み、ステップS308に移行する。
ステップS318では、データブロックCの先頭のグループスケールファクタを読み込み、ステップS320に移行して、読み込んだグループスケールファクタとデータブロックCのブロックスケールファクタとの差分からなる差分スケールファクタを算出し、ステップS322に移行して、算出した差分スケールファクタに相当するシフト量でデータグループの各データに対して右シフトを行い、ステップS324に移行する。
ステップS324では、データブロックCのすべてのデータグループについてステップS320,S322の処理を行ったか否かを判定し、すべてのデータグループについて処理を行ったと判定したとき(Yes)は、ステップS328に移行するが、そうでないと判定したとき(No)は、ステップS326に移行して、データブロックCの次のグループスケールファクタを読み込み、ステップS320に移行する。
ステップS328では、データブロックBについてステップS318からS326までの処理と同様のスケーリングを行い、ステップS330に移行して、データブロックA,Bの各データを乗算し、ステップS332に移行して、ステップS330での乗算結果をデータブロックXに格納し、ステップS334に移行する。
ステップS334では、データブロックX,Cの各データを加算し、ステップS336に移行して、ステップS334での加算結果をデータブロックYに格納し、ステップS338に移行して、データブロックYの各データを正規化し、一連の処理を終了する。
一方、ステップS304で、データブロックCが絶対値が大きいデータを含まないと判定したとき(No)は、ステップS340に移行して、データブロックCについてステップS306からS316までの処理と同様のスケーリングを行い、ステップS342に移行して、データブロックAについてステップS318からS326までの処理と同様のスケーリングを行い、ステップS328に移行する。
次に、上記実施の形態の動作を説明する。
まず、上式(4)に示す加算式を記述したソースプログラムをコンパイルする場合を説明する。
コンピュータ100では、上式(4)に示す加算式を記述したソースプログラムがユーザにより与えられると、CPU30により、ステップS100,S104,S106を経て、与えられたソースプログラムのなかから加算を行う演算式が検出され、検出された演算式のうち加算に係る部分について、加算の対象となる複数のブロックフローティング変数に対応するデータブロックを用いた加算を行う処理を構成する命令コードとして展開される。そして、ステップS114を経て、展開された命令コードがオブジェクトプログラムに埋め込まれ、オブジェクトプログラムが生成・出力される。
したがって、オブジェクトプログラムが実行されると、演算式のうち加算に係る部分については、ステップS200,S202を経て、まず、データブロックA,B,Cのブロックスケールファクタのうち絶対値が最大のデータを含むデータブロックのものが共通ブロックスケールファクタとして選択される。そして、ステップS204〜S222を経て、データブロックA,B,Cの各データグループごとに、そのデータグループのグループスケールファクタと共通ブロックスケールファクタとの差分からなるスケールファクタに基づいて、そのデータグループの各データに対してスケーリングが行われ、スケーリングが行われた各データブロックA,B,Cのデータが加算される。
次に、上式(6)に示す乗累算式を記述したソースプログラムをコンパイルする場合を説明する。
コンピュータ100では、上式(6)に示す乗累算式を記述したソースプログラムがユーザにより与えられると、CPU30により、ステップS100,S108,S110を経て、与えられたソースプログラムのなかから乗累算を行う演算式が検出され、検出された演算式のうち乗累算に係る部分について、乗算の対象となる2つのブロックフローティング変数に対応するデータブロックA,B、および加算の対象となるブロックフローティング変数に対応するデータブロックCを用いた乗累算を行う処理を構成する命令コードとして展開される。そして、ステップS114を経て、展開された命令コードがオブジェクトプログラムに埋め込まれ、オブジェクトプログラムが生成・出力される。
したがって、オブジェクトプログラムが実行されると、演算式のうち乗累算については、ステップS300〜S304を経て、まず、乗算結果ブロックスケールファクタとデータブロックCのブロックスケールファクタとの差分からなる補正ブロックスケールファクタが算出され、算出された補正ブロックスケールファクタに基づいて第1スケール補正処理および第2スケール補正処理のうちいずれかが行われる。
第1スケール補正処理は、データブロックCが絶対値が大きいデータを含むときに行われる。第1スケール補正処理が行われると、ステップS308〜S316を繰り返し経て、データブロックAの各データグループごとに、そのデータグループのグループスケールファクタとデータブロックAのブロックスケールファクタとの差分からなる差分スケールファクタが算出され、算出された差分スケールファクタに補正ブロックスケールファクタが加算されたものに相当するシフト量で、そのデータグループの各データに対して右シフトが行われる。また、ステップS318〜S326を繰り返し経て、データブロックBの各データグループごとに、そのデータグループのグループスケールファクタとデータブロックBのブロックスケールファクタとの差分からなる差分スケールファクタが算出され、算出された差分スケールファクタに相当するシフト量で、そのデータグループの各データに対して右シフトが行われる。そして、ステップS330,S332を経て、データブロックA,Bの各データが乗算され、その乗算結果がデータブロックXに格納される。すなわち、データブロックXの各データは、データブロックAに対するスケーリングにより、データブロックCのデータと桁位置が一致するようにその乗算前に補正が行われる。
一方、ステップS328を経て、データブロックCの各データグループごとに、そのデータグループのグループスケールファクタとデータブロックCのブロックスケールファクタとの差分からなる差分スケールファクタが算出され、算出された差分スケールファクタに相当するシフト量で、そのデータグループの各データに対して右シフトが行われる。そして、ステップS334〜S338を経て、桁位置が一致した状態で、データブロックX,Cの各データが加算される。
また、第2スケール補正処理は、データブロックCが絶対値が大きいデータを含まないときに行われる。第2スケール補正処理が行われると、ステップS342を経て、データブロックAの各データグループごとに、そのデータグループのグループスケールファクタとデータブロックAのブロックスケールファクタとの差分からなる差分スケールファクタが算出され、算出された差分スケールファクタに相当するシフト量で、そのデータグループの各データに対して右シフトが行われる。また、ステップS328を経て、データブロックBについても同様のスケーリングが行われる。そして、ステップS330,S332を経て、データブロックA,Bの各データが乗算され、その乗算結果がデータブロックXに格納される。
一方、ステップS340を経て、データブロックCの各データグループごとに、そのデータグループのグループスケールファクタとデータブロックCのブロックスケールファクタとの差分からなる差分スケールファクタが算出され、算出された差分スケールファクタに補正ブロックスケールファクタが加算されたものに相当するシフト量で、そのデータグループの各データに対して右シフトが行われる。すなわち、データブロックCの各データは、データブロックCに対するスケーリングにより、データブロックXのデータと桁位置が一致するようにその乗算前に補正が行われる。そして、ステップS334〜S338を経て、桁位置が一致した状態で、データブロックX,Cの各データが加算される。
このようにして、本実施の形態では、ブロックフローティング変数を用いて演算式を記述したソースプログラムが与えられたときに、与えられたソースプログラムのなかから加算を行う演算式を検出し、検出した演算式のうち加算に係る部分について、加算の対象となる複数のブロックフローティング変数に対応するデータブロックを用いた加算を行う処理を構成する命令コードとして展開し、展開した命令コードをオブジェクトプログラムに埋め込み、オブジェクトプログラムを生成・出力するようになっている。
これにより、ソースプログラム上で構造体の定義や特殊関数の作成等のプログラミング作業を行うことなく、ブロックフローティング変数を用いて加算式を記述するだけでブロックフローティング方式による加算を実現することができる。したがって、従来に比して、ソースプログラムにおける演算の記述を比較的容易に行うことができるとともに、ソースプログラムの記述を比較的簡素化することができる。
さらに、本実施の形態では、加算式のコンパイル結果、その命令コードにより構成される処理は、複数のデータブロックのブロックスケールファクタのうち絶対値が最大のデータを含むデータブロックのものを共通ブロックスケールファクタとして選択し、データブロックの各データグループごとに、そのデータグループのグループスケールファクタと共通ブロックスケールファクタとの差分からなるスケールファクタに基づいて、そのデータグループの各データに対してスケーリングを行い、スケーリングを行った各データブロックのデータに対して加算を行うようになっている。
これにより、オブジェクトプログラムの実行過程では、1つのデータについて1回のスケーリングにより、データブロック内での正規化およびデータブロック間での正規化を同時に行うことができるので、演算処理を比較的簡素化することができる。
さらに、本実施の形態では、ブロックフローティング変数を用いて演算式を記述したソースプログラムが与えられたときに、与えられたソースプログラムのなかから乗累算を行う演算式を検出し、検出した演算式のうち乗累算に係る部分について、乗算の対象となる2つのブロックフローティング変数に対応する第1データブロックおよび第2データブロック、並びに加算の対象となるブロックフローティング変数に対応する第3データブロックを用いた乗累算を行う処理を構成する命令コードとして展開し、展開した命令コードをオブジェクトプログラムに埋め込み、オブジェクトプログラムを生成・出力するようになっている。
これにより、ソースプログラム上で構造体の定義や特殊関数の作成等のプログラミング作業を行うことなく、ブロックフローティング変数を用いて乗累算式を記述するだけでブロックフローティング方式による乗累算を実現することができる。したがって、従来に比して、ソースプログラムにおける演算の記述を比較的容易に行うことができるとともに、ソースプログラムの記述を比較的簡素化することができる。
さらに、本実施の形態では、乗累算式のコンパイル結果、その命令コードにより構成される処理は、補正ブロックスケールファクタを算出し、第3データブロックのブロックスケールファクタが乗算結果ブロックスケールファクタよりも大きいときは、乗算を行う前に、第1データブロックの各データグループごとに、そのデータグループのグループスケールファクタと第1データブロックのブロックスケールファクタとの差分からなる差分スケールファクタを算出し、算出した差分スケールファクタに補正ブロックスケールファクタを加算したものに基づいてそのデータグループの各データを右シフトするようになっている。
これにより、オブジェクトプログラムの実行過程では、スケーリングを乗算前に行うので、桁落ちを防止するための余分なビット長を変数に割り当てなくてすみ、演算時に必要なデータ容量を比較的低減することができるとともに、ビット長の変換を伴わないので、演算効率が低下する可能性を比較的低減することができる。
なお、上記実施の形態においては、ブロックフローティング方式のデータ構造として、図2に示すように、k個のデータを含んでデータグループを構成し、さらに複数のデータグループを含んでデータブロックを構成し、データブロックは、各データグループのグループスケールファクタおよびデータブロックのブロックスケールファクタを含むデータ構造を採用したが、これに限らず、データグループおよびグループスケールファクタを設けないデータ構造を採用することもできる。すなわち、複数のデータを含んでデータブロックを構成し、データブロックは、ブロックスケールファクタを含む。こうしたデータ構造を採用した場合でも、上記実施の形態と同じ要領で動作し、同等の効果を得ることができる。
また、上記実施の形態においては、ブロックフローティング方式による演算式のうち加算に係る部分について展開したオブジェクトプログラムの一部をなす処理として図4のフローチャートに示す処理を例示したが、この場合、各データブロックA,B,Cに対するスケーリングと加算とが分離されているため、スケーリング結果を一度メモリ等に待避する必要がある。そのため、次のような処理として構成することもできる。
第1の処理は、データブロックAの一つのデータグループのデータに対するスケーリング、データブロックBの一つのデータグループのデータに対するスケーリング、データブロックCの一つのデータグループのデータに対するスケーリング、それらデータグループのデータに対する加算、および加算結果に対する正規化からなる一連の処理を、データブロックA,B,Cのすべてのデータグループについて行う。
第2の処理は、データブロックAの一つのデータグループのデータに対するスケーリング、データブロックBの一つのデータグループのデータに対するスケーリング、それらデータグループのデータに対する加算、データブロックCの一つのデータグループのデータに対するスケーリング、そのデータグループのデータおよび前記加算結果に対する加算、および加算結果に対する正規化からなる一連の処理を、データブロックA,B,Cのすべてのデータグループについて行う。
これにより、データをメモリ等に格納せずに演算を行うことができるので、演算効率を向上することができる。
また、上記実施の形態においては、ブロックフローティング方式による加算式および乗累算式をコンパイルするように構成したが、これに限らず、ブロックフローティング方式による乗算式をコンパイルするように構成してもよい。例えば、図6に示すようなソースプログラムを、図7に示すようなオブジェクトプログラムにコンパイルすることもできる。
図6のソースプログラムは、下式(7)に示す乗算式を実現するものであり、図6に示すように、ステップS400〜S410の処理で構成される。図6は、ブロックフローティング方式による乗算式を記述したソースプログラムである。なお、ブロックフローティング方式によるデータ構造については、上記実施の形態と異なり、データグループを設けず、データブロックは、複数のデータおよびブロックスケールファクタを含むデータ構造である。
r=a×b×c ・・・(7)
ステップS400,S402は、グローバル関数である。ステップS400では、データブロックのデータ数を定義し、ステップS402では、ブロックフローティング変数a,b,c,rを確保する。
ステップS404〜S410は、ローカル関数である。ステップS404では、整数型の変数iを確保し、ステップS406では、ブロックフローティング変数a,b,rの各データごとに演算を行い「r=a×b」を演算する。ステップS408では、ブロックフローティング変数c,rの各データごとに演算を行い「r=r×c」を演算し、ステップS410では、一連の処理を終了して元の処理に復帰させる。
図7のオブジェクトプログラムは、図6のソースプログラムをコンパイルして得られたものであり、図7に示すように、ステップS500〜S520の処理で構成される。図7は、図6のソースプログラムをコンパイルして得られたオブジェクトプログラムである。
ステップS500,S502は、グローバル関数である。ステップS500では、データブロックのデータ数を定義し、ステップS502では、ブロックフローティング変数a,b,c,rに対応するデータブロックa,b,c,rを確保する。
ステップS504〜S520は、ローカル関数である。ステップS504では、レジスタを初期化し、ステップS506では、データブロックa,bのブロックスケールファクタを加算して乗算結果ブロックスケールファクタを算出し、ステップS508では、データブロックa,b,rへのポインタを設定する。
ステップS510では、データブロックa,b,rの各データごとに演算を行い「r=a×b」を演算する。この演算では、データブロックaのブロックスケールファクタに相当するシフト量でデータブロックaの各データを右シフトして読み出し(関数bfp_load_man(*P0++M1,SFB0)の部分)、データブロックbのブロックスケールファクタに相当するシフト量でデータブロックbの各データを右シフトして読み出し(関数bfp_load_man(*P1++M1,SFB1)の部分)た後、データブロックa,bの各データを乗算し、その乗算結果をデータブロックrに格納する。
ステップS512では、ステップS506で算出した乗算結果ブロックスケールファクタをデータブロックrのブロックスケールファクタに格納する。ステップS514〜S520は、ステップS506〜S512と同じ要領で、データブロックc,rを用いて「r=r×c」の演算を行う。
また、以上では、変数a,b,c,rがすべてブロックフローティング変数である場合について説明したが、これに限らず、固定小数点が混在した演算を実現することもできる。例えば、図8に示すようなソースプログラムを、図9に示すようなオブジェクトプログラムにコンパイルすることもできる。
図8のソースプログラムは、上式(7)に示す乗算式を実現するものであり、図8に示すように、ステップS600〜S610の処理で構成される。図8は、ブロックフローティング方式による乗算式を記述したソースプログラムである。なお、ブロックフローティング方式によるデータ構造については、上記実施の形態と異なり、データグループを設けず、データブロックは、複数のデータおよびブロックスケールファクタを含むデータ構造である。
ステップS600,S602は、グローバル関数である。ステップS600では、データブロックのデータ数を定義し、ステップS602では、ブロックフローティング変数a,b,rおよび固定小数点変数cを確保する。
ステップS604〜S610は、ローカル関数である。ステップS604では、整数型の変数iを確保し、ステップS606では、ブロックフローティング変数a,b,rの各データごとに演算を行い「r=a×b」を演算する。ステップS608では、ブロックフローティング変数rおよび固定小数点変数cの各データごとに演算を行い「r=r×c」を演算し、ステップS610では、一連の処理を終了して元の処理に復帰させる。
図9のオブジェクトプログラムは、図8のソースプログラムをコンパイルして得られたものであり、図9に示すように、ステップS700〜S720の処理で構成される。図9は、図8のソースプログラムをコンパイルして得られたオブジェクトプログラムである。
ステップS700,S702は、グローバル関数である。ステップS700では、データブロックのデータ数を定義し、ステップS702では、ブロックフローティング変数a,b,rに対応するデータブロックa,b,rを確保するとともに固定小数点変数cに対応する小数点配列cを確保する。
ステップS704〜S720は、ローカル関数である。ステップS704では、レジスタを初期化し、ステップS706では、データブロックa,bのブロックスケールファクタを加算して乗算結果ブロックスケールファクタを算出し、ステップS708では、データブロックa,b,rへのポインタを設定する。
ステップS710では、データブロックa,b,rの各データごとに演算を行い「r=a×b」を演算する。この演算では、データブロックaのブロックスケールファクタに相当するシフト量でデータブロックaの各データを右シフトして読み出し(関数bfp_load_man(*P0++M1,SFB0)の部分)、データブロックbのブロックスケールファクタに相当するシフト量でデータブロックbの各データを右シフトして読み出し(関数bfp_load_man(*P1++M1,SFB1)の部分)た後、データブロックa,bの各データを乗算し、その乗算結果をデータブロックrに格納する。
ステップS712では、ステップS706で算出した乗算結果ブロックスケールファクタをデータブロックrのブロックスケールファクタに格納する。
ステップS714では、データブロックrのブロックスケールファクタを乗算結果ブロックスケールファクタとして算出し、ステップS716では、データブロックrへのポインタおよび固定小数点配列cへのポインタを設定する。
ステップS718では、データブロックrおよび固定小数点配列cの各データごとに演算を行い「r=r×c」を演算する。この演算では、データブロックrのブロックスケールファクタに相当するシフト量でデータブロックrの各データを右シフトして読み出し(関数bfp_load_man(*P0++M1,SFB0)の部分)、固定小数点配列cの各データをシフトせずに読み出し(関数load_man(*P1++M1)の部分)た後、データブロックrおよび固定小数点配列cの各データを乗算し、その乗算結果をデータブロックrに格納する。
ステップS720では、ステップS714で算出した乗算結果ブロックスケールファクタをデータブロックrのブロックスケールファクタに格納する。
また、上記実施の形態においては、ブロックフローティング方式による加算式および乗累算式をコンパイルするように構成したが、乗累算式のコンパイルについてより具体的には、図10に示すようなソースプログラムを、図11に示すようなオブジェクトプログラムにコンパイルすることもできる。
図10のソースプログラムは、下式(8)に示す乗累算式を実現するものであり、図10に示すように、ステップS800〜S806の処理で構成される。図10は、ブロックフローティング方式による乗累算式を記述したソースプログラムである。なお、ブロックフローティング方式によるデータ構造は、上記実施の形態と同一である。
Figure 0004594957
ステップS800では、ブロックフローティング変数a,b,rを確保し、ステップS802では、ステップS804,S806の処理をN+1回繰り返し実行する。ステップS804では、データr(n)を初期化し、ステップS806では、ブロックフローティング変数a,bの各データごとに上式(8)の演算を行い、一連の処理を終了して元の処理に復帰させる。
図11のオブジェクトプログラムは、図10のソースプログラムをコンパイルして得られたものであり、図11に示すように、ステップS810〜S850の処理で構成される。図11は、図10のソースプログラムをコンパイルして得られたオブジェクトプログラムである。
ステップS810では、データブロックa(k),b(n)のブロックスケールファクタを読み込み、ステップS812に移行して、2つのデータブロックのブロックスケールファクタの和を中間結果スケールファクタとして算出し、ステップS814に移行して、データブロックr(n)のブロックスケールファクタを絶対値最小のデータと中間結果スケールファクタから決められる値に初期化(例えば、両者の加算)し、ステップS816に移行する。
ステップS816では、データブロックr(n)の書込位置を先頭のデータグループに設定し、ステップS818に移行して、データブロックb(n)の読込位置を先頭のデータグループに設定し、ステップS820に移行して、データブロックa(k)の読込位置を先頭のデータグループに設定し、ステップS822に移行して、データブロックa(k)のグループスケールファクタを読み込み、ステップS824に移行する。
ステップS824では、グループスケールファクタとデータブロックa(k)のブロックスケールファクタとの差分スケールファクタを算出し、ステップS826に移行して、データグループの各データを読み込み、差分スケールファクタに基づいて右シフトを行い、ステップS828に移行して、データブロックa(k)の読込位置を次のデータグループに設定し、ステップS830に移行して、データブロックb(n)のデータグループについて右シフトを行い(ステップS822〜S826と同様の処理)、ステップS832に移行する。
ステップS832では、データブロックb(n)の読込位置を次のデータグループに設定し、ステップS834に移行して、データブロックa(k),b(n)のデータを乗累算し、ステップS836に移行して、k=Kまでのa(k)について処理が完了したか否かを判定し、処理が完了したと判定したとき(Yes)は、ステップS838に移行して、乗累算結果をスケーリングし、データブロックr(n)に書き込み、ステップS840に移行する。
ステップS840では、スケーリングに要したシフト数と中間結果スケールファクタから乗累算結果のグループスケールファクタを算出し書き込み(例えば、両者の加算)、ステップS842に移行して、データブロックr(n)の書込位置を次のデータグループに設定し、ステップS844に移行して、データブロックr(n)のブロックスケールファクタとグループスケールファクタとを比較し、絶対値最大のデータを含む方のスケールファクタにブロックスケールファクタを更新し、ステップS846に移行する。
ステップS846では、n=Nまでのr(n)について処理が完了したか否かを判定し、処理が完了したと判定したとき(Yes)は、ステップS848に移行して、データブロックr(n)のブロックスケールファクタを格納し、一連の処理を終了して元の処理に復帰させる。
一方、ステップS846で、n=Nまでのr(n)について処理が完了していないと判定したとき(No)は、ステップS850に移行して、データブロックb(n)についてデータブロックr(n)の現在のnの値に対応するデータグループに読込位置を設定し、ステップS820に移行する。
一方、ステップS836で、k=Kまでのa(k)について処理が完了していないと判定したとき(No)は、ステップS822に移行する。
また、以上では、変数a,b,rがすべてブロックフローティング変数である場合について説明したが、これに限らず、固定小数点が混在した演算を実現することもできる。例えば、図12に示すようなソースプログラムを、図13に示すようなオブジェクトプログラムにコンパイルすることもできる。
図12のソースプログラムは、下式(9)に示す乗累算式を実現するものであり、図12に示すように、ステップS900〜S906の処理で構成される。図12は、ブロックフローティング方式による乗累算式を記述したソースプログラムである。
Figure 0004594957
ステップS900では、固定小数点変数aおよびブロックフローティング変数b,rを確保し、ステップS902では、ステップS904,S906の処理をN回繰り返し実行する。ステップS904では、データブロックr(n)を初期化し、ステップS906では、固定小数点変数aおよびブロックフローティング変数bの各データごとに上式(9)の演算を行い、一連の処理を終了して元の処理に復帰させる。
図13のオブジェクトプログラムは、図12のソースプログラムをコンパイルして得られたものであり、図13に示すように、ステップS910〜S950の処理で構成される。図13は、図12のソースプログラムをコンパイルして得られたオブジェクトプログラムである。
ステップS910では、データブロックb(n)のブロックスケールファクタを読み込み、ステップS912に移行して、ブロックスケールファクタを中間結果スケールファクタとして算出し、ステップS914に移行して、データブロックr(n)のブロックスケールファクタを絶対値最小のデータと中間結果スケールファクタから決められる値に初期化(例えば、両者の加算)し、ステップS916に移行する。
ステップS916では、データブロックr(n)の書込位置を先頭のデータグループに設定し、ステップS918に移行して、データブロックb(n)の読込位置を先頭のデータグループに設定し、ステップS920に移行して、データブロックa(k)の読込位置を先頭のデータグループに設定し、ステップS922に移行して、データグループの各データを読み込み、ステップS924に移行する。
ステップS924では、データブロックa(k)読込位置を次のデータグループに設定し、ステップS926に移行して、データブロックb(n)のグループスケールファクタを読み込み、ステップS928に移行して、グループスケールファクタとデータブロックb(n)のブロックスケールファクタとの差分スケールファクタを算出し、ステップS930に移行して、データグループの各データを読み込み、差分スケールファクタに基づいて右シフトを行い、ステップS932に移行する。
ステップS932では、データブロックb(n)の読込位置を次のデータグループに設定し、ステップS934に移行して、データブロックa(k),b(n)のデータを乗累算し、ステップS936に移行して、k=Kまでのa(k)について処理が完了したか否かを判定し、処理が完了したと判定したとき(Yes)は、ステップS938に移行して、乗累算結果をスケーリングし、データブロックr(n)に書き込み、ステップS940に移行する。
ステップS940では、スケーリングに要したシフト数と中間結果スケールファクタから乗累算結果のグループスケールファクタを算出し書き込み(例えば、両者の加算)、ステップS942に移行して、データブロックr(n)の書込位置を次のデータグループに設定し、ステップS944に移行して、データブロックr(n)のブロックスケールファクタとグループスケールファクタとを比較し、絶対値最大のデータを含む方のスケールファクタにブロックスケールファクタを更新し、ステップS946に移行する。
ステップS946では、n=Nまでのr(n)について処理が完了したか否かを判定し、処理が完了したと判定したとき(Yes)は、ステップS948に移行して、データブロックr(n)のブロックスケールファクタを格納し、一連の処理を終了して元の処理に復帰させる。
一方、ステップS946で、n=Nまでのr(n)について処理が完了していないと判定したとき(No)は、ステップS950に移行して、データブロックb(n)について、データブロックr(n)の現在のnの値に対応するデータグループに読込位置を設定し、ステップS920に移行する。
一方、ステップS936で、k=Kまでのa(k)について処理が完了していないと判定したとき(No)は、ステップS922に移行する。
また、上記実施の形態においては、ブロックフローティング変数を用いて加算式を記述したソースプログラムをコンパイルするように構成したが、これに限らず、上記のように、ブロックフローティング変数および固定小数点変数を用いた乗算(図8および図9)の例と同じ要領で、ブロックフローティング変数および固定小数点変数を用いて加算式を記述したソースプログラムをコンパイルするように構成してもよい。
また、上記実施の形態においては、ブロックフローティング方式による加算を実現するために、ブロックフローティング変数を用いて加算式を記述したソースプログラムをコンパイルするように構成したが、これに限らず、ブロックフローティング方式による減算を実現するために、上記実施の形態と同じ要領で、ブロックフローティング変数を用いて減算式を記述したソースプログラムをコンパイルするように構成することもできる。
また、上記実施の形態においては、ブロックフローティング方式による乗算(乗累算のうち乗算の部分)を実現するために、ブロックフローティング変数を用いて乗算式を記述したソースプログラムをコンパイルするように構成したが、これに限らず、ブロックフローティング方式による除算を実現するために、上記実施の形態と同じ要領で、ブロックフローティング変数を用いて除算式を記述したソースプログラムをコンパイルするように構成することもできる。
また、上記実施の形態においては、ブロックフローティング変数を、上式(3)に示すように、変数名、データグループ数および各データグループのデータ数を明示することにより定義したが、これに限らず、データグループ数および各データグループのデータ数を固定的または共通に定義するようにすれば、ブロックフローティング変数を、データグループ数および各データグループのデータ数を明示することなく、変数名のみを明示することにより定義することもできる。これにより、ソースプログラムの記述をさらに簡素化することができる。
また、上記実施の形態においては、コンピュータ100が実行可能なオブジェクトプログラムを生成するように構成したが、これに限らず、コンピュータ100において、図14に示すようなデジタル・シグナル・プロセッサ(以下、単にDSPという。)が実行可能なオブジェクトプログラムを生成するように構成してもよい。図14の例では、コンピュータ100でコンパイルしたオブジェクトプログラムを制御ロジックが実行する。図14は、DSPの構成を示すブロック図である。
また、上記実施の形態においては、加算対象となる2つのデータブロックのうちブロックスケールファクタの小さいものの各データに対して、右シフトを行うことにより桁位置を一致させるように構成したが、これに限らず、加算対象となる2つのデータブロックのうちブロックスケールファクタの大きいものの各データに対して、左シフトを行うことにより桁位置を一致させるように構成してもよい。
また、上記実施の形態において、図3のフローチャートに示す処理を実行するにあたってはいずれも、ROM32にあらかじめ格納されている制御プログラムを実行する場合について説明したが、これに限らず、これらの手順を示したプログラムが記憶された記憶媒体から、そのプログラムをRAM34に読み込んで実行するようにしてもよい。
ここで、記憶媒体とは、RAM、ROM等の半導体記憶媒体、FD、HD等の磁気記憶型記憶媒体、CD、CDV、LD、DVD等の光学的読取方式記憶媒体、MO等の磁気記憶型/光学的読取方式記憶媒体であって、電子的、磁気的、光学的等の読み取り方法のいかんにかかわらず、コンピュータで読み取り可能な記憶媒体であれば、あらゆる記憶媒体を含むものである。
また、上記実施の形態においては、本発明に係るコンパイル装置を、図1に示すように、コンピュータ100において、ブロックフローティング方式による演算式を記述したソースプログラムを翻訳し、コンピュータ100が実行可能なオブジェクトプログラムを生成する場合について適用したが、これに限らず、本発明の主旨を逸脱しない範囲で他の場合にも適用可能である。
以上説明したように、発明1記載のコンパイル装置によれば、ソースプログラム上で構造体の定義や特殊関数の作成等のプログラミング作業を行うことなく、ブロックフローティング変数を用いて演算式を記述するだけでブロックフローティング方式による演算を実現することができる。したがって、従来に比して、ソースプログラムにおける演算の記述を比較的容易に行うことができるとともに、ソースプログラムの記述を比較的簡素化することができるという効果も得られる。
コンピュータの構成を示すブロック図である。 ブロックフローティング方式のデータ構造を示す図である。 ブロックフローティングコンパイル処理を示すフローチャートである。 ステップS106で展開する命令コードにより構成される処理の一例を示すフローチャートである。 ステップS110で展開する命令コードにより構成される処理の一例を示すフローチャートである。 ブロックフローティング方式による乗算式を記述したソースプログラムである。 図6のソースプログラムをコンパイルして得られたオブジェクトプログラムである。 ブロックフローティング方式による乗算式を記述したソースプログラムである。 図8のソースプログラムをコンパイルして得られたオブジェクトプログラムである。 ブロックフローティング方式による乗累算式を記述したソースプログラムである。 図10のソースプログラムをコンパイルして得られたオブジェクトプログラムである。 ブロックフローティング方式による乗累算式を記述したソースプログラムである。 図12のソースプログラムをコンパイルして得られたオブジェクトプログラムである。 DSPの構成を示すブロック図である。

Claims (1)

  1. データ型としてブロックフローティング型のブロックフローティング変数を用いて演算式を記述したソースプログラムが与えられたときに、与えられたソースプログラムをオブジェクトプログラムに翻訳するコンパイル装置であって、
    前記ブロックフローティング変数は、1又は複数のデータを含んで構成されたデータグループと、前記データグループに含まれる各データに共通の指数である各データグループのグループスケールファクタと、複数の前記データグループを含んで構成されたデータブロックに含まれる各データグループに共通の指数であるブロックスケールファクタと、を含んで構成されたデータブロックのデータ構造を表す変数であり、
    前記ソースプログラムのなかから前記演算式を検出する演算式検出手段と、前記演算式検出手段で検出した演算式に基づいて、演算の対象となる前記ブロックフローティング変数に対応するデータブロックを用いた演算を行う処理を構成する所定の命令コードとして展開する演算式展開手段と、前記演算式展開手段で展開した命令コードを前記オブジェクトプログラムに変換するオブジェクトコード変換手段とを備えることを特徴とするコンパイル装置。
JP2007122809A 2001-09-18 2007-05-07 コンパイル装置 Expired - Fee Related JP4594957B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2007122809A JP4594957B2 (ja) 2001-09-18 2007-05-07 コンパイル装置

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
JP2001283923 2001-09-18
JP2007122809A JP4594957B2 (ja) 2001-09-18 2007-05-07 コンパイル装置

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
JP2003535058A Division JPWO2003032157A1 (ja) 2001-09-18 2002-09-17 コンパイル装置

Publications (2)

Publication Number Publication Date
JP2007200363A JP2007200363A (ja) 2007-08-09
JP4594957B2 true JP4594957B2 (ja) 2010-12-08

Family

ID=38454834

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2007122809A Expired - Fee Related JP4594957B2 (ja) 2001-09-18 2007-05-07 コンパイル装置

Country Status (1)

Country Link
JP (1) JP4594957B2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102348795B1 (ko) * 2020-11-02 2022-01-07 주식회사 바움 부동 소수점 방식에서 고정 소수점 방식으로의 변환 수행시 비트 폭 최적화 방법

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO1999066423A1 (fr) * 1998-06-15 1999-12-23 Asahi Kasei Kogyo Kabushiki Kaisha Dispositif pour calcul de donnees
WO2003032157A1 (en) * 2001-09-18 2003-04-17 Asahi Kasei Kabushiki Kaisha Compiler

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO1999066423A1 (fr) * 1998-06-15 1999-12-23 Asahi Kasei Kogyo Kabushiki Kaisha Dispositif pour calcul de donnees
WO2003032157A1 (en) * 2001-09-18 2003-04-17 Asahi Kasei Kabushiki Kaisha Compiler

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102348795B1 (ko) * 2020-11-02 2022-01-07 주식회사 바움 부동 소수점 방식에서 고정 소수점 방식으로의 변환 수행시 비트 폭 최적화 방법

Also Published As

Publication number Publication date
JP2007200363A (ja) 2007-08-09

Similar Documents

Publication Publication Date Title
JP6865847B2 (ja) 処理装置、チップ、電子設備及び方法
CN105573715B (zh) 响应指令执行舍入运算
US5930158A (en) Processor with instruction set for audio effects
US10965744B2 (en) Arrangements for communicating data in a computing system using multiple processors
JPWO2003032157A1 (ja) コンパイル装置
JP2008033729A (ja) 演算プログラム変換装置、演算プログラム変換プログラム、演算プログラム変換方法
US20160004579A1 (en) Method of generating automatic code for remote procedure call
JP4594957B2 (ja) コンパイル装置
JP4921310B2 (ja) 命令ビット長削減方法
CN113296732B (zh) 数据处理方法和装置,处理器及数据搜索方法和装置
US8140608B1 (en) Pipelined integer division using floating-point reciprocal
CN106557312B (zh) 程序开发支援装置以及程序开发支援软件
TW202333041A (zh) 執行浮點運算的系統及方法
Teich et al. Exact partitioning of affine dependence algorithms
JP4728392B2 (ja) 大数乗算方法およびデバイス
KR100887327B1 (ko) 다양한 정밀도에 대한 고속 부동 소수점 연산을 수행하는방법, 프로그래밍 구조 및 기록 매체
JP2006318382A (ja) 演算装置および型変換装置
CN113760380A (zh) 网络模型的运行代码的确定方法、装置、设备及存储介质
JP6137962B2 (ja) 情報処理装置、情報処理方法及びプログラム
JPH09128213A (ja) ブロックフローティング処理システムおよび方法
JP6409639B2 (ja) コンパイラプログラム、システム、方法、及び装置
US9552302B2 (en) Data processing apparatus, data processing method and program recording medium
US20230401350A1 (en) Method for visualising a 3d infrastructure design model in a planar coordinate system on an ellipsoid
Kim RECONFIGURABLE SIMD MULTIPLY-AND-ACCUMULATOR AND EFFICIENT ON-CHIP TRAINING OF DEEP NEURAL NETWORKS
JPH08202534A (ja) 演算処理装置

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20070507

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A132

Effective date: 20090901

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20091029

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: 20100914

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20100917

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130924

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

S531 Written request for registration of change of domicile

Free format text: JAPANESE INTERMEDIATE CODE: R313531

LAPS Cancellation because of no payment of annual fees