Efficient hardware instructions for single instruction multiple data processors: fast fixed-length value compression

US11113054B2 · US · B2

Patent metadata
FieldValue
Publication numberUS-11113054-B2
Application numberUS-201615211418-A
CountryUS
Kind codeB2
Filing dateJul 15, 2016
Priority dateSep 10, 2013
Publication dateSep 7, 2021
Grant dateSep 7, 2021

How to read this patent

A practical reading order for non-experts. Skip the full description unless you need deep technical detail.

  1. Title

    What the patent document calls the invention.

  2. Abstract

    A short plain-language summary of the technical disclosure.

  3. Assignees and inventors

    Who owns or filed the patent and who is credited as inventor.

  4. Key dates

    Filing, priority, publication, and grant dates set the timeline.

  5. First independent claim

    The legal scope of protection — read this for what is actually claimed.

  6. CPC / IPC classifications

    Technology tags used to group this patent with similar filings.

  7. Citations and related patents

    Prior art links and similar publications in this corpus.

Abstract

Official abstract text for this publication.

Methods and apparatuses for determining set-membership using Single Instruction Multiple Data (“SIMD”) architecture are presented herein. Specifically, methods and apparatuses are discussed for compressing or packing, in parallel, multiple fixed-length values into a stream of multiple variable-length values using SIMD architecture.

First claim

Opening claim text (preview).

