JP4703735B2 - コンパイラ、コード生成方法、コード生成プログラム - Google Patents

コンパイラ、コード生成方法、コード生成プログラム Download PDF

Info

Publication number
JP4703735B2
JP4703735B2 JP2009014308A JP2009014308A JP4703735B2 JP 4703735 B2 JP4703735 B2 JP 4703735B2 JP 2009014308 A JP2009014308 A JP 2009014308A JP 2009014308 A JP2009014308 A JP 2009014308A JP 4703735 B2 JP4703735 B2 JP 4703735B2
Authority
JP
Japan
Prior art keywords
value
data
code
engine
calculation
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2009014308A
Other languages
English (en)
Other versions
JP2009140514A (ja
Inventor
宜史 吉川
滋博 浅野
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Toshiba Corp
Original Assignee
Toshiba Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Toshiba Corp filed Critical Toshiba Corp
Priority to JP2009014308A priority Critical patent/JP4703735B2/ja
Publication of JP2009140514A publication Critical patent/JP2009140514A/ja
Application granted granted Critical
Publication of JP4703735B2 publication Critical patent/JP4703735B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Advance Control (AREA)
  • Devices For Executing Special Programs (AREA)

Description

本発明は、動的リコンフィギュラブル回路技術を用いた半導体装置に関する。
近年、低コスト・低消費電力が求められる携帯機器においても機能の複雑化、多様化が進んでおり、高い性能が必要とされてきている。高性能と低消費電力を両立させるためには専用ハードウェアの開発が不可避であるが、その開発費と製造費は年々増大している。これらを削減するものとして、動的リコンフィギュラブル回路技術を用いた半導体装置が注目されている(例えば、非特許文献1参照。)。
動的リコンフィギュラブル回路技術を用いた半導体装置はソフトウェアなどで与えられる命令に従って演算を行う通常のプロセッサと同様の装置であるが、次の点で通常のプロセッサとは相違している。すなわち、動的リコンフィギュラブル回路技術を用いた半導体装置は、その動作時に、命令に対応する演算器の設定を記憶装置から読み出して変更できる。記憶装置の内容は動的に書き換え可能であり、記憶装置に蓄える演算器の設定を半導体装置の使用状況に応じて動的に適宜書き換えることにより、一つの命令で多様な演算を行わせることができる。このように、命令と演算器の設定との対応関係を動的に変えられる点で通常のプロセッサとは相違している。
命令と演算器の設定を動的に変更できない通常のプロセッサでは、演算器の異なる設定が異なる命令に対応するよう演算器の設定を符号化し、これを「命令」としている。性能向上のために、演算器により実現することが可能な設定の種類を増やすと、命令のビット幅は増大し、命令を蓄えるのに必要なメモリなどの記憶装置のサイズも増大する。その結果、製造コストが増大するとともに、符号化された演算器の設定を命令から復号する際に消費される電力量も増大する。
一方、動的リコンフィギュラブル回路技術を用いた半導体装置では、命令と演算器の設定との対応を動的に変更できる。演算器の設定を変化させるために必要な命令のビット幅は、演算器で実現可能な設定の種類が増大してもさほど増えることはない。
したがって、動的リコンフィギュラブル回路技術を用いた半導体装置は、同等の演算処理性能を有する通常のプロセッサなどの半導体装置と比べて、製造コストおよび消費電力の点で有利であるとされる。
動的リコンフィギュラブル回路技術を用いた半導体装置の性能をより高くするためには、そのような半導体装置に複数の演算器を持たせ、それら演算器の設定変更をそれぞれ独立に制御できることが必要である。また、演算を終えたデータの受け渡しが演算器の間で可能であり、かつそのデータ受け渡しのための設定変更が行えることも必要である。
このような半導体装置では、一つの演算処理を複数の演算器を用いて流れ作業式に行っている場合において、ある演算器がその演算結果を別の演算器に渡そうとした際に、その演算結果を受け取る側の演算器ではまだ受け取りの準備ができていない状況が起こり得る。そのような場合には、演算結果を渡そうとする演算器の処理を停止するとともに、流れ作業において停止する演算器よりも前の作業を行っている全ての演算器の処理も停止する必要がある。この停止処理のことをパイプラインインターロック処理と呼ぶ。
従来の動的リコンフィギュラブル回路技術を用いた半導体装置では、パイプラインインターロック機構は実現されていない。このため演算器の数や演算器間でのデータ受け渡しに用いるバッファの数を多くしておき、複雑な演算処理が発生してもパイプラインインターロック処理が必要となる事態があまり生じないようにしている。パイプラインインターロック処理の発生が避けられないようなさらに複雑な演算処理については、これを複数の演算処理に分割して逐次実行するようにしている。
「リコンフィギュラブルシステム」、オーム社、ページ141−208
パイプラインインターロック機構が実現されていないことから、従来の動的リコンフィギュラブル回路技術を用いた半導体装置には、パイプラインインターロック処理回避のために演算器の数やバッファの数を多くすることによる製造コストの増大という問題点がある。
また、パイプラインインターロック処理回避のために複雑な演算処理を複数の演算処理に分割して逐次実行すると、演算を効率よく行えない。
複雑な演算処理をパイプラインインターロック処理が必要とならない演算処理に変更する方法として、データの受け渡しを行う演算器が演算処理とは関係のない無駄な演算を実行し、これによりデータ受け渡しのタイミングを調整することが考えられる。しかしながら、この方法では無駄な演算の実行に伴う消費電力の増大が問題となるため、低消費電力が求められる機器に搭載される動的リコンフィギュラブル回路技術を用いた半導体装置では採用されていない。
本発明は以上に鑑みてなされたものであり、製造コストおよび消費電力を増大させることなく、しかも演算を効率よく行える半導体装置に用いられるコードを生成するコンパイラ、コード生成方法、コード生成プログラムを提供することを目的とする。
本発明の一観点に係るコンパイラは、半導体装置に用いられるコードを生成するコンパイラである。前記半導体装置は、サイクルごとに第1の演算を行い、前記第1の演算の結果を示す第1のデータと、第1の値又は第2の値を示す第1のバリッド信号とを前記サイクルごとに出力する第1の演算エンジンと、前記サイクルごとに第2の演算を行い、前記第2の演算の結果を示す第2のデータと、前記第1の値又は前記第2の値を示す第2のバリッド信号とを前記サイクルごとに出力する第2の演算エンジンと、前記第1の演算エンジンと前記第2の演算エンジンの間で前記第1のデータ及び前記第2のデータを受け渡すために用いられ、前記第1のバリッド信号が前記第1の値を示すならば前記第1のデータの書込みが許可され、前記第2のバリッド信号が前記第1の値を示すならば前記第2のデータの書込みが許可され、前記第1のバリッド信号が前記第2の値を示すならば前記第1のデータの書込みが禁止され、前記第2のバリッド信号が前記第2の値を示すならば前記第2のデータの書込みが禁止される演算エンジン間バッファと、を具備する。
前記第1の演算エンジンは、前記第1のバリッド信号の値を決定するための第1のコードを記憶する第1の記憶部と、前記第1のコードから前記第1のバリッド信号の値を求め、前記サイクルごとに出力する第1のコントローラと、を具備し、前記第2の演算エンジンは、前記第2のバリッド信号の値を決定するための第2のコードを記憶する第2の記憶部と、前記第2のコードから前記第2のバリッド信号の値を求め、前記サイクルごとに出力する第2のコントローラと、を具備する。
前記コンパイラは、前記第1の演算エンジンと前記第2の演算エンジンの間で受け渡される前記第1のデータ及び前記第2のデータの依存関係を示すデータ依存グラフから、前記サイクルごとに、前記第1の演算エンジン及び前記第2の演算エンジンのそれぞれが演算を行うか否かを決定する決定部と、前記第1の演算エンジンが演算を行うならば、前記第1のコントローラに前記第1の値を出力させ、前記第1の演算エンジンが演算を行わないならば、前記第1のコントローラに前記第2の値を出力させるようなコードを前記第1のコードとして生成し、前記第2の演算エンジンが演算を行うならば、前記第2のコントローラに前記第1の値を出力させ、前記第2の演算エンジンが演算を行わないならば、前記第2のコントローラに前記第2の値を出力させるようなコードを前記第2のコードとして生成するコード生成部と、を具備することを特徴とする。
本発明によれば、製造コストおよび消費電力を増大させることなく、しかも演算を効率よく行える半導体装置に用いられるコードを生成するコンパイラ、コード生成方法、コード生成プログラムを提供できる。
一実施形態に係る半導体装置を示すブロック図 演算エンジン間バッファを示す図 演算エンジンを示す図 演算エンジン間バッファが有するデータレジスタを示す図 コード転送制御ユニットを示す図 コードメモリにおけるコードの配置を示す図 演算エンジンが有する演算ユニットを示す図 演算ユニットが有する演算器を示す図 演算エンジンが有する出力コントローラを示す図 演算エンジンが有する別の出力コントローラを示す図 演算エンジンが有する入力コントローラを示す図 コードの生成手順を示すフローチャート データ依存グラフを示す図 ノードのスケジューリング処理の手順を示すフローチャート スピル処理の手順を示すフローチャート ノード置換後のデータ依存グラフを示す図 コード出力処理の手順を示すフローチャート データ依存グラフから生成されたコードに従って半導体装置を実行させた際のタイミングチャート
一実施の形態に係る半導体装置1を図1に示す。半導体装置1は、プロセッサなどの外部装置からの指示によりデータ処理を行うリコンフィギュアラブルデバイスであって、5つの演算エンジン11A〜Eと、演算エンジン間バッファ12と、コードメモリ13と、コード転送制御装置14と、データメモリ15を有している。なお、ここでいうデータ処理とは、演算エンジン11A〜Eによって個々の演算が行われたことによる一連の演算の総称である。
コードメモリ13は演算エンジン11A〜Eとコード転送制御装置14に接続する。データメモリ15は演算エンジン11Aの入力に接続し、演算エンジン11Eの出力に接続する。演算エンジン間バッファ12は演算エンジン11B〜Eの入力に接続し、演算エンジン11A〜Dの出力に接続する。
演算エンジン11A〜Eは、演算の設定を動的に変更することが可能なデータ処理エンジンである。演算エンジン11A〜Eは、データ処理の開始前にコードメモリ13から転送されるコードに従って設定を変更しながら、演算エンジン11A〜Eに入力されるデータに対して演算を行い、演算の結果を示すデータをValid(バリッド)信号とともに演算エンジン間バッファ12に対して出力する。
演算エンジン間バッファの詳細な構成を図2に示す。演算エンジン間バッファ12は8つのデータレジスタ120A〜Hを有し、演算エンジン間のデータ受け渡しに使用される。演算エンジン11A〜Eはコードに従ってデータレジスタ120A〜Hの中から一つを選択して、読み出しおよび書き込みに用いる。ただし、演算エンジン間バッファ12への書き込みの際には、演算エンジン11A〜DからのValid信号が0の場合には書き込みは行われない。
コードメモリ13には演算エンジン11A〜Eが使用するコードが保存される。プロセッサなどは、半導体装置1がデータ処理を開始する前に主記憶装置からコードメモリ13にコードを転送しておく。
コード転送制御装置14は、プロセッサなどによりコードの転送完了通知を受けた後に、コードメモリ13からコードを順に読み出し、それらを演算エンジン11A〜Eにそれぞれ転送する機能を有する。
データメモリ15は、半導体装置1がデータ処理の開始時に与えるデータや、半導体装置1によるデータ処理の中間結果または最終結果を一時的に保持するものである。また、データメモリ15には、データ処理の開始前にプロセッサなどの外部装置により初期の入力データが書き込まれる。半導体装置1は、データメモリ15に保持されたデータ処理の中間結果を再び入力データとしてデータ処理を続けることもできる。データメモリ15に保持された最終結果は、プロセッサなどの外部装置によりデータメモリ15から読み出され、主記憶装置に書き込まれる。
なお、本実施形態では演算エンジン11A〜Eの数を5つとし、データレジスタ120A〜Hの数を8つとしているが、半導体装置1に必要とされる処理能力に応じてこれらの数を変更してもよい。
演算エンジン11Aの詳細な構成を図3に示す。演算エンジン11Aは、入力コントローラ110と、演算ユニット113A〜Eと、データパイプラインレジスタ114A〜Eと、制御パイプラインレジスタ115A〜Eと、出力コントローラ116と、最終コンテキストIDラッチ117と、マルチプレクサ118を有する。
入力コントローラ110、演算ユニット113A〜E、および出力コントローラ116はコードメモリ13とコード転送制御装置114に接続する。コードメモリ13から演算エンジン11A〜Eにそれぞれ送られるコードは、コード転送制御装置114から同時に送られるタグの値に従い、入力コントローラ110、演算ユニット113A〜E、出力コントローラ116の内部の記憶部に、それぞれで用いられる部分ごとに分割して格納される。
入力コントローラ110は、データメモリ15にも接続する。入力コントローラ110は、内部の記憶部に格納されるコードを順に解釈して、入力データの参照位置を表す入力A選択信号、入力B選択信号を出力し、データメモリ15からデータを読み出す。
また入力コントローラ110は、制御パイプラインレジスタ115Aと、マルチプレクサ118にも接続し、同じコードを順に解釈して、コンテキストIDとValidビットを出力する。この際、マルチプレクサ118は、Validビットが1の場合は入力コントローラ110が出力するコンテキストIDの値を選び、Validビットが0の場合は最終コンテキストIDラッチ117にセットされる値を選ぶ。この値はValidビットとともに制御パイプラインレジスタ115Aにセットされる。またマルチプレクサ118により選択された値は最終コンテキストIDラッチ117にもセットされる。最終コンテキストIDラッチ117はデータ処理の開始時には0とする。
制御パイプラインレジスタ115A〜Dはそれぞれ制御パイプラインレジスタ115B〜Eに接続し、制御パイプラインレジスタ115Eは出力コントローラ116に接続することにより、演算ユニット113A〜Eの動作を制御するためのパイプラインを構成している。そのため、あるサイクルに入力コントローラ110が制御パイプラインレジスタ115AにセットしたコンテキストIDおよびValidビットの値は、その次のサイクルから1サイクルごとに制御パイプラインレジスタ115B〜E、出力コントローラ16へと順に転送される。このような転送をパイプライン式転送という。
演算ユニット113A〜Eはそれぞれ制御パイプラインレジスタ115A〜Eに接続する。また、演算ユニット113A〜Dの出力は、それぞれデータパイプラインレジスタ114A〜Dを介して演算ユニット113B〜Eの入力に接続することで、データを演算するためのデータパイプラインを構成している。なお、演算ユニット113Aの入力は、データメモリ15に接続する。さらに、演算ユニット113Eの出力はデータパイプラインレジスタ114Dを介して、演算エンジン間バッファ12に接続する。
演算ユニット113A〜Eは、演算の設定を変更可能であって、サイクルごとにそれぞれ制御パイプラインレジスタ115A〜EにセットされるコンテキストIDをアドレスとして内部の記憶部からコードを読み出し、そのコードにより選ばれた一つの設定情報に従って演算の設定を変更する。そして、そのサイクルに入力Aデータ信号、入力Bデータ信号にセットされるデータに対し、変更後の設定に従って演算を行い、その演算結果をそれぞれデータパイプラインレジスタ114A〜Eに書き込む。ただし、制御パイプラインレジスタ115A〜EにセットされるValidビットが0の場合には、演算結果はデータパイプラインレジスタ114A〜Eには書き込まれない。
このように、演算エンジン11においては、入力コントローラ110から出力されるValidビットが0の場合には、最終コンテキストIDラッチ117に保存されているコンテキストIDが示す設定情報が演算ユニット113の設定として用いられるため、Validビットが0である間は、演算ユニット113の設定は変化しない。また、データパイプラインレジスタ114の値も、Validビットが0の間は変化しないため、それを入力として演算を行う演算ユニット113の出力結果もまた変化しない。このように、半導体装置1ではValidビットが0である際に生じる信号線の変化を少なくすることで、演算ユニット113およびデータパイプラインレジスタ114で消費する電力についてもパイプラインインターロックを用いない従来の動的リコンフィギュラブル回路より小さくなる。
出力コントローラ116は、演算エンジン間バッファ12に接続する。出力コントローラ116は、制御パイプラインレジスタ115Eが出力するコンテキストIDをアドレスとして内部の記憶部からコードを読み出し、そのコードに従ってデータの出力位置を示す出力選択信号を出力する。また、制御パイプラインレジスタ115EにセットされているValidビットをそのままValid信号として出力する。
演算エンジン11B〜Eは、半導体装置1を構成する他の装置との接続関係が演算エンジン11Aと異なるが、内部の構成は演算エンジン11Aと同様である。演算エンジン11B〜Eが有する入力コントローラ110と演算ユニット113Aは、演算エンジン間バッファ12に接続している。また演算エンジン11Eが有する出力コントローラ116とデータパイプラインレジスタ114Eは、データメモリ15に接続している。
なお、演算エンジン11A〜Eの演算ユニット113の数は5つであるとしたが、半導体装置1に必要とされる処理能力に応じて変更してもよい。また、演算ユニット113の数は演算エンジン11A〜Eごとに異なっていてもよい。
次に、半導体装置1における処理の開始から終了までの流れを説明する。半導体装置1の処理は、データ処理前の初期化処理とデータ処理の2つに大別できる。
まず、初期化処理について説明する。
プロセッサなどの外部装置は、半導体装置1への入力データをデータメモリ15に格納し、演算エンジン11A〜Eの動作を規定するコードをコードメモリ13に格納する。
プロセッサなどの外部装置はコードメモリ13へのコードの格納が完了すると、半導体装置1にコード転送の完了をパルス信号により通知する。コード転送制御装置14は、半導体装置1からコード転送の完了通知を受けると、コードメモリ13からコードを順に読み出し、それらを、格納先を示すタグとともに演算エンジン11A〜Eのそれぞれに転送する。
演算エンジン11A〜11Eに転送されたコードは、入力コントローラ110、演算ユニット113A〜E、出力コントローラ116の内部の記憶部に、それぞれで用いられる部分ごとに分割して格納される。
コード転送制御装置14は、演算エンジン11A〜Eへのコードの転送を完了すると、プロセッサなどの外部装置に演算準備の完了を通知する。
プロセッサなどの外部装置は、演算準備の完了通知を受けた後に、半導体装置1にデータ処理の開始をパルス信号により通知する。
次に、データ処理について説明する。
入力コントローラ110は、内部の記憶部に格納されたコードをサイクルごとに解釈し、そのコードに従ってコンテキストIDとValidビットをサイクルごとに出力する。そして、前述の通りValidビットに従って入力コントローラ110が出力するコンテキストIDと、最終コンテキストIDラッチ117に格納されるコンテキストIDのいずれか一方が選択され、そのコンテキストIDがValidビットとともに演算ユニット113A〜Eおよび出力コントローラ116にパイプライン式に転送される。また、入力コントローラ110は、上記コードに従って、サイクルごとに入力A選択信号、入力B選択信号を出力する。
データメモリ15および演算エンジン間バッファ12は、サイクルごとに演算エンジン11A〜Eの入力コントローラ110が出力する入力A選択信号、入力B選択信号に従ってデータを読み出し、演算エンジン11A〜Eの演算ユニット113Aの入力Aデータ信号、入力Bデータ信号にそのデータをセットする。
演算ユニット113A〜Eは、サイクルごとにコンテキストIDをアドレスとして内部の記憶部からコードを読み出し、そのコードにより選ばれた一つの設定情報に従って演算の設定を変更する。そして、そのサイクルに入力Aデータ信号、入力Bデータ信号にセットされるデータに対し、変更後の設定に従って演算を行う。演算結果は、データパイプラインレジスタ114A〜Eを介してデータメモリ15または演算エンジン間バッファ12にパイプライン式に転送される。ただし、Validビットが0の場合には演算結果はデータパイプラインレジスタ114A〜Eには書き込まれない。
出力コントローラ116は、サイクルごとに、コンテキストIDをアドレスとして内部の記憶部からコードを読み出し、そのコードに従ってデータの出力位置を示す出力選択信号を出力する。また、制御パイプラインレジスタ115EにセットされているValidビットをそのままValid信号として出力する。
データメモリ15および演算エンジン間バッファ12は、サイクルごとに出力選択信号により指定される場所に、データパイプラインレジスタ114Eにセットされた値を書き込む。ただし、この書き込みはValid信号が1の場合にのみ行われ、Valid信号が0の場合には書き込みは行われない。
演算エンジン11A〜11Eの入力コントローラ110が全てのコードを解釈し終えた時点で、半導体装置1はプロセッサなどの外部装置にデータ処理の完了を通知する。以上によりデータ処理は終了する。
プロセッサなどの外部装置はデータ処理の完了通知を受けてから規定サイクル以上が経過した後に、データメモリ15に蓄えられた半導体装置1の演算結果を読み出す。この規定サイクルは、最後にコードを解釈し終えた演算エンジン11が備える演算ユニット113の数と、データメモリ15へのデータ書き込みに要するサイクル数を加えたサイクル数になる。
次に、以上のような半導体装置1におけるデータ処理を実現する、データレジスタ120、コード転送制御ユニット14、演算ユニット113、出力コントローラ116および入力コントローラ110について詳細に説明する。
データレジスタ120の実現例を図4に示す。データレジスタ120は、データラッチ1200とANDロジック1201A〜DとORロジック1202とマルチプレクサ1203を有する。データはデータラッチ1200に格納される。
ANDロジック1201A〜Dは、それぞれ、デコーダA〜D出力とValidA〜D信号のそれぞれのANDをORロジック1202に入力する。これにより、演算エンジン11A〜Dの少なくとも一つからのValid信号が1であり、かつその出力選択信号がこのデータレジスタ120を選択する(即ちデコーダA〜D出力が1である)場合にのみ、ORロジック1202は1を出力し、そうでない場合は0を出力する。ORロジック1202からの出力信号はデータラッチ1200のライトイネーブル信号として用いられる。このため、Valid信号が0の場合にはデータレジスタ120にデータは書き込まれない。
マルチプレクサ1203は、ValidA〜D信号が1の場合に、演算エンジン11A〜Dからの書き込みデータA〜Dを選択する。例えば、ValidA信号が1の場合には、演算エンジン11Aからの書き込みデータAを選択する。ValidB信号が1の場合には、演算エンジン11Bからの書き込みデータBを選択する。ValidC〜D信号についても同様である。マルチプレクサ1203により選択されたデータはデータラッチ1200に書き込まれる。ValidA〜D信号が全て0の場合や、ValidA〜D信号のうち2つ以上が1である場合の動作は未定義である。ただし、ValidA〜D信号が全て0の場合には、前述の通りデータラッチ1200にはデータは書き込まれない。
コード転送制御ユニット14の実現例を図5に示す。コード転送制御ユニット14は、メモリIDレジスタ140と、アドレスレジスタ141と、コードアドレスレジスタ142と、インクリメンタ143A〜Cと、マルチプレクサ144A〜Dと、Validラッチ145と、比較器146を有する。
コードメモリ13には、図6に示すように、演算エンジン11A〜Eが内部に有するコード格納用メモリの種類ごとに連続してコードが配置されているものとする。またコードの各々にはEndビットが付加されているものとする。Endビットの値は、メモリの種類ごとに連続するコードの最終に相当するコードの場合にのみ1となり、他のコードの場合は0となる。
このようなコードメモリ13から演算エンジン11A〜11Eに転送されるコードには、そのコードを格納するメモリの種類を示すメモリIDと、そのメモリのどの位置に格納するかを示すアドレスと、それが有効かを示すValidビットとがコード転送制御ユニット14により付加される。これらメモリID、アドレス、Validビットの値は、それぞれメモリIDレジスタ140、アドレスレジスタ141、Validラッチ145に格納される。なお、メモリID、アドレス、Validビットの組をコードのタグと呼ぶ。
コードアドレスレジスタ142には、コードメモリ13からコードを読み出す際に用いられるアドレスが格納される。
プロセッサなどの外部装置は、半導体装置1にコード転送の完了を通知する前に、データ処理に必要なコードが格納されているコードメモリ13の先頭アドレスを、予め外部バスを介してコードアドレスレジスタ142に書き込んでおく。
半導体装置1がコード転送の完了通知を受けると、マルチプレクサ144A〜Bにより初期値0が選択され、メモリIDレジスタ140およびアドレスレジスタ141に格納される。また、マルチプレクサ144Dにより1が選択されてValidラッチ145にセットされる。
次のサイクルから、メモリIDレジスタ140、アドレスレジスタ141、Validラッチ145の値が、コードメモリ13から送られるコードに付加されて、演算エンジン11A〜Eに転送される。また、サイクルの終了時に、アドレスレジスタ141、コードアドレスレジスタ142の値が、インクリメンタ143B〜Cによりそれぞれ1増やされる。
コードメモリ13からEndビットが1となるコードが転送されると、そのサイクルの終了時にはメモリIDレジスタ140の値がインクリメンタ143Aにより1増やされ、またマルチプレクサ144Bにより0が選択されてアドレスレジスタ141の値は0にリセットされる。
以下、メモリIDレジスタ140の値が、有効なメモリIDの最大値+1になるまで、同様の処理が繰り返される。メモリIDの値が有効なメモリIDの最大値+1になると、Validラッチ145に0がセットされ、演算エンジン11A〜Eへのコード転送は完了する。
演算ユニット113の実現例を図7に示す。演算ユニット113は、設定を動的に変更可能な演算器1130と、制御テーブルメモリ1131と、設定情報レジスタ1132A〜Dと、マルチプレクサ1133を有する。
設定情報レジスタ1132A〜Dには、データ処理において演算器1130で用いられる設定情報が保存されている。設定情報レジスタ1132の数は用途に応じて変更してよい。制御テーブルメモリ1131には、設定情報レジスタ1132A〜Dの選択信号値がデータ処理で用いられるコンテキストIDの種類数分だけ、先頭から順に格納されている。
設定情報レジスタ1132A〜Dおよび制御テーブルメモリ1131は、初期化においてコードメモリ13から転送されるコードにより更新される。コード転送制御装置14によりコードに付加されるValidビットが1で、かつコードに付加されるメモリIDが、設定情報レジスタ1132A〜D、制御テーブルメモリ1131を示すメモリIDと一致する場合に、メモリIDが一致する制御テーブルメモリ1131または設定情報レジスタ1132A〜Dにコードが書き込まれる。制御テーブルメモリ1131にコードを書き込む場合には、コード転送制御装置14によりコードに付加されるアドレスを書き込みアドレスとして用いる。
演算器1130の実現例を図8に示す。演算器1130は8ビットのALUとシフタをそれぞれ4つずつ備えており、32ビットの2入力に対して、8ビット単位で異なる演算を行うよう設定できる。上述したように、演算器1130の設定は動的に変更可能である。この演算結果を32ビットの出力の一つとする。また、演算器1130はクロスバーを備え、シフタからの8ビット出力4つの配置順を変更した結果を32ビット出力の一つとする。
この例では、演算器1130の設定情報は8ビット演算あたり、ALUの入力の一つを直値とするかどうかを決める入力モードを1ビット、直値を8ビット、ALU設定を2ビット、シフト値を3ビット、クロスバー設定を2ビットとする計16ビットからなる。演算器1130全体では64ビットの設定情報となる。
演算ユニット1130は、入力コントローラ110から送信されるコンテキストIDをアドレスとして制御テーブルメモリ1131から値を読み出し、その値をマルチプレクサ1133の選択信号として設定情報レジスタ1132A〜Dの一つを選択し、そこから設定情報を読み出して演算器1130に適用する。これによりコンテキストIDごとに演算の設定を変えるという動作が実現される。
演算エンジン11Eが有する出力コントローラ116の実現例を図9に示す。演算エンジン11Eが有する出力コントローラ116は、ベースアドレスレジスタ1160A〜Bと、制御テーブルメモリ1161と、加算器1162とマルチプレクサ1163を有する。
ベースアドレスレジスタ1160A〜Bには、データメモリ15への出力アドレスを計算する際に用いられるベースアドレスが格納される。ベースアドレスレジスタ1160の数は1以上の任意の数でよい。制御テーブルメモリ1161には、ベースアドレスレジスタ1160A〜Bを選択するための選択信号値とオフセットとが対になって格納されている。ベースアドレスレジスタ1160A〜Bと制御テーブルメモリ1161の初期設定は、演算ユニット113の設定情報メモリ1132の初期化と同様の手法で行われる。
演算エンジン11Eが有する出力コントローラ116は、入力コントローラ110から送信されるコンテキストIDをアドレスとして制御テーブルメモリ1161を参照し、アドレス計算に用いるベースアドレスが格納されているベースアドレスレジスタ1160A〜Bを選択するための選択信号値と、オフセットを制御テーブルメモリ1161から読み出す。読み出された選択信号値はマルチプレクサ1163の選択信号となり、ベースアドレスレジスタ1160A〜Bのいずれか一方が選択され、そこに格納されるベースアドレスが読み出される。読み出されたベースアドレスは、出力選択信号として外部に出力されるとともに、加算器1162においてオフセットとの加算が行われる。その加算結果は、選択されたベースアドレスレジスタ1160に書き戻される。ただし、Validビットとして0が入力された場合には、ベースアドレスレジスタ1160の更新は行われない。
一方、演算エンジン11A〜11Dが有する出力コントローラ116は、図10に示すように、演算エンジン11Eが有する出力コントローラ116とは異なる。演算エンジン11A〜11Dが有する出力コントローラ116の制御テーブルメモリ1161には、出力に用いる演算エンジン間バッファ12のデータレジスタ12A〜Hの一つを選択するための選択信号の値が、データ処理に用いられるコンテキストIDの数に対応して記憶されている。
演算エンジン11A〜11Dが有する出力コントローラ116は、入力コントローラ110から送信されるコンテキストIDをアドレスとして制御テーブルメモリ1161から選択信号の値を読み出し、それを出力選択信号として出力する。
図11は演算エンジン11A〜Eが有する入力コントローラ110の実現例を示す図である。入力コントローラ110は、入力A選択部1100と、入力B選択部1101と、コンテキスト情報メモリ1102と、コンテキストIDラッチ1103と、データ処理終了ラッチ1104と、インクリメンタ1105と、マルチプレクサ1106と、ラッチ1107A〜Bと、タイミングラッチ1108A〜Bを有する。
入力A選択部1100と入力B選択部1101は、それぞれ入力A選択信号と入力B選択信号を生成するための回路である。これらは、演算エンジン11Aが有する入力コントローラ110の場合は、演算エンジン11Eが有する出力コントローラ116と同一のものであり、また演算エンジン11B〜Eが有する入力コントローラ110の場合は、演算エンジン11A〜Dが有する出力コントローラ116と同一のもので、出力選択信号が入力A〜B選択信号として用いられる。Valid信号は出力されない。
コンテキスト情報メモリ1102は、Validビットとデータ処理終了ビットとを含むコンテキスト情報を、データ処理で用いられるコンテキストIDの数だけ保存している。
コンテキストIDラッチ1103には、出力するコンテキストIDの値が格納される。コンテキストIDが出力されると、コンテキストIDラッチ1103の値はインクリメンタ1105により1だけ増やされる。
データ処理終了ラッチ1104は、データ処理が完了したかどうかを示す信号を格納するラッチである。半導体装置1の初期状態においてこのラッチの値は、データ処理の完了を意味する1である。
次に、入力コントローラ110の動作を説明する。
プロセッサなどの外部装置から半導体装置1にデータ処理の開始が通知されると、データ処理終了ラッチ1104が0にセットされる。また、このサイクルではコンテキストIDラッチ1103は0を示しており、コンテキスト情報メモリ1102のアドレス0に格納されているコンテキスト情報が読み出される。この読み出されたコンテキスト情報が含んでいるValidビットとデータ終了ビットとが、それぞれラッチ1107A〜Bにセットされる。
次のサイクルに、入力A選択部1100と入力B選択部1101は、コンテキストIDラッチ1103に格納されるコンテキストIDと、ラッチ1107Aに格納されるValidビットとに従って、それぞれ入力A選択信号、入力B選択信号を出力する。またこれらコンテキストIDとValidビットは、それらが演算ユニット113Aに到着するタイミングと、入力A選択信号、入力B選択信号によってそれぞれ読み出される入力Aデータ、入力Bデータが演算ユニット113Aに到着するタイミングとが等しくなるよう、タイミングラッチ1108A〜Bによりタイミングが調整された後に、演算ユニット113Aに出力される。また、サイクルの終わりに、コンテキストIDラッチ1103の値がインクリメンタ1105により1だけ増やされる。同様にして、コンテキスト情報メモリ113からデータ処理終了ビットとして0が読み出される間、サイクルごとにコンテキストIDとValidビットとが出力される。
コンテキスト情報メモリ113からデータ処理終了ビットとして1が読み出されると、コンテキストIDとValidビットが出力されるとともに、データ処理終了ラッチ1104が1に設定される。
次のサイクル以後、データ処理完了信号として1が出力され、また、データ処理終了ラッチ1104が1なので、Validビットは0となる。この状態が、演算エンジン11でデータ処理が完了した状態である。
以上述べたように、演算エンジン11A〜Eはパイプライン式転送によってデータとValid信号の両者を同じタイミングで出力する。演算エンジン間バッファ12はValid信号が1であるときに受け取ったデータのみをバッファ(データレジスタ120に相当する)に書き込む。
ここで、演算エンジン間バッファ12において利用できるバッファが存在しなくなることが予見できるサイクルではValid信号として0が出力されるように、コンテキスト情報メモリ1102に格納されるコードに従って入力コントローラ110をソフトウェア制御すれば、パイプラインインターロック機構を有さない構成において、演算器の数や演算エンジン間バッファ12が有するバッファの数を少なくしても、半導体装置1は効率よく演算を行うことが可能となる。
演算エンジン間バッファ12の有するバッファの数が少ない構成とすると、これらバッファにおいて演算結果を一時的に格納する動作により消費される電力をパイプラインインターロックを用いない従来の動的リコンフィギュラブル回路技術を用いた半導体装置と比較して小さくすることが可能となる。また、製造コストの増大を抑えることができる。
さらに本実施形態において、演算エンジン11A〜Eは、直前のサイクルに出力したコンテキストIDを記憶する最終コンテキストIDラッチ117と、マルチプレクサ118を具備する。入力コントローラ110から出力されるValidビットが0の場合には、最終コンテキストIDラッチ117に記憶されているコンテキストIDがマルチプレクサ118により選択され、そのValidビットとともに演算ユニット113へパイプライン式転送によって出力されるよう制御する。演算ユニット113の出力結果は、Validビットが0のときにはデータパイプラインレジスタ114には書き込まれない。このため、Validビットが0である間は、演算ユニット113の入出力データ信号と設定信号は、最後にValidビットが1であった状態から変化しない。
したがって、演算エンジン間バッファ12のみならず演算エンジン11内の演算ユニット113およびデータパイプラインレジスタ114が消費する電力についても、パイプラインインターロックを用いない従来の動的リコンフィギュラブル回路と比較して小さくすることが可能となる。
効率のよい演算と消費電力の削減は、前述の通り、入力コントローラ110をソフトウェア制御することによって達成される。そのためのコードは、別の半導体装置等により予め作成してコードメモリ13に格納し、コード転送制御装置14によりデータ処理の開始前に予めコンテキスト情報メモリ1102に転送して格納しておく必要がある。以下では、入力コントローラ110のコードを予め作成するコンパイラについて説明する。
このコンパイラは、例えばコンピュータのプログラムとして実現することができ、演算エンジン11A〜Eの間でどのようにして演算結果の受け渡しが行われるかを示すデータ依存グラフ、演算エンジン11A〜Eのパイプライン段数、およびデータメモリの読み書きに要するサイクル数を入力して記憶する記憶部と、該記憶部に記憶された情報を参照し、入力コントローラ110が有するコンテキスト情報メモリ1102に格納されるコードと、演算エンジン11A〜Dが有する制御テーブルメモリ1161に格納されるコードを生成するコード生成部とを有する。データ依存グラフのデータは、例えばユーザが予め作成しておく。
本実施形態の半導体装置1は、ある与えられた性能を実現するのに必要な演算エンジン間バッファ12のバッファ数を少なくできることを特徴の一つとしている。このため、コンパイラもまた、演算エンジン間バッファ12のバッファ数が少ない場合においても正しくコードを生成できなくてはならない。
この目的のために、以下で詳しく説明するコンパイル手法においては、与えられた複数の演算を演算エンジン11A〜Eがどの順序で実行すべきかを次のように決定する。すなわち、その演算への入力となるデータが全く生成されていないような演算よりも、その演算への入力となるデータの一部が既に演算され、該データの一部が演算エンジン間バッファ12に書き込まれているような演算が優先して実行されるようにする。そうすれば、演算エンジン間バッファ12におけるデータの滞留時間を極力少なくできる。このようなコンパイル手法は、演算エンジン間バッファ12が多くのバッファを有することを前提としていた従来のコンパイル手法とは異なるものである。
以下、本実施形態に係るコンパイル手法を詳細に説明する。
コンパイラは、演算エンジン11A〜Eが有するコンテキスト情報メモリ1102に格納されるコードと、演算エンジン11A〜Dが有する制御テーブルメモリ1161に格納されるコードを出力する。このため、上述したコード生成部は、演算エンジン11A〜Eにより行われる複数の演算について、入力と出力のデータ依存関係を表すデータ依存グラフを解析する。前述の通り、データ依存グラフは、演算エンジン11A〜Eの間でどのようにして演算結果の受け渡しが行われるかを表している。
コード生成部は、ある演算への入力となるデータの一部が既に演算されており、該データの一部が演算エンジン間バッファ12に書き込まれているような演算をデータ依存グラフから特定する特定部と、そのような演算が優先して実行されるように演算エンジン11A〜Eにより行われる演算の順序を決めるスケジューリング部と、この順序に従い、各サイクルにおいて演算エンジン11A〜Eの各々が演算を行うか否かを決定する決定部と、演算エンジン11A〜Eの各々が演算を行うならば、対応する入力コントローラ110からValidビットとして1を出力し、演算を行なわないならば、対応する入力コントローラ110からValidビットとして0を出力するためのコードを生成する生成部とを有する。また、コード生成部は、演算エンジン11A〜Eがサイクルごとにどの演算の設定を用いればよいかを規定するコードも生成する。
コード生成のより具体的な処理手順は、例えば、図12のフローチャートに示す手順に従う。
図13にデータ依存グラフの一例を示す。データ依存グラフの一つのノードは演算エンジン11で実行される一つの演算に対応している。データ依存グラフの矢印は、矢印の元に接続するノードに対応する演算の結果が、矢印の先に接続するノードに対応する演算の入力として使われることを示している。本例のデータ依存グラフには次のような制約がある。すなわち、任意のノードの入力となるノードの数は高々2つとし、また任意のノードの出力は常に一つのノードの入力としてのみ用いられるものとする。データ依存グラフのノードには、その演算を実行する演算エンジン11A〜Eを識別するための、A〜Eのいずれかのラベルが付与される。また、各ラベルのノードには、ID(例えば0から始まる番号)が付与される。
図12のフローチャートに沿って、演算エンジン11A〜Eがサイクルごとにどの演算の設定を用いればよいかを図13のデータ依存グラフから求める手法について説明する。
説明を容易にするため、演算エンジン11A〜Eのレイテンシを1とし、また演算エンジン間バッファ12はデータレジスタ120A〜Bの2つのみを有するものとする。なお、この手法はデータレジスタ120の数が2より大きい場合にも適用できる。また演算エンジン11A〜Eのレイテンシが2以上の場合にも適用できる。ここで、演算エンジン11のレイテンシとは、演算エンジン11が演算を完了するのに必要なサイクル数のことをいう。例えば、演算エンジン11の演算ユニット113の数が5であれば、レイテンシは5である。
まずステップS0で初期化処理を行う。処理済ノード集合を空にし、グラフGに図13のデータ依存グラフをセットする。データレジスタ120A〜Bの使用開始時刻、使用可能時刻をそれぞれ0とし、演算エンジン11A〜11Eの使用可能時刻をLとする。Lは、データメモリの読み書きに要するサイクル数であり、ここでは1とする。データ依存グラフのノードNごとに、該ノードNと同じノードに出力を行う別のノードN’を特定する。ノードN’をノードペアテーブルにおけるノードNの項目に登録する。ノードN’が存在しない場合はノードNの項目を空にする。ノードN’が存在する場合、「ノードNとノードN’はペアである」と表現する。そして、スピルノードスタックを空にする。
ステップS1においては、グラフGに優先処理ノードが存在するかをチェックする。優先処理ノードとは、処理済ノード集合に含まれないノードであって、入力ノードを2つ有し、かつ入力ノードの一つのみが処理済ノードリストに含まれるようなノードである。この優先処理ノードは、演算の入力となるデータの一部が既に演算され、その演算結果が演算エンジン間バッファ12に書かれているような演算に相当する。そのような演算が優先的に処理されるようにするのが、このステップS1の特徴である。この時点では、処理済ノード集合は一つのノードすら含んでいないので、処理はステップS2に進む。
ステップS2においては、グラフGに処理可能ノードが存在するかをチェックする。処理可能ノードとは、処理済ノード集合に含まれないノードであって、かつ入力ノードの全てが処理済みノードリストに含まれているか、または入力ノードを持たないノードのことである。この例では処理可能ノードであるノードA0〜3が存在するので、処理はステップS3に進む。
ステップS3では、グラフGにおいて深さ最深の処理可能ノードNを求める。この例では、ノードA0〜3は全て同じ深さを持つので、任意のノードを一つ選ぶ。ここでは、例えばノードA0が選ばれたものとする。
ステップS4では、ステップS3で求められた処理可能ノードNがスケジュール可能であるかを判定する。「スケジュール可能である」とは、処理可能ノードNが出力を持たないか、または、処理可能ノードNの結果出力に使用できるデータレジスタ120の少なくとも一つが、ノードNの入力となる別のノードの結果出力に用いられているか、または使用可能時刻が無限大でないという条件を満たすことをいう。ここで、ノードNのペアとなるノードN’が存在し、かつノードN’が処理済ノード集合に含まれる場合には、ノードN’の結果出力に用いているデータレジスタ120は、ノードNの結果出力には使用できない。この時点では、処理済みノード集合は空なので、ノードA0はスケジュール可能である。ステップ5に進む。
ステップS5では、ノードNのスケジュールを行う。ステップS5におけるスケジューリング処理は、例えば、図14に示すようなフローチャートに従って行われる。
まずステップS5Aにおいて、ノードNの入力となるノードが存在するかをチェックする。この例では、ノードA0は入力となるノードを持たないので、処理はステップS5Bに進む。
次に、ステップS5Bにおいて、ノードNの結果出力に使用できるデータレジスタ120のうち、その使用可能時刻が最小であるレジスタRを一つ選ぶ。ただし、ノードNが出力を持たない場合には、レジスタRは任意に選ばれる。この時点では、データレジスタ120A〜Bの使用可能時刻はいずれも1なので、どちらを使用してもよい。ここでは、データレジスタ120Aを使用することにする。
次に、ステップS5Cにおいて、ノードNの実行可能時刻に演算エンジン11のレイテンシを加えた値と、レジスタRの使用可能時刻とを比較する。ノードNの実行可能時刻は、ノードNの任意の入力ノードが結果出力に使うデータレジスタ120の使用可能時刻と、演算エンジン11の使用可能時刻の、遅い方の時刻とする。ノードNが入力ノードを持たない場合、ノードNの実行可能時刻は演算エンジン11の使用可能時刻に等しい。また、ノードNが出力を持たない場合、処理は常にステップS5Dに進む。この例では、データレジスタ120Aの使用可能時刻の方が小さいので、ステップS5Dに進む。
ステップS5Dにおいて、ノードNの実行時刻を、ステップS5Cで求めたノードNの実行可能時刻とし、その演算エンジン11の使用可能時刻はノードNの実行時刻に1を加えたものとする。また、レジスタRの使用開始時刻はノードNの実行時刻に演算エンジン11のレイテンシを加えたものとし、レジスタRの使用可能時刻を無限大とする。またレジスタRの所有ノードをNとする。ただし、ノードNが出力を持たない場合には、レジスタRの使用開始時刻および使用可能時刻の更新は行わない。この例では、A0の実行時刻は1、演算エンジン11Aの使用可能時刻は2、データレジスタ120Aの使用開始時刻は2、データレジスタ120Aの使用可能時刻は無限大となる。データレジスタ120Aの所有ノードはA0になる。
そしてステップS5Eにおいて、ノードNとNが結果を出力するレジスタRの組を処理済ノード集合に追加する。この例ではノードA0とデータレジスタ120Aの組が処理済ノード集合に追加される。
以上によりステップS5が完了すると、処理はステップS1に戻る。ステップS1の開始から、再びステップS1に戻るまでに行われる一連のステップをイテレーションと呼ぶことにする。
次のイテレーションI1では、ステップS1において優先処理ノードB0が見つかるので、処理はステップS1からステップS6に進む。
ステップS6では、まずグラフGをグラフスタックの最上部に積む。次に、ステップS1で求められた優先処理ノードの入力ノードのうち、処理済ノード集合に含まれない方の入力ノードN’を含み、かつ優先処理ノードを含まないグラフGの最大連結部分グラフG’を求める。G’を優先処理グラフと呼ぶ。そして、グラフGに優先処理グラフG’をセットする。この例では、優先処理グラフG’はノードA1のみを含むグラフとなる。処理はステップS6からステップS1に戻り、イテレーションI2に進む。この例において、イテレーションI2では、ステップS1からS2、S3へと進み、ノードA1が深さ最深の処理可能ノードとなる。
ステップS4では、ノードA1のペアとなるノードA0はデータレジスタ120Aを結果出力に用いているので、データレジスタ120BのみがノードA1の結果出力に使用可能となる。データレジスタ120Bの使用可能時刻は0なので、ノードA1はスケジュール可能となり、処理はステップS5に進む。ステップS5では、ノードA0と同様に処理はステップS5AからS5B、S5C、S5D、S5Eへと進み、ノードA1の実行時刻は2、演算エンジン11Aの使用可能時刻は3、データレジスタ120Bの使用開始時刻は3、データレジスタ120Bの使用可能時刻は無限大、データレジスタ120Bの所有ノードはノードA1となる。ノードA1とデータレジスタ120Bの組が処理済ノード集合に追加される。処理はイテレーションI3に進む。
イテレーションI3において、処理はステップS1からS2へと進み、グラフGにはもはや処理可能なノードはないため、ステップS7に進む。
ステップS7では、グラフスタックが空であるかをチェックする。空でなければステップS8に進み、グラフスタックの最上部からグラフを取り出してグラフGにセットする。この例では、イテレーションI1でグラフスタックにグラフが積まれているので、ステップS8に進み、グラフスタックからグラフを取り出してグラフGにセットする。このときのグラフGは図13に示したものと同じになる。
ステップS10では、スピルノードスタックが空であるかをチェックする。スピルノードスタックが空でなく、かつグラフGに存在するノードがスピルノードスタックの最上部に積まれている場合には、スピル対応が必要になる。この時点ではスピルノードスタックは空なので、処理はイテレーションI4に進む。
イテレーションI4では、ステップS1からS2、S3へと進み、ノードB0が深さ最深の処理可能ノードとなる。ノードB0の結果出力にはデータレジスタ120A〜Bの両方が使用可能であり、かつそれらはノードB0の入力となるノードA1、A2の結果出力に用いられているので、ノードB0はスケジュール可能である。
ステップS5において、まずノードB0は入力ノードを持つので、処理はステップS5AからS5Fに進む。ステップS5Fでは、ステップS3で求められた深さ最深の処理可能ノードNに対して、その入力ノードごとに結果出力に用いられるデータレジスタ120と、その使用開始時刻を求める。そして、求められた使用開始時刻の最大値に1を加えた値を、求められた全てのデータレジスタ使用可能時刻とする。この例では、データレジスタ120A〜Bの使用可能時刻がそれぞれ4になる。
ステップS5Bでは、データレジスタ120A〜Bの使用可能時刻は等しいので、どちらを選んでもよい。ここではデータレジスタ120Aが選ばれたとする。以下、処理はステップS5CからS5D、S5Eへと進み、ノードB0の実行時刻は4、演算エンジン11Bの使用可能時刻は5、データレジスタ120Aの使用開始時刻は5、データレジスタ120Aの使用可能時刻は無限大、データレジスタ120Aの所有ノードはB0となる。ノードB0とデータレジスタ120Aの組が処理済ノード集合に追加される。処理はイテレーションI5に進む。
イテレーションI5では、ステップS1においてノードE0が優先処理となり、ステップS6が処理され、イテレーションI6に進む。
イテレーションI6において、処理はステップS1からS2、S3、S4へと進み、ステップS5においてノードA2がスケジュールされる。ステップS5において、処理はステップS5AからS5Bへと進む。ステップS5Cにおいて、データレジスタ120Bの使用可能時刻はノードA2の実行可能時刻+1以上であるので、処理はステップS5Gに進む。
ステップS5Gでは、ステップS5Cで求めたレジスタRの使用可能時刻からノードNを実行する演算エンジン11のレイテンシを引いた値をノードNの実行時刻とする。他の値はステップS5Dと同様に求める。この例では、A2の実行時刻は3、演算エンジン11Aの使用可能時刻は4、データレジスタ120Bの使用開始時刻は4、データレジスタ120Bの使用可能時刻は無限大となる。データレジスタ120Bの所有ノードはA2になる。イテレーション7に進む。
イテレーション7において、処理はステップS1からS6へと進み、グラフGがノードA3のみのグラフとなる。
イテレーション8において、処理はステップS1からS2、S3へと進み、ステップS4においてノードA3をスケジュールしようとするが、データレジスタ120A〜Bはともに使用可能時刻が無限大なので、ノードA3はスケジュール不可能である。処理はステップS9に進む。
ステップS9におけるスピル処理の手順を図15のフローチャートに示す。まず、ステップS9Aにおいて、データレジスタ12A〜Bからデータメモリ15に書き戻すものを一つ選ぶ。この書き戻しをレジスタスピル処理と呼ぶ。スケジュール不可能なノードNのペアとなるノードN’が存在する場合には、ノードN’の結果出力に用いられていないデータレジスタ12を選ぶ。ノードNのペアとなるノードN’が存在しない場合には、任意のデータレジスタ12を選ぶ。この例では、データレジスタ12Aが選ばれる。
ステップS9Bでは、演算エンジン11Eでレジスタスピル処理を行う時刻を求める。演算エンジン11Eの使用可能時刻と、データメモリに書き戻すデータレジスタ12の使用開始時刻に1を加えたものとを比較し、大きい方がレジスタスピル処理を行う時刻になる。また、演算エンジン11Eが行うデータ退避を表すものとしてグラフに新たに追加されるノード(データ退避ノード)の実行時刻と、データレジスタ12の使用可能時刻を、レジスタスピル処理を行う時刻とする。この例では、時刻6がレジスタスピル処理を行う時刻となり、データ退避ノードE1の実行時刻と、データレジスタ12Aの使用可能時刻が6となる。
ステップS9Cでは、スピルスタックに、データレジスタ12の所有ノードと、レジスタスピル処理を行う時刻に2×Lを加えた時刻の組を積む。この例では、ノードB0と時刻8の組がスピルスタックに積まれる。ステップS5に進む。
ステップS5では、データレジスタ12Aの使用開始時刻が6に更新されているので、A3の実行時刻は5、演算エンジン11Aの使用可能時刻は6、データレジスタ120Aの使用開始時刻は6、データレジスタ120Aの使用可能時刻は無限大となる。データレジスタ120Aの所有ノードはA3になる。処理はイテレーション9に進む。
イテレーション9において、処理はステップS1からS2、S7、S8へと進む。ステップS10において、スピルスタックは空でないが、ステップS8でグラフスタックから取り出したグラフGには、スピルスタックの最上部にあるノードB0は含まれないので、イテレーション10に進む。
イテレーション10において、処理はステップS1からS2、S3、S4、S5へと進む。ノードB1の実行時刻は7、演算エンジン11Bの使用可能時刻は8、データレジスタ120Bの使用開始時刻は8、データレジスタ120Bの使用可能時刻は無限大となる。データレジスタ120Bの所有ノードはB1になる。イテレーション11に進む。
イテレーション11では、処理はステップS1からS2、S7、S8へと進む。ステップS10でスピル対応が必要と判断され、処理はステップS11に進む。
ステップS11では、まずスピルスタックの先頭からノードと時刻の組を取り出す。そして、演算エンジン11Aの使用可能時刻を、取り出された時刻とする。さらにグラフGから、取り出されたノードを含み、そのノードの出力を含まない最大連結部分グラフ(すなわち優先処理グラフ)G’を求める。この優先処理グラフG’をデータ復帰のための演算エンジン11Aのノードに置き換える。この例では、演算エンジン11Aの使用可能時刻は8となり、更新されたデータ依存グラフは図16のようになる。イテレーション12に進む。
イテレーション12において、処理はステップS1からS2、S3、S4、S5へと進み、イテレーション11で生成されたデータ復帰用のノードA4がスケジュールされる。ノードA4の実行時刻は8、演算エンジン11Aの使用可能時刻は9、データレジスタ120Aの使用開始時刻は9、データレジスタ120Aの使用可能時刻は無限大となる。データレジスタ120Aの所有ノードはA4になる。処理はイテレーション13に進む。
イテレーション13において、処理はステップS1からS2、S3、S4、S5へと進み、ノードE0の実行時刻は10、演算エンジン11Eの使用可能時刻は11となる。
次のイテレーション14において、処理はステップS1からS2、S7へと進む。グラフスタックは空であるため、最終的にコードを出力するためのステップS12に進む。
ステップS12におけるコード出力処理の手順を図17のフローチャートに示す。まずステップS12Aにおいて、アドレスを示す変数Cを0に初期化する。
ステップS12Bでは、演算エンジン11A〜Eのそれぞれが有するコンテキスト情報メモリ1102の、アドレスCに保存されるコンテキスト情報を初期化する。この初期化により、Validビット、データ処理終了ビットがそれぞれ0に初期化される。
ステップS12Cでは、処理済ノード集合に含まれる全てのノードNについて、実行時刻がCであるものを全て求める。そのようなノードが一つでも存在すれば、処理はステップS12Eに進み、一つも存在しなければ、処理はステップS12Fに進む。
ステップS12Eでは、ステップS12Cで見つけられたノードNごとに、ノードNを実行する演算エンジン11が有するコンテキスト情報メモリ1102の、アドレスCに保存されるValidビットを1に更新する。また、ノードNが出力を持つ場合には、演算エンジン間バッファ12のデータレジスタ12A〜Hの一つを選択するための選択信号の値として、レジスタRを示す値を、ノードNを実行する演算エンジン11が有する制御テーブルメモリ1161のアドレスCに保存する。また、ステップS12Cで見つかった全てのノードNを処理済ノード集合から削除する。
ステップS12Fでは、処理済ノード集合が空であるかを判定する。空でない場合には処理はステップS12Hに進み、アドレスCをC+1に更新してステップS12Bに戻る。空の場合には、処理はステップS12Gに進む。
ステップS12Gでは、演算エンジン11A〜Eの入力コントローラ110が有するコンテキスト情報メモリ1102の、アドレスCに保存されるデータ処理終了ビットを1とし、コード生成は完了する。
以上説明したコンパイル手法により、図13のデータ依存グラフから生成されたコードに従って半導体装置1を実行させた際のタイミングチャートを図18に示す。図18において、演算エンジン11の演算結果が、1であるValidビットとともに出力されるサイクルの各々には、その演算に相当するラベル(図13参照)が示されている。図18には、データレジスタ120の値がどのサイクルで変化するかについても示してある。
なお、本発明は上記実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記実施形態に開示されている複数の構成要素の適宜な組み合わせにより、種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。さらに、異なる実施形態にわたる構成要素を適宜組み合わせてもよい。
1…半導体装置;
11A〜E…演算エンジン;
110…入力コントローラ;
1100…入力A選択部;
1101…入力B選択部;
1102…コンテキスト情報メモリ;
1103…コンテキストIDラッチ;
1104…データ処理終了ラッチ;
1105…インクリメンタ;
1106…マルチプレクサ;
1107A〜B…ラッチ;
1108A〜B…タイミングラッチ;
113A〜E…演算ユニット;
1130…演算器;
1131…制御テーブルメモリ;
1132A〜D…設定情報レジスタ;
1133…マルチプレクサ;
114A〜E…データパイプラインレジスタ;
115A〜E…制御パイプラインレジスタ;
116…出力コントローラ;
1160A〜B…ベースアドレスレジスタ;
1161…制御テーブルメモリ;
1162…加算器;
1163…マルチプレクサ;
117…最終コンテキストIDラッチ;
118…マルチプレクサ;
12…演算エンジン間バッファ;
120A〜H…データレジスタ;
1200…データラッチ;
1201A〜D…ANDロジック;
1202…ORロジック;
1203…マルチプレクサ;
13…コードメモリ;
14…コード転送制御装置;
140…メモリIDレジスタ;
141…アドレスレジスタ;
142…コードアドレスレジスタ;
143A〜C…インクリメンタ;
144A〜D…マルチプレクサ;
145…Validラッチ;
146…比較器;
15…データメモリ

Claims (6)

  1. サイクルごとに第1の演算を行い、前記第1の演算の結果を示す第1のデータと、第1の値又は第2の値を示す第1のバリッド信号とを前記サイクルごとに出力する第1の演算エンジンと、
    前記サイクルごとに第2の演算を行い、前記第2の演算の結果を示す第2のデータと、前記第1の値又は前記第2の値を示す第2のバリッド信号とを前記サイクルごとに出力する第2の演算エンジンと、
    前記第1の演算エンジンと前記第2の演算エンジンの間で前記第1のデータ及び前記第2のデータを受け渡すために用いられ、前記第1のバリッド信号又は前記第2のバリッド信号が前記第1の値を示すならば、前記第1のデータ又は前記第2のデータの書込みが可能であり、前記第1のバリッド信号又は前記第2のバリッド信号が前記第2の値を示すならば、前記第1のデータ又は前記第2データの書込みを禁止する演算エンジン間バッファと、を具備し、
    前記第1の演算エンジンは、
    前記第1のバリッド信号の値を決定するための第1のコードを記憶する第1の記憶部と、
    前記第1のコードから前記第1のバリッド信号の値を求め、前記サイクルごとに出力する第1のコントローラと、を具備し、
    前記第2の演算エンジンは、
    前記第3のバリッド信号の値を決定するための第2のコードを記憶する第2の記憶部と、
    前記第2のコードから前記第2のバリッド信号の値を求め、前記サイクルごとに出力する第2のコントローラと、を具備する半導体装置に用いられる前記第1のコード及び前記第2のコードを生成するコンパイラであって、
    コンピュータを、
    前記第1の演算エンジンと前記第2の演算エンジンの間で受け渡される前記第1のデータ及び前記第2のデータの依存関係を示すデータ依存グラフから、前記サイクルごとに、前記第1の演算エンジン及び前記第2の演算エンジンのそれぞれが演算を行うか否かを決定する決定部と、
    前記第1の演算エンジンが演算を行うならば、前記第1のコントローラに前記第1の値を出力させ、前記第1の演算エンジンが演算を行わないならば、前記第1のコントローラに前記第2の値を出力させるようなコードを前記第1のコードとして生成し、
    前記第2の演算エンジンが演算を行うならば、前記第2のコントローラに前記第1の値を出力させ、前記第2の演算エンジンが演算を行わないならば、前記第2のコントローラに前記第2の値を出力させるようなコードを前記第2のコードとして生成するコード生成部、として機能させるためのコンパイラ。
  2. 前記決定部は、ある演算への入力となるデータの一部が既に演算されており、該データの一部が前記演算エンジン間バッファに書き込まれているような演算を前記データ依存グラフから特定する特定部と、
    前記特定部により特定された演算が優先して実行されるように前記第1の演算エンジン及び前記第2の演算エンジンのそれぞれの演算の順序を決めるスケジューリング部と、を具備することを特徴とする請求項1に記載のコンパイラ。
  3. サイクルごとに第1の演算を行い、前記第1の演算の結果を示す第1のデータと、第1の値又は第2の値を示す第1のバリッド信号とを前記サイクルごとに出力する第1の演算エンジンと、
    前記サイクルごとに第2の演算を行い、前記第2の演算の結果を示す第2のデータと、前記第1の値又は前記第2の値を示す第2のバリッド信号とを前記サイクルごとに出力する第2の演算エンジンと、
    前記第1の演算エンジンと前記第2の演算エンジンの間で前記第1のデータ及び前記第2のデータを受け渡すために用いられ、前記第1のバリッド信号又は前記第2のバリッド信号が前記第1の値を示すならば、前記第1のデータ又は前記第2のデータの書込みが可能であり、前記第1のバリッド信号又は前記第2のバリッド信号が前記第2の値を示すならば、前記第1のデータ又は前記第2データの書込みを禁止する演算エンジン間バッファと、を具備し、
    前記第1の演算エンジンは、
    前記第1のバリッド信号の値を決定するための第1のコードを記憶する第1の記憶部と、
    前記第1のコードから前記第1のバリッド信号の値を求め、前記サイクルごとに出力する第1のコントローラと、を具備し、
    前記第2の演算エンジンは、
    前記第3のバリッド信号の値を決定するための第2のコードを記憶する第2の記憶部と、
    前記第2のコードから前記第2のバリッド信号の値を求め、前記サイクルごとに出力する第2のコントローラと、を具備する半導体装置に用いられる前記第1のコード及び前記第2のコードを生成するコード生成方法あって、
    決定部が、
    前記第1の演算エンジンと前記第2の演算エンジンの間で受け渡される前記第1のデータ及び前記第2のデータの依存関係を示すデータ依存グラフから、前記サイクルごとに、前記第1の演算エンジン及び前記第2の演算エンジンのそれぞれが演算を行うか否かを決定するステップと、
    コード生成部が、
    前記第1の演算エンジンが演算を行うならば、前記第1のコントローラに前記第1の値を出力させ、前記第1の演算エンジンが演算を行わないならば、前記第1のコントローラに前記第2の値を出力させるようなコードを前記第1のコードとして生成し、前記第2の演算エンジンが演算を行うならば、前記第2のコントローラに前記第1の値を出力させ、前記第2の演算エンジンが演算を行わないならば、前記第2のコントローラに前記第2の値を出力させるようなコードを前記第2のコードとして生成するステップと、を具備するコード生成方法。
  4. サイクルごとに第1の演算を行い、前記第1の演算の結果を示す第1のデータと、第1の値又は第2の値を示す第1のバリッド信号とを前記サイクルごとに出力する第1の演算エンジンと、
    前記サイクルごとに第2の演算を行い、前記第2の演算の結果を示す第2のデータと、前記第1の値又は前記第2の値を示す第2のバリッド信号とを前記サイクルごとに出力する第2の演算エンジンと、
    前記第1の演算エンジンと前記第2の演算エンジンの間で前記第1のデータ及び前記第2のデータを受け渡すために用いられ、前記第1のバリッド信号又は前記第2のバリッド信号が前記第1の値を示すならば、前記第1のデータ又は前記第2のデータの書込みが可能であり、前記第1のバリッド信号又は前記第2のバリッド信号が前記第2の値を示すならば、前記第1のデータ又は前記第2データの書込みを禁止する演算エンジン間バッファと、を具備し、
    前記第1の演算エンジンは、
    前記第1のバリッド信号の値を決定するための第1のコードを記憶する第1の記憶部と、
    前記第1のコードから前記第1のバリッド信号の値を求め、前記サイクルごとに出力する第1のコントローラと、を具備し、
    前記第2の演算エンジンは、
    前記第3のバリッド信号の値を決定するための第2のコードを記憶する第2の記憶部と、
    前記第2のコードから前記第2のバリッド信号の値を求め、前記サイクルごとに出力する第2のコントローラと、を具備する半導体装置に用いられる前記第1のコード及び前記第2のコードを生成するコード生成プログラムあって、
    コンピュータ
    前記第1の演算エンジンと前記第2の演算エンジンの間で受け渡される前記第1のデータ及び前記第2のデータの依存関係を示すデータ依存グラフから、前記サイクルごとに、前記第1の演算エンジン及び前記第2の演算エンジンのそれぞれが演算を行うか否かを決定する決定部と、
    前記第1の演算エンジンが演算を行うならば、前記第1のコントローラに前記第1の値を出力させ、前記第1の演算エンジンが演算を行わないならば、前記第1のコントローラに前記第2の値を出力させるようなコードを前記第1のコードとして生成し、前記第2の演算エンジンが演算を行うならば、前記第2のコントローラに前記第1の値を出力させ、前記第2の演算エンジンが演算を行わないならば、前記第2のコントローラに前記第2の値を出力させるようなコードを前記第2のコードとして生成するコード生成部、として機能させるためのコード生成プログラム。
  5. 第1の設定IDにより識別可能な第1の設定情報を記憶する第1の設定情報レジスタと、
    サイクルごとに前記第1の設定IDに従って前記第1の設定情報レジスタから前記第1の設定情報を読み出し、該第1の設定情報に従って設定を変更しながら第1の演算を行い、前記第1の演算の結果を示す第1のデータと、第1の値又は第2の値を示す第1のバリッド信号とを前記サイクルごとに出力する第1の演算エンジンと、
    第2の設定IDにより識別可能な第2の設定情報を記憶する第2の設定情報レジスタと、
    サイクルごとに前記第2の設定IDに従って前記第2の設定情報レジスタから前記第2の設定情報を読み出し、該第2の設定情報に従って設定を変更しながら第2の演算を行い、前記第2の演算の結果を示す第2のデータと、第1の値又は第2の値を示す第2のバリッド信号とを前記サイクルごとに出力する第2の演算エンジンと、
    前記第1の演算エンジンと前記第2の演算エンジンの間で前記第1のデータ及び前記第2のデータを受け渡すために用いられ、前記第1のバリッド信号又は前記第2のバリッド信号が前記第1の値を示すならば、前記第1のデータ又は前記第2のデータの書込みが可能であり、前記第1のバリッド信号又は前記第2のバリッド信号が前記第2の値を示すならば、前記第1のデータ又は前記第2データの書込みを禁止する演算エンジン間バッファと、を具備し、
    前記第1の演算エンジンは、
    前記第1のバリッド信号の値を決定するための第1のコードを記憶する第1の記憶部と、
    前記第1のコードから前記第1のバリッド信号の値を求め、前記サイクルごとに出力する第1のコントローラと、を具備し、
    前記第2の演算エンジンは、
    前記第3のバリッド信号の値を決定するための第2のコードを記憶する第2の記憶部と、
    前記第2のコードから前記第2のバリッド信号の値を求め、前記サイクルごとに出力する第2のコントローラと、を具備するリコンフィギュアラブルデバイスに用いられる前記第1のコード及び前記第2のコードを生成するコンパイラであって、
    コンピュータを、
    前記第1の演算エンジンと前記第2の演算エンジンの間で受け渡される前記第1のデータ及び前記第2のデータの依存関係を示すデータ依存グラフから、前記サイクルごとに、前記第1の演算エンジン及び前記第2の演算エンジンのそれぞれが演算を行うか否かを決定する決定部と、
    前記第1の演算エンジンが演算を行うならば、前記第1のコントローラに前記第1の値を出力させ、前記第1の演算エンジンが演算を行わないならば、前記第1のコントローラに前記第2の値を出力させるようなコードを前記第1のコードとして生成し、
    前記第2の演算エンジンが演算を行うならば、前記第2のコントローラに前記第1の値を出力させ、前記第2の演算エンジンが演算を行わないならば、前記第2のコントローラに前記第2の値を出力させるようなコードを前記第2のコードとして生成するコード生成部と、として機能させるためのコンパイラ。
  6. 前記決定部は、ある演算への入力となるデータの一部が既に演算されており、該データの一部が前記演算エンジン間バッファに書き込まれているような演算を前記データ依存グラフから特定する特定部と、
    前記特定部により特定された演算が優先して実行されるように前記第1の演算エンジン及び前記第2の演算エンジンのそれぞれの演算の順序を決めるスケジューリング部と、を具備する請求項5に記載のコンパイラ。
JP2009014308A 2009-01-26 2009-01-26 コンパイラ、コード生成方法、コード生成プログラム Expired - Fee Related JP4703735B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2009014308A JP4703735B2 (ja) 2009-01-26 2009-01-26 コンパイラ、コード生成方法、コード生成プログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2009014308A JP4703735B2 (ja) 2009-01-26 2009-01-26 コンパイラ、コード生成方法、コード生成プログラム

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
JP2007084281A Division JP4444305B2 (ja) 2007-03-28 2007-03-28 半導体装置

Publications (2)

Publication Number Publication Date
JP2009140514A JP2009140514A (ja) 2009-06-25
JP4703735B2 true JP4703735B2 (ja) 2011-06-15

Family

ID=40870985

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2009014308A Expired - Fee Related JP4703735B2 (ja) 2009-01-26 2009-01-26 コンパイラ、コード生成方法、コード生成プログラム

Country Status (1)

Country Link
JP (1) JP4703735B2 (ja)

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2006018514A (ja) * 2004-06-30 2006-01-19 Fujitsu Ltd 演算装置、演算装置の制御方法、プログラム及びコンピュータ読取り可能記録媒体
JP2006040254A (ja) * 2004-06-21 2006-02-09 Sanyo Electric Co Ltd リコンフィギュラブル回路および処理装置
JP2006099719A (ja) * 2004-08-30 2006-04-13 Sanyo Electric Co Ltd 処理装置

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS6246354A (ja) * 1985-08-23 1987-02-28 Nec Corp ペ−ジ履歴メモリ制御方式

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2006040254A (ja) * 2004-06-21 2006-02-09 Sanyo Electric Co Ltd リコンフィギュラブル回路および処理装置
JP2006018514A (ja) * 2004-06-30 2006-01-19 Fujitsu Ltd 演算装置、演算装置の制御方法、プログラム及びコンピュータ読取り可能記録媒体
JP2006099719A (ja) * 2004-08-30 2006-04-13 Sanyo Electric Co Ltd 処理装置

Also Published As

Publication number Publication date
JP2009140514A (ja) 2009-06-25

Similar Documents

Publication Publication Date Title
JP7264955B2 (ja) プログラム可能な最適化を有するメモリネットワークプロセッサ
CN109213723B (zh) 一种用于数据流图处理的处理器、方法、设备、及一种非暂时性机器可读介质
US9830156B2 (en) Temporal SIMT execution optimization through elimination of redundant operations
JP6143872B2 (ja) 装置、方法、およびシステム
JP4986431B2 (ja) プロセッサ
JP6373425B2 (ja) 複数のビットを左にシフトし、複数の1を複数の下位ビットにプルインするための命令
US20110231616A1 (en) Data processing method and system
CN117724763A (zh) 用于矩阵操作加速器的指令的装置、方法和系统
KR100681199B1 (ko) 코어스 그레인 어레이에서의 인터럽트 처리 방법 및 장치
JP2012529096A (ja) ベクトル命令を取り扱うためのデータ処理装置および方法
CN108780395B (zh) 矢量预测指令
US20140047218A1 (en) Multi-stage register renaming using dependency removal
JP2017538213A (ja) アウトオブオーダーハードウェアソフトウェア協調設計プロセッサにおいてスタック同期命令を用いてプレディケート値のスタックを実装し維持する方法および装置
TWI613590B (zh) 處理器流水線中的靈活的指令執行
WO2017021675A1 (en) Element size increasing instruction
Wolf et al. AMIDAR project: lessons learned in 15 years of researching adaptive processors
JP4444305B2 (ja) 半導体装置
TWI613589B (zh) 處理器流水線中的靈活的指令執行
JP5231949B2 (ja) 半導体装置、および、半導体装置によるデータ処理方法
US9477628B2 (en) Collective communications apparatus and method for parallel systems
JP4703735B2 (ja) コンパイラ、コード生成方法、コード生成プログラム
JP5145659B2 (ja) ベクトルリネーミング方式およびベクトル型計算機
JP6344022B2 (ja) 演算処理装置および演算処理装置の制御方法
US11176278B2 (en) Efficient rotate adder for implementing cryptographic basic operations
JP5025521B2 (ja) 半導体装置

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20091215

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20100212

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20101012

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20101122

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20110208

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20110308

R151 Written notification of patent or utility model registration

Ref document number: 4703735

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R151

LAPS Cancellation because of no payment of annual fees