Efficient hardware instructions for processing bit vectors for single instruction multiple data processors
First Claim
1. A processor that is configured to, in response to one or more instructions:
- load a bit vector into a first register that resides in the processor;
starting at a location in the first register, search the bit vector in the first register for a first set of bits that are set to one;
for each bit in the first set of bits, store a corresponding index value, of one or more of index values, in a SIMD register in the processor;
wherein the SIMD register includes a series of subregisters;
wherein, within the SIMD register, each corresponding index value is stored in a separate subregister of the series of subregisters;
wherein, within the SIMD register, each index value represents a position, within the bit vector, of a corresponding bit that is set to one; and
wherein bits in the bit vector are contiguous.
1 Assignment
0 Petitions
Accused Products
Abstract
A method and apparatus for efficiently processing data in various formats in a single instruction multiple data (“SIMD”) architecture is presented. Specifically, a method to unpack a fixed-width bit values in a bit stream to a fixed width byte stream in a SIMD architecture is presented. A method to unpack variable-length byte packed values in a byte stream in a SIMD architecture is presented. A method to decompress a run length encoded compressed bit-vector in a SIMD architecture is presented. A method to return the offset of each bit set to one in a bit-vector in a SIMD architecture is presented. A method to fetch bits from a bit-vector at specified offsets relative to a base in a SIMD architecture is presented. A method to compare values stored in two SIMD registers is presented.
88 Citations
26 Claims
-
1. A processor that is configured to, in response to one or more instructions:
-
load a bit vector into a first register that resides in the processor; starting at a location in the first register, search the bit vector in the first register for a first set of bits that are set to one; for each bit in the first set of bits, store a corresponding index value, of one or more of index values, in a SIMD register in the processor; wherein the SIMD register includes a series of subregisters; wherein, within the SIMD register, each corresponding index value is stored in a separate subregister of the series of subregisters; wherein, within the SIMD register, each index value represents a position, within the bit vector, of a corresponding bit that is set to one; and wherein bits in the bit vector are contiguous. - View Dependent Claims (2, 3, 4, 5, 6, 7, 8)
-
-
9. A processor that, within the processor, gathers one or more bits from a bit vector into a series of subregisters in a SIMD register:
-
wherein bits in the bit vector are contiguous; wherein each index value in a vector of index values represents a position of a corresponding bit in the bit vector; wherein the processor is configured to respond to one or more instructions by; loading each bit, indexed by the vector of index values, into a separate subregister of the series of subregisters. - View Dependent Claims (10, 11, 12, 13)
-
-
14. A method comprising, in response to one or more instructions:
-
loading a bit vector into a first register; starting at a location in the first registers, search the bit vector in the first register for a first set of bits that are set to one; for each bit in the first set of bits, storing a corresponding index value, of one or more index values, in a SIMD register; wherein the SIMD register includes a series of subregisters; wherein, within the SIMD register, each corresponding index value is stored in a separate subregister of the series of subregisters; wherein, within the SIMD register, each index value represents a position, within the bit vector, of a corresponding bit that is set to one; wherein bits in the bit vector are contiguous. - View Dependent Claims (15, 16, 17, 18, 19, 20, 21)
-
-
22. A method for a processor gathering one or more bits from a bit vector into a series of subregisters in a SIMD register comprising:
-
loading each bit, indexed by a vector of index values, into a separate subregister of the series of subregisters; wherein bits in the bit vector are contiguous; wherein each index value in the vector of index values represents a position of a corresponding bit in the bit vector. - View Dependent Claims (23, 24, 25, 26)
-
Specification