(57)【要約】【課題】回路規模の小さなアクセラレータを用いて演算器の稼働率を高める。【解決手段】アクセラレータ１０３では、命令読込部１１０がＳＲＡＭブロック１０４に記憶された命令列から、順次、命令を読み込み、読み込まれた命令のアドレスフィールドに従ってデータ読込部１０９がＳＲＡＭブロック１０４からデータを読み込み、データ転送部１１２が命令の種別に従ってデータ読込部１０９が読み込んだデータをＡＬＵ１１１へ転送し、ＡＬＵ１１１から出力される演算結果を、順次、書込部１１３がＳＲＡＭブロック１０４に書き込む。【選択図】図１
2020173717.tif 000002
【特許請求の範囲】
【請求項１】
記憶手段に記憶された命令列から、順次、命令を読み込む命令読込部と、
前記命令読込部が読み込んだ命令のアドレスフィールドに従って前記記憶手段からデータを読み込むデータ読込部と、
前記命令読込部が読み込んだ命令の種別に従って前記データ読込部が読み込んだデータを演算手段へ転送するデータ転送部と、
前記演算手段から出力される演算結果を、順次、前記記憶手段に書き込む書込部と、を備えることを特徴とする情報処理ユニット。
【請求項２】
前記命令読込部、前記データ読込部および前記書込部はそれぞれキューとして構成されていることを特徴とする請求項１に記載の情報処理ユニット。
【請求項３】
前記書込部の書き込みアドレスが指定の値を通過するまで、次のデータ読み出しを抑制する命令があることを特徴とする請求項１又は２に記載の情報処理ユニット。
【請求項４】
前記読み込み抑制手段は、所定の演算結果が前記記憶手段に書き込まれる前に前記所定の演算結果を参照する命令を検出した場合に、前記データ読込部への次のデータの読み込みを抑制する命令を前記命令列に挿入することを特徴とする請求項３に記載の情報処理ユニット。
【請求項５】
前記記憶手段の所定のアドレスに書き込まれた所定の演算結果が後の演算結果によって上書きされるまでの期間を超えて前記所定の演算結果を参照する命令を検出した場合に、前記所定の演算結果を参照可能とする期間を延長する命令を前記命令列に挿入する命令挿入手段を備えることを特徴とする請求項１乃至４のいずれか１項に記載の情報処理ユニット。
【請求項６】
前記命令読込部、前記データ読込部および前記書込部の動作を制御する制御手段を有することを特徴とする請求項１乃至５のいずれか１項に記載の情報処理ユニット。
【請求項７】
情報処理ユニットと、
前記情報処理ユニットで動作するプログラムを記憶する第１の記憶手段と、
前記情報処理ユニットの動作を制御する制御手段と、
前記情報処理ユニットからの命令とデータに基づいて所定の演算を行う演算手段と、
前記命令、前記データおよび前記演算手段による演算結果を記憶する第２の記憶手段と、を備える情報処理装置であって、
前記情報処理ユニットは、
前記第２の記憶手段から、順次、前記命令を読み込む命令読込部と、
前記命令のアドレスフィールドに従って前記第２の記憶手段からデータを読み込むデータ読込部と、
前記命令読込部が読み込んだ命令の種別に従って前記データ読込部が読み込んだデータを前記演算手段へ転送するデータ転送部と、
前記演算手段から出力される演算結果を、順次、前記第２の記憶手段に書き込む書込部と、を有することを特徴とする情報処理装置。
【請求項８】
前記命令読込部、前記データ読込部および前記書込部はそれぞれキューとして構成されていることを特徴とする請求項７に記載の情報処理装置。
【請求項９】
記憶手段に記憶された命令列から、順次、命令を読み込むステップと、
読み込まれた前記命令のアドレスフィールドに従って前記記憶手段からデータを読み込むステップと、
前記命令の種別に従って、読み込まれた前記データを読み込まれた順に演算手段へ転送するステップと、
前記演算手段から出力される演算結果を、順次、前記記憶手段に書き込むステップと、を有することを特徴とする情報処理方法。
【請求項１０】
前記記憶手段に前記演算結果を書き込むための書き込みアドレスが指定の値を通過するまで次のデータ読み出しを抑制する命令を挿入するステップを有することを特徴とする請求項９に記載の情報処理方法。
【請求項１１】
前記データの読み込みを抑制する命令は、所定の演算結果が前記記憶手段に書き込まれる前に当該所定の演算結果を参照する命令を検出した場合に、前記命令列に挿入されることを特徴とする請求項１０に記載の情報処理方法。
【請求項１２】
前記記憶手段の所定のアドレスに記憶された所定の演算結果が後の演算結果によって上書きされるまでの期間を超えて前記所定の演算結果を参照する命令を検出した場合に、前記所定の演算結果を参照可能とする期間を延長する命令を挿入するステップを有することを特徴とする請求項９乃至１１のいずれか１項に記載の情報処理方法。
【請求項１３】
請求項９乃至１２のいずれか１項に記載のステップをコンピュータに実行させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算式をプログラムとして読み込んで実行するプログラマブルな情報処理ユニットを備える情報処理装置に関する。
【背景技術】
【０００２】
コンピュータプログラムでの算術演算は、ＣＰＵ内部の汎用レジスタを参照して演算した結果を汎用レジスタに代入するという基本命令を組み合わせて実行される。このとき、ＣＰＵでの処理をパイプライン化して、見掛け上、１命令を１サイクルで、又は、１サイクルで複数の命令を実行することが可能な構成とした場合でも、汎用レジスタに代入したデータが再び参照可能になるためにはレイテンシーが存在する。そのため、代入から参照までの待ち合わせ（以下「データハザード」という）が発生してしまう。特にレイテンシーの大きな浮動小数点演算では、データハザードによる演算器の稼働率の低下は処理性能を著しく低下させてしまう。
【０００３】
この問題に対して、例えば特許文献１には、命令列の依存関係を検出し、依存関係が保持可能な状態になるまで回路の一部を停止させる技術が開示されている。また、特許文献２には、データ・コヒーレンシを侵害する可能性のあるアウト・オブ・オーダー命令を検出して、リオーダーする手段が開示されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０００−９９３２８号公報
【特許文献２】特開平１１−２７２４６６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、上記従来技術のアウト・オブ・オーダー、スーパー・スカラー、レジスタ・リネーミング等はどれも、大規模で複雑な回路となってしまうだけでなく、速度低下の原因となる汎用レジスタ間の参照と代入の間で発生するデータハザードの発生を完全に解決する事が本質的に困難である。
【０００６】
本発明は、演算器との間でデータのやりとりを行う情報処理ユニットに大規模な回路を用いることなく、演算器の稼働率を向上させる技術を提供することを目的とする。
【課題を解決するための手段】
【０００７】
本発明に係る情報処理ユニットは、記憶手段に記憶された命令列から、順次、命令を読み込む命令読込部と、前記命令読込部が読み込んだ命令のアドレスフィールドに従って前記記憶手段からデータを読み込むデータ読込部と、前記命令読込部が読み込んだ命令の種別に従って前記データ読込部が読み込んだデータを演算手段へ転送するデータ転送部と、前記演算手段から出力される演算結果を、順次、前記記憶手段に書き込む書込部と、を備えることを特徴とする。
【発明の効果】
【０００８】
本発明によれば、演算器との間でデータのやりとりを行う情報処理ユニットの回路規模を小さくしながら、演算器の稼働率を向上させることができる。
【図面の簡単な説明】
【０００９】
【図１】第１実施形態に係る情報処理装置の基本構成を示すブロック図である。
【図２】ＡＬＵが扱うデータの構成と、ＡＬＵのブロック図である。
【図３】アクセラレータの命令のビット構成を説明する図である。
【図４】コントロールレジスタの構成とメモリマップの例を示す図である。
【図５】演算式をプログラムに分解して実行する手法を説明する図である。
【図６】図５（ｅ）のプログラムのアッセンブラ表記及びタイミングチャートである。
【図７】中間データを用いた演算処理を説明する図である。
【図８】３つのアクセラレータで３つのＡＬＵを共有する回路のブロック図である。
【図９】アービターの回路図である。
【図１０】アービターの動作の一例を示すタイミングチャートである。
【図１１】アクセラレータが備える書込部の回路図である。
【図１２】アクセラレータで実行されるプログラムを生成するコンパイラのフローチャートである。
【図１３】プログラムの展開、分解、並べ替えの例を示す図である。
【図１４】第２実施形態に係る情報処理装置の部分的なブロック図である。
【図１５】第３実施形態で中間コードを用いてアクセラレータで実行可能な機械語のプログラムを生成する工程を説明するフローチャートである。
【図１６】中間コードのビットフィールドを説明する図である。
【図１７】第４実施形態に係る情報処理装置のブロック図である。
【発明を実施するための形態】
【００１０】
以下、本発明の実施形態について、添付図面を参照して詳細に説明する。
【００１１】
＜第１実施形態＞
図１は、本発明の実施形態に係る情報処理ユニットとしてのアクセラレータ１０３を備える情報処理装置１００の基本構成を示すブロック図である。情報処理装置１００は、ＣＰＵ１０１、ＤＲＡＭ１０２、アクセラレータ１０３、ＳＲＡＭブロック１０４、ＡＬＵ１１１及びデータ転送部１１２を備える。図１には、アクセラレータ１０３及びＡＬＵ１１１を１つずつ備える構成が示されているが、後述するように、アクセラレータ１０３とＡＬＵ１１１とをそれぞれ複数備える構成とすることもできる。
【００１２】
ＣＰＵは、Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔの略称である。ＤＲＡＭは、Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙの略称である。ＳＲＡＭは、Ｓｔａｔｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙの略称である。ＡＬＵは、Ａｒｉｔｈｍｅｔｉｃ  Ｌｏｇｉｃ  Ｕｎｉｔの略称である。
【００１３】
ＣＰＵ１０１は、主たる制御回路であり、情報処理装置１００の全体的な制御を行うプロセッサである。ＤＲＡＭ１０２は、ＣＰＵ１０１上で動作するプログラムとアクセラレータ１０３で動作させるプログラム等を格納する記憶媒体である。
【００１４】
ＳＲＡＭブロック１０４は、ＣＰＵ１０１とアクセラレータ１０３の動作に必要なデータやＡＬＵ１１１による演算結果等を記憶する記憶媒体である。ＳＲＡＭブロック１０４は、複数のＳＲＡＭを備える。ＣＰＵ１０１とアクセラレータ１０３はＳＲＡＭブロック１０４へアクセス可能である。ＡＬＵ１１１は、浮動小数点演算を行う演算装置である。
【００１５】
図２（ａ）は、ＡＬＵ１１１が行う演算に用いられる３２ビットの単精度のデータの構成を説明する図である。ここでは、ＡＬＵ１１１は、単精度の浮動小数点を計算する。３２ビットの単精度のデータは、ビットごとに役割が決まっており、符号ビット（ＳＩＧＮ）２００、指数ビット（ＥＸＰＯＮＥＮＴ）２０１及び仮数ビット（ＦＲＡＣＴＩＯＮ）２０２から構成される。
【００１６】
図２（ｂ）は、ＡＬＵ１１１のブロック図である。ＡＬＵ１１１は、データの入力を行うためのＡ入力部２０３及びＢ入力部２０４と、演算結果を出力するための出力部２０８を有する。また、ＡＬＵ１１１は、浮動小数点演算を行うための仮数部２０５、指数部２０６及び符号部２０７を有する。仮数部２０５、指数部２０６及び符号部２０７は、Ａ入力部２０３とＢ入力部２０４から入力されたデータに対して丸めによる桁上がり等の必要な情報を交換しながら演算を行い、演算結果は出力部２０８から出力される。
【００１７】
仮数部２０５、指数部２０６及び符号部２０７にはそれぞれ５つのフリップフロップが挿入されている。そのため、ＡＬＵ１１１では、Ａ入力部２０３とＢ入力部２０３からデータが入力された後、仮数部２０５、指数部２０６及び符号部２０７による演算結果は、５サイクル後に出力部２０８に到達する。
【００１８】
ＡＬＵ１１１での動作周波数を高めるためには、フリップフロップ間に生じるゲート遅延を短くする必要があるため、小さな演算単位ごとにフリップフロップを挿入して設計することとなる。ＡＬＵ１１１では、１つの演算に５サイクルかかるとする。１サイクルごとに有効なデータ入力があると１サイクルごとに有効な出力が得られる。つまり、１サイクルで１つの演算を行うことができる。
【００１９】
なお、ＡＬＵ１１１に有効なデータを入力することができないサイクルは無駄なサイクルとなる。したがって、有効なデータを入力することができる割合が、ＡＬＵ１１１の稼働率となる。本発明は、ＡＬＵ１１１の稼働率を高めることを課題の１つとしており、後述するように、アクセラレータは小さな回路構成でＡＬＵ１１１の稼働率を高めることを可能とする。
【００２０】
図１の説明に戻る。アクセラレータ１０３は、ＣＰＵ１０１からアクセラレータ１０３の動作を制御するためのコントロールレジスタ１０５を有する。コントロールレジスタ１０５は、メモリマップドＩＯとなっており、データバスによってＣＰＵ１０１のアドレスバスと接続されている。
【００２１】
アクセラレータ１０３は、命令読込部１１０、データ読込部１０９、書込部１１３及び比較部１１６を有する。命令読込部１１０、データ読込部１０９及び書込部１１３は、読み込んだ要素を入ってきた順に一列に並べ、先に入れた要素から順に取り出す規則で要素の出し入れを行うキュー（ＱＵＥＵＥ）として動作するように構成されている。比較部１１６の機能については後述する。
【００２２】
命令読込部１１０は、ＳＲＡＭブロック１０４から命令列を読み込む。命令読込部１１０は、ＷＡＩＴアドレス１０６を有する。ＷＡＩＴアドレス１０６には、後述のＷＡＩＴ命令により指定されるアドレスの値が入力される。データ読込部１０９は、演算に用いるデータをＳＲＡＭブロック１０４から読み込む。命令読込部１１０とデータ読込部１０９とは、それぞれ独立したアドレスバスとデータバスを持つバスマスターである。ＳＲＡＭブロック１０４の複数のＳＲＡＭはそれぞれ、異なるアドレスに配置され、命令列とデータを別のＳＲＡＭから読み込むことができるように配置される。ＳＲＡＭブロック１０４の複数のＳＲＡＭはそれぞれ、同一サイクルにデータと命令の両方を読み込むことが可能である。
【００２３】
データ転送部１１２は、ＡＬＵ１１１へ命令とデータとを転送する。ＡＬＵ１１１にデータが転送されると、一定サイクル後にＡＬＵ１１１から演算結果が書込部１１３へ出力される。書込部１１３は、ＡＬＵ１１１から演算結果を受信すると、受信した演算結果をＳＲＡＭブロック１０４に書き込む。書込部１１３は、命令読込部１１０やデータ読込部１０９と同様に、独立したアドレスバスとデータバスを持つバスマスターであり、命令読込部１１０及びデータ読込部１０９と同一サイクルでデータ書き込みを行うことができる。
【００２４】
書込部１１３は、書き込みアドレス部１１４を有する。演算結果がＳＲＡＭブロック１０４に書き込まれる際のＳＲＡＭブロック１０４でのアドレスの値は、書き込みアドレス部１１４から出力される。書き込みアドレス部１１４に書き込まれるアドレスの値は、後述する図７の‘ＳＴＯＲＥ  ＡＤＤＲＥＳＳ’で示されるように、ＳＲＡＭブロック１０４に書き込まれる演算結果に対応して、順次、書き換えられる。
【００２５】
図３（ａ）は、アクセラレータ１０３の命令のビット構成を説明する図である。命令は１６ビット長のデータであり、ビット１１〜ビット１５は、命令の種別を表すオペコード（ＯＰＥＣＯＤＥ）フィールド３０１である。ビット９，１０は、アクセスするＳＲＡＭブロック１０４のベースアドレス（ＢＡＳＥ  ＡＤＤＲＥＳＳ）の種類を指定するベースアドレスインデックス（ＢＡＳＥ  ＡＤＤＲＥＳＳ  ＩＮＤＥＸ）フィールド３０２である。ビット０〜８は、データのアドレスを表すオフセットアドレス（ＯＦＦＳＥＴ  ＡＤＤＲＥＳＳ）フィールド３０３である。９ビットのオフセットアドレスフィールド３０３では０〜５１１を表現することができるが、単精度浮動小数点は３２ビットなので、ここでは、オフセットアドレスフィールド３０３は４バイト単位のインデックス値として扱う。つまり、アクセス可能なのは、ベースアドレスに対して１６進で０〜７ＦＣである。ベースアドレスは４つあり、各ベースアドレスはＣＰＵ１０１がコントロールレジスタ１０５へ書き込んで指定する。
【００２６】
図３（ｂ）は、命令のアッセンブラ表記（ニーモニック）である。命令の種類には、算術演算子の加減乗除命令、終了命令、その他幾つかの制御命令がある。命令は、実行する演算を指定するオペコード部３０４、Ａ又はＢで指定される被演算子３０５、データを指定するラベル３０６から構成される。
【００２７】
アクセラレータ１０３の命令の基本的な構造は、被演算子３０５にラベル３０６で示すアドレスからデータを読み込んだ上で、オペコード部３０４が指定する算術演算を行うというものである。例えば、‘ｉ÷ｊ’という演算は、‘ＦＮＯＰ  Ａ，ｉ’で‘Ａ’に‘ｉ’を取り込み、‘ＦＤＩＶ  Ｂ，ｊ’で‘Ｂ’に‘ｊ’を取り込んだ上で、‘Ａ÷Ｂ’を行うという２つの命令で実現される。なお、アクセラレータ１０３の命令には、演算結果を格納するアドレスを示すフィールドは存在しない。これは、書込部１１３は、演算結果を順次連続アドレスに書き込む構造となっており、演算結果を格納するアドレスを選ぶことができないからである。
【００２８】
図４は、アクセラレータ１０３におけるコントロールレジスタ１０５とＳＲＡＭブロック１０４のメモリマップの構成を示す図である。コントロールレジスタ１０５は、スタートレジスタ４１４、プログラムアドレス４１５、第１ベースアドレス４０１、第２ベースアドレス４０２、ワークベースアドレス４０３及び出力ベースアドレス４０４を有する。
【００２９】
第１ベースアドレス４０１は共通データ４０５を指定する。第２ベースアドレス４０２はアクセラレータ０専用のパラメータエリア４０９を指定する。ワークベースアドレス４０３は、アクセラレータ０専用のワークエリア４１０を指定する。なお、ここでは、アクセラレータ１０３として、３つのアクセラレータ０，１，２を備える構成を想定している。ワークエリア４１０は、５１２個分のデータを確保することが可能となっている。
【００３０】
プログラムアドレス４１５は、プログラムの開始アドレス４１３を指定している。スタートレジスタ４１４に‘１’が書き込まれると、アクセラレータ０はプログラムの読み出しを開始し、終了命令を読み込むまで、順次、プログラムを実行する。
【００３１】
図５を参照して、演算式をプログラムに分解して実行する手法について説明する。図５（ａ）は、演算式の一例を示している。図５（ｂ）は、図５（ａ）の演算式を解くプログラムをＣ言語で示したリストであり、ｎ＝３の配列に対する３重ループで積和演算を行うプログラムを示している。図５（ｃ）は、図５（ｂ）に示したプログラムの変形例を示しており、ｂ［ｋ］［ｊ］のアドレッシングをまとめることによりアクセスを減らしたものである。
【００３２】
図５（ｄ）は、プログラムがアクセスするデータにラベルをつけて展開したものを示している。図５（ｃ），（ｃ）のＣ言語で書かれたプログラムではｉ，ｊ，ｋを演算しているが、ｉ，ｊ，ｋがどのような数値に変化するかはコンパイル時には決まっているため、それぞれを固定アドレスに予め展開することができる。図５（ｄ）の展開式では、１つの式に加算を表す‘＋’と乗算を表す‘×（図５では‘＊’）’の２つの演算子があるため、命令に展開するためには中間ノードとなる変数（以下「中間変数」という）を介在させる必要がある。
【００３３】
図５（ｅ）は、中間変数に対してラベルを割り当てて順番を並び替えたものを示している。図５（ｅ）では、００１行目から００９行目まで乗算が続き、その結果を加算する命令は０１０行目からとなっている。最初の中間変数ＴＭＰ０００が参照されるのは０１０行目であり、また、変数Ｃ００に加算してＣ００に戻す式は、新しい中間変数ＴＭＰ０１０に格納される。０３８行目で再びＣ００へ加算するときには、中間変数ＴＭＰ０１０を参照して新たな中間変数ＴＭＰ０３８へ代入する。このような順序に展開して演算順序を並び替えることにより、代入から参照までのサイクル数を伸ばしているため、アクセラレータ１０３ではデータハザードは発生しない。
【００３４】
図６（ａ）は、図５（ｅ）のプログラムをアッセンブラ表記にして示す図である。０００行目は、被演算子Ｂに変数Ｂ００をロードするだけで、算術演算を行わない。００１行目は、被演算子Ａに変数Ａ００をロードして、‘Ａ×Ｂ’の乗算を実行する。変数Ａ００，Ｂ００はパラメータエリア４０９に配置されており、中間変数はワークエリア４１０に配置される。なお、アッセンブラ表記上、中間変数ＴＭＰ０００を格納先として指定しているように見えるが、前述の通り、命令には格納先を指定するアドレスを示すフィールドは存在せず、ＴＭＰ０００というラベルに格納先のアドレスが関連付けられる。００２行目は、被演算子Ａに変数Ａ１０をロードして、‘Ａ×Ｂ’の乗算を実行する。
【００３５】
図６（ｂ）は、図６（ａ）のプログラム実行時のデータ転送部１１２での入出力を説明するタイミングチャートである。００１サイクル目で被演算子ＢにＢ００がロードされ、００２サイクル目で被演算子ＡにＡ００がロードされて乗算のリクエスト信号であるＦＭＵＬが‘１’になり、これにより、乗算のＡＬＵに変数Ａ００と変数Ｂ００が出力される。このように、００２サイクルから００４サイクルまで連続的に転送が発生している。なお、乗算のＡＬＵとは、例えば、後述する図８に示されるＡＬＵ８０５である。
【００３６】
被演算子Ａ，Ｂの両方にデータを読み込むのではなく、被演算子Ａ，Ｂの一方のデータをロードする命令構造においても連続して演算が発生するのは、一方が共通となるように命令列を並び替えているからである。このような変数の共通化は多くの多項式で可能であり、コンパイラが命令列の並び替えを行う。００２サイクル目で受理された演算に対する演算結果（中間変数ＴＭＰ００１）は、００７サイクル目でＦＭＵＬ＿Ｑに出力され、同時に、有効なデータであることを示すＶＡＬＩＤ信号（ＦＭＵＬ＿ＶＡＬＩＤ）も出力される。
【００３７】
図７は、演算結果（中間変数）を連続アドレスに順次格納しながら演算を行う状況を説明する図である。図７（ａ）〜（ｄ）では、図４に準じて、中間変数を格納するアクセラレータ０専用のワークエリア４１０がアクセラレータ０のワークベースアドレス４０３によって指定されているものとする。なお、図７（ａ）〜（ｄ）には、説明の便宜上、演算内容をプログラムとニーモニックで示しているが、ＤＲＡＭ１０２にはアクセラレータ０で実行可能な機械語のプログラムが格納されていればよい。
【００３８】
図７（ａ）に示すように、アクセラレータ０が最初の命令７０１の‘ＦＮＯＰ  Ｂ，Ｂ００’を実行すると、ワークエリア４１０のアドレス０００番地に意味のないデータが格納される。アクセラレータ０が次の命令７０２の‘ＦＭＵＬ  ＴＭＰ０００，Ａ，Ａ００’を実行すると、００４番地に演算結果である中間変数ＴＭＰ０００が格納される。アクセラレータ０が次の命令７０３の‘ＦＭＵＬ  ＴＭＰ００１，Ａ，Ａ１０’を実行すると、００８番地に演算結果である中間変数ＴＭＰ００１が格納される。命令７０４の‘ＦＮＯＰ  Ａ，ＴＭＰ０００’で中間変数ＴＭＰ０００を被演算子Ａにロードする際には、命令のアドレスフィールドには００４番地を示す値００１が格納されている。
【００３９】
このように計算結果を順次格納していくと、ワークエリア４１０を最初から最後まで使い果たしてしまう。そのため、命令７０５の‘ＦＡＤＤ  ＴＭＰ５０１，Ａ，ＴＭＰ０００’が実行されると、演算結果は０００番地に格納されることになる。更に次の命令が実行されると、００４番地に格納されていた中間変数ＴＭＰ０００が上書きされてしまうことになる。このように、アクセラレータ０で扱う中間変数には生存期間があり、中間変数は５１１ステップのプログラム実行により生存期間を終えることとなる。換言すれば、中間変数は、ＳＲＡＭブロック１０４に記憶されている期間であれば参照可能である。
【００４０】
多くの場合、５１１ステップよりも長い生存期間は必要ないが、変数の生存期間を延長したい場合には、生存期間延長のための命令を用いる。例えば、図７（ｂ）において、命令７０６の‘ＦＡＤＤ  ＴＭＰ５０２，Ｂ，ＺＥＲＯ’では、中間変数ＴＭＰ０００に値０（ゼロ）を加算して、新たな演算結果である中間変数ＴＭＰ５０２を格納している。これにより、これ以降、中間変数ＴＭＰ０００は、中間変数ＴＭＰ５０２と名前を変えて生存し続けることが可能になる。変数の生存期間を延長する手法としては、ゼロを加算する手法に代えて、‘１’を乗算する手法を用いることもできる。
【００４１】
なお、図２（ｂ）を参照して説明したように、ＡＬＵ１１１から演算結果が出力されるまでに数サイクル、演算結果が書込部１１３に書き込まれた後、ＳＲＡＭブロック１０４に書き込まれて参照可能となるまでに数サイクルを要する。逆に、既存の中間変数を上書きしてしまう命令の後であっても、数サイクルは上書き前の変数を参照することができる。
【００４２】
図７（ｃ）において、命令７０７の‘ＦＡＤＤ  ＴＭＰ５０３，Ｂ，ＴＥＭＰ００１’は、既に上述した上書きを行う命令７０６が実行された後であるが、中間変数ＴＭＰ００１を参照している。ここで、代入結果をすぐに参照しなければならない場合には、‘ＷＡＩＴ  ＴＭＰ５０１’で表されるＷＡＩＴ命令７０８を用いて、参照可能になるまで待つことができる。ＷＡＩＴ命令は、アクセスしたい変数のアドレスの値を指定する命令である。
【００４３】
ＷＡＩＴ命令は、命令読込部１１０のＷＡＩＴアドレス１０６に値（参照アドレス）を入力して、比較部１１６を有効にする。比較部１１６は、書き込みアドレス部１１４のアドレスの値がＷＡＩＴアドレス１０６の値を通過したことを検出することができる。第１実施形態では、書き込みアドレス１１４の値はインクリメントする。したがって、書き込みアドレス１１４がＷＡＩＴアドレス１０６を通過するとは、書き込みアドレス１１４のほうがＷＡＩＴアドレス１０６よりも大きくなることを意味する。なお、書き込みアドレス１１４がディクリメントする構成で実施する場合、書き込みアドレス１１４の方がＷＡＩＴアドレス１０６よりも小さくなったことに応じて、書き込みアドレス１１４がＷＡＩＴアドレス１０６を通過したことを検出する。書き込みアドレス１１４が所定の範囲の終端に達すると初期値に戻ることを考慮すると、単純な大小比較ではなく、値間の距離を制限しての比較となる。本実施形態では‘（（参照アドレス−書き込みアドレス）＆０ｘ７ＦＦ）＜０ｘ４００’という条件となる。
【００４４】
比較部１１６は、ＷＡＩＴアドレス１０６を監視し、ＷＡＩＴアドレス１０６に入力されたアドレスの値と書き込みアドレス部１１４の値とを比較する。比較部１１６は、書込部１１３への書き込みが完了していない場合（書き込みアドレス部１１４の値がＷＡＩＴアドレス１０６の値に達していない場合）に、データ読込部１０９での次のデータの読み込みを抑制する。本実施形態では‘（（参照アドレス−書き込みアドレス）＆０ｘ７ＦＦ）＜０ｘ４００’の関係が成立した場合に次のデータ読み出しを行うが、そうでない場合にはデータ読込部１０９は停止する。
【００４５】
図７（ｄ）は、演算結果を格納するアドレスが７ＦＣ番地に達する前にアドレスをクリアする（０００番地にする）命令７１０の‘ＲＥＷＩＮＤ’を実行した状態を示している。この命令により、メモリマップとして十分な容量が確保できない場合に、少ないワークエリアで演算を実行することが可能となる。なお、意図的に７ＦＣ番地付近にあるデータの生存期間を延ばすという用い方も可能である。
【００４６】
図８は、３つのアクセラレータ０＿８０１、アクセラレータ１＿８０２及びアクセラレータ２＿８０３で３つのＡＬＵ８０５、ＡＬＵ８０６及びＡＬＵ８０７を共有する回路のブロック図である。なお、図１の情報処理装置１００のブロック図には、１つのアクセラレータ１０３と１つのＡＬＵ１１１を備える構成を示しているが、図８に示すように、複数のアクセラレータと複数のＡＬＵを備える構成とすることができる。アクセラレータ０＿８０１、アクセラレータ１＿８０２及びアクセラレータ２＿８０３のそれぞれは、図１に示したアクセラレータ１０３に対応する。また、ＡＬＵ８０５、ＡＬＵ８０６及びＡＬＵ８０７のそれぞれは、図１に示したＡＬＵ１１１に対応する。
【００４７】
アクセラレータ０＿８０１、アクセラレータ１＿８０２及びアクセラレータ２＿８０３はそれぞれ、３つのアービター８０４に接続されている。３つのアービター８０４はそれぞれ、アクセラレータ０＿８０１、アクセラレータ１＿８０２及びアクセラレータ２＿８０３が同時にリクエスト信号をＨｉｇｈにした場合、優先度の高いアクセラレータに対してＧＲＡＮＴ信号をＨｉｇｈにする。この場合、アクセラレータは、リクエスト信号をＨｉｇｈにしてもＧＲＡＮＴ信号がＬｏｗ（ロー）のままであることはリクエスト信号が受理されていないため、ＧＲＡＮＴ信号がＨｉｇｈになるまでそのままの状態で待機する。
【００４８】
ＡＬＵ８０５は乗算演算を行う。ＡＬＵ８０６は除算演算を行う。ＡＬＵ８０７は加算演算を行う。ＡＬＵ８０５、ＡＬＵ８０６及びＡＬＵ８０７はそれぞれ独立して同時に演算を実行可能である。仮にアクセラレータが１つでＡＬＵが３つの構成の場合、３つのＡＬＵのうち２つは稼働していないことになる。これに対して、複数のアクセラレータからこれと同数のＡＬＵに並列的に演算を実行させる構成とすることで、ＡＬＵの稼働率を上げることができる。
【００４９】
図９は、アービター８０４の回路図である。アービター８０４は、アクセラレータ０＿８０１に接続される端子群９０１と、アクセラレータ１＿８０２に接続される端子群９０２と、アクセラレータ２＿８０３に接続される端子群９０３とを有する。
【００５０】
端子群９０１は、アクセラレータ０＿８０１と接続する複数の端子９０１ａ〜９０１ｆを含む。端子群９０２は、アクセラレータ１＿８０２と接続する複数の端子９０２ａ〜９０２ｆを含む。端子群９０３は、アクセラレータ０＿８０３と接続する複数の端子９０３ａ〜９０３ｆを含む。端子９０１ａはリクエスト信号の入力に用いられる入力端子である。端子９０１ｂ，９０１ｃは、被演算子Ａ，Ｂのデータ入力に用いられる入力端子である。端子９０１ｄはＧＲＡＮＴ信号をアクセラレータ０＿８０１に出力する出力端子である。端子９０１ｅは、ＶＡＬＩＤ信号をアクセラレータ０＿８０１に出力する出力端子である。端子９０１ｆは、演算結果Ｑをアクセラレータ０＿８０１に出力する出力端子である。端子群９０２及び端子群９０３も同様に、対応するアクセラレータと信号の入出力を行うための複数の端子を有する。端子群９０２及び端子群９０３については、説明を省略する。
【００５１】
例えば、アクセラレータ０＿８０１は、所定のＡＬＵへデータを転送する際に、被演算子Ａ，Ｂのデータを端子９０１ｂ，９０１ｃに入力し、リクエスト信号をＨｉｇｈにして端子９０１ａへ入力する。アクセラレータ０＿８０１はプライオリティが一番上（最優先）となっているものとする。この場合、リクエスト信号は必ず受理されてＡＬＵ側端子９１７を通じて対応するＡＬＵへ送られる。また、ＨｉｇｈのＧＲＡＮＴ信号が端子９０１ｄから出力される。
【００５２】
アクセラレータ１＿８０２のリクエスト信号がＨｉｇｈになった際に同じサイクルで端子９０１ａに入力されるリクエスト信号がＨｉｇｈになっている場合、ゲート９０９の作用により、アクセラレータ１＿８０２のリクエスト信号は受理されない。一方、アクセラレータ１＿８０２のリクエスト信号がＨｉｇｈになった際に同じサイクルで端子９０１ａに入力されるリクエスト信号がＬｏｗになっている場合には、アクセラレータ１＿８０２のリクエスト信号は受理される。その結果、アクセラレータ１＿８０２からの被演算子Ａ，Ｂのデータがアービター８０４へ入力され、ゲート９１０，９１１を通過して、ＡＬＵ側端子９１４，９１５へ送られる。
【００５３】
また、アクセラレータ１＿８０２から端子９０２ａを通じてゲート９０９が受理したリクエスト信号は、遅延素子９１２で遅延された後、ＶＡＬＩＤ信号としてアクセラレータ１＿８０２の書込部１１３に送られる。同じサイクルで、ＡＬＵからＡＬＵ側端子９１６に演算結果Ｑが入力されており、演算結果Ｑはゲート９１３を通過してアクセラレータ１＿８０２の書込部１１３へ送られる。
【００５４】
図１０は、２つのアクセラレータ０＿８０１及びアクセラレータ１＿８０２から１つのアービター８０４へ同時にリクエスト信号が入力された場合のアービター８０４の動作を示すタイミングチャートである。
【００５５】
アクセラレータ０＿８０１が、２サイクル目でリクエスト信号をＨｉｇｈにしており、同じサイクルでＧＲＡＮＴ信号を出力している。これと同じサイクルでアクセラレータ１＿８０２のリクエスト信号もＨｉｇｈになっているが、ＧＲＡＮＴ信号がＬｏｗとなっているため、アクセラレータ１＿８０２は信号を保持したまま停止した状態となっている。
【００５６】
アクセラレータ１＿８０２のリクエスト信号がＬｏｗになる５サイクル目でアクセラレータ１＿８０２のＧＲＡＮＴ信号はＨｉｇｈになり、アクセラレータ１＿８０２のプログラムが１サイクルだけ進む。こうして、不図示のＡＬＵ側では、全てのサイクルで演算が行われる。その際、アクセラレータ１＿８０２のプログラムは乗算命令が連続し又は加算命令が連続するため、アクセラレータ０＿８０１のプログラムから少し遅れて、アクセラレータ１＿８０２のプログラムが実行されていくことになる。
【００５７】
図１１は、アクセラレータ１０３が備える書込部１１３の回路図である。書込部１１３は、乗算ＡＬＵ（図８のＡＬＵ８０５）からの演算結果Ｑの入力端子１１０２と、有効なデータのサイクルを示すＶＡＬＩＤ信号の入力端子１１０３を有する。また、書込部１１３は、除算ＡＬＵ（図８のＡＬＵ８０６）からの演算結果Ｑの入力端子１１０４と、ＶＡＬＩＤ信号の入力端子１１０５を有する。更に、書込部１１３は、加算ＡＬＵ（図８のＡＬＵ８０７）からの演算結果Ｑのデータ入力端子１１０６と、ＶＡＬＩＤ信号の入力端子１１０７を有する。
【００５８】
アクセラレータ１０３は、１サイクルの間に３つのＡＬＵ８０５〜８０７のうちの１つにしかリクエスト信号を出さないため、ＶＡＬＩＤ信号及び演算結果ＱはＡＬＵ８０５〜８０７のうちの１つからしか戻って来ない。したがって、アクセラレータ１０３は、ＶＡＬＩＤ信号及び演算結果ＱをＯＲ回路１１１１，１１１２で受け取ることができる。また、ＦＮＯＰのサイクルにはデータはないが、入力端子１１０８からＶＡＬＩＤ信号として受け取る。ＯＲ回路１１１１，１１１２が受け取ったデータは、ＦＩＦＯバッファ１１１３に書き込まれる。
【００５９】
ＦＩＦＯバッファ１１１３にデータが書き込まれると、出力端子１１１８からデータが、出力端子１１１９から書き込み要求信号が、ＳＲＡＭブロック１０４へ出力される。ＳＲＡＭブロック１０４が書き込み要求信号を受理すると、ＧＲＡＮＴ信号の入力端子１１２０から入力されるＧＲＡＮＴ信号がＨｉｇｈになり、ＦＩＦＯバッファ１１１３は次の信号を出力する。ＦＩＦＯバッファ１１１３は、中身が空になるとＴＭＰＴＹ信号をＨｉｇｈにして、動作を停止する。ＧＲＡＮＴ信号の入力端子１１２０から入力されるＧＲＡＮＴ信号がＨｉｇｈになる度に、カウンタ１１１４がカウントアップするカウンタの出力は２ビットだけシフトする。カウンタ１１１４から出力されるカウントは、ベースアドレス入力端子１１０９から入力されるベースアドレスと加算されてアドレスバス端子１１２１へ送られ、そこからＳＲＡＭブロック１０４へ出力される。
【００６０】
図１２は、アクセラレータ１０３が実行可能なプログラムを生成するためのコンパイラのフローチャートである。なお、図１２に示す各処理に付されたＳ番号は工程順序を表している。なお、コンパイラ（プログラム）自体は、情報処理装置１００とは異なるシステムで作成されており、コンパイルにより生成された、アクセラレータ１０３が実行可能なプログラムはＤＲＡＭ１０２に格納されている。
【００６１】
Ｓ１２０１では、ソースコードを読み込み、内部の中間データとして保持する。なお、本実施形態でのアクセラレータ１０３は、プログラム中に分岐命令を持たないが、簡単なループや配列を表現可能なＣ言語等のソース言語で動作することを想定している。
【００６２】
Ｓ１２０２では、ループを展開し、全ての変数にシンボルを割り付ける。図１３（ａ）は、プログラムの展開例を示しており、左式のプログラムは右式の通りに展開される。
【００６３】
Ｓ１２０３では、多項式の中間ノードに中間変数のシンボルを割り付ける。図１３（ｂ）は、多項式の分解例を示しており、左式は右式の通りに２つの式に分解することができる。
【００６４】
Ｓ１２０４では、代入から参照までのステップ数が第１の閾値よりも短い命令を検索し、発見することができたか否かを判定する。第１の閾値は、演算を開始してから演算結果が参照可能となるまでのサイクル数よりも大きい値である。その命令が発見されたと判定された場合（Ｓ１２０４でＹＥＳ）、処理はＳ１２０５へ進む。
【００６５】
Ｓ１２０５では、代入と参照の順序が狂わないように前後の命令を入れ替えて、代入から参照までのステップ数が第１の閾値よりも長くなるように変更する。図１３（ｃ）は、プログラムでの式の並べ替えの例を説明する図であり、左式の命令列を右式のように並べ替える。
【００６６】
Ｓ１２０６では、代入から参照までのステップ数が第１の閾値より短い状態が続いているか否かを判定する。代入と参照の順序が狂わないように前後の命令を入れ替えても代入から参照までのステップ数が第１の閾値よりも短い場合（第１の閾値よりも長くならない場合）（Ｓ１２０６でＹＥＳ）、処理はＳ１２０７へ進む。
【００６７】
Ｓ１２０７では、ＷＡＩＴ命令（図７（ｃ）を参照して説明したＷＡＩＴ命令７０８）を挿入し、その後、処理をＳ１２０４へ戻す。一方、代入から参照までのステップ数が第１の閾値以上となった場合（Ｓ１２０４でＮＯ）、処理はＳ１２０４へ戻される。
【００６８】
Ｓ１２０４〜Ｓ１２０６又はＳ１２０７までのループを繰り返すことにより、Ｓ１２０４で代入から参照までのステップ数が第１の閾値より短い命令が発見されなくなったと判定された場合（Ｓ１２０４でＮＯ）、処理はＳ１２０８へ進む。
【００６９】
Ｓ１２０８では、代入から参照までのステップ数が第２の閾値よりも長い命令を検索し、発見することができたか否かを判定する。第２の閾値は、ＳＲＡＭブロック１０４のワークエリアに格納可能なデータ数より小さい値で、本実施形態では５１１より小さい値である。ステップ数が第２の閾値よりも長い命令が発見された場合（Ｓ１２０８でＹＥＳ）、処理はＳ１２０９へ進む。
【００７０】
Ｓ１２０９では、変数の生存期間を延長させる命令を挿入し、その後、処理をＳ１２０８へ戻す。Ｓ１２０８〜Ｓ１２０９のループを繰り返すことで、代入から参照までのステップ数が第２の閾値よりも長い命令を発見することができなくなった場合（Ｓ１２０８でＮＯ）、処理はＳ１２１０へ進む。
【００７１】
Ｓ１２１０では、アッセンブラファイルをＳＲＡＭブロック１０４へ出力する。生成されるアッセンブラファイルは、所定のＳＲＡＭに格納される。これにより本処理は終了する。アッセンブラは、中間変数を確保するアドレスが０ｘ７ＦＣに達すると０ｘ０００に戻るアクセラレータ１０３の構造に合わせて、アドレスを割り当てる。
【００７２】
以上の通り第１実施形態によれば、アクセラレータ１０３を、多数のアドレスを必要とする汎用レジスタを用いずに、命令読込部１１０、データ読込部１０９及び書込部１１３をキューで構成すると共にＡＬＵ１１１の稼働率を上げている。つまり、アクセラレータ１０３の回路規模を小さくすると共に、ＡＬＵ１１１の稼働率を上げることを可能としている。
【００７３】
＜第２実施形態＞
第１実施形態では、ゼロ（０）を加算するか又は１を乗算することにより、変数生存期間の延長命令を生成した。これに対して、第２実施形態では、加算演算を行うＡＬＵや乗算演算を行うＡＬＵを用いずに変数生存期間の延長命令を生成することにより、そのサイクルで空いたＡＬＵを別のアクセラレータで利用可能とする。
【００７４】
図１４（ａ）は、第２実施形態に係る情報処理装置の部分的なブロック図である。なお、図１４（ａ）のブロック図では、図８のブロック図と共通する構成について図８と同じ符号を付しており、ここでは既に説明した内容の説明を省略する。
【００７５】
図１４（ａ）に示すように、アクセラレータ０＿８０１、アクセラレータ１＿８０２及びアクセラレータ２＿８０３のそれぞれに、他のアクセラレータとは共有されないスルー用ＡＬＵ１４０１が接続されている。図１４（ｂ）は、スルーＡＬＵ１４０１の回路図である。スルーＡＬＵ１４０１は、リクエスト信号（＿ＲＥＱ）を受けるとそのまま受理して、ＧＲＡＮＴ信号（＿ＧＲＡＮＴ）を出力する。また、これと共に、遅延素子１４０３により遅延されたＶＡＬＩＤ信号（＿ＶＡＬＩＤ）と同じだけＡ入力（＿Ａ）を遅延素子１４０２により遅延させてＱ出力（＿Ｑ）に出力する。３つのスルーＡＬＵ１４０１はそれぞれ、専用ＡＬＵとなっているため、アクセラレータ０＿８０１、アクセラレータ１＿８０２及びアクセラレータ２＿８０３は同時にスルー処理を実行することができる。
【００７６】
＜第３実施形態＞
第１実施形態では、ソース言語をアクセラレータ１０３で実行可能な機械語のプログラムに変換した。これに対して、第３実施形態では、中間コードを用いて、アクセラレータ１０３で実行可能な機械語のプログラムを生成する。
【００７７】
図１５（ａ）は、中間コードを生成するコンパイラのフローチャートである。図１５（ａ）のフローチャートに示す工程のうち、図１２のフローチャートにある工程と同じものについては、同じ符号を付して説明を省略する。Ｓ１２０１〜Ｓ１２０３の工程を行った後のＳ１５０１では、シンボルに対してユニークな番号を割り当てて中間コードを出力する。これにより、図１６に示す中間コードが生成される。
【００７８】
図１６は、Ｓ１５０１で生成された中間コードのビットフィールドを説明する図である。ワークアドレスＩＤ１６０１は、変数に対して割り当てたユニークな番号を格納する１６ビットのエリアである。オペコードフィールド３０１、ベースアドレスインデックスフィールド３０２及びオフセットアドレスフィールド３０３は、図３を参照して説明したアクセラレータ１０３の命令のビット構成と同じである。ワークエリア以外を示すときのアドレスは、オフセットアドレスフィールド３０３に書き込まれている。
【００７９】
図１５（ｂ）は、アクセラレータ１０３が実行するプログラムのプログラムローダーによる読み込みフローを表したフローチャートである。図１５（ｂ）のフローチャートに示す工程のうち、図１２のフローチャートにある工程と同じものについては、同じ符号を付して説明を省略する。
【００８０】
Ｓ１５０５では、Ｓ１５０１で生成した中間コードをメモリに読み込む。これに続くＳ１２０４〜Ｓ１２０９の工程は図１２を参照して説明した通りであるため、ここでの説明を省略する。
【００８１】
Ｓ１２０８の判定がＮＯになると、Ｓ１５０６にて１６ビットの変数を９ビットのアドレスに割り当てて変換する。９ビットのアドレスに割り当てる際に０ｘ１ＦＦまで来ると、次には０ｘ０００が割り当てられる。割り当てたアドレスをオフセットアドレスフィールド３０３に格納したら、ワークアドレスＩＤ１６０１の１６ビットは不要となるので取り外して、実行可能な機械語に変換する。
【００８２】
続くＳ１５０７では、Ｓ１５０６で変換した機械語のプログラムをＳＲＡＭブロック１０４の所定のＳＲＡＭに配置してアクセラレータ１０３を起動し、機械語のプログラムを実行する。
【００８３】
なお、Ｓ１５０６では、ワークアドレスＩＤ１６０１の１６ビットを取り外して実行可能な機械語としたが、アクセラレータが上位１６ビットを事前に無視して実行するように設計されていてもよい。これにより、ワークエリアの実装を８ビットや１０ビットに変更しても、図１５（ｂ）でのプログラムローダーの実装を変更するだけで、中間コードのバイナリの互換性を保証することができる。その結果、ハードウェア設計の自由度を高めることができ、スケーラビリティを確保することが可能になる。
【００８４】
＜第４実施形態＞
第４実施形態では、第１実施形態に係る情報処理装置１００の変形例について説明する。図１７は、第４実施形態に係る情報処理装置１７００の概略構成を示すブロック図である。なお、情報処理装置１７００の構成要素のうち、第１実施形態に係る情報処理装置１００の構成要素と同じものについては、同じ符号を付すこととする。
【００８５】
情報処理装置１７００は、ＣＰＵ１０１、ＤＲＡＭ１０２及びプロセッサブロック１７０２を有する。プロセッサブロック１７０２は、アクセラレータ１０３、ＳＲＡＭブロック１０４、ＡＬＵ１１１及び内部ＣＰＵ１７０１を有する。内部ＣＰＵ１７０１は、アクセラレータ専用のＣＰＵである。ＣＰＵ１０１とプロセッサブロック１７０２は、アクセラレータ１０３内のコントロールレジスタとＤＲＡＭ１０２の共有エリアを用いて通信する。
【００８６】
情報処理装置１７００では、第３実施形態で説明したプログラムローダーと命令挿入処理をプロセッサブロック１７０２の内部ＣＰＵ１７０１が行う。なお、プログラムローダーの命令挿入処理の一部又は全部をハードウェア化することも可能である。その場合、少なくともプロセッサブロック１７０２に対して与えられるプログラムに存在しないＷＡＩＴ命令や変数生存期間延長命令は、プロセッサブロック１７０２の内部で挿入されて実行される。
【００８７】
以上、本発明をその好適な実施形態に基づいて詳述してきたが、本発明はこれら特定の実施形態に限られるものではなく、この発明の要旨を逸脱しない範囲の様々な形態も本発明に含まれる。更に、上述した各実施形態は本発明の一実施形態を示すものにすぎず、各実施形態を適宜組み合わせることも可能である。
【００８８】
例えば、上記実施形態での個々の数値、ワークエリアの参照可能項目数やＡＬＵの数、アクセラレータの数、命令のビット長等は、要求される性能に応じて変更（設計）が可能で有り、上記の設定に限定されるものではない。また、上記実施形態では、単精度浮動小数点演算を行う構成について説明したが、倍精度演算や整数演算への適用も可能であり、更にＡＬＵとして二乗や平方根等の２項演算子の追加も可能である。更に、アクセラレータが実行するプログラムを、コンパイラによりプログラムを機械語に変換することで生成しているが、プログラム設計者が直接に機械語プログラムを設計しても構わない。
【００８９】
本発明は、上述の実施形態の１以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける１つ以上のプロセッサがプログラムを読出し実行する処理でも実現可能である。また、１以上の機能を実現する回路（例えば、ＡＳＩＣ）によっても実現可能である。
【符号の説明】
【００９０】
１００，１７００    情報処理装置
１０１    ＣＰＵ
１０２    ＤＲＡＭ
１０３    アクセラレータ
１０４    ＳＲＡＭブロック
１０５    コントロールレジスタ
１０６    ＷＡＩＴアドレス
１０９    読込部
１１０    命令読込部
１１１    ＡＬＵ
１１２    データ転送部
１１３    書込部
１１４    書き込みアドレス部
１１６    比較部
１７０１    内部ＣＰＵ
１７０２    プロセッサブロック
【図１】
2020173717.tif 000003
【図２】
2020173717.tif 000004
【図３】
2020173717.tif 000005
【図４】
2020173717.tif 000006
【図５】
2020173717.tif 000007
【図６】
2020173717.tif 000008
【図７】
2020173717.tif 000009
【図８】
2020173717.tif 000010
【図９】
2020173717.tif 000011
【図１０】
2020173717.tif 000012
【図１１】
2020173717.tif 000013
【図１２】
2020173717.tif 000014
【図１３】
2020173717.tif 000015
【図１４】
2020173717.tif 000016
【図１５】
2020173717.tif 000017
【図１６】
2020173717.tif 000018
【図１７】
2020173717.tif 000019