以下、この発明に係るSIMD型プロセッサの実施の形態につき図面を参照して説明する。
まず、この発明にかかるSIMD型プロセッサの全体構成について、図1に従い説明する。
この発明のSIMD型プロセッサ1は、図1に示すように、グローバルプロセッサ2、本実施形態では256組の後述するプロセッサエレメント3aからなるプロセッサエレメントブロック3と、インターフェース4から構成される。プロセッサエレメント3aは、複数のレジスタファイル群とこれらレジスタファイル群に格納されたデータを演算する演算部を有する。インタフェース4はグローバルプロセッサ2の命令に基づき、イメージスキャナなどの外部入力部から演算対象となるデータを各プロセッサエレメント3aのレジスタフィルに与えるとともに、演算処理されたデータをレジスタファイルからプリンタなどの外部出力部へ転送するものである。
この外部入出力装置は、デジタル画像データなどの演算データを入出力するものである。外部入力装置としては、イメージスキャナや画像が格納された画像メモリがあり、外部出力装置としては画像データを印字するプリンタ、データを格納する画像メモリなどがある。
グローバルプロセッサ2は、いわゆるSISD(Single Instruction Stream Single Data Stream)タイプのプロセッサであり、プログラムRAMとデータRAMを内蔵し、プログラムを解読し、各種制御信号を生成する。この制御信号は内蔵する各種ブロックの制御以外にもプロセッサエレメント3a…に供給される。また、GP(グローバルプロセッサ)命令実行時は内蔵する汎用レジスタ、ALU(算術論理演算器)等を使用して各種演算処理、プログラム制御処理を行う。
プロセッサエレメント3aのレジスタファイルはPE(プロセッサエレメント)命令で処理されるデータを保持している。このPE命令はSIMD(Single Instruction Stream Multiple Data Stream)タイプの命令であり、各プロセッサエレメント3aに同時に同じ処理を行う。各プロセッサエレメント3a…からのデータの読み出し/書き込みの制御はグローバルプロセッサ2からの制御によって行われる。
各プロセッサエレメント3a…の演算部にてPE命令の演算処理が行われる。この処理の制御はすべてグローバルプロセッサ2から行われる。
次に、図2を参照して、SIMD型プロセッサ1のプロセッサエレメント3aへのデータの読み出し/書き込みの一例につき説明する。
このグロバールプロセッサ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演算制御回路を使用して、各プロセッサエレメント3a…の制御を行う。
また、この実施形態では、後述するように、グローバルプロセッサ2の命令に従いテーブルRAMから複数のプロセッサエレメント3aにデータが転送可能に構成されている。
上記したように、シーケンスユニット22は、プロセッサエレメントブロック3を構成する各プロセッサエレメント3a…レジスタファイル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用のアドレス、データ、コントロール信号がバスを介して与えられる。
上記したように、この実施形態においては、レジスタファイル31には1つのプロセッサエレメント3a単位に8ビットのレジスタが32本内蔵されており、256プロセッサエレメント分の組みがアレイ構成になっている。レジスタはプロセッサエレメントごとにR0、R1、R2...R31と呼ばれている。それぞれのレジスタは演算部36に対して1つの読み出ししポートと1つの書き込みポートを備えており、8ビットのリード/ライト兼用のバス37で演算アレイからアクセスされる。32本のレジスタの内、24本(R0〜R23)のレジスタ31bは、プロセッサ外部からアクセス可能であり、外部からクロックとアドレス、リード/ライト制御を入力することで任意のレジスタを読み書きできる。
残りの8本(R24〜R31)のレジスタ31cはプロセッサエレメント演算の一時的な演算データ保存用として使用されるが、グローバルプロセッサ2のデータRAM24からのデータを書き込むこともできる。グローバルプロセッサ2からのライト制御と演算部36変換後データ取得手段により、レジスタファイル31に内蔵される8本のレジスタ31cにグローバルプロセッサ2のデータRAM24のデータの書き込みが可能に構成されている。また、この実施形態では、データRAM24にテーブル変換用データが格納されテーブルRAMとして使用できる。例えば、このRAMは64ビットの出力ポートを持つことで、1つのプロセッサエレメント3aに対しても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のデータをプロセッサエレメント3aに書き込む態様につき参照して説明する。
レジスタファイル31の中のレジスタ31cはグローバルプロセッサ2のレジスタファイル制御回路を介して、テーブルRAMのデータが入力される。テーブルRAMは、非線形変換処理のためのデータメモリとして用いる。このテーブルRAMからレジスタ31cへの書き込みは後述する変換後データ取得手段により行われる。レジスタ31cにはライトコントロール回路(図示しない)が設けられており、このライトコントロール回路に変換後データ取得手段からライト制御信号が与えられる。全てのプロセッサエレメント3aのレジスタ31cにテーブルデータバス41を介してからテーブルRAM26のデータを与え、変換後データ取得手段からライト制御信号が与えられている各プロセッサエレメント3aのレジスタ31cにデータが書き込まれる。
なお、レジスタ31cは演算アレイ36ともデータバス37を介してデータの転送を行うため、もう一方の出力ポートを持ち、命令によりグローバルプロセッサ2で作成されたリード制御信号によりデータからデータの転送が行われる。
また、テーブルRAMは例えば、グローバルプロセッサ2の汎用レジスタ(G0〜G3)をアドレスのポインタとしてアドレスが指定され、同様に汎用レジスタ(G0〜G3)のデータを書き込まれることで値が設定される。
次に、図2に示す実施の形態において非線形処理のためのテーブル変換について説明する。なお、演算対象データはレジスタファイル31のレジスタ31bのうちレジスタR0に格納されているものとして説明する。以下、この発明の動作の理解を容易にするために、1つのレジスタに変換前データが格納され、1つのレジスタに変換後データを格納する場合につきその要部を示す図面を用いて説明する。
図3は、図2で示されるようなSIMDプロセッサのうちの1個のプロセッサエレメント3aと同様に構成されたプロセッサエレメント(PE)100だけを示している。データバス41は、各プロセッサエレメント100…間を跨って配置されているデータ幅のバスである。例えば、8ビットのデータを扱う場合は8ビットのバスである。以下では、データ幅を8ビットであるとして説明する。レジスタ102は、8ビットの変換前データの格納用レジスタであり、レジスタ101は、8ビットの変換後データのレジスタである。レジスタ101,102は上記したレジスタファイル31の中のレジスタで構成される。少なくともレジスタ101は、データバス41から値を入力する経路を持つ。
図示していないレジスタファイル31のレジスタ(R0)に格納された演算(演算前)対象データを各プロセッサエレメント100のデータバス37を介してレジスタ102にロードする。
変換後データ取得回路106は、レジスタ102の内容を参照して、レジスタ101へデータバス41からデータを取得するか否か判断し、データバス41に与えられているデータがレジスタ102に格納されている変換前データに対応する変換後データと一致する時に、そのデータをレジスタ101に格納させるものである。
なお、以下の説明では、変換前データ、変換後データともに8ビットのデータ幅であると仮定する。
図3で示されるプロセッサエレメント100においては、レジスタ102に記憶されている変換前データを変換し、変換後データとしてレジスタ101に格納するものである。データバス41上に、変換前データが“00H”の時の変換後データ、変換前データが“01H”の時の変換後データ、変換前データが“02H”の時の変換後データ、…、変換前データが“FFH”の時の変換後データという順で256通りのデータが存在するとき、プロセッサエレメント100…では変換後データ取得回路106がデータバス41上の変換後データの変換前にあたる変換前データを計算によって求め、計算によって求められた変換前データが、レジスタ101の内容と一致したとき、所望の変換後データがデータバス412上にあることを知ることができる。そのタイミングでレジスタ101に入力されたデータは、レジスタ102を変換前データとしたときの変換後データとなる。このような変換後データ取得回路106につき図4を参照して説明する。
次に、上記した変換後データ取得回路106につき、図4のブロック図に従いさらに説明する。変換後データ取得回路106は、加算器105と、加算器105から演算結果を格納する8ビットのレジスタ103と、変換前データの格納レジスタ102と、レジスタ102とのデータを比較する比較器104と、を備える。比較器104からの出力により、レジスタ101にデータバス41に与えられている変換後データが格納される。この加算器104は、プロセッサエレメントの演算部に備えている加算器(ALU)を用い、レジスタ103もプロセッサエレメント内の演算部に設けられているレジスタ等を用いればよい。
加算器105は、2個のデータを入力し、1個の出力を得る。演算幅は8ビットである。2個の入力のうち1個は固定値“1”または“−1”とする。他方の入力にはレジスタ103の内容が入力可能となっている。レジスタ103は、加算器105の演算結果を記憶する8ビットのレジスタであり、その内容は加算器105の入力データとなるほかに比較器104へ出力される。比較器104は、レジスタ103とレジスタ102の内容を比較する。2つの入力データが一致した場合、比較器104はレジスタ101にデータ入力の指示が出される。
図4に示すプロセッサエレメント100においては、レジスタ102に記憶されている変換前データを変換し、変換後データとしてレジスタ101に格納するものである。この図4に示す変換後データ取得回路106の加算器105は、2個のデータの加算を可能とするが、一方の入力データを固定値“1”とし、他方の入力データを前サイクルの加算結果、すなわちレジスタ103に記憶されている値としている。このように構成すれば、今サイクルの加算結果は、“前回の加算結果+1”となる。加算器105の加算結果は、レジスタ103に毎サイクル記憶されるため、レジスタ103の記憶する値は、1サイクルにつき”1”上昇する。比較器104は、レジスタ102の8ビットデータとレジスタ103の8ビットデータを比較し、一致した場合、レジスタ101に一致信号を送くる。
レジスタ101は、この一致信号を受けとると、データバス41上の8ビットデータを格納する。変換後データは、変換前データの昇べきの順にデータバス2上に存在するものとしたとき、レジスタ103の値とデータバス41上のデータは、変換前データと変換後データであるという関係が保たれる。すなわち、データバス41上には、変換前データが“00H”の時の変換後データ、変換前データが“01H”の時の変換後データ、変換前データが“02H”の時の変換後データ、…、変換前データが“FFH”の時の変換後データというように256通りのデータが存在し、プロセッサエレメント100には変換前データがどんな値であっても、必ず対応するべき変換後データがデータバス41上に存在するサイクルがある。
プロセッサエレメント100としては、レジスタ102に記憶されている変換前データの値がレジスタ103と一致しているタイミングで、変換後データがデータバス2上にあることを知ることができ、比較器104の一致信号のタイミングでレジスタ101に入力されたデータは、レジスタ102を変換前データとしたときの変換後データとなる。
図5は、図4で示されるプロセッサエレメント100で構成されたSIMDプロセッサである。プロセッサエレメント100、200、300は図4のプロセッサエレメント100と同じ構成のプロセッサエレメントである。
この図5においては、3つのプロセッサエレメントだが、4個目以降のプロセッサエレメントは省略している。
データバス41は、すべてのプロセッサエレメント100…に共通のバスであり、すべてのプロセッサエレメント100…に変換後データのレジスタ101にデータ入力する経路を有している。
プロセッサエレメント100…を制御するこの実施形態のグローバルプロセッサ2は、変換後データ送出装置20aを備える。変換後データ送出装置20aは、データバス41にデータを送出する経路を持つ。
グロバールプロセッサ2は変換後データをデータバス41を介して全プロセッサエレメント100…に与える。各プロセッサエレメント100…は変換後データ取得回路106の比較器104が一致信号を出力するタイミングでレジスタ101に変換後データを格納する。
図6は、図5で示されるSIMDプロセッサと基本的には同じ構成である。相違する点は、図5では、グローバルプロセッサ2が変換後データを送出する部分が変換後データ送出装置20aとなっているのに対して、図6では変換テーブル20bと命令デコーダ20cという構成になっている。変換テーブル20bは、入力として命令デコーダ20cからデータを受け取り、データバス41へデータを出力する。
図7は、図5で示されるSIMDプロセッサと基本的には同じ構成である。相違する点は、図5では変換前データ送出装置20aとなっている部分が、図7では変換テーブル20bと加算器20eとレジスタ20dという構成になっている。
加算器20eとレジスタ20dは、アドレス発生回路を構成するもので、加算器20eは、2個のデータを入力し、1個の出力を得る。演算幅は8ビットである。2個の入力のうち1個は固定値“1”または“−1”とすることが可能である。また、他方の入力にはレジスタ20dの内容が入力可能となっている。この加算器20eは、グローバルプロセッサに備えている加算器(ALU)を用い、レジスタ20dも内部に設けられているレジスタ等を用いればよい。
レジスタ20dは、加算器20eの演算結果を記憶する8ビットのレジスタであり、その内容は加算器20eの入力データとなるほかに変換テーブルRAM20bの入力となる。変換テーブル20bは、入力としてレジスタ20dのデータを受け取り、データバス41へ対応するアドレスのデータを出力する。
図5、図6および図7で示した上記実施形態では、図4で説明したプロセッサエレメント100を用いているので、図5、図6および図7の動作の説明においては、プロセッサエレメント100、200および300の動作説明は省略する。
図5の実施形態では、プロセッサエレメント100、200および300は、同一のデータバス41に接続されている。グローバルプロセッサ2には、変換後データ送出装置20aがあり、変換後データを、変換前データの昇べきの順あるいは降べきの順にデータバス41上に出力する。これにより、プロセッサエレメント100、200および300は上記説明の通り動作することで、各プロセッサエレメントにおいてデータの変換という所望の動作を行うことができる。プロセッサエレメント100、プロセッサエレメント200およびプロセッサエレメント300では、データバス41を共通のものとしていることと、各プロセッサエレメントは独立して動作することから、プロセッサエレメントの数は図示している数より多くても、上記動作はまったく同じである。したがって、プロセッサエレメント数が多ければ多いほど変換するデータが多く、効率が良いことになる。
図6の実施形態では、図5で示された変換前データ送出装置20aを、変換テーブル20bと命令デコーダ20cで置き換えている。命令デコーダ20cは、このSIMDプロセッサが持つ命令をデコードする部分である。SIMDプロセッサの命令として、変換テーブル20bに制御信号を入力するが、その命令コードの並び方、すなわちプログラムによって、データバス41上には、変換前データが“00H”の時の変換後データ、変換前データが“01H”の時の変換後データ、変換前データが“02H”の時の変換後データ、…、変換前データが“FFH”の時の変換後データというように変換前データの昇べきの順に256通りのデータが出力するように制御される。仮に、変換前データ“00H”を変換した変換後データをデータバス41に出力する命令を、table #00h というコードで表現するならば、図12に示すプログラムによって昇べきの順にデータバス41に変換後データを出力できる。図13のプログラムであれば、降べきの順を実現できる。
命令デコーダ20cで、生成された制御信号は、変換テーブル20bで変換後データに変換され、データバス41に出力される。変換テーブル20bは、RAMやROMのような記憶装置として構成しても構わない。たとえば、命令デコーダ20cから入力される制御信号をアドレス入力とすれば、データ出力が丁度変換後データに相当する。さらに付け加えるならば、アドレス入力は変換前データそのものであっても構わない。この場合は、アドレス8ビット(256ワード)、データ8ビットのメモリに相当し、アドレス8ビットが変換前データの8ビットである。また、図6では変換テーブル20bをグローバルプロセッサ2に内蔵するようになっているが、変換テーブル4をRAMやROMで構成する場合、グローバルプロセッサ2の外に設けても構わない。すなわち、通常のSIMDプロセッサが動作するために必要であるプログラムメモリや、データメモリの一部として変換テーブル20bが存在しても構わない。
図7に示す実施形態では、図6で示したものと同様の変換テーブル20bを備えているため、変換テーブル20bの説明は省略する。図7の実施形態では、命令デコーダやプログラムによらず、変換前データの昇べきの順あるいは降べきの順を実現する。図7の例では各プロセッサエレメントと同様の加算器20eと加算結果を記憶するレジスタ20dを備え、加算器20eで“1”または“−1”の加算を行なうことで、レジスタ20dの内容を毎サイクル“+1”または“−1”の値に変更できる。すなわち、これは変換前データの昇べきの順あるいは降べきの順に相当し、このデータを入力される変換テーブル20bで変換後データに変換されデータバス41に出力される。
次に、この発明の更に異なる実施形態のプロセッサエレメント100の構成につき図8に従い説明する。
図8のプロセッサエレメント100は、図1で示されるようなSIMDプロセッサのうちの1個のプロセッサエレメント100だけを示している。この実施形態においては、2つのデータバス41A、41Bを有する。データバス41Aとデータバス41Bは、各プロセッサエレメント間を跨って配置されているデータ幅のバスである。ここでは、データバス幅を8ビットであるとして説明する。
レジスタ102は、8ビットの変換前データの格納用レジスタであり、レジスタ101Aとレジスタ101Bは、8ビットの変換後データのレジスタである。少なくとも、レジスタ101Aには、データバス41Aから値を入力する経路を持ち、レジスタ101Bはデータバス41Bから値を入力する経路を持つ。
加算器105は、2個のデータを入力し、1個の出力を得る。演算幅は8ビットである。2個の入力のうち1個は固定値“2”または“−2”とすることが可能である。他方の入力にはレジスタ103の内容が入力可能となっている。レジスタ103は、加算器105の演算結果を記憶する8ビットのレジスタであり、その内容は加算器105の入力データとなるほかに比較器104の入力となる。比較器104は、レジスタ103とレジスタ102の内容を比較する。2つの入力データが一致した場合、比較器104はレジスタ101Aとレジスタ101Bにデータ入力の指示を出す。
図8で示されるプロセッサエレメント100においては、レジスタ102に記憶されている変換前データを変換し、変換後データとしてレジスタ101Aまたはレジスタ101Bに格納するものである。
加算器105は、2個のデータの加算を可能とするが、一方の入力データを固定値“2”とし、他方の入力データを前サイクルの加算結果、すなわちレジスタ103に記憶されている値とする。このように構成すれば、今サイクルの加算結果は、“前回の加算結果+2”となる。加算器105の加算結果は、レジスタ103に毎サイクル記憶するため、レジスタ103の記憶する値は、1サイクルにつき2上昇する。比較器104は、レジスタ102の下位1ビットを除くデータとレジスタ103の下位1ビットを除くデータを比較し、一致した場合、レジスタ101Aとレジスタ101Bに一致信号を送る。
レジスタ101Aとレジスタ101Bは、この一致信号を受けると、データバス41A上とデータバス41B上の8ビットデータをそれぞれ格納する。変換後データは、下位1ビットを除く変換前データの昇べきの順にデータバス41Aとデータバス41B上に存在するものとし、データバス41A上には変換前データの下位1ビットが“0”のときの変換後データとし、データバス41B上には変換前データの下位1ビットが“1”のときの変換後データとする。このように構成したとき、レジスタ103の値とデータバス41Aまたはデータバス41B上のデータは、変換前データと変換後データであるという関係が保たれる。すなわち、データバス41A上には、変換前データが“00H”の時の変換後データ、変換前データが“02H”の時の変換後データ、変換前データが“04H”の時の変換後データ、…、変換前データが“FEH”の時の変換後データというように128通りのデータが存在し、データバス41B上には、変換前データが“01H”の時の変換後データ、変換前データが“03H”の時の変換後データ、変換前データが“05H”の時の変換後データ、…、変換前データが“FFH”の時の変換後データというように128通りのデータが存在し、プロセッサエレメント100では変換前データがどんな値であっても、必ず対応するべき変換後データがデータバス41Aまたはデータバス41B上に存在するサイクルがある。
プロセッサエレメント100としては、レジスタ102に記憶されている変換前データの下位1ビットを除く値がレジスタ103の下位1ビットを除く値と一致しているタイミングで、変換後データがデータバス41A上とデータバス41B上にあることを知ることができ、比較器104の一致信号のタイミングでレジスタ101Aとレジスタ101Bに入力されたデータは、レジスタ102を変換前データとしたときの変換後データとなる。
図9は、図8で示されるプロセッサエレメント100で構成されたSIMDプロセッサである。プロセッサエレメント100、プロセッサエレメント200、プロセッサエレメント300は図8と同じ構成のプロセッサエレメントである。図9では3つのプロセッサエレメントを示しているが、4個目以降のプロセッサエレメントは省略している。
データバス41Aとデータバス42Bは、すべてのプロセッサエレメントに共通のバスであり、それぞれがすべてのプロセッサエレメントの変換後データのレジスタ101Aおよびレジスタ101Bにデータ入力する経路を持つ。
プロセッサエレメント100…を制御するこの実施形態のグローバルプロセッサ2は、変換後データ送出装置20aを備える。変換後データ送出装置20aは、データバス41Aおよびデータバス41Bにデータを送出する経路を持つ。各プロセッサエレメント100…は変換後データ取得回路106の比較器104が一致信号を出力するタイミングでレジスタ101Aよびレジスタ101Bに変換後データを格納する。
図10は、図9で示されるSIMDプロセッサと基本的には同じ構成である。相違する点は、図9では、グローバルプロセッサ2が変換後データを送出する部分が変換後データ送出装置20aとなっているのに対して、図10では変換テーブル20bと命令デコーダ20cという構成になっている。
変換テーブル4は、入力として命令デコーダ20cからデータを受け取り、データバス41Aおよびデータバス41Bへデータを出力する。
図11は、図9で示されるSIMDプロセッサと基本的には同じ構成である。相違する点は、図9では変換前データ送出装置20aとなっている部分が、図11では変換テーブル20bと加算器20eとレジスタ20dという構成になっている。
加算器20eとレジスタ20dは、アドレス発生回路を構成するもので、2個のデータを入力し、1個の出力を得る。演算幅は8ビットである。2個の入力のうち1個は固定値“2”または“−2”とすることが可能である。他方の入力にはレジスタ6の内容が入力可能となっている。レジスタ20dは、加算器20eの演算結果を記憶する8ビットのレジスタであり、その内容は加算器7の入力データとなるほかに変換テーブル20bの入力となる。変換テーブル20bは、入力としてレジスタ20dのデータを受け取り、データバス41Aおよびデータバス41Bへデータを出力する。
同様に加算器20eの一方の入力値が固定値“−2”の場合は、変換前データの降べきの順にデータバス41Aとデータバス41B上に存在するものとしたとき、レジスタ20dの値とデータバス41Aまたはデータバス41B上のデータは、変換前データと変換後データであるという関係が保たれる。
図9、図10および図11の実施形態では、図8にて示されたプロセッサエレメント100を使用しているので、プロセッサエレメント100、プロセッサエレメント200およびプロセッサエレメント300の動作説明は省略する。
図9の実施例では、プロセッサエレメント100、プロセッサエレメント200およびプロセッサエレメント300は、同一のデータバス41Aとデータバス41Bに接続されている。グローバルプロセッサ2には、変換前データ送出装置20aがあり、変換後データを、変換前データの昇べきの順あるいは降べきの順にデータバス41Aとデータバス41B上に出力する。
これにより、プロセッサエレメント100、プロセッサエレメント200およびプロセッサエレメント300は上記説明の通り動作することで、各プロセッサエレメントにおいてデータの変換という所望の動作を行なうことができる。プロセッサエレメント100、プロセッサエレメント200およびプロセッサエレメント300では、データバス41Aとデータバス41Bを共通のものとしていることと、各プロセッサエレメントは独立して動作することから、プロセッサエレメントの数は図示している数より多くても、上記動作はまったく同じである。したがって、プロセッサエレメント数が多ければ多いほど変換するデータが多く、効率が良いことになる。
図10の実施例では、図9で示された変換前データ送出装置20aを、変換テーブル20bと命令デコーダ20cで置き換えている。
命令デコーダ20cは、このSIMDプロセッサが持つ命令をデコードする部分である。SIMDプロセッサの命令として、変換テーブル20cに制御信号を入力するが、その命令コードの並び方、すなわちプログラムによって、データバス41Aとデータバス41B上には、変換前データが“00H”の時の変換後データと変換前データが“01H”の時の変換後データ、変換前データが“02H”の時の変換後データと変換前データが“03H”の時の変換後データ、…、変換前データが“FEH”の時の変換後データと変換前データが“FFH”の時の変換後データというように変換前データの昇べきの順に128通りのデータが出力するように制御される。仮に、変換前データ“00H”と“01H”を変換した変換後データをデータバス41Aとデータバス41Bに出力する命令を、table #00h というコードで表現するならば、図14に示すプログラムによって昇べきの順にデータバス41Aとデータバス41Bに変換後データを出力できる。図15のプログラムであれば、降べきの順を実現できる。
命令デコーダ20cで、生成された制御信号は、変換テーブル20bで変換後データに変換され、データバス41Aとデータバス41Bに出力される。変換テーブル20cは、上述したように、RAMやROMのような記憶装置として構成しても構わない。たとえば、命令デコーダ20cから入力される制御信号をアドレス入力とすれば、データ出力が丁度変換後データに相当する。さらに付け加えるならば、アドレス入力は変換前データそのものであっても構わない。この場合は、アドレス7ビット(128ワード)データ16ビットのメモリに相当し、アドレス7ビットは、変換前データの上位7ビットである。また、図10では変換テーブル20bをグローバルプロセッサ2に内蔵するようになっているが、上述したように、変換テーブル20bをRAMやROMで構成する場合、グローバルプロセッサ2の外に設けても構わない。すなわち、通常のSIMDプロセッサが動作するために必要であるプログラムメモリや、データメモリの一部として変換テーブル20bが存在しても構わない。
図11の実施例では、図10で示したものと同様の変換テーブル20bを備えているため、変換テーブル20bの説明は省略する。図11の実施例では、命令デコーダやプログラムによらず、変換前データの昇べきの順あるいは降べきの順を実現する。図11の例では各プロセッサエレメントと同様の加算器20eと加算結果を記憶するレジスタ20dを備え、加算器7で“2”または“−2”の加算を行なうことで、レジスタ20dの内容を毎サイクル“+2”または“−2”の値に変更できる。すなわち、これは変換前データの昇べきの順あるいは降べきの順に相当し、このデータを入力される変換テーブル20bで変換後データに変換されデータバス41Aとデータバス41Bに出力される。
以上の説明においては、データバス幅を8ビットと仮定しているが、データバス幅は任意の値でも良い。ただし、データバス幅が1ビット増える毎に、全データの変換に要するサイクル数は、2のべき乗で増加するため、16ビット以上のデータは、現実的ではないとも考えられる。
また、上記した図8乃至図11に示した実施形態おいては、請求項でいう“n”に相当する数値として、“2”を選択した実施形態としたが、他に“4”や“8”のような2のべき乗の数値が考えられる。その場合、図8乃至図11では2本であったデータバスがn本となり、各プロセッサエレメントにおいて変換後データレジスタがn個となる一方、比較器などで比較されるデータや、変換テーブルに入力するデータのデータ幅は削減されることになる。
図8乃至図11に示した実施形態おいては、所望の変換後データが、複数の変換後データレジスタうちのどれかに存在するという状態であるが、これはSIMD機能を利用したプログラミングによって変換前データの下位ビットを調査するなどで解決できる手段と考えられるため、本発明の説明には敢えて加えていない。
上述した図2に示した実施形態においては、レジスタファイル31の外部入出力する方式としてアドレッシング方式を採用し、レジスタファイル31をプロセッサ外部からアクセスし、外部からクロックとアドレス、リード/ライト制御を入力することで任意のレジスタを読み書きできるように構成して場合につき説明したが、この発明は他の方式、例えば、外部入出力にシフトレジスタ方式を用いたプロセッサにも適用できる。図15にシフトレジスタ方式を用いた場合の基本構成を示す。
図15に示すように、入力画像データを一時的に蓄積する入力シフトレジスタと、非線形処理された画像データが並列入力される外部出力シフトレジスタとを備える。入力シフトレジスタには、イメージスキャナなどから送られる外部画像データが外部データバスから入力シフトレジスタに与えられる。入力シフトレジスタには並列nビットデータがビット毎に順次シフトされる。この入力シフトレジスタの段数は、プロセッサエレメント100の組数の段数を有し、この実施形態では256段の段数を有する。入力シフトレジスタに蓄積されたデータはプロセッサエレメント100のレジスタファイルへ移される。レジスタファイルへの書き込み動作は入力シフトレジスタの各段において同時に行われる。このように、レジスタファイル31にデータが格納されると、上述したこの発明による手法による非線形処理が演算アレイで行われる。
非線形処理が行われたレジスタ102等に格納されたデータは出力シフトレジスタの各段に転送される。この出力シフトレジスタのレジスタ段数はプロセッサエレメント100の組数分だけであり、プロセッサエレメント100のレジスタファイルからデータが出力シフトレジスタの各段に同時に転送される。この出力シフトレジスタに与えられるクロックでデータがシリアルに出力される。そして、出力されたデータはバッファメモリなどに一時格納され、プリンタなどの外部出力装置に与えられる。
このように、上記したシフトレジスタ方式においても、非線形処理において、この発明を適用すれば、効率よく非線形処理が行える。
次に、この発明のSIMD型プロセッサをデジタル複写機などの画像処理装置に用いた場合につき図16ないし図18を参照して説明する。
イメージスキャナで読み取られた画像データ(nビットのデジタル画像データ)が外部データバスからFIFO7に与えられる。FIFO7に1走査ライン分のデータが格納されると、SIMD型プロセッサ1のグローバルプロセッサ2からの制御信号により、この実施の形態では256個の画像データがプロセッサエレメント100のレジスタへ与えられる。
上記したように、この実施形態においては、1つのプロセッサエレメント単位に8ビットのレジスタが32本内蔵されており、256プロセッサエレメント分の組みがアレイ構成になっている。レジスタはプロセッサエレメントごとにR0、R1、R2、...R31と呼ばれている。それぞれのレジスタは演算アレイに対して1つの読み出ししポートと1つの書き込みポートを備えており、8ビットのリード/ライト兼用のバス37で演算アレイからアクセスされる。32本のレジスタの内、24本(R0〜R23)は、プロセッサ外部からアクセス可能であり、外部からクロックとアドレス、リード/ライト制御を入力することで任意のレジスタを読み書きできる。
残りの8本(R24〜R31)のレジスタはプロセッサエレメント演算の一時的な演算データ保存用として使用されるが、グローバルプロセッサ2の命令に従いテーブルからのデータを書き込むこともできる。このデータの書き込みは、変換後データ所得回路106で一致したプロセッサエレメントに書き込みが可能に構成されている。
プロセッサエレメント100内の演算アレイ部は上記したように、16ビットALUと16ビットAレジスタ、Fレジスタを内蔵している。プロセッサエレメント命令による演算はレジスタから読み出されたデータもしくはグローバルプロセッサ2から与えられたデータをALUの片側の入力としてもう片側にはAレジスタの内容を入力として結果をAレジスタに格納する。したがって、Aレジスタ35aとR0〜R31レジスタもしくはグローバルプロセッサ2から与えられたデータとの演算が行われることとなる。
FIFO7より転送され、プロセッサエレメント100のレジスタに格納された画像データは、前述した図4等に示す実施形態に基づき非線形処理のためのテーブル変換が行われる。すなわち、レジスタファイルのレジスタに格納された演算(演算前)対象データをこのレジスタの内容を参照して、変換後レジスタへデータバス4らデータを取得するか否か判断し、データバスに与えられているデータがレジスタに格納されている変換前データに対応する変換後データと一致する時に、そのデータをレジスタに格納させるものである。そして、上述した図3等に示す実施形態に基づきテーブル変換が終了する。
非線形処理が行われたプロセッサエレメント100のレジスタファイルに格納されたデータが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から外部へデータを出力する。
上記した画像処理装置は、イメージスキャナで取り込んだ画像データをプリンタ部へ出力する場合に付き説明したが、これに限らずデジタルビデオ、デジタルカメラなどのデジタル画像を非線形処理する場合にもこの発明は適用できる。また、外部出力もプリンタに限らず、ディスプレイへの出力、データ転送などの方式で出力する場合でもこの発明は適用できる。