Apparatus, program, non-transitory machine-readable medium, system, and method

JP7632955B2Active Publication Date: 2025-02-19INTEL CORP
View PDF 3 Cites 0 Cited by

Patent Information

Application Number
JP2020192812
Authority / Receiving Office
JP · JP
Patent Type
Patents
Current Assignee / Owner
Priority Date
2020-05-06
Filing Date
2020-11-19
Publication Date
2025-02-19
Estimated Expiration
2040-11-19

Smart Images

  • Figure 0007632955000001
    Figure 0007632955000001
  • Figure 0007632955000002
    Figure 0007632955000002
  • Figure 0007632955000003
    Figure 0007632955000003
Patent Text Reader

Abstract

To provide a device including a circuit and a method for executing coding of a data symbol for a column reading operation on a column address possible memory.SOLUTION: There is acquired a dataset for coding defined by one set of data symbols in a calculator, one set of coding words for coding the data symbols of the dataset including defining each coding word having at least two set bit distances of the other coding words of one set of coding words are determined, and the dataset is written into a memory as a function of the determined set of coding words.SELECTED DRAWING: Figure 9
Need to check novelty before this filing date? Find Prior Art

Description

[Background technology]

[0001] The encoding of data symbols (e.g., symbols that alone or in combination define a set of data, such as letters, numbers, etc.) is typically measured in terms of the code length and bit weights used to encode the data symbols. The code length L defines the number of bits for each data symbol. The larger the code length, the more storage overhead is required to store a set of data symbols in memory. The bit weight W defines the number of bits (e.g., to 1) that are set within the code length to define a given data symbol. Because typical memory architectures allow for specific rows of data to be accessed (e.g., read out) rather than specific columns (e.g., individual bits), typical data symbol encoding schemes are built on the assumption that the encoded data is accessed by rows. [Brief description of the drawings]

[0002] The concepts described herein are illustrated by way of example, and not by way of limitation, in the accompanying drawings. For simplicity and clarity of illustration, elements shown in the figures have not necessarily been drawn to scale. Where considered appropriate, reference labels have been repeated among the figures to indicate corresponding or analogous elements.

[0003] [Figure 1] 1 is a simplified diagram of at least one embodiment of a computing device for performing encoding of data symbols for a column read operation on a column-addressable memory.

[0004] [Diagram 2] 2 is a simplified diagram of at least one embodiment of a memory medium included in the computing device of FIG. 1;

[0005] [Diagram 3] 2 is a simplified diagram of at least one embodiment of a memory medium of the computing device of FIG. 1 in a dual in-line memory module (DIMM).

[0006] [Figure 4] FIG. 4 is a simplified diagram of a probabilistic associative search (SAS) performed using a search key on the memory media of FIGS. 1 to 3.

[0007] [Diagram 5] 2 is a diagram of encoding of data symbols using code words having one unique bit set for each code word that may be generated by the computing device of FIG. 1.

[0008] [Figure 6] 2 is a diagram of encoding of data symbols using code words having a set bit distance of at least two that may be generated by the computing device of FIG. 1;

[0009] [Figure 7] 2 is a graph illustrating frequency of use of data symbols of a data set that may be used by the computing device of FIG. 1 to encode the data symbols.

[0010] [Figure 8] 2 is a flow diagram of at least one embodiment of a method for performing extended encoding of data symbols for a column read operation that may be performed by the computing device of FIG. 1. [Figure 9] 2 is a flow diagram of at least one embodiment of a method for performing extended encoding of data symbols for a column read operation that may be performed by the computing device of FIG. 1. [Figure 10] 2 is a flow diagram of at least one embodiment of a method for performing extended encoding of data symbols for a column read operation that may be performed by the computing device of FIG. 1. [Figure 11] 2 is a flow diagram of at least one embodiment of a method for performing extended encoding of data symbols for a column read operation that may be performed by the computing device of FIG. 1. DETAILED DESCRIPTION OF THE PREFERRED EMBODIMENTS

[0011] While the concepts of the present disclosure are susceptible to various modifications and alternative forms, specific embodiments thereof have been shown by way of example in the drawings and are herein described in detail. It should be understood, however, that there is no intention to limit the concepts of the present disclosure to the particular forms disclosed, but on the contrary, the intention is to cover all modifications, equivalents, and alternatives not inconsistent with the scope of the present disclosure and the appended claims.

[0012] References herein to "one embodiment," "an embodiment," "an exemplary embodiment," and the like indicate that the described embodiment may include a particular feature, structure, or characteristic, but that not all embodiments may or may not include that particular feature, structure, or characteristic. Furthermore, such phrases do not necessarily refer to the same embodiment. Furthermore, when a particular feature, structure, or characteristic is described in connection with one embodiment, it is believed to be within the knowledge of one of ordinary skill in the art to achieve such feature, structure, or characteristic in connection with other embodiments, whether or not explicitly described. Furthermore, it should be appreciated that an item included in a list in the form "at least one of A, B, and C" may mean (A), (B), (C), (A and B), (A and C), (B and C), or (A, B, and C). Similarly, an item included in a list in the form "at least one of A, B, or C" may mean (A), (B), (C), (A and B), (A and C), (B and C), or (A, B, and C).

