JP6933648B2 - Fecの符号化および復号を加速するプロセッサ命令 - Google Patents

Fecの符号化および復号を加速するプロセッサ命令 Download PDF

Info

Publication number
JP6933648B2
JP6933648B2 JP2018534109A JP2018534109A JP6933648B2 JP 6933648 B2 JP6933648 B2 JP 6933648B2 JP 2018534109 A JP2018534109 A JP 2018534109A JP 2018534109 A JP2018534109 A JP 2018534109A JP 6933648 B2 JP6933648 B2 JP 6933648B2
Authority
JP
Japan
Prior art keywords
input
value
operand
instruction
processing element
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.)
Active
Application number
JP2018534109A
Other languages
English (en)
Other versions
JP2019508785A (ja
Inventor
バインドロス,キース・エム
ドブス,カール・エス
メジボフスキー,エフゲニー
ラザ,ザヒール
シェルビー,ケヴィン・エイ
Original Assignee
コーヒレント・ロジックス・インコーポレーテッド
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by コーヒレント・ロジックス・インコーポレーテッド filed Critical コーヒレント・ロジックス・インコーポレーテッド
Publication of JP2019508785A publication Critical patent/JP2019508785A/ja
Application granted granted Critical
Publication of JP6933648B2 publication Critical patent/JP6933648B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/18Complex mathematical operations for evaluating statistical data, e.g. average values, frequency distributions, probability functions, regression analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30021Compare instructions, e.g. Greater-Than, Equal-To, MINMAX
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • G06F9/30065Loop control instructions; iterative instructions, e.g. LOOP, REPEAT
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3867Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3867Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
    • G06F9/3869Implementation aspects, e.g. pipeline latches; pipeline synchronisation and clocking
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3887Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3893Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled in tandem, e.g. multiplier-accumulator

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Data Mining & Analysis (AREA)
  • Algebra (AREA)
  • Bioinformatics & Computational Biology (AREA)
  • Evolutionary Biology (AREA)
  • Operations Research (AREA)
  • Probability & Statistics with Applications (AREA)
  • Bioinformatics & Cheminformatics (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Databases & Information Systems (AREA)
  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)
  • Detection And Correction Of Errors (AREA)
  • Detection And Prevention Of Errors In Transmission (AREA)

Description

本発明の分野は、一般にソフトウェア構成可能処理要素でのプロセッサ命令に関する。
前方誤り訂正(Forward Error Correction、FEC)は、無線、有線、または任意の他の通信チャネルで誤りを最小にするための広く普及した方法である。チャネルの送信側のFEC符号器および通信チャネルの受信側のFEC復号器によりFECを実装することができる。多くのFECの符号化および復号の方法は、かなりの計算を必要とし、同時に、「リアルタイム」で遂行する、すなわち、選んだ用途に必要とされる通信速度を維持する必要がある。
FECは、符号を使用して遂行されてもよく、この場合、入力データは、符号語に符号化され、受信側に送信され、受信側は、受信した符号語を復号し、回復した入力データとして結果を出力する。FEC符号の例は、とりわけ低密度パリティ検査符号(Low−Density Parity−Check code、LDPC)およびポーラ符号(Polar code)である。
米国特許第7,415,594号明細書 米国特許第8,880,866号明細書 米国特許第9,430,369号明細書 米国特許出願公開第15/359,845号明細書
FECの符号器および復号器の実装は、一連の数値データに対し何度も遂行される一連の基本計算動作から構成されてもよい。これらの基本動作を加速することは、符号器および復号器のリアルタイム性のために有益である。したがって、本分野で改善が望まれる。
ソフトウェア構成可能処理要素のための改善されたプロセッサ命令のためのシステムおよび方法のさまざまな実施形態について説明する。詳細には、FECの符号化および復号のために有用な関数を加速するさまざまな実施形態について説明する。
第1の実施形態では、処理要素は、第1の入力オペランドおよび第2の入力オペランドを指定する第1の命令を実行するように構成された二重データ−処理経路を含んでもよい。第1の命令の実行では、処理要素は、第1の入力オペランドの絶対値および符号関数を決定し、第2の入力オペランドの絶対値および符号関数を決定し、第1の入力オペランドの絶対値と第2の入力オペランドの絶対値の最小値を備える最小の大きさ値を決定し、第1の入力値の符号関数と第2の入力値の符号関数の積を備える最終符号関数を決定し、最小の大きさ値に最終符号関数を適用するように構成されてもよく、そこでは、最小の大きさ値に最終符号関数を適用した結果は、第1の入力オペランドおよび第2の入力オペランドに関する結果値を構成する。
いくつかのシナリオでは、第1の命令は、第1の入力オペランドが配置されたメモリ位置を指定することにより第1の入力オペランドを指定してもよく、第2の入力オペランドが配置されたメモリ位置を指定することにより第2の入力オペランドを指定してもよい。
いくつかのシナリオでは、第1の命令は、複数組の第1の入力オペランドおよび複数組の第2の入力オペランドをさらに指定してもよく、そこでは、第1の命令の実行では、処理要素は、複数組の第1の入力オペランドおよび複数組の第2の入力オペランドに関する複数組の結果値を作り出すように構成される。
いくつかのシナリオでは、二重データ−処理経路は、第1の二重データ−処理経路を含んでもよく、処理要素は、第1の二重データ−処理経路と同じ手法で構成された第2の二重データ−処理経路をさらに含んでもよい。
別の実施形態では、処理要素は、複数のパイプライン化動作ステージを含んでもよい。各動作ステージは、複数のデータ−処理動作を遂行するように構成可能であってもよい。第1の命令を受信したことに応答して動作ステージを構成するように、処理要素を構成する。処理要素は、第1の入力値の絶対値および符号関数を決定し、かつ第2の入力値の絶対値および符号関数を決定するように、第1の動作ステージを構成してもよい。処理要素は、第1の入力値の絶対値と第2の入力値の絶対値の最小値を決定し、かつ第1の入力値の符号関数と第2の入力値の符号関数の積を備える最終符号関数を決定するように、第2の動作ステージを構成してもよい。処理要素は、第1の入力値の絶対値と第2の入力値の絶対値の最小値に最終符号関数を適用するように、第3の動作ステージを構成してもよい。
いくつかのシナリオでは、第1のクロックサイクル中に、第1の入力値の絶対値および符号関数を決定し、かつ第2の入力値の絶対値および符号関数を決定するように、第1の動作ステージを構成してもよい。第2のクロックサイクル中に、第1の入力値の絶対値と第2の入力値の絶対値の最小値を決定し、かつ最終符号関数を決定するように、第2の動作ステージを構成してもよい。第3のクロックサイクル中に、第1の入力値の絶対値と第2の入力値の絶対値の最小値に最終符号関数を適用するように第3の動作ステージを構成してもよい。
いくつかのシナリオでは、第1の命令を受信したことに応答して、複数対の入力値を順次処理するように、処理要素をさらに構成してもよく、そこでは、第1の入力値および第2の入力値は、複数対の入力値の第1対を構成し、そこでは、複数の連続するクロックサイクルの各クロックサイクル中に、それぞれの対の入力値の各入力値の絶対値および符号を決定するように、第1の動作ステージを構成する。
いくつかのシナリオでは、第2の異なる命令を受信したことに応答して、第1の命令を受信したことに応答して構成されるデータ−処理動作と異なる複数のデータ−処理動作を遂行するように少なくとも1つの動作ステージを構成するように、処理要素をさらに構成してもよい。
いくつかのシナリオでは、複数のパイプライン化動作ステージは、第1の複数のパイプライン化動作ステージを含んでもよく、処理要素は、第1の複数のパイプライン化動作ステージと同じ手法で構成された第2の複数のパイプライン化動作ステージをさらに含んでもよい。
いくつかのシナリオでは、動作ステージを構成するステップは、動作ステージにより遂行すべき複数のデータ−処理動作を選択するステップ、および選択したデータ−処理動作への入力が提供されるレジスタを選択するステップを含んでもよい。
別の実施形態は、第1のオペランド値および第2のオペランド値を含む第1の入力オペランド、ならびに第3のオペランド値および第4のオペランド値を含む第2の入力オペランドを指定する第1の命令を実行するように構成された二重データ−処理経路を含んでもよい。第1の命令の実行では、第1のオペランド値に第1の符号関数を適用することにより第1の符号付値を決定し、第2のオペランド値に第2の符号関数を適用することにより第2の符号付値を決定し、第3のオペランド値に第1の符号付値を加算し、第4のオペランド値に第2の符号付値を加算するように、処理要素を構成してもよい。
いくつかのシナリオでは、第1の命令は、第1の符号関数および第2の符号関数をさらに指定してもよい。
いくつかのシナリオでは、第1の命令は、第1の入力オペランドが配置されたメモリ位置を指定することにより第1の入力オペランドを指定してもよく、第2の入力オペランドが配置されたメモリ位置を指定することにより第2の入力オペランドを指定してもよい。
いくつかのシナリオでは、第1の命令は、複数組の第1の入力オペランドおよび複数組の第2の入力オペランドをさらに指定してもよく、そこでは、第1の命令の実行では、複数組の第1の入力オペランドおよび複数組の第2の入力オペランドに関する複数組の結果値を作り出すように、処理要素を構成する。
いくつかのシナリオでは、処理要素は、ビットパック型レジスタをさらに含んでもよい。第1の命令の実行では、ビットパック型レジスタに複数組の第1の入力オペランドの複数組の第1のオペランド値に対応する複数組の第1の符号関数を記憶し、ビットパック型レジスタに複数組の第1の入力オペランドの複数組の第2のオペランド値に対応する複数組の第2の符号関数を記憶するように、処理要素を構成してもよい。
いくつかのシナリオでは、二重データ−処理経路は、第1の二重データ−処理経路であってもよく、処理要素は、第1の二重データ−処理経路と同じ手法で構成された第2の二重データ−処理経路をさらに含んでもよい。
別の実施形態は、第1のオペランド値および第2のオペランド値を含む入力オペランド、ならびに第1の符号関数および第2の符号関数を含む符号オペランドを指定する第1の命令を実行するように構成された二重データ−処理経路を含む処理要素を含んでもよい。第1の命令の実行では、第1のオペランド値に第1の符号関数を適用し、第2のオペランド値に第2の符号関数を適用するように、処理要素を構成してもよい。
いくつかのシナリオでは、第1の命令は、入力オペランドが配置されたメモリ位置を指定することにより入力オペランドを指定してもよく、符号オペランドが配置されたメモリ位置を指定することにより符号オペランドを指定してもよい。
いくつかのシナリオでは、第1の命令は、複数組の入力オペランドおよび複数組の符号オペランドをさらに指定してもよい。第1の命令の実行では、複数組の入力オペランドおよび複数組の符号オペランドに関する複数組の結果値を作り出すように、処理要素を構成してもよい。
いくつかのシナリオでは、二重データ−処理経路は、第1の二重データ−処理経路であってよく、処理要素は、第1の二重データ−処理経路と同じ手法で構成された第2の二重データ−処理経路をさらに含んでもよい。
好ましい実施形態に関する以下の詳細な説明を以下の図面と併せて考察するとき、本発明をよりよく理解することができる。
一例の無線通信システムを示す。 機器の復号器内の、一例のプロセッサシステムを示す。 開示するプロセッサ命令のいずれかに従って動的に構成されてもよい処理要素の構成図を示す。 開示するプロセッサ命令のいずれかを実行するように構成されてもよい、処理要素内に含まれる実行ユニットの構成図を示す。 近似min−sum(最小値−和)命令を実行するように構成された実行ユニットの構成図を示す。 M−幅の符号命令を実行するように構成された実行ユニットの構成図を示す。 M−幅のadd−sign(加算−符号)命令を実行するように構成された実行ユニットの構成図を示す。 1つまたは複数のビットパック型レジスタを使用してM−幅のadd−sign命令を実行するように構成された実行ユニットの構成図を示す。
本発明は、さまざまな修正形態および代替形態が可能であるが、それらの具体的実施形態について、図面で例として示し、本明細書で詳細に記述する。しかしながら、それらの実施形態に対する図面および詳細な記述は、開示する特定の形態に本発明を限定することを意図するものではなく、それどころか、本発明は、添付の特許請求の範囲により規定されるような本発明の精神および範囲にはいるすべての修正形態、均等物、および代替形態を包含するものであることを理解されたい。
以下の参考文献は、あたかも本明細書にあらゆる点で完全に示されているかのように、全体が参照により本明細書に組み入れられる。
R.Gallager,“Low−Density Parity−Check Codes(低密度パリティ検査符号),”MIT Press,1963
E.Arikan,“Channel Polarization:A method for constructing capacity achieving codes for symmetric binary−input memoryless channels(通信路分極:対称2元無記憶通信路のための符号を達成する容量を構築する方法)”,IEEE Trans.on Inf.Theory,vol.55,no.7,pp.3051−3073,Jul.2009.
Doerrらによる、「Processing System with Interspersed Stall Propagating Processors and Communication Elements(散在ストール伝播プロセッサおよび通信要素を備える処理システム)」と題する米国特許第7,415,594号明細書
Doerrらによる、「Method and system for disabling communication paths in a multiprocessor fabric by setting register values to disable the communication paths specified by a configuration(構成により指定された通信パスを無効にするようにレジスタ値を設定することによりマルチプロセッサ機構で通信パスを無効にするための方法およびシステム)」と題する米国特許第8,880,866号明細書
Doerrらによる、「Memory−Network Processor with Programmable Optimizations(プログラム可能な最適化を伴うメモリ−ネットワークプロセッサ)」と題する米国特許第9,430,369号明細書
Razaらによる、「Memory Management and Path Sort Techniques in a Polar Code Successive Cancellation List Decoder(ポーラ符号逐次除去リスト復号器でのメモリ管理およびパスソート技法)」と題する米国特許出願公開第15/359,845号明細書
用語
以下は、本出願で使用する用語の解説である。
記憶媒体−さまざまなタイプのメモリ機器または記憶装置のいずれか。用語「記憶媒体」は、インストール媒体、たとえば、CD−ROM、フロッピーディスク104、またはテープ装置;コンピュータ・システム・メモリ、またはDRAM、DDR RAM、SRAM、EDO RAM、Rambus RAMなどのようなランダム・アクセス・メモリ;または磁気媒体、たとえば、ハードドライブ、光学記憶装置、もしくはROM、EPROM,フラッシュなどの不揮発性メモリを含むことが意図される。記憶媒体は、同様に他のタイプのメモリも、またはそれらの組合せを含んでもよい。さらに、記憶媒体は、プログラムが実行される第1のコンピュータ内に配置されてもよい、および/またはインターネットなどのネットワークを介して第1のコンピュータに接続する、第2の異なるコンピュータ内に配置されてもよい。第2の異なるコンピュータ内に配置される実例では、第2のコンピュータは、実行するために、第1のコンピュータにプログラム命令を提供してもよい。用語「記憶媒体」は、異なる位置に、たとえば、ネットワークを介して接続される異なるコンピュータシステム内に存在してもよい、2つ以上の記憶媒体を含んでもよい。
キャリア媒体−上述のような記憶媒体、ならびにバス、ネットワーク、および/または電気信号または光信号などの信号を伝達する他の物理的伝送媒体などの物理的伝送媒体。
プログラム可能ハードウェア素子−プログラム可能な相互接続または有線接続された相互接続を介して接続された複数のプログラム可能機能ブロックを備えるさまざまなハードウェア機器を含む。例には、FPGA(Field Programmable Gate Array、フィールド・プログラマブル・ゲート・アレイ)、PLD(Programmable Logic Device)、FPOA(Field Programmable Object Array)、およびCPLD(Complex PLD)が含まれる。プログラム可能機能ブロックは、微細なもの(組合せ論理またはルック・アップ・テーブル)から粗大なもの(算術論理演算装置またはプロセッサコア)までに及んでもよい。プログラム可能ハードウェア素子はまた、「再構成可能論理」とも呼ばれる場合がある。
特定用途向け集積回路(Application Specific Integrated Circuit、ASIC)−この用語は、その通常の意味の広さを完全に有することが意図される。ASICは、プログラム可能プロセッサコアをビルディングブロックとして含有してもよいが、用語ASICは、汎用プログラム可能機器というよりはむしろ特定用途のためにカスタマイズされた集積回路を含むことが意図される。携帯電話セル、MP3プレーヤチップ、および多くの他の単一機能ICは、ASICの例である。ASICは、通常はVerilogまたはVHDLなどのハードウェア記述言語で記述される。
プログラム−用語「プログラム」は、その通常の意味の広さを完全に有することが意図される。用語「プログラム」は、1)メモリに記憶してもよく、かつプロセッサにより実行可能なソフトウェアプログラム、または2)プログラム可能なハードウェア素子もしくはASICを構成するために使用可能なハードウェア構成プログラムを含む。
ソフトウェアプログラム−用語「ソフトウェアプログラム」は、その通常の意味の広さを完全に有することが意図され、記憶媒体に記憶して、プロセッサにより実行してもよい、任意のタイプのプログラム命令、コード、スクリプト、および/もしくはデータ、またはそれらの組合せを含む。代表的ソフトウェアプログラムは、テキストベースのプログラミング言語、たとえば、C、C++、PASCAL、FORTRAN、COBOL、JAVA(登録商標)、アセンブラ言語などのような命令型言語もしくは手続き型言語で書かれたプログラム;グラフィカルプログラム(グラフィカルプログラミング言語で書かれたプログラム);アセンブラ言語プログラム;機械語にコンパイルされたプログラム;スクリプト;および他のタイプの実行可能ソフトウェアを含む。ソフトウェアプログラムは、何らかの手法で相互運用する2つ以上のソフトウェアプログラムを備えてもよい。
ハードウェア構成プログラム−プログラム、たとえば、プログラム可能ハードウェア素子またはASICをプログラムする、または構成するために使用することができるネットリストまたはビットファイル。
コンピュータシステム−パーソナル・コンピュータ・システム(PC)、メインフレーム・コンピュータ・システム、ワークステーション、ネット家電、インターネット家電、携帯情報端末(personal digital assistant、PDA)、グリッド・コンピューティング・システム、もしくは他の機器、または機器の組合せを含む、さまざまなタイプのコンピューティングシステムまたは処理システムのいずれか。一般に、用語「コンピュータシステム」を、記憶媒体から命令を実行する少なくとも1つのプロセッサを有する任意の機器(または機器の組合せ)を包含するように、広範囲に規定することができる。
自動的に−ユーザ入力が活動または動作を直接指定または遂行することなく、コンピュータシステム(たとえば、コンピュータシステムにより実行されるソフトウェア)、または機器(回路、プログラム可能ハードウェア素子、ASICなど)により遂行される活動または動作を指す。したがって、用語「自動的に」は、ユーザが動作を直接遂行するための入力を提供する、ユーザにより手動で遂行される、または指定される動作とは対照をなす。自動手順は、ユーザにより提供される入力により開始されてもよいが、「自動的に」遂行される後続の活動は、ユーザにより指定されない、すなわち、遂行すべき各活動をユーザが指定する「手動で」は行われない。たとえば、ユーザが各フィールドを選択し、情報を指定する入力を提供することにより(たとえば、情報をタイプし、チェックボックス、ラジオボタン選択などを選択することにより)電子式フォームに必要事項を書き入れることは、たとえコンピュータシステムがユーザの活動に応答してフォームを更新しなければならなくても、フォームに必要事項を手動で書き入れることになる。コンピュータシステムは、フォームに必要事項を自動的に書き入れられてもよく、この場合、ユーザ入力がフィールドへの回答を指定することなく、コンピュータシステム(たとえば、コンピュータシステム上で実行されるソフトウェア)がフォームのフィールドを解析し、フォームに書き込む。上記に示したように、ユーザは、フォームの自動書込を起動してもよいが、フォームを実際に書き込むことには関与しない(たとえば、ユーザがフィールドへの回答を手動で指定するのではなく、むしろ、フィールドが自動的に記入される)。本明細書は、ユーザが行った活動に応答して、動作が自動的に遂行されるさまざまな例を提供する。
システム概観
図1は、無線通信機器12と通信する基地局10を伴う一例の通信システムを示す。基地局10は、複数の無線通信機器とセルラ通信を遂行するセルラ基地局であってもよい。あるいは、基地局10は、802.11規格または関連規格によるなどのWi−Fi通信を遂行するための無線アクセスポイントであってもよい。無線通信機器12は、スマートホン、タブレット機器、コンピュータシステムなどのような、さまざまな機器のいずれかであってもよい。基地局10および無線通信機器12の一方または両方は、本明細書に記述するような復号器論理を含んでもよい。
図2は、基地局10および/または無線通信機器12の一方または両方に含有されてもよい一例のマルチプロセッサシステム(multi−processor system、MPS)を示す。MPSは、本明細書で記述する方法を実装するようにプログラムされてもよい。いくつかの実施形態で使用してもよい例示的MPSアーキテクチャに関する詳細な情報については、上記で参照により組み入れられた、米国特許第7,415,594号明細書、および米国特許第8,880,866号明細書、および米国特許第9,430,369号明細書を参照されたい。プロセッサシステムの別の例は、本明細書で記述する方法を実装するように構成されてもよい、FPGAなどのプログラム可能ハードウェア素子(Programmable hardware element、PHE)である。
図2に示す実施形態では、MPSは、データおよび命令を互いに伝達するように結合された、動的に構成可能なコミュニケータまたは動的に構成可能な通信要素とも呼ばれる場合がある、複数のプロセッサ要素(processor element、PE)(正方形で示す)および複数のデータ記憶ルータ(data memory router、DMR)(円で示す)を含んでもよい。本明細書で使用するとき、PEはまた、PEノードを指す場合があり、DMRはまた、DMRノードを指す場合がある。
MPSは、GPMC、DSP、FPGA、またはASICが現在使用されているさまざまなシステムおよび用途のいずれかで使用されてもよい。したがって、たとえば、処理システムは、さまざまなタイプのコンピュータシステム、または計算を必要とする他の機器のいずれかで使用されてもよい。企図される一実施形態では、処理システムは、FECの符号器および/または復号器内の信号処理機器として使用される。
一実施形態では、PEは、データを操作するように構成された1つまたは複数の算術論理演算装置(arithmetic−logic unit、ALU)、ALUを制御するように構成された1つまたは複数の命令処理ユニット(instruction processing unit、IPU)、命令またはデータを保持するように構成された1つまたは複数のメモリ、ならびにさまざまな種類のマルチプレクサおよび復号器を含んでもよい。そのような一実施形態は、いくつかのポート(「プロセッサポート」)を含んでもよく、ポートの一部は、DMRへ、および他のPEに接続するように構成されてもよい他のものへの接続用に構成されてもよい。
一実施形態では、DMRは、データおよび命令を保持するように構成された1つまたは複数のランダム・アクセス・メモリ(random access memory、RAM)、構成可能なコントローラ、クロスバースイッチなどのネットワークスイッチ、レジスタ、およびマルチプレクサを含んでもよい。そのような実施形態は、複数のポートを含んでもよく、複数のポートの一部は、PEに接続するように構成されてもよく(本明細書ではPE型ポートと呼ぶ)、複数のポートの一部は、DMRに接続するように構成されてもよい(本明細書ではDMR型ポートと呼ぶ)。任意の所与のポートについては、DMRとの間を接続するように構成されていようと、PEとの間を接続するように構成されていようと、特定のクロックサイクルでそのような所与のポートを通して転送可能なデータ量は、さまざまな実施形態で変わる場合があることが留意される。たとえば、一実施形態では、所与のポートは、クロックサイクルあたり1ワードのデータを転送するように構成されてもよく、一方、別の実施形態では、所与のポートは、クロックサイクルあたり複数ワードのデータを転送するように構成されてもよい。さらに別の実施形態では、所与のポートは、時分割多重化などの技法を採用して、複数のクロックサイクルにわたり1ワードのデータを転送してもよく、それにより、ポートを備える物理的接続の数を低減する。
MPSの一実施形態では、各PEは、命令のために確保された少ないローカルメモリを含んでもよく、非常に少ないローカルデータ記録領域を含んでもよい。そのような実施形態では、各PEに隣接するDMRは、オペランドを所与のPEに提供するように構成されてもよい。特定の実施形態では、多くのPE命令のために、所与のPEは、1クロックサイクルで、隣接するDMRからオペランドを読み出し、ALU動作を実行し、所与の隣接するDMRにALUの結果を記憶してもよい。それにより、1つのPEからのALUの結果は、実行後ただちにそのクロックサイクル内にいくつかの他のPEに利用可能になってもよい。この方式で結果を作り出すことにより、隣接するPEの実行を密接に調和させる、すなわち「密結合」させることが可能になる場合がある。他の実施形態では、各PEは、オペランドおよび/または結果データをバッファリングするための追加レジスタを含んでもよい。
MPSの一実施形態では、データおよび命令を、いくつかの異なる方法の1つで、DMRの間で転送してもよい。MPS内のすべてのメモリにシリアルバスを提供してもよく、そのようなバスを使用して、外部メモリからMPSを初期化しても、MPSデータ構造の試験をサポートしてもよい。短距離転送については、所与のPEをプログラムして、所与のPEの隣接するDMRとの間でデータを直接移動してもよい。より長い距離にわたりデータまたは命令を転送するために、DMRのネットワーク内で、通信経路を動的に作成し、無効にしてもよい。そのようなより長い距離のデータ転送のために、MPS内部の相互接続されたDMRのネットワークは、通信経路のための切替ルーティング機構(switched routing fabric、SRF)を構成してもよい。
経路上でデータワードを損失する可能性を防止するために、MPS10のある実施形態は、経路に沿って受信側と送信側の間でフロー制御を実装してもよい。フロー制御は、送信側の対応する受信側がデータをもはや受信することができない場合、送信側を停止してもよく、かつ送信側の対応する受信側がデータを受信する準備ができるようになったとき、送信側を再始動してもよい仕組みを指す。経路上でデータの流れを停止および再始動することは、ワームホールルーティングでの、メッセージの進行の停止および再始動と多くの類似点があるので、停止および再始動を、統合した枠組みで組み合わせてもよい。
一実施形態では、MPSは、PEが同一であってもよく、かつDMRが同一であってもよい、均一なアレイの形に一緒に接続された複数のPEおよびDMRを含んでもよい。均一なアレイでは、PEの大部分は、同一であってもよく、PEの大部分の各々は、DMRへの接続を同数、有してもよい。また、均一なアレイでは、DMRの大部分は、同一であってもよく、DMRの大部分の各々は、他のDMRへの、およびPEへの接続を同数、有してもよい。MPSの一実施形態では、PEおよびDMRを、実質的に一様な方式で散在させてもよい。本明細書で使用するとき、実質的に一様な散在は、DMRに対するPEの比がアレイの副領域の大部分にわたり不変である配列を指す。
実質的に一様な方式で配列された均一なアレイは、予測可能な相互接続パターンを提供すること、およびソフトウェアモジュールをアレイにわたり再利用することが可能になることなどの、ある種の有利な特性を有する場合がある。一実施形態では、均一なアレイにより、PEおよびDMRの少数のインスタンスを設計し、試験することが可能になる場合がある。この場合、DMRおよびPEを備えるユニットを製作し、次いで、そのようなユニットを複数回、繰り返す、または「タイルのように並べること」により、システムを組み立ててもよい。そのような取り組み方法は、共通のシステム要素を再利用することによって、設計および試験のコストを下げる場合がある。
PEおよびDMRの構成可能な性質により、多種多様の不均一な挙動が、物理的に均一なアレイ上で行われようにプログラムすることができるようになる場合がある。しかしながら、ある代替実施形態では、MPSはまた、規則的アレイもしくは不規則なアレイで、またはランダム式でさえ接続されてもよい、不均一なDMRおよびPEを用いて形成されてもよい。一実施形態では、PEおよびDMRの相互接続を、たとえば集積回路(integrated circuit、IC)、セラミック基板、またはプリント回路基板(printed circuit board、PCB)上の回路トレースとして実装してもよい。しかしながら、代替実施形態では、そのような相互接続は、たとえば、電磁エネルギー(すなわち、無線または光のエネルギー)のための導波管、無線(すなわち、導波管なしの)エネルギー、粒子(電子ビームなど)、または分子上の電位などの、さまざまな小型通信リンクのいずれかであってもよい。
MPSを単一集積回路上に実装してもよい。一実施形態では、複数のMPS集積回路を組み合わせて、より大きなシステムを作り出してもよい。しかしながら、PEおよびDMRの異なる配列を含むMPSの代替実施形態が企図される。
いくつかの実施形態では、MPSは、DSPおよびFPGAのアーキテクチャの最も好ましい特徴を採用してもよい。DSPのように、MPSは、複数の処理ユニットおよびオン・チップ・メモリを備えるプログラム可能チップであってもよい。しかしながら、DSPに比べて、MPS処理ユニットは簡素化されてもよく、より多くのMPS処理ユニットが存在してもよく、MPS処理ユニットは、MPS処理ユニット間のデータ移動の帯域幅だけではなく、チップ上のデータ移動およびチップ外のデータ移動の帯域幅も最大化するような新奇な方法で相互接続されてもよい。DSPよりも多くの処理ユニットを有することにより、MPSは、単位時間あたりより多くの処理を行うことができるようになる場合があり、簡素化された処理ユニットは、エネルギー使用を最小にする場合がある。内部並列処理を有する多くのDSPは、バス指向アーキテクチャであってもよい。いくつかの実施形態では、MPSは、バスを含むのではなく、むしろ、バス指向アーキテクチャよりもかなり高い全帯域幅を提供してもよい、SRF内に埋め込まれた、DMRなどの、隣接する共用ローカルメモリを含んでもよい。
FPGAの取り組み方法と比較して、いくつかのMPSの実施形態は、より粗大であってもよい。たとえば、MPSの一実施形態では、動作は、自然語長(たとえば、16ビット)を有してもよく、計算は、自然語長の倍数であるデータを使用して遂行された場合、最も効率的であってもよい。いくつかのMPSの実施形態では、PEおよびDMRは、FPGAで実現される均等の構造よりも高密度であってもよく、それにより、より短い平均配線長、より小さな配線静電容量、およびより少ないエネルギー利用をもたらす場合がある。FPGAの実装形態と対照的に、いくつかのMPSの実装形態では、MPS内のすべてのALUは、オペランドの取出し、およびDMRで周囲の高速メモリへ結果を書き戻すのを容易にしてもよいプロセッサ(すなわち、PE)の一部であってもよい。ALUに関するタイミングおよびクロックスキューの問題、取出し動作、および書戻し動作は、ICチップの設計中に一度解決されればよく、FPGA実装の特色をよく示すような新しい用途それぞれに伴い、再度解決される必要がない。
FEC関数
上記で指摘したように、図2のMPSは、FECの符号器および/または復号器内で単一処理機器として使用されてもよい。FECの符号化および復号を遂行するためのさまざまな枠組みは、以下の動作を伴ってもよい。
f(x、y)≒extsign(x)*extsign(y)*min(|x|,|y|) (式1)
g(u,x,y)=sat(−1u*x+y) (式2)
式1および式2では、「x」および「y」の各々は、数値(負、正、またはゼロ)であり、一方では、「u」は、0または1の値を有する。
関数extsign(a)は、いくつかのシナリオでは、集合[−1,0,+1]の形の結果として戻されてもよい、「a」の符号を抽出する。他のシナリオでは代わりに、結果を集合[−1,+1]または[−1,0]に制限してもよい。他のシナリオでは、代わりの符号表現を使用してもよい。
関数min(a,b)は、値「a」と「b」の間の最小値を戻す。
関数sat(a)は、事前に規定した最小値「MIN_VAL」および最大値「MAX_VAL」(ここで、MIN_VAL<MAX_VALである)に基づき、以下のように「a」の「飽和」値を戻す。
a<MIN_VALである場合、sat(a)=MIN_VAL
a>MAX_VALである場合、sat(a)=MAX_VAL
MIN_VAL≦a≦MAX_VALである場合、sat(a)=a
低密度パリティ検査符号(LDPC)およびポーラ符号などのFECの符号器および復号器のいくつかの実装形態では、式1および式2を何度も計算する場合がある。リアルタイムの符号化/復号を維持するために、これらの計算を非常に迅速に遂行しなければならない。その結果、リアルタイム用途のためのFEC関数は従来、所与のリアルタイム用途に必要なスループットを提供するようにカスタム設計された専用ハードウェアの形で(たとえば、ASICの形で)遂行されてきた。しかしながら、そのような特定用途向けの解決策は、それが設計された特殊用途のためだけに有用であり、FECアルゴリズム、スループット要件、またはさまざまな他の変数のいくつかが変わる場合、専用ハードウェアを再設計しなければならない。さらに、複数の復号器を必要とする場合がある用途(たとえばスマートホン)では、複数の専用ハードウェア解決策の集合体を必要とする場合があり、これにより、復号器の一部またはすべてが現在使用されていない間でさえ、大量の空間を消費する場合がある。
したがって、そのようなFEC関数を、図2のMPSなどのソフトウェア構成可能ハードウェアで実装することが望ましい。これにより、アルゴリズムまたは他の動作パラメータの変化に応答して、FEC関数を実装するハードウェアを再構成することができるようになる。特定のFEC符号器/復号器を動作の中で、または動作を離れて循環させるとき、ハードウェアを動的に再構成することさえしてもよい。
さらに、式1および式2に示す関数のような関数を、さまざまな設定で別様に利用してもよい。たとえば、式1および式2に示す関数を、LDPCとポーラ符号の両方で使用してもよい。しかしながら、この関数を、特定のFEC解決策のためにカスタム設計された専用ハードウェア内部に埋め込んだ場合、特定の関数それぞれのために設計されたハードウェアの共用は、可能ではない場合がある。
したがって、任意の利用可能な1つまたは複数のソフトウェア構成可能プロセッサが関数を実装してもよいように、これらの機能を1組の機械命令として実装することが望ましい。
しかしながら、式1および式2の関数は従来、かなりの処理時間を必要としていた。たとえば、従来のRISC(「Reduced Instruction Set Computer」、縮小命令セットコンピュータ)アーキテクチャで実装された式1の関数は、7つのRISC動作の実行を必要とする場合があり、典型的には、関数を実行するために、プロセッサは7クロックサイクルを費やす必要がある。
したがって、低減されたサイクル数で実行することができる1組の機械命令としてこれらの関数を実装することが好ましい。
本明細書で開示するように、式1および式2の各々を、たとえば、図2のMPS上に実装された1つまたは複数のプロセッサ命令により加速してもよい。図2のMPSの処理要素(PE)に関連して新しい命令について記述するが、考え方は、より一般的には他のデータ処理アーキテクチャにも同様に適用可能であるので、MPSアーキテクチャを一例として理解すべきであり、限定として理解すべきではない。
図3−処理要素
図3は、いくつかの実施形態による処理要素300(たとえば、上記で論じたようなPE)の構成図を示す。図3は、簡略化した構成図であり、本議論に関係がある処理要素の一部分を示すこと、ならびに追加構成要素(図示せず)および代わりの構成もまた企図されることを理解されたい。
図示するように、処理要素300は、実行ユニット302を含んでもよい。実行ユニット302は、コンピュータ命令などの、1つまたは複数の命令を実行するように構成されてもよい。実行ユニット302は、1つまたは複数の構成可能なデータ−処理経路を含んでもよい。たとえば、実行ユニット302は、1つまたは複数の構成可能なM−幅の(たとえば、二重の)データ−処理経路を含んでもよく、そこでは、M−幅のデータ−処理経路はそれぞれ、複数の入力オペランドを処理するように構成される。1つまたは複数のM−幅のデータ−処理経路は、同じ手法で(たとえば、同じ命令の複数のインスタンスを遂行するように)構成されてもよい、または独立して(たとえば、異なる命令を遂行するように)構成されてもよい。より具体的な一例として、実行ユニット302は、各動作ステージが1つまたは複数のデータ−処理動作を遂行するように構成可能な複数のパイプライン化動作ステージを含んでもよい。
図示するように、処理要素300は、図示するメモリ入力304Aおよびメモリ入力304Bなどの、1つまたは複数のメモリ入力304を含んでもよい。メモリ入力304Aは、1つもしくは複数のレジスタ、または受信した命令を実行している間、実行ユニット302により使用するためのデータを記憶するように構成された他のメモリ機器を含んでもよい。たとえば、メモリ入力304Aは、たとえば別の処理要素から、またはDMRもしくはメモリキャッシュなどの別のメモリ機器から、データを受信し、記憶してもよく、記憶したデータをたとえば1つまたは複数の入力オペランドとして実行ユニット302に提供してもよい。メモリ入力304Bは同様に、1つもしくは複数のレジスタ、または実行ユニット302により使用するためのデータを記憶するための他のメモリ機器を含んでもよい。いくつかの実施形態では、メモリ入力304Aおよびメモリ入力304Bの各々は、実行ユニット302に1つまたは複数の入力オペランドを提供してもよい。他の実施形態では、メモリ入力304Aは、1つまたは複数の入力オペランドを提供してもよく、一方では、メモリ入力304Bは、メモリ入力304Aにより提供された入力オペランドを処理する助けになる他のデータを提供してもよい。いくつかの実施形態では、そのような他のデータを、入力オペランドの処理を始める前にメモリ入力304Bの中にロードしてもよい。いくつかの実施形態では、メモリ入力304Aおよび304Bを、単一メモリ機器内に備えてもよい。いくつかの実施形態では、追加メモリ入力を含んでもよい。
図示するように、処理要素300は、1つまたは複数のメモリ出力306を含んでもよい。メモリ出力306は、1つもしくは複数のレジスタ、または受信した命令を実行している間、実行ユニット302により出力されるデータを記憶するように、および記憶したデータを処理要素300の外側にある宛先に、たとえば、別の処理要素に、またはDMRもしくはメモリキャッシュなどの別のメモリ機器に提供するように構成された他のメモリ機器を含んでもよい。
処理要素300は、命令を受信し、構文解析するなどのための追加要素(図示せず)をさらに含んでもよい。
命令(たとえば、単一命令)を受信し、かつそれに応答して、受信した命令を実行するように実行ユニットを構成するように、処理要素300を構成してもよい。命令は、1つまたは複数の入力オペランドを含んでもよい。たとえば、命令は、入力オペランドとして使用する1つまたは複数の値を明示的に指定することにより、1つまたは複数の入力オペランドを含んでもよい。代わりにまたは追加で、命令は、少なくとも1つの入力オペランドに関して、入力オペランドが配置されたメモリ位置(たとえば、メモリアドレス)を指定することにより1つまたは複数の入力オペランドを含んでもよい。たとえば、命令を実行するのに、第1の入力オペランドおよび第2の入力オペランドを必要とする場合、命令は、第1の入力オペランドが配置されたメモリ位置、および第2の入力オペランドが配置されたメモリ位置を指定してもよい。
いくつかのシナリオでは、命令は、処理要素300に、1つまたは複数の入力オペランドに対して関数を遂行させ、かつ新しい入力オペランドを毎回使用して関数を複数回、繰り返させてもよい。したがって、いくつかのシナリオでは、命令は、1つまたは複数の複数組の入力オペランドをさらに指定してもよい。たとえば、命令を実行するのに、第1の入力オペランドおよび第2の入力オペランドを必要とする場合、命令は、第1組の入力オペランドが配置されたメモリ位置、および第2組の入力オペランドが配置されたメモリ位置を指定してもよい。処理要素300は、第1組から第1の入力オペランドを、および第2組から第1の入力オペランドを取り出して、1回目の関数を遂行してもよく、第1組から第2の入力オペランドを、および第2組から第2の入力オペランドを取り出して、2回目の関数を遂行してもよい。たとえば、第1組からの第1の入力オペランドは、第1組の入力オペランドに関して命令により指定されたメモリ位置に配置された入力オペランドであってもよく、第1組からの第2の入力オペランドは、次の連続したメモリ位置に配置された入力オペランドであってもよい。命令が完全に実装されるまで、このパターンを続けてもよい(たとえば、処理要素300が、各組の入力オペランドに関して、連続したメモリ位置を通して増分して、メモリから入力オペランドを取り出す)。
命令は、たとえば、関数を繰り返す回数、各組内のオペランド数、および/または終了メモリ位置を指定してもよく、その結果、関数が、指定された回数、繰り返され、指定された数の入力オペランドを使用した、および/または終了メモリ位置に到達したとき、命令は完全に実装されている。
受信した命令を実行するステップは、処理要素300が1つまたは複数の結果値を作り出し、出力するステップを含んでもよい。たとえば、処理要素300は、命令により指定された関数を遂行するたびに、結果値を作り出してもよい。
命令は、1つまたは複数の結果値を記憶するための1つまたは複数のメモリ位置を指定してもよい。たとえば、命令を実行するステップが、結果値を1つだけ作り出す場合、命令は、1つの結果値を記憶するための位置を示す単一メモリ位置を指定してもよい。あるいは、命令を実行するステップが、複数の結果値を作り出す場合、命令は、複数の結果値を記憶するための1組の連続したメモリ位置の開始位置を示す単一メモリ位置を指定してもよい、または一定範囲のメモリ位置を指定してもよい、またはそうではない場合、複数の結果値を記憶するための複数のメモリ位置を指定してもよい。
一例として、命令は、第1の入力オペランドおよび第2の入力オペランドを指定してもよいM−幅の近似min−sum(MAMINSUM)命令を含んでもよい。MAMINSUM命令を受信したことに応答して、処理要素300は、式1を実装してもよいMAMINSUM関数を遂行してもよい。たとえば、M=2であるとき、MAMINSUM命令を遂行するステップは、第1の入力オペランドの絶対値および符号関数を決定するステップと、第2の入力オペランドの絶対値および符号関数を決定するステップと、第1の入力オペランドの絶対値と第2の入力オペランドの絶対値の最小値を備える最小の大きさ値を決定するステップと、第1の入力値の符号関数と第2の入力値の符号関数の積を備える最終符号関数を決定するステップと、最小の大きさ値に最終符号関数を適用するステップとを含んでもよく、そこでは、最小の大きさ値に最終符号関数を適用するステップの結果は、第1の入力オペランドおよび第2の入力オペランドに関する結果値を構成する。
MAMINSUM命令は、複数組の第1の入力オペランドおよび複数組の第2の入力オペランドをさらに指定してもよい。そのようなシナリオでは、処理要素300は、MAMINSUM命令を受信したことに応答して、複数組の第1の入力オペランドおよび複数組の第2の入力オペランドに関する複数組の結果値を作り出すために、MAMINSUM関数を複数回、遂行してもよい。たとえば、MAMINSUM関数の各反復は、複数組の第1の入力オペランドからのそれぞれの第1の入力オペランド、および複数組の第2の入力オペランドからのそれぞれの第2の入力オペランドを含む、それぞれの対の入力オペランドを利用してもよい。
別の例として、命令は、第1の入力オペランドおよび第2の入力オペランドを指定してもよいM−幅の(たとえば、二重の)add−sign(MADDSIGN)命令を含んでもよい。たとえば、M=2である場合、第1の入力オペランドは、第1のオペランド値および第2のオペランド値を含んでもよく、第2の入力オペランドは、第3のオペランド値および第4のオペランド値を含んでもよい。MADDSIGN命令を受信したことに応答して、処理要素300は、式2を実装してもよいMADDSIGN関数を遂行してもよい。たとえば、MADDSIGN関数は、第1のオペランド値に第1の符号関数を適用することにより第1の符号付値を決定するステップと、第2のオペランド値に第2の符号関数を適用することにより第2の符号付値を決定するステップと、第3のオペランド値に第1の符号付値を加算するステップと、第4のオペランド値に第2の符号付値を加算するステップとを含んでもよい。MADDSIGN命令は、第1の符号関数および第2の符号関数をさらに指定してもよい。
MADDSIGN命令は、複数組の第1の入力オペランドおよび複数組の第2の入力オペランドをさらに指定してもよい。そのようなシナリオでは、処理要素300は、MADDSIGN命令を受信したことに応答して、複数組の第1の入力オペランドおよび複数組の第2の入力オペランドに関する複数組の結果値を作り出すために、MADDSIGN関数を複数回、遂行してもよい。そのようなシナリオでは、MADDSIGN命令は、複数組の第1の入力オペランドの複数組の第1のオペランド値に対応する複数組の第1の符号関数、および複数組の第1の入力オペランドの複数組の第2のオペランド値に対応する複数組の第2の符号関数をさらに指定してもよい。いくつかのシナリオでは、処理要素300は、1つまたは複数のビットパック型レジスタを備えてもよく、複数組の第1の符号関数および複数組の第2の符号関数を1つまたは複数のビットパック型レジスタにロードしてもよい。
別の例として、命令は、入力オペランドおよび符号オペランドを指定してもよいM−幅の(たとえば、二重の)sign(MSIGN)命令を含んでもよい。たとえば、M=2である場合、入力オペランドは、第1のオペランド値および第2のオペランド値を含んでもよく、符号オペランドは、第1の符号関数および第2の符号関数を含んでもよい。MSIGN命令を受信したことに応答して、処理要素300は、式2の一部分を実装してもよいMSIGN関数を遂行してもよい。たとえば、MSIGN関数は、第1のオペランド値に第1の符号関数を適用するステップと、第2のオペランド値に第2の符号関数を適用するステップとを含んでもよい。
MSIGN命令は、複数組の入力オペランドおよび複数組の符号オペランドをさらに指定してもよい。そのようなシナリオでは、処理要素300は、MSIGN命令を受信したことに応答して、複数組の入力オペランドおよび複数組の符号オペランドに関する複数組の結果値を作り出すために、MSIGN関数を複数回、遂行してもよい。
図4−実行ユニット
図4は、いくつかの実施形態による、処理要素300内部に含まれる実行ユニット302の構成図を示す。図4は、簡略化した構成図であり、本議論に関係がある実行ユニットの一部分を示すこと、および追加構成要素(図示せず)および代わりの構成もまた企図されることを理解されたい。
図示するように、実行ユニット302は、構成可能な二重データ−処理経路を含んでもよい。二重(M=2)データ−処理経路の実施形態は、単なる代表例であること、および他の実施形態は、より広い(たとえば、M=3またはM=4)またはより狭い(M=1)M−幅のデータ−処理経路を含んでもよいことを理解されたい。他の実施形態では、実行ユニット302は、独立に構成可能であってもよい、複数のそのようなM−幅のデータ−処理経路を含んでもよい。M−幅のデータ−処理経路は、複数の入力オペランド402を処理するように構成されてもよい。
図示するように、二重データ−処理経路は、複数のパイプライン化動作ステージ(404A〜C)を含み、各動作ステージは、2つ(すなわち、M)のデータ−処理動作を遂行するように構成可能である。他の実施形態では、動作ステージの1つまたは複数は、より多数の、またはより少数のデータ−処理動作を遂行するように構成可能であってもよい。図4には3つの動作ステージを示すが、他の数の動作ステージを含んでもよい。
動作ステージの1つまたは複数はそれぞれ、選択モジュール406、第1の動作モジュール408、第2の動作モジュール410、および1つまたは複数のレジスタ412を含んでもよい。異なる値のM(M=2以外)に関して、より少ない、またはより多くの動作モジュールを含んでもよいことを理解されたい。
選択モジュール406は、第1の動作モジュール408および/または第2の動作モジュール410に入力の1つまたは複数を誘導するための、1つもしくは複数のマルチプレクサ、または複数の入力の間で選択するように構成可能な他のハードウェアを含んでもよい。選択モジュール406は、動作モジュール408および410をバイパスして、レジスタ412に入力の1つまたは複数を誘導するようにさらに構成可能であってもよい。たとえば、動作ステージ404Aの選択モジュール406Aは、メモリ入力304から、第1の動作モジュール408Aに1つまたは複数の入力オペランドを誘導し、第2の動作モジュール410Aに1つまたは複数の入力オペランドを誘導し、および/または1つまたは複数のレジスタ412Aに1つまたは複数の入力オペランドを誘導するように構成可能であってもよい。同様に、動作モジュール404Bの選択モジュール406Bは、第1の動作モジュール408B、第2の動作モジュール410B、および/または1つまたは複数のレジスタ412Bのうち1つまたは複数にレジスタ412Aの1つまたは複数の出力を誘導するように構成可能であってもよい。
第1の動作モジュール408および第2の動作モジュール410はそれぞれ、複数の算術演算および/または論理演算のいずれかを遂行するように構成可能であってもよい。たとえば、動作モジュールは、加算器、乗算器、アキュムレータ、シフタ、論理演算装置、加算−比較−選択(add−compare select、ACS)ユニットなどのいずれかの1つまたは複数を含んでもよい。したがって、各動作モジュールは、少なくとも1つの論理関数および/または算術関数を遂行するように構成されてもよい。たとえば、各動作モジュールは、符号関数(たとえば、SIGN16(a,s))、加算関数(たとえば、ADD16(a,b))、絶対値関数(ABS16(a))、最小値関数(MIN(a,b))、符号乗算関数(MULSIGN(a,b))などのような関数を遂行するように構成可能であってもよい。各動作モジュールは、1つまたは複数のレジスタ412に結果値を出力してもよい。他の実施形態では、1つまたは複数の動作モジュールは、隣接するDMRなどのいくつかの他のメモリ機器に直接、または(たとえば、最終選択モジュール414を介して)1つまたは複数のメモリ出力306に、結果値を出力するように構成されてもよい。
1つまたは複数のレジスタ412は、動作モジュールから結果値を受信してもよい、および/または選択モジュール406からの出力を受信してもよい。次いで、1つまたは複数のレジスタ412は、たとえば次のクロックサイクルで、次のパイプラインステージに、受信した値を出力してもよい。あるいは、1つまたは複数のレジスタは、隣接するDMRなどのいくつかの他のメモリ機器に直接、または(たとえば、最終選択モジュール414を介して)1つまたは複数のメモリ出力306に、受信した値を出力してもよい。これにより、1つまたは複数の動作ステージをバイパスして、すべてよりも少ない動作ステージ404を使用して遂行してもよい命令を実行するように、実行ユニット302を構成することができるようになる場合がある。
いくつかの実施形態では、各動作モジュールは、自身の少なくとも1つの論理関数および/または算術関数を1クロックサイクルで遂行してもよい。その結果、図4に示すように、各動作ステージは、1クロックサイクルで、1つまたは複数の選択された入力オペランドに対して最大2つのデータ−処理動作を遂行してもよく、1つまたは複数のレジスタ412にデータ−処理動作の1つまたは複数からの結果値を保存してもよい。次のクロックサイクルで、パイプライン内の次の動作ステージは同様に、先行する動作ステージからの、保存された結果値の1つまたは複数に対して最大2つのデータ−処理動作を遂行してもよい。
他の実施形態では、より少ない関数ユニットおよび/または内部記憶レジスタを含むように、動作ステージ408および410の1つまたは複数をさらにパイプライン化してもよい。その結果、動作モジュールは、たとえば、より短いクロック周期を可能にしながら、一続きの複数のクロックサイクルにわたり関数を遂行してもよい。
処理要素300が受信した命令に基づき、動作ステージ404A〜Cを構成してもよい。したがって、処理要素300が新しい、異なる命令を受信した場合、動作ステージ404A〜Cを後で再構成してもよい。たとえば、処理要素300は、MADDSIGN命令を受信した場合、たとえば以下で説明するように、MADDSIGN命令を実行するように動作ステージ404を構成してもよい。処理要素300は、その後MAMINSUM命令を受信した場合、たとえば以下で説明するように、MAMINSUM命令を実行するように動作ステージ404を再構成してもよい。動作ステージ404を構成するステップは、動作ステージにより遂行すべき複数のデータ−処理動作を選択するステップ、および選択したデータ−処理動作への入力が提供されるレジスタを選択するステップを含んでもよい。
たとえば、動作ステージを構成するステップは、特定の動作を遂行するように動作モジュール408および動作モジュール410のうち少なくとも一方を構成するステップを含んでもよい。動作ステージを構成するステップは、動作モジュール408および動作モジュール410の各々にどの1つまたは複数の入力を提供するかを規定するように選択モジュール406を構成するステップをさらに含んでもよい。たとえば、動作モジュール408および動作モジュール410への入力源の役割をどのレジスタが果たすかを選択するように選択モジュール406を構成してもよい。動作モジュールを構成するステップは、動作モジュール内のどこに入力が送信されるかを規定するように選択モジュール406を構成するステップをさらに含んでもよい。たとえば、動作モジュール408Aが、加算器および乗算器を含み、かつ加算関数を遂行するように構成される場合、2つの入力オペランド(すなわち、加算すべき2つの入力オペランド)を、それらが記憶されたメモリ入力レジスタから、乗算器への入力ではなく、動作モジュール408Aの加算器の入力へ提供するように選択モジュール406Aを構成してもよい。
実行ユニット302が関数を複数回、繰り返すべきであると命令が指定する場合、各動作ステージは、自身の動作を複数回、たとえば、クロックサイクルごとに1回、遂行してもよい。メモリ入力304は、関数を繰り返すたびに正しい入力オペランドを提供してもよい。その結果、実行ユニット302は、クロックサイクルごとにほぼ1つの結果のスループットで(たとえば、関数の最初の繰り返しを処理する間に付け加えられる待ち時間を除外する)関数を複数回、遂行してもよい。
図5−MAMINSUM命令のために構成された実行ユニット
図5は、いくつかの実施形態による、MAMINSUM命令を実行するように構成された実行ユニット302の一例を示す。MAMINSUM命令を使用して、実行ユニット302は、Lクロックサイクルの待ち時間、およびクロックサイクルあたり(M/2)*N/(N+L−1)インスタンスのスループットで、式1の(M/2)*Nインスタンスを実装してもよい。図示するように、MAMINSUM命令は、二重データ−処理経路(M=2)で実装され、その結果、実行ユニット302は、3クロックサイクルの待ち時間、およびクロックサイクルあたりN/(N+2)インスタンスのスループットで、式1のNインスタンスを実装してもよい。二重データ−処理経路の実施形態は、代表的でしかないこと、および他の実施形態は、式1の追加インスタンス(たとえば、M>2である場合)を実装するために、各動作ステージ内に追加動作モジュールを含んでもよいことを理解されたい。従来のRISCアーキテクチャでは、MAMINSUM命令はなく、7クロックサイクルの待ち時間、およびクロックサイクルあたり1/7インスタンスのスループットで類似の関数を遂行する場合があることを留意されてもよい。処理要素300は、MAMINSUM命令を受信したことに応答して、図5に示すように実行ユニット302を構成してもよい。
MAMINSUM命令は、上記で論じたように、2つの入力オペランド(XおよびY)、または2組のオペランドを指定してもよい。たとえば、各入力オペランドは、16ビット符号付整数値であってもよい。2つの入力オペランドを、直接指定してもよい、または2つの入力オペランドが配置されたメモリ位置を指定することにより指定してもよい。図示するように、第1の入力オペランド(X)を、メモリ内のアレイLLR[]のインデックス「i」に配置されるとして指定し、第2の入力オペランド(Y)を、アレイLLR[]のインデックス「j」に配置されるとして指定する。そのような実装では、処理要素300は、「i」および「j」のインデックスを単に増分することにより、メモリ内に連続して記憶された1組のX値、およびメモリ内に連続して記憶された1組のY値の始めから終わりまで順序付けしてもよい。いくつかの実施形態では、処理要素300は、それぞれの対のX値およびY値の始めから終わりまで、たとえば、1組のX値および1組のY値内の値をすべて使用してしまうまで、各クロックサイクルあたり1回、順序付けしてもよい。MAMINSUM命令は、結果値(Z)を記憶してもよいメモリ位置をさらに指定してもよい。
図示するように、第1の動作モジュール408Aに第1の入力オペランドXを提供し、かつ第2の動作モジュール410Aに第2の入力オペランドYを提供するように選択モジュール406Aを構成してもよい。
動作モジュール408Aおよび410Aの各々を、それぞれの入力オペランドに対してABS16関数を遂行するように構成してもよい。ABS16関数は、2つの出力値を、すなわち、入力オペランドの絶対値(abs_a)および入力オペランドの符号関数(sign_a)を提供してもよい。たとえば、絶対値は、16ビット整数値であってもよい。符号関数は、たとえば、集合[−1,0,+1]内の値を表す2ビット値であってもよい。他のシナリオでは、符号関数は代わりに、集合[−1,+1]内の値または集合[−1,0]内の値を現す1ビット値であってもよい。さらに他のシナリオでは、符号関数は代わりに、上記で規定した集合に制限された有効な値を伴う16ビット符号付整数値であってもよい。他のシナリオでは、符号関数に関して、代わりの符号表現を使用してもよい。
したがって、動作モジュール408Aは、Xの絶対値(abs_x)およびXの符号関数(sign_x)を決定してもよく、一方では、動作モジュール410Aは、Yの絶対値(abs_y)およびYの符号関数(sign_y)を決定してもよい。これらの出力を、レジスタ412Aに出力し、記憶してもよい。
したがって、第1の入力値の絶対値および第1の入力値の符号関数を決定し、かつ第2の入力値の絶対値および第2の入力値の符号関数を決定するように第1の動作ステージ404Aを構成してもよい。これを、たとえば第1のクロックサイクル中に遂行してもよい。
図示するように、動作モジュール408Bにabs_xおよびabs_yを提供し、かつ動作モジュール410Bにsign_xおよびsign_yを提供するように、選択モジュール406Bを構成してもよい。
2つの入力の最小値を、たとえば、abs_xおよびabs_yの最小値を決定するように、動作モジュール408Bを構成してもよい。動作モジュール408Bは、たとえば、より小さな値を有する、2つの入力の一方であってもよい出力min_xyを提供してもよい。出力min_xyをレジスタ412Bに記憶してもよい。
最終符号関数または組み合わせた符号関数(sign_xy)を決定するように動作モジュール410Bを構成してもよい。最終符号関数sign_xyは、符号関数sign_xとsign_yの積を表す値を含んでもよい。たとえば、sign_xおよびsign_yに対して乗算関数を遂行することにより最終符号関数sign_xyを決定してもよい。他の実施形態では、符号関数sign_xおよびsign_yがそれぞれ1ビットまたは2ビットしかない場合があるので、最終符号関数sign_xyは、乗算関数の結果をシミュレートする簡単な選択関数を使用して、より容易に決定してもよい。レジスタ412Bに最終符号関数sign_xyを記憶してもよい。
したがって、Xの絶対値およびYの絶対値の最小値を決定し、かつXの符号関数とYの符号関数の積を備える最終符号関数を決定するように、第2の動作ステージ404Bを構成してもよい。これを、たとえば第2のクロックサイクル中に遂行してもよい。いくつかの実施形態では、第2のクロックサイクルは、第1のクロックサイクル直後のクロックサイクルであってもよい。他の実施形態では、第2のクロックサイクルは、後で出現してもよい。
図示するように、min_xyおよびsign_xyを動作モジュール408Cに提供するように選択モジュール406Cを構成してもよい。MAMINSUM命令は、動作モジュール410Cを利用しなくてもよい。したがって、選択モジュール406Cは、動作モジュール410Cに入力を提供することも、意味のある入力を提供することもまったくない。あるいは、選択モジュール406Cは、タスクを課されない動作モジュール410Cを効率的に利用するために、たとえばMAMINSUM命令と無関係の別の関数に関する入力を提供してもよい。
min_xyに最終符号関数sign_xyを適用して、出力値Zを提供するように動作モジュール408Cを構成してもよい。たとえば、以下のように、min_xyに最終符号関数を適用してもよい。
sign_xy>0(たとえば、+1)である場合、Z=min_xy
sign_xy=0である場合、Z=0
sign_xy<0(たとえば、−1)である場合、Z=−min_xy
あるいは、以下のように、min_xyに最終符号関数を適用してもよい。
sign_xy=−1である場合、Z=−min_xy
sign_xy≠−1である場合、Z=min_xy
出力値Zを、レジスタ412Cに記憶してもよい、または代わりに、(たとえば、選択モジュール414を介して)メモリ出力306に、もしくは隣接するDMRなどの別のメモリ機器に直接、記憶してもよい。
したがって、Xの絶対値とYの絶対値の最小値に最終符号関数sign_xyを適用するように第3の動作ステージ404Cを構成してもよい。これを、たとえば第3のクロックサイクル中に遂行してもよい。いくつかの実施形態では、第3のクロックサイクルは、第2のクロックサイクル直後のクロックサイクルであってもよい。他の実施形態では、第3のクロックサイクルは、後で出現してもよい。
いくつかの実施形態では、メモリ出力306に出力値Zを記憶し、隣接するDMR、または別の処理要素のメモリ入力レジスタなどの、別のメモリ機器に出力してもよい。図示するように、アレイLLR[]のインデックス「l」に出力値Zを記憶する。その結果、処理要素300は、「1」のインデックスを単に増分することにより、連続したメモリ位置に1組の出力値を記憶してもよい。
図6−MSIGN命令のために構成された実行ユニット
図6は、いくつかの実施形態による、MSIGN命令を実行するように構成された実行ユニット302の一例を示す。MSIGN命令を使用して、実行ユニット302は、クロックサイクルあたりMインスタンスのスループットで、式2のM*Nインスタンスの一部分を実装してもよい。図示するように、MSIGN命令は、二重データ−処理経路(M=2)を用いて実装され、その結果、実行ユニット302は、クロックサイクルあたり2インスタンスのスループットで、式2の2Nインスタンスを実装してもよい。二重経路の実施形態は、代表的でしかないこと、および他の実施形態は、式2の異なる数のインスタンス(たとえば、M≠2である場合)を実装するために、各動作ステージ内により多くの、またはより少ない動作モジュールを含んでもよいことを理解されたい。従来のRISCアーキテクチャでは、MSIGN命令はなく、クロックサイクルあたり1/2インスタンスのスループットで類似の関数を遂行する場合があることを留意されてもよい。処理要素300は、MSIGN命令を受信したことに応答して、図6に示すように実行ユニット302を構成してもよい。
式2を以下の形式で書き直してもよい。
u=0である場合、g(u,x,y)=(y+x)、そうではない場合、g(u,x,y)=(y−x) (式3)
式3では、「u」は、式2のように0または1の値を有する。あるいは、式2を以下の形式で書き直してもよく、式中s=(−1)uである。
s<0である場合、g(s,x,y)=(y−x)、そうではない場合、g(s,x,y)=(y+x) (式4)
MSIGN命令は、「s」の値に基づき、入力xをyに加算すべきか、yから減算すべきか(すなわち、yにxを加算すべき、−xを加算すべきか)を決定してもよい。したがって、MSIGN命令を実行した後に続いて加算関数を実行することにより式4を実装してもよい。実行ユニット302は、M−幅の(たとえば、二重の)データ−処理経路を含んでもよいので、MSIGN命令は、(sのM個の値を使用して)xのM個(たとえば、2つ)の値に対して同時に動作してもよい。
MSIGN命令は、入力オペランド(X)および符号オペランド(S)を指定してもよい。あるいは、MSIGN命令は、上記で論じたように、複数組の入力オペランドおよび複数組の符号オペランドを指定してもよい。たとえば、各入力オペランドXは、第1のオペランド値X0と第2のオペランド値X1の連結を表す32ビット値であってもよい。第1のオペランド値X0および第2のオペランド値X1の各々は、16ビット符号付整数値であってもよい。各符号オペランドSは、第1の符号関数S0と第2の符号関数S1の連結を表す値であってもよい。各符号関数を、1ビット値、2ビット値、16ビット値により表してもよい、または上記で論じたように、いくつかの他の形式で表してもよい。各動作ステージ内に異なる数の動作モジュール(たとえば、M≠2である場合)を含む実施形態では、入力オペランドXは、より多くの、またはより少ないオペランド値を含んでもよく、かつ符号オペランドSは、より多くの、またはより少ない符号関数を含んでもよいことを理解されたい。入力オペランドXおよび符号オペランドSを、直接指定してもよい、または入力オペランドXおよび符号オペランドSが配置されるそれぞれのメモリ位置を指定することにより指定してもよい。
図示するように、入力オペランド(X)を、メモリ内のアレイLLR[]のインデックス「i」に配置されるとして指定し、符号オペランド(S)を、メモリ内のアレイS[]のインデックス「k」に配置されるとして指定する。そのような実装では、処理要素300は、「i」および「k」のインデックスを単に増分することにより、メモリ内に連続して記憶された1組のX値、およびメモリ内に連続して記憶された1組のS値の始めから終わりまで順序付けしてもよい。たとえば、処理要素300は、たとえば各クロックサイクルで、それぞれの入力オペランドXおよびそれぞれの符号オペランドSを受信するために、「i」および「k」のインデックスを増分してもよい。MSIGN命令は、結果値(Z)を記憶してもよいメモリ位置をさらに指定してもよい。たとえば、Zは、第1の結果値Z0および第2の結果値Z1の連結を表す32ビット値であってもよい。結果値Zは、各動作ステージ内に異なる数の動作モジュール(たとえば、M≠2である場合)を含む実施形態で、より多くの、またはより少ない、構成部分を成す結果値を含んでもよいことを理解されたい。
図示するように、第1のオペランド値X0および第1の符号関数S0を第1の動作モジュール408Aに提供し、かつ第2のオペランド値X1および第2の符号関数S1を第2の動作モジュール410Aに提供するように、選択モジュール406Aを構成してもよい。
第1のオペランド値X0に第1の符号関数S0を適用して、第1の結果値Z0を提供するように、動作モジュール408Aを構成してもよい。たとえば、MAMINSUM関数の動作モジュール408Cに関して上記で論じた、符号関数を適用するための手順のどちらかに従って、X0に第1の符号関数S0を適用してもよい。同様に、第2のオペランド値X1に第2の符号関数S1を適用して、第2の結果値Z1を提供するように、動作モジュール410Aを構成してもよい。
第1および第2の結果値Z0およびZ1を、レジスタ412Aに記憶してもよい、または代わりに、(たとえば、選択モジュール414を介して)メモリ出力306に、もしくは隣接するDMRなどの別のメモリ機器に直接、記憶してもよい。
したがって、第1のオペランド値X0に第1の符号関数S0を適用し、かつ第2のオペランド値X1に第2の符号関数S1を適用するように、第1の動作ステージ404Aを構成してもよい。これを、たとえば第1のクロックサイクル中に遂行してもよい。
いくつかの実施形態では、メモリ出力306に第1および第2の結果値Z0およびZ1を記憶してもよく、隣接するDMR、または別の処理要素のメモリ入力レジスタなどの、別のメモリ機器に、結合した結果値Zを出力してもよい。図示するように、アレイLLR[]のインデックス「l」に結果値Zを記憶する。その結果、処理要素300は、「l」のインデックスを単に増分することにより、連続したメモリ位置に複数組の出力値を記憶してもよい。
図7−MADDSIGN命令のために構成された実行ユニット
図7は、いくつかの実施形態による、MADDSIGN命令を実行するように構成された実行ユニット302の一例を示す。MADDSIGN命令を使用して、実行ユニット302は、Lクロックサイクルの待ち時間、およびクロックサイクルあたりM*N/(N+L−1)インスタンスのスループットで、式2(または式4)のM*Nインスタンスを実装してもよい。図示するように、二重データ−処理経路(M=2)を用いてMADDSIGN命令を実装し、その結果、実行ユニット302は、2クロックサイクルの待ち時間、およびクロックサイクルあたり2N/(N+1)インスタンスのスループットで、式2の2Nインスタンスを実装してもよい。二重データ−処理経路の実施形態は、代表的でしかないこと、および他の実施形態は、式2のより多くの、またはより少ないインスタンス(たとえば、M≠2である場合)を実装するために、各動作ステージ内により多くの、またはより少ない動作モジュールを含んでもよいことを理解されたい。従来のRISCアーキテクチャでは、MADDSIGN命令はなく、4クロックサイクルの待ち時間、およびクロックサイクルあたり1/4インスタンスのスループットで類似の関数を遂行する場合があることを留意されてもよい。処理要素300は、MADDSIGN命令を受信したことに応答して、図7に示すように実行ユニット302を構成してもよい。
MADDSIGN命令の関数は、MSIGN命令の関数の後にM−幅の(たとえば、二重の)加算関数が続くと考えてもよい。MSIGN関数とM−幅の加算関数を単一命令に組み合わせることは、たとえば、発行される命令の数、および遂行されるメモリアクセスの数を低減することにより、システム性能の改善をもたらす場合がある。たとえば、MADDSIGNにより、MSIGN関数の出力を、遠隔メモリの中に書き込み、次いで、加算のために別個の処理エンティティに誘導するのではなく、内部レジスタ(たとえば、412A)に記憶し、後続の動作ステージ(たとえば、動作ステージ404B)に直接パイプライン化して、加算関数を遂行することができるようになる。
MADDSIGN命令は、MSIGN関数の均等物とM−幅の加算関数の両方を遂行するので、MSIGN命令に比べて、追加オペランドを指定してもよい。具体的には、MADDSIGN命令は、第1の入力オペランド(X)、第2の入力オペランド(Y)、および符号オペランド(S)を指定してもよい。あるいは、MADDSIGN命令は、上記で論じたように、複数組の第1の入力オペランド、複数組の第2の入力オペランド、および複数組の符号オペランドを指定してもよい。たとえば、各入力オペランドXは、第1のオペランド値X0と第2のオペランド値X1の連結を表す32ビット値であってもよい。各入力オペランドYは、第3のオペランド値Y0と第4のオペランド値Y1の連結を表す32ビット値であってもよい。第1、第2、第3、および第4のオペランド値の各々は、16ビット符号付整数値であってもよい。各符号オペランドSは、第1の符号関数S0と第2の符号関数S1の連結を表す値であってもよい。各符号関数を、1ビット値、2ビット値、16ビット値により表してもよい、または上記で論じたように、いくつかの他の形式で表してもよい。各動作ステージ内により多くの、またはより少ない動作モジュール(たとえば、M≠2である場合)を含む実施形態では、第1の入力オペランドXおよび第2の入力オペランドYの各々は、より多くの、またはより少ないオペランド値を含んでもよく、かつ符号オペランドSは、より多くの、またはより少ない符号関数を含んでもよいことを理解されたい。第1の入力オペランドX、第2の入力オペランドY、および符号オペランドSを、直接指定してもよい、または第1の入力オペランドX、第2の入力オペランドY、および符号オペランドSが配置されるそれぞれのメモリ位置を指定することにより指定してもよい。
図示するように、第1の入力オペランドXを、メモリ内のアレイLLR[]のインデックス「i」に配置されるとして指定し、第2の入力オペランドYを、アレイLLR[]のインデックス「j」に配置されるとして指定し、符号オペランドSを、メモリ内のアレイS[]のインデックス「k」に配置されるとして指定する。そのような実装では、処理要素300は、「i」、「j」、および「k」のインデックスを単に増分することにより、メモリ内に連続して記憶された1組のX値、メモリ内に連続して記憶された1組のY値、およびメモリ内に連続して記憶された1組のS値の始めから終わりまで順序付けしてもよい。たとえば、処理要素300は、たとえば各クロックサイクルで、それぞれの第1の入力オペランドX、それぞれの第2の入力オペランドY、およびそれぞれの符号オペランドSを受信するために、「i」、「j」、および「k」のインデックスを増分してもよい。MADDSIGN命令は、結果値(Z)を記憶してもよいメモリ位置をさらに指定してもよい。たとえば、Zは、第1の結果値Z0および第2の結果値Z1の連結を表す32ビット値であってもよい。結果値Zは、各動作ステージ内に異なる数の動作モジュール(たとえば、M≠2である場合)を含む実施形態で、より多くの、またはより少ない構成成分を成す結果値を含んでもよいことを理解されたい。
図示するように、第1の動作モジュール408Aに第1のオペランド値X0および第1の符号関数S0を提供し、かつ第2の動作モジュール410Aに第2のオペランド値X1および第2の符号関数S1を提供するように、選択モジュール406Aを構成してもよい。第3のオペランド値Y0および第4のオペランド値Y1をレジスタ412Aに直接誘導し、動作モジュールをバイパスするように、選択モジュール406Aをさらに構成してもよい。
第1のオペランド値X0に第1の符号関数S0を適用することにより第1の符号付値sx0を決定するように、動作モジュール408Aを構成してもよい。たとえば、MAMINSUM関数の動作モジュール408Cに関して上記で論じた、符号関数を提供するための手順のどちらかに従って、X0に第1の符号関数S0を適用してもよい。第2のオペランド値X1に第2の符号関数S1を適用することにより、第2の符号付値sx1を決定するように、動作モジュール410Aを同様に構成してもよい。第1および第2の符号付値sx0およびsx1を、レジスタ412Aに記憶してもよい。
したがって、第1のオペランド値X0に第1の符号関数S0を適用することにより第1の符号付値sx0を決定し、かつ第2のオペランド値X1に第2の符号関数S1を適用することにより第2の符号付値sx1を決定するように、第1の動作ステージ404Aを構成してもよい。これを、たとえば第1のクロックサイクル中に遂行してもよい。
図示するように、第1の動作モジュール408Bに第1の符号付値sx0および第3のオペランド値Y0を提供し、かつ第2の動作モジュール410Bに第2の符号付値sx1および第4のオペランド値Y1を提供するように、選択モジュール406Bを構成してもよい。
第1の符号付値sx0および第3のオペランド値Y0に対して加算関数を遂行して、第1の結果値Z0を作り出すように、動作モジュール408Bを構成してもよい。たとえば、加算関数は、16ビット符号付整数加算関数(Y0+sx0)を含んでもよい。いくつかのシナリオでは、加算関数は、式2に関して上記で論じたような飽和関数を含んでもよく、その結果、動作モジュール408Bは、関数sat(Y0+sx0)を実装する。最大および最初の飽和値を、MADDSIGN命令により提供してもよい、または前もって提供してもよい、または変更できないようにコードしてもよい。
第2の符号付値sx1および第4のオペランド値Y1に対して加算関数を遂行して、第2の結果値Z1を作り出すように、動作モジュール410Bを同様に構成してもよい。たとえば、加算関数は、16ビット符号付整数加算関数(Y0+sx0)、または飽和加算関数sat(Y0+sx0)を含んでもよい。
第1および第2の結果値Z0およびZ1を、レジスタ412Bに記憶してもよい、または代わりに、(たとえば、選択モジュール414を介して)メモリ出力306に、もしくは隣接するDMRなどの別のメモリ機器に直接、記憶してもよい。
したがって、第3のオペランド値Y0に第1の符号付値sx0を加算し、かつ第4のオペランド値Y1に第2の符号付値sx1を加算するように、第2の動作ステージ404Bを構成してもよい。これを、たとえば第2のクロックサイクル中に遂行してもよい。
いくつかの実施形態では、第1および第2の出力値Z0およびZ1を、メモリ出力306に記憶してもよく、結合した結果値Zを、隣接するDMR、または別の処理要素のメモリ入力レジスタなどの、別のメモリ機器に出力してもよい。図示するように、アレイLLR[]のインデックス「l」に結果値Zを記憶する。その結果、処理要素300は、「l」のインデックスを単に増分することにより、連続したメモリ位置に複数組の結果値を記憶してもよい。
図8−MADDSIGN命令のために構成された実行ユニット
図8は、いくつかの実施形態による、1つまたは複数のビットパック型レジスタ(bit−packed register、BPR)を使用してMADDSIGN命令を実行するように構成された実行ユニット302の一例を示す。動作ステージ404Aおよび404Bの各々を、図7に示すのと同じ手法で構成してもよい。しかしながら、いくつかの実施形態では、処理要素300は、一度に2つの入力値(たとえば、クロックサイクルあたり2つの32ビット入力値)だけを受信することをサポートしてもよい。これは、MADDSIGN命令が2つの入力オペランド(たとえば、2つの32ビット入力値)に加えて符号オペランドを利用するので、図7に示すようなMADDSIGN命令の動作を妨げる場合がある。
この制約を克服するために、メモリ入力304Bは、1つまたは複数の符号オペランドを事前にロードしてもよい1つまたは複数のBPRを含んでもよい。たとえば、上記で論じたように、MADDSIGN命令は、複数組の第1の入力オペランド、複数組の第2の入力オペランド、および複数組の符号オペランドを指定してもよい。具体的には、MADDSIGN命令は、これらの複数組の各々が始まる、メモリ内の1つまたは複数のアレイ内の、それぞれの開始アドレスを指定してもよい。さらに、上記で論じたように、MADDSIGN命令は、複数組の各々のサイズを指定してもよい(たとえば、1つまたは複数の組内のオペランド数を明示的に指定することによる、または関数を繰り返す回数、および/もしくは1つまたは複数の組の終了メモリ位置を指定することによる)。
MADDSIGN命令を受信したことに応答して、処理要素300は、1つまたは複数のBPRの中に複数組の符号オペランドをロードしてもよい。あるいは、処理要素は、たとえば、BPRのサイズ、入力ラインのサイズ、および/または符号オペランドのサイズにより制約されるとき、1つまたは複数のBPRの中に複数組の符号オペランドのサブセットをロードしてもよい。いくつかの実施形態では、この事前ロードを単一クロックサイクルで行ってもよい。たとえば、メモリ入力304Bが32ビットBPRを含み、かつ各符号オペランドSが2ビットオペランド(たとえば、2つの1ビット符号関数S0とS1の連結)である場合、単一クロックサイクルで、第1の16対の入力オペランドに対応する16個の符号オペランドをBPRにロードしてもよい。たとえば、MADDSIGN命令により複数組の符号オペランドに関して指定されたメモリ位置に配置された(またはそこから始まる)32ビットをBPRにロードしてもよい。したがって、処理要素300は、任意の外部供給源から符号オペランドSをさらに受信することなく、MADDSIGN関数を16回連続して遂行してもよい。したがって、処理要素300が、たとえクロックサイクルあたり2つの入力オペランドだけを受信してもよいとしても、たとえば連続するクロックサイクルの間に、MADDSIGN関数を16回遂行してもよい。
MADDSIGN関数の動作中、BPRは、選択モジュール406Aに符号オペランドSを提供してもよい。たとえば、符号オペランドSが2ビット値である場合、BPRは、選択モジュール406Aに符号オペランドSの最下位の2ビットを提供してもよい。次のクロックサイクルで、BPRは、BPRの内容を右シフトしてもよく、その結果、これまでの最下位の2ビットは削除され、次の2ビットが次の符号オペランドSとして提供される。これは、事前にロードした符号オペランドSの値の各々を使用してしまうまで、たとえば各クロックサイクルで繰り返されてもよい。そのとき、MADDSIGN命令に従って、追加のMADDSIGN命令を遂行すべき場合、BPRが複数組の符号オペランドSの次のサブセットをロードする間、動作ステージ404の動作は一時停止してもよい。複数組の符号オペランド全体(ならびに複数組の第1の入力オペランドおよび第2の入力オペランド)を使用してしまうまで、このサイクルを繰り返してもよい。
本開示の実施形態は、さまざまな形態のいずれかで実現されてよい。たとえば、いくつかの実施形態では、本発明は、コンピュータ実装方法、コンピュータ可読記憶媒体、またはコンピュータシステムとして実現されてもよい。
いくつかの実施形態では、非一時的コンピュータ可読記憶媒体は、プログラム命令および/またはデータを記憶するように構成されてもよく、この場合、プログラム命令は、コンピュータシステムにより実行された場合、方法を、たとえば、本明細書に記述する方法の実施形態のいずれか、または本明細書に記述する方法の実施形態の任意の組合せ、または本明細書に記述する方法の実施形態のいずれかからなる任意のサブセット、またはそのようなサブセットの任意の組合せを、コンピュータシステムに遂行させる。
いくつかの実施形態では、コンピューティング機器は、プロセッサ(または1組のプロセッサ)および記憶媒体を含むように構成されてもよく、この場合、記憶媒体は、プログラム命令を記憶し、この場合、プロセッサは、記憶媒体からプログラム命令を読み出し、実行するように構成され、この場合、プログラム命令は、本明細書に記述するさまざまな方法の実施形態のいずれか(または本明細書に記述する方法の実施形態の任意の組合せ、または本明細書に記述する方法の実施形態のいずれかからなる任意のサブセット、またはそのようなサブセットの任意の組合せ)を実装するように実行可能である。機器は、さまざまな形態のいずれかで実現されてもよい。
具体的な実施形態について上述したが、これらの実施形態は、特定の特徴に関して、単一の実施形態だけについて記述している場合でさえ、本開示の範囲を限定することを意図するものではない。本開示で提供する特徴の例は、特に指定のない限り、制限的ではなく、例示的であることが意図される。上記の記述は、本開示の恩恵を受ける当業者に明らかなように、そのような代替形態、修正形態、および均等物を包含することが意図される。
本開示の範囲は、(明示的に、または暗示的に)本明細書で開示する任意の特徴もしくは特徴の組合せ、またはそれらの任意の一般化を、それが本明細書で対処する問題のいずれか、もしくはすべてを軽減してもしなくても含む。したがって、本出願(またはその優先権を主張する出願)の手続き中に、任意のそのような特徴の組合せに対して、新しい請求項を考案してもよい。詳細には、添付の特許請求の範囲を参照すると、従属クレームからの特徴は、独立クレームの特徴と組み合わせられてもよく、それぞれの独立クレームからの特徴は、添付の特許請求の範囲に列挙された具体的組合せだけではなく、任意の適切な手法で組み合わせられてもよい。
本開示の実施形態は、さらに、以下の条項を鑑みて説明できる。
条項1.
処理要素であって、
第1の入力オペランドおよび第2の入力オペランドを指定する第1の命令を実行するように構成された二重データ−処理経路を備え、前記第1の命令の実行では、前記処理要素は、
前記第1の入力オペランドの絶対値および符号関数を決定し、
前記第2の入力オペランドの絶対値および符号関数を決定し、
前記第1の入力オペランドの前記絶対値および前記第2の入力オペランドの前記絶対値の最小値を備える最小の大きさ値を決定し、
前記第1の入力オペランドの前記符号関数および前記第2の入力オペランドの前記符号関数の積を備える最終符号関数を決定し、
前記最小の大きさ値に前記最終符号関数を適用する
ように構成され、前記最小の大きさ値に前記最終符号関数を適用した結果は、前記第1の入力オペランドおよび前記第2の入力オペランドに関する結果値を構成する処理要素。
条項2.
前記第1の命令は、前記第1の入力オペランドが配置されたメモリ位置を指定することにより前記第1の入力オペランドを指定し、前記第2の入力オペランドが配置されたメモリ位置を指定することにより前記第2の入力オペランドを指定する、条項1に記載の処理要素。
条項3.
前記第1の命令は、複数組の第1の入力オペランドおよび複数組の第2の入力オペランドをさらに指定し、前記第1の命令の実行では、前記処理要素は、前記複数組の第1の入力オペランドおよび前記複数組の第2の入力オペランドに関する複数組の結果値を作り出すように構成される、条項1に記載の処理要素。
条項4.
前記二重データ−処理経路は、第1の二重データ−処理経路を備え、前記処理要素は、
前記第1の二重データ−処理経路と同じ手法で構成された第2の二重データ−処理経路
をさらに備える、条項1に記載の処理要素。
条項5.
処理要素であって、
複数のパイプライン化動作ステージであって、各処理ステージは複数のデータ−処理動作を遂行するようにそれぞれ構成可能な複数のパイプライン化動作ステージを備え、
前記処理要素は、第1の命令を受信したことに応答して、
第1の入力値の絶対値および符号関数を決定し、かつ第2の入力値の絶対値および符号関数を決定するように第1の動作ステージを構成し、
前記第1の入力値の前記絶対値と前記第2の入力値の前記絶対値の最小値を決定し、かつ前記第1の入力値の前記符号関数と前記第2の入力値の前記符号関数の積を備える最終符号関数を決定するように第2の動作ステージを構成し、
前記第1の入力値の前記絶対値と前記第2の入力値の前記絶対値の前記最小値に前記最終符号関数を適用するように第3の動作ステージを構成する
ように構成される処理要素。
条項6.
第1のクロックサイクル中に、前記第1の入力値の前記絶対値および前記符号関数を決定し、かつ前記第2の入力値の前記絶対値および前記符号関数を決定するように前記第1の動作ステージを構成し、
第2のクロックサイクル中に、前記第1の入力値の前記絶対値と前記第2の入力値の前記絶対値の前記最小値を決定し、かつ前記最終符号関数を決定するように前記第2の動作ステージを構成し、
第3のクロックサイクル中に、前記第1の入力値の前記絶対値と前記第2の入力値の前記絶対値の前記最小値に前記最終符号関数を適用するように前記第3の動作ステージを構成する、
条項5に記載の処理要素。
条項7.
前記第1の命令を受信したことに応答して、複数対の入力値を順次処理するようにさらに構成され、前記第1の入力値および前記第2の入力値は、複数対の入力値の第1対を構成し、
複数の連続するクロックサイクルの各クロックサイクル中に、それぞれの対の入力値の各入力値の絶対値および符号を決定するように前記第1の動作ステージを構成する、
条項6に記載の処理要素。
条項8.
第2の異なる命令を受信したことに応答して、前記第1の命令を受信したことに応答して構成されるデータ−処理動作と異なる複数のデータ−処理動作を遂行するように少なくとも1つの動作ステージを構成するように、さらに構成される、条項5に記載の処理要素。
条項9.
前記複数のパイプライン化動作ステージは、第1の複数のパイプライン化動作ステージを備え、前記処理要素は、
前記第1の複数のパイプライン化動作ステージと同じ手法で構成された第2の複数のパイプライン化動作ステージ
をさらに備える、条項5に記載の処理要素。
条項10.
動作ステージを構成するステップは、前記動作ステージにより遂行すべき複数のデータ−処理動作を選択するステップと、前記選択したデータ−処理動作への入力が提供されるレジスタを選択するステップとを備える、条項5に記載の処理要素。
条項11.
処理要素であって、
第1のオペランド値および第2のオペランド値を含む第1の入力オペランド、ならびに第3のオペランド値および第4のオペランド値を含む第2の入力オペランドを指定する第1の命令を実行するように構成された二重データ−処理経路を備え、前記第1の命令の実行では、前記処理要素は、
前記第1のオペランド値に第1の符号関数を適用することにより、第1の符号付値を決定し、
前記第2のオペランド値に第2の符号関数を適用することにより、第2の符号付値を決定し、
前記第3のオペランド値に前記第1の符号付値を加算し、
前記第4のオペランド値に前記第2の符号付値を加算する
ように構成される処理要素。
条項12.
前記第1の命令は、前記第1の符号関数および前記第2の符号関数を指定する、条項11に記載の処理要素。
条項13.
前記第1の命令は、前記第1の入力オペランドが配置されたメモリ位置を指定することにより前記第1の入力オペランドを指定し、前記第2の入力オペランドが配置されたメモリ位置を指定することにより前記第2の入力オペランドを指定する、条項11に記載の処理要素。
条項14.
前記第1の命令は、複数組の第1の入力オペランドおよび複数組の第2の入力オペランドをさらに指定し、前記第1の命令の実行では、前記処理要素は、前記複数組の第1の入力オペランドおよび前記複数組の第2の入力オペランドに関する複数組の結果値を作り出すように構成される、条項11に記載の処理要素。
条項15.
ビットパック型レジスタをさらに備え、前記第1の命令の実行では、前記処理要素は、
前記ビットパック型レジスタ内に、前記複数組の第1の入力オペランドの複数組の第1の入力オペランド値に対応する複数組の第1の符号関数を記憶し、
前記ビットパック型レジスタ内に、前記複数組の第1の入力オペランドの複数組の第2の入力オペランド値に対応する複数組の第2の符号関数を記憶する
ように構成される、条項14に記載の処理要素。
条項16.
前記二重データ−処理経路は、第1の二重データ−処理経路を備え、前記処理要素は、
前記第1の二重データ−処理経路と同じ手法で構成された第2の二重データ−処理経路
をさらに備える、条項14に記載の処理要素。
条項17.
処理要素であって、
第1のオペランド値および第2のオペランド値を含む入力オペランド、ならびに第1の符号関数および第2の符号関数を含む符号オペランドを指定する第1の命令を実行するように構成された二重データ−処理経路を備え、前記第1の命令の実行では、前記処理要素は、
前記第1のオペランド値に前記第1の符号関数を適用し、
前記第2のオペランド値に前記第2の符号関数を適用する
ように構成される処理要素。
条項18.
前記第1の命令は、前記入力オペランドが配置されたメモリ位置を指定することにより前記入力オペランドを指定し、前記符号オペランドが配置されたメモリ位置を指定することにより前記符号オペランドを指定する、条項17に記載の処理要素。
条項19.
前記第1の命令は、複数組の入力オペランドおよび複数組の符号オペランドをさらに指定し、前記第1の命令の実行では、前記処理要素は、前記複数組の入力オペランドおよび前記複数組の符号オペランドに関する複数組の結果値を作り出すように構成される、条項17に記載の処理要素。
条項20.
前記二重データ−処理経路は、第1の二重データ−処理経路を備え、前記処理要素は、
前記第1の二重データ−処理経路と同じ手法で構成された第2の二重データ−処理経路
をさらに備える、条項17に記載の処理要素。
また、以下の段落に従って他の実施形態を実装してもよい。
処理要素であって、
複数のパイプライン化動作ステージであって、各動作ステージは複数のデータ−処理動作を遂行するように構成可能な複数のパイプライン化動作ステージを備え、
処理要素は、第1の命令を受信したことに応答して、
第1のオペランド値および第2のオペランド値を備える第1の入力オペランドを受信し、
第3のオペランド値および第4のオペランド値を備える第2の入力オペランドを受信し、
第1のオペランド値に第1の符号関数を適用することにより第1の符号付値を決定し、かつ第2のオペランド値に第2の符号関数を適用することにより第2の符号付値を決定するように構成されるように第1の動作ステージを構成し、
第3のオペランド値に第1の符号付値を加算し、かつ第4のオペランド値に第2の符号付値を加算するように第2の動作ステージを構成する
ように構成された処理要素。
上述の処理要素では、
第1のクロックサイクル中に、第1の符号付値および第2の符号付値を決定するように第1の動作ステージを構成し、
第2のクロックサイクル中に、第3のオペランド値に第1の符号付値を加算し、かつ第4のオペランド値に第2の符号付値を加算するように第2の動作ステージを構成する。
第1の命令を受信したことに応答して、複数対の入力オペランドを順次処理するように上述の処理要素をさらに構成し、第1の入力オペランドおよび第2の入力オペランドは、複数対の入力オペランドの第1対を構成し、
複数の連続するクロックサイクルの各クロックサイクル中に、それぞれの対の入力オペランドに基づき、それぞれの第1の符号付値およびそれぞれの第2の符号付値を得るように第1の動作ステージを構成する。
第2の異なる命令を受信したことに応答して、第1の命令を受信したことに応答して構成されるデータ−処理動作と異なる複数のデータ−処理動作を遂行するように少なくとも1つの動作ステージを構成するように、上述の処理要素をさらに構成してもよい。
上述の処理要素では、複数のパイプライン化動作ステージは、第1の複数のパイプライン化動作ステージを備え、処理要素は、
第1の複数のパイプライン化動作ステージと同じ手法で構成された第2の複数のパイプライン化動作ステージ
をさらに備える。
上述の処理要素では、動作ステージを構成するステップは、動作ステージにより遂行すべき複数のデータ−処理動作を選択するステップと、選択したデータ−処理動作への入力が提供されるレジスタを選択するステップとを備える。
上述の処理要素では、第1の処理要素は、第1および第2の受信した符号関数を備える複数の符号関数を記憶するビットパック型レジスタをさらに備え、処理要素は、第1のクロックサイクルより前に、ビットパック型レジスタの中に複数の符号関数をロードするように構成される。

