以下、この発明に係るSIMD型プロセッサ1の実施の形態を図面を参照して説明する。
まず、この発明にかかるSIMD型プロセッサの全体構成について、図1に従い説明する。
この発明のSIMD型プロセッサ1は、図1に示すように、グローバルプロセッサ2、本実施形態では256組の後述するプロセッサエレメント3aからなるプロセッサエレメントブロック3と、インタフェース4から構成される。インタフェース4はグローバルプロセッサ2の命令に基づき、イメージスキャナなどの外部入力部から演算対象となるデータをプロセッサ内部の入出力用のレジスタフィル31に与えるとともに、演算処理されたデータをレジスタファイル31からプリンタなどの外部出力部へ転送するものである。
この外部入出力装置は、デジタル画像データなどの演算データを入出力するものである。外部入力装置としては、イメージスキャナや画像が格納された画像メモリがあり、外部出力装置としては画像データを印字するプリンタ、データを格納する画像メモリなどがある。
グローバルプロセッサ2は、いわゆるSISD(Single Instruction Stream Single Data Stream)タイプのプロセッサであり、プログラムRAMとデータRAMを内蔵し、プログラムを解読し、各種制御信号を生成する。この制御信号は内蔵する各種ブロックの制御以外にもレジスタファイル31、演算アレイ36に供給される。また、GP(グローバルプロセッサ)命令実行時は内蔵する汎用レジスタ、ALU(算術論理演算器)等を使用して各種演算処理、プログラム制御処理を行う。
レジスタファイル31はPE(プロセッサエレメント)命令で処理されるデータを保持している。このPE命令はSIMD(Single Instruction Stream Multiple Data Stream)タイプの命令であり、レジスタファイル31に保持されている複数のデータを同時に同じ処理を行う。このレジスタファイル31からのデータの読み出し/書き込みの制御はグローバルプロセッサ2からの制御によって行われる。読み出されたデータは演算アレイ36に送られ、演算アレイ36での演算処理後にレジスタファイル31に書き込まれる。
また、レジスタファイル31はプロセッサ外部からのアクセスが可能であり、グローバルプロセッサ2の制御とは別に外部から特定のレジスタを読み出し/書き込みが行われる。
演算アレイ36にてPE命令の演算処理が行われる。この処理の制御はすべてグローバルプロセッサ2から行われる。
次に、図2を参照して、SIMD型プロセッサ1のレジスタファイル31へのデータの読み出し/書き込みの一例につき説明する。
グローバルプロセッサ2にはこのプロセッサのプログラム格納用のプログラムRAM21と演算データ格納用のデータRAM24が内蔵されている。さらに、プログラムのアドレスを保持するプログラムカウンタ(PC)、演算処理のデータ格納のための汎用レジスタであるG0〜G3レジスタ、レジスタ退避、復帰時に退避先データRAMのアドレスを保持しているスタックポインタ(SP)、サブルーチンコール時にコール元のアドレスを保持するリンクレジスタ(LS)、同じくIRQ時とNMI時の分岐元アドレスを保持するLI、LNレジスタ、プロセッサの状態を保持しているプロセッサステータスレジスタ(P)のレジスタ群25が内蔵されている。さらに、グローバルプロセッサ2は、プログラムRAM21に基づきグローバルプロセッサ2、プロセッサエレメントブロック3、インタフェース4を制御するシーケンスユニット22を備える。
また、グローバルプロセッサ2は、これらのレジスタ群25と図示していない命令デコーダ、算術論理演算器23(以下、「ALU23」という。)、図示していないメモリ制御回路、割り込み制御回路、外部I/O制御回路、GP演算制御回路を使用してGP命令の実行が行われる。
また、PE命令実行時は命令デコーダ、図示していないレジスタファイル制御回路、PE演算制御回路を使用して、レジスタファイル31の制御と演算アレイ36の制御を行う。
また、この実施形態では、後述するように、グローバルプロセッサ2の命令に従いテーブルRAMから複数のプロセッサエレメント3aにデータが転送可能に構成されている。
上記したように、シーケンスユニット22は、プロセッサエレメントブロック3を構成するレジスタファイル31、及び演算アレイ36を制御する。
この演算アレイ36は、マルチプレクサ32、シフト拡張回路33、算術論理演算器34(以下、「ALU34」という)、及びAレジスタ35a及びFレジスタ35bを備える。なお、この図2には記載していないが、この実施形態においては、後述するように、比較手段としての、条件レジスタ及び条件選択レジスタを備える。
さらに、このシーケンスユニット22は、インタフェース4に対してデータ転送のための動作設定用データ及びコマンド等を送る。インタフェース4は、シーケンスユニット22の動作設定用データ及びコマンドに基づき、プロセッサエレメント3aのアドレス指定のためのアドレス制御信号、プロセッサエレメント3aを構成するレジスタ31bにデータのリード/ライトを指示するためのリード/ライト制御信号、クロック信号を与えるためのクロック制御信号を生成する。
ここで、リード/ライト制御信号のうちライト制御信号とは、演算処理されるデータをデータバス41dより取得して、プロセッサエレメント3aのレジスタ31bに保持させるための信号をいう。一方、リード/ライト制御信号のうちリード制御信号とは、プロセッサエレメント3aのレジスタ31bが保持している演算処理されたデータを、データバス41dへ与えるようレジスタ31bに指示するための信号をいう。
インタフェース4は、グローバルプロセッサ2からのコマンドを受けて、プロセッサエレメントブロック3を構成するプロセッサエレメント3aのアドレスを指定する信号(以下、「アドレス指定信号」という。)を作成し、アドレスバス41aを介してプロセッサエレメント3aのレジスタコントローラ31aに送る。また、インタフェース4は、後述するように、プロセッサエレメント3aを構成するレジスタ31bに対して、データのリード/ライトを指示するための信号(以下、「リード/ライト指示信号」という。)を、リード/ライト信号線41bを介してプロセッサエレメント3aの後述するレジスタコントローラ31aヘリード/ライト信号が与えられる。
また、インタフェース4は、クロック信号線41cを介してプロセッサエレメント3aの後述するレジスタコントローラ31aへクロック信号を与える。
さらに、外部入出力データバスからは、上述したように、SIMD型プロセッサ1の外部に設けられたイメージスキャナ等で読み込んだデータを、本実施形態では8ビットのパラレルデータとして、インタフェース4に与える。この8ビットのデータは、データバス41dに与えられる。この8ビットのパラレルデータについては、データに応じて適宜変更しても問題ない。このデータバス41dは、レジスタ31bに保持されている演算処理されたデータが、SIMD型プロセッサ1の外部に転送される時にも使用される。
また、レジスタ群25は、プロセッサエレメントブロック3の後述するレジスタ35に接続されており、このレジスタ35との間でシーケンスユニット22の制御によりデータの交換が行われる。
プロセッサエレメントブロック3は、図2に示すように、レジスタファイル31、マルチプレクサ32、シフト・拡張回路33、算術論理演算器34(以下、「ALU34」という。)、レジスタ35a、35bを一単位とする複数のプロセッサエレメント3aを備える。レジスタファイル31には、1つのプロセッサエレメント3a単位に8ビットのレジスタが32本内蔵されており、本実施形態では256のプロセッサエレメント分の組がアレイ構成になっている。レジスタファイル31は1つのプロセッサエレメント(PE)3aごとにR0、R1、R2、...R31と呼ばれているレジスタが内蔵されている。それぞれのレジスタファイル31は演算アレイ36に対して1つの読み出しポートと1つの書き込みポートを備えており、8ビットのリード/ライト兼用のバスで演算アレイ36からアクセスされる。32本のレジスタの内、24本はプロセッサ外部からアクセス可能であり、外部からクロックとアドレス、リード/ライト制御を入力することで任意のレジスタを読み書きできる。
レジスタの外部からのアクセスは1つの外部ポートで各プロセッサエレメント3aの1つのレジスタがアクセス可能であり、外部から入力されたアドレスでプロセッサエレメントの番号(0〜255)を指定する。したがって、レジスタアクセスの外部ポートは全部で24組搭載されている。
本実施形態では、プロセッサエレメント3aの数を256個として説明するが、これに限定されるものでなく適宜変更して使用してもよい。このプロセッサエレメント3aには、グローバルプロセッサ2のシーケンスユニット22により、インタフェース4に近い順に0から255までのアドレスが割り付けられる。
プロセッサエレメント3aのレジスタファイル31は、レジスタコントローラ31a、2種類のレジスタ31b、31cを備える。本実施形態では、図2に示すように、一単位のプロセッサエレメント3a毎に、レジスタコントローラ31aとレジスタ31bとを24組備え、さらにレジスタ31cを8個備えている。図2中の1プロセッサエレメントとは1つのプロセッサエレメント3aを表している。ここで、本実施形態では、レジスタ31b、31cを8ビットのものとして扱うが、これに限定されるものでなく適宜変更して使用してもよい。
レジスタコントローラ31aは、図2に示すように、インタフェース4と、上述したアドレスバス41a、リード/ライト信号線41b、クロック信号線41cを介して接続されている。
インタフェース4は、グローバルプロセッサ2からデータ転送指示を受け取ると、アドレス指定信号をアドレスバス41aを介してプロセッサエレメントブロック3に送る。これにより、プロセッサエレメント3aがアドレス指定される。レジスタコントローラ31aは、送られてきたアドレス指定信号をデコードし、デコードしたアドレスと、自己に割り付けられたアドレスとが一致する場合には、クロック信号41cを介して送られてきたクロック信号に同期して、リード/ライト信号41bから送られてきたリード/ライト指示信号を得る。具体的には、レジスタコントローラ31aは、リード/ライト信号41bを介してリード/ライト指示信号を得る。そして、このリード/ライト指示信号はレジスタ31bに与えられる。
レジスタコントローラ31aからプロセッサエレメント3aに対し、ライト指示信号が送られてきた場合には、プロセッサエレメント3aのレジスタ31bは、演算処理されるデータ(8ビット)をデータバス41dより取得して保持する。また、レジスタコントローラ31aからプロセッサエレメント3aに対し、リード指示信号が送られてきた場合には、プロセッサエレメント3aのレジスタ31bは、演算処理されたデータ(8ビット)をデータバス41dへ送る。
レジスタ31bは、後述するALU34でこれから演算される外部から入力されたデータを保持したり、或いはALU34で演算処理されたデータを外部へ出力するために保持するものであり、いわゆる入力レジスタとしても、或いは出力レジスタとしても機能する。また、演算処理されるデータ、或いは演算されたデータを一時的に保持するといった、後述するレジスタ31cとしての機能も有する。なお、本実施形態では、レジスタ31bは8ビットのデータを保持できるものとして扱うが、データに応じて適宜変更しても問題ない。上述したレジスタコントローラ31aからライト指示信号が与えられると、レジスタ31bは演算処理されるデータをデータバス41dより取得して保持する。一方、レジスタコントローラ31aからリード指示信号が送られてくると、レジスタ31bは保持している演算処理されたデータをデータバス41dへ与える。このデータはインタフェース4から外部データバスを介して外部のプリンタなどへ転送される。
また、レジスタ31bは、本実施形態においては8ビットデータをパラレルで転送するデータバス37を介してマルチプレクサ32に接続されている。ALU34で演算処理されるデータ、或いはALU34で演算処理されたデータは、このデータバス37を介して、レジスタ31bとの間で転送される。この転送は、グローバルプロセッサ2のシーケンスユニット22からの指示によって、グローバルプロセッサ2に接続されたリード信号線26a、ライト信号線26bを介して行われる。具体的には、グローバルプロセッサ2のシーケンスユニット22から、リード信号線26aを介してリード指示信号が送られてくると、レジスタ31bは保持している演算処理されるデータをデータバスへ置く。このデータはALU34へ送られ演算処理される。一方、グローバルプロセッサ2のシーケンスユニット22から、ライト信号線26bを介してライト指示信号が送られてくると、レジスタ31bはデータバス37を介して送られてきたALU34で演算処理されたデータを保持する。
レジスタ31cは、レジスタ31bより与えられた演算処理されるデータ、或いは演算されたデータがレジスタ31bに与えられる前に、そのデータを一時的に保持するものである。さらに、この実施の形態においては、レジスタ31cは後述するように、グローバルプロセッサ2からのデータが与えられる。
演算アレイ36は、マルチプレクサ32、シフト/拡張回路33、16ビットALU34及び16ビットのレジスタ35a、35bを備えている。このレジスタは、16ビットのAレジスタ35a、Fレジスタ35bである。
プロセッサエレメント3aの命令による演算は、基本的にレジスタファイル31から読み出されたデータをALU34の片側の入力としてもう片側にはレジスタ35のAレジスタの内容を入力として結果をAレジスタに格納する。したがって、Aレジスタ35aとレジスタファイル31のR0〜R31レジスタとの演算が行われることとなる。レジスタファイル31と演算アレイ36との接続に(7to1)のマルチプレクサ32を置いており、プロセッサエレメント方向で左に1、2、3つ離れたデータと右に1、2、3つ離れたデータ、中央のデータを演算対象として選択している。また、レジスタファイル31の8ビットのデータはシフト/拡張回路33により任意ビットを左シフトしてALU34に入力される。
上記したように、マルチプレクサ32は、自己のプロセッサエレメント3aに備えられた上記データバス37に接続されるとともに、両隣3つのプロセッサエレメント3aに備えられたデータバス37にも接続されている。このマルチプレクサ32は7つのプロセッサエレメント3aから1つを選択し、その選択したプロセッサエレメント3aにおけるレジスタ31b、31cで保持されているデータをALU34へ送る。或いはALU34で演算処理されたデータを、選択したプロセッサエレメント3aにおけるレジスタ31b、31cへ送る。これによって、隣のプロセッサエレメント3aにおけるレジスタ31b、31cで保持されているデータを利用した演算処理が可能になり、SIMD型プロセッサ1の演算処理能力を高めることができる。
シフト/拡張回路33は、マルチプレクサ32から送られてきたデータを所定ビットシフトしてALU34へ送る。或いはALU34から送られてきた演算処理されたデータを所定ビットシフトしてマルチプレクサ32へ送る。
ALU34は、シフト/拡張回路33から送られてきたデータと、レジスタ35に保持されているデータとに基づき算術論理演算を行う。なお、本実施形態では、ALU34は16ビットのデータに対応できるものとして扱うが、データに応じて適宜変更しても問題ない。演算処理されたデータは、Aレジスタ35aに保持され、シフト/拡張回路33に転送されたり、或いはグローバルプロセッサ2の汎用レジスタ25へ転送される。
グローバルプロセッサ2からインタフェース4へはI/O用のアドレス、データ、コントロール信号がバスを介して与えられる。
さらに、図示していない条件レジスタ(T)により、プロセッサエレメント(PE)3a毎に演算実行の有効/無効の制御をしており特定のプロセッサエレメント(PE)3aだけを演算対象として選択できるように構成している。
上記したように、この実施形態においては、レジスタファイル31には1つのPE3a単位に8ビットのレジスタが32本内蔵されており、256PE分の組みがアレイ構成になっている。レジスタはPEごとにR0、R1、R2、...R31と呼ばれている。それぞれのレジスタは演算アレイ36に対して1つの読み出ししポートと1つの書き込みポートを備えており、8ビットのリード/ライト兼用のバス37で演算アレイからアクセスされる。32本のレジスタの内、24本(R0〜R23)のレジスタ31bは、プロセッサ外部からアクセス可能であり、外部からクロックとアドレス、リード/ライト制御を入力することで任意のレジスタを読み書きできる。
残りの8本(R24〜R31)のレジスタ31cはPE演算の一時的な演算データ保存用として使用されるが、グローバルプロセッサ2のデータRAM24からのデータを書き込むこともできる。グローバルプロセッサ2からのライト制御と演算アレイ36の条件レジスタ35cの条件により、レジスタファイル31に内蔵される8本のレジスタ31cにグローバルプロセッサ2のデータRAM24のデータを条件が成立している複数のPE3aに同時に書き込みが可能に構成されている。また、この実施形態では、テーブルRAMは64ビットの出力ポートを持つため1つのPE3aに対しても8本のレジスタ31cに同時に64ビットの書き込みが可能に構成している。
上述したように、演算アレイ36は16ビットALU34と16ビットAレジスタ35a、Fレジスタ35bを内蔵している。PE命令による演算はレジスタファイル31から読み出されたデータもしくはグローバルプロセッサ2から与えられたデータをALU34の片側の入力としてもう片側にはAレジスタ35aの内容を入力として結果をAレジスタに格納する。したがって、Aレジスタ35aとR0〜R31レジスタ31b、31cもしくはグローバルプロセッサ2から与えられたデータとの演算が行われることとなる。
次に、この発明の特徴であるグローバルプロセッサ2の命令に従いテーブルRAMのデータを条件が成立している複数のPE3aに同時に書き込む態様につき図3を参照して説明する。
レジスタファイル31の中のレジスタ31cはグローバルプロセッサ2のレジスタファイル制御回路27を介して、テーブルRAM26のデータが入力される。テーブルRAM26は、非線形変換処理のためのデータメモリとして用いる。このテーブルRAM26からレジスタ31cへの書き込みはレジスタファイル制御回路27のライト制御信号により行われる。レジスタ31cにはライトコントロール回路31dが設けられている。このライトコントロール回路31dにライト制御信号がテーブルライト信号線41gを介して与えられる。ライトコントロール回路31dには、演算アレイ36から条件成立信号が与えられる。ライトコントロール回路31dは、ライト制御信号はレジスタ31cのライトW1に与えられる。
各レジスタ31cの書き込み制御を行っているライトコントロール回路31dにおいては、演算アレイ36から与えられた条件成立信号が成立を示しているPE3aのレジスタ31cにライト(W1)制御信号として与えられる。したがって、レジスタファイル制御回路27からは全てのPE3aのレジスタ31cにテーブルデータバス41eを介してからテーブルRAM26のデータを書き込むが、各PE3aでは条件が成立しているものはデータ(D1)からデータが書き込まれ、不成立のものはデータが書き込まれないこととなる。
レジスタ31cは演算アレイ36ともデータバス37を介してデータの転送を行うため、もう一方の出力ポートを持ち、命令によりグローバルプロセッサ2で作成され、リード信号線41hを介して与えられたたリード(R2)制御信号によりデータ(D2)からデータの転送が行われる。
図3では5個のPE3a…分の構成だけを図示しているが、図2の256組のPE3aの構成と合わせるためにはライトコントロール回路31dとレジスタ31cは256組み必要となる。データのビット幅もここでは8ビットとしているが扱う演算ビット幅により変化する。
また、テーブルRAM26は図示しないグローバルプロセッサ2の汎用レジスタ(G0〜G3)をアドレスのポインタとしてアドレスが指定され、同様に汎用レジスタ(G0〜G3)のデータを書き込まれることで値が設定される。
演算アレイ36には図2で説明したブロックが内蔵されており、ALU34の入力の片側はレジスタ(R0〜R31)の内容と即値データバス41fの内容が選択できるようになっている。即値データバス41fはグローバルプロセッサ2からデータが転送され、命令コードに組みこまれた値(即値)もしくは汎用レジスタ(G0〜G3)の値が命令により選択されている。
さて、図3に示す実施の形態において非線形処理のためのテーブル変換は以下のステップにより行う。なお、演算対象データはレジスタファイル31のレジスタ31b(図3では図示していない)のうちレジスタR0に格納されているものとして説明する。
(1)図示していないレジスタファイル31のレジスタ(R0)に格納された演算(演算前)対象データを各PE3aのデータバス37を介してマルチプレクサ32、シフタ33、マルチプレクサ39、ALU34の経路でAレジスタ35aにロードする。
(2)グローバルプロセッサ2は即値データバス41fを介して変換前データをALU34に入力する。ALU34のもう一方には(1)で格納されたAレジスタ35aが入力されており、ALU34において一致演算処理を行う。一致結果は一致となっているものを条件成立として8ビットの条件レジスタ35cの任意の1ビットに格納される。
(3)グローバルプロセッサ2は変換前データに対応した変換後データが格納されているアドレスをテーブルRAM26に出力し、変換後データをテーブルデータバス41eを介して全PE3a…のレジスタファイル31のレジスタ31cに書き込む。演算アレイ部では(2)で選択された条件レジスタ35cの任意の1ビットを条件選択回路35dで選択し、条件成立信号としてレジスタファイル31のライトコントロール回路31dに出力する。レジスタファイル31のレジスタ31cではライトコントロール回路31dがライト信号と条件成立信号を受け取り、条件成立のPE3aだけテーブルデータバス41eの内容(変換後データ)をレジスタ31cに書き込む。
(4)グローバルプロセッサ2は次の変換前データを準備し(2)〜(3)の動作を繰り返す。変換前データの種類に応じた回数の上記処理の繰り返しでテーブル変換が終了する。この例では変換後のテーブルデータを1つだけ使用していたが実際には以下の処理を行い、高速化を実現している。
(1)図示していないレジスタファイル31のレジスタ(R0)に格納された演算(演算前)対象データを各PE3a…のデータバス37を介してマルチプレクサ32、シフタ33、マルチプレクサ39、ALU34の経路でAレジスタ35aにロードする
(2)グローバルプロセッサ2は即値データバス41fを介して変換前データをALU34に入力する。ALU34のもう一方には(1)で格納されたAレジスタ35aのデータが入力されており、ALU34において大小比較演算処理を行う。演算対象データの比較結果は大となっているものを条件成立として8ビットの条件レジスタ35cの任意の1ビットに格納される。
(3)グローバルプロセッサ2は変換前データに対応した変換後データが格納されているアドレスをテーブルRAM26に出力し、変換後データをテーブルデータバス41eを介して全PE3aのレジスタファイル31のレジスタ31cに書き込む。この時、この実施の形態においては、図4に示すように、変換後データは変換前データから連続した8つの変換前データに対応したデータとして8ビットのデータが8組みのテーブルデータバス41eに出力される。この実施の形態では、それぞれの組みは各8ビット(R24〜R31)のレジスタに対応して書き込まれる。演算アレイ36では(2)で選択された条件レジスタ35cの任意の1ビットを条件選択回路35dで選択し、条件成立信号としてレジスタファイル31の各レジスタ31cに出力する。レジスタファイル31のレジスタ31cではライトコントロール回路35dがライト信号と条件成立信号を受け取り、条件成立のPE3aだけテーブルデータバス41eの内容をレジスタ31cに書き込む、この時に書き込まれるレジスタ31cは8組み(R24〜R31)同時となる。
(4)グローバルプロセッサ2は変換前データに8加算を行い、次の8つ先の変換前データを準備し(2)〜(3)の動作を繰り返す。
(5)Aレジスタ35aの演算前データ下位3ビットを残して上位5ビットをマスクするためAレジスタ35aの内容と即値7でALU34においてAND演算を行いAレジスタ35aに格納する。
(6)Aレジスタ35aをALU34において1から7まで順次比較する。一致結果を条件レジスタ35cのT1からT7まで順次格納する。
(7)レジスタ(R24)の値をAレジスタ35aにロードする。ついで条件レジスタ35cのT1が成立したPE3aはレジスタ(R25)の値をAレジスタ35aにロードし、条件レジスタ35cのT2が成立したPE3aはレジスタ(R26)をAレジスタ35aにロード、と順次行い条件レジスタ35cのT7が成立のPE3aはレジスタ(R31)の値をAレジスタ35aにロードする。
以上の処理により、同時に8個の変換後データを書き込むことで、8倍の高速化が図れる。そして、8個の変換後データ中から、そのプロセッサエレメントで必要な1つのデータを選択するために、上記(5)〜(7)の動作を必要とする。この処理は、上記(2)〜(3)の繰り返しが終了した後の最後に1回だけ必要であり、オーバーヘッドとしては小さな値となる。ここではαと表すと、変換前データの種類の1/8+αの回数でテーブル変換が終了することになり、高速化が図れる。
本実施形態では、変換後のデータを8組としているが実際には2、4、8から任意の組を命令により指定可能である。その場合は(4)の加算値は2、4、8となり、(5)のマスク値は1、3、7となり、(6)の比較は1、1〜3、1〜7、(7)のロードはR24〜R25、R24〜R27、R24〜R31と変更となる。
次に、テーブル変換に使用するレジスタ数を削減する手法につき説明する。レジスタ数を削減するためには以下のような手順で処理を行えばよい。
(1)図示していないレジスタファイル31のレジスタ(R0)に格納された演算(演算前)対象データを各PE3aのデータバス37を介してマルチプレクサ32、シフタ33、マルチプレクサ39、ALU34の経路でAレジスタ35aにロードする
(2)グローバルプロセッサ2は即値データバス41fを介して変換前データをALU34に入力する。ALU34のもう一方には(1)で格納されたAレジスタ35aが入力されており、ALU34において大小比較演算処理を行う。比較結果は大となっているものを条件成立として8ビットの条件レジスタ37の任意の1ビットに格納される。また、条件成立のPE3aではAレジスタ35aから変換前データを引いた値を変換前データとの差分データとして一時的にレジスタ(R1)に格納する。
(3)グローバルプロセッサ2は変換前データに対応した変換後データが格納されているアドレスをテーブルRAM26に出力し変換後データをテーブルデータバス41eを介して全PE3aのレジスタファイル31のレジスタ31cに書き込む。この時、図5に示すように、変換後データは変換前データに対応したデータと(4)で使用される次の区間の先頭の変換前データまでの傾きデータとして8ビットのデータが2組みテーブルデータバス41eに出力される、それぞれの組みは各8ビット(R24〜R25)のレジスタに対応して書き込まれる。演算アレイ部36では(2)で選択された条件レジスタ35cの任意の1ビットを条件選択回路35dで選択し条件成立信号としてレジスタファイル31に出力する。レジスタファイル31ではライトコントロール回路31dがライト信号と条件成立信号を受け取り条件成立のPE3aだけテーブルデータバス41eの内容をレジスタ31cに書き込む、この時に書き込まれるレジスタ31cは2組み(R24〜R25)同時となる。
(4)グローバルプロセッサ2は次の区間の先頭の変換前データを準備し(2)〜(3)の動作を繰り返す。
(5)Aレジスタ35aに一時的に退避された差分データをレジスタ(R1)からロードし、傾きデータ(R25)とALU34で掛け算を行いAレジスタ35aに格納する。
(6)Aレジスタ35aに変換後データ(R24)を加算する。
上記した方式は、図6に示すように、変換前データを任意の区間に分割し、その区間内は共通の一次式で近似して処理を行うものである。すなわち、図6に示すように、変換前データと変換後データの非線形曲線の関係からそれぞれ近似する一次式(傾き)で表せる区間に分割する。図6に示す非線形処理では、4つの区間に分割する。そして、その区間内は共通の一次式を用いて処理を行う。変換前データが区間1の時は、区間1の先頭の変換後データと傾きデータを用いて変換後データを算出し、変換前データが区間2の時は、区間2の先頭の変換後データと傾きデータを用いて変換後データを算出する。以後それぞれの区間でその区間の先頭の変換後データと傾きデータを用いて、近似的に非線形処理を行ってゆく。それぞれの区間でこのような手順を用いることで使用するレジスタが2つとなりレジスタ数が削減できるようになる。また、区間を少なく設定できれば変換テーブルの削減、処理ステップ数の削減も可能となる。
次に、この発明の他の実施形態につき図7に従い説明する。なお、基本的な構成は図3に示す実施形態と同様の構成であり、同一部分には、同一符号を付し、説明の重複を避けるために、ここではその説明を割愛する。
図7に示す実施形態は、レジスタファイル31のテーブル変換に用いる8本(R24〜R31)のレジスタファイルの構成を変更したものである。図3の基本構成のレジスタ31cからライト信号(W2)を追加したレジスタ310cにその構成を変更したものである。そして、レジスタ310cのデータ(D2)には、データバス37からデータが入出力可能に構成されている。ライト信号(W2)には、レジスタファイル制御回路27よりライト信号線41iから演算アレイ36からのデータを書き込む場合にライト信号が与えられる。このように、演算アレイ36からのデータをレジスタ310c書き込めるようにしている。
この構成によりこのレジスタ310cでは演算結果の保持等が可能となり、テーブル変換を行わない場合には通常の演算用のレジスタとしても使用が可能となる。テーブル変換を行う場合には、上述した図4に示した処理、あるいは図5に示した処理を行うために、レジスタ310cが使用される。
次に、この発明のさらに異なる実施形態につき図8に従い説明する。なお、基本的な構成は図3に示す実施形態と同様の構成であり、同一部分には、同一符号を付し、説明の重複を避けるために、ここではその説明を割愛する。
この実施形態は、図3の基本構成からテーブルRAM26の出力データをマルチプレクサ28により選択して、グローバルプロセッサ2の演算部に出力するように構成したものである。この構成によりテーブルRAM26のデータをグローバルプロセッサ2の演算データとして使用可能となり、テーブルRAM26を通常のデータRAM24と共用することが可能となる。
テーブルRAM26の出力データをマルチプレクサ28により選択している理由はテーブルRAM26が8組みの変換後データを出力可能な場合には合計で64ビット(8ビットの8組み)の出力ポートがRAMには必要である。上述したグローバルプロセッサ2では16ビットまでしか処理できないため、この中の16ビット(8ビット2組み)を選択しているためである。グローバルプロセッサ2の演算データとして別途16ビットの出力ポートをRAMに追加することでも実現可能であるが、RAMが2ポート構成となりコストの増加となる問題がある。
なお、図8に示す実施形態では、テーブル変換に用いるレジスタファイルは図3に示すレジスタ31cの構成のものを示しているが、図7に示す構成のレジスタ310cを用いることはもちろん可能である。
次に、この発明のさらに異なる実施形態につき図9に従い説明する。なお、基本的な構成は図3に示す実施形態と同様の構成であり、同一部分には、同一符号を付し、説明の重複を避けるために、ここではその説明を割愛する。
この実施の形態においては、レジスタファイル31のレジスタの中で、外部からデータが入力可能なレジスタの数を変更可能に構成したものである。この実施の形態では、2組のレジスタを外部からデータを入力可能なレジスタとして用いる場合と、テーブル変換用レジスタに使用する場合とが選択できるように構成している。このため、これらレジスタ31c、31cは、マルチプレクサ42,43により、レジスタ31cに与えるデータを外部入力用からのデータバス41dを用いるか、テーブルバス31dを用いるかが選択される。このとき、レジスタファイル制御信号もマルチプレクサ42,43で選択される。
尚、上記した実施形態においては、兼用するレジスタの組は2組にしているが、用途に応じてその個数は変更できる。
このように構成することにより、SIMD型プロセッサの使用用途に応じて最適なレジスタファイル構成が容易に構成することができる。
上述した実施形態においては、レジスタファイル31の外部入出力する方式としてアドレッシング方式を採用し、レジスタファイル31をプロセッサ外部からアクセスし、外部からクロックとアドレス、リード/ライト制御を入力することで任意のレジスタを読み書きできるように構成して場合につき説明したが、この発明は他の方式、例えば、外部入出力にシフトレジスタ方式を用いたプロセッサにも適用できる。図10にシフトレジスタ方式を用いた場合の基本構成を示す。
図10に示すように、入力画像データを一時的に蓄積する入力シフトレジスタと、非線形処理された画像データが並列入力される外部出力シフトレジスタとを備える。入力シフトレジスタには、イメージスキャナなどから送られる外部画像データが外部データバスから入力シフトレジスタに与えられる。入力シフトレジスタには並列nビットデータがビット毎に順次シフトされる。この入力シフトレジスタの段数は、プロセッサエレメント3aの組数の段数を有し、この実施形態では256段の段数を有する。入力シフトレジスタに蓄積されたデータはレジスタファイル31へ移される。レジスタファイル31への書き込み動作は入力シフトレジスタの各段において同時に行われる。このように、レジスタファイル31にデータが格納されると、上述したこの発明による手法による非線形処理が演算アレイで行われる。
非線形処理が行われたレジスタファイル31に格納されたデータは出力シフトレジスタの各段に転送される。この出力シフトレジスタのレジスタ段数はプロセッサエレメント3aの組数分だけであり、レジスタファイル31からデータが出力シフトレジスタの各段に同時に転送される。この出力シフトレジスタに与えられるクロックでデータがシリアルに出力される。そして、出力されたデータはバッファメモリなどに一時格納され、プリンタなどの外部出力装置に与えられる。
このように、上記したシフトレジスタ方式においても、非線形処理において、この発明を適用すれば、効率よく非線形処理が行える。
次に、この発明のSIMD型プロセッサをデジタル複写機などの画像処理装置に用いた場合につき図11ないし図13を参照して説明する。
イメージスキャナで読み取られた画像データ(nビットのディジタル画像データ)が外部データバスからFIFO7に与えられる。FIFO7に1走査ライン分のデータが格納されると、SIMD型プロセッサ1のグローバルプロセッサ2からの制御信号により、この実施の形態では256個の画像データがレジスタファイル31へ与えられる。
上記したように、この実施形態においては、レジスタファイル31には1つのPE単位に8ビットのレジスタが32本内蔵されており、256PE分の組みがアレイ構成になっている。レジスタはPEごとにR0、R1、R2、...R31と呼ばれている。それぞれのレジスタは演算アレイに対して1つの読み出ししポートと1つの書き込みポートを備えており、8ビットのリード/ライト兼用のバス37で演算アレイからアクセスされる。32本のレジスタの内、24本(R0〜R23)は、プロセッサ外部からアクセス可能であり、外部からクロックとアドレス、リード/ライト制御を入力することで任意のレジスタを読み書きできる。
残りの8本(R24〜R31)のレジスタはPE演算の一時的な演算データ保存用として使用されるが、グローバルプロセッサ2の命令に従いテーブルRAMからのデータを書き込むこともできる。このデータの書き込みは、グローバルプロセッサ2からのライト制御と演算アレイ36の条件レジスタ35cの条件により、レジスタファイル31に内蔵される8本のレジスタにテーブルRAMのデータを条件が成立している複数のPEに同時に書き込みが可能に構成されている。
演算アレイ36は16ビットALUと16ビットAレジスタ、Fレジスタを内蔵している。PE命令による演算はレジスタファイル31から読み出されたデータもしくはグローバルプロセッサ2から与えられたデータをALUの片側の入力としてもう片側にはAレジスタの内容を入力として結果をAレジスタに格納する。したがって、Aレジスタ35aとR0〜R31レジスタもしくはグローバルプロセッサ2から与えられたデータとの演算が行われることとなる。
FIFO7より転送され、レジスタファイル31に格納された画像データは、前述した図3等に示す実施形態に基づき非線形処理のためのテーブル変換が行われる。すなわち、レジスタファイル31のレジスタ(R0)に格納された演算(演算前)対象データを演算アレイ36で一致演算、或いは大小比較により条件成立の有無を判断し、条件が成立している各PE3aにのみ変換後データが書き込まれる。すなわち、グローバルプロセッサ2が変換前データに対応した変換後データが格納されているアドレスをテーブルRAM26に出力して、変換後データをテーブルデータバスを介して全PE3aのレジスタファイル31のレジスタ31cに与える。そして、ライト信号と条件成立信号を受け取り、条件成立のPE3aだけテーブルデータバスの内容をレジスタに書き込む。そして、上述した図3等に示す実施形態に基づきテーブル変換が終了する。
非線形処理が行われたレジスタファイル31に格納されたデータFIFO8に転送される。FIFO8は1走査ライン分のデータを格納すると、データをプリンタなどの外部出力装置に転送する。
また、画像データを予めラインメモリ9に蓄えておき、ラインメモリ9からプロセッサエレメントブロック3にデータを転送し、非線形処理を行ったデータをラインメモリ9に格納するように構成しても良い。このときのデータ転送はメモリコントローラ91を介してRAM92へ入出力される。
図12にFIFO7の一例を図13にFIFO8の一例をそれぞれ示す。これらFIFO7,8はメモリコントローラ72(82)、バッファメモリ71(81)を備える。外部データ入力はメモリコントローラ72を介してバッファメモリ71へデータが格納され、1ライン分のデータをバッファメモリ71に格納すると、メモリコントローラ72からプロセッサエレメントブロック3へデータを転送する。外部データ出力はプロセッサエレメントブロック3からメモリコントローラ72を介してバッファメモリ71へデータが格納され、1ライン分のデータをバッファメモリ71に格納すると、メモリコントローラ72から外部へデータを出力する。
上記した画像処理装置は、イメージスキャナで取り込んだ画像データをプリンタ部へ出力する場合に付き説明したが、これに限らずデジタルビデオ、ディジタルカメラなどのデジタル画像を非線形処理する場合にもこの発明は適用できる。また、外部出力もプリンタに限らず、ディスプレイへの出力、データ転送などの方式で出力する場合でもこの発明は適用できる。