[0013] The disclosed embodiments may, in some cases, be implemented in hardware, firmware, software, or any combination thereof. The disclosed embodiments may be implemented as instructions carried or stored by a transitory or non-transitory machine-readable (e.g., computer-readable) storage medium, which may be read and executed by one or more processors. A machine-readable storage medium may be embodied as any storage device, mechanism, or other physical structure (e.g., a volatile or non-volatile memory, a media disk, or other media device) for storing or transmitting information in a form readable by a machine.

[0014] In the figures, some structural or method features may be shown in a particular arrangement and / or order. However, it should be appreciated that such a particular arrangement and / or order may not be required. Rather, in some embodiments, such features may be arranged in a different manner and / or order than that shown in the example figures. Also, the inclusion of a structural or method feature in a particular figure does not imply that such feature is required in all embodiments, and in some embodiments may not be included or may be combined with other features.

[0015] Referring now to FIG. 1, a computing device 100 for performing encoding of data symbols for a column read operation using a column readable memory includes a processor 102, a memory 104, an input / output (I / O) subsystem 112, a data storage device 114, a communication circuit 122, and one or more accelerator devices 126. Of course, in other embodiments, the computing device 100 may include other or additional components such as those typically found in a computer (e.g., a display, peripherals, etc.). Also, in some embodiments, one or more of these illustrative components may be incorporated in or form part of another component. The term "memory," when used herein with respect to performing data symbol encoding, may refer to the memory 104 and / or the data storage device 114, unless otherwise specified. As described in more detail herein, media access circuitry 108, 118 (e.g., any circuit or device configured to access and operate on data in a corresponding memory medium 110, 120) connected to a corresponding memory medium 110, 120 (e.g., any device or material to which data is written and read from) can access (e.g., read) individual columns (e.g., bits) or rows (e.g., vectors) of data, such as those used in performing similarity searches, also referred to as "probabilistic associative searches" (SAS). Thus, the memory may operate as a "probabilistic associative memory" (e.g., designed to enable the efficient performance of probabilistic associative searches).

[0016] In an exemplary embodiment, the memory medium 110 has a three-dimensional cross-point architecture that allows access to one bit per tile and has data access characteristics that differ from other memory architectures (e.g., dynamic random access memory (DRAM)) that incur time delays between reads or writes to the same or other partitions. The medium access circuitry 108 is configured to efficiently utilize the architecture of the memory medium 110 (e.g., in terms of power usage and speed), for example, by accessing multiple tiles in parallel within a given partition. In some embodiments, the medium access circuitry 108 may utilize a scratch pad (e.g., a relatively small, low latency memory) to temporarily hold and operate on data read from the memory medium 110 and broadcast data read from one partition to other portions of the memory 104 to allow calculations (e.g., matrix calculations) to be performed in parallel within the memory 104. Additionally, in an exemplary embodiment, instead of sending read or write requests to the memory 104 to access matrix data, the processor 102 may send higher order requests (e.g., requests for macro operations, such as a request to return a set of N search results based on a search key). Thus, many computing operations, such as artificial intelligence operations (e.g., probabilistic associative search), can be performed in memory (e.g., in memory 104 or in data storage 114) with minimal use of a bus (e.g., I / O subsystem 112) to transfer data between components of computing device 100 (e.g., between memory 104 or data storage 114 and processor 102).

[0017] In some embodiments, the media access circuitry 108 is included on the same die as the memory medium 110. In other embodiments, the media access circuitry 108 is on a separate die from the memory medium 110, but in the same package. In yet other embodiments, the media access circuitry 108 is on a separate die and in a separate package from the memory medium 110, but on the same dual in-line memory module (DIMM) or board.

[0018] The processor 102 may be embodied as any device or circuitry (e.g., a multi-core processor, microcontroller, or other processor or processing / control circuitry) capable of performing the operations described herein, such as executing an application (e.g., an artificial intelligence-related application that may use probabilistic associative search). In some embodiments, the processor 102 may be embodied as, include, or be coupled to a field programmable gate array (FPGA), an application specific integrated circuit (ASIC), reconfigurable hardware or hardware circuitry, or other specialized hardware to facilitate the performance of the functions described herein.

[0019] The memory 104, which may include a non-volatile memory (e.g., a far memory in a two-level memory scheme), includes a memory medium 110 and a media access circuit 108 (e.g., a device or circuit such as a processor, an application specific integrated circuit (ASIC), or other integrated circuit constructed of complementary metal oxide semiconductor (CMOS) or other materials) located underneath (e.g., at a lower position) and coupled to the memory medium 110. The media access circuit 108 is also connected to a memory controller 106, which may be embodied as any device or circuit (e.g., a processor, a co-processor, a dedicated circuit, etc.) configured to selectively read from and / or write to the memory medium 110 in response to a corresponding request (e.g., from the processor 102, which may be running an artificial intelligence related application that relies on probabilistic associative search to recognize objects, reason, and / or perform related artificial intelligence operations). In some embodiments, the memory controller 106 may include a vector functional unit (VFU) 130, which may be embodied as any device or circuitry (e.g., a dedicated circuit, a reconfigurable circuit, an application specific integrated circuit (ASIC), a field programmable gate array (FPGA), etc.) capable of offloading vector-based tasks from the processor 102 (e.g., comparing data read from particular columns of vectors stored in the memory medium 110, determining the Hamming distance between the vectors stored in the memory medium 110 and a search key, sorting the vectors according to their Hamming distances, etc.).