Claims (10)

  1. 処理要素であって、
    第1の入力オペランドおよび第2の入力オペランドを指定する第1の命令を実行するように構成された二重データ−処理経路を備え、前記第1の命令の実行では、前記処理要素は、
    前記第1の入力オペランドの絶対値および符号関数を決定し、
    前記第2の入力オペランドの絶対値および符号関数を決定し、
    前記第1の入力オペランドの前記絶対値および前記第2の入力オペランドの前記絶対値の最小値を備える最小の大きさ値を決定し、
    前記第1の入力オペランドの前記符号関数および前記第2の入力オペランドの前記符号関数の積を備える最終符号関数を決定し、
    前記最小の大きさ値に前記最終符号関数を適用する
    ように構成され、前記最小の大きさ値に前記最終符号関数を適用した結果は、前記第1の入力オペランドおよび前記第2の入力オペランドに関する結果値を構成する処理要素。
  2. 前記第1の命令は、前記第1の入力オペランドが配置されたメモリ位置を指定することにより前記第1の入力オペランドを指定し、前記第2の入力オペランドが配置されたメモリ位置を指定することにより前記第2の入力オペランドを指定する、請求項1に記載の処理要素。
  3. 前記第1の命令は、複数組の第1の入力オペランドおよび複数組の第2の入力オペランドをさらに指定し、前記第1の命令の実行では、前記処理要素は、前記複数組の第1の入力オペランドおよび前記複数組の第2の入力オペランドに関する複数組の結果値を作り出すように構成される、請求項1に記載の処理要素。
  4. 前記二重データ−処理経路は、第1の二重データ−処理経路であり、前記処理要素は、
    前記第1の二重データ−処理経路と同じ手法で構成された第2の二重データ−処理経路
    をさらに備える、請求項1に記載の処理要素。
  5. 処理要素であって、
    複数のパイプライン化動作ステージであって、各動作ステージは複数のデータ−処理動作を遂行するようにそれぞれ構成可能な複数のパイプライン化動作ステージを備え、
    前記処理要素は、第1の命令を受信したことに応答して、
    第1の入力値の絶対値および符号関数を決定し、かつ第2の入力値の絶対値および符号関数を決定するように第1の動作ステージを構成し、
    前記第1の入力値の前記絶対値と前記第2の入力値の前記絶対値の最小値を決定し、かつ前記第1の入力値の前記符号関数と前記第2の入力値の前記符号関数の積を備える最終符号関数を決定するように第2の動作ステージを構成し、
    前記第1の入力値の前記絶対値と前記第2の入力値の前記絶対値の前記最小値に前記最終符号関数を適用するように第3の動作ステージを構成する
    ように構成される処理要素。
  6. 第1のクロックサイクル中に、前記第1の入力値の前記絶対値および前記符号関数を決定し、かつ前記第2の入力値の前記絶対値および前記符号関数を決定するように前記第1の動作ステージを構成し、
    第2のクロックサイクル中に、前記第1の入力値の前記絶対値と前記第2の入力値の前記絶対値の前記最小値を決定し、かつ前記最終符号関数を決定するように前記第2の動作ステージを構成し、
    第3のクロックサイクル中に、前記第1の入力値の前記絶対値と前記第2の入力値の前記絶対値の前記最小値に前記最終符号関数を適用するように前記第3の動作ステージを構成する、
    請求項5に記載の処理要素。
  7. 前記第1の命令を受信したことに応答して、複数対の入力値を順次処理するようにさらに構成され、前記第1の入力値および前記第2の入力値は、複数対の入力値の第1対を構成し、
    複数の連続するクロックサイクルの各クロックサイクル中に、それぞれの対の入力値の各入力値の絶対値および符号関数を決定するように前記第1の動作ステージを構成する、
    請求項6に記載の処理要素。
  8. 第2の異なる命令を受信したことに応答して、前記第1の命令を受信したことに応答して構成されるデータ−処理動作と異なる複数のデータ−処理動作を遂行するように少なくとも1つの動作ステージを構成するように、さらに構成される、請求項5に記載の処理要素。
  9. 前記複数のパイプライン化動作ステージは、第1の複数のパイプライン化動作ステージであり、前記処理要素は、
    前記第1の複数のパイプライン化動作ステージと同じ手法で構成された第2の複数のパイプライン化動作ステージ
    をさらに備える、請求項5に記載の処理要素。
  10. 動作ステージを構成するに際しては、前記動作ステージにより遂行すべき複数のデータ−処理動作を選択するステップと、前記選択したデータ−処理動作への入力が提供されるレジスタを選択するステップとを実行する、請求項5に記載の処理要素。
