WO2020066148A1 - 記憶装置、High Dimensional Gaussian Filtering回路、Stereo Depth計算回路、並びに情報処理装置 - Google Patents

記憶装置、High Dimensional Gaussian Filtering回路、Stereo Depth計算回路、並びに情報処理装置 Download PDF

Info

Publication number
WO2020066148A1
WO2020066148A1 PCT/JP2019/023427 JP2019023427W WO2020066148A1 WO 2020066148 A1 WO2020066148 A1 WO 2020066148A1 JP 2019023427 W JP2019023427 W JP 2019023427W WO 2020066148 A1 WO2020066148 A1 WO 2020066148A1
Authority
WO
WIPO (PCT)
Prior art keywords
value
key
address
memory
storage device
Prior art date
Application number
PCT/JP2019/023427
Other languages
English (en)
French (fr)
Inventor
和徳 安田
Original Assignee
ソニー株式会社
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by ソニー株式会社 filed Critical ソニー株式会社
Priority to US17/276,542 priority Critical patent/US20220035737A1/en
Publication of WO2020066148A1 publication Critical patent/WO2020066148A1/ja

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/06Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03HIMPEDANCE NETWORKS, e.g. RESONANT CIRCUITS; RESONATORS
    • H03H17/00Networks using digital techniques
    • H03H17/02Frequency selective networks
    • H03H17/0248Filters characterised by a particular frequency response or filtering method
    • H03H17/0282Sinc or gaussian filters
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/28Databases characterised by their database models, e.g. relational or object models
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1008Correctness of operation, e.g. memory ordering
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C15/00Digital stores in which information comprising one or more characteristic parts is written into the store and in which information is read-out by searching for one or more of these characteristic parts, i.e. associative or content-addressed stores
    • G11C15/04Digital stores in which information comprising one or more characteristic parts is written into the store and in which information is read-out by searching for one or more of these characteristic parts, i.e. associative or content-addressed stores using semiconductor elements
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03HIMPEDANCE NETWORKS, e.g. RESONANT CIRCUITS; RESONATORS
    • H03H17/00Networks using digital techniques
    • H03H17/02Frequency selective networks
    • H03H17/0202Two or more dimensional filters; Filters for complex signals
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03HIMPEDANCE NETWORKS, e.g. RESONANT CIRCUITS; RESONATORS
    • H03H17/00Networks using digital techniques
    • H03H17/02Frequency selective networks
    • H03H17/06Non-recursive filters
    • H03H17/0607Non-recursive filters comprising a ROM addressed by the input data signals