[0020] 2, in an exemplary embodiment, the memory medium 110 includes a tile architecture, also referred to herein as a cross-point architecture (e.g., an architecture in which memory cells are at the intersections of word lines and bit lines and are individually addressable, and bit storage is based on changes in bulk resistance), in which each memory cell (e.g., tile) 210, 212, 214, 216, 218, 220, 222, 224, 226, 228, 230, 232, 234, 236, 238, 240 is addressable by x and y parameters (e.g., column and row). The memory medium 110 includes a plurality of partitions, each of which includes a tile architecture. The partitions may be stacked as layers 202, 204, 206 to form a three-dimensional cross-point architecture (e.g., Intel 3D XPoint™ memory). Unlike typical memory devices, in which only fixed-sized, multi-bit data structures (e.g., bytes, words, etc.) are addressable, the media access circuitry 108 is configured to read individual bits or other units of data from the memory medium 110 upon request of the memory controller 106, which may generate the request in response to receiving a corresponding request from the processor 102.

[0021] Referring back to FIG. 1 , memory 104 may include non-volatile and volatile memories. Non-volatile memory may be embodied as any type of data storage capable of storing data in a persistent manner (even if power is interrupted to the non-volatile memory). For example, non-volatile memory may be embodied as one or more non-volatile memory devices. Non-volatile memory devices may include one or more memory devices configured with a cross-point architecture that allows for bit-level addressability (e.g., the ability to read and / or write to individual bits of data, rather than bytes or other larger units of data), and are illustratively embodied as three-dimensional (3D) cross-point memories. In some embodiments, non-volatile memory may additionally include other types of memory, including any combination of memory devices using chalcogenide phase change materials (e.g., chalcogenide glasses), ferroelectric transistor random access memory (FeTRAM), nanowire-based non-volatile memory, phase change memory (PCM), memory incorporating memristor technology, magnetoresistive random access memory (MRAM), or spin transfer torque (STT)-MRAM. Volatile memory may be embodied as any type of data storage capable of storing data while power is supplied to the volatile memory. For example, volatile memory may be embodied as one or more volatile memory devices, and in other embodiments, may be embodied as other types of non-persistent data storage, and will be referred to hereinafter periodically as volatile memory. Volatile memory may have an architecture that allows for bit-level addressability, similar to the architectures described above.

[0022] The processor 102 and memory 104 are communicatively coupled to other components of the computing device 100 via an I / O subsystem 112, which may be embodied as circuits and / or components for facilitating input / output operations of the processor 102 and / or main memory 104 and other components of the computing device 100. For example, the I / O subsystem 112 may be embodied as or may include a memory controller hub, an input / output control hub, an integrated sensor hub, a firmware device, communications links (e.g., point-to-point links, bus links, wires, cables, light guides, printed circuit board traces, etc.), and / or other components and subsystems for facilitating input / output operations. In some embodiments, the I / O subsystem 112 may form part of a system-on-chip (SoC) and may be incorporated within a single chip along with one or more of the processor 102, main memory 104, and other components of the computing device 100.

[0023] Data storage device 114 may be embodied as any type of device configured for short-term or long-term storage of data, such as, for example, memory devices and circuits, memory cards, hard disk drives, solid state drives, or other data storage devices. In an exemplary embodiment, data storage device 114 includes a memory controller 116 similar to memory controller 106, a memory medium 120 (also referred to as a "storage medium") similar to memory medium 110, and media access circuitry 118 similar to media access circuitry 108. Additionally, memory controller 116 may include a vector functional unit (VFU) 132 similar to vector functional unit (VFU) 130. Data storage device 114 may include a system partition that stores data and firmware code for data storage device 114, and one or more operating system partitions that store data files and executable files for the operating system.

[0024] Communications circuitry 122 may be embodied as any communications circuitry, device, or collection thereof capable of enabling communications between computing device 100 and another device over a network. Communications circuitry 122 may be configured to use any one or more communications technologies (e.g., wired or wireless communications) and associated protocols (e.g., Ethernet, Bluetooth, Wi-Fi, WiMAX, etc.) to achieve such communications.

[0025] Exemplary communications circuitry 122 includes a network interface controller (NIC) 124, which may also be referred to as a host fabric interface (HFI). NIC 124 may be embodied as one or more add-in boards, daughter cards, network interface cards, controller chips, chipsets, or other devices that may be used by computing device 100 to connect with another computing device. In some embodiments, NIC 124 may be embodied as part of a system-on-chip (SoC) that includes one or more processors, or may be included in a multi-chip package that also includes one or more processors. In some embodiments, NIC 124 may include a local processor (not shown) and / or local memory (not shown), both of which are local to NIC 124. In such embodiments, the local processor of NIC 124 may be capable of performing one or more of the functions of processor 102. Additionally or alternatively, in such embodiments, the local memory of NIC 124 may be integrated into one or more components of computing device 100 at the board level, socket level, chip level, and / or other levels. The one or more accelerator devices 126 may be embodied as any device or circuitry capable of performing a set of operations faster than the general-purpose processor 102. For example, the accelerator device 126 may include a graphics processing unit 128, which may be embodied as any device or circuitry (e.g., a co-processor, an ASIC, a reconfigurable circuit, etc.) capable of performing graphics operations (e.g., matrix calculations) faster than the processor 102.

