(57)【要約】プロセッサに、複数の算術ユニット、アキュムレータユニット、および複数の算術ユニットとアキュムレータユニットとの間に結合されたリダクションユニットが含まれる。リダクションユニットは、算術ユニットからベクトル要素の積を、アキュムレータユニットから第１アキュムレータ値を受け取り、積および第１アキュムレータ値を処理して、アキュムレータユニットに配送される第２アキュムレータ値を生成する。このプロセッサは、保証されたシーケンシャルセマンティクスを有する複数のベクトル乗算リデュース演算すなわち、計算結果が個々の命令の対応するシーケンスを使用して作られるはずの結果と同一であることを保証する演算を実施する。
2007533009.tif 000002
【特許請求の範囲】
【請求項１】
複数の算術ユニットと、
アキュムレータユニットと、
前記複数の算術ユニットと前記アキュムレータユニットとの間に結合され、前記算術ユニットからベクトル要素の積を受け取り、前記アキュムレータユニットから第１アキュムレータ値を受け取るリダクションユニットと
を含むプロセッサであって、
前記リダクションユニットが、前記積および前記第１アキュムレータ値を処理し、前記アキュムレータユニットに配送される第２アキュムレータ値を生成するように動作し、
前記プロセッサが、保証されたシーケンシャルセマンティクスを有する複数のベクトル乗算リデュース演算を実施する
プロセッサ。
【請求項２】
前記複数のベクトル乗算リデュース演算が、シーケンシャル順序でラップアラウンド算術を用いてベクトル要素の対をかけ、結果の積を前記第１アキュムレータ値に加算する、ラップアラウンドを用いるベクトル乗算リデュース加算を含む、請求項１に記載のプロセッサ。
【請求項３】
前記ラップアラウンドを用いるベクトル乗算リデュース加算が、計算
ＡＣＣＤ＝｛・・・｛｛ＡＣＣＳ＋｛Ａ［１］＊Ｂ［１］｝｝＋｛Ａ［２］＊Ｂ［２］｝｝＋・・・＋｛Ａ［ｋ］＊Ｂ［ｋ］｝｝
を実行し、ここで、ＡおよびＢが、ｋビット入力ベクトルであり、ＡＣＣＳが、前記第１アキュムレータ値を表し、ＡＣＣＤが、前記第２アキュムレータ値を表し、｛Ｔ｝が、Ｔがラップアラウンド算術を使用して計算されることを示す、請求項２に記載のプロセッサ。
【請求項４】
前記複数のベクトル乗算リデュース演算が、シーケンシャル順序で、各乗算および各加算の後に飽和を用いてベクトル要素の対をかけ、結果の積を前記第１アキュムレータ値に加算する、飽和を用いるベクトル乗算リデュース加算を含む、請求項１に記載のプロセッサ。
【請求項５】
前記飽和を用いるベクトル乗算リデュース加算が、計算
ＡＣＣＤ＝＜・・・＜＜ＡＣＣＳ＋＜Ａ［１］＊Ｂ［１］＞＞＋＜Ａ［２］＊Ｂ［２］＞＞＋・・・＋＜Ａ［ｋ］＊Ｂ［ｋ］＞＞
を実行し、ここで、ＡおよびＢが、ｋビット入力ベクトルであり、ＡＣＣＳが、前記第１アキュムレータ値を表し、ＡＣＣＤが、前記第２アキュムレータ値を表し、＜Ｔ＞が、Ｔが飽和演算を使用して計算されることを示す、請求項４に記載のプロセッサ。
【請求項６】
前記複数のベクトル乗算リデュース演算が、シーケンシャル順序でラップアラウンド算術を用いてベクトル要素の対をかけ、結果の積を前記第１アキュムレータ値から減算する、ラップアラウンドを用いるベクトル乗算リデュース減算を含む、請求項１に記載のプロセッサ。
【請求項７】
前記ラップアラウンドを用いるベクトル乗算リデュース減算が、計算
ＡＣＣＤ＝｛・・・｛｛ＡＣＣＳ−｛Ａ［１］＊Ｂ［１］｝｝−｛Ａ［２］＊Ｂ［２］｝｝−・・・−｛Ａ［ｋ］＊Ｂ［ｋ］｝｝
を実行し、ここで、ＡおよびＢが、ｋビット入力ベクトルであり、ＡＣＣＳが、前記第１アキュムレータ値を表し、ＡＣＣＤが、前記第２アキュムレータ値を表し、｛Ｔ｝が、Ｔがラップアラウンド算術を使用して計算されることを示す、請求項６に記載のプロセッサ。
【請求項８】
前記複数のベクトル乗算リデュース演算が、シーケンシャル順序で、各乗算および各減算の後に飽和を用いてベクトル要素の対をかけ、結果の積を前記第１アキュムレータ値から減算する、飽和を用いるベクトル乗算リデュース減算を含む、請求項１に記載のプロセッサ。
【請求項９】
前記飽和を用いるベクトル乗算リデュース減算が、計算
ＡＣＣＤ＝＜・・・＜＜ＡＣＣＳ＋＜Ａ［１］＊Ｂ［１］＞＞＋＜Ａ［２］＊Ｂ［２］＞＞＋・・・＋＜Ａ［ｋ］＊Ｂ［ｋ］＞＞
を実行し、ここで、ＡおよびＢが、ｋビット入力ベクトルであり、ＡＣＣＳが、前記第１アキュムレータ値を表し、ＡＣＣＤが、前記第２アキュムレータ値を表し、＜Ｔ＞が、Ｔが飽和演算を使用して計算されることを示す、請求項８に記載のプロセッサ。
【請求項１０】
前記ベクトル乗算リデュース演算のうちの所与の１つが適用される入力ベクトルが、符号なしフォーマット、１の補数フォーマット、２の補数フォーマット、およびサイン−マグニチュードフォーマットのうちの１つである、請求項１に記載のプロセッサ。
【請求項１１】
前記ベクトル乗算リデュース演算のうちの所与の１つが適用される入力ベクトルが、固定小数点フォーマットおよび浮動小数点フォーマットのうちの１つである、請求項１に記載のプロセッサ。
【請求項１２】
前記ベクトル乗算リデュース演算のうちの所与の１つの結果が、丸められる、請求項１に記載のプロセッサ。
【請求項１３】
前記ベクトル乗算リデュース演算のうちの所与の１つの結果が、完全な精度で維持される、請求項１に記載のプロセッサ。
【請求項１４】
前記第１アキュムレータ値が、０であり、前記ベクトル乗算リデュース演算のうちの所与の１つが、内積を含む、請求項１に記載のプロセッサ。
【請求項１５】
前記第１入力ベクトルの各要素が、１の値を有し、前記ベクトル乗算リデュース演算のうちの所与の１つが、第２入力ベクトルの要素を前記第１アキュムレータ値に加算することを含む、請求項１に記載のプロセッサ。
【請求項１６】
前記プロセッサが、単一命令複数データ（ＳＩＭＤ）プロセッサを含み、前記ベクトル乗算リデュース演算のうちの所与の１つが、ベクトル要素の並列乗算を実行する、請求項１に記載のプロセッサ。
【請求項１７】
前記複数の算術ユニットが、互いに並列に配置された複数の乗算器を含む、請求項１に記載のプロセッサ。
【請求項１８】
前記リダクションユニットが、適用された制御信号に応答して、少なくとも、複数の加算演算または減算演算のそれぞれの後の飽和を用いる第１タイプの計算と、前記加算演算または減算演算の結果のラップアラウンドを用いる第２タイプの計算との間の制御可能な選択を提供するように構成される、請求項１に記載のプロセッサ。
【請求項１９】
少なくとも１つのプロセッサを含む集積回路であって、前記プロセッサが、
複数の算術ユニットと、
アキュムレータユニットと、
前記複数の算術ユニットと前記アキュムレータユニットとの間に結合され、前記算術ユニットからベクトル要素の積を受け取り、前記アキュムレータユニットから第１アキュムレータ値を受け取るように構成されたリダクションユニットと
を含み、
前記リダクションユニットが、前記積および前記第１アキュムレータ値を処理し、前記アキュムレータユニットに配送される第２アキュムレータ値を生成するように動作し、
前記プロセッサが、保証されたシーケンシャルセマンティクスを有する複数のベクトル乗算リデュース演算を実施する
集積回路。
【請求項２０】
複数の算術ユニットとアキュムレータユニットとを含むプロセッサ内で使用される装置であって、
前記複数の算術ユニットと前記アキュムレータユニットとの間に結合され、前記算術ユニットからベクトル要素の積を受け取り、前記アキュムレータユニットから第１アキュムレータ値を受け取るように構成されたリダクションユニット
を含み、
前記リダクションユニットが、前記積および前記第１アキュムレータ値を処理し、前記アキュムレータユニットに配送される第２アキュムレータ値を生成するように動作し、
前記プロセッサが、保証されたシーケンシャルセマンティクスを有する複数のベクトル乗算リデュース演算を実施する
装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本願は、参照によって本明細書に組み込まれている、２００４年４月７日出願の米国仮出願第６０／５６０，１９８号、名称「Ｐａｒａｌｌｅｌ  Ｖｅｃｔｏｒ  Ｍｕｌｔｉｐｌｙ  ａｎｄ  Ｒｅｄｕｃｅ  Ｏｐｅｒａｔｉｏｎｓ  ｗｉｔｈ  Ｓｅｑｕｅｎｔｉａｌ  Ｓｅｍａｎｔｉｃｓ」の優先権を主張するものである。
【０００２】
本願は、参照によって本明細書に組み込まれている、２００４年５月７日出願の米国仮出願第１０／８４１，２６１号、名称「Ｐｒｏｃｅｓｓｏｒ  Ｒｅｄｕｃｔｉｏｎ  Ｕｎｉｔ  ｆｏｒ  Ａｃｃｕｍｕｌａｔｉｏｎ  ｏｆ  Ｍｕｌｔｉｐｌｅ  Ｏｐｅｒａｎｄｓ  Ｗｉｔｈ  ｏｒ  Ｗｉｔｈｏｕｔ  Ｓａｔｕｒａｔｉｏｎ」の一部継続出願である。
【０００３】
本願は、全般的にはデジタルデータ処理の分野に関し、具体的には、デジタル信号プロセッサ（ＤＳＰ）または他のタイプのデジタルデータプロセッサ内で使用される算術処理動作および関連する処理回路に関する。
【背景技術】
【０００４】
ほとんどのＤＳＰおよびマルチメディアプロセッサを含む多数のデジタルデータプロセッサは、２進固定小数点算術を使用し、ここで、演算が、符号なし２進フォーマットまたは２の補数２進フォーマットの整数、分数、または混合された数に対して実行される。ＤＳＰアプリケーションおよびマルチメディアアプリケーションは、しばしば、２進数に対して飽和演算（ｓａｔｕｒａｔｉｎｇ  ａｒｉｔｈｍｅｔｉｃ）またはラップアラウンド演算（ｗｒａｐ−ａｒｏｕｎｄ  ａｒｉｔｈｍｅｔｉｃ）を実行するようにプロセッサを構成することを必要とする。
【０００５】
飽和演算では、特定の数のフォーマットで表すには大きすぎる計算結果が最大の正の数または最大の負の数に飽和される。結果を表すには大きすぎる時に、オーバーフローが発生する。たとえば、３桁符号なし数を用いる１０進法で、加算７３３＋４４４は、９９９という飽和結果をもたらす。というのは、１１７７という真の結果を、３桁の１０進数を用いて表すことができないからである。飽和結果９９９は、３桁の１０進数を用いて表すことのできる最大の正の数に対応する。飽和は、結果を正しく表せない時に発生する誤差を減らし、符号情報を保存するので有用である。
【０００６】
ラップアラウンド算術では、オーバーフローする結果がラップアラウンドされ、指定された数表現に収めることのできないすべての桁が、単純に捨てられる。たとえば、３桁符号なし数を用いる１０進法で、加算７３３＋４４４は、１７７というラップアラウンド結果をもたらす。１１７７という真の結果が、表すには大きすぎるので、先頭の１が捨てられ、１７７という結果が作られる。ラップアラウンド算術は、複数のラップアラウンド演算の真の最終的な結果を指定されたフォーマットで表すことができる場合に、中間演算がオーバーフローする場合であっても最終結果が正しいので、有用である。
【０００７】
上で示したように、飽和演算およびラップアラウンド算術は、しばしば２進法で利用される。たとえば、４ビット数を用いる２の補数分数法では、２の補数加算０．１０１＋０．１００（０．６２５＋０．５００）が、０．１１１（０．８７５）という飽和結果を作り、これは、４ビットを用いて表すことのできる最大の正の２の補数に対応する。ラップアラウンド算術が使用される場合に、２の補数加算０．１０１＋０．１００（０．６２５＋０．５００）は、結果１．００１（−０．８７５）を作る。
【０００８】
デジタルデータプロセッサ算術の上記および他の従来の態様に関する追加の詳細は、たとえば、参照によって本明細書に組み込まれている、Ｂ．Ｐａｒｈａｍｉの「Ｃｏｍｐｕｔｅｒ  Ａｒｉｔｈｍｅｔｉｃ：  Ａｌｇｏｒｉｔｈｍｓ  ａｎｄ  Ｈａｒｄｗａｒｅ  Ｄｅｓｉｇｎｓ」（Ｏｘｆｏｒｄ  Ｕｎｉｖｅｒｓｉｔｙ  Ｐｒｅｓｓ，  Ｎｅｗ  Ｙｏｒｋ，  ２０００  （ＩＳＢＮ  ０−１９−５１２５８３−５））に見られる。
【０００９】
ＤＳＰアプリケーションおよびマルチメディアアプリケーションは、通常、飽和演算とラップアラウンド算術の両方を必要とするので、所与のプロセッサが、これらのタイプの算術の両方をサポートすることが有用である。
【００１０】
上で引用した米国仮出願第１０／８４１，２６１号に、デジタルデータプロセッサでの飽和演算またはラップアラウンド算術の制御可能な選択の効率的な機構が開示されている。
【００１１】
多くのアプリケーションで、内積または他のタイプのベクトル乗算リデュース演算（ｖｅｃｔｏｒ  ｍｕｌｔｉｐｌｙ  ａｎｄ  ｒｅｄｕｃｅ  ｏｐｅｒａｔｉｏｎ）の実行のために所与のＤＳＰ、マルチメディアプロセッサ、または他のタイプのデジタルデータプロセッサを構成することが望ましい場合もある。そのような演算は、しばしば、デジタル信号処理アプリケーションおよびマルチメディアアプリケーションで発生する。たとえば、ＧＳＭ（Ｇｌｏｂａｌ  Ｓｙｓｔｅｍ  ｆｏｒ  Ｍｏｂｉｌｅ  ｃｏｍｍｕｎｉｃａｔｉｏｎｓ）標準規格またはＥＤＧＥ（Ｅｎｈａｎｃｅｄ  Ｄａｔａ  ｒａｔｅｓ  ｆｏｒ  Ｇｌｏｂａｌ  Ｅｖｏｌｕｔｉｏｎ）標準規格をサポートする第２世代および第３世代のセルラ電話機は、ベクトル乗算リデュース演算を、通常は各個々の乗算および加算の後の飽和と共に広範囲に利用する。しかし、飽和加算は結合的でないので、ベクトル乗算リデュース演算に必要な個々の乗算および加算は、通常めいめいの個々の命令を使用してシーケンシャル順序で実行され、これが、性能を下げコードサイズを増やす。
【００１２】
デジタルデータプロセッサでベクトル乗算リデュース演算を容易にするために、多数の技法が提案されてきた。これには、たとえば、Ａ．Ｐｅｌｅｇ及びＵ．Ｗｅｉｓｅｒの「ＭＭＸ  Ｔｅｃｈｎｏｌｏｇｙ  Ｅｘｔｅｎｓｉｏｎ  ｔｏ  ｔｈｅ  Ｉｎｔｅｌ  Ａｒｃｈｉｔｅｃｔｕｒｅ」（ＩＥＥＥ  Ｍｉｃｒｏ，  Ｖｏｌ．１６，  Ｎｏ．４，  ４２−５０ページ、１９９６年）に記載のＭＭＸ（登録商標）テクノロジで提供される並列積和（ＰＭＡＤＤ）演算と、Ｋ．Ｄｉｅｆｅｎｄｏｒｆｆ外の「ＡｌｔｉＶｅｃ  Ｅｘｔｅｎｓｉｏｎ  ｔｏ  ＰｏｗｅｒＰＣ  Ａｃｃｅｌｅｒａｔｅｓ  Ｍｅｄｉａ  Ｐｒｏｃｅｓｓｉｎｇ」（ＩＥＥＥ  Ｍｉｃｒｏ，  Ｖｏｌ．２０，  Ｎｏ．２，  ８５−９５ページ，  ２０００年３月）に記載のＡｌｔｉｖｅｃ  Ｔｅｃｈｎｏｌｏｇｙでの加算−合計（ＶＭＳＵＭ）演算が含まれる。しかし、これらの演算は、ＤＳＰおよびマルチメディアプロセッサで望ましい機能性のすべての範囲を提供することができない。さらに、これらの演算は、シーケンシャルセマンティクス（ｓｅｑｕｅｎｔｉａｌ  ｓｅｍａｎｔｉｃｓ）を保証しない、すなわち、計算結果が、個々の乗算命令および加算命令の対応するシーケンスを使用して作られるはずの計算結果と同一であることを保証しない。
【特許文献１】米国仮出願第６０／５６０，１９８号
【特許文献２】米国仮出願第１０／８４１，２６１号
【特許文献３】米国特許第６，８４２，８４８号（米国仮出願第１０／２６９，２４５号）
【特許文献４】米国仮出願第１０／２６９，３７２号
【特許文献５】米国仮出願第１０／２６９，３７３号
【非特許文献１】Ｂ．Ｐａｒｈａｍｉ、「Ｃｏｍｐｕｔｅｒ  Ａｒｉｔｈｍｅｔｉｃ：  Ａｌｇｏｒｉｔｈｍｓ  ａｎｄ  Ｈａｒｄｗａｒｅ  Ｄｅｓｉｇｎｓ」（Ｏｘｆｏｒｄ  Ｕｎｉｖｅｒｓｉｔｙ  Ｐｒｅｓｓ，  Ｎｅｗ  Ｙｏｒｋ，  ２０００  （ＩＳＢＮ  ０−１９−５１２５８３−５））
【非特許文献２】Ａ．Ｐｅｌｅｇ及びＵ．Ｗｅｉｓｅｒ、「ＭＭＸ  Ｔｅｃｈｎｏｌｏｇｙ  Ｅｘｔｅｎｓｉｏｎ  ｔｏ  ｔｈｅ  Ｉｎｔｅｌ  Ａｒｃｈｉｔｅｃｔｕｒｅ」（ＩＥＥＥ  Ｍｉｃｒｏ，  Ｖｏｌ．１６，  Ｎｏ．４，  ４２−５０ページ、１９９６年）
【非特許文献３】Ｋ．Ｄｉｅｆｅｎｄｏｒｆｆ外、「ＡｌｔｉＶｅｃ  Ｅｘｔｅｎｓｉｏｎ  ｔｏ  ＰｏｗｅｒＰＣ  Ａｃｃｅｌｅｒａｔｅｓ  Ｍｅｄｉａ  Ｐｒｏｃｅｓｓｉｎｇ」（ＩＥＥＥ  Ｍｉｃｒｏ，  Ｖｏｌ．２０，  Ｎｏ．２，  ８５−９５ページ，  ２０００年３月）
【発明の開示】
【発明が解決しようとする課題】
【００１３】
したがって、デジタルデータプロセッサで、保証されたシーケンシャルセマンティクスを有する改善されたベクトル乗算リデュース演算を提供できる技法が必要である。
【課題を解決するための手段】
【００１４】
本発明は、その１態様に従って、複数の算術ユニット、アキュムレータユニット、および複数の算術ユニットとアキュムレータユニットとの間に結合されたリダクションユニット（ｒｅｄｕｃｔｉｏｎ  ｕｎｉｔ）を有するプロセッサを提供する。リダクションユニットは、算術ユニットからベクトル要素の積をアキュムレータユニットから第１アキュムレータ値を受け取り、積および第１アキュムレータ値を処理して、アキュムレータユニットに配送される第２アキュムレータ値を生成する。このプロセッサは、保証されたシーケンシャルセマンティクスを有する複数のベクトル乗算リデュース演算、すなわち、計算結果が個々の命令の対応するシーケンスを使用して作られるはずの結果と同一であることを保証する演算を実施する。
【００１５】
例示的な実施形態では、複数のベクトル乗算リデュース演算に、次の演算の組が含まれる。
１．ラップアラウンド算術を用いて、シーケンシャル順序で、ベクトル要素の対をかけ、結果の積を第１アキュムレータ値に加算する、ラップアラウンドを用いるベクトル乗算リデュース加算。
２．各乗算および各加算の後に飽和を用いて、シーケンシャル順序で、ベクトル要素の対をかけ、結果の積を第１アキュムレータ値に加算する、飽和を用いるベクトル乗算リデュース加算。
３．ラップアラウンド算術を用いて、シーケンシャル順序で、ベクトル要素の対をかけ、結果の積を第１アキュムレータ値から減算する、ラップアラウンドを用いるベクトル乗算リデュース減算。
４．各乗算および各減算の後に飽和を用いて、シーケンシャル順序で、ベクトル要素の対をかけ、結果の積を第１アキュムレータ値から減算する、飽和を用いるベクトル乗算リデュース減算。
【００１６】
この例示的な実施形態は、シーケンシャルセマンティクスも保証しながら、特にＤＳＰアプリケーションおよびマルチメディアプロセッサアプリケーションにおいて、より広い範囲の機能性を提供することによって、従来のベクトル乗算リデュース演算に関連する短所を有利に克服する。
【発明を実施するための最良の形態】
【００１７】
本発明を、例示的なリダクションユニット、アキュムレータユニット、算術ユニット、およびそのようなユニットを組み込んだマルチスレッド式プロセッサの文脈で説明する。しかし、本発明が、図示の特定の配置を必要とせず、他のタイプのデジタルデータプロセッサおよび関連する処理回路を使用して実施できることを理解されたい。
【００１８】
本明細書で説明する所与のプロセッサは、１つまたは複数の集積回路の形で実施することができる。
【００１９】
図１に、本発明の例示的な実施形態に従って構成されたプロセッサ１００の一部を示す。プロセッサ１００に、１０４−１、１０４−２、・・・、１０４−ｍと表されたｍ個の並列乗算器とアキュムレータレジスタファイル１０６との間に結合された（ｍ＋１）個の入力リダクションユニット１０２が含まれる。プロセッサ１００の動作を、まず、内積の計算の文脈で以下に説明するが、このプロセッサを使用して、他のタイプの並列ベクトル乗算リデュース演算を実行することができる。
【００２０】
乗算器１０４−ｉのそれぞれは、飽和ありまたは飽和なしで、Ｐ［ｉ］＝Ｘ［ｉ］＊Ｙ［ｉ］（１≦ｉ≦ｍ）を計算する。ｍ個の乗算器出力は、次に、（ｍ＋１）入力リダクションユニット１０２への入力オペレランドとして、アキュムレータレジスタファイル１０６からの、Ｐ［０］と表されるアキュムレータ値と一緒に供給される。リダクションユニット１０２は、
Ａｃｃ＝Ｐ［０］＋Ｐ［１］＋Ｐ［２］＋・・・＋Ｐ［ｍ］
を計算するが、ここで、Ｐ［０］には、最初の反復では０がセットされる。次の反復では、ＸおよびＹのｍ個の新しい要素が乗算され、Ｐ［０］には、以前の反復からのアキュムレータ値Ａｃｃがセットされる。このプロセスは、内積全体が計算されるまで継続される。したがって、ｋ要素の内積を、［ｋ／ｍ］回の反復を使用して計算することができ、ここで、各反復に、ｍ個の並列乗算と１個の（ｍ＋１）入力加算が含まれる。飽和モードで使用される時に、リダクションユニットは各加算の後に飽和を実行し、各乗算器は、オーバーフローが発生する時にその結果を飽和させる。
【００２１】
アキュムレータレジスタファイル１０６は、本明細書でより一般的に「アキュムレータユニット」と称するものの例とみなすことができる。当業者が理解するであろうように、代替の実施形態では他のタイプのアキュムレータユニットを使用することができる。さらに、本明細書で使用される用語「ユニット」は、広く解釈されることが意図されており、所与のユニットの要素が、互いに同一位置にある必要も、他の形で互いに特定の物理的関係を有する必要もない。たとえば、所与のユニットの要素を、集積回路内の１つの位置に一緒に置くのではなく、そのような回路全体に分散させることができる。
【００２２】
アキュムレータレジスタファイル１０６は、中間アキュムレータ値を保管するのに使用することができ、これは、マルチスレッド式プロセッサ実施形態で特に有用であり、マルチスレッド式プロセッサ実施形態では、個々のスレッドからの複数の内積を同時に計算することができる。
【００２３】
図１の例示的な実施形態のリダクションユニット１０２は、２つの１ビット制御信号入力ＩｎｖｅｒｔおよびＳａｔｆも受け取る。Ｉｎｖｅｒｔがハイの時には、リダクションユニットへの入力オペランドが反転され、その結果、このユニットは、
Ａｃｃ＝Ｐ［０］−Ｐ［１］−Ｐ［２］−・・・−Ｐ［ｍ］
を計算する。この反転加算は、本明細書では減算とも称するが、一般に、当業者が理解するであろうように、あるタイプの加算と考えられる。Ｉｎｖｅｒｔがロウの時には、リダクションユニットへの入力オペランドは反転されず、したがって、このユニットは、
Ａｃｃ＝Ｐ［０］＋Ｐ［１］＋Ｐ［２］＋・・・＋Ｐ［ｍ］
を計算する。Ｓａｔｆがハイの時には、リダクションユニットが飽和モードになる。これは、リダクションユニットでの各中間加算の後に、結果がオーバーフローを被ったかどうかを判定する検査が行われることを意味する。そうである場合には、結果を、指定されたフォーマットで最大の正の数または最大の負の数に飽和させる。Ｓａｔｆがロウの時には、リダクションユニットはラップアラウンドモードになり、これは、オーバーフローした結果が飽和されないことを意味する。
【００２４】
この例示的な実施形態での乗算器１０４の使用は一例にすぎない。他の実施形態では、たとえば、乗累算（ＭＡＣ）ユニットを使用することができる。本明細書で使用される用語「乗算器」は、ＭＡＣユニットなど、乗算ならびに１つまたは複数の他の機能を実行する算術ユニットを含むことが意図されている。
【００２５】
図２に、プロセッサ１００内での使用に適する、より具体的にはｍ＝４の場合について構成された、例示的なリダクションユニット１０２’を示す。このリダクションユニットは、４つの入力オペランドＰ［１］からＰ［４］とアキュムレータ値Ｐ［０］を合計するように動作する。この図には、ｍ＝４の特定の場合の（ｍ＋１）入力リダクションユニットが示されているが、この設計は、当業者に明白であるように、ｍの他の値に簡単に拡張することができる。
【００２６】
リダクションユニット１０２’は、２００−１、２００−２、２００−３、および２００−４と表された４つの２入力リダクション加算器（ｒｅｄｕｃｔｉｏｎ  ａｄｄｅｒ）を使用し、これらのリダクション加算器は、図示のように直列に接続される。各リダクション加算器は、飽和ありまたは飽和なしで、その入力オペランドを加算することができる。本明細書で使用される用語「リダクション加算器」は、たとえば、飽和加算器を含むことが意図されている。
【００２７】
リダクション加算器１としても識別される第１リダクション加算器２００−１は、オペランドＰ［０］およびＰ［１］をとり、入力制御信号Ｉｎｖｅｒｔがロウの時には、これらを加算してＺ［１］＝Ｐ［０］＋Ｐ［１］を作る。リダクション加算器ｉ＋１としても識別される残りのリダクション加算器２００−（ｉ＋１）のそれぞれは、２つの入力オペランドＺ［ｉ］およびＰ［ｉ＋１］をとり、入力制御信号Ｉｎｖｅｒｔがロウの時には、これらを加算して合計Ｚ［ｉ＋１］＝Ｚ［ｉ］＋Ｐ［ｉ＋１］を作る。したがって、Ｉｎｖｅｒｔがロウの時には、このリダクションユニットの出力は、
Ａｃｃ＝Ｚ［４］＝Ｐ［０］＋Ｐ［１］＋Ｐ［２］＋Ｐ［３］＋Ｐ［４］
である。入力制御信号Ｉｎｖｅｒｔがハイの時には、各リダクション加算器への第２入力がビット単位で反転され、各リダクション加算器へのキャリー入力に１がセットされる。これによって、リダクション加算器１が、Ｚ［１］＝Ｐ［０］−Ｐ［１］を計算し、残りのリダクション加算器が、Ｚ［ｉ＋１］＝Ｚ［ｉ］−Ｐ［ｉ＋１］を計算するようになる。この場合に、このリダクションユニットの出力は、
Ａｃｃ＝Ｚ［４］＝Ｐ［０］−Ｐ［１］−Ｐ［２］−Ｐ［３］−Ｐ［４］
である。
【００２８】
入力制御信号Ｓａｔｆがハイの時には、各加算（または減算）の結果が、オーバーフローが発生した時に飽和される。Ｓａｔｆがロウの時には、各加算（または減算）の結果が、ラップアラウンドされる。
【００２９】
リダクションユニット１０２’は、その最悪の場合の遅延を減らすためにパイプライン化されている。より具体的には、リダクションユニット１０２’は、４ステージパイプラインを使用して、４つの加算（または４つの減算）を実行し、ここで、各中間加算（または減算）の結果Ｚ［ｉ］が、パイプラインレジスタ２０２−ｉに保管される。Ｐ［ｉ］オペランドに、対応するＺ［ｉ−１］オペランドと同時に到着させるために、リダクション加算器ｉへのＰ［ｉ］オペランドは、（ｉ−１）個のパイプラインレジスタ２０４を通過する。したがって、めいめいのリダクション加算器に達する際に、オペランドＰ［１］は、パイプラインレジスタ２０４を通過せず、オペランドＰ［２］は、１つのパイプラインレジスタ２０４−２１を通過し、オペランドＰ［３］は、２つのパイプラインレジスタ２０４−３１および２０４−３２を通過し、オペランドＰ［４］は、３つのパイプラインレジスタ２０４−４１、２０４−４２、および２０４−４３を通過する。
【００３０】
図３に、リダクションユニット１０２’のリダクション加算器２００−ｉのうちの所与の１つの１つの可能な実施形態を示す。リダクション加算器２００−ｉは、２入力加算器３００を使用して、２つの入力オペランドＡおよびＢとキャリーインビットｃｉｎとを加算して、Ｔ＝Ａ＋Ｂ＋ｃｉｎを計算する。Ｓａｔｆと、ＡおよびＢの符号ｓａおよびｓｂとがハイであり、一時結果の符号ｓｔがロウである場合に、出力Ｚは、指定された数フォーマットの最大の負の数に飽和され、Ｚ＝ＭＩＮ＿ＮＥＧになる。Ｓａｔｆおよびｓｔがハイであり、ｓａおよびｓｂがロウである場合に、Ｚは、指定された数フォーマットの最大の正の数に飽和され、Ｚ＝ＭＡＸ＿ＰＯＳになる。他のすべての場合に、加算器３００からの結果が、結果として使用され、Ｚ＝Ｔになる。
【００３１】
図３に示された特定のリダクション加算器設計が、例示的な例としてのみ提示されていることを理解されたい。さまざまな代替リダクション加算器設計を使用することができ、所与の実施形態での使用のために選択される特定の加算器は、入力オペランドのフォーマットなどの応用例固有要因に基づいて変更することができる。
【００３２】
パイプライン式リダクションユニットでは、下で説明するマルチスレッディングの使用を介して、内積のｍ個の要素を各クロックサイクルに累算することが可能である。
【００３３】
非マルチスレッド式プロセッサ実施形態で、リダクションユニットのパイプライン化が、各内積を計算するのに必要なサイクル数の大きい増加を引き起こす可能性があることに留意されたい。たとえば、従来のマルチスレッディングなしのｍステージパイプラインは、各内積を計算するサイクル数を約ｍ倍増加させる。
【００３４】
本発明の例示的な実施形態は、トークントリガースレッディング（ｔｏｋｅｎ  ｔｒｉｇｇｅｒｅｄ  ｔｈｒｅａｄｉｎｇ）と称する手法を利用することによって、この問題に対処する。トークントリガースレッディングは、本願の譲受人に譲渡され、参照によって本明細書に組み込まれている、現在は米国特許第６，８４２，８４８号として発行されている、２００２年１０月１１日出願の米国仮出願第１０／２６９，２４５号、名称「Ｍｅｔｈｏｄ  ａｎｄ  Ａｐｐａｒａｔｕｓ  ｆｏｒ  Ｔｏｋｅｎ  Ｔｒｉｇｇｅｒｅｄ  Ｍｕｌｔｉｔｈｒｅａｄｉｎｇ」に記載されている。トークントリガースレッディングは、通常、マルチスレッド式プロセッサの複数のスレッドのそれぞれに異なるトークンを割り当てる。たとえば、トークントリガースレッディングは、トークンを利用して、現在のプロセッサクロックサイクルに関連して、プロセッサのスレッドのうちで後続クロックサイクルに命令の発行を許可される特定のスレッドを識別することができる。トークントリガースレッディングがこの例示的な実施形態で使用されるが、本発明は、この特定のタイプのマルチスレッディングを必要とせず、他のタイプのマルチスレッディング技法を使用することができる。
【００３５】
この例示的な実施形態では、上で注記した、パイプライン化に帰することのできるサイクルカウントの増加を、他のスレッドの処理によって効果的に隠蔽することができる。というのは、ある内積の乗算およびリダクションが、他のスレッドからの演算と同時に実行されるからである。スレッドの同時実行によってサイクルカウントの増加を完全に隠蔽するためには、所与のスレッドからの命令の実行の間のサイクル数が、リダクションユニット内のパイプラインステージ数と、アキュムレータレジスタファイル１０６への書込およびこれからの読取に必要な追加サイクル数との合計以上でなければならない。
【００３６】
前に示したように、本発明は、マルチスレッド式プロセッサ内で有利に実施することができる。本発明をその中で実施できるマルチスレッド式プロセッサのより具体的な例が、本願の譲受人に譲渡され、参照によって本明細書に組み込まれている、２００２年１０月１１日出願の米国仮出願第１０／２６９，３７２号、名称「Ｍｕｌｔｉｔｈｒｅａｄｅｄ  Ｐｒｏｃｅｓｓｏｒ  Ｗｉｔｈ  Ｅｆｆｉｃｉｅｎｔ  Ｐｒｏｃｅｓｓｉｎｇ  Ｆｏｒ  Ｃｏｎｖｅｒｇｅｎｃｅ  Ｄｅｖｉｃｅ  Ａｐｐｌｉｃａｔｉｏｎｓ」に記載されている。このマルチスレッド式プロセッサは、ＲＩＳＣ（登録商標）ベースの制御コード、ＤＳＰコード、Ｊａｖａ（登録商標）コード、およびネットワーク処理コードを実行するように構成することができる。このマルチスレッド式プロセッサに、単一命令複数データ（ｓｉｎｇｌｅ  ｉｎｓｔｒｕｃｔｉｏｎ  ｍｕｌｔｉｐｌｅ  ｄａｔａ：ＳＩＭＤ）ベクトル処理ユニット、リダクションユニット、および長命令語（ｌｏｎｇ  ｉｎｓｔｒｕｃｔｉｏｎ  ｗｏｒｄ：ＬＩＷ）複合命令実行が含まれる。この例示的なマルチスレッド式プロセッサトと共に使用するのに適するスレッディング技法およびパイプライン化技法の例が、上で引用した米国仮出願第１０／２６９，２４５号に記載されている。
【００３７】
本明細書で説明するリダクションユニット１０２および１０２’は、図４に関して示すように、そのようなマルチスレッド式プロセッサ内のリダクションユニットとして利用することができる。もちろん、本発明を、他のマルチスレッド式プロセッサ内で、またはより一般的に他のタイプのデジタルデータプロセッサ内で実施することができる。
【００３８】
図４に、図２のリダクションユニット１０２’を組み込んだマルチスレッド式プロセッサ４００の例を示す。プロセッサ４００は、全体的に米国仮出願第１０／２６９，３７２号に記載のプロセッサに似ているが、本明細書で説明されるように構成されたリダクションユニット１０２’およびアキュムレータレジスタファイル１０６’が組み込まれている。
【００３９】
マルチスレッド式プロセッサ４００に、他の要素の中でも、マルチスレッド式キャッシュメモリ４１０、マルチスレッド式データメモリ４１２、命令バッファ４１４、命令デコーダ４１６、レジスタファイル４１８、およびメモリ管理ユニット（ＭＭＵ）４２０が含まれる。マルチスレッド式キャッシュ４１０に、複数のスレッドキャッシュ４１０−１、４１０−２、…、４１０−Ｎが含まれ、ここで、Ｎは、一般に、マルチスレッド式プロセッサ４００によってサポートされるスレッド数を表し、この特定の例では、Ｎ＝４が与えられる。もちろん、当業者に容易に明白になるように、Ｎの他の値を使用することができる。
【００４０】
したがって、各スレッドは、マルチスレッド式キャッシュ４１０内に、それに関連する対応するスレッドキャッシュを有する。同様に、データメモリ４１２に、図示のようにデータメモリ４１２−１、４１２−２、…、４１２−Ｎと表される、Ｎ個の別個のデータメモリインスタンスが含まれる。
【００４１】
マルチスレッド式キャッシュ４１０は、ＭＭＵ  ４２０を介して、プロセッサ４００の外部のメインメモリ（図示せず）とインターフェースする。ＭＭＵ  ４２０には、キャッシュ４１０に似て、このプロセッサによってサポートされるＮ個のスレッドのそれぞれについて別々のインスタンスが含まれる。ＭＭＵ  ４２０は、メインメモリからの適当な命令が、マルチスレッド式キャッシュ４１０にロードされることを保証する。
【００４２】
データメモリ４１２は、通常、上で注記した外部メインメモリに直接に接続もされるが、この接続も、この図に明示的に示されてはいない。データメモリ４１２には、データバッファ４３０も関連する。
【００４３】
一般に、マルチスレッド式キャッシュ４１０は、マルチスレッド式プロセッサ４００によって実行される命令を保管するのに使用され、データメモリ４１２は、それらの命令によって操作されるデータを保管する。命令は、命令デコーダ４１６によってマルチスレッド式キャッシュ４１０からフェッチされ、デコードされる。命令タイプに応じて、命令デコーダ４１６は、下で説明するように、所与の命令または関連する情報を、このプロセッサ内のさまざまな他のユニットに転送することができる。
【００４４】
プロセッサ４００に、分岐命令キュー（ＩＱ）４４０およびプログラムカウンタ（ＰＣ）レジスタ４４２が含まれる。プログラムカウンタレジスタ４４２には、スレッドのそれぞれについて１つの命令が含まれる。分岐命令キュー４４０は、命令デコーダ４１６から命令を受け取り、プログラムカウンタレジスタ４４２とあいまって、加算器ブロック４４４に入力を供給し、加算器ブロック４４４は、例示的にキャリー伝搬加算器（ｃａｒｒｙ−ｐｒｏｐａｇａｔｅ  ａｄｄｅｒ：ＣＰＡ）を含む。要素４４０、４４２、および４４４は、集合的にプロセッサ４００の分岐ユニットを含む。この図には図示されていないが、補助レジスタをプロセッサ４００に含めることもできる。
【００４５】
レジスタファイル４１８は、整数結果の一時ストレージを提供する。命令デコーダ４１６から整数命令キュー（ＩＱ）４５０に転送された命令は、デコードされ、正しいハードウェアスレッドユニットが、オフセットユニット４５２の使用を介して選択され、オフセットユニット４５２は、スレッドのそれぞれについて別々のインスタンスを含むものとして図示されている。オフセットユニット４５２は、レジスタファイルアドレスに明示的なビットを挿入し、その結果、独立のスレッドデータが破壊されないようにする。所与のスレッドについて、これらの明示的ビットは、たとえば、対応するスレッド識別子を含むことができる。
【００４６】
この図に示されているように、レジスタファイル４１８は、入力レジスタＲＡおよびＲＢに結合され、入力レジスタＲＡおよびＲＢの出力は、ＡＬＵブロック４５４に結合され、ＡＬＵブロック４５４は、加算器を含むことができる。入力レジスタＲＡおよびＲＢは、命令パイプライン化を実施するのに使用される。ＡＬＵブロック４５４の出力は、データメモリ４１２に結合される。
【００４７】
レジスタファイル４１８、整数命令キュー４５０、オフセットユニット４５２、要素ＲＡおよびＲＢ、ならびにＡＬＵブロック４５４が、集合的に例示的な整数ユニットを含む。
【００４８】
プロセッサ４００内で実行可能な命令タイプに、分岐、ロード、ストア、整数、およびベクトル／ＳＩＭＤの命令タイプが含まれる。所与の命令が、分岐動作、ロード動作、ストア動作、または整数演算を指定しない場合に、その命令はベクトル／ＳＩＭＤ命令である。他の命令タイプを、これらに加えてまたはこれらの代わりに使用することができる。整数命令タイプおよびベクトル／ＳＩＭＤ命令タイプは、それぞれ、本明細書でより一般的に整数命令タイプおよびベクトル命令タイプと称するものの例である。
【００４９】
ベクトルＩＱ  ４５６は、命令デコーダ４１６から転送されたベクトル／ＳＩＭＤ命令を受け取る。スレッドのそれぞれについて別々のインスタンスを含むものとして図示された、対応するオフセットユニット４５８が、適当なビットを挿入するように働いて、独立のスレッドデータが破壊されないことを保証する。
【００５０】
プロセッサ４００のベクトルユニット４６０は、Ｎ個の別個の並列部分に分離され、同様に分割されるベクトルファイル４６２を含む。ベクトルファイル４６２に、ＶＲ００からＶＲ３１と表された３２個のレジスタが含まれる。ベクトルファイル４６２は、ベクトル／ＳＩＭＤ命令タイプに対して動作することを除いて、レジスタファイル４１８と実質的に同一の目的のために働く。
【００５１】
ベクトルユニット４６０に、例示的に、ベクトル命令キュー４５６、オフセットユニット４５８、ベクトルファイル４６２、ならびにこれらに関連する算術要素およびストレージ要素が含まれる。
【００５２】
ベクトルユニット４６０の動作は、次の通りである。分数データ型または整数データ型のいずれかとしてエンコードされたベクトル／ＳＩＭＤブロックが、ベクトルファイル４６２から読み取られ、アーキテクチャ的に可視のレジスタＶＲＡ、ＶＲＢ、ＶＲＣに保管される。そこから、流れは、乗算器（ＭＰＹ）を介して進み、ＭＰＹは、そのベクトル／ＳＩＭＤデータの並列同時乗算を実行する。キャリー−スキップ加算器（ＣＳＡ）およびＣＰＡを含む加算器ユニットが、追加の算術演算を実行することができる。たとえば、当業者が諒解するであろうように、１つまたは複数のＣＳＡを使用して、ベクトルレジスタファイルからのアキュムレータ値に加算することができ、１つまたは複数のＣＰＡを使用して、乗算演算の完了のために最終加算を実行することができる。計算結果は、結果レジスタ４６４に保管され、リダクションユニット１０２’に入力オペランドとして供給される。リダクションユニット１０２’は、作られる合計結果が、各演算が直列に実行された場合に得られるはずの結果と同一になる形で、入力オペランドを合計する。リデュースされた合計が、さらなる処理のためにアキュムレータレジスタファイル１０６’に保管される。
【００５３】
ベクトル内積を実行する時に、ＭＰＹブロックは、４つの乗算を並列に実行し、ＣＳＡユニットおよびＣＰＡユニットは、追加演算を実行するか、結果レジスタ４６４への保管のために乗算結果を単純に渡し、リダクションユニット１０２’は、乗算結果を、アキュムレータレジスタファイル１０６’に保管されたアキュムレータ値と一緒に合計する。次に、リダクションユニットによって生成された結果が、前に説明した形で、次の反復での使用のためにアキュムレータレジスタファイルに保管される。
【００５４】
ベクトルユニット４６０の４つの並列乗算器ＭＰＹは、全般的に、図１のプロセッサ１００の乗算器１０４に対応するとみなすことができる。
【００５５】
この例のアキュムレータレジスタファイル１０６’には、ＡＣＣ００からＡＣＣ１５と表された、合計１６個のアキュムレータレジスタが含まれる。
【００５６】
マルチスレッド式プロセッサ４００は、本願の譲受人に譲渡され、参照によって本明細書に組み込まれている、２００２年１０月１１日出願の米国仮出願第１０／２６９，３７３号、名称「Ｍｅｔｈｏｄ  ａｎｄ  Ａｐｐａｒａｔｕｓ  ｆｏｒ  Ｒｅｇｉｓｔｅｒ  Ｆｉｌｅ  Ｐｏｒｔ  Ｒｅｄｕｃｔｉｏｎ  ｉｎ  ａ  Ｍｕｌｔｉｔｈｒｅａｄｅｄ  Ｐｒｏｃｅｓｓｏｒ」に記載の、レジスタファイルへのスレッドベースのアクセスの技法を利用することができる。
【００５７】
図５に、図４のマルチスレッド式プロセッサ４００内での実行に適するベクトル−リデュース命令の例示的フォーマットを示す。この命令は、並列乗算器およびリダクションユニットによって実行されるベクトル−リデュース演算を指定するのに使用される。そのようなベクトル−リデュース命令を、本明細書では、ベクトル乗算リデュース動作とも称する。
【００５８】
この図では、ＯＰＣＯＤＥが、実行される動作を指定し、ＡＣＣＤがアキュムレータ宛先レジスタのアキュムレータレジスタファイル位置を指定し、ＡＣＣＳがアキュムレータソースレジスタのアキュムレータレジスタファイル位置を指定し、ＶＲＳＡがベクトルソースオペランドの一方の組のベクトルレジスタファイル位置を指定し、ＶＲＳＢがベクトルソースオペランドの他方の組のベクトルレジスタファイル位置を指定する。
【００５９】
図５に示された命令フォーマットを使用すると、ｍ個の並列乗算器および（ｍ＋１）入力リダクションユニットを有するＳＩＭＤベクトル処理ユニットは、ベクトル−乗算−リデュース−加算（ｖｍｕｌｒｅｄａｄｄ）命令を実行することができ、この命令は、
ＡＣＣＤ＝ＡＣＣＳ＋ＶＲＳＡ［１］＊ＶＲＳＢ［１］＋ＶＳＲＡ［２］＊ＶＳＲＢ［２］＋・・・＋ＶＳＲＡ［ｍ］＊ＶＳＲＢ［ｍ］
を計算する。
【００６０】
より具体的には、例示的なマルチスレッド式プロセッサ４００を参照すると、この命令は、ｍ＝４について、ベクトルレジスタファイル４６２からＶＳＲＡ［ｉ］およびＶＳＲＢ［ｉ］に対応する値を読み取り、４つの並列乗算器ＭＰＹを使用してＶＳＲＡ［ｉ］＊ＶＳＲＢ［ｉ］を計算し、アキュムレータレジスタファイル１０６’からＡＣＣＳを読み取り、リダクションユニット１０２’を使用して積をＡＣＣＳに加算し、ＡＣＣＤによって指定されるアドレスを使用して、結果をリダクションユニットからアキュムレータレジスタファイルに書き戻すことによって実行することができる。
【００６１】
同様に、ベクトル−乗算−リデュース−減算（ｖｍｕｌｒｅｄｓｕｂ）命令は、計算
ＡＣＣＤ＝ＡＣＣＳ−ＶＲＳＡ［１］＊ＶＲＳＢ［１］−ＶＳＲＡ［２］＊ＶＳＲＢ［２］−・・・−ＶＳＲＡ［ｍ］＊ＶＳＲＢ［ｍ］
を実行することができる。
【００６２】
これらのベクトル−リデュース命令のそれぞれを、各演算の後の飽和を用いて実行することもできる。演算
ＡＣＣＤ＝ＡＣＣＳ＋ＶＲＳＡ［１］＋ＶＲＳＢ［１］＋ＶＳＲＡ［２］＋ＶＳＲＢ［２］＋・・・＋ＶＳＲＡ［ｍ］＋ＶＳＲＢ［ｍ］
を実行するベクトル−加算−リデュース−加算などの他のベクトル−リデュース命令も、当業者に明白であるように、定義することができる。
【００６３】
図６に、図５に示されたタイプの命令フォーマットを利用する、同一スレッドからの２つのベクトル−リデュース命令のパイプライン化された実行を示す。この例では、制限なしに、合計８つのスレッドがあり、トークントリガースレッディングがラウンドロビンスケジューリングと共に使用されると仮定する。他のスレッドによって発行される命令は、この図には示されていない。この例のパイプラインに、１３個のステージすなわち、命令フェッチ（ＩＦＥ）、命令デコード（ＤＥＣ）、ベクトルレジスタファイル読取（ＲＶＦ）、２つの乗算ステージ（ＭＬ１およびＭＬ２）、２つの加算器ステージ（ＡＤ１およびＡＤ２）、４つのリデュースステージ（ＲＥ１からＲＥ４）、結果転送（ＸＦＲ）、およびアキュムレータファイル書込（ＷＡＦ）が含まれる。第２の加算器ステージ（ＡＤ２）と同一のサイクルに、このプロセッサは、アキュムレータレジスタファイルの読取（ＲＡＦ）も行う。したがって、ベクトル−リデュース命令のうちの所与の１つは、実行に１３サイクルを要する。
【００６４】
この例に関して、２つのベクトル−リデュース命令が、同一のスレッドから続いて発行される場合に、最初のベクトル−リデュース命令は、次のベクトル−リデュース命令がそのアキュムレータソースレジスタをレジスタファイルから読み取ることを必要とする前に、その宛先アキュムレータ結果をアキュムレータレジスタファイルに既に書き戻している（ステージＷＡＦで）ことに留意することが重要である。したがって、
ｖｍｕｌｒｅｄａｄｄ  ａｃｃ０，ａｃｃ０，ｖｒ１，ｖｒ２
ｖｍｕｌｒｅｄａｄｄ  ａｃｃ０，ａｃｃ０，ｖｒ３，ｖｒ４
などの、図５に示された命令フォーマットを使用する２つの命令を、連続する命令として、データ依存性に起因するプロセッサのストールを引き起こさずに発行することができる。このタイプの特徴は、異なるマルチスレッド式プロセッサ構成、パイプライン構成、およびリダクションユニット構成、ならびに異なる命令フォーマットを使用する代替実施形態で提供することができる。
【００６５】
ベクトル乗算リデュース演算のもう１つの例の組を、これから説明する。これらの動作のうちのいくつかが、前の例で説明した対応する動作に類似するか、実質的に同一であることに留意されたい。
【００６６】
ベクトル乗算リデュース演算のこの例の組に、４つの主要なタイプの演算すなわち、ラップアラウンドを用いるベクトル乗算リデュース加算（ｖｍｒｅｄａｄｄ）、飽和を用いるベクトル乗算リデュース加算（ｖｍｒｅｄａｄｄｓ）、ラップアラウンドを用いるベクトル乗算リデュース減算（ｖｍｒｅｄｓｕｂ）、および飽和を用いるベクトル乗算リデュース減算（ｖｍｒｅｄｓｕｂｓ）が含まれる。これらの演算は、ソースアキュムレータ値ＡＣＣＳおよび２つのｋ要素ベクトル
Ａ＝［Ａ［１］，Ａ［２］，・・・，Ａ［ｋ］］および
Ｂ＝［Ｂ［１］，Ｂ［２］，・・・，Ｂ［ｋ］］
をとり、宛先アキュムレータＡＣＣＤの値を計算する。これらの演算の重要な態様は、これらが、すべての演算が個々の動作としてシーケンシャル順序で実行された時と同一の結果を作る、すなわち、これらが、保証されたシーケンシャルセマンティクスを提供することである。一般に、そのような配置での計算結果は、個々の命令の対応するシーケンスを使用して作られるはずの計算結果と正確に同一であるが、本発明は、他のタイプの保証されたシーケンシャルセマンティクスを使用して実施することができる。
【００６７】
ｖｍｒｅｄａｄｄ演算は、計算
ＡＣＣＤ＝｛・・・｛｛ＡＣＣＳ＋｛Ａ［１］＊Ｂ［１］｝｝＋｛Ａ［２］＊Ｂ［２］｝｝＋・・・＋｛Ａ［ｋ］＊Ｂ［ｋ］｝｝
を実行し、ここで、｛Ｔ｝は、Ｔがラップアラウンド算術を使用して計算されることを表す。この演算は、シーケンシャル順序でラップアラウンド算術を用いて、ベクトル要素のｋ対をかけ、結果の積をアキュムレータに加算することに対応する。
【００６８】
ｖｍｒｅｄａｄｄｓ演算は、計算
ＡＣＣＤ＝＜・・・＜＜ＡＣＣＳ＋＜Ａ［１］＊Ｂ［１］＞＞＋＜Ａ［２］＊Ｂ［２］＞＞＋・・・＋＜Ａ［ｋ］＊Ｂ［ｋ］＞＞
を実行し、ここで、＜Ｔ＞は、Ｔが飽和演算を使用して計算されることを表す。この演算は、シーケンシャル順序で、各乗算および各加算の後に飽和を用いて、ベクトル要素のｋ対をかけ、結果の積をアキュムレータに加算することに対応する。
【００６９】
ｖｍｒｅｄｓｕｂ演算は、計算
ＡＣＣＤ＝｛・・・｛｛ＡＣＣＳ−｛Ａ［１］＊Ｂ［１］｝｝−｛Ａ［２］＊Ｂ［２］｝｝−・・・−｛Ａ［ｋ］＊Ｂ［ｋ］｝｝
を実行する。この演算は、シーケンシャル順序でラップアラウンド算術を用いて、ベクトル要素のｋ対をかけ、結果の積をアキュムレータから減算することに対応する。
【００７０】
ｖｍｒｅｄｓｕｂｓ演算は、計算
ＡＣＣＤ＝＜・・・＜＜ＡＣＣＳ＋＜Ａ［１］＊Ｂ［１］＞＞＋＜Ａ［２］＊Ｂ［２］＞＞＋・・・＋＜Ａ［ｋ］＊Ｂ［ｋ］＞＞
を実行する。この演算は、シーケンシャル順序で、各乗算および各加算の後に飽和を用いて、ベクトル要素のｋ対をかけ、結果の積をアキュムレータから減算することに対応する。
【００７１】
上の演算の変形形態も、入力オペランドのフォーマット、丸めが実行されるか否かなどの要因に基づいて、可能である。たとえば、上の演算を、符号なしフォーマット、１の補数フォーマット、２の補数フォーマット、またはサイン−マグニチュードフォーマット（ｓｉｇｎ−ｍａｇｎｉｔｕｄｅ  ｆｏｒｍａｔ）のオペランドについて実施することができる。オペランドは、固定小数点フォーマット（数の基数点が固定されている）または浮動小数点フォーマット（数の基数点が指数に依存する）とすることもできる。演算からの結果を、丸める（さまざまな丸めモードを使用して）か、完全な精度に保つのいずれかとすることができる。
【００７２】
これらの演算のさらなる変形形態が可能である。たとえば、ＡＣＣＳが０の場合に、ｖｍｒｅｄａｄｄ命令およびｖｍｒｅｄａｄｄｓ命令は、ラップアラウンド算術または飽和演算を用いて２つのｋ要素ベクトルの内積を計算することに対応する。Ａベクトルの各要素が１の場合に、ｖｍｒｅｄａｄｄ命令およびｖｍｒｅｄａｄｄｓ命令は、ラップアラウンド算術または飽和演算を用いてＢベクトルの要素をアキュムレータに加算することに対応する。
【００７３】
これらの例の演算は、本明細書で前に説明したように、ＳＩＭＤプロセッサでの実施に特によく適する。ＳＩＭＤ処理では、単一の命令が、複数のデータ要素に対して同一の演算を同時に実行する。本明細書に記載のベクトル乗算リデュース演算を用いると、ベクトル要素の乗算を、ＳＩＭＤの形で並列に実行し、その後、複数のオペランド加算を行うことができ、計算結果は、個々の乗算および加算がシーケンシャル順序で実行された場合に作られるはずの計算結果と同一である。各個々の乗算および加算がシーケンシャル順序で実行された時と同一の結果を得るベクトル乗算リデュース演算を提供することは、これによって、あるプロセッサ用に開発されたコードを別のプロセッサに移植できるようになり、なおかつ同一の結果が作られるので、有用である。
【００７４】
図５のフォーマットを使用して、前の例の並列ベクトル乗算リデュース演算を実行することができる。前に示したように、この図では、ＯＰＣＯＤＥが、実行される動作（たとえば、ｖｍｒｅｄａｄｄ、ｖｍｒｅｄａｄｄｓ、ｖｍｒｅｄｓｕｂ、ｖｍｒｅｄｓｕｂｓなど）を指定する。ＡＣＣＤは、結果の宛先に使用されるアキュムレータレジスタを指定する。ＡＣＣＳは、ソースアキュムレータに使用されるアキュムレータレジスタを指定する。ＶＲＳＡは、ｋ要素ソースベクトルＡに使用されるベクトルレジスタを指定する。ＶＲＳＢは、ｋ要素ソースベクトルＢに使用されるベクトルレジスタを指定する。ＯＰＣＯＤＥに基づいて、ＶＳＲＡおよびＶＳＲＢによって指定されるベクトルレジスタ内の要素が、一緒に乗算され、結果の積が、ＡＣＣＳによって指定されるアキュムレータレジスタに加算されるかこれから減算され、その結果が、ＡＣＣＤによって指定されるアキュムレータレジスタに保管される。
【００７５】
異なる入力オペランド値に関する、ベクトル乗算リデュース演算の上で説明した組（ｖｍｒｅｄａｄｄ、ｖｍｒｅｄａｄｄｓ、ｖｍｒｅｄｓｕｂ、およびｖｍｒｅｄｓｕｂｓ）の実行を示す複数のより具体的な例を、これから説明する。この特定の例では、ＡＣＣＳ、ＡＣＣＤ、およびすべての中間値が、８ビットの２の補数の整数であり、これは、−１２８から１２７までの値をとることができる。ＡおよびＢは、４要素ベクトル（ｋ＝４）であり、各ベクトル要素は、４ビットの２の補数の整数であり、これは、−８から７までの値をとることができる。ラップアラウンド算術を実行する時には、結果が１２７を超える場合に、その符号ビットが０から１に変化し、これは、結果から２５６を減算することと同等である。結果が−１２８未満の場合に、その符号ビットが１から０に変化し、これは、結果に２５６を加算することと同等である。飽和演算を実行する時には、結果が１２７を超える場合に、結果が１２７に飽和される。結果が−１２８未満の場合に、結果が−１２８に飽和される。
【００７６】
ｖｍｒｅｄａｄｄ演算の場合に、加算｛１１３＋６４｝は、結果の１１３＋６４−２５６＝−７９へのラップアラウンドを引き起こし、加算｛−１１４＋−３６｝は、結果の−１１４＋−３６＋２５６＝１０６へのラップアラウンドを引き起こす。
【００７７】
ｖｍｒｅｄａｄｄｓ演算の場合に、加算＜１１３＋６４＞は、結果の１２７への飽和を引き起こす。
【００７８】
ｖｍｒｅｄｓｕｂ演算の場合に、減算｛−１１３−６４｝は、結果の−１１３−６４＋２５６＝−７９へのラップアラウンドを引き起こし、加算｛１１４＋３６｝は、結果の１１４＋３６−２５６＝−１０６へのラップアラウンドを引き起こす。
【００７９】
ｖｍｒｅｄｓｕｂｓ演算の場合に、減算＜−１１３−６４＞は、結果の−１２８への飽和を引き起こす。
【００８０】
例１：ＡＣＣＳ  ＝  ６４
Ａ［１］＝７，Ａ［２］＝−８，Ａ［３］＝−７，Ａ［４］＝−６
Ｂ［１］＝７，Ｂ［２］＝−８，Ｂ［３］＝５，Ｂ［４］＝６
vmredadd：ACCD  ＝ {{{{６４＋{７＊７}}＋{−８＊−８}}＋{−６＊６}}＋{−５＊７}}
＝ {{{{６４＋４９}＋６４}＋−３６}＋−３５｝
＝ {{{１１３＋６４}＋−３５}＋−３６}
＝ {{−７９＋−３５}＋−３６}
＝ {−１１４＋−３６}
＝ １０６
vmredadds：ACCD ＝ <<<<６４＋<７＊７>>＋<−８＊−８>>＋<−６＊６>>＋<−５＊７>>
＝ <<<<６４＋４９>＋６４>＋−３５>＋−３６>
＝ <<<１１３＋６４>＋−３５>＋−３６>
＝ <<１２７＋−３５>＋−３６>
＝ <<９２＋−３６>
＝５６
【００８１】
例２：ＡＣＣＳ＝−６４
Ａ［１］＝７，Ａ［２］＝−８，Ａ［３］＝−７，Ａ［４］＝−６
Ｂ［１］＝７，Ｂ［２］＝−８，Ｂ［３］＝５，Ｂ［４］＝６
vmredsub：ACCD ＝{{{{−６４−{７＊７}}−{−８＊−８}}−{−６＊６}}−{−５＊７}}
＝ {{{{−６４−４９}−６４}＋３５}＋３６}
＝ {{{−１１３−６４}＋３５}＋３６}
＝ {{７９＋３５}＋３６}
＝ {１１４＋３６}
＝ −１０６
vmredsubs：ACCD＝<<<<−６４−<７＊７>>−<−８＊−８>>−<−６＊６>>−<−５＊７>>
＝ <<<<−６４−４９>−６４>＋３５>＋３６>
＝ <<<−１１３−６４>＋３５>＋３６>
＝ <<−１２８＋３５>＋３６>
＝ <−９３＋３６>
＝ ５７
【００８２】
上で説明した、ベクトル乗算リデュース演算の例の組（ｖｍｒｅｄａｄｄ、ｖｍｒｅｄａｄｄｓ、ｖｍｒｅｄｓｕｂ、およびｖｍｒｅｄｓｕｂｓ）の利益は、これらがシーケンシャルセマンティクスを保証することである。すなわち、これらの演算は、計算結果が、個々の命令の対応するシーケンスを使用して作られるはずの計算結果と同一であることを保証する。
【００８３】
さまざまな他のタイプのベクトル乗算リデュース演算を、本明細書で説明した技法を使用して実施することができる。
【００８４】
当業者に明白であるように、図１から４に示した特定の回路配置が、例示的な例としてのみ提示され、明示的に図示されていない追加要素または代替要素を含めることができることに留意されたい。
【００８５】
また、本発明が、図４に示された特定のマルチスレッド式プロセッサ構成を必要としないことを強調しなければならない。本発明は、さまざまな他のマルチスレッド式プロセッサ構成または非マルチスレッド式プロセッサ構成で実施することができる。
【００８６】
したがって、本発明の上で説明した実施形態は、例示のみであることが意図され、添付の特許請求の範囲に含まれる多数の代替実施形態が、当業者に明白であろう。たとえば、図示された特定の算術ユニット構成、リダクションユニット構成、およびアキュムレータユニット構成を、他の実施形態では変更することができる。また、上で注記したように、パイプライン構成、スレッディングタイプ、および命令フォーマットを、所与の応用例の特定の必要に合わせて変更することができる。
【図面の簡単な説明】
【００８７】
【図１】本発明の例示的な実施形態による、並列ベクトル乗算リデュース演算を実行する際に使用するのに適する例示的プロセッサの一部を示す図である。
【図２】例示的な実施形態でｍ＝４の場合について実施される、図１のリダクションユニットを示すより詳細な図である。
【図３】図２のリダクションユニット内で利用されるリダクション加算器を示すより詳細な図である。
【図４】図２のリダクションユニットを組み込んだマルチスレッド式プロセッサの例を示す図である。
【図５】図４のマルチスレッド式プロセッサ内での実行に適するベクトル−リデュース命令の例示的フォーマットを示す図である。
【図６】図５に示されたタイプの命令フォーマットを利用する、同一スレッドからの２つのベクトル−リデュース命令のパイプライン化された実行を示す図である。
【図１】
2007533009.tif 000003
【図２】
2007533009.tif 000004
【図３】
2007533009.tif 000005
【図４】
2007533009.tif 000006
【図５】
2007533009.tif 000007
【図６】
2007533009.tif 000008
【国際調査報告】
2007533009.tif 000009