JP4594957B2 - コンパイル装置 - Google Patents
コンパイル装置 Download PDFInfo
- 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
Links
Images
Landscapes
- Devices For Executing Special Programs (AREA)
Description
浮動小数点表現では、各データが指数部と仮数部をもち、これにより、高い精度と広いダイナミックレンジが確保可能という利点がある反面、複雑で大規模なハードウェアが必要となるという問題がある。一方、固定小数点表現では、ハードウェアが簡単で回路規模も小さくてすむが、演算精度の低下が問題となる。
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」のデータを得ることができる。
前記ブロックフローティング変数は、1又は複数のデータを含んで構成されたデータグループと、前記データグループに含まれる各データに共通の指数である各データグループのグループスケールファクタと、複数の前記データグループを含んで構成されたデータブロックに含まれる各データグループに共通の指数であるブロックスケールファクタと、を含んで構成されたデータブロックのデータ構造を表す変数であり、
前記ソースプログラムのなかから前記演算式を検出する演算式検出手段と、前記演算式検出手段で検出した演算式に基づいて、演算の対象となる前記ブロックフローティング変数に対応するデータブロックを用いた演算を行う処理を構成する所定の命令コードとして展開する演算式展開手段と、前記演算式展開手段で展開した命令コードを前記オブジェクトプログラムに変換するオブジェクトコード変換手段とを備える。
本実施の形態は、本発明に係るコンパイル装置を、図1に示すように、コンピュータ100において、ブロックフローティング方式による演算式を記述したソースプログラムを翻訳し、コンピュータ100が実行可能なオブジェクトプログラムを生成する場合について適用したものである。以下、翻訳・生成のことをコンパイルと総称する。
コンピュータ100は、図1に示すように、制御プログラムに基づいて演算およびシステム全体を制御するCPU30と、所定領域にあらかじめCPU30の制御プログラム等を格納しているROM32と、ROM32等から読み出したデータやCPU30の演算過程で必要な演算結果を格納するためのRAM34と、外部装置に対してデータの入出力を媒介するI/F38とで構成されており、これらは、データを転送するための信号線であるバス39で相互にかつデータ授受可能に接続されている。
記憶装置42には、ソースプログラムおよびオブジェクトプログラムがファイル形式で格納される。本発明のコンパイル対象となるソースプログラムは、所定のプログラム言語(例えば、C言語)により記述することができるほか、ブロックフローティング方式による演算式をブロックフローティング変数を用いて記述することができる。ここで、ブロックフローティング変数とは、ブロックフローティング方式のデータ構造を表す変数である。ブロックフローティング方式のデータ構造は、図2に示すように、k個のデータを含んでデータグループを構成し、さらに複数のデータグループを含んでデータブロックを構成し、データブロックは、各データグループのグループスケールファクタおよびデータブロックのブロックスケールファクタを含む。図2は、ブロックフローティング方式のデータ構造を示す図である。
bfloat A[3][2]; ・・・(3)
ステップS100では、ソースプログラムを入力し、字句解析、構文解析および意味解析を行い、解析結果を中間言語、記号表等の形式で格納し、ステップS104に移行する。
一方、ステップS104で、読み込んだプログラム行のなかから加算を行う演算式が存在しないと判定したとき(No)は、ステップS108に移行する。
次に、上記ステップS106で展開する命令コードにより構成される処理を図4を参照しながら詳細に説明する。図4は、ステップS106で展開する命令コードにより構成される処理の一例を示すフローチャートである。
Y=A+B+C ・・・(4)
ステップS218では、データブロックA,B,Cの各データを加算し、ステップS220に移行して、ステップS218での加算結果をデータブロックYに格納し、ステップS222に移行して、データブロックYの各データを正規化し、一連の処理を終了する。
命令コードにより構成される処理は、ブロックフローティング方式による演算式のうち乗累算に係る部分について展開したオブジェクトプログラムの一部をなす処理であって、DSPにおいて実行されると、図5に示すように、まず、ステップS300に移行するようになっている。なお、図5は、下式(5)に示す累乗算式を実現しようとする場合に、ソースプログラムにおいてその基本演算単位となる下式(6)に示す乗累算式を展開したときに得られるコンパイル結果である。下式(5),(6)において、S、Ai,Bi,A,B,C,Yは、ブロックフローティング変数であり、オブジェクトプログラムにおいてブロックフローティング変数A,B,Cは、データブロックA,B,Cにそれぞれ対応する。
ステップS334では、データブロックX,Cの各データを加算し、ステップS336に移行して、ステップS334での加算結果をデータブロックYに格納し、ステップS338に移行して、データブロックYの各データを正規化し、一連の処理を終了する。
まず、上式(4)に示す加算式を記述したソースプログラムをコンパイルする場合を説明する。
コンピュータ100では、上式(4)に示す加算式を記述したソースプログラムがユーザにより与えられると、CPU30により、ステップS100,S104,S106を経て、与えられたソースプログラムのなかから加算を行う演算式が検出され、検出された演算式のうち加算に係る部分について、加算の対象となる複数のブロックフローティング変数に対応するデータブロックを用いた加算を行う処理を構成する命令コードとして展開される。そして、ステップS114を経て、展開された命令コードがオブジェクトプログラムに埋め込まれ、オブジェクトプログラムが生成・出力される。
コンピュータ100では、上式(6)に示す乗累算式を記述したソースプログラムがユーザにより与えられると、CPU30により、ステップS100,S108,S110を経て、与えられたソースプログラムのなかから乗累算を行う演算式が検出され、検出された演算式のうち乗累算に係る部分について、乗算の対象となる2つのブロックフローティング変数に対応するデータブロックA,B、および加算の対象となるブロックフローティング変数に対応するデータブロックCを用いた乗累算を行う処理を構成する命令コードとして展開される。そして、ステップS114を経て、展開された命令コードがオブジェクトプログラムに埋め込まれ、オブジェクトプログラムが生成・出力される。
さらに、本実施の形態では、ブロックフローティング変数を用いて演算式を記述したソースプログラムが与えられたときに、与えられたソースプログラムのなかから乗累算を行う演算式を検出し、検出した演算式のうち乗累算に係る部分について、乗算の対象となる2つのブロックフローティング変数に対応する第1データブロックおよび第2データブロック、並びに加算の対象となるブロックフローティング変数に対応する第3データブロックを用いた乗累算を行う処理を構成する命令コードとして展開し、展開した命令コードをオブジェクトプログラムに埋め込み、オブジェクトプログラムを生成・出力するようになっている。
なお、上記実施の形態においては、ブロックフローティング方式のデータ構造として、図2に示すように、k個のデータを含んでデータグループを構成し、さらに複数のデータグループを含んでデータブロックを構成し、データブロックは、各データグループのグループスケールファクタおよびデータブロックのブロックスケールファクタを含むデータ構造を採用したが、これに限らず、データグループおよびグループスケールファクタを設けないデータ構造を採用することもできる。すなわち、複数のデータを含んでデータブロックを構成し、データブロックは、ブロックスケールファクタを含む。こうしたデータ構造を採用した場合でも、上記実施の形態と同じ要領で動作し、同等の効果を得ることができる。
また、上記実施の形態においては、ブロックフローティング方式による加算式および乗累算式をコンパイルするように構成したが、これに限らず、ブロックフローティング方式による乗算式をコンパイルするように構成してもよい。例えば、図6に示すようなソースプログラムを、図7に示すようなオブジェクトプログラムにコンパイルすることもできる。
r=a×b×c ・・・(7)
ステップS404〜S410は、ローカル関数である。ステップS404では、整数型の変数iを確保し、ステップS406では、ブロックフローティング変数a,b,rの各データごとに演算を行い「r=a×b」を演算する。ステップS408では、ブロックフローティング変数c,rの各データごとに演算を行い「r=r×c」を演算し、ステップS410では、一連の処理を終了して元の処理に復帰させる。
ステップS500,S502は、グローバル関数である。ステップS500では、データブロックのデータ数を定義し、ステップS502では、ブロックフローティング変数a,b,c,rに対応するデータブロックa,b,c,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に格納する。
また、以上では、変数a,b,c,rがすべてブロックフローティング変数である場合について説明したが、これに限らず、固定小数点が混在した演算を実現することもできる。例えば、図8に示すようなソースプログラムを、図9に示すようなオブジェクトプログラムにコンパイルすることもできる。
ステップS604〜S610は、ローカル関数である。ステップS604では、整数型の変数iを確保し、ステップS606では、ブロックフローティング変数a,b,rの各データごとに演算を行い「r=a×b」を演算する。ステップS608では、ブロックフローティング変数rおよび固定小数点変数cの各データごとに演算を行い「r=r×c」を演算し、ステップS610では、一連の処理を終了して元の処理に復帰させる。
ステップS700,S702は、グローバル関数である。ステップS700では、データブロックのデータ数を定義し、ステップS702では、ブロックフローティング変数a,b,rに対応するデータブロックa,b,rを確保するとともに固定小数点変数cに対応する小数点配列cを確保する。
ステップ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に格納する。
ステップS714では、データブロックrのブロックスケールファクタを乗算結果ブロックスケールファクタとして算出し、ステップS716では、データブロックrへのポインタおよび固定小数点配列cへのポインタを設定する。
図10のソースプログラムは、下式(8)に示す乗累算式を実現するものであり、図10に示すように、ステップS800〜S806の処理で構成される。図10は、ブロックフローティング方式による乗累算式を記述したソースプログラムである。なお、ブロックフローティング方式によるデータ構造は、上記実施の形態と同一である。
ステップS810では、データブロックa(k),b(n)のブロックスケールファクタを読み込み、ステップS812に移行して、2つのデータブロックのブロックスケールファクタの和を中間結果スケールファクタとして算出し、ステップS814に移行して、データブロックr(n)のブロックスケールファクタを絶対値最小のデータと中間結果スケールファクタから決められる値に初期化(例えば、両者の加算)し、ステップS816に移行する。
一方、ステップS846で、n=Nまでのr(n)について処理が完了していないと判定したとき(No)は、ステップS850に移行して、データブロックb(n)についてデータブロックr(n)の現在のnの値に対応するデータグループに読込位置を設定し、ステップS820に移行する。
また、以上では、変数a,b,rがすべてブロックフローティング変数である場合について説明したが、これに限らず、固定小数点が混在した演算を実現することもできる。例えば、図12に示すようなソースプログラムを、図13に示すようなオブジェクトプログラムにコンパイルすることもできる。
ステップS910では、データブロックb(n)のブロックスケールファクタを読み込み、ステップS912に移行して、ブロックスケールファクタを中間結果スケールファクタとして算出し、ステップS914に移行して、データブロックr(n)のブロックスケールファクタを絶対値最小のデータと中間結果スケールファクタから決められる値に初期化(例えば、両者の加算)し、ステップS916に移行する。
一方、ステップS946で、n=Nまでのr(n)について処理が完了していないと判定したとき(No)は、ステップS950に移行して、データブロックb(n)について、データブロックr(n)の現在のnの値に対応するデータグループに読込位置を設定し、ステップS920に移行する。
また、上記実施の形態においては、ブロックフローティング変数を用いて加算式を記述したソースプログラムをコンパイルするように構成したが、これに限らず、上記のように、ブロックフローティング変数および固定小数点変数を用いた乗算(図8および図9)の例と同じ要領で、ブロックフローティング変数および固定小数点変数を用いて加算式を記述したソースプログラムをコンパイルするように構成してもよい。
ここで、記憶媒体とは、RAM、ROM等の半導体記憶媒体、FD、HD等の磁気記憶型記憶媒体、CD、CDV、LD、DVD等の光学的読取方式記憶媒体、MO等の磁気記憶型/光学的読取方式記憶媒体であって、電子的、磁気的、光学的等の読み取り方法のいかんにかかわらず、コンピュータで読み取り可能な記憶媒体であれば、あらゆる記憶媒体を含むものである。
Claims (1)
- データ型としてブロックフローティング型のブロックフローティング変数を用いて演算式を記述したソースプログラムが与えられたときに、与えられたソースプログラムをオブジェクトプログラムに翻訳するコンパイル装置であって、
前記ブロックフローティング変数は、1又は複数のデータを含んで構成されたデータグループと、前記データグループに含まれる各データに共通の指数である各データグループのグループスケールファクタと、複数の前記データグループを含んで構成されたデータブロックに含まれる各データグループに共通の指数であるブロックスケールファクタと、を含んで構成されたデータブロックのデータ構造を表す変数であり、
前記ソースプログラムのなかから前記演算式を検出する演算式検出手段と、前記演算式検出手段で検出した演算式に基づいて、演算の対象となる前記ブロックフローティング変数に対応するデータブロックを用いた演算を行う処理を構成する所定の命令コードとして展開する演算式展開手段と、前記演算式展開手段で展開した命令コードを前記オブジェクトプログラムに変換するオブジェクトコード変換手段とを備えることを特徴とするコンパイル装置。
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)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR102348795B1 (ko) * | 2020-11-02 | 2022-01-07 | 주식회사 바움 | 부동 소수점 방식에서 고정 소수점 방식으로의 변환 수행시 비트 폭 최적화 방법 |
Citations (2)
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 |
-
2007
- 2007-05-07 JP JP2007122809A patent/JP4594957B2/ja not_active Expired - Fee Related
Patent Citations (2)
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)
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) | 処理装置、チップ、電子設備及び方法 | |
JPWO2003032157A1 (ja) | コンパイル装置 | |
CN105573715B (zh) | 响应指令执行舍入运算 | |
Moore | Reliability in computing: the role of interval methods in scientific computing | |
US5930158A (en) | Processor with instruction set for audio effects | |
US10965744B2 (en) | Arrangements for communicating data in a computing system using multiple processors | |
KR20190117714A (ko) | 하드웨어에서 매트릭스 곱셈을 수행 | |
JP2008033729A (ja) | 演算プログラム変換装置、演算プログラム変換プログラム、演算プログラム変換方法 | |
US20160004579A1 (en) | Method of generating automatic code for remote procedure call | |
CN113296732B (zh) | 数据处理方法和装置,处理器及数据搜索方法和装置 | |
JP4594957B2 (ja) | コンパイル装置 | |
CN106557312B (zh) | 程序开发支援装置以及程序开发支援软件 | |
WO2023116400A1 (zh) | 向量运算方法、向量运算器、电子设备和存储介质 | |
TW202333041A (zh) | 執行浮點運算的系統及方法 | |
JP4728392B2 (ja) | 大数乗算方法およびデバイス | |
KR100887327B1 (ko) | 다양한 정밀도에 대한 고속 부동 소수점 연산을 수행하는방법, 프로그래밍 구조 및 기록 매체 | |
CN113760380B (zh) | 网络模型的运行代码的确定方法、装置、设备及存储介质 | |
CN114972955A (zh) | 一种数据处理方法、装置及存储介质 | |
JP2006318382A (ja) | 演算装置および型変換装置 | |
JP6137962B2 (ja) | 情報処理装置、情報処理方法及びプログラム | |
McKeown et al. | Uniformization and the Yamabe Problem | |
JPH09128213A (ja) | ブロックフローティング処理システムおよび方法 | |
JP6409639B2 (ja) | コンパイラプログラム、システム、方法、及び装置 | |
EP1700208B1 (en) | Apparatus and method to avoid floating point control instructions in floating point to integer conversion | |
EP4266199A1 (en) | Feature extraction method and apparatus for three-dimensional feature map, storage medium, and electronic device |
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 |