[0026] 3, in some embodiments, computing device 100 may use a dual in-line memory module (DIMM) architecture 300. In architecture 300, multiple dies of memory medium 110 are connected to a shared command and address bus 310. Thus, during an operation, data is read in parallel across all of memory medium 110 connected to shared command and address bus 310. Data may be arranged across memory medium 110 in a configuration that allows for the reading of the same column across all of the connected dies of memory medium 110.

[0027] Referring now to FIG. 4, the computing device 100 may perform a probabilistic associative search 400, which is a very efficient and fast way to search a larger database of records to find records similar to a given query record (key). For simplicity and clarity, the probabilistic associative search 400, data symbol encoding, and other processing are described herein as being performed within the memory 104. However, it should be understood that depending on the particular embodiment, the processing may additionally or alternatively be performed by the storage device 114. Given that the memory medium 110 allows both row-wise and column-wise readouts with similar readout latencies, the memory medium 110 is particularly suited to enable efficient probabilistic associative searches. As described in more detail herein, the format used by the computing device 100 to encode and subsequently access data symbols (e.g., letters, numbers, etc.) within the memory medium 110 is designed to take advantage of the column addressability of the memory. In performing a search, columns (e.g., bits) in the search key 410 are compared to corresponding columns (e.g., bits) of database elements (e.g., vectors) 422, 424, 426, 428, 430, 432, 434 stored in blocks of the memory medium 110. The computing device 100 determines the number of matching values ​​between the search key 410 and each database element (e.g., vector), which represents the Hamming distance between the search key 410 and each database element (e.g., vector). The database element (e.g., vector) with the lowest Hamming distance is the closest result (e.g., result set) to the probabilistic associative search 400.

[0028] In an exemplary embodiment, in encoding data symbols in a column-addressable memory, the computing device 100 utilizes an encoding scheme that has a relatively small codeword size, a relatively fast query time, and is self-correcting when errors occur. Two basic metrics on which the encoding scheme is based are the length L of the codeword used to encode the data symbol and the bit weight W per codeword. The length L defines the number of bits of the codeword used to encode the data symbol. The larger the length, the more storage overhead is required to store the codeword. The bit weight represents the number of bits that are set (e.g., to 1) in a given codeword used to encode a data symbol. The bit weight controls how many columns of the memory are read out (e.g., to identify what data symbol the codeword corresponds to). The larger the bit weight per codeword, the longer the query time. Thus, reducing the bit weight provides faster execution for queries.

[0029] One aspect of an embodiment of an encoding scheme that may be used by computing device 100 is that each codeword has at least one unique set bit. Having at least one unique set bit per codeword ensures that each codeword can be uniquely identified all through only the set bits. For example, if A is encoded as 000111 and B is encoded as 000011, then B does not have a unique 1 compared to A. That is, a query for B will also return A. In some embodiments, computing device 100 may use a "one-hot" encoding scheme in which each codeword has one and only one set bit. Such an encoding scheme allows for fast queries because only one column (e.g., the location of the set bit) needs to be queried to determine whether a given codeword corresponding to a particular data symbol exists (e.g., at the memory location queried). However, having a single set bit in a codeword requires that the codeword be equal to the size of the set of data symbols being encoded (e.g., 26 bits to encode the letters of the English alphabet). In addition, the accuracy (e.g., tolerance to errors) is relatively low because a single erroneous bit flip (e.g., from 1 to 0 or from 0 to 1) can result in a false negative or a false positive, as shown in Figure 5. As shown in example 510, a single bit error in the most significant bit of a codeword can result in a false negative (miss) for a query of the codeword to determine whether it corresponds to the letter A. Conversely, if the most significant bit of a codeword that is meant to represent the letter B flips to 1 (rather than 0), a false positive (false hit) can occur, as shown in example 520.

[0030] Another aspect of the exemplary encoding scheme is that the set bit distance between any two codewords is at least 2. The definition of the set bit distance between codewords for two data symbols (e.g., A and B) is the number of set bits in one codeword (e.g., the codeword for A) and not the number of set bits in the other codeword (e.g., the codeword for B). For example, the set bit distance between 1111 and 0000 is 4, but the set bit distance between 0000 and 1111 is zero. The set bit distance between any "one-hot" codewords is only 1. Thus, any single bit flip from 0 to 1 may produce erroneous results. Increasing the set bit distance creates an error buffer zone between two different codewords, such that more erroneous bits (e.g., 2 or more) must be present in a codeword to generate a miss (e.g., example 510 of FIG. 5) or a false hit (e.g., example 520 of FIG. 5). 6, the computing device 100 may use a set of code words 600 for encoding the English alphabet. The code words 600 have a length of 8 bits and a bit weight of 2. The bit weight is higher than the one-hot code, and the set bit distance is larger. For example, the distance between the code word for A and the code word for D is 2. The minimum Hamming distance is 2, which means that any one-bit error (e.g., an erroneous bit flip) can be detected by the computing device 100.

[0031] In some embodiments, the computing device 100 may use an encoding scheme in which a base codeword is repeated (e.g., concatenated with itself) at least once to increase reliability (e.g., the ability to identify which data symbol a codeword corresponds to when one or more erroneous bit flips occur). Doing so also increases the Hamming distance between codewords for different data symbols. For example, using the encoding scheme shown in FIG. 6, if the codewords are repeated (e.g., the codeword for A is concatenated with itself, the codeword for B is concatenated with itself, etc.), the minimum Hamming distance between any two codewords is 4 instead of 2. In effect, repeating each codeword is equivalent to generating a single error correcting double error detecting code. As a result, each individual character of the encoding scheme can tolerate one bit error and still be read correctly, potentially eliminating the need for additional error correcting code (ECC) protection in the memory. In some embodiments, ECC protection may still be applied to provide additional robustness. Furthermore, the granularity of the ECC protection may vary depending on the embodiment. For example, an ECC codeword may be generated every 32 symbols (eg, characters) or a different number of symbols.