Definitions

  • the technology disclosed in the present specification relates to a storage device of an associative array system, a High Dimensional Gaussian Filtering circuit, a Stereo Depth calculation circuit, and an information processing device.
  • an associative array system in which a key (Key) and a value (Value) are managed in pairs is known (for example, see Patent Document 1).
  • the key corresponds to an address in an address space such as a memory
  • the value corresponds to data stored at the address.
  • a value is stored in an address corresponding to a hash value obtained by converting an original key using a hash function, in association with the original key. Long Bit Addresses Addresses are compressed into short bit length hash values. Therefore, the associative array is considered to be effective in securing an address space that becomes very large if handled simply.
  • Open addressing Open @ Addressing
  • chaining Chaining
  • the open address method is a method of searching for another free address when a collision occurs.
  • the chaining method is a method of connecting keys that have caused a collision with a pointer.
  • the purpose of the technology disclosed in this specification is to provide a storage device of an associative array system, a High Dimensional Gaussian Filtering circuit, a Stereo Depth calculation circuit, and an information processing device.
  • a first aspect of the technology disclosed in the present specification is as follows.
  • a first memory a second memory for storing a value, and a third memory;
  • the first memory stores a key value and an address of a second memory in which a value corresponding to the key value is stored,
  • the third memory stores an address of a first memory storing a key corresponding to a value stored in the second memory, It is an associative array type storage device.
  • the first memory further stores a flag indicating whether a key value has been registered.
  • the storage device calculates an address of the first memory for storing the key value by a hash function from the key value, and stores the key value based on the open address method at the time of collision. Calculate the address of the first memory.
  • a second aspect of the technology disclosed in this specification is a High Dimensional Gaussian Filtering (HDGF) circuit configured to store a calculated value using the storage device according to the first aspect.
  • HDGF High Dimensional Gaussian Filtering
  • a third aspect of the technology disclosed in this specification is a Stereo @ Depth calculation circuit that performs a Depth calculation using the HDGF circuit according to the second aspect.
  • a fourth aspect of the technology disclosed in this specification is an information processing device that stores data by an associative array method using the storage device according to the first aspect.
  • an associative array type storage device capable of storing a large value at low cost, a High Dimensional Gaussian Filtering circuit, a Stereo Depth calculation circuit, and an information processing device. Can be.
  • FIG. 1 is a diagram illustrating an example of a hardware configuration of a storage device 100 of an associative array system.
  • FIG. 2 is a flowchart illustrating a processing procedure for initializing the storage device 100.
  • FIG. 3 is a flowchart illustrating a processing procedure for performing a key search in the storage device 100.
  • FIG. 4 is a flowchart illustrating a processing procedure for performing value reading by key search in the storage device 100.
  • FIG. 5 is a flowchart illustrating a processing procedure for performing value writing by key search in the storage device 100.
  • FIG. 6 is a flowchart showing a processing procedure for newly writing a key and a value in the storage device 100.
  • FIG. 1 is a diagram illustrating an example of a hardware configuration of a storage device 100 of an associative array system.
  • FIG. 2 is a flowchart illustrating a processing procedure for initializing the storage device 100.
  • FIG. 3 is a flowchart illustrating a processing procedure for performing a
  • FIG. 7 is a flowchart showing a processing procedure for sequentially reading all keys and values in the storage device 100.
  • FIG. 8 is a flowchart showing a processing procedure for sequentially reading all keys and values and updating values in the storage device 100.
  • FIG. 9 is a diagram showing an example of a pipeline circuit in which a processing procedure at the time of key search is implemented using a clocked SRAM.
  • FIG. 10 is a diagram showing a timing chart of the pipeline circuit shown in FIG.
  • HDGF High Dimensional Gaussian Filtering
  • image processing using High Dimensional Gaussian Filtering (HDGF) technology requires a very large amount of computation and a large address space.
  • HDGF technology for example, noise removal of a two-dimensional image or a three-dimensional CT (Computed Tomography) image, area division by Semantic Segmentation, and the like can be smoothly performed.
  • CT Computer Tomography
  • the HDGF technology for example, when a two-dimensional image is input, it is possible to handle pixel values not only as pixel values, but also as coordinate values or 5- or 6-dimensional values including separately calculated values. Is a necessary factor.
  • HDGF does not require order management.
  • the similarity cost (Cost) when the left-eye image and the right-eye image are shifted by the disparity value (Disparity) is calculated for a plurality of Disparity candidates.
  • a plurality of values are calculated for one pixel value of the left-eye image or the right-eye image.
  • the calculated value for each pixel value will be referred to as (one-dimensional) Cost @ Vector.
  • the entire Cost has a three-dimensional data structure. This is generally called Cost @ Volume.
  • the Cost size is a float type (4 bytes)
  • the capacity of the Cost Volume is 117 megabytes, which is a general size. Is a capacity to be stored in a DRAM (Dynamic RAM) instead of an SRAM (Static Random Access Memory).
  • ⁇ Cost ⁇ Volume has various features depending on the features of the subject, such as the presence or absence of a pattern in the original image.
  • An algorithm for selecting an optimal disparity from a plurality of disparity candidates has been continuously studied, and a number of schemes such as SGM (Semi Global Matching) have been proposed.
  • Cost Volume having a large size is recorded in the value data of the associative array.
  • As described above if a large address space after hashing is secured to suppress collision due to hashing, hardware cost increases.
  • the associative array when values are managed in pairs with keys, there is a problem in that the memory capacity for values increases as the address space increases, resulting in extremely high hardware costs.
  • the associative array method that can efficiently store large value data and reduce the hardware cost as a whole while increasing the address space to suppress collision due to hashing Is proposed below.
  • the storage device can efficiently store large value data while increasing the address space in order to suppress collision due to hashing, and can reduce hardware costs as a whole.
  • FIG. 1 shows a hardware configuration example of an associative array storage device 100 according to the present embodiment.
  • the storage device 100 includes a first memory 101, a second memory 102, and a third memory 103, and is configured to store a key value and a value in association with each other.
  • the first memory 101 includes a key area 111 for storing a key value, and a pointer (Ptr) area 112 for storing a storage location of a value corresponding to the key value.
  • the key value is stored at the address on the first memory 101 indicated by the hash value obtained by converting the key value by the hash function.
  • the value corresponding to the key value is stored in the second memory 102 separately from the key value.
  • an address on the second memory 102 in which a value corresponding to the key value of the same address in the key area 111 is stored.
  • ⁇ 1 is stored in the unused address pointer area 112 on the first memory 101, indicating that no valid key value exists at the address in the key area 111. Therefore, the pointer area 112 also functions as a “flag” indicating whether each address of the first memory 101 is unused. It is assumed that the first memory 101 is configured by an SRAM.
  • the second memory 102 includes a value area 121 for storing a value.
  • the value corresponding to the key value stored at each address of the key area 111 of the first memory 101 is stored in the address of the second memory 102 (or the value area 121) stored at the same address of the pointer area 112. Each is stored.
  • the second memory 102 since the operation of individually erasing data from the database is not used, the second memory 102 is used sequentially from address 0 in the order of registration. Therefore, there is a feature that the addresses up to the (used number-1) address of the second memory 102 are used, and all addresses subsequent to the last address of the used portion are unused portions.
  • the second memory 102 is constituted by a DRAM. Therefore, when the storage device 100 of the associative array system is used for the calculation procedure of Cost @ Volume to which HDGF described in the above section B is applied, large-capacity Cost @ Volume is converted to a DRAM having a low unit price per capacity. There is an advantage that it can be stored.
  • the third memory 103 includes a reverse pointer (Rev) area 131. At each address of the reverse pointer area 131, an address on the first memory 101 in which a key corresponding to the value stored at the same address in the second memory 102 (or the value area 121) is stored, that is, a reverse pointer. Each is stored.
  • Rev reverse pointer
  • the third memory 103 is also used sequentially from address 0 in the order of registration, like the second memory 102. Therefore, the addresses up to the (used number-1) address of the third memory 103 are used, and all the addresses subsequent to the last address of the used portion are unused portions.
  • the third memory 103 is assumed to be constituted by an SRAM.
  • the mapping unit 104 has a function of mapping a key space having a large space to an address of the space of the first memory 101. Specifically, the mapping unit 104 calculates the address (candidate address) of the first memory 101 from the key value inquired using a general hash function. That is, the hash value calculated from the key value by the hash function becomes the address where the key value is stored on the first memory 101.
  • the write pointer (WPT) 105 indicates an address at which a value is to be written to the second memory 102 next.
  • the write pointer 105 also indicates how many second memories 102 and third memories 103 are used. In this embodiment, since the operation of individually erasing data from the database is not used, the write pointer 105 must sequentially point to the address to be written next to the value area 121 of the second memory 102 from the top address. become.
  • a read pointer (RPT) 106 indicates an address at which value is read from the second memory 102.
  • the read pointer 106 is used when all the key values and values are sequentially read. The details of the procedure of the sequential full reading will be described later.
  • the write pointer 105 and the read pointer 106 may be arranged in an SRAM such as the first memory 101.
  • the key and the value are written to the storage device 100 in the initial state in the order of Key [1], Key [2], Key [3], Key [4], and Key [5].
  • the unused state of the key area 111, the value area 121, and the reverse pointer area 131 is shown by hatching in a shaded state.
  • the mapping unit 104 calculates the hash value “5” of Key [1] as a candidate address using a hash function. Since the address 5 of the key area 111 of the first memory 101 is unused, Key [1] is stored, and the value Value [1] of Key [1] is stored at address 0 of the value area 121 of the second memory 102. Is stored. Further, at the address 5 of the pointer area 112 of the first memory 101, an address “0” storing Value [1] in the value area 121 is stored, and the address 0 of the reverse pointer area 131 of the third memory 103 is stored. The address “5” on the first memory 101 in which Key [1] corresponding to Value [1] is stored.
  • the mapping unit 104 calculates the hash value “3” of Key [2] as a candidate address. Since the address 3 of the key area 111 is not used, Key [2] is not used.
  • the value [2] of Key [2] is stored at address 1 of the value area 121, and the address “1” storing Value [2] is stored at address 3 of the pointer area 112, and In the first address of the reverse pointer area 131, an address "3" on the first memory 101 in which Key [2] corresponding to Value [2] is stored.
  • FIG. Operation of Storage Device Here, a description will be given of a processing procedure for implementing an operation for realizing each function required for the associative array in the storage device 100 shown in FIG.
  • FIG. 2 shows a processing procedure for initializing the storage device 100 in the form of a flowchart.
  • step S201 The address is set to "-1" in all the pointer areas 112 of the first memory 101 (step S201), indicating that all the addresses of the first memory 101 are unused. Then, "0" is set to the write pointer 105 (step S202), indicating that the start address of the second memory 102 is the write position, and the initialization processing of the storage device 100 ends.
  • FIG. 3 shows a processing procedure for key search in the storage device 100 in the form of a flowchart.
  • a key value whose value is to be referred to is input to the mapping unit 104, and a candidate address of the first memory 101 is calculated using a general hash function (step S301).
  • step S302 a value is read from the candidate address in the pointer area 112 of the first memory 101 (step S302).
  • the pointer area 112 also serves as a “flag” indicating whether each address of the first memory 101 is unused or not, and ⁇ 1 is stored in the unused address pointer area 112 (as described above). ). Therefore, it is checked whether or not the value read from the candidate address in step S302 is -1 (step S303).
  • step S303 if the value read from the candidate address is ⁇ 1 (Yes in step S303), the candidate address is unused, and it can be seen that the value has not been registered for the key value. The process ends.
  • the key area 111 is searched for a key value to be searched and a hit address.
  • step S304 a value is read from the candidate address of the key area 111 in the first memory 101 (step S304). Then, it is checked whether or not the value read from the candidate address in the key area 111 of the first memory 101 matches the value input in step S301 as a key value whose value is to be referred to (step S305).
  • step S305 If the value read from the candidate address in the key area 111 matches the key value to be referred to (Yes in step S305), the key value is registered in the candidate address calculated from the key value by the hash function. This processing is terminated, and thus this processing is terminated.
  • step S305 If the value read from the candidate address in the key area 111 does not match the key value to be referred to (No in step S305), a collision by hash has occurred, and the collision is avoided by the open address method. Specifically, the candidate address calculated in step S301 is incremented by 1 to be a new candidate address (step S306).
  • step S307 it is checked whether or not the new candidate address has gone around the address of the first memory 101 (step S307). If the address has not been completed (No in step S307), the process returns to step S302 to check again whether a key value corresponding to the new candidate address is stored.
  • step S307 when the address of the first memory 101 has gone around (Yes in step S307), there is no address that hits the inquired key value, so that the value has not yet been registered for the key value. Since this is understood, the present process ends.
  • the mapping unit 104 uses the hash function to perform the Key [1]. Is calculated as a candidate address (step S301). Since the value read from the address 5 in the pointer area 112 of the first memory 101 is not ⁇ 1 (No in steps S302 and S303), the value is subsequently read from the address 5 in the key area 111 of the first memory 101. (Step S304), since the value matches the key value Key [1] being searched (Yes in Step S305), the result that the key value Key [1] being searched is registered is returned. Then, the present process ends. With respect to the key values Key [2], Key [3], and Key [4], it is possible to obtain the result that the key values have already been registered by the same processing flow.
  • the mapping unit 104 calculates the hash value “5” of Key [1] as a candidate address using a hash function (step S301). Since the value read from the address 5 in the pointer area 112 of the first memory 101 is not ⁇ 1 (No in step S302 and step S303), the value is subsequently read from the address 5 in the key area 111 of the first memory 101. (Step S304), the value does not match the key value Key [5] being searched (No in step S305). That is, since a collision occurs due to the hash, the collision is avoided by the open address method. Specifically, the candidate address is incremented by 1 to be an address 6 (step S306).
  • step S307 Since the address of the first memory 101 has not been completed yet (No in step S307), the process returns to step S302, and the search for the key value is repeated for address 6. Then, a value is read from the address 6 in the key area 111 (step S304), and since the value matches the key value Key [5] being searched (Yes in step S305), the key value Key [ 5] is registered, and the process ends.
  • the value read Figure 4 by the key search, in the memory device 100 shows a processing procedure for performing the value read by the key retrieval in the form of a flowchart.
  • a key value whose value is to be read is input to the mapping unit 104, and a candidate address of the first memory 101 is calculated using a general hash function (step S401).
  • step S402 a value is read from the candidate address in the pointer area 112 of the first memory 101 (step S402). Then, it is checked whether or not the value read from the candidate address in step S402 is -1, that is, whether or not the candidate address is unused (step S403).
  • step S403 if the value read from the candidate address is ⁇ 1 (Yes in step S403), the candidate address is unused, and it is known that the value has not been registered for the key value. This processing is terminated assuming that the value reading by the search has failed.
  • the key area 111 is searched for a key value to be searched and a hit address.
  • step S404 a value is read from the candidate address of the key area 111 of the first memory 101 (step S404). Next, it is checked whether or not the value read from the candidate address in the key area 111 of the first memory 101 matches the value input in step S401 as the key value whose value is to be read (step S405).
  • step S405 if the value read from the candidate address in the key area 111 matches the key value whose value is to be read (Yes in step S405), the key value is stored in the candidate address calculated from the key value by the hash function. You can see that it is registered. Therefore, the pointer value stored at the candidate address in the pointer area 112 of the first memory 101 is read. Then, the value is read from the address of the second memory 102 indicated by the pointer value (step S408), and this processing ends.
  • step S405 If the value read from the candidate address in the key area 111 does not match the key value from which the value is to be read (No in step S405), a collision by hash has occurred, and the collision is avoided by the open address method. I do. Specifically, the candidate address calculated in step S401 is incremented by 1 to be a new candidate address (step S406).
  • step S407 it is checked whether the new candidate address has gone around the address of the first memory 101 (step S407). If the address has not been completed (No in step S407), the process returns to step S402 to check again whether a key value corresponding to the new candidate address is stored.
  • step S407 when the address of the first memory 101 has completed one round (Yes in step S407), there is no address that hits the inquired key value, so that the value has not yet been registered for the key value. Therefore, it is determined that the value reading by the key search has failed, and the process ends.
  • the mapping unit 104 uses a hash function.
  • the hash value “5” of Key [1] is calculated as a candidate address (step S401). Since the value read from the address 5 of the pointer area 112 of the first memory 101 is not ⁇ 1 (No in step S402 and step S403), subsequently, the value is read from the address 5 of the key area 111 of the first memory 101.
  • step S404 Since the value matches the key value Key [1] being searched (Yes in step S405), the pointer value stored at address 5 of the pointer area 112 of the first memory 101 is changed (step S404).
  • the value Value [1] corresponding to Key [1] is read from the address 0 of the second memory 102 as shown (step S408), and this processing ends.
  • the value reading process by the same key search is performed, and the corresponding value Value [2], Value [3], and Value [4] are obtained. Reading can be performed.
  • the mapping unit 104 calculates a hash value “5” of Key [1] as a candidate address using a hash function (step S401). Since the value read from the address 5 of the pointer area 112 of the first memory 101 is not ⁇ 1 (No in step S402 and step S403), subsequently, the value is read from the address 5 of the key area 111 of the first memory 101. (Step S404), the value does not match the key value Key [5] being searched (No in step S405). That is, since a collision occurs due to the hash, the collision is avoided by the open address method.
  • the candidate address is incremented by 1 to be an address 6 (step S406). Since the address of the first memory 101 has not yet been completed (No in step S407), the process returns to step S402, and the search for the key value is repeated for address 6. Then, a value is read from the address 6 of the key area 111 (step S404), and since the value matches the key value Key [5] being searched (Yes in step S405), the pointer area 112 of the first memory 101 is read. The value Value [5] corresponding to Key [5] is read from the address 4 of the second memory 102 indicated by the pointer value stored in the address 6 (step S408), and the process ends.
  • FIG. 5 is a flowchart showing a processing procedure for writing a value by key search in the storage device 100.
  • a key value for which a value is to be written is input to the mapping unit 104, and a candidate address in the first memory 101 is calculated using a general hash function (step S501).
  • step S502 a value is read from the candidate address in the pointer area 112 of the first memory 101 (step S502). Then, it is checked whether or not the value read from the candidate address in step S502 is -1, that is, whether or not the candidate address is unused (step S503).
  • step S503 if the value read from the candidate address is ⁇ 1 (Yes in step S503), it is known that the candidate address is unused and no value has been registered for the key value. This processing is terminated assuming that the value writing by the search has failed.
  • the key area 111 is searched for a key value to be searched and a hit address.
  • a value is read from the candidate address of the key area 111 in the first memory 101 (step S504). Then, it is checked whether or not the value read from the candidate address in the key area 111 of the first memory 101 matches the value input in step S501 as the key value for writing the value (step S505).
  • step S505 if the value read from the candidate address in the key area 111 matches the key value for which the value is to be written (Yes in step S505), the key value is stored in the candidate address calculated from the key value by the hash function. You can see that it is registered. Therefore, the pointer value stored at the candidate address in the pointer area 112 of the first memory 101 is read. Then, the value is written to the address of the second memory 102 indicated by the pointer value (step S508), and the process ends.
  • step S505 If the value read from the candidate address in the key area 111 does not match the key value for which the value is to be read (No in step S505), a collision by hash has occurred, and the collision is avoided by the open address method. I do. More specifically, the candidate address calculated in step S501 is incremented by 1 to be a new candidate address (step S506).
  • step S507 it is checked whether or not the new candidate address has gone around the address of the first memory 101 (step S507). If the address has not been completed (No in step S507), the process returns to step S502 to check again whether a key value corresponding to the new candidate address is stored.
  • step S507 when the address of the first memory 101 has gone around (Yes in step S507), there is no address that hits the key value being queried, so that the value has not yet been registered for the key value. Therefore, this process is terminated assuming that the value writing by the key search has failed.
  • the mapping unit 104 uses a hash function.
  • the hash value “5” of Key [1] is calculated as a candidate address (step S501). Since the value read from the address 5 of the pointer area 112 of the first memory 101 is not ⁇ 1 (step S502, No of step S503), the value is subsequently read from the address 5 of the key area 111 of the first memory 101. Since the value matches the key value Key [1] being searched (Yes in step S505), the pointer value stored at address 5 in the pointer area 112 of the first memory 101 is changed (step S504).
  • the value Value [1] corresponding to Key [1] is written to the address 0 of the second memory 102 (step S508), and this processing ends.
  • the corresponding value Write [2], Value [3], and Value [4] are obtained by the same key search value write processing flow. Writing can be performed.
  • the mapping unit 104 calculates a hash value “5” of Key [5] as a candidate address using a hash function (step S501). Since the value read from the address 5 in the pointer area 112 of the first memory 101 is not ⁇ 1 (No in step S502 and step S503), subsequently, the value is read from the address 5 in the key area 111 of the first memory 101. (Step S504), the value does not match the key value Key [5] being searched (No in Step S505). That is, since a collision occurs due to the hash, the collision is avoided by the open address method.
  • the candidate address is incremented by 1 to be an address 6 (step S506). Since the address of the first memory 101 has not yet been completed (No in step S507), the process returns to step S502, and the search for the key value is repeated for address 6. Then, a value is read from the address 6 of the key area 111 (step S504), and since the value matches the key value Key [5] being searched (Yes in step S505), the pointer area 112 of the first memory 101 is read. The value Value [5] corresponding to Key [5] is written to the address 4 of the second memory 102 indicated by the pointer value stored at the address 6 (step S508), and the process ends.
  • the memory device 100 shows a processing procedure for performing a new write key and value in the form of a flowchart.
  • a key value to be registered is searched according to the processing procedure shown in FIG. 3 (step S601).
  • the registration of the key value and the value is determined to have failed, and this processing ends.
  • step S603 If the queried key value has not been registered in the storage device 100 yet (No in step S602), the key value to be registered is input to the mapping unit 104, and the first memory 101 is input using a general hash function. Is calculated (step S603).
  • step S604 a value is read from the candidate address in the pointer area 112 of the first memory 101 (step S604). Then, it is checked whether or not the value read from the candidate address in step S604 is -1, that is, whether or not the candidate address is unused (step S605).
  • step S605 if the value read from the candidate address is ⁇ 1, that is, if the candidate address is unused (Yes in step S605), the key value and the value are newly written to the unused address.
  • the address of the write pointer 105 is written to the candidate address of the pointer area 112 of the first memory 101 (step S606), and the key to be registered at the candidate address of the key area 111 is registered.
  • the value is written (step S607).
  • step S608 After newly writing the candidate address to the address indicated by the write pointer 105 in the reverse pointer area 131 of the third memory 103 (step S608), the write pointer 105 of the value area 121 of the second memory 102 becomes A new value is written to the address indicated (step S609).
  • step S610 the write pointer 105 is incremented by 1 (step S610) to point to the next address to be written. Then, it is determined that the new writing of the key and the value has succeeded, and this processing is ended.
  • step S611 a value is read from a candidate address in the key area 111 of the first memory 101 (step S611). Then, it is checked whether or not the value read from the candidate address in the key area 111 of the first memory 101 matches the key value to be registered (step S612).
  • step S612 if the value read from the candidate address in the key area 111 matches the key value to be registered (Yes in step S612), the key value is already registered in the candidate address calculated from the key value by the hash function. You can see that it is done. Accordingly, this processing is terminated assuming that the new writing of the key value and the value has failed.
  • step S613 If the value read from the candidate address in the key area 111 does not match the key value to be registered (No in step S612), a collision by hash has occurred, and the collision is avoided by the open address method. Specifically, the candidate address calculated in step S603 is incremented by 1 to be a new candidate address (step S613).
  • step S614 it is checked whether or not the new candidate address has gone around the address of the first memory 101 (step S614). If the address has not been completed (No in step S614), the process returns to step S604 to check again whether a new key value and value can be written to a new candidate address.
  • step S614 If the address of the first memory 101 has gone around (Yes in step S614), there is no address that hits the inquired key value, so that the value has not yet been registered for the key value. Therefore, this processing is terminated assuming that the new writing of the key value and the value has failed.
  • a new key and value are newly written in the order of Key [1], Key [2], Key [3], Key [4], and Key [5]. Is performed, for Key [1], Key [2], Key [3], and Key [4], a pointer area indicated by a hash value calculated from each key value by the mapping unit 104 using a hash function.
  • the value of each candidate address 112 is ⁇ 1, that is, none of the candidate addresses is unused.
  • step S605 writes the address of the write pointer 105 to the candidate address of the pointer area 112 (step S607), newly writes the key value to the candidate address of the key area 111 (step S608), A candidate address is written to the address of the reverse pointer area 131 indicated by the write pointer 105 (step S609), and a new value corresponding to each key value is written to the address of the value area 121 indicated by the write pointer 105 (step S610).
  • the candidate address of the pointer area 112 indicated by the hash value calculated from the key value Key [5] by the hash function has already been used, and collision by hash has occurred. Since this has occurred, the collision is avoided by the open address method. That is, the process proceeds to No in the branch of step S605, and a search process for an unused address in the key area 111 is performed. Specifically, the candidate address is incremented by 1 to be an address 6 (step S613). Since the address of the address of the first memory 101 has not yet been completed (No in step S614), the process returns to step S604, and new writing of a key and a value for address 6 is repeated.
  • Step S605 The value of the address 6 in the key area 111 is -1, that is, the address 6 is unused. Therefore, the process proceeds to Yes in the branch of Step S605, writes the address 4 held by the write pointer 105 into the address 6 of the pointer area 112 (Step S606), and assigns the key value Key [5] to the address 6 of the key area 111.
  • the data is newly written (step S607), “6” indicating the candidate address of the key area 111 is written into address 5 of the reverse pointer area 131 indicated by the write pointer 105 (step S609), and further, the value area 121 indicated by the write pointer 105 is written.
  • the value Value [5] corresponding to the key value Key [5] is written to the address 5 (step S610).
  • the read pointer 106 is set to 0 (step S701).
  • step S702 the value stored in the address indicated by the read pointer 106 in the reverse pointer area 131 of the third memory 103 is set as a candidate address (step S702). Then, the key value stored in the candidate address of the key area 111 of the first memory 101 is read (step S703).
  • step S703 the value corresponding to the key value read in the preceding step S703 is read from the address indicated by the read pointer 106 in the value area 121 of the second memory 102 (step S704).
  • step S705 the read pointer 106 is incremented by 1 (step S705), and the above processes S702 to S705 are repeated until the value of the read pointer 106 matches the value of the write pointer 105 (No in step S706). Key value and value can be sequentially read.
  • the read pointer 106 is set to 0 (step S701).
  • the value (“5”) stored at the address 0 of the reverse pointer 131 in the third memory 103, that is, address 5 is set as a candidate address (step S702).
  • the key value Key [1] at the address 5 of the key area 111 of the first memory 101 is read (step S703), and the value Value [1 stored at the address 0 of the value area 121 of the second memory 102 is read. ] Is read (step S704).
  • Step S705 Thereafter, while the read pointer 106 is incremented by one (Step S705), the processes of Steps S702 to S704 are repeated, and Key [2] and Value [2], Key [3] and Value [3], Key [4]. And Value [4], Key [5] and Value [5] can be sequentially read. Then, when the value of the read pointer 106 matches the value “5” of the write pointer 105 (Yes in step S706), all keys and values have been read, and this processing ends.
  • FIG. 8 is a flowchart showing a processing procedure for sequentially reading all keys and values and updating values in the storage device 100 in FIG. 8.
  • the read pointer 106 is set to 0 (step S801).
  • step 802 the value stored at the address indicated by the read pointer 106 in the reverse pointer area 131 of the third memory 103 is set as a candidate address (step 802). Then, the key value stored in the candidate address of the key area 111 of the first memory 101 is read (step S803).
  • step S803 the value corresponding to the key value read in the preceding step S803 is read from the address indicated by the read pointer 106 in the value area 121 of the second memory 102 (step S804).
  • step S805 the value at the address indicated by the read pointer 106 in the value area 121 is updated.
  • step S806 the read pointer 106 is incremented by 1 (step S806), and the above processes S802 to S806 are repeated until the value of the read pointer 106 matches the value of the write pointer 105 (No in step S807). , And the value can be updated by sequentially reading out the key value and the value.
  • the read pointer 106 is set to 0 (step S801)
  • the value (“5”) stored at the address 0 of the reverse pointer 131 of the third memory 103, that is, address 5, is set as a candidate address (step S802).
  • the key value Key [1] at address 5 of the key area 111 of the first memory 101 is read (step S803), and the value Value [1] stored at address 0 of the value area 121 of the second memory 102 is read. Is read (step S804), the value of the value Value [1] of the address is updated (step S805).
  • step S806 the processing of steps S802 to S805 is repeated, and Key [2] and Value [2], Key [3] and Value [3], Key [4]. And Value [4], Key [5] and Value [5] can be sequentially read. Then, when the value of the read pointer 106 matches the value “5” of the write pointer 105 (Yes in step S807), all the keys and values have been sequentially read and the value has been updated.
  • FIG. 9 shows an example of a pipeline circuit 900 in which the contents of the processing procedure at the time of the key search shown in FIG. 3 are implemented using a clocked SRAM.
  • @Key value key_000 is input to pipeline circuit 900 for each clock.
  • the hash function unit 901 corresponds to the mapping unit 104 in the storage device 100 shown in FIG. 1, calculates the hash value of the input key value key_000, and outputs it as a candidate address (initial address) adr_000.
  • the selector (sel) 902 When the selector (sel) 902 receives the initial address adr_000 and the address adr_001 output from the adder 6 described later, the selector (sel) 902 uses the key value comparison result vld_010 output from the key comparison unit 908 described later as a selection input to select two addresses. Either one of the input data adr_000 and adr_001 is output as a candidate address (SRAM address) adr_002 for the pointer area 112.
  • SRAM address candidate address
  • the SRAM @ Key unit 903 corresponds to the first memory 101 (key area 111) configured by the SRAM in the storage device 100 shown in FIG. 1, and is stored in the candidate address adr_002 selected by the selector 902.
  • the key value key_011 is output as a candidate key one clock later.
  • the Ptr unit 904 outputs the pointer value ptr_010 stored in the candidate address adr002 selected by the selector 902 after one clock, corresponding to the pointer area 112.
  • the pointer value ptr_010 is a candidate address of the second memory 102 storing the value corresponding to the key value.
  • the flip-flop (FF) 905 holds the candidate address (SRAM address) adr002 input for each clock for one clock and outputs the delayed address. Note that, in FIG. 9, dashed lines indicated by reference numerals 911 and 912 indicate clock switching, respectively.
  • the adder 906 adds 1 to the candidate address (SRAM address) adr_002 delayed and output by one clock from the flip-flop 905 and outputs the result to the selector (sel) 902.
  • the flip-flop 907 holds the key value key_000 input for each clock for one clock, and outputs the key value key_010 with a delay as the input key value key_010.
  • the key comparison unit 908 compares the key value key_010 input one clock before input from the flip-flop 907 with the candidate key key_011 input from the SRAM @ Key unit 903, and if both match, 1 is set. If they do not match, 0 is output as vld_010 indicating the validity of the candidate key.
  • the selector (sel) 902 outputs the initial address adr_000 as the candidate address adr_002 when the select input vld_010 is 1 (that is, when the input key value key_010 and the candidate key key_011 match).
  • the selector (sel) 902 adds the candidate address adr_001 obtained by adding 1 to the candidate address one clock before, and sets the candidate address adr_001 to the candidate address. Output as adr_002.
  • the candidate address (Hash value of the input key value key_000) is output from the SRAM @ Ptr unit 904.
  • the pointer value stored in (initial address) adr_000 is output as a candidate pointer. If they do not match, it is assumed that a collision due to hash has occurred, but the pointer value stored in the candidate address adr_001 obtained by adding 1 to the candidate address (initial address) adr_000 is output as a candidate pointer.
  • the flip-flop 909 at the subsequent stage sets the comparison result vld_010 by the key comparison unit 908 as vld_020, sets the key value key_010 output from the flip-flop 907 as a candidate key key_020, sets the ptr_010 output from the SRAM @ Ptr unit 904 as a candidate pointer ptr20, Each output is further delayed by one clock.
  • FIG. 10 shows a case where a key search is performed in the order of Key [1], Key [2], Key [3], Key [4], Key [5], Key [6], Key [7].
  • 10 shows a timing chart of the pipeline circuit 900 shown in FIG.
  • the initial address adr_000 which is the hash value is “5”
  • the address adr_001 obtained by adding 1 to the initial address is “6”. Since the select input to the selector 902 is a high signal, the SRAM address selected by the selector 902 is the initial address adr_000 “5”.
  • the input key value Key [1] is output from the flip-flop 907 with a delay of $ 1 clock, and the candidate key Key [1] stored at the SRAM address "5" is output from the SRAM $ Key unit 903. Since the input key value key_010 matches the candidate key key_011, the key comparison unit 908 outputs a high signal as vld_010, and the SRAM @ Ptr unit 904 outputs “0” as the candidate pointer ptr_010 stored at the SRAM address “5”. Is output.
  • Key [1] is output from the flip-flop 909 as the key value key_020 and the address “0” is output as the pointer value ptr_020, and a high signal as vld020 indicating the validity of these key and pointer values is output. Is output.
  • the initial address adr_000 which is the hash value is “3”
  • the address adr_001 obtained by adding 1 to the initial address is “4”
  • the selector 902 selects the address.
  • the SRAM address is "3”.
  • the key comparison unit 908 outputs a high signal as vld_010 after being delayed by one clock, and is stored in the SRAM address “3” from the SRAM @ Ptr unit 904.
  • the address “1” is output as the candidate pointer ptr_010.
  • Key [2] is output as the key value key_020 and “1” is output as the pointer value ptr_020 from the flip-flop 909, and a high signal is output as vld020 indicating the validity of these key and pointer values. Is output.
  • the initial address adr_000 which is the hash value is “7”
  • the address adr_001 obtained by adding 1 to the initial address is “8”
  • the hash value is selected by the selector 902.
  • the SRAM address is "3”.
  • the key comparison unit 908 outputs a high signal as vld_010 after being delayed by one clock, and is stored in the SRAM address “7” from the SRAM @ Ptr unit 904.
  • the address “2” is output as the candidate pointer ptr_010.
  • Key [3] is output as the key value key_020 and “2” is output as the pointer value ptr_020 from the flip-flop 909, and a high signal is output as vld020 indicating the validity of these key and pointer values. Is output.
  • the initial address adr_000 which is the hash value is “3”
  • the address adr_001 obtained by adding 1 to the initial address is “0”
  • the selector 902 selects the address.
  • the SRAM address is "1”.
  • the key comparison unit 908 outputs a high signal as vld_010 after being delayed by one clock, and is stored in the SRAM address “0” from the SRAM @ Ptr unit 904.
  • the address “3” is output as the candidate pointer ptr_010.
  • Key [4] is output as the key value key_020 and “3” is output as the pointer value ptr_020 from the flip-flop 909, and a high signal is output as vld020 indicating the validity of these key and pointer values. Is output.
  • the initial address adr_000 which is the hash value is “5”
  • the address adr_001 obtained by adding 1 to the initial address is “6”
  • the selector 902 selects the address.
  • the SRAM address is “5”.
  • the input key value key_010 does not match the candidate key key_011. That is, since a collision by hash occurs, the collision is avoided by the open address method.
  • the key comparison unit 908 outputs a low signal as vld_010, and the address “0” is output from the SRAM @ Ptr unit 904 as the candidate pointer ptr_010 stored at the SRAM address “5”. Is done. Further, the selector 902 outputs “6”, which is the address adr_001 obtained by adding 1 to the initial address, as the SRAM address adr_002 due to the input of the low signal to the select input s.
  • the candidate key Key [5] stored at the SRAM address "6" is output from the SRAM @ Key unit 903.
  • the key comparison unit 908 outputs a high signal as vld_010
  • the SRAM @ Ptr unit 904 outputs "4" as the candidate pointer ptr_010 stored at the SRAM address "5". Is output.
  • Key [5] is output as the key value key_020 and “4” is output as the pointer value ptr_020 from the flip-flop 909, and a high signal is output as vld_020 indicating the validity of these key and pointer values. Is output.
  • Cost Volume having a large size is recorded in the value data of the associative array (described above).
  • the size of one key value is 60 bits, but the size of one value (Cost @ Vector) is as large as several kilobits, and the Cost @ Volume is 236 megabytes. Therefore, when a key and a value are simply handled as a pair by the associative array method, the memory capacity for the value is increased by an amount corresponding to the increase in the address space, so that the waste of the capacity is greatly increased.
  • the key value is associated with the pointer, but is different from the key value storage area configured by the SRAM. Since the value is stored in the storage area constituted by the DRAM, costs such as pointers are required. However, there is an advantage that the storage capacity of the value is not wasted, and a large amount of value can be stored at low cost. is there.
  • the re-reference address to the first memory 101 at the time of collision can be calculated in advance by the open address method. Therefore, the latency of the clocked SRAM can be hidden, the throughput can be kept at 1 unless a collision occurs, and even if a collision occurs, the number of occurrences ⁇ 1 clock loss is sufficient.
  • the storage device of the associative array system disclosed in this specification can be applied to, for example, an HDGF circuit that performs image processing such as noise removal of a two-dimensional image or a three-dimensional CT image or Semantic Segmentation.
  • a Stereo @ Depth calculation circuit can be configured using an HDGF circuit to which the associative array type storage device disclosed in this specification is applied.
  • the storage device disclosed in this specification can be applied to various types of information processing devices using the associative array system.
  • the storage device disclosed in this specification can be suitably applied to an information processing device that needs to secure a large address space and has a purpose of handling a value having a large data size.
  • the information processing device may perform image learning, image inference, and the like using an artificial intelligence technology such as Deep @ Learning.
  • the storage device of the associative array system disclosed in this specification may be a storage device that stores image data used as information input to Convolutional ⁇ Neural ⁇ Network or the like.
  • the technology disclosed in the present specification may have the following configurations.
  • a first memory a second memory for storing a value, and a third memory
  • the first memory stores a key value and an address of a second memory in which a value corresponding to the key value is stored
  • the third memory stores an address of a first memory storing a key corresponding to a value stored in the second memory,
  • An associative array type storage device (2)
  • the first memory further stores a flag indicating whether a key value has been registered, The storage device according to the above (1).
  • the storage device according to (3).
  • the first and third memories are configured by SRAM, and the memory of the second memory is configured by DRAM.
  • the storage device according to any one of (1) to (4).
  • An HDGF circuit configured to store a calculated value using the storage device according to any one of (1) to (5).
  • a stereo depth calculation circuit that performs a depth calculation using the HDGF circuit according to (6).
  • An information processing device that stores data by the associative array method using the storage device according to any one of (1) to (5).
  • REFERENCE SIGNS LIST 100 storage device 101 first memory 111 key area 112 pointer area 102 second memory 121 value area 103 third memory 131 reverse pointer area 104 mapping unit 105 Write pointer 106 Read pointer 901 Hash function section 902 Selector 903 SRAM Key section 904 SRAM Ptr section 905 Flip-flop 906 Adder 907 Flip-flop 908 Key comparison section 909 Flip-flop

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Mathematical Physics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Databases & Information Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

