(57)【要約】ブロックフローティング方式による演算をソフトウェアで行う場合において、ソースプログラムにおける演算の記述を容易とし、ソースプログラムの記述を簡素化してバグの発生を低減するのに好適なコンパイル装置を提供する。ブロックフローティング変数を用いて演算式を記述したソースプログラムが与えられたときに、与えられたソースプログラムのなかから加算を行う演算式を検出し、検出した演算式のうち加算に係る部分について、加算の対象となる複数のブロックフローティング変数に対応するデータブロックを用いた加算を行う処理を構成する命令コードとして展開し、展開した命令コードをオブジェクトプログラムに埋め込み、オブジェクトプログラムを生成・出力する。
2003032157.tif 000002
【特許請求の範囲】
【請求項１】
ブロック浮動小数点型変数を扱うようになっていることを特徴とするコンパイル装置。
【請求項２】
請求の範囲第１項において、
演算式と演算式のオペランドの情報から演算用ブロックスケールファクタを算出し、
ブロック浮動小数点型変数については、演算用ブロックスケールファクタ、ブロックスケールファクタに基づくシフト処理を行って演算器へデータ入力するような命令コードを生成するようになっていることを特徴とするコンパイル装置。
【請求項３】
請求の範囲第２項において、
演算式と演算式のオペランドの情報から中間結果スケールファクタを算出し、
ブロック浮動小数点型の出力変数については、演算結果の正規化を行い、その正規化によって更新される更新グループスケールファクタ及び中間結果スケールファクタに基づくブロックスケールファクタを算出するような命令コードを生成するようになっていることを特徴とするコンパイル装置。
【請求項４】
階層的ブロック浮動小数点型変数を扱うようになっていることを特徴とするコンパイル装置。
【請求項５】
請求の範囲第４項において、
演算式と演算式のオペランドの情報から演算用ブロックスケールファクタを算出し、
階層的ブロック浮動小数点型変数については、演算用ブロックスケールファクタ、ブロックスケールファクタ、及びグループスケールファクタに基づくシフト処理を行って演算器へデータ入力するような命令コードを生成するようになっていることを特徴とするコンパイル装置。
【請求項６】
請求の範囲第５項において、
演算式と演算式のオペランドの情報から中間結果スケールファクタを算出し、
階層的ブロック浮動小数点型の出力変数については、演算結果のグループ正規化を行い、そのグループ正規化によって更新される更新グループスケールファクタ及び中間結果スケールファクタに基づく最終グループスケールファクタを算出し、
算出されたグループスケールファクタからブロックスケールファクタを算出するような命令コードを生成するようになっていることを特徴とするコンパイル装置。
【請求項７】
ブロック浮動小数点型変数を扱うコンパイル装置であって、
乗算又は除算について、ブロック浮動小数点型変数のブロックスケールファクタに基づいて乗算結果のブロックスケールファクタを算出するような命令コードを生成するようになっていることを特徴とするコンパイル装置。
【請求項８】
ブロック浮動小数点型変数と固定小数点型変数を扱うコンパイル装置であって、
乗算又は除算について、ブロック浮動小数点型変数のブロックスケールファクタに基づいて乗算結果のブロックスケールファクタを算出するような命令コードを生成するようになっていることを特徴とするコンパイル装置。
【請求項９】
階層的ブロック浮動小数点型変数を扱うコンパイル装置であって、
乗算又は除算について、階層的ブロック浮動小数点型変数のブロックスケールファクタに基づいて演算結果のブロックスケールファクタを算出するような命令コードを生成するようになっていることを特徴とするコンパイル装置。
【請求項１０】
ブロック浮動小数点型変数を扱うコンパイル装置であって、
加算又は減算について、ブロック浮動小数点型変数のブロックスケールファクタの比較に基づいて共通ブロックスケールファクタを選択し、
共通スケールファクタに基づいてデータブロックのデータをスケーリングし、
スケーリングを施したデータに対して加算又は減算を行うような命令コードを生成するようになっていることを特徴とするコンパイル装置。
【請求項１１】
ブロック浮動小数点型変数と固定小数点型変数を扱うコンパイル装置であって、
加算又は減算について、ブロック浮動小数点型変数のブロックスケールファクタとある定数で与えられる固定小数点変数の仮想ブロックスケールファクタとの比較に基づいて共通ブロックスケールファクタを選択し、
共通スケールファクタに基づいてデータブロックのデータをスケーリングし、
スケーリングを施したデータに対して加算又は減算を行うような命令コードを生成するようになっていることを特徴とするコンパイル装置。
【請求項１２】
階層的ブロック浮動小数点型変数を扱うコンパイル装置であって、
加算又は減算について、階層的ブロック浮動小数点型変数のブロックスケールファクタの比較に基づいて共通ブロックスケールファクタを選択し、
共通スケールファクタと各データグループのグループスケールファクタの差分に基づいてデータグループのデータをスケーリングし、
スケーリングを施したデータに対して加算又は減算を行うような命令コードを生成するようになっていることを特徴とするコンパイル装置。
【請求項１３】
ブロック浮動小数点型変数を扱うコンパイル装置であって、
加算又は減算について、ブロック浮動小数点型変数のブロックスケールファクタの比較に基づいて共通ブロックスケールファクタを選択し、
共通スケールファクタに基づいてデータブロックのデータをスケーリングし、
スケーリングを施したデータに対して加算又は減算を行うような命令コードを生成するようになっていることを特徴とするコンパイル装置。
【請求項１４】
ブロック浮動小数点型変数と固定小数点型変数を扱うコンパイル装置であって、
加算又は減算について、ブロック浮動小数点型変数のブロックスケールファクタの比較に基づいて共通ブロックスケールファクタを選択し、
共通スケールファクタに基づいてデータブロックのデータをスケーリングし、
スケーリングを施したデータに対して加算又は減算を行うような命令コードを生成するようになっていることを特徴とするコンパイル装置。
【請求項１５】
階層的ブロック浮動小数点型変数を扱うコンパイル装置であって、
加算又は減算について、階層的ブロック浮動小数点型変数のブロックスケールファクタの比較に基づいて共通ブロックスケールファクタを選択し、
共通スケールファクタと各データグループのグループスケールファクタの差分に基づいてデータグループのデータをスケーリングし、
スケーリングを施したデータに対して加算又は減算を行うような命令コードを生成するようになっていることを特徴とするコンパイル装置。
【請求項１６】
ブロック浮動小数点型変数を扱うコンパイル装置であって、
乗累算のうち、乗算の対象となるブロックフローティング変数に対して演算を行い、その乗算結果を累算することで乗累算を行い、その演算結果を演算結果データブロックとして算出するとともに、ブロックスケールファクタに基づいて演算結果ブロックスケールファクタを算出するようになっていることを特徴とするコンパイル装置。
【請求項１７】
ブロック浮動小数点型変数と固定小数点型変数を扱うコンパイル装置であって、
乗累算のうち、乗算の対象となるブロックフローティング変数と固定小数点変数に対して演算を行い、その乗算結果を累算することで乗累算を行い、その演算結果を演算結果データブロックとして算出するとともに、ブロックスケールファクタに基づいて演算結果ブロックスケールファクタを算出するようになっていることを特徴とするコンパイル装置。
【請求項１８】
階層的ブロック浮動小数点型変数を扱うコンパイル装置であって、
乗累算のうち、乗算の対象となる階層的ブロックフローティング変数に対してグループスケールファクタとブロックスケールファクタの差分からなるスケールファクタによりデータのスケーリングを行い、スケーリングを行ったデータに対して演算を行い、その乗算結果を累算することで乗累算を行い、その演算結果を演算結果データブロックとして算出するとともに、ブロックスケールファクタに基づいて演算結果ブロックスケールファクタを算出するようになっていることを特徴とするコンパイル装置。
【請求項１９】
データ型としてブロックフローティング型のブロックフローティング変数を用いて演算式を記述したソースプログラムが与えられたときに、与えられたソースプログラムをオブジェクトプログラムに翻訳する装置であって、
前記ブロックフローティング変数は、１又は複数のデータを含んでデータブロックを構成し、前記データブロックは、前記データブロックのブロックスケールファクタを含むデータ構造を表す変数であり、
前記ソースプログラムのなかから前記演算式を検出する演算式検出手段と、前記演算式検出手段で検出した演算式を所定の命令コードとして展開する演算式展開手段と、前記演算式展開手段で展開した命令コードを前記オブジェクトプログラムに変換するオブジェクトコード変換手段とを備えることを特徴とするコンパイル装置。
【請求項２０】
請求の範囲第１９項において、
前記演算式検出手段は、前記演算式の演算子及びその演算子の入力オペランドのデータ型と演算子の出力オペランドのデータ型とを演算式検出結果として検出し、
前記演算式展開手段は、前記演算式検出手段で検出される前記演算式検出結果のうち演算子及び演算子の入力オペランドのデータ型の情報に基づき、
入力オペランドがブロックフローティング型のデータを含む場合には、入力データブロックのブロックスケールファクタから演算用ブロックスケールファクタを算出する処理を構成する命令コードとして展開し、
入力オペランドがブロックフローティング型のデータの場合には、ブロックフローティング型のデータを演算器に入力する処理については、前記演算用ブロックスケールファクタ及び入力オペランドのブロックスケールファクタの一方又は両方に基づくシフト処理を行う演算器へのデータ入力処理を構成する命令コードとして展開するようになっていることを特徴とするコンパイル装置。
【請求項２１】
請求の範囲第２０項において、
前記演算式展開手段は、演算器に入力されたブロックフローティング型のデータについては、前記演算子に基づく演算処理を構成する命令コードとして展開し、
出力オペランドがブロックフローティング型のデータの場合には、入力データブロックのブロックスケールファクタから中間結果ブロックスケールファクタを算出し、出力オペランドに対応する演算結果の正規化を行い、前記中間結果ブロックスケールファクタからブロックスケールファクタを算出するデータ出力処理を構成する命令コードとして展開するようになっていることを特徴とするコンパイル装置。
【請求項２２】
データ型としてブロックフローティング型のブロックフローティング変数を用いて演算式を記述したソースプログラムが与えられたときに、与えられたソースプログラムをオブジェクトプログラムに翻訳する装置であって、
前記ブロックフローティング変数は、１又は複数のデータと１個のグループスケールファクタを含んでデータグループを構成し、さらに１又は複数のデータグループを含んでデータブロックを構成し、前記データブロックは、前記データブロックのブロックスケールファクタを含むデータ構造を表す変数であり、
前記ソースプログラムのなかから前記演算式を検出する演算式検出手段と、前記演算式検出手段で検出した演算式を所定の命令コードとして展開する演算式展開手段と、前記演算式展開手段で展開した命令コードを前記オブジェクトプログラムに変換するオブジェクトコード変換手段とを備えることを特徴とするコンパイル装置。
【請求項２３】
請求の範囲第２２項において、
前記演算式検出手段は、前記演算式の演算子及びその演算子の入力オペランドのデータ型と演算子の出力オペランドのデータ型とを演算式検出結果として検出し、
前記演算式展開手段は、前記演算式検出手段で検出される前記演算式検出結果のうち演算子及び演算子の入力オペランドのデータ型の情報に基づき、
入力オペランドがブロックフローティング型のデータを含む場合には、入力データブロックのブロックスケールファクタから演算用ブロックスケールファクタを算出する処理を構成する命令コードとして展開し、
入力オペランドがブロックフローティング型のデータの場合には、ブロックフローティング型のデータを演算器に入力する処理については、前記演算用ブロックスケールファクタ及び入力オペランドのブロックスケールファクタの一方又は両方、並びにグループスケールファクタに基づくシフト処理を行う演算器へのデータ入力処理を構成する命令コードとして展開するようになっていることを特徴とするコンパイル装置。
【請求項２４】
請求の範囲第２３項において、
前記演算式展開手段は、演算器に入力されたブロックフローティング型のデータについては、前記演算子に基づく演算処理を構成する命令コードとして展開し、
出力オペランドがブロックフローティング型のデータの場合には、入力データブロックのブロックスケールファクタから中間結果ブロックスケールファクタを算出し、出力オペランドに対応する演算結果のグループ正規化を行い、そのグループ正規化によって算出される更新グループスケールファクタ及び前記中間結果ブロックスケールファクタの一方又は両方から算出される最終グループスケールファクタを算出し、その算出されたグループスケールファクタからブロックスケールファクタを算出するデータ出力処理を構成する命令コードとして展開するようになっていることを特徴とするコンパイル装置。
【請求項２５】
ブロックフローティング変数を用いて演算式を記述したソースプログラムが与えられたときに、与えられたソースプログラムを翻訳してオブジェクトプログラムを生成する装置であって、
前記ブロックフローティング変数は、１又は複数のデータを含んでデータブロックを構成し、前記データブロックは、前記データブロックのブロックスケールファクタを含むデータ構造を表す変数であり、
前記ソースプログラムのなかから乗算又は除算を行う前記演算式を検出する演算式検出手段と、前記演算式検出手段で検出した演算式を所定の命令コードとして展開する演算式展開手段と、前記演算式展開手段で展開した命令コードを前記オブジェクトプログラムに埋め込む命令コード埋込手段とを備え、
前記演算式展開手段は、前記演算式検出手段で検出した演算式のうち乗算又は除算に係る部分について、乗算又は除算の対象となる前記ブロックフローティング変数に対応するデータブロックを用いた乗算又は除算を行う処理を構成する命令コードとして展開するようになっており、
前記命令コードにより構成される処理は、前記データブロックのデータに対して乗算又は除算を行い、その演算結果を演算結果データブロックとして算出するとともに、前記データブロックのブロックスケールファクタに基づいて前記演算結果データブロックのブロックスケールファクタを算出するようになっていることを特徴とするコンパイル装置。
【請求項２６】
ブロックフローティング変数及び固定小数点変数を用いて演算式を記述したソースプログラムが与えられたときに、与えられたソースプログラムを翻訳してオブジェクトプログラムを生成する装置であって、
前記ブロックフローティング変数は、１又は複数のデータを含んでデータブロックを構成し、前記データブロックは、前記データブロックのブロックスケールファクタを含むデータ構造を表す変数であり、
前記固定小数点変数は、１又は複数のデータを含んでデータブロックを構成するデータ構造を表す変数であり、
前記ソースプログラムのなかから乗算又は除算を行う前記演算式を検出する演算式検出手段と、前記演算式検出手段で検出した演算式を所定の命令コードとして展開する演算式展開手段と、前記演算式展開手段で展開した命令コードを前記オブジェクトプログラムに埋め込む命令コード埋込手段とを備え、
前記演算式展開手段は、前記演算式検出手段で検出した演算式のうち乗算又は除算に係る部分について、乗算又は除算の対象となる前記ブロックフローティング変数及び前記固定小数点変数に対応するデータブロックを用いた乗算又は除算を行う処理を構成する命令コードとして展開するようになっており、
前記命令コードにより構成される処理は、前記ブロックフローティング変数に対応するデータブロックのデータと前記固定小数点変数に対応するデータブロックのデータとを乗算し又は除算し、その演算結果を演算結果データブロックとして算出するとともに、前記ブロックフローティング変数に対応するデータブロックのブロックスケールファクタに基づいて前記演算結果データブロックのブロックスケールファクタを算出するようになっていることを特徴とするコンパイル装置。
【請求項２７】
ブロックフローティング変数を用いて演算式を記述したソースプログラムが与えられたときに、与えられたソースプログラムを翻訳してオブジェクトプログラムを生成する装置であって、
前記ブロックフローティング変数は、１又は複数のデータを含んでデータグループを構成し、さらに複数のデータグループを含んでデータブロックを構成し、前記データブロックは、前記各データグループのグループスケールファクタ及び前記データブロックのブロックスケールファクタを含むデータ構造を表す変数であり、
前記ソースプログラムのなかから乗算又は除算を行う前記演算式を検出する演算式検出手段と、前記演算式検出手段で検出した演算式を所定の命令コードとして展開する演算式展開手段と、前記演算式展開手段で展開した命令コードを前記オブジェクトプログラムに埋め込む命令コード埋込手段とを備え、
前記演算式展開手段は、前記演算式検出手段で検出した演算式のうち乗算又は除算に係る部分について、乗算又は除算の対象となる前記ブロックフローティング変数に対応するデータブロックを用いた乗算又は除算を行う処理を構成する命令コードとして展開するようになっており、
前記命令コードにより構成される処理は、前記データブロックの各データに対して乗算又は除算を行い、それら演算結果を演算結果データブロックとして算出するとともに、前記データブロックのブロックスケールファクタに基づいて前記演算結果データブロックのブロックスケールファクタを算出するようになっていることを特徴とするコンパイル装置。
【請求項２８】
ブロックフローティング変数を用いて演算式を記述したソースプログラムが与えられたときに、与えられたソースプログラムを翻訳してオブジェクトプログラムを生成する装置であって、
前記ブロックフローティング変数は、１又は複数のデータを含んでデータブロックを構成し、前記データブロックは、前記データブロックのブロックスケールファクタを含むデータ構造を表す変数であり、
前記ソースプログラムのなかから加算又は減算を行う前記演算式を検出する演算式検出手段と、前記演算式検出手段で検出した演算式を所定の命令コードとして展開する演算式展開手段と、前記演算式展開手段で展開した命令コードを前記オブジェクトプログラムに埋め込む命令コード埋込手段とを備え、
前記演算式展開手段は、前記演算式検出手段で検出した演算式のうち加算又は減算に係る部分について、加算又は減算の対象となる前記ブロックフローティング変数に対応するデータブロックを用いた加算又は減算を行う処理を構成する命令コードとして展開するようになっており、
前記命令コードにより構成される処理は、前記データブロックのブロックスケールファクタのうち絶対値が最大のデータを含むデータブロックのものを共通ブロックスケールファクタとして選択し、
前記共通ブロックスケールファクタに基づいて前記データブロックの各データに対してスケーリングを行い、
スケーリングを行った各データブロックのデータに対して加算又は減算を行うようになっていることを特徴とするコンパイル装置。
【請求項２９】
ブロックフローティング変数及び固定小数点変数を用いて演算式を記述したソースプログラムが与えられたときに、与えられたソースプログラムを翻訳してオブジェクトプログラムを生成する装置であって、
前記ブロックフローティング変数は、１又は複数のデータを含んでデータブロックを構成し、前記データブロックは、前記データブロックのブロックスケールファクタを含むデータ構造を表す変数であり、
前記固定小数点変数は、１又は複数のデータを含んでデータブロックを構成するデータ構造を表す変数であり、
前記ソースプログラムのなかから加算又は減算を行う前記演算式を検出する演算式検出手段と、前記演算式検出手段で検出した演算式を所定の命令コードとして展開する演算式展開手段と、前記演算式展開手段で展開した命令コードを前記オブジェクトプログラムに埋め込む命令コード埋込手段とを備え、
前記演算式展開手段は、前記演算式検出手段で検出した演算式のうち加算又は減算に係る部分について、加算又は減算の対象となる前記ブロックフローティング変数及び前記固定小数点変数に対応するデータブロックを用いた加算又は減算を行う処理を構成する命令コードとして展開するようになっており、
前記命令コードにより構成される処理は、固定小数点データブロックについてはある定数として与えられる仮想ブロックスケールファクタを算出し、前記ブロックフローティング変数に対応するデータブロックのブロックスケールファクタ及び前記仮想ブロックスケールファクタのうち、絶対値が最大のデータを含むデータブロックのものを共通ブロックスケールファクタとして選択し、前記共通ブロックスケールファクタに基づいて当該データブロックの各データに対してスケーリングを行い、
スケーリングを行った各データブロックのデータと前記固定小数点変数に対応するデータブロックのデータとを加算し又は減算するようになっていることを特徴とするコンパイル装置。
【請求項３０】
ブロックフローティング変数を用いて演算式を記述したソースプログラムが与えられたときに、与えられたソースプログラムを翻訳してオブジェクトプログラムを生成する装置であって、
前記ブロックフローティング変数は、１又は複数のデータを含んでデータグループを構成し、さらに複数のデータグループを含んでデータブロックを構成し、前記データブロックは、前記各データグループのグループスケールファクタ及び前記データブロックのブロックスケールファクタを含むデータ構造を表す変数であり、
前記ソースプログラムのなかから加算又は減算を行う前記演算式を検出する演算式検出手段と、前記演算式検出手段で検出した演算式を所定の命令コードとして展開する演算式展開手段と、前記演算式展開手段で展開した命令コードを前記オブジェクトプログラムに埋め込む命令コード埋込手段とを備え、
前記演算式展開手段は、前記演算式検出手段で検出した演算式のうち加算又は減算に係る部分について、加算又は減算の対象となる前記ブロックフローティング変数に対応するデータブロックを用いた加算又は減算を行う処理を構成する命令コードとして展開するようになっており、
前記命令コードにより構成される処理は、前記データブロックのブロックスケールファクタのうち絶対値が最大のデータを含むデータブロックのものを共通ブロックスケールファクタとして選択し、
前記データブロックの各データグループごとに、当該データグループのグループスケールファクタと前記共通ブロックスケールファクタとの差分からなるスケールファクタに基づいて、当該データグループの各データに対してスケーリングを行い、
スケーリングを行った各データブロックのデータに対して加算又は減算を行うようになっていることを特徴とするコンパイル装置。
【請求項３１】
ブロックフローティング変数を用いて演算式を記述したソースプログラムが与えられたときに、与えられたソースプログラムを翻訳してオブジェクトプログラムを生成する装置であって、
前記ブロックフローティング変数は、１又は複数のデータを含んでデータブロックを構成し、前記データブロックは、前記データブロックのブロックスケールファクタを含むデータ構造を表す変数であり、
前記ソースプログラムのなかから乗累算を行う前記演算式を検出する演算式検出手段と、前記演算式検出手段で検出した演算式を所定の命令コードとして展開する演算式展開手段と、前記演算式展開手段で展開した命令コードを前記オブジェクトプログラムに埋め込む命令コード埋込手段とを備え、
前記演算式展開手段は、前記演算式検出手段で検出した演算式のうち乗累算に係る部分について、乗算の対象となる２つの前記ブロックフローティング変数に対応する第１データブロック及び第２データブロック、並びに加算又は減算の対象となる前記ブロックフローティング変数に対応する第３データブロックを用いた乗累算を行う処理を構成する命令コードとして展開するようになっており、
前記命令コードにより構成される処理は、与えられたスケールファクタに基づいて前記第１データブロックの各データに対してスケーリングを行う第１スケーリング処理と、与えられたスケールファクタに基づいて前記第３データブロックの各データに対してスケーリングを行う第２スケーリング処理と、前記第２データブロック及び前記第１スケーリング処理からの第１データブロックを用いた乗算を行う乗算処理と、前記乗算処理からの乗算結果データブロック及び前記第２スケーリング処理からの第３データブロックを用いた加算又は減算を行う演算処理とを備え、
さらに、前記第１データブロック及び前記第２データブロックのブロックスケールファクタの和である乗算結果ブロックスケールファクタと、前記第３データブロックのブロックスケールファクタとの差分からなる補正ブロックスケールファクタを算出し、
前記補正ブロックスケールファクタを前記第１スケーリング処理に与え、前記第１データブロックのデータを前記第１スケーリング処理に入力し、且つ、前記第２スケーリング処理にスケールファクタを与えず、前記第３データブロックのデータを前記第２スケーリング処理に入力するようになっていることを特徴とするコンパイル装置。
【請求項３２】
請求の範囲第３１項において、
前記命令コードにより構成される処理は、前記補正ブロックスケールファクタを前記第１スケーリング処理に与え、前記第１データブロックのデータを前記第１スケーリング処理に入力し、且つ、前記第２スケーリング処理にスケールファクタを与えず、前記第３データブロックのデータを前記第２スケーリング処理に入力する第１スケール補正処理と、
前記補正ブロックスケールファクタを前記第２スケーリング処理に与え、前記第３データブロックのデータを前記第２スケーリング処理に入力し、且つ、前記第１スケーリング処理にスケールファクタを与えず、前記第１データブロックのデータを前記第１スケーリング処理に入力する第２スケール補正処理とのうちいずれかを行うようになっていることを特徴とするコンパイル装置。
【請求項３３】
請求の範囲第３２項において、
前記命令コードにより構成される処理は、前記乗算結果ブロックスケールファクタ及び前記第３データブロックのブロックスケールファクタの大小関係に基づいて、前記第１スケール補正処理及び前記第２スケール補正処理のいずれかを選択的に行うようになっていることを特徴とするコンパイル装置。
【請求項３４】
請求の範囲第３３項において、
前記第１スケーリング処理は、与えられたスケールファクタに相当するシフト量で、入力したデータに対して下位ビットの方向へビットシフトを行うようになっており、
前記第２スケーリング処理は、与えられたスケールファクタに相当するシフト量で、入力したデータに対して下位ビットの方向へビットシフトを行うようになっており、
前記命令コードにより構成される処理は、前記第３データブロックのブロックスケールファクタが前記乗算結果ブロックスケールファクタよりも大きいときは、前記第１スケール補正処理を行い、前記乗算結果ブロックスケールファクタが前記第３データブロックのブロックスケールファクタよりも大きいときは、前記第２スケール補正処理を行うようになっていることを特徴とするコンパイル装置。
【請求項３５】
請求の範囲第３３項において、
前記第１スケーリング処理は、与えられたスケールファクタに相当するシフト量で、入力したデータに対して上位ビットの方向へビットシフトを行うようになっており、
前記第２スケーリング処理は、与えられたスケールファクタに相当するシフト量で、入力したデータに対して上位ビットの方向へビットシフトを行うようになっており、
前記命令コードにより構成される処理は、前記第３データブロックのブロックスケールファクタが前記乗算結果ブロックスケールファクタよりも大きいときは、前記第２スケール補正処理を行い、前記乗算結果ブロックスケールファクタが前記第３データブロックのブロックスケールファクタよりも大きいときは、前記第１スケール補正処理を行うようになっていることを特徴とするコンパイル装置。
【請求項３６】
ブロックフローティング変数を用いて演算式を記述したソースプログラムが与えられたときに、与えられたソースプログラムを翻訳してオブジェクトプログラムを生成する装置であって、
前記ブロックフローティング変数は、１又は複数のデータを含んでデータグループを構成し、さらに複数のデータグループを含んでデータブロックを構成し、前記データブロックは、前記各データグループのグループスケールファクタ及び前記データブロックのブロックスケールファクタを含むデータ構造を表す変数であり、
前記ソースプログラムのなかから乗累算を行う前記演算式を検出する演算式検出手段と、前記演算式検出手段で検出した演算式を所定の命令コードとして展開する演算式展開手段と、前記演算式展開手段で展開した命令コードを前記オブジェクトプログラムに埋め込む命令コード埋込手段とを備え、
前記演算式展開手段は、前記演算式検出手段で検出した演算式のうち乗累算に係る部分について、乗算の対象となる２つの前記ブロックフローティング変数に対応する第１データブロック及び第２データブロック、並びに加算又は減算の対象となる前記ブロックフローティング変数に対応する第３データブロックを用いた乗累算を行う処理を構成する命令コードとして展開するようになっており、
前記命令コードにより構成される処理は、与えられたスケールファクタに基づいて前記第１データブロックの各データに対してスケーリングを行う第１スケーリング処理と、与えられたスケールファクタに基づいて前記第３データブロックの各データに対してスケーリングを行う第２スケーリング処理と、前記第２データブロック及び前記第１スケーリング処理からの第１データブロックを用いた乗算を行う乗算処理と、前記乗算処理からの乗算結果データブロック及び前記第２スケーリング処理からの第３データブロックを用いた加算又は減算を行う演算処理とを備え、
前記第１データブロック及び前記第２データブロックのブロックスケールファクタの和である乗算結果ブロックスケールファクタと、前記第３データブロックのブロックスケールファクタとの差分からなる補正ブロックスケールファクタを算出し、
前記第１データブロックの各データグループごとに、当該データグループのグループスケールファクタと前記第１データブロックのブロックスケールファクタとの差分からなるスケールファクタに前記補正ブロックスケールファクタを加算したものを前記第１スケーリング処理に与え、当該データグループのデータを前記第１スケーリング処理に入力し、且つ、前記第３データブロックの各データグループごとに、当該データグループのグループスケールファクタと前記第３データブロックのブロックスケールファクタとの差分からなるスケールファクタを前記第２スケーリング処理に与え、当該データグループのデータを前記第２スケーリング処理に入力するようになっていることを特徴とするコンパイル装置。
【請求項３７】
請求の範囲第３６項において、
前記命令コードにより構成される処理は、前記第１データブロックの各データグループごとに、当該データグループのグループスケールファクタと前記第１データブロックのブロックスケールファクタとの差分からなるスケールファクタに前記補正ブロックスケールファクタを加算したものを前記第１スケーリング処理に与え、当該データグループのデータを前記第１スケーリング処理に入力し、且つ、前記第３データブロックの各データグループごとに、当該データグループのグループスケールファクタと前記第３データブロックのブロックスケールファクタとの差分からなるスケールファクタを前記第２スケーリング処理に与え、当該データグループのデータを前記第２スケーリング処理に入力する第１スケール補正処理と、
前記第３データブロックの各データグループごとに、当該データグループのグループスケールファクタと前記第３データブロックのブロックスケールファクタとの差分からなるスケールファクタに前記補正ブロックスケールファクタを加算したものを前記第２スケーリング処理に与え、当該データグループのデータを前記第２スケーリング処理に入力し、且つ、前記第１データブロックの各データグループごとに、当該データグループのグループスケールファクタと前記第１データブロックのブロックスケールファクタとの差分からなるスケールファクタを前記第１スケーリング処理に与え、当該データグループのデータを前記第１スケーリング処理に入力する第２スケール補正処理とのうちいずれかを行うようになっていることを特徴とするコンパイル装置。
【請求項３８】
ブロック浮動小数点型変数を扱う処理をコンピュータに実行させるためのプログラムであることを特徴とするコンパイルプログラム。
【請求項３９】
請求の範囲第３８項において、
演算式と演算式のオペランドの情報から演算用ブロックスケールファクタを算出し、
ブロック浮動小数点型変数については、演算用ブロックスケールファクタ、ブロックスケールファクタに基づくシフト処理を行って演算器へデータ入力するような命令コードを生成する処理をコンピュータに実行させるためのプログラムであることを特徴とするコンパイルプログラム。
【請求項４０】
請求の範囲第３９項において、
演算式と演算式のオペランドの情報から中間結果スケールファクタを算出し、
ブロック浮動小数点型の出力変数については、演算結果の正規化を行い、その正規化によって更新される更新グループスケールファクタ及び中間結果スケールファクタに基づくブロックスケールファクタを算出するような命令コードを生成する処理をコンピュータに実行させるためのプログラムであることを特徴とするコンパイルプログラム。
【請求項４１】
階層的ブロック浮動小数点型変数を扱う処理をコンピュータに実行させるためのプログラムであることを特徴とするコンパイルプログラム。
【請求項４２】
請求の範囲第４１項において、
演算式と演算式のオペランドの情報から演算用ブロックスケールファクタを算出し、
階層的ブロック浮動小数点型変数については、演算用ブロックスケールファクタ、ブロックスケールファクタ、及びグループスケールファクタに基づくシフト処理を行って演算器へデータ入力するような命令コードを生成する処理をコンピュータに実行させるためのプログラムであることを特徴とするコンパイルプログラム。
【請求項４３】
請求の範囲第４２項において、
演算式と演算式のオペランドの情報から中間結果スケールファクタを算出し、
階層的ブロック浮動小数点型の出力変数については、演算結果のグループ正規化を行い、そのグループ正規化によって更新される更新グループスケールファクタ及び中間結果スケールファクタに基づく最終グループスケールファクタを算出し、
算出されたグループスケールファクタからブロックスケールファクタを算出するような命令コードを生成する処理をコンピュータに実行させるためのプログラムであることを特徴とするコンパイルプログラム。
【請求項４４】
ブロック浮動小数点型変数を扱うコンパイルプログラムであって、
乗算又は除算について、ブロック浮動小数点型変数のブロックスケールファクタに基づいて乗算結果のブロックスケールファクタを算出するような命令コードを生成する処理をコンピュータに実行させるためのプログラムであることを特徴とするコンパイルプログラム。
【請求項４５】
ブロック浮動小数点型変数と固定小数点型変数を扱うコンパイルプログラムであって、
乗算又は除算について、ブロック浮動小数点型変数のブロックスケールファクタに基づいて乗算結果のブロックスケールファクタを算出するような命令コードを生成する処理をコンピュータに実行させるためのプログラムであることを特徴とするコンパイルプログラム。
【請求項４６】
階層的ブロック浮動小数点型変数を扱うコンパイルプログラムであって、
乗算又は除算について、階層的ブロック浮動小数点型変数のブロックスケールファクタに基づいて演算結果のブロックスケールファクタを算出するような命令コードを生成する処理をコンピュータに実行させるためのプログラムであることを特徴とするコンパイルプログラム。
【請求項４７】
ブロック浮動小数点型変数を扱うコンパイルプログラムであって、
加算又は減算について、ブロック浮動小数点型変数のブロックスケールファクタの比較に基づいて共通ブロックスケールファクタを選択し、
共通スケールファクタに基づいてデータブロックのデータをスケーリングし、
スケーリングを施したデータに対して加算又は減算を行うような命令コードを生成する処理をコンピュータに実行させるためのプログラムであることを特徴とするコンパイルプログラム。
【請求項４８】
ブロック浮動小数点型変数と固定小数点型変数を扱うコンパイルプログラムであって、
加算又は減算について、ブロック浮動小数点型変数のブロックスケールファクタとある定数で与えられる固定小数点変数の仮想ブロックスケールファクタとの比較に基づいて共通ブロックスケールファクタを選択し、
共通スケールファクタに基づいてデータブロックのデータをスケーリングし、
スケーリングを施したデータに対して加算又は減算を行うような命令コードを生成する処理をコンピュータに実行させるためのプログラムであることを特徴とするコンパイルプログラム。
【請求項４９】
階層的ブロック浮動小数点型変数を扱うコンパイルプログラムであって、
加算又は減算について、階層的ブロック浮動小数点型変数のブロックスケールファクタの比較に基づいて共通ブロックスケールファクタを選択し、
共通スケールファクタと各データグループのグループスケールファクタの差分に基づいてデータグループのデータをスケーリングし、
スケーリングを施したデータに対して加算又は減算を行うような命令コードを生成する処理をコンピュータに実行させるためのプログラムであることを特徴とするコンパイルプログラム。
【請求項５０】
ブロック浮動小数点型変数を扱うコンパイルプログラムであって、
加算又は減算について、ブロック浮動小数点型変数のブロックスケールファクタの比較に基づいて共通ブロックスケールファクタを選択し、
共通スケールファクタに基づいてデータブロックのデータをスケーリングし、
スケーリングを施したデータに対して加算又は減算を行うような命令コードを生成する処理をコンピュータに実行させるためのプログラムであることを特徴とするコンパイルプログラム。
【請求項５１】
ブロック浮動小数点型変数と固定小数点型変数を扱うコンパイルプログラムであって、
加算又は減算について、ブロック浮動小数点型変数のブロックスケールファクタの比較に基づいて共通ブロックスケールファクタを選択し、
共通スケールファクタに基づいてデータブロックのデータをスケーリングし、
スケーリングを施したデータに対して加算又は減算を行うような命令コードを生成する処理をコンピュータに実行させるためのプログラムであることを特徴とするコンパイルプログラム。
【請求項５２】
階層的ブロック浮動小数点型変数を扱うコンパイルプログラムであって、
加算又は減算について、階層的ブロック浮動小数点型変数のブロックスケールファクタの比較に基づいて共通ブロックスケールファクタを選択し、
共通スケールファクタと各データグループのグループスケールファクタの差分に基づいてデータグループのデータをスケーリングし、
スケーリングを施したデータに対して加算又は減算を行うような命令コードを生成する処理をコンピュータに実行させるためのプログラムであることを特徴とするコンパイルプログラム。
【請求項５３】
ブロック浮動小数点型変数を扱うコンパイルプログラムであって、
乗累算のうち、乗算の対象となるブロックフローティング変数に対して演算を行い、その乗算結果を累算することで乗累算を行い、その演算結果を演算結果データブロックとして算出するとともに、ブロックスケールファクタに基づいて演算結果ブロックスケールファクタを算出する処理をコンピュータに実行させるためのプログラムであることを特徴とするコンパイルプログラム。
【請求項５４】
ブロック浮動小数点型変数と固定小数点型変数を扱うコンパイルプログラムであって、
乗累算のうち、乗算の対象となるブロックフローティング変数と固定小数点変数に対して演算を行い、その乗算結果を累算することで乗累算を行い、その演算結果を演算結果データブロックとして算出するとともに、ブロックスケールファクタに基づいて演算結果ブロックスケールファクタを算出する処理をコンピュータに実行させるためのプログラムであることを特徴とするコンパイルプログラム。
【請求項５５】
階層的ブロック浮動小数点型変数を扱うコンパイルプログラムであって、
乗累算のうち、乗算の対象となる階層的ブロックフローティング変数に対してグループスケールファクタとブロックスケールファクタの差分からなるスケールファクタによりデータのスケーリングを行い、スケーリングを行ったデータに対して演算を行い、その乗算結果を累算することで乗累算を行い、その演算結果を演算結果データブロックとして算出するとともに、ブロックスケールファクタに基づいて演算結果ブロックスケールファクタを算出する処理をコンピュータに実行させるためのプログラムであることを特徴とするコンパイルプログラム。
【請求項５６】
データ型としてブロックフローティング型のブロックフローティング変数を用いて演算式を記述したソースプログラムが与えられたときに、与えられたソースプログラムをオブジェクトプログラムに翻訳するプログラムであって、
前記ブロックフローティング変数は、１又は複数のデータを含んでデータブロックを構成し、前記データブロックは、前記データブロックのブロックスケールファクタを含むデータ構造を表す変数であり、
前記ソースプログラムのなかから前記演算式を検出する演算式検出手段、前記演算式検出手段で検出した演算式を所定の命令コードとして展開する演算式展開手段、及び前記演算式展開手段で展開した命令コードを前記オブジェクトプログラムに変換するオブジェクトコード変換手段として実現される処理をコンピュータに実行させるためのプログラムであることを特徴とするコンパイルプログラム。
【請求項５７】
請求の範囲第５６項において、
前記演算式検出手段は、前記演算式の演算子及びその演算子の入力オペランドのデータ型と演算子の出力オペランドのデータ型とを演算式検出結果として検出し、
前記演算式展開手段は、前記演算式検出手段で検出される前記演算式検出結果のうち演算子及び演算子の入力オペランドのデータ型の情報に基づき、
入力オペランドがブロックフローティング型のデータを含む場合には、入力データブロックのブロックスケールファクタから演算用ブロックスケールファクタを算出する処理を構成する命令コードとして展開し、
入力オペランドがブロックフローティング型のデータの場合には、ブロックフローティング型のデータを演算器に入力する処理については、前記演算用ブロックスケールファクタ及び入力オペランドのブロックスケールファクタの一方又は両方に基づくシフト処理を行う演算器へのデータ入力処理を構成する命令コードとして展開するようになっていることを特徴とするコンパイルプログラム。
【請求項５８】
請求の範囲第５７項において、
前記演算式展開手段は、演算器に入力されたブロックフローティング型のデータについては、前記演算子に基づく演算処理を構成する命令コードとして展開し、
出力オペランドがブロックフローティング型のデータの場合には、入力データブロックのブロックスケールファクタから中間結果ブロックスケールファクタを算出し、出力オペランドに対応する演算結果の正規化を行い、前記中間結果ブロックスケールファクタからブロックスケールファクタを算出するデータ出力処理を構成する命令コードとして展開するようになっていることを特徴とするコンパイルプログラム。
【請求項５９】
データ型としてブロックフローティング型のブロックフローティング変数を用いて演算式を記述したソースプログラムが与えられたときに、与えられたソースプログラムをオブジェクトプログラムに翻訳するプログラムであって、
前記ブロックフローティング変数は、１又は複数のデータと１個のグループスケールファクタを含んでデータグループを構成し、さらに１又は複数のデータグループを含んでデータブロックを構成し、前記データブロックは、前記データブロックのブロックスケールファクタを含むデータ構造を表す変数であり、
前記ソースプログラムのなかから前記演算式を検出する演算式検出手段、前記演算式検出手段で検出した演算式を所定の命令コードとして展開する演算式展開手段、及び前記演算式展開手段で展開した命令コードを前記オブジェクトプログラムに変換するオブジェクトコード変換手段として実現される処理をコンピュータに実行させるためのプログラムであることを特徴とするコンパイルプログラム。
【請求項６０】
請求の範囲第５９項において、
前記演算式検出手段は、前記演算式の演算子及びその演算子の入力オペランドのデータ型と演算子の出力オペランドのデータ型とを演算式検出結果として検出し、
前記演算式展開手段は、前記演算式検出手段で検出される前記演算式検出結果のうち演算子及び演算子の入力オペランドのデータ型の情報に基づき、
入力オペランドがブロックフローティング型のデータを含む場合には、入力データブロックのブロックスケールファクタから演算用ブロックスケールファクタを算出する処理を構成する命令コードとして展開し、
入力オペランドがブロックフローティング型のデータの場合には、ブロックフローティング型のデータを演算器に入力する処理については、前記演算用ブロックスケールファクタ及び入力オペランドのブロックスケールファクタの一方又は両方、並びにグループスケールファクタに基づくシフト処理を行う演算器へのデータ入力処理を構成する命令コードとして展開するようになっていることを特徴とするコンパイルプログラム。
【請求項６１】
請求の範囲第６０項において、
前記演算式展開手段は、演算器に入力されたブロックフローティング型のデータについては、前記演算子に基づく演算処理を構成する命令コードとして展開し、
出力オペランドがブロックフローティング型のデータの場合には、入力データブロックのブロックスケールファクタから中間結果ブロックスケールファクタを算出し、出力オペランドに対応する演算結果のグループ正規化を行い、そのグループ正規化によって算出される更新グループスケールファクタ及び前記中間結果ブロックスケールファクタの一方又は両方から算出される最終グループスケールファクタを算出し、その算出されたグループスケールファクタからブロックスケールファクタを算出するデータ出力処理を構成する命令コードとして展開するようになっていることを特徴とするコンパイルプログラム。
【請求項６２】
ブロックフローティング変数を用いて演算式を記述したソースプログラムが与えられたときに、与えられたソースプログラムを翻訳してオブジェクトプログラムを生成するプログラムであって、
前記ブロックフローティング変数は、１又は複数のデータを含んでデータブロックを構成し、前記データブロックは、前記データブロックのブロックスケールファクタを含むデータ構造を表す変数であり、
前記ソースプログラムのなかから乗算又は除算を行う前記演算式を検出する演算式検出手段、前記演算式検出手段で検出した演算式を所定の命令コードとして展開する演算式展開手段、及び前記演算式展開手段で展開した命令コードを前記オブジェクトプログラムに埋め込む命令コード埋込手段として実現される処理をコンピュータに実行させるためのプログラムであり、
前記演算式展開手段は、前記演算式検出手段で検出した演算式のうち乗算又は除算に係る部分について、乗算又は除算の対象となる前記ブロックフローティング変数に対応するデータブロックを用いた乗算又は除算を行う処理を構成する命令コードとして展開するようになっており、
前記命令コードにより構成される処理は、前記データブロックのデータに対して乗算又は除算を行い、その演算結果を演算結果データブロックとして算出するとともに、前記データブロックのブロックスケールファクタに基づいて前記演算結果データブロックのブロックスケールファクタを算出するようになっていることを特徴とするコンパイルプログラム。
【請求項６３】
ブロックフローティング変数及び固定小数点変数を用いて演算式を記述したソースプログラムが与えられたときに、与えられたソースプログラムを翻訳してオブジェクトプログラムを生成するプログラムであって、
前記ブロックフローティング変数は、１又は複数のデータを含んでデータブロックを構成し、前記データブロックは、前記データブロックのブロックスケールファクタを含むデータ構造を表す変数であり、
前記固定小数点変数は、１又は複数のデータを含んでデータブロックを構成するデータ構造を表す変数であり、
前記ソースプログラムのなかから乗算又は除算を行う前記演算式を検出する演算式検出手段、前記演算式検出手段で検出した演算式を所定の命令コードとして展開する演算式展開手段、及び前記演算式展開手段で展開した命令コードを前記オブジェクトプログラムに埋め込む命令コード埋込手段として実現される処理をコンピュータに実行させるためのプログラムであり、
前記演算式展開手段は、前記演算式検出手段で検出した演算式のうち乗算又は除算に係る部分について、乗算又は除算の対象となる前記ブロックフローティング変数及び前記固定小数点変数に対応するデータブロックを用いた乗算又は除算を行う処理を構成する命令コードとして展開するようになっており、
前記命令コードにより構成される処理は、前記ブロックフローティング変数に対応するデータブロックのデータと前記固定小数点変数に対応するデータブロックのデータとを乗算し又は除算し、その演算結果を演算結果データブロックとして算出するとともに、前記ブロックフローティング変数に対応するデータブロックのブロックスケールファクタに基づいて前記演算結果データブロックのブロックスケールファクタを算出するようになっていることを特徴とするコンパイルプログラム。
【請求項６４】
ブロックフローティング変数を用いて演算式を記述したソースプログラムが与えられたときに、与えられたソースプログラムを翻訳してオブジェクトプログラムを生成するプログラムであって、
前記ブロックフローティング変数は、１又は複数のデータを含んでデータグループを構成し、さらに複数のデータグループを含んでデータブロックを構成し、前記データブロックは、前記各データグループのグループスケールファクタ及び前記データブロックのブロックスケールファクタを含むデータ構造を表す変数であり、
前記ソースプログラムのなかから乗算又は除算を行う前記演算式を検出する演算式検出手段、前記演算式検出手段で検出した演算式を所定の命令コードとして展開する演算式展開手段、及び前記演算式展開手段で展開した命令コードを前記オブジェクトプログラムに埋め込む命令コード埋込手段として実現される処理をコンピュータに実行させるためのプログラムであり、
前記演算式展開手段は、前記演算式検出手段で検出した演算式のうち乗算又は除算に係る部分について、乗算又は除算の対象となる前記ブロックフローティング変数に対応するデータブロックを用いた乗算又は除算を行う処理を構成する命令コードとして展開するようになっており、
前記命令コードにより構成される処理は、前記データブロックの各データグループごとに、当該データグループのデータに対して乗算又は除算を行い、それら演算結果を演算結果データブロックとして算出するとともに、前記データブロックのブロックスケールファクタに基づいて前記演算結果データブロックのブロックスケールファクタを算出するようになっていることを特徴とするコンパイルプログラム。
【請求項６５】
ブロックフローティング変数を用いて演算式を記述したソースプログラムが与えられたときに、与えられたソースプログラムを翻訳してオブジェクトプログラムを生成するプログラムであって、
前記ブロックフローティング変数は、１又は複数のデータを含んでデータブロックを構成し、前記データブロックは、前記データブロックのブロックスケールファクタを含むデータ構造を表す変数であり、
前記ソースプログラムのなかから加算又は減算を行う前記演算式を検出する演算式検出手段、前記演算式検出手段で検出した演算式を所定の命令コードとして展開する演算式展開手段、及び前記演算式展開手段で展開した命令コードを前記オブジェクトプログラムに埋め込む命令コード埋込手段として実現される処理をコンピュータに実行させるためのプログラムであり、
前記演算式展開手段は、前記演算式検出手段で検出した演算式のうち加算又は減算に係る部分について、加算又は減算の対象となる前記ブロックフローティング変数に対応するデータブロックを用いた加算又は減算を行う処理を構成する命令コードとして展開するようになっており、
前記命令コードにより構成される処理は、前記データブロックのブロックスケールファクタのうち絶対値が最大のデータを含むデータブロックのものを共通ブロックスケールファクタとして選択し、
前記共通ブロックスケールファクタに基づいて前記データブロックの各データに対してスケーリングを行い、
スケーリングを行った各データブロックのデータに対して加算又は減算を行うようになっていることを特徴とするコンパイルプログラム。
【請求項６６】
ブロックフローティング変数及び固定小数点変数を用いて演算式を記述したソースプログラムが与えられたときに、与えられたソースプログラムを翻訳してオブジェクトプログラムを生成するプログラムであって、
前記ブロックフローティング変数は、１又は複数のデータを含んでデータブロックを構成し、前記データブロックは、前記データブロックのブロックスケールファクタを含むデータ構造を表す変数であり、
前記固定小数点変数は、１又は複数のデータを含んでデータブロックを構成するデータ構造を表す変数であり、
前記ソースプログラムのなかから加算又は減算を行う前記演算式を検出する演算式検出手段、前記演算式検出手段で検出した演算式を所定の命令コードとして展開する演算式展開手段、及び前記演算式展開手段で展開した命令コードを前記オブジェクトプログラムに埋め込む命令コード埋込手段として実現される処理をコンピュータに実行させるためのプログラムであり、
前記演算式展開手段は、前記演算式検出手段で検出した演算式のうち加算又は減算に係る部分について、加算又は減算の対象となる前記ブロックフローティング変数及び前記固定小数点変数に対応するデータブロックを用いた加算又は減算を行う処理を構成する命令コードとして展開するようになっており、
前記命令コードにより構成される処理は、固定小数点データブロックについてはある定数として与えられる仮想ブロックスケールファクタを算出し、前記ブロックフローティング変数に対応するデータブロックのブロックスケールファクタ及び前記仮想ブロックスケールファクタのうち、絶対値が最大のデータを含むデータブロックのものを共通ブロックスケールファクタとして選択し、前記共通ブロックスケールファクタに基づいて当該データブロックの各データに対してスケーリングを行い、
スケーリングを行った各データブロックのデータと前記固定小数点変数に対応するデータブロックのデータとを加算し又は減算するようになっていることを特徴とするコンパイルプログラム。
【請求項６７】
ブロックフローティング変数を用いて演算式を記述したソースプログラムが与えられたときに、与えられたソースプログラムを翻訳してオブジェクトプログラムを生成するプログラムであって、
前記ブロックフローティング変数は、１又は複数のデータを含んでデータグループを構成し、さらに複数のデータグループを含んでデータブロックを構成し、前記データブロックは、前記各データグループのグループスケールファクタ及び前記データブロックのブロックスケールファクタを含むデータ構造を表す変数であり、
前記ソースプログラムのなかから加算又は減算を行う前記演算式を検出する演算式検出手段、前記演算式検出手段で検出した演算式を所定の命令コードとして展開する演算式展開手段、及び前記演算式展開手段で展開した命令コードを前記オブジェクトプログラムに埋め込む命令コード埋込手段として実現される処理をコンピュータに実行させるためのプログラムであり、
前記演算式展開手段は、前記演算式検出手段で検出した演算式のうち加算又は減算に係る部分について、加算又は減算の対象となる前記ブロックフローティング変数に対応するデータブロックを用いた加算又は減算を行う処理を構成する命令コードとして展開するようになっており、
前記命令コードにより構成される処理は、前記データブロックのブロックスケールファクタのうち絶対値が最大のデータを含むデータブロックのものを共通ブロックスケールファクタとして選択し、
前記データブロックの各データグループごとに、当該データグループのグループスケールファクタと前記共通ブロックスケールファクタとの差分からなるスケールファクタに基づいて、当該データグループの各データに対してスケーリングを行い、
スケーリングを行った各データブロックのデータに対して加算又は減算を行うようになっていることを特徴とするコンパイルプログラム。
【請求項６８】
ブロックフローティング変数を用いて演算式を記述したソースプログラムが与えられたときに、与えられたソースプログラムを翻訳してオブジェクトプログラムを生成するプログラムであって、
前記ブロックフローティング変数は、１又は複数のデータを含んでデータブロックを構成し、前記データブロックは、前記データブロックのブロックスケールファクタを含むデータ構造を表す変数であり、
前記ソースプログラムのなかから乗累算を行う前記演算式を検出する演算式検出手段、前記演算式検出手段で検出した演算式を所定の命令コードとして展開する演算式展開手段、及び前記演算式展開手段で展開した命令コードを前記オブジェクトプログラムに埋め込む命令コード埋込手段として実現される処理をコンピュータに実行させるためのプログラムであり、
前記演算式展開手段は、前記演算式検出手段で検出した演算式のうち乗累算に係る部分について、乗算の対象となる２つの前記ブロックフローティング変数に対応する第１データブロック及び第２データブロック、並びに加算又は減算の対象となる前記ブロックフローティング変数に対応する第３データブロックを用いた乗累算を行う処理を構成する命令コードとして展開するようになっており、
前記命令コードにより構成される処理は、与えられたスケールファクタに基づいて前記第１データブロックの各データに対してスケーリングを行う第１スケーリング処理と、与えられたスケールファクタに基づいて前記第３データブロックの各データに対してスケーリングを行う第２スケーリング処理と、前記第２データブロック及び前記第１スケーリング処理からの第１データブロックを用いた乗算を行う乗算処理と、前記乗算処理からの乗算結果データブロック及び前記第２スケーリング処理からの第３データブロックを用いた加算又は減算を行う演算処理とを備え、
さらに、前記第１データブロック及び前記第２データブロックのブロックスケールファクタの和である乗算結果ブロックスケールファクタと、前記第３データブロックのブロックスケールファクタとの差分からなる補正ブロックスケールファクタを算出し、
前記補正ブロックスケールファクタを前記第１スケーリング処理に与え、前記第１データブロックのデータを前記第１スケーリング処理に入力し、且つ、前記第２スケーリング処理にスケールファクタを与えず、前記第３データブロックのデータを前記第２スケーリング処理に入力するようになっていることを特徴とするコンパイルプログラム。
【請求項６９】
請求の範囲第６８項において、
前記命令コードにより構成される処理は、前記補正ブロックスケールファクタを前記第１スケーリング処理に与え、前記第１データブロックのデータを前記第１スケーリング処理に入力し、且つ、前記第２スケーリング処理にスケールファクタを与えず、前記第３データブロックのデータを前記第２スケーリング処理に入力する第１スケール補正処理と、
前記補正ブロックスケールファクタを前記第２スケーリング処理に与え、前記第３データブロックのデータを前記第２スケーリング処理に入力し、且つ、前記第１スケーリング処理にスケールファクタを与えず、前記第１データブロックのデータを前記第１スケーリング処理に入力する第２スケール補正処理とのうちいずれかを行うようになっていることを特徴とするコンパイルプログラム。
【請求項７０】
請求の範囲第６８項において、
前記命令コードにより構成される処理は、前記乗算結果ブロックスケールファクタ及び前記第３データブロックのブロックスケールファクタの大小関係に基づいて、前記第１スケール補正処理及び前記第２スケール補正処理のいずれかを選択的に行うようになっていることを特徴とするコンパイルプログラム。
【請求項７１】
請求の範囲第７０項において、
前記第１スケーリング処理は、与えられたスケールファクタに相当するシフト量で、入力したデータに対して下位ビットの方向へビットシフトを行うようになっており、
前記第２スケーリング処理は、与えられたスケールファクタに相当するシフト量で、入力したデータに対して下位ビットの方向へビットシフトを行うようになっており、
前記命令コードにより構成される処理は、前記第３データブロックのブロックスケールファクタが前記乗算結果ブロックスケールファクタよりも大きいときは、前記第１スケール補正処理を行い、前記乗算結果ブロックスケールファクタが前記第３データブロックのブロックスケールファクタよりも大きいときは、前記第２スケール補正処理を行うようになっていることを特徴とするコンパイルプログラム。
【請求項７２】
請求の範囲第７０項において、
前記第１スケーリング処理は、与えられたスケールファクタに相当するシフト量で、入力したデータに対して上位ビットの方向へビットシフトを行うようになっており、
前記第２スケーリング処理は、与えられたスケールファクタに相当するシフト量で、入力したデータに対して上位ビットの方向へビットシフトを行うようになっており、
前記命令コードにより構成される処理は、前記第３データブロックのブロックスケールファクタが前記乗算結果ブロックスケールファクタよりも大きいときは、前記第２スケール補正処理を行い、前記乗算結果ブロックスケールファクタが前記第３データブロックのブロックスケールファクタよりも大きいときは、前記第１スケール補正処理を行うようになっていることを特徴とするコンパイルプログラム。
【請求項７３】
ブロックフローティング変数を用いて演算式を記述したソースプログラムが与えられたときに、与えられたソースプログラムを翻訳してオブジェクトプログラムを生成するプログラムであって、
前記ブロックフローティング変数は、１又は複数のデータを含んでデータグループを構成し、さらに複数のデータグループを含んでデータブロックを構成し、前記データブロックは、前記各データグループのグループスケールファクタ及び前記データブロックのブロックスケールファクタを含むデータ構造を表す変数であり、
前記ソースプログラムのなかから乗累算を行う前記演算式を検出する演算式検出手段、前記演算式検出手段で検出した演算式を所定の命令コードとして展開する演算式展開手段、及び前記演算式展開手段で展開した命令コードを前記オブジェクトプログラムに埋め込む命令コード埋込手段として実現される処理をコンピュータに実行させるためのプログラムであり、
前記演算式展開手段は、前記演算式検出手段で検出した演算式のうち乗累算に係る部分について、乗算の対象となる２つの前記ブロックフローティング変数に対応する第１データブロック及び第２データブロック、並びに加算又は減算の対象となる前記ブロックフローティング変数に対応する第３データブロックを用いた乗累算を行う処理を構成する命令コードとして展開するようになっており、
前記命令コードにより構成される処理は、与えられたスケールファクタに基づいて前記第１データブロックの各データに対してスケーリングを行う第１スケーリング処理と、与えられたスケールファクタに基づいて前記第３データブロックの各データに対してスケーリングを行う第２スケーリング処理と、前記第２データブロック及び前記第１スケーリング処理からの第１データブロックを用いた乗算を行う乗算処理と、前記乗算処理からの乗算結果データブロック及び前記第２スケーリング処理からの第３データブロックを用いた加算又は減算を行う演算処理とを備え、
前記第１データブロック及び前記第２データブロックのブロックスケールファクタの和である乗算結果ブロックスケールファクタと、前記第３データブロックのブロックスケールファクタとの差分からなる補正ブロックスケールファクタを算出し、
前記第１データブロックの各データグループごとに、当該データグループのグループスケールファクタと前記第１データブロックのブロックスケールファクタとの差分からなるスケールファクタに前記補正ブロックスケールファクタを加算したものを前記第１スケーリング処理に与え、当該データグループのデータを前記第１スケーリング処理に入力し、且つ、前記第３データブロックの各データグループごとに、当該データグループのグループスケールファクタと前記第３データブロックのブロックスケールファクタとの差分からなるスケールファクタを前記第２スケーリング処理に与え、当該データグループのデータを前記第２スケーリング処理に入力するようになっていることを特徴とするコンパイルプログラム。
【請求項７４】
請求の範囲第７３項において、
前記命令コードにより構成される処理は、前記第１データブロックの各データグループごとに、当該データグループのグループスケールファクタと前記第１データブロックのブロックスケールファクタとの差分からなるスケールファクタに前記補正ブロックスケールファクタを加算したものを前記第１スケーリング処理に与え、当該データグループのデータを前記第１スケーリング処理に入力し、且つ、前記第３データブロックの各データグループごとに、当該データグループのグループスケールファクタと前記第３データブロックのブロックスケールファクタとの差分からなるスケールファクタを前記第２スケーリング処理に与え、当該データグループのデータを前記第２スケーリング処理に入力する第１スケール補正処理と、
前記第３データブロックの各データグループごとに、当該データグループのグループスケールファクタと前記第３データブロックのブロックスケールファクタとの差分からなるスケールファクタに前記補正ブロックスケールファクタを加算したものを前記第２スケーリング処理に与え、当該データグループのデータを前記第２スケーリング処理に入力し、且つ、前記第１データブロックの各データグループごとに、当該データグループのグループスケールファクタと前記第１データブロックのブロックスケールファクタとの差分からなるスケールファクタを前記第１スケーリング処理に与え、当該データグループのデータを前記第１スケーリング処理に入力する第２スケール補正処理とのうちいずれかを行うようになっていることを特徴とするコンパイルプログラム。
【請求項７５】
ブロック浮動小数点型変数を扱うことを特徴とするオブジェクトプログラム生成方法。
【請求項７６】
請求の範囲第７５項において、
演算式と演算式のオペランドの情報から演算用ブロックスケールファクタを算出し、
ブロック浮動小数点型変数については、演算用ブロックスケールファクタ、ブロックスケールファクタに基づくシフト処理を行って演算器へデータ入力するような命令コードを生成することを特徴とするオブジェクトプログラム生成方法。
【請求項７７】
請求の範囲第７６項において、
演算式と演算式のオペランドの情報から中間結果スケールファクタを算出し、
ブロック浮動小数点型の出力変数については、演算結果の正規化を行い、その正規化によって更新される更新グループスケールファクタ及び中間結果スケールファクタに基づくブロックスケールファクタを算出するような命令コードを生成することを特徴とするオブジェクトプログラム生成方法。
【請求項７８】
階層的ブロック浮動小数点型変数を扱うことを特徴とするオブジェクトプログラム生成方法。
【請求項７９】
請求の範囲第７８項において、
演算式と演算式のオペランドの情報から演算用ブロックスケールファクタを算出し、
階層的ブロック浮動小数点型変数については、演算用ブロックスケールファクタ、ブロックスケールファクタ、及びグループスケールファクタに基づくシフト処理を行って演算器へデータ入力するような命令コードを生成することを特徴とするオブジェクトプログラム生成方法。
【請求項８０】
請求の範囲第７９項において、
演算式と演算式のオペランドの情報から中間結果スケールファクタを算出し、
階層的ブロック浮動小数点型の出力変数については、演算結果のグループ正規化を行い、そのグループ正規化によって更新される更新グループスケールファクタ及び中間結果スケールファクタに基づく最終グループスケールファクタを算出し、
算出されたグループスケールファクタからブロックスケールファクタを算出するような命令コードを生成することを特徴とするオブジェクトプログラム生成方法。
【請求項８１】
ブロック浮動小数点型変数を扱うオブジェクトプログラム生成方法であって、
乗算又は除算について、ブロック浮動小数点型変数のブロックスケールファクタに基づいて乗算結果のブロックスケールファクタを算出するような命令コードを生成することを特徴とするオブジェクトプログラム生成方法。
【請求項８２】
ブロック浮動小数点型変数と固定小数点型変数を扱うオブジェクトプログラム生成方法であって、
乗算又は除算について、ブロック浮動小数点型変数のブロックスケールファクタに基づいて乗算結果のブロックスケールファクタを算出するような命令コードを生成することを特徴とするオブジェクトプログラム生成方法。
【請求項８３】
階層的ブロック浮動小数点型変数を扱うオブジェクトプログラム生成方法であって、
乗算又は除算について、階層的ブロック浮動小数点型変数のブロックスケールファクタに基づいて演算結果のブロックスケールファクタを算出するような命令コードを生成することを特徴とするオブジェクトプログラム生成方法。
【請求項８４】
ブロック浮動小数点型変数を扱うオブジェクトプログラム生成方法であって、
加算又は減算について、ブロック浮動小数点型変数のブロックスケールファクタの比較に基づいて共通ブロックスケールファクタを選択し、
共通スケールファクタに基づいてデータブロックのデータをスケーリングし、
スケーリングを施したデータに対して加算又は減算を行うような命令コードを生成することを特徴とするオブジェクトプログラム生成方法。
【請求項８５】
ブロック浮動小数点型変数と固定小数点型変数を扱うオブジェクトプログラム生成方法であって、
加算又は減算について、ブロック浮動小数点型変数のブロックスケールファクタとある定数で与えられる固定小数点変数の仮想ブロックスケールファクタとの比較に基づいて共通ブロックスケールファクタを選択し、
共通スケールファクタに基づいてデータブロックのデータをスケーリングし、
スケーリングを施したデータに対して加算又は減算を行うような命令コードを生成することを特徴とするオブジェクトプログラム生成方法。
【請求項８６】
階層的ブロック浮動小数点型変数を扱うオブジェクトプログラム生成方法であって、
加算又は減算について、階層的ブロック浮動小数点型変数のブロックスケールファクタの比較に基づいて共通ブロックスケールファクタを選択し、
共通スケールファクタと各データグループのグループスケールファクタの差分に基づいてデータグループのデータをスケーリングし、
スケーリングを施したデータに対して加算又は減算を行うような命令コードを生成することを特徴とするオブジェクトプログラム生成方法。
【請求項８７】
ブロック浮動小数点型変数を扱うオブジェクトプログラム生成方法であって、
加算又は減算について、ブロック浮動小数点型変数のブロックスケールファクタの比較に基づいて共通ブロックスケールファクタを選択し、
共通スケールファクタに基づいてデータブロックのデータをスケーリングし、
スケーリングを施したデータに対して加算又は減算を行うような命令コードを生成することを特徴とするオブジェクトプログラム生成方法。
【請求項８８】
ブロック浮動小数点型変数と固定小数点型変数を扱うオブジェクトプログラム生成方法であって、
加算又は減算について、ブロック浮動小数点型変数のブロックスケールファクタの比較に基づいて共通ブロックスケールファクタを選択し、
共通スケールファクタに基づいてデータブロックのデータをスケーリングし、
スケーリングを施したデータに対して加算又は減算を行うような命令コードを生成することを特徴とするオブジェクトプログラム生成方法。
【請求項８９】
階層的ブロック浮動小数点型変数を扱うオブジェクトプログラム生成方法であって、
加算又は減算について、階層的ブロック浮動小数点型変数のブロックスケールファクタの比較に基づいて共通ブロックスケールファクタを選択し、
共通スケールファクタと各データグループのグループスケールファクタの差分に基づいてデータグループのデータをスケーリングし、
スケーリングを施したデータに対して加算又は減算を行うような命令コードを生成することを特徴とするオブジェクトプログラム生成方法。
【請求項９０】
ブロック浮動小数点型変数を扱うオブジェクトプログラム生成方法であって、
乗累算のうち、乗算の対象となるブロックフローティング変数に対して演算を行い、その乗算結果を累算することで乗累算を行い、その演算結果を演算結果データブロックとして算出するとともに、ブロックスケールファクタに基づいて演算結果ブロックスケールファクタを算出することを特徴とするオブジェクトプログラム生成方法。
【請求項９１】
ブロック浮動小数点型変数と固定小数点型変数を扱うオブジェクトプログラム生成方法であって、
乗累算のうち、乗算の対象となるブロックフローティング変数と固定小数点変数に対して演算を行い、その乗算結果を累算することで乗累算を行い、その演算結果を演算結果データブロックとして算出するとともに、ブロックスケールファクタに基づいて演算結果ブロックスケールファクタを算出することを特徴とするオブジェクトプログラム生成方法。
【請求項９２】
階層的ブロック浮動小数点型変数を扱うオブジェクトプログラム生成方法であって、
乗累算のうち、乗算の対象となる階層的ブロックフローティング変数に対してグループスケールファクタとブロックスケールファクタの差分からなるスケールファクタによりデータのスケーリングを行い、スケーリングを行ったデータに対して演算を行い、その乗算結果を累算することで乗累算を行い、その演算結果を演算結果データブロックとして算出するとともに、ブロックスケールファクタに基づいて演算結果ブロックスケールファクタを算出することを特徴とするオブジェクトプログラム生成方法。
【請求項９３】
データ型としてブロックフローティング型のブロックフローティング変数を用いて演算式を記述したソースプログラムが与えられたときに、与えられたソースプログラムをオブジェクトプログラムに翻訳する方法であって、
前記ブロックフローティング変数は、１又は複数のデータを含んでデータブロックを構成し、前記データブロックは、前記データブロックのブロックスケールファクタを含むデータ構造を表す変数であり、
前記ソースプログラムのなかから前記演算式を検出する演算式検出ステップと、前記演算式検出ステップで検出した演算式を所定の命令コードとして展開する演算式展開ステップと、前記演算式展開ステップで展開した命令コードを前記オブジェクトプログラムに変換するオブジェクトコード変換ステップとを含むことを特徴とするオブジェクトプログラム生成方法。
【請求項９４】
請求の範囲第９３項において、
前記演算式検出ステップは、前記演算式の演算子及びその演算子の入力オペランドのデータ型と演算子の出力オペランドのデータ型とを演算式検出結果として検出し、
前記演算式展開ステップは、前記演算式検出ステップで検出される前記演算式検出結果のうち演算子及び演算子の入力オペランドのデータ型の情報に基づき、
入力オペランドがブロックフローティング型のデータを含む場合には、入力データブロックのブロックスケールファクタから演算用ブロックスケールファクタを算出する処理を構成する命令コードとして展開し、
入力オペランドがブロックフローティング型のデータの場合には、ブロックフローティング型のデータを演算器に入力する処理については、前記演算用ブロックスケールファクタ及び入力オペランドのブロックスケールファクタの一方又は両方に基づくシフト処理を行う演算器へのデータ入力処理を構成する命令コードとして展開することを特徴とするオブジェクトプログラム生成方法。
【請求項９５】
請求の範囲第９４項において、
前記演算式展開ステップは、演算器に入力されたブロックフローティング型のデータについては、前記演算子に基づく演算処理を構成する命令コードとして展開し、
出力オペランドがブロックフローティング型のデータの場合には、入力データブロックのブロックスケールファクタから中間結果ブロックスケールファクタを算出し、出力オペランドに対応する演算結果の正規化を行い、前記中間結果ブロックスケールファクタからブロックスケールファクタを算出するデータ出力処理を構成する命令コードとして展開することを特徴とするオブジェクトプログラム生成方法。
【請求項９６】
データ型としてブロックフローティング型のブロックフローティング変数を用いて演算式を記述したソースプログラムが与えられたときに、与えられたソースプログラムをオブジェクトプログラムに翻訳する方法であって、
前記ブロックフローティング変数は、１又は複数のデータと１個のグループスケールファクタを含んでデータグループを構成し、さらに１又は複数のデータグループを含んでデータブロックを構成し、前記データブロックは、前記データブロックのブロックスケールファクタを含むデータ構造を表す変数であり、
前記ソースプログラムのなかから前記演算式を検出する演算式検出ステップと、前記演算式検出ステップで検出した演算式を所定の命令コードとして展開する演算式展開ステップと、前記演算式展開ステップで展開した命令コードを前記オブジェクトプログラムに変換するオブジェクトコード変換ステップとを含むことを特徴とするオブジェクトプログラム生成方法。
【請求項９７】
請求の範囲第９６項において、
前記演算式検出ステップは、前記演算式の演算子及びその演算子の入力オペランドのデータ型と演算子の出力オペランドのデータ型とを演算式検出結果として検出し、
前記演算式展開ステップは、前記演算式検出ステップで検出される前記演算式検出結果のうち演算子及び演算子の入力オペランドのデータ型の情報に基づき、
入力オペランドがブロックフローティング型のデータを含む場合には、入力データブロックのブロックスケールファクタから演算用ブロックスケールファクタを算出する処理を構成する命令コードとして展開し、
入力オペランドがブロックフローティング型のデータの場合には、ブロックフローティング型のデータを演算器に入力する処理については、前記演算用ブロックスケールファクタ及び入力オペランドのブロックスケールファクタの一方又は両方、並びにグループスケールファクタに基づくシフト処理を行う演算器へのデータ入力処理を構成する命令コードとして展開することを特徴とするオブジェクトプログラム生成方法。
【請求項９８】
請求の範囲第９７項において、
前記演算式展開ステップは、演算器に入力されたブロックフローティング型のデータについては、前記演算子に基づく演算処理を構成する命令コードとして展開し、
出力オペランドがブロックフローティング型のデータの場合には、入力データブロックのブロックスケールファクタから中間結果ブロックスケールファクタを算出し、出力オペランドに対応する演算結果のグループ正規化を行い、そのグループ正規化によって算出される更新グループスケールファクタ及び前記中間結果ブロックスケールファクタの一方又は両方から算出される最終グループスケールファクタを算出し、その算出されたグループスケールファクタからブロックスケールファクタを算出するデータ出力処理を構成する命令コードとして展開することを特徴とするオブジェクトプログラム生成方法。
【請求項９９】
ブロックフローティング変数を用いて演算式を記述したソースプログラムが与えられたときに、与えられたソースプログラムを翻訳してオブジェクトプログラムを生成する方法であって、
前記ブロックフローティング変数は、１又は複数のデータを含んでデータブロックを構成し、前記データブロックは、前記データブロックのブロックスケールファクタを含むデータ構造を表す変数であり、
前記ソースプログラムのなかから乗算又は除算を行う前記演算式を検出する演算式検出ステップと、前記演算式検出ステップで検出した演算式を所定の命令コードとして展開する演算式展開ステップと、前記演算式展開ステップで展開した命令コードを前記オブジェクトプログラムに埋め込む命令コード埋込ステップとを含み、
前記演算式展開ステップは、前記演算式検出ステップで検出した演算式のうち乗算又は除算に係る部分について、乗算又は除算の対象となる前記ブロックフローティング変数に対応するデータブロックを用いた乗算又は除算を行う処理を構成する命令コードとして展開し、
前記命令コードにより構成される処理は、前記データブロックのデータに対して乗算又は除算を行い、その演算結果を演算結果データブロックとして算出するとともに、前記データブロックのブロックスケールファクタに基づいて前記演算結果データブロックのブロックスケールファクタを算出するようになっていることを特徴とするオブジェクトプログラム生成方法。
【請求項１００】
ブロックフローティング変数及び固定小数点変数を用いて演算式を記述したソースプログラムが与えられたときに、与えられたソースプログラムを翻訳してオブジェクトプログラムを生成する方法であって、
前記ブロックフローティング変数は、１又は複数のデータを含んでデータブロックを構成し、前記データブロックは、前記データブロックのブロックスケールファクタを含むデータ構造を表す変数であり、
前記固定小数点変数は、１又は複数のデータを含んでデータブロックを構成するデータ構造を表す変数であり、
前記ソースプログラムのなかから乗算又は除算を行う前記演算式を検出する演算式検出ステップと、前記演算式検出ステップで検出した演算式を所定の命令コードとして展開する演算式展開ステップと、前記演算式展開ステップで展開した命令コードを前記オブジェクトプログラムに埋め込む命令コード埋込ステップとを含み、
前記演算式展開ステップは、前記演算式検出ステップで検出した演算式のうち乗算又は除算に係る部分について、乗算又は除算の対象となる前記ブロックフローティング変数及び前記固定小数点変数に対応するデータブロックを用いた乗算又は除算を行う処理を構成する命令コードとして展開し、
前記命令コードにより構成される処理は、前記ブロックフローティング変数に対応するデータブロックのデータと前記固定小数点変数に対応するデータブロックのデータとを乗算し又は除算し、その演算結果を演算結果データブロックとして算出するとともに、前記ブロックフローティング変数に対応するデータブロックのブロックスケールファクタに基づいて前記演算結果データブロックのブロックスケールファクタを算出するようになっていることを特徴とするオブジェクトプログラム生成方法。
【請求項１０１】
ブロックフローティング変数を用いて演算式を記述したソースプログラムが与えられたときに、与えられたソースプログラムを翻訳してオブジェクトプログラムを生成する方法であって、
前記ブロックフローティング変数は、１又は複数のデータを含んでデータグループを構成し、さらに複数のデータグループを含んでデータブロックを構成し、前記データブロックは、前記各データグループのグループスケールファクタ及び前記データブロックのブロックスケールファクタを含むデータ構造を表す変数であり、
前記ソースプログラムのなかから乗算又は除算を行う前記演算式を検出する演算式検出ステップと、前記演算式検出ステップで検出した演算式を所定の命令コードとして展開する演算式展開ステップと、前記演算式展開ステップで展開した命令コードを前記オブジェクトプログラムに埋め込む命令コード埋込ステップとを含み、
前記演算式展開ステップは、前記演算式検出ステップで検出した演算式のうち乗算又は除算に係る部分について、乗算又は除算の対象となる前記ブロックフローティング変数に対応するデータブロックを用いた乗算又は除算を行う処理を構成する命令コードとして展開し、
前記命令コードにより構成される処理は、前記データブロックの各データグループごとに、当該データグループのデータに対して乗算又は除算を行い、それら演算結果を演算結果データブロックとして算出するとともに、前記データブロックのブロックスケールファクタに基づいて前記演算結果データブロックのブロックスケールファクタを算出するようになっていることを特徴とするオブジェクトプログラム生成方法。
【請求項１０２】
ブロックフローティング変数を用いて演算式を記述したソースプログラムが与えられたときに、与えられたソースプログラムを翻訳してオブジェクトプログラムを生成する方法であって、
前記ブロックフローティング変数は、１又は複数のデータを含んでデータブロックを構成し、前記データブロックは、前記データブロックのブロックスケールファクタを含むデータ構造を表す変数であり、
前記ソースプログラムのなかから加算又は減算を行う前記演算式を検出する演算式検出ステップと、前記演算式検出ステップで検出した演算式を所定の命令コードとして展開する演算式展開ステップと、前記演算式展開ステップで展開した命令コードを前記オブジェクトプログラムに埋め込む命令コード埋込ステップとを含み、
前記演算式展開ステップは、前記演算式検出ステップで検出した演算式のうち加算又は減算に係る部分について、加算又は減算の対象となる前記ブロックフローティング変数に対応するデータブロックを用いた加算又は減算を行う処理を構成する命令コードとして展開し、
前記命令コードにより構成される処理は、前記データブロックのブロックスケールファクタのうち絶対値が最大のデータを含むデータブロックのものを共通ブロックスケールファクタとして選択し、
前記共通ブロックスケールファクタに基づいて前記データブロックの各データに対してスケーリングを行い、
スケーリングを行った各データブロックのデータに対して加算又は減算を行うようになっていることを特徴とするオブジェクトプログラム生成方法。
【請求項１０３】
ブロックフローティング変数及び固定小数点変数を用いて演算式を記述したソースプログラムが与えられたときに、与えられたソースプログラムを翻訳してオブジェクトプログラムを生成する方法であって、
前記ブロックフローティング変数は、１又は複数のデータを含んでデータブロックを構成し、前記データブロックは、前記データブロックのブロックスケールファクタを含むデータ構造を表す変数であり、
前記固定小数点変数は、１又は複数のデータを含んでデータブロックを構成するデータ構造を表す変数であり、
前記ソースプログラムのなかから加算又は減算を行う前記演算式を検出する演算式検出ステップと、前記演算式検出ステップで検出した演算式を所定の命令コードとして展開する演算式展開ステップと、前記演算式展開ステップで展開した命令コードを前記オブジェクトプログラムに埋め込む命令コード埋込ステップとを含み、
前記演算式展開ステップは、前記演算式検出ステップで検出した演算式のうち加算又は減算に係る部分について、加算又は減算の対象となる前記ブロックフローティング変数及び前記固定小数点変数に対応するデータブロックを用いた加算又は減算を行う処理を構成する命令コードとして展開し、
前記命令コードにより構成される処理は、固定小数点データブロックについてはある定数として与えられる仮想ブロックスケールファクタを算出し、前記ブロックフローティング変数に対応するデータブロックのブロックスケールファクタ及び前記仮想ブロックスケールファクタのうち、絶対値が最大のデータを含むデータブロックのものを共通ブロックスケールファクタとして選択し、前記共通ブロックスケールファクタに基づいて当該データブロックの各データに対してスケーリングを行い、
スケーリングを行った各データブロックのデータと前記固定小数点変数に対応するデータブロックのデータとを加算し又は減算するようになっていることを特徴とするオブジェクトプログラム生成方法。
【請求項１０４】
ブロックフローティング変数を用いて演算式を記述したソースプログラムが与えられたときに、与えられたソースプログラムを翻訳してオブジェクトプログラムを生成する方法であって、
前記ブロックフローティング変数は、１又は複数のデータを含んでデータグループを構成し、さらに複数のデータグループを含んでデータブロックを構成し、前記データブロックは、前記各データグループのグループスケールファクタ及び前記データブロックのブロックスケールファクタを含むデータ構造を表す変数であり、
前記ソースプログラムのなかから加算又は減算を行う前記演算式を検出する演算式検出ステップと、前記演算式検出ステップで検出した演算式を所定の命令コードとして展開する演算式展開ステップと、前記演算式展開ステップで展開した命令コードを前記オブジェクトプログラムに埋め込む命令コード埋込ステップとを含み、
前記演算式展開ステップは、前記演算式検出ステップで検出した演算式のうち加算又は減算に係る部分について、加算又は減算の対象となる前記ブロックフローティング変数に対応するデータブロックを用いた加算又は減算を行う処理を構成する命令コードとして展開し、
前記命令コードにより構成される処理は、前記データブロックのブロックスケールファクタのうち絶対値が最大のデータを含むデータブロックのものを共通ブロックスケールファクタとして選択し、
前記データブロックの各データグループごとに、当該データグループのグループスケールファクタと前記共通ブロックスケールファクタとの差分からなるスケールファクタに基づいて、当該データグループの各データに対してスケーリングを行い、
スケーリングを行った各データブロックのデータに対して加算又は減算を行うようになっていることを特徴とするオブジェクトプログラム生成方法。
【請求項１０５】
ブロックフローティング変数を用いて演算式を記述したソースプログラムが与えられたときに、与えられたソースプログラムを翻訳してオブジェクトプログラムを生成する方法であって、
前記ブロックフローティング変数は、１又は複数のデータを含んでデータブロックを構成し、前記データブロックは、前記データブロックのブロックスケールファクタを含むデータ構造を表す変数であり、
前記ソースプログラムのなかから乗累算を行う前記演算式を検出する演算式検出ステップと、前記演算式検出ステップで検出した演算式を所定の命令コードとして展開する演算式展開ステップと、前記演算式展開ステップで展開した命令コードを前記オブジェクトプログラムに埋め込む命令コード埋込ステップとを含み、
前記演算式展開ステップは、前記演算式検出ステップで検出した演算式のうち乗累算に係る部分について、乗算の対象となる２つの前記ブロックフローティング変数に対応する第１データブロック及び第２データブロック、並びに加算又は減算の対象となる前記ブロックフローティング変数に対応する第３データブロックを用いた乗累算を行う処理を構成する命令コードとして展開し、
前記命令コードにより構成される処理は、与えられたスケールファクタに基づいて前記第１データブロックの各データに対してスケーリングを行う第１スケーリング処理と、与えられたスケールファクタに基づいて前記第３データブロックの各データに対してスケーリングを行う第２スケーリング処理と、前記第２データブロック及び前記第１スケーリング処理からの第１データブロックを用いた乗算を行う乗算処理と、前記乗算処理からの乗算結果データブロック及び前記第２スケーリング処理からの第３データブロックを用いた加算又は減算を行う演算処理とを備え、
さらに、前記第１データブロック及び前記第２データブロックのブロックスケールファクタの和である乗算結果ブロックスケールファクタと、前記第３データブロックのブロックスケールファクタとの差分からなる補正ブロックスケールファクタを算出し、
前記補正ブロックスケールファクタを前記第１スケーリング処理に与え、前記第１データブロックのデータを前記第１スケーリング処理に入力し、且つ、前記第２スケーリング処理にスケールファクタを与えず、前記第３データブロックのデータを前記第２スケーリング処理に入力するようになっていることを特徴とするオブジェクトプログラム生成方法。
【請求項１０６】
請求の範囲第１０５項において、
前記命令コードにより構成される処理は、前記補正ブロックスケールファクタを前記第１スケーリング処理に与え、前記第１データブロックのデータを前記第１スケーリング処理に入力し、且つ、前記第２スケーリング処理にスケールファクタを与えず、前記第３データブロックのデータを前記第２スケーリング処理に入力する第１スケール補正処理と、
前記補正ブロックスケールファクタを前記第２スケーリング処理に与え、前記第３データブロックのデータを前記第２スケーリング処理に入力し、且つ、前記第１スケーリング処理にスケールファクタを与えず、前記第１データブロックのデータを前記第１スケーリング処理に入力する第２スケール補正処理とのうちいずれかを行うようになっていることを特徴とするオブジェクトプログラム生成方法。
【請求項１０７】
請求の範囲第１０５項において、
前記命令コードにより構成される処理は、前記乗算結果ブロックスケールファクタ及び前記第３データブロックのブロックスケールファクタの大小関係に基づいて、前記第１スケール補正処理及び前記第２スケール補正処理のいずれかを選択的に行うようになっていることを特徴とするオブジェクトプログラム生成方法。
【請求項１０８】
請求の範囲第１０７項において、
前記第１スケーリング処理は、与えられたスケールファクタに相当するシフト量で、入力したデータに対して下位ビットの方向へビットシフトを行うようになっており、
前記第２スケーリング処理は、与えられたスケールファクタに相当するシフト量で、入力したデータに対して下位ビットの方向へビットシフトを行うようになっており、
前記命令コードにより構成される処理は、前記第３データブロックのブロックスケールファクタが前記乗算結果ブロックスケールファクタよりも大きいときは、前記第１スケール補正処理を行い、前記乗算結果ブロックスケールファクタが前記第３データブロックのブロックスケールファクタよりも大きいときは、前記第２スケール補正処理を行うようになっていることを特徴とするオブジェクトプログラム生成方法。
【請求項１０９】
請求の範囲第１０７項において、
前記第１スケーリング処理は、与えられたスケールファクタに相当するシフト量で、入力したデータに対して上位ビットの方向へビットシフトを行うようになっており、
前記第２スケーリング処理は、与えられたスケールファクタに相当するシフト量で、入力したデータに対して上位ビットの方向へビットシフトを行うようになっており、
前記命令コードにより構成される処理は、前記第３データブロックのブロックスケールファクタが前記乗算結果ブロックスケールファクタよりも大きいときは、前記第２スケール補正処理を行い、前記乗算結果ブロックスケールファクタが前記第３データブロックのブロックスケールファクタよりも大きいときは、前記第１スケール補正処理を行うようになっていることを特徴とするオブジェクトプログラム生成方法。
【請求項１１０】
ブロックフローティング変数を用いて演算式を記述したソースプログラムが与えられたときに、与えられたソースプログラムを翻訳してオブジェクトプログラムを生成する方法であって、
前記ブロックフローティング変数は、１又は複数のデータを含んでデータグループを構成し、さらに複数のデータグループを含んでデータブロックを構成し、前記データブロックは、前記各データグループのグループスケールファクタ及び前記データブロックのブロックスケールファクタを含むデータ構造を表す変数であり、
前記ソースプログラムのなかから乗累算を行う前記演算式を検出する演算式検出ステップと、前記演算式検出ステップで検出した演算式を所定の命令コードとして展開する演算式展開ステップと、前記演算式展開ステップで展開した命令コードを前記オブジェクトプログラムに埋め込む命令コード埋込ステップとを含み、
前記演算式展開ステップは、前記演算式検出ステップで検出した演算式のうち乗累算に係る部分について、乗算の対象となる２つの前記ブロックフローティング変数に対応する第１データブロック及び第２データブロック、並びに加算又は減算の対象となる前記ブロックフローティング変数に対応する第３データブロックを用いた乗累算を行う処理を構成する命令コードとして展開し、
前記命令コードにより構成される処理は、与えられたスケールファクタに基づいて前記第１データブロックの各データに対してスケーリングを行う第１スケーリング処理と、与えられたスケールファクタに基づいて前記第３データブロックの各データに対してスケーリングを行う第２スケーリング処理と、前記第２データブロック及び前記第１スケーリング処理からの第１データブロックを用いた乗算を行う乗算処理と、前記乗算処理からの乗算結果データブロック及び前記第２スケーリング処理からの第３データブロックを用いた加算又は減算を行う演算処理とを備え、
前記第１データブロック及び前記第２データブロックのブロックスケールファクタの和である乗算結果ブロックスケールファクタと、前記第３データブロックのブロックスケールファクタとの差分からなる補正ブロックスケールファクタを算出し、
前記第１データブロックの各データグループごとに、当該データグループのグループスケールファクタと前記第１データブロックのブロックスケールファクタとの差分からなるスケールファクタに前記補正ブロックスケールファクタを加算したものを前記第１スケーリング処理に与え、当該データグループのデータを前記第１スケーリング処理に入力し、且つ、前記第３データブロックの各データグループごとに、当該データグループのグループスケールファクタと前記第３データブロックのブロックスケールファクタとの差分からなるスケールファクタを前記第２スケーリング処理に与え、当該データグループのデータを前記第２スケーリング処理に入力するようになっていることを特徴とするオブジェクトプログラム生成方法。
【請求項１１１】
請求の範囲第１１０項において、
前記命令コードにより構成される処理は、前記第１データブロックの各データグループごとに、当該データグループのグループスケールファクタと前記第１データブロックのブロックスケールファクタとの差分からなるスケールファクタに前記補正ブロックスケールファクタを加算したものを前記第１スケーリング処理に与え、当該データグループのデータを前記第１スケーリング処理に入力し、且つ、前記第３データブロックの各データグループごとに、当該データグループのグループスケールファクタと前記第３データブロックのブロックスケールファクタとの差分からなるスケールファクタを前記第２スケーリング処理に与え、当該データグループのデータを前記第２スケーリング処理に入力する第１スケール補正処理と、
前記第３データブロックの各データグループごとに、当該データグループのグループスケールファクタと前記第３データブロックのブロックスケールファクタとの差分からなるスケールファクタに前記補正ブロックスケールファクタを加算したものを前記第２スケーリング処理に与え、当該データグループのデータを前記第２スケーリング処理に入力し、且つ、前記第１データブロックの各データグループごとに、当該データグループのグループスケールファクタと前記第１データブロックのブロックスケールファクタとの差分からなるスケールファクタを前記第１スケーリング処理に与え、当該データグループのデータを前記第１スケーリング処理に入力する第２スケール補正処理とのうちいずれかを行うようになっていることを特徴とするオブジェクトプログラム生成方法。
【発明の詳細な説明】
技術分野
本発明は、ソースプログラムを翻訳してオブジェクトプログラムを生成する装置およびプログラム、並びに方法に係り、特に、ブロックフローティング方式による演算をソフトウェアで行う場合において、ソースプログラムにおける演算の記述を容易とし、ソースプログラムの記述を簡素化してバグの発生を低減するのに好適なコンパイル装置およびコンパイルプログラム、並びにオブジェクトプログラム生成方法に関する。
背景技術
デジタル信号処理における数値表現方法として、固定小数点表現または浮動小数点表現がある。
浮動小数点表現では、各データが指数部と仮数部をもち、これにより、高い精度と広いダイナミックレンジが確保可能という利点がある反面、複雑で大規模なハードウェアが必要となるという問題がある。一方、固定小数点表現では、ハードウェアが簡単で回路規模も小さくてすむが、演算精度の低下が問題となる。
そこで、固定小数点表現における問題の対策法として提案されたのがブロックフローティングという方式である。この方式では、所定数（例えば、ｍ個）のデータを１つのデータブロックとし、データブロックに対し１個のブロックスケールファクタをもたせ、データブロックのｍ個のデータに対し共通のスケーリングを行うことにより、限られたダイナミックレンジを有効に用いて精度の劣化を抑える。
ブロックフローティング方式による演算をソフトウェアで実現する場合には、所定のプログラム言語（例えば、Ｃ言語）によりソースプログラムを記述し、関連のコンパイラで翻訳してオブジェクトプログラムを生成し、生成したオブジェクトプログラムをコンピュータに実行させることにより行う。
しかしながら、ブロックフローティング方式による演算をソフトウェアで実現する場合、１または複数のデータを含んでデータグループを構成し、さらに複数のデータグループを含んでデータブロックを構成し、データブロックは、各データグループのグループスケールファクタおよびデータブロックのブロックスケールファクタを含むデータ構造を取り扱うこととなるため、ソースプログラムを記述する際には、そのデータ構造を構造体として定義しなければならない。したがって、ブロックフローティング方式による演算を記述するまでの準備が容易でない。
また、構造体の定義により構造化データを一つのまとまった変数として演算に使用することができるが、使用できるといっても一定の限度があり、構造体変数間の単純な代入や演算を行う程度しかできない。ここでいう単純な演算とは、同一構造体変数同士の演算、すなわち、データグループのデータ同士の演算、またはスケールファクタ同士の演算である。ブロックフローティング方式による演算を実現するには、スケールファクタに基づいてデータをスケーリングして演算を行う必要があるので、構造体変数間の単純な演算では不十分であり、演算の種別ごとに固有の関数を作成しなければならない。例えば、２つのデータブロック間のデータを加算する関数としてｂｆｐ＿ａｄｄ（ｘ１，ｘ２）という関数をそれぞれ作成した場合、下式（１）の演算を行うには、下式（２）のように構造体変数を入籠型に記述しなければならない。下式（１），（２）において、Ａ，Ｂ，Ｃは、ブロックフローティング方式のデータ構造を構造体として定義し、その定義に従ってソースプログラム中で作成した構造体変数（オブジェクト）である。
2003032157.tif 000003
したがって、ソースプログラムの記述が煩雑となり、バグの少ないプログラムを作成することが難しい。
さらに、オブジェクトプログラムの実行レベルにおいて複数のデータブロック間で加算を行う場合には、データブロック内の各データがスケーリングされていることから、加算時に、データブロック間でデータの桁位置を一致させなければならない。例えば、２つのデータブロック間で加算を行う場合に、一方のデータブロックについてグループスケールファクタが「２」であるデータＡ「０．１」と、他方のデータブロックについてグループスケールファクタが「３」であるデータＢ「０．１１」とを加算するときは、データＡを２ビット右シフトして「０．００１」とするとともに、データＢを３ビット右シフトして「０．０００１１」とした上でそれらを加算する。そして、再び正規化することにより、加算結果としては、グループスケールファクタが「２」で「０．１１１」のデータを得ることができる。
したがって、データブロック間で加算を行う場合には、データブロック内の各データを正規化し、さらにデータブロック間で各データを正規化しなければならず、演算処理が複雑となる。演算処理の複雑化は、演算負荷の増大、演算速度の低下、回路素子数の増加等の問題を生じさせる。なお、このことは、複数のデータブロック間で減算を行う場合についても同様である。
さらに、オブジェクトプログラムの実行レベルにおいて複数のデータブロック間で乗累算（複数の乗算結果を足し合わせてその総和を求める演算をいう。以下、同じ。）を行う場合には、例えば、データブロックＡ，Ｂを乗算し、その乗算結果とデータブロックＣとを加算することを考えたときには、▲１▼データブロックＡ，Ｂの乗算、▲２▼乗算結果とデータブロックＣとの桁合わせ（スケーリング）、および▲３▼乗算結果とデータブロックＣとの加算という３つの手順を経る。しかし、乗算後にスケーリングを行うのは、スケーリングによる桁落ちを防止するため乗算時よりも余分なビット長を構造化変数に割り当てなければならず、演算時に必要なデータ容量が大きくなるばかりか、ビット長の変換を伴うことから演算効率が低下する可能性があった。
そこで、本発明は、このような従来の技術の有する未解決の課題に着目してなされたものであって、ブロックフローティング方式による演算をソフトウェアで行う場合において、ソースプログラムにおける演算の記述を容易とし、ソースプログラムの記述を簡素化してバグの発生を低減するのに好適なコンパイル装置およびコンパイルプログラム、並びにオブジェクトプログラム生成方法を提供することを第１の目的としている。また、ブロックフローティング方式による加算または減算をソフトウェアで行う場合において、演算処理の簡素化を図るのに好適なコンパイル装置およびコンパイルプログラム、並びにオブジェクトプログラム生成方法を提供することを第２の目的としている。また、ブロックフローティング方式による乗累算をソフトウェアで行う場合において、演算に必要なデータ容量を低減するとともに、演算効率を向上するのに好適なコンパイル装置およびコンパイルプログラム、並びにオブジェクトプログラム生成方法を提供することを第３の目的としている。
発明の開示
上記目的を達成するために、本発明に係る請求の範囲第１項記載のコンパイル装置は、ブロック浮動小数点型変数を扱うようになっている。
このような構成であれば、コンパイルにおいてブロック浮動小数点型変数が取り扱われる。
さらに、本発明に係る請求の範囲第２項記載のコンパイル装置は、請求の範囲第１項記載のコンパイル装置において、演算式と演算式のオペランドの情報から演算用ブロックスケールファクタを算出し、ブロック浮動小数点型変数については、演算用ブロックスケールファクタ、ブロックスケールファクタに基づくシフト処理を行って演算器へデータ入力するような命令コードを生成するようになっている。
このような構成であれば、演算式と演算式のオペランドの情報から演算用ブロックスケールファクタを算出し、ブロック浮動小数点型変数については、演算用ブロックスケールファクタ、ブロックスケールファクタに基づくシフト処理を行って演算器へデータ入力するような命令コードが生成される。
さらに、本発明に係る請求の範囲第３項記載のコンパイル装置は、請求の範囲第２項記載のコンパイル装置において、演算式と演算式のオペランドの情報から中間結果スケールファクタを算出し、ブロック浮動小数点型の出力変数については、演算結果の正規化を行い、その正規化によって更新される更新グループスケールファクタおよび中間結果スケールファクタに基づくブロックスケールファクタを算出するような命令コードを生成するようになっている。
このような構成であれば、演算式と演算式のオペランドの情報から中間結果スケールファクタを算出し、ブロック浮動小数点型の出力変数については、演算結果の正規化を行い、その正規化によって更新される更新グループスケールファクタおよび中間結果スケールファクタに基づくブロックスケールファクタを算出するような命令コードが生成される。
さらに、本発明に係る請求の範囲第４項記載のコンパイル装置は、階層的ブロック浮動小数点型変数を扱うようになっている。
このような構成であれば、コンパイルにおいて階層的ブロック浮動小数点型変数が取り扱われる。
さらに、本発明に係る請求の範囲第５項記載のコンパイル装置は、請求の範囲第４項記載のコンパイル装置において、演算式と演算式のオペランドの情報から演算用ブロックスケールファクタを算出し、階層的ブロック浮動小数点型変数については、演算用ブロックスケールファクタ、ブロックスケールファクタ、およびグループスケールファクタに基づくシフト処理を行って演算器へデータ入力するような命令コードを生成するようになっている。
このような構成であれば、演算式と演算式のオペランドの情報から演算用ブロックスケールファクタを算出し、階層的ブロック浮動小数点型変数については、演算用ブロックスケールファクタ、ブロックスケールファクタ、およびグループスケールファクタに基づくシフト処理を行って演算器へデータ入力するような命令コードが生成される。
さらに、本発明に係る請求の範囲第６項記載のコンパイル装置は、請求の範囲第５項記載のコンパイル装置において、演算式と演算式のオペランドの情報から中間結果スケールファクタを算出し、階層的ブロック浮動小数点型の出力変数については、演算結果のグループ正規化を行い、そのグループ正規化によって更新される更新グループスケールファクタおよび中間結果スケールファクタに基づく最終グループスケールファクタを算出し、算出されたグループスケールファクタからブロックスケールファクタを算出するような命令コードを生成するようになっている。
このような構成であれば、演算式と演算式のオペランドの情報から中間結果スケールファクタを算出し、階層的ブロック浮動小数点型の出力変数については、演算結果のグループ正規化を行い、そのグループ正規化によって更新される更新グループスケールファクタおよび中間結果スケールファクタに基づく最終グループスケールファクタを算出し、算出されたグループスケールファクタからブロックスケールファクタを算出するような命令コードが生成される。
さらに、本発明に係る請求の範囲第７項記載のコンパイル装置は、ブロック浮動小数点型変数を扱うコンパイル装置であって、乗算または除算について、ブロック浮動小数点型変数のブロックスケールファクタに基づいて乗算結果のブロックスケールファクタを算出するような命令コードを生成するようになっている。
このような構成であれば、乗算または除算について、ブロック浮動小数点型変数のブロックスケールファクタに基づいて乗算結果のブロックスケールファクタを算出するような命令コードが生成される。
さらに、本発明に係る請求の範囲第８項記載のコンパイル装置は、ブロック浮動小数点型変数と固定小数点型変数を扱うコンパイル装置であって、乗算または除算について、ブロック浮動小数点型変数のブロックスケールファクタに基づいて乗算結果のブロックスケールファクタを算出するような命令コードを生成するようになっている。
このような構成であれば、乗算または除算について、ブロック浮動小数点型変数のブロックスケールファクタに基づいて乗算結果のブロックスケールファクタを算出するような命令コードが生成される。
さらに、本発明に係る請求の範囲第９項記載のコンパイル装置は、階層的ブロック浮動小数点型変数を扱うコンパイル装置であって、乗算または除算について、階層的ブロック浮動小数点型変数のブロックスケールファクタに基づいて演算結果のブロックスケールファクタを算出するような命令コードを生成するようになっている。
このような構成であれば、乗算または除算について、階層的ブロック浮動小数点型変数のブロックスケールファクタに基づいて演算結果のブロックスケールファクタを算出するような命令コードが生成される。
さらに、本発明に係る請求の範囲第１０項記載のコンパイル装置は、ブロック浮動小数点型変数を扱うコンパイル装置であって、加算または減算について、ブロック浮動小数点型変数のブロックスケールファクタの比較に基づいて共通ブロックスケールファクタを選択し、共通スケールファクタに基づいてデータブロックのデータをスケーリングし、スケーリングを施したデータに対して加算または減算を行うような命令コードを生成するようになっている。
このような構成であれば、加算または減算について、ブロック浮動小数点型変数のブロックスケールファクタの比較に基づいて共通ブロックスケールファクタを選択し、共通スケールファクタに基づいてデータブロックのデータをスケーリングし、スケーリングを施したデータに対して加算または減算を行うような命令コードが生成される。
さらに、本発明に係る請求の範囲第１１項記載のコンパイル装置は、ブロック浮動小数点型変数と固定小数点型変数を扱うコンパイル装置であって、加算または減算について、ブロック浮動小数点型変数のブロックスケールファクタとある定数で与えられる固定小数点変数の仮想ブロックスケールファクタとの比較に基づいて共通ブロックスケールファクタを選択し、共通スケールファクタに基づいてデータブロックのデータをスケーリングし、スケーリングを施したデータに対して加算または減算を行うような命令コードを生成するようになっている。
このような構成であれば、加算または減算について、ブロック浮動小数点型変数のブロックスケールファクタとある定数で与えられる固定小数点変数の仮想ブロックスケールファクタとの比較に基づいて共通ブロックスケールファクタを選択し、共通スケールファクタに基づいてデータブロックのデータをスケーリングし、スケーリングを施したデータに対して加算または減算を行うような命令コードが生成される。
さらに、本発明に係る請求の範囲第１２項記載のコンパイル装置は、階層的ブロック浮動小数点型変数を扱うコンパイル装置であって、加算または減算について、階層的ブロック浮動小数点型変数のブロックスケールファクタの比較に基づいて共通ブロックスケールファクタを選択し、共通スケールファクタと各データグループのグループスケールファクタの差分に基づいてデータグループのデータをスケーリングし、スケーリングを施したデータに対して加算または減算を行うような命令コードを生成するようになっている。
このような構成であれば、加算または減算について、階層的ブロック浮動小数点型変数のブロックスケールファクタの比較に基づいて共通ブロックスケールファクタを選択し、共通スケールファクタと各データグループのグループスケールファクタの差分に基づいてデータグループのデータをスケーリングし、スケーリングを施したデータに対して加算または減算を行うような命令コードが生成される。
さらに、本発明に係る請求の範囲第１３項記載のコンパイル装置は、ブロック浮動小数点型変数を扱うコンパイル装置であって、加算または減算について、ブロック浮動小数点型変数のブロックスケールファクタの比較に基づいて共通ブロックスケールファクタを選択し、共通スケールファクタに基づいてデータブロックのデータをスケーリングし、スケーリングを施したデータに対して加算または減算を行うような命令コードを生成するようになっている。
このような構成であれば、加算または減算について、ブロック浮動小数点型変数のブロックスケールファクタの比較に基づいて共通ブロックスケールファクタを選択し、共通スケールファクタに基づいてデータブロックのデータをスケーリングし、スケーリングを施したデータに対して加算または減算を行うような命令コードが生成される。
さらに、本発明に係る請求の範囲第１４項記載のコンパイル装置は、ブロック浮動小数点型変数と固定小数点型変数を扱うコンパイル装置であって、加算または減算について、ブロック浮動小数点型変数のブロックスケールファクタの比較に基づいて共通ブロックスケールファクタを選択し、共通スケールファクタに基づいてデータブロックのデータをスケーリングし、スケーリングを施したデータに対して加算または減算を行うような命令コードを生成するようになっている。
このような構成であれば、加算または減算について、ブロック浮動小数点型変数のブロックスケールファクタの比較に基づいて共通ブロックスケールファクタを選択し、共通スケールファクタに基づいてデータブロックのデータをスケーリングし、スケーリングを施したデータに対して加算または減算を行うような命令コードが生成される。
さらに、本発明に係る請求の範囲第１５項記載のコンパイル装置は、階層的ブロック浮動小数点型変数を扱うコンパイル装置であって、加算または減算について、階層的ブロック浮動小数点型変数のブロックスケールファクタの比較に基づいて共通ブロックスケールファクタを選択し、共通スケールファクタと各データグループのグループスケールファクタの差分に基づいてデータグループのデータをスケーリングし、スケーリングを施したデータに対して加算または減算を行うような命令コードを生成するようになっている。
このような構成であれば、加算または減算について、階層的ブロック浮動小数点型変数のブロックスケールファクタの比較に基づいて共通ブロックスケールファクタを選択し、共通スケールファクタと各データグループのグループスケールファクタの差分に基づいてデータグループのデータをスケーリングし、スケーリングを施したデータに対して加算または減算を行うような命令コードが生成される。
さらに、本発明に係る請求の範囲第１６項記載のコンパイル装置は、ブロック浮動小数点型変数を扱うコンパイル装置であって、乗累算のうち、乗算の対象となるブロックフローティング変数に対して演算を行い、その乗算結果を累算することで乗累算を行い、その演算結果を演算結果データブロックとして算出するとともに、ブロックスケールファクタに基づいて演算結果ブロックスケールファクタを算出するようになっている。
このような構成であれば、乗累算のうち、乗算の対象となるブロックフローティング変数に対して演算が行われ、その乗算結果を累算することで乗累算が行われ、その演算結果が演算結果データブロックとして算出されるとともに、ブロックスケールファクタに基づいて演算結果ブロックスケールファクタが算出される。
さらに、本発明に係る請求の範囲第１７項記載のコンパイル装置は、ブロック浮動小数点型変数と固定小数点型変数を扱うコンパイル装置であって、乗累算のうち、乗算の対象となるブロックフローティング変数と固定小数点変数に対して演算を行い、その乗算結果を累算することで乗累算を行い、その演算結果を演算結果データブロックとして算出するとともに、ブロックスケールファクタに基づいて演算結果ブロックスケールファクタを算出するようになっている。
このような構成であれば、乗累算のうち、乗算の対象となるブロックフローティング変数と固定小数点変数に対して演算が行われ、その乗算結果を累算することで乗累算が行われ、その演算結果が演算結果データブロックとして算出されるとともに、ブロックスケールファクタに基づいて演算結果ブロックスケールファクタが算出される。
さらに、本発明に係る請求の範囲第１８項記載のコンパイル装置は、階層的ブロック浮動小数点型変数を扱うコンパイル装置であって、乗累算のうち、乗算の対象となる階層的ブロックフローティング変数に対してグループスケールファクタとブロックスケールファクタの差分からなるスケールファクタによりデータのスケーリングを行い、スケーリングを行ったデータに対して演算を行い、その乗算結果を累算することで乗累算を行い、その演算結果を演算結果データブロックとして算出するとともに、ブロックスケールファクタに基づいて演算結果ブロックスケールファクタを算出するようになっている。
このような構成であれば、乗累算のうち、乗算の対象となる階層的ブロックフローティング変数に対してグループスケールファクタとブロックスケールファクタの差分からなるスケールファクタによりデータのスケーリングが行われ、スケーリングを行ったデータに対して演算が行われ、その乗算結果を累算することで乗累算が行われ、その演算結果が演算結果データブロックとして算出されるとともに、ブロックスケールファクタに基づいて演算結果ブロックスケールファクタが算出される。
さらに、本発明に係る請求の範囲第１９項記載のコンパイル装置は、データ型としてブロックフローティング型のブロックフローティング変数を用いて演算式を記述したソースプログラムが与えられたときに、与えられたソースプログラムをオブジェクトプログラムに翻訳する装置であって、前記ブロックフローティング変数は、１または複数のデータを含んでデータブロックを構成し、前記データブロックは、前記データブロックのブロックスケールファクタを含むデータ構造を表す変数であり、前記ソースプログラムのなかから前記演算式を検出する演算式検出手段と、前記演算式検出手段で検出した演算式を所定の命令コードとして展開する演算式展開手段と、前記演算式展開手段で展開した命令コードを前記オブジェクトプログラムに変換するオブジェクトコード変換手段とを備える。
このような構成であれば、ブロックフローティング変数を用いて演算式を記述したソースプログラムが与えられると、演算式検出手段により、与えられたソースプログラムのなかから演算式が検出され、演算式展開手段により、検出された演算式が所定の命令コードとして展開される。そして、オブジェクトコード変換手段により、展開された命令コードがオブジェクトプログラムに変換される。
ここで、入力オペランドがブロックフローティング型のデータを含む場合とは、演算対象となる複数の入力オペランドが存在する場合において、そのうち少なくとも１つの入力オペランドがブロックフローティング型のデータである場合をいう。以下、請求の範囲第５６項記載のコンパイルプログラム、および請求の範囲第９３項記載のオブジェクトプログラム生成方法において同じである。
また、入力オペランドがブロックフローティング型のデータの場合とは、演算対象となる入力オペランドが１つの場合（すなわち、データブロック内での演算を行う場合）において、その入力オペランドがブロックフローティング型のデータである場合をいう。以下、請求の範囲第５６項記載のコンパイルプログラム、および請求の範囲第９３項記載のオブジェクトプログラム生成方法において同じである。
また、中間結果ブロックスケールファクタとは、例えば、演算として加算または減算を行うのであれば、請求の範囲第２８項における共通スケールファクタがこれに該当し、演算として乗算または除算を行うのであれば、請求の範囲第３１項における乗算結果ブロックスケールファクタがこれに該当する。以下、請求の範囲第５６項記載のコンパイルプログラム、および請求の範囲第９３項記載のオブジェクトプログラム生成方法において同じである。
また、演算用ブロックスケールファクタとは、例えば、演算として加算または減算を行うのであれば、請求の範囲第２８項における共通スケールファクタがこれに該当する。以下、請求の範囲第５６項記載のコンパイルプログラム、および請求の範囲第９３項記載のオブジェクトプログラム生成方法において同じである。
さらに、本発明に係る請求の範囲第２０項記載のコンパイル装置は、請求の範囲第１９項記載のコンパイル装置において、前記演算式検出手段は、前記演算式の演算子およびその演算子の入力オペランドのデータ型と演算子の出力オペランドのデータ型とを演算式検出結果として検出し、前記演算式展開手段は、前記演算式検出手段で検出される前記演算式検出結果のうち演算子および演算子の入力オペランドのデータ型の情報に基づき、入力オペランドがブロックフローティング型のデータを含む場合には、入力データブロックのブロックスケールファクタから演算用ブロックスケールファクタを算出する処理を構成する命令コードとして展開し、入力オペランドがブロックフローティング型のデータの場合には、ブロックフローティング型のデータを演算器に入力する処理については、前記演算用ブロックスケールファクタおよび入力オペランドのブロックスケールファクタの一方または両方に基づくシフト処理を行う演算器へのデータ入力処理を構成する命令コードとして展開するようになっている。
このような構成であれば、演算式検出手段により、演算式の演算子およびその演算子の入力オペランドのデータ型と、演算子の出力オペランドのデータ型とが演算式検出結果として検出される。そして、演算式展開手段により、検出される演算式検出結果のうち演算子および演算子の入力オペランドのデータ型の情報に基づき、入力オペランドがブロックフローティング型のデータを含む場合には、入力データブロックのブロックスケールファクタから演算用ブロックスケールファクタを算出する処理を構成する命令コードとして展開される。また、入力オペランドがブロックフローティング型のデータの場合には、ブロックフローティング型のデータを演算器に入力する処理については、演算用ブロックスケールファクタおよび入力オペランドのブロックスケールファクタの一方または両方、並びにグループスケールファクタに基づくシフト処理を行う演算器へのデータ入力処理を構成する命令コードとして展開される。
さらに、本発明に係る請求の範囲第２１項記載のコンパイル装置は、請求の範囲第２０項記載のコンパイル装置において、前記演算式展開手段は、演算器に入力されたブロックフローティング型のデータについては、前記演算子に基づく演算処理を構成する命令コードとして展開し、出力オペランドがブロックフローティング型のデータの場合には、入力データブロックのブロックスケールファクタから中間結果ブロックスケールファクタを算出し、出力オペランドに対応する演算結果の正規化を行い、前記中間結果ブロックスケールファクタからブロックスケールファクタを算出するデータ出力処理を構成する命令コードとして展開するようになっている。
このような構成であれば、演算式展開手段により、演算器に入力されたブロックフローティング型のデータについては、演算子に基づく演算処理を構成する命令コードとして展開される。また、出力オペランドがブロックフローティング型のデータの場合には、入力データブロックのブロックスケールファクタから中間結果ブロックスケールファクタを算出し、出力オペランドに対応する演算結果の正規化を行い、中間結果ブロックスケールファクタからブロックスケールファクタを算出するデータ出力処理を構成する命令コードとして展開される。
さらに、本発明に係る請求の範囲第２２項記載のコンパイル装置は、データ型としてブロックフローティング型のブロックフローティング変数を用いて演算式を記述したソースプログラムが与えられたときに、与えられたソースプログラムをオブジェクトプログラムに翻訳する装置であって、前記ブロックフローティング変数は、１または複数のデータと１個のグループスケールファクタを含んでデータグループを構成し、さらに１または複数のデータグループを含んでデータブロックを構成し、前記データブロックは、前記データブロックのブロックスケールファクタを含むデータ構造を表す変数であり、前記ソースプログラムのなかから前記演算式を検出する演算式検出手段と、前記演算式検出手段で検出した演算式を所定の命令コードとして展開する演算式展開手段と、前記演算式展開手段で展開した命令コードを前記オブジェクトプログラムに変換するオブジェクトコード変換手段とを備える。
このような構成であれば、ブロックフローティング変数を用いて演算式を記述したソースプログラムが与えられると、演算式検出手段により、与えられたソースプログラムのなかから演算式が検出され、演算式展開手段により、検出された演算式が所定の命令コードとして展開される。そして、オブジェクトコード変換手段により、展開された命令コードがオブジェクトプログラムに変換される。
ここで、入力オペランドがブロックフローティング型のデータを含む場合とは、演算対象となる複数の入力オペランドが存在する場合において、そのうち少なくとも１つの入力オペランドがブロックフローティング型のデータである場合をいう。以下、請求の範囲第５９項記載のコンパイルプログラム、および請求の範囲第９６項記載のオブジェクトプログラム生成方法において同じである。
また、入力オペランドがブロックフローティング型のデータの場合とは、演算対象となる入力オペランドが１つの場合（すなわち、データブロック内での演算を行う場合）において、その入力オペランドがブロックフローティング型のデータである場合をいう。以下、請求の範囲第５９項記載のコンパイルプログラム、および請求の範囲第９６項記載のオブジェクトプログラム生成方法において同じである。
また、中間結果ブロックスケールファクタとは、例えば、演算として加算または減算を行うのであれば、請求の範囲第２８項における共通スケールファクタがこれに該当し、演算として乗算または除算を行うのであれば、請求の範囲第３１項における乗算結果ブロックスケールファクタがこれに該当する。以下、請求の範囲第５９項記載のコンパイルプログラム、および請求の範囲第９６項記載のオブジェクトプログラム生成方法において同じである。
また、演算用ブロックスケールファクタとは、例えば、演算として加算または減算を行うのであれば、請求の範囲第２８項における共通スケールファクタがこれに該当する。以下、請求の範囲第５９項記載のコンパイルプログラム、および請求の範囲第９６項記載のオブジェクトプログラム生成方法において同じである。
さらに、本発明に係る請求の範囲第２３項記載のコンパイル装置は、請求の範囲第２２項記載のコンパイル装置において、前記演算式検出手段は、前記演算式の演算子およびその演算子の入力オペランドのデータ型と演算子の出力オペランドのデータ型とを演算式検出結果として検出し、前記演算式展開手段は、前記演算式検出手段で検出される前記演算式検出結果のうち演算子および演算子の入力オペランドのデータ型の情報に基づき、入力オペランドがブロックフローティング型のデータを含む場合には、入力データブロックのブロックスケールファクタから演算用ブロックスケールファクタを算出する処理を構成する命令コードとして展開し、入力オペランドがブロックフローティング型のデータの場合には、ブロックフローティング型のデータを演算器に入力する処理については、前記演算用ブロックスケールファクタおよび入力オペランドのブロックスケールファクタの一方または両方、並びにグループスケールファクタに基づくシフト処理を行う演算器へのデータ入力処理を構成する命令コードとして展開するようになっている。
このような構成であれば、演算式検出手段により、演算式の演算子およびその演算子の入力オペランドのデータ型と、演算子の出力オペランドのデータ型とが演算式検出結果として検出される。そして、演算式展開手段により、検出される演算式検出結果のうち演算子および演算子の入力オペランドのデータ型の情報に基づき、入力オペランドがブロックフローティング型のデータを含む場合には、入力データブロックのブロックスケールファクタから演算用ブロックスケールファクタを算出する処理を構成する命令コードとして展開される。また、入力オペランドがブロックフローティング型のデータの場合には、ブロックフローティング型のデータを演算器に入力する処理については、演算用ブロックスケールファクタおよび入力オペランドのブロックスケールファクタの一方または両方、並びにグループスケールファクタに基づくシフト処理を行う演算器へのデータ入力処理を構成する命令コードとして展開される。
さらに、本発明に係る請求の範囲第２４項記載のコンパイル装置は、請求の範囲第２３項記載のコンパイル装置において、前記演算式展開手段は、演算器に入力されたブロックフローティング型のデータについては、前記演算子に基づく演算処理を構成する命令コードとして展開し、出力オペランドがブロックフローティング型のデータの場合には、入力データブロックのブロックスケールファクタから中間結果ブロックスケールファクタを算出し、出力オペランドに対応する演算結果のグループ正規化を行い、そのグループ正規化によって算出される更新グループスケールファクタおよび前記中間結果ブロックスケールファクタの一方または両方から算出される最終グループスケールファクタを算出し、その算出されたグループスケールファクタからブロックスケールファクタを算出するデータ出力処理を構成する命令コードとして展開するようになっている。
このような構成であれば、演算式展開手段により、演算器に入力されたブロックフローティング型のデータについては、演算子に基づく演算処理を構成する命令コードとして展開される。また、出力オペランドがブロックフローティング型のデータの場合には、入力データブロックのブロックスケールファクタから中間結果ブロックスケールファクタを算出し、出力オペランドに対応する演算結果のグループ正規化を行い、そのグループ正規化によって算出される更新グループスケールファクタおよび中間結果ブロックスケールファクタの一方または両方から算出される最終グループスケールファクタを算出し、その算出されたグループスケールファクタからブロックスケールファクタを算出するデータ出力処理を構成する命令コードとして展開される。
さらに、本発明に係る請求の範囲第２５項記載のコンパイル装置は、ブロックフローティング変数を用いて演算式を記述したソースプログラムが与えられたときに、与えられたソースプログラムを翻訳してオブジェクトプログラムを生成する装置であって、前記ブロックフローティング変数は、１または複数のデータを含んでデータブロックを構成し、前記データブロックは、前記データブロックのブロックスケールファクタを含むデータ構造を表す変数であり、前記ソースプログラムのなかから乗算または除算を行う前記演算式を検出する演算式検出手段と、前記演算式検出手段で検出した演算式を所定の命令コードとして展開する演算式展開手段と、前記演算式展開手段で展開した命令コードを前記オブジェクトプログラムに埋め込む命令コード埋込手段とを備え、前記演算式展開手段は、前記演算式検出手段で検出した演算式のうち乗算または除算に係る部分について、乗算または除算の対象となる前記ブロックフローティング変数に対応するデータブロックを用いた乗算または除算を行う処理を構成する命令コードとして展開するようになっており、前記命令コードにより構成される処理は、前記データブロックのデータに対して乗算または除算を行い、その演算結果を演算結果データブロックとして算出するとともに、前記データブロックのブロックスケールファクタに基づいて前記演算結果データブロックのブロックスケールファクタを算出するようになっている。
このような構成であれば、ブロックフローティング変数を用いて演算式を記述したソースプログラムが与えられると、演算式検出手段により、与えられたソースプログラムのなかから乗算または除算を行う演算式が検出され、演算式展開手段により、検出された演算式のうち乗算または除算に係る部分について、乗算または除算の対象となるブロックフローティング変数に対応するデータブロックを用いた乗算または除算を行う処理を構成する命令コードとして展開される。そして、命令コード埋込手段により、展開された命令コードがオブジェクトプログラムに埋め込まれる。
したがって、オブジェクトプログラムが実行されると、演算式のうち乗算または除算に係る部分については、まず、データブロックのデータに対して乗算または除算が行われ、その演算結果が演算結果データブロックとして算出される。そして、データブロックのブロックスケールファクタに基づいて演算結果データブロックのブロックスケールファクタが算出される。
ここで、スケールファクタとしては、例えば、データをビットシフトするときのシフト量を挙げることができる。この場合、スケールファクタに相当するシフト量で、データに対してビットシフトを行うことによりスケーリングを行う。以下、請求の範囲第２６ないし第３１および第３６項記載のコンパイル装置、請求の範囲第６２ないし第６８および第７３項記載のコンパイルプログラム、並びに請求の範囲第９９ないし第１０５および第１１０項記載のオブジェクトプログラム生成方法において同じである。
また、オブジェクトプログラムには、ＣＰＵやＤＳＰ（Ｄｉｇｉｔａｌ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｏｒ）等の演算処理装置が直接実行可能な命令コードを含む実行形式のプログラムのほか、ソースプログラムで使用されている言語よりも低水準言語で記述されたプログラムを示すテキストファイル等の中間ファイルも含まれる。以下、請求の範囲第２６ないし第３１および第３６項記載のコンパイル装置、請求の範囲第６２ないし第６８および第７３項記載のコンパイルプログラム、並びに請求の範囲第９９ないし第１０５および第１１０項記載のオブジェクトプログラム生成方法において同じである。
また、乗算または除算の対象となるブロックフローティング変数に対応するデータブロックは、異なる複数のデータブロックであってもよいし、同一のデータブロックであってもよい。すなわち、異なる複数のデータブロック間で乗算または除算を行うこともできるし、同一のデータブロック内で乗算または除算を行うこともできる。以下、請求の範囲第２７項記載のコンパイル装置、請求の範囲第６２および第６４項記載のコンパイルプログラム、並びに請求の範囲第９９および第１０１項記載のオブジェクトプログラム生成方法において同じである。
さらに、本発明に係る請求の範囲第２６項記載のコンパイル装置は、ブロックフローティング変数および固定小数点変数を用いて演算式を記述したソースプログラムが与えられたときに、与えられたソースプログラムを翻訳してオブジェクトプログラムを生成する装置であって、前記ブロックフローティング変数は、１または複数のデータを含んでデータブロックを構成し、前記データブロックは、前記データブロックのブロックスケールファクタを含むデータ構造を表す変数であり、前記固定小数点変数は、１または複数のデータを含んでデータブロックを構成するデータ構造を表す変数であり、前記ソースプログラムのなかから乗算または除算を行う前記演算式を検出する演算式検出手段と、前記演算式検出手段で検出した演算式を所定の命令コードとして展開する演算式展開手段と、前記演算式展開手段で展開した命令コードを前記オブジェクトプログラムに埋め込む命令コード埋込手段とを備え、前記演算式展開手段は、前記演算式検出手段で検出した演算式のうち乗算または除算に係る部分について、乗算または除算の対象となる前記ブロックフローティング変数および前記固定小数点変数に対応するデータブロックを用いた乗算または除算を行う処理を構成する命令コードとして展開するようになっており、前記命令コードにより構成される処理は、前記ブロックフローティング変数に対応するデータブロックのデータと前記固定小数点変数に対応するデータブロックのデータとを乗算しまたは除算し、その演算結果を演算結果データブロックとして算出するとともに、前記ブロックフローティング変数に対応するデータブロックのブロックスケールファクタに基づいて前記演算結果データブロックのブロックスケールファクタを算出するようになっている。
このような構成であれば、ブロックフローティング変数および固定小数点変数を用いて演算式を記述したソースプログラムが与えられると、演算式検出手段により、与えられたソースプログラムのなかから乗算または除算を行う演算式が検出され、演算式展開手段により、検出された演算式のうち乗算または除算に係る部分について、乗算または除算の対象となるブロックフローティング変数および固定小数点変数に対応するデータブロックを用いた乗算または除算を行う処理を構成する命令コードとして展開される。そして、命令コード埋込手段により、展開された命令コードがオブジェクトプログラムに埋め込まれる。
したがって、オブジェクトプログラムが実行されると、演算式のうち乗算または除算に係る部分については、まず、ブロックフローティング変数に対応するデータブロックのデータと固定小数点変数に対応するデータブロックのデータとが乗算されまたは除算され、その演算結果が演算結果データブロックとして算出される。そして、ブロックフローティング変数に対応するデータブロックのブロックスケールファクタに基づいて演算結果データブロックのブロックスケールファクタが算出される。
さらに、本発明に係る請求の範囲第２７項記載のコンパイル装置は、ブロックフローティング変数を用いて演算式を記述したソースプログラムが与えられたときに、与えられたソースプログラムを翻訳してオブジェクトプログラムを生成する装置であって、前記ブロックフローティング変数は、１または複数のデータを含んでデータグループを構成し、さらに複数のデータグループを含んでデータブロックを構成し、前記データブロックは、前記各データグループのグループスケールファクタおよび前記データブロックのブロックスケールファクタを含むデータ構造を表す変数であり、前記ソースプログラムのなかから乗算または除算を行う前記演算式を検出する演算式検出手段と、前記演算式検出手段で検出した演算式を所定の命令コードとして展開する演算式展開手段と、前記演算式展開手段で展開した命令コードを前記オブジェクトプログラムに埋め込む命令コード埋込手段とを備え、前記演算式展開手段は、前記演算式検出手段で検出した演算式のうち乗算または除算に係る部分について、乗算または除算の対象となる前記ブロックフローティング変数に対応するデータブロックを用いた乗算または除算を行う処理を構成する命令コードとして展開するようになっており、前記命令コードにより構成される処理は、前記データブロックの各データに対して乗算または除算を行い、それら演算結果を演算結果データブロックとして算出するとともに、前記データブロックのブロックスケールファクタに基づいて前記演算結果データブロックのブロックスケールファクタを算出するようになっている。
このような構成であれば、ブロックフローティング変数を用いて演算式を記述したソースプログラムが与えられると、演算式検出手段により、与えられたソースプログラムのなかから乗算または除算を行う演算式が検出され、演算式展開手段により、検出された演算式のうち乗算または除算に係る部分について、乗算または除算の対象となるブロックフローティング変数に対応するデータブロックを用いた乗算または除算を行う処理を構成する命令コードとして展開される。そして、命令コード埋込手段により、展開された命令コードがオブジェクトプログラムに埋め込まれる。
したがって、オブジェクトプログラムが実行されると、演算式のうち乗算または除算に係る部分については、まず、データブロックの各データに対して乗算または除算が行われ、それら演算結果が演算結果データブロックとして算出される。そして、データブロックのブロックスケールファクタに基づいて演算結果データブロックのブロックスケールファクタが算出される。
さらに、本発明に係る請求の範囲第２８項記載のコンパイル装置は、ブロックフローティング変数を用いて演算式を記述したソースプログラムが与えられたときに、与えられたソースプログラムを翻訳してオブジェクトプログラムを生成する装置であって、前記ブロックフローティング変数は、１または複数のデータを含んでデータブロックを構成し、前記データブロックは、前記データブロックのブロックスケールファクタを含むデータ構造を表す変数であり、前記ソースプログラムのなかから加算または減算を行う前記演算式を検出する演算式検出手段と、前記演算式検出手段で検出した演算式を所定の命令コードとして展開する演算式展開手段と、前記演算式展開手段で展開した命令コードを前記オブジェクトプログラムに埋め込む命令コード埋込手段とを備え、前記演算式展開手段は、前記演算式検出手段で検出した演算式のうち加算または減算に係る部分について、加算または減算の対象となる前記ブロックフローティング変数に対応するデータブロックを用いた加算または減算を行う処理を構成する命令コードとして展開するようになっており、前記命令コードにより構成される処理は、前記データブロックのブロックスケールファクタのうち絶対値が最大のデータを含むデータブロックのものを共通ブロックスケールファクタとして選択し、前記共通ブロックスケールファクタに基づいて前記データブロックの各データに対してスケーリングを行い、スケーリングを行った各データブロックのデータに対して加算または減算を行うようになっている。
このような構成であれば、ブロックフローティング変数を用いて演算式を記述したソースプログラムが与えられると、演算式検出手段により、与えられたソースプログラムのなかから加算または減算を行う演算式が検出され、演算式展開手段により、検出された演算式のうち加算または減算に係る部分について、加算または減算の対象となるブロックフローティング変数に対応するデータブロックを用いた加算または減算を行う処理を構成する命令コードとして展開される。そして、命令コード埋込手段により、展開された命令コードがオブジェクトプログラムに埋め込まれる。
したがって、オブジェクトプログラムが実行されると、演算式のうち加算または減算に係る部分については、まず、データブロックのブロックスケールファクタのうち絶対値が最大のデータを含むデータブロックのものが共通ブロックスケールファクタとして選択される。そして、共通ブロックスケールファクタに基づいてデータブロックの各データに対してスケーリングが行われ、スケーリングが行われた各データブロックのデータに対して加算または減算が行われる。
また、加算または減算の対象となるブロックフローティング変数に対応するデータブロックは、異なる複数のデータブロックであってもよいし、同一のデータブロックであってもよい。すなわち、異なる複数のデータブロック間で加算または減算を行うこともできるし、同一のデータブロック内で加算または減算を行うこともできる。以下、請求の範囲第３０項記載のコンパイル装置、請求の範囲第６５および第６７項記載のコンパイルプログラム、並びに請求の範囲第１０２および第１０４項記載のオブジェクトプログラム生成方法において同じである。
さらに、本発明に係る請求の範囲第２９項記載のコンパイル装置は、ブロックフローティング変数および固定小数点変数を用いて演算式を記述したソースプログラムが与えられたときに、与えられたソースプログラムを翻訳してオブジェクトプログラムを生成する装置であって、前記ブロックフローティング変数は、１または複数のデータを含んでデータブロックを構成し、前記データブロックは、前記データブロックのブロックスケールファクタを含むデータ構造を表す変数であり、前記固定小数点変数は、１または複数のデータを含んでデータブロックを構成するデータ構造を表す変数であり、前記ソースプログラムのなかから加算または減算を行う前記演算式を検出する演算式検出手段と、前記演算式検出手段で検出した演算式を所定の命令コードとして展開する演算式展開手段と、前記演算式展開手段で展開した命令コードを前記オブジェクトプログラムに埋め込む命令コード埋込手段とを備え、前記演算式展開手段は、前記演算式検出手段で検出した演算式のうち加算または減算に係る部分について、加算または減算の対象となる前記ブロックフローティング変数および前記固定小数点変数に対応するデータブロックを用いた加算または減算を行う処理を構成する命令コードとして展開するようになっており、前記命令コードにより構成される処理は、固定小数点データブロックについてはある定数として与えられる仮想ブロックスケールファクタを算出し、前記ブロックフローティング変数に対応するデータブロックのブロックスケールファクタおよび前記仮想ブロックスケールファクタのうち、絶対値が最大のデータを含むデータブロックのものを共通ブロックスケールファクタとして選択し、前記共通ブロックスケールファクタに基づいて当該データブロックの各データに対してスケーリングを行い、スケーリングを行った各データブロックのデータと前記固定小数点変数に対応するデータブロックのデータとを加算しまたは減算するようになっている。
このような構成であれば、ブロックフローティング変数および固定小数点変数を用いて演算式を記述したソースプログラムが与えられると、演算式検出手段により、与えられたソースプログラムのなかから加算または減算を行う演算式が検出され、演算式展開手段により、検出された演算式のうち加算または減算に係る部分について、加算または減算の対象となるブロックフローティング変数および固定小数点変数に対応するデータブロックを用いた加算または減算を行う処理を構成する命令コードとして展開される。そして、命令コード埋込手段により、展開された命令コードがオブジェクトプログラムに埋め込まれる。
したがって、オブジェクトプログラムが実行されると、演算式のうち加算または減算に係る部分については、まず、固定小数点データブロックについてはある定数として与えられる仮想ブロックスケールファクタが算出され、ブロックフローティング変数に対応するデータブロックのブロックスケールファクタおよび仮想ブロックスケールファクタのうち、絶対値が最大のデータを含むデータブロックのものが共通ブロックスケールファクタとして選択され、共通ブロックスケールファクタに基づいてそのデータブロックの各データに対してスケーリングが行われる。そして、スケーリングが行われた各データブロックのデータと固定小数点変数に対応するデータブロックのデータとが加算されまたは減算される。
さらに、本発明に係る請求の範囲第３０項記載のコンパイル装置は、ブロックフローティング変数を用いて演算式を記述したソースプログラムが与えられたときに、与えられたソースプログラムを翻訳してオブジェクトプログラムを生成する装置であって、前記ブロックフローティング変数は、１または複数のデータを含んでデータグループを構成し、さらに複数のデータグループを含んでデータブロックを構成し、前記データブロックは、前記各データグループのグループスケールファクタおよび前記データブロックのブロックスケールファクタを含むデータ構造を表す変数であり、前記ソースプログラムのなかから加算または減算を行う前記演算式を検出する演算式検出手段と、前記演算式検出手段で検出した演算式を所定の命令コードとして展開する演算式展開手段と、前記演算式展開手段で展開した命令コードを前記オブジェクトプログラムに埋め込む命令コード埋込手段とを備え、前記演算式展開手段は、前記演算式検出手段で検出した演算式のうち加算または減算に係る部分について、加算または減算の対象となる前記ブロックフローティング変数に対応するデータブロックを用いた加算または減算を行う処理を構成する命令コードとして展開するようになっており、前記命令コードにより構成される処理は、前記データブロックのブロックスケールファクタのうち絶対値が最大のデータを含むデータブロックのものを共通ブロックスケールファクタとして選択し、前記データブロックの各データグループごとに、当該データグループのグループスケールファクタと前記共通ブロックスケールファクタとの差分からなるスケールファクタに基づいて、当該データグループの各データに対してスケーリングを行い、スケーリングを行った各データブロックのデータに対して加算または減算を行うようになっている。
このような構成であれば、ブロックフローティング変数を用いて演算式を記述したソースプログラムが与えられると、演算式検出手段により、与えられたソースプログラムのなかから加算または減算を行う演算式が検出され、演算式展開手段により、検出された演算式のうち加算または減算に係る部分について、加算または減算の対象となるブロックフローティング変数に対応するデータブロックを用いた加算または減算を行う処理を構成する命令コードとして展開される。そして、命令コード埋込手段により、展開された命令コードがオブジェクトプログラムに埋め込まれる。
したがって、オブジェクトプログラムが実行されると、演算式のうち加算または減算に係る部分については、まず、データブロックのブロックスケールファクタのうち絶対値が最大のデータを含むデータブロックのものが共通ブロックスケールファクタとして選択される。そして、データブロックの各データグループごとに、そのデータグループのグループスケールファクタと共通ブロックスケールファクタとの差分からなるスケールファクタに基づいて、そのデータグループの各データに対してスケーリングが行われ、スケーリングが行われた各データブロックのデータに対して加算または減算が行われる。
さらに、本発明に係る請求の範囲第３１項記載のコンパイル装置は、ブロックフローティング変数を用いて演算式を記述したソースプログラムが与えられたときに、与えられたソースプログラムを翻訳してオブジェクトプログラムを生成する装置であって、前記ブロックフローティング変数は、１または複数のデータを含んでデータブロックを構成し、前記データブロックは、前記データブロックのブロックスケールファクタを含むデータ構造を表す変数であり、前記ソースプログラムのなかから乗累算を行う前記演算式を検出する演算式検出手段と、前記演算式検出手段で検出した演算式を所定の命令コードとして展開する演算式展開手段と、前記演算式展開手段で展開した命令コードを前記オブジェクトプログラムに埋め込む命令コード埋込手段とを備え、前記演算式展開手段は、前記演算式検出手段で検出した演算式のうち乗累算に係る部分について、乗算の対象となる２つの前記ブロックフローティング変数に対応する第１データブロックおよび第２データブロック、並びに加算または減算の対象となる前記ブロックフローティング変数に対応する第３データブロックを用いた乗累算を行う処理を構成する命令コードとして展開するようになっており、前記命令コードにより構成される処理は、与えられたスケールファクタに基づいて前記第１データブロックの各データに対してスケーリングを行う第１スケーリング処理と、与えられたスケールファクタに基づいて前記第３データブロックの各データに対してスケーリングを行う第２スケーリング処理と、前記第２データブロックおよび前記第１スケーリング処理からの第１データブロックを用いた乗算を行う乗算処理と、前記乗算処理からの乗算結果データブロックおよび前記第２スケーリング処理からの第３データブロックを用いた加算または減算を行う演算処理とを備え、さらに、前記第１データブロックおよび前記第２データブロックのブロックスケールファクタの和である乗算結果ブロックスケールファクタと、前記第３データブロックのブロックスケールファクタとの差分からなる補正ブロックスケールファクタを算出し、前記補正ブロックスケールファクタを前記第１スケーリング処理に与え、前記第１データブロックのデータを前記第１スケーリング処理に入力し、かつ、前記第２スケーリング処理にスケールファクタを与えず、前記第３データブロックのデータを前記第２スケーリング処理に入力するようになっている。
このような構成であれば、ブロックフローティング変数を用いて演算式を記述したソースプログラムが与えられると、演算式検出手段により、与えられたソースプログラムのなかから乗累算を行う演算式が検出され、演算式展開手段により、検出された演算式のうち乗累算に係る部分について、乗算の対象となる２つのブロックフローティング変数に対応する第１データブロックおよび第２データブロック、並びに加算または減算の対象となるブロックフローティング変数に対応する第３データブロックを用いた乗累算を行う処理を構成する命令コードとして展開される。そして、命令コード埋込手段により、展開された命令コードがオブジェクトプログラムに埋め込まれる。
したがって、オブジェクトプログラムが実行されると、演算式のうち乗累算については、まず、乗算結果ブロックスケールファクタと第３データブロックのブロックスケールファクタとの差分からなる補正ブロックスケールファクタが算出され、乗算処理による加算または減算を行うにあたって桁位置を一致させるために、データブロック間でデータの桁位置を補正するスケール補正処理が行われる。
スケール補正処理が行われると、補正ブロックスケールファクタが第１スケーリング処理に与えられ、第１データブロックのデータが第１スケーリング処理に入力され、第１スケーリング処理により、補正ブロックスケールファクタに基づいて、第１データブロックの各データに対してスケーリングが行われる。そして、乗算処理により、第２データブロックおよび第１スケーリング処理からの第１データブロックを用いた乗算が行われ、その結果が乗算結果データブロックとして演算処理に入力される。すなわち、乗算結果データブロックの各データは、第１データブロックに対するスケーリングにより、第３データブロックのデータと桁位置が一致するようにその乗算前に補正が行われる。
一方、第２スケーリング処理にはスケールファクタが与えられることなく、第３データブロックのデータが第２スケーリング処理に入力されるので、第３データブロックの各データは、スケーリングが行われずそのまま演算処理に入力される。最終的な加算または減算では、演算処理により、桁位置が一致した状態で、乗算処理からの乗算結果データブロックおよび第２スケーリング処理からの第３データブロックを用いた加算または減算が行われる。
さらに、本発明に係る請求の範囲第３２項記載のコンパイル装置は、請求の範囲第３１項記載のコンパイル装置において、前記命令コードにより構成される処理は、前記補正ブロックスケールファクタを前記第１スケーリング処理に与え、前記第１データブロックのデータを前記第１スケーリング処理に入力し、かつ、前記第２スケーリング処理にスケールファクタを与えず、前記第３データブロックのデータを前記第２スケーリング処理に入力する第１スケール補正処理と、前記補正ブロックスケールファクタを前記第２スケーリング処理に与え、前記第３データブロックのデータを前記第２スケーリング処理に入力し、かつ、前記第１スケーリング処理にスケールファクタを与えず、前記第１データブロックのデータを前記第１スケーリング処理に入力する第２スケール補正処理とのうちいずれかを行うようになっている。
このような構成であれば、オブジェクトプログラムが実行されると、演算式のうち乗累算については、まず、乗算結果ブロックスケールファクタと第３データブロックのブロックスケールファクタとの差分からなる補正ブロックスケールファクタが算出され、第１スケール補正処理および第２スケール補正処理のうちいずれかが行われる。
第１スケール補正処理が行われると、補正ブロックスケールファクタが第１スケーリング処理に与えられ、第１データブロックのデータが第１スケーリング処理に入力され、第１スケーリング処理により、補正ブロックスケールファクタに基づいて、第１データブロックの各データに対してスケーリングが行われる。そして、乗算処理により、第２データブロックおよび第１スケーリング処理からの第１データブロックを用いた乗算が行われ、その結果が乗算結果データブロックとして演算処理に入力される。すなわち、乗算結果データブロックの各データは、第１データブロックに対するスケーリングにより、第３データブロックのデータと桁位置が一致するようにその乗算前に補正が行われる。
一方、第２スケーリング処理にはスケールファクタが与えられることなく、第３データブロックのデータが第２スケーリング処理に入力されるので、第３データブロックの各データは、スケーリングが行われずそのまま演算処理に入力される。最終的な加算または減算では、演算処理により、桁位置が一致した状態で、乗算処理からの乗算結果データブロックおよび第２スケーリング処理からの第３データブロックを用いた加算または減算が行われる。
また、第２スケール補正処理が行われると、補正ブロックスケールファクタが第２スケーリング処理に与えられ、第３データブロックのデータが第２スケーリング処理に入力され、第２スケーリング処理により、補正ブロックスケールファクタに基づいて、第３データブロックの各データに対してスケーリングが行われ、その結果が演算処理に入力される。すなわち、第３データブロックの各データは、そのスケーリングにより、乗算結果データブロックのデータと桁位置が一致するように補正が行われる。
一方、第１スケーリング処理にはスケールファクタが与えられることなく、第１データブロックのデータが第１スケーリング処理に入力されるので、第１データブロックの各データは、スケーリングが行われずそのまま乗算処理に入力される。そして、乗算処理により、第２データブロックおよび第１スケーリング処理からの第１データブロックを用いた乗算が行われ、その結果が乗算結果データブロックとして演算処理に入力される。最終的な加算または減算では、演算処理により、桁位置が一致した状態で、乗算処理からの乗算結果データブロックおよび第２スケーリング処理からの第３データブロックを用いた加算または減算が行われる。
さらに、本発明に係る請求の範囲第３３項記載のコンパイル装置は、請求の範囲第３２項記載のコンパイル装置において、前記命令コードにより構成される処理は、前記乗算結果ブロックスケールファクタおよび前記第３データブロックのブロックスケールファクタの大小関係に基づいて、前記第１スケール補正処理および前記第２スケール補正処理のいずれかを選択的に行うようになっている。
このような構成であれば、乗算結果ブロックスケールファクタおよび第３データブロックのブロックスケールファクタの大小関係に基づいて、第１スケール補正処理および第２スケール補正処理のいずれかが選択的に行われる。
さらに、本発明に係る請求の範囲第３４項記載のコンパイル装置は、請求の範囲第３３項記載のコンパイル装置において、前記第１スケーリング処理は、与えられたスケールファクタに相当するシフト量で、入力したデータに対して下位ビットの方向へビットシフトを行うようになっており、前記第２スケーリング処理は、与えられたスケールファクタに相当するシフト量で、入力したデータに対して下位ビットの方向へビットシフトを行うようになっており、前記命令コードにより構成される処理は、前記第３データブロックのブロックスケールファクタが前記乗算結果ブロックスケールファクタよりも大きいときは、前記第１スケール補正処理を行い、前記乗算結果ブロックスケールファクタが前記第３データブロックのブロックスケールファクタよりも大きいときは、前記第２スケール補正処理を行うようになっている。
このような構成であれば、第３データブロックのブロックスケールファクタが乗算結果ブロックスケールファクタよりも大きいと、第１スケール補正処理が行われる。これに対し、乗算結果ブロックスケールファクタが第３データブロックのブロックスケールファクタよりも大きいと、第２スケール補正処理が行われる。すなわち、第３データブロックのブロックスケールファクタおよび乗算結果ブロックスケールファクタのうち値が小さいものに係るデータブロックについては、第１スケーリング処理または第２スケーリング処理により、補正ブロックスケールファクタに相当するビット量で、その各データに対して下位ビットの方向へビットシフト（以下、単に右シフトという。）が行われる。
さらに、本発明に係る請求の範囲第３５項記載のコンパイル装置は、請求の範囲第３３項記載のコンパイル装置において、前記第１スケーリング処理は、与えられたスケールファクタに相当するシフト量で、入力したデータに対して上位ビットの方向へビットシフトを行うようになっており、前記第２スケーリング処理は、与えられたスケールファクタに相当するシフト量で、入力したデータに対して上位ビットの方向へビットシフトを行うようになっており、前記命令コードにより構成される処理は、前記第３データブロックのブロックスケールファクタが前記乗算結果ブロックスケールファクタよりも大きいときは、前記第２スケール補正処理を行い、前記乗算結果ブロックスケールファクタが前記第３データブロックのブロックスケールファクタよりも大きいときは、前記第１スケール補正処理を行うようになっている。
このような構成であれば、第３データブロックのブロックスケールファクタが乗算結果ブロックスケールファクタよりも大きいと、第２スケール補正処理が行われる。これに対し、乗算結果ブロックスケールファクタが第３データブロックのブロックスケールファクタよりも大きいと、第１スケール補正処理が行われる。すなわち、第３データブロックのブロックスケールファクタおよび乗算結果ブロックスケールファクタのうち値が大きいものに係るデータブロックについては、第１スケーリング処理または第２スケーリング処理により、補正ブロックスケールファクタに相当するビット量で、その各データに対して上位ビットの方向へビットシフト（以下、単に左シフトという。）が行われる。
さらに、本発明に係る請求の範囲第３６項記載のコンパイル装置は、ブロックフローティング変数を用いて演算式を記述したソースプログラムが与えられたときに、与えられたソースプログラムを翻訳してオブジェクトプログラムを生成する装置であって、前記ブロックフローティング変数は、１または複数のデータを含んでデータグループを構成し、さらに複数のデータグループを含んでデータブロックを構成し、前記データブロックは、前記各データグループのグループスケールファクタおよび前記データブロックのブロックスケールファクタを含むデータ構造を表す変数であり、前記ソースプログラムのなかから乗累算を行う前記演算式を検出する演算式検出手段と、前記演算式検出手段で検出した演算式を所定の命令コードとして展開する演算式展開手段と、前記演算式展開手段で展開した命令コードを前記オブジェクトプログラムに埋め込む命令コード埋込手段とを備え、前記演算式展開手段は、前記演算式検出手段で検出した演算式のうち乗累算に係る部分について、乗算の対象となる２つの前記ブロックフローティング変数に対応する第１データブロックおよび第２データブロック、並びに加算または減算の対象となる前記ブロックフローティング変数に対応する第３データブロックを用いた乗累算を行う処理を構成する命令コードとして展開するようになっており、前記命令コードにより構成される処理は、与えられたスケールファクタに基づいて前記第１データブロックの各データに対してスケーリングを行う第１スケーリング処理と、与えられたスケールファクタに基づいて前記第３データブロックの各データに対してスケーリングを行う第２スケーリング処理と、前記第２データブロックおよび前記第１スケーリング処理からの第１データブロックを用いた乗算を行う乗算処理と、前記乗算処理からの乗算結果データブロックおよび前記第２スケーリング処理からの第３データブロックを用いた加算または減算を行う演算処理とを備え、前記第１データブロックおよび前記第２データブロックのブロックスケールファクタの和である乗算結果ブロックスケールファクタと、前記第３データブロックのブロックスケールファクタとの差分からなる補正ブロックスケールファクタを算出し、前記第１データブロックの各データグループごとに、当該データグループのグループスケールファクタと前記第１データブロックのブロックスケールファクタとの差分からなるスケールファクタに前記補正ブロックスケールファクタを加算したものを前記第１スケーリング処理に与え、当該データグループのデータを前記第１スケーリング処理に入力し、かつ、前記第３データブロックの各データグループごとに、当該データグループのグループスケールファクタと前記第３データブロックのブロックスケールファクタとの差分からなるスケールファクタを前記第２スケーリング処理に与え、当該データグループのデータを前記第２スケーリング処理に入力するようになっている。
このような構成であれば、ブロックフローティング変数を用いて演算式を記述したソースプログラムが与えられると、演算式検出手段により、与えられたソースプログラムのなかから乗累算を行う演算式が検出され、演算式展開手段により、検出された演算式のうち乗累算に係る部分について、乗算の対象となる２つのブロックフローティング変数に対応する第１データブロックおよび第２データブロック、並びに加算または減算の対象となるブロックフローティング変数に対応する第３データブロックを用いた乗累算を行う処理を構成する命令コードとして展開される。そして、命令コード埋込手段により、展開された命令コードがオブジェクトプログラムに埋め込まれる。
したがって、オブジェクトプログラムが実行されると、演算式のうち乗累算については、まず、乗算結果ブロックスケールファクタと第３データブロックのブロックスケールファクタとの差分からなる補正ブロックスケールファクタが算出され、乗算処理による加算または減算を行うにあたって桁位置を一致させるために、データブロック間でデータの桁位置を補正するスケール補正処理が行われる。
スケール補正処理が行われると、第１データブロックの各データグループごとに、そのデータグループのグループスケールファクタと第１データブロックのブロックスケールファクタとの差分からなるスケールファクタに補正ブロックスケールファクタを加算したものが第１スケーリング処理に与えられ、そのデータグループのデータが第１スケーリング処理に入力される。したがって、第１スケーリング処理により、各グループスケールファクタ、ブロックスケールファクタおよび補正ブロックスケールファクタに基づいて、第１データブロックの各データに対してスケーリングが行われる。そして、乗算処理により、第２データブロックおよび第１スケーリング処理からの第１データブロックを用いた乗算が行われ、その結果が乗算結果データブロックとして演算処理に入力される。すなわち、乗算結果データブロックの各データは、第１データブロックに対するスケーリングにより、第３データブロックのデータと桁位置が一致するようにその乗算前に補正が行われる。
一方、第３データブロックの各データグループごとに、そのデータグループのグループスケールファクタと第３データブロックのブロックスケールファクタとの差分からなるスケールファクタが第２スケーリング処理に与えられ、そのデータグループのデータが第２スケーリング処理に入力される。したがって、第２スケーリング処理により、各グループスケールファクタおよびブロックスケールファクタに基づいて、第３データブロックの各データに対してスケーリングが行われ、演算処理に入力される。最終的な加算または減算では、演算処理により、桁位置が一致した状態で、乗算処理からの乗算結果データブロックおよび第２スケーリング処理からの第３データブロックを用いた加算または減算が行われる。
さらに、本発明に係る請求の範囲第３７項記載のコンパイル装置は、請求の範囲第３６項記載のコンパイル装置において、前記命令コードにより構成される処理は、前記第１データブロックの各データグループごとに、当該データグループのグループスケールファクタと前記第１データブロックのブロックスケールファクタとの差分からなるスケールファクタに前記補正ブロックスケールファクタを加算したものを前記第１スケーリング処理に与え、当該データグループのデータを前記第１スケーリング処理に入力し、かつ、前記第３データブロックの各データグループごとに、当該データグループのグループスケールファクタと前記第３データブロックのブロックスケールファクタとの差分からなるスケールファクタを前記第２スケーリング処理に与え、当該データグループのデータを前記第２スケーリング処理に入力する第１スケール補正処理と、前記第３データブロックの各データグループごとに、当該データグループのグループスケールファクタと前記第３データブロックのブロックスケールファクタとの差分からなるスケールファクタに前記補正ブロックスケールファクタを加算したものを前記第２スケーリング処理に与え、当該データグループのデータを前記第２スケーリング処理に入力し、かつ、前記第１データブロックの各データグループごとに、当該データグループのグループスケールファクタと前記第１データブロックのブロックスケールファクタとの差分からなるスケールファクタを前記第１スケーリング処理に与え、当該データグループのデータを前記第１スケーリング処理に入力する第２スケール補正処理とのうちいずれかを行うようになっている。
このような構成であれば、オブジェクトプログラムが実行されると、演算式のうち乗累算については、まず、乗算結果ブロックスケールファクタと第３データブロックのブロックスケールファクタとの差分からなる補正ブロックスケールファクタが算出され、第１スケール補正処理および第２スケール補正処理のうちいずれかが行われる。
第１スケール補正処理が行われると、第１データブロックの各データグループごとに、そのデータグループのグループスケールファクタと第１データブロックのブロックスケールファクタとの差分からなるスケールファクタに補正ブロックスケールファクタを加算したものが第１スケーリング処理に与えられ、そのデータグループのデータが第１スケーリング処理に入力される。したがって、第１スケーリング処理により、各グループスケールファクタ、ブロックスケールファクタおよび補正ブロックスケールファクタに基づいて、第１データブロックの各データに対してスケーリングが行われる。そして、乗算処理により、第２データブロックおよび第１スケーリング処理からの第１データブロックを用いた乗算が行われ、その結果が乗算結果データブロックとして演算処理に入力される。すなわち、乗算結果データブロックの各データは、第１データブロックに対するスケーリングにより、第３データブロックのデータと桁位置が一致するようにその乗算前に補正が行われる。
一方、第３データブロックの各データグループごとに、そのデータグループのグループスケールファクタと第３データブロックのブロックスケールファクタとの差分からなるスケールファクタが第２スケーリング処理に与えられ、そのデータグループのデータが第２スケーリング処理に入力される。したがって、第２スケーリング処理により、各グループスケールファクタおよびブロックスケールファクタに基づいて、第３データブロックの各データに対してスケーリングが行われ、演算処理に入力される。最終的な加算または減算では、演算処理により、桁位置が一致した状態で、乗算処理からの乗算結果データブロックおよび第２スケーリング処理からの第３データブロックを用いた加算または減算が行われる。
また、第２スケール補正処理が行われると、第３データブロックの各データグループごとに、そのデータグループのグループスケールファクタと第３データブロックのブロックスケールファクタとの差分からなるスケールファクタに補正ブロックスケールファクタを加算したものが第２スケーリング処理に与えられ、そのデータグループのデータが第２スケーリング処理に入力される。したがって、第２スケーリング処理により、各グループスケールファクタ、ブロックスケールファクタおよび補正ブロックスケールファクタに基づいて、第３データブロックの各データに対してスケーリングが行われ、その結果が演算処理に入力される。すなわち、第３データブロックの各データは、そのスケーリングにより、乗算結果データブロックのデータと桁位置が一致するように補正が行われる。
一方、第１データブロックの各データグループごとに、そのデータグループのグループスケールファクタと第１データブロックのブロックスケールファクタとの差分からなるスケールファクタが第１スケーリング処理に与えられ、そのデータグループのデータが第１スケーリング処理に入力される。したがって、第１スケーリング処理により、各グループスケールファクタおよびブロックスケールファクタに基づいて、第１データブロックの各データに対してスケーリングが行われ、乗算処理に入力される。そして、乗算処理により、第２データブロックおよび第１スケーリング処理からの第１データブロックを用いた乗算が行われ、その結果が乗算結果データブロックとして演算処理に入力される。最終的な加算または減算では、演算処理により、桁位置が一致した状態で、乗算処理からの乗算結果データブロックおよび第２スケーリング処理からの第３データブロックを用いた加算または減算が行われる。
一方、上記目的を達成するために、本発明に係る請求の範囲第３８項記載のコンパイルプログラムは、ブロック浮動小数点型変数を扱う処理をコンピュータに実行させるためのプログラムである。
このような構成であれば、コンピュータによってプログラムが読み取られ、読み取られたプログラムに従ってコンピュータが処理を実行すると、請求の範囲第１項記載のコンパイル装置と同等の作用が得られる。
さらに、本発明に係る請求の範囲第３９項記載のコンパイルプログラムは、請求の範囲第３８項記載のコンパイルプログラムにおいて、演算式と演算式のオペランドの情報から演算用ブロックスケールファクタを算出し、ブロック浮動小数点型変数については、演算用ブロックスケールファクタ、ブロックスケールファクタに基づくシフト処理を行って演算器へデータ入力するような命令コードを生成する処理をコンピュータに実行させるためのプログラムである。
このような構成であれば、コンピュータによってプログラムが読み取られ、読み取られたプログラムに従ってコンピュータが処理を実行すると、請求の範囲第２項記載のコンパイル装置と同等の作用が得られる。
さらに、本発明に係る請求の範囲第４０項記載のコンパイルプログラムは、請求の範囲第３９項記載のコンパイルプログラムにおいて、演算式と演算式のオペランドの情報から中間結果スケールファクタを算出し、ブロック浮動小数点型の出力変数については、演算結果の正規化を行い、その正規化によって更新される更新グループスケールファクタおよび中間結果スケールファクタに基づくブロックスケールファクタを算出するような命令コードを生成する処理をコンピュータに実行させるためのプログラムである。
このような構成であれば、コンピュータによってプログラムが読み取られ、読み取られたプログラムに従ってコンピュータが処理を実行すると、請求の範囲第３項記載のコンパイル装置と同等の作用が得られる。
さらに、本発明に係る請求の範囲第４１項記載のコンパイルプログラムは、階層的ブロック浮動小数点型変数を扱う処理をコンピュータに実行させるためのプログラムである。
このような構成であれば、コンピュータによってプログラムが読み取られ、読み取られたプログラムに従ってコンピュータが処理を実行すると、請求の範囲第４項記載のコンパイル装置と同等の作用が得られる。
さらに、本発明に係る請求の範囲第４２項記載のコンパイルプログラムは、請求の範囲第４１項記載のコンパイルプログラムにおいて、演算式と演算式のオペランドの情報から演算用ブロックスケールファクタを算出し、階層的ブロック浮動小数点型変数については、演算用ブロックスケールファクタ、ブロックスケールファクタ、およびグループスケールファクタに基づくシフト処理を行って演算器へデータ入力するような命令コードを生成する処理をコンピュータに実行させるためのプログラムである。
このような構成であれば、コンピュータによってプログラムが読み取られ、読み取られたプログラムに従ってコンピュータが処理を実行すると、請求の範囲第５項記載のコンパイル装置と同等の作用が得られる。
さらに、本発明に係る請求の範囲第４３項記載のコンパイルプログラムは、請求の範囲第４２項記載のコンパイルプログラムにおいて、演算式と演算式のオペランドの情報から中間結果スケールファクタを算出し、階層的ブロック浮動小数点型の出力変数については、演算結果のグループ正規化を行い、そのグループ正規化によって更新される更新グループスケールファクタおよび中間結果スケールファクタに基づく最終グループスケールファクタを算出し、算出されたグループスケールファクタからブロックスケールファクタを算出するような命令コードを生成する処理をコンピュータに実行させるためのプログラムである。
このような構成であれば、コンピュータによってプログラムが読み取られ、読み取られたプログラムに従ってコンピュータが処理を実行すると、請求の範囲第６項記載のコンパイル装置と同等の作用が得ちれる。
さらに、本発明に係る請求の範囲第４４項記載のコンパイルプログラムは、ブロック浮動小数点型変数を扱うコンパイルプログラムであって、乗算または除算について、ブロック浮動小数点型変数のブロックスケールファクタに基づいて乗算結果のブロックスケールファクタを算出するような命令コードを生成する処理をコンピュータに実行させるためのプログラムである。
このような構成であれば、コンピュータによってプログラムが読み取られ、読み取られたプログラムに従ってコンピュータが処理を実行すると、請求の範囲第７項記載のコンパイル装置と同等の作用が得られる。
さらに、本発明に係る請求の範囲第４５項記載のコンパイルプログラムは、ブロック浮動小数点型変数と固定小数点型変数を扱うコンパイルプログラムであって、乗算または除算について、ブロック浮動小数点型変数のブロックスケールファクタに基づいて乗算結果のブロックスケールファクタを算出するような命令コードを生成する処理をコンピュータに実行させるためのプログラムである。
このような構成であれば、コンピュータによってプログラムが読み取られ、読み取られたプログラムに従ってコンピュータが処理を実行すると、請求の範囲第８項記載のコンパイル装置と同等の作用が得られる。
さらに、本発明に係る請求の範囲第４６項記載のコンパイルプログラムは、階層的ブロック浮動小数点型変数を扱うコンパイルプログラムであって、乗算または除算について、階層的ブロック浮動小数点型変数のブロックスケールファクタに基づいて演算結果のブロックスケールファクタを算出するような命令コードを生成する処理をコンピュータに実行させるためのプログラムである。
このような構成であれば、コンピュータによってプログラムが読み取られ、読み取られたプログラムに従ってコンピュータが処理を実行すると、請求の範囲第９項記載のコンパイル装置と同等の作用が得られる。
さらに、本発明に係る請求の範囲第４７項記載のコンパイルプログラムは、ブロック浮動小数点型変数を扱うコンパイルプログラムであって、加算または減算について、ブロック浮動小数点型変数のブロックスケールファクタの比較に基づいて共通ブロックスケールファクタを選択し、共通スケールファクタに基づいてデータブロックのデータをスケーリングし、スケーリングを施したデータに対して加算または減算を行うような命令コードを生成する処理をコンピュータに実行させるためのプログラムである。
このような構成であれば、コンピュータによってプログラムが読み取られ、読み取られたプログラムに従ってコンピュータが処理を実行すると、請求の範囲第１０項記載のコンパイル装置と同等の作用が得られる。
さらに、本発明に係る請求の範囲第４８項記載のコンパイルプログラムは、ブロック浮動小数点型変数と固定小数点型変数を扱うコンパイルプログラムであって、加算または減算について、ブロック浮動小数点型変数のブロックスケールファクタとある定数で与えられる固定小数点変数の仮想ブロックスケールファクタとの比較に基づいて共通ブロックスケールファクタを選択し、共通スケールファクタに基づいてデータブロックのデータをスケーリングし、スケーリングを施したデータに対して加算または減算を行うような命令コードを生成する処理をコンピュータに実行させるためのプログラムである。
このような構成であれば、コンピュータによってプログラムが読み取られ、読み取られたプログラムに従ってコンピュータが処理を実行すると、請求の範囲第１１項記載のコンパイル装置と同等の作用が得られる。
さらに、本発明に係る請求の範囲第４９項記載のコンパイルプログラムは、階層的ブロック浮動小数点型変数を扱うコンパイルプログラムであって、加算または減算について、階層的ブロック浮動小数点型変数のブロックスケールファクタの比較に基づいて共通ブロックスケールファクタを選択し、共通スケールファクタと各データグループのグループスケールファクタの差分に基づいてデータグループのデータをスケーリングし、スケーリングを施したデータに対して加算または減算を行うような命令コードを生成する処理をコンピュータに実行させるためのプログラムである。
このような構成であれば、コンピュータによってプログラムが読み取られ、読み取られたプログラムに従ってコンピュータが処理を実行すると、請求の範囲第１２項記載のコンパイル装置と同等の作用が得られる。
さらに、本発明に係る請求の範囲第５０項記載のコンパイルプログラムは、ブロック浮動小数点型変数を扱うコンパイルプログラムであって、加算または減算について、ブロック浮動小数点型変数のブロックスケールファクタの比較に基づいて共通ブロックスケールファクタを選択し、共通スケールファクタに基づいてデータブロックのデータをスケーリングし、スケーリングを施したデータに対して加算または減算を行うような命令コードを生成する処理をコンピュータに実行させるためのプログラムである。
このような構成であれば、コンピュータによってプログラムが読み取られ、読み取られたプログラムに従ってコンピュータが処理を実行すると、請求の範囲第１３項記載のコンパイル装置と同等の作用が得られる。
さらに、本発明に係る請求の範囲第５１項記載のコンパイルプログラムは、ブロック浮動小数点型変数と固定小数点型変数を扱うコンパイルプログラムであって、加算または減算について、ブロック浮動小数点型変数のブロックスケールファクタの比較に基づいて共通ブロックスケールファクタを選択し、共通スケールファクタに基づいてデータブロックのデータをスケーリングし、スケーリングを施したデータに対して加算または減算を行うような命令コードを生成する処理をコンピュータに実行させるためのプログラムである。
このような構成であれば、コンピュータによってプログラムが読み取られ、読み取られたプログラムに従ってコンピュータが処理を実行すると、請求の範囲第１４項記載のコンパイル装置と同等の作用が得られる。
さらに、本発明に係る請求の範囲第５２項記載のコンパイルプログラムは、階層的ブロック浮動小数点型変数を扱うコンパイルプログラムであって、加算または減算について、階層的ブロック浮動小数点型変数のブロックスケールファクタの比較に基づいて共通ブロックスケールファクタを選択し、共通スケールファクタと各データグループのグループスケールファクタの差分に基づいてデータグループのデータをスケーリングし、スケーリングを施したデータに対して加算または減算を行うような命令コードを生成する処理をコンピュータに実行させるためのプログラムである。
このような構成であれば、コンピュータによってプログラムが読み取られ、読み取られたプログラムに従ってコンピュータが処理を実行すると、請求の範囲第１５項記載のコンパイル装置と同等の作用が得られる。
さらに、本発明に係る請求の範囲第５３項記載のコンパイルプログラムは、ブロック浮動小数点型変数を扱うコンパイルプログラムであって、乗累算のうち、乗算の対象となるブロックフローティング変数に対して演算を行い、その乗算結果を累算することで乗累算を行い、その演算結果を演算結果データブロックとして算出するとともに、ブロックスケールファクタに基づいて演算結果ブロックスケールファクタを算出する処理をコンピュータに実行させるためのプログラムである。
このような構成であれば、コンピュータによってプログラムが読み取られ、読み取られたプログラムに従ってコンピュータが処理を実行すると、請求の範囲第１６項記載のコンパイル装置と同等の作用が得られる。
さらに、本発明に係る請求の範囲第５４項記載のコンパイルプログラムは、ブロック浮動小数点型変数と固定小数点型変数を扱うコンパイルプログラムであって、乗累算のうち、乗算の対象となるブロックフローティング変数と固定小数点変数に対して演算を行い、その乗算結果を累算することで乗累算を行い、その演算結果を演算結果データブロックとして算出するとともに、ブロックスケールファクタに基づいて演算結果ブロックスケールファクタを算出する処理をコンピュータに実行させるためのプログラムである。
このような構成であれば、コンピュータによってプログラムが読み取られ、読み取られたプログラムに従ってコンピュータが処理を実行すると、請求の範囲第１７項記載のコンパイル装置と同等の作用が得られる。
さらに、本発明に係る請求の範囲第５５項記載のコンパイルプログラムは、階層的ブロック浮動小数点型変数を扱うコンパイルプログラムであって、乗累算のうち、乗算の対象となる階層的ブロックフローティング変数に対してグループスケールファクタとブロックスケールファクタの差分からなるスケールファクタによりデータのスケーリングを行い、スケーリングを行ったデータに対して演算を行い、その乗算結果を累算することで乗累算を行い、その演算結果を演算結果データブロックとして算出するとともに、ブロックスケールファクタに基づいて演算結果ブロックスケールファクタを算出する処理をコンピュータに実行させるためのプログラムである。
このような構成であれば、コンピュータによってプログラムが読み取られ、読み取られたプログラムに従ってコンピュータが処理を実行すると、請求の範囲第１８項記載のコンパイル装置と同等の作用が得られる。
さらに、本発明に係る請求の範囲第５６項記載のコンパイルプログラムは、データ型としてブロックフローティング型のブロックフローティング変数を用いて演算式を記述したソースプログラムが与えられたときに、与えられたソースプログラムをオブジェクトプログラムに翻訳するプログラムであって、前記ブロックフローティング変数は、１または複数のデータを含んでデータブロックを構成し、前記データブロックは、前記データブロックのブロックスケールファクタを含むデータ構造を表す変数であり、前記ソースプログラムのなかから前記演算式を検出する演算式検出手段、前記演算式検出手段で検出した演算式を所定の命令コードとして展開する演算式展開手段、および前記演算式展開手段で展開した命令コードを前記オブジェクトプログラムに変換するオブジェクトコード変換手段として実現される処理をコンピュータに実行させるためのプログラムである。
このような構成であれば、コンピュータによってプログラムが読み取られ、読み取られたプログラムに従ってコンピュータが処理を実行すると、請求の範囲第１９項記載のコンパイル装置と同等の作用が得られる。
さらに、本発明に係る請求の範囲第５７項記載のコンパイルプログラムは、請求の範囲第５６項記載のコンパイルプログラムにおいて、前記演算式検出手段は、前記演算式の演算子およびその演算子の入力オペランドのデータ型と演算子の出力オペランドのデータ型とを演算式検出結果として検出し、前記演算式展開手段は、前記演算式検出手段で検出される前記演算式検出結果のうち演算子および演算子の入力オペランドのデータ型の情報に基づき、入力オペランドがブロックフローティング型のデータを含む場合には、入力データブロックのブロックスケールファクタから演算用ブロックスケールファクタを算出する処理を構成する命令コードとして展開し、入力オペランドがブロックフローティング型のデータの場合には、ブロックフローティング型のデータを演算器に入力する処理については、前記演算用ブロックスケールファクタおよび入力オペランドのブロックスケールファクタの一方または両方に基づくシフト処理を行う演算器へのデータ入力処理を構成する命令コードとして展開するようになっている。
このような構成であれば、コンピュータによってプログラムが読み取られ、読み取られたプログラムに従ってコンピュータが処理を実行すると、請求の範囲第２０項記載のコンパイル装置と同等の作用が得られる。
さらに、本発明に係る請求の範囲第５８項記載のコンパイルプログラムは、請求の範囲第５７項記載のコンパイルプログラムにおいて、前記演算式展開手段は、演算器に入力されたブロックフローティング型のデータについては、前記演算子に基づく演算処理を構成する命令コードとして展開し、出力オペランドがブロックフローティング型のデータの場合には、入力データブロックのブロックスケールファクタから中間結果ブロックスケールファクタを算出し、出力オペランドに対応する演算結果の正規化を行い、前記中間結果ブロックスケールファクタからブロックスケールファクタを算出するデータ出力処理を構成する命令コードとして展開するようになっている。
このような構成であれば、コンピュータによってプログラムが読み取られ、読み取られたプログラムに従ってコンピュータが処理を実行すると、請求の範囲第２１項記載のコンパイル装置と同等の作用が得られる。
さらに、本発明に係る請求の範囲第５９項記載のコンパイルプログラムは、データ型としてブロックフローティング型のブロックフローティング変数を用いて演算式を記述したソースプログラムが与えられたときに、与えられたソースプログラムをオブジェクトプログラムに翻訳するプログラムであって、前記ブロックフローティング変数は、１または複数のデータと１個のグループスケールファクタを含んでデータグループを構成し、さらに１または複数のデータグループを含んでデータブロックを構成し、前記データブロックは、前記データブロックのブロックスケールファクタを含むデータ構造を表す変数であり、前記ソースプログラムのなかから前記演算式を検出する演算式検出手段、前記演算式検出手段で検出した演算式を所定の命令コードとして展開する演算式展開手段、および前記演算式展開手段で展開した命令コードを前記オブジェクトプログラムに変換するオブジェクトコード変換手段として実現される処理をコンピュータに実行させるためのプログラムである。
このような構成であれば、コンピュータによってプログラムが読み取られ、読み取られたプログラムに従ってコンピュータが処理を実行すると、請求の範囲第２２項記載のコンパイル装置と同等の作用が得られる。
さらに、本発明に係る請求の範囲第６０項記載のコンパイルプログラムは、請求の範囲第５９項記載のコンパイルプログラムにおいて、前記演算式検出手段は、前記演算式の演算子およびその演算子の入力オペランドのデータ型と演算子の出力オペランドのデータ型とを演算式検出結果として検出し、前記演算式展開手段は、前記演算式検出手段で検出される前記演算式検出結果のうち演算子および演算子の入力オペランドのデータ型の情報に基づき、入力オペランドがブロックフローティング型のデータを含む場合には、入力データブロックのブロックスケールファクタから演算用ブロックスケールファクタを算出する処理を構成する命令コードとして展開し、入力オペランドがブロックフローティング型のデータの場合には、ブロックフローティング型のデータを演算器に入力する処理については、前記演算用ブロックスケールファクタおよび入力オペランドのブロックスケールファクタの一方または両方、並びにグループスケールファクタに基づくシフト処理を行う演算器へのデータ入力処理を構成する命令コードとして展開するようになっている。
このような構成であれば、コンピュータによってプログラムが読み取られ、読み取られたプログラムに従ってコンピュータが処理を実行すると、請求の範囲第２３項記載のコンパイル装置と同等の作用が得られる。
さらに、本発明に係る請求の範囲第６１項記載のコンパイルプログラムは、請求の範囲第６０項記載のコンパイルプログラムにおいて、前記演算式展開手段は、演算器に入力されたブロックフローティング型のデータについては、前記演算子に基づく演算処理を構成する命令コードとして展開し、出力オペランドがブロックフローティング型のデータの場合には、入力データブロックのブロックスケールファクタから中間結果ブロックスケールファクタを算出し、出力オペランドに対応する演算結果のグループ正規化を行い、そのグループ正規化によって算出される更新グループスケールファクタおよび前記中間結果ブロックスケールファクタの一方または両方から算出される最終グループスケールファクタを算出し、その算出されたグループスケールファクタからブロックスケールファクタを算出するデータ出力処理を構成する命令コードとして展開するようになっている。
このような構成であれば、コンピュータによってプログラムが読み取られ、読み取られたプログラムに従ってコンピュータが処理を実行すると、請求の範囲第２４項記載のコンパイル装置と同等の作用が得られる。
さらに、本発明に係る請求の範囲第６２項記載のコンパイルプログラムは、ブロックフローティング変数を用いて演算式を記述したソースプログラムが与えられたときに、与えられたソースプログラムを翻訳してオブジェクトプログラムを生成するプログラムであって、前記ブロックフローティング変数は、１または複数のデータを含んでデータブロックを構成し、前記データブロックは、前記データブロックのブロックスケールファクタを含むデータ構造を表す変数であり、前記ソースプログラムのなかから乗算または除算を行う前記演算式を検出する演算式検出手段、前記演算式検出手段で検出した演算式を所定の命令コードとして展開する演算式展開手段、および前記演算式展開手段で展開した命令コードを前記オブジェクトプログラムに埋め込む命令コード埋込手段として実現される処理をコンピュータに実行させるためのプログラムであり、前記演算式展開手段は、前記演算式検出手段で検出した演算式のうち乗算または除算に係る部分について、乗算または除算の対象となる前記ブロックフローティング変数に対応するデータブロックを用いた乗算または除算を行う処理を構成する命令コードとして展開するようになっており、前記命令コードにより構成される処理は、前記データブロックのデータに対して乗算または除算を行い、その演算結果を演算結果データブロックとして算出するとともに、前記データブロックのブロックスケールファクタに基づいて前記演算結果データブロックのブロックスケールファクタを算出するようになっている。
このような構成であれば、コンピュータによってプログラムが読み取られ、読み取られたプログラムに従ってコンピュータが処理を実行すると、請求の範囲第２５項記載のコンパイル装置と同等の作用が得られる。
さらに、本発明に係る請求の範囲第６３項記載のコンパイルプログラムは、ブロックフローティング変数および固定小数点変数を用いて演算式を記述したソースプログラムが与えられたときに、与えられたソースプログラムを翻訳してオブジェクトプログラムを生成するプログラムであって、前記ブロックフローティング変数は、１または複数のデータを含んでデータブロックを構成し、前記データブロックは、前記データブロックのブロックスケールファクタを含むデータ構造を表す変数であり、前記固定小数点変数は、１または複数のデータを含んでデータブロックを構成するデータ構造を表す変数であり、前記ソースプログラムのなかから乗算または除算を行う前記演算式を検出する演算式検出手段、前記演算式検出手段で検出した演算式を所定の命令コードとして展開する演算式展開手段、および前記演算式展開手段で展開した命令コードを前記オブジェクトプログラムに埋め込む命令コード埋込手段として実現される処理をコンピュータに実行させるためのプログラムであり、前記演算式展開手段は、前記演算式検出手段で検出した演算式のうち乗算または除算に係る部分について、乗算または除算の対象となる前記ブロックフローティング変数および前記固定小数点変数に対応するデータブロックを用いた乗算または除算を行う処理を構成する命令コードとして展開するようになっており、前記命令コードにより構成される処理は、前記ブロックフローティング変数に対応するデータブロックのデータと前記固定小数点変数に対応するデータブロックのデータとを乗算しまたは除算し、その演算結果を演算結果データブロックとして算出するとともに、前記ブロックフローティング変数に対応するデータブロックのブロックスケールファクタに基づいて前記演算結果データブロックのブロックスケールファクタを算出するようになっている。
このような構成であれば、コンピュータによってプログラムが読み取られ、読み取られたプログラムに従ってコンピュータが処理を実行すると、請求の範囲第２６項記載のコンパイル装置と同等の作用が得られる。
さらに、本発明に係る請求の範囲第６４項記載のコンパイルプログラムは、ブロックフローティング変数を用いて演算式を記述したソースプログラムが与えられたときに、与えられたソースプログラムを翻訳してオブジェクトプログラムを生成するプログラムであって、前記ブロックフローティング変数は、１または複数のデータを含んでデータグループを構成し、さらに複数のデータグループを含んでデータブロックを構成し、前記データブロックは、前記各データグループのグループスケールファクタおよび前記データブロックのブロックスケールファクタを含むデータ構造を表す変数であり、前記ソースプログラムのなかから乗算または除算を行う前記演算式を検出する演算式検出手段、前記演算式検出手段で検出した演算式を所定の命令コードとして展開する演算式展開手段、および前記演算式展開手段で展開した命令コードを前記オブジェクトプログラムに埋め込む命令コード埋込手段として実現される処理をコンピュータに実行させるためのプログラムであり、前記演算式展開手段は、前記演算式検出手段で検出した演算式のうち乗算または除算に係る部分について、乗算または除算の対象となる前記ブロックフローティング変数に対応するデータブロックを用いた乗算または除算を行う処理を構成する命令コードとして展開するようになっており、前記命令コードにより構成される処理は、前記データブロックの各データグループごとに、当該データグループのデータに対して乗算または除算を行い、それら演算結果を演算結果データブロックとして算出するとともに、前記データブロックのブロックスケールファクタに基づいて前記演算結果データブロックのブロックスケールファクタを算出するようになっている。
このような構成であれば、コンピュータによってプログラムが読み取られ、読み取られたプログラムに従ってコンピュータが処理を実行すると、請求の範囲第２７項記載のコンパイル装置と同等の作用が得られる。
さらに、本発明に係る請求の範囲第６５項記載のコンパイルプログラムは、ブロックフローティング変数を用いて演算式を記述したソースプログラムが与えられたときに、与えられたソースプログラムを翻訳してオブジェクトプログラムを生成するプログラムであって、前記ブロックフローティング変数は、１または複数のデータを含んでデータブロックを構成し、前記データブロックは、前記データブロックのブロックスケールファクタを含むデータ構造を表す変数であり、前記ソースプログラムのなかから加算または減算を行う前記演算式を検出する演算式検出手段、前記演算式検出手段で検出した演算式を所定の命令コードとして展開する演算式展開手段、および前記演算式展開手段で展開した命令コードを前記オブジェクトプログラムに埋め込む命令コード埋込手段として実現される処理をコンピュータに実行させるためのプログラムであり、前記演算式展開手段は、前記演算式検出手段で検出した演算式のうち加算または減算に係る部分について、加算または減算の対象となる前記ブロックフローティング変数に対応するデータブロックを用いた加算または減算を行う処理を構成する命令コードとして展開するようになっており、前記命令コードにより構成される処理は、前記データブロックのブロックスケールファクタのうち絶対値が最大のデータを含むデータブロックのものを共通ブロックスケールファクタとして選択し、前記共通ブロックスケールファクタに基づいて前記データブロックの各データに対してスケーリングを行い、スケーリングを行った各データブロックのデータに対して加算または減算を行うようになっている。
このような構成であれば、コンピュータによってプログラムが読み取られ、読み取られたプログラムに従ってコンピュータが処理を実行すると、請求の範囲第２８項記載のコンパイル装置と同等の作用が得られる。
さらに、本発明に係る請求の範囲第６６項記載のコンパイルプログラムは、ブロックフローティング変数および固定小数点変数を用いて演算式を記述したソースプログラムが与えられたときに、与えられたソースプログラムを翻訳してオブジェクトプログラムを生成するプログラムであって、前記ブロックフローティング変数は、１または複数のデータを含んでデータブロックを構成し、前記データブロックは、前記データブロックのブロックスケールファクタを含むデータ構造を表す変数であり、前記固定小数点変数は、１または複数のデータを含んでデータブロックを構成するデータ構造を表す変数であり、前記ソースプログラムのなかから加算または減算を行う前記演算式を検出する演算式検出手段、前記演算式検出手段で検出した演算式を所定の命令コードとして展開する演算式展開手段、および前記演算式展開手段で展開した命令コードを前記オブジェクトプログラムに埋め込む命令コード埋込手段として実現される処理をコンピュータに実行させるためのプログラムであり、前記演算式展開手段は、前記演算式検出手段で検出した演算式のうち加算または減算に係る部分について、加算または減算の対象となる前記ブロックフローティング変数および前記固定小数点変数に対応するデータブロックを用いた加算または減算を行う処理を構成する命令コードとして展開するようになっており、前記命令コードにより構成される処理は、固定小数点データブロックについてはある定数として与えられる仮想ブロックスケールファクタを算出し、前記ブロックフローティング変数に対応するデータブロックのブロックスケールファクタおよび前記仮想ブロックスケールファクタのうち、絶対値が最大のデータを含むデータブロックのものを共通ブロックスケールファクタとして選択し、前記共通ブロックスケールファクタに基づいて当該データブロックの各データに対してスケーリングを行い、スケーリングを行った各データブロックのデータと前記固定小数点変数に対応するデータブロックのデータとを加算しまたは減算するようになっている。
このような構成であれば、コンピュータによってプログラムが読み取られ、読み取られたプログラムに従ってコンピュータが処理を実行すると、請求の範囲第２９項記載のコンパイル装置と同等の作用が得られる。
さらに、本発明に係る請求の範囲第６７項記載のコンパイルプログラムは、ブロックフローティング変数を用いて演算式を記述したソースプログラムが与えられたときに、与えられたソースプログラムを翻訳してオブジェクトプログラムを生成するプログラムであって、前記ブロックフローティング変数は、１または複数のデータを含んでデータグループを構成し、さらに複数のデータグループを含んでデータブロックを構成し、前記データブロックは、前記各データグループのグループスケールファクタおよび前記データブロックのブロックスケールファクタを含むデータ構造を表す変数であり、前記ソースプログラムのなかから加算または減算を行う前記演算式を検出する演算式検出手段、前記演算式検出手段で検出した演算式を所定の命令コードとして展開する演算式展開手段、および前記演算式展開手段で展開した命令コードを前記オブジェクトプログラムに埋め込む命令コード埋込手段として実現される処理をコンピュータに実行させるためのプログラムであり、前記演算式展開手段は、前記演算式検出手段で検出した演算式のうち加算または減算に係る部分について、加算または減算の対象となる前記ブロックフローティング変数に対応するデータブロックを用いた加算または減算を行う処理を構成する命令コードとして展開するようになっており、前記命令コードにより構成される処理は、前記データブロックのブロックスケールファクタのうち絶対値が最大のデータを含むデータブロックのものを共通ブロックスケールファクタとして選択し、前記データブロックの各データグループごとに、当該データグループのグループスケールファクタと前記共通ブロックスケールファクタとの差分からなるスケールファクタに基づいて、当該データグループの各データに対してスケーリングを行い、スケーリングを行った各データブロックのデータに対して加算または減算を行うようになっている。
このような構成であれば、コンピュータによってプログラムが読み取られ、読み取られたプログラムに従ってコンピュータが処理を実行すると、請求の範囲第３０項記載のコンパイル装置と同等の作用が得られる。
さらに、本発明に係る請求の範囲第６８項記載のコンパイルプログラムは、ブロックフローティング変数を用いて演算式を記述したソースプログラムが与えられたときに、与えられたソースプログラムを翻訳してオブジェクトプログラムを生成するプログラムであって、前記ブロックフローティング変数は、１または複数のデータを含んでデータブロックを構成し、前記データブロックは、前記データブロックのブロックスケールファクタを含むデータ構造を表す変数であり、前記ソースプログラムのなかから乗累算を行う前記演算式を検出する演算式検出手段、前記演算式検出手段で検出した演算式を所定の命令コードとして展開する演算式展開手段、および前記演算式展開手段で展開した命令コードを前記オブジェクトプログラムに埋め込む命令コード埋込手段として実現される処理をコンピュータに実行させるためのプログラムであり、前記演算式展開手段は、前記演算式検出手段で検出した演算式のうち乗累算に係る部分について、乗算の対象となる２つの前記ブロックフローティング変数に対応する第１データブロックおよび第２データブロック、並びに加算または減算の対象となる前記ブロックフローティング変数に対応する第３データブロックを用いた乗累算を行う処理を構成する命令コードとして展開するようになっており、前記命令コードにより構成される処理は、与えられたスケールファクタに基づいて前記第１データブロックの各データに対してスケーリングを行う第１スケーリング処理と、与えられたスケールファクタに基づいて前記第３データブロックの各データに対してスケーリングを行う第２スケーリング処理と、前記第２データブロックおよび前記第１スケーリング処理からの第１データブロックを用いた乗算を行う乗算処理と、前記乗算処理からの乗算結果データブロックおよび前記第２スケーリング処理からの第３データブロックを用いた加算または減算を行う演算処理とを備え、さらに、前記第１データブロックおよび前記第２データブロックのブロックスケールファクタの和である乗算結果ブロックスケールファクタと、前記第３データブロックのブロックスケールファクタとの差分からなる補正ブロックスケールファクタを算出し、前記補正ブロックスケールファクタを前記第１スケーリング処理に与え、前記第１データブロックのデータを前記第１スケーリング処理に入力し、かつ、前記第２スケーリング処理にスケールファクタを与えず、前記第３データブロックのデータを前記第２スケーリング処理に入力するようになっている。
このような構成であれば、コンピュータによってプログラムが読み取られ、読み取られたプログラムに従ってコンピュータが処理を実行すると、請求の範囲第３１項記載のコンパイル装置と同等の作用が得られる。
さらに、本発明に係る請求の範囲第６９項記載のコンパイルプログラムは、請求の範囲第６８項記載のコンパイルプログラムにおいて、前記命令コードにより構成される処理は、前記補正ブロックスケールファクタを前記第１スケーリング処理に与え、前記第１データブロックのデータを前記第１スケーリング処理に入力し、かつ、前記第２スケーリング処理にスケールファクタを与えず、前記第３データブロックのデータを前記第２スケーリング処理に入力する第１スケール補正処理と、前記補正ブロックスケールファクタを前記第２スケーリング処理に与え、前記第３データブロックのデータを前記第２スケーリング処理に入力し、かつ、前記第１スケーリング処理にスケールファクタを与えず、前記第１データブロックのデータを前記第１スケーリング処理に入力する第２スケール補正処理とのうちいずれかを行うようになっている。
このような構成であれば、コンピュータによってプログラムが読み取られ、読み取られたプログラムに従ってコンピュータが処理を実行すると、請求の範囲第３２項記載のコンパイル装置と同等の作用が得られる。
さらに、本発明に係る請求の範囲第７０項記載のコンパイルプログラムは、請求の範囲第６８項記載のコンパイルプログラムにおいて、前記命令コードにより構成される処理は、前記乗算結果ブロックスケールファクタおよび前記第３データブロックのブロックスケールファクタの大小関係に基づいて、前記第１スケール補正処理および前記第２スケール補正処理のいずれかを選択的に行うようになっている。
このような構成であれば、コンピュータによってプログラムが読み取られ、読み取られたプログラムに従ってコンピュータが処理を実行すると、請求の範囲第３３項記載のコンパイル装置と同等の作用が得られる。
さらに、本発明に係る請求の範囲第７１項記載のコンパイルプログラムは、請求の範囲第７０項記載のコンパイルプログラムにおいて、前記第１スケーリング処理は、与えられたスケールファクタに相当するシフト量で、入力したデータに対して下位ビットの方向へビットシフトを行うようになっており、前記第２スケーリング処理は、与えられたスケールファクタに相当するシフト量で、入力したデータに対して下位ビットの方向へビットシフトを行うようになっており、前記命令コードにより構成される処理は、前記第３データブロックのブロックスケールファクタが前記乗算結果ブロックスケールファクタよりも大きいときは、前記第１スケール補正処理を行い、前記乗算結果ブロックスケールファクタが前記第３データブロックのブロックスケールファクタよりも大きいときは、前記第２スケール補正処理を行うようになっている。
このような構成であれば、コンピュータによってプログラムが読み取られ、読み取られたプログラムに従ってコンピュータが処理を実行すると、請求の範囲第３４項記載のコンパイル装置と同等の作用が得られる。
さらに、本発明に係る請求の範囲第７２項記載のコンパイルプログラムは、請求の範囲第７０項記載のコンパイルプログラムにおいて、前記第１スケーリング処理は、与えられたスケールファクタに相当するシフト量で、入力したデータに対して上位ビットの方向へビットシフトを行うようになっており、前記第２スケーリング処理は、与えられたスケールファクタに相当するシフト量で、入力したデータに対して上位ビットの方向へビットシフトを行うようになっており、前記命令コードにより構成される処理は、前記第３データブロックのブロックスケールファクタが前記乗算結果ブロックスケールファクタよりも大きいときは、前記第２スケール補正処理を行い、前記乗算結果ブロックスケールファクタが前記第３データブロックのブロックスケールファクタよりも大きいときは、前記第１スケール補正処理を行うようになっている。
このような構成であれば、コンピュータによってプログラムが読み取られ、読み取られたプログラムに従ってコンピュータが処理を実行すると、請求の範囲第３５項記載のコンパイル装置と同等の作用が得られる。
さらに、本発明に係る請求の範囲第７３項記載のコンパイルプログラムは、ブロックフローティング変数を用いて演算式を記述したソースプログラムが与えられたときに、与えられたソースプログラムを翻訳してオブジェクトプログラムを生成するプログラムであって、前記ブロックフローティング変数は、１または複数のデータを含んでデータグループを構成し、さらに複数のデータグループを含んでデータブロックを構成し、前記データブロックは、前記各データグループのグループスケールファクタおよび前記データブロックのブロックスケールファクタを含むデータ構造を表す変数であり、前記ソースプログラムのなかから乗累算を行う前記演算式を検出する演算式検出手段、前記演算式検出手段で検出した演算式を所定の命令コードとして展開する演算式展開手段、および前記演算式展開手段で展開した命令コードを前記オブジェクトプログラムに埋め込む命令コード埋込手段として実現される処理をコンピュータに実行させるためのプログラムであり、前記演算式展開手段は、前記演算式検出手段で検出した演算式のうち乗累算に係る部分について、乗算の対象となる２つの前記ブロックフローティング変数に対応する第１データブロックおよび第２データブロック、並びに加算または減算の対象となる前記ブロックフローティング変数に対応する第３データブロックを用いた乗累算を行う処理を構成する命令コードとして展開するようになっており、前記命令コードにより構成される処理は、与えられたスケールファクタに基づいて前記第１データブロックの各データに対してスケーリングを行う第１スケーリング処理と、与えられたスケールファクタに基づいて前記第３データブロックの各データに対してスケーリングを行う第２スケーリング処理と、前記第２データブロックおよび前記第１スケーリング処理からの第１データブロックを用いた乗算を行う乗算処理と、前記乗算処理からの乗算結果データブロックおよび前記第２スケーリング処理からの第３データブロックを用いた加算または減算を行う演算処理とを備え、前記第１データブロックおよび前記第２データブロックのブロックスケールファクタの和である乗算結果ブロックスケールファクタと、前記第３データブロックのブロックスケールファクタとの差分からなる補正ブロックスケールファクタを算出し、前記第１データブロックの各データグループごとに、当該データグループのグループスケールファクタと前記第１データブロックのブロックスケールファクタとの差分からなるスケールファクタに前記補正ブロックスケールファクタを加算したものを前記第１スケーリング処理に与え、当該データグループのデータを前記第１スケーリング処理に入力し、かつ、前記第３データブロックの各データグループごとに、当該データグループのグループスケールファクタと前記第３データブロックのブロックスケールファクタとの差分からなるスケールファクタを前記第２スケーリング処理に与え、当該データグループのデータを前記第２スケーリング処理に入力するようになっている。
このような構成であれば、コンピュータによってプログラムが読み取られ、読み取られたプログラムに従ってコンピュータが処理を実行すると、請求の範囲第３６項記載のコンパイル装置と同等の作用が得られる。
さらに、本発明に係る請求の範囲第７４項記載のコンパイルプログラムは、請求の範囲第７３項記載のコンパイルプログラムにおいて、前記命令コードにより構成される処理は、前記第１データブロックの各データグループごとに、当該データグループのグループスケールファクタと前記第１データブロックのブロックスケールファクタとの差分からなるスケールファクタに前記補正ブロックスケールファクタを加算したものを前記第１スケーリング処理に与え、当該データグループのデータを前記第１スケーリング処理に入力し、かつ、前記第３データブロックの各データグループごとに、当該データグループのグループスケールファクタと前記第３データブロックのブロックスケールファクタとの差分からなるスケールファクタを前記第２スケーリング処理に与え、当該データグループのデータを前記第２スケーリング処理に入力する第１スケール補正処理と、前記第３データブロックの各データグループごとに、当該データグループのグループスケールファクタと前記第３データブロックのブロックスケールファクタとの差分からなるスケールファクタに前記補正ブロックスケールファクタを加算したものを前記第２スケーリング処理に与え、当該データグループのデータを前記第２スケーリング処理に入力し、かつ、前記第１データブロックの各データグループごとに、当該データグループのグループスケールファクタと前記第１データブロックのブロックスケールファクタとの差分からなるスケールファクタを前記第１スケーリング処理に与え、当該データグループのデータを前記第１スケーリング処理に入力する第２スケール補正処理とのうちいずれかを行うようになっている。
このような構成であれば、コンピュータによってプログラムが読み取られ、読み取られたプログラムに従ってコンピュータが処理を実行すると、請求の範囲第３７項記載のコンパイル装置と同等の作用が得られる。
一方、上記目的を達成するために、本発明に係る請求の範囲第７５項記載のオブジェクトプログラム生成方法は、ブロック浮動小数点型変数を扱う。
さらに、本発明に係る請求の範囲第７６項記載のオブジェクトプログラム生成方法は、請求の範囲第７５項記載のオブジェクトプログラム生成方法において、演算式と演算式のオペランドの情報から演算用ブロックスケールファクタを算出し、ブロック浮動小数点型変数については、演算用ブロックスケールファクタ、ブロックスケールファクタに基づくシフト処理を行って演算器へデータ入力するような命令コードを生成する。
さらに、本発明に係る請求の範囲第７７項記載のオブジェクトプログラム生成方法は、請求の範囲第７６項記載のオブジェクトプログラム生成方法において、演算式と演算式のオペランドの情報から中間結果スケールファクタを算出し、ブロック浮動小数点型の出力変数については、演算結果の正規化を行い、その正規化によって更新される更新グループスケールファクタおよび中間結果スケールファクタに基づくブロックスケールファクタを算出するような命令コードを生成する。
さらに、本発明に係る請求の範囲第７８項記載のオブジェクトプログラム生成方法は、階層的ブロック浮動小数点型変数を扱う。
さらに、本発明に係る請求の範囲第７９項記載のオブジェクトプログラム生成方法は、請求の範囲第７８項記載のオブジェクトプログラム生成方法において、演算式と演算式のオペランドの情報から演算用ブロックスケールファクタを算出し、階層的ブロック浮動小数点型変数については、演算用ブロックスケールファクタ、ブロックスケールファクタ、およびグループスケールファクタに基づくシフト処理を行って演算器へデータ入力するような命令コードを生成する。
さらに、本発明に係る請求の範囲第８０項記載のオブジェクトプログラム生成方法は、請求の範囲第７９項記載のオブジェクトプログラム生成方法において、演算式と演算式のオペランドの情報から中間結果スケールファクタを算出し、階層的ブロック浮動小数点型の出力変数については、演算結果のグループ正規化を行い、そのグループ正規化によって更新される更新グループスケールファクタおよび中間結果スケールファクタに基づく最終グループスケールファクタを算出し、算出されたグループスケールファクタからブロックスケールファクタを算出するような命令コードを生成する。
さらに、本発明に係る請求の範囲第８１項記載のオブジェクトプログラム生成方法は、ブロック浮動小数点型変数を扱うオブジェクトプログラム生成方法であって、乗算または除算について、ブロック浮動小数点型変数のブロックスケールファクタに基づいて乗算結果のブロックスケールファクタを算出するような命令コードを生成する。
さらに、本発明に係る請求の範囲第８２項記載のオブジェクトプログラム生成方法は、ブロック浮動小数点型変数と固定小数点型変数を扱うオブジェクトプログラム生成方法であって、乗算または除算について、ブロック浮動小数点型変数のブロックスケールファクタに基づいて乗算結果のブロックスケールファクタを算出するような命令コードを生成する。
さらに、本発明に係る請求の範囲第８３項記載のオブジェクトプログラム生成方法は、階層的ブロック浮動小数点型変数を扱うオブジェクトプログラム生成方法であって、乗算または除算について、階層的ブロック浮動小数点型変数のブロックスケールファクタに基づいて演算結果のブロックスケールファクタを算出するような命令コードを生成する。
さらに、本発明に係る請求の範囲第８４項記載のオブジェクトプログラム生成方法は、ブロック浮動小数点型変数を扱うオブジェクトプログラム生成方法であって、加算または減算について、ブロック浮動小数点型変数のブロックスケールファクタの比較に基づいて共通ブロックスケールファクタを選択し、共通スケールファクタに基づいてデータブロックのデータをスケーリングし、スケーリングを施したデータに対して加算または減算を行うような命令コードを生成する。
さらに、本発明に係る請求の範囲第８５項記載のオブジェクトプログラム生成方法は、ブロック浮動小数点型変数と固定小数点型変数を扱うオブジェクトプログラム生成方法であって、加算または減算について、ブロック浮動小数点型変数のブロックスケールファクタとある定数で与えられる固定小数点変数の仮想ブロックスケールファクタとの比較に基づいて共通ブロックスケールファクタを選択し、共通スケールファクタに基づいてデータブロックのデータをスケーリングし、スケーリングを施したデータに対して加算または減算を行うような命令コードを生成する。
さらに、本発明に係る請求の範囲第８６項記載のオブジェクトプログラム生成方法は、階層的ブロック浮動小数点型変数を扱うオブジェクトプログラム生成方法であって、加算または減算について、階層的ブロック浮動小数点型変数のブロックスケールファクタの比較に基づいて共通ブロックスケールファクタを選択し、共通スケールファクタと各データグループのグループスケールファクタの差分に基づいてデータグループのデータをスケーリングし、スケーリングを施したデータに対して加算または減算を行うような命令コードを生成する。
さらに、本発明に係る請求の範囲第８７項記載のオブジェクトプログラム生成方法は、ブロック浮動小数点型変数を扱うオブジェクトプログラム生成方法であって、加算または減算について、ブロック浮動小数点型変数のブロックスケールファクタの比較に基づいて共通ブロックスケールファクタを選択し、共通スケールファクタに基づいてデータブロックのデータをスケーリングし、スケーリングを施したデータに対して加算または減算を行うような命令コードを生成する。
さらに、本発明に係る請求の範囲第８８項記載のオブジェクトプログラム生成方法は、ブロック浮動小数点型変数と固定小数点型変数を扱うオブジェクトプログラム生成方法であって、加算または減算について、ブロック浮動小数点型変数のブロックスケールファクタの比較に基づいて共通ブロックスケールファクタを選択し、共通スケールファクタに基づいてデータブロックのデータをスケーリングし、スケーリングを施したデータに対して加算または減算を行うような命令コードを生成する。
さらに、本発明に係る請求の範囲第８９項記載のオブジェクトプログラム生成方法は、階層的ブロック浮動小数点型変数を扱うオブジェクトプログラム生成方法であって、加算または減算について、階層的ブロック浮動小数点型変数のブロックスケールファクタの比較に基づいて共通ブロックスケールファクタを選択し、共通スケールファクタと各データグループのグループスケールファクタの差分に基づいてデータグループのデータをスケーリングし、スケーリングを施したデータに対して加算または減算を行うような命令コードを生成する。
さらに、本発明に係る請求の範囲第９０項記載のオブジェクトプログラム生成方法は、ブロック浮動小数点型変数を扱うオブジェクトプログラム生成方法であって、乗累算のうち、乗算の対象となるブロックフローティング変数に対して演算を行い、その乗算結果を累算することで乗累算を行い、その演算結果を演算結果データブロックとして算出するとともに、ブロックスケールファクタに基づいて演算結果ブロックスケールファクタを算出する。
さらに、本発明に係る請求の範囲第９１項記載のオブジェクトプログラム生成方法は、ブロック浮動小数点型変数と固定小数点型変数を扱うオブジェクトプログラム生成方法であって、乗累算のうち、乗算の対象となるブロックフローティング変数と固定小数点変数に対して演算を行い、その乗算結果を累算することで乗累算を行い、その演算結果を演算結果データブロックとして算出するとともに、ブロックスケールファクタに基づいて演算結果ブロックスケールファクタを算出する。
さらに、本発明に係る請求の範囲第９２項記載のオブジェクトプログラム生成方法は、階層的ブロック浮動小数点型変数を扱うオブジェクトプログラム生成方法であって、乗累算のうち、乗算の対象となる階層的ブロックフローティング変数に対してグループスケールファクタとブロックスケールファクタの差分からなるスケールファクタによりデータのスケーリングを行い、スケーリングを行ったデータに対して演算を行い、その乗算結果を累算することで乗累算を行い、その演算結果を演算結果データブロックとして算出するとともに、ブロックスケールファクタに基づいて演算結果ブロックスケールファクタを算出する。
さらに、本発明に係る請求の範囲第９３項記載のオブジェクトプログラム生成方法は、データ型としてブロックフローティング型のブロックフローティング変数を用いて演算式を記述したソースプログラムが与えられたときに、与えられたソースプログラムをオブジェクトプログラムに翻訳する方法であって、前記ブロックフローティング変数は、１または複数のデータを含んでデータブロックを構成し、前記データブロックは、前記データブロックのブロックスケールファクタを含むデータ構造を表す変数であり、前記ソースプログラムのなかから前記演算式を検出する演算式検出ステップと、前記演算式検出ステップで検出した演算式を所定の命令コードとして展開する演算式展開ステップと、前記演算式展開ステップで展開した命令コードを前記オブジェクトプログラムに変換するオブジェクトコード変換ステップとを含む。
さらに、本発明に係る請求の範囲第９４項記載のオブジェクトプログラム生成方法は、請求の範囲第９３項記載のオブジェクトプログラム生成方法において、前記演算式検出ステップは、前記演算式の演算子およびその演算子の入力オペランドのデータ型と演算子の出力オペランドのデータ型とを演算式検出結果として検出し、前記演算式展開ステップは、前記演算式検出ステップで検出される前記演算式検出結果のうち演算子および演算子の入力オペランドのデータ型の情報に基づき、入力オペランドがブロックフローティング型のデータを含む場合には、入力データブロックのブロックスケールファクタから演算用ブロックスケールファクタを算出する処理を構成する命令コードとして展開し、入力オペランドがブロックフローティング型のデータの場合には、ブロックフローティング型のデータを演算器に入力する処理については、前記演算用ブロックスケールファクタおよび入力オペランドのブロックスケールファクタの一方または両方に基づくシフト処理を行う演算器へのデータ入力処理を構成する命令コードとして展開する。
さらに、本発明に係る請求の範囲第９５項記載のオブジェクトプログラム生成方法は、請求の範囲第９４項記載のオブジェクトプログラム生成方法において、前記演算式展開ステップは、演算器に入力されたブロックフローティング型のデータについては、前記演算子に基づく演算処理を構成する命令コードとして展開し、出力オペランドがブロックフローティング型のデータの場合には、入力データブロックのブロックスケールファクタから中間結果ブロックスケールファクタを算出し、出力オペランドに対応する演算結果の正規化を行い、前記中間結果ブロックスケールファクタからブロックスケールファクタを算出するデータ出力処理を構成する命令コードとして展開する。
さらに、本発明に係る請求の範囲第９６項記載のオブジェクトプログラム生成方法は、データ型としてブロックフローティング型のブロックフローティング変数を用いて演算式を記述したソースプログラムが与えられたときに、与えられたソースプログラムをオブジェクトプログラムに翻訳する方法であって、前記ブロックフローティング変数は、１または複数のデータと１個のグループスケールファクタを含んでデータグループを構成し、さらに１または複数のデータグループを含んでデータブロックを構成し、前記データブロックは、前記データブロックのブロックスケールファクタを含むデータ構造を表す変数であり、前記ソースプログラムのなかから前記演算式を検出する演算式検出ステップと、前記演算式検出ステップで検出した演算式を所定の命令コードとして展開する演算式展開ステップと、前記演算式展開ステップで展開した命令コードを前記オブジェクトプログラムに変換するオブジェクトコード変換ステップとを含む。
さらに、本発明に係る請求の範囲第９７項記載のオブジェクトプログラム生成方法は、請求の範囲第９６項記載のオブジェクトプログラム生成方法において、前記演算式検出ステップは、前記演算式の演算子およびその演算子の入力オペランドのデータ型と演算子の出力オペランドのデータ型とを演算式検出結果として検出し、前記演算式展開ステップは、前記演算式検出ステップで検出される前記演算式検出結果のうち演算子および演算子の入力オペランドのデータ型の情報に基づき、入力オペランドがブロックフローティング型のデータを含む場合には、入力データブロックのブロックスケールファクタから演算用ブロックスケールファクタを算出する処理を構成する命令コードとして展開し、入力オペランドがブロックフローティング型のデータの場合には、ブロックフローティング型のデータを演算器に入力する処理については、前記演算用ブロックスケールファクタおよび入力オペランドのブロックスケールファクタの一方または両方、並びにグループスケールファクタに基づくシフト処理を行う演算器へのデータ入力処理を構成する命令コードとして展開する。
さらに、本発明に係る請求の範囲第９８項記載のオブジェクトプログラム生成方法は、請求の範囲第９７項記載のオブジェクトプログラム生成方法において、前記演算式展開ステップは、演算器に入力されたブロックフローティング型のデータについては、前記演算子に基づく演算処理を構成する命令コードとして展開し、出力オペランドがブロックフローティング型のデータの場合には、入力データブロックのブロックスケールファクタから中間結果ブロックスケールファクタを算出し、出力オペランドに対応する演算結果のグループ正規化を行い、そのグループ正規化によって算出される更新グループスケールファクタおよび前記中間結果ブロックスケールファクタの一方または両方から算出される最終グループスケールファクタを算出し、その算出されたグループスケールファクタからブロックスケールファクタを算出するデータ出力処理を構成する命令コードとして展開する。
さらに、本発明に係る請求の範囲第９９項記載のオブジェクトプログラム生成方法は、ブロックフローティング変数を用いて演算式を記述したソースプログラムが与えられたときに、与えられたソースプログラムを翻訳してオブジェクトプログラムを生成する方法であって、前記ブロックフローティング変数は、１または複数のデータを含んでデータブロックを構成し、前記データブロックは、前記データブロックのブロックスケールファクタを含むデータ構造を表す変数であり、前記ソースプログラムのなかから乗算または除算を行う前記演算式を検出する演算式検出ステップと、前記演算式検出ステップで検出した演算式を所定の命令コードとして展開する演算式展開ステップと、前記演算式展開ステップで展開した命令コードを前記オブジェクトプログラムに埋め込む命令コード埋込ステップとを含み、前記演算式展開ステップは、前記演算式検出ステップで検出した演算式のうち乗算または除算に係る部分について、乗算または除算の対象となる前記ブロックフローティング変数に対応するデータブロックを用いた乗算または除算を行う処理を構成する命令コードとして展開し、前記命令コードにより構成される処理は、前記データブロックのデータに対して乗算または除算を行い、その演算結果を演算結果データブロックとして算出するとともに、前記データブロックのブロックスケールファクタに基づいて前記演算結果データブロックのブロックスケールファクタを算出するようになっている。
さらに、本発明に係る請求の範囲第１００項記載のオブジェクトプログラム生成方法は、ブロックフローティング変数および固定小数点変数を用いて演算式を記述したソースプログラムが与えられたときに、与えられたソースプログラムを翻訳してオブジェクトプログラムを生成する方法であって、前記ブロックフローティング変数は、１または複数のデータを含んでデータブロックを構成し、前記データブロックは、前記データブロックのブロックスケールファクタを含むデータ構造を表す変数であり、前記固定小数点変数は、１または複数のデータを含んでデータブロックを構成するデータ構造を表す変数であり、前記ソースプログラムのなかから乗算または除算を行う前記演算式を検出する演算式検出ステップと、前記演算式検出ステップで検出した演算式を所定の命令コードとして展開する演算式展開ステップと、前記演算式展開ステップで展開した命令コードを前記オブジェクトプログラムに埋め込む命令コード埋込ステップとを含み、前記演算式展開ステップは、前記演算式検出ステップで検出した演算式のうち乗算または除算に係る部分について、乗算または除算の対象となる前記ブロックフローティング変数および前記固定小数点変数に対応するデータブロックを用いた乗算または除算を行う処理を構成する命令コードとして展開し、前記命令コードにより構成される処理は、前記ブロックフローティング変数に対応するデータブロックのデータと前記固定小数点変数に対応するデータブロックのデータとを乗算しまたは除算し、その演算結果を演算結果データブロックとして算出するとともに、前記ブロックフローティング変数に対応するデータブロックのブロックスケールファクタに基づいて前記演算結果データブロックのブロックスケールファクタを算出するようになっている。
さらに、本発明に係る請求の範囲第１０１項記載のオブジェクトプログラム生成方法は、ブロックフローティング変数を用いて演算式を記述したソースプログラムが与えられたときに、与えられたソースプログラムを翻訳してオブジェクトプログラムを生成する方法であって、前記ブロックフローティング変数は、１または複数のデータを含んでデータグループを構成し、さらに複数のデータグループを含んでデータブロックを構成し、前記データブロックは、前記各データグループのグループスケールファクタおよび前記データブロックのブロックスケールファクタを含むデータ構造を表す変数であり、前記ソースプログラムのなかから乗算または除算を行う前記演算式を検出する演算式検出ステップと、前記演算式検出ステップで検出した演算式を所定の命令コードとして展開する演算式展開ステップと、前記演算式展開ステップで展開した命令コードを前記オブジェクトプログラムに埋め込む命令コード埋込ステップとを含み、前記演算式展開ステップは、前記演算式検出ステップで検出した演算式のうち乗算または除算に係る部分について、乗算または除算の対象となる前記ブロックフローティング変数に対応するデータブロックを用いた乗算または除算を行う処理を構成する命令コードとして展開し、前記命令コードにより構成される処理は、前記データブロックの各データグループごとに、当該データグループのデータに対して乗算または除算を行い、それら演算結果を演算結果データブロックとして算出するとともに、前記データブロックのブロックスケールファクタに基づいて前記演算結果データブロックのブロックスケールファクタを算出するようになっている。
さらに、本発明に係る請求の範囲第１０２項記載のオブジェクトプログラム生成方法は、ブロックフローティング変数を用いて演算式を記述したソースプログラムが与えられたときに、与えられたソースプログラムを翻訳してオブジェクトプログラムを生成する方法であって、前記ブロックフローティング変数は、１または複数のデータを含んでデータブロックを構成し、前記データブロックは、前記データブロックのブロックスケールファクタを含むデータ構造を表す変数であり、前記ソースプログラムのなかから加算または減算を行う前記演算式を検出する演算式検出ステップと、前記演算式検出ステップで検出した演算式を所定の命令コードとして展開する演算式展開ステップと、前記演算式展開ステップで展開した命令コードを前記オブジェクトプログラムに埋め込む命令コード埋込ステップとを含み、前記演算式展開ステップは、前記演算式検出ステップで検出した演算式のうち加算または減算に係る部分について、加算または減算の対象となる前記ブロックフローティング変数に対応するデータブロックを用いた加算または減算を行う処理を構成する命令コードとして展開し、前記命令コードにより構成される処理は、前記データブロックのブロックスケールファクタのうち絶対値が最大のデータを含むデータブロックのものを共通ブロックスケールファクタとして選択し、前記共通ブロックスケールファクタに基づいて前記データブロックの各データに対してスケーリングを行い、スケーリングを行った各データブロックのデータに対して加算または減算を行うようになっている。
さらに、本発明に係る請求の範囲第１０３項記載のオブジェクトプログラム生成方法は、ブロックフローティング変数および固定小数点変数を用いて演算式を記述したソースプログラムが与えられたときに、与えられたソースプログラムを翻訳してオブジェクトプログラムを生成する方法であって、前記ブロックフローティング変数は、１または複数のデータを含んでデータブロックを構成し、前記データブロックは、前記データブロックのブロックスケールファクタを含むデータ構造を表す変数であり、前記固定小数点変数は、１または複数のデータを含んでデータブロックを構成するデータ構造を表す変数であり、前記ソースプログラムのなかから加算または減算を行う前記演算式を検出する演算式検出ステップと、前記演算式検出ステップで検出した演算式を所定の命令コードとして展開する演算式展開ステップと、前記演算式展開ステップで展開した命令コードを前記オブジェクトプログラムに埋め込む命令コード埋込ステップとを含み、前記演算式展開ステップは、前記演算式検出ステップで検出した演算式のうち加算または減算に係る部分について、加算または減算の対象となる前記ブロックフローティング変数および前記固定小数点変数に対応するデータブロックを用いた加算または減算を行う処理を構成する命令コードとして展開し、前記命令コードにより構成される処理は、固定小数点データブロックについてはある定数として与えられる仮想ブロックスケールファクタを算出し、前記ブロックフローティング変数に対応するデータブロックのブロックスケールファクタおよび前記仮想ブロックスケールファクタのうち、絶対値が最大のデータを含むデータブロックのものを共通ブロックスケールファクタとして選択し、前記共通ブロックスケールファクタに基づいて当該データブロックの各データに対してスケーリングを行い、スケーリングを行った各データブロックのデータと前記固定小数点変数に対応するデータブロックのデータとを加算しまたは減算するようになっている。
さらに、本発明に係る請求の範囲第１０４項記載のオブジェクトプログラム生成方法は、ブロックフローティング変数を用いて演算式を記述したソースプログラムが与えられたときに、与えられたソースプログラムを翻訳してオブジェクトプログラムを生成する方法であって、前記ブロックフローティング変数は、１または複数のデータを含んでデータグループを構成し、さらに複数のデータグループを含んでデータブロックを構成し、前記データブロックは、前記各データグループのグループスケールファクタおよび前記データブロックのブロックスケールファクタを含むデータ構造を表す変数であり、前記ソースプログラムのなかから加算または減算を行う前記演算式を検出する演算式検出ステップと、前記演算式検出ステップで検出した演算式を所定の命令コードとして展開する演算式展開ステップと、前記演算式展開ステップで展開した命令コードを前記オブジェクトプログラムに埋め込む命令コード埋込ステップとを含み、前記演算式展開ステップは、前記演算式検出ステップで検出した演算式のうち加算または減算に係る部分について、加算または減算の対象となる前記ブロックフローティング変数に対応するデータブロックを用いた加算または減算を行う処理を構成する命令コードとして展開し、前記命令コードにより構成される処理は、前記データブロックのブロックスケールファクタのうち絶対値が最大のデータを含むデータブロックのものを共通ブロックスケールファクタとして選択し、前記データブロックの各データグループごとに、当該データグループのグループスケールファクタと前記共通ブロックスケールファクタとの差分からなるスケールファクタに基づいて、当該データグループの各データに対してスケーリングを行い、スケーリングを行った各データブロックのデータに対して加算または減算を行うようになっている。
さらに、本発明に係る請求の範囲第１０５項記載のオブジェクトプログラム生成方法は、ブロックフローティング変数を用いて演算式を記述したソースプログラムが与えられたときに、与えられたソースプログラムを翻訳してオブジェクトプログラムを生成する方法であって、前記ブロックフローティング変数は、１または複数のデータを含んでデータブロックを構成し、前記データブロックは、前記データブロックのブロックスケールファクタを含むデータ構造を表す変数であり、前記ソースプログラムのなかから乗累算を行う前記演算式を検出する演算式検出ステップと、前記演算式検出ステップで検出した演算式を所定の命令コードとして展開する演算式展開ステップと、前記演算式展開ステップで展開した命令コードを前記オブジェクトプログラムに埋め込む命令コード埋込ステップとを含み、前記演算式展開ステップは、前記演算式検出ステップで検出した演算式のうち乗累算に係る部分について、乗算の対象となる２つの前記ブロックフローティング変数に対応する第１データブロックおよび第２データブロック、並びに加算または減算の対象となる前記ブロックフローティング変数に対応する第３データブロックを用いた乗累算を行う処理を構成する命令コードとして展開し、前記命令コードにより構成される処理は、与えられたスケールファクタに基づいて前記第１データブロックの各データに対してスケーリングを行う第１スケーリング処理と、与えられたスケールファクタに基づいて前記第３データブロックの各データに対してスケーリングを行う第２スケーリング処理と、前記第２データブロックおよび前記第１スケーリング処理からの第１データブロックを用いた乗算を行う乗算処理と、前記乗算処理からの乗算結果データブロックおよび前記第２スケーリング処理からの第３データブロックを用いた加算または減算を行う演算処理とを備え、さらに、前記第１データブロックおよび前記第２データブロックのブロックスケールファクタの和である乗算結果ブロックスケールファクタと、前記第３データブロックのブロックスケールファクタとの差分からなる補正ブロックスケールファクタを算出し、前記補正ブロックスケールファクタを前記第１スケーリング処理に与え、前記第１データブロックのデータを前記第１スケーリング処理に入力し、かつ、前記第２スケーリング処理にスケールファクタを与えず、前記第３データブロックのデータを前記第２スケーリング処理に入力するようになっている。
さらに、本発明に係る請求の範囲第１０６項記載のオブジェクトプログラム生成方法は、請求の範囲第１０５項記載のオブジェクトプログラム生成方法において、前記命令コードにより構成される処理は、前記補正ブロックスケールファクタを前記第１スケーリング処理に与え、前記第１データブロックのデータを前記第１スケーリング処理に入力し、かつ、前記第２スケーリング処理にスケールファクタを与えず、前記第３データブロックのデータを前記第２スケーリング処理に入力する第１スケール補正処理と、前記補正ブロックスケールファクタを前記第２スケーリング処理に与え、前記第３データブロックのデータを前記第２スケーリング処理に入力し、かつ、前記第１スケーリング処理にスケールファクタを与えず、前記第１データブロックのデータを前記第１スケーリング処理に入力する第２スケール補正処理とのうちいずれかを行うようになっている。
さらに、本発明に係る請求の範囲第１０７項記載のオブジェクトプログラム生成方法は、請求の範囲第１０５項記載のオブジェクトプログラム生成方法において、前記命令コードにより構成される処理は、前記乗算結果ブロックスケールファクタおよび前記第３データブロックのブロックスケールファクタの大小関係に基づいて、前記第１スケール補正処理および前記第２スケール補正処理のいずれかを選択的に行うようになっている。
さらに、本発明に係る請求の範囲第１０８項記載のオブジェクトプログラム生成方法は、請求の範囲第１０７項記載のオブジェクトプログラム生成方法において、前記第１スケーリング処理は、与えられたスケールファクタに相当するシフト量で、入力したデータに対して下位ビットの方向へビットシフトを行うようになっており、前記第２スケーリング処理は、与えられたスケールファクタに相当するシフト量で、入力したデータに対して下位ビットの方向へビットシフトを行うようになっており、前記命令コードにより構成される処理は、前記第３データブロックのブロックスケールファクタが前記乗算結果ブロックスケールファクタよりも大きいときは、前記第１スケール補正処理を行い、前記乗算結果ブロックスケールファクタが前記第３データブロックのブロックスケールファクタよりも大きいときは、前記第２スケール補正処理を行うようになっている。
さらに、本発明に係る請求の範囲第１０９項記載のオブジェクトプログラム生成方法は、請求の範囲第１０７項記載のオブジェクトプログラム生成方法において、前記第１スケーリング処理は、与えられたスケールファクタに相当するシフト量で、入力したデータに対して上位ビットの方向へビットシフトを行うようになっており、前記第２スケーリング処理は、与えられたスケールファクタに相当するシフト量で、入力したデータに対して上位ビットの方向へビットシフトを行うようになっており、前記命令コードにより構成される処理は、前記第３データブロックのブロックスケールファクタが前記乗算結果ブロックスケールファクタよりも大きいときは、前記第２スケール補正処理を行い、前記乗算結果ブロックスケールファクタが前記第３データブロックのブロックスケールファクタよりも大きいときは、前記第１スケール補正処理を行うようになっている。
さらに、本発明に係る請求の範囲第１１０項記載のオブジェクトプログラム生成方法は、ブロックフローティング変数を用いて演算式を記述したソースプログラムが与えられたときに、与えられたソースプログラムを翻訳してオブジェクトプログラムを生成する方法であって、前記ブロックフローティング変数は、１または複数のデータを含んでデータグループを構成し、さらに複数のデータグループを含んでデータブロックを構成し、前記データブロックは、前記各データグループのグループスケールファクタおよび前記データブロックのブロックスケールファクタを含むデータ構造を表す変数であり、前記ソースプログラムのなかから乗累算を行う前記演算式を検出する演算式検出ステップと、前記演算式検出ステップで検出した演算式を所定の命令コードとして展開する演算式展開ステップと、前記演算式展開ステップで展開した命令コードを前記オブジェクトプログラムに埋め込む命令コード埋込ステップとを含み、前記演算式展開ステップは、前記演算式検出ステップで検出した演算式のうち乗累算に係る部分について、乗算の対象となる２つの前記ブロックフローティング変数に対応する第１データブロックおよび第２データブロック、並びに加算または減算の対象となる前記ブロックフローティング変数に対応する第３データブロックを用いた乗累算を行う処理を構成する命令コードとして展開し、前記命令コードにより構成される処理は、与えられたスケールファクタに基づいて前記第１データブロックの各データに対してスケーリングを行う第１スケーリング処理と、与えられたスケールファクタに基づいて前記第３データブロックの各データに対してスケーリングを行う第２スケーリング処理と、前記第２データブロックおよび前記第１スケーリング処理からの第１データブロックを用いた乗算を行う乗算処理と、前記乗算処理からの乗算結果データブロックおよび前記第２スケーリング処理からの第３データブロックを用いた加算または減算を行う演算処理とを備え、前記第１データブロックおよび前記第２データブロックのブロックスケールファクタの和である乗算結果ブロックスケールファクタと、前記第３データブロックのブロックスケールファクタとの差分からなる補正ブロックスケールファクタを算出し、前記第１データブロックの各データグループごとに、当該データグループのグループスケールファクタと前記第１データブロックのブロックスケールファクタとの差分からなるスケールファクタに前記補正ブロックスケールファクタを加算したものを前記第１スケーリング処理に与え、当該データグループのデータを前記第１スケーリング処理に入力し、かつ、前記第３データブロックの各データグループごとに、当該データグループのグループスケールファクタと前記第３データブロックのブロックスケールファクタとの差分からなるスケールファクタを前記第２スケーリング処理に与え、当該データグループのデータを前記第２スケーリング処理に入力するようになっている。
さらに、本発明に係る請求の範囲第１１１項記載のオブジェクトプログラム生成方法は、請求の範囲第１１０項記載のオブジェクトプログラム生成方法において、前記命令コードにより構成される処理は、前記第１データブロックの各データグループごとに、当該データグループのグループスケールファクタと前記第１データブロックのブロックスケールファクタとの差分からなるスケールファクタに前記補正ブロックスケールファクタを加算したものを前記第１スケーリング処理に与え、当該データグループのデータを前記第１スケーリング処理に入力し、かつ、前記第３データブロックの各データグループごとに、当該データグループのグループスケールファクタと前記第３データブロックのブロックスケールファクタとの差分からなるスケールファクタを前記第２スケーリング処理に与え、当該データグループのデータを前記第２スケーリング処理に入力する第１スケール補正処理と、前記第３データブロックの各データグループごとに、当該データグループのグループスケールファクタと前記第３データブロックのブロックスケールファクタとの差分からなるスケールファクタに前記補正ブロックスケールファクタを加算したものを前記第２スケーリング処理に与え、当該データグループのデータを前記第２スケーリング処理に入力し、かつ、前記第１データブロックの各データグループごとに、当該データグループのグループスケールファクタと前記第１データブロックのブロックスケールファクタとの差分からなるスケールファクタを前記第１スケーリング処理に与え、当該データグループのデータを前記第１スケーリング処理に入力する第２スケール補正処理とのうちいずれかを行うようになっている。
以上では、上記目的を達成するためのコンパイル装置およびコンパイルプログラム、並びにオブジェクトプログラム生成方法を提案したが、これに限らず、次に掲げる第１ないし第３のコンパイル装置を提案することもできる。
第１のコンパイル装置は、
データ型としてブロックフローティング型のブロックフローティング変数を用いて演算式を記述したソースプログラムが与えられたときに、与えられたソースプログラムをオブジェクトプログラムに翻訳する装置であって、
前記ブロックフローティング変数は、１または複数のデータと１個のグループスケールファクタを含んでデータグループを構成し、さらに１または複数のデータグループを含んでデータブロックを構成し、前記データブロックは、前記データブロックのブロックスケールファクタを含むデータ構造を表す変数であり、
前記ソースプログラムのなかから前記演算式を検出する演算式検出手段と、前記演算式検出手段で検出した演算式を所定の命令コードとして展開する演算式展開手段と、前記演算式展開手段で展開した命令コードを前記オブジェクトプログラムに変換するオブジェクトコード変換手段とを備え、
前記演算式検出手段は、前記演算式の演算子およびその演算子の入力オペランドのデータ型と演算子の出力オペランドのデータ型とを演算式検出結果として検出し、
前記演算式展開手段は、前記演算式検出手段で検出される前記演算式検出結果のうち演算子および演算子の入力オペランドのデータ型の情報に基づき、
入力オペランドがブロックフローティング型のデータを含む場合には、入力データブロックのブロックスケールファクタから演算用ブロックスケールファクタおよび中間結果ブロックスケールファクタの一方または両方を算出する処理を構成する命令コードとして展開し、
入力オペランドがブロックフローティング型のデータの場合には、ブロックフローティング型のデータを演算器に入力する処理については、前記演算用ブロックスケールファクタおよび入力オペランドのブロックスケールファクタの一方または両方、並びにグループスケールファクタに基づくシフト処理を行う演算器へのデータ入力処理を構成する命令コードとして展開し、
演算器に入力されたブロックフローティング型のデータについては、前記演算子に基づく演算処理を構成する命令コードとして展開し、
出力オペランドがブロックフローティング型のデータの場合には、出力オペランドに対応する演算結果のグループ正規化を行い、そのグループ正規化によって算出される更新グループスケールファクタおよび前記中間結果ブロックスケールファクタの一方または両方から算出される最終グループスケールファクタを算出し、その算出されたグループスケールファクタからブロックスケールファクタを算出するデータ出力処理を構成する命令コードとして展開するようになっている。
ここで、入力オペランドがブロックフローティング型のデータを含む場合とは、演算対象となる複数の入力オペランドが存在する場合において、そのうち少なくとも１つの入力オペランドがブロックフローティング型のデータである場合をいう。
また、入力オペランドがブロックフローティング型のデータの場合とは、演算対象となる入力オペランドが１つの場合（すなわち、データブロック内での演算を行う場合）において、その入力オペランドがブロックフローティング型のデータである場合をいう。
また、中間結果ブロックスケールファクタとは、例えば、演算として加算または減算を行うのであれば、請求の範囲第２８項における共通スケールファクタがこれに該当し、演算として乗算または除算を行うのであれば、請求の範囲第３１項における乗算結果ブロックスケールファクタがこれに該当する。
また、演算用ブロックスケールファクタとは、例えば、演算として加算または減算を行うのであれば、請求の範囲第２８項における共通スケールファクタがこれに該当する。
さらに、第２のコンパイル装置は、上記第１のコンパイル装置において、
前記演算式の演算子が加算または減算であって、
前記入力オペランドがブロックフローティング型であり、かつそれが同一のデータブロックからのデータである場合には、前記演算用ブロックスケールファクタを算出する処理を構成する命令コードを生成せず、
前記演算器に入力する処理については、ブロックスケールファクタとグループスケールファクタとの差分に基づくシフト処理を行うようになっている。
さらに、第３のコンパイル装置は、上記第１のコンパイル装置において、
前記演算式の演算子が加算または減算であって、
前記入力オペランドがブロックフローティング型であり、かつそれが複数の異なるデータブロックからのデータである場合には、絶対値が最大のデータを含むデータブロックのブロックスケールファクタを前記演算用ブロックスケールファクタとして算出する処理を構成する命令コードとして展開し、
前記演算器に入力する処理については、前記演算用ブロックスケールファクタとグループスケールファクタとの差分に基づくシフト処理を行うようになっている。
発明を実施するための最良の形態
以下、本発明の実施の形態を図面を参照しながら説明する。図１ないし図５は、本発明に係るデータ演算処理装置の実施の形態を示す図である。
本実施の形態は、本発明に係るコンパイル装置およびコンパイルプログラム、並びにオブジェクトプログラム生成方法を、図１に示すように、コンピュータ１００において、ブロックフローティング方式による演算式を記述したソースプログラムを翻訳し、コンピュータ１００が実行可能なオブジェクトプログラムを生成する場合について適用したものである。以下、翻訳・生成のことをコンパイルと総称する。
まず、コンピュータ１００の構成を図１を参照しながら詳細に説明する。図１は、コンピュータの構成を示すブロック図である。
コンピュータ１００は、図１に示すように、制御プログラムに基づいて演算およびシステム全体を制御するＣＰＵ３０と、所定領域にあらかじめＣＰＵ３０の制御プログラム等を格納しているＲＯＭ３２と、ＲＯＭ３２等から読み出したデータやＣＰＵ３０の演算過程で必要な演算結果を格納するためのＲＡＭ３４と、外部装置に対してデータの入出力を媒介するＩ／Ｆ３８とで構成されており、これらは、データを転送するための信号線であるバス３９で相互にかつデータ授受可能に接続されている。
Ｉ／Ｆ３８には、外部装置として、ヒューマンインターフェースとしてデータの入力が可能なキーボードやマウス等からなる入力装置４０と、データやテーブル等をファイルとして格納する記憶装置４２と、画像信号に基づいて画面を表示する表示装置４４とが接続されている。
記憶装置４２には、ソースプログラムおよびオブジェクトプログラムがファイル形式で格納される。本発明のコンパイル対象となるソースプログラムは、所定のプログラム言語（例えば、Ｃ言語）により記述することができるほか、ブロックフローティング方式による演算式をブロックフローティング変数を用いて記述することができる。ここで、ブロックフローティング変数とは、ブロックフローティング方式のデータ構造を表す変数である。ブロックフローティング方式のデータ構造は、図２に示すように、ｋ個のデータを含んでデータグループを構成し、さらに複数のデータグループを含んでデータブロックを構成し、データブロックは、各データグループのグループスケールファクタおよびデータブロックのブロックスケールファクタを含む。図２は、ブロックフローティング方式のデータ構造を示す図である。
また、ブロックフローティング変数の特徴は、ブロックフローティング方式のデータ構造を、グループスケールファクタおよびブロックスケールファクタを明示せずに表す点である。例えば、データブロックのデータグループ数を「３」、各データグループのデータ数を「２」とした場合、ブロックフローティング変数は、ソースプログラム中で下式（３）に示すように定義することができる。この場合、グループスケールファクタを３つ、ブロックスケールファクタを１つ伴うが、ソースプログラム中ではそれらを明示する必要はない。これにより、ソースプログラムの記述を簡素化することができる。
2003032157.tif 000004
ＣＰＵ３０は、マイクロプロセッシングユニットＭＰＵ等からなり、ＲＯＭ３２の所定領域に格納されている所定のプログラムを起動させ、そのプログラムに従って、図３のフローチャートに示すブロックフローティングコンパイル処理を実行するようになっている。図３は、ブロックフローティングコンパイル処理を示すフローチャートである。
ブロックフローティングコンパイル処理は、ブロックフローティング変数を用いて演算式を記述したソースプログラムが与えられたときに、与えられたソースプログラムをコンパイルする処理であって、ＣＰＵ３０において実行されると、図３に示すように、まず、ステップＳ１００に移行するようになっている。
ステップＳ１００では、ソースプログラムを入力し、字句解析、構文解析および意味解析を行い、解析結果を中間言語、記号表等の形式で格納し、ステップＳ１０４に移行する。
ステップＳ１０４では、ステップＳ１００の解析結果のなかから加算を行う演算式が存在するか否かを判定し、加算を行う演算式が存在すると判定したとき（Ｙｅｓ）は、ステップＳ１０６に移行して、解析結果に含まれる演算式のうち加算に係る部分について、加算の対象となる複数のブロックフローティング変数に対応するデータブロックを用いた加算を行う処理を構成する命令コードとして展開する。なお、ステップＳ１０６で展開する命令コードにより構成される処理については、その具体的な構成を後段で詳述する。
次いで、ステップＳ１０８に移行して、ステップＳ１００の解析結果のなかから乗累算を行う演算式が存在するか否かを判定し、乗累算を行う演算式が存在すると判定したとき（Ｙｅｓ）は、ステップＳ１１０に移行して、解析結果に含まれる演算式のうち乗累算に係る部分について、乗累算の対象となる複数のブロックフローティング変数に対応するデータブロックを用いた乗累算を行う処理を構成する命令コードとして展開する。ステップＳ１１０で展開する命令コードにより構成される処理については、その具体的な構成を後段で詳述する。
次いで、ステップＳ１１２に移行して、ステップＳ１０４〜Ｓ１１０以外の他のコンパイル処理を実行し、ステップＳ１１６に移行して、ステップＳ１０６，１１０で生成した命令コードをオブジェクトプログラムに埋め込み、オブジェクトプログラムを生成して出力し、一連の処理を終了する。
一方、ステップＳ１０４で、読み込んだプログラム行のなかから加算を行う演算式が存在しないと判定したとき（Ｎｏ）は、ステップＳ１０８に移行する。
一方、ステップＳ１０８で、読み込んだプログラム行のなかから乗累算を行う演算式が存在しないと判定したとき（Ｎｏ）は、ステップＳ１１２に移行する。
次に、上記ステップＳ１０６で展開する命令コードにより構成される処理を図４を参照しながら詳細に説明する。図４は、ステップＳ１０６で展開する命令コードにより構成される処理の一例を示すフローチャートである。
命令コードにより構成される処理は、ブロックフローティング方式による演算式のうち加算に係る部分について展開したオブジェクトプログラムの一部をなす処理であって、ＤＳＰにおいて実行されると、図４に示すように、まず、ステップＳ２００に移行するようになっている。なお、図４は、ソースプログラムにおける下式（４）に示す加算式を展開したときに得られるコンパイル結果である。下式（４）において、Ａ，Ｂ，Ｃ，Ｙは、ブロックフローティング変数であり、オブジェクトプログラムにおいてブロックフローティング変数Ａ，Ｂ，Ｃは、データブロックＡ，Ｂ，Ｃにそれぞれ対応する。
2003032157.tif 000005
ステップＳ２００では、データブロックＡ，Ｂ，Ｃのブロックスケールファクタを読み込み、ステップＳ２０２に移行して、読み込んだブロックスケールファクタのうち絶対値が最大のデータを含むデータブロックのものを共通ブロックスケールファクタとして選択し、ステップＳ２０４に移行する。
ステップＳ２０４では、データブロックＡの先頭のグループスケールファクタを読み込み、ステップＳ２０６に移行して、読み込んだグループスケールファクタと共通ブロックスケールファクタとの差分からなる差分スケールファクタを算出し、ステップＳ２０８に移行して、算出した差分スケールファクタに相当するシフト量でデータグループの各データに対して右シフトを行い、ステップＳ２１０に移行する。
ステップＳ２１０では、データブロックＡのすべてのデータグループについてステップＳ１０６，Ｓ１０８の処理を行ったか否かを判定し、すべてのデータグループについて処理を行ったと判定したとき（Ｙｅｓ）は、ステップＳ２１４に移行するが、そうでないと判定したとき（Ｎｏ）は、ステップＳ２１２に移行して、データブロックＡの次のグループスケールファクタを読み込み、ステップＳ２０６に移行する。
ステップＳ２１４では、データブロックＢについてステップＳ２０４からＳ２１２までの処理と同様のスケーリングを行い、ステップＳ２１６に移行して、データブロックＣについてステップＳ２０４からＳ２１２までの処理と同様のスケーリングを行い、ステップＳ２１８に移行する。
ステップＳ２１８では、データブロックＡ，Ｂ，Ｃの各データを加算し、ステップＳ２２０に移行して、ステップＳ２１８での加算結果をデータブロックＹに格納し、ステップＳ２２２に移行して、データブロックＹの各データを正規化し、一連の処理を終了する。
なお、ステップＳ２２２での正規化は、データグループのデータのうち絶対値が最大のものについて、最上位ビットから連続する「０」の個数を算出してこれをグループスケールファクタとし、データグループの各データを、グループスケールファクタに相当するシフト量で左シフトする。これをグループ正規化といい、データブロックのすべてのデータグループについて行う。各データグループの正規化が終了すると、グループスケールファクタのうち最小のものをブロックスケールファクタとする。この一連の処理をブロック正規化といい、単に正規化ということもある。以下、ステップＳ３３８において同じである。
次に、上記ステップＳ１１０で展開する命令コードにより構成される処理を図５を参照しながら詳細に説明する。図５は、ステップＳ１１０で展開する命令コードにより構成される処理の一例を示すフローチャートである。
命令コードにより構成される処理は、ブロックフローティング方式による演算式のうち乗累算に係る部分について展開したオブジェクトプログラムの一部をなす処理であって、ＤＳＰにおいて実行されると、図５に示すように、まず、ステップＳ３００に移行するようになっている。なお、図５は、下式（５）に示す累乗算式を実現しようとする場合に、ソースプログラムにおいてその基本演算単位となる下式（６）に示す乗累算式を展開したときに得られるコンパイル結果である。下式（５），（６）において、Ｓ、Ａｉ，Ｂｉ，Ａ，Ｂ，Ｃ，Ｙは、ブロックフローティング変数であり、オブジェクトプログラムにおいてブロックフローティング変数Ａ，Ｂ，Ｃは、データブロックＡ，Ｂ，Ｃにそれぞれ対応する。
2003032157.tif 000006
ステップＳ３００では、データブロックＡ，Ｂ，Ｃのブロックスケールファクタを読み込み、ステップＳ３０２に移行して、データブロックＡ，Ｂのブロックスケールファクタの和である乗算結果ブロックスケールファクタと、データブロックＣのブロックスケールファクタとの差分からなる補正ブロックスケールファクタを算出し、ステップＳ３０４に移行して、補正ブロックスケールファクタの符号に基づき、データブロックＣがデータブロックＡとＢの乗算結果データブロックよりも絶対値が大きいデータを含むか否かを判定し、データブロックＣが絶対値が大きいデータを含むと判定したとき（Ｙｅｓ）は、ステップＳ３０６に移行する。
ステップＳ３０６では、データブロックＡの先頭のグループスケールファクタを読み込み、ステップＳ３０８に移行して、読み込んだグループスケールファクタとデータブロックＡのブロックスケールファクタとの差分からなる差分スケールファクタを算出し、ステップＳ３１０に移行して、算出した差分スケールファクタに補正ブロックスケールファクタを加算し、ステップＳ３１２に移行して、加算を行った差分スケールファクタに相当するシフト量でデータグループの各データに対して右シフトを行い、ステップＳ３１４に移行する。
ステップＳ３１４では、データブロックＡのすべてのデータグループについてステップＳ３０８からＳ３１２までの処理を行ったか否かを判定し、すべてのデータグループについて処理を行ったと判定したとき（Ｙｅｓ）は、ステップＳ３１８に移行するが、そうでないと判定したとき（Ｎｏ）は、ステップＳ３１６に移行して、データブロックＡの次のグループスケールファクタを読み込み、ステップＳ３０８に移行する。
ステップＳ３１８では、データブロックＣの先頭のグループスケールファクタを読み込み、ステップＳ３２０に移行して、読み込んだグループスケールファクタとデータブロックＣのブロックスケールファクタとの差分からなる差分スケールファクタを算出し、ステップＳ３２２に移行して、算出した差分スケールファクタに相当するシフト量でデータグループの各データに対して右シフトを行い、ステップＳ３２４に移行する。
ステップＳ３２４では、データブロックＣのすべてのデータグループについてステップＳ３２０，Ｓ３２２の処理を行ったか否かを判定し、すべてのデータグループについて処理を行ったと判定したとき（Ｙｅｓ）は、ステップＳ３２８に移行するが、そうでないと判定したとき（Ｎｏ）は、ステップＳ３２６に移行して、データブロックＣの次のグループスケールファクタを読み込み、ステップＳ３２０に移行する。
ステップＳ３２８では、データブロックＢについてステップＳ３１８からＳ３２６までの処理と同様のスケーリングを行い、ステップＳ３３０に移行して、データブロックＡ，Ｂの各データを乗算し、ステップＳ３３２に移行して、ステップＳ３３０での乗算結果をデータブロックＸに格納し、ステップＳ３３４に移行する。
ステップＳ３３４では、データブロックＸ，Ｃの各データを加算し、ステップＳ３３６に移行して、ステップＳ３３４での加算結果をデータブロックＹに格納し、ステップＳ３３８に移行して、データブロックＹの各データを正規化し、一連の処理を終了する。
一方、ステップＳ３０４で、データブロックＣが絶対値が大きいデータを含まないと判定したとき（Ｎｏ）は、ステップＳ３４０に移行して、データブロックＣについてステップＳ３０６からＳ３１６までの処理と同様のスケーリングを行い、ステップＳ３４２に移行して、データブロックＡについてステップＳ３１８からＳ３２６までの処理と同様のスケーリングを行い、ステップＳ３２８に移行する。
次に、上記実施の形態の動作を説明する。
まず、上式（４）に示す加算式を記述したソースプログラムをコンパイルする場合を説明する。
コンピュータ１００では、上式（４）に示す加算式を記述したソースプログラムがユーザにより与えられると、ＣＰＵ３０により、ステップＳ１００，Ｓ１０４，Ｓ１０６を経て、与えられたソースプログラムのなかから加算を行う演算式が検出され、検出された演算式のうち加算に係る部分について、加算の対象となる複数のブロックフローティング変数に対応するデータブロックを用いた加算を行う処理を構成する命令コードとして展開される。そして、ステップＳ１１６を経て、展開された命令コードがオブジェクトプログラムに埋め込まれ、オブジェクトプログラムが生成・出力される。
したがって、オブジェクトプログラムが実行されると、演算式のうち加算に係る部分については、ステップＳ２００，Ｓ２０２を経て、まず、データブロックＡ，Ｂ，Ｃのブロックスケールファクタのうち絶対値が最大のデータを含むデータブロックのものが共通ブロックスケールファクタとして選択される。そして、ステップＳ２０４〜Ｓ２２２を経て、データブロックＡ，Ｂ，Ｃの各データグループごとに、そのデータグループのグループスケールファクタと共通ブロックスケールファクタとの差分からなるスケールファクタに基づいて、そのデータグループの各データに対してスケーリングが行われ、スケーリングが行われた各データブロックＡ，Ｂ，Ｃのデータが加算される。
次に、上式（６）に示す乗累算式を記述したソースプログラムをコンパイルする場合を説明する。
コンピュータ１００では、上式（６）に示す乗累算式を記述したソースプログラムがユーザにより与えられると、ＣＰＵ３０により、ステップＳ１００，Ｓ１０８，Ｓ１１０を経て、与えられたソースプログラムのなかから乗累算を行う演算式が検出され、検出された演算式のうち乗累算に係る部分について、乗算の対象となる２つのブロックフローティング変数に対応するデータブロックＡ，Ｂ、および加算の対象となるブロックフローティング変数に対応するデータブロックＣを用いた乗累算を行う処理を構成する命令コードとして展開される。そして、ステップＳ１１６を経て、展開された命令コードがオブジェクトプログラムに埋め込まれ、オブジェクトプログラムが生成・出力される。
したがって、オブジェクトプログラムが実行されると、演算式のうち乗累算については、ステップＳ３００〜Ｓ３０４を経て、まず、乗算結果ブロックスケールファクタとデータブロックＣのブロックスケールファクタとの差分からなる補正ブロックスケールファクタが算出され、算出された補正ブロックスケールファクタに基づいて第１スケール補正処理および第２スケール補正処理のうちいずれかが行われる。
第１スケール補正処理は、データブロックＣが絶対値が大きいデータを含むときに行われる。第１スケール補正処理が行われると、ステップＳ３０８〜Ｓ３１６を繰り返し経て、データブロックＡの各データグループごとに、そのデータグループのグループスケールファクタとデータブロックＡのブロックスケールファクタとの差分からなる差分スケールファクタが算出され、算出された差分スケールファクタに補正ブロックスケールファクタが加算されたものに相当するシフト量で、そのデータグループの各データに対して右シフトが行われる。また、ステップＳ３１８〜Ｓ３２６を繰り返し経て、データブロックＢの各データグループごとに、そのデータグループのグループスケールファクタとデータブロックＢのブロックスケールファクタとの差分からなる差分スケールファクタが算出され、算出された差分スケールファクタに相当するシフト量で、そのデータグループの各データに対して右シフトが行われる。そして、ステップＳ３３０，Ｓ３３２を経て、データブロックＡ，Ｂの各データが乗算され、その乗算結果がデータブロックＸに格納される。すなわち、データブロックＸの各データは、データブロックＡに対するスケーリングにより、データブロックＣのデータと桁位置が一致するようにその乗算前に補正が行われる。
一方、ステップＳ３２８を経て、データブロックＣの各データグループごとに、そのデータグループのグループスケールファクタとデータブロックＣのブロックスケールファクタとの差分からなる差分スケールファクタが算出され、算出された差分スケールファクタに相当するシフト量で、そのデータグループの各データに対して右シフトが行われる。そして、ステップＳ３３４〜Ｓ３３８を経て、桁位置が一致した状態で、データブロックＸ，Ｃの各データが加算される。
また、第２スケール補正処理は、データブロックＣが絶対値が大きいデータを含まないときに行われる。第２スケール補正処理が行われると、ステップＳ３４２を経て、データブロックＡの各データグループごとに、そのデータグループのグループスケールファクタとデータブロックＡのブロックスケールファクタとの差分からなる差分スケールファクタが算出され、算出された差分スケールファクタに相当するシフト量で、そのデータグループの各データに対して右シフトが行われる。また、ステップＳ３２８を経て、データブロックＢについても同様のスケーリングが行われる。そして、ステップＳ３３０，Ｓ３３２を経て、データブロックＡ，Ｂの各データが乗算され、その乗算結果がデータブロックＸに格納される。
一方、ステップＳ３４０を経て、データブロックＣの各データグループごとに、そのデータグループのグループスケールファクタとデータブロックＣのブロックスケールファクタとの差分からなる差分スケールファクタが算出され、算出された差分スケールファクタに補正ブロックスケールファクタが加算されたものに相当するシフト量で、そのデータグループの各データに対して右シフトが行われる。すなわち、データブロックＣの各データは、データブロックＣに対するスケーリングにより、データブロックＸのデータと桁位置が一致するようにその乗算前に補正が行われる。そして、ステップＳ３３４〜Ｓ３３８を経て、桁位置が一致した状態で、データブロックＸ，Ｃの各データが加算される。
このようにして、本実施の形態では、ブロックフローティング変数を用いて演算式を記述したソースプログラムが与えられたときに、与えられたソースプログラムのなかから加算を行う演算式を検出し、検出した演算式のうち加算に係る部分について、加算の対象となる複数のブロックフローティング変数に対応するデータブロックを用いた加算を行う処理を構成する命令コードとして展開し、展開した命令コードをオブジェクトプログラムに埋め込み、オブジェクトプログラムを生成・出力するようになっている。
これにより、ソースプログラム上で構造体の定義や特殊関数の作成等のプログラミング作業を行うことなく、ブロックフローティング変数を用いて加算式を記述するだけでブロックフローティング方式による加算を実現することができる。したがって、従来に比して、ソースプログラムにおける演算の記述を比較的容易に行うことができるとともに、ソースプログラムの記述を比較的簡素化することができる。
さらに、本実施の形態では、加算式のコンパイル結果、その命令コードにより構成される処理は、複数のデータブロックのブロックスケールファクタのうち絶対値が最大のデータを含むデータブロックのものを共通ブロックスケールファクタとして選択し、データブロックの各データグループごとに、そのデータグループのグループスケールファクタと共通ブロックスケールファクタとの差分からなるスケールファクタに基づいて、そのデータグループの各データに対してスケーリングを行い、スケーリングを行った各データブロックのデータに対して加算を行うようになっている。
これにより、オブジェクトプログラムの実行過程では、１つのデータについて１回のスケーリングにより、データブロック内での正規化およびデータブロック間での正規化を同時に行うことができるので、演算処理を比較的簡素化することができる。
さらに、本実施の形態では、ブロックフローティング変数を用いて演算式を記述したソースプログラムが与えられたときに、与えられたソースプログラムのなかから乗累算を行う演算式を検出し、検出した演算式のうち乗累算に係る部分について、乗算の対象となる２つのブロックフローティング変数に対応する第１データブロックおよび第２データブロック、並びに加算の対象となるブロックフローティング変数に対応する第３データブロックを用いた乗累算を行う処理を構成する命令コードとして展開し、展開した命令コードをオブジェクトプログラムに埋め込み、オブジェクトプログラムを生成・出力するようになっている。
これにより、ソースプログラム上で構造体の定義や特殊関数の作成等のプログラミング作業を行うことなく、ブロックフローティング変数を用いて乗累算式を記述するだけでブロックフローティング方式による乗累算を実現することができる。したがって、従来に比して、ソースプログラムにおける演算の記述を比較的容易に行うことができるとともに、ソースプログラムの記述を比較的簡素化することができる。
さらに、本実施の形態では、乗累算式のコンパイル結果、その命令コードにより構成される処理は、補正ブロックスケールファクタを算出し、第３データブロックのブロックスケールファクタが乗算結果ブロックスケールファクタよりも大きいときは、乗算を行う前に、第１データブロックの各データグループごとに、そのデータグループのグループスケールファクタと第１データブロックのブロックスケールファクタとの差分からなる差分スケールファクタを算出し、算出した差分スケールファクタに補正ブロックスケールファクタを加算したものに基づいてそのデータグループの各データを右シフトするようになっている。
これにより、オブジェクトプログラムの実行過程では、スケーリングを乗算前に行うので、桁落ちを防止するための余分なビット長を変数に割り当てなくてすみ、演算時に必要なデータ容量を比較的低減することができるとともに、ビット長の変換を伴わないので、演算効率が低下する可能性を比較的低減することができる。
上記実施の形態において、ステップＳ１０４は、請求の範囲第２２、第２３、第２７、第３０、第５９、第６０、第６４若しくは第６７項記載の演算式検出手段、または請求の範囲第９６、第９７、第１０１若しくは第１０４項記載の演算式検出ステップに対応し、ステップＳ１０６は、請求の範囲第２２ないし第２４、第２７、第３０、第５９ないし第６１、第６４若しくは第６７項記載の演算式展開手段、または請求の範囲第９６ないし第９８、第１０１若しくは第１０４項記載の演算式展開ステップに対応している。また、ステップＳ１１６は、請求の範囲第２７、第３０、第６４若しくは第６７項記載の命令コード埋込手段、請求の範囲第１０１若しくは第１０４項記載の命令コード埋込ステップ、請求の範囲第２２若しくは第５９項記載のオブジェクトコード変換手段、または請求の範囲第９６項記載のオブジェクトコード変換ステップに対応している。
上記実施の形態において、ステップＳ１０８は、請求の範囲第２２、第２３、第３６、第５９、第６０若しくは第７３項記載の演算式検出手段、または請求の範囲第９６、第９７若しくは第１１０項記載の演算式検出ステップに対応し、ステップＳ１１０は、請求の範囲第２２ないし第２４、第３６、第５９ないし第６１若しくは第７３項記載の演算式展開手段、または請求の範囲第９６ないし第９８若しくは第１１０項記載の演算式展開ステップに対応している。また、ステップＳ１１６は、請求の範囲第３６若しくは第７３項記載の命令コード埋込手段、請求の範囲第１１０項記載の命令コード埋込ステップ、請求の範囲第２２若しくは第５９項記載のオブジェクトコード変換手段、または請求の範囲第９６項記載のオブジェクトコード変換ステップに対応している。
また、上記実施の形態において、ステップＳ３０６〜Ｓ３１６またはステップＳ３４２は、請求の範囲第３６、第３７、第７３、第７４、第１１０または第１１１項記載の第１スケーリング処理に対応し、ステップＳ３１８〜Ｓ３２６またはステップＳ３４０は、請求の範囲第３６、第３７、第７３、第７４、第１１０または第１１１項記載の第２スケーリング処理に対応している。また、ステップＳ３３０，Ｓ３３２は、請求の範囲第３６、第７３または第１１０項記載の乗算処理に対応し、ステップＳ３３４，Ｓ３３６は、請求の範囲第２４、第３６、第６１、第７３、第９８または第１１０項記載の演算処理に対応し、ステップＳ３０６〜Ｓ３２８は、請求の範囲第３７、第７４または第１１１項記載の第１スケール補正処理に対応している。
また、上記実施の形態において、ステップＳ３４０，Ｓ３４２，Ｓ３２８は、請求の範囲第３７、第７４または第１１１項記載の第２スケール補正処理に対応している。
なお、上記実施の形態においては、ブロックフローティング方式のデータ構造として、図２に示すように、ｋ個のデータを含んでデータグループを構成し、さらに複数のデータグループを含んでデータブロックを構成し、データブロックは、各データグループのグループスケールファクタおよびデータブロックのブロックスケールファクタを含むデータ構造を採用したが、これに限らず、データグループおよびグループスケールファクタを設けないデータ構造を採用することもできる。すなわち、複数のデータを含んでデータブロックを構成し、データブロックは、ブロックスケールファクタを含む。こうしたデータ構造を採用した場合でも、上記実施の形態と同じ要領で動作し、同等の効果を得ることができる。
この場合において、ステップＳ１０４は、請求の範囲第２２、第２３、第２８、第５９、第６０若しくは第６５項記載の演算式検出手段、または請求の範囲第９６、第９７若しくは第１０２項記載の演算式検出ステップに対応し、ステップＳ１０６は、請求の範囲第２２ないし第２４、第２８、第５９ないし第６１若しくは第６５項記載の演算式展開手段、または請求の範囲第９６ないし第９８若しくは第１０２項記載の演算式展開ステップに対応している。また、ステップＳ１１６は、請求の範囲第２８若しくは第６５項記載の命令コード埋込手段、請求の範囲第１０２項記載の命令コード埋込ステップ、請求の範囲第２２若しくは第５９項記載のオブジェクトコード変換手段、または請求の範囲第９６項記載のオブジェクトコード変換ステップに対応している。
この場合において、ステップＳ１０８は、請求の範囲第２２、第２３、第３１、第５９、第６０若しくは第６８項記載の演算式検出手段、または請求の範囲第９６、第９７若しくは第１０５項記載の演算式検出ステップに対応し、ステップＳ１１０は、請求の範囲第２２ないし第２４、第３１、第５９ないし第６１若しくは第６８項記載の演算式展開手段、または請求の範囲第９６ないし第９８若しくは第１０５項記載の演算式展開ステップに対応している。また、ステップＳ１１６は、請求の範囲第３１若しくは第６８項記載の命令コード埋込手段、請求の範囲第１０５項記載の命令コード埋込ステップ、請求の範囲第２２若しくは第５９項記載のオブジェクトコード変換手段、または請求の範囲第９６項記載のオブジェクトコード変換ステップに対応している。
また、ステップＳ３０６〜Ｓ３１６またはステップＳ３４２は、請求の範囲第３１、第３２、第３４、第６８、第６９、第７１、第１０５、第１０６または第１０８項記載の第１スケーリング処理に対応し、ステップＳ３１８〜Ｓ３２６またはステップＳ３４０は、請求の範囲第３１、第３２、第３４、第６８、第６９、第７１、第１０５、第１０６または第１０８項記載の第２スケーリング処理に対応している。また、ステップＳ３３０，Ｓ３３２は、請求の範囲第３１、第６８または第１０５項記載の乗算処理に対応し、ステップＳ３３４，Ｓ３３６は、請求の範囲第２４、第３１、第６１、第６８、第９８または第１０５項記載の演算処理に対応し、ステップＳ３０６〜Ｓ３２８は、請求の範囲第３２ないし第３４、第６９ないし第７１、第１０６ないし第１０８項記載の第１スケール補正処理に対応している。
また、ステップＳ３４０，Ｓ３４２，Ｓ３２８は、請求の範囲第３２ないし第３４、第６９ないし第７１、第１０６ないし第１０８項記載の第２スケール補正処理に対応している。
また、上記実施の形態においては、ブロックフローティング方式による演算式のうち加算に係る部分について展開したオブジェクトプログラムの一部をなす処理として図４のフローチャートに示す処理を例示したが、この場合、各データブロックＡ，Ｂ，Ｃに対するスケーリングと加算とが分離されているため、スケーリング結果を一度メモリ等に待避する必要がある。そのため、次のような処理として構成することもできる。
第１の処理は、データブロックＡの一つのデータグループのデータに対するスケーリング、データブロックＢの一つのデータグループのデータに対するスケーリング、データブロックＣの一つのデータグループのデータに対するスケーリング、それらデータグループのデータに対する加算、および加算結果に対する正規化からなる一連の処理を、データブロックＡ，Ｂ，Ｃのすべてのデータグループについて行う。
第２の処理は、データブロックＡの一つのデータグループのデータに対するスケーリング、データブロックＢの一つのデータグループのデータに対するスケーリング、それらデータグループのデータに対する加算、データブロックＣの一つのデータグループのデータに対するスケーリング、そのデータグループのデータおよび前記加算結果に対する加算、および加算結果に対する正規化からなる一連の処理を、データブロックＡ，Ｂ，Ｃのすべてのデータグループについて行う。
これにより、データをメモリ等に格納せずに演算を行うことができるので、演算効率を向上することができる。
また、上記実施の形態においては、ブロックフローティング方式による加算式および乗累算式をコンパイルするように構成したが、これに限らず、ブロックフローティング方式による乗算式をコンパイルするように構成してもよい。例えば、図６に示すようなソースプログラムを、図７に示すようなオブジェクトプログラムにコンパイルすることもできる。
図６のソースプログラムは、下式（７）に示す乗算式を実現するものであり、図６に示すように、ステップＳ４００〜Ｓ４１０の処理で構成される。図６は、ブロックフローティング方式による乗算式を記述したソースプログラムである。なお、ブロックフローティング方式によるデータ構造については、上記実施の形態と異なり、データグループを設けず、データブロックは、複数のデータおよびブロックスケールファクタを含むデータ構造である。
2003032157.tif 000007
ステップＳ４００，Ｓ４０２は、グローバル関数である。ステップＳ４００では、データブロックのデータ数を定義し、ステップＳ４０２では、ブロックフローティング変数ａ，ｂ，ｃ，ｒを確保する。
ステップＳ４０４〜Ｓ４１０は、ローカル関数である。ステップＳ４０４では、整数型の変数ｉを確保し、ステップＳ４０６では、ブロックフローティング変数ａ，ｂ，ｒの各データごとに演算を行い「ｒ＝ａ×ｂ」を演算する。ステップＳ４０８では、ブロックフローティング変数ｃ，ｒの各データごとに演算を行い「ｒ＝ｒ×ｃ」を演算し、ステップＳ４１０では、一連の処理を終了して元の処理に復帰させる。
図７のオブジェクトプログラムは、図６のソースプログラムをコンパイルして得られたものであり、図７に示すように、ステップＳ５００〜Ｓ５２０の処理で構成される。図７は、図６のソースプログラムをコンパイルして得られたオブジェクトプログラムである。
ステップＳ５００，Ｓ５０２は、グローバル関数である。ステップＳ５００では、データブロックのデータ数を定義し、ステップＳ５０２では、ブロックフローティング変数ａ，ｂ，ｃ，ｒに対応するデータブロックａ，ｂ，ｃ，ｒを確保する。
ステップＳ５０４〜Ｓ５２０は、ローカル関数である。ステップＳ５０４では、レジスタを初期化し、ステップＳ５０６では、データブロックａ，ｂのブロックスケールファクタを加算して乗算結果ブロックスケールファクタを算出し、ステップＳ５０８では、データブロックａ，ｂ，ｒへのポインタを設定する。
ステップＳ５１０では、データブロックａ，ｂ，ｒの各データごとに演算を行い「ｒ＝ａ×ｂ」を演算する。この演算では、データブロックａのブロックスケールファクタに相当するシフト量でデータブロックａの各データを右シフトして読み出し（関数ｂｆｐ＿ｌｏａｄ＿ｍａｎ（＊Ｐ０＋＋Ｍ１，ＳＦＢ０）の部分）、データブロックｂのブロックスケールファクタに相当するシフト量でデータブロックｂの各データを右シフトして読み出し（関数ｂｆｐ＿ｌｏａｄ＿ｍａｎ（＊Ｐ１＋＋Ｍ１，ＳＦＢ１）の部分）た後、データブロックａ，ｂの各データを乗算し、その乗算結果をデータブロックｒに格納する。
ステップＳ５１２では、ステップＳ５０６で算出した乗算結果ブロックスケールファクタをデータブロックｒのブロックスケールファクタに格納する。ステップＳ５１４〜Ｓ５２０は、ステップＳ５０６〜Ｓ５１２と同じ要領で、データブロックｃ，ｒを用いて「ｒ＝ｒ×ｃ」の演算を行う。
この場合において、ステップＳ１０８は、請求の範囲第２２、第２３、第２５、第５９、第６０若しくは第６２項記載の演算式検出手段、または請求の範囲第９６、第９７若しくは第９９項記載の演算式検出ステップに対応し、ステップＳ１１０は、請求の範囲第２２ないし第２５、第５９ないし第６２項記載の演算式展開手段、または請求の範囲第９６ないし第９９項記載の演算式展開ステップに対応している。また、ステップＳ１１６は、請求の範囲第２５若しくは第６２項記載の命令コード埋込手段、請求の範囲第９９項記載の命令コード埋込ステップ、請求の範囲第２２若しくは第５９項記載のオブジェクトコード変換手段、または請求の範囲第９６項記載のオブジェクトコード変換ステップに対応している。
また、以上では、変数ａ，ｂ，ｃ，ｒがすべてブロックフローティング変数である場合について説明したが、これに限らず、固定小数点が混在した演算を実現することもできる。例えば、図８に示すようなソースプログラムを、図９に示すようなオブジェクトプログラムにコンパイルすることもできる。
図８のソースプログラムは、上式（７）に示す乗算式を実現するものであり、図８に示すように、ステップＳ６００〜Ｓ６１０の処理で構成される。図８は、ブロックフローティング方式による乗算式を記述したソースプログラムである。なお、ブロックフローティング方式によるデータ構造については、上記実施の形態と異なり、データグループを設けず、データブロックは、複数のデータおよびブロックスケールファクタを含むデータ構造である。
ステップＳ６００，Ｓ６０２は、グローバル関数である。ステップＳ６００では、データブロックのデータ数を定義し、ステップＳ６０２では、ブロックフローティング変数ａ，ｂ，ｒおよび固定小数点変数ｃを確保する。
ステップＳ６０４〜Ｓ６１０は、ローカル関数である。ステップＳ６０４では、整数型の変数ｉを確保し、ステップＳ６０６では、ブロックフローティング変数ａ，ｂ，ｒの各データごとに演算を行い「ｒ＝ａ×ｂ」を演算する。ステップＳ６０８では、ブロックフローティング変数ｒおよび固定小数点変数ｃの各データごとに演算を行い「ｒ＝ｒ×ｃ」を演算し、ステップＳ６１０では、一連の処理を終了して元の処理に復帰させる。
図９のオブジェクトプログラムは、図８のソースプログラムをコンパイルして得られたものであり、図９に示すように、ステップＳ７００〜Ｓ７２０の処理で構成される。図９は、図８のソースプログラムをコンパイルして得られたオブジェクトプログラムである。
ステップＳ７００，Ｓ７０２は、グローバル関数である。ステップＳ７００では、データブロックのデータ数を定義し、ステップＳ７０２では、ブロックフローティング変数ａ，ｂ，ｒに対応するデータブロックａ，ｂ，ｒを確保するとともに固定小数点変数ｃに対応する小数点配列ｃを確保する。
ステップＳ７０４〜Ｓ７２０は、ローカル関数である。ステップＳ７０４では、レジスタを初期化し、ステップＳ７０６では、データブロックａ，ｂのブロックスケールファクタを加算して乗算結果ブロックスケールファクタを算出し、ステップＳ７０８では、データブロックａ，ｂ，ｒへのポインタを設定する。
ステップＳ７１０では、データブロックａ，ｂ，ｒの各データごとに演算を行い「ｒ＝ａ×ｂ」を演算する。この演算では、データブロックａのブロックスケールファクタに相当するシフト量でデータブロックａの各データを右シフトして読み出し（関数ｂｆｐ＿ｌｏａｄ＿ｍａｎ（＊Ｐ０＋＋Ｍ１，ＳＦＢ０）の部分）、データブロックｂのブロックスケールファクタに相当するシフト量でデータブロックｂの各データを右シフトして読み出し（関数ｂｆｐ＿ｌｏａｄ＿ｍａｎ（＊Ｐ１＋＋Ｍ１，ＳＦＢ１）の部分）た後、データブロックａ，ｂの各データを乗算し、その乗算結果をデータブロックｒに格納する。
ステップＳ７１２では、ステップＳ７０６で算出した乗算結果ブロックスケールファクタをデータブロックｒのブロックスケールファクタに格納する。
ステップＳ７１４では、データブロックｒのブロックスケールファクタを乗算結果ブロックスケールファクタとして算出し、ステップＳ７１６では、データブロックｒへのポインタおよび固定小数点配列ｃへのポインタを設定する。
ステップＳ７１８では、データブロックｒおよび固定小数点配列ｃの各データごとに演算を行い「ｒ＝ｒ×ｃ」を演算する。この演算では、データブロックｒのブロックスケールファクタに相当するシフト量でデータブロックｒの各データを右シフトして読み出し（関数ｂｆｐ＿ｌｏａｄ＿ｍａｎ（＊Ｐ０＋＋Ｍ１，ＳＦＢ０）の部分）、固定小数点配列ｃの各データをシフトせずに読み出し（関数ｌｏａｄ＿ｍａｎ（＊Ｐ１＋＋Ｍ１）の部分）た後、データブロックｒおよび固定小数点配列ｃの各データを乗算し、その乗算結果をデータブロックｒに格納する。
ステップＳ７２０では、ステップＳ７１４で算出した乗算結果ブロックスケールファクタをデータブロックｒのブロックスケールファクタに格納する。
この場合において、ステップＳ１０８は、請求の範囲第２２、第２３、第２６、第５９、第６０若しくは第６３項記載の演算式検出手段、または請求の範囲第９６、第９７若しくは第１００項記載の演算式検出ステップに対応し、ステップＳ１１０は、請求の範囲第２２ないし第２４、第２６、第５９ないし第６１若しくは第６３項記載の演算式展開手段、または請求の範囲第９６ないし第９８若しくは第１００項記載の演算式展開ステップに対応している。また、ステップＳ１１６は、請求の範囲第２６若しくは第６３項記載の命令コード埋込手段、請求の範囲第１００項記載の命令コード埋込ステップ、請求の範囲第２２若しくは第５９項記載のオブジェクトコード変換手段、または請求の範囲第９６項記載のオブジェクトコード変換ステップに対応している。
また、上記実施の形態においては、ブロックフローティング方式による加算式および乗累算式をコンパイルするように構成したが、乗累算式のコンパイルについてより具体的には、図１０に示すようなソースプログラムを、図１１に示すようなオブジェクトプログラムにコンパイルすることもできる。
図１０のソースプログラムは、下式（８）に示す乗累算式を実現するものであり、図１０に示すように、ステップＳ８００〜Ｓ８０６の処理で構成される。図１０は、ブロックフローティング方式による乗累算式を記述したソースプログラムである。なお、ブロックフローティング方式によるデータ構造は、上記実施の形態と同一である。
2003032157.tif 000008
ステップＳ８００では、ブロックフローティング変数ａ，ｂ，ｒを確保し、ステップＳ８０２では、ステップＳ８０４，Ｓ８０６の処理をＮ＋１回繰り返し実行する。ステップＳ８０４では、データｒ（ｎ）を初期化し、ステップＳ８０６では、ブロックフローティング変数ａ，ｂの各データごとに上式（８）の演算を行い、一連の処理を終了して元の処理に復帰させる。
図１１のオブジェクトプログラムは、図１０のソースプログラムをコンパイルして得られたものであり、図１１に示すように、ステップＳ８１０〜Ｓ８５０の処理で構成される。図１１は、図１０のソースプログラムをコンパイルして得られたオブジェクトプログラムである。
ステップＳ８１０では、データブロックａ（ｋ），ｂ（ｎ）のブロックスケールファクタを読み込み、ステップＳ８１２に移行して、２つのデータブロックのブロックスケールファクタの和を中間結果スケールファクタとして算出し、ステップＳ８１４に移行して、データブロックｒ（ｎ）のブロックスケールファクタを絶対値最小のデータと中間結果スケールファクタから決められる値に初期化（例えば、両者の加算）し、ステップＳ８１６に移行する。
ステップＳ８１６では、データブロックｒ（ｎ）の書込位置を先頭のデータグループに設定し、ステップＳ８１８に移行して、データブロックｂ（ｎ）の読込位置を先頭のデータグループに設定し、ステップＳ８２０に移行して、データブロックａ（ｋ）の読込位置を先頭のデータグループに設定し、ステップＳ８２２に移行して、データブロックａ（ｋ）のグループスケールファクタを読み込み、ステップＳ８２４に移行する。
ステップＳ８２４では、グループスケールファクタとデータブロックａ（ｋ）のブロックスケールファクタとの差分スケールファクタを算出し、ステップＳ８２６に移行して、データグループの各データを読み込み、差分スケールファクタに基づいて右シフトを行い、ステップＳ８２８に移行して、データブロックａ（ｋ）の読込位置を次のデータグループに設定し、ステップＳ８３０に移行して、データブロックｂ（ｎ）のデータグループについて右シフトを行い（ステップＳ８２２〜Ｓ８２６と同様の処理）、ステップＳ８３２に移行する。
ステップＳ８３２では、データブロックｂ（ｎ）の読込位置を次のデータグループに設定し、ステップＳ８３４に移行して、データブロックａ（ｋ），ｂ（ｎ）のデータを乗累算し、ステップＳ８３６に移行して、ｋ＝Ｋまでのａ（ｋ）について処理が完了したか否かを判定し、処理が完了したと判定したとき（Ｙｅｓ）は、ステップＳ８３８に移行して、乗累算結果をスケーリングし、データブロックｒ（ｎ）に書き込み、ステップＳ８４０に移行する。
ステップＳ８４０では、スケーリングに要したシフト数と中間結果スケールファクタから乗累算結果のグループスケールファクタを算出し書き込み（例えば、両者の加算）、ステップＳ８４２に移行して、データブロックｒ（ｎ）の書込位置を次のデータグループに設定し、ステップＳ８４４に移行して、データブロックｒ（ｎ）のブロックスケールファクタとグループスケールファクタとを比較し、絶対値最大のデータを含む方のスケールファクタにブロックスケールファクタを更新し、ステップＳ８４６に移行する。
ステップＳ８４６では、ｎ＝Ｎまでのｒ（ｎ）について処理が完了したか否かを判定し、処理が完了したと判定したとき（Ｙｅｓ）は、ステップＳ８４８に移行して、データブロックｒ（ｎ）のブロックスケールファクタを格納し、一連の処理を終了して元の処理に復帰させる。
一方、ステップＳ８４６で、ｎ＝Ｎまでのｒ（ｎ）について処理が完了していないと判定したとき（Ｎｏ）は、ステップＳ８５０に移行して、データブロックｂ（ｎ）についてデータブロックｒ（ｎ）の現在のｎの値に対応するデータグループに読込位置を設定し、ステップＳ８２０に移行する。
一方、ステップＳ８３６で、ｋ＝Ｋまでのａ（ｋ）について処理が完了していないと判定したとき（Ｎｏ）は、ステップＳ８２２に移行する。
また、以上では、変数ａ，ｂ，ｒがすべてブロックフローティング変数である場合について説明したが、これに限らず、固定小数点が混在した演算を実現することもできる。例えば、図１２に示すようなソースプログラムを、図１３に示すようなオブジェクトプログラムにコンパイルすることもできる。
図１２のソースプログラムは、下式（９）に示す乗累算式を実現するものであり、図１２に示すように、ステップＳ９００〜Ｓ９０６の処理で構成される。図１２は、ブロックフローティング方式による乗累算式を記述したソースプログラムである。
2003032157.tif 000009
ステップＳ９００では、固定小数点変数ａおよびブロックフローティング変数ｂ，ｒを確保し、ステップＳ９０２では、ステップＳ９０４，Ｓ９０６の処理をＮ回繰り返し実行する。ステップＳ９０４では、データブロックｒ（ｎ）を初期化し、ステップＳ９０６では、固定小数点変数ａおよびブロックフローティング変数ｂの各データごとに上式（９）の演算を行い、一連の処理を終了して元の処理に復帰させる。
図１３のオブジェクトプログラムは、図１２のソースプログラムをコンパイルして得られたものであり、図１３に示すように、ステップＳ９１０〜Ｓ９５０の処理で構成される。図１３は、図１２のソースプログラムをコンパイルして得られたオブジェクトプログラムである。
ステップＳ９１０では、データブロックｂ（ｎ）のブロックスケールファクタを読み込み、ステップＳ９１２に移行して、ブロックスケールファクタを中間結果スケールファクタとして算出し、ステップＳ９１４に移行して、データブロックｒ（ｎ）のブロックスケールファクタを絶対値最小のデータと中間結果スケールファクタから決められる値に初期化（例えば、両者の加算）し、ステップＳ９１６に移行する。
ステップＳ９１６では、データブロックｒ（ｎ）の書込位置を先頭のデータグループに設定し、ステップＳ９１８に移行して、データブロックｂ（ｎ）の読込位置を先頭のデータグループに設定し、ステップＳ９２０に移行して、データブロックａ（ｋ）の読込位置を先頭のデータグループに設定し、ステップＳ９２２に移行して、データグループの各データを読み込み、ステップＳ９２４に移行する。
ステップＳ９２４では、データブロックａ（ｋ）読込位置を次のデータグループに設定し、ステップＳ９２６に移行して、データブロックｂ（ｎ）のグループスケールファクタを読み込み、ステップＳ９２８に移行して、グループスケールファクタとデータブロックｂ（ｎ）のブロックスケールファクタとの差分スケールファクタを算出し、ステップＳ９３０に移行して、データグループの各データを読み込み、差分スケールファクタに基づいて右シフトを行い、ステップＳ９３２に移行する。
ステップＳ９３２では、データブロックｂ（ｎ）の読込位置を次のデータグループに設定し、ステップＳ９３４に移行して、データブロックａ（ｋ），ｂ（ｎ）のデータを乗累算し、ステップＳ９３６に移行して、ｋ＝Ｋまでのａ（ｋ）について処理が完了したか否かを判定し、処理が完了したと判定したとき（Ｙｅｓ）は、ステップＳ９３８に移行して、乗累算結果をスケーリングし、データブロックｒ（ｎ）に書き込み、ステップＳ９４０に移行する。
ステップＳ９４０では、スケーリングに要したシフト数と中間結果スケールファクタから乗累算結果のグループスケールファクタを算出し書き込み（例えば、両者の加算）、ステップＳ９４２に移行して、データブロックｒ（ｎ）の書込位置を次のデータグループに設定し、ステップＳ９４４に移行して、データブロックｒ（ｎ）のブロックスケールファクタとグループスケールファクタとを比較し、絶対値最大のデータを含む方のスケールファクタにブロックスケールファクタを更新し、ステップＳ９４６に移行する。
ステップＳ９４６では、ｎ＝Ｎまでのｒ（ｎ）について処理が完了したか否かを判定し、処理が完了したと判定したとき（Ｙｅｓ）は、ステップＳ９４８に移行して、データブロックｒ（ｎ）のブロックスケールファクタを格納し、一連の処理を終了して元の処理に復帰させる。
一方、ステップＳ９４６で、ｎ＝Ｎまでのｒ（ｎ）について処理が完了していないと判定したとき（Ｎｏ）は、ステップＳ９５０に移行して、データブロックｂ（ｎ）について、データブロックｒ（ｎ）の現在のｎの値に対応するデータグループに読込位置を設定し、ステップＳ９２０に移行する。
一方、ステップＳ９３６で、ｋ＝Ｋまでのａ（ｋ）について処理が完了していないと判定したとき（Ｎｏ）は、ステップＳ９２２に移行する。
また、上記実施の形態においては、ブロックフローティング変数を用いて加算式を記述したソースプログラムをコンパイルするように構成したが、これに限らず、上記のように、ブロックフローティング変数および固定小数点変数を用いた乗算（図８および図９）の例と同じ要領で、ブロックフローティング変数および固定小数点変数を用いて加算式を記述したソースプログラムをコンパイルするように構成してもよい。
この場合において、ステップＳ１０８は、請求の範囲第２２、第２３、第２９、第５９、第６０若しくは第６６項記載の演算式検出手段、または請求の範囲第９６、第９７若しくは第１０３項記載の演算式検出ステップに対応し、ステップＳ１１０は、請求の範囲第２２ないし第２４、第２９、第５９ないし第６１若しくは第６６項記載の演算式展開手段、または請求の範囲第９６ないし第９８若しくは第１０３項記載の演算式展開ステップに対応している。また、ステップＳ１１６は、請求の範囲第２９若しくは第６６項記載の命令コード埋込手段、請求の範囲第１０３項記載の命令コード埋込ステップ、請求の範囲第２２若しくは第５９項記載のオブジェクトコード変換手段、または請求の範囲第９６項記載のオブジェクトコード変換ステップに対応している。
また、上記実施の形態においては、ブロックフローティング方式による加算を実現するために、ブロックフローティング変数を用いて加算式を記述したソースプログラムをコンパイルするように構成したが、これに限らず、ブロックフローティング方式による減算を実現するために、上記実施の形態と同じ要領で、ブロックフローティング変数を用いて減算式を記述したソースプログラムをコンパイルするように構成することもできる。
また、上記実施の形態においては、ブロックフローティング方式による乗算（乗累算のうち乗算の部分）を実現するために、ブロックフローティング変数を用いて乗算式を記述したソースプログラムをコンパイルするように構成したが、これに限らず、ブロックフローティング方式による除算を実現するために、上記実施の形態と同じ要領で、ブロックフローティング変数を用いて除算式を記述したソースプログラムをコンパイルするように構成することもできる。
また、上記実施の形態においては、ブロックフローティング変数を、上式（３）に示すように、変数名、データグループ数および各データグループのデータ数を明示することにより定義したが、これに限らず、データグループ数および各データグループのデータ数を固定的または共通に定義するようにすれば、ブロックフローティング変数を、データグループ数および各データグループのデータ数を明示することなく、変数名のみを明示することにより定義することもできる。これにより、ソースプログラムの記述をさらに簡素化することができる。
また、上記実施の形態においては、コンピュータ１００が実行可能なオブジェクトプログラムを生成するように構成したが、これに限らず、コンピュータ１００において、図１４に示すようなデジタル・シグナル・プロセッサ（以下、単にＤＳＰという。）が実行可能なオブジェクトプログラムを生成するように構成してもよい。図１４の例では、コンピュータ１００でコンパイルしたオブジェクトプログラムを制御ロジックが実行する。図１４は、ＤＳＰの構成を示すブロック図である。
また、上記実施の形態においては、加算対象となる２つのデータブロックのうちブロックスケールファクタの小さいものの各データに対して、右シフトを行うことにより桁位置を一致させるように構成したが、これに限らず、加算対象となる２つのデータブロックのうちブロックスケールファクタの大きいものの各データに対して、左シフトを行うことにより桁位置を一致させるように構成してもよい。
この場合において、ステップＳ３０６〜Ｓ３１６またはステップＳ３４２は、請求の範囲第３５、第７２または第１０９項記載の第１スケーリング処理に対応し、ステップＳ３１８〜Ｓ３２６またはステップＳ３４０は、請求の範囲第３５、第７２または第１０９項記載の第２スケーリング処理に対応している。また、ステップＳ３０６〜Ｓ３２８は、請求の範囲第３５、第７２または第１０９項記載の第１スケール補正処理に対応し、ステップＳ３４０，Ｓ３４２，Ｓ３２８は、請求の範囲第３５、第７２または第１０９項記載の第２スケール補正処理に対応している。
また、上記実施の形態において、図３のフローチャートに示す処理を実行するにあたってはいずれも、ＲＯＭ３２にあらかじめ格納されている制御プログラムを実行する場合について説明したが、これに限らず、これらの手順を示したプログラムが記憶された記憶媒体から、そのプログラムをＲＡＭ３４に読み込んで実行するようにしてもよい。
ここで、記憶媒体とは、ＲＡＭ、ＲＯＭ等の半導体記憶媒体、ＦＤ、ＨＤ等の磁気記憶型記憶媒体、ＣＤ、ＣＤＶ、ＬＤ、ＤＶＤ等の光学的読取方式記憶媒体、ＭＯ等の磁気記憶型／光学的読取方式記憶媒体であって、電子的、磁気的、光学的等の読み取り方法のいかんにかかわらず、コンピュータで読み取り可能な記憶媒体であれば、あらゆる記憶媒体を含むものである。
また、上記実施の形態においては、本発明に係るコンパイル装置およびコンパイルプログラム、並びにオブジェクトプログラム生成方法を、図１に示すように、コンピュータ１００において、ブロックフローティング方式による演算式を記述したソースプログラムを翻訳し、コンピュータ１００が実行可能なオブジェクトプログラムを生成する場合について適用したが、これに限らず、本発明の主旨を逸脱しない範囲で他の場合にも適用可能である。
産業上の利用可能性
以上説明したように、本発明に係る請求の範囲第１ないし第３項記載のコンパイル装置によれば、ブロック浮動小数点型変数をコンパイルすることができるという効果が得られる。
さらに、本発明に係る請求の範囲第２、第３、第５ないし第２１項記載のコンパイル装置によれば、ソースプログラム上で構造体の定義や特殊関数の作成等のプログラミング作業を行うことなく、ブロックフローティング変数を用いて演算式を記述するだけでブロックフローティング方式による演算を実現することができる。したがって、従来に比して、ソースプログラムにおける演算の記述を比較的容易に行うことができるとともに、ソースプログラムの記述を比較的簡素化することができるという効果も得られる。
さらに、本発明に係る請求の範囲第４ないし第６項記載のコンパイル装置によれば、階層的ブロック浮動小数点型変数をコンパイルすることができるという効果が得られる。
さらに、本発明に係る請求の範囲第２２ないし第２４項記載のコンパイル装置によれば、ソースプログラム上で構造体の定義や特殊関数の作成等のプログラミング作業を行うことなく、ブロックフローティング変数を用いて演算式を記述するだけでブロックフローティング方式による演算を実現することができる。したがって、従来に比して、ソースプログラムにおける演算の記述を比較的容易に行うことができるとともに、ソースプログラムの記述を比較的簡素化することができるという効果が得られる。
さらに、本発明に係る請求の範囲第２５ないし第２７項記載のコンパイル装置によれば、ソースプログラム上で構造体の定義や特殊関数の作成等のプログラミング作業を行うことなく、ブロックフローティング変数を用いて乗算式または除算式を記述するだけでブロックフローティング方式による乗算または除算を実現することができる。したがって、従来に比して、ソースプログラムにおける演算の記述を比較的容易に行うことができるとともに、ソースプログラムの記述を比較的簡素化することができるという効果が得られる。
さらに、本発明に係る請求の範囲第２８ないし第３０項記載のコンパイル装置によれば、ソースプログラム上で構造体の定義や特殊関数の作成等のプログラミング作業を行うことなく、ブロックフローティング変数を用いて加算式または減算式を記述するだけでブロックフローティング方式による加算または減算を実現することができる。したがって、従来に比して、ソースプログラムにおける演算の記述を比較的容易に行うことができるとともに、ソースプログラムの記述を比較的簡素化することができるという効果が得られる。また、オブジェクトプログラムの実行過程では、１つのデータについて１回のスケーリングにより、データブロック内での正規化およびデータブロック間での正規化を同時に行うことができるので、演算処理を比較的簡素化することができるという効果も得られる。
さらに、本発明に係る請求の範囲第３１ないし第３７項記載のコンパイル装置によれば、ソースプログラム上で構造体の定義や特殊関数の作成等のプログラミング作業を行うことなく、ブロックフローティング変数を用いて乗累算式を記述するだけでブロックフローティング方式による乗累算を実現することができる。したがって、従来に比して、ソースプログラムにおける演算の記述を比較的容易に行うことができるとともに、ソースプログラムの記述を比較的簡素化することができるという効果が得られる。また、オブジェクトプログラムの実行過程では、スケーリングを乗算前に行うので、桁落ちを防止するための余分なビット長を変数に割り当てなくてすみ、演算時に必要なデータ容量を比較的低減することができるとともに、ビット長の変換を伴わないので、演算効率が低下する可能性を比較的低減することができるという効果も得られる。
一方、本発明に係る請求の範囲第３８ないし第４０項記載のコンパイルプログラムによれば、請求の範囲第１項記載のコンパイル装置と同等の効果が得られる。
さらに、本発明に係る請求の範囲第３９、第４０、第４２ないし第５８項記載のコンパイルプログラムによれば、請求の範囲第２項記載のコンパイル装置と同等の効果も得られる。
さらに、本発明に係る請求の範囲第４１ないし第４３項記載のコンパイルプログラムによれば、請求の範囲第４項記載のコンパイル装置と同等の効果が得られる。
さらに、本発明に係る請求の範囲第５９ないし第６１項記載のコンパイルプログラムによれば、請求の範囲第２２項記載のコンパイル装置と同等の効果が得られる。
さらに、本発明に係る請求の範囲第６２ないし第６４項記載のコンパイルプログラムによれば、請求の範囲第２５項記載のコンパイル装置と同等の効果が得られる。
さらに、本発明に係る請求の範囲第６５ないし第６７項記載のコンパイルプログラムによれば、請求の範囲第２８項記載のコンパイル装置と同等の効果が得られる。
さらに、本発明に係る請求の範囲第６８ないし第７４項記載のコンパイルプログラムによれば、請求の範囲第３１項記載のコンパイル装置と同等の効果が得られる。
一方、本発明に係る請求の範囲第７５ないし第７７項記載のオブジェクトプログラム生成方法によれば、請求の範囲第１項記載のコンパイル装置と同等の効果が得られる。
さらに、本発明に係る請求の範囲第７６、第７７、第７９ないし第９５項記載のオブジェクトプログラム生成方法によれば、請求の範囲第２項記載のコンパイル装置と同等の効果も得られる。
さらに、本発明に係る請求の範囲第７８ないし第８０項記載のオブジェクトプログラム生成方法によれば、請求の範囲第４項記載のコンパイル装置と同等の効果が得られる。
さらに、本発明に係る請求の範囲第９６ないし第９８項記載のオブジェクトプログラム生成方法によれば、請求の範囲第２２項記載のコンパイル装置と同等の効果が得られる。
さらに、本発明に係る請求の範囲第９９ないし第１０１項記載のオブジェクトプログラム生成方法によれば、請求の範囲第２５項記載のコンパイル装置と同等の効果が得られる。
さらに、本発明に係る請求の範囲第１０２ないし第１０４項記載のオブジェクトプログラム生成方法によれば、請求の範囲第２８項記載のコンパイル装置と同等の効果が得られる。
さらに、本発明に係る請求の範囲第１０５ないし第１１１項記載のオブジェクトプログラム生成方法によれば、請求の範囲第３１項記載のコンパイル装置と同等の効果が得られる。
【図面の簡単な説明】
図１は、コンピュータの構成を示すブロック図である。図２は、ブロックフローティング方式のデータ構造を示す図である。図３は、ブロックフローティングコンパイル処理を示すフローチャートである。図４は、ステップＳ１０６で展開する命令コードにより構成される処理の一例を示すフローチャートである。図５は、ステップＳ１１０で展開する命令コードにより構成される処理の一例を示すフローチャートである。図６は、ブロックフローティング方式による乗算式を記述したソースプログラムである。
図７は、図６のソースプログラムをコンパイルして得られたオブジェクトプログラムである。図８は、ブロックフローティング方式による乗算式を記述したソースプログラムである。図９は、図８のソースプログラムをコンパイルして得られたオブジェクトプログラムである。図１０は、ブロックフローティング方式による乗累算式を記述したソースプログラムである。図１１は、図１０のソースプログラムをコンパイルして得られたオブジェクトプログラムである。図１２は、ブロックフローティング方式による乗累算式を記述したソースプログラムである。
図１３は、図１２のソースプログラムをコンパイルして得られたオブジェクトプログラムである。図１４は、ＤＳＰの構成を示すブロック図である。
【図１】
2003032157.tif 000010
【図２】
2003032157.tif 000011
【図３】
2003032157.tif 000012
【図４】
2003032157.tif 000013
【図５】
2003032157.tif 000014
【図６】
2003032157.tif 000015
【図７】
2003032157.tif 000016
【図８】
2003032157.tif 000017
【図９】
2003032157.tif 000018
【図１０】
2003032157.tif 000019
【図１１】
2003032157.tif 000020
【図１２】
2003032157.tif 000021
【図１３】
2003032157.tif 000022
【図１４】
2003032157.tif 000023
【国際調査報告】
2003032157.tif 000024
2003032157.tif 000025
2003032157.tif 000026
2003032157.tif 000027