[0032] In some embodiments, the computing device 100 may base the encoding scheme on the frequency with which each data symbol is used in a data set. Referring now to graph 700 of FIG. 7, in the English alphabet, not all of the data symbols (e.g., letters) are used with the same frequency. For example, the letters A, O, E, and T are used more frequently than other letters. In some embodiments, the computing device 100 may define code words to have a larger set bit distance between more frequently used data symbols compared to less frequently used data symbols of a given data set to reduce the likelihood that the computing device 100 will obtain erroneous results when performing a query of the data set for a given data symbol.

[0033] 8, the computing device 100 may perform a method 800 for performing extended encoding of data symbols for a column-addressable memory (e.g., memory 104) during operation. The method 800 begins at block 802, where the computing device 100 determines whether to enable extended encoding. In doing so, the computing device 100 may determine to enable extended encoding in response to a determination that the computing device 100 comprises a column-addressable memory (e.g., memory 104), in response to a determination that a configuration setting (e.g., in a configuration file) indicates that extended encoding is enabled, and / or based on other factors. Regardless, in response to a determination to enable extended encoding, the method 800 proceeds to block 804, where the computing device 100 determines whether to encode a set of data. In doing so, the computing device 100 may decide to encode the set of data in response to receiving a request to do so (e.g., from an application executed by the processor 102, by another computing device (not shown) in communication with the computing device 100 via the communications circuitry 122, etc.). Regardless, in response to the decision to encode the set of data, the method 800 proceeds to block 806, where the computing device 100 obtains a data set for encoding. In doing so, as shown in block 808, the computing device 100 obtains a data set defined (e.g., consisting of) a set of data symbols. For example, as shown in block 810, the computing device 100 may obtain a data set defined by data symbols of an alphabet (e.g., letters of the English alphabet). In some embodiments, as shown in block 812, the computing device obtains a data set defined by data symbols of an alphanumeric character set (e.g., letters and numbers). In some embodiments, the computing device 100 obtains a data set defined by American Standard Code for Information Interchange (ASCII) data symbols, as shown in block 814. In some embodiments, as indicated at block 816, the computing device 100 obtains text data (eg, the data set is text).In obtaining the dataset, the computing device 100 may obtain genetic sequence data (e.g., the sequence of the letters A, T, C, and G, which correspond to the nitrogenous bases: adenine, guanine, cytosine, and thymine), as shown in block 818. In other embodiments, the computing device 100 may obtain a dataset indicative of extracted features (e.g., size, color, etc.) of the objects to be searched, as shown in block 820.

[0034] In some embodiments, as shown in block 822, the computing device 100 may obtain data to be added to an existing data set in memory (e.g., memory 104), such as adding a set of records to an existing database. As shown in block 824, the computing device 100 may obtain data in response to a request from an application executed by the computing device 100. For example, as shown in block 826, the computing device 100 may obtain data in response to a request from an application executed by the processor 102 of the computing device 100. In some embodiments, as shown in block 828, the computing device 100 may obtain data to be encoded from another computing device (not shown). In doing so, as shown in block 830, the computing device 100 may obtain the data using the communication circuitry 122. The method 800 then proceeds to block 832 of FIG. 9, where the computing device 100 determines the frequency of use of each data symbol in the data set.

[0035] 9, after the computing device 100 has determined the frequency of use of each data symbol of the data set, the method 800 proceeds to block 834, where the computing device 100 determines a set of code words for encoding the data symbols (e.g., letters, numbers, etc.) of the data set (e.g., obtained in block 806). In doing so, as shown in block 836, the computing device 100 may associate at least one unique set bit with each data symbol represented in the set of code words. In some embodiments, as shown in block 838, the computing device 100 may define each code word having a set bit distance of at least 2 from all other code words of the set (e.g., as shown in the set of code words 600 of FIG. 6). In some embodiments, as shown in block 840, to increase the Hamming distance between the code words, the computing device 100 may concatenate each code word with itself at least once. In block 842, the computing device 100 may define a set bit distance between the code words as a function of the frequency of use of each corresponding data symbol of the data set. In doing so, as shown in block 844, the computing device 100 may define a set bit distance between the code words in direct relation to the frequency of use of each corresponding data symbol of the data set. As shown in block 846, the computing device 100 may define a larger set bit distance between the code words for relatively frequently used data symbols of the data set and a smaller set bit distance between the code words for relatively infrequently used data symbols of the data set. In block 848, the computing device 100 may write to a memory (e.g., memory 104) a map, which may be embodied as any data structure, correlating each data symbol with a corresponding code word from the determined set of code words (e.g., determined according to block 834). The method 800 then proceeds to block 850 of FIG. 10, where the computing device 100 writes the data set to the memory as a function of the determined set of code words.