サイズの大きなバリューを低コストで記憶する連想配列方式の記憶装置を提供する。 連想配列方式の記憶装置は、第1のメモリと、バリューを記憶する第2のメモリと、第3のメモリを備え、前記第1のメモリは、キー値と、そのキー値に対応するバリューが格納されている第2のメモリの番地を格納し、前記第3のメモリは、前記第2のメモリに格納されたバリューに対応するキーを格納している第1のメモリの番地を格納する。前記第1のメモリは、キー値が登録されているかどうかを示すフラグをさらに格納する。

Description

記憶装置、High Dimensional Gaussian Filtering回路、Stereo Depth計算回路、並びに情報処理装置
 本明細書で開示する技術は、連想配列方式の記憶装置、High Dimensional Gaussian Filtering回路、Stereo Depth計算回路、並びに情報処理装置に関する。
 当業界において、キー(Key)と値(Value)をペアにして管理する連想配列方式が知られている(例えば、特許文献1を参照のこと)。キーはメモリなどのアドレス空間上のアドレスに相当し、バリューはそのアドレスに格納されるデータに相当する。一般には、元のキーをハッシュ関数により変換したハッシュ値に該当するアドレスに、バリューが元のキーと対応付けて格納される。長いビット長のアドレスアドレスが短いビット長のハッシュ値に圧縮される。したがって、単純に扱うととても広大になってしまうアドレス空間を確保する際に、連想配列は効果的と考えられる。
 複数の異なるキーが同じハッシュ値になる「衝突(collision)」が発生することがある。連想配列方式における衝突に対する対処処理として、開番地法(Open Addressing)と連鎖法(Chain)が知られている。開番地法は、衝突が発生した際に空いている別の番地を探す方法である。また、連鎖法は、衝突を起こしたキー同士をポインタでつなぐ方法である。