JP2018534109A 2015-12-28 2016-12-27 Fecの符号化および復号を加速するプロセッサ命令 Active JP6933648B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US201562271578P 2015-12-28 2015-12-28
US62/271,578 2015-12-28
PCT/US2016/068692 WO2017117116A1 (en) 2015-12-28 2016-12-27 Processor Instructions to Accelerate FEC Encoding and Decoding

Publications (2)

Publication Number Publication Date
JP2019508785A JP2019508785A (ja) 2019-03-28
JP6933648B2 true JP6933648B2 (ja) 2021-09-08

Family

ID=57822083

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2018534109A Active JP6933648B2 (ja) 2015-12-28 2016-12-27 Fecの符号化および復号を加速するプロセッサ命令

Country Status (5)

Country Link
US (2) US10691451B2 (ja)
EP (2) EP3686735B1 (ja)
JP (1) JP6933648B2 (ja)
CN (1) CN108701021B (ja)
WO (1) WO2017117116A1 (ja)

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4589067A (en) * 1983-05-27 1986-05-13 Analogic Corporation Full floating point vector processor with dynamically configurable multifunction pipelined ALU
JP3672076B2 (ja) * 1999-09-22 2005-07-13 松下電器産業株式会社 演算器および演算方法およびプロセッサ
US6922716B2 (en) * 2001-07-13 2005-07-26 Motorola, Inc. Method and apparatus for vector processing
US7937559B1 (en) * 2002-05-13 2011-05-03 Tensilica, Inc. System and method for generating a configurable processor supporting a user-defined plurality of instruction sizes
KR100891782B1 (ko) * 2002-06-11 2009-04-07 삼성전자주식회사 고속 데이터 전송 시스템에서 순방향 오류 정정 장치 및방법
US7415594B2 (en) 2002-06-26 2008-08-19 Coherent Logix, Incorporated Processing system with interspersed stall propagating processors and communication elements
US20080281897A1 (en) * 2007-05-07 2008-11-13 Messinger Daaven S Universal execution unit
US20090113174A1 (en) * 2007-10-31 2009-04-30 Texas Instruments Incorporated Sign Operation Instructions and Circuitry
EP2366144B1 (en) * 2008-10-15 2015-09-30 Hyperion Core, Inc. Sequential processor comprising an alu array
JP2011028543A (ja) * 2009-07-27 2011-02-10 Renesas Electronics Corp 情報処理システム及びその情報処理方法
CN103154925B (zh) 2010-10-15 2016-08-24 相干逻辑公司 多处理器系统中的通信禁用
WO2012093288A1 (en) * 2011-01-03 2012-07-12 Freescale Semiconductor, Inc. Integrated circuit device and method for performing conditional negation of data
US9176927B2 (en) * 2011-11-08 2015-11-03 The Royal Institution For The Advancement Of Learning/Mcgill University Methods and systems for decoding polar codes
CN104903855B (zh) * 2012-11-06 2018-09-18 相干逻辑公司 用于配置多处理器阵列的方法和设备以及开发系统
JP2016526220A (ja) 2013-05-24 2016-09-01 コーヒレント・ロジックス・インコーポレーテッド プログラム可能な最適化を有するメモリネットワークプロセッサ
EP3033862A1 (en) * 2013-08-16 2016-06-22 Origin Wireless, Inc. Time-reversal wireless systems having asymmetric architecture