[0036] 10, in writing the data set to memory, as shown in block 852, the computing device 100 writes a corresponding code word for each data symbol present in the data set (e.g., for every instance of A in the data set, write the determined code word for the letter A, etc.). In an exemplary embodiment, as shown in block 854, the computing device 100 writes the data set to a memory that is column addressable (e.g., with the code word). In an exemplary embodiment, as shown in block 856, the computing device 100 writes the data set to a memory that is both column and row addressable (e.g., with the code word). As shown in block 858, the computing device 100 writes the data set to a memory that has a three-dimensional cross-point architecture (e.g., with the code word). In some embodiments, as shown in block 860, the computing device 100 writes the data set as a record in a database. The method 800 then loops back to block 804 of FIG. 8, where the computing device 100 again determines whether to encode the data.

[0037] If, at block 804, the computing device 100 determines not to encode the data (e.g., there is no data available that has not yet been encoded), the method 800 proceeds to block 862 of FIG. 10, where the computing device 100 determines whether to read the data (e.g., to decode the data from the memory 104). The computing device 100 may determine to read the data in response to receiving a request from an application that generated the read request, in response to a request from another computing device (not shown), and / or based on other factors. Regardless, in response to the decision to read the data, the method 800 proceeds to block 864, where the computing device 100 reads one or more codewords from the memory (e.g., the memory 104). In doing so, the computing device 100 may read the codeword data (e.g., bits) from one or more selected columns of the column-addressable memory, as shown in block 866. In an exemplary embodiment, computing device 100 reads codeword data from one or more selected columns of a memory that is row and column addressable, as shown in block 868. As shown in block 870, computing device 100 reads codeword data from a memory having a three-dimensional cross-point architecture (e.g., memory 104).

[0038] Method 800 then proceeds to block 872, where computing device 100 may convert each read codeword into a corresponding data symbol (e.g., a letter, a number, etc.). In doing so, as shown in block 874, computing device 100 may convert each read codeword into a corresponding data symbol as a function of (e.g., using) a map (e.g., a map written to memory in block 848) that correlates each data symbol with a corresponding codeword. Method 800 then proceeds to block 876 of FIG. 11, where computing device 100 may provide one or more data symbols in response to a read request. In doing so, as shown in block 878, computing device 100 may provide one or more data symbols in response to a request from an application that generated the read request (e.g., an application executed by processor 102). In doing so, as shown in block 880, computing device 100 may provide one or more data symbols to another computing device (not shown). In doing so, as shown in block 882, the computing device 100 may provide one or more data symbols using the communications circuitry 122. The method 800 then loops back to block 804 of FIG. 8, where the computing device 100 again determines whether to encode data (e.g., additional data).

[0039] Illustrative examples of the techniques disclosed herein are provided below. Certain embodiments of these techniques may include any one or more, and any combination, of the examples described below.

[0040] Example 1 includes an apparatus comprising a column-addressable memory and circuitry coupled to the memory, the circuitry obtaining a data set for encoding, the data set defined by a set of data symbols, determining a set of code words for encoding data symbols of the data set including defining each code word having a set bit distance of at least two from all other code words in the set of code words, and writing the data set to the memory as a function of the determined set of code words.

[0041] Example 2 includes the subject matter of example 1, in which the circuitry further determines a frequency of occurrence of the data symbols for each of the data sets and defines a set bit distance between the codewords as a function of the frequency of occurrence of corresponding data symbols for each of the data sets.

[0042] Example 3 includes the subject matter of any of examples 1 and 2, wherein defining the set bit distance between the codewords as a function of frequency of use includes defining the set bit distance between the codewords in direct relation to a frequency of use of each corresponding data symbol in the data set.

[0043] Example 4 includes the subject matter of any of examples 1-3, wherein determining the set of code words for encoding the data symbols includes associating at least one unique set bit with each data symbol represented in the set of code words.

[0044] Example 5 includes the subject matter of any of examples 1-4, wherein determining a set of code words for encoding the data symbols includes concatenating each code word with itself.

[0045] Example 6 includes the subject matter of any of examples 1-5, and wherein the circuitry further includes writing to the memory a map correlating each data symbol with a corresponding code word from the determined set of code words.

[0046] Example 7 includes the subject matter of any of examples 1-6, wherein writing the data set to the memory as a function of the determined set of code words includes writing to the memory a code word corresponding to each data symbol present in the data set.

[0047] Example 8 includes the subject matter of any of examples 1-7, wherein writing the data set to the memory as a function of the determined set of code words includes writing the data set to the memory as records of a database.

[0048] Example 9 includes the subject matter of any of examples 1-8, wherein obtaining the data set includes obtaining a data set defined by an alphabet of data symbols.

[0049] Example 10 includes the subject matter of any of examples 1-9, wherein acquiring the data set includes acquiring a data set defined by an alphanumeric set of data symbols.

[0050] Example 11 includes the subject matter of any of examples 1-10, wherein acquiring the data set includes acquiring the data set defined by American Standard Code for Information Interchange (ASCII) data symbols.

[0051] Example 12 includes the subject matter of any of examples 1-11, wherein obtaining the dataset includes obtaining data indicative of a gene sequence.

[0052] Example 13 includes the subject matter of any of examples 1-12, wherein obtaining the data set includes obtaining data indicative of the text data.

[0053] Example 14 includes the subject matter of any of examples 1-13, wherein the circuitry further reads the code word data from the selected column of the memory and converts the read code word to a corresponding data symbol as a function of the map correlating each data symbol with a corresponding code word.