特開2001-67881号公報
Andrew Adams外著"Fast High-Dimensional Filtering Using the Permutohedral Lattice"(Eurographics 2010 Runner up for Best Paper)
 本明細書で開示する技術の目的は、連想配列方式の記憶装置、High Dimensional Gaussian Filtering回路、Stereo Depth計算回路、並びに情報処理装置を提供することにある。
 本明細書で開示する技術の第1の側面は、
 第1のメモリと、バリューを記憶する第2のメモリと、第3のメモリを備え、
 前記第1のメモリは、キー値と、そのキー値に対応するバリューが格納されている第2のメモリの番地を格納し、
 前記第3のメモリは、前記第2のメモリに格納されたバリューに対応するキーを格納している第1のメモリの番地を格納する、
連想配列方式の記憶装置である。
 前記第1のメモリは、キー値が登録されているかどうかを示すフラグをさらに格納する。
 また、第1の側面に係る記憶装置は、キー値からハッシュ関数によりそのキー値を格納する前記第1のメモリの番地を計算し、衝突時には、開番地法に基づいてキー値を格納する前記第1のメモリの番地を計算する。
 また、本明細書で開示する技術の第2の側面は、第1の側面に係る記憶装置を用いて計算値を記憶するように構成された、High Dimensional Gaussian Filtering(HDGF)回路である。
 また、本明細書で開示する技術の第3の側面は、第2の側面に係るHDGF回路を用いてDepth計算を行う、Stereo Depth計算回路である。
 また、本明細書で開示する技術の第4の側面は、第1の側面に係る記憶装置を用いて連想配列方式によりデータを記憶する、情報処理装置である。
 本明細書で開示する技術によれば、サイズの大きなバリューを低コストで記憶することができる連想配列方式の記憶装置、High Dimensional Gaussian Filtering回路、Stereo Depth計算回路、並びに情報処理装置を提供することができる。
 なお、本明細書に記載された効果は、あくまでも例示であり、本発明の効果はこれに限定されるものではない。また、本発明が、上記の効果以外に、さらに付加的な効果を奏する場合もある。
 本明細書で開示する技術のさらに他の目的、特徴や利点は、後述する実施形態や添付する図面に基づくより詳細な説明によって明らかになるであろう。
図1は、連想配列方式の記憶装置100のハードウェア構成例を示した図である。 図2は、記憶装置100を初期化するための処理手順を示したフローチャートである。 図3は、記憶装置100においてキー検索するための処理手順を示したフローチャートである。 図4は、記憶装置100においてキー検索によるバリュー読み出しを行うための処理手順を示したフローチャートである。 図5は、記憶装置100においてキー検索によるバリュー書き込みを行うための処理手順を示したフローチャートである。 図6は、記憶装置100においてキーとバリューの新規書き込みを行うための処理手順を示したフローチャートである。 図7は、記憶装置100においてキーとバリューの順次全読み出しを行うための処理手順を示したフローチャートである。 図8は、記憶装置100においてキーとバリューの順次全読み出しとバリューの更新を行うための処理手順を示したフローチャートである。 図9は、クロックドSRAMを用いてキー検索時の処理手順を実装したパイプライン回路の一例を示した図である。 図10は、図9に示したパイプライン回路のタイミングチャートを示した図である。
 以下、図面を参照しながら本明細書で開示する技術の実施形態について詳細に説明する。
A.HDGFの適用例
 例えば、近年開発が進められているHigh Dimensional Gaussian Filtering(HDGF)技術を利用した画像処理は、演算量が非常に大きくなるとともに、広大なアドレス空間を確保する必要が生じる。ここで、HDGF技術によれば、例えば、2次元画像や3次元CT(Computed Tomography)画像のノイズ除去や、Semantic Segmentationによる領域分割などをスムースに実施することができる。HDGF技術は、例えば2次元画像を入力とする場合、画素値だけでなく、座標値、あるいは別途計算された値を含めて5~6次元の値として画素値を取り扱うことが、広大なアドレス空間が必要となる要因である。
 本出願人は、HDGF技術を用いた画像処理で使用するデータの管理には、連想配列方式を取り入れることが適切と考えている。HDGFにおいては順序管理が不要である。
 また、ハッシュを用いた連想配列の実装方法として、開番地法と連鎖法が挙げられる(前述)。HDGFなどのConditional Random Field系の画像処理を低消費電力にてリアルタイム動作させることを想定した場合、ハードウェアによるパイプライン処理回路化が必須となる。その場合、キーのシノニム判定を順次行うためには、投機的に番地を生成することができる開番地法の方が適している、と本出願人は考えている。
 ここで、パイプラインのスループットを最大限にするためには、ハッシュによる衝突を抑制することが効果的である。それを実現するためには、ハッシュ後のアドレス空間を大きめに確保することにより、ハードウェアとしてのコストの増加を招来する。
 続いて、HDGF技術をStereo Depth計算処理に適用する場合について考察する。
 左目画像と右目画像の相関を用いたStereo Depth計算処理では、左目画像と右目画像を視差値(Disparity)分だけずらしたときの類似度コスト(Cost)を、複数のDisparity候補について計算するのが一般的である。そのため、左目画像又は右目画像の1つの画素値に対して複数の値が計算される。画素値毎の計算値を(1次元の)Cost Vectorと呼ぶことにする。また、画像自体が2次元データであることから、Cost全体は3次元のデータ構造を持つ。これを、一般的にはCost Volumeと呼ぶ。
 例えば、VGA(Video Graphics Array)画像(640×480画素)に対してDisparity候補を96個探索する場合、Costサイズをfloat型(4バイト)とすると、Cost Volumeの容量は117メガバイトとなり、一般的にはSRAM(Static Random Access Memory)ではなくDRAM(Dynamic RAM)に格納すべき容量である。
 Cost Volumeには、原画像の絵柄の有無など、被写体の特徴によってさまざまな特徴がある。複数のDisparity候補から最適なDisparityを選出するためのアルゴリズムは、既に継続的に研究されており、SGM(Semi Global Matching)など多数の方式が提案されている。
 HDGF技術をStereo Depth計算処理に適用する場合、連想配列のバリューデータには、サイズが大きなCost Volumeが記録されることになる。上述したように、ハッシュによる衝突を抑制するためにハッシュ後のアドレス空間を大きめに確保すると、ハードウェアコストが増大する。連想配列において、キーとペアにしてバリューを管理する場合、アドレス空間を大きめにした分だけバリュー用のメモリ容量も増加するので、非常に高いハードウェアコストになってしまうという問題がある。
 そこで、本明細書では、ハッシュによる衝突を抑制するためにアドレス空間を大きめにしつつ、サイズが大きいバリューデータを効率的に記憶して、全体としてハードウェアコストを低減することができる、連想配列方式の記憶装置について、以下で提案する。
B.HDGFを適用したCost Volumeの計算手順
 ここでは、Stereo Depth計算処理において、Cost VolumeにHDFGを適用する場合に計算手順(非特許文献1を参照のこと)について説明する。当該計算手順は、データベース作成、フィルター実行、及びCost Volume再構成の3つの過程を繰り返すことでフィルター処理を行うものである。各過程について、以下で説明しておく。
B-1.データベース作成
 連想配列にキー及びバリューを登録する過程では、原画像のすべての座標(H,V)の画素に対して(但し、Hは水平座標、Vは垂直座標)、原画像のその座標の画素のRGB値と座標(H,V)から所定の計算式(ハッシュ関数)で作成されたキー値(Key)でデータベースを検索する。そして、そのキー値でデータベースの登録がなければ、その画素のCost Vectorをデータベースに新規に登録する。また、そのキー値でデータベースに既に登録されている場合には、検索されたCost Vectorに加算する(calcSplat)。
B-2.フィルター実行
 連想配列内のすべてのバリューに対して、そのキー値から別の2つのキーを生成し、対応する2つのバリューと当該バリューとでGaussian Filter(1:2:1)計算を行い、当該バリューを更新する(calcBlur)。
B-3.Cost Volume再構成
 上記B-1のデータベース作成時と同じ計算式で作成されたキー値でデータベースを検索し、そのバリューを所定のCost VectorとしてCost Volumeに格納する(calcSlice)。
