JP3771968B2 - コンピュータ及びコンピュータ動作方法 - Google Patents
コンピュータ及びコンピュータ動作方法 Download PDFInfo
- Publication number
- JP3771968B2 JP3771968B2 JP14661996A JP14661996A JP3771968B2 JP 3771968 B2 JP3771968 B2 JP 3771968B2 JP 14661996 A JP14661996 A JP 14661996A JP 14661996 A JP14661996 A JP 14661996A JP 3771968 B2 JP3771968 B2 JP 3771968B2
- Authority
- JP
- Japan
- Prior art keywords
- data string
- instruction
- substring
- substrings
- bit
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
- 238000011017 operating method Methods 0.000 title 1
- 239000000872 buffer Substances 0.000 claims description 96
- 238000000034 method Methods 0.000 claims description 19
- 238000013500 data storage Methods 0.000 claims description 9
- 230000008859 change Effects 0.000 claims description 3
- 239000013598 vector Substances 0.000 description 30
- 239000011159 matrix material Substances 0.000 description 26
- 238000006243 chemical reaction Methods 0.000 description 14
- 230000017105 transposition Effects 0.000 description 8
- 238000010586 diagram Methods 0.000 description 6
- 230000000295 complement effect Effects 0.000 description 4
- 230000010076 replication Effects 0.000 description 4
- 230000004044 response Effects 0.000 description 3
- 230000009286 beneficial effect Effects 0.000 description 2
- 102100023882 Endoribonuclease ZC3H12A Human genes 0.000 description 1
- 101710112715 Endoribonuclease ZC3H12A Proteins 0.000 description 1
- 101000912503 Homo sapiens Tyrosine-protein kinase Fgr Proteins 0.000 description 1
- 101100120298 Rattus norvegicus Flot1 gene Proteins 0.000 description 1
- 101100412403 Rattus norvegicus Reg3b gene Proteins 0.000 description 1
- 102100026150 Tyrosine-protein kinase Fgr Human genes 0.000 description 1
- 230000035508 accumulation Effects 0.000 description 1
- 238000009825 accumulation Methods 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 230000008569 process Effects 0.000 description 1
- 230000003362 replicative effect Effects 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
- 238000000844 transformation Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/76—Arrangements for rearranging, permuting or selecting data according to predetermined rules, independently of the content of the data
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30018—Bit or string instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30025—Format conversion instructions, e.g. Floating-Point to Integer, decimal conversion
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30032—Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30036—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/30105—Register structure
- G06F9/30112—Register structure comprising data of variable length
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30145—Instruction analysis, e.g. decoding, instruction word fields
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30145—Instruction analysis, e.g. decoding, instruction word fields
- G06F9/3016—Decoding the operand specifier, e.g. specifier format
- G06F9/30167—Decoding the operand specifier, e.g. specifier format of immediate specifier, e.g. constants
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3824—Operand accessing
- G06F9/383—Operand prefetching
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Executing Machine-Instructions (AREA)
Description
【発明の属する技術分野】
本発明はデータの操作に関する。本発明は全面的という訳ではないが詳細にはコンピュータ及びコンピュータを動作させて所謂 "パックインストラクション(命令)”の実行に関連してデータ値の操作を実行する方法に関する。
【0002】
【従来の技術及び発明が解決しようとする課題】
パックインストラクションはパックオペランドで実行される。パックオペランドは複数のサブストリングからなるビットストリングを有し、各サブストリングは特定のデータ値を画定し、本明細書中では "オブジェクト”と称される。従って、オペランドは複数のオブジェクトを有する。各オペランドはレジスタ記憶装置を有し、その記憶装置は単一のアドレスによってアドレス可能な予め決められたビット容量を有し、各ビット位置は個々にアドレスできない。従って、各オペランド内で個々のオブジェクトをアドレス且つ処理することはできない。
【0003】
"パックインストラクション”によってオブジェクトを個々に識別せずにオペランド内の全てのオブジェクトに対して共通の動作が実行される。単一の共通動作はオペランドをメモリの中へ及び該メモリの外へロードすることである。
【0004】
別の "パックインストラクション”は演算インストラクションであり、このインストラクションは個々のオペランドからのオブジェクトのペアに対して同じ演算動作を並列実行し、複数の結果オブジェクトを有するパック結果オペランドを提供する。パックインストラクションの実行のために、コンピュータはパック演算ユニットを提供し、このユニットは少なくとも一つがパックされている二つのソースオペランドに動作してパック結果を生成する。
【0005】
メモリへのローディング及び記憶動作が減少し、各レジスタを埋めることによって使用可能なレジスタ容量を最大にすることができるため、単一のオペランド内のオブジェクトのセットを一緒に処理することが有益であるのは明らかである。
【0006】
しかしながら、オペランド内のオブジェクトのシーケンスはオブジェクトがメモリに記憶される順序によって予め決められているという不利益を有する。このシーケンスはメモリからオブジェクトを検索してそのオブジェクトを別個のレジスタに一時的に記憶し、異なる位置のメモリに再度書き込むことによってのみ変えることが可能である。これはマトリックス操作に特に要求される。この性質の動作はメモリへの繰り返しのアクセス及び長いインストラクションシーケンスを必要とする。インストラクションシーケンスはメモリの空間を占有する。インストラクションシーケンスの長さをできるだけ短くすることが所望される。メモリアクセスは動作を遅くするため、このアクセスを最小化することも所望される。
【0007】
【課題を解決するための手段】
本発明の一態様に従うと、コンピュータが提供されており、そのコンピュータは、プロセッサ及び離散データの複数のサブストリングを有するデータストリングを処理するためのデータ記憶回路を有し、前記サブストリングはそれぞれ同じビット長を有する第1サブストリング、最終サブストリング及び少なくとも四つの中間サブストリングを有し、前記コンピュータは少なくとも一つのデータストリング再構成インストラクションを含むインストラクションセットを有し、前記再構成インストラクション又は各再構成インストラクションがデータストリングに実行されて前記第1サブストリング及び最終サブストリングを変わらない位置で保持し、再構成データストリングにおいて少なくとも二つの中間サブストリングの位置が互いに交換される。
【0008】
従って単一の再構成インストラクションの実行によってオペランド内の二つのオブジェクトの配置をスワップすることが可能である。
【0009】
この性質を有する本明細書中で述べられるインストラクションの主なカテゴリーは "フリップ”インストラクションである。
【0010】
他に二つの画定されるインストラクションのカテゴリーがあり、それらは "ジップ”及び "アンジップ”インストラクションである。これらのインストラクションのいくつかもペアのオブジェクトのオペランド内で互いに位置をスワップする性質を有する。
【0011】
以下の記述から明らかになるように、再構成インストラクションは単一のレジスタ記憶装置の内容又は二つのレジスタ記憶装置の内容に対して実行され、二つのレジスタ記憶装置の内容がデータストリングを画定する。
【0012】
インストラクションが単一のレジスタ記憶装置の内容に関して実行されると、幾つかのインストラクションに対してデータストリングが考慮され、このインストラクションは前記データストリングの第1の半分を形成する第1ビットシーケンス及び前記データストリングの第2の半分を形成する第2ビットシーケンスによって形成された偶数のサブストリングを含む。再構成インストラクションが実行されて前記第1シーケンスから選択されたサブストリングと前記第2シーケンスから選択されたサブストリングとを交換する。或いは、各シーケンスの二つの中間サブストリングの位置を交換することもできる。第1シーケンス及び第2シーケンスは別個のレジスタ記憶装置に選択的に保持される。
【0013】
再構成インストラクションが実行されて前記再構成データストリングにおける前記第1及び第2シーケンスからサブストリングを1つ置きに配置することができる。
【0014】
再構成インストラクションが実行されてデータストリングの各半分の1つ置きのサブストリングを変わらない位置で保持し、前記第1及び最終サブストリングを変わらない位置で保持する。
【0015】
再構成インストラクションが実行されて半分のデータストリングの奇数番目のサブストリング間に他方の半分のデータストリングの奇数番目のサブストリングを挿入することができる。
【0016】
本発明はコンピュータを動作させる方法を提供し、その方法は、離散データを表しデータストリングの複数のサブストリングの一つを形成する複数のビットシーケンスをデータ記憶装置に保持し、各サブストリングはそれぞれ同じビット長を有する第1サブストリング、最終サブストリング及び少なくとも四つの中間サブストリングを含み、更に少なくとも一つのデータストリング再構成インストラクションを含むインストラクションシーケンスを実行し、再構成インストラクション又は各再構成インストラクションがデータストリングに実行されて前記第1及び最終サブストリングを変わらない位置で保持し、再構成されたデータストリングにおいて少なくとも二つの中間サブストリングの位置を交換する。
【0017】
本発明はコンピュータを動作させる方法を提供し、その方法は、離散データを表しデータストリングの複数のサブストリングの一つを形成する複数のビットシーケンスをデータ記憶装置に保持し、インストラクションシーケンスを実行し、そのインストラクションシーケンスは、データストリング内の個々のサブストリングを識別せずに前記データストリングのサブストリングに共通動作を実行する第1インストラクション、データストリング内の個々のサブストリングを識別して少なくとも一つのサブストリングを変わらない位置で保持しつつデータストリング内の少なくとも二つの中間サブストリングの位置を交換してデータストリングを再構成する第2インストラクション、更にデータストリング内の前記サブストリングを識別せずに再構成されたデータストリングのサブストリングに共通動作を実行する第3インストラクションを含む。
【0018】
この方法において、インストラクションのシーケンスが実行され、そのシーケンスにおいて、第1インストラクションはオペランド内の個々のオブジェクトを識別せず、第2インストラクションはオペランド内のオペランドを再配置し、第3インストラクションは更に共通動作を実行する。これはパック演算環境で動作を実行するのに特に有益である。
【0019】
本発明はコンピュータを提供し、コンピュータはプロセッサ、メモリ及びデータストリング内の離散データのサブストリングを形成するビットシーケンスを保持するデータ記憶回路を有し、前記コンピュータはインストラクションシーケンスを前記メモリに記憶し、そのインストラクションシーケンスはデータストリング内の前記サブストリングの識別なしで前記データストリングのサブストリングに共通動作を指定する第1インストラクション、データストリング内の個々のサブストリングを識別して少なくとも一つのサブストリングを変わらない位置で残しつつデータストリング内の少なくとも二つのサブストリングの位置を互いに交換してデータストリングを再構成する第2インストラクション、及びデータストリング内の前記サブストリングの識別なしで再構成データストリングのサブストリングに更に共通動作を実行する第3インストラクションを含む。
【0020】
本発明の再構成インストラクションはマトリックス操作を実行する場合に特に有益である。従って、本発明はコンピュータシステムを動作させてマトリックス転置動作を実行する方法を更に提供しており、その方法は、各々がマトリックスの行及び列の位置のデータ値を表す複数のサブストリングからデータストリングを形成し、本発明の再構成インストラクションを使用してデータストリングを再構成して選択された行及び列の値の交換を実行する。
【0021】
本発明の請求項1の態様では、コンピュータであって、プロセッサ及び離散データの複数のサブストリングを有するデータストリングを処理するためのデータ記憶回路を有し、前記サブストリングは同じビット長を有する第1サブストリング、最終サブストリング及び少なくとも四つの中間サブストリングを有し、前記コンピュータは少なくとも一つのデータストリング再構成インストラクションを含むインストラクションセットを有し、前記再構成インストラクション又は各再構成インストラクションがデータストリングに実行されて前記第1及び最終サブストリングを変わらない位置で保持し、再構成されたデータにおいて少なくとも二つの中間サブストリングの位置を互いに交換する、ことを含む。
【0022】
本発明の請求項2の態様では、請求項1の態様において、前記データストリングは前記データストリングの第1の半分を形成するビットの第1シーケンス及び前記データストリングの第2の半分を形成するビットの第2シーケンスによって形成された偶数のサブストリングを含み、前記再構成インストラクションが実行されて前記第1シーケンスから選択されたサブストリングと前記第2シーケンスから選択されたサブストリングを交換する、ことを含む。
【0023】
本発明の請求項3の態様では、請求項2の態様において、前記再構成インストラクションが実行されて前記再構成データストリングにおいて前記第1及び第2シーケンスからのサブストリングを1つ置きに配置する、ことを含む。
【0024】
本発明の請求項4の態様では、請求項2又は3の態様において、前記再構成インストラクションが実行されて前記データストリングの各半分の1つ置きのサブストリングを変わらない位置で保持し、変わらない位置の前記第1及び最終サブストリングを保持する。
【0025】
本発明の請求項5の態様では、請求項1乃至4の態様において、前記再構成インストラクションが実行されてデータストリングの半分の奇数番目のサブストリング間に前記データストリングの他方の半分の奇数番目のサブストリングを挿入する、ことを含む。
【0026】
本発明の請求項6の態様では、前述の請求項のいずれかの態様において、データ記憶回路は各々が単一のアドレスによってアドレス可能な予め決められたビット容量を有する複数のレジスタ記憶装置を有する。
【0027】
本発明の請求項7の態様では、請求項6の態様において、データストリングは再構成インストラクションの実行の前に前記レジスタ記憶装置の一つに保持される。
【0028】
本発明の請求項8の態様では、請求項6の態様において、データストリングは二つのレジスタ記憶装置の内容を有し再構成インストラクションの実行の前に二つのレジスタ記憶装置に保持される。
【0029】
本発明の請求項9の態様では、コンピュータであって、前記コンピュータはプロセッサ、メモリ及びデータストリング内の離散データのサブストリングを形成するビットシーケンスを保持するデータ記憶回路を有し、前記コンピュータはインストラクションシーケンスを前記メモリに記憶し、そのインストラクションシーケンスはデータストリング内の前記サブストリングの識別なしで前記データストリングのサブストリングに共通動作を指定する第1インストラクション、データストリング内の別個のサブストリングを識別し、少なくとも一つのサブストリングを変わらない位置で保持しつつデータストリング内の少なくとも二つのサブストリングの位置を互いに交換してデータストリングを再構成する第2インストラクション及びデータストリング内の前記サブストリングの識別なしで再構成されたデータストリングのサブストリングに更に共通動作を指定する第3インストラクションを含む。
【0030】
本発明の請求項10の態様では、請求項9の態様において、前記第2インストラクションは前記データストリングにおいて前記データストリングの第1及び最終サブストリングを変わらない位置で保持する。
【0031】
本発明の請求項11の態様では、コンピュータを動作させる方法であって、その方法は、離散データを表しデータストリングの複数のサブストリングの一つを形成する複数のビットシーケンスをデータ記憶装置に保持し、各サブストリングは同じビット長を有する第1サブストリング、最終サブストリング及び少なくとも4つの中間サブストリングを含み、更に少なくとも一つのデータストリング再構成インストラクションを含むインストラクションシーケンスを実行し、再構成インストラクション又は各再構成インストラクションが実行されて前記再構成データストリングの第1の半分を形成する第1ビットシーケンス及び前記再構成データストリングの第2の半分を形成する第2ビットシーケンスによって形成された偶数のサブストリングを含む再構成データストリングを生成し、前記再構成インストラクションが実行されて互いに隣接する原データストリングの第1サブストリング及び1つ置いた次のサブストリングを配置することによって第1シーケンスを生成し、互いに隣接する原データストリングの第2サブストリング及び1つ置いた次のサブストリングを配置することによって第2シーケンスを生成する。
【0032】
本発明の請求項12の態様では、コンピュータを動作させる方法であって、その方法は、各々が離散データを表しデータストリングの複数のサブストリングの一つを形成する複数のビットシーケンスをデータ記憶装置に保持し、前記サブストリングはそれぞれ同じビット長を有する第1サブストリング、最終サブストリング及び少なくとも二つの中間サブストリングを含み、更に少なくとも一つのデータストリング再構成インストラクションを含むインストラクションシーケンスを実行し、前記再構成インストラクション又は各再構成インストラクションがデータストリングに実行されて第1及び最終サブストリングを変わらない位置で保持し、再構成されたデータストリングにおいて少なくとも二つの中間サブストリングの位置を互いに交換する、ことを含む。
【0033】
本発明の請求項13の態様では、請求項12の態様において、前記データストリングは前記データストリングの第1の半分を形成する第1ビットシーケンス及び前記データストリングの第2の半分を形成する第2ビットシーケンスによって形成された偶数のサブストリングを含み、前記再構成インストラクションが実行されて前記第1シーケンスから選択されたサブストリングと前記第2シーケンスから選択されたサブストリングを交換する、ことを含む。
【0034】
本発明の請求項14の態様では、請求項13の態様において、前記再構成インストラクションが実行されて前記再構成データストリングにおいて前記第1及び第2シーケンスからのサブストリングを1つ置きに配置する、ことを含む。
【0035】
本発明の請求項15の態様では、請求項13又は14の態様において、前記再構成インストラクションが実行されて前記データストリングの各半分の1つ置きのサブストリングを変わらない位置で保持し変わらない位置の前記第1及び最終サブストリングを保持する。
【0036】
本発明の請求項16の態様では、請求項13乃至15の態様において、前記再構成インストラクションが実行されてデータストリングの半分の奇数番目のサブストリング間に前記データストリングの他方の半分からの奇数番目のサブストリングを挿入する、ことを含む。
【0037】
【発明の実施の形態】
本発明をより理解し、どのように実行されるかを示すために、添付図面を例として参照される。
【0038】
図1は本発明の第1実施の形態に従ったプロセッサを示す。プロセッサは三つの実行ユニットを有し、これらのユニットは従来通りの演算ユニット2及びメモリアクセスユニット4を有する。更に、パック演算ユニット6も有する。プロセッサはインストラクションフェッチャー8、インストラクションレジスタ10、レジスタファイル12及びインストラクションポインタ14も有し、これらは全てプロセッサのコントロールユニット16の制御によって動作する。レジスタファイルはレジスタのセットを有し、各レジスタは予め決められたビット容量を有し、単一のアドレスでアドレス可能である。レジスタ内の個々の位置にアドレスすることは出来ない。レジスタにアクセスすると、レジスタの全体的内容が考慮される。プロセッサは更に定数ユニット18及び選択ユニット20を有する。定数ユニット18及び選択ユニット20も制御ユニット16の制御によって動作する。プロセッサはメモリ22と協働して動作し、該メモリはプロセッサの動作を実行するためのインストラクション及びデータ値を保持する。データ値及びインストラクションはデータバス24を介してメモリ22へ及び該メモリ22から与えられる。データバス24はメモリデータ入力26を介してメモリ22へ及び該メモリ22からデータ値を与える。データバス24はフェッチャーデータ入力28を介してインストラクションフェッチャー8にデータを与え、メモリアクセス読み取り入力30を介してメモリアクセスユニット4にデータを与える。メモリは選択ユニット20を介してアドレス入力32でアドレスされる。選択ユニット20は制御ユニット16からのフェッチ信号34を介して制御されてフェッチャー8からアドレス36を選択するか又はメモリアクセスユニット4からアドレス38を選択する。制御ユニット16からの読み書き制御ライン40、42はメモリ22から及び該メモリ22への読み書き動作を制御する。インストラクションフェッチャー8は制御ユニット16の制御によってメモリ22からのインストラクションを以下のようにフェッチする。インストラクションが読み取られるアドレス36が選択ユニット20を介してメモリ22に与えられる。これらのインストラクションはデータバス24を介してフェッチャーデータ入力28に与えられる。インストラクションフェッチャーが次にインストラクションをフェッチすると、又は任意のイベントにおいて次のインストラクションが実行可能になると、ライン44を介してReady 信号が制御ユニット16に出される。実行されるインストラクションはインストラクションラインInst46に沿ってインストラクションレジスタ10に与えられ、実行中該レジスタに保持される。インストラクションポインタ14は、インストラクションポインタライン48を介してフェッチャー8から与えられ実行されるインストラクションのアドレスを保持する。制御ユニット16からのNewInst 信号53に応答したGet 信号47によって、インストラクションレジスタ10はInstライン46の次のインストラクションを記憶し、フェッチャー8は次のインストラクションの準備をする。NewInst 信号53によってインストラクションポインタ14は次のインストラクションのアドレスを記憶する。制御ユニット116からのブランチライン50によってフェッチャー8はブランチを実行する。
【0039】
インストラクションレジスタ10は、ソース1及ソース2レジスタアドレスをReg1及びReg2としてレジスタファイルに提供する。結果レジスタアドレスはDestとして提供される。オペコードはライン51に沿って制御ユニット16に与えられる。更に、幾つかのインストラクションは一つの又は両方のソースレジスタをエンコードする代わりに定数オペランドを与える。定数は定数ユニット18によって提供される。インストラクションのソース値は、入力E1,E2 でS1Reg 及びS2Reg 信号を適切に設定することによってソース1バス52、ソース2バス54に与えられる。ライン51のオペコードに従って制御ユニット16からのPack Ops、Mem Ops 及びALU Ops の適切な値を提供することによって正確な実行ユニットがイネーブルとなる。イネーブルになったユニットは普通結果バス56に結果Res を与える。これは普通レジスタファイル12の選択された結果レジスタDestに記憶される。これには幾つかの例外がある。
【0040】
幾つかのインストラクションはダブル長結果を提供する。これらのインストラクションは結果の第1部分を通常の方法で記憶する。連続する追加の段階では、結果の第2部分はDouble信号58を表すことによってレジスタファイル12の次のレジスタに記憶される。
【0041】
Branch50にはインストラクションポインタ14を読み取り且つ調節することが要求される。これらのBranchによってS1Reg 信号は表されないため、インストラクションポインタ14はライン60にソース1の値を提供する。ソース2の値は通常の方法で(レジスタファイル12のレジスタからか又は定数ユニット18から)与えられる。演算ユニット2はブランチ演算を実行し、その結果はレジスタファイル12ではなくNew IP入力64でフェッチャー8に記憶されて制御ユニット16からのBranchライン50によって信号が送られる。これによって新しいアドレスからフェッチャーがスタートする。
【0042】
条件ライン62の状態に応じて二つの段階で条件ブランチが実行されなければならない。第1段階では、ReadDest信号45を表すことによって別のソースとしてDestレジスタを使用する。条件が満たされると、次に通常のブランチソースオペランドが読み取られブランチが実行される。
【0043】
コールはリターンアドレスをセーブしなければならない。これは、ブランチターゲットを計算する前にデスティネーションレジスタにインストラクションポインタ値を記憶することによって行われる。
【0044】
本明細書で述べられるコンピュータは幾つかの重要な性質を有する。
【0045】
ソースオペランドは常に自然ワード長である。一つ、二つ又は三つのソースオペランドがありうる。
【0046】
結果は常に自然ワード長であるか又は自然ワード長の2倍の長さである。自然ワード長の2倍の長さである場合は、一つではなく二つのレジスタに記憶し、二つのレジスタを占有する特別の段階を踏むため動作ペナルティがある。このコンピュータでは、64ビットの自然ワード長とする。つまり、レジスタファイルの各レジスタは64ビットの予め決められた容量を有する。
【0047】
実行ユニット2、4、6はインストラクション実行間に何らの状態も保持しない。従って、連続するインストラクションは独立的である。
【0048】
アンパックインストラクション
演算ユニット2及びメモリアクセスユニット4は制御ユニット16と共に従来通りのインストラクションセットの以下のインストラクションを実行することができる。以下の定義において、レジスタは、当該技術分野の技術者には公知であるように、レジスタの中身及び記憶位置としてのレジスタ自体を示すために使用される。
mov 定数又はレジスタをレジスタに移動する。
add 2個のレジスタを加算して結果を第3レジスタ(ソースのいずれかと同様である)に記憶する。
sub 2個のレジスタを減算し結果を第3レジスタに記憶する。
load 一つのレジスタをアドレスとして使用してメモリの位置から読み取り結果を別のレジスタに記憶する。
store 一つのレジスタをアドレスとして使用し、別のレジスタの中身をアドレスによって特定された位置でメモリに記憶する。
compe 2個のレジスタ(又はレジスタと定数)が等しいかを比較する。等しい場合、1をデスティネーションレジスタに記憶し、そうでない場合はゼロを記憶する。
compge 2個のレジスタ(又はレジスタと定数)の順序性を比較する。2番目が1番目より小さくなければ、デスティネーションレジスタに1を記憶し、そうでない場合はゼロを記憶する。
jump 新しい位置へ無条件にジャンプする。
jumpz 特定のレジスタの中身がゼロである場合、新しいプログラム位置にジャンプする。
jumpnz 特定のレジスタの中身がゼロでなければ新しいプログラム位置にジャンプする。
shr 定数又は別のレジスタによってレジスタのビット毎の右シフトを実行する。符号ビットはシフトの際複製されるため、シフトは符号が付けられる。
shl 定数又は別のレジスタによってレジスタのビット毎の左シフトを実行して結果をデスティネーションレジスタに記憶する。
or/xor 2個のレジスタでビット毎のロジック動作(or/xor) を実行し、結果をデスティネーションレジスタに記憶する。
【0049】
パックユニット
図2はパック演算ユニット6のブロック図を示す。これは別個のユニットの集合として示され、各々はパック演算インストラクションの幾つかのサブセットに対して応答可能である。別の実施では異なる方法で機能を組み合わせることがあり得るかもしれない。このユニットはバイト複製ユニット70、ツイスト及びジップユニット74、明確なパック演算ユニット80及び本明細書では説明されないが他のパック演算ユニット72、76、78を含む。これらは演算ユニット70乃至80を選択的に制御するルートオペコードユニット82に応答して動作する。演算ユニット70乃至80のオペランドはソース1バス52、ソース2バス54に沿って与えられる。演算ユニットからの結果は結果バス56に与えられる。ルートオペコードユニット82へのOP入力は制御ユニット16(図1)からのPack Opsインストラクションを受ける。ソース1バス及びソース2バスに与えられるオペランドは演算ユニットのそれぞれの入力バッファにロードされ、結果は一つ又は二つの出力バッファからレジスタファイル12の一つ又は二つのディスティネーションレジスタに与えられる。
【0050】
明確なパック演算
明確なパック演算ユニット80は、二つのソースオペランドを各々が幾つかのパックオブジェクトを含むものとして扱い、二つのオペランドのオブジェクトの各ペアに動作して各ソースと同じ数のパックオブジェクトを含む結果を生成する。サポートされる動作は、加算、減算、比較、乗算、左シフト、右シフト等である。上記に説明されたように、単一のアドレスを使用してレジスタをアドレスすることによって、オペランドがアクセスされる。オペランドは個々にアドレスできない複数のオブジェクトを有する。
【0051】
図3はパック演算ユニット6の演算ユニットを例示した図において使用される記号を示す。
【0052】
図4は、パック16ビット数の加算、減算、比較及び乗算を実行することができる明確なパック演算ユニットを示す。この場合、ソース及び結果バスの幅は64ビットであるため、4つのパックオブジェクトがあり、それぞれは各バスで16ビットの長さである。
【0053】
明確なパック演算ユニット80は4つの演算ロジカルユニットALU0-ALU3 を有し、各ユニットはライン100のオペコードによって制御され、このラインは図2のルートオペコードユニット82から導出される。ソースレジスタ1SRC1から与えられた64ビットワードは4つのパックオブジェクトS1[0]-S1[3] を含む。ソースレジスタ2SRC2から与えられた64ビットワードは4つのパックオブジェクトS2[0]-S2[3] を含む。これらは第1入力バッファ90及び第2入力バッファ92に記憶される。第1演算ロジックユニットALU0は各オペランドの第1パックオブジェクトS1[0],S2[0] に動作して結果R[0]を生成する。第2乃至第4演算ロジックユニットALU1-ALU3 も同様にオブジェクトの第2ペア乃至第4ペアを使用してそれぞれ結果R[1]乃至R[3]を生成する。これらは結果バッファ102に記憶される。従って、結果ワードは4つのパックオブジェクトを含む。イネーブルユニット101はユニットのうちのいくつがアクティブであるべきかを決定し、出力バッファがその出力を表すかどうかを制御する。
【0054】
インストラクションは以下の通りに表される。
add2p 各S1[i] にその2の補数S2[i] を加えてR[i]を生成する。オーバーフローは無視される。
sub2p 各S2[i] の2の補数S1[i] から各S2[i] を減算してR[i]を生成する。オーバーフローは無視される。
cmpe2p S1[i] とS2[i] を比較する。等しい場合はR[i]を全て1に設定し、異なる場合はR[i]をゼロに設定する。
cmpge2ps S1[i] と符号が付けられたその2の補数のS2[i] を比較する。S1[i] がS2[i] より大きいかS2[i] に等しい場合はR[i]を全てゼロに設定し、S1[i] がS2[i] より小さければR[i]をゼロに設定する。
mul2ps S1[i] とその符号付き2の補数のS2[i] を乗算してR[i]をフル(32ビット)プロダクトの最下位16ビットに設定する。
【0055】
幾つかの明確なパック演算インストラクションは、普通一つのパックソースオペランド及び一つのアンパックソースオペランドを使用する。図5はそのようなユニットを示す。
【0056】
図5のパック演算ユニットの中身は、実質的には図4の中身と同様である。唯一異なる点は、第2ソースオペランドの入力バッファ92’はアンパック形態のソースオペランドを受けることである。入力バッファ92’は前のようにパック形態の第1ソースオペランドを受ける。アンパックソースオペランド及びパックソースオペランドを使用したインストラクションの一つの例は、シフトインストラクションであり、シフトの量はパックされないため、全てのパックオブジェクトに対して同じシフトが与えられる。シフト量はアンパックである必要はないが、この方がより有益である。
shl2p S1[i] をS2(パックされていない)だけ左にシフトしてR[i]を結果に設定する。
shr2ps 各S1[i] をS2(パックされていない)だけ右にシフトしてR[i]を結果に設定する。シフトの際符号ビットが複製されるため、シフトは符号付きである。
【0057】
同じセットの動作がパック8ビット及びパック32ビットオブジェクトに与えられることが予想される。このインストラクションは類似した名前を有するが、 "2”を "1”又は "4に置き換えたものである。
【0058】
バイト複製
図6はバイト複製ユニット70を示す。バイト複製ユニットは入力バッファ104を有し、このバッファは単一のオペランドを受け、このオペランドは図6では8つのパック8ビットオブジェクトS[0]乃至S[7]を含む64ビットワードとして例示される。第1マルチプレクサ106は入力として第1オブジェクトS[0]及び第2オブジェクトS[1]を受ける。第2マルチプレクサ108は入力として第1オブジェクトS[0]及び第3オブジェクトS[2]を受ける。第3マルチプレクサ110は入力として第1マルチプレクサ108の出力及び第4オブジェクトS[3]を受ける。バイト複製ユニットは出力バッファ112も有する。出力バッファは8つの8ビットオブジェクトR[0]乃至R[7]としてパックされた64ビットワードを保持する。出力バッファ112の第1及び第5の8ビット位置は入力バッファ104の第1の8ビットに直接接続する。出力バッファ112の第2及び第6の8ビット位置は、第1マルチプレクサ106の出力を受けるように接続される。出力バッファ112の第3及び第7の8ビット位置は第2マルチプレクサ108の出力を受けるように接続される。出力バッファ112の第4及び第8の8ビット位置は第3マルチプレクサ110の出力を受けるように接続される。出力バッファの8ビット結果オブジェクトはR[0]乃至R[7]と称される。タイプユニット114は図2のルートオペコードユニット82から導出されたライン118のオペコードを受ける。タイプユニットは複製されるオブジェクトのサイズを選択して3つの出力信号Do8,Do16,Do32 の内の一つを与える。これらの出力信号はORゲート120に与えられる。ORゲートの出力によって出力バッファ112がイネーブルとなる。Do16及びDo32信号は第2ORゲート122への入力であり、その出力は第1マルチプレクサ106を制御する。Do32信号自体が第2マルチプレクサ108及び第3マルチプレクサ110を制御する。従って、バイト複製ユニットはソースオペランドの最下位オブジェクト(8、16、又は32ビット)を使用してそれを8、4又は2倍に複製して出力バッファ112に保持されるパック64ビット結果を生成する。動作は8ビットピースに分解され、S[i]及びR[i]の各々は8ビットである。幾つかのロジックが異なる複製において共有される。タイプユニット114は16ビットシーケンス又は32ビットシーケンスのどちらを複製するかを決定する。Do16又はDo32のどちらの信号も表されない場合、8ビットシーケンスが複製される。
【0059】
バイト複製ユニットによってサポートされる三つのインストラクションは以下の通りである。 replp S[0]をR[0]乃至R[7]のそれぞれに複製する。
rep2p S[0]及びS[1]をi が0から3までのR[2i] 及びR[2i+1] に複製して16ビットを複製する。
rep4p S[0]及びS[3]をi が0から1までのR[4i] からR[4i+3] に複製して32ビットを複製する。
【0060】
ツイスト及びジップ
ツイスト及びジップユニット74によって実行される再構成動作には三つの種類がある。それらは以下の通りである。
shuffle (zip) オブジェクトストリングのペアからなるソースストリングを使用してオブジェクトストリングのペアからオブジェクトをインターリーブしてソースストリングと同じ長さの単一のストリングを生成する。これはパーフェクトシャッフルである。
Sort (unzip) オブジェクトペアを含むソースストリングを使用してこのペアをデインターリーブしてその結果デインターリーブされたペアの連結からなるストリングを生成する。これはパーフェクトソートである。
Transpose (flip) 4オブジェクトを含むソースストリングを使用し、適切なソースオブジェクトを交換することによって結果ストリングを生成し、マトリックス転置のセットを実行する。
【0061】
これらの動作のうちの任意の一つは他の二つの動作の適切な組み合わせによって構成されることができる。
【0062】
これら全ての変換に対してソースストリングは複数のベクトルからなり、各ベクトルは同じサイズのオブジェクトを同じ数だけ含む。これらの変換を挙げるためには3つの数字が必要である。
number of vectors ソース及び結果ストリングのベクトル数を特定する。
size of vector 各ベクトルのオブジェクトの数を特定する。
size of object 各オブジェクトのビット数を特定する。
【0063】
インストラクションネームは変換タイプ(zip, unzip, flip) からなり、引き続きベクトルの数 "n"が付き、各ベクトルのサイズ "v"が付き、8ビットバイトの数として表されるオブジェクトサイズ "p"が付く。従って、インストラクションzip4n2vlp では、zip はインストラクションタイプを示し、4n2vlpはオペランドフォーマットを特定する。この場合、zip 動作は4ベクトルで実行され、それぞれは2つの1バイトオブジェクトである。この特定の動作を行うためには、各zip は2つのベクトルを要求するため、2つの別個のジップが実行される。
【0064】
ソース及び結果ストリングが全体で64又は128ビットである場合、図7に示されるような9個の固有ジップ及びアンジップ変換がある。
【0065】
このジップ及びアンジップのセットはこの実施によってサポートされる64及び128ビットストリングに対しては完全である。より長いストリングのジップ及びアンジップは従来のmoveインストラクションと協働したこれらのインストラクションのシーケンスによって実行することができる。
【0066】
64及び128ビットストリングに適切なflipは図8に示されている。これらのうちの幾つかは図7のジップ及びアンジップの幾つかと同様である。
【0067】
ジップ及びアンジップと同様に、このフリップのセットも64及び128ビットストリングに対して完全である。より長いストリングのフリップはフリップのシーケンス及び従来のmoveインストラクションによって実行可能である。
【0068】
図9は64ビットジップ及びアンジップを処理するツイスト及びジップユニット74の部分を示す。図9に示されるツイスト及びジップユニットのジップ及びアンジップ部分は、S[0]からS[7]の8つのパック8ビットソースオブジェクトを含む入力バッファ130を含む。結果バッファ132はR[0]からR[7]の8個のパック8ビット結果オブジェクトを保持するために提供される。結果R[0]は第1ソースオブジェクトS[0]に直接接続する。第2ソースオブジェクトS[1]は第1入力として第1マルチプレクサ134、第2マルチプレクサ136及び第3マルチプレクサ138に与えられる。第1、第2及び第3マルチプレクサ134、136、138は、第2入力として第5ソースオブジェクトS[4]を受ける。第4マルチプレクサ140は一つの入力として第3ソースオブジェクトS[2]及び別の入力として第1マルチプレクサ134の出力を受ける。第4マルチプレクサの出力は第2結果オブジェクトR[1]に提供される。第2マルチプレクサ136の出力は第3結果オブジェクトR[2]を提供される。第5マルチプレクサ142は入力として第3マルチプレクサ138の出力及び第6ソースオブジェクトS[5]を受ける。第5マルチプレクサ142の出力は第4結果オブジェクトR[3]に与えられる。第6マルチプレクサ144は一つの入力として第4ソースオブジェクトS[3]及び別の入力として第7ソースオブジェクトS[6]を受ける。第6マルチプレクサの出力は、第7マルチプレクサ146の一つの入力として与えられ、該マルチプレクサ146の別の入力は第3ソースオブジェクトS[2]である。第7マルチプレクサ146の出力は第5結果オブジェクトR[4]に与えられる。第8マルチプレクサ150は一つの入力として第4ソースオブジェクトS[3]を受け、別の入力として第7ソースオブジェクトS[6]を受けて、出力を第6結果オブジェクトR[5]に与える。第9マルチプレクサ152は一つの入力として第4ソースオブジェクトS[3]を受け、別の入力として第7ソースオブジェクトS[6]を受ける。第9マルチプレクサ152の出力は第10マルチプレクサ154に与えられ、該第10マルチプレクサは第2入力として第6ソースオブジェクトS[5]を受ける。第10マルチプレクサ154の出力は第7結果オブジェクトR[6]を提供する。第8ソースオブジェクトS7は第8結果オブジェクトR7を提供するように該結果オブジェクトに直接接続する。タイプユニット162は図2のルートオペコードユニット82から導出されたライン160のオペコードを受ける。タイプユニット162はツイスト及びジップユニット74のジップ及びアンジップ部分で実行されるインストラクションを定める。この目的のために、該タイプユニットは4つの出力信号zip2n2v2p 、unzip2n4vlp 、zip2n4vlp 及びzip4n2vlp のうちの1つを与える。zip2n4vlp 及びzip4n2vlp 出力は第1ORゲート164に与えられ、その出力は第8マルチプレクサ150を制御する。出力信号zip4n2vlp は第2ORゲート166にも与えられ、このゲート166はunzip2n4vlp の出力を受ける。第2ORゲートの出力は第4、第5、第7及び第10マルチプレクサを制御する。信号unzip2n4vlp は第3及び第6マルチプレクサを制御する。出力zip2n2v2p は第1及び第9マルチプレクサを制御する。タイプユニット162の4つ全ての出力は第3ORゲート168に与えられ、そのゲート168は出力バッファ132がイネーブルかどうかを決定する。図9においてロジックパスの幾つかは共有されるため、10個の8ビットマルチプレクサしか必要としない。ソース及び結果はパック8ビットオブジェクトとして示される。しかしながら、ある一つのインストラクションではこの実施はパック16ビットオブジェクトのみに画定され、これはソース及び結果8ビットオブジェクトのペアを使用することによって達成される。
【0069】
64ビットジップ及びアンジップは以下の通りである。
zip4n2v1p 2つの8ビットオブジェクトからなるベクトルをジップ(インターリーブ)する。これは同じベクトルのアンジップ(デインターリーブ)と同様である。
zip2n4v1p 4つの8ビットオブジェクトからなるベクトルをジップ(インターリーブ)する。
unzip1n4v1p 4つの8ビットオブジェクトからなるベクトルをアンジップ(デインターリーブ)する。
zip2n2v2p 2つの16ビットオブジェクトからなるベクトルをジップ(インターリーブ)する。これは同じオブジェクトのアンジップ(デインターリーブ)と同様である。
【0070】
図10はダブル長8ビットジップ及びアンジップインストラクションを実行するツイスト及びジップユニットの部分を示す。このツイスト及びジップユニットの部分は第1及び第2入力バッファ170、172を有し、各バッファは64ビットワードを保持する。入力バッファ170、172に保持される64ビットワードは、S1[0] からS2[7] までラベル付けされた16個のオブジェクトを有する連続データストリングとしてみなすことができる。第1及び第2出力バッファ174、176があり、それぞれ64ビットワードを保持する。結果はライン178の出力である。6個の切り換えスイッチ180乃至190があり、それぞれ2つの入力及び2つの出力を有する。図10に例示されるように、切り換えスイッチ180乃至190の入力は第1及び第2入力バッファ170、172の位置に接続する。図10に例示されるように切り換えスイッチ180乃至190の出力は第1及び第2出力バッファ174、176の位置に接続する。図7に例示されたようなzip2n8v1p 動作又はunzip2n8v1p 動作のいずれかが実施されるように接続される。図10から分かるように、第1入力バッファS1[0] の第1位置及び第2入力バッファS2[7] の最終位置はそれぞれ出力バッファの第1位置R[0]及び第2出力バッファの最終位置R[15] に接続する。このようにして、第1及び最終オブジェクトのデータストリングはジップ及びアンジップインストラクションに従ったデータストリングの再構成後も変化しないままである。タイプユニット192は図2のルートオペコードユニット82から導出されたライン160のオペコードを受ける。タイプユニット192は、再構成インストラクションがジップインストラクションであるか又はアンジップインストラクションであるか、即ち、zip2n8v1p であるか又はunzip2n8v1p であるかに応じて2つの信号を出力する。これらの出力信号はORゲート196に与えられる。unzip2n8v1p 信号は切り換えスイッチ180乃至190を制御する。ORゲート196の出力は2つのAND ゲート198、200に与えられる。AND ゲート198はDouble信号58も受ける。AND ゲート200は逆のDouble信号58を受ける。AND ゲート200は第1出力バッファ174を制御し、AND ゲート198は第2出力バッファ176を制御する。2つの出力バッファはDouble信号によって制御され、該Double信号によって第1出力バッファ174はその中身をライン178に沿って第1デスティネーションレジスタに与え、次に状態を変化させ、第2出力バッファ176はその中身をライン178に沿ってレジスタファイル12の連続レジスタに与える。
【0071】
処理される2つのインストラクションは以下の通りである。
zip2n8v1p 8個の8ビットオブジェクトからなるベクトルをジップ(インターリーブ)する。
unzip2n8v1p 8個の8ビットオブジェクトからなるベクトルをアンジップ(デインターリーブ)する。
【0072】
図11はダブル長16ビット及び32ビットジップ及びアンジップインストラクションを実行するツイスト及びジップユニットの部分を示す。この部分は第1及び第2入力バッファ202、204を有し、それぞれは4つのパック形態の16ビットオブジェクトを画定する64ビットワードを保持する。2つのオブジェクトは32ビットジップインストラクションを使用することによって一緒に処理することができる。第1及び第2出力バッファ206及び208はそれぞれ4つのパック16ビットオブジェクトR[0]乃至R[3]、R[4]乃至R[7]を画定する64ビットワードを保持する。結果はライン210に与えられる。Double信号58は出力バッファがその出力を表すシーケンスを制御する。ツイスト及びジップユニットの他の部分と同様に、第1オブジェクトの第1入力バッファは第1出力バッファの第1オブジェクト位置に直接接続する。同様に、第2入力バッファ204の最終ソースオブジェクト位置は第2出力バッファ208の最終結果オブジェクト位置R[7]に直接接続する。
【0073】
第1マルチプレクサ210は第1入力としてソースオブジェクトS1[1] 及び第2入力としてソースオブジェクトS1[2] を受ける。第2マルチプレクサ212は第1入力として第2ソースオブジェクトS1[1] 及び第2入力として第3ソースオブジェクトS1[2] を受ける。第3マルチプレクサ214は第1入力として第2ソースオブジェクトS1[1] 及び第2入力として第2入力バッファの第1ソースオブジェクトS2[0] を受ける。第4マルチプレクサ216は第1入力としてソースオブジェクトS1[3] 及び第2入力としてソースオブジェクトS2[2] を受ける。第5マルチプレクサ218は第1入力としてソースオブジェクトS2[1] 及び第2入力としてソースオブジェクトS2[2] を受ける。第6マルチプレクサ220は第1入力としてソースオブジェクトS2[1] 及び第2入力としてソースオブジェクトS2[2] を受ける。第1マルチプレクサ210の出力は第2出力バッファ208の第1結果オブジェクトR[4]に与えられる。第2マルチプレクサ212の出力は第7マルチプレクサ222に与えられ、この第7マルチプレクサは第2出力としてソースオブジェクトS2[0] を受ける。第2マルチプレクサ222の出力は第1出力バッファ206の第2結果オブジェクトR[1]に与えられる。第3マルチプレクサ214の出力は第1出力バッファ206の第3結果オブジェクトR[2]に与えられる。第4マルチプレクサ216の出力は第2出力バッファ208の第2結果オブジェクトR[5]に与えられる。第5マルチプレクサ218の出力は第8マルチプレクサ224の第1出力として与えられ、この第8マルチプレクサは第2入力としてソースオブジェクトS1[3] を受ける。第8マルチプレクサ224の出力は第2出力バッファ208の第3結果オブジェクトR[6]に与えられる。第6マルチプレクサ220の出力は第1出力バッファ206の第4結果オブジェクトR[3]に与えられる。タイプユニット226はライン160で図2のルートオペコードユニット82から導出されたライン160のオペコードを受ける。タイプユニットはツイスト及びジップユニットによって実行される再構成動作のタイプに応じて3つの出力信号を生成する。これらの信号は、zip2n4vp2p、unzip2n4v2p 及びzip2n2v4p である。これらの信号はORゲート228に与えられ、その出力は二つのAND ゲート230及び232に与えられる。AND ゲート230はDouble信号も受ける。AND ゲート232はDouble信号の逆転バージョンを受ける。AND ゲート230、232の出力は出力バッファ206、208の動作を制御する。
【0074】
zip2n4v2p 信号は第7及び第8マルチプレクサ222、224を制御する。unzip2n4v2p 信号は第1、第2、第3、第4、第5及び第6マルチプレクサを制御する。
【0075】
ツイスト及びジップユニットのこの部分によって処理される3つのインストラクションは以下の通りである。
zip2n4v2p 4個の16ビットオブジェクトからなるベクトルをジップ(インターリーブ)する。
unzip2n4v2p 4個の16ビットオブジェクトからなるベクトルをアンジップ(デインターリーブ)する。
zip2n2v4p 2個の32ビットオブジェクトからなるベクトルをジップ(インターリーブ)する。同じベクトルのアンジップ(デインターリーブ)と同様である。
【0076】
図12は8ビットflipを実行するツイスト及びジップユニットの部分を示す。これはシングル長及びダブル長の両方の動作を行う。図12において、2つの入力バッファ234及び236があり、それぞれは8ビットオブジェクトとしてパックされた64ビットワードを含む。第1及び第2入力バッファ234、236の隣接ペアはそれぞれマルチプレクサ238−252に与えられる。マルチプレクサ254−264の第2セットは以下のように配置される。第2セットの第1マルチプレクサ254は第1入力として第1出力バッファ234の第2ソースオブジェクトを受け、第2入力として第1セットの第3マルチプレクサ242の出力を受ける。第2セットの第2マルチプレクサ256は第1入力として第1出力バッファ234の第5ソースオブジェクトを受け、第2入力として第1セットの第5マルチプレクサ246の出力を受ける。第2セットの第3マルチプレクサ258は第1入力として第1出力バッファ234の第4ソースオブジェクトを受け、第2入力として第1セットの第4マルチプレクサ244の出力を受ける。第2セットの第4マルチプレクサ260は第1入力として第1出力バッファ234の第7ソースオブジェクトを受け、第2入力として第1セットの第6マルチプレクサの出力を受ける。第2セットの第5マルチプレクサ262は第1入力として第1出力バッファの第6ソースオブジェクトを受け、第2入力として第1セットの第7マルチプレクサ250の出力を受ける。第2セットの第6マルチプレクサ264は第1入力として第1出力バッファ234の第8ソースオブジェクトを受け、第2入力として第1セットの第8マルチプレクサ252の出力を受ける。ツイスト及びジップユニットの8ビットフリップ部分も出力バッファ266を含み、8ビットパックオブジェクトとして64ビットワードを収容する。第1結果オブジェクトは第1セットの第1マルチプレクサ238の出力として与えられる。第2ソースオブジェクトは第2セットの第2マルチプレクサ256の出力として与えられる。結果の第3オブジェクトは第1セットの第2マルチプレクサ240の出力として与えられる。結果の第4オブジェクトは第2セットの第4マルチプレクサ260の出力として与えられる。結果の第5オブジェクトは第2セットの第1マルチプレクサ254の出力として与えられる。結果の第6オブジェクトは第2セットの第5マルチプレクサ262の出力として与えられる。結果の第7オブジェクトは第2セットの第3マルチプレクサ258の出力として与えられる。結果の第8オブジェクトは第2セットの第6マルチプレクサ264の出力として与えられる。タイプユニット268はライン160でオペコードを受け、実行される再構成動作のタイプに応じて2つの信号を生成する。これらの信号はflip2n4v1p及びflip2n8v1pである。これらの信号はORゲート270に与えられ、その出力は出力バッファ266を制御する。Double信号58は第1セットのマルチプレクサ238−252を制御する。Double信号はダブル長インストラクションの上部分に対してのみアクティブである。第2セットのマルチプレクサ254−264はflip2n8v1p信号によって制御される。
【0077】
図12では単一の64ビット出力バッファのみが例示されている。flip2n4v1pインストラクションが実行されているとき、バッファは図9に示される単一の出力バッファに対応する。2n8v1pflipがインストラクションが実行されているとき、出力バッファは最初に結果のRESULT LOW部分を保持してその部分を与え、Double信号58が表されると結果のRESULT HIGH 部分を保持し、その部分を与える。
【0078】
ユニットによって処理される2つのインストラクションは以下の通りである。
flip2n4v1p 4個の8ビットオブジェクトからなるベクトルをフリップする。
flip2n8v1p 8個の8ビットオブジェクトからなるベクトルをフリップする。
【0079】
図13は16ビット及び32ビットフリップを実行するツイスト及びジップユニットの部分を示す。8ビットフリップユニットと同様に、この部分もシングル長及びダブル長の両方のフリップを実行する。32ビットオブジェクトは16ビットオブジェクトのペアとして処理される。
【0080】
ユニットによって処理される3つのインストラクションは以下の通りである。
flip2n2v2p 2個の16ビットオブジェクトからなるベクトルをフリップする。
flip2n4v2p 4個の16ビットオブジェクトからなるベクトルをフリップする。
flip2n2v4p 2個の32ビットオブジェクトからなるベクトルをフリップする。
【0081】
これら3つのフリップのうちの2つはジップのうちの2つと同様である。従って、両方のインストラクションセットがある場合、1つのハードウェアのセットのみを実施すればよい。
【0082】
このツイスト及びジップユニットの部分は第1及び第2入力バッファ272、274を有し、それぞれのバッファは第1入力バッファではS1[0] からS1[3] まで、第2入力バッファではS2[0] からS2[3] までの4つの16ビットオブジェクトとしてパックされた64ビットワードを収容する。マルチプレクサ276乃至290の第1セットは第1及び第2入力バッファ272、274からの入力を以下のように受ける。第1セットの第1マルチプレクサ276は第1入力として第1ソースオブジェクトS1[0] を受け、第2入力として第3ソースオブジェクトS1[2] を受ける。第1セットの第2マルチプレクサ278は第1入力として第1ソースオブジェクトS1[0] を受け、第2入力として第2ソースオブジェクトS1[1] を受ける。第1セットの第3マルチプレクサ280は第1入力として第2ソースオブジェクトS1[1] を受け、第2入力として第4ソースオブジェクトS1[3] を受ける。第1セットの第4マルチプレクサ282は第1入力として第3ソースオブジェクトS1[2] を受け、第2入力として第4ソースオブジェクトS1[3] を受ける。第1セットの第5マルチプレクサ284は第1入力として第2バッファ274の第1ソースオブジェクトS2[0] を受け、第2入力として第3ソースオブジェクトS2[2] を受ける。第1セットの第6マルチプレクサ286は第1入力として第2バッファ274の第1ソースオブジェクトS2[0] を受け、第2入力として第2ソースオブジェクトS2[1] を受ける。第7マルチプレクサ288は第1入力として第2ソースオブジェクトS2[1] を受け、第2入力として第4ソースオブジェクトS2[3] を受ける。第8マルチプレクサ290は第1入力として第2入力バッファ274の第3ソースオブジェクトS2[2] を受け、第2入力として第4ソースオブジェクトS2[3] を受ける。マルチプレクサ292乃至298の第2セットは以下のように入力を受ける。第2セットの第1マルチプレクサ292は、第1セットの第1及び第2マルチプレクサ276、278の出力を入力として受ける。第2セットの第2マルチプレクサ294は第1セットの第3及び第6マルチプレクサ280、286からの出力を入力として受ける。第2セットの第3マルチプレクサ296は第1セットの第4及び第5マルチプレクサ282、284の出力を入力として受ける。第2セットの第4マルチプレクサ298は第1セットの第7及び第8マルチプレクサ288、290の出力を入力として受ける。第3セットのマルチプレクサ300−304は以下のように入力を受ける。第3セットの第1マルチプレクサ300は第1入力バッファ272の第3ソースオブジェクトS1[2] 及び第2セットの第2マルチプレクサ294の出力を入力として受ける。第3セットの第2マルチプレクサ302は第1入力バッファ272の第2ソースオブジェクトS1[1] 及び第2セットの第3マルチプレクサ296の出力を入力として受ける。第3セットの第3マルチプレクサ304は第1入力バッファ272の第4ソースオブジェクトS1[3] 及び第2セットの第4マルチプレクサ298の出力を入力として受ける。
【0083】
ツイスト及びジップユニットのこの部分も4つの16ビットオブジェクトとしてパックされた64ビットワードを収容することができる出力バッファ306を含む。第1結果オブジェクトR[0]は第2セットの第1マルチプレクサ292から導出される。第2結果オブジェクトR[1]乃至第3結果オブジェクトR[3]は第3セットのマルチプレクサ300−304の出力から導出される。
【0084】
タイプユニット306はライン160で図2のルートオペコードユニット82からのオペコードを受ける。タイプユニットはユニットのこの部分によって実行される再構成インストラクションのタイプに応じて3つの信号を生成する。この信号は、flip2n2v2p、flip2n4v2p及びflip2n2v4pである。これらの信号はORゲート308に与えられ、このゲートの出力は出力バッファ306を制御する。Double信号58は第1セットのマルチプレクサ276乃至290を制御する。flip2n2v4p信号は第2セットのマルチプレクサを制御する。flip2n2v2p信号は第3セットのマルチプレクサを制御する。
【0085】
ユニットのこの部分がflip2n2v2pユニットを実行するために使用される場合、出力バッファはそのインストラクションのために図9に示された単一の出力バッファである。flip2n4v2p又はflip2n2v4pインストラクションを実行するためにユニットのこの部分が使用されると、出力バッファは図12を参照して上記に述べられたように動作する。
【0086】
バイト複製及びバイトツイスト及びジップインストラクションの使用例が与えられる。以下の例において、アセンブリ表記はレジスタオペランドRn(nは任意の数)を示す。定数オペランドはnである。ダブル長結果を生成するインストラクションはレジスタのペアの一番目のみを特定する。次に結果の上部分が次のレジスタに書き込まれる。ラベルは ":" が続くアルファベット及び数字からなるストリングによって示される。
【0087】
一つの有益な動作はマトリックス転置である。
【0088】
マトリックス転置
ジップ、アンジップ又はフリップはマトリックスを転置するために使用される。単一のインストラクションだけで転置できないマトリックスは、より長いサブユニットに動作する一連のステップで処理することができる。
【0089】
マトリックスは、左上からスタートして順に各行に沿って右下まで進むことで表される。この行順序付け表示は機能ユニットの図で使用された表示と逆である。
【0090】
フリップの使用
例えば、フリップを使用した16ビットオブジェクトの4×4マトリックスの転置において、4つの4分割部分(それぞれは2×2の16ビットオブジェクトである)は個々に転置され、4×4マトリックスの右上及び左下の4分割部分はスワッピングされる。これは、マトリックスを32ビットオブジェクトの2つのインターリーブされた2×2マトリックスとして処理することによって実行することができる。図14はこれを実行するための動作を示す。
【0091】
転置を実行するためのアセンブリコードは外1に示される。
【0092】
【外1】
【0093】
ジップの使用
ジップ(パーフェクトシャッフル)を使用して同じマトリックスを転置するためには、16ビットオブジェクト、次に16ビットオブジェクトのペア、更に4つの16ビットオブジェクトについての一連のシャッフルが要求される。
【0094】
これを実行するためのアセンブリコードは外2に示される。
【0095】
【外2】
【0096】
アンジップの使用
アンジップ(パーフェクトソート)を使用して同じマトリックスを転置するためには、16ビットオブジェクトのソートが必要である。図16はこれを実行するための動作を示す。
【0097】
これを実行するためのアセンブリコードは外3に示される。
【0098】
【外3】
【0099】
外3はアンジップを使用したバイトの4×4マトリックスの転置を示す。
【0100】
マトリックス乗算
マトリックス乗算は乗算累積のセットからなる。最も一般的なケースはベクトル(1次元)とマトリックス(2次元)を乗算して別のベクトルを生成することである。
【0101】
[V] 及び[M] が16ビットデータを含むならば、演算を行うためにパック16ビット乗算を使用することができる。
【0102】
乗算を行うための一つの方法は、バイト複製インストラクションを使用してベクトルの各要素を複製し、複製された各要素とマトリックスの正確な行のパック乗算を実行し、部分積のパック加算を行うことである。マトリックス転置の必要はないことに注意すべきである。これを実行するためのコードシーケンスは外4に示される。
【0103】
【外4】
【0104】
ベクトル要素の複製の別の方法はジップを使用することである。図17はこれを実行するための動作を示す。
【0105】
マトリックス乗算のために行うコードシーケンスは外5に示される。
【0106】
【外5】
【0107】
データフォーマット変換
異なるフォーマット間の変換はジップ及びアンジップによって実行されうる。より大きなフォーマットへの符号付き変換には、符号ビットを複製することが必要であり、これは符号付き右シフトによって実行される。表1は種々の符号なしフォーマット間の変換に要求されるインストラクションを示し、表2は符号付き変換を示す。
【0108】
【表1】
【0109】
【表2】
【0110】
ストリングサーチ
ストリングが特定のキャラクタを含んでいるかを知る必要があるときにストリングサーチが使用される。サーチキャラクタを複製し、パック比較を実行することによって、幾つかのキャラクタが同時にテストされることができる。このサーチのコードシーケンスは外6に示される。
【0111】
【外6】
【0112】
複製
1、2又は4バイトオブジェクトの複製を実行するためにジップ、アンジップ又はフリップを使用することが可能である。外7、外8及び外9はそれぞれどのようにして最右のバイトを複製するかを示す。
【0113】
【外7】
【0114】
【外8】
【0115】
【外9】
【0116】
RGBαと平面ビデオフォーマットとの変換
グラフィックス環境で使用するためには、RGBα(又はパック)フォーマットは、単一のピクセルのレッド、グリーン、ブルー及びアルファカラー情報を含む4つの連続バイトである。従って、各ピクセルは4つの連続バイトを含む。平面フォーマットはレッド、グリーン、ブルー及びアルファカラー情報の全てがメモリの別個の領域に記憶されている場合である。従って全ての同じカラー情報は連続的であり、各ピクセルはメモリの4つの非連続バイトに対応する。
【0117】
RGBαフォーマットと平面フォーマットの変換はジップ又はアンジップによって実行される。ジップを使用したRGBαから平面への変換シーケンスは外10に示され、アンジップを使用した変換シーケンスは外11に示される。
【0118】
【外10】
【0119】
【外11】
【0120】
ジップを使用した平面からRGBαへの変換シーケンスは外12に示され、アンジップを使用した変換シーケンスは外13に示される。
【0121】
【外12】
【0122】
【外13】
【0123】
フリップを使用して変換を実行することも可能であるが、ピクセルがインターリーブするため望ましくない。
【0124】
回転
ジップ又はアンジップによってマトリックス回転を実行することができる。このためのシーケンスは外14及び外15に示される。グラフィックオブジェクトの回転をサポートするために類似したシーケンスを使用することもできる。
【0125】
【外14】
【0126】
【外15】
【図面の簡単な説明】
【図1】コンピュータのプロセッサ及びメモリのブロック図である。
【図2】パック演算ユニットのブロック図である。
【図3】図面において使用される記号の意味を示す。
【図4】2つのパックソースオペランドに動作する明確なパック演算ユニットのブロック図である。
【図5】パックソースオペランド及びアンパックソースオペランドに動作する明確な演算パックユニットのブロック図である。
【図6】バイト複製ユニットを示す。
【図7】ジップ及びアンジップ再構成動作を示す。
【図8】フリップ再構成動作を示す。
【図9】64ビットジップ及びアンジップを実行するツイスト及びジップユニットの部分を示す。
【図10】ダブル長8ビットジップ及びアンジップを実行するツイスト及びジップユニットの部分を示す。
【図11】ダブル長16ビット及び32ビットジップ 及びアンジップを実行するツイスト及びジップユニットの部分を示す。
【図12】8ビットフリップを実行するツイスト及びジップユニットの部分を示す。
【図13】16ビット及び32ビットフリップを実行するツイスト及びジップユニットの部分を示す。
【図14】フリップインストラクションを使用したマトリックス転置を示す。
【図15】ジップインストラクションを使用したマトリックス転置を示す。
【図16】アンジップインストラクションを使用したマトリックス転置を示す。
【図17】ジップインストラクションを使用して複製がどのように実行されるかを示す。
Claims (16)
- プロセッサと、
離散データの複数のサブストリングを有するデータストリングを処理するためのパック演算ユニットと、
を有するコンピュータであって、
前記パック演算ユニットは、入力バッファと、出力バッファと、を有し、
前記データストリングは、
同じビット長を有する第1サブストリング、
最終サブストリングおよび
少なくとも二つの中間サブストリング
を有し、
前記データストリングはオペランドを表し、
前記第1サブストリング、最終サブストリングおよび中間サブストリングは該オペランドのオブジェクトを表し、
前記コンピュータは少なくとも一つのデータストリング再構成インストラクションを含むインストラクションセットを有し、
少なくとも一つの前記再構成インストラクションのオブジェクトの各々のビット数を定義し、
前記プロセッサは、
前記入力バッファにデータストリングをロードし、
前記再構成インストラクションの指示にもとづき、前記入力バッファのサブストリングを対応する出力バッファの位置に出力し、または、該入力バッファの少なくとも二つの中間サブストリングの位置を互いに交換して、対応する出力バッファの位置に出力する、
コンピュータ。 - 前記データストリングは偶数のサブストリングを含み、
前記データストリングの第1の半分を形成する前記サブストリングは第1シーケンスを形成し、
前記データストリングの第2の半分を形成する前記サブストリングは第2シーケンスを形成し、
前記プロセッサは、前記再構成インストラクションの指示にもとづいて、前記第1シーケンスから選択されたサブストリングと前記第2シーケンスから選択されたサブストリングとの位置を交換して、対応する出力バッファの位置に出力する、
請求項1に記載のコンピュータ。 - 前記プロセッサは、前記再構成インストラクションの指示にもとづいて、前記第1および第2シーケンスのサブストリングを1つ置きに配置して、対応する出力バッファの位置に出力する、請求項2に記載のコンピュータ。
- 前記プロセッサは、前記再構成インストラクションの指示にもとづいて、位置を変更しないで、前記第1および最終サブストリングを対応する出力バッファの位置に出力し、残りのサブストリングを1つ置きに配置して、対応する出力バッファの位置に出力する、請求項2または3に記載のコンピュータ。
- 前記プロセッサは、前記再構成インストラクションの指示にもとづいて、前記データストリングの半分の奇数番目のサブストリング間に該データストリングの他方の半分の奇数番目のサブストリングを挿入して、対応する出力バッファの位置に出力する、請求項1〜4のいずれか一項に記載のコンピュータ。
- 前記入力バッファおよび出力バッファは各々が単一のアドレスによってアドレス可能な予め決められたビット容量を有する複数のレジスタ記憶装置である、請求項1〜5のいずれか一項に記載のコンピュータ。
- データストリングは再構成インストラクションの実行の前に前記レジスタ記憶装置の一つに保持される、請求項6に記載のコンピュータ。
- データストリングは二つのレジスタ記憶装置の内容を有し、再構成インストラクションの実行の前に二つのレジスタ記憶装置に保持される、請求項6に記載のコンピュータ。
- プロセッサと、
プログラムメモリと、
実行ユニットと、
複数のレジスタ記憶装置と、
を有するコンピュータであって、
前記データ記憶回路の各々は、データストリング内の離散データのサブストリングを形成するビットシーケンスを保持する、単一のアドレスによって指定することができる、所定のビット容量を有し、
前記データストリングはオペランドを表し、前記サブストリングは該オペランドのオブジェクトを表し、
前記コンピュータはインストラクションシーケンスを前記プログラムメモリに記憶し、
前記インストラクションシーケンスは、
結果としてオペランドを生成するために、データストリング内の前記サブストリングの識別なしで、二つのレジスタ記憶装置のオペランドのオブジェクトへの共通動作を指定する第1インストラクションと、
データストリングを再構成するために、少なくとも一つのオブジェクトの各々のビット数を定義し、前記オペランドのデータストリング内の別個のサブストリングを識別し、少なくとも一つのサブストリングを変わらない位置で保持しつつ、データストリング内の少なくとも二つのサブストリングの位置を互いに交換する第2インストラクションと、
データストリング内の前記サブストリングの識別なしで、再構成されたデータストリングのサブストリングにさらに共通動作を指定する第3インストラクションと、
を含む、
コンピュータ。 - 前記第2インストラクションは前記データストリングにおいて前記データストリングの第1および最終サブストリングを変わらない位置で保持する、請求項9に記載のコンピュータ。
- 離散データを表し、データストリングの複数のサブストリングの一つを形成する複数のビットシーケンスを記憶し、
サブストリングの各々は、複数のビットを含み、
前記データストリングはオペランドを表し、
前記サブストリングは該オペランドのオブジェクトを表し、
結果としてオペランドを生成するために、データストリングの別個のサブストリングを識別せずに、2つのレジスタ記憶装置のオペランドのオブジェクトに共通の動作をもたらす第1のインストラクションを含むインストラクションシーケンスを実行し、
データストリングを再構成するために、少なくとも一つの前記再構成インストラクションのオブジェクトの各々のビット数を定義し、前記オペランドのデータストリングの別個のサブストリングを識別し、少なくとも1つのサブストリングの位置を変えずに、データストリングの少なくとも2つのサブストリングの位置を互いに交換する第2のインストラクションを実行し、
データストリングのサブストリングを識別せずに、再構成されたデータストリングのサブストリングに共通の動作をもたらす第3の命令を実行する、
コンピュータ動作方法。 - 各々が離散データを表し、データストリングの複数のサブストリングの一つを形成する複数のビットシーケンスを一以上のレジスタ記憶装置に記憶し、
サブストリングの各々は、複数のビットを含み、
前記データストリングはオペランドを表し、
前記サブストリングは該オペランドのオブジェクトを表し、
前記サブストリングは第1のサブストリングと、最終サブストリングと、少なくとも2つの中間サブストリングと、を含み、
サブストリングの各々のビット長は等しく、
前記レジスタ記憶装置の各々は、単一のアドレスで指定することができる所定のビット容量を有し、
少なくとも一つのデータストリング再構成インストラクションを含むインストラクションシーケンスを実行し、
前記少なくとも一つの再構成インストラクションは、オブジェクトの各々のビット数を定義し、
前記第1および最終サブストリングの位置を変えず、再構成データストリングの少なくとも2つの中間サブストリングの位置を互いに交換するために、前記少なくとも1つの再構成インストラクションはデータストリングに動作する、
コンピュータ動作方法。 - 前記データストリングは前記データストリングの第1の半分を形成する第1ビットシーケンスおよび前記データストリングの第2の半分を形成する第2ビットシーケンスによって形成された偶数のサブストリングを含み、
前記再構成インストラクションが実行されて前記第1シーケンスから選択されたサブストリングと前記第2シーケンスから選択されたサブストリングとを交換する、
請求項12に記載の方法。 - 前記再構成インストラクションが実行されて前記再構成データストリングにおいて前記第1および第2シーケンスからのサブストリングを1つ置きに配置する、請求項13に記載の方法。
- 前記再構成インストラクションが実行されて各半分の1つ置きのサブストリングを変わらない位置で保持し、前記第1および最終サブストリングを変わらない位置で保持する請求項13または14に記載の方法。
- 前記再構成インストラクションが実行されてデータストリングの半分の少なくとも2つの奇数番目のサブストリング間に、前記データストリングの他方の半分からの奇数番目のサブストリングを挿入する、請求項13〜15のいずれか一項に記載の方法。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
GB9509987-5 | 1995-05-17 | ||
GBGB9509987.5A GB9509987D0 (en) | 1995-05-17 | 1995-05-17 | Manipulation of data |
Publications (2)
Publication Number | Publication Date |
---|---|
JPH08314717A JPH08314717A (ja) | 1996-11-29 |
JP3771968B2 true JP3771968B2 (ja) | 2006-05-10 |
Family
ID=10774615
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP14661996A Expired - Fee Related JP3771968B2 (ja) | 1995-05-17 | 1996-05-16 | コンピュータ及びコンピュータ動作方法 |
Country Status (5)
Country | Link |
---|---|
US (1) | US6145077A (ja) |
EP (2) | EP1197845A3 (ja) |
JP (1) | JP3771968B2 (ja) |
DE (1) | DE69622637T2 (ja) |
GB (1) | GB9509987D0 (ja) |
Families Citing this family (93)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6643765B1 (en) * | 1995-08-16 | 2003-11-04 | Microunity Systems Engineering, Inc. | Programmable processor with group floating point operations |
GB9801713D0 (en) * | 1998-01-27 | 1998-03-25 | Sgs Thomson Microelectronics | Executing permutations |
US7133040B1 (en) * | 1998-03-31 | 2006-11-07 | Intel Corporation | System and method for performing an insert-extract instruction |
JP2000322235A (ja) * | 1999-05-07 | 2000-11-24 | Sony Corp | 情報処理装置 |
GB2352065B (en) * | 1999-07-14 | 2004-03-03 | Element 14 Ltd | A memory access system |
US7546444B1 (en) | 1999-09-01 | 2009-06-09 | Intel Corporation | Register set used in multithreaded parallel processor architecture |
EP1122688A1 (en) * | 2000-02-04 | 2001-08-08 | Texas Instruments Incorporated | Data processing apparatus and method |
US7681018B2 (en) * | 2000-08-31 | 2010-03-16 | Intel Corporation | Method and apparatus for providing large register address space while maximizing cycletime performance for a multi-threaded register file set |
US20020053017A1 (en) * | 2000-09-01 | 2002-05-02 | Adiletta Matthew J. | Register instructions for a multithreaded processor |
US7620832B2 (en) * | 2000-09-20 | 2009-11-17 | Mips Technologies, Inc. | Method and apparatus for masking a microprocessor execution signature |
US7711763B2 (en) | 2001-02-21 | 2010-05-04 | Mips Technologies, Inc. | Microprocessor instructions for performing polynomial arithmetic operations |
US7181484B2 (en) | 2001-02-21 | 2007-02-20 | Mips Technologies, Inc. | Extended-precision accumulation of multiplier output |
US7237097B2 (en) * | 2001-02-21 | 2007-06-26 | Mips Technologies, Inc. | Partial bitwise permutations |
US7162621B2 (en) | 2001-02-21 | 2007-01-09 | Mips Technologies, Inc. | Virtual instruction expansion based on template and parameter selector information specifying sign-extension or concentration |
US7318145B1 (en) | 2001-06-01 | 2008-01-08 | Mips Technologies, Inc. | Random slip generator |
US6822654B1 (en) | 2001-12-31 | 2004-11-23 | Apple Computer, Inc. | Memory controller chipset |
US7015921B1 (en) | 2001-12-31 | 2006-03-21 | Apple Computer, Inc. | Method and apparatus for memory access |
US6693643B1 (en) | 2001-12-31 | 2004-02-17 | Apple Computer, Inc. | Method and apparatus for color space conversion |
US6931511B1 (en) | 2001-12-31 | 2005-08-16 | Apple Computer, Inc. | Parallel vector table look-up with replicated index element vector |
US7305540B1 (en) | 2001-12-31 | 2007-12-04 | Apple Inc. | Method and apparatus for data processing |
US7467287B1 (en) | 2001-12-31 | 2008-12-16 | Apple Inc. | Method and apparatus for vector table look-up |
US6877020B1 (en) | 2001-12-31 | 2005-04-05 | Apple Computer, Inc. | Method and apparatus for matrix transposition |
US7558947B1 (en) | 2001-12-31 | 2009-07-07 | Apple Inc. | Method and apparatus for computing vector absolute differences |
US7055018B1 (en) | 2001-12-31 | 2006-05-30 | Apple Computer, Inc. | Apparatus for parallel vector table look-up |
US6697076B1 (en) | 2001-12-31 | 2004-02-24 | Apple Computer, Inc. | Method and apparatus for address re-mapping |
US7034849B1 (en) | 2001-12-31 | 2006-04-25 | Apple Computer, Inc. | Method and apparatus for image blending |
US6573846B1 (en) | 2001-12-31 | 2003-06-03 | Apple Computer, Inc. | Method and apparatus for variable length decoding and encoding of video streams |
US7114058B1 (en) | 2001-12-31 | 2006-09-26 | Apple Computer, Inc. | Method and apparatus for forming and dispatching instruction groups based on priority comparisons |
US7681013B1 (en) | 2001-12-31 | 2010-03-16 | Apple Inc. | Method for variable length decoding using multiple configurable look-up tables |
US7437724B2 (en) * | 2002-04-03 | 2008-10-14 | Intel Corporation | Registers for data transfers |
US7272835B2 (en) * | 2002-06-28 | 2007-09-18 | International Business Machines Corporation | Apparatus and method for obtaining a string representation of objects in displayed hierarchical structures |
US6781529B1 (en) | 2002-10-24 | 2004-08-24 | Apple Computer, Inc. | Methods and apparatuses for variable length encoding |
US6781528B1 (en) | 2002-10-24 | 2004-08-24 | Apple Computer, Inc. | Vector handling capable processor and run length encoding |
US6707397B1 (en) | 2002-10-24 | 2004-03-16 | Apple Computer, Inc. | Methods and apparatus for variable length codeword concatenation |
US6707398B1 (en) | 2002-10-24 | 2004-03-16 | Apple Computer, Inc. | Methods and apparatuses for packing bitstreams |
US7373637B2 (en) | 2003-09-30 | 2008-05-13 | International Business Machines Corporation | Method and apparatus for counting instruction and memory location ranges |
US20050071516A1 (en) * | 2003-09-30 | 2005-03-31 | International Business Machines Corporation | Method and apparatus to autonomically profile applications |
US7395527B2 (en) | 2003-09-30 | 2008-07-01 | International Business Machines Corporation | Method and apparatus for counting instruction execution and data accesses |
US7937691B2 (en) | 2003-09-30 | 2011-05-03 | International Business Machines Corporation | Method and apparatus for counting execution of specific instructions and accesses to specific data locations |
US7421681B2 (en) | 2003-10-09 | 2008-09-02 | International Business Machines Corporation | Method and system for autonomic monitoring of semaphore operation in an application |
US8381037B2 (en) | 2003-10-09 | 2013-02-19 | International Business Machines Corporation | Method and system for autonomic execution path selection in an application |
GB2409064B (en) * | 2003-12-09 | 2006-09-13 | Advanced Risc Mach Ltd | A data processing apparatus and method for performing in parallel a data processing operation on data elements |
GB2409062C (en) * | 2003-12-09 | 2007-12-11 | Advanced Risc Mach Ltd | Aliasing data processing registers |
GB2409067B (en) * | 2003-12-09 | 2006-12-13 | Advanced Risc Mach Ltd | Endianess compensation within a SIMD data processing system |
GB2409066B (en) * | 2003-12-09 | 2006-09-27 | Advanced Risc Mach Ltd | A data processing apparatus and method for moving data between registers and memory |
GB2409060B (en) * | 2003-12-09 | 2006-08-09 | Advanced Risc Mach Ltd | Moving data between registers of different register data stores |
GB2409059B (en) * | 2003-12-09 | 2006-09-27 | Advanced Risc Mach Ltd | A data processing apparatus and method for moving data between registers and memory |
GB2411974C (en) * | 2003-12-09 | 2009-09-23 | Advanced Risc Mach Ltd | Data shift operations |
GB2411973B (en) * | 2003-12-09 | 2006-09-27 | Advanced Risc Mach Ltd | Constant generation in SMD processing |
GB2409068A (en) * | 2003-12-09 | 2005-06-15 | Advanced Risc Mach Ltd | Data element size control within parallel lanes of processing |
GB2409061B (en) * | 2003-12-09 | 2006-09-13 | Advanced Risc Mach Ltd | Table lookup operation within a data processing system |
GB2411976B (en) * | 2003-12-09 | 2006-07-19 | Advanced Risc Mach Ltd | A data processing apparatus and method for moving data between registers and memory |
GB2411975B (en) * | 2003-12-09 | 2006-10-04 | Advanced Risc Mach Ltd | Data processing apparatus and method for performing arithmetic operations in SIMD data processing |
GB2409063B (en) * | 2003-12-09 | 2006-07-12 | Advanced Risc Mach Ltd | Vector by scalar operations |
GB2410097B (en) * | 2004-01-13 | 2006-11-01 | Advanced Risc Mach Ltd | A data processing apparatus and method for performing data processing operations on floating point data elements |
US7415705B2 (en) | 2004-01-14 | 2008-08-19 | International Business Machines Corporation | Autonomic method and apparatus for hardware assist for patching code |
US7526757B2 (en) | 2004-01-14 | 2009-04-28 | International Business Machines Corporation | Method and apparatus for maintaining performance monitoring structures in a page table for use in monitoring performance of a computer program |
US7392370B2 (en) | 2004-01-14 | 2008-06-24 | International Business Machines Corporation | Method and apparatus for autonomically initiating measurement of secondary metrics based on hardware counter values for primary metrics |
US7496908B2 (en) | 2004-01-14 | 2009-02-24 | International Business Machines Corporation | Method and apparatus for optimizing code execution using annotated trace information having performance indicator and counter information |
US7895382B2 (en) | 2004-01-14 | 2011-02-22 | International Business Machines Corporation | Method and apparatus for qualifying collection of performance monitoring events by types of interrupt when interrupt occurs |
GB2411978B (en) * | 2004-03-10 | 2007-04-04 | Advanced Risc Mach Ltd | Inserting bits within a data word |
US7987453B2 (en) * | 2004-03-18 | 2011-07-26 | International Business Machines Corporation | Method and apparatus for determining computer program flows autonomically using hardware assisted thread stack tracking and cataloged symbolic data |
US7421684B2 (en) | 2004-03-22 | 2008-09-02 | International Business Machines Corporation | Method and apparatus for autonomic test case feedback using hardware assistance for data coverage |
US7269718B2 (en) * | 2004-04-29 | 2007-09-11 | International Business Machines Corporation | Method and apparatus for verifying data types to be used for instructions and casting data types if needed |
US20050251706A1 (en) * | 2004-04-29 | 2005-11-10 | International Business Machines Corporation | Method and apparatus for data-aware hardware operations |
US7386690B2 (en) * | 2004-04-29 | 2008-06-10 | International Business Machines Corporation | Method and apparatus for hardware awareness of data types |
US7328374B2 (en) * | 2004-04-29 | 2008-02-05 | International Business Machines Corporation | Method and apparatus for implementing assertions in hardware |
US7895473B2 (en) * | 2004-04-29 | 2011-02-22 | International Business Machines Corporation | Method and apparatus for identifying access states for variables |
US9557994B2 (en) * | 2004-07-13 | 2017-01-31 | Arm Limited | Data processing apparatus and method for performing N-way interleaving and de-interleaving operations where N is an odd plural number |
US8127117B2 (en) | 2006-05-10 | 2012-02-28 | Qualcomm Incorporated | Method and system to combine corresponding half word units from multiple register units within a microprocessor |
US8417922B2 (en) * | 2006-08-02 | 2013-04-09 | Qualcomm Incorporated | Method and system to combine multiple register units within a microprocessor |
US7453377B2 (en) * | 2006-08-09 | 2008-11-18 | Reti Corporation | Apparatus and methods for searching a pattern in a compressed data |
GB2444744B (en) * | 2006-12-12 | 2011-05-25 | Advanced Risc Mach Ltd | Apparatus and method for performing re-arrangement operations on data |
US8924401B2 (en) * | 2010-04-30 | 2014-12-30 | Infosys Limited | Method and system for logical data masking |
JP5760532B2 (ja) * | 2011-03-14 | 2015-08-12 | 株式会社リコー | プロセッサ装置及びその演算方法 |
EP3001307B1 (en) | 2014-09-25 | 2019-11-13 | Intel Corporation | Bit shuffle processors, methods, systems, and instructions |
EP3001306A1 (en) * | 2014-09-25 | 2016-03-30 | Intel Corporation | Bit group interleave processors, methods, systems, and instructions |
US20160139924A1 (en) * | 2014-11-14 | 2016-05-19 | Intel Corporation | Machine Level Instructions to Compute a 4D Z-Curve Index from 4D Coordinates |
US9772850B2 (en) * | 2014-11-14 | 2017-09-26 | Intel Corporation | Morton coordinate adjustment processors, methods, systems, and instructions |
US20160139921A1 (en) * | 2014-11-14 | 2016-05-19 | Intel Corporation | Vector instruction to compute coordiante of next point in a z-order curve |
US9772849B2 (en) * | 2014-11-14 | 2017-09-26 | Intel Corporation | Four-dimensional morton coordinate conversion processors, methods, systems, and instructions |
US20160139919A1 (en) * | 2014-11-14 | 2016-05-19 | Intel Corporation | Machine Level Instructions to Compute a 3D Z-Curve Index from 3D Coordinates |
US9772848B2 (en) * | 2014-11-14 | 2017-09-26 | Intel Corporation | Three-dimensional morton coordinate conversion processors, methods, systems, and instructions |
US20170192780A1 (en) * | 2015-12-30 | 2017-07-06 | Robert Valentine | Systems, Apparatuses, and Methods for Getting Even and Odd Data Elements |
US10255462B2 (en) | 2016-06-17 | 2019-04-09 | Arm Limited | Apparatus and method for obfuscating power consumption of a processor |
EP3336692B1 (en) | 2016-12-13 | 2020-04-29 | Arm Ltd | Replicate partition instruction |
EP3336691B1 (en) | 2016-12-13 | 2022-04-06 | ARM Limited | Replicate elements instruction |
US10789069B2 (en) | 2017-03-03 | 2020-09-29 | International Business Machines Corporation | Dynamically selecting version of instruction to be executed |
US10564967B2 (en) | 2017-03-03 | 2020-02-18 | International Business Machines Corporation | Move string processing via inline decode-based micro-operations expansion |
US10620956B2 (en) | 2017-03-03 | 2020-04-14 | International Business Machines Corporation | Search string processing via inline decode-based micro-operations expansion |
US10613862B2 (en) * | 2017-03-03 | 2020-04-07 | International Business Machines Corporation | String sequence operations with arbitrary terminators |
US10324716B2 (en) | 2017-03-03 | 2019-06-18 | International Business Machines Corporation | Selecting processing based on expected value of selected character |
US10564965B2 (en) | 2017-03-03 | 2020-02-18 | International Business Machines Corporation | Compare string processing via inline decode-based micro-operations expansion |
Family Cites Families (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US3810112A (en) * | 1972-12-18 | 1974-05-07 | Bell Lab Inc | Shift-shuffle memory system with rapid sequential access |
US4727474A (en) * | 1983-02-18 | 1988-02-23 | Loral Corporation | Staging memory for massively parallel processor |
JPS63292185A (ja) * | 1987-05-25 | 1988-11-29 | 日本電気株式会社 | デジタル入出力回路 |
JP2633331B2 (ja) * | 1988-10-24 | 1997-07-23 | 三菱電機株式会社 | マイクロプロセッサ |
KR0181471B1 (ko) * | 1990-07-27 | 1999-05-15 | 윌리암 피.브레이든 | 컴퓨터 데이타 경로배정 시스템 |
US5471628A (en) * | 1992-06-30 | 1995-11-28 | International Business Machines Corporation | Multi-function permutation switch for rotating and manipulating an order of bits of an input data byte in either cyclic or non-cyclic mode |
US5524256A (en) * | 1993-05-07 | 1996-06-04 | Apple Computer, Inc. | Method and system for reordering bytes in a data stream |
US5590352A (en) * | 1994-04-26 | 1996-12-31 | Advanced Micro Devices, Inc. | Dependency checking and forwarding of variable width operands |
GB9509983D0 (en) * | 1995-05-17 | 1995-07-12 | Sgs Thomson Microelectronics | Replication of data |
GB9509989D0 (en) * | 1995-05-17 | 1995-07-12 | Sgs Thomson Microelectronics | Manipulation of data |
GB9509988D0 (en) * | 1995-05-17 | 1995-07-12 | Sgs Thomson Microelectronics | Matrix transposition |
-
1995
- 1995-05-17 GB GBGB9509987.5A patent/GB9509987D0/en active Pending
-
1996
- 1996-05-14 US US08/645,897 patent/US6145077A/en not_active Expired - Lifetime
- 1996-05-15 EP EP01204659A patent/EP1197845A3/en not_active Ceased
- 1996-05-15 DE DE69622637T patent/DE69622637T2/de not_active Expired - Fee Related
- 1996-05-15 EP EP96303462A patent/EP0743592B1/en not_active Expired - Lifetime
- 1996-05-16 JP JP14661996A patent/JP3771968B2/ja not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
EP1197845A3 (en) | 2002-07-03 |
EP0743592B1 (en) | 2002-07-31 |
DE69622637T2 (de) | 2003-02-06 |
DE69622637D1 (de) | 2002-09-05 |
JPH08314717A (ja) | 1996-11-29 |
US6145077A (en) | 2000-11-07 |
EP1197845A2 (en) | 2002-04-17 |
EP0743592A1 (en) | 1996-11-20 |
GB9509987D0 (en) | 1995-07-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP3771968B2 (ja) | コンピュータ及びコンピュータ動作方法 | |
JP3138209B2 (ja) | マトリックス転置方法 | |
JP3150286B2 (ja) | データストリング生成方法、コンピュータ動作方法、コンピュータシステムによるマトリックス乗算方法、及びコンピュータ | |
US5822619A (en) | System and method for restructuring data strings | |
KR101099467B1 (ko) | 레지스터와 메모리 사이에 데이터를 이동시키는 데이터처리장치 및 방법 | |
KR100996888B1 (ko) | 앨리어싱 데이터 처리 레지스터 | |
KR100991984B1 (ko) | 레지스터와 메모리 사이에 데이터를 이동시키는 데이터처리장치 및 방법 | |
US5933650A (en) | Alignment and ordering of vector elements for single instruction multiple data processing | |
US7793077B2 (en) | Alignment and ordering of vector elements for single instruction multiple data processing | |
JP4708761B2 (ja) | Simd処理における定数の生成 | |
JP5366917B2 (ja) | データ要素に対するデータ処理操作を並列に実行するためのデータ処理装置及び方法 | |
JP2905446B2 (ja) | データストリング生成方法、コンピュータ動作方法、ピクセル値セット生成方法及びコンピュータ | |
US5673321A (en) | Efficient selection and mixing of multiple sub-word items packed into two or more computer words | |
JP2005174296A (ja) | Simdデータ処理システムにおけるエンディアンの補償 | |
JP2005174298A (ja) | “ベクトル×スカラ”演算 | |
JP2005174300A (ja) | 異なるレジスタデータ記憶装置のレジスタ間のデータ移動 | |
JP2005174292A (ja) | データシフト操作 | |
EP0932273A1 (en) | Executing permutations |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20050221 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20050301 |
|
A601 | Written request for extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A601 Effective date: 20050526 |
|
A602 | Written permission of extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A602 Effective date: 20050607 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20050901 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20050927 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20051216 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20060117 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20060213 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100217 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110217 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120217 Year of fee payment: 6 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120217 Year of fee payment: 6 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130217 Year of fee payment: 7 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130217 Year of fee payment: 7 |
|
S111 | Request for change of ownership or part of ownership |
Free format text: JAPANESE INTERMEDIATE CODE: R313113 |
|
S531 | Written request for registration of change of domicile |
Free format text: JAPANESE INTERMEDIATE CODE: R313531 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130217 Year of fee payment: 7 |
|
R350 | Written notification of registration of transfer |
Free format text: JAPANESE INTERMEDIATE CODE: R350 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
LAPS | Cancellation because of no payment of annual fees |