[0054] Example 15 includes the subject matter of any of examples 1-14, wherein the memory is column addressable and row addressable and has a three dimensional cross-point architecture.

[0055] Example 16 includes a system comprising a processor, a column-addressable memory, and circuitry coupled to the memory, the circuitry obtaining a dataset for encoding, the dataset defined by a set of data symbols, determining a set of code words for encoding data symbols of the dataset including defining each code word having a set bit distance of at least two from all other code words in the set of code words, and writing the dataset to the memory as a function of the determined set of code words.

[0056] Example 17 includes the subject matter of example 16, wherein the circuitry is in a memory device.

[0057] Example 18 includes the subject matter of any of examples 16 and 17, wherein the circuitry is in a memory device.

[0058] Example 19 includes a method comprising obtaining, by an apparatus having a column-addressable memory, a dataset for encoding, the dataset being defined by a set of data symbols; determining, by the apparatus, a set of code words for encoding the data symbols of the dataset, including defining each code word having a set bit distance of at least two from every other code word in the set of code words; and writing, by the apparatus, the dataset to the memory as a function of the determined set of code words.

[0059] Example 20 includes one or more machine-readable storage media comprising a plurality of instructions stored thereon that, in response to being executed, cause an apparatus having a column-addressable memory to obtain a dataset for encoding, the dataset defined by a set of data symbols, determine a set of code words for encoding the data symbols of the dataset including defining each code word having a set bit distance of at least two from all other code words in the set of code words, and write the dataset to the memory as a function of the determined set of code words. (Item 1) A column-addressable memory; and circuitry coupled to the memory, the circuitry comprising: obtaining a data set for encoding, the data set being defined by a set of data symbols; determining a set of code words for encoding the data symbols of the data set, including defining each code word having a set bit distance of at least two from every other code word in the set of code words; writing said data set into said memory as a function of said determined set of code words; Device. (Item 2) The above circuit further includes: determining a frequency of occurrence of each data symbol in said data set; 2. The apparatus of claim 1, further comprising: a data set generating section for generating a data symbol of said data set, said data symbol being encoded in said data set; (Item 3) The apparatus described in Item 2, wherein defining the set bit distance between the code words as a function of the frequency of use includes defining the set bit distance between the code words in direct relation to the frequency of use of each corresponding data symbol in the data set. (Item 4) The apparatus described in Item 1, wherein determining a set of code words for encoding the data symbols includes associating at least one unique set bit with each data symbol represented in the set of code words. 5. The apparatus of claim 1, wherein determining a set of code words for encoding the data symbols includes concatenating each code word with itself. (Item 6) The apparatus of item 1, wherein the circuitry further includes writing a map into the memory that correlates each data symbol with the corresponding code word from the determined set of code words. (Item 7) The apparatus described in Item 1, wherein writing the data set to the memory as a function of the determined set of code words includes writing the corresponding code word for each data symbol present in the data set to the memory. (Item 8) The apparatus of item 1, wherein writing the data set to the memory as a function of the determined set of code words includes writing the data set to the memory as a record in a database. (Item 9) The apparatus of item 1, wherein acquiring the data set includes acquiring a data set defined by data symbols of an alphabet. (Item 10) 2. The apparatus of claim 1, wherein obtaining the data set includes obtaining a data set defined by data symbols of an alphanumeric set. (Item 11) 2. The apparatus of claim 1, wherein acquiring the data set includes acquiring a data set defined by American Standard Code for Information Interchange (ASCII) data symbols. (Item 12) 2. The apparatus of claim 1, wherein obtaining the dataset includes obtaining data indicative of a gene sequence. (Item 13) 2. The apparatus of claim 1, wherein obtaining the data set includes obtaining data indicative of text data. (Item 14) The circuit further comprises: reading codeword data from selected columns of said memory; 2. The apparatus of claim 1, further comprising: an apparatus for converting the retrieved code words into the corresponding data symbols as a function of a map correlating each data symbol with the corresponding code word. (Item 15) 2. The apparatus of claim 1, wherein the memory is column addressable and row addressable and has a three-dimensional cross-point architecture. (Item 16) A processor; a column-addressable memory; and circuitry coupled to the memory, the circuitry comprising: obtaining a data set for encoding, the data set being defined by a set of data symbols; determining a set of code words for encoding the data symbols of the data set, including defining each code word having a set bit distance of at least two from every other code word in the set of code words; writing said data set into said memory as a function of said determined set of code words; system. (Item 17) Item 17. The system of item 16, wherein the circuitry is in a memory device. (Item 18) Item 17. The system of item 16, wherein the circuitry is in a memory device. (Item 19) obtaining, by a device having a column-addressable memory, a data set for encoding, the data set being defined by a set of data symbols; determining, by said apparatus, a set of code words for encoding said data symbols of said data set, including defining each code word having a set bit distance of at least 2 from every other code word in the set of code words; writing, by said apparatus, said data set into said memory as a function of said determined set of code words; A method for providing the above. (Item 20) One or more machine-readable storage media containing a plurality of instructions stored thereon, the instructions being executed in response to an apparatus having a memory that is column addressable, obtaining a data set for encoding, the data set being defined by a set of data symbols; determining a set of code words for encoding the data symbols of the data set, including defining each code word having a set bit distance of at least two from every other code word in the set of code words; writing said data set to said memory as a function of said determined set of code words; A machine-readable storage medium.

Claims