C.連想配列に必要な機能
 上記B項で説明した、データベース作成、フィルター実行、及びCost Volume再構成の3つの過程からなる計算手順に用いられる、連想配列に必要な機能は、以下の(1)~(7)である。但し、本実施形態ではデータベースから個別にデータを消去する操作は使われないという点に留意されたい。
(1)初期化
(2)キー検索
(3)キー検索によるバリュー読み出し
(4)キー検索によるバリュー書き込み
(5)キーとバリューの新規書き込み
(6)キーとバリューの順次全読み出し
(7)キーとバリューの順次全読み出しとバリューの更新
D.連想配列方式の記憶装置
 ここでは、本実施形態に係る連想配列方式の記憶装置について具体的に説明する。当該記憶装置は、ハッシュによる衝突を抑制するためにアドレス空間を大きめにしつつ、サイズが大きいバリューデータを効率的に記憶して、全体としてハードウェアコストを低減することができる。
D-1.連想配列方式の記憶装置のハードウェア構成
 図1には、本実施形態に係る連想配列方式の記憶装置100のハードウェア構成例を示している。記憶装置100は、第1のメモリ101と、第2のメモリ102と、第3のメモリ103を備え、キー値及びバリューを対応付けて格納するように構成されている。
 第1のメモリ101は、キー値を記憶するキー領域111と、キー値に対応するバリューの格納場所を記憶するポインタ(Ptr)領域112を含んでいる。キー値をハッシュ関数により変換したハッシュ値が示す第1のメモリ101上の番地に、そのキー値が格納される。また、そのキー値に対応するバリューは、キー値とは分離して第2のメモリ102に格納される。具体的には、ポインタ領域112の各番地には、キー領域111の同じ番地のキー値に対応するバリューが格納されている第2のメモリ102上の番地がそれぞれ格納される。また、第1のメモリ101上の未使用の番地のポインタ領域112には-1が格納され、キー領域111の当該番地には有効なキー値が存在しないことを示す。したがって、ポインタ領域112は、第1のメモリ101の各番地が未使用か否かを示す「フラグ」としても機能する。第1のメモリ101はSRAMにより構成されることを想定している。
 第2のメモリ102は、バリューを記憶するバリュー領域121からなる。第1のメモリ101のキー領域111の各番地に格納されたキー値に対応するバリューは、ポインタ領域112の同じ番地に記憶されている第2のメモリ102(若しくは、バリュー領域121)の番地にそれぞれ記憶される。
 本実施形態では、データベースから個別にデータを消去する操作は使われないため、第2のメモリ102は、登録順に0番地から順次使用されていく。したがって、第2のメモリ102の(使用個数-1)番地までが使用され、使用部分の最後の番地よりも後の番地はすべて未使用部分であるという特徴がある。
 バリューは比較的大きなデータであるため、第2のメモリ102は、DRAMにより構成されることを想定している。したがって、当該連想配列方式の記憶装置100が、上記B項で説明したHDGFを適用したCost Volumeの計算手順に使用される場合には、大容量のCost Volomeを、容量当たりの単価が安いDRAMに格納することができるというメリットがある。
 第3のメモリ103は、リバースポインタ(Rev)領域131からなる。リバースポインタ領域131の各番地には、第2のメモリ102(若しくは、バリュー領域121)の同じ番地に記憶したバリューに対応するキーが格納されている第1のメモリ101上の番地すなわちリバースポインタがそれぞれ記憶されている。
 本実施形態では、データベースから個別にデータを消去する操作は使われないため、第3のメモリ103も、第2のメモリ102と同様に、登録順に0番地から順次使用されていく。したがって、第3のメモリ103の(使用個数-1)番地までが使用され、使用部分の最後の番地よりも後の番地はすべて未使用部分である。第3のメモリ103はSRAMにより構成されることを想定している。
 写像部104は、広大な空間を持つキーの空間を、第1のメモリ101の空間の番地に写像する機能を持つ。具体的には、写像部104は、問い合わせを受けたキー値から、一般的なハッシュ関数を用いて、第1のメモリ101の番地(候補番地)を計算する。すなわち、キー値からハッシュ関数により計算されたハッシュ値が、第1のメモリ101上でそのキー値を格納する番地となる。
 書き込みポインタ(WPT)105は、次に第2のメモリ102にバリューの書き込みを行う番地を示す。また、書き込みポインタ105は、第2のメモリ102及び第3のメモリ103がいくつ使用されているかも示す。本実施形態ではデータベースから個別にデータを消去する操作は使われないので、書き込みポインタ105は、第2のメモリ102のバリュー領域121の次に書き込みを行う番地を、先頭番地から順に指していくことになる。
 読み出しポインタ(RPT)106は、第2のメモリ102からバリューの読み出しを行う番地を示す。読み出しポインタ106は、キー値及びバリューの順次全読み出しを行なう際に使用する。順次全読み出しの処理手順の詳細については後述に譲る。
 書き込みポインタ105及び読み出しポインタ106は、第1のメモリ101などSRAM内に配置してもよい。
 なお、図1では、初期状態の記憶装置100に対して、Key[1]、Key[2]、Key[3]、Key[4]、Key[5]の順に、キーとバリューの書き込みが行われた後の状態を例示し、キー領域111、バリュー領域121、及びリバースポインタ領域131の未使用部分を斜線で塗り潰して示している。
 まず、Key[1]のバリューを書き込む際に、写像部104ではハッシュ関数を用いてKey[1]のハッシュ値「5」が候補番地として計算される。第1のメモリ101のキー領域111の5番地は未使用なのでKey[1]が格納されるとともに、第2のメモリ102のバリュー領域121の0番地にKey[1]のバリューValue[1]が格納される。また、第1のメモリ101のポインタ領域112の5番地には、バリュー領域121でValue[1]を格納した番地「0」が格納され、且つ、第3のメモリ103のリバースポインタ領域131の0番地にはValue[1]に対応するKey[1]が格納されている第1のメモリ101上の番地「5」が格納される。
 続いて、Key[2]のバリューを書き込む際に、写像部104でKey[2]のハッシュ値「3」が候補番地として計算され、キー領域111の3番地は未使用なのでKey[2]が格納され、バリュー領域121の1番地にKey[2]のバリューValue[2]が格納されるとともに、ポインタ領域112の3番地にはValue[2]を格納した番地「1」が格納され、且つ、リバースポインタ領域131の1番地にはValue[2]に対応するKey[2]が格納されている第1のメモリ101上の番地「3」が格納される。
 続くKey[3]及びKey[4]についても、各々のキー値からハッシュ関数により候補番地として計算したキー領域111の7番地及び0番地は未使用なので、キー値Key[3]及びKey[4]が順次格納されるとともに、バリュー領域121の2番地及び3番地にKey[3]及びKey[4]にそれぞれ対応するバリューValue[3]及びValue[4]が順次格納される。そして、ポインタ領域112の7番地及び0番地に各々のバリューを格納したバリュー領域121の2番地及び3番地がそれぞれ格納され、且つ、リバースポインタ領域131の2番地及び3番地には各々のバリューに対応するキー値が格納されている第1のメモリ101上の番地「7」及び「0」がそれぞれ格納される。
 さらに続いて、Key[5]のバリューを書き込む際に、写像部104でKey[5]の候補番地として計算したキー領域111の5番地は既にKey[1]によって使用されている。すなわち、ハッシュによる衝突が発生したことになるので、開番地法により衝突を回避する。具体的には、候補番地を1だけインクリメントしたキー領域111の6番地が未使用であるので、Key[5]が格納されるとともに、バリュー領域121の4番地にKey[5]のバリューValue[5]が格納される。また、ポインタ領域112の6番地にはValue[5]を格納した番地「4」が格納され、且つ、リバースポインタ領域131の4番地にはValue[5]に対応するKey[5]が格納されている第1のメモリ101上の番地「6」が格納される。
 なお、記憶装置100におけるキー検索や書き込み動作の詳細については、次のE項に譲る。
E.記憶装置の動作
 ここでは、図1に示した記憶装置100において、連想配列に必要な各機能を実現するための動作を実施するための処理手順について、説明する。
E-1.初期化
 図2には、記憶装置100を初期化するための処理手順をフローチャートの形式で示している。
 第1のメモリ101のポインタ領域112のすべてに番地に「-1」をセットして(ステップS201)、第1のメモリ101のすべての番地が未使用であることを示す。そして、書き込みポインタ105に「0」をセットして(ステップS202)、第2のメモリ102の先頭番地が書き込み位置であることを示して、記憶装置100の初期化処理を終了する。
E-2.キー検索
 図3には、記憶装置100において、キー検索するための処理手順をフローチャートの形式で示している。
 まず、バリューを参照したいキー値を写像部104に入力し、一般的なハッシュ関数を用いて、第1のメモリ101の候補番地を計算する(ステップS301)。
 次いで、第1のメモリ101のポインタ領域112の候補番地から値を読み出す(ステップS302)。
 ポインタ領域112は、第1のメモリ101の各番地が未使用か否かを示す「フラグ」の役割も兼ねており、未使用の番地のポインタ領域112には-1が格納されている(前述)。そこで、ステップS302で候補番地から読み出した値が-1であるかどうかをチェックする(ステップS303)。
 ここで、候補番地から読み出した値が-1であれば(ステップS303のYes)、当該候補番地は未使用であり、当該キー値に対してバリューはまだ登録されていないことが分かるので、本処理を終了する。
 一方、候補番地から読み出した値が-1でなければ(ステップS303のNo)、当該候補番地は既に使用されているので、検索するキー値とヒットする番地をキー領域111で探索する。
 キー領域111の探索処理として、まず第1のメモリ101のキー領域111の候補番地から値を読み出す(ステップS304)。そして、第1のメモリ101のキー領域111の候補番地から読み出した値が、バリューを参照したいキー値としてステップS301で入力された値と一致するかどうかをチェックする(ステップS305)。
 ここで、キー領域111の候補番地から読み出した値が参照したいキー値と一致する場合には(ステップS305のYes)、当該キー値からハッシュ関数により計算される候補番地に当該キー値が登録されていることが分かるので、本処理を終了する。
 また、キー領域111の候補番地から読み出した値が参照したいキー値と一致しない場合には(ステップS305のNo)、ハッシュによる衝突が発生したことになるので、開番地法により衝突を回避する。具体的には、ステップS301で計算した候補番地を1だけインクリメントして、新しい候補番地とする(ステップS306)。
 ここで、新しい候補番地が、第1のメモリ101の番地を一周したかどうかをチェックする(ステップS307)。番地を一周していなければ(ステップS307のNo)、ステップS302に戻り、新しい候補番地に該当するキー値が格納されているかどうかを改めてチェックする。
 また、第1のメモリ101の番地を一周した場合には(ステップS307のYes)、問い合わせているキー値にヒットする番地がないので、当該キー値に対してバリューはまだ登録されていないことが分かるので、本処理を終了する。
 例えば、記憶装置100が図1に示すように既にキー及びバリューが登録されている状態において、キー値Key[1]を検索する場合、まず、写像部104ではハッシュ関数を用いてKey[1]のハッシュ値「5」が候補番地として計算される(ステップS301)。第1のメモリ101のポインタ領域112の5番地から読み出した値が-1でないので(ステップS302、ステップS303のNo)、続いて、第1のメモリ101のキー領域111の5番地から値を読み出して(ステップS304)、その値が検索しているキー値Key[1]と一致するので(ステップS305のYes)、検索しているキー値Key[1]が登録されているという結果を返して、本処理を終了する。キー値Key[2]、Key[3]、Key[4]に関しても、同様の処理フローにより、既に登録されているという結果を得ることができる。
 他方、キー値Key[5]を検索する場合、まず、写像部104ではハッシュ関数を用いてKey[1]のハッシュ値「5」が候補番地として計算される(ステップS301)。第1のメモリ101のポインタ領域112の5番地から読み出した値が-1でないので(ステップS302、ステップS303のNo)、続いて、第1のメモリ101のキー領域111の5番地から値を読み出すが(ステップS304)、その値は検索しているキー値Key[5]と一致しない(ステップS305のNo)。すなわち、ハッシュによる衝突が発生しているので、開番地法により衝突を回避する。具体的には、候補番地を1だけインクリメントして6番地とする(ステップS306)。まだ第1のメモリ101の番地を一周していないので(ステップS307のNo)、ステップS302に戻り、6番地についてキー値の検索を繰り返し実施する。そして、キー領域111の6番地から値を読み出して(ステップS304)、その値が検索しているキー値Key[5]と一致するので(ステップS305のYes)、検索しているキー値Key[5]が登録されているという結果を返して、本処理を終了する。
