(57)【要約】  Ｎ次元のベクトル演算を実行するために、半導体チップに実装されるベクトル機能ユニットは、それぞれが論理回路を含むＮ個の機能ユニットと、Ｎ個の機能ユニットのうち選択されたものから出力結果の提示を行わせるマスキング回路とを備える。各論理回路は、第１の整数乗算加算計算の最上位側のビット部分は提示するが最下位側のビット部分は提示しない第１の整数乗算加算命令と、第２の整数乗算加算計算の最下位側のビット部分は提示するが最上位側のビット部分は提示しない第２の整数乗算加算命令とを実行する。【選択図】図１Ｂ
2013543174.tif 000002
【特許請求の範囲】
【請求項１】
Ｎ次元のベクトル演算を実行するために、半導体チップに実装されているベクトル機能ユニットであって、
それぞれが論理回路を含むＮ個の機能ユニットと、
前記Ｎ個の機能ユニットのうち選択されたものから出力結果の提示を行わせるマスキング回路と
を備え、
前記論理回路は、
第１の整数乗算加算計算の最上位側のビット部分は提示するが最下位側のビット部分は提示しない第１の整数乗算加算命令と、
第２の整数乗算加算計算の最下位側のビット部分は提示するが最上位側のビット部分は提示しない第２の整数乗算加算命令とを実行する、ベクトル機能ユニット。
【請求項２】
前記Ｎ個の機能ユニットはそれぞれ、さらに、浮動小数点乗算加算命令を実行する論理回路を含む、請求項１に記載のベクトル機能ユニット。
【請求項３】
前記Ｎ個の機能ユニットはそれぞれ、３２ビット演算および６４ビット演算を両方ともサポートする、請求項１または２に記載のベクトル機能ユニット。
【請求項４】
前記Ｎ個の機能ユニットはそれぞれ、加算器の前の第１のシフトレジスタと、前記加算器の後の第２のシフトレジスタとを含む、請求項１から３のいずれか一項に記載のベクトル機能ユニット。
【請求項５】
前記加算器は、前記第１の整数乗算加算命令および前記第２の整数乗算加算命令のいずれのスカラー演算結果のビット幅よりも大きなビット幅の出力を持つ、請求項４に記載のベクトル機能ユニット。
【請求項６】
前記第１のシフトレジスタおよび前記第２のシフトレジスタは、ＡＢの項の指数値およびＣ項の指数値の差を計算する論理回路に連結されている、請求項４または５に記載のベクトル機能ユニット。
【請求項７】
方法であって、
半導体チップでベクトル演算を実行する段階を備え、
前記実行する段階は、
前記半導体チップに実装されているベクトル機能ユニットで第１のベクトル命令を実行する段階と、
前記ベクトル機能ユニットで第２のベクトル命令を実行する段階とを有し、
前記ベクトル機能ユニットは、ベクトル演算を実行するために要素をマスキングして、
前記第１のベクトル命令は、第１の整数乗算加算計算の最上位側のビット部分は提示するが最下位側のビット部分は提示しない第１のベクトル整数乗算加算命令であり、
前記第２のベクトル命令は、第２の整数乗算加算計算の最下位側のビット部分は提示するが最上位側のビット部分は提示しない第２のベクトル整数乗算加算命令である、方法。
【請求項８】
前記第１のベクトル命令の結果、および、前記第２のベクトル命令の結果を、コンピューティングシステムのそれぞれ異なる格納位置に格納する段階をさらに備える、請求項７に記載の方法。
【請求項９】
ベクトル浮動小数点乗算加算命令を、前記ベクトル機能ユニットで実行する段階をさらに備える、請求項７または８に記載の方法。
【請求項１０】
同じ加算器を利用して、前記第１のベクトル整数乗算加算命令および前記第２のベクトル整数乗算加算命令、並びに、前記ベクトル浮動小数点乗算加算命令のそれぞれについてＡＢ項とＣ項との合計を実行する段階をさらに備える、請求項９に記載の方法。
【請求項１１】
前記第１のベクトル整数乗算加算命令の結果は、前記第２のベクトル整数乗算加算命令の結果より多いビットを提供する、請求項７から１０のいずれか一項に記載の方法。
【請求項１２】
前記第１のベクトル整数乗算加算命令は６４ビットを提供し、前記第２のベクトル整数乗算加算命令は３２ビットを提供する、請求項１１に記載の方法。
【請求項１３】
ハードディスクドライブと、
Ｎ次元のベクトル演算を実行するために、半導体チップに実装されているプロセッサと
を備え、
前記プロセッサは、
それぞれが論理回路を含むＮ個の機能ユニットと、
前記Ｎ個の機能ユニットのうち選択されたものから出力結果の提示を行わせるマスキング回路と
を有し、
前記論理回路は、
第１の整数乗算加算計算の最上位側のビット部分は提示するが最下位側のビット部分は提示しない第１の整数乗算加算命令と、
第２の整数乗算加算計算の最下位側のビット部分は提示するが最上位側のビット部分は提示しない第２の整数乗算加算命令とを実行する、コンピューティングシステム。
【請求項１４】
前記Ｎ個の機能ユニットはそれぞれ、さらに、浮動小数点乗算加算命令を実行する論理回路を含む、請求項１３に記載のコンピューティングシステム。
【請求項１５】
前記機能ユニットはそれぞれ、３２ビット演算および６４ビット演算を両方ともサポートする、請求項１３または１４に記載のコンピューティングシステム。
【請求項１６】
前記機能ユニットはそれぞれ、加算器の前の第１のシフトレジスタと、前記加算器の後の第２のシフトレジスタとを含む、請求項１３から１５のいずれか一項に記載のコンピューティングシステム。
【請求項１７】
前記加算器は、前記第１の整数乗算加算命令および前記第２の整数乗算加算命令のいずれのスカラー演算結果のビット幅よりも大きなビット幅の出力を持つ、請求項１６に記載のコンピューティングシステム。
【請求項１８】
前記第１のシフトレジスタおよび前記第２のシフトレジスタは、ＡＢの項の指数値およびＣ項の指数値の差を計算する論理回路に連結されている、請求項１６または１７に記載のコンピューティングシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の分野は、概してコンピュータシステムに関しており、より詳しくは、ベクトル乗算加算結果の計算に利用される論理ブロックを利用するベクトル乗算加算命令およびその他の命令を実行するためのプロセッサアーキテクチャに関する。
【背景技術】
【０００２】
コンピュータ科学の分野では、「スカラー」と「ベクトル」という２つのプロセッサアーキテクチャの種類が広く認識されている。スカラープロセッサは、１つのデータセットに演算を行う命令を実行するよう設計されており、ベクトルプロセッサは、複数のデータセットに演算を行う命令を実行するよう設計されている。図１Ａおよび図１Ｂは、スカラープロセッサとベクトルプロセッサとの間の基本的な区別を示す比較例である。
【０００３】
図１Ａは、ＡおよびＢからなる１つのオペランドセットのＡＮＤをとり、単一の（「スカラー」）の結果Ｃを得るスカラーＡＮＤ命令の一例を示す（ＡＢ＝Ｃ）。これに対して、図１Ｂは、２つのオペランドセットＡ／ＢおよびＤ／Ｅが、それぞれのＡＮＤを並列に行い、ベクトル結果ＣおよびＦを同時に生成する例を示す（Ａ．ＡＮＤ．Ｂ＝ＣおよびＤ．ＡＮＤ．Ｅ＝Ｆ）。
【０００４】
技術分野で公知なように、通常、出力オペランドと入力オペランドとは、それぞれ専用のレジスタに格納される。たとえば数多くの命令が入力オペランドを２つ持っている。したがって２つの個別の入力レジスタを利用して、入力オペランドをそれぞれ一次的に格納する。さらに、これら同じ命令が、一次的に第３の（結果）レジスタに格納される出力を生成する場合がある。図１Ａ、図１Ｂは、入力１０１ａ、ｂ、および、１０２ａ、ｂおよび結果レジスタ１０３ａ、ｂそれぞれを示している。「スカラー」と「ベクトル」との間の特徴の区別は容易であることが知られている。
【０００５】
つまり、図１Ａのスカラー設計の入力レジスタ１０１ａおよび１０２ａは、スカラー値のみ（それぞれＡ、Ｂ）を保持していることがわかる。同様に、図１Ａのスカラー設計の結果レジスタ１０３ａは、スカラー値（Ｃ）のみを保持していることがわかる。これに比較すると、図１Ｂのベクトルシステムの入力レジスタ１０１ｂおよび１０２ｂは、ベクトル（レジスタ１０１ＢにＡ、Ｄ、および、レジスタ１０２ｂにＢ、Ｅ）を保持している。同様に、図１Ｂのベクトルシステムの結果レジスタ１０３ｂも、ベクトル値（Ｃ、Ｆ）を保持することが示されている。用語としては、図１Ｂのベクトルシステムの各レジスタ１０１ｂ、１０２ｂ、および１０３ｂの内容を「ベクトル」と総称し、ベクトル内の個々のスカラー値は、「要素」と称することができる。したがってたとえば、レジスタ１０１ｂは、「要素」Ａと「要素」Ｄとからなる「ベクトル」Ａ、Ｄを格納するものとして示されている。
【０００６】
スカラーまたはＳＩＭＤ乗算演算のみが、半導体チッププロセッサ内に実際に単一のプロセッサ命令として実装されていることが知られている。半導体チッププロセッサに実装されていることが知られているスカラーまたはＳＩＭＤ乗算命令には、２つの整数入力オペランドの積の下位ビットを提供する「乗算」命令（ＭＵＬ）と、スカラー整数の乗算演算の上位ビットを提供する「上位乗算（multiply high）」命令（ＭＵＬＨ）とが含まれる。
【０００７】
半導体チッププロセッサチップ内にスカラーまたはＳＩＭＤ命令として実装されていることが知られている他の命令には、「先頭ゼロカウント」ＣＬＴ命令、「末尾ゼロカウント」命令ＣＴＺ、および、「カウント」命令ＣＮＴが含まれる。スカラーＣＬＺ命令は、スカラー入力Ａを受け付けて、Ａの最上位１の前のＡの０の数を戻す（たとえば、Ａ＝１０００であれば、ＣＬＺの結果＝０となり、Ａ＝０１００であれば、ＣＬＺの結果＝１となり、Ａ＝００１０であれば、ＣＬＺの結果＝２となる、等々）。スカラーＣＴＺ命令は、スカラー入力Ａを受け付けて、Ａの最下位の後の０の数を戻す（たとえば、Ａ＝１０００であれば、ＣＬＺの結果＝３となり、Ａ＝０１００であれば、ＣＬＺの結果＝２となり、Ａ＝００１０であれば、ＣＬＺの結果＝１となる、等々）。スカラーＣＮＴ命令は、スカラー入力Ａを受け付けて、Ａの１の数を戻す（たとえば、Ａ＝１０１１であれば、ＣＬＺの結果＝３となり、Ａ＝１００１であれば、ＣＬＺの結果＝２となり、Ａ＝００１０であれば、ＣＬＺの結果＝１となる、等々）。
【０００８】
本発明を、添付図面を例にとって限定ではなく示す。同様の参照番号は同様の図面を示している。
【図面の簡単な説明】
【０００９】
【図１Ａ】スカラー論理演算を示す。
【図１Ｂ】ベクトル論理演算を示す。
【００１０】
【図２】ベクトル乗算加算機能ユニットを示す。
【００１１】
【図３】図２の各機能ユニット２００＿１から２００＿Ｎに利用可能な電子機能ユニットの一実施形態を示す。
【００１２】
【図４Ａ】ベクトル浮動小数点乗算加算演算を示す。
【００１３】
【図４Ｂ】ベクトル浮動小数点乗算加算演算を示す。
【００１４】
【図５】先頭ゼロ、末尾ゼロ、オペランド１カウントおよびパリティ命令を実行する拡張論理を備える図３の機能ユニットの一実施形態を示す。
【００１５】
【図６Ａ】先頭ゼロ決定の実行を示す。
【図６Ｂ】末尾ゼロ決定の実行を示す。
【図６Ｃ】オペランド１カウントの実行を示す。
【図６Ｄ】オペランドパリティ決定の実行を示す。
【００１６】
【図７】半導体プロセッサを示す。
【００１７】
【図８】コンピューティングシステムを示す。
【発明を実施するための形態】
【００１８】
コンピュータシステムには、「乗算加算」演算が必要となるものがある。乗算加算演算は、計算（Ａ＊Ｂ）＋Ｃを実行する演算のことであり、ここでＡ、Ｂ，およびＣがそれぞれ入力オペランドとなる。図２は、ベクトル乗算加算命令（ＶＭＡＤＤ）を実行することができるベクトル処理機能ユニット２００の高レベルアーキテクチャ図である。図２からわかるように、機能ユニットは、それぞれがスカラー乗算加算演算を入力ベクトルのそれぞれの要素に実行するＮ個のスカラー論理ユニット２００＿１から２００＿Ｎを含んでいる。ここで、入力レジスタ２０３は、入力ベクトルＡが、Ａ＿１、Ａ＿２、…、Ａ＿Ｎを保持しており、入力レジスタ２０４が、Ｂ＝Ｂ＿１、Ｂ＿２、…、Ｂ＿Ｎを保持しており、入力レジスタ２０５が、Ｃ＝Ｃ＿１、Ｃ＿２、…、Ｃ＿Ｎを保持している。スカラー論理ユニット２００＿１は、((A_1)*(B_1))+C_1を行い、スカラー論理ユニット２００＿２は、((A_2)*(B_2))+C_2を行い、スカラー論理ユニット２００＿Ｎは、((A_N)*(B_N))+C_Nを行う。一実施形態では、各スカラー論理ユニットが、３２ビットのオペランド演算モードと、６４ビットのオペランド演算モードとを両方サポートしている。論理ユニット２００＿１から２００＿Ｎにより生成される個々の結果２０２＿１から２０２＿Ｎが、ベクトル機能ユニット２００が生成して出力レジスタに格納されている出力ベクトルの個々の要素に対応している。
【００１９】
図２は、ＳＩＭＤ演算に対してベクトル演算を実行するために、マスキングレイヤが出力回路２０６に組み込まれてよいことも示している。ベクトル演算は、ＳＩＭＤ演算とは別のものとしてみられており、入力オペランドの次元が、ベクトルマシンについては可変であるが、ＳＩＭＤマシンについては固定されている。図２のベクトルマシンの要素数を変化させる能力は、出力２０６で実行されうるマスキングにより表される。具体的に、各出力要素が、銘々の書き込み論理回路で書き込まれてよい（不図示）。一実施形態では、書き込み論理回路は、どの出力要素位置にも書き込むことができる。一実施形態では、書き込み論理回路を、有効なベクトルオペランド要素に対応する要素のみに対して有効とすることで、可変長のベクトルを処理することができる。これは、有効なベクトル要素に対応するスカラー機能ユニット200_1から200_Nのもののみ演算を本質的に有効とする効果もある。さらに、マスクによって、提示する有効な要素について検知される算術的例外がイネーブルされ、同時に、無効な要素の例外が抑制される。
【００２０】
以下に詳述するように、ベクトル乗算加算命令を計算すること以外にも、機能ユニット２００はさらに、ｉ）ベクトル乗算加算計算の上位ビットを提供する整数オペランドのベクトル乗算加算高命令（ＶＭＡＤＤＨ）、ｉｉ）ベクトル乗算加算計算の下位ビットを提供する整数オペランドのベクトル乗算加算（ＶＭＡＤＤＬ）、ｉｉｉ）入力ベクトルＣを受け付けて、入力ベクトルＣの要素の先頭ゼロカウントにそれぞれ要素が対応している出力ベクトルを結果として提供するベクトルカウント先頭ゼロ命令（ＶＣＬＺ）、ｉｖ）入力ベクトルＣを受け付けて、入力ベクトルＣの要素の末尾ゼロカウントにそれぞれ要素が対応している出力ベクトルを結果として提供するベクトルカウント末尾ゼロ命令（ＶＣＴＺ）、ｖ）入力ベクトルＣを受け付けて、入力ベクトルＣの個々の要素の１のカウントにそれぞれ個々の要素が対応している出力ベクトルを結果として提供するベクトルカウント命令（ＶＣＮＴ）、ｖｉ）入力ベクトルＣを受け付けて、入力ベクトルＣの個々の要素のパリティステータス（偶数または奇数）にそれぞれ個々の要素が対応している出力ベクトルを結果として提供するベクトルパリティ命令（ＶＰＡＲ）のうちの１以上のような、複数のさらなるベクトル命令の計算も可能である。ＶＭＡＤＤ命令においては、上で数えた各命令が、ベクトル入力Ａ、Ｂ，およびＣのそれぞれの入力オペランド要素のスカラー実行により達成される。さらなる実施形態では、これも後述するが、機能ユニット２００が実行する命令のいずれか、またはすべてが、浮動小数点および整数のオペランドで動作可能である。
【００２１】
図３は、図２のスカラー論理ユニットの１つの実施形態を示している。この実施形態で記載するように、スカラー論理ユニットは、上述したVMADD, VMADDH, VMADDL, VCLZ, VTLZ, VCNTおよびVPAR命令のいずれかをサポートする入力ベクトルＡ、Ｂ，およびＣのそれぞれの要素に対してスカラー演算を実行することができる。
【００２２】
入力ベクトルＡ、Ｂ，Ｃの要素および出力ベクトルＲの要素が浮動小数点で指定されているときのＶＭＡＤＤ命令の演算について説明する。当技術分野で知られているように、浮動小数点の数値の表現は、符号(sign)＊仮数（mantissa）＊指数(exponent)の形式をとり、符号の値は、数値が正か負かを示しており、仮数の値は、値の「数」を示しており、指数の値は、値のオーダを指定している。すると、ＶＭＡＤＤ命令は、((A_sgn)(B_sgn)(A_mantissa)(B_mantissa)(A_exponent + B_exponent)) + (C_sgn)(C_mantissa)(C_exponent)で示すことができる。
【００２３】
図３を参照すると、乗算器３０１は、少なくとも(A_mantissa)(B_mantissa)の明示的な計算として (A_sgn)(B_sgn)(A_mantissa)(B_mantissa)の項を計算している。積の符号は、ｉ）Ａ＿ｓｇｎおよびＢ＿ｓｇｎが同じ値である場合に正、ｉｉ）Ａ＿ｓｇｎおよびＢ＿ｓｇｎが異なる値の場合には、負、として簡単に計算することができる。積の指数ブロック３０２は、ｉ）（Ａ＿ｅｘｐｏｎｅｎｔ＋Ｂ＿ｅｘｐｏｎｅｎｔ）と、ｉｉ）Ｃ＿ｅｘｐｏｎｅｎｔとのうち大きいほうをとることで、最終結果の指数の最初の計算を決定する。つまり、Ｃの値がＡおよびＢの積よりもかなり大きい場合には、Ｃの項のオーダが最終結果のオーダを支配する。同様に、ＡＢがＣよりもかなり大きい場合には、ＡＢのオーダが最終結果のオーダを支配することになる。
【００２４】
加算器３０５が、ＡＢ+Ｃの加算を行う。しかし顕著なことに、加算を浮動小数点の形態で行う前に、一実施形態では、ＡＢの項の指数（つまり、乗算器３０１の出力に関する指数）を、Ｃ項の指数と同じにしておく。指数差ブロック３０３およびシフタ３０４を利用してこのプロセスを実行する。具体的には、指数差ブロック３０３が、ＡＢ項の指数とＣ項の指数との差をとる（つまりｉ）（Ａ＿ｅｘｐｏｎｅｎｔ＋Ｂ＿ｅｘｐｏｎｅｎｔ）と、ｉｉ）Ｃ＿ｅｘｐｏｎｅｎｔとの間の差をとる）。２つの項のうち小さいほうも特定する（たとえば、積指数ブロック３０２の出力を分析することで）。次に、２つの項のうち小さいほうの仮数のバイナリポイントの位置（つまり、ＡＢ積の項またはＣの項（小さいほうの指数項）の仮数のバイナリポイントの位置）を、「左に」、差ブロック３０３が決定する２つの項の間の指数差に対応するビット数位置分シフトする。シフトした項および他方の、シフトしていない項を加算器３０５に渡す。
【００２５】
一例として、ＡＢの積の項は、５．５５５５Ｅ８に対応しており、Ｃの項は、２．２２２２Ｅ６に対応しており、Ｃの項の仮数のバイナリポイント位置（２．２２２２）は、シフタ３０４により左に２桁分（０．０２２２２）シフトされて、加算器３０５が同じ指数値を持つ２つの数の仮数を適切に加算する。この例では、加算器３０５が、５．５５５５Ｅ８と０．０２２２２Ｅ８とを適切に加算する。したがって一実施形態では、シフタ３０４が差ブロック３０３の出力に連結され、ＡＢの項およびＣの項のいずれかの仮数のバイナリポイント位置に適用するのに適したシフトの量が決定される。さらなる実施形態では、ＡＢの項およびＣの項の一方の仮数のバイナリポイント位置をシフトさせ、他方はシフトさせない。次に、シフトしたほうの仮数の値およびシフトさせなかった仮数の値を、加算器３０５に提示する。もちろん、差ブロック３０３がＡＢの項およびＣの項の指数が同じであると判断すると、シフトは行われず、ＡＢの項とＣの項両方の仮数をシフトしないで加算器３０５に渡す。
【００２６】
一実施形態では、ＡＢの項とＣの項の符号の値も、加算器３０５に渡して、たとえばＣの項の符号が負である場合には、ＡＢ−Ｃの減算が実際に実行できるようにする。２つの項の減算が実際に実行できる場合（つまり、ＡＢの項の符号がＣの項の符号と異なっている場合）、かつ、２つの項の絶対値がほぼ等しい場合、加算器３０５の出力は、ゼロに近い数であってよい。したがって、加算器３０５の出力の仮数の値は、最初の１が現れる前に０の列をもつ。この場合、より高い精度の結果を生成するために、加算器３０５の出力の仮数の値のバイナリポイントをシフトして、最初の値として、整数を有する仮数を生成する。
【００２７】
たとえば加算器が、ＡＢの仮数と符号の項−５.５５５５６６…と、Ｃの仮数と符号の項＋５．５５５５５５…とを提示された場合、加算器３０５は、−０．００００１１…を生成する。最終結果の精度を高めるために、加算器３０５からの結果のバイナリポイントを、５桁右にシフトして、１．１１１１１１…とする必要がある。バイナリポイントの右へのシフトは、指数の値の変更に対応しているので、指数値を変更する必要もある。この特定の例においては、仮数のバイナリポイントを右に５桁シフトすることは、指数値を５減らすことに対応している。したがって加算器３０５の出力で提供される仮数の項に最初にゼロがある場合には、バイナリポイントを右にシフトさせる必要があるばかりでなく、積の指数ブロック３０３の出力の指数の項を減らす必要もある。ここで先頭の１の予測ブロック３０６、正規化シフタ３０７、および指数加算器３０８を利用してこれらのタスクを遂行する。
【００２８】
具体的には、先頭の１の予測ブロック３０６は、加算器の出力の最初（一番左）の１の位置にフラグをつけて、正規化シフタ３０７に対して、加算器出力が右にシフトすべきバイナリポイントの数を示し、指数加算器３０８に、指数ブロック３０２からいくつ指数値を減らせばいいかを示す。一実施形態では、加算器の出力のバイナリポイントの右への移動が、実際には、加算器の出力の数値内容を左に移動させることで達成される場合もある。同じ実施形態または別の実施形態では、加算器３０８が、先頭の１の予測器３０６から届く値が、積の指数３０２の出力値から減算すべきであると理解する。
【００２９】
一実施形態では、先頭の１つの予測器が以下のように動作する。加算器３０５に提供される２つの入力オペランドのうち（つまりＡＢの項の仮数とＣの項の仮数）、先頭の１の予測器３０６が、これらの項の先頭の１の位置を個々に決定して、先頭の１の位置の左端のビット位置にフラグをたてる。たとえばＡＢ項の仮数が０００１１００１０１…であり、Ｃの項の仮数が００００１０００００…である場合には、先頭の１の予測器３０６は４番目のビット位置にフラグを立てる。これは、４番目のビット位置が（ＡＢの仮数の項のうち）、２つのオペランドのうち、左端の（または最上位の）先頭の１であるからである。この決定を、次に、加算器３０５の出力の先頭の１の位置として仮定する。多くの場合この仮定が正しく、これを正規化シフタ３０７が加算器の出力のシフト量の決定に利用して、さらに、加算器３０８が実行する指数減算量の決定に利用する。
【００３０】
場合によってはこの仮定が正しくない場合もある。先ほど述べた例で提供された２つのオペランドは、加算器により加算されて、００１００００１０１…という加算器の出力が生成される。仮定が正しくない場合、この例では、２つのオペランドの加算によって、先頭の１の予測器が特定するビット位置で繰り上げが生じる（つまり、先頭の１の予測器が特定する加算器の出力のビット位置が０である）ので、先頭の１の予測器が特定する位置から１つ位置を左にずらしたビット位置は１である。したがって、一実施形態では、先頭の１のインジケータ３０６がフラグをつける仮定値を、加算器の出力をシフトしてその指数を減算する量として解放する前に、論理回路は、ｉ）先頭の１のインジケータが特定する加算器３０５の出力の位置が０であることをしらべること、ｉｉ）先頭の１のインジケータが特定する位置のすぐ左の加算器３０５の出力の位置が１であることをしらべること、のうちいずれかまたは両方を「チェック」として実行する。これら条件のいずれかが真である場合には、正しい解は、先頭の１のインジケータ３０６のフラグするビット位置ではなくて、先頭の１のインジケータがフラグするビット位置のすぐ左のビット位置ということになる。この場合には、先頭の１のインジケータは、本質的に仮定を正して、正しい情報をシフタ３０７と加算器３０８とに与える。
【００３１】
ここで、先頭の１の予測器を利用する理由が、先頭の１の判断プロセスが包括的であるために、１以上のクロックサイクルを消費する可能性があることであることは言及に値する。同様に、加算器３０５が実行する加算も包括的であるために、１以上のクロックサイクルを消費する可能性がある。先頭の１の決定が、加算器３０５に「後続して」行われるよう設計されている場合には、２以上のクロックサイクルが消費されて、ＡＢ+Ｃの合計と、合計の先頭の１の位置とが決定される。しかし図３のアーキテクチャでは、加算器３０５の合計および予測器３０６の先頭の１の決定の大部分が並列で行われるので、直列で行われる場合よりも、消費されるクロックサイクル時間全体が短くなる。さらに、先頭の１の予測器３０６の結果が間違っており、チェックされたとしても、上述した「チェック」演算は比較的単純であり、実行に利用される論理も比較的短いエントツーエンドであるために、チェック演算の時間ペナルティが許容可能であり、全体としてより良い解決法が維持される。
【００３２】
シフタ３０７が加算器３０５の結果をシフトして、加算器３０８が指数の値を減らすと（シフトおよび指数の低減が可能な場合）、ＦＭＡＤＤ命令（ＡＢ+Ｃ）の「解」が本質的に決定されたことになる。最終的な処理は、所望の精度および適切なフォーマットで解を表現するために実行される。この処理の一部には、仮数の値の丸め処理が含まれる。一実施形態では、命令は、単精度または倍精度という２つの異なるレベルの精度のいずれかを指定することができる。さらなる実施形態では、倍精度の値は、単精度の値が表現するビット数の二倍のビット数で表現される。さらなる実施形態では、単精度のフォーマットは、３２ビットであり、内訳が、符号用の１ビットと、仮数用の２３ビットと、指数用の８ビットとであり、倍精度のフォーマットは、６４ビットであり、内訳が、符号用の１ビットと、仮数用の５２ビットと、指数用の１１ビットとである。またさらなる実施形態では、機能ユニット３００内で、仮数が１２８ビットまでの精度で計算される。ここで乗算器３０１の出力幅が、２つの６４ビットの整数値の整数倍を処理できるよう１２８ビットとして接続される。同様に加算器３０５の出力およびシフタ３０７の出力も１２８ビットである。
【００３３】
従い、様々な実施形態で、結果の仮数のための機能ユニット３００により内部で計算されたビット数が、最終結果の仮数部として実際に提示されるビット数を超える場合がある。したがって、ラウンド処理は、最終的に提示される仮数を下回るビットいずれかが１である場合（スティッキービットと称される）に行われることになる。図３のアーキテクチャでは、末尾ゼロ論理ブロック３０９は、シフタ３０７の出力の末尾のゼロの数を決定する。この数は、機能３００による計算のさらなるビットの数と比較すると、最終的に提示される仮数のビットを下回る１がある場合に示される。仮数が左にシフトされ、先頭のゼロが削除され、同時に末尾のゼロがシフトされると、さらなる末尾のゼロの数（さらなる末尾のゼロの数であり、先頭の１ブロック３０６が計算する左のシフト数に等しい）を考慮に入れる必要がある。ここで、シフタ３０７の出力の末尾のゼロの数を正確に計算するために、末尾のゼロの検知器３０９は、先頭の１の予測器３０６が課すシフトを認知している必要があり、このために、末尾のゼロの検知器３０９も、先頭の１の予測器３０６からの入力を受け付けるものとして観察される。
【００３４】
最下位（右端）ビットの位置から、上位のビットの位置に１ビットずつ左に移動するゼロの数は、１の最下位（右端）値の位置まで決定される。末尾のゼロの数が、任意の精度の仮数の最下位（右端）の位置を超える（左方向へ）場合、最下位ビット位置を現在の値で維持する（つまりラウンドアップ処理を行わない）。逆に、ラウンドアップ処理を行う場合、利用可能な精度の仮数の最下位ビット位置をｉ）０から１に、またはｉｉ）１から０に増分すると、次に上のビット位置まで到達する繰り上げ項が生じる。
【００３５】
加算器３１０のラウンドアップ処理は、適用可能な精度でシフタ３０７の結果の仮数の最下位ビット位置に１の値を足す場合に利用される。加算器３１０の出力は、所望の精度への最終的な仮数値の対象として捉えられる。一実施形態では、加算器３１０の出力は常に所望の精度の最終的な仮数値の対象として捉えられ、ラウンドアップ処理を行わない場合には、シフタ３０７の出力に値０を追加して、ラウンドアップ処理を行う場合には、この任意の精度で右端の位置のシフタ３０７の出力の値１を追加する。図３からわかるように、スティッキービットの計算論理３１１は、末尾のゼロの検知論理３０９の出力と、所望の精度とに基づいてラウンドアップ処理が必要であるか否かを判断して、ラウンドアップ処理制御論理３１２は、このスティッキービットの決定に基づいて加算器３１０の所望の精度の最下位ビット位置に０または１を追加する（ラウンドアップ処理を行わない場合には０を加算し、ラウンドアップ処理を行う場合には１を加算する）。
【００３６】
図３の実施形態に示すように、末尾のゼロの検知論理３０９は、加算器３０５に提示されるオペランドに対して動作して、先頭の１の予測器３０６同様に、加算器３０５と並列で処理を実行することができる。別の実施形態では、末尾のゼロの検知器は、各オペランドの最下位（右端）のビットの値１を特定して、この２つのオペランドのうち最下位ビットの位置を、加算器３０５の出力の末尾のゼロの数を求める基礎としてフラグする。先頭の１の予測器が生じさせるシフトはさらに、末尾のゼロの検知器３０９によっても説明がつく。つまり、ある精度において、加算器３０５のシフトはいずれも、シフタ３０７の出力の最下位ビットを超えるか否か判断される前にいくつのゼロを検知する必要があるかに影響を与える。この末尾のゼロの検知方法は、数学的にはエラーの可能性がないために、エラーの「チェック」（先頭の１の予測器）を必要としない点に留意されたい。
【００３７】
上述した記載は、ＶＭＡＤＤ命令の浮動小数点計算を考慮に入れて記載された。整数のＶＭＡＤＤの命令の場合には、整数のオペランドは、乗算器３０１の入力に単に提示される。ここで５３ｂの倍精度の浮動小数点の仮数計算をサポートする実施形態では、乗算器が６４ｂの整数乗算を処理するよう設計されている。したがい、乗算器の出力は１２８ビットの幅である。一実施形態では、６４ビットの整数演算の場合、Ｃの項の左側が６４個のゼロでパディングされて、最下位ビットが乗算器３０１の出力の最下位ビットと位置合わせされるようにする。つまり、加算器３０５に提供されるＣの項のオペランドは、左半分の６４ビットのゼロを有し、右半分に６４ビットのＣの入力オペランドを有する。実施形態では、１個の倍精度または６４ｂの整数および２つの単精度または２つの３２ｂの整数演算の計算をサポートしているので、３２ｂの整数について、２つのＣの項のそれぞれの上半分（各３２ｂ）をゼロでパディングして、６４ｂ幅とすることができる。３２ビットの整数演算の場合、Ｃの項に適宜パディングを行う。一実施形態では、ゼロのパディングは、Ｃの項をシフタ３０４で右にシフトさせることで効果的に達成される。さらなる実施形態では、整数演算について、整数計算のための精度に応じてシフト量を指定する目的に指数差ブロック３０３が利用される。つまりたとえば６４ビットの整数演算では、指数差ブロック３０３が、６４ビットの整数演算の場合には、シフタ３０４に、Ｃの項の６４ビットを右にシフトさせるための入力信号をシフタ３０４に送信して、３２ビットの演算の場合には、指数差ブロック３０３を、シフタ３０４にＣの項の９６ビットを右にシフトさせるための入力信号をシフタ３０４に送信するよう構成する。
【００３８】
加算器３０５は、乗算器の出力、および、シフトされて位置合わせされたＣの項の値を加算して、ＡＢ+Ｃの整数値を決定する。ＡＢ+Ｃの整数値の次元が、最終結果として許容範囲のビット幅を超えると、一実施形態では、加算器３０５の出力の上半分および下半分をシフタ３０７により最終結果として渡す。たとえば、加算器３０５の出力が１２８ビット幅であり、６４ビットの整数演算が適用される一実施形態では、命令の結果は、６４ビット幅しかないが、内部機能ユニットは１２８整数値であるとして計算する。したがい、整数演算についてＶＭＡＤＤＨおよびＶＭＡＤＤＬという２つの異なるＶＭＡＤＤ命令が存在してしまう。ＶＭＡＤＤＨは、１２８ビット加算器の出力の最上位６４ビットを表し、ＶＭＡＤＤＬは、１２８ビット加算器の出力の最下位６４ビットを表す。整数のＶＭＡＤＤ演算の場合には、積の指数ブロック３０２、先頭の１の予測器３０７、指数加算器３０８、末尾のゼロの検知器３０９、スティッキービット論理３１１、および、ラウンドアップ制御論理３１２は、些末なゼロを加算器３１０に加算する程度にしか利用できない。
【００３９】
図４Ａは、上述した機能ユニットの浮動小数点ＶＭＡＤＤ演算の一実施形態を示し、図４Ｂは、上述した機能ユニットの整数のＶＭＡＤＤＬ／Ｈ演算の一実施形態を示す。図４Ａを参照すると、オペランドＡおよびＢのそれぞれの仮数値が乗算される４０１。続いて、並列処理として、ＡＢ項およびＣ項の指数の値の間の差をとり４０２、ＡＢ項の指数とＣ項の指数の最大値を、結果の最初の指数として適用する４０３。決定されたＡＢの項およびＣの項の指数の差に基づいて、小さいほうの指数を有する項の仮数をシフトして４０４、大きいほうの指数を有する項の仮数と位置合わせする。そして、ＡＢの項およびＣの項の位置合わせされた仮数を加算する４０５。そして実質的に並列に、加算器の結果の先行する１を予測する４０６。先行する１の予測は、ＡＢ＋Ｃの合計結果との比較でチェックされる４０７。先行する１の決定に基づいて、ＡＢ＋Ｃの仮数の合計結果を、整数値と合うようにシフトして４０８、命令の指数の結果を調節する４０９。ラウンドアップは必要に応じて行われ４１０、仮数の値を指定された精度に基づいて提示する。
【００４０】
図４Ｂを参照すると、整数ＡおよびＢの項を乗算して４１１、Ｃの項をパディングして、４１２、ＡＢの積と位置合わせする。ＡＢおよびＣの整数の項を加算する４１３。命令が上位部分を特定している場合には、ＡＢ＋Ｃの上位部分を提示し、または、命令が下位部分を特定している場合には、ＡＢ＋Ｃの下位部分を提示する。ＶＭＡＤＤＨをＶＭＡＤＤＬと連続実行して、別々の場所に結果を格納することで、システムにＡＢ＋Ｃの値全体を保持させる。
【００４１】
機能ユニット３００に関する上記記載が、ベクトル乗算加算命令（ＶＭＡＤＤ）を実行するために、ベクトル機能ユニットで複数回インスタンス化されうる機能ユニットに関するものである点は繰り返し言及する価値がある。
【００４２】
図３の向上した機能ユニット３００は、ｉ）入力ベクトルＣを受け付けて、入力ベクトルＣの要素の先頭ゼロカウントにそれぞれ要素が対応している出力ベクトルを結果として提供するベクトルカウント先頭ゼロ命令（ＶＣＬＺ）、ｉｉ）入力ベクトルＣを受け付けて、入力ベクトルＣの要素の末尾ゼロカウントにそれぞれ要素が対応している出力ベクトルを結果として提供するベクトルカウント末尾ゼロ命令（ＶＣＴＺ）、ｉｉｉ）入力ベクトルＣを受け付けて、入力ベクトルＣの個々の要素の１のカウントにそれぞれ個々の要素が対応している出力ベクトルを結果として提供するベクトルカウント命令（ＶＣＮＴ）、ｉｖ）入力ベクトルＣを受け付けて、入力ベクトルＣの個々の要素のパリティステータス（偶数または奇数）にそれぞれ個々の要素が対応している出力ベクトルを結果として提供するベクトルパリティ命令（ＶＰＡＲ）のうちの任意の１以上のような、スカラー部分の実行のために利用されてもよい。
【００４３】
図５は、ＶＣＬＺ、ＶＣＴＺ，ＶＣＮＴ，およびＶＰＡＲ命令のスカラー部分を実行するための、図３に示されている論理および配線の上に更なる論理および配線を含む、向上した機能ユニット５００を示す。一実施形態では、これら命令に対して、図５の機能ユニット５００が処理するベクトルの要素を、ＡＢ＋Ｃ命令のＣオペランドを受信するデータ経路で受信する。これは１つの方法にすぎず、設計上の変形例として、ＶＣＬＺ、ＶＣＴＺ，ＶＣＮＴ，およびＶＰＡＲ命令のいずれかについてのオペランドは、ＡＢ＋Ｃ命令のＡ、Ｂ，およびＣオペランドのいずれかのデータ経路で受信されてもよい。便宜上、ＶＭＡＤＤ命令を実行するための様々な論理ブロック間の相互接続は示していない。これら相互接続が存在している点は理解されたい（図３にみられるように）。もちろん、図３および図５両方に示されるブロックのいずれかは半導体論理回路で実装可能である。
【００４４】
図５の具体例に示すように、ＶＣＬＺ、ＶＣＴＺ，ＶＣＮＴ，およびＶＰＡＲ命令のいずれかのオペランドを、Ｃオペランドのデータ経路で受信して、オペランドを位置合わせシフタ５０４で受信する（ここで、「シフタ」のいずれかをシフトレジスタとして実装可能であることに留意されたい）。命令がＶＣＬＺ、ＶＣＴＺ，ＶＣＮＴ，およびＶＰＡＲ命令のいずれかを特定している場合（ＶＭＡＤＤ命令と反対に）、位置合わせシフタは、指数差ユニット５０３からの入力を無視して、単にＣオペランドを、少なくともそれぞれの命令に適用可能な論理に提示する。つまり、ＶＣＬＺ命令の論理５０６、ＶＣＴＺ命令の論理５０９、および、ＶＣＮＴ命令の論理５３０である。加えて位置合わせシフタ５０４は、ＶＭＡＤＤ命令のＡＢの項の仮数を持ち越すデータ経路のゼロの良性の値（benign value）を提示している。
【００４５】
今のオペランドの先行するゼロカウントを提示するＶＣＬＺ命令に関しては、図５では、図３と異なり、論理５０６が先行する１および先行する０の論理回路として実装されている（（図３の、先行する１の予測論理回路３０６参照）。ここで、オペランドの先行する０の数は、オペランドの先行する１の位置に関連している点に留意されたい。具体的には、既知のビット幅のオペランドについて、先行する０の数が、オペランドのビット幅と、そのオペランドの先行する１のビット位置との間の差に等しい。ここで、先行する１の予測器３０６が、ＶＭＡＤＤ命令のＡＢおよびＣの仮数の項両方において先行する１の位置を決定して、これら２つの項の最上位（左端）の先行する１の位置にフラグを立てる。ここでは、位置合わせシフタ５０４が、ＶＬＣＺ命令のＡＢ項の０の値を表すことから、Ｃの項の先行する１の位置（ＶＬＣＺ命令のオペランド）にフラグをたてる。このことから、オペランドの先行するゼロの数を決定することができる。異なるオペランドビット長（たとえば３２ビットまたは６４ビット）も、適用可能なビット長が特定されていたり、わかっていたりすれば、簡単に処理することができる。
【００４６】
一定の状況下では最初の解が正しくない可能性があることから、図３の先行する１の予測器３０６が「予測器」となることがあることを思い出されたい。具体的には、加算器３０５の出力をチェックする必要があった。しかしＶＣＬＺ命令の場合には、加算器３０５を利用しないために、この問題は生じない。したがい、論理５０６からの「解」が正しいものとなり、チェックの必要がない。先行するゼロのカウントを最終的にフォーマット論理５１３に渡し、命令に適したフォーマットで解を提示する。一実施形態では、先行するゼロのカウント（たとえばＶＭＡＤＤ命令の先行する１のカウント）を、指数調節加算器５０８に渡し、フォーマット論理５１３へ転送させる。
【００４７】
入力オペランドの末尾のゼロのカウントを提示するＶＣＴＺ命令に関しては、オペランドＣを末尾のゼロの決定論理５０９に渡す。図３の説明で、末尾のゼロの決定論理３０９が、各オペランドで（ＡＢおよびＣ）、１の最下位（右端）ビット値を特定して、２つのオペランドのうち最下位ビット位置に、加算器３０５の出力の末尾のゼロの数を決定する基本としてフラグを立てたことを想起されたい。同じ演算は、Ｃの項（ＶＣＴＺ命令のオペランド）のみが、論理５０９が提供する最終解を制御することができるようＡＢの項をゼロに設定するという注意書きとともに、ＶＣＴＺ命令の処理にも応用できる。解は、最終的には命令に解を提示するフォーマッティング論理５１３にもルーティングされる（解は、指数調節加算器５０８等の別のブロックにより前もって処理されてもよい）。
【００４８】
ＶＣＮＴ命令に関しては、１のカウント論理５２０が、Ｃオペランドに提示される１の数をカウントして、解を最終的にフォーマッティング論理５１３にルーティングする。ＶＰＡＲ命令に関しては、パリティ論理５３０が、Ｃオペランドのパリティ値を決定して（たとえばオペランドに奇数および偶数個の１があるか？）、最終的には解が、命令の解を提示するフォーマッティング論理５１３にルーティングされる。
【００４９】
図６Ａ−図６Ｄは、図５の機能ユニット５００について上述した演算が、ベクトル演算に対して並列にＮ回実行されるときの図２の機能ユニット２００の演算を示す。ＶＣＬＺ命令については、図６Ａに示すように、オペランド／要素の入力ベクトルを受け付け６０１ａ、各オペランドの先行する０の数を決定し６０２ａ、各オペランドの最後の０カウントを有する出力ベクトルを提示する６０３ａ。ＶＣＴＺ命令については、図６Ｂに示すように、オペランド／要素の入力ベクトルを受け付け６０１ｂ、各オペランドの先行する０の数を決定し６０２ｂ、各オペランドの先行する０カウントを有する出力ベクトルを提示する６０３ｂ。ＶＣＮＴ命令については、図６Ｃに示すように、オペランド／要素の入力ベクトルを受け付け６０１ｃ、各オペランドの１の数を決定し６０２ｃ、各オペランドの１を有する出力ベクトルを提示する６０３ｃ。ＶＰＡＲ命令については、図６Ｄに示すように、オペランド／要素の入力ベクトルを受け付け６０１ｄ、各オペランドのパリティを決定し６０２ｄ、各オペランドのパリティを有する出力ベクトルを提示する６０３ｄ。
【００５０】
上述したように、この機能ユニットは、半導体プロセッサの命令実行ユニット内に実装されてもよい。
【００５１】
図７は、ＣＩＳＣ、ＲＩＳＣおよびＶＬＩＷ等の数多くの異なる種類の処理コアアーキテクチャを記述すると思われる一般的処理コア７００を示している。図７の一般的処理コア７００は、１）（たとえばキャッシュおよび／またはメモリから）命令をフェッチするフェッチユニット７０３、２）命令を復号する復号ユニット７０４、３）実行ユニット７０６に命令発行のタイミングおよび／または順序を決定するスケジュールユニット７０５（特に、スケジューラは任意である）、４）命令を実行する実行ユニット７０６（通常の命令実行ユニットには、分岐実行ユニット、整数算術実行ユニット（ＡＬＵ）、浮動小数点算術実行ユニット（ＦＰＵ）、およびメモリアクセス実行ユニットが含まれる）、および、５）命令が無事完了したことを表すリタイヤユニット７０７を含む。特に、処理コア７００は、マイクロコード７０８を利用してもしなくてもよい。
【００５２】
上述した機能ユニットは、ハードワイヤデータ経路の端から端まで表しているが、上述した処理のいずれか、またはすべてを、専用論理というよりはマイクロコードで実装することもできる。マイクロコード化されたプロセッサの場合いは、マイクロオペが通常は、プロセッサが構築されている半導体チップ内の不揮発性機械可読媒体（ＲＯＭ等）に格納されており、プロセッサ内の実行ユニットに、命令が呼び出す所望の機能を実行させる。
【００５３】
上述した機能を有しているプロセッサは、様々なコンピューティングシステムでの実装も可能である。図８は、あるコンピューティングシステム（たとえばコンピュータ）の一実施形態を示す。図８のコンピューティングシステムの例には、１）ベクトル論理減算命令を含むよう設計されてよい１以上のプロセッサ８０１、２）メモリコントロールハブ（ＭＣＨ）８０２、３）システムメモリ８０３（ＤＤＲ  ＲＡＭ、ＥＤＯ  ＲＡＭ等の様々なタイプが存在する）、４）キャッシュ８０４、５）Ｉ／Ｏコントロールハブ（ＩＣＨ）８０５、６）グラフィックプロセッサ８０６、７）ディスプレイ／スクリーン８０７（陰極管（ＣＲＴ）、フラットパネル、薄膜トランジスタ（ＴＦＴ）、液晶ディスプレイ（ＬＣＤ）、ＤＰＬ等の様々なタイプが存在する）、および、１以上のＩ／Ｏデバイス８０８が含まれる。
【００５４】
１以上のプロセッサ８０１は、命令を実行して、コンピューティングシステムが実装するソフトウェアルーチンを実行する。多くの命令が、データに対して実行される複数の種類の処理に関している。データおよび命令は両方ともシステムメモリ８０３およびキャッシュ８０４に格納される。キャッシュ８０４は通常、システムメモリ８０３より短い待ち時間を有するよう設計されている。たとえばキャッシュ８０４は、プロセッサと同じシリコンチップに集積されてよく、および／または、高速ＳＲＡＭセルで構築されてよく、一方でシステムメモリ８０３は、遅いＤＲＡＭセルで構築されていてもよい。より頻繁に利用する命令およびデータは、システムメモリ８０３ではなくキャッシュ８０４に格納するような構成とすることで、コンピューティングシステムのパフォーマンス効率全体が向上する。
【００５５】
システムメモリ８０３を、コンピューティングシステム内の他のコンポーネントに利用可能にする際には、慎重性が期されてよい。たとえばコンピューティングシステムに対して様々なインタフェースから受信されたデータ（たとえばキーボードおよびマウス、プリンタポート、ＬＡＮポート、モデムポート等経由で）、または、コンピューティングシステム（たとえばハードディスクドライブ）の内部格納要素から取得されたデータは、ソフトウェアプログラムの実装のために１以上のプロセッサ８０１による処理を受ける前に、一次的にシステムメモリ８０３に保管される場合が多い。同様に、コンピューティングシステムから、コンピューティングインタフェースのいずれかを介して外部実体に送信されたり、または、内部格納要素に格納されたりすべきであるとソフトウェアプログラムが決定するデータは、実際の送信または格納の前にシステムメモリ９０３に一次的に待ち状態に保管される。
【００５６】
ＩＣＨ８０５は、これらデータがシステムメモリ８０３と適切な対応するコンピュータシステムインタフェース（コンピューティングシステムの設計によっては内部格納デバイス）との間で適切に交換される。ＭＣＨ８０２は、プロセッサ８０１、インタフェース、内部格納要素の間で、互いに時間的に近接して行われる、競合するシステムメモリ８０３へのアクセスを管理する役割を担っている。
【００５７】
１以上のＩ／Ｏデバイス８０８は、通常のコンピューティングシステムに実装される。Ｉ／Ｏデバイスの通常の役割は、データをコンピューティングシステム（たとえばネットワーキングアダプタ）との間で、または、コンピューティングシステムの大規模の不揮発性ストレージ（たとえばハードディスクドライブ）との間で、データをやりとりすることである。ＩＣＨ８０５は、ＩＣＨ自身と、観察されたＩ／Ｏ８０８との間の双方向のポイントツーポイントリンクを有する。
【００５８】
本明細書では、本発明を具体的な実施形態に基づいて記載してきた。しかし、添付請求項に述べる本発明の広義の精神および範囲を逸脱せずとも様々な修正および変更を行うことが可能であることは明らかである。したがって明細書および図面はあくまで例示として捉えられるべきであり、限定として捉えられるべきではない。
【図１Ａ】
2013543174.tif 000003
【図１Ｂ】
2013543174.tif 000004
【図２】
2013543174.tif 000005
【図３】
2013543174.tif 000006
【図４Ａ】
2013543174.tif 000007
【図４Ｂ】
2013543174.tif 000008
【図５】
2013543174.tif 000009
【図６Ａ】
2013543174.tif 000010
【図６Ｂ】
2013543174.tif 000011
【図６Ｃ】
2013543174.tif 000012
【図６Ｄ】
2013543174.tif 000013
【図７】
2013543174.tif 000014
【図８】
2013543174.tif 000015
【国際調査報告】
2013543174.tif 000016
2013543174.tif 000017