1. a column-addressable memory; and circuitry coupled to the memory, the circuitry comprising: obtaining a data set for encoding, the data set being defined by a set of data symbols; determining a set of code words for encoding the data symbols of the data set, including defining each code word having a set bit distance of at least 2 from every other code word in the set of code words; writing the data set into the memory as a function of the determined set of code words; determining a frequency of occurrence of each data symbol in said data set; defining the set bit distance between the codewords as a function of the frequency of use of each corresponding data symbol of the data set. Device.

2. 2. The apparatus of claim 1 , wherein defining the set bit distance between the codewords as a function of the frequency of use comprises defining the set bit distance between the codewords in direct relation to the frequency of use of corresponding data symbols of each of the data sets.

3. 3. The apparatus of claim 1, wherein determining a set of code words for encoding the data symbols comprises associating at least one unique set bit with each data symbol represented in the set of code words.

4. 4. The apparatus of claim 2 or 3, wherein determining a set of codewords for encoding the data symbols comprises concatenating each codeword with itself.

5. A column-addressable memory; and circuitry coupled to the memory, the circuitry comprising: obtaining a data set for encoding, the data set being defined by a set of data symbols; determining a set of code words for encoding the data symbols of the data set, including defining each code word having a set bit distance of at least 2 from every other code word in the set of code words; writing the data set into the memory as a function of the determined set of code words; determining a set of code words for encoding the data symbols includes concatenating each code word with itself. Device.

6. 6. The apparatus of claim 1, wherein the circuitry is further configured to write a map to the memory that correlates each data symbol with a corresponding code word from the determined set of code words.

7. 7. The apparatus of claim 1, wherein writing the data set to the memory as a function of the determined set of code words comprises writing to the memory a corresponding code word for each data symbol present in the data set.

8. 8. The apparatus of claim 1, wherein writing the data set to the memory as a function of the determined set of code words comprises writing the data set to the memory as records in a database.

9. The apparatus of claim 1 , wherein obtaining the data set comprises obtaining a data set defined by data symbols of an alphabet.

10. 10. The apparatus of claim 1, wherein obtaining the data set comprises obtaining a data set defined by data symbols of an alphanumeric set.

11. 11. The apparatus of claim 1, wherein obtaining the data set comprises obtaining a data set defined by American Standard Code for Information Interchange (ASCII) data symbols.

12. The apparatus of claim 1 , wherein obtaining the dataset comprises obtaining data indicative of a gene sequence.

13. The apparatus of claim 1 , wherein obtaining the data set comprises obtaining data indicative of text data.

14. The circuit further comprises: reading codeword data from selected columns of said memory; 14. Apparatus according to any one of claims 1 to 13, adapted to convert the read code words into corresponding data symbols as a function of a map correlating each data symbol with a corresponding code word.

15. 15. Apparatus according to any one of claims 1 to 14, wherein the memory is column addressable and row addressable and has a three-dimensional cross-point architecture.

16. A program that causes a computer to function as a device described in any one of claims 1 to 15.

17. A non-transitory machine-readable medium storing the program described in claim 16.

18. A processor; a column-addressable memory; and a circuit coupled to the memory, the circuit comprising: obtaining a data set for encoding, the data set being defined by a set of data symbols; determining a set of code words for encoding the data symbols of the data set, including defining each code word having a set bit distance of at least 2 from every other code word in the set of code words; writing the data set into the memory as a function of the determined set of code words; determining a frequency of occurrence of each data symbol in said data set; defining the set bit distance between the codewords as a function of the frequency of use of each corresponding data symbol of the data set. system.

19. A processor; a column-addressable memory; and a circuit coupled to the memory, the circuit comprising: obtaining a data set for encoding, the data set being defined by a set of data symbols; determining a set of code words for encoding the data symbols of the data set, including defining each code word having a set bit distance of at least 2 from every other code word in the set of code words; writing the data set into the memory as a function of the determined set of code words; determining a set of code words for encoding the data symbols includes concatenating each code word with itself. system.

20. 20. The system of claim 18 or 19, wherein the circuitry is in a memory device.

21. 21. A system according to any one of claims 18 to 20, wherein the circuitry is in a memory device.

22. obtaining, by a device having a column-addressable memory, a data set for encoding, the data set being defined by a set of data symbols; determining, by the apparatus, a set of code words for encoding the data symbols of the data set, including defining each code word having a set bit distance of at least 2 from every other code word in the set of code words; writing, by said apparatus, said data set to said memory as a function of said determined set of code words; determining, by said apparatus, a frequency of occurrence of each data symbol in said data set; defining, by said apparatus, said set bit distance between said codewords as a function of said frequency of use of corresponding data symbols in each of said data sets.

23. A method for encoding a data set comprising the steps of: obtaining, by a device having a column-addressable memory, a data set defined by a set of data symbols; determining, by the apparatus, a set of code words for encoding the data symbols of the data set, including defining each code word having a set bit distance of at least 2 from every other code word in the set of code words; writing, by said apparatus, said data set to said memory as a function of said determined set of code words; Equipped with determining a set of code words for encoding the data symbols includes concatenating each code word with itself. method.

Citation Information

Patent Citations

  • Associative memory device with improved sense margin, its operating method, and computer program (encoding technique for improving sense margin in associative memory)

    JP2012518860A

  • Encoding with integrated error-detection

    US20140237316A1

  • Technologies for performing efficient memory augmented neural network update operations

    US20190220735A1