E-3.キー検索によるバリュー読み出し
 図4には、記憶装置100において、キー検索によるバリュー読み出しを行うための処理手順をフローチャートの形式で示している。
 まず、バリューを読み出したいキー値を写像部104に入力し、一般的なハッシュ関数を用いて、第1のメモリ101の候補番地を計算する(ステップS401)。
 次いで、第1のメモリ101のポインタ領域112の候補番地から値を読み出す(ステップS402)。そして、ステップS402で候補番地から読み出した値が-1であるかどうか、すなわち当該候補番地が未使用かどうかをチェックする(ステップS403)。
 ここで、候補番地から読み出した値が-1であれば(ステップS403のYes)、当該候補番地は未使用であり、当該キー値に対してバリューはまだ登録されていないことが分かるので、キー検索によるバリュー読み出しに失敗したとして、本処理を終了する。
 一方、候補番地から読み出した値が-1でなければ(ステップS403のNo)、当該候補番地は既に使用されているので、検索するキー値とヒットする番地をキー領域111で探索する。
 キー領域111の探索処理として、まず第1のメモリ101のキー領域111の候補番地から値を読み出す(ステップS404)。次いで、第1のメモリ101のキー領域111の候補番地から読み出した値が、バリューを読み出したいキー値としてステップS401で入力された値と一致するかどうかをチェックする(ステップS405)。
 ここで、キー領域111の候補番地から読み出した値がバリューを読み出したいキー値と一致する場合には(ステップS405のYes)、当該キー値からハッシュ関数により計算される候補番地に当該キー値が登録されていることが分かる。そこで、第1のメモリ101のポインタ領域112の当該候補番地に格納されているポインタ値を読み出す。そして、そのポインタ値が示す、第2のメモリ102の番地からバリューを読み出して(ステップS408)、本処理を終了する。
 また、キー領域111の候補番地から読み出した値がバリューを読み出したいキー値と一致しない場合には(ステップS405のNo)、ハッシュによる衝突が発生したことになるので、開番地法により衝突を回避する。具体的には、ステップS401で計算した候補番地を1だけインクリメントして、新しい候補番地とする(ステップS406)。
 ここで、新しい候補番地が、第1のメモリ101の番地を一周したかどうかをチェックする(ステップS407)。番地を一周していなければ(ステップS407のNo)、ステップS402に戻り、新しい候補番地に該当するキー値が格納されているかどうかを改めてチェックする。
 また、第1のメモリ101の番地を一周した場合には(ステップS407のYes)、問い合わせているキー値にヒットする番地がないので、当該キー値に対してバリューはまだ登録されていないことが分かるので、キー検索によるバリュー読み出しに失敗したとして、本処理を終了する。
 例えば、記憶装置100が図1に示すように既にキー及びバリューが登録されている状態において、キー値Key[1]の検索によるバリュー読み出しを行う場合、まず、写像部104ではハッシュ関数を用いてKey[1]のハッシュ値「5」が候補番地として計算される(ステップS401)。第1のメモリ101のポインタ領域112の5番地から読み出した値が-1でないので(ステップS402、ステップS403のNo)、続いて、第1のメモリ101のキー領域111の5番地から値を読み出して(ステップS404)、その値が検索しているキー値Key[1]と一致するので(ステップS405のYes)、第1のメモリ101のポインタ領域112の5番地に格納されているポインタ値が示す、第2のメモリ102の0番地からKey[1]に対応するバリューValue[1]を読み出して(ステップS408)、本処理を終了する。キー値Key[2]、Key[3]、Key[4]に関しても、同様のキー検索によるバリュー読み出し処理フローにより、各々に対応するバリューValue[2]、Value[3]、Value[4]の読み出しを行うことができる。
 他方、キー値Key[5]の検索によるバリュー読み出し場合、まず、写像部104ではハッシュ関数を用いてKey[1]のハッシュ値「5」が候補番地として計算される(ステップS401)。第1のメモリ101のポインタ領域112の5番地から読み出した値が-1でないので(ステップS402、ステップS403のNo)、続いて、第1のメモリ101のキー領域111の5番地から値を読み出すが(ステップS404)、その値は検索しているキー値Key[5]と一致しない(ステップS405のNo)。すなわち、ハッシュによる衝突が発生しているので、開番地法により衝突を回避する。具体的には、候補番地を1だけインクリメントして6番地とする(ステップS406)。まだ第1のメモリ101の番地を一周していないので(ステップS407のNo)、ステップS402に戻り、6番地についてキー値の検索を繰り返し実施する。そして、キー領域111の6番地から値を読み出し(ステップS404)、その値が検索しているキー値Key[5]と一致するので(ステップS405のYes)、第1のメモリ101のポインタ領域112の6番地に格納されているポインタ値が示す、第2のメモリ102の4番地からKey[5]に対応するバリューValue[5]を読み出して(ステップS408)、本処理を終了する。
E-4.キー検索によるバリュー書き込み
 図5には、記憶装置100において、キー検索によるバリュー書き込みを行うための処理手順をフローチャートの形式で示している。
 まず、バリューを書き込みたいキー値を写像部104に入力し、一般的なハッシュ関数を用いて、第1のメモリ101の候補番地を計算する(ステップS501)。
 次いで、第1のメモリ101のポインタ領域112の候補番地から値を読み出す(ステップS502)。そして、ステップS502で候補番地から読み出した値が-1であるかどうか、すなわち当該候補番地が未使用かどうかをチェックする(ステップS503)。
 ここで、候補番地から読み出した値が-1であれば(ステップS503のYes)、当該候補番地は未使用であり、当該キー値に対してバリューはまだ登録されていないことが分かるので、キー検索によるバリュー書き込みに失敗したとして、本処理を終了する。
 一方、候補番地から読み出した値が-1でなければ(ステップS503のNo)、当該候補番地は既に使用されているので、検索するキー値とヒットする番地をキー領域111で探索する。
 キー領域111の探索処理として、まず第1のメモリ101のキー領域111の候補番地から値を読み出す(ステップS504)。そして、第1のメモリ101のキー領域111の候補番地から読み出した値が、バリューを書き込みたいキー値としてステップS501で入力された値と一致するかどうかをチェックする(ステップS505)。
 ここで、キー領域111の候補番地から読み出した値がバリューを書き込みたいキー値と一致する場合には(ステップS505のYes)、当該キー値からハッシュ関数により計算される候補番地に当該キー値が登録されていることが分かる。そこで、第1のメモリ101のポインタ領域112の当該候補番地に格納されているポインタ値を読み出す。そして、そのポインタ値が示す、第2のメモリ102の番地にバリューを書き込んで(ステップS508)、本処理を終了する。
 また、キー領域111の候補番地から読み出した値がバリューを読み出したいキー値と一致しない場合には(ステップS505のNo)、ハッシュによる衝突が発生したことになるので、開番地法により衝突を回避する。具体的には、ステップS501で計算した候補番地を1だけインクリメントして、新しい候補番地とする(ステップS506)。
 ここで、新しい候補番地が、第1のメモリ101の番地を一周したかどうかをチェックする(ステップS507)。番地を一周していなければ(ステップS507のNo)、ステップS502に戻り、新しい候補番地に該当するキー値が格納されているかどうかを改めてチェックする。
 また、第1のメモリ101の番地を一周した場合には(ステップS507のYes)、問い合わせているキー値にヒットする番地がないので、当該キー値に対してバリューはまだ登録されていないことが分かるので、キー検索によるバリュー書き込みに失敗したとして、本処理を終了する。
 例えば、記憶装置100が図1に示すように既にキー及びバリューが登録されている状態において、キー値Key[1]の検索によるバリュー書き込みを行う場合、まず、写像部104ではハッシュ関数を用いてKey[1]のハッシュ値「5」が候補番地として計算される(ステップS501)。第1のメモリ101のポインタ領域112の5番地から読み出した値が-1でないので(ステップS502、ステップS503のNo)、続いて、第1のメモリ101のキー領域111の5番地から値を読み出して(ステップS504)、その値が検索しているキー値Key[1]と一致するので(ステップS505のYes)、第1のメモリ101のポインタ領域112の5番地に格納されているポインタ値が示す、第2のメモリ102の0番地にKey[1]に対応するバリューValue[1]を書き込んで(ステップS508)、本処理を終了する。キー値Key[2]、Key[3]、Key[4]に関しても、同様のキー検索によるバリュー書き込み処理フローにより、各々に対応するバリューValue[2]、Value[3]、Value[4]の書き込みを行うことができる。
 他方、キー値Key[5]の検索によるバリュー書き込み場合、まず、写像部104ではハッシュ関数を用いてKey[5]のハッシュ値「5」が候補番地として計算される(ステップS501)。第1のメモリ101のポインタ領域112の5番地から読み出した値が-1でないので(ステップS502、ステップS503のNo)、続いて、第1のメモリ101のキー領域111の5番地から値を読み出すが(ステップS504)、その値は検索しているキー値Key[5]と一致しない(ステップS505のNo)。すなわち、ハッシュによる衝突が発生しているので、開番地法により衝突を回避する。具体的には、候補番地を1だけインクリメントして6番地とする(ステップS506)。まだ第1のメモリ101の番地を一周していないので(ステップS507のNo)、ステップS502に戻り、6番地についてキー値の検索を繰り返し実施する。そして、キー領域111の6番地から値を読み出し(ステップS504)、その値が検索しているキー値Key[5]と一致するので(ステップS505のYes)、第1のメモリ101のポインタ領域112の6番地に格納されているポインタ値が示す、第2のメモリ102の4番地にKey[5]に対応するバリューValue[5]を書き込んで(ステップS508)、本処理を終了する。
E-5.キーとバリューの新規書き込み
 図6には、記憶装置100において、キーとバリューの新規書き込みを行うための処理手順をフローチャートの形式で示している。
 まず、図3に示した処理手順に従って、登録するキー値の検索を行う(ステップS601)。ここで、問い合わせたキー値が記憶装置100に既に登録済みであることが判った場合には(ステップS602のYes)、キー値及びバリューの登録に失敗したとして、本処理を終了する。
 問い合わせたキー値が記憶装置100にまだ登録されていない場合には(ステップS602のNo)、登録するキー値を写像部104に入力し、一般的なハッシュ関数を用いて、第1のメモリ101の候補番地を計算する(ステップS603)。
 次いで、第1のメモリ101のポインタ領域112の候補番地から値を読み出す(ステップS604)。そして、ステップS604で候補番地から読み出した値が-1であるかどうか、すなわち当該候補番地が未使用かどうかをチェックする(ステップS605)。
 ここで、候補番地から読み出した値が-1、すなわち当該候補番地が未使用であれば(ステップS605のYes)、その未使用番地にキー値及びバリューの新規書き込みを行う。
 キー値及びバリューの新規書き込み処理として、まず第1のメモリ101のポインタ領域112の当該候補番地に、書き込みポインタ105の番地を書き込み(ステップS606)、キー領域111の当該候補番地に、登録するキー値を書き込む(ステップS607)。
 次いで、第3のメモリ103のリバースポインタ領域131の、書き込みポインタ105が指す番地に、当該候補番地を新規に書き込んでから(ステップS608)、第2のメモリ102のバリュー領域121の書き込みポインタ105が指す番地に、バリューの新規書き込みを行う(ステップS609)。
 次いで、書き込みポインタ105を1だけインクリメントして(ステップS610)、次に書き込みを行う番地を指すようにする。そして、キーとバリューの新規書き込みに成功したとして、本処理を終了する。
 一方、候補番地から読み出した値が-1でなければ(ステップS605のNo)、当該候補番地は既に使用されているので、未使用番地をキー領域111で探索する。
 キー領域111の未使用番地の探索処理として、まず第1のメモリ101のキー領域111の候補番地から値を読み出す(ステップS611)。そして、第1のメモリ101のキー領域111の候補番地から読み出した値が、登録するキー値と一致するかどうかをチェックする(ステップS612)。
 ここで、キー領域111の候補番地から読み出した値が登録するキー値と一致する場合には(ステップS612のYes)、当該キー値からハッシュ関数により計算される候補番地に当該キー値が既に登録されていることが分かる。したがって、当該キー値とバリューの新規書き込みに失敗したとして、本処理を終了する。
 また、キー領域111の候補番地から読み出した値が登録するキー値と一致しない場合には(ステップS612のNo)、ハッシュによる衝突が発生したことになるので、開番地法により衝突を回避する。具体的には、ステップS603で計算した候補番地を1だけインクリメントして、新しい候補番地とする(ステップS613)。
 ここで、新しい候補番地が、第1のメモリ101の番地を一周したかどうかをチェックする(ステップS614)。番地を一周していなければ(ステップS614のNo)、ステップS604に戻り、新しい候補番地にキー値及びバリューの新規書き込みを行うことができるかどうかを改めてチェックする。
 また、第1のメモリ101の番地を一周した場合には(ステップS614のYes)、問い合わせているキー値にヒットする番地がないので、当該キー値に対してバリューはまだ登録されていないことが分かるので、キー値及びバリューの新規書き込みに失敗したとして、本処理を終了する。
 例えば、図1に示す記憶装置100が初期化された状態において、Key[1]、Key[2]、Key[3]、Key[4]、Key[5]の順に、キーとバリューの新規書き込みが行われる場合、Key[1]、Key[2]、Key[3]、及びKey[4]に関しては、写像部104でハッシュ関数を用いて各キー値から計算したハッシュ値が示す、ポインタ領域112の各候補番地の値は-1、すなわちいずれの候補番地も未使用である。したがって、ステップS605の分岐でYesに進んで、ポインタ領域112の候補番地への書き込みポインタ105の番地の書き込み(ステップS607)、キー領域111の候補番地へのキー値の新規書き込み(ステップS608)、書き込みポインタ105が示すリバースポインタ領域131の番地への候補番地の書き込み(ステップS609)、及び、書き込みポインタ105が示すバリュー領域121の番地への各キー値に対応するバリューの新規書き込み(ステップS610)の各処理が順次実施される。
 一方、Key[5]のキー及びバリューの新規書き込みに関しては、キー値Key[5]からハッシュ関数により計算されたハッシュ値が示すポインタ領域112の候補番地は既に使用されており、ハッシュによる衝突が発生したことになるので、開番地法により衝突を回避する。すなわち、ステップS605の分岐でNoに進み、キー領域111の未使用番地の探索処理を実施する。具体的には、候補番地を1だけインクリメントして6番地とする(ステップS613)。まだ第1のメモリ101の番地を一周していないので(ステップS614のNo)、ステップS604に戻り、6番地についてキーとバリューの新規書き込みを繰り返し実施する。そして、キー領域111の6番地の値は-1、すなわち6番地は未使用である。したがって、ステップS605の分岐でYesに進んで、ポインタ領域112の6番地に書き込みポインタ105で保持されている4番地を書き込み(ステップS606)、キー領域111の6番地にキー値Key[5]を新規に書き込み(ステップS607)、書き込みポインタ105が示すリバースポインタ領域131の5番地にキー領域111の候補番地を示す「6」を書き込み(ステップS609)、さらに、書き込みポインタ105が示すバリュー領域121の5番地にキー値Key[5]に対応するバリューValue[5]を書き込む(ステップS610)。
