Memory devices are used to store data. Memory devices may have different characteristics based on the value written to the memory device. For example, memory devices may have different electrical profiles based on the value written to the memory device. Different values written to memory may also give memory devices different latencies. Memory devices may develop errors based on the number of times the memory is written.
The accompanying drawings illustrate various examples of the principles described herein and are a part of the specification. The examples do not limit the scope of the claims.
Throughout the drawings, identical reference numbers designate similar, but not necessarily identical, elements.
Memory arrays may provide access to system memory and storage. Some memory arrays such as memristor arrays may provide high speed access to memory. However, while such memory arrays may be beneficial, their use may be impeded by certain complications. For example, some memory arrays, such as memristor arrays, may be organized into cross point arrays that may consume power whenever a bit is read or written. The amount of power consumed during operation may vary based on a number of factors, including the underlying technology and the other values stored in the memory device. Data patterns written to the memory array may alter the power consumption of a system using that device. Some memory arrays may vary in useful lifetime according to the power consumption, state variance within a memory array, or the number of state transitions experienced by a memory array. A reduction in the state variance or state transitions may increase the utility of the memory array.
Accordingly, the systems and methods disclosed herein allow data to be encoded to reduce average power consumption, extend device lifetime, and provide more consistent memory operation by providing for alternative formats to store data within a memory array. For example, data may be written to a memory array in units, such as cache lines. Each storage unit may contain metadata, which is controlled by the system, to provide data protection and additional information. By encoding the data to be written, and storing information regarding the encoding in the additional data, the behavior of a memory array may be altered.
A memory array, such as memristor array, may use more power if various bits are surrounded by bits in a low resistance, or zero state. The data may be encoded to reduce power usage by encoding the data to increase the number of high resistance bits. An example of an encoding would be to invert the value of bits in the data. By encoding data in this matter, data with a low resistance pattern could be modified to have a high resistance pattern, which may reduce power consumption.
In some examples, metadata may be stored in association with the encoded data. The metadata may include information such as an error correction code (ECC), information indicating how the data has been encoded, or similar information. When the data is retrieved, the additional data may be read to provide how the data was encoded, allowing for the data to be decoded and restored to its original state.
The present disclosure describes a method for encoding data in a memory array. The method may include receiving data to be stored in the memory array. The method may also include encoding the data to generate a number of encoded data versions. The method may also include selecting, based on a number of optimization heuristics, which of a number of data versions to store in the memory array. The data versions may include the number of encoded data versions and the data. The method may include indicating, in metadata associated with the data, the selected data version. The method may include writing the selected data version, the metadata, or combination thereof, to the memory array.
The present disclosure describes a system for encoding data in a memory array. The system may include a processor and memory communicatively coupled to the processor. The system may also include a memory manager. The memory manager may include an encode module to encode data to generate a number of encoded data versions. The memory manager may also include a select module to compare the number of encoded data versions and the data, and to select an encoded data version, the data or combinations thereof based on a number of optimization heuristics. The memory manager may include a metadata module to generate a number of metadata bits. The metadata bits may indicate a data version selected. The system may include an association module to associate the number of metadata bits with the selected data version. The system may include a write module to write the selected data version, metadata, or combination thereof, to the memory array.
The present disclosure describes a computer program product for encoding data in a memory array. The computer program product may include a computer readable storage medium that includes computer usable program code embodied therewith. The computer usable program code may include computer usable program code to, when executed by a processor, receive data to be stored in a memory array. The computer usable program code may also include computer usable program code to, when executed by a processor, encode the data to generate a number of encoded data versions. The computer usable program code may also include computer usable program code to, when executed by a processor, select one of the data and an encoded data version to store in the memory array. The computer usable program code may also include computer usable program code to, when executed by a processor, indicate, via metadata associated with the data, the selection. The computer usable program code may also include computer usable program code to, when executed by a processor, write the selected data and the metadata to the memory array.
Benefits beyond the amount of power consumed during operation may be realized. For example, some memory may develop errors causing the memory array to return a constant value for a particular memory address. The contents of the address may become “stuck at” a value. By storing the data such that the encoding matches the content of the particular memory address experiencing an error, the memory array may increase in robustness.
Still further, an encoding may also be selected to reduce state change, or the number of times bits in memory change from one to zero or zero to one, with the previous value stored to a memory location. A reduction in state change may prolong the life of a memory array when the lifetime of the underlying technology varies based on such state transitions.
As used in the present specification and in the appended claims, a “memristor memory,” “memristor,” or similar terminology may refer to memory that is a passive circuit element that may maintain a relationship between the time integrals of current and voltage across a two terminal element. Accordingly, a “memristor array” may refer to multiple memristor elements.
Still further, as used in the present specification and in the appended claims, the term “encoded data version” may refer to a number of encodings of original data. By comparison, the term “data version” may refer to the number of encoded data versions as well as the original data.
Even further, as used in the present specification and in the appended claims, the term “a number of” or similar language may include any positive number including one to infinity; zero not being a number, but the absence of a number.
In the following description, for purposes of explanation, numerous specific details are set forth in order to provide a thorough understanding of the present systems and methods. It will be apparent, however, to one skilled in the art that the present apparatus, systems, and methods may be practiced without these specific details. Reference in the specification to “an example” or similar language means that a particular feature, structure, or characteristic described in connection with that example is included as described, but may not be included in other examples.
Referring now to the figures,
The processor (102) may be a single processor, or may be multiple processors. The processor (102) may reside on a single computer chip, or may reside on multiple computer chips. The processor (102) may execute computer usable code in a general purpose computer system, may execute computer usable code as part of an embedded system, or may execute computer usable code in a similar computing environment.
The processor (102) may include the hardware architecture to retrieve executable code from memory and execute the executable code. The executable code may represent instructions that, when executed by the processor (102), cause the processor (102) to implement at least the functionality of encoding data in a memory array (118), according to the methods of the present specification described herein. In the course of executing code, the processor (102) may receive input from and provide output to a number of the remaining hardware units.
The memory manager (104) may execute on the processor (102) or may execute in a separate computing environment. Generally, the memory manager (104) may comprise a computer readable medium, a computer readable storage medium, or a non-transitory computer readable medium, among others. In the context of this document, a computer readable storage medium may be any tangible medium that can contain, or store a program for use by or in connection with an instruction execution system, apparatus, or device. In another example, a computer readable storage medium may be any non-transitory medium that can contain, or store a program for use by or in connection with an instruction execution system, apparatus, or device.
The memory manager (104) may further comprise a number of modules used in the encoding of data within a memory array (118). The various modules within the memory system (100) may be executed separately. In this example, the various modules may be stored as separate computer program products. In another example, the various modules within the memory system (100) may be combined within a number of computer program products; each computer program product comprising a number of the modules. The memory manager (104) may contain a receive module (106), an encode module (108), a select module (110), a metadata module (112), an associate module (114), and a write module (116). The memory manager (104) may perform additional functions than those described herein. The receive module (106) may receive data to be written to the memory array (118). The source of this data may include computer usable code executing on the processor (102), or may originate from another device such as a network card or an input device. The source of the data may communicate with the receive module (104) that the data should be stored in the memory array (118).
The encode module (108) may process the data into a number of encoded data versions. The encoding may maintain the size of the data, may reduce the size of the data, or may increase the size of the data. The encode module (108) may produce a number of versions of encoded data. The encode module (108) may include information regarding the memory array (118) that enables the encoding to optimize the data output based on the characteristics of the memory array (118). An example of an encoding is to create a bitwise inversion of the binary representation of the data, causing every zero to become a one and every one to become a zero. For example, a data pattern of 1001 would become 0110. By encoding the data prior to a write operation, the encode module (108) may provide alternative representations of the data that allow the stored data to consume less power, reduce wear on memory components, or compensate for errors in the memory array (118).
The select module (110) may compare encoded versions of the data produced by the encoding module (108) and the original data and may select a data version to be stored in the memory array (118). As used in the present disclosure a data version may include the encoded versions of the data and the original data. A version of data may be selected based on projected electrical usage based on the data, an irregularity in the memory array (118), the current state of the memory array (118), or other factors relating the memory array (118). The select module (110) may compare multiple versions of the encoded data and the original data using optimization heuristics to determine a data version to be written to the memory (118).
As an example, the select module (110) may favor the writing of positive bits (ones) to the memory array (118). For example, an original data set of 64 bits that contains 8 positive bits may be compared against an encoded version of the data that is an inversion of the data. The encoded data version may also have 64 bits, but may have 56 positive bits. When the optimization heuristic favors positive bits being written to the memory array (118), the encoded data may be selected for storage in place of the original data. Encoding the data based on the projected power consumption allows the select module (110) to reduce the overall power consumption by the memory array (118).
Another example may be when a specific bit in the memory array (118) may have malfunctioned. The memory manager (104) may read information related to bit errors in the memory array (118). The profile of the data may be adjusted to ensure any bit with an error remains in a consistent state. In other words, an error may be detected when a bit does not maintain what has been written to that bit. For instance, if a bit has the value one written to it, and then is read and returns the value of that bit is zero, the bit has an error. An encoding may then be selected that would write zero to the bit. Selecting data so that a bit with an error does not change state may allow the memory manager (104) to extend the life of a memory array (118).
When the memory manager (104) determines that a memory location within a memory array (118) may no longer function as expected, the memory manager (104) may write an embedded pointer indicating a remapped location for the data that may have been stored at that location.
Another example may be to compare the data versions against the present value of a location in a memory array (118) to be written. A determination may then be made of how many binary digits would change state for each encoding. The encoding that changes the least number of bits may be selected for writing. Selecting data to write to minimize state change in the memory array (118) may extend the life of the memory array (118).
Through an examination of the data versions including the encoded data and the original data, the select module (110) may select the data version that optimizes the storage of the data in the memory array (118) based on characteristics such as power consumption, reduction in state changes of the memory array (118), compensation for errors in a memory array (118), or other memory array (118) characteristics.
Once a version of data is selected to be written to the memory array (118), the metadata module (112) may record in metadata which data version was selected. The metadata may be used to store which data version was used, or may be included as part of metadata associated with the memory array (118) that stores additional data. An example of metadata that stores additional data is ECC data. Sufficient data may be included so as to allow for the data to be decoded and returned to its original state.
The associate module (114) may associate the metadata with the data version to be written. The metadata may be written to the same device as the encoded data, or may be written to a different device. The association module (114) may coordinate such that the data to be written can locate the correct metadata, and the metadata can be associated with the encoded data that is written to the memory array (118).
The write module (116) may ensure that the selected data version and the metadata are written to the memory (118). The write module (116) may invoke a system write routine that causes the data to be stored in the memory array (118).
The memory array (118) may be of a variety of types associated with computing environments, whether now existing or hereafter discovered. The memory array (118) may be a volatile memory type, such as double data rate (DDR) ram. The memory array (118) may also be a stable memory type, such as memristor, cross bar or synchronous dynamic random access memory (SDRAM). A stable memory type may also include a storage device such as a hard disk, a tape device or any similar device.
The method (200) may include receiving (block 202) data to be stored in a memory array (
The method (200) may include selecting (block 206), based on optimization heuristics comparing the encoded data versions and the original data, a data version to store in the memory array (
The selecting (block 206), based on heuristics may change over the life of the memory array (
The selection (block 206) may benefit the usefulness of a memory array (
Indicating (block 208), in metadata associated with the selected data version, the encoding used may include storing information that indicates how the data was encoded, and may include information to decode the data. The information may be an indication that the data is encoded, or may include additional information to decode the data. Such information may allow for the decoding of the data by other modules.
Writing (block 210) the selected data version and the metadata to the memory array (
The method (300) may include encoding (block 304) the data, to generate a number of encoded data versions. In some examples, this may be performed as described in connection with
Selecting (block 306) which of the number of data versions to store (block 306) may allow a version of the data to be selected to enhance the behavior of the memory array (
Once a data version is selected to be stored, the method (300) may include indicating (block 308) in metadata associated with the data, the data version stored. This may be performed as described in connection with
Writing (block 310) the selected data version, the metadata, or combination thereof may include store the data, the metadata, or combination thereof in a memory array (
The method (300) may include retrieving data from memory (
Once the selected data version and metadata is read, the method (300) may include examining (block 314) the metadata associated with the selected data version to determine the encoding used in storing the data. The information to decode the data version may be stored in the metadata.
Based on the metadata indicating the encoding used, the data version may be decoded (block 316) based on the metadata. The decoded data may then be returned to the computer usable code, executed by a processor (
The receive module (406) may receive data to be written to a memory array (
The encode module (408) may encode the data in accordance with encoding methods. The encoding methods used by the encoding module (408) may include not modifying the data, inverting the binary data, binary shifting the data, or other methods. The encoding may alter the representation and the size of the data.
Based on the encodings performed by the encode module (408) and the original data, the select module (410) may select a data version to write to the memory array (
The metadata module (412) may set metadata associated with the data to indicate which version of the encoded data was selected by the select module (410). The indication may vary in size and structure influenced by the number of encodings the memory manager (404) may use to encode data. The indication in metadata may allow future access to the data to decode the data and determine the original data representation.
The metadata and data version selected may be associated with each other by the associate module (414). The associate module may co-locate the data and metadata. The associate module (414) may inform the system of an alternative method to determine a relationship between the data and metadata.
The write module (416) may write the data version selected, the metadata, or combination thereof to a memory array. Portions or all of the selected data version, metadata, or combination thereof may be written based on the need to change the existing memory state. The write module may efficiently store the data by writing the data, the metadata, or combination thereof.
A read module (418) may retrieve the data, metadata, or combination thereof from the memory array. The read module may accomplish retrieving the data in a single instruction, or in multiple instructions.
A metadata examination module (420) may examine the metadata, as may be retrieved by the read module (418) to determine the state of the data. The state may include the encoding used to encode the data prior to storage.
Based on the examination of the metadata examination module, the decode module (422) may decode the data version selected and restore the data version to an original state. The decoding, based on the encoding used, may allow other code and subsystems to reference the data as though the data had never been encoded.
An encode module (
The metadata module (
When the data is read from the memory device, the memory manager (
An encoding module (
The select module (
The metadata module (
A read module (
The data shown in
Aspects of the present system and method are described herein with reference to flowchart illustrations and/or block diagrams of methods, apparatus (systems) and computer program products according to examples of the principles described herein. Each block of the flowchart illustrations and block diagrams, and combinations of blocks in the flowchart illustrations and block diagrams, may be implemented by computer usable program code. The computer usable program code may be provided to a processor of a general purpose computer, special purpose computer, or other programmable data processing apparatus to produce a machine, such that the computer usable program code, when executed via, for example, the processor (102) of the memory system (100) or other programmable data processing apparatus, implement the functions or acts specified in the flowchart and/or block diagram block or blocks. In one example, the computer usable program code may be embodied within a computer readable storage medium; the computer readable storage medium being part of the computer program product. In one example, the computer readable storage medium is a non-transitory computer readable medium.
The preceding description has been presented to illustrate and describe examples of the principles described. This description is not intended to be exhaustive or to limit these principles to any precise form disclosed. Many modifications and variations are possible in light of the above teaching.
Filing Document | Filing Date | Country | Kind |
---|---|---|---|
PCT/US2014/014124 | 1/31/2014 | WO | 00 |