JP7561125B2 - Aggregation of commands in a stream based on cache line address - Google Patents
Aggregation of commands in a stream based on cache line address Download PDFInfo
- Publication number
- JP7561125B2 JP7561125B2 JP2021530941A JP2021530941A JP7561125B2 JP 7561125 B2 JP7561125 B2 JP 7561125B2 JP 2021530941 A JP2021530941 A JP 2021530941A JP 2021530941 A JP2021530941 A JP 2021530941A JP 7561125 B2 JP7561125 B2 JP 7561125B2
- Authority
- JP
- Japan
- Prior art keywords
- command
- read
- address
- write
- read address
- 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
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0804—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with main memory updating
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0844—Multiple simultaneous or quasi-simultaneous cache accessing
- G06F12/0855—Overlapped cache accessing, e.g. pipeline
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0604—Improving or facilitating administration, e.g. storage management
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0608—Saving storage space on storage systems
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/061—Improving I/O performance
- G06F3/0613—Improving I/O performance in relation to throughput
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
- G06F3/064—Management of blocks
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0656—Data buffering arrangements
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0659—Command handling arrangements, e.g. command buffers, queues, command scheduling
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0673—Single storage device
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0673—Single storage device
- G06F3/0674—Disk device
- G06F3/0677—Optical disk device, e.g. CD-ROM, DVD
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/10—Providing a specific technical effect
- G06F2212/1041—Resource optimization
- G06F2212/1044—Space efficiency improvement
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/60—Details of cache memory
- G06F2212/608—Details relating to cache mapping
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2200/00—Indexing scheme for image data processing or generation, in general
- G06T2200/28—Indexing scheme for image data processing or generation, in general involving image processing hardware
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Image Generation (AREA)
- Advance Control (AREA)
- Executing Machine-Instructions (AREA)
Description
圧縮は、例えば、インタフェースを介して情報を送信するために必要とされる帯域幅の量を低減する等のように、1つの情報を表すバイト数を減らすために使用される。典型的な圧縮技術は、逆方向参照(backward reference)を使用して、現在のデータのチャンクを、前のデータのチャンクに対する変更を示す情報を加えた、前のデータ(又は、別の空間的若しくは時間的な位置のデータ)のチャンクに対するポインタとして表す。例えば、第1のアドレスでの3バイトのデータを、第2のアドレスでの3バイトのデータに1を加算する等の変更を示す情報を加えた、第1のアドレスから1キロバイト(kB)オフセットした第2のアドレスへのポインタとして当該3バイトのデータを表すことによって、圧縮することができる。データは、以前に受信したデータ(例えば、第2のアドレスでの3バイトのデータ)をコピーし、1を加算する等の示された変更を実行することによって、宛先で再構築される。 Compression is used to reduce the number of bytes that represent a piece of information, such as to reduce the amount of bandwidth required to send the information over an interface. A typical compression technique uses backward references to represent a current chunk of data as a pointer to a previous chunk of data (or data at another spatial or temporal location) plus information indicating the change to the previous chunk of data. For example, three bytes of data at a first address can be compressed by representing the three bytes of data at the second address as a pointer to a second address offset by one kilobyte (kB) from the first address plus information indicating the change, such as adding one to the three bytes of data at the second address. The data is reconstructed at the destination by copying the previously received data (e.g., the three bytes of data at the second address) and performing the indicated change, such as adding one.
本開示は、添付の図面を参照することによってより良好に理解することができ、その多くの特徴及び利点が当業者に明らかになる。異なる図面において同じ符号を使用する場合には、類似又は同一の要素を示す。 The present disclosure can be better understood, and its numerous features and advantages made apparent to those skilled in the art, by reference to the accompanying drawings. The use of the same reference numbers in different drawings indicates similar or identical elements.
圧縮によって、異なるデータのチャンクを圧縮するために使用されるコマンド又は演算間にシリアル依存関係(serial dependencies)が生じる。例えば、第1の最近のコマンドは、(場合によっては、第2のデータチャンクの変更を加えた)第2の以前のデータチャンクへのポインタを使用してデータチャンクを圧縮し、第2の以前のデータチャンクは、(場合によっては、第3のデータチャンクの対応する変更を加えた)より以前の第3のデータチャンクへのポインタとして第2のデータチャンクを表す、第2の以前のコマンドによって圧縮されている。シリアル依存関係の複数のチェーンは、いくつかのコマンドストリームでインタリーブされる。例えば、前の値(例えば、DWord、ショートワード又はバイト)を出力にコピーするための(高度に圧縮可能な)同じコマンドの列がある場合がある。この列は、以前の値のパターンに一致させることができ、そのパターンを複製して出力を生成するために使用される。しかしながら、ストリーム内の現在のコマンドのソースは、ストリーム内の前のコマンドの結果であるので、識別されたコマンドのパターンをシリアルに実行する必要がある。複製されたコマンドが次の出力を生成するために(例えば、インクリメントする値の列を生成するために)値(例えば、1)を追加する場合、コマンドの実行がさらに複雑になる。 Compression creates serial dependencies between commands or operations used to compress different chunks of data. For example, a first recent command compresses a chunk of data using a pointer to a second previous chunk of data (possibly with a modification of the second chunk of data), which is compressed by a second previous command that represents the second chunk of data as a pointer to a third, earlier chunk of data (possibly with a corresponding modification of the third chunk of data). Multiple chains of serial dependencies are interleaved in some command streams. For example, there may be a sequence of the same (highly compressible) command to copy previous values (e.g., DWords, short words, or bytes) to the output. This sequence can be matched to a pattern of previous values and used to replicate that pattern to generate the output. However, since the source of the current command in the stream is the result of a previous command in the stream, the identified pattern of commands must be executed serially. Command execution becomes more complicated when the replicated command adds a value (e.g., 1) to generate the next output (e.g., to generate a sequence of incrementing values).
解凍を実施するために使用されるコマンド等のコマンドのストリームによって実行される動作は、キャッシュラインに対応する32バイトのウィンドウ等の所定のアドレス範囲内で動作する単一のコマンドを生成するために結合される。パイプラインのフロントエンドで受信されたコマンドは、バッファに記憶される。新たなコマンドの各々がフロントエンドに到着すると、新たなコマンドは、フロントエンドで以前に受信されバッファに記憶されたコマンドと比較される。新たなコマンドが、以前に受信した何れかのコマンドと一致する場合に、新たなコマンド及び一致する以前のコマンドは、パイプラインのバックエンドへの最終的なディスパッチのために、バッファに記憶されている集約コマンドに結合される。いくつかの実施形態では、新たなコマンドと一致するコマンドとの比較は、新たなコマンド及び一致するコマンドの書き込みアドレス又は読み出しアドレスを比較することと、書き込みアドレス及び読み出しアドレスが32バイトウィンドウ等の同じアドレス範囲内にあるかどうかを判別することと、を含む。集約コマンドは、後に受信するコマンドと比較するためにバッファに記憶される。バッファは、シリアル依存コマンドのインタリーブされたチェーンに関連する集約コマンド等の複数の異なる集約コマンドを含むことができる。いくつかの実施形態では、新たなコマンド及び一致するコマンドを結合することは、集約コマンドによって操作されるアドレスを識別するために、新たなコマンド及び一致するコマンドに関連するアドレス範囲内のデータに適用されるマスクを定義することを含む。例えば、コマンドストリームが、現在のアドレスからの第1のオフセットでデータを操作する第1のコマンドと、現在のアドレスからの第2のオフセットでデータを操作する第2のコマンドと、を含む場合、集約コマンドは、第1のオフセット及び第2のオフセットに基づいて定義されるマスクを含む。 The operations performed by a stream of commands, such as those used to perform decompression, are combined to generate a single command that operates within a predefined address range, such as a 32-byte window corresponding to a cache line. Commands received at the front end of the pipeline are stored in a buffer. As each new command arrives at the front end, the new command is compared to commands previously received at the front end and stored in the buffer. If the new command matches any previously received commands, the new command and the matching previous command are combined into an aggregate command stored in the buffer for eventual dispatch to the back end of the pipeline. In some embodiments, comparing the new command to the matching command includes comparing the write or read addresses of the new command and the matching command and determining whether the write and read addresses are within the same address range, such as a 32-byte window. The aggregate command is stored in a buffer for comparison to subsequently received commands. The buffer can contain multiple different aggregate commands, such as aggregate commands associated with an interleaved chain of serial dependent commands. In some embodiments, combining the new command and the matching command includes defining a mask that is applied to data within an address range associated with the new command and the matching command to identify addresses operated on by the aggregate command. For example, if the command stream includes a first command that operates on data at a first offset from the current address and a second command that operates on data at a second offset from the current address, the aggregate command includes a mask that is defined based on the first offset and the second offset.
図1は、いくつかの実施形態による、ディスプレイ110への出力を意図した視覚的画像を生成するためのグラフィックスプロセッシングユニット(GPU)105を含む処理システム100のブロック図である。GPU105は、メモリ115に記憶された命令を実行する。メモリ115のいくつかの実施形態は、ダイナミックランダムアクセスメモリ(DRAM)として実装される。しかし、メモリ115は、スタティックランダムアクセスメモリ(SRAM)、不揮発性RAM等を含む他のタイプのメモリを使用して実装することもできる。図示した実施形態では、GPU105は、バス120を介してメモリ115と通信する。しかしながら、GPU105のいくつかの実施形態は、直接接続を介して、又は、他のバス、ブリッジ、スイッチ、ルータ等を介してメモリ115と通信する。GPU105は、実行された命令の結果等の情報をメモリ115に記憶することができる。例えば、メモリ115は、GPU105によって実行されるプログラムコードからの命令のコピー125を記憶することができる。GPU105のいくつかの実施形態は、命令を、同時に又は並列に、独立して実行する複数のプロセッサコア、計算ユニット又は固定機能回路(明確にするために図示省略)を含む。 FIG. 1 is a block diagram of a processing system 100 including a graphics processing unit (GPU) 105 for generating visual images intended for output to a display 110, according to some embodiments. The GPU 105 executes instructions stored in a memory 115. Some embodiments of the memory 115 are implemented as dynamic random access memory (DRAM). However, the memory 115 may also be implemented using other types of memory, including static random access memory (SRAM), non-volatile RAM, and the like. In the illustrated embodiment, the GPU 105 communicates with the memory 115 via a bus 120. However, some embodiments of the GPU 105 communicate with the memory 115 via a direct connection or via other buses, bridges, switches, routers, and the like. The GPU 105 may store information in the memory 115, such as results of executed instructions. For example, the memory 115 may store copies 125 of instructions from a program code executed by the GPU 105. Some embodiments of GPU 105 include multiple processor cores, computational units, or fixed function circuits (not shown for clarity) that independently execute instructions simultaneously or in parallel.
処理システム100は、命令を実行するための中央演算処理装置(CPU)130を含む。CPU130のいくつかの実施形態は、命令を、同時に又は並列に、独立して実行する複数のプロセッサコア(明確にするために図示省略)を含む。また、CPU130は、バス120に接続されており、バス120を介してGPU105及びメモリ115と通信することができる。CPU130は、メモリ115に記憶されたプログラムコード135等の命令を実行することができ、CPU130は、実行された命令の結果等の情報をメモリ115に記憶することができる。また、CPU130は、GPU105にドローコールを発行することによって、グラフィック処理を開始することもできる。GPU105は、オブジェクトをレンダリングして、ディスプレイ110に提供されるピクセルの値を生成し、ディスプレイ110は、そのピクセル値を使用して、レンダリングされたオブジェクトを表す画像を表示する。 The processing system 100 includes a central processing unit (CPU) 130 for executing instructions. Some embodiments of the CPU 130 include multiple processor cores (not shown for clarity) that independently execute instructions, either simultaneously or in parallel. The CPU 130 is also connected to a bus 120 and can communicate with the GPU 105 and memory 115 via the bus 120. The CPU 130 can execute instructions, such as program code 135 stored in the memory 115, and the CPU 130 can store information, such as results of executed instructions, in the memory 115. The CPU 130 can also initiate graphics operations by issuing draw calls to the GPU 105. The GPU 105 renders objects to generate pixel values that are provided to the display 110, which uses the pixel values to display an image representing the rendered objects.
入力/出力(I/O)エンジン140は、ディスプレイ110や、キーボード、マウス、プリンタ、外部ディスク等の処理システム100の他の要素に関連する入力動作又は出力動作を処理する。I/Oエンジン140は、I/Oエンジン140がGPU105、メモリ115又はCPU130と通信するように、バス120に結合されている。図示した実施形態では、I/Oエンジン140は、コンパクトディスク(CD)、デジタルビデオディスク(DVD)等の外部記憶媒体145に記憶された情報を読み出す。外部記憶媒体145は、ビデオゲーム等のアプリケーションを実行するために使用されるプログラムコードを表す情報を記憶する。外部記憶媒体145上のプログラムコードは、メモリ115に書き込まれ、GPU105又はCPU130によって実行される命令又はプログラムコード135のコピー125を形成する。 The input/output (I/O) engine 140 processes input or output operations associated with the display 110 or other elements of the processing system 100, such as a keyboard, mouse, printer, or external disk. The I/O engine 140 is coupled to the bus 120 such that the I/O engine 140 communicates with the GPU 105, memory 115, or CPU 130. In the illustrated embodiment, the I/O engine 140 reads information stored on an external storage medium 145, such as a compact disc (CD) or digital video disc (DVD). The external storage medium 145 stores information representing program code used to execute an application, such as a video game. The program code on the external storage medium 145 is written to the memory 115 to form a copy 125 of the instructions or program code 135 that are executed by the GPU 105 or CPU 130.
また、処理システム100は、暗号化、復号化、圧縮、解凍、及び、(処理システム100内で伝達される情報、処理システム100が外部エンティティから受信する情報、又は、処理システム100が外部エンティティに送信する情報にセキュリティを提供するために使用される)他の機能を実行するためのプロセッサ150も含む。プロセッサ150のいくつかの実施形態は、リテラルデータ、データの相対的な位置を示すポインタ、及び、データを圧縮又は解凍するために適用されるコマンドを含むデータストリームを解凍する。また、プロセッサ150は、以下に説明するように、受信したデータを解凍するために使用される動作を結合する回路を含むこともできる。 Processing system 100 also includes processor 150 for performing encryption, decryption, compression, decompression, and other functions (used to provide security for information being communicated within processing system 100, received by processing system 100 from an external entity, or transmitted by processing system 100 to an external entity). Some embodiments of processor 150 decompress data streams that include literal data, pointers indicating the relative location of the data, and commands to be applied to compress or decompress the data. Processor 150 may also include circuitry to combine the operations used to decompress received data, as described below.
図示した実施形態では、一部のエンティティがメモリ115に直接アクセスするが、ダイレクトメモリアクセス(DMA)ロジック155は、メモリ115へのアクセスを提供する。DMAロジック155は、アドレスを生成し、メモリの読み出し又は書き込みのサイクルを開始する。例えば、GPU105、CPU105、I/Oエンジン140及びプロセッサ150は、メモリ115から情報を読み出し、DMAロジック155を介してメモリ115に情報を書き込む。いくつかの実施形態では、プロセッサ150及びDMAロジック155は、単一のエンティティとして実装される。DMAロジック155のいくつかの実施形態は、メモリ間でデータを転送するため、又は、GPU105内の計算ユニット間若しくはCPU130内のプロセッサコア間でデータを転送するために使用される。GPU105又はCPU130は、DMAロジック155によって実行されているデータ転送と同時に他の動作を実行することができ、DMAロジック155は、転送が完了したことを示すために、GPU105又はCPU130に割り込みを提供することができる。 In the illustrated embodiment, some entities directly access memory 115, but direct memory access (DMA) logic 155 provides access to memory 115. DMA logic 155 generates addresses and initiates memory read or write cycles. For example, GPU 105, CPU 105, I/O engine 140, and processor 150 read information from memory 115 and write information to memory 115 via DMA logic 155. In some embodiments, processor 150 and DMA logic 155 are implemented as a single entity. Some embodiments of DMA logic 155 are used to transfer data between memories, or between computational units in GPU 105 or processor cores in CPU 130. GPU 105 or CPU 130 may perform other operations simultaneously with the data transfer being performed by DMA logic 155, and DMA logic 155 may provide an interrupt to GPU 105 or CPU 130 to indicate that the transfer is complete.
図2は、いくつかの実施形態による、処理システム内で又は処理システム間で送信される情報を復号及び解凍するために使用されるデコーダ200のブロック図である。デコーダ200は、図1に示す処理システム100のいくつかの実施形態において実装される。例えば、デコーダ200を、プロセッサ150、又は、処理システム100内の他のエンティティに実装することができる。デコーダ200は、フロントエンド205と、ミドルエンド210と、バックエンド215と、に分割されている。デコーダ200は、キャッシュ220を含む(又は、キャッシュ220に関連付けられている)。キャッシュ220内のキャッシュライン225(明確にするために符号で示されているもののみ)は、デコーダ200によって受信された圧縮データと、ビットストリームからのコマンドを実行することによって生成された解凍データと、を記憶する。キャッシュライン225は、32バイト等の所定の長さを有する。いくつかの実施形態では、キャッシュ220はバッファとして実装され、キャッシュライン225の範囲は、外部DRAM又は共有SRAM等のメモリの一部へのウィンドウである。バッファは、キャッシュライン225のタグを含まない。 2 is a block diagram of a decoder 200 used to decode and decompress information transmitted within or between processing systems, according to some embodiments. The decoder 200 is implemented in some embodiments of the processing system 100 shown in FIG. 1. For example, the decoder 200 can be implemented in the processor 150 or other entity within the processing system 100. The decoder 200 is divided into a front end 205, a middle end 210, and a back end 215. The decoder 200 includes (or is associated with) a cache 220. Cache lines 225 (only labeled for clarity) within the cache 220 store compressed data received by the decoder 200 and decompressed data generated by executing commands from the bitstream. The cache lines 225 have a predefined length, such as 32 bytes. In some embodiments, the cache 220 is implemented as a buffer, and the extent of the cache lines 225 is a window into a portion of memory, such as an external DRAM or a shared SRAM. The buffer does not include the tags of the cache lines 225.
フロントエンド205は、圧縮されたビットストリームを受信する。圧縮されたビットストリームは、物理アドレスによって示される記憶位置に記憶されたリテラルデータと、現在のアドレスに対するデータの位置を示すポインタと、コマンドに入力されたデータの1つ以上の発信元アドレスと、コマンドによって書き込まれるデータのターゲットアドレスと、(場合によっては)入力データへのゼロの加算、付加、連結等のように入力データに対する変更を含むコマンドと、を含む。フロントエンド205は、圧縮されたビットストリームで受信されたコマンドを復号する。いくつかの実施形態では、フロントエンド205は、圧縮されたビットストリーム内のコマンドに先行する情報を使用して、定義されたハフマンテーブルに基づいてコマンドを復号する。フロントエンド205は、復号したコマンドをミドルエンド210に提供する。 The front end 205 receives the compressed bitstream. The compressed bitstream includes literal data stored at a memory location indicated by a physical address, a pointer indicating the location of the data relative to the current address, one or more source addresses of data input to the command, a target address of data to be written by the command, and (possibly) a command including modifications to the input data, such as adding zeros to the input data, appending, concatenating, etc. The front end 205 decodes the commands received in the compressed bitstream. In some embodiments, the front end 205 uses information preceding the command in the compressed bitstream to decode the command based on a defined Huffman table. The front end 205 provides the decoded commands to the middle end 210.
ミドルエンド210は、復号したコマンドを含む、フロントエンド205から受信したシンボルを記憶するシンボルアレイ230のセットを含む。また、ミドルエンド210は、コマンドを表す情報を生成するコマンドアセンブラ235も含む。いくつかの実施形態では、コマンドアセンブラ235は、コピーされ、以前に受信したデータに条件付きで加えられるリテラルデータのバイト数を示すリテラル長と、以前に受信したデータからコピーされたバイト数を示す一致長と、リテラルデータのオフセットの最後から以前に受信したデータへのオフセットを示す一致オフセットと、を含むコマンドを提供する。 The middle end 210 includes a set of symbol arrays 230 that store symbols received from the front end 205, including the decoded command. The middle end 210 also includes a command assembler 235 that generates information representing the command. In some embodiments, the command assembler 235 provides a command that includes a literal length indicating the number of bytes of literal data to be copied and conditionally added to the previously received data, a match length indicating the number of bytes copied from the previously received data, and a match offset indicating the offset from the end of the literal data offset to the previously received data.
演算(op)結合器240は、コマンドアセンブラ235からコマンド情報を受信する。op結合器240のいくつかの実施形態は、縮小された(collapsed)バイトコマンドのアレイから単一のバックエンドコマンドを引き出す最後のシリアライゼーションサイクルを除いて、タイミング要件を満たすために必要なだけ深くパイプライン化されたフロースルーパイプライン(flow-through pipeline)として実装される。op結合器240は、コマンドアセンブラ235から受信したコマンドと、op結合器240によって生成された集約コマンドと、を記憶するバッファ245を含む。op結合器240は、コマンドアセンブラ235から受信したコマンドのうち、同じキャッシュライン225に関連付けられたコマンドを集約する。op結合器240のいくつかの実施形態は、受信したコマンドによって読み出されたデータの1つ以上の発信元(又は、読み出し)アドレスを含むコマンドを受信する。また、コマンドは、第1のコマンドによって書き込まれるデータの宛先(又は、書き込み)アドレスも含む。場合によっては、読み出しアドレス及び書き込みアドレスは、キャッシュライン225の開始を示し、コマンドは、キャッシュライン225内でデータを読み出し又は書き込むための位置を示すオフセットを含む。op結合器240は、コマンドアセンブラ235から受信した読み出しアドレス及び書き込みアドレスを、バッファ245に記憶されているコマンドの読み出しアドレス及び書き込みアドレスと比較する。例えば、受信したコマンド及びバッファされているコマンドの読み出しアドレス及び書き込みアドレスが同一である等のように、読み出しアドレス及び書き込みアドレスが同じキャッシュライン225を示す場合には、一致が発生する。op結合器240は、読み出しアドレスと書き込みアドレスとの間の一致に応じて、受信したコマンドを、バッファされているコマンドと結合する。 The operation (op) combiner 240 receives command information from the command assembler 235. Some embodiments of the op combiner 240 are implemented as a flow-through pipeline that is pipelined as deeply as necessary to meet timing requirements, except for the final serialization cycle that extracts a single back-end command from the array of collapsed byte commands. The op combiner 240 includes a buffer 245 that stores the commands received from the command assembler 235 and the aggregated command generated by the op combiner 240. The op combiner 240 aggregates the commands received from the command assembler 235 that are associated with the same cache line 225. Some embodiments of the op combiner 240 receive a command that includes one or more source (or read) addresses of data read by the received command. The command also includes a destination (or write) address of data written by the first command. In some cases, the read and write addresses indicate the start of a cache line 225, and the command includes an offset that indicates a location within the cache line 225 to read or write data from. The op combiner 240 compares the read and write addresses received from the command assembler 235 with the read and write addresses of commands stored in the buffer 245. A match occurs if the read and write addresses indicate the same cache line 225, such as when the read and write addresses of the received and buffered commands are identical. The op combiner 240 combines the received command with the buffered command in response to a match between the read and write addresses.
op結合器240は、可能な限り多くのコマンドパケットを可能な限り少ない集約コマンドに集約しようとする。次に、集約コマンドがバックエンド215に提供される。バックエンド215に提供される集約コマンドの数を低減することは、バックエンド215のスループットを最適化し、結果的に、外部メモリインタフェースのスループットを最適化する。バックエンド215は、(op結合器240によって生成された集約コマンドを含む)コマンドの読み出しアドレスを調べ、必要に応じてフェッチコマンドを発行する。また、バックエンド215は、ビットストリーム内のリテラルデータをポップ、整列及び拡張する。 The op combiner 240 attempts to aggregate as many command packets as possible into as few aggregate commands as possible. The aggregate commands are then provided to the backend 215. Reducing the number of aggregate commands provided to the backend 215 optimizes the throughput of the backend 215 and, consequently, the throughput of the external memory interface. The backend 215 examines the read addresses of the commands (including the aggregate commands generated by the op combiner 240) and issues fetch commands as necessary. The backend 215 also pops, aligns, and expands literal data in the bitstream.
図3は、いくつかの実施形態による、コマンド300のブロック図である。コマンド300は、図2に示すop結合器240等のop結合器を含むデコーダによって受信される。コマンド300は、1つ以上のキャッシュラインに記憶されたデータを操作し、操作の結果を、入力データを含むキャッシュラインである場合もあれば異なる場合もある別のキャッシュラインに書き込む。図示した実施形態では、デコーダは、2つのキャッシュラインに関連する情報を同時に処理するので、例えば、デコーダは、キャッシュライン境界と整列していないためにキャッシュラインに跨っている入力データを使用するコマンドを復号することができる。2つのキャッシュラインは、異なるバンクに関連付けられている。 3 is a block diagram of a command 300, according to some embodiments. The command 300 is received by a decoder that includes an op combiner, such as op combiner 240 shown in FIG. 2. The command 300 operates on data stored in one or more cache lines and writes the results of the operation to another cache line, which may be the cache line containing the input data or may be different. In the illustrated embodiment, the decoder processes information related to two cache lines simultaneously, so that, for example, the decoder can decode a command that uses input data that is not aligned with a cache line boundary and therefore spans a cache line. The two cache lines are associated with different banks.
したがって、コマンド300は、読み出しキャッシュライン315,320をそれぞれ示すアドレス305,310を含む。読み出しアドレス305,310は、異なるキャッシュライン315,320の開始アドレスを示すが、コマンド300のいくつかの実施形態は、同じキャッシュラインを示す読み出しアドレス305,310を含む。また、コマンド300は、キャッシュライン315,320の何れかを示す単一の読み出しアドレスを含むこともできる。また、コマンド300は、書き込みキャッシュライン330を示すアドレス325も含む。コマンド300によって表される操作によって生成されたデータは、書き込みキャッシュライン330の位置に書き込まれる。 Thus, command 300 includes addresses 305 and 310 that point to read cache lines 315 and 320, respectively. Although read addresses 305 and 310 point to starting addresses of different cache lines 315 and 320, some embodiments of command 300 include read addresses 305 and 310 that point to the same cache line. Command 300 may also include a single read address that points to either cache line 315 or 320. Command 300 also includes address 325 that points to write cache line 330. Data produced by the operation represented by command 300 is written to the location of write cache line 330.
オフセットは、キャッシュライン315,320,330内のデータの位置を示す。オフセットはコマンド300に含まれる。例えば、コマンド300は、キャッシュライン315の先頭からキャッシュライン315内の入力データの位置までのオフセット335を示す情報を含む。他の例では、コマンド300は、キャッシュライン320の先頭からキャッシュライン320内の入力データの位置までのオフセット340を示す情報を含む。さらに他の例では、コマンド300は、キャッシュライン330の先頭からコマンド300によって書き込まれた位置へのオフセット345を示す情報を含む。いくつかの実施形態では、アドレス305,310及びオフセット335,340によってそれぞれ示されるキャッシュライン315,320内の位置から読み出されるデータの部分は、マスクによって表される。したがって、コマンド300を別のコマンドと結合することは、2つのコマンドのマスクをマージすることを含む。 The offset indicates the location of the data within cache lines 315, 320, and 330. The offset is included in command 300. For example, command 300 includes information indicating offset 335 from the beginning of cache line 315 to the location of the input data within cache line 315. In another example, command 300 includes information indicating offset 340 from the beginning of cache line 320 to the location of the input data within cache line 320. In yet another example, command 300 includes information indicating offset 345 from the beginning of cache line 330 to the location written by command 300. In some embodiments, the portion of the data to be read from the locations within cache lines 315 and 320 indicated by addresses 305 and 310 and offsets 335 and 340, respectively, is represented by a mask. Thus, combining command 300 with another command includes merging the masks of the two commands.
図4は、いくつかの実施形態による、異なるコマンドに入力されるキャッシュライン405の部分を表すマスクのマージャ400のブロック図である。マージャ400は、例えば、コマンドを結合して集約コマンドを形成する場合等に、図2に示すop結合器240のいくつかの実施形態によって実行される。キャッシュライン405は、圧縮されたビットストリームからの圧縮データ等のデータを表す部分410(明確にするために符号によって示す部分のみ)に分割される。部分410のサイズは任意であり、異なる部分は場合によって異なるサイズを有する。例えば、部分410のあるサブセットが3バイトのサイズを有することができ、部分410の別のサブセットが1バイトのサイズを有することができる。 4 is a block diagram of a merger 400 of masks representing portions of a cache line 405 input to different commands, according to some embodiments. The merger 400 is performed by some embodiments of the op combiner 240 shown in FIG. 2, such as when combining commands to form an aggregate command. The cache line 405 is divided into portions 410 (only portions shown by numbers for clarity) representing data, such as compressed data from a compressed bitstream. The portions 410 may be of any size, and different portions may have different sizes. For example, one subset of the portions 410 may have a size of 3 bytes, and another subset of the portions 410 may have a size of 1 byte.
マスク415,420は、対応するコマンドのために生成される。いくつかの実施形態では、マスク415,420は、対応するコマンドによって読み出される部分410の位置を示すコマンド内の読み出しアドレス及び対応するオフセットに基づいて生成される。また、コマンドは、部分410のサイズを示す情報も含む。図示した実施形態では、マスク415は、第1のコマンドがキャッシュライン405の位置425,430からデータを読み出すことを示す。マスク420は、第2のコマンドがキャッシュライン405の位置435,440からデータを読み出すことを示す。マスク415,420の各々は位置425,430,435,440を示しているが、他のコマンドのために生成されたマスクは、単一の位置、複数のキャッシュライン内の位置等を示すことができる。 Masks 415, 420 are generated for the corresponding commands. In some embodiments, masks 415, 420 are generated based on a read address and corresponding offset in the command that indicates the location of portion 410 to be read by the corresponding command. The command also includes information indicating the size of portion 410. In the illustrated embodiment, mask 415 indicates that a first command reads data from locations 425, 430 of cache line 405. Mask 420 indicates that a second command reads data from locations 435, 440 of cache line 405. Although masks 415, 420 each indicate locations 425, 430, 435, 440, masks generated for other commands may indicate a single location, locations within multiple cache lines, etc.
マスク415,420は、対応する集約コマンドによって使用される集約マスク445を形成するためにマージされる。図示した実施形態では、集約マスク445は、集約コマンドに対する入力としてアクセスされる位置425,430,435,440を示す。集約マスク445を使用することによって、集約コマンドは、位置425,430,435,440に同時にアクセスすることができる。 Masks 415 and 420 are merged to form aggregate mask 445 that is used by the corresponding aggregate command. In the illustrated embodiment, aggregate mask 445 indicates locations 425, 430, 435, and 440 that are accessed as inputs to the aggregate command. By using aggregate mask 445, the aggregate command can simultaneously access locations 425, 430, 435, and 440.
図5は、いくつかの実施形態による、op結合器の第1の部分500のブロック図である。第1の部分500は、図2に示すop結合器240のいくつかの実施形態を実装するために使用される。第1の部分500は、図2に示すフロントエンド205等のフロントエンドからコマンドのセット510を受信するアドレス割り当て回路505を含む。いくつかの実施形態では、セット510は、上述したように、リテラル長、一致長及び一致オフセットによって表される出力アドレスを提供するコマンドアセンブラから受信される。出力アドレスは、コマンドの新たなセット510の各々の一部としてリセットされる。インクリメント回路511,512,513,514は、コマンドの出力アドレスを、それぞれの新たなリテラル及び一致でインクリメントする。アドレス割り当て回路505は、op結合器によって処理されている現在のアドレス515のコピーを記憶する。インクリメント回路511~514からの出力は、書き込みアドレス、リテラル読み出しアドレス及び一致読み出しアドレスである。場合によっては、コマンドが演算パイプラインのメモリ又はキャッシュラインにどのように整列するのかを比較するために、絶対アドレスがop結合器によって後に使用される。 5 is a block diagram of a first portion 500 of an op combiner according to some embodiments. The first portion 500 is used to implement some embodiments of the op combiner 240 shown in FIG. 2. The first portion 500 includes an address allocation circuit 505 that receives a set of commands 510 from a front end, such as the front end 205 shown in FIG. 2. In some embodiments, the set 510 is received from a command assembler that provides an output address represented by a literal length, a match length, and a match offset, as described above. The output address is reset as part of each new set of commands 510. Increment circuits 511, 512, 513, and 514 increment the output addresses of the commands with their respective new literals and matches. The address allocation circuit 505 stores a copy of the current address 515 being processed by the op combiner. The outputs from the increment circuits 511-514 are the write address, the literal read address, and the match read address. In some cases, the absolute address is later used by the op combiner to compare how the command aligns to memory or cache lines in the computation pipeline.
アドレス割り当て回路505のいくつかの実施形態は、出力アドレスを生成し、現在のアドレスを更新するために、以下の擬似コードを実装する。
LiteralWriteAddress = currentAddress
SubLiteralOffset = previousMatchOffset
if (hasSubliterals)
SubLiteralAddress = currentAddress - SubLiteralOffset
MatchWriteAddress = currentAddress + LiteralLength
matchWrapsAtWriteStart = MatchLength > MatchOffset
if (matchWrapsAtWriteStart)
MatchRead = MatchOffset
else:
MatchRead = MatchLength
MatchAddress = currentAddress + LiteralLength - MatchOffset
currentAddress += LiteralLength + MatchLength
擬似コードは、コマンドのセット510に亘ってチェーンされており、潜在的に8つのサブコマンドを生成する。
Some embodiments of the address assignment circuit 505 implement the following pseudocode to generate the output address and update the current address:
LiteralWriteAddress = currentAddress
SubLiteralOffset = previousMatchOffset
if (hasSubliterals)
SubLiteralAddress = currentAddress - SubLiteralOffset
MatchWriteAddress = currentAddress + LiteralLength
matchWrapsAtWriteStart = MatchLength > MatchOffset
if (matchWrapsAtWriteStart)
MatchRead = MatchOffset
else:
MatchRead = MatchLength
MatchAddress = currentAddress + LiteralLength - MatchOffset
currentAddress += LiteralLength + MatchLength
The pseudocode is chained across a set of commands 510, potentially generating eight sub-commands.
平坦化回路(flatten circuitry)520は、リテラル及び一致を、リテラルを読み出して追加する共通のコマンドに変換する。アドレス割り当て回路505から受信された入力コマンドパケットは、最大で2つのコマンドを生成する。クランプ回路521,522,523,524は、アドレス割り当て回路505から受信したコマンドの各々の一致長をクランプする。いくつかの実施形態では、各入力コマンドは、書き込みにクランプされた1つのコマンドに変換される。また、2つの連続する読み出しライン(lines)が生成される。結果として得られる有効なサブコマンドは、クランプ回路521~524から、N×2(8)書き込み+N(4)読み出し先入先出(FIFO)バッファ等のバッファにプッシュされる。したがって、リテラルのない一致又は一致のない一連のリテラルがある場合、これらを単一の集約コマンドにまとめることができる。選択回路525は、同じラインから次に有効なN(4)を選択する。いくつかの実施形態では、選択回路525からの出力は、以下のN(4)インスタンスを含む。
‐ ReadAddress
‐ ReadLength:一致は、WriteLengthよりも短くすることができる。出力を満たすために読み出しが繰り返される。
‐ HasLiterals:真の場合、サブコマンドは、出力書き込み長と同じ数のリテラルを有する。
‐ WriteAddress
‐ WriteLength
Flatten circuitry 520 converts the literals and matches into a common command to read and add a literal. An input command packet received from address allocation circuitry 505 generates up to two commands. Clamp circuits 521, 522, 523, and 524 clamp the match length of each of the commands received from address allocation circuitry 505. In some embodiments, each input command is converted into one command clamped to a write. Also, two consecutive read lines are generated. The resulting valid sub-commands are pushed from clamp circuits 521-524 into a buffer, such as an Nx2(8) write + N(4) read first-in-first-out (FIFO) buffer. Thus, if there is a match without a literal or a series of literals without a match, these can be combined into a single aggregate command. Selection circuitry 525 selects the next valid N(4) from the same line. In some embodiments, the output from selection circuitry 525 includes the following N(4) instances:
- ReadAddress
- ReadLength: The match can be shorter than the WriteLength. The read is repeated to fill the output.
- HasLiterals: if true, the subcommand has as many literals as the output write length.
- WriteAddress
- WriteLength
整列回路530は、読み出し及び書き込みに必要とされるラインを計算する。また、整列回路530は、複数のキャッシュラインに書き込む必要があるコマンドを展開(unrolls)する。いくつかの実施形態では、キャッシュラインは、現在のデータのチャンクの先頭に対して整列された32バイトのアドレスである。2つの連続する読み出しが書き込みライン毎に実行され得るので、書き込みが1つのラインに制限されている場合には、読み出しは1つの読み出し操作で実行される。上述したように、入力コマンドは、書き込みにクランプされた1つのコマンドに変換され、2つの連続する読み出しラインが生成される。完了され、送信されるコマンドは、平坦化回路520のバッファ(FIFOバッファ等)からポップされる。後続のコマンドは、バッファ内の次のコマンドを書き込む(fill out)ために回転され、引き込まれる(pulled in)。 The alignment circuit 530 calculates the lines required for the read and write. The alignment circuit 530 also unrolls commands that need to be written to multiple cache lines. In some embodiments, a cache line is a 32-byte address aligned to the beginning of the current chunk of data. Since two consecutive reads can be performed per write line, if the write is limited to one line, the read is performed in one read operation. As described above, the input command is converted to one command clamped to the write, generating two consecutive read lines. The completed command to be sent is popped from the flattening circuit 520 buffer (e.g., FIFO buffer). Subsequent commands are rotated and pulled in to fill out the next command in the buffer.
整列回路530の開始/終了回路535は、平坦化回路520から受信した読み出しアドレス及び書き込みアドレスに基づいて、読み出し及び書き込みのための開始行及び終了ラインを計算するために使用される。展開回路(unrolling circuitry)540は、書き込みラインの遷移を展開し、展開した書き込みライン、読み出しライン及び反復/回転情報を、同じラインから次に有効なN(4)を選択するピック回路545に提供するために使用される。いくつかの実施形態では、ピック回路545は、同じ書き込みライン及び読み出しラインを第1のラインとして共有する次の最大でN(4)のコマンドをピックアップすることを含む動作を実行する。例えば、ピック回路545は、同じ読み出し行及び書き込みラインを有するコマンドのみを送信する出力上のフィルタを有するN書き込み+N読み出しFIFOとして、平坦化ステップと同様に動作する。未使用の読み出しバンクを有するコマンドを、その読み出しバンクを使用するコマンドとともに送信することができる。ピック回路545の出力は、以下の通りである。
‐ WriteLine:チャンクの先頭を基準とする32バイトの整列アドレス
‐ WriteLength:ラインの最後まで覆われ、それが交差すると展開される。
‐ WriteStart[4:0]:ライン内の書き込みアドレス
‐ ReadLine[2 Banks]:2つの必ずしも連続していない32B読み出しライン
‐ バンク0は偶数ラインを有する。
‐ バンク1は奇数ラインを有する。
‐ ReadStart[5:0]:ReadAddress[5:0]
‐ ReadLength [5:0]:短い読み出しの場合には反復がどこで開始するかを定義し、長い読み出しの場合には何もしないのを定義する。
‐ RepeatRotate[6:0]:独自の出力を読み出し、ソースデータを繰り返す必要のある長いコピーの場合
A start/end circuit 535 of the alignment circuit 530 is used to calculate the start row and end line for the read and write based on the read and write addresses received from the flattening circuit 520. An unrolling circuitry 540 is used to unroll the write line transitions and provide the unrolled write line, read line and repeat/rotation information to a pick circuit 545 that selects the next valid N(4) from the same line. In some embodiments, the pick circuit 545 performs operations including picking up the next up to N(4) commands that share the same write and read lines as the first line. For example, the pick circuit 545 operates similarly to the flattening step as an N write + N read FIFO with a filter on its output that only sends commands with the same read row and write line. Commands with unused read banks can be sent along with commands that use that read bank. The output of the pick circuit 545 is as follows:
- WriteLine: 32-byte aligned address relative to the beginning of the chunk. - WriteLength: Covers to the end of the line, unwraps when it is crossed.
- WriteStart[4:0]: write address in line. - ReadLine[2 Banks]: two not necessarily consecutive 32B read lines. - Bank 0 has an even number of lines.
- Bank 1 has odd lines.
- ReadStart[5:0]: ReadAddress[5:0]
- ReadLength [5:0]: defines where the iteration starts in case of short reads, or nothing in case of long reads.
- RepeatRotate[6:0]: For long copies that need to read their own output and repeat the source data
整列回路530のいくつかの実施形態は、以下の擬似コードを実装する。
#計算し、演算をラインまで制限する
{oWriteLine, writeStart[4:0]} = iWriteAddress
writeEnd = min(writeStart + iWriteLength, 32)
length = writeEnd - writeStart
oWriteLength = length
#読み出し制御を計算する
readEnd = iReadAddress + iReadLength - 1
firstReadLine = iReadAddress[:5]
lastReadLine = readEnd[:5]
repeatFitsInOneRead = (lastReadLine - firstReadLine) < 2
if (repeatFitsInOneRead or firstCycleOfCommand)
repeatRotate = 0
#読み出しラインを計算する
if (repeatFitsInOneRead):
oReadLine[firstReadLine[0]] = firstReadLine
oReadLine[lastReadLine[0]] = lastReadLine
else #読み出しデータをウォークし、必要に応じて新たな読み出しを開始する
readBank = iReadAddress[5]
oReadLine[readBank] = iReadAddress[:5]
readLine2 = (iReadAddress + length - 1)[:5]
readBank2 = readLine2[5]
oReadLine[readBank2] = readLine2
#検出して次へ進む
NextWriteAddress = iWriteAddress + length
NextWriteLength = iWriteLength - length
if(repeatFitsInOneRead):
oNextRepeatRotate = (repeatRotate + length) % iReadLength
else:
oNextReadAddress += length
oHasMore = (NextWriteLength > 0)
Some embodiments of the alignment circuit 530 implement the following pseudocode:
#Calculate and limit the operation to the line
{oWriteLine, writeStart[4:0]} = iWriteAddress
writeEnd = min(writeStart + iWriteLength, 32)
length = writeEnd - writeStart
oWriteLength = length
#Calculate read control
readEnd = iReadAddress + iReadLength - 1
firstReadLine = iReadAddress[:5]
lastReadLine = readEnd[:5]
repeatFitsInOneRead = (lastReadLine - firstReadLine) < 2
if (repeatFitsInOneRead or firstCycleOfCommand)
repeatRotate = 0
#Calculate the readout line
if (repeatFitsInOneRead):
oReadLine[firstReadLine[0]] = firstReadLine
oReadLine[lastReadLine[0]] = lastReadLine
else # Walk the read data and start a new read if necessary
readBank = iReadAddress[5]
oReadLine[readBank] = iReadAddress[:5]
readLine2 = (iReadAddress + length - 1)[:5]
readBank2 = readLine2[5]
oReadLine[readBank2] = readLine2
#Detect and proceed
NextWriteAddress = iWriteAddress + length
NextWriteLength = iWriteLength - length
if(repeatFitsInOneRead):
oNextRepeatRotate = (repeatRotate + length) % iReadLength
else:
oNextReadAddress += length
oHasMore = (NextWriteLength > 0)
2つのコマンドが同じバンクに異なる有効な読み出しラインを有していない限り、出力ReadLinesを異なるコマンドから取得することができる。 The output ReadLines can come from different commands as long as the two commands do not have different valid read lines in the same bank.
図6は、いくつかの実施形態による、op結合器の第2の部分600のブロック図である。第2の部分600は、図2に示すop結合器240のいくつかの実施形態を実装するために使用される。第2の部分600は、図5に示す整列回路530等の整列回路から入力コマンド610を受信するバイトブラスト及び収集回路605を含む。図示した実施形態では、バイトブラスト及び収集回路605は、4つの入力コマンド610を受信し、回路605は、入力コマンド610に対する読み出し{Address,Length}及び{Write Address,Num Literals}を、バイト毎のマルチプレクサ制御に変換する。入力コマンド610の各々のWriteAddress[4:0]及びWriteLengthは、図4に示すマスク415,420等のバイトマスクに変換される。読み出しライン及び書き込みラインが、第1のコマンドの読み出しライン及び書き込みラインと一致するコマンド毎に、有効なバイトが選択される。有効なバイトは重複していない。 6 is a block diagram of a second portion 600 of an op combiner according to some embodiments. The second portion 600 is used to implement some embodiments of the op combiner 240 shown in FIG. 2. The second portion 600 includes a byte blast and collect circuit 605 that receives input commands 610 from an alignment circuit, such as the alignment circuit 530 shown in FIG. 5. In the illustrated embodiment, the byte blast and collect circuit 605 receives four input commands 610, and the circuit 605 converts the read {Address, Length} and {Write Address, Num Literals} for the input commands 610 into byte-by-byte multiplexer controls. The WriteAddress[4:0] and WriteLength of each of the input commands 610 are converted into a byte mask, such as masks 415, 420 shown in FIG. 4. For each command whose read and write lines match the read and write lines of the first command, a valid byte is selected. The valid bytes are non-overlapping.
バイトブラスト及び収集回路605のいくつかの実施形態は、入力コマンド610について以下を計算する。
‐ バイト[0…31]毎の出力:
○ ReadSelect:読み出しラインの0~63の何れのバイトか。MSB上の「奇数」のバイト。
○ ReadEnable:読み出しが追加される必要があるかどうか
○ LiteralSelect:この書き込みラインのバッチの何れのリテラルか
■ 各書き込みラインの0から(同じ書き込みラインを有する全てのコマンドのNumLiterals)の合計-1
○ WriteEnable:このバイトが有効化されているかどうか
○ LiteralEnable:リテラルが追加される必要があるかどうか
‐ 収集したコマンド毎の出力:
○ NumLiterals:ポップオフするリテラルの数
■ 次のコマンドが同じ書き込みラインを共有する場合にはゼロ
■ 書き込みラインが完了した場合には書き込みラインのリテラルの総数
○ WriteLine:チャンクの先頭を基準にした32バイトの整列アドレス
○ ReadLine[bank = 0…1]
○ ReadLineEnable [1:0]:読み出しが必要とされるかどうか
Some embodiments of the byte blast and collect circuit 605 calculate the following for the input command 610:
- Output for each byte [0...31]:
o ReadSelect: Which byte of the read line is 0 to 63. The "odd" byte on the MSB.
○ ReadEnable: Whether a read needs to be added ○ LiteralSelect: Which literal in this batch of write lines
■ For each write line, the number ranges from 0 to the sum of (NumLiterals of all commands with the same write line) minus 1.
○ WriteEnable: Whether this byte is enabled ○ LiteralEnable: Whether a literal needs to be added - Collected output for each command:
NumLiterals: The number of literals to pop off.
■ Zero if the next command shares the same write line.
■ If the write line is completed, the total number of literals in the write line. ○ WriteLine: 32-byte aligned address relative to the beginning of the chunk. ○ ReadLine[bank = 0…1]
○ ReadLineEnable [1:0]: Whether a read is required
バイトブラスト及び収集回路605のいくつかの実施形態は、以下の擬似コードを実装する。
if (newWriteLine)
consumedLiterals = 0
#第1のリテラルIDを計算する
firstLiterals[0] = consumedLiterals
numLiterals[-1] = 0
for command in [0..3]
numLiterals[command] = iHasLiterals[command] ? iWriteLength[command] : 0
totalLiterals[command] = numLiterals[command-1] + numLiterals[command]
firstLiterals[command] = totalLiterals[command-1] + consumedLiterals
for each command with matching lines
writeEnables[31:0] = (~(0xFFFFFFFF << iWriteLength)) << iWriteStart
literalCount
for b in 0 to 31
#適切な入力コマンドを選択する
command = WriteEnables[0..3][b] # is a one hot mux control.
writeStart[4:0] = iWriteStart[command]
numLiterals[5:0] = iWriteLength[command]
oLiteralEnable = iHasLiterals[command]
firstLiteral = firstLiterals[command]
readLength = iReadLength[command]
repeatRotate = iReadRotate[command]
readStart = iReadStart[command]
byteInCommand = b - writeStart
oLiteralSelect[b][4:0] = oLiteralEnable ? byteInCommand+firstLiteral: 31
oReadEnable = readLength > 0
readOffset = (byteInCommand + repeatRotate) % readLength
oReadSelect[b][5:0] = (readStart + readOffset)
oWriteEnable[b] = writeEnables[0..3] [b]!= 0
isLastOfWriteLine = oWriteEnable[31]
totalConsumedLiterals = totalLiterals[LastOne(iCommandValids[0..3]] +
consumedLiterals
oNumLiterals = isLastOfWriteLine ? totalConsumedLiterals : 0
nextConsumedLiterals = totalConsumedLiterals
Some embodiments of the byte blast and collect circuit 605 implement the following pseudocode:
if (newWriteLine)
consumedLiterals = 0
#Calculate the first literal ID
firstLiterals[0] = consumedLiterals
numLiterals[-1] = 0
for command in [0..3]
numLiterals[command] = iHasLiterals[command] ? iWriteLength[command] : 0
totalLiterals[command] = numLiterals[command-1] + numLiterals[command]
firstLiterals[command] = totalLiterals[command-1] + consumedLiterals
for each command with matching lines
writeEnables[31:0] = (~(0xFFFFFFFF << iWriteLength)) << iWriteStart
literalCount
for b in 0 to 31
#Choose the right input command
command = WriteEnables[0..3][b] # is a one hot mux control.
writeStart[4:0] = iWriteStart[command]
numLiterals[5:0] = iWriteLength[command]
oLiteralEnable = iHasLiterals[command]
firstLiteral = firstLiterals[command]
readLength = iReadLength[command]
repeatRotate = iReadRotate[command]
readStart = iReadStart[command]
byteInCommand = b - writeStart
oLiteralSelect[b][4:0] = oLiteralEnable ? byteInCommand+firstLiteral: 31
oReadEnable = readLength > 0
readOffset = (byteInCommand + repeatRotate) % readLength
oReadSelect[b][5:0] = (readStart + readOffset)
oWriteEnable[b] = writeEnables[0..3] [b]!= 0
isLastOfWriteLine = oWriteEnable[31]
totalConsumedLiterals = totalLiterals[LastOne(iCommandValids[0..3]] +
consumedLiterals
oNumLiterals = isLastOfWriteLine ? totalConsumedLiterals : 0
nextConsumedLiterals = totalConsumedLiterals
第2の部分のいくつかの実施形態は、バイトブラスト及び収集回路605のN(4)インスタンスを実装する。インスタンスは、異なるコマンドについて動作し、図5に示す整列ブロック530の出力におけるコマンド間の互換性のない読み出しライン及び書き込みラインを検出するフィルタを削除する。このアプローチは、バイトブラスト及び収集操作をより迅速に実行するという利点を有するが、op結合器の部分600での後続の動作において輻輳をもたらす場合がある。 Some embodiments of the second portion implement N(4) instances of byte blast and collect circuitry 605, which operate on different commands and eliminate filters that detect incompatible read and write lines between commands at the output of alignment block 530 shown in FIG. 5. This approach has the advantage of performing byte blast and collect operations more quickly, but may result in congestion in subsequent operations in op combiner portion 600.
結合回路615は、互換性のない書き込みライン又は読み出しライン(例えば、一致しない読み出しライン及び書き込みライン等)を有する所定数の以前に収集したコマンドを記憶する。結合回路615は、記憶されたコマンドの1つと互換性がある(例えば、一致する)、後に受信されたコマンドを結合又は集約する。新たなコマンドが提示されると、結合回路615は、有効な読み出しラインを無効な読み出しラインとマージすることができる。また、結合回路615は、互換性のある全てのコマンドから有効なバイトデータを選択することによって、コマンドを、一致する読み出しライン及び書き込みラインとマージする。結合回路615が互換性のないラインを有するコマンドを受信した場合、最も古い結合コマンドが押し出され、以前に受信したコマンドが、新たなコマンドのためのスペースを生成するために押し下げられる。押し出された(潜在的に集約又は結合された)コマンドは、図2に示すバックエンド215等のバックエンドに提供される。 The combiner circuit 615 stores a number of previously collected commands that have incompatible write or read lines (e.g., mismatched read and write lines, etc.). The combiner circuit 615 combines or aggregates any subsequently received commands that are compatible (e.g., match) with one of the stored commands. When a new command is presented, the combiner circuit 615 can merge valid read lines with invalid read lines. The combiner circuit 615 also merges the command with matching read and write lines by selecting valid byte data from all compatible commands. When the combiner circuit 615 receives a command with incompatible lines, the oldest combined command is pushed out and the previously received command is pushed down to create space for the new command. The pushed out (potentially aggregated or combined) command is provided to a backend, such as backend 215 shown in FIG. 2.
結合回路615のいくつかの実施形態は、例えば互換性のないコマンド等のように一致しない読み出しアドレス又は書き込みアドレスを有する、以前に収集された2つのコマンドを記憶する。以前のコマンドは、第1の結合されたスロット620及び第2の結合されたスロット625に記憶される。新規に受信したコマンドは、第1の結合されたスロット620に記憶され、最も古い結合コマンドは、第2の結合されたスロット625に記憶される。同じ書き込みラインを有するが異なる読み出しラインを有する場合がある2つの結合器620,625があるので、結合回路615は、後に受信したコマンドが、第1の結合されたスロット620のコマンドと結合することによって、第2の結合されたスロット625内の以前のコマンドよりも先にジャンプすることを可能にする。結合回路615は、以下の擬似コードを使用して、先にジャンプすることがリードアフターライトコヒーレンシハザード(read-after-write coherency hazard)に違反するかどうかを判別するためにチェックする。
#既存のラインより先に進むことを検出し、抑制する。
cantCombineToSlot1 = False
for i in 0..1
if(iReadLine[i] == Combined[0].WriteLine):
cantCombineToSlot1 = True
リードアフターライトコヒーレンシハザードが検出された場合、先にジャンプすることが許可されない。
Some embodiments of the combine circuit 615 store two previously collected commands that have mismatched read or write addresses, such as incompatible commands. The previous commands are stored in a first combined slot 620 and a second combined slot 625. The newly received command is stored in the first combined slot 620 and the oldest combined command is stored in the second combined slot 625. Because there are two combiners 620, 625 that may have the same write line but different read lines, the combine circuit 615 allows the later received command to jump ahead of the previous command in the second combined slot 625 by combining it with the command in the first combined slot 620. The combine circuit 615 checks to determine if jumping ahead would violate a read-after-write coherency hazard using the following pseudocode:
#Detect and suppress moving ahead of an existing line.
cantCombineToSlot1 = False
for i in 0..1
if(iReadLine[i] == Combined[0].WriteLine):
cantCombineToSlot1 = True
If a read-after-write coherency hazard is detected, jumping ahead is not permitted.
結合又は集約されたコマンド内の依存関係は、解決回路630を使用して解決される。結合回路615から押し出されたコマンドは、解決回路630によって受信され、解決回路630は、例えば、byte-can-go回路635のインスタンスを使用して、集約コマンド内のリードアフターライト依存関係を解決しようとする。解決回路630が依存関係を解決することができない場合、依存関係の前のバイトが別のコマンドとして送出され、次に、解決回路630は、残りのバイトの依存関係を解決しようと試みる。解決回路630のいくつかの実施形態は、以下の擬似コードを実装する。
for byte in 0..31
if (iWriteEnable[byte])
readBank = iReadSelect[byte][5]
readLine = iReadLines[readBank]
readOverlapsWriteLine = iWriteLine == readLine
if (readOverlapsWriteLine)
readByte = iReadSelect[byte][4:0]
if (iWriteEnable[readByte])
readIsCopying = !iLiteralEnable[readByte] &&
iReadEnable[readByte]
writeIsAdding = iLiteralEnable[byte] &&
iReadEnable[byte]
writeIsCopying = !iLiteralEnable[byte] &&
iReadEnable[byte]
#ハザードがリテラルのない単なる一致である場合、
#代わりに元の読み出し+リテラルを単にコピーする
if(writeIsCopying):
ReadSelect[byte] = ReadSelect[readByte]
LiteralSelect[byte] = LiteralSelect[readByte]
#ハザードがリテラルのない読み出しでの読み出し+リテラルである場合
#代わりに元の読み出しを使用
else if(writeIsAdding && readIsCopying)
ReadSelect[byte] = ReadSelect[readByte]
#それ以外の場合、追加を結合できない
#リードオンライト(read on write)ハザードがある
else
ByteCanGo[byte] = False
#リテラルをポップする前に、全てが展開されるまで待つ。
oNumLiterals = 0
上記の擬似コードでは、Falseである第1のByteCanGO[]は、後のバイトによる考慮から前のバイトを無効にし、その結果、偽のByteCanGoの各々は、コマンドを32バイトソースから複数のコマンドに分割する。1つのコマンド内に解決可能な循環依存関係が多く存在する場合があるので、これらの多くをインスタンス化し、順番にパイプライン化して、目標を達成する必要がある場合があることに留意されたい。
Dependencies in the combined or aggregated command are resolved using a resolution circuit 630. Commands pushed out from the combine circuit 615 are received by the resolution circuit 630, which attempts to resolve read-after-write dependencies in the aggregated command, for example, using an instance of a byte-can-go circuit 635. If the resolution circuit 630 is unable to resolve a dependency, the byte before the dependency is sent out as a separate command, and the resolution circuit 630 then attempts to resolve the dependency for the remaining bytes. Some embodiments of the resolution circuit 630 implement the following pseudocode:
for byte in 0..31
if (iWriteEnable[byte])
readBank = iReadSelect[byte][5]
readLine = iReadLines[readBank]
readOverlapsWriteLine = iWriteLine == readLine
if (readOverlapsWriteLine)
readByte = iReadSelect[byte][4:0]
if (iWriteEnable[readByte])
readIsCopying = !iLiteralEnable[readByte] &&
iReadEnable[readByte]
writeIsAdding = iLiteralEnable[byte] &&
iReadEnable[byte]
writeIsCopying = !iLiteralEnable[byte] &&
iReadEnable[byte]
#If the hazard is just a match without a literal,
#Just copy the original read + literal instead
if(writeIsCopying):
ReadSelect[byte] = ReadSelect[readByte]
LiteralSelect[byte] = LiteralSelect[readByte]
#If the hazard is a read + literal with a read without a literal
#Use original read instead
else if(writeIsAdding && readIsCopying)
ReadSelect[byte] = ReadSelect[readByte]
#Otherwise you cannot combine appends
#There is a read on write hazard
else
ByteCanGo[byte] = False
#Wait until everything is expanded before popping the literal.
oNumLiterals = 0
In the pseudocode above, the first ByteCanGO[] that is False invalidates earlier bytes from consideration by later bytes, so that each false ByteCanGo splits the command from a 32-byte source into multiple commands. Note that there may be many resolvable circular dependencies within a command, so it may be necessary to instantiate many of these and pipeline them in order to achieve the goal.
図7は、いくつかの実施形態による、一致するコマンドを集約コマンドに結合する方法700のフロー図である。方法700は、図2に示すop結合器240、並びに、図5及び図6に示すop結合器のいくつかの実施形態において実施される。 Figure 7 is a flow diagram of a method 700 for combining matching commands into an aggregate command, according to some embodiments. The method 700 is implemented in some embodiments of the op combiner 240 shown in Figure 2, as well as the op combiners shown in Figures 5 and 6.
ブロック705において、op結合器は、例えば図2に示すコマンドアセンブラ235等のコマンドアセンブラから1つ以上のコマンドを受信する。受信したコマンドは、コマンドのソースデータの位置を示す1つ以上の読み出しアドレスを含む。また、受信したコマンドは、コマンドによって生成された宛先データの位置を示す書き込みアドレスを含む。いくつかの実施形態では、読み出しアドレス及び書き込みアドレスは、32バイトキャッシュライン等のキャッシュライン内の位置を示す。 At block 705, the op combiner receives one or more commands from a command assembler, such as command assembler 235 shown in FIG. 2. The received command includes one or more read addresses indicating the location of source data for the command. The received command also includes a write address indicating the location of destination data generated by the command. In some embodiments, the read and write addresses indicate locations within a cache line, such as a 32-byte cache line.
ブロック710において、op結合器は、受信したコマンドの読み出しアドレス及び書き込みアドレスを、op結合器によって以前に受信されバッファされたコマンドの読み出しアドレス及び書き込みアドレスと比較する。バッファされたコマンドは、新規に受信した(例えば、結合されていない又は集約されていない)コマンド、又は、以前に受信された2つ以上のコマンドを結合することによって生成された集約コマンドであってもよい。 At block 710, the op combiner compares the read and write addresses of the received command with the read and write addresses of commands previously received and buffered by the op combiner. The buffered commands may be newly received (e.g., uncombined or unaggregated) commands or aggregated commands created by combining two or more previously received commands.
決定ブロック715において、op結合器は、受信したコマンドの読み出しアドレス及び書き込みアドレスが、バッファされたコマンドの読み出しアドレス及び書き込みアドレスと一致するかどうかを判別する。いくつかの実施形態では、コマンドは、異なるバンクに記憶された2つのキャッシュラインを参照する最大2つの読み出しアドレスを含む。コマンド内の読み出しアドレスの数に応じて、op結合器は、受信したコマンド及びバッファされたコマンドの1つ又は2つの読み出しアドレスを比較する。読み出しアドレスと書き込みアドレスとが一致する場合、方法700は、ブロック720に進む。読み出しアドレスと書き込みアドレスとが一致しない場合、方法700は、決定ブロック725に進む。 At decision block 715, the op combiner determines whether the read and write addresses of the received command match the read and write addresses of the buffered command. In some embodiments, the command includes up to two read addresses that reference two cache lines stored in different banks. Depending on the number of read addresses in the command, the op combiner compares one or two read addresses of the received command and the buffered command. If the read and write addresses match, method 700 proceeds to block 720. If the read and write addresses do not match, method 700 proceeds to decision block 725.
ブロック720において、op結合器は、受信したコマンドと、バッファされたコマンドと、を結合する。いくつかの実施形態では、受信したコマンドと、バッファされたコマンドと、を結合することは、図4に示すマスク415,420等のように、受信したコマンド及びバッファされたコマンドに関連するマスクをマージすることを含む。次に、方法700は、ブロック730に進む。 At block 720, the op combiner combines the received command and the buffered command. In some embodiments, combining the received command and the buffered command includes merging masks associated with the received command and the buffered command, such as masks 415 and 420 shown in FIG. 4. The method 700 then proceeds to block 730.
決定ブロック725において、op結合器は、受信したコマンドと比較することができる、より多くのバッファされたコマンドがあるかどうかを判別する。追加のバッファされたコマンドがある場合、方法700は、ブロック710に戻る。追加のバッファされたコマンドがない場合、方法は、ブロック730に進む。 In decision block 725, the op combiner determines whether there are more buffered commands that can be compared to the received command. If there are additional buffered commands, the method 700 returns to block 710. If there are no additional buffered commands, the method proceeds to block 730.
ブロック730において、コマンドがバッファに追加される。受信したコマンドの読み出しアドレス又は書き込みアドレスが、何れのバッファされたコマンドの読み出しアドレス及び書き込みアドレスにも一致しなかった場合、バッファに追加されるコマンドは、受信したコマンドである。受信したコマンドの読み出しアドレス又は書き込みアドレスが、バッファされた何れかのコマンドの読み出しアドレス及び書き込みアドレスと一致する場合、バッファに追加されるコマンドは、結合又は集約されたコマンドである。 At block 730, the command is added to the buffer. If the read or write address of the received command does not match the read and write addresses of any buffered command, the command added to the buffer is the received command. If the read or write address of the received command matches the read and write addresses of any buffered command, the command added to the buffer is a combined or aggregated command.
本明細書に開示するように、方法は、第1のコマンドによって読み出されるデータの少なくとも1つの第1の読み出しアドレスと、第1のコマンドによって書き込まれるデータの第1の書き込みアドレスと、を含む第1のコマンドを含むコマンドストリームを受信することと、少なくとも1つの第1の読み出しアドレス及び第1の書き込みアドレスを、バッファに記憶された第2のコマンドの少なくとも1つの第2の読み出しアドレス及び第2の書き込みアドレスと比較することと、少なくとも1つの第1の読み出しアドレスが少なくとも1つの第2の読み出しアドレスに一致し、第1の書き込みアドレスが第2の書き込みアドレスに一致することに応じて、第1のコマンド及び第2のコマンドを結合して第1の集約コマンドを形成することを含む。一態様では、第1のコマンドを受信することは、少なくとも1つの第1の読み出しアドレスが少なくとも1つの第2の読み出しアドレスと一致しない、又は、第1の書き込みアドレスが第2の書き込みアドレスと一致しないことに応じて、第1のコマンドをバッファに記憶することを含む。別の態様では、方法は、少なくとも1つの第1の読み出しアドレスが少なくとも1つの第2の読み出しアドレスと一致することに応じて、第1の集約コマンドをバッファに記憶することと、少なくとも1つの第1のアドレスが少なくとも1つの第2のアドレスと一致することに応じて、第1のコマンドをバッファから削除することと、を含む。 As disclosed herein, the method includes receiving a command stream including a first command including at least one first read address of data to be read by the first command and a first write address of data to be written by the first command, comparing the at least one first read address and the first write address with at least one second read address and second write address of a second command stored in a buffer, and combining the first command and the second command to form a first aggregate command in response to the at least one first read address matching the at least one second read address and the first write address matching the second write address. In one aspect, receiving the first command includes storing the first command in a buffer in response to the at least one first read address not matching the at least one second read address or the first write address not matching the second write address. In another aspect, the method includes storing a first aggregated command in a buffer in response to the at least one first read address matching the at least one second read address, and deleting the first command from the buffer in response to the at least one first address matching the at least one second address.
一態様では、少なくとも1つの第1の読み出しアドレス、少なくとも1つの第2の読み出しアドレス、第1の書き込みアドレス、及び、第2の書き込みアドレスは、所定の長さを有するキャッシュラインを示す。別の態様では、方法は、第1のコマンドで示される少なくとも1つの第1のオフセットに基づいて、第1のコマンドによって読み出されるキャッシュラインの少なくとも1つの第1の部分を識別することと、第2のコマンドで示される少なくとも1つの第2のオフセットに基づいて、第2のコマンドによって読み出されるキャッシュラインの少なくとも1つの第2の部分を識別することと、を含む。さらに別の態様では、方法は、第1のコマンド及び第2のコマンドを結合して集約コマンドを生成することは、少なくとも1つの第1の部分及び少なくとも1つの第2の部分を示すマスクを生成することを含む。さらに別の態様では、方法は、第3のコマンドによって読み出されるデータの少なくとも1つの第3の読み出しアドレスと、第3のコマンドによって書き込まれるデータの第3の書き込みアドレスと、を含む第3のコマンドを含むコマンドストリームを受信することと、少なくとも1つの第3の読み出しアドレス及び第3の書き込みアドレスを、バッファに記憶された第4のコマンドの少なくとも1つの第4の読み出しアドレス及び第4の書き込みアドレスと比較することと、少なくとも1つの第3の読み出しアドレスが少なくとも1つの第4の読み出しアドレスと一致し、第3の書き込みアドレスが第4の書き込みアドレスと一致することに応じて、第3のコマンド及び第4のコマンドを結合して第2の集約コマンドを形成することと、を含む。 In one aspect, the at least one first read address, the at least one second read address, the first write address, and the second write address indicate a cache line having a predetermined length. In another aspect, the method includes identifying at least one first portion of the cache line read by the first command based on at least one first offset indicated in the first command, and identifying at least one second portion of the cache line read by the second command based on at least one second offset indicated in the second command. In yet another aspect, the method includes combining the first command and the second command to generate an aggregate command includes generating a mask indicative of the at least one first portion and the at least one second portion. In yet another aspect, the method includes receiving a command stream including a third command including at least one third read address of data to be read by the third command and a third write address of data to be written by the third command; comparing the at least one third read address and the third write address to at least one fourth read address and fourth write address of a fourth command stored in the buffer; and, in response to the at least one third read address matching the at least one fourth read address and the third write address matching the fourth write address, combining the third command and the fourth command to form a second aggregate command.
別の態様では、第1のコマンド及び第2のコマンドは、コマンドストリームの第3のコマンド及び第4のコマンドとインタリーブされる。さらに別の態様では、方法は、第1のコマンドと第2のコマンドとの間に依存関係が存在するかどうかを判別することを含み、第1のコマンド及び第2のコマンドを結合することは、依存関係が存在するかどうかに基づいて、第1のコマンド及び第2のコマンドを選択的に結合することを含む。 In another aspect, the first command and the second command are interleaved with the third command and the fourth command in the command stream. In yet another aspect, the method includes determining whether a dependency exists between the first command and the second command, and combining the first command and the second command includes selectively combining the first command and the second command based on whether the dependency exists.
本明細書に開示するように、装置は、第1のコマンドによって読み出されるデータの少なくとも1つの第1の読み出しアドレスと、第1のコマンドによって書き込まれるデータの第1の書き込みアドレスをと、含む第1のコマンドを記憶するように構成されたバッファと、少なくとも1つの第1の読み出しアドレス及び第1の書き込みアドレスを、バッファに記憶された第2のコマンドの少なくとも1つの第2の読み出しアドレス及び第2の書き込みアドレスと比較するように構成された演算結合器と、を備え、演算結合器は、少なくとも1つの第1の読み出しアドレスが少なくとも1つの第2の読み出しアドレスと一致し、第1の書き込みアドレスが第2の書き込みアドレスと一致することに応じて、第1のコマンド及び第2のコマンドを結合して第1の集約コマンドを形成するように構成されている。一態様では、バッファは、少なくとも1つの第1の読み出しアドレスが少なくとも1つの第2の読み出しアドレスと一致することに応じて、第1の集約コマンドを記憶するように構成されており、第1のコマンドは、少なくとも1つ第1のアドレスが少なくとも1つの第2のアドレスと一致することに応じて、バッファから削除される。別の態様では、少なくとも1つの第1の読み出しアドレス、少なくとも1つの第2の読み出しアドレス、第1の書き込みアドレス、及び、第2の書き込みアドレスは、所定の長さを有するキャッシュラインを示す。 As disclosed herein, the apparatus includes a buffer configured to store a first command including at least one first read address of data to be read by the first command and a first write address of data to be written by the first command, and an operational combiner configured to compare the at least one first read address and the first write address with at least one second read address and second write address of a second command stored in the buffer, the operational combiner configured to combine the first command and the second command to form a first aggregate command in response to the at least one first read address matching the at least one second read address and the first write address matching the second write address. In one aspect, the buffer is configured to store the first aggregate command in response to the at least one first read address matching the at least one second read address, and the first command is deleted from the buffer in response to the at least one first address matching the at least one second address. In another aspect, the at least one first read address, the at least one second read address, the first write address, and the second write address indicate a cache line having a predetermined length.
一態様では、演算結合器は、第1のコマンドで示される少なくとも1つの第1のオフセットに基づいて、第1のコマンドによって読み出されるキャッシュラインの少なくとも1つの第1の部分を識別し、第2のコマンドで示される少なくとも1つの第2のオフセットに基づいて、第2のコマンドによって読み出されるキャッシュラインの少なくとも1つの第2の部分を識別するように構成されている。別の態様では、演算結合器は、少なくとも1つの第1の部分及び少なくとも1つの第2の部分を示すマスクを生成するように構成されている。さらに別の態様では、バッファは、第3のコマンドによって読み出されるデータの少なくとも1つの第3の読み出しアドレスと、第3のコマンドによって書き込まれるデータの第3の書き込みアドレスと、を含む第3のコマンドを記憶するように構成されており、作業結合器は、少なくとも1つの第3の読み出しアドレス及び第3の書き込みアドレスを、バッファに記憶された第4のコマンドの少なくとも1つの第4の読み出しアドレス及び第4の書き込みアドレスと比較するように構成されており、演算結合器は、少なくとも1つの第3の読み出しアドレスが少なくとも1つの第4の読み出しアドレスと一致し、第3の書き込みアドレスが第4の書き込みアドレスと一致することに応じて、第3のコマンド及び第4のコマンドを結合して第2の集約コマンドを形成するように構成されている。 In one aspect, the operational combiner is configured to identify at least one first portion of the cache line read by the first command based on at least one first offset indicated in the first command, and to identify at least one second portion of the cache line read by the second command based on at least one second offset indicated in the second command. In another aspect, the operational combiner is configured to generate a mask indicative of the at least one first portion and the at least one second portion. In yet another aspect, the buffer is configured to store a third command including at least one third read address of data to be read by the third command and a third write address of data to be written by the third command, the work combiner is configured to compare the at least one third read address and the third write address with at least one fourth read address and fourth write address of a fourth command stored in the buffer, and the operation combiner is configured to combine the third command and the fourth command to form a second aggregate command in response to the at least one third read address matching the at least one fourth read address and the third write address matching the fourth write address.
一態様では、バッファは、第2の集約コマンドを記憶するように構成されている。別の態様では、第1のコマンド及び第2のコマンドは、第3のコマンド及び第4のコマンドとインタリーブされる。さらに別の態様では、演算結合器は、第1のコマンドと第2のコマンドとの間に依存関係が存在するかどうかを判別するように構成されており、演算結合器は、依存関係が存在するかどうかに基づいて第1のコマンド及び第2のコマンドを選択的に結合するように構成されている。 In one aspect, the buffer is configured to store the second aggregate command. In another aspect, the first command and the second command are interleaved with the third command and the fourth command. In yet another aspect, the operational combiner is configured to determine whether a dependency exists between the first command and the second command, and the operational combiner is configured to selectively combine the first command and the second command based on whether a dependency exists.
本明細書に開示するように、方法は、データを圧縮するために使用されるコマンドのストリーム内の第1のコマンドの第1の読み出しアドレス及び書き込みアドレスを、ストリーム内の第2のコマンドの第2の読み出しアドレス及び書き込みアドレスと比較することと、第1の読み出しコマンド及び書き込みコマンドがキャッシュラインを示し、第2の読み出しアドレス及び書き込みアドレスが同じキャッシュラインを示すかどうかに基づいて、第1のコマンド及び第2のコマンドを選択的に結合して集約コマンドを形成することと、を含む。一態様では、コマンドのストリームは、グラフィックスプロセッシングユニットによって生成されたグラフィックスデータを圧縮するために使用される。 As disclosed herein, the method includes comparing a first read address and a write address of a first command in a stream of commands used to compress data to a second read address and a write address of a second command in the stream, and selectively combining the first command and the second command to form an aggregate command based on whether the first read command and the write command indicate a cache line and the second read address and the write address indicate the same cache line. In one aspect, the stream of commands is used to compress graphics data generated by a graphics processing unit.
コンピュータ可読記憶媒体は、命令及び/又はデータをコンピュータシステムに提供するために、使用中にコンピュータシステムによってアクセス可能な任意の非一時的な記憶媒体又は非一時的な記憶媒体の組み合わせを含む。このような記憶媒体には、限定されないが、光学媒体(例えば、コンパクトディスク(CD)、デジタル多用途ディスク(DVD)、ブルーレイ(登録商標)ディスク)、磁気媒体(例えば、フロッピー(登録商標)ディスク、磁気テープ、磁気ハードドライブ)、揮発性メモリ(例えば、ランダムアクセスメモリ(RAM)若しくはキャッシュ)、不揮発性メモリ(例えば、読取専用メモリ(ROM)若しくはフラッシュメモリ)、又は、微小電気機械システム(MEMS)ベースの記憶媒体が含まれ得る。コンピュータ可読記憶媒体(例えば、システムRAM又はROM)はコンピューティングシステムに内蔵されてもよいし、コンピュータ可読記憶媒体(例えば、磁気ハードドライブ)はコンピューティングシステムに固定的に取り付けられてもよいし、コンピュータ可読記憶媒体(例えば、光学ディスク又はユニバーサルシリアルバス(USB)ベースのフラッシュメモリ)はコンピューティングシステムに着脱可能に取り付けられてもよいし、コンピュータ可読記憶媒体(例えば、ネットワークアクセス可能ストレージ(NAS))は有線又は無線ネットワークを介してコンピュータシステムに結合されてもよい。 A computer-readable storage medium includes any non-transitory storage medium or combination of non-transitory storage media that can be accessed by a computer system during use to provide instructions and/or data to the computer system. Such storage media may include, but are not limited to, optical media (e.g., compact discs (CDs), digital versatile discs (DVDs), Blu-ray discs), magnetic media (e.g., floppy disks, magnetic tape, magnetic hard drives), volatile memory (e.g., random access memory (RAM) or cache), non-volatile memory (e.g., read-only memory (ROM) or flash memory), or microelectromechanical systems (MEMS)-based storage media. The computer-readable storage medium (e.g., system RAM or ROM) may be built into the computing system, the computer-readable storage medium (e.g., a magnetic hard drive) may be fixedly attached to the computing system, the computer-readable storage medium (e.g., an optical disk or a Universal Serial Bus (USB)-based flash memory) may be removably attached to the computing system, or the computer-readable storage medium (e.g., network-accessible storage (NAS)) may be coupled to the computer system via a wired or wireless network.
いくつかの実施形態では、上記の技術のいくつかの態様は、ソフトウェアを実行するプロセッシングシステムの1つ以上のプロセッサによって実装されてもよい。ソフトウェアは、非一時的なコンピュータ可読記憶媒体に記憶され、又は、非一時的なコンピュータ可読記憶媒体上で有形に具現化された実行可能命令の1つ以上のセットを含む。ソフトウェアは、1つ以上のプロセッサによって実行されると、上記の技術の1つ以上の態様を実行するように1つ以上のプロセッサを操作する命令及び特定のデータを含むことができる。非一時的なコンピュータ可読記憶媒体は、例えば、磁気若しくは光ディスク記憶デバイス、例えばフラッシュメモリ、キャッシュ、ランダムアクセスメモリ(RAM)等のソリッドステート記憶デバイス、又は、他の1つ以上の不揮発性メモリデバイス等を含むことができる。非一時的なコンピュータ可読記憶媒体に記憶された実行可能命令は、ソースコード、アセンブリ言語コード、オブジェクトコード、又は、1つ以上のプロセッサによって解釈若しくは実行可能な他の命令フォーマットであってもよい。 In some embodiments, some aspects of the above techniques may be implemented by one or more processors of a processing system executing software. The software includes one or more sets of executable instructions stored in or tangibly embodied on a non-transitory computer-readable storage medium. The software may include instructions and specific data that, when executed by one or more processors, operate the one or more processors to perform one or more aspects of the above techniques. The non-transitory computer-readable storage medium may include, for example, a magnetic or optical disk storage device, a solid-state storage device such as a flash memory, a cache, a random access memory (RAM), or one or more other non-volatile memory devices. The executable instructions stored on the non-transitory computer-readable storage medium may be source code, assembly language code, object code, or other instruction formats that can be interpreted or executed by one or more processors.
上述したものに加えて、概要説明において説明した全てのアクティビティ又は要素が必要とされているわけではなく、特定のアクティビティ又はデバイスの一部が必要とされない場合があり、1つ以上のさらなるアクティビティが実行される場合があり、1つ以上のさらなる要素が含まれる場合があることに留意されたい。さらに、アクティビティが列挙された順序は、必ずしもそれらが実行される順序ではない。また、概念は、特定の実施形態を参照して説明された。しかしながら、当業者であれば、特許請求の範囲に記載されているような本発明の範囲から逸脱することなく、様々な変更及び変形を行うことができるのを理解するであろう。したがって、明細書及び図面は、限定的な意味ではなく例示的な意味で考慮されるべきであり、これらの変更形態の全ては、本発明の範囲内に含まれることが意図される。 In addition to the above, it should be noted that not all activities or elements described in the general description are required, some of the particular activities or devices may not be required, one or more additional activities may be performed, and one or more additional elements may be included. Moreover, the order in which the activities are listed is not necessarily the order in which they are performed. Also, the concepts have been described with reference to specific embodiments. However, those skilled in the art will recognize that various modifications and variations can be made without departing from the scope of the invention as set forth in the claims. Accordingly, the specification and drawings should be considered in an illustrative and not a restrictive sense, and all such modifications are intended to be included within the scope of the invention.
利益、他の利点及び問題に対する解決手段を、特定の実施形態に関して上述した。しかし、利益、利点、問題に対する解決手段、及び、何かしらの利益、利点若しくは解決手段が発生又は顕在化する可能性のある特徴は、何れか若しくは全ての請求項に重要な、必須の、又は、不可欠な特徴と解釈されない。さらに、開示された発明は、本明細書の教示の利益を有する当業者には明らかな方法であって、異なっているが同様の方法で修正され実施され得ることから、上述した特定の実施形態は例示にすぎない。添付の特許請求の範囲に記載されている以外に本明細書に示されている構成又は設計の詳細については限定がない。したがって、上述した特定の実施形態は、変更又は修正されてもよく、かかる変更形態の全ては、開示された発明の範囲内にあると考えられることが明らかである。したがって、ここで要求される保護は、添付の特許請求の範囲に記載されている。 Benefits, other advantages, and solutions to problems have been described above with respect to specific embodiments. However, the benefits, advantages, solutions to problems, and features by which any benefit, advantage, or solution may occur or be manifested are not to be construed as critical, essential, or essential features of any or all claims. Moreover, the specific embodiments described above are illustrative only, since the disclosed invention may be modified and practiced in different but similar manners apparent to those skilled in the art having the benefit of the teachings herein. No limitations are intended to the details of construction or design shown herein other than as described in the appended claims. It is therefore apparent that the specific embodiments described above may be altered or modified, and all such variations are considered to be within the scope of the disclosed invention. Accordingly, the protection sought herein is set forth in the appended claims.
Claims (16)
第1のコマンドによって読み出されるデータの少なくとも1つの第1の読み出しアドレスと、前記第1のコマンドによって書き込まれるデータの第1の書き込みアドレスと、を含む前記第1のコマンドを含むコマンドストリームを受信することと、
前記少なくとも1つの第1の読み出しアドレス及び前記第1の書き込みアドレスを、バッファに記憶された第2のコマンドの少なくとも1つの第2の読み出しアドレス及び第2の書き込みアドレスと比較することと、
前記少なくとも1つの第1の読み出しアドレスが前記少なくとも1つの第2の読み出しアドレスと一致し、前記第1の書き込みアドレスが前記第2の書き込みアドレスと一致することに応じて、前記第1のコマンド及び前記第2のコマンドを結合して、後に実行される第1の集約コマンドを形成することであって、前記第1の集約コマンドは、前記第1の読み出しアドレス及び前記第2の読み出しアドレスに対応する読み出しアドレスと、前記第1の書き込みアドレス及び前記第2の書き込みアドレスに対応する書き込みアドレスであって、前記読み出しアドレスとは別個の書き込みアドレスと、を含む、ことと、
前記第1の集約コマンドの前記読み出しアドレス及び前記書き込みアドレスを、実行のためにバックエンドに提供することと、を含む、
方法。 1. A method comprising:
receiving a command stream including a first command including at least a first read address of data to be read by the first command and a first write address of data to be written by the first command;
comparing the at least one first read address and the first write address to at least one second read address and a second write address of a second command stored in a buffer;
in response to the at least one first read address matching the at least one second read address and the first write address matching the second write address, combining the first command and the second command to form a first aggregate command for subsequent execution , the first aggregate command including a read address corresponding to the first read address and the second read address, and a write address corresponding to the first write address and the second write address, the write address being distinct from the read addresses;
providing the read address and the write address of the first aggregated command to a backend for execution.
method.
請求項1の方法。 receiving the first command includes storing the first command in the buffer in response to the at least one first read address not matching the at least one second read address or the first write address not matching the second write address.
2. The method of claim 1.
前記少なくとも1つの第1の読み出しアドレスが前記少なくとも1つの第2の読み出しアドレスと一致することに応じて、前記第1のコマンドを前記バッファから削除することと、をさらに含む、
請求項2の方法。 storing the first aggregate command in the buffer in response to the at least one first read address matching the at least one second read address;
and removing the first command from the buffer in response to the at least one first read address matching the at least one second read address.
The method of claim 2.
前記第1のコマンドで示される少なくとも1つの第1のオフセットに基づいて、前記第1のコマンドによって読み出される前記キャッシュラインの少なくとも1つの第1の部分を識別することと、
前記第2のコマンドで示される少なくとも1つの第2のオフセットに基づいて、前記第2のコマンドによって読み出される前記キャッシュラインの少なくとも1つの第2の部分を識別することと、をさらに含む、
請求項1の方法。 the at least one first read address, the at least one second read address, the first write address, and the second write address indicate a cache line having a predetermined length;
identifying at least one first portion of the cache line to be read by the first command based on at least one first offset indicated in the first command;
and identifying at least one second portion of the cache line to be read by the second command based on at least one second offset indicated in the second command.
2. The method of claim 1.
請求項4の方法。 Combining the first command and the second command to generate the first aggregate command includes generating a mask indicative of the at least one first portion and the at least one second portion.
The method of claim 4.
前記少なくとも1つの第3の読み出しアドレス及び前記第3の書き込みアドレスを、バッファに記憶された第4のコマンドの少なくとも1つの第4の読み出しアドレス及び第4の書き込みアドレスと比較することと、
前記少なくとも1つの第3の読み出しアドレスが前記少なくとも1つの第4の読み出しアドレスと一致し、前記第3の書き込みアドレスが前記第4の書き込みアドレスと一致することに応じて、前記第3のコマンド及び前記第4のコマンドを結合して第2の集約コマンドを形成することと、をさらに含む、
請求項1の方法。 receiving the command stream including a third command including at least a third read address of data to be read by the third command and a third write address of data to be written by the third command;
comparing the at least one third read address and the third write address to at least one fourth read address and a fourth write address of a fourth command stored in a buffer;
and in response to the at least one third read address matching the at least one fourth read address and the third write address matching the fourth write address, combining the third command and the fourth command to form a second aggregate command.
2. The method of claim 1.
請求項6の方法。 the first command and the second command are interleaved with the third command and the fourth command in the command stream.
The method of claim 6.
前記第1のコマンド及び前記第2のコマンドを結合することは、前記依存関係が存在するかどうかに基づいて、前記第1のコマンド及び前記第2のコマンドを選択的に結合することを含む、
請求項1の方法。 determining whether a dependency exists between the first command and the second command;
combining the first command and the second command includes selectively combining the first command and the second command based on whether the dependency relationship exists.
2. The method of claim 1.
第1のコマンドによって読み出されるデータの少なくとも1つの第1の読み出しアドレスと、前記第1のコマンドによって書き込まれるデータの第1の書き込みアドレスと、を含む前記第1のコマンドを記憶するように構成されたバッファと、
前記少なくとも1つの第1の読み出しアドレス及び前記第1の書き込みアドレスを、前記バッファに記憶された第2のコマンドの少なくとも1つの第2の読み出しアドレス及び第2の書き込みアドレスと比較するように構成された演算結合器と、を備え、
前記演算結合器は、
前記少なくとも1つの第1の読み出しアドレスが前記少なくとも1つの第2の読み出しアドレスと一致し、前記第1の書き込みアドレスが前記第2の書き込みアドレスと一致することに応じて、前記第1のコマンド及び前記第2のコマンドを結合して、後に実行される第1の集約コマンドを形成することであって、前記第1の集約コマンドは、前記第1の読み出しアドレス及び前記第2の読み出しアドレスに対応する読み出しアドレスと、前記第1の書き込みアドレス及び前記第2の書き込みアドレスに対応する書き込みアドレスであって、前記読み出しアドレスとは別個の書き込みアドレスと、を含む、ことと、
前記第1の集約コマンドの前記読み出しアドレス及び前記書き込みアドレスを、実行のためにバックエンドに提供することと、
を行うように構成されている、
装置。 An apparatus comprising:
a buffer configured to store a first command including at least a first read address of data to be read by the first command and a first write address of data to be written by the first command;
an operational combiner configured to compare the at least one first read address and the first write address with at least one second read address and a second write address of a second command stored in the buffer;
The operational combiner comprises:
in response to the at least one first read address matching the at least one second read address and the first write address matching the second write address, combining the first command and the second command to form a first aggregate command for subsequent execution , the first aggregate command including a read address corresponding to the first read address and the second read address, and a write address corresponding to the first write address and the second write address, the write address being distinct from the read addresses;
providing the read address and the write address of the first aggregate command to a backend for execution;
4. The method of claim 3,
Device.
前記第1のコマンドは、前記少なくとも1つの第1の読み出しアドレスが前記少なくとも1つの第2の読み出しアドレスと一致することに応じて、前記バッファから削除される、
請求項9の装置。 the buffer is configured to store the first aggregate command in response to the at least one first read address matching the at least one second read address;
the first command is removed from the buffer in response to the at least one first read address matching the at least one second read address.
10. The apparatus of claim 9.
前記演算結合器は、
前記第1のコマンドで示される少なくとも1つの第1のオフセットに基づいて、前記第1のコマンドによって読み出される前記キャッシュラインの少なくとも1つの第1の部分を識別し、
前記第2のコマンドで示される少なくとも1つの第2のオフセットに基づいて、前記第2のコマンドによって読み出される前記キャッシュラインの少なくとも1つの第2の部分を識別する、ように構成されている、
請求項9の装置。 the at least one first read address, the at least one second read address, the first write address, and the second write address indicate a cache line having a predetermined length;
The operational combiner comprises:
identifying at least one first portion of the cache line to be read by the first command based on at least one first offset indicated in the first command;
and identifying at least one second portion of the cache line to be read by the second command based on at least one second offset indicated in the second command.
10. The apparatus of claim 9.
請求項11の装置。 the operational combiner is configured to generate a mask indicative of the at least one first portion and the at least one second portion.
12. The apparatus of claim 11.
前記演算結合器は、前記少なくとも1つの第3の読み出しアドレス及び前記第3の書き込みアドレスを、バッファに記憶された第4のコマンドの少なくとも1つの第4の読み出しアドレス及び第4の書き込みアドレスと比較するように構成されており、
前記演算結合器は、前記少なくとも1つの第3の読み出しアドレスが前記少なくとも1つの第4の読み出しアドレスと一致し、前記第3の書き込みアドレスが前記第4の書き込みアドレスと一致することに応じて、前記第3のコマンド及び前記第4のコマンドを結合して第2の集約コマンドを形成するように構成されている、
請求項9の装置。 the buffer is configured to store the third command including at least one third read address of data to be read by the third command and a third write address of data to be written by the third command;
the operational combiner is configured to compare the at least one third read address and the third write address to at least one fourth read address and a fourth write address of a fourth command stored in a buffer;
the operational combiner is configured to combine the third command and the fourth command to form a second aggregate command in response to the at least one third read address matching the at least one fourth read address and the third write address matching the fourth write address.
10. The apparatus of claim 9.
請求項13の装置。 the buffer is configured to store the second aggregate command;
14. The apparatus of claim 13.
請求項14の装置。 the first command and the second command are interleaved with the third command and the fourth command.
15. The apparatus of claim 14.
前記演算結合器は、前記依存関係が存在するかどうかに基づいて前記第1のコマンド及び前記第2のコマンドを選択的に結合するように構成されている、
請求項9の装置。 the operational combiner is configured to determine whether a dependency exists between the first command and the second command;
the operational combiner is configured to selectively combine the first command and the second command based on whether the dependency relationship exists.
10. The apparatus of claim 9.
Applications Claiming Priority (3)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| US16/205,094 | 2018-11-29 | ||
| US16/205,094 US11614889B2 (en) | 2018-11-29 | 2018-11-29 | Aggregating commands in a stream based on cache line addresses |
| PCT/US2019/037657 WO2020112169A1 (en) | 2018-11-29 | 2019-06-18 | Aggregating commands in a stream based on cache line addresses |
Publications (2)
| Publication Number | Publication Date |
|---|---|
| JP2022510281A JP2022510281A (en) | 2022-01-26 |
| JP7561125B2 true JP7561125B2 (en) | 2024-10-03 |
Family
ID=70850170
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP2021530941A Active JP7561125B2 (en) | 2018-11-29 | 2019-06-18 | Aggregation of commands in a stream based on cache line address |
Country Status (6)
| Country | Link |
|---|---|
| US (1) | US11614889B2 (en) |
| EP (1) | EP3887932B1 (en) |
| JP (1) | JP7561125B2 (en) |
| KR (1) | KR102736174B1 (en) |
| CN (1) | CN113227957B (en) |
| WO (1) | WO2020112169A1 (en) |
Families Citing this family (6)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN102050679B (en) * | 2011-01-14 | 2013-02-06 | 福建工程学院 | Straw powder-based anti-blocking agent of compound fertilizer |
| US11422897B2 (en) * | 2019-07-31 | 2022-08-23 | Rubrik, Inc. | Optimizing snapshot image processing |
| US12105984B2 (en) * | 2020-08-27 | 2024-10-01 | Micron Technology, Inc. | Bubble break register in semiconductor device |
| US12498883B2 (en) * | 2020-12-04 | 2025-12-16 | Sk Hynix Nand Product Solutions Corp. | Network device intermediary for memory access requests |
| WO2024103338A1 (en) * | 2022-11-17 | 2024-05-23 | Nvidia Corporation | Application programming interface to perform asynchronous data movement |
| CN115878521B (en) * | 2023-01-17 | 2023-07-21 | 北京象帝先计算技术有限公司 | Command processing system, electronic device and electronic equipment |
Citations (5)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US20020087801A1 (en) | 2000-12-29 | 2002-07-04 | Zohar Bogin | Method and system for servicing cache line in response to partial cache line request |
| US20060090044A1 (en) | 2004-10-21 | 2006-04-27 | International Business Machines Corporation | Memory controller and method for optimized read/modify/write performance |
| JP2014063385A (en) | 2012-09-21 | 2014-04-10 | Fujitsu Ltd | Arithmetic processing unit and method for controlling arithmetic processing unit |
| JP2017045151A (en) | 2015-08-24 | 2017-03-02 | 富士通株式会社 | Arithmetic processing device and control method of arithmetic processing device |
| WO2017125709A1 (en) | 2016-01-20 | 2017-07-27 | Arm Limited | Vector atomic memory update instruction |
Family Cites Families (27)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US5586294A (en) * | 1993-03-26 | 1996-12-17 | Digital Equipment Corporation | Method for increased performance from a memory stream buffer by eliminating read-modify-write streams from history buffer |
| US6249851B1 (en) * | 1998-08-25 | 2001-06-19 | Stmicroelectronics, Inc. | Computer system having non-blocking cache and pipelined bus interface unit |
| JP2000132404A (en) * | 1998-10-22 | 2000-05-12 | Matsushita Electric Ind Co Ltd | Instruction sequence optimizer |
| US6434639B1 (en) * | 1998-11-13 | 2002-08-13 | Intel Corporation | System for combining requests associated with one or more memory locations that are collectively associated with a single cache line to furnish a single memory operation |
| GB9825999D0 (en) * | 1998-11-28 | 1999-01-20 | British Aerospace | A machine for laying up fabric to produce a laminate |
| US7440469B2 (en) * | 2003-10-14 | 2008-10-21 | Broadcom Corporation | Descriptor write back delay mechanism to improve performance |
| US8301844B2 (en) * | 2004-01-13 | 2012-10-30 | Hewlett-Packard Development Company, L.P. | Consistency evaluation of program execution across at least one memory barrier |
| US20060248520A1 (en) * | 2004-02-12 | 2006-11-02 | Teruo Kawabata | Program conversion device and program conversion method |
| US20080235484A1 (en) * | 2007-03-22 | 2008-09-25 | Uri Tal | Method and System for Host Memory Alignment |
| US8041755B2 (en) * | 2007-06-08 | 2011-10-18 | Apple Inc. | Fast static rotator/shifter with non two's complemented decode and fast mask generation |
| US8446955B2 (en) * | 2007-12-28 | 2013-05-21 | Advanced Micro Devices, Inc. | Speculative motion prediction cache |
| US8112595B1 (en) * | 2008-05-01 | 2012-02-07 | Marvell Semiconductor Israel Ltd. | Command cancellation channel for read—modify—write operation in a memory |
| US8935483B2 (en) * | 2009-04-27 | 2015-01-13 | Lsi Corporation | Concurrent, coherent cache access for multiple threads in a multi-core, multi-thread network processor |
| US9183145B2 (en) * | 2009-04-27 | 2015-11-10 | Intel Corporation | Data caching in a network communications processor architecture |
| GB2483282B (en) * | 2010-09-03 | 2017-09-13 | Advanced Risc Mach Ltd | Data compression and decompression using relative and absolute delta values |
| US8595414B2 (en) * | 2010-09-30 | 2013-11-26 | Apple Inc. | Selectively combining commands for a system having non-volatile memory |
| US20120221767A1 (en) | 2011-02-28 | 2012-08-30 | Apple Inc. | Efficient buffering for a system having non-volatile memory |
| CN102377516A (en) * | 2011-06-22 | 2012-03-14 | 钜泉光电科技(上海)股份有限公司 | Data processing method and device |
| US8984182B2 (en) * | 2011-10-06 | 2015-03-17 | Marvell International Ltd. | SCSI I/O command aggregation |
| US9612972B2 (en) * | 2012-12-03 | 2017-04-04 | Micron Technology, Inc. | Apparatuses and methods for pre-fetching and write-back for a segmented cache memory |
| GB2516864A (en) * | 2013-08-02 | 2015-02-11 | Ibm | Increased instruction issue rate and latency reduction for out-of-order processing by instruction chaining and collision avoidance |
| US9092345B2 (en) * | 2013-08-08 | 2015-07-28 | Arm Limited | Data processing systems |
| US9348518B2 (en) * | 2014-07-02 | 2016-05-24 | International Business Machines Corporation | Buffered automated flash controller connected directly to processor memory bus |
| KR20180045102A (en) * | 2016-10-24 | 2018-05-04 | 삼성전자주식회사 | Operation methods of memory controller and storage device including memory controller |
| US10552340B2 (en) * | 2017-02-28 | 2020-02-04 | Oracle International Corporation | Input/output direct memory access during live memory relocation |
| US20190034306A1 (en) * | 2017-07-31 | 2019-01-31 | Intel Corporation | Computer System, Computer System Host, First Storage Device, Second Storage Device, Controllers, Methods, Apparatuses and Computer Programs |
| US10678478B2 (en) * | 2018-08-24 | 2020-06-09 | Apple Inc. | Ordering memory requests based on access efficiency |
-
2018
- 2018-11-29 US US16/205,094 patent/US11614889B2/en active Active
-
2019
- 2019-06-18 JP JP2021530941A patent/JP7561125B2/en active Active
- 2019-06-18 WO PCT/US2019/037657 patent/WO2020112169A1/en not_active Ceased
- 2019-06-18 KR KR1020217018960A patent/KR102736174B1/en active Active
- 2019-06-18 EP EP19888288.8A patent/EP3887932B1/en active Active
- 2019-06-18 CN CN201980084845.4A patent/CN113227957B/en active Active
Patent Citations (5)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US20020087801A1 (en) | 2000-12-29 | 2002-07-04 | Zohar Bogin | Method and system for servicing cache line in response to partial cache line request |
| US20060090044A1 (en) | 2004-10-21 | 2006-04-27 | International Business Machines Corporation | Memory controller and method for optimized read/modify/write performance |
| JP2014063385A (en) | 2012-09-21 | 2014-04-10 | Fujitsu Ltd | Arithmetic processing unit and method for controlling arithmetic processing unit |
| JP2017045151A (en) | 2015-08-24 | 2017-03-02 | 富士通株式会社 | Arithmetic processing device and control method of arithmetic processing device |
| WO2017125709A1 (en) | 2016-01-20 | 2017-07-27 | Arm Limited | Vector atomic memory update instruction |
Also Published As
| Publication number | Publication date |
|---|---|
| WO2020112169A1 (en) | 2020-06-04 |
| EP3887932A1 (en) | 2021-10-06 |
| CN113227957A (en) | 2021-08-06 |
| JP2022510281A (en) | 2022-01-26 |
| KR20210086708A (en) | 2021-07-08 |
| US20200174697A1 (en) | 2020-06-04 |
| US11614889B2 (en) | 2023-03-28 |
| EP3887932A4 (en) | 2022-08-10 |
| CN113227957B (en) | 2025-03-07 |
| EP3887932B1 (en) | 2025-07-30 |
| KR102736174B1 (en) | 2024-12-02 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| JP7561125B2 (en) | Aggregation of commands in a stream based on cache line address | |
| JP4750157B2 (en) | Method and apparatus for rightward parallel shift merging of data | |
| JP5764257B2 (en) | System, apparatus, and method for register alignment | |
| TWI556165B (en) | Bit shuffling processor, method, system and instruction | |
| CN104487957B (en) | Method and device for programmed state machine engine | |
| TWI582690B (en) | Apparatus and method for sliding window data access | |
| CN105229599B (en) | Efficient hardware instructions for SIMD processors | |
| JP6466388B2 (en) | Method and apparatus | |
| KR101776227B1 (en) | Instructions for sliding window encoding algorithms | |
| TWI489383B (en) | Apparatus and method of mask permute instructions | |
| TWI575451B (en) | Method and apparatus for variable expansion between a mask and a vector register | |
| JP7138169B2 (en) | Compression and decompression of indices in the graphics pipeline | |
| TW201722088A (en) | Systems, methods, and apparatuses for decompression using hardware and software | |
| US12106104B2 (en) | Processor instructions for data compression and decompression | |
| TW201732734A (en) | Apparatus and method for accelerating graph analytics | |
| JP2014510351A (en) | System, apparatus, and method for performing jump using mask register | |
| TWI544412B (en) | Apparatuses and methods for generating a suppressed address trace | |
| TWI766891B (en) | Processor of semiconductor device and method of operating same | |
| TWI544408B (en) | Apparatus and method for sliding window data gather | |
| JP2007034392A (en) | Information processor and data processing method | |
| JP5710833B2 (en) | Method and apparatus for realizing data transmission between register files | |
| JP7183657B2 (en) | processor, information processing method, program | |
| TW202540890A (en) | Vector cryptographic processing | |
| JP2015148851A (en) | image processing apparatus | |
| JP2008071054A (en) | Data transfer control method, data processing apparatus, and image processing apparatus |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20210729 |
|
| A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20220524 |
|
| A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20230616 |
|
| A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20230627 |
|
| A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20230927 |
|
| A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20231219 |
|
| A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20240419 |
|
| A911 | Transfer to examiner for re-examination before appeal (zenchi) |
Free format text: JAPANESE INTERMEDIATE CODE: A911 Effective date: 20240501 |
|
| 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: 20240827 |
|
| A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20240920 |
|
| R150 | Certificate of patent or registration of utility model |
Ref document number: 7561125 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 |