E-6.キーとバリューの順次全読み出し
 図7には、記憶装置100において、キーとバリューの順次全読み出しを行うための処理手順をフローチャートの形式で示している。
 まず、読み出しポインタ106を0にセットする(ステップS701)。
 次いで、第3のメモリ103のリバースポインタ領域131の、読み出しポインタ106が指す番地に格納されている値を、候補番地とする(ステップS702)。そして、第1のメモリ101のキー領域111の候補番地に格納されているキー値を読み出す(ステップS703)。
 次いで、第2のメモリ102のバリュー領域121の読み出しポインタ106が指す番地から、先行ステップS703で読み出したキー値に対応するバリューを読み出す(ステップS704)。
 その後、読み出しポインタ106を1だけインクリメントして(ステップS705)、読み出しポインタ106の値が書き込みポインタ105の値と一致するまで(ステップS706のNo)、上記の処理S702~S705を繰り返すことで、すべてのキー値とバリューを順次読み出すことができる。
 例えば、記憶装置100が図1に示すように既にキー及びバリューが登録されている状態において、キーとバリューの順次全読み出しを行う場合、読み出しポインタ106を0にセットして(ステップS701)、まず第3のメモリ103のリバースポインタ131の0番地に格納されている値(「5」)、すなわち5番地を候補番地にする(ステップS702)。そして、第1のメモリ101のキー領域111の5番地のキー値Key[1]を読み出すとともに(ステップS703)、第2のメモリ102のバリュー領域121の0番地に格納されているバリューValue[1]を読み出す(ステップS704)。
 その後、読み出しポインタ106を1ずつインクリメントしながら(ステップS705)、ステップS702~S704の処理を繰り返して、Key[2]及びValue[2]、Key[3]及びValue[3]、Key[4]及びValue[4]、Key[5]及びValue[5]を順次読み出すことができる。そして、読み出しポインタ106の値が書き込みポインタ105の値「5」と一致すると(ステップS706のYes)、キー及びバリューをすべて読み出したので、本処理を終了する。
E-7.キーとバリューの順次全読み出しとバリューの更新
 図8には、記憶装置100において、キーとバリューの順次全読み出しとバリューの更新を行うための処理手順をフローチャートの形式で示している。
 まず、読み出しポインタ106を0にセットする(ステップS801)。
 次いで、第3のメモリ103のリバースポインタ領域131の、読み出しポインタ106が指す番地に格納されている値を、候補番地とする(ステップ802)。そして、第1のメモリ101のキー領域111の候補番地に格納されているキー値を読み出す(ステップS803)。
 次いで、第2のメモリ102のバリュー領域121の読み出しポインタ106が指す番地から、先行ステップS803で読み出したキー値に対応するバリューを読み出す(ステップS804)。
 次いで、バリュー領域121の読み出しポインタ106が指す番地のバリューを更新する(ステップS805)。
 その後、読み出しポインタ106を1だけインクリメントして(ステップS806)、読み出しポインタ106の値が書き込みポインタ105の値と一致するまで(ステップS807のNo)、上記の処理S802~S806を繰り返すことで、すべてのキー値とバリューを順次読み出してバリューを更新することができる。
 例えば、記憶装置100が図1に示すように既にキー及びバリューが登録されている状態において、キーとバリューの順次全読み出しとバリューの更新を行う場合、読み出しポインタ106を0にセットして(ステップS801)、まず第3のメモリ103のリバースポインタ131の0番地に格納されている値(「5」)、すなわち5番地を候補番地にする(ステップS802)。そして、第1のメモリ101のキー領域111の5番地のキー値Key[1]を読み出し(ステップS803)、第2のメモリ102のバリュー領域121の0番地に格納されているバリューValue[1]を読み出した後(ステップS804)、当該番地のバリューValue[1]の値を更新する(ステップS805)。
 その後、読み出しポインタ106を1ずつインクリメントしながら(ステップS806)、ステップS802~S805の処理を繰り返して、Key[2]及びValue[2]、Key[3]及びValue[3]、Key[4]及びValue[4]、Key[5]及びValue[5]を順次読み出すことができる。そして、読み出しポインタ106の値が書き込みポインタ105の値「5」と一致すると(ステップS807のYes)、キーとバリューの順次全読み出しとバリューの更新が完了したので、本処理を終了する。
F.実装例
 図9には、図3に示したキー検索時の処理手順の内容を、クロックドSRAMを用いて実装したパイプライン回路900の一例を示している。
 パイプライン回路900には、クロック毎にキー値key_000が入力される。
 ハッシュ関数部901は、図1に示した記憶装置100中の写像部104に相当し、入力キー値key_000のハッシュ値を計算して、候補番地(初期アドレス)adr_000として出力する。
 セレクタ(sel)902は、初期アドレスadr_000と、後述する加算器6から出力されるアドレスadr_001を入力すると、後述するキー比較部908から出力されるキー値の比較結果vld_010をセレクト入力として、2つの入力データadr_000又はadr_001のうちいずれかを択一的に、ポインタ領域112に対する候補番地(SRAMアドレス)adr_002として出力する。
 SRAM Key部903は、図1に示した記憶装置100中の、SRAMで構成された第1のメモリ101(キー領域111)に対応し、セレクタ902によって選択された候補番地adr_002に格納されているキー値key_011を候補キーとして1クロック後に出力する。
 SRAM Ptr部904は、ポインタ領域112に対応し、セレクタ902によって選択された候補番地adr002に格納されているポインタ値ptr_010を、1クロック後に出力する。ポインタ値ptr_010は、キー値に対応するバリューを格納している第2のメモリ102の候補番地である。
 フリップフロップ(FF)905は、クロック毎に入力される候補番地(SRAMアドレス)adr002を1クロックだけ保持して、遅延出力する。なお、図9中、参照番号911及び912で示す一点鎖線は、クロックの切り替わりをそれぞれ示す。
 加算器906は、フリップフロップ905から1クロックだけ遅延出力された候補番地(SRAMアドレス)adr_002に1だけ加算し、セレクタ(sel)902に出力する。
 フリップフロップ907は、クロック毎に入力されるキー値key_000を1クロックだけ保持して、入力キー値key_010として遅延出力する。
 キー比較部908は、フリップフロップ907から入力される1クロック前に入力されたキー値key_010と、SRAM Key部903から入力される候補キーkey_011とを比較し、両者が一致する場合は1を、一致しない場合は0を、候補キーの有効性を示すvld_010として出力する。
 上述したセレクタ(sel)902は、セレクト入力vld_010が1のとき(すなわち入力キー値key_010と候補キーkey_011が一致するとき)には、初期アドレスadr_000を候補番地adr_002として出力する。また、セレクタ(sel)902は、セレクト入力vld_010が1のとき(すなわち入力キー値key_010と候補キーkey_011が一致しないとき)は、1クロック前の候補番地に1を加算した候補番地adr_001を候補番地adr_002として出力する。
 したがって、SRAM Key部903の候補番地adr002に格納されている候補キーkey_011と、入力キー値key_010が一致する場合には、SRAM Ptr部904からは、入力キー値key_000のハッシュ値である候補番地(初期アドレス)adr_000に格納されているポインタ値が候補ポインタとして出力される。また、一致しない場合は、ハッシュによる衝突が発生したと想定されるが、候補番地(初期アドレス)adr_000に1だけ加算した候補番地adr_001に格納されているポインタ値が候補ポインタとして出力される。
 後段のフリップフロップ909は、キー比較部908による比較結果vld_010をvld_020として、フリップフロップ907から出力されるキー値key_010を候補キーkey_020として、SRAM Ptr部904から出力されるptr_010を候補ポインタptr20として、それぞれさらに1クロックだけ遅延出力する。
 図10には、Key[1]、Key[2]、Key[3]、Key[4]、Key[5]、Key[6]、Key[7]の順でキー検索を実施した場合の、図9に示したパイプライン回路900のタイミングチャートを示している。
 最初のクロックで入力キー値としてkey[1]が入力されると、そのハッシュ値である初期アドレスadr_000は「5」、初期アドレスに1だけ加算したアドレスadr_001は「6」である。そして、セレクタ902へのセレクト入力はハイ信号なので、セレクタ902により選択されたSRAMアドレスは初期アドレスadr_000「5」となる。
 1クロックだけ遅延して、フリップフロップ907から入力キー値Key[1]が出力されるとともに、SRAM Key部903からはSRAMアドレス「5」に格納された候補キーKey[1]が出力される。入力キー値key_010と候補キーkey_011が一致するので、キー比較部908はvld_010としてハイ信号を出力し、SRAM Ptr部904からはSRAMアドレス「5」に格納された候補ポインタptr_010として「0」番地が出力される。
 さらに1クロックだけ遅延して、フリップフロップ909から、キー値key_020としてKey[1]、ポインタ値ptr_020として「0」番地が出力されるとともに、これらキー及びポインタ値の有効性を示すvld020としてハイ信号が出力される。
 続いて、入力キー値としてkey[2]が入力されると、そのハッシュ値である初期アドレスadr_000は「3」、初期アドレスに1だけ加算したアドレスadr_001は「4」、セレクタ902により選択されたSRAMアドレスは「3」となる。この場合も入力キー値key_010と候補キーkey_011が一致するので、1クロックだけ遅延して、キー比較部908はvld_010としてハイ信号を出力し、SRAM Ptr部904からはSRAMアドレス「3」に格納された候補ポインタptr_010として「1」番地が出力される。さらに1クロックだけ遅延して、フリップフロップ909から、キー値key_020としてKey[2]、ポインタ値ptr_020として「1」番地が出力されるとともに、これらキー及びポインタ値の有効性を示すvld020としてハイ信号が出力される。
 続いて、入力キー値としてkey[3]が入力されると、そのハッシュ値である初期アドレスadr_000は「7」、初期アドレスに1だけ加算したアドレスadr_001は「8」、セレクタ902により選択されたSRAMアドレスは「3」となる。この場合も入力キー値key_010と候補キーkey_011が一致するので、1クロックだけ遅延して、キー比較部908はvld_010としてハイ信号を出力し、SRAM Ptr部904からはSRAMアドレス「7」に格納された候補ポインタptr_010として「2」番地が出力される。さらに1クロックだけ遅延して、フリップフロップ909から、キー値key_020としてKey[3]、ポインタ値ptr_020として「2」番地が出力されるとともに、これらキー及びポインタ値の有効性を示すvld020としてハイ信号が出力される。
 続いて、入力キー値としてkey[4]が入力されると、そのハッシュ値である初期アドレスadr_000は「3」、初期アドレスに1だけ加算したアドレスadr_001は「0」、セレクタ902により選択されたSRAMアドレスは「1」となる。この場合も入力キー値key_010と候補キーkey_011が一致するので、1クロックだけ遅延して、キー比較部908はvld_010としてハイ信号を出力し、SRAM Ptr部904からはSRAMアドレス「0」に格納された候補ポインタptr_010として「3」番地が出力される。さらに1クロックだけ遅延して、フリップフロップ909から、キー値key_020としてKey[4]、ポインタ値ptr_020として「3」番地が出力されるとともに、これらキー及びポインタ値の有効性を示すvld020としてハイ信号が出力される。
 続いて、入力キー値としてkey[5]が入力されると、そのハッシュ値である初期アドレスadr_000は「5」、初期アドレスに1だけ加算したアドレスadr_001は「6」、セレクタ902により選択されたSRAMアドレスは「5」となる。この場合は、入力キー値key_010と候補キーkey_011が一致しない。すなわち、ハッシュによる衝突が発生したことになるので、開番地法により衝突を回避する。
 具体的には、1クロックだけ遅延して、キー比較部908はvld_010としてロー信号を出力し、SRAM Ptr部904からはSRAMアドレス「5」に格納された候補ポインタptr_010として「0」番地が出力される。また、セレクタ902は、セレクト入力sにロー信号が入力されたことにより、初期アドレスに1を加算したアドレスadr_001である「6」をSRAMアドレスadr_002として出力する。
 そして、続くクロックでは、SRAM Key部903からはSRAMアドレス「6」に格納された候補キーKey[5]が出力される。この場合は入力キー値key_010と候補キーkey_011が一致するので、キー比較部908はvld_010としてハイ信号を出力し、SRAM Ptr部904からはSRAMアドレス「5」に格納された候補ポインタptr_010として「4」番地が出力される。
 さらに1クロックだけ遅延して、フリップフロップ909から、キー値key_020としてKey[5]、ポインタ値ptr_020として「4」番地が出力されるとともに、これらキー及びポインタ値の有効性を示すvld_020としてハイ信号が出力される。
