説明

リコンフィギュラブルSIMDベクトル処理システム

【課題】リコンフィギュラブルSIMDベクトル処理システムを提供する。
【解決手段】システムであって、冗長形式で表される2Nビットの積をM個出力するM個のNビット×Nビット乗算器と、M個の2Nビットの積を受け取り、M個の2Nビットの積に基づいて冗長形式で表されるMNビットの積を生成するコンプレッサと、M個の2Nビットの積およびMNビットの積を受け取り、M個の2Nビットの積およびMNビットの積のうちいずれかを選択し、選択した積を非冗長形式に変換する加算器ブロックとを備えるシステムを提供する。

【発明の詳細な説明】
【背景技術】
【0001】
動画処理、グラフィクス処理および音声処理といったマルチメディア・アプリケーションを実施するので、消費者用演算システムに求められる性能が近年非常に高くなっている。上記のマルチメディア・アプリケーションは、電力および空間について厳しい制限を持つ携帯用演算デバイスに関して、特に課題を抱えている。
【0002】
このように非常に多くの処理を必要とするアプリケーションを実施するには通常、単一命令多重データ(SIMD)アーキテクチャが利用される。SIMDアーキテクチャの構成要素のうち電力や性能に大きな影響を与える構成要素は一般的に、乗算器および加算器を備える。ここで、SIMDアーキテクチャには、固定ビット幅のオペランドを扱い、固定の割合で並行処理を行う、乗算器および加算器から成る構成が含まれるとしてもよい。しかしながら、アプリケーションごとに必要なオペランドのビット幅および/または並行処理の程度が異なる場合がある。このため当該SIMDアーキテクチャは、別のアプリケーションが規定する要件を満たすべく、乗算器および加算器を含む構成(つまり、別途設けたSIMDデータパス)を別に備えている必要がある。
【図面の簡単な説明】
【0003】
【図1】実施形態に係る回路を示すブロック図である。
【0004】
【図2】実施形態に係るプロセスを示すフローチャートである。
【0005】
【図3】実施形態に係る回路を詳細に示すブロック図である。
【0006】
【図4】実施形態に係るプロセスを示すフローチャートである。
【0007】
【図5】実施形態に係るプロセスを示すフローチャートである。
【0008】
【図6】実施形態に係る、副次的に求められた積に基づき所望の積を求める方法を示す図である。
【0009】
【図7】実施形態に係る、プロセスを示すフローチャートである。
【0010】
【図8】実施形態に係るシステムを示すブロック図である。
【発明を実施するための最良の形態】
【0011】
図1は、実施形態に係る回路100を示す図である。回路100はベクトル処理回路を構成する素子を備えるとしてもよい。回路100は、マイクロプロセッサの機能ブロック、専用グラフィクスプロセッサ、もしくは既に公知のまたは公知となる適切なデバイスにおいて実現されるとしてもよい。例えば、回路100は、個別素子、集積回路および/またはソフトウェアを組み合わせることによっても実現するとしてもよい。
【0012】
回路100は、N×Nビットの乗算器112〜118を備える。N×Nビット乗算器112〜118はそれぞれ、Nビットのオペランドを2個受け取り、2Nビットの、当該2つのオペランドの積(例えば、P1、P2、P3およびP4)を1個出力するとしてもよい。実施形態によっては、この2Nビットの積は、桁上げ保存方式(Carry−Save方式)のような冗長形式で表される。従って、2Nビットの積はそれぞれ、2N個のCarryビットと2N個のSumビットによって表される。
【0013】
加算器ブロック120は、N×Nビット乗算器112〜118から2Nビットの積を受け取るとしてもよい。加算器ブロック120は、受け取った2Nビットの積を非冗長形式へと変換するとしてもよい。非冗長形式は、これに限定されないが、例えば2の補数に基づくバイナリ・フォーマットが挙げられる。加算器ブロック120はまた、4Nビットの積をコンプレッサ130から受け取るとしてもよい。この4Nビットの積もまた冗長形式で表わされていてよい。その場合、当該4Nビットの積は4N個のCarryビットと4N個のSumビットによって表される。また、加算器ブロック120は、この4Nビットの積を非冗長フォーマットへ変換するとしてもよい。
【0014】
以下に詳述する実施形態において、加算器ブロック120はまた独立した加算器として動作するとしてもよい。例えば、加算器ブロック120は、非冗長形式で表された数字を2個受け取り、受け取った2個の数字を選択的に加算して非冗長形式で表される和を生成するとしてもよい。
【0015】
図2は、実施形態に係るプロセス200を示すフローチャートである。本明細書で説明する他のプロセスと同様に、プロセス200は、既に公知のまたは公知となるシステムであれば、どのようなシステムによって実行されるとしてもよい。例を挙げると、これに限定されるわけではないが、回路100によって実行されるとしてもよい。
【0016】
まず、ステップ210において、M個のN×Nビット乗算器から冗長形式で表される2Nビットの積をM個受け取る。回路100を例に挙げて説明すると、加算器ブロック120は乗算器112〜118から、4個の2Nビットの積、P1、P2、P3およびP4を受け取るとしてもよい。2Nビットの積はそれぞれ、2N個のCarryビットと2N個のSumビットで表されるとしてもよい。
【0017】
続いてステップ220において、M個の2Nビットの積またはコンプレッサが出力するMNビットの積のいずれかを選択する。上記の例に基づいて説明を続けると、加算器ブロック120はさらに、コンプレッサ130から冗長形式の4Nビットの積を受け取る。そして加算器ブロック120はステップ220において、M個の2Nビットの積もしくはMNビットの積のいずれかを選択するように動作する。実施形態によっては、加算器ブロック120は、常に乗算器112〜118が出力したM個の2Nビットの積と、コンプレッサ130が出力したMNビットの積の両方を受け取るわけではないとしてもよい。例えば、コンプレッサブロック130がディセーブルとされる期間が動作中に何度かあってもよく、この場合加算器ブロック120は、コンプレッサ130からMNビットの積を受け取らないとしてもよい。
【0018】
選択された方の積はステップ230において非冗長形式に変換される。この変換は単に、選択された積のCarryビットを選択された積のSumビットに加算することを含むとしてもよい。
【0019】
回路100およびプロセス200は、組み合わせて利用してもよいし個別に利用してもよい。どちらの場合も、回路100およびプロセス200は、リコンフィギュラブルSIMDベクトル処理を実現するとしてもよい。このような処理を実施することによって、適切なデバイスにおいてダイ領域および電力消費を節約できる。
【0020】
図3は、実施形態に係る回路300を詳細に示すブロック図である。回路300は、回路100の一実施形態を備えるとしてもよく、従って回路100の特性の一部または全てを含むとしてもよい。
【0021】
回路300は、乗算器310、加算器ブロック320、および6:2のコンプレッサ330を備える。乗算器310は、フリップフロップ311、4個の16×16ビットの乗算器312〜315およびフリップフロップ316を有する。乗算器310は、乗算器電力制御回路317から電力供給を受ける。
【0022】
乗算器312から315はそれぞれ、クロック信号clkに応じてフリップフロップ311から16ビットのオペランドを2個受け取る。このため、実施形態によっては、回路300は16×16ビットの乗算を4つ並行して実施するとしてもよい。実施形態によっては、乗算器312〜315がそれぞれ受け取った2個の16ビットのオペランドは、2個の32ビットのオペランドのうちのいずれかの上位または下位16ビットを含むとしてもよい。このような実施形態によると、後述するように、コンプレッサ330の動作と同時に、当該2個の32ビットのオペランドの積を求めるとしてもよい。
【0023】
乗算器312〜315は符号付き乗算器を有するとしてもよい。符号付き乗算器312〜315の符合拡張は、各乗算器が独立して16ビット×16ビットの乗算を実施するか、後述するように符号付き乗算器312〜315が互いに組み合わせられて32ビット×32ビットの乗算を実施するように動作するか、このどちらかに応じて変更されるとしてもよい。符合拡張の変更は制御部325が制御するとしてもよい。実施形態によっては、乗算器312〜315は符号付きオペランドまたは符合なしのオペランドのいずれに対して演算を行うか選択するとしてもよい。
【0024】
図3に示すように、乗算器312〜315はそれぞれ、受け取った2個の16ビットのオペランドに基づいて計算した32ビットの積を出力する。当該積は、桁上げ保存(Carry−Save)形式で表される。具体的には、32ビットの積はそれぞれ、32個のCarryビットと32個のSumビットによって表される。フリップフロップ316は、受け取るクロック信号clkに応じて256(つまり、32×2×4)ビットを格納する。
【0025】
加算器ブロック320はマルチプレクサ322およびマルチプレクサ324を有する。マルチプレクサ322の1つの入力は、フリップフロップ316に格納された各積の32個のCarryビット(C3〜C0)のうちの上位16ビットを受け取る。従って、当該入力は64ビットの入力を含むとしてもよい。マルチプレクサ322の別の入力は、フリップフロップ316に格納された各積の32個のCarryビット(C3〜C0)のうちの下位16ビットを受け取るので、同じく64ビットの入力を含むとしてもよい。同様に、マルチプレクサ324の1つの入力は、フリップフロップ316に格納された各積の32個のSumビット(S3〜S0)のうちの上位16ビットを受け取り、マルチプレクサ324の別の入力は、フリップフロップ316に格納された各積の32個のSumビット(S3〜S0)のうちの下位16ビットを受け取る。
【0026】
制御部325は、マルチプレクサ322および324それぞれについて、入力ラインのうち1本を選択する。加算器326は、制御部325からの制御信号に基づいて選択されたそれぞれの入力ラインのデータを受け取って、合計を計算する。後述するが、当該制御信号は加算器326に対し、所望の動作モードに応じて16ビットまたは32ビットの境界で桁上げを伝播させないように指示する。こうして得られる非冗長値は、入力されるクロック信号clkに応じて、フリップフロップ328に格納される。加算器ブロック320は、加算器ブロック電力制御回路329から電力供給を受ける。加算器ブロック電力制御回路329および乗算器電力制御回路もまた、実施形態によっては、制御部325によって制御されるとしてもよい。
【0027】
コンプレッサ330は、コンプレッサ電力制御回路335から電力供給を受ける。当該コンプレッサ電力制御回路335もまた制御部325に制御されるとしてもよい。コンプレッサ330は、乗算器310が出力する32ビットの積(CS3〜CS0)をそれぞれ受け取るとしてもよい。コンプレッサ330は乗算器からの出力を圧縮して、Carry−Save形式の32ビット×32ビットの乗算に基づいて64ビットの積(CSX)を求めるとしてもよい。この圧縮については、図5および図6を参照しつつ以下で詳述する。
【0028】
加算器ブロック320のマルチプレクサ322は、64ビットの積CSXを構成する64個のCarryビットCXを受け取る。また、マルチプレクサ324はCSXのうち64個のSumビットSXを受け取る。加算器326は続いてCXとSXを加算して、CSXを非冗長フォーマットに変換するとしてもよい。
【0029】
加算器ブロック320はさらに、144ビットのフリップフロップ327を有する。フリップフロップ327は第1の72ビットをマルチプレクサ322の入力に対して出力し、第2の72ビットをマルチプレクサ324の入力に対して出力するとしてもよい。従って、制御部325がこれらの入力を選択する場合、加算器326は、第1の72ビットと第2の72ビットの合計を計算する。後述するが、第1の72ビットおよび第2の72ビットのそれぞれに2以上のオペランドを設けて、適切なビット境界において桁上げ(キャリー)の伝播をさせないように加算器326を制御することによって、並行して加算を実施するとしてもよい。
【0030】
実施形態によっては、回路300は、並行処理の程度およびオペランドのビット幅を変化させつつ(並行処理の程度は例えば1〜4の間で、ビット幅は例えば16〜72の間で)、少なくとも6つの異なるモードで動作する、エネルギー効率の良いリコンフィギュラブルSIMDベクトル処理回路を提供するとしてもよい。例えば、回路300は、同一のハードウェアに基づいて、16ビット×16ビットの乗算を4つ並行して行うか、1つの32ビット×32ビットの乗算を行うか選択するとしてもよい。
【0031】
動作モードごとに、回路300のうち利用する構成要素の組が異なるとしてもよい。例えば、電力制御回路317、329および335は、特定の動作モードの場合、回路300の構成要素のうち必要とされない構成要素への電力の供給を止めるべく制御されるとしてもよい。また、電力制御回路317、329および335は、特定の動作モードの場合、求められる性能が比較的低い構成要素に対する電力供給を低減させるべく(Vcclo)制御されるとしてもよい。実施形態によっては、回路300はVcclo領域からVcchi領域へと変化する信号を必要としない。このため、性能および電力を低下させるためのレベルシフタを回路300内に設ける必要性が少なくなるとしてもよい。
【0032】
図4は、実施形態に係る、並行して乗算を行う場合のプロセス400を詳細に説明するためのフローチャートである。プロセス400は、例えば、回路100および/または回路300によって実施されるとしてもよい。本明細書で説明する処理はいずれも、ハードウェア、ソフトウェア(マイクロコードを含む)またはハードウェアとソフトウェアの組み合わせによって実施されるとしてもよい。
【0033】
ステップ405においてまずコンプレッサをディセーブルとする。例えば回路300を用いて説明すると、ステップ405においてコンプレッサ330をディセーブルとしてもよい。実施形態によっては、制御部325は、回路335のスイッチを開くべく、62ct_sello信号および62ct_selhi信号(図3参照)を制御する。
【0034】
続いて、ステップ410において加算器への電力供給を低減する。コンプレッサ330をディセーブルとすることによって、回路300のデータパスにあるゲートの数が減る。このようなゲートの数の減少に対応して、回路300の動作周波数を維持するべく加算器への電力供給を低減するとしてもよい。制御部325はAdd_sello信号およびAdd_selhi信号(図3参照)を制御して、加算器ブロック320に対してVcclo供給電力を接続し、加算器ブロック320とVcchi供給電力の接続を切るとしてもよい。
【0035】
ステップ415において、第1数のN個のビットと第2数のN個のビットを乗算して、第1積を生成する。当該第1積は2N個のCarryビットおよび2N個のSumビットを含む。ステップ415の一例を挙げると、乗算器312は16ビットの第1数と16ビットの第2数を乗算して、32個のCarryビットC3および32個のSumビットS3を生成するとしてもよい。同様に、乗算器313はステップ420において、16ビットの第3数と16ビットの第4数を乗算して、32個のCarryビットC2と32個のSumビットS2を生成するとしてもよい。
【0036】
回路300はまた、乗算器314および315において同様の乗算が行われるように図示されているが、プロセス400の説明においては、乗算器312および313だけに言及する。このように、実施形態によっては、プロセス400が含む乗算は2つに限定されるとしてもよい。
【0037】
続いてステップ425において、第1積および第2積の上位ワード(high word)を計算するか、下位ワード(low word)を計算するかを判断する。本例によると、上位ワードは積の上位Nビット(つまり16ビット)を含み、下位ワードは積の下位Nビットを含む。上位ワードを選択する場合、処理はステップ430へと進む。
【0038】
ステップ425における判断を行うのは制御部325であってよい。上位ワードと判断された場合、ステップ430において制御部325はマルチプレクサ322を制御して、C3〜C0の32〜16の入力を選択するとしてもよい。制御部325はまた、ステップ435において、マルチプレクサ324を制御してS3〜S0の32〜16の入力を選択するとしてもよい。
【0039】
下位ワードと判断された場合、処理はステップ440へと進む。ステップ440において制御部325は、マルチプレクサ322を制御して、C3〜C0の15〜0の入力を選択するとしてもよい。制御部325はまた、ステップ445において、マルチプレクサ324を制御してS3〜S0の15〜0の入力を選択するとしてもよい。
【0040】
続いてステップ450において、Nビットの境界において桁上げを伝播させないように加算器を制御する。このように制御することによって、加算器は並行して加算処理を実施することができるようになるとしてもよい。実施形態によっては、制御部325は加算器326を制御して、16ビットの境界において桁上げが伝播しないようにしてもよい。
【0041】
ステップ455において、第1積のうち選択されたN個のCarryビットを第1積のうち選択されたN個のSumビットに加算する。例えば、高位ワードと判断された場合、第1積CS3のうち選択された上位16個のCarryビットをマルチプレクサ322から受け取り、マルチプレクサ324から受け取った第1積CS3のうち選択された上位16個のSumビットに対して加算される。このような処理を行うことによって、第1積を非冗長形式に変換するとしてもよい。
【0042】
ステップ460において、第2積のうち選択されたN個のCarryビットを第2積のうち選択されたN個のSumビットに加算する。下位ワードと判断された場合、第1積CS3のうち下位16個のCarryビットをマルチプレクサ322から受け取り、第1積CS3のうち下位16個のSumビットをマルチプレクサ324から受け取る。受け取ったビットを加算することによって、第2積を非冗長形式に変換する。
【0043】
ステップ455および460の加算は同時に実施されるとしてもよい。具体的に説明すると加算器326は、ステップ430および435において選択されたビット、もしくはステップ440および445において選択されたビットを、2個の72ビットの入力を介して同時に受け取るとしてもよい。そして加算器326は、16ビットの境界において桁上げの伝播をさせないようにして、72ビットの加算を行うことによって、ステップ455および460の加算を実施するとしてもよい。
【0044】
図5は、実施形態に係る、2Nビット×2Nビットの乗算を行う場合のプロセス500を説明するフローチャートを示す図である。まずステップ505において、乗算器、コンプレッサおよび加算器ブロックに対する電力供給が、Vcchiに設定される。この電力供給が行われた場合に、性能および電力消費が最大になるとしてもよい。また、この電力供給が行われた場合に回路は、コンプレッサ330がディセーブルされた場合と同じ周波数で動作できるとしてもよい。実施形態によっては、ステップ505において、制御部325が回路317、335および329を制御して、Vcchiの電力供給を乗算器310、加算器ブロック320およびコンプレッサ330へと接続するとしてもよい。
【0045】
ステップ510において、第1数の上位N個のビットと第2数の上位N個のビットを乗算して、第1積を生成する。第1積は、2N個のCarryビットおよび2N個のSumビットを含む。本例においては、第1数をXと表記し、第2数をYと表記する。第1数の上位N個のビットおよび第2数の上位N個のビットは従って、それぞれXおよびYと表記するとしてもよい。そして、第1積はXと示す。
【0046】
ステップ515において、第1数の下位N個のビットと第2数の上位N個のビットを乗算して、第2積を生成する。本例においては、第2積をXは2N個のCarryビットと2N個のSumビットで表す。ステップ520において、第1数の上位N個のビットと第2数の下位N個のビットを乗算し、第3積Xを生成する。ステップ525において、第1数の下位N個のビットと第2数の下位N個のビットを乗算して、第4積Xを生成する。
【0047】
図3に関して、XおよびYはフリップフロップ311に格納され、クロック信号に応じて乗算器312に出力される。同様に、XおよびYはフリップフロップ311に格納され乗算器313に出力される。XおよびYはフリップフロップ311に格納され乗算器314に出力される。XおよびYはフリップフロップ311に格納され乗算器315に出力される。このためステップ510〜525で実施される乗算は、乗算器312〜315で並行して実施するとしてもよい。この結果得られた積X、X、XおよびXは、Carry−Saveビットから成るCS3、CS2,CS1およびCS0として表記するとしてもよい。
【0048】
続いて、ステップ530において第1数と第2数の積を決定する。この決定は、第1積、第2積、第3積および第4積に基づいて行われる。こうして得られる積は、4N個のCarryビットと4N個のSumビットによって表される。
【0049】
本例によると、XとYの積をステップ530において求める。その結果得られる積は、上述したように、Carry−Saveビットから成るCS3、CS2,CS1およびCS0として示す、積X、X、XおよびXに基づいて求める。実施形態に係る、Carry−Saveビットから成るCS3、CS2,CS1およびCS0に基づいてXとYの積を求める一般的な方法は、図3に示したコンプレッサ330の動作を参照されたい。
【0050】
図6は、実施形態に係る、ステップ530で行われる処理をより詳細に説明する図である。図6は、積CSXが含む、4N個のCarryビットと4N個のSumビットを決定する方法を示す。同図に示すように、32ビットのCS3、32ビットのCS2、32ビットのCS1および32ビットのCS0はそれぞれ、積X、X、XおよびXを示し、64ビットのアドレススペースに配置されている。アドレススペースのビット15からビット0はCS0の下位16ビットから成る、アドレススペースのビット63〜48はCS3の上位16ビットから成る。アドレススペースのビット47〜32はCS1、CS3およびCS2のビットの組み合わせから成り、当該アドレススペースのビット31〜16はCS1、CS0およびCS2のビットの組み合わせから成る。
【0051】
ステップ535において、加算器への入力として、4N個のCarryビットおよび4N個のSumビットを選択する。一例を挙げると、コンプレッサ330はCarryビットCXおよびSumビットSXをマルチプレクサ322および324に対して出力する。ステップ535において、制御部325は対応する入力を選択するようにマルチプレクサ322および324を制御する。続いて加算器326は、受け取った128ビット(つまり、64個のCarryビットおよび64個のSumビット)に対して加算を実施して、非冗長形式で表されるXとYの積を生成する。
【0052】
図7は、実施形態に係る、並行処理の度合を様々に変更して加算を行う場合の、プロセス700を示すフローチャートである。ステップ710において、乗算器およびコンプレッサがディセーブルとされ、ステップ720において加算器に対する電力供給が低減される。加算器に対する電力供給は、コンプレッサおよび乗算器をディセーブルとすることによってデータパスのゲートの数が減少するが、この数の減少に関わらず所望の動作周波数を維持することを目的として、低減される。
【0053】
ステップ710では、制御部325が、回路317および回路335のスイッチを開くことによって、乗算器およびコンプレッサをディセーブルするとしてもよい。実施形態によっては、ステップ720で、制御部325がAdd_sello信号およびAdd_selhi信号を制御することによって、Vcclo電力供給を加算器ブロック320に接続して、Vcchi電力供給と加算器ブロック320の接続を切る。
【0054】
ステップ730において加算モードを決定する。プロセス700において実施可能な加算モードは、4つの(Nビット+Nビット)の加算処理、2つの(2Nビット+2Nビット)の加算処理、1つの(3Nビット+3Nビット)の加算処理、および1つの(4Nビット+4Nビット)の加算処理である。フリップフロップ327は、所望のモードに対応するオペランドを非冗長形式(例えば、2進法形式)で格納するとしてもよい。
【0055】
一例を挙げると、制御部325が、4つの(Nビット+Nビット)の加算処理が必要な加算モードであると判断する。従ってフリップフロップ327は、マルチプレクサ322の入力に対して出力するべく4つの16ビットのオペランドを格納し、マルチプレクサ324の入力に対して出力するべく4つの16ビットのオペランドを格納する。続いて処理はステップ740に進み、Nビットの境界で桁上げの伝播を行わないように加算器を制御する。実施形態によっては、ステップ740で制御部325が、16ビットの境界で桁上げの伝播が生じないように加算器326を制御するとしてもよい。
【0056】
ステップ760において、加算器に対する入力として、第1加算オペランドおよび第2加算オペランドを選択する。一例を挙げると、制御部325はステップ760でマルチプレクサ322を制御してフリップフロップ327に接続された72ビットの入力を選択し、マルチプレクサ324を制御してフリップフロップ327に接続された72ビットの入力を選択するとしてもよい。マルチプレクサ322に接続された72ビットの入力は4つの16ビットのオペランドを含むとしてもよい。この4つのオペランドはそれぞれ、マルチプレクサ32に接続された72ビットの入力に含まれる4つの16ビットのオペランドに加算される。
【0057】
ステップ770において、第1オペランドと第2オペランドを加算してその和を生成する。現在選択されている加算モードによると、ステップ770の加算は16ビットの境界で桁上げを伝播させないようにして実施される。従って、所望されている4つの和は、得られた72ビットの和を構成する4つの16ビットの部分に基づいて決定されるとしてもよい。具体的には、72ビットの和の1番目の16ビットが第1の所望の和を示し、当該72ビットの和の2番目の16ビットが第2の所望の和を示し、72ビットの和の3番目の16ビットが第3の所望の和を示し、当該72ビットの和の4番目の16ビットが第4の所望の和を示す。
【0058】
加算モードが2つの(2Nビット+2Nビット)の加算処理を必要とすると判断された場合、処理はステップ730からステップ750へと進む。ステップ750において加算器は、2Nビットの境界で桁上げを伝播させないように制御される。また、フリップフロップ327は、マルチプレクサ322の入力へ出力されるべく2つの32ビットのオペランドを格納し、マルチプレクサ324の入力へ出力されるべく2つの32ビットのオペランドを格納する。これらのオペランドを、ステップ760でマルチプレクサ322および324に対する入力として選択して、ステップ770で加算する。続いてステップ780で加算結果に基づいて所望されている2つの和を得る。具体的には、生成された72ビットの和の1番目の32ビットを第1の所望の和とし、2番目の32ビットを第2の所望の和とする。
【0059】
加算モードが1つの(3Nビット+3Nビット)の加算処理、もしくは1つの(4Nビット+4Nビット)の加算処理を必要とすると判断された場合には、処理はステップ730からステップ760へと直接進む。従って、加算器内での桁上げの伝播は禁止されない。フリップフロップ327は、マルチプレクサ322の入力への出力として48ビットまたは64ビットのオペランドを格納し、マルチプレクサ324の入力への出力として48ビットまたは64ビットのオペランドを格納する。これらのオペランドが、ステップ760でマルチプレクサ322および324への入力として選択され、ステップ770で加算され和を生成する。ステップ780では、生成された和に等しくなるように所望の和を決定する。図3に示すように、加算器326は最大で72ビットのビット長のオペランドに対応できる。
【0060】
図8は、実施形態に係るシステム800を示すブロック図である。システム800は集積回路810を備える。集積回路810はマイクロプロセッサであってもよいし、別の種類の集積回路であってもよい。集積回路810はベクトル処理エンジン820を有する。ベクトル処理エンジン820は適切な形態で実現されるとしてよい。ベクトル処理エンジン820は、本明細書で説明した、回路100、回路300および/または処理に基づいて実現されるとしてもよい。
【0061】
集積回路810は、ダイの外部にあるキャッシュ830と通信する。キャッシュ830はベクトル処理エンジン820に入力されるオペランドを格納したレジスタを含むとしてもよい。集積回路810はまた、ホストバスおよびチップセット850を介して、システムメモリ840と通信するとしてもよい。メモリ840は適切な種類のメモリによって構成されるとしてもよい。例を挙げると、これらに限定されないが、SDRRAM(Single Data Rate Random Access Memory)またはDDRRAM(Double Data Rate Random Access Memory)などがある。また、上記以外のダイの外部に設けられる機能部として、音声プロセッサ860およびNIC(ネットワーク・インターフェース・コントローラ)870があり、適切なバスを介して集積回路810と通信するとしてもよい。
【0062】
本明細書では様々な実施形態を説明したが、すべて例示目的に過ぎない。従って、当業者であれば本明細書の内容に基づき、様々な変形および変更を加えてほかの実施形態として実施することに想到するのは明らかである。