Also Published As

Publication number Publication date
US20170185399A1 (en) 2017-06-29
WO2017117116A1 (en) 2017-07-06
CN108701021B (zh) 2023-06-09
EP3398053B1 (en) 2020-03-25
US11327753B2 (en) 2022-05-10
EP3398053A1 (en) 2018-11-07
US10691451B2 (en) 2020-06-23
JP2019508785A (ja) 2019-03-28
US20200319880A1 (en) 2020-10-08
CN108701021A (zh) 2018-10-23
EP3686735A1 (en) 2020-07-29
EP3686735B1 (en) 2022-05-04

Similar Documents

Publication Publication Date Title
US10545865B2 (en) Systems and methods for implementing low-latency lookup circuits using sparse hash functions
US20160218750A1 (en) Parity check code encoder
US20090300336A1 (en) Microprocessor with highly configurable pipeline and executional unit internal hierarchal structures, optimizable for different types of computational functions
US9413390B1 (en) High throughput low-density parity-check (LDPC) decoder via rescheduling
JP2016526220A (ja) プログラム可能な最適化を有するメモリネットワークプロセッサ
Giard et al. Low-latency software polar decoders
Andrade et al. Design space exploration of LDPC decoders using high-level synthesis
US7895417B2 (en) Select-and-insert instruction within data processing systems
Giard et al. High-speed decoders for polar codes
Hassan et al. Performance evaluation of dynamic partial reconfiguration techniques for software defined radio implementation on FPGA
JP5821332B2 (ja) リコンフィグ可能な集積回路装置
JP6933648B2 (ja) Fecの符号化および復号を加速するプロセッサ命令
CN102201817B (zh) 基于存储器折叠架构优化的低功耗ldpc译码器
US11704535B1 (en) Hardware architecture for a neural network accelerator
US10644725B1 (en) Interleaved data block processing in low-density parity-check (LDPC) encoder and decoder
US10387155B2 (en) Controlling register bank access between program and dedicated processors in a processing system
Kong Low Density Parity Check Encoder and Decoder on SiLago Coarse Grain Reconfigurable Architecture
Gal et al. GPU-like on-chip system for decoding LDPC codes
Lapotre et al. Stopping-free dynamic configuration of a multi-ASIP turbo decoder
Lu Implementing a GPU-Assisted LDPC Decoder for 5G New Radio
Maier et al. Implementation of decoders for symmetric low density parity check codes on parallel computation platforms using OpenCL
Sani et al. Embedding polynomial time memory mapping and routing algorithms on-chip to design configurable decoder architectures
US9916108B2 (en) Efficient loading and storing of data between memory and registers using a data structure for load and store addressing
Romani Hardware Acceleration of 5G LDPC using datacenter-class FPGAs
Wang et al. A Novel Parallel Viterbi Decoding Scheme for NoC‐Based Software‐Defined Radio System

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20191216

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20210120

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20210309

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20210608

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: 20210720

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20210819

R150 Certificate of patent or registration of utility model

Ref document number: 6933648

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150