What is claimed is: 1. One or more non-transitory, computer-readable media storing one or more instructions that, when executed by one or more processors, cause producing a vector of variable-length values from a vector of fixed-length values; wherein a first register stores a plurality of fixed-length values from the vector of fixed-length values, wherein each fixed-length value in the vector of fixed-length values is a variable-length value that has been padded, as needed, to achieve a particular fixed length, wherein a series of single instruction multiple data (SIMD) subregisters of a second register stores a plurality of length values from a vector of lengths, wherein each fixed-length value in the vector of fixed-length values corresponds to a length value in the vector of lengths, and wherein each length value in the vector of lengths indicates an unpadded length of a corresponding fixed-length value in the vector of fixed-length values; wherein the one or more instructions, when executed by the one or more processors, cause: storing, in a third register, the plurality of fixed-length values into the vector of variable-length values, wherein storing the vector of variable-length values in the third register is based on the vector of lengths, wherein each variable-length value in the vector of variable-length values is unpadded, and wherein a pointer specifies a memory address of the vector of variable length values stored in the third register; determining, based on the vector of lengths, a particular key in an offset lookup table; determining that a particular offset is indexed in the offset lookup table by the particular key; updating the pointer based on the particular offset. 2. The one or more non-transitory, computer-readable media of claim 1 , wherein each length value in the vector of lengths indicates an unpadded length by indicating a minimum number of bytes needed to represent the fixed-length value to which said each length value corresponds. 3. The one or more non-transitory, computer-readable media of claim 1 , wherein a first length in the vector of lengths is different than a second length in the vector of lengths. 4. The one or more non-transitory, computer-readable media of claim 1 , wherein the one or more instructions, when executed by the one or more processors, cause: generating a scatter-mask based on the vector of lengths; storing, in a series of SIMD subregisters of a fourth register, the scatter-mask; and storing, in the third register, the plurality of fixed-length values into the vector of variable-length values based on the scatter-mask stored in the fourth register. 5. The one or more non-transitory, computer-readable media of claim 1 , wherein a scatter-mask lookup table stores a plurality of scatter-masks, wherein each scatter-mask in the scatter-mask lookup table is indexed by a unique key; wherein the one or more instructions, when executed by the one or more processors, cause: determining, based on the vector of lengths, a particular key in the scatter-mask lookup table; determining that a particular scatter-mask is indexed by the particular key; storing, in a series of SIMD subregisters of a fourth register, the particular scatter-mask; and storing, in the third register, the plurality of fixed-length values into the vector of variable-length values based on the particular scatter-mask stored in the fourth register. 6. The one or more non-transitory, computer-readable media of claim 1 , wherein the one or more instructions, when executed by the one or more processors, cause: generating a shuffle-mask based on the vector of lengths; storing, in a series of SIMD subregisters of a fourth register, the shuffle-mask; and storing, in the third register, the plurality of fixed-length values into the vector of variable-length values based on the shuffle-mask stored in the fourth register. 7. The one or more non-transitory, computer-readable media of claim 1 , wherein a shuffle-mask lookup table stores a plurality of shuffle-masks, wherein each shuffle-mask in the shuffle-mask lookup table is indexed by a unique key; wherein the one or more instructions, when executed by the one or more processors cause: determining, based on the vector of lengths, a particular key in the shuffle-mask lookup table; determining that a particular shuffle-mask is indexed by the particular key; storing, in a series of SIMD subregisters of a fourth register, the particular shuffle-mask; and storing, in the third register, the plurality of fixed-length values into the vector of variable-length values based on the particular shuffle-mask stored in the fourth register. 8. A method for producing a vector of variable-length values from a vector of fixed-length values; wherein a first register stores a plurality of fixed-length values from the vector of fixed-length values, wherein each fixed-length value in the vector of fixed-length values is a variable-length value that has been padded, as needed, to achieve a particular fixed length, wherein a series of single instruction multiple data (SIMD) subregisters of a second register stores a plurality of length values from a vector of lengths, wherein each fixed-length value in the vector of fixed-length values corresponds to a length value in the vector of lengths, and wherein each length value in the vector of lengths indicates an unpadded length of a corresponding fixed-length value in the vector of fixed-length values; the method comprising: storing, in a third register, the plurality of fixed-length values into the vector of variable-length values, wherein storing the vector of variable-length values in the third register is based on the vector of lengths, wherein each variable-length value in the vector of variable-length values is unpadded, and wherein a pointer specifies a memory address of the vector of variable length values stored in the third register; determining, based on the vector of lengths, a particular key in an offset lookup table; determining that a particular offset is indexed in the offset lookup table by the particular key; updating the pointer based on the particular offset. 9. The method of claim 8 , wherein each length value in the vector of lengths indicates an unpadded length by indicating a minimum number of bytes needed to represent the fixed-length value to which said each length value corresponds. 10. The method of claim 8 , wherein a first length in the vector of lengths is different than a second length in the vector of lengths. 11. The method of claim 8 , the method further comprising: generating a scatter-mask based on the vector of lengths; storing, in a series of SIMD subregisters of a fourth register, the scatter-mask; and storing, in the third register, the plurality of fixed-length values into the vector of variable-length values based on the scatter-mask stored in the fourth register. 12. The method of claim 8 , wherein a scatter-mask lookup table stores a plurality of scatter-masks, wherein each scatter-mask in the scatter-mask lookup table is indexed by a unique key; wherein the method further comprising: determining, based on the vector of lengths, a particular key in the scatter-mask lookup table; determining that a particular scatter-mask is indexed by the particular key; storing, in a series of SIMD subregisters of a fourth register, the particular scatter-mask; and storing, in the third register, the plurality of fixed-length values into the vector of variable-length values based on the particular scatter-mask stored in the fourth register. 13. The method of claim 8 , wherein the method further compr

Assignees

Inventors

Classifications

  • using a mask · CPC title

  • Bit or string instructions · CPC title

  • Instructions to perform operations on packed data, e.g. vector, tile or matrix operations · CPC title

  • Vector processors · CPC title

  • Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE · CPC title

Patent family

Related publications grouped by family.

External sources

Frequently asked questions

Answers are generated from the same data shown on this page.

What does patent US11113054B2 cover?
Methods and apparatuses for determining set-membership using Single Instruction Multiple Data (“SIMD”) architecture are presented herein. Specifically, methods and apparatuses are discussed for compressing or packing, in parallel, multiple fixed-length values into a stream of multiple variable-length values using SIMD architecture.
Who is the assignee on this patent?
Oracle Int Corp
What technology area does this patent fall under?
Primary CPC classification G06F9/30036. Mapped technology areas include Physics.
When was this patent published?
Publication date Tue Sep 07 2021 00:00:00 GMT+0000 (Coordinated Universal Time) (B2). Legal status and post-grant events are not shown on this page.
What related patents are in patentsdb?
We list 12 related publications on this page (citations in our corpus or others sharing the same primary CPC).