【特許請求の範囲】
【請求項1】
回路であって、
一の冗長形式で表される2Nビットの積をM個出力するM個のNビット×Nビット乗算器と、
前記M個の2Nビットの積を受け取り、当該M個の2Nビットの積に基づいて一の冗長形式で表される一のMNビットの積を生成する一のコンプレッサと、
前記M個の2Nビットの積および前記MNビットの積を受け取り、前記M個の2Nビットの積および前記MNビットの積のうちいずれかを選択し、選択した積を一の非冗長形式に変換する一の加算器ブロックと
を備える回路。
【請求項2】
前記M個の2Nビットの積のうち一の第1の2Nビットの積は、一の第1数の一の上位Nビットと一の第2数の一の上位Nビットとの一の積であり、
前記M個の2Nビットの積のうち一の第2の2Nビットの積は、前記第1数の一の下位Nビットと前記第2数の前記上位Nビットとの一の積であり、
前記M個の2Nビットの積のうち一の第3の2Nビットの積は、前記第1数の前記上位Nビットと前記第2数の一の下位Nビットとの一の積であり、
前記M個の2Nビットの積のうち一の第4の2Nビットの積は、前記第1数の前記下位Nビットと前記第2数の前記下位Nビットとの一の積であり、
前記コンプレッサが生成する前記MNビットの積は、前記第1数と第2数の乗算結果に等しい
請求項1に記載の回路。
【請求項3】
前記加算器ブロックはさらに、前記MNビットの積のうちMN個のCarryビットを選択し、前記MNビットの積のうちMN個のSumビットを選択し、前記選択したMN個のCarryビットとMN個のSumビットを加算して前記MNビットの積を一の非冗長形式へと変換する
請求項2に記載の回路。
【請求項4】
一の第1モードにおいて、前記加算器ブロックは、
前記M個の2Nビットの積のうち一の第1の2Nビットの積の、一の上位N個のCarryビットおよび一の上位N個のSumビットおよび、前記M個の2Nビットの積のうち一の第2の2Nビットの積の、一の上位N個のCarryビットおよび一の上位N個のSumビットを受け取り、
前記第1の2Nビットの積と前記第2の2Nビットの積の前記上位N個のCarryビットおよび前記第1の2Nビットの積および前記第2の2Nビットの積の前記上位N個のSumビットを選択するか、もしくは前記第1の2Nビットの積と前記第2の2Nビットの積の前記下位N個のCarryビットおよび前記第1の2Nビットの積および前記第2の2Nビットの積の前記下位N個のSumビットを選択し、
前記第1の2Nビットの積のうち選択されたN個のCarryビットと、前記第1の2Nビットの積のうち選択されたN個のSumビットを加算し、
前記第2の2Nビットの積のうち選択されたN個のCarryビットと、前記第2の2Nビットの積のうち選択されたN個のSumビットを加算する
請求項1に記載の回路。
【請求項5】
前記第1モードにおいて、前記加算器ブロックは複数のNビット境界での桁上げの伝播を行わないようにする
請求項4に記載の回路。
【請求項6】
前記加算器ブロックはさらに、
バイナリ形式で表される、一のMNビットの第1数および一のMNビットの第2数を受け取り、
前記MNビットの第1数および前記MNビットの第2数はそれぞれ、1つのオペランド、M/2個のオペランドもしくはM個のオペランドのうちいずれを示しているか判断し、
前記MNビットの第1数および前記MNビットの第2数はそれぞれ、M個のオペランドを示していると判断された場合、複数のNビットの境界で桁上げの伝播をしないようにして、
前記MNビットの第1数および前記MNビットの第2数はそれぞれ、M/2個のオペランドを示していると判断された場合、複数の2Nビットの境界で桁上げの伝播をしないようにして、
前記MNビットの第1数および前記MNビットの第2数を加算して一の和を生成し、
前記生成された和に基づくと共に前記MNビットの第1数および前記MNビットの第2数はそれぞれ、1つのオペランド、M/2個のオペランドもしくはM個のオペランドのうちいずれを示しているかに基づいて、1以上の所望の和を決定する
請求項1に記載の回路。
【請求項7】
方法であって、
M個のNビット×Nビット乗算器のそれぞれから、一の冗長形式で表される2Nビットの積をM個受け取ることと、
前記M個の2Nビットの積、または一のコンプレッサから出力された一の冗長形式で表される一のMNビットの積のうちいずれかを選択することと、
前記M個の2Nビットの積および前記MNビットの積のうち選択された積を一の非冗長形式に変換することと
を含む方法。
【請求項8】
前記M個の2Nビットの積のうち一の第1の2Nビットの積は、一の第1数の一の上位Nビットと一の第2数の一の上位Nビットとの一の積であり、
前記M個の2Nビットの積のうち一の第2の2Nビットの積は、前記第1数の一の下位Nビットと前記第2数の前記上位Nビットとの一の積であり、
前記M個の2Nビットの積のうち一の第3の2Nビットの積は、前記第1数の前記上位Nビットと前記第2数の一の下位Nビットとの一の積であり、
前記M個の2Nビットの積のうち一の第4の2Nビットの積は、前記第1数の前記下位Nビットと前記第2数の前記下位Nビットとの一の積であり、
前記コンプレッサが生成する前記MNビットの積は、前記第1数と第2数の乗算結果に等しい
請求項7に記載の方法。
【請求項9】
前記M個の2Nビットの積および前記MNビットの積のうちいずれかを選択することは、
前記MNビットの積のうちMN個のCarryビットを選択することと、
前記MNビットの積のうちMN個のSumビットを選択することと
を含み、
前記M個の2Nビットの積および前記MNビットの積のうち選択された積を前記非冗長形式に変換することは、
前記選択したMN個のCarryビットとMN個のSumビットを加算して前記MNビットの積を前記非冗長形式へと変換することを含む
請求項8に記載の方法。
【請求項10】
前記M個の2Nビットの積および前記MNビットの積のうちいずれかを選択することは、
前記M個の2Nビットの積のうち一の第1の2Nビットの積の、一の上位N個のCarryビットおよび一の上位N個のSumビットおよび、前記M個の2Nビットの積のうち一の第2の2Nビットの積の、一の上位N個のCarryビットおよび一の上位N個のSumビットを受け取ることと、
前記第1の2Nビットの積と前記第2の2Nビットの積の前記上位N個のCarryビットおよび前記第1の2Nビットの積および前記第2の2Nビットの積の前記上位N個のSumビット、もしくは前記第1の2Nビットの積と前記第2の2Nビットの積の前記下位N個のCarryビットおよび前記第1の2Nビットの積および前記第2の2Nビットの積の前記下位N個のSumビットを選択すること
を含み、
前記M個の2Nビットの積および前記MNビットの積のうち選択された積を前記非冗長形式に変換することは、
前記第1の2Nビットの積のうち選択されたN個のCarryビットと、前記第1の2Nビットの積のうち選択されたN個のSumビットを加算することと、
前記第2の2Nビットの積のうち選択されたN個のCarryビットと、前記第2の2Nビットの積のうち選択されたN個のSumビットを加算することと
を含む
請求項7に記載の方法。
【請求項11】
前記第1の2Nビットの積のうち選択されたN個のCarryビットと、前記第1の2Nビットの積のうち選択されたN個のSumビットを加算することは、複数のNビットの境界で桁上げの伝播を行わないようにすることを含む
請求項10に記載の方法。
【請求項12】
前記受け取ることはさらに、バイナリ形式で表される、一のMNビットの第1数および一のMNビットの第2数を受け取ることを含み、
前記M個の2Nビットの積および前記MNビットの積のうち選択された積を一の非冗長形式に変換することは、
前記MNビットの第1数および前記MNビットの第2数はそれぞれ、1つのオペランド、M/2個のオペランドもしくはM個のオペランドのうちいずれを示しているか判断することと、
前記MNビットの第1数および前記MNビットの第2数はそれぞれ、M個のオペランドを示していると判断された場合、複数のNビットの境界で桁上げの伝播をしないようにすることと、
前記MNビットの第1数および前記MNビットの第2数はそれぞれ、M/2個のオペランドを示していると判断された場合、複数の2Nビットの境界で桁上げの伝播をしないようにすることと、
前記MNビットの第1数および前記MNビットの第2数を加算して一の和を生成することと、
前記生成された和および前記MNビットの第1数および前記MNビットの第2数はそれぞれ、1つのオペランド、M/2個のオペランドもしくはM個のオペランドのうちいずれを示しているかに基づいて、1以上の所望の和を決定することと
を含む
請求項7に記載の方法。
【請求項13】
システムであって、
一のプロセッサ
を備え、当該プロセッサは、
一の冗長形式で表される2Nビットの積をM個出力するM個のNビット×Nビット乗算器と、
前記M個の2Nビットの積を受け取り、当該M個の2Nビットの積に基づいて一の冗長形式で表される一のMNビットの積を生成する一のコンプレッサと、
前記M個の2Nビットの積および前記MNビットの積を受け取り、前記M個の2Nビットの積および前記MNビットの積のうちいずれかを選択し、選択した積を一の非冗長形式に変換する一の加算器ブロックと、
前記プロセッサに接続された一のダブル・データ・レート・メモリと
を有するシステム。
【請求項14】
前記M個の2Nビットの積のうち一の第1の2Nビットの積は、一の第1数の一の上位Nビットと一の第2数の一の上位Nビットとの一の積であり、
前記M個の2Nビットの積のうち一の第2の2Nビットの積は、前記第1数の一の下位Nビットと前記第2数の前記上位Nビットとの一の積であり、
前記M個の2Nビットの積のうち一の第3の2Nビットの積は、前記第1数の前記上位Nビットと前記第2数の一の下位Nビットとの一の積であり、
前記M個の2Nビットの積のうち一の第4の2Nビットの積は、前記第1数の前記下位Nビットと前記第2数の前記下位Nビットとの一の積であり、
前記コンプレッサが生成する前記MNビットの積は、前記第1数と第2数の乗算結果に等しく
前記加算器ブロックはさらに、前記MNビットの積のうちMN個のCarryビットを選択し、前記MNビットの積のうちMN個のSumビットを選択し、前記選択したMN個のCarryビットとMN個のSumビットを加算して前記MNビットの積を一の非冗長形式へと変換する
請求項13に記載のシステム。
【請求項15】
一の第1モードにおいて、前記加算器ブロックは、
前記M個の2Nビットの積のうち一の第1の2Nビットの積の、一の上位N個のCarryビットおよび一の上位N個のSumビットおよび、前記M個の2Nビットの積のうち一の第2の2Nビットの積の、一の上位N個のCarryビットおよび一の上位N個のSumビットを受け取り、
前記第1の2Nビットの積と前記第2の2Nビットの積の前記上位N個のCarryビットおよび前記第1の2Nビットの積および前記第2の2Nビットの積の前記上位N個のSumビットを選択するか、もしくは前記第1の2Nビットの積と前記第2の2Nビットの積の前記下位N個のCarryビットおよび前記第1の2Nビットの積および前記第2の2Nビットの積の前記下位N個のSumビットを選択し、
前記第1の2Nビットの積のうち選択されたN個のCarryビットと、前記第1の2Nビットの積のうち選択されたN個のSumビットを加算し、
前記第2の2Nビットの積のうち選択されたN個のCarryビットと、前記第2の2Nビットの積のうち選択されたN個のSumビットを加算し、
複数のNビット境界での桁上げの伝播を行わないようにする
請求項13に記載のシステム。
【請求項16】
前記加算器ブロックはさらに、
バイナリ形式で表される、一のMNビットの第1数および一のMNビットの第2数を受け取り、
前記MNビットの第1数および前記MNビットの第2数はそれぞれ、1つのオペランド、M/2個のオペランドもしくはM個のオペランドのうちいずれを示しているか判断し、
前記MNビットの第1数および前記MNビットの第2数はそれぞれ、M個のオペランドを示していると判断された場合、複数のNビットの境界で桁上げの伝播をしないようにして、
前記MNビットの第1数および前記MNビットの第2数はそれぞれ、M/2個のオペランドを示していると判断された場合、複数の2Nビットの境界で桁上げの伝播をしないようにして、
前記MNビットの第1数および前記MNビットの第2数を加算して一の和を生成し、
前記生成された和に基づくと共に前記MNビットの第1数および前記MNビットの第2数はそれぞれ、1つのオペランド、M/2個のオペランドもしくはM個のオペランドのうちいずれを示しているかに基づいて、1以上の所望の和を決定する
請求項13に記載のシステム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate


【公開番号】特開2008−117389(P2008−117389A)
【公開日】平成20年5月22日(2008.5.22)
【国際特許分類】
【外国語出願】
【出願番号】特願2007−276990(P2007−276990)
【出願日】平成19年10月24日(2007.10.24)
【出願人】(591003943)インテル・コーポレーション (1,101)
【Fターム(参考)】