G.効果
 最後に、本実施形態に係る連想配列方式の記憶装置100の効果について言及しておく。
 HDGF技術をStereo Depth計算処理に適用する場合、連想配列のバリューデータには、サイズが大きなCost Volumeが記録されることになる(前述)。具体的には、1つのキー値のサイズは60ビットであるが、バリュー(Cost Vector)1つのサイズが数キロビットと大きく、Cost Volumeとしては236メガバイトにもなる。このため、連想配列方式により単純にキーとバリューをペアにして扱う場合、アドレス空間を大きめにした分だけバリュー用のメモリ容量も増加するので、容量の無駄がとても大きくなる。これに対し、図1に示した連想配列方式の記憶装置100のハードウェア構成によれば、キー値とはポインタによって対応付けられるが、SRAMで構成されるキー値の記憶領域とは別の、DRAMにより構成される記憶領域にバリューが格納されるので、ポインタなどのコストがかかるが、バリューの記憶容量の無駄がなくなり、且つ、低コストで大容量のバリューを記憶することができるという効果がある。
 また、図1に示した連想配列方式の記憶装置100のハードウェア構成によれば、開番地法により衝突時の第1のメモリ101への再参照アドレスを事前に計算することができる。したがって、クロックドSRAMが持つレイテンシーを隠ぺいすることができ、衝突が発生していない限りスループットを1に保つことができ、且つ、衝突が発生してもその発生回数×1のクロックロスで済むという利点がある。
 以上、特定の実施形態を参照しながら、本明細書で開示する技術について詳細に説明してきた。しかしながら、本明細書で開示する技術の要旨を逸脱しない範囲で当業者が該実施形態の修正や代用を成し得ることは自明である。
 本明細書で開示した連想配列方式の記憶装置は、例えば2次元画像や3次元CT画像のノイズ除去やSemantic Segmentationといった画像処理を実施するHDGF回路に適用することができる。また、本明細書で開示した連想配列方式の記憶装置を適用したHDGF回路を用いて、Stereo Depth計算回路を構成することができる。
 本明細書で開示する記憶装置は、連想配列方式を利用するさまざまなタイプの情報処理装置に適用することができる。本明細書で開示する記憶装置は、広大なアドレス空間を確保する必要があり且つデータサイズが大きいバリューを扱う用途を持つ情報処理装置に、好適に適用することができる。具体的には、情報処理装置は、Deep Learningなどの人工知能の技術を用いて画像学習や画像推論などを行うものであってもよい。また、本明細書で開示する、連想配列方式の記憶装置は、Convolutional Neural Networkなどに対して入力される情報として使われる画像データを記憶する記憶装置であってもよい。
 要するに、例示という形態により本明細書で開示する技術について説明してきたのであり、本明細書の記載内容を限定的に解釈するべきではない。本明細書で開示する技術の要旨を判断するためには、特許請求の範囲を参酌すべきである。
 なお、本明細書の開示の技術は、以下のような構成をとることも可能である。
(1)第1のメモリと、バリューを記憶する第2のメモリと、第3のメモリを備え、
 前記第1のメモリは、キー値と、そのキー値に対応するバリューが格納されている第2のメモリの番地を格納し、
 前記第3のメモリは、前記第2のメモリに格納されたバリューに対応するキーを格納している第1のメモリの番地を格納する、
連想配列方式の記憶装置。
(2)前記第1のメモリは、キー値が登録されているかどうかを示すフラグをさらに格納する、
上記(1)に記載の記憶装置。
(3)キー値からハッシュ関数によりそのキー値を格納する前記第1のメモリの番地を計算する、
上記(1)又は(2)のいずれかに記載の記憶装置。
(4)開番地法に基づいてキー値を格納する前記第1のメモリの番地を計算する、
上記(3)に記載の記憶装置。
(5)前記第1及び前記第3のメモリはSRAMにより構成され、前記第2のメモリのメモリはDRAMにより構成される、
上記(1)乃至(4)のいずれかに記載の記憶装置。
(6)上記(1)乃至(5)のいずれかに記載の記憶装置を用いて計算値を記憶するように構成された、HDGF回路。
(7)上記(6)に記載のHDGF回路を用いてDepth計算を行う、Stereo Depth計算回路。
(8)上記(1)乃至(5)のいずれかに記載の記憶装置を用いて連想配列方式によりデータを記憶する、情報処理装置。
 100…記憶装置
 101…第1のメモリ、111…キー領域、112…ポインタ領域
 102…第2のメモリ、121…バリュー領域
 103…第3のメモリ、131…リバースポインタ領域
 104…写像部、105…書き込みポインタ
 106…読み出しポインタ
 901…ハッシュ関数部、902…セレクタ
 903…SRAM Key部、904…SRAM Ptr部
 905…フリップフロップ、906…加算器
 907…フリップフロップ、908…キー比較部
 909…フリップフロップ

Claims (8)

  1.  第1のメモリと、バリューを記憶する第2のメモリと、第3のメモリを備え、
     前記第1のメモリは、キー値と、そのキー値に対応するバリューが格納されている第2のメモリの番地を格納し、
     前記第3のメモリは、前記第2のメモリに格納されたバリューに対応するキーを格納している第1のメモリの番地を格納する、
    連想配列方式の記憶装置。
  2.  前記第1のメモリは、キー値が登録されているかどうかを示すフラグをさらに格納する、
    請求項1に記載の記憶装置。
  3.  キー値からハッシュ関数によりそのキー値を格納する前記第1のメモリの番地を計算する、
    請求項1に記載の記憶装置。
  4.  開番地法に基づいてキー値を格納する前記第1のメモリの番地を計算する、
    請求項3に記載の記憶装置。
  5.  前記第1及び前記第3のメモリはSRAMにより構成され、前記第2のメモリのメモリはDRAMにより構成される、
    請求項1に記載の記憶装置。
  6.  請求項1に記載の記憶装置を用いて計算値を記憶するように構成された、High Dimensional Gaussian Filtering(HDGF)回路。
  7.  請求項6に記載のHDGF回路を用いてDepth計算を行う、Stereo Depth計算回路。
  8.  請求項1に記載の記憶装置を用いて連想配列方式によりデータを記憶する、情報処理装置。
PCT/JP2019/023427 2018-09-27 2019-06-13 記憶装置、High Dimensional Gaussian Filtering回路、Stereo Depth計算回路、並びに情報処理装置 WO2020066148A1 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
US17/276,542 US20220035737A1 (en) 2018-09-27 2019-06-13 Storage apparatus, high dimensional gaussian filtering circuit, stereo depth calculation circuit, and information processing apparatus

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
JP2018181376 2018-09-27
JP2018-181376 2018-09-27

Publications (1)

Publication Number Publication Date
WO2020066148A1 true WO2020066148A1 (ja) 2020-04-02

Family

ID=69953043

Family Applications (1)

Application Number Title Priority Date Filing Date
PCT/JP2019/023427 WO2020066148A1 (ja) 2018-09-27 2019-06-13 記憶装置、High Dimensional Gaussian Filtering回路、Stereo Depth計算回路、並びに情報処理装置

Country Status (2)

Country Link
US (1) US20220035737A1 (ja)
WO (1) WO2020066148A1 (ja)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20210397345A1 (en) * 2020-05-19 2021-12-23 Nutanix, Inc. Managing i/o amplification in log-structured merge trees
US20230054127A1 (en) * 2021-08-18 2023-02-23 Samsung Electronics Co., Ltd. Key value storage device with hashing

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20130054869A1 (en) * 2011-08-31 2013-02-28 Niraj TOLIA Methods and apparatus to access data in non-volatile memory
JP2013200839A (ja) * 2012-03-26 2013-10-03 Toshiba Corp 半導体記憶装置、情報処理システムおよび制御方法
JP2016177688A (ja) * 2015-03-20 2016-10-06 株式会社東芝 データ処理装置、データ処理方法およびコンピュータプログラム
JP2017502402A (ja) * 2013-12-09 2017-01-19 ザイリンクス インコーポレイテッドXilinx Incorporated 高スループットのキーバリューストアの実現のためのメモリ構成

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20130054869A1 (en) * 2011-08-31 2013-02-28 Niraj TOLIA Methods and apparatus to access data in non-volatile memory
JP2013200839A (ja) * 2012-03-26 2013-10-03 Toshiba Corp 半導体記憶装置、情報処理システムおよび制御方法
JP2017502402A (ja) * 2013-12-09 2017-01-19 ザイリンクス インコーポレイテッドXilinx Incorporated 高スループットのキーバリューストアの実現のためのメモリ構成
JP2016177688A (ja) * 2015-03-20 2016-10-06 株式会社東芝 データ処理装置、データ処理方法およびコンピュータプログラム

Also Published As

Publication number Publication date
US20220035737A1 (en) 2022-02-03

Similar Documents

Publication Publication Date Title
CN107239230B (zh) 用于高效存储器内嵌去重应用的最优化的跳房子多散列表
US11349639B2 (en) Circuit and method for overcoming memory bottleneck of ASIC-resistant cryptographic algorithms
CN107273042B (zh) 重复删除dram系统算法架构的存储器模块及方法
US7743013B2 (en) Data partitioning via bucketing bloom filters
US10380183B2 (en) Building and querying hash tables on processors
KR102354990B1 (ko) 캐시 메모리 시스템 및 그 동작방법
CN108492243B (zh) 一种基于块处理的图像旋转装置、系统和方法
US10191998B1 (en) Methods of data reduction for parallel breadth-first search over graphs of connected data elements
US9256536B2 (en) Method and apparatus for providing shared caches
WO2020066148A1 (ja) 記憶装置、High Dimensional Gaussian Filtering回路、Stereo Depth計算回路、並びに情報処理装置
US7822940B2 (en) Apparatus and method for managing mapping information of nonvolatile memory
CN112579595A (zh) 数据处理方法、装置、电子设备及可读存储介质
CN114780537A (zh) 流表存储及报文转发方法、装置、计算设备及介质
JP2015049844A (ja) ストアマージ処理装置、ストアマージ処理システム、ストアマージ処理方法、及び、ストアマージ処理プログラム
WO2018179044A1 (ja) キャッシュメモリおよびその制御方法
US9865350B2 (en) Content addressable memory, an index generator, and a registered information update method
US11507799B2 (en) Information processing apparatus and method of operating neural network computing device therein
KR102006283B1 (ko) 패스트맵을 이용한 데이터셋의 m-트리 적재방법
CN108920097B (zh) 一种基于交织存储的三维数据处理方法
JP5095790B2 (ja) 特徴量算出装置及び識別装置
JP7234000B2 (ja) 2次元画像をアフィン変換するための画像データ処理装置
KR20200097062A (ko) 신경망 알고리즘을 이용한 주소 생성기를 갖는 메모리 장치 및 이를 포함하는 메모리 시스템
CN117078825B (zh) 一种点云数据线上渲染修改方法、系统、设备及介质
Otoo et al. Using chunked extendible array for physical storage of scientific datasets
CN112463215B (zh) 数据处理方法、装置、计算机可读存储介质和计算机设备

Legal Events

Date Code Title Description
121 Ep: the epo has been informed by wipo that ep was designated in this application

Ref document number: 19867350

Country of ref document: EP

Kind code of ref document: A1

NENP Non-entry into the national phase

Ref country code: DE

122 Ep: pct application non-entry in european phase

Ref document number: 19867350

Country of ref document: EP

Kind code of ref document: A1

NENP Non-entry into the national phase

Ref country code: JP