WO2023047934A1 - データ処理装置、データ処理方法、及びプログラム - Google Patents
データ処理装置、データ処理方法、及びプログラム Download PDFInfo
- Publication number
- WO2023047934A1 WO2023047934A1 PCT/JP2022/033333 JP2022033333W WO2023047934A1 WO 2023047934 A1 WO2023047934 A1 WO 2023047934A1 JP 2022033333 W JP2022033333 W JP 2022033333W WO 2023047934 A1 WO2023047934 A1 WO 2023047934A1
- Authority
- WO
- WIPO (PCT)
- Prior art keywords
- data
- mask
- result
- scan
- bit
- Prior art date
Links
- 238000012545 processing Methods 0.000 title claims abstract description 539
- 238000003672 processing method Methods 0.000 title claims abstract description 26
- 238000000034 method Methods 0.000 claims abstract description 232
- 230000008569 process Effects 0.000 claims abstract description 213
- 230000001174 ascending effect Effects 0.000 claims description 84
- 230000000873 masking effect Effects 0.000 claims description 31
- 239000000284 extract Substances 0.000 claims description 6
- 238000010586 diagram Methods 0.000 description 32
- 230000010354 integration Effects 0.000 description 32
- 238000005516 engineering process Methods 0.000 description 18
- 230000004048 modification Effects 0.000 description 15
- 238000012986 modification Methods 0.000 description 15
- 230000000694 effects Effects 0.000 description 10
- 230000002776 aggregation Effects 0.000 description 9
- 238000004220 aggregation Methods 0.000 description 9
- 238000009825 accumulation Methods 0.000 description 5
- 238000007792 addition Methods 0.000 description 4
- 230000008859 change Effects 0.000 description 4
- 230000006870 function Effects 0.000 description 4
- 238000001514 detection method Methods 0.000 description 3
- 230000008901 benefit Effects 0.000 description 2
- 238000004891 communication Methods 0.000 description 2
- 238000007667 floating Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 101100508818 Mus musculus Inpp5k gene Proteins 0.000 description 1
- 101100366438 Rattus norvegicus Sphkap gene Proteins 0.000 description 1
- 230000004931 aggregating effect Effects 0.000 description 1
- 238000007596 consolidation process Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000009977 dual effect Effects 0.000 description 1
- 230000008030 elimination Effects 0.000 description 1
- 238000003379 elimination reaction Methods 0.000 description 1
- 238000011156 evaluation Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 229910052754 neon Inorganic materials 0.000 description 1
- GKAOGPIIYCISHV-UHFFFAOYSA-N neon atom Chemical compound [Ne] GKAOGPIIYCISHV-UHFFFAOYSA-N 0.000 description 1
- 230000000644 propagated effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/21—Design, administration or maintenance of databases
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/06—Arrangements for sorting, selecting, merging, or comparing data on individual record carriers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/22—Arrangements for sorting or merging computer data on continuous record carriers, e.g. tape, drum, disc
- G06F7/24—Sorting, i.e. extracting data from one or more carriers, rearranging the data in numerical or other ordered sequence, and rerecording the sorted data on the original carrier or on a different carrier or set of carriers sorting methods in general
Definitions
- the present invention relates to a data processing device, a data processing method, and a program.
- Patent Documents 1 and 2 and Non-Patent Documents 1 and 2 are known.
- Japanese Patent Application Laid-Open No. 2002-200000 describes a memory capable of reading and writing information, which has a memory cell structure of M word addresses with a word bit width of N, and a word bit width of N that is repeatedly selected and designated from M word addresses.
- CAM content addressable memory
- Patent Document 2 also describes a memory-type processor having a structure similar to that of Patent Document 1. Note that the memory-type processors disclosed in Patent Documents 1 and 2 are sometimes called database processors (DBPs).
- DBPs database processors
- Non-Patent Documents 1 and 2 describe a technology called BitWeaving that enables parallel processing at the bit level in order to achieve high-speed scanning in the main memory.
- DBP and BitWeaving which are related technologies such as those described above, can speed up search processing by processing memory data in parallel in units of bits.
- the related technology mainly targets search processing as data processing, and does not consider other data processing such as grouping processing. Therefore, depending on the content of data processing, it may be difficult to perform processing efficiently.
- the present invention has been made in view of such circumstances, and aims to provide a data processing device, a data processing method, and a program capable of efficiently performing data processing.
- a data processing apparatus includes an acquisition unit that acquires scan data including bit data at the same bit position in a plurality of N-bit input data in order of bit positions, and mask data using the acquired scan data.
- bit scan processing including mask processing for applying a mask and update processing of the mask data according to the result of the mask processing is performed, and from the scan data at the first bit position to the scan data at the Nth bit position; It comprises a scandown unit that performs scandown processing that repeats bit scan processing, and an output unit that sequentially outputs the input data of the same value obtained for each scandown process in sorted order.
- a data processing method is a method for processing data by a data processing device, in which scan data including bit data at the same bit positions in a plurality of N-bit input data are acquired in order of bit positions, and bit scan processing including mask processing for masking the mask data using the scan data obtained from the first bit position and update processing for the mask data according to the result of the mask processing, and performing bit scan processing from the scan data at the first bit position to the A scan-down process is performed by repeating the bit scan process up to the scan data of the N-th bit position, and the input data of the same value obtained for each scan-down process are sequentially output in the order of sorting.
- a program acquires scan data including bit data at the same bit position in a plurality of N-bit input data in order of bit position, and uses the acquired scan data to mask mask data. and update processing of the mask data according to the result of the mask processing, and repeat the bit scan processing from the scan data of the first bit position to the scan data of the Nth bit position.
- FIG. 1 is a configuration diagram showing a configuration example of a data processing device according to Embodiment 1;
- FIG. 3 is a diagram showing an example of a memory cell structure of a storage unit according to Embodiment 1;
- FIG. 4 is a flow chart showing an example of a data processing method according to Embodiment 1;
- 4 is a flowchart showing another example of the data processing method according to Embodiment 1;
- 4 is a diagram showing an operation example of data processing according to Embodiment 1;
- FIG. 4 is a diagram showing an operation example of data processing according to Embodiment 1;
- FIG. 4 is a flowchart showing another example of the data processing method according to Embodiment 1;
- 4 is a diagram showing an operation example of data processing according to Embodiment 1;
- FIG. 1 is a configuration diagram showing a configuration example of a data processing device according to Embodiment 1;
- FIG. 3 is a diagram showing an example of a memory cell structure of
- FIG. 4 is a diagram showing an operation example of data processing according to Embodiment 1;
- FIG. 2 is a configuration diagram showing a configuration example of a data processing device according to a second embodiment;
- FIG. 10 is a diagram showing an operation example of data processing according to the second embodiment;
- FIG. 10 is a diagram showing an operation example of data processing according to the second embodiment;
- FIG. 11 is a configuration diagram showing a configuration example of a data processing device according to Embodiment 3;
- 10 is a flow chart showing an example of a data processing method according to Embodiment 3;
- FIG. 13 is a diagram showing an operation example of data processing according to Embodiment 3; 10 is a flow chart showing an example of a data processing method according to a modification of Embodiment 3;
- FIG. 14 is a diagram showing an operation example of data processing according to a modification of the third embodiment;
- FIG. 14 is a diagram showing an operation example of data processing according to a modification of the third embodiment;
- FIG. 13 is a diagram showing another operation example of data processing according to a modification of the third embodiment;
- FIG. 13 is a diagram showing another operation example of data processing according to a modification of the third embodiment;
- FIG. 11 is a configuration diagram showing a configuration example of a data processing device according to Embodiment 4;
- FIG. 14 is a diagram showing an operation example of data processing according to Embodiment 4;
- FIG. 14 is a diagram showing an operation example of data processing according to Embodiment 4;
- FIG. 12 is a configuration diagram showing a configuration example of a data processing device according to Embodiment 5;
- FIG. 13 is a diagram showing an operation example of data processing according to Embodiment 5;
- FIG. 13 is a diagram showing an operation example of data processing according to Embodiment 5;
- FIG. 12 is a configuration diagram showing a configuration example of a data processing device according to Embodiment 6;
- 13 is a flow chart showing an example of a data processing method according to Embodiment 6;
- FIG. 12 is a diagram showing an operation example of data processing according to Embodiment 6;
- FIG. 12 is a diagram showing an operation example of data processing according to Embodiment 6;
- FIG. 12 is a diagram showing an operation example of data processing according to Embodiment 6;
- FIG. 21 is a diagram for explaining the effect of data processing according to Embodiment 6;
- FIG. FIG. 21 is a diagram for explaining the effect of data processing according to Embodiment 6;
- FIG. FIG. 12 is a configuration diagram showing a configuration example of a data processing device according to Embodiment 7; 14 is a flow chart showing an example of a data processing method according to Embodiment 7;
- FIG. 22 is a diagram showing an operation example of data processing according to Embodiment 7;
- FIG. 22 is a diagram showing another operation example of data processing according to the seventh embodiment;
- FIG. 22 is a configuration diagram showing a configuration example of a data processing device according to an eighth embodiment;
- FIG. 12 is a flow chart showing an example of a data processing method according to an eighth embodiment;
- FIG. FIG. 22 is a diagram showing an operation example of data processing according to the eighth embodiment;
- Database processing can be broadly divided into search processing for narrowing down target data from a large amount of data and aggregation processing for classifying the results.
- indexes are used to perform the former at high speed, and processes such as hashing and SORT are combined to perform the latter at high speed.
- Patent Literatures 1 and 2 and Non-Patent Literatures 1 and 2 do not show an aggregation operation for the search results.
- GROUP BY Grouping
- JOIN processing
- JOIN processing
- JOIN processing
- JOIN sorting
- SORT and hashing are used as methods for this aggregation as described above.
- a nested loop JOIN that sequentially searches for a joint destination one by one is also performed as an application of search processing using an index.
- the data is once sorted by the grouping key, and the result is grouped in the same value range.
- a hash value is first obtained for the grouping key, and data is distributed to blocks according to the hash value.
- the same hash value may be generated for different keys (collision of hash values)
- data with different grouping keys are included in the same hash block, separate them further. Disperse into blocks. By doing this, data with the same grouping key can be collected in the end block.
- data is processed one by one in units such as words, which are the basic processing units of computers.
- aggregation processing grouping processing
- a plurality of pieces of data are processed simultaneously, and aggregation data (grouping data) are sequentially extracted.
- a processing method different from that of the related technology is adopted, it is possible to obtain processing characteristics different from those of the related technology. For example, by selectively using a field in which the related technology is strong and a field in which the embodiments of the present invention are strong, depending on the content of the processing, it is possible to make use of the advantages of both, and to greatly improve the efficiency of the processing.
- Embodiment 1 Next, Embodiment 1 will be described.
- basic grouping sort processing by scandown including bit scan will be described.
- FIG. 1 shows a configuration example of a data processing apparatus according to this embodiment.
- the data processing apparatus 100 performs grouping sort processing on input data.
- the result of grouping is to obtain data in which the same items are aggregated, and the order is not specified.
- grouping and sorting are performed simultaneously, and the result of sorting includes grouping data. Therefore, the grouping in this case is called "grouping sort" in the following description.
- the data processing apparatus 100 includes a storage section 110 , an acquisition section 120 , a mask holding section 130 , a scandown section 140 and an output section 150 .
- the configuration in FIG. 1 is an example, and other configurations may be used as long as the data processing according to the present embodiment is possible.
- the data processing device 100 may be a single device or a plurality of devices.
- the storage unit 110 stores a plurality of input data to be input.
- the input data is data to be processed by the data processing device 100 .
- the storage unit 110 is a memory having a predetermined memory cell structure according to the bit width of input data and the number of records of input data.
- the storage unit 110 may be a memory having a memory cell structure similar to the DBP as in Patent Documents 1 and 2, a memory having another structure, or any other storage means without being limited to a memory.
- FIG. 2 shows an example of the memory cell structure of the storage unit 110. As shown in FIG. For example, when one record (one word) of input data is N (integer of N>0) bits and input data of M (integer of M>0) records is input, as shown in FIG.
- the unit 110 has a memory cell structure of M rows ⁇ N columns, and each input data is stored in each row.
- the acquisition unit 120 selects and acquires scan data to be processed by the scandown unit 140 from a plurality of input data stored in the storage unit 110 in bit string order (bit position order).
- Scan data is data including bit data at the same bit position in a plurality of input data.
- the acquiring unit 120 selects bit data at the same bit position in each record in N bit data of M records in units of bit strings, and sorts the selected M pieces of bit data in record order (input order). ) to get the scan data. That is, when N-bit data of M records is input, N pieces of M-bit scan data are acquired.
- the acquisition unit 120 acquires scan data in the data search direction (scan down direction) from the first bit string to the N-th bit string in the order of the bit strings for the N-bit data of the M records.
- the data search direction is the direction according to the processing order in which the scandown processing is performed by the scandown unit 140, and is the direction from the MSB (Most Significant Bit) to the LSB (Least Significant Bit). to the MSB, or a special order according to the contents of the processing.
- the mask holding unit 130 holds (stores) a master mask that the scandown unit 140 uses in scandown processing.
- the master mask is data for specifying sort targets (records) to be subjected to scandown processing from a plurality of input data.
- the master mask is updated by the result of the scandown processing performed by the scandown unit 140, and is used to take over valid data to the next processing.
- the master mask indicates target data by bit positions of ON bits (valid bits). When sorting all data (records), all bits of the master mask are turned ON. Also, when only a specific record is to be processed, the processing target can be freely set by setting only the bit at the corresponding record position to ON.
- the scandown unit 140 performs scandown processing including bit scan processing on the scan data acquired by the acquisition unit 120 .
- the scan down unit 140 is also a bit scan unit that performs bit scan processing on each scan data, and performs scan down processing that repeats bit scan processing from scan data at the first bit position to scan data at the Nth bit position. .
- the bit scan processing includes mask processing for masking mask data using scan data and update processing of the mask data according to the result of the mask processing.
- the scandown unit 140 may include a mask processing unit that performs mask processing and a mask data update processing unit that updates mask data.
- the scan-down unit 140 applies a mask (ANDNot) to the mask data using the inverted data of the scan data when sorting the input data in ascending order, and performs masking (ANDNot) on the mask data when sorting the input data in descending order. is used as it is and a mask (AND: logical product) is applied.
- the scan-down unit 140 starts scan-down processing (one-round bit scan processing) on the N pieces of scan data using the master mask held in the mask holding unit 130 as the initial value of the mask data used for mask processing.
- the scan-down process includes a bit scan process that is repeated from the scan data of the first bit string (eg, MSB) to the scan data of the Nth bit string (eg, LSB) until all the data has been sorted (scanned). Repeat the scandown process.
- the scandown unit 140 updates the master mask according to the result of the scandown process each time the scandown process for N scan data ends. For example, in updating the master mask, the master mask is updated based on the AND operation result of the current master mask and the inverted data (NOT) of the result of the scandown process.
- the master mask updated in this manner is sorted by the next scandown process. That is, by updating the master mask, the data (records) to be processed in the next scandown process are narrowed down by excluding the data output as the scan process result (retrieved as the same value). When all the data are output as the result of the scanning process, that is, when the updated master mask is 0, the scanning of all the data is completed and the scandown process ends.
- the output unit 150 outputs the result of the scandown processing by the scandown unit 140 as a predetermined data processing result.
- the result of sorting equivalent data in ascending or descending order obtained by scandown processing is output as the result of grouping sort processing of input data (grouping sort data). That is, in the scandown process, data (records) of the same value can be searched simultaneously, so that the data groups of the same value that are searched at the same time are grouped and output as the same group as the result of sorting.
- the output unit 150 sequentially outputs the same input data obtained in each scandown process in the order of sorting.
- the output unit 150 can output the grouping result for each group each time the scan down process for N pieces of scan data is completed.
- FIG. 3 shows an example of a flowchart of a data processing method according to this embodiment.
- FIG. 3 shows an example of performing basic grouping and sorting by scandown in ascending order.
- the following processing is mainly executed by the scandown unit 140, and the result output processing is executed by the output unit 150, but the present invention is not limited to this.
- the data processing apparatus 100 sets the master mask (Mask) to the variable A and sets the MSB position to the variable P as an initial setting for the scandown process (S101).
- the initial value of the master mask is all bits ON.
- the variable A is mask data for narrowing down the data by updating the mask according to the scan data to be processed.
- a variable P indicates a bit string of scan data to be acquired (processed), and specifies scan data to be processed from N scan data.
- a variable B is a mask processing result obtained by masking the mask data with the scan data.
- the data processing device 100 determines whether or not the variable B, which is the mask processing result, is 0, that is, whether or not all bits of the variable B are OFF (S103).
- the variable B indicates that there is no data remaining as a result of narrowing down as a result of mask processing using the scan data of the P bit string. Therefore, when the variable B becomes 0, the narrowing down is regarded as failure, and the variable A, which is the mask data indicating the narrowing down result, is not updated.
- the variable B is other than 0 in S103, that is, if any bit of the variable B is ON, it indicates that the narrowing down was successful. is updated by the variable B (S104).
- the data processing device 100 determines whether or not the variable P, which is the bit string being processed, is LSB, that is, whether or not scanning (scandown processing) of all bits has ended (S105).
- variable P is other than the LSB in S105, that is, if scanning of all bits has not been completed, the data processing apparatus 100 moves the variable P by one (1 bit) to the LSB side for the next scan. (S106) After S102, the bit scan process is repeated for the next bit string.
- variable P is LSB in S105, that is, when scanning of all bits is completed
- variable A which is the mask data (result of mask processing other than 0) updated in S104 is output (S107).
- the position where the bit is ON indicates the record position of the minimum value in the target data specified by the master mask, and in the present embodiment, this is output as the same value data grouping result.
- the data processing device 100 ANDs the master mask and the inverted data (NOT) of the variable A, which is the mask data, and updates the master mask according to the result (S108).
- NOT inverted data
- the data processing apparatus 100 determines whether or not the updated master mask is 0, that is, whether or not all data processing (sorting processing) has ended (S109).
- the scan down process is repeated in S101 and subsequent steps. If the master mask is 0 in S109, that is, if all data processing is finished, the process is finished.
- FIG. 4 shows another example of the flowchart of the data processing method according to this embodiment.
- FIG. 4 shows an example of early detection of processing results in the basic grouping sort processing by scandown shown in FIG.
- the mask processing result has only one ON bit
- the target record is narrowed down to one at this point, and the processing result is obtained. Therefore, by detecting a mask processing result in which only one bit is ON as shown in FIG. 4, the processing result can be obtained without scanning up to the last bit (LSB), and the processing steps can be reduced.
- FIGS. 5A and 5B show an operation example of data processing according to this embodiment.
- FIGS. 5A and 5B are examples of performing the basic grouping sorting process by scandown in ascending order as shown in FIG.
- data of 6 records with record numbers (RecNo) 0 to 5 are input.
- the data value of record number 0 is 9, the data value of record number 1 is 6, the data value of record number 2 is 3, the data value of record number 3 is 6, the data value of record number 4 is 9, and the data of record number 5 has a value of 6.
- Each data is 4-bit data, and the bit string (bit position) of each data is [0] to [3] (LSB to MSB).
- Scan data and mask data are 6 bits, which is the number of records.
- the first scan down process is performed on the four scan data.
- the initial value of the master mask is "111111" (S201), and all data (record numbers 0 to 5) are sorted.
- bit scan process is performed using the scan data of bit string [3] (MSB). Specifically, by using the master mask "111111” as mask data and masking "011101" which is the result of performing NOT operation on the scan data "100010” of bit string [3], the mask result becomes "011101” ( S202).
- bit scan processing is performed using the scan data of bit string [2]. Specifically, using the mask result “011101” of bit string [3] as mask data, the result “101010” of performing NOT operation on the scan data “010101” of bit string [2] is masked, and the mask result becomes “001000”. (S203).
- bit scan processing is performed using the scan data of bit string [1]. Specifically, using the mask result “001000” of bit string [2] as mask data, the result “100010” of performing NOT operation on the scan data “011101” of bit string [1] is masked, and the mask result is all 0 (“000000” ) (S204). In this way, when the mask result is all 0, as determined in S103 of the flowchart, the mask result is not updated, and the mask result of the bit string [2], which is the immediately preceding valid mask, is ". 001000" is taken over as a mask for the next process.
- bit scan processing is performed using the scan data of bit string [0] (LSB).
- the mask result of bit position [1] was 0, so the mask result "001000” of inherited bit string [2] is used as mask data, and the scan data "101010” of bit string [0] is NOT operated.
- the result "010101” is masked, and the mask result is all 0 (S205).
- the mask result is not updated, and "001000", which is the mask result of the previous valid mask bit string [2], is used as the mask for the next process. take over.
- the master mask is updated according to the results of the first scandown process. Specifically, the current master mask "111111” is masked with "110111", which is a value obtained by NOT-operating the result of the first scandown process, and the mask result "110111” is used in the next second scan. A new master mask for down is used (S207). This calculation is the same as the result of XORing the current master mask "111111” and the first scandown processing result "001000", as indicated by S108 in the flowchart of FIG.
- the new master mask "110111” is used (S211), data of record numbers 0, 1, 3, 4, and 5 are sorted, and four scan data are used for bit scan processing. I do.
- the mask result is "010101" (S212), and bit scan processing is performed using the scan data of bit string [2].
- the mask result becomes all 0 (S213), and when bit scan processing is performed using the scan data of bit string [1], the mask result becomes all 0 (S214), and the scan data of bit string [0] is used for bit scan.
- the mask result becomes "010101" (S215).
- the result of the second scandown process is the mask result "010101" of the bit string [0] (S216). That is, the data corresponding to the record numbers 1, 3, and 5 of the ON bit of "010101” are output as the second smallest data (second grouping result). Also, the current master mask "110111” and the result "101010” obtained by performing NOT operation on the second scandown processing result are masked, and the new master mask for the next third scandown is set to "100010" (S217). ).
- the new master mask "100010” is used (S221), data of record numbers 0 and 4 are sorted, and bit scan processing is performed using four scan data.
- the mask result is all 0 (S222), and bit scan processing is performed using the scan data of bit string [2].
- the mask result becomes "100010” (S223), and when bit scan processing is performed using the scan data of bit string [1], the mask result becomes "100010" (S224).
- the mask result becomes all 0 (S225).
- the second time when the result of the bit scan is all 0, the mask is not updated, and the immediately preceding effective mask is inherited, and then the next bit scan process is performed.
- the result of the third scandown process is that the mask result "100010" of the bit string [1] is inherited because the mask result of the bit string [0] is 0 (S226). That is, data corresponding to record numbers 0 and 4 of the ON bit of "100010” is output as the third smallest data (third grouping result). Also, masking the current master mask "100010” and the result "011101" of the result of the third scandown processing by NOT operation results in "000000", and since all bits are OFF, the process ends (S227). .
- the corresponding bits of records (data) with the same value are turned ON at the same time, so the results of the scandown process are output as grouping results of the same value.
- the count value of the records belonging to the group may be obtained (output). You can also use the grouping results to find the total by adding specific elements (data values) of those corresponding records, or you can find the average by dividing the total by the number of records belonging to the group. good. Furthermore, a deduplication result (a set of unique values) may be obtained by extracting only one data from each grouping result.
- FIG. 6 shows another example of a flowchart of the data processing method according to this embodiment.
- FIG. 6 shows an example of performing basic grouping and sorting by scandown in descending order.
- the process of S102a is different from the ascending order flowchart of FIG. That is, in S102a, the variable A, which is the mask data, and the scan data of the P bit string are AND-operated as they are, and the result of the AND operation is set to the variable B in order to sort in descending order as mask processing.
- FIGS. 7A and 7B show another operation example of data processing according to this embodiment.
- FIGS. 7A and 7B are examples of performing the basic grouping sorting process by scandown in descending order as shown in FIG.
- FIGS. 7A and 7B the same data as in FIGS. 5A and 5B are input.
- the first scan down is performed using the master mask "111111” (S301).
- the scan data "100010” of [3] is masked, and the mask result is "100010” (S302).
- the mask result "100010” of bit string [3] is used as mask data.
- the scan data “010101” of bit string [2] is masked, and the mask result is all 0 (“000000”) (S303).
- the mask result is not updated, and "100010", which is the mask result of the bit string [3], which is the effective mask immediately before, is taken over as the mask for the next process.
- the inherited mask result "100010” is used as mask data, and the scan data "011101" at bit position [1] is masked, and the mask result becomes all 0 (S304). Since the mask result is all 0 here as well, the mask result "100010” of bit string [3] is inherited as mask data, and the scan data "101010” of bit string [0] is masked, resulting in a mask result of "100010” ( S305).
- the result of the first scandown process is the mask result "100010" for the bit string [0] (S306). That is, the data corresponding to the record numbers 0 and 4 of the ON bit of "100010” are output as the maximum value data (first grouping result). Also, by masking the current master mask "111111” and the result "011101” obtained by performing the NOT operation on the first scandown processing result, the new master mask for the next second scandown is set to "011101". (S307).
- the new master mask "011101” is used (S311), the data of record numbers 1, 2, 3, and 5 are sorted, and bit scan processing is performed in the same manner as in the first scandown process. conduct.
- the mask result of the scan data of bit string [3] is all 0 (S312)
- the mask result of the scan data of bit string [2] is "010101"
- the mask result of the scan data of bit string [1] is "010101”. ” (S314)
- the result of masking the scan data of bit string [0] is all 0 (S315).
- the bit scan result is all 0, the mask is not updated, and the immediately preceding valid mask is inherited before the next bit scan process.
- the result of the second scandown process is "010101" for the bit string [1] because the mask result for the bit string [0] is 0 (S316). That is, ON-bit record numbers 1, 3, and 5 of "010101" are output as the second largest data (second grouping result). Also, by masking the current master mask "011101” and the result "101010” obtained by performing the NOT operation on the second scandown processing result, the new master mask for the next third scandown is set to "001000" ( S317).
- the new master mask "001000” is used (S321), and the data of record number 2 is sorted, and the bit scan process is performed in the same manner as in the first scandown process.
- the mask result of the scan data of bit string [3] is all 0 (S322)
- the mask result of the scan data of bit string [2] is all 0 (S323)
- the mask result of the scan data of bit string [1] is "001000”.
- S324 and the result of masking the scan data of bit string [0] is "001000" (S325).
- the bit scan result is all 0, the mask is not updated, and the immediately preceding effective mask is inherited before the next bit scan process.
- a master mask is used to indicate the data to be processed by the position of the ON bit. From MSB to LSB, an AND operation is performed for sorting in descending order, and an ANDNot operation is performed for sorting in ascending order. Then, if the mask data becomes 0 in the middle of this calculation, the calculation result of that time is simply discarded and the mask data before the calculation is taken over.
- This can significantly reduce the number of processing steps compared to related techniques such as Patent Documents 1 and 2 and Non-Patent Documents 1 and 2.
- the related technology does not include a description of the grouping process, so it cannot be applied to the grouping process as in the present embodiment.
- bit size in the horizontal direction (1 word) of the data stored in the memory in this embodiment is a general It can be 8-bit, 16-bit, 32-bit, or 64-bit Int data. It can also be 256 bits or 512 bits that can be used with SIMD (Single Instruction/Multiple Data) instructions called AVX, or 128 bits that can be used with SIMD called Neon for Arm (registered trademark). is. Further, when using the DBPs of Patent Documents 1 and 2, processing can be performed using a larger bit width.
- GPGPU General-purpose computing on graphics processing units
- GPGPU General-purpose computing on graphics processing units
- the grouping results are sequentially output in a sorted state, so the grouping results of the lower nodes are simply combined by a simple merge process at the upper consolidation node, and the overall grouping results are also output sequentially. can be done.
- Embodiment 2 Next, Embodiment 2 will be described. In the present embodiment, an example of suspending and resuming data processing in the data processing apparatus of the first embodiment will be described.
- FIG. 8 shows a configuration example of a data processing device according to this embodiment.
- the data processing apparatus 100 includes a mask saving unit 131 in addition to the configuration of the first embodiment.
- the mask saving unit 131 saves the master mask in the mask holding unit 130 when the scandown process is interrupted. For example, when an arbitrary number (designated number) of data is obtained as a result of the scandown process, the master mask may be saved, the process may be interrupted, and the result may be output. Also, when restarting the scan-down process, the master mask saved in the mask saving unit 131 is restored to the mask holding unit 130, and the recovered master mask is used to perform the scan-down process.
- 9A and 9B show an operation example of data processing according to this embodiment.
- 9A and 9B show an example of interrupting the basic grouping sorting process by scandown in ascending order as in the first embodiment, and then resuming the process.
- data is simply sorted is shown here, it is not limited to this, and can be grouped and sorted in the same manner as in the first embodiment.
- the mask is not updated, and the immediately preceding effective mask is inherited, and the next bit scan process is performed. This processing will be described as being included in the processing.
- data of four records with record numbers 0 to 3 are input.
- the data value of record number 0 is 0, the data value of record number 1 is 5, the data value of record number 2 is 10, and the data value of record number 3 is 3.
- Each data is 4-bit data of bit strings [0] to [3], and scan data and mask data are also 4-bit data.
- the first scan down is performed using the master mask "1111" (S401).
- the mask result of the scan data of bit string [3] is "1101" (S402)
- the mask result of the scan data of bit string [2] is "1001” (S403)
- the mask result of the scan data of bit string [1] is " 1000" (S404)
- the mask result of the scan data of bit string [0] becomes "1000" (S405).
- the result of the first scandown process is the mask result "1000" for the bit string [0] (S406). That is, record number 0 of the ON bit of "1000” is output as the minimum value data. Also, by masking using the current master mask "1111” and the result "0111” obtained by performing a NOT operation on the result of the first scandown processing, the new master mask for the next second scandown is set to "0111". (S407).
- the new master mask "0111” is used (S411), and the data of record numbers 1, 2, and 3 are sorted, and the bit scan process is performed in the same manner as in the first scandown process. I do.
- the mask result of the scan data of bit string [3] is "0101" (S412)
- the mask result of the scan data of bit string [2] is "0001" (S413)
- the mask result of the scan data of bit string [1] is all. 0 (“0000”) (S414)
- the result of masking the scan data of bit string [0] is all 0 (S415).
- the mask result of bit string [2] is "0001" (S416). That is, the on-bit record number 3 of "0001" is output as the second smallest data.
- the new master mask for the next third scandown is set to "0110" by masking the current master mask "0111” and the result "1110” obtained by performing the NOT operation on the result of the second scandown (S417). ).
- the master mask "0110” at this time is saved in the mask saving unit 131 (S418).
- the master mask "0110” is recovered from the mask saving unit 131 (S420).
- the third scandown process using the restored master mask "0110" (S421), data of record numbers 1 and 2 are sorted, and bit scan processing is performed in the same manner as in the first scandown process. conduct.
- the mask result of the scan data of bit string [3] is "0100" (S422)
- the mask result of the scan data of bit string [2] is all 0 (S423)
- the mask result of the scan data of bit string [1] is "0100”. ” (S424)
- the result of masking the scan data of bit string [0] is all 0 (S425).
- the result of the third scan down process is the mask result "0100" for bit position [1] because the mask result for bit string [0] is 0 (S426). That is, the ON bit record number 1 of "0100” is output as the third smallest data.
- the new master mask for the next fourth scandown is set to "0010” by masking the current master mask "0110” and the result "1011” obtained by performing NOT operation on the result of the third scandown (S427). ).
- the new master mask "0010” is used (S431), and the data of record number 2 is sorted, and the bit scan process is performed in the same manner as in the first scandown process.
- the mask result of the scan data of bit string [3] is all 0 (S432)
- the mask result of the scan data of bit string [2] is "0010" (S433)
- the mask result of the scan data of bit string [1] is all 0. (S434)
- the result of masking the scan data of bit string [0] is "0010" (S435).
- the result of the fourth scandown process is the bit string [0] mask result "0010” (S436). That is, the ON bit record number 2 of "0010” is output as the fourth smallest data. Also, the mask result of the current master mask "0010” and the result "1101” obtained by performing the NOT operation on the result of the fourth scandown process is "0000", and all the bits are OFF, so the process ends (S437).
- the grouping sort result is obtained as a continuation (incremental) from the state before the interruption, and restart the process from the interruption position.
- Grouping sort results are always output in ascending or descending order from the top, so it is possible to retrieve only the first 10 or 100 items of data, in which case the processing cost is proportional to the number of items retrieved. do. Since the master mask has a function of narrowing down the processing target, the master mask may be set (only the bit of the target record is ON) based on the result of some preliminary narrowing processing.
- Embodiment 3 Next, Embodiment 3 will be described.
- an example of performing positional grouping processing by narrowing down data to be processed before starting bit scan processing in the data processing apparatuses of the first and second embodiments will be described.
- FIG. 10 shows a configuration example of a data processing device according to this embodiment.
- the data processing apparatus 100 according to the present embodiment includes a narrowing section 132 in addition to the configuration of the first embodiment.
- the narrowing-down unit 132 narrows down the data to be subjected to the grouping-sorting process to a predetermined range before performing the grouping-sorting process.
- the narrowing-down unit 132 narrows down data to be sorted from the input data, and updates the master mask in the mask holding unit 130 according to the narrowing-down result.
- the narrowing unit 132 extracts data in a predetermined range from the input data by performing bit scan processing (that is, scan down processing) on the N pieces of scan data in bit string order.
- FIG. 11 shows a flowchart of a data processing method according to this embodiment.
- FIG. 11 is an example of positional grouping processing in ascending order, in which the data is narrowed down to data larger than the narrowing-down start data (greater than search), and the narrowed-down data is grouped and sorted.
- the following processing is mainly executed by the narrowing down unit 132, but is not limited to this.
- the data processing device 100 first initializes the start mask (Start_mask) to 0 and sets the MSB position to the variable P as the initial setting of the narrowing process (S501).
- the start mask is mask data for setting the start position of the grouping sort processing based on the result of narrowing down.
- a variable P indicates a bit string of scan data to be obtained, as in the first embodiment.
- the narrowing start data is a reference value for narrowing down data within a predetermined range, and indicates the minimum value of data to be extracted (searched) in the case of sorting in ascending order, and indicates the maximum value of data to be extracted in the case of sorting in descending order.
- the data processing device 100 sets the master mask (Mask) to the temporary variable (Tmp), and combines the NOT operation result of the scan data of the P bit string with the master mask.
- the master mask is updated with the result of the AND operation, the temporary variable and the master mask are then XORed, and the result of the XOR operation and the start mask are ORed (logical sum) to update the start mask (S503).
- the data processing apparatus 100 updates the master mask with the result of the AND operation of the scan data of the P bit string and the master mask (S504).
- the data processing device 100 determines whether or not the variable P, which is the bit string being processed, is LSB, that is, whether or not all bits have been scanned (S505). If the variable P is not LSB in S505, that is, if scanning of all bits has not been completed, the data processing apparatus 100 moves the variable P by one to the LSB side for the next scan (S506), After S502, bit scan processing (narrowing down processing) is repeated for the next bit string. Further, when the variable P is LSB in S505, that is, when scanning of all bits is completed, the data processing apparatus 100 masters the start mask as the search result of data larger than the narrowing start data (larger search result). Set to mask (S507).
- search result is equal to or greater than the narrowing-down start data (search result greater than)
- search result greater than the result of the OR operation of the obtained start mask and the current master mask is set as the master mask.
- the ascending grouping and sorting process shown in the first embodiment is performed (S508).
- FIG. 12 shows an operation example of data processing according to this embodiment.
- FIG. 12 is an example of narrowing down processing for ascending positional grouping sort processing, and is an example of greater-than search for retrieving data larger than a comparison value.
- the comparison value (narrowing down start data) for the greater-than search is 5, and data of 4 records with record numbers 0 to 3 are input.
- the data value of record number 0 is 3, the data value of record number 1 is 7, the data value of record number 2 is 5, and the data value of record number 3 is 15.
- Each data is 4-bit data of bit strings [0] to [3], and scan data and mask data are 4-bit data.
- the initial value of the master mask is “1111” (S601)
- the initial value of the start mask is “0000” (S602).
- bit scan processing and start mask update processing are performed on the scan data of bit string [3]. Specifically, using the master mask "1111” as mask data, the result “1110” of performing NOT operation on the scan data "0001” of bit string [3] is masked, and the mask result becomes "1110” (S603). Further, the mask data "1111” and the mask result "1110” are XORed, the XOR result "0001” and the start mask "0000” are ORed, and the start mask is set to "0001” (S604).
- bit string [2] of the comparison value is 1, bit scan processing is performed on the scan data of bit string [2]. Specifically, the mask result "1110" of bit string [3] is used as mask data, and the scan data "0111” of bit string [2] is masked, resulting in a mask result of "0110" (S605).
- bit scan processing and start mask update processing are performed on the scan data of bit string [1]. Specifically, using the mask result “0110” of bit string [2] as mask data, the result “0010” of performing NOT operation on the scan data “1101” of bit string [1] is masked, and the mask result becomes “0010”. (S606). Further, the mask data "0110” and the mask result "0010” are XORed, the XOR result "0100" and the start mask "0001” are ORed, and the start mask is set to "0101" (S607).
- bit scan processing is performed on the scan data of bit string [0]. Specifically, using the mask result “0010” of bit string [1] as mask data, the scan data “1111” of bit string [0] is masked, and the mask result becomes “0010” (S608).
- the mask result "0010" of the bit string [0] becomes the result of the equivalence search (S609). That is, record number 2 of the ON bit of "0010” becomes data with the same value as comparison value 5.
- the start mask "0101" updated with the bit string [1] is the result of the greater-than search (S610). That is, the record numbers 1 and 3 of the ON bit of "0101" are data larger than the comparison value 5.
- FIG. Further, in the case of obtaining a search result of greater-than-equal, the result of the same value "0010" and the start mask "0101" are OR-operated to obtain "0111", which becomes the search result of greater-than-equal.
- a start mask (GreaterMask) is prepared, and in this start mask, a logical sum (OR) is performed on portions where the data bit of the search destination is ON for the bit string in which the bit of the comparison value is OFF.
- a greater-than search result that searches for data greater than a value is obtained.
- the start mask obtained by this search processing is used as the mask data at the start of grouping sort (ascending order).
- the result of OR operation of the greater than retrieval result and the same value result is used as mask data.
- the bit scan processing results in a mask result of 0, it may be determined that there is no unprocessed data, and the search processing may be terminated early.
- FIG. 13 shows another example of the flowchart of the data processing method according to this embodiment.
- FIG. 13 shows an example of positional grouping processing in descending order, in which the data is narrowed down to data smaller than the narrowing-down start data (smaller-than search), and the narrowed-down data is grouped and sorted.
- S502a, S503a, S504a, and S508a are different from the ascending order flowchart in FIG.
- the data processing device 100 determines whether or not the bit of the P bit string of the narrowing start data is 1 (ON) (S502a). If the bit of the P bit string of the narrowing start data is 1 in S502a, the data processing device 100 sets the master mask (Mask) to the temporary variable (Tmp), and then performs an AND operation on the scan data of the P bit string and the master mask. The master mask is updated according to the result obtained, the temporary variable and the master mask are XORed, and the result of the XOR operation and the start mask are ORed to update the start mask (S503a).
- Mask master mask
- Tmp temporary variable
- the master mask is updated according to the result obtained, the temporary variable and the master mask are XORed, and the result of the XOR operation and the start mask are ORed to update the start mask (S503a).
- the data processing device 100 updates the master mask with the result of ANDing the result of the NOT operation of the scan data of the P bit string and the master mask (S504a). Further, after the master mask is updated in S507, the descending grouping sort processing shown in the first embodiment is performed (S508a).
- FIG. 14 shows another operation example of data processing according to this embodiment.
- FIG. 14 is an example of narrowing down processing for positional grouping sort processing in descending order, and is an example of less than search for searching for data smaller than a comparison value.
- the comparison value (narrowing-down start data) for less than search and the data to be input are the same as in FIG.
- the initial value of the master mask is "1111” (S701)
- the initial value of the start mask is "0000” (S702).
- bit scan processing is performed on the scan data of bit string [3]. Specifically, using the master mask “1111” as mask data, the result “1110” of performing NOT operation on the scan data “0001” of bit string [3] is masked, and the mask result becomes “1110” (S703).
- bit string [2] of the comparison value is 1, bit scan processing and start mask update processing are performed on the scan data of bit string [2]. Specifically, the mask result "1110” of bit string [3] is used as mask data, and the scan data "0111” of bit string [2] is masked, resulting in a mask result of "0110” (S704). Further, the mask data "1110” and the mask result "0110” are XORed, the XOR result "1000" and the start mask "0000” are ORed, and the start mask is set to "1000" (S705).
- bit scan processing is performed on the scan data of bit string [1]. Specifically, using the mask result “0110” of bit string [2] as mask data, the result “0010” of performing NOT operation on the scan data “1101” of bit string [1] is masked, and the mask result becomes “0010”. (S706).
- bit string [0] of the comparison value is 1, bit scan processing and start mask update processing are performed on the scan data of bit string [0]. Specifically, the mask result "0010" of bit string [1] is used as mask data, and the scan data "1111” of bit string [0] is masked, resulting in a mask result of "0010” (S707). Further, the mask data "0010” and the mask result "0010” are XORed, the XOR result "0000" and the start mask "1000” are ORed, and the start mask is set to "1000" (S708).
- the mask result "0010" of the bit string [0] becomes the result of the equivalence search (S709). That is, record number 2 of the ON bit of "0010” becomes data with the same value as comparison value 5.
- FIG. Also, the start mask "1000" updated with the bit string [0] is the result of the less than search (S710). That is, the record number 0 of the ON bit of "1000” is smaller than the comparison value 5.
- the same result "0010" and the start mask "1000” are ORed to obtain "1010", which is the less than equal search result.
- a start mask (LessMask) is prepared, and for bit strings in which the bit of the comparison value is ON, a logical sum (OR) is performed on the portions where the data bit of the search destination is OFF in the start mask.
- the start mask obtained by this search processing is used as the mask data at the start of grouping sort (descending order).
- the result of logical sum operation of the less than retrieval result and the same value result is used as mask data.
- the mask result is 0 in the bit scan process, it may be determined that there is no unprocessed data, and the search process may be terminated early.
- the narrowing process is performed using the narrowing start data at the start of the process, and the grouping sorting process is performed in conjunction with the processing result.
- the narrowing down unit 132 may output the first grouping sort result at the same time as the narrowing down.
- FIG. 15 is a flowchart of this modification, showing a modification of the ascending-order positional grouping process shown in FIG.
- the data processing device 100 initializes the first mask (First_mask) to 0 in addition to initializing the start mask (Start_mask) and the variable P (S511).
- the first mask indicates the first extracted data (grouping result) closest to the narrowing start data.
- the data processing device 100 determines whether or not the bit of the P bit string of the narrowing start data is 0 (S512).
- Mask update the master mask with the result of ANDing the result of the NOT operation of the scan data of the P bit string and the master mask, and then update the temporary variable with the result of XORing the temporary variable and the master mask. Update (S513).
- the data processing device 100 determines whether the temporary variable is 0 (S514). If the temporary variable is other than 0 in S514, that is, if the bit scan newly extracts data that is larger than the narrowing start data and closer to the narrowing start data, the data processing device 100 first masks ( The initial grouping result) is set, and the start mask is updated by the result of OR (logical sum) operation of the temporary variable and the start mask (S515).
- the data processing device 100 updates the master mask with the result of the AND operation of the scan data of the P bit string and the master mask (S516). After that, the data processing apparatus 100 sets the result of ANDing the result of the NOT operation of the P-bit string scan data and the first mask to the temporary variable, including the case where the temporary variable is 0 in S514 (S517). After that, the data processing device 100 determines whether or not the temporary variable is 0 (S518). If the temporary variable is other than 0 in S518, that is, if narrowing down to a small value performed by bit scanning in S517 is effective, the data processing device 100 sets the content of the temporary variable to the first mask, and first is updated (S519).
- the data processing device 100 determines whether the variable P, which is the bit string being processed, is LSB, that is, whether or not scanning of all bits has been completed. (S520). If the variable P is other than the LSB in S520, that is, if scanning of all bits has not been completed, the data processing apparatus 100 moves the variable P by one to the LSB side for the next scan (S521), After S512, the bit scan processing (narrowing down processing) is repeated for the next bit string.
- the data processing device 100 outputs the contents of the first mask as the first grouping result (S522). Subsequently, the data processing apparatus 100 sets the result of AND operation of the NOT operation result of the first mask and the start mask, which is the search result of data larger than the narrowing start data (larger search result), to the master mask (S523). . Thereafter, using this master mask, the subsequent grouping sorting process is performed using the ascending grouping sorting shown in the first embodiment (S524).
- search result is equal to or greater than the narrowing-down start data (search result that is equal to or greater than)
- ⁇ Operating example of greater-than search processing> 16A and 16B show an operation example of this modification, which is a modification of the operation example of the greater-than search processing in the ascending positional grouping sort shown in FIG.
- the comparison value (narrowing down start data) for the greater-than search is 5, and data of 6 records with record numbers 0 to 5 are input.
- the data value of record number 0 is 3, the data value of record number 1 is 7, the data value of record number 2 is 5, the data value of record number 3 is 15, the data value of record number 4 is 6, and the data of record number 5 has a value of 10.
- Each data is 4-bit data of bit strings [0] to [3], and scan data and mask data are 6-bit data.
- the initial value of the master mask is "111111” (S611)
- the initial value of the first mask is "000000” (S612)
- the start mask is "GreaterMask ) is "000000” (S613).
- bit scan processing and update processing of the first mask and start mask are performed on the scan data of bit string [3].
- the master mask "111111” as mask data
- the result "111010” of performing NOT operation on the scan data "000101” of bit string [3] is masked, and the mask result becomes "111010” (S614).
- the mask data "111111” and the mask result "111010” are XOR-operated to update the first mask with "000101". 000101′′ (S615).
- bit string [2] of the comparison value is 1, bit scan processing and first mask update processing are performed on the scan data of bit string [2]. Specifically, the mask result “111010” of bit string [3] is used as mask data, and the scan data “011110” of bit string [2] is masked, resulting in a mask result of “011010” (S616). Furthermore, the first mask "000101" updated with the bit string [3] is ANDed with the result "100001” obtained by NOT-operating the scan data "011110” of the bit string [2], and the first mask is set to "000001" with the result. (S617).
- bit scan processing and update processing of the first mask and start mask are performed on the scan data of bit string [1].
- the mask result "011010” of bit string [2] is used as mask data, and the result "001000” of performing NOT operation on the scan data "110111” of bit string [1] is masked, and the mask result becomes "001000”. (S618).
- the mask data "011010” and the mask result "001000” are XOR'd to update the first mask with "010010". It is set to "010111” (S619).
- bit string [0] of the comparison value is 1, bit scan processing and first mask update processing are performed on the scan data of bit string [0]. Specifically, the mask result "001000" of bit string [1] is used as mask data, and the scan data "111100” of bit string [0] is masked, resulting in a mask result of "001000” (S620). Furthermore, the first mask “010010” updated with the bit string [1] is NOT-operated with the scan data "111100" of the bit string [0] and the result "000011” is ANDed, and the first mask is set to "000010" with the result. (S621).
- the mask result "001000" of the bit string [0] becomes the result of the equivalence search (S622). That is, the record number 2 of the ON bit of "001000” becomes the same data as the comparison value 5.
- the start mask "010111” updated with the bit string [1] is the result of the greater-than search (S623). That is, the record numbers 1, 3, 4, and 5 of the ON bit of "010111” are data greater than the comparison value 5.
- the first mask "000010” set by the bit string [0] becomes the first positional grouping result (S624). That is, record number 4 of the ON bit of "000010” is positional grouping data closest to comparison value 5 in the greater-than search.
- a first mask (FirstMask) is prepared in addition to a start mask (GreaterMask). is set, and at the same time, the first mask is logically summed with the start mask to obtain data that is larger than the comparison value and closer to the comparison value and the result of greater than search. After that, the first mask is scanned down toward the minimum value in the same way as the ascending grouping process, so that the first grouping result and the result of the greater-than search can be obtained simultaneously in one scandown process.
- the first mask obtained by this process is used as the result of the first positional grouping, and subsequent grouping is performed by removing the first mask from the start mask as mask data at the start of basic grouping sort (ascending order).
- the same value result is used as the first grouping result
- the start mask is used as the mask data at the start of basic grouping sorting (ascending order).
- 17A and 17B show another operation example of this modification, which is a modification of the operation example of the less-than search processing in the descending positional grouping sort shown in FIG.
- the comparison value (narrowing-down start data) for the less than search and the data to be input are the same as in FIGS. 16A and 16B.
- the initial value of the master mask is “111111” (S711)
- the initial value of the first mask is “000000” (S712)
- the start mask is “LessMask) ) is “000000” (S713).
- bit scan processing and first mask update processing are performed on the scan data of bit string [3].
- the master mask “111111” as mask data
- the result “111010” of performing NOT operation on the scan data “000101” of bit string [3] is masked, and the mask result becomes “111010” (S714).
- the initial value of the first mask "000000” is ANDed with the scan data "000101" of the bit string [3], and the result is all 0 ("000000"), so the first mask is not updated. (S715).
- bit string [2] of the comparison value is 1, bit scan processing and update processing of the first mask and start mask are performed on the scan data of bit string [2]. Specifically, the mask result "111010” of bit string [3] is used as mask data, and the scan data "011110” of bit string [2] is masked, resulting in a mask result of "011010” (S716). Further, the mask data "111010” and the mask result "011010” are XOR'd to update the first mask with "100000". 100000" (S717).
- bit string [1] of the comparison value is 0, bit scan processing and first mask update processing are performed on the scan data of bit string [1]. Specifically, the mask result "011010” of bit string [2] is used as mask data, and the result "001000” of performing NOT operation on the scan data "110111” of bit string [1] is masked, and the mask result becomes "001000”. (S718). Furthermore, the AND operation of the scan data "110111” of the bit string [1] is performed with the first mask "100000” updated by the bit string [2], and the result is set to "100000” as the first mask (S719).
- bit string [0] of the comparison value is 1, bit scan processing and first mask update processing are performed on the scan data of bit string [0]. Specifically, the mask result "001000" of bit string [1] is used as mask data, and the scan data "111100” of bit string [0] is masked, resulting in a mask result of "001000” (S720). Furthermore, the XOR operation is performed on the mask data “001000” and the mask result “001000”, but the result is all 0 (“000000”). ] is AND-operated, and the first mask is set to "100000" (S721).
- the mask result "001000" of the bit string [0] becomes the result of the equivalence search (S722). That is, the record number 2 of the ON bit of "001000” becomes the same data as the comparison value 5.
- the start mask "100000” updated with the bit string [2] is the result of the less than search (S723). That is, the record number 0 of the ON bit of "100000” is smaller than the comparison value 5.
- the first mask "100000” set by the bit string [0] is the first positional grouping result (S724). That is, the ON bit record number 0 of "100000” is the positional grouping data closest to the comparison value 5 in the less than search.
- a first mask (FirstMask) is prepared in addition to a start mask (LessMask). and, at the same time, performing a logical sum (OR) of the first mask to the start mask, data smaller than the comparison value and closer to the comparison value and the result of less than search are obtained.
- the first mask is scanned down toward the maximum value in the same manner as the descending grouping process, so that the first grouping result and the less than search result can be obtained simultaneously in one scandown process.
- the first mask obtained by this process is used as the result of the first positional grouping, and subsequent grouping is performed using the mask result obtained by removing the first mask from the start mask as mask data at the start of basic grouping sort (descending order).
- the same value result is used as the first grouping result
- the start mask is used as mask data at the start of basic grouping sorting (descending order).
- Embodiment 4 Next, Embodiment 4 will be described. In the present embodiment, an example will be described in which scan data is divided and the divided scan data are processed in parallel in the data processing apparatuses of the first to third embodiments.
- FIG. 18 shows a configuration example of a data processing device according to this embodiment.
- the data processing apparatus 100 includes, in addition to the configuration of the first embodiment, a division unit 121 and two scandown units 140a and 140b. there is
- the dividing unit 121 divides the scan data acquired by the acquiring unit 120 into two divided scan data so that the scandown units 140a and 140b can process the data.
- data may be divided for each processing unit (word unit) of the system.
- the scan-down unit 140a performs scan-down processing on one of the divided scan data divided by the division unit 121.
- the scan-down unit 140b performs scan-down processing on the other divided scan data divided by the dividing unit 121.
- one scandown unit may execute two scandown processes in parallel. Note that the scan data may be divided into a plurality of divided scan data, and a plurality of processes may be executed in parallel for each divided scan data.
- 19A and 19B show an operation example of data processing by the data processing method according to this embodiment.
- 19A and 19B show an example of performing basic grouping sort processing in ascending order using divided scan data obtained by dividing scan data.
- the scan down processing for each divided scan data is basically the same as in Embodiment 1, but only the processing for 0 determination of the mask result (S103 in FIG. 3) is different. That is, bit scan processing is performed for each divided scan data, and if the mask result of all divided scan data is 0, the mask result is invalidated, and the previously valid mask result is used for processing (see below). (See S814 and S815). Conversely, even if the mask result of a plurality of divided data is 0, if the mask result of any of the divided data is not 0 (if any of the mask results has an ON bit), that mask result is treated as valid. (see S804 and S805 below).
- the scan data is 7 bits, and the data divided into two is called divided scan data.
- the first divided scan data is 4 bits corresponding to the bits of records 0-3, and the second divided scan data is 4 bits obtained by adding 1 bit to the bits of records 4-6.
- the mask data are 4-bit first mask data and 4-bit second mask data corresponding to the two divided scan data.
- the initial value of the first master mask is "1111" with all bits ON, and the initial value of the second master mask is the least significant bit (record The bit corresponding to number 7) is OFF and the other bits are ON (S801).
- the first mask data is set to “1111”
- the first divided scan data "0010” is NOT-operated, and the result "1101” is used for masking.
- the second mask data is set to “1110”
- the least significant bit (value is 0) is added to the second divided scan data “100” and the NOT operation “0111” is used to mask the second mask data. becomes “0110" (S802).
- the first mask result "1101” of bit string [3] is used as mask data, and the first divided scan data "0100” is NOT-operated and masked using the result "1011”,
- the first mask result is "1001”
- the second mask result "0110” of bit string [3] is used as mask data, and "1011” obtained by adding the least significant bit to the second divided scan data "010” and performing NOT operation is used.
- the second mask result is "0010" (S803).
- the first mask result "1001" of bit string [2] is used as mask data, and the first divided scan data "0011” is subjected to NOT operation and masked using the result "1100",
- the first mask result is "1000”
- the second mask result "0010” of the bit string [2] is used as mask data
- "0101" obtained by adding the least significant bit to the second divided scan data "101” and performing NOT operation is used.
- the second mask result is all 0 ("0000") (S804).
- the second mask result is 0, but since the first mask result is other than 0, the narrowing down is judged to be successful, and the mask result here is directly taken over as the next mask data.
- the first mask result "1000” of bit string [1] is used as mask data, and the first divided scan data "0101" is subjected to a NOT operation and masked using the result "1010"
- the first mask result is "1000”
- the second mask result "0000” of the bit string [1] is used as mask data
- "1001” obtained by adding the least significant bit to the second divided scan data "011” and performing the NOT operation is used.
- the result of the second mask is all 0 (S805).
- the second mask result is 0 here as well, since the first mask result is other than 0, it is determined that the narrowing down has been successful, and the mask result here is directly taken over as the next mask data.
- the result of the first scandown process is the result of combining the first mask result "1000" of bit string [0] and the second mask result "0000" of bit string [0] (S806). That is, record number 0 of the ON bit of "10000000" is output as the minimum value data.
- a new first master mask for the second scandown is created by masking the current first master mask "1111” and the result "0111” obtained by performing a NOT operation on the first scandown processing result corresponding to the first master mask. With the mask set to "0111”, the current second master mask "1110” and the result "1111” obtained by performing NOT operation on the first scandown processing result corresponding to the second master mask are used as masks for the second scandown.
- the new second master mask is set to "1110" (S807).
- bit scan processing of bit string [3] the first mask result of the first divided scan data is "0101", and the second mask result of the second divided scan data is "0110" (S812).
- bit scan processing of bit string [2] the first mask result of the first divided scan data is "0001", and the second mask result of the second divided scan data is "0010" (S813).
- the first mask result of the first divided scan data is all 0, and the second mask result of the second divided scan data is all 0 (S814). Since both mask results are all 0, narrowing does not hold in this case, and this narrowing operation is judged to be invalid.
- both the first mask result and the second mask result for bit string [1] are 0 and are invalid, so the first mask result and the second mask result for bit string [2] to use. That is, with the first mask result “0001” of bit string [2] as mask data, the mask result of the first divided scan data is all 0, and the second mask result “0010” of bit string [2] is mask data, The result of masking the 2-divided scan data is all 0 (S815). As a result, both mask results are all 0, so the narrowing down operation is judged to be invalid, as in S814.
- the result of the second scandown processing is that the first mask result and the second mask result of bit string [0] are 0, the first mask result and the second mask result of bit string [1] are also 0, and both Since it is invalid, the result is obtained by combining the first mask result "0001" of bit string [2] and the second mask result "0010" of bit string [2] (S816). That is, the ON-bit record numbers 3 and 6 of "00010010" are output as the second smallest data.
- a new first master mask for the third scandown is created by masking the current first master mask "0111” and the result "1110” obtained by performing a NOT operation on the second scandown processing result corresponding to the first master mask.
- the mask set to "0110” With the mask set to "0110”, the current second master mask "1110” and the result "1101” of the second scandown processing result corresponding to the second master mask are NOT-operated to obtain a mask for the third scandown.
- the new second master mask is set to "1100" (S817). After the third time, the scandown process is repeated in the same manner as the first and second times.
- Embodiment 5 Next, Embodiment 5 will be described. In this embodiment, an example in which the data processing apparatuses according to the first to fourth embodiments simultaneously perform ascending sorting and descending sorting will be described.
- FIG. 20 shows a configuration example of a data processing device according to this embodiment.
- the scandown section 140 includes an ascending order processing section 141 and a descending order processing section 142 in this embodiment.
- the ascending order processing unit 141 performs scan down processing for sorting the input data in ascending order on the scan data acquired by the acquisition unit 120 .
- the descending order processing unit 142 performs scan down processing for sorting the input data in descending order on the scan data acquired by the acquiring unit 120 .
- 21A and 21B show an operation example of data processing according to this embodiment.
- 21A and 21B show an example of dual-scanning grouping sort processing in which ascending sorting and descending sorting are simultaneously performed.
- the ascending sorting and descending sorting processes are basically the same as in the first embodiment.
- the same 4 records of data as in FIGS. 9A and 9B are input.
- the scan data and the ascending and descending mask data are 4 bits.
- the initial value of the master mask is "1111" (S801), and ascending and descending sorts are performed using the same master mask.
- the mask result of ascending sort is "1101" (S802a), and the mask result of descending sort is "0010" (S802b).
- the mask result of ascending sort is "1001" (S803a), and the mask result of descending sort is all 0 ("0000") (S803b).
- the mask result of ascending sort is "1000" (S804a), and the mask result of descending sort is "0010" (S804b).
- bit scan processing of bit string [0] the mask result of ascending sort is "1000" (S805a), and the mask result of descending sort is all 0 (S805b).
- the result of ascending sorting is the masking result "1000" of bit string [0] (S806a), and the result of descending sorting is the masking result "0010” of bit string [1] (S806b). . That is, the ON bit record number 0 of "1000” is output as the minimum value data, and the ON bit record number 2 of "0010" is output as the maximum value data.
- the current master mask "1111” and the result “0111” obtained by performing NOT operation on the result of the first ascending sort are masked, and the mask result "0111” and the result “1101” obtained by performing the NOT operation on the result of the first descending order are masked. are masked, and the mask result "0101" is used as a new master mask for the next second scandown (S807).
- the new master mask "0101" is used (S811), the data of record numbers 1 and 3 are sorted, and bit scan processing is performed in the same manner as in the first scandown process.
- bit scan processing of bit string [3] the mask result of ascending sort is "0101" (S812a), and the mask result of descending sort is all 0 (S812b).
- the mask result of ascending sort is "0001" (S813a), and the mask result of descending sort is "0100" (S813b).
- bit scan processing of bit string [1] the mask result of ascending sort is all 0 (S814a), and the mask result of descending sort is all 0 (S814b).
- the mask result of ascending sort is all 0 (S815a), and the mask result of descending sort is "0100" (S815b).
- the result of sorting in ascending order is the mask result "0001" of bit string [2] (S816a), and the result of sorting in descending order is the mask result "0100" of the scan data of bit string [0]. (S816b). That is, the ON bit record number 3 of "0001” is output as the second smallest data, and the ON bit record number 1 of "0100" is output as the second largest data.
- the current master mask "0101" and the result “1110” obtained by performing NOT operation on the result of the second ascending order sorting are masked, and the result "1011” obtained by performing the NOT operation on the mask result "0100” and the result of the second descending order sorting are masked. are masked, and the result of masking is "0000", and all bits are off, so the process ends (S817).
- Ascending and descending sort number 2
- Ascending sort record number (3)
- Descending sort record number (1)
- Ascending sort record Number (0)
- (1) If the number of loops for ascending sorting and descending sorting ends with an odd number, the same value is obtained in the ascending order and the descending order in the final processing result, so in this case either one is adopted.
- grouping sorting in ascending order and grouping sorting in descending order are simultaneously performed in grouping sorting by scandown.
- the scanning results of ascending sorting and descending sorting can be obtained at the same time in one scan down. Since the two processes of ascending order sorting and descending order sorting are performed at the same time, the number of processing loops for simple grouping can be halved.
- Embodiment 6 Next, Embodiment 6 will be described. In this embodiment, an example of stacking mask results in the data processing apparatuses of the first to fifth embodiments will be described.
- FIG. 22 shows a configuration example of a data processing device according to this embodiment.
- the data processing apparatus 100 includes a stack section 133 in addition to the configuration of the first embodiment.
- the stack unit 133 stacks the mask result of the bit scan processing in the scan down unit 140 and the scan position. Also, the scan-down unit 140 starts the scan-down process from the scan position corresponding to the stacked mask results.
- FIG. 23 shows a flowchart of a data processing method according to this embodiment.
- FIG. 23 is an example of stacking grouping sort processing in which mask results are stacked in ascending order.
- the data processor 100 first initializes a stack level variable (StackLevel) to 0 as an initialization process, and sets a master mask (Mask) to the stack mask value of level 0, which is the top of the stack. , the MSB position is set to the stack scan position (S901).
- the stack includes two items, a stack mask value (Stack[].mask) and a stack scan position (Stack[].pos).
- the data processing apparatus 100 sets the stack mask value of the stack level to the variable A, which is the mask data, and sets the stack scan position of the same stack to the variable P in order to start the scan down process (S902).
- the data processing device 100 determines whether the variable P is greater than or equal to LSB (S903). That is, if the scanning operation has not reached the LSB, the process proceeds to S904, and if the processing has been completed up to the LSB, the process proceeds to S910.
- the data processing apparatus 100 performs an AND operation on the NOT operation result of the scan data of the P bit string and the variable A as the mask data, and sets the operation result to the variable B as the mask result as mask processing for sorting in ascending order. (S904).
- the data processing device 100 decrements the variable P, which is the scanning position. That is, the scan position is moved to the LSB side. (S905)
- the data processing apparatus 100 determines whether or not the variable B, which is the result of the mask processing, is 0, that is, whether the narrowing down is successful, or whether or not the variable B is the same as the variable A, that is, whether the mask is obtained by bit scanning. It is determined whether or not there has been a change (S906).
- the data processor 100 sets the stack level stack mask value , and the variable P is set to the stack scan position of the same stack (S907). After that, the stack level variable is incremented (S908). Further, the variable A, which is the mask data, is updated by the variable B, which is the mask result (S909), and the bit scan processing for the next bit string is repeated after S903.
- the data processing apparatus 100 outputs the variable A which is the mask data updated in S909 as a result (S910 ).
- the data processing device 100 performs an AND operation on the master mask and the NOT result of the variable A, which is the mask data, and updates the master mask with the operation result (S911).
- the data processing apparatus 100 determines whether or not the updated master mask is 0, that is, whether or not all data processing has been completed (S912). If the master mask is not 0 in S912, that is, if all data processing has not been completed, the data processor 100 decrements the stack level variable (S913), and replaces the stack mask value and the master mask for that stack level. An AND operation is performed, and the result is used to update the same stack mask (S914). After that, from S902 onward, the scan down process is repeated using the stacked stack mask value and stack scan position. If the master mask is 0 in S912, that is, if all data processing is completed, the process ends.
- the next scan down start position is not the MSB position, but the change. You can start at the lowest bit string position that occurs.
- early detection of the processing result may be performed. That is, after S909, it is determined whether or not the ON bit of the variable A is only one. If the ON bit of the variable A is not only one, the process proceeds to S903. You may proceed to Also, as in FIG. 6 of Embodiment 1, when sorting in descending order, in S904, the scan data of the P-bit string and the variable A may be AND-operated, and the result of the AND operation may be set to the variable B. .
- FIGS. 24A and 24B show an operation example of data processing according to this embodiment.
- FIGS. 24A and 24B are examples of stacking grouping sort processing performed in ascending order as shown in FIG.
- data of four records with record numbers 0 to 3 are input.
- the data value of record number 0 is 15, the data value of record number 1 is 2, the data value of record number 2 is 14, and the data value of record number 3 is 5.
- Each data is 4-bit data of bit strings [0] to [3], and scan data and mask data are also 4-bit data.
- the stack is initialized upon starting processing. Specifically, the stack level is set to "0", the stack mask value of stack [0] is set to "1111" which is the master mask, and the stack scan position is set to "3" which is the MSB position ( S1001).
- the stack scan position "3" and the stack mask "1111” are obtained from the stack [0] corresponding to the position of the stack level "0", and set to the scan position and mask data ( S1002).
- the mask result becomes "0101", and the scan position becomes "2" by decrementing. (S1003).
- the mask result is not 0 and is not the same as the mask data "1111”. and set the stack scan position to "2", which is the current scan position. That is, at this point, the initial value set in the stack [0] in S1001 is updated by overwriting. After that, the stack level is counted up to "1", and the mask data is updated to "0101" which is the mask result (S1004).
- the bit string [0] corresponding to the scan position "0" is bit-scanned using the inherited "0100" as mask data. 1”.
- the mask result is not 0, it is the same as the mask data, so stack processing and update of the mask data are not performed, and the process moves to the next step (S1008).
- the result of the first scandown process is the final mask data "0100" (S1009). That is, the ON bit record number 1 of "0100” is output as the minimum value data.
- the new master mask for the next second scandown is set to "1011" (S1010). ). Further, the stack level is returned to "1", the new master mask "1011” and the stack mask "0101" of the stack [1] indicated by the returned stack level “1” are ANDed, and the operation result " The value of the same stack mask is updated by 0001" (S1011).
- the second scan down process starts with stack scan position "1" stored in stack [1] pointed to by current stack level “1" as the scan position and stack mask "0001" as mask data. (S1016).
- the mask result for the first bit string [1] is "0001".
- the mask result is not 0, it is the same as the mask data "0001", so stack processing is not performed and the mask data is not updated (S1017). .
- bit scan processing of bit string [0] the inherited mask data "0001" is used as mask data, and the mask result is all 0. Since the mask result is 0, stack processing is not performed and the mask data is updated. (S1018).
- the result of the second scandown process is "0001", which is the finally handed over mask data (S1019). That is, the ON bit record number 3 of "0001” is output as the second smallest data.
- the new master mask for the next third scandown is set to "1010” by masking the current master mask "1011” and the result "1110” obtained by performing the NOT operation on the second scandown processing result (S1020). ). Further, the stack level is returned to "0", the new master mask "1010” and the stack mask "1111” of the stack [0] indicated by the returned stack level "0” are ANDed, and the mask result is "1010". ” updates the value of the same stack mask (S1021).
- the third scan-down process starts with stack scan position "2" stored in stack [0] pointed to by current stack level "0" as the scan position and stack mask "1010" as mask data. (S1024).
- the mask result for the first bit string [2] is all 0, and since the mask result is 0, stack processing is not performed and mask data is not updated (S1025).
- bit scan processing of bit string [1] the inherited mask data "1010" is used as mask data, and the mask result is all 0. Since the mask result is 0, stack processing is not performed and the mask data is updated. (S1026).
- the inherited mask data "1010” is used as mask data, and the mask result is "0010" (S1027).
- the mask result is not 0 and is not the same as the mask data "1010”.
- "-1" which is the current scan position (because it is decremented after scanning the bit string [0] this time)
- the stack scan position is set. That is, at this point, the value set in the stack [0] in S1021 is updated by overwriting. After that, the stack level is counted up to "1", and the mask data is updated to "0010" which is the mask result (S1028).
- the result of the third scandown process is the final mask data "0010" (S1029). That is, the ON bit record number 2 of "0010” is output as the third smallest data. Also, the current master mask "1010” and the result “1101” obtained by performing NOT operation on the third scandown processing result are masked, and the new master mask for the next fourth scandown is set to "1000" (S1030). ). Further, the stack level is returned to "0", the new master mask "1000” and the stack mask "1010” of the stack [0] indicated by the returned stack level "0” are ANDed, and the mask result " The value of the same stack mask is updated by 1000" (S1031).
- the fourth scan down starts with stack scan position "-1" stored in stack [0] pointed to by current stack level "0" as the scan position and stack mask "1000" as mask data. do.
- the scan position is already -1 and points to a position below the LSB, bit scanning is not performed and the mask data is the result as is (S1038).
- the result of the fourth scandown process is the final mask data "1000" (S1039). That is, the ON bit record number 0 of "1000” is output as the fourth smallest data. Further, when masking the current master mask "1000” and the result "0111” obtained by performing the NOT operation on the result of the fourth scandown, the mask result becomes "0000", and since all bits are off, the process ends (S1040). ).
- a stack is prepared for stacking the mask result and the scan position, and if all bits are other than 0 in the scan down process and there is a change from the previous mask, the mask and scan position before the change are stacked on the stack. .
- the stack is returned by one, and the mask stored there and the AND of the master mask are used as a new mask, and the next scan is performed from the scan position stored in the stack. start down.
- the amount of processing in the processing sequence skip portion can be reduced (second bit string [3] and bit string [2] in FIG. 24A, third bit string [2] in FIG. 24B, bit string [3], the fourth bit string processing). This is especially effective when the number of significant bit digits is smaller than the total number of bit digits.
- FIG. 25A and 25B show a comparison between the basic grouping and sorting method in the first embodiment and the stacking method in the present embodiment.
- each scan down P1 to P4 is performed from the first bit (MSB) to the least significant bit ( LSB) is required.
- each scandown requires 5 times of processing (bit scan processing), so 20 times of processing are required to sort all the data.
- bit scan processing bit scan processing
- efficient processing can be performed when the number of effective bits is less than the total number of bits, or when data is biased as a result of narrowing down.
- the number of processing times can be further reduced. In FIG. itself becomes unnecessary.
- Embodiment 7 Next, Embodiment 7 will be described. In the present embodiment, an example in which the grouping results are integrated by bit counting in the data processing apparatuses of the first to fifth embodiments will be described.
- FIG. 26 shows a configuration example of a data processing device according to this embodiment.
- the data processing apparatus 100 includes a bit count section 160 and an integration section 161 in addition to the configuration of the first embodiment.
- the bit count unit 160 performs bit count processing for counting (bit counting) the ON bits of the grouping processing result. Also, the bits of the result of masking the grouping result and the plurality of scan data are counted. For example, when the processing result mask is "11011110", in the bit count process, the ON bits of this result mask are counted, and the bit count result is 6.
- the integration unit 161 performs integration processing of the grouped data using the bit count result.
- the accumulator 161 accumulates a value corresponding to the bit count value of the mask result. Specifically, the bit count value is bit-shifted according to the bit position of the scan data, and the bit-shifted values are totaled.
- Data processing apparatus 100 may include at least bit count section 160 and integration section 161, and perform bit count processing and integration processing on a plurality of pieces of input data.
- FIG. 27 shows a flowchart of a data processing method according to this embodiment.
- FIG. 27 is an example of integration processing using bit count.
- the following processing is mainly executed by the integrator 161, and bit count processing is executed by the bit count unit 160, but the present invention is not limited to this.
- the data processing device 100 initializes the integration result to 0 and sets the MSB position to the variable P as initial settings for the integration process (S1101). Next, the data processing device 100 shifts the integration result to the left by 1 bit (S1102).
- the data processing device 100 ANDs the master mask (Mask) and the accumulated bit data of the P bit string, and sets the result of the AND operation to the variable B (S1103).
- the integrated bit data is each bit string data (scan data) of data to be integrated.
- the data processing device 100 bit-counts the variable B, which is the mask result, adds the bit count result to the integration result, and updates the integration result with the addition result (S1104).
- the data processing apparatus 100 determines whether or not the variable P, which is the bit string being processed, is LSB, that is, whether or not scanning of all bits has been completed (S1105).
- variable P is other than the LSB in S1105, that is, if scanning of all bits has not been completed, the data processing apparatus 100 moves the variable P by one to the LSB side for the next scan (S1106), The processing after S1102 is repeated. If the variable P is LSB in S1105, that is, if scanning of all bits is completed, the data processing apparatus 100 outputs the integration result (S1107).
- FIG. 28 shows an operation example of data processing according to this embodiment.
- FIG. 28 shows an example of performing accumulation processing using a bit count as in FIG.
- FIG. 29 shows another operation example of data processing according to the present embodiment.
- FIG. 29 shows an example in which bit counting is performed for each bit string and the result is finally accumulated.
- Input data and processing result masks are the same as in FIG.
- the scan data of bit string [3] is masked with a processing result mask, and the mask result is bit-counted to be 1 (S1202).
- This accumulation method shifts the bit count value to the left according to the bit position.
- bit string [2] is masked with a processing result mask, and the mask result is bit-counted to be 2 (S1205).
- bit string is [2]
- bit string [1] is masked by the processing result mask, and the mask result is bit-counted to be 3 (S1208).
- bit string is [1]
- bit string [0] is masked by the processing result mask, and the mask result is bit-counted to be 2 (S1211).
- bit string is [0]
- the bit count is used to perform the accumulation processing, and high-speed arithmetic processing can be performed on vertically expanded data.
- the bit count is obtained for each data bit string in the horizontal direction, and the results are added while being shifted, thereby carrying out integration.
- the computational complexity of this scheme is O(n/bit count width*data bit size). Calculation speeds up as the bit count width becomes wider or the effective data bit size becomes smaller for a large amount of data.
- the integration processing of the present embodiment can be obtained by simply counting the number of ON bits (the number of 1 bits) of the result mask by bit counting.
- the integration result can be obtained efficiently. For example, when performing integration in the grouping and sorting process of Embodiment 1, the integration process in FIG. 27 is performed after S107 in FIG.
- the count processing and accumulation processing of the number of records can be performed once the fields for result masking and accumulation have been determined, not only the grouping results, but also the totalization of all records and the results of normal narrowing down (search) can also be applied. Also, if the integrated value and the number of records are obtained, the average value can be easily obtained by obtaining (integrated value/number of records). Therefore, this process can also be used to calculate variances and standard deviations that use mean values.
- Embodiment 8 Next, Embodiment 8 will be described. In this embodiment, an example of performing JOIN processing on data of a plurality of tables in the data processing apparatuses of the first to seventh embodiments will be described.
- FIG. 30 shows a configuration example of a data processing device according to this embodiment.
- the data processing apparatus 100 includes a JOIN processing unit 170 in addition to the configuration of the first embodiment.
- the data processing apparatus 100 may include at least the JOIN processing unit 170 and perform only JOIN processing.
- the JOIN processing unit 170 performs JOIN processing on the two tables.
- JOIN processing is processing that joins two data sets using a specific key and finds correspondence between both records.
- JOIN processing includes Full Outer-JOIN, Left Outer-JOIN, Right Outer-JOIN, and Inner-JOIN.
- the grouping operation is performed on the left (one) table, and the JOIN key of the data output as a result is used to search the right (other) table.
- the search if data with the same JOIN key exists in the right table, the corresponding record is added (joined state) to the grouping result of the left table and output.
- the operations on the left and right tables of the LeftOuter-Join are reversed.
- each of the left and right tables is grouped. If the values of the grouping keys of the left and right tables are different, positional grouping is performed by designating the larger grouping key as the refinement value of "greater than or equal to" for the table that outputs the smaller key. If the same value is obtained for the grouping keys of both tables, both of them are combined (joined state) and output to obtain the next grouping for each of the left and right tables. This operation is repeated until there is no data in any of the tables.
- FIG. 31 shows a flowchart of inner-JOIN processing included in the data processing according to this embodiment.
- JOIN processing is performed on table A and table B.
- FIG. 31 shows a flowchart of inner-JOIN processing included in the data processing according to this embodiment.
- JOIN processing is performed on table A and table B.
- FIG. 31 shows a flowchart of inner-JOIN processing included in the data processing according to this embodiment.
- JOIN processing is performed on table A and table B.
- the data of each table is grouped by basic grouping sort in ascending order, and the specified number of data (one case) is acquired.
- the data processing device 100 determines whether grouping values for both tables have been obtained (whether there is a grouping result) (S1302). If the grouping values for both tables have not been obtained in S1302, the data processing apparatus 100 terminates the process. Also, when the grouping values of both tables have been obtained in S1302, the data processing apparatus 100 determines whether or not the grouping values of both tables are the same (S1303).
- the data processing device 100 combines the grouping results of both tables and outputs them (Join result output) (S1304).
- FIG. 32 shows an operation example of JOIN processing, which is data processing according to this embodiment.
- table A stores data of 1 (A1), 2 (A2), 4 (A4), 5 (A5), and 6 (A6)
- table B stores data of 2 (B2). , 3 (B3), and 6 (B6) are stored.
- each table contains only one data of each value, but when there are multiple data of the same value, the data of the same value are simultaneously detected by the grouping operation.
- FIG. 32(c) in the case of RightOuter-JOIN, basic grouping is first performed on table B, and then table A is searched for equivalence using the grouping results of table B.
- each of Table A and Table B is subjected to basic grouping, and the result of Table A is 1 and the result of Table B is 2 (S1401).
- the value (1) of table A is smaller, so positional grouping of table A with the value (2) of table B or more results in 2 for table A (S1402).
- Each configuration in the above-described embodiments is configured by hardware or software, or both, and may be configured from one piece of hardware or software, or may be configured from multiple pieces of hardware or software.
- the functions (processing) of each device may be implemented by a computer having a CPU, memory, and the like.
- a program for performing the method in the embodiment may be stored in a storage device, and each function may be realized by executing the program stored in the storage device with a CPU.
- These programs contain instructions (or software code) that, when read into a computer, cause the computer to perform one or more of the functions described in the embodiments.
- the program may be stored in a non-transitory computer-readable medium or tangible storage medium.
- computer readable media or tangible storage media may include random-access memory (RAM), read-only memory (ROM), flash memory, solid-state drives (SSD) or other memory technology, CDs - ROM, digital versatile disc (DVD), Blu-ray disc or other optical disc storage, magnetic cassette, magnetic tape, magnetic disc storage or other magnetic storage device.
- the program may be transmitted on a transitory computer-readable medium or communication medium.
- transitory computer readable media or communication media include electrical, optical, acoustic, or other forms of propagated signals.
- the present invention can be suitably applied to a data processing device that processes database data.
- Data processing device 110 Storage unit 120 Acquisition unit 121 Division unit 130 Mask holding unit 131 Mask save unit 132 Narrowing unit 133 Stack units 140, 140a, 140b Scandown unit 141 Ascending order processing unit 142 Descending order processing unit 150 Output unit 160 Bit counting unit 161 integration unit 170 JOIN processing unit
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Mathematical Physics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Software Systems (AREA)
- Computational Mathematics (AREA)
- Algebra (AREA)
- Computer Hardware Design (AREA)
- Complex Calculations (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
効率よくデータ処理を行うことが可能なデータ処理装置、データ処理方法、及びプログラムを提供する。データ処理装置(100)は、複数のNビットの入力データにおける同じビット位置のビットデータを含むスキャンデータを、ビット位置順に取得する取得部(120)と、取得されるスキャンデータを用いてビットスキャン処理を行い、第1のビット位置のスキャンデータから第Nのビット位置のスキャンデータまでビットスキャン処理を繰り返すスキャンダウン処理を行うスキャンダウン部(140)と、スキャンダウン処理ごとに得られる同値の入力データをソート順に逐次出力する出力部(150)と、を備える。
Description
本発明は、データ処理装置、データ処理方法、及びプログラムに関する。
近年、IT(Information Technology)技術の発達及び世界的な普及に伴い、データベースを含む各種ITシステムが処理するデータ量が急増している。今後もIoT(Internet of Things)の推進や5Gの普及等により、全世界のデータ量はさらに爆発的に増加すると予測されている。このため、データ処理技術の飛躍的な向上が望まれている。
関連する技術として、例えば、特許文献1及び2、非特許文献1及び2が知られている。特許文献1には、情報の読み出し書き込みが可能なメモリにおいて、1ワードビット幅がNでMワードアドレスの記憶セル構造とし、Mワードアドレスの中から繰り返し選択指定される1ワードビット幅がNの記憶セル情報を1組Nビットの論理演算器に並列に入力し論理演算することで、大容量メモリを連想メモリ(CAM)に匹敵する情報検索能力を持った能動型のメモリを実現する技術が記載されている。特許文献2にも、特許文献1と同様の構造を有するメモリ型プロセッサが記載されている。なお、特許文献1及び2のようなメモリ型プロセッサをデータベースプロセッサ(DBP)と呼ぶ場合がある。
また、非特許文献1及び2には、メインメモリで高速なスキャンを実現するため、ビットレベルで並列処理を可能とするBitWeavingと呼ばれる技術が記載されている。
Yinan Li, Jignesh M. Patel, "BitWeaving: Fast Scans for Main Memory Data Processing", SIGMOD '13: Proceedings of the 2013 ACM SIGMOD International Conference on Management of Data, June 2013, Pages 289-300, [online], [令和3年7月5日検索], インターネット<URL:http://pages.cs.wisc.edu/~jignesh/publ/BitWeaving.pdf>
Yinan Li, Jignesh M. Patel, "CS564, BitWeaving: Fast Scans for Main Memory Data Processing", University of Wisconsin-Madison, [online], [令和3年7月5日検索], インターネット<URL:http://pages.cs.wisc.edu/~jignesh/cs564/rl/bitweaving.pdf>
上記のような、関連する技術におけるDBPやBitWeavingでは、メモリのデータをビット単位に並列処理することにより検索処理の高速化を可能とし得る。しかしながら、関連する技術では、データ処理として主に検索処理を対象としており、グルーピング処理などその他のデータ処理が考慮されていない。このため、データ処理の内容によっては効率的に処理を行うことが困難な場合がある。
本発明は、このような事情に鑑みてなされたものであって、効率よくデータ処理を行うことが可能なデータ処理装置、データ処理方法、及びプログラムを提供することを目的とする。
本発明に係るデータ処理装置は、複数のNビットの入力データにおける同じビット位置のビットデータを含むスキャンデータを、ビット位置順に取得する取得部と、前記取得されるスキャンデータを用いてマスクデータにマスクをかけるマスク処理と前記マスク処理の結果に応じた前記マスクデータの更新処理とを含むビットスキャン処理を行い、前記第1のビット位置のスキャンデータから前記第Nのビット位置のスキャンデータまで前記ビットスキャン処理を繰り返すスキャンダウン処理を行うスキャンダウン部と、前記スキャンダウン処理ごとに得られる同値の前記入力データをソート順に逐次出力する出力部と、を備えるものである。
本発明に係るデータ処理方法は、データ処理装置がデータを処理する方法であって、複数のNビットの入力データにおける同じビット位置のビットデータを含むスキャンデータを、ビット位置順に取得し、前記取得されるスキャンデータを用いてマスクデータにマスクをかけるマスク処理と前記マスク処理の結果に応じた前記マスクデータの更新処理とを含むビットスキャン処理を行い、前記第1のビット位置のスキャンデータから前記第Nのビット位置のスキャンデータまで前記ビットスキャン処理を繰り返すスキャンダウン処理を行い、前記スキャンダウン処理ごとに得られる同値の前記入力データをソート順に逐次出力するものである。
本発明に係るプログラムは、複数のNビットの入力データにおける同じビット位置のビットデータを含むスキャンデータを、ビット位置順に取得し、前記取得されるスキャンデータを用いてマスクデータにマスクをかけるマスク処理と前記マスク処理の結果に応じた前記マスクデータの更新処理とを含むビットスキャン処理を行い、前記第1のビット位置のスキャンデータから前記第Nのビット位置のスキャンデータまで前記ビットスキャン処理を繰り返すスキャンダウン処理を行い、前記スキャンダウン処理ごとに得られる同値の前記入力データをソート順に逐次出力する、処理をコンピュータに実行させるためのプログラムである。
本発明によれば、効率よくデータ処理を行うことが可能なデータ処理装置、データ処理方法、及びプログラムを提供することができる。
以下、図面を参照して本発明の実施の形態について説明する。ただし、本発明が以下の実施の形態に限定される訳ではない。また、説明を明確にするため、以下の記載および図面は、適宜、省略、および簡略化がなされている。なお、各図面において、同一の要素には同一の符号が付されており、必要に応じて重複説明は省略されている。
(関連する技術の検討)
実施の形態の理解を助けるため、データベースのデータ処理について検討する。データベースの処理は大別すると、大量なデータの中から対象データを絞り込む検索処理と、その結果を分類する集約処理に分けられる。一般的なデータベースでは、前者を高速に行うためにインデックスを使用し、後者を高速に行うためにハッシュやSORTなどの処理を組み合わせている。
実施の形態の理解を助けるため、データベースのデータ処理について検討する。データベースの処理は大別すると、大量なデータの中から対象データを絞り込む検索処理と、その結果を分類する集約処理に分けられる。一般的なデータベースでは、前者を高速に行うためにインデックスを使用し、後者を高速に行うためにハッシュやSORTなどの処理を組み合わせている。
検索については、特許文献1及び2に記載されたようなDBP(超並列演算装置)を使うことで、インデックスを使わずに高速動作が可能になる。しかしながら、特許文献1及び2、非特許文献1及び2には、その検索結果に対する集約の操作については示されていない。
そこで、集約処理について検討する。集約の種類としては、集合の中から同値のものを集めるグルーピング(GROUP BY)処理、2つの集合を特定のキーによって結合する(JOIN)処理が代表的である。また、集合の中から同値のものを排除し、ユニークな集合を得る重複排除(DISTINCT)処理、集合をあるキーで昇順もしくは降順に並べ替えるソート(ORDER BY)処理も集約処理に含まれ得る。一般的なデータベースでは、この集約を行うための方法として、上記のようにSORTやハッシュが使われる。また、結合(JOIN)処理では、インデックスを使った検索処理の応用として一件ずつ順次結合先を探すネステッドループJOINも行われる。
ソート方式では、データに対して一旦、グルーピングキーでソートを行い、その結果に対し、同値の範囲をグルーピングしていく。ハッシュ方式の場合は、グルーピングキーに対し、まずハッシュ値を求めて、そのハッシュ値に従ったブロックにデータを分散させる。ただし、ハッシュ値は異なるキーに対して、同じハッシュ値が生成される(ハッシュ値の衝突)ことがあるため、同じハッシュブロックの中に異なるグルーピングキーのデータが入る場合は、それらを更に別々のブロックに分散させる。こうすることで、末端のブロックには同じグルーピングキーを持つデータを集めることができる。
関連する技術では、これらの処理について、コンピュータの持つ基本的な処理単位であるワードなどの単位でデータを一件ずつ処理していく。これに対し、以下に説明するように、本発明の実施の形態における集約処理(グルーピング処理)では、複数のデータに対して同時に処理を行い、集約データ(グルーピングデータ)を順次抽出していく。このように、実施の形態では、関連する技術とは異なった処理方式を取るため、その処理特性においても、関連する技術とは異なった特性を得ることが可能となる。例えば、関連する技術が得意な分野と本発明の実施の形態が得意な分野を処理の内容によって使い分けることで、双方の長所を生かして大幅な処理の効率化を図ることも可能となる。
(実施の形態1)
次に、実施の形態1について説明する。本実施の形態では、本発明の基本的な例として、ビットスキャンを含むスキャンダウンによる基本グルーピングソート処理について説明する。
次に、実施の形態1について説明する。本実施の形態では、本発明の基本的な例として、ビットスキャンを含むスキャンダウンによる基本グルーピングソート処理について説明する。
<データ処理装置の構成>
図1は、本実施の形態に係るデータ処理装置の構成例を示している。本実施の形態に係るデータ処理装置100は、データ処理の一例として、入力データに対しグルーピングソート処理を行う。なお、本来データベースにおけるグルーピング処理では、グルーピングの結果は、あくまで同一のものを集約したデータを得ることで、その順序性については規定が無い。しかしながら、本件のグルーピング処理では、グルーピングとソートが同時に行われ、ソートの結果にグルーピングデータを含む形式になる。このため、以降の説明での本件のグルーピングを「グルーピングソート」と呼ぶ。図1に示すように、データ処理装置100は、記憶部110、取得部120、マスク保持部130、スキャンダウン部140、出力部150を備えている。なお、図1の構成は一例であり、本実施の形態に係るデータ処理が可能であれば、その他の構成としてもよい。また、データ処理装置100は、一つの装置でもよいし、複数の装置でもよい。
図1は、本実施の形態に係るデータ処理装置の構成例を示している。本実施の形態に係るデータ処理装置100は、データ処理の一例として、入力データに対しグルーピングソート処理を行う。なお、本来データベースにおけるグルーピング処理では、グルーピングの結果は、あくまで同一のものを集約したデータを得ることで、その順序性については規定が無い。しかしながら、本件のグルーピング処理では、グルーピングとソートが同時に行われ、ソートの結果にグルーピングデータを含む形式になる。このため、以降の説明での本件のグルーピングを「グルーピングソート」と呼ぶ。図1に示すように、データ処理装置100は、記憶部110、取得部120、マスク保持部130、スキャンダウン部140、出力部150を備えている。なお、図1の構成は一例であり、本実施の形態に係るデータ処理が可能であれば、その他の構成としてもよい。また、データ処理装置100は、一つの装置でもよいし、複数の装置でもよい。
記憶部110は、入力される複数の入力データを記憶する。入力データは、データ処理装置100が処理する処理対象のデータである。例えば、記憶部110は、入力データのビット幅と入力データのレコード数に応じた所定のメモリセル構造のメモリである。例えば、記憶部110は、特許文献1及び2のようなDBPと同様のメモリセル構造のメモリであるか、その他の構造のメモリでもよいし、メモリに限らずその他の任意の記憶手段でもよい。図2は、記憶部110のメモリセル構造の一例を示している。例えば、入力データの1レコード(1ワード)がN(N>0の整数)ビットであり、M(M>0の整数)レコードの入力データが入力される場合、図2に示すように、記憶部110をM行×N列のメモリセル構造とし、各行に各入力データを格納する。
取得部120は、記憶部110が記憶する複数の入力データからスキャンダウン部140が処理するスキャンデータをビット列順(ビット位置順)に選択し取得する。スキャンデータは、複数の入力データにおける同じビット位置のビットデータを含むデータである。取得部120は、例えば図2に示すように、MレコードのNビットデータにおいて、各レコードの同じビット位置のビットデータをビット列単位に選択し、選択したM個のビットデータをレコード順(入力順)に抽出して、スキャンデータを取得する。すなわち、MレコードのNビットデータが入力される場合、MビットのスキャンデータがN個取得される。また、取得部120は、MレコードのNビットデータに対し、ビット列順に第1ビット列から第Nビット列へデータ検索方向(スキャンダウン方向)にスキャンデータを取得する。データ検索方向は、スキャンダウン部140によりスキャンダウン処理が行われる処理順に応じた方向であり、MSB(Most Significant Bit)からLSB(Least Significant Bit)へ向かう方向であるが、処理の内容によってはLSBからMSBへ向かう方向としてもよいし、処理の内容に応じた特別な順序でも良い。
マスク保持部130は、スキャンダウン部140がスキャンダウン処理で使用するマスタマスクを保持(記憶)する。マスタマスクは、複数の入力データからスキャンダウン処理の対象となるソート対象(レコード)を特定するデータである。また、マスタマスクは、スキャンダウン部140によって行われるスキャンダウン処理の結果により更新され、次の処理への有効データの引継ぎに使われる。例えば、マスタマスクは、対象データをONビット(有効ビット)のビット位置で示す。全データ(レコード)をソートする場合、マスタマスクは全ビットがONとなる。また、特定のレコードのみを処理対象としたい場合は、該当するレコード位置のビットのみONに設定することで、処理対象を自由に設定できる。
スキャンダウン部140は、取得部120が取得したスキャンデータに対しビットスキャン処理を含むスキャンダウン処理を行う。スキャンダウン部140は、各スキャンデータに対しビットスキャン処理を行うビットスキャン部でもあり、第1のビット位置のスキャンデータから第Nのビット位置のスキャンデータまでビットスキャン処理を繰り返すスキャンダウン処理を行う。これにより、入力データを昇順または降順にソートする。この際、ビットスキャン処理の特性により、対象データの中に複数の同じ値を持つレコードが存在する場合は、それら複数レコードの検出が同時に行われる。ソートをした上で、グルーピング処理も同時に行うため、この処理をグルーピングソート処理とも呼び、特に本実施の形態のソート処理を基本グルーピングソート処理と呼ぶ場合がある。ビットスキャン処理は、スキャンデータを用いてマスクデータに対してマスクをかけるマスク処理とマスク処理の結果に応じたマスクデータの更新処理とを含む。例えば、スキャンダウン部140は、マスク処理を行うマスク処理部とマスクデータを更新するマスクデータ更新処理部を含んでいてもよい。スキャンダウン部140は、入力データを昇順にソートする場合、マスクデータに対しスキャンデータの反転データを使ってマスク(ANDNot)をかけ、前記入力データを降順にソートする場合、マスクデータに対しスキャンデータをそのまま使ってマスク(AND:論理積)をかける。
また、スキャンダウン部140は、マスク保持部130に保持されたマスタマスクをマスク処理に用いるマスクデータの初期値として、N個のスキャンデータに対するスキャンダウン処理(一巡のビットスキャン処理)を開始する。これにより、マスタマスクに対応するソート対象のデータ(レコード)の最小値(昇順の場合)または最大値(降順の場合)のデータを得る。スキャンダウン処理は、第1のビット列(例えばMSB)のスキャンデータから第Nのビット列(例えばLSB)のスキャンデータまで繰り返されるビットスキャン処理を含み、全てのデータのソート(スキャン)が完了するまでこのスキャンダウン処理を繰り返す。
スキャンダウン部140は、N個のスキャンデータに対するスキャンダウン処理の終了ごとに、スキャンダウン処理の結果に応じてマスタマスクを更新する。例えば、マスタマスクの更新では、現在のマスタマスクとスキャンダウン処理の結果の反転データ(NOT)をAND演算した結果により、マスタマスクを更新する。こうして更新されたマスタマスクは次のスキャンダウン処理によるソート対象となる。すなわち、マスタマスクを更新することにより、スキャン処理結果として出力された(同値として検索された)データを除いて、次のスキャンダウン処理で処理するデータ(レコード)を絞り込む。全てのデータがスキャン処理結果として出力された場合、すなわち更新されたマスタマスクが0となった場合、全データに対するスキャンが完了したため、スキャンダウン処理を終了する。
出力部150は、スキャンダウン部140によるスキャンダウン処理の結果を所定のデータ処理結果として出力する。本実施の形態では、スキャンダウン処理により得られる昇順または降順の同値データのソート結果を、入力データをグルーピングソート処理した結果(グルーピングソートデータ)として出力する。すなわち、スキャンダウン処理では、同値のデータ(レコード)を同時に検索できるため、ソートの結果には、同時に検索された同値のデータ群が同じグループとしてグルーピングされて出力される。換言すると、出力部150は、スキャンダウン処理ごとに得られる同値の入力データをソート順に逐次出力する。つまり、出力部150は、N個のスキャンデータに対するスキャンダウン処理が終了する毎に1グループずつグルーピング結果を出力することが出来る。これは関連する技術によるグルーピング処理には無い特性になる。当然ながら、内部にデータを蓄積し、全データのソート(スキャン)が完了したときに全てのグルーピング結果をまとめて出力してもよい。なお、グルーピング処理に限らず、同値のデータを集約する処理を含む、任意の集約処理に適用してもよい。
<昇順の基本グルーピングソート処理の処理フロー>
図3は、本実施の形態に係るデータ処理方法のフローチャートの一例を示している。図3は、スキャンダウンによる基本グルーピングソート処理を昇順に行う場合の例である。例えば、以下の処理は主にスキャンダウン部140により実行され、結果の出力処理が出力部150により実行されるが、これに限られない。
図3は、本実施の形態に係るデータ処理方法のフローチャートの一例を示している。図3は、スキャンダウンによる基本グルーピングソート処理を昇順に行う場合の例である。例えば、以下の処理は主にスキャンダウン部140により実行され、結果の出力処理が出力部150により実行されるが、これに限られない。
図3に示すように、まず、データ処理装置100は、スキャンダウン処理の初期設定として、変数Aにマスタマスク(Mask)を設定し、変数PにMSB位置を設定する(S101)。例えば、マスタマスクの初期値は全ビットがONである。変数Aは、処理対象のスキャンデータにより、マスクを更新することで、データを絞り込んでいくマスクデータである。変数Pは、取得(処理)するスキャンデータのビット列を示し、N個のスキャンデータから処理対象のスキャンデータを特定する。
次に、データ処理装置100は、ビットスキャン処理に含まれるマスク処理として、この例では昇順にソートするため、Pビット列のスキャンデータのNOT(論理否定)演算結果とマスクデータである変数AとをAND(論理積)演算し、そのAND演算結果を変数Bに設定する(S102)。変数Bは、スキャンデータによってマスクデータに対してマスクをかけたマスク処理結果である。
次に、データ処理装置100は、マスク処理結果である変数Bが0か否か、すなわち、変数Bの全ビットがOFFか否か判定する(S103)。変数Bが0の場合は、Pビット列のスキャンデータによるマスク処理の結果、絞り込みの結果として残るデータが無いことを示す。このため、変数Bが0になる場合は、絞り込み失敗として、絞り込み結果を示すマスクデータである変数Aを更新しない。逆に、S103で変数Bが0以外の場合、すなわち、変数BのいずれかのビットがONの場合は、絞り込みが成功したことを示し、この場合は、絞り込み結果を示すマスクデータである変数Aを変数Bにより更新する(S104)。
次に、データ処理装置100は、処理中のビット列である変数PがLSBか否か、すなわち、全ビットのスキャン(スキャンダウン処理)が終了したか否かを判定する(S105)。
S105で変数PがLSB以外の場合、すなわち、全ビットのスキャンが終了していない場合、データ処理装置100は、次のスキャンのために、変数PをLSB側に一つ(1ビット)移動し(S106)、S102以降で次のビット列に対するビットスキャン処理を繰り返す。
また、S105で変数PがLSBである場合、すなわち、全ビットのスキャンが終了した場合、S104で更新されたマスクデータ(0以外のマスク処理結果)である変数Aを出力する(S107)。この処理結果のうち、ビットがONの位置が、マスタマスクで指定された対象データにおける最小値のレコード位置を示しており、本実施の形態では、これを同値データのグルーピング結果として出力する。
次に、データ処理装置100は、マスタマスクとマスクデータである変数Aの反転データ(NOT)をAND演算し、その結果によりマスタマスクを更新する(S108)。この処理により、マスタマスクの中のONビット(処理対象のレコード位置に対応)のうち、今回の出力によって既に処理が完了したデータに対するレコード位置のビットがOFFになる。なお、この処理にはマスタマスクとマスクデータである変数Aの排他的論理和(XOR)演算を使っても良い。次に、データ処理装置100は、更新したマスタマスクが0か否か、すなわち、全データ処理(ソート処理)が終了したか否かを判定する(S109)。S109でマスタマスクが0以外の場合、すなわち、まだ処理すべきデータが残っている場合は、S101以降でスキャンダウン処理を繰り返す。また、S109でマスタマスクが0の場合、すなわち、全データ処理が終了した場合、処理を終了する。
図4は、本実施の形態に係るデータ処理方法のフローチャートの他の例を示している。図4は、図3に示したスキャンダウンによる基本グルーピングソート処理において、さらに、処理結果を早期検出する例である。
図4の例では、S104でマスクデータである変数Aを変数Bにより更新した後、更新されたマスクデータ(0以外のマスク処理結果)である変数AのONビットが一つのみか否かを判定する(S110)。S110で変数AのONビットが一つのみではない場合は、更に絞り込みを行える可能性があるため、S105に進み全ビットのスキャンが終了したか否か判定する。一方、S110で変数AのONビットが一つのみの場合は、それ以上の絞り込みが不可能なため、S107に進み、マスクデータ(マスク処理結果)である変数Aを出力する。このように、マスク処理結果のONビットが1つとなった場合は、この時点で対象のレコードが1つに絞られ、処理結果が求まっている。このため、図4のように、1ビットだけがONとなるマスク処理結果を検出することで、最終ビット(LSB)までスキャンすることなく処理結果を求めることができ、処理ステップを削減できる。
<昇順の基本グルーピングソート処理の動作例>
図5A及び図5Bは、本実施の形態に係るデータ処理の動作例を示している。図5A及び図5Bは、図3に示したようにスキャンダウンによる基本グルーピングソート処理を昇順に行う場合の例である。
図5A及び図5Bは、本実施の形態に係るデータ処理の動作例を示している。図5A及び図5Bは、図3に示したようにスキャンダウンによる基本グルーピングソート処理を昇順に行う場合の例である。
図5A及び図5Bの例では、レコード番号(RecNo)0~5の6レコードのデータが入力される。レコード番号0のデータ値が9、レコード番号1のデータ値が6、レコード番号2のデータ値が3、レコード番号3のデータ値が6、レコード番号4のデータ値が9、レコード番号5のデータ値が6である。各データは4ビットデータであり、各データのビット列(ビット位置)を[0]~[3](LSB~MSB)とする。また、スキャンデータ及びマスクデータはレコード数である6ビットとなる。
図5Aに示すように、4個のスキャンデータに対し1回目のスキャンダウン処理を行う。1回目のスキャンダウン処理では、マスタマスクの初期値は、“111111”であり(S201)、全データ(レコード番号0~5)がソート対象となる。
1回目のスキャンダウン処理では、まず、ビット列[3](MSB)のスキャンデータを使いビットスキャン処理を行う。具体的には、マスタマスク“111111”をマスクデータとして、ビット列[3]のスキャンデータ“100010”をNOT演算した結果の“011101”をマスクにかけることで、マスク結果は“011101”となる(S202)。
次に、ビット列[2]のスキャンデータを使いビットスキャン処理を行う。具体的には、ビット列[3]のマスク結果“011101”をマスクデータとして、ビット列[2]のスキャンデータ“010101”をNOT演算した結果“101010”をマスクにかけ、マスク結果は“001000”となる(S203)。
次に、ビット列[1]のスキャンデータを使いビットスキャン処理を行う。具体的には、ビット列[2]のマスク結果“001000”をマスクデータとしてビット列[1]のスキャンデータ“011101”をNOT演算した結果“100010”をマスクにかけ、マスク結果はオール0(“000000”)となる(S204)。このように、マスク結果がすべて0に成ってしまう場合は、前記フローチャートのS103の判定の通り、マスク結果の更新は行わず、直前の有効なマスクであるビット列[2]のマスク結果である“001000”を次の処理のマスクとして引き継ぐ。
次に、ビット列[0](LSB)のスキャンデータを使いビットスキャン処理を行う。この前の処理で、ビット位置[1]のマスク結果が0であったため、引き継いだビット列[2]のマスク結果“001000”をマスクデータとして、ビット列[0]のスキャンデータ“101010”をNOT演算した結果“010101”をマスクにかけ、マスク結果はオール0となる(S205)。ここでも同様に、マスク結果がすべて0に成ってしまうため、マスク結果の更新は行わず、直前の有効なマスクであるビット列[2]のマスク結果である“001000”を次の処理のマスクとして引き継ぐ。
次に、1回目のスキャンダウン処理が終了したため、処理結果を出力する。具体的には、直前で引き継いだマスク結果である“001000”を1回目のスキャンダウン処理の結果として出力する(S206)。すなわち、“001000”のONビットに対応するレコード番号2のデータが最小値のデータ(第1のグルーピング結果)となる。
次に、1回目のスキャンダウン処理結果によりマスタマスクを更新する。具体的には、現在のマスタマスク“111111”に対し、1回目のスキャンダウン処理結果をNOT演算した値である“110111”でマスクをかけ、そのマスク結果“110111”を次の2回目のスキャンダウン用の新しいマスタマスクとする(S207)。なお、この演算は、図3のフローチャートのS108で示すように、現在のマスタマスク“111111”と1回目のスキャンダウン処理結果“001000”をXOR演算した結果でも同じである。
次に、2回目のスキャンダウン処理を行う。2回目のスキャンダウン処理では、新しいマスタマスク“110111”を用いて(S211)、レコード番号0、1、3、4、5のデータをソート対象として、4個のスキャンデータを使ってビットスキャン処理を行う。1回目のスキャンダウン処理と同様に、ビット列[3]のスキャンデータを使いビットスキャン処理を行うと、マスク結果は“010101”となり(S212)、ビット列[2]のスキャンデータを使いビットスキャン処理を行うと、マスク結果はオール0となり(S213)、ビット列[1]のスキャンデータを使いビットスキャン処理を行うと、マスク結果はオール0となり(S214)、ビット列[0]のスキャンデータを使いビットスキャン処理を行うと、マスク結果は“010101”となる(S215)。細かな説明は省略しているが、1回目同様、ビットスキャンの結果がすべて0に成る場合は、マスクの更新は行わず、直前の有効なマスクを引き継いだ上で、次のビットスキャン処理を行う。
この結果2回目のスキャンダウン処理の結果は、ビット列[0]のマスク結果“010101”となる(S216)。すなわち、“010101”のONビットのレコード番号1、3、5に対応するデータが2番目に小さいデータ(第2のグルーピング結果)として出力される。また、現在のマスタマスク“110111”と2回目のスキャンダウン処理結果をNOT演算した結果“101010”とをマスクし、次の3回目のスキャンダウン用の新しいマスタマスクを“100010”とする(S217)。
次に、3回目のスキャンダウン処理を行う。3回目のスキャンダウン処理では、新しいマスタマスク“100010”を用いて(S221)、レコード番号0、4のデータをソート対象として、4個のスキャンデータを使ってビットスキャン処理を行う。1回目のスキャンダウン処理と同様に、ビット列[3]のスキャンデータを使いビットスキャン処理を行うと、マスク結果はオール0となり(S222)、ビット列[2]のスキャンデータを使いビットスキャン処理を行うと、マスク結果は“100010”となり(S223)、ビット列[1]のスキャンデータを使いビットスキャン処理を行うと、マスク結果は“100010”となり(S224)、ビット列[0]のスキャンデータを使いビットスキャン処理を行うと、マスク結果はオール0となる(S225)。2回目同様、ビットスキャンの結果がすべて0に成る場合は、マスクの更新は行わず、直前の有効なマスクを引き継いだ上で、次のビットスキャン処理を行う。
3回目のスキャンダウン処理の結果は、ビット列[0]のマスク結果が0であるため、ビット列[1]のマスク結果“100010”を引き継いだものとなる(S226)。すなわち、“100010”のONビットのレコード番号0、4に対応するデータが3番目に小さいデータ(第3のグルーピング結果)として出力される。また、現在のマスタマスク“100010”と3回目のスキャンダウン処理の結果をNOT演算した結果“011101”をマスクすると結果が“000000”となり、全ビットがOFFのため、処理を終了する(S227)。
図5A及び図5Bに示すように、各スキャンダウン処理の結果において、同値のレコード(データ)については同時に該当するビットがONとなるため、スキャンダウン処理の結果を同値のグルーピング結果として出力する。図5A及び図5Bの例では、昇順のグルーピングソート処理の結果は、個数=3、レコード番号=(2),(1,3,5),(0,4)となる。
なお、グルーピング結果(ビットスキャン処理の結果)のONビットの個数を数えることで、グループに属するレコードのカウント値を取得(出力)してもよい。また、グルーピング結果を使い、それらの該当するレコードの特定の要素(データ値)を加算することで合計を求めてもよいし、その合計をグループに属するレコード件数で割ることで平均を求めてもよい。さらに、グルーピングの結果から、各々一つのみのデータを抽出することで、重複排除の結果(ユニーク値の集合)を取得してもよい。
<降順の基本グルーピングソート処理の処理フロー>
図6は、本実施の形態に係るデータ処理方法のフローチャートの別の例を示している。図6は、スキャンダウンによる基本グルーピングソート処理を降順に行う場合の例である。図6の例では、図3の昇順のフローチャートに対し、S102aの処理のみが異なる。すなわち、S102aにおいて、マスク処理として、降順にソートするため、マスクデータである変数AとPビット列のスキャンデータをそのままAND演算し、そのAND演算結果を変数Bに設定する。
図6は、本実施の形態に係るデータ処理方法のフローチャートの別の例を示している。図6は、スキャンダウンによる基本グルーピングソート処理を降順に行う場合の例である。図6の例では、図3の昇順のフローチャートに対し、S102aの処理のみが異なる。すなわち、S102aにおいて、マスク処理として、降順にソートするため、マスクデータである変数AとPビット列のスキャンデータをそのままAND演算し、そのAND演算結果を変数Bに設定する。
<降順の基本グルーピングソート処理の動作例>
図7A及び図7Bは、本実施の形態に係るデータ処理の他の動作例を示している。図7A及び図7Bは、図6に示したようにスキャンダウンによる基本グルーピングソート処理を降順に行う場合の例である。図7A及び図7Bの例では、図5A及び図5Bと同じデータが入力される。
図7A及び図7Bは、本実施の形態に係るデータ処理の他の動作例を示している。図7A及び図7Bは、図6に示したようにスキャンダウンによる基本グルーピングソート処理を降順に行う場合の例である。図7A及び図7Bの例では、図5A及び図5Bと同じデータが入力される。
図7Aに示すように、図5Aと同様、マスタマスク“111111により、1回目のスキャンダウンを行う(S301)。ビット列[3]のビットスキャン処理では、マスタマスク“111111”をマスクデータとして、ビット列[3]のスキャンデータ“100010”をマスクにかけ、マスク結果が“100010”となる(S302)。ビット列[2]のビットスキャン処理では、ビット列[3]のマスク結果“100010”をマスクデータとして、ビット列[2]のスキャンデータ“010101”をマスクにかけ、マスク結果がオール0(“000000”)となる(S303)。マスク結果がすべて0に成ってしまうため、前記図5Aの昇順処理で示したS204同様、マスク結果の更新は行わず、直前の有効なマスクであるビット列[3]のマスク結果である“ 100010”を次の処理のマスクとして引き継ぐ。
ビット列[1]のビットスキャン処理では、引き継いだマスク結果“100010”をマスクデータとして、ビット位置[1]のスキャンデータ“011101”をマスクにかけ、マスク結果がオール0となる(S304)。ここでもマスク結果がすべて0になるため、ビット列[3]のマスク結果“100010”をマスクデータとして引き継ぎ、ビット列[0]のスキャンデータ“101010”をマスクにかけ、マスク結果が“100010”となる(S305)。
1回目のスキャンダウン処理の結果は、ビット列[0]のマスク結果“100010”となる(S306)。すなわち、“100010”のONビットのレコード番号0、4に対応するデータが最大値のデータ(第1のグルーピング結果)として出力される。また、現在のマスタマスク“111111”と1回目のスキャンダウン処理結果をNOT演算した結果“011101”とをマスクすることにより、次の2回目のスキャンダウン用の新しいマスタマスクを“011101”とする(S307)。
次に、2回目のスキャンダウン処理を行う。2回目のスキャンダウン処理では、新しいマスタマスク“011101”を用いて(S311)、レコード番号1、2、3、5のデータをソート対象として、1回目のスキャンダウン処理と同様にビットスキャン処理を行う。ビット列[3]のスキャンデータのマスク結果はオール0となり(S312)、ビット列[2]のスキャンデータのマスク結果は“010101”となり(S313)、ビット列[1]のスキャンデータのマスク結果は“010101”となり(S314)、ビット列[0]のスキャンデータのマスク結果はオール0となる(S315)。なお、前記同様、ビットスキャンの結果がすべて0に成る場合は、マスクの更新は行わず、直前の有効なマスクを引き継いだ上で、次のビットスキャン処理を行う。
2回目のスキャンダウン処理の結果は、ビット列[0]のマスク結果が0であるため、ビット列[1]のマスク結果“010101”となる(S316)。すなわち、“010101”のONビットのレコード番号1、3、5が2番目に大きいデータ(第2のグルーピング結果)として出力される。また、現在のマスタマスク“011101”と2回目のスキャンダウン処理結果をNOT演算した結果“101010”をマスクすることにより、次の3回目のスキャンダウン用の新しいマスタマスクを“001000”とする(S317)。
次に、3回目のスキャンダウン処理を行う。3回目のスキャンダウン処理では、新しいマスタマスク“001000”を用いて(S321)、レコード番号2のデータをソート対象として、1回目のスキャンダウン処理と同様にビットスキャン処理を行う。ビット列[3]のスキャンデータのマスク結果はオール0となり(S322)、ビット列[2]のスキャンデータのマスク結果はオール0となり(S323)、ビット列[1]のスキャンデータのマスク結果は“001000”となり(S324)、ビット列[0]のスキャンデータのマスク結果は“001000”となる(S325)。ここでも、前記同様、ビットスキャンの結果がすべて0に成る場合は、マスクの更新は行わず、直前の有効なマスクを引き継いだ上で、次のビットスキャン処理を行う。
3回目のスキャンダウン処理の結果は、ビット列[0]のマスク結果“001000”となる(S326)。すなわち、“001000”のONビットのレコード番号2に対応するデータが3番目に大きいデータ(第3のグルーピング結果)として出力される。また、現在のマスタマスク“001000”と3回目のスキャンダウン処理結果をNOT演算した結果“110111”とのマスク結果が“000000”となり、全ビットがOFFのため、処理を終了する(S327)。図7A及び図7Bの例では、降順のグルーピングソート処理の結果は、個数=3、レコード番号=(0,4),(1,3,5),(2)となる。
<本実施の形態の効果>
以上のように、本実施の形態における基本グルーピングソート処理では、ビットスキャン方向に対して直交する形で格納したデータのビットに対し、単純にMSBを開始位置として、LSB方向に対してデータをスキャンダウンしていくことにより、最終的なグルーピングデータを抽出することができる。また、この動作に、未処理データを示すマスタマスクを組み合わせ、スキャンダウンの結果をマスタマスクから減算し、マスタマスクの有効ビットが無くなるまで、ループ処理を繰り返すことにより、全グルーピングデータを順次抽出することができる。このような処理により、効率よく高速にグルーピング処理を行うことが可能となる。
以上のように、本実施の形態における基本グルーピングソート処理では、ビットスキャン方向に対して直交する形で格納したデータのビットに対し、単純にMSBを開始位置として、LSB方向に対してデータをスキャンダウンしていくことにより、最終的なグルーピングデータを抽出することができる。また、この動作に、未処理データを示すマスタマスクを組み合わせ、スキャンダウンの結果をマスタマスクから減算し、マスタマスクの有効ビットが無くなるまで、ループ処理を繰り返すことにより、全グルーピングデータを順次抽出することができる。このような処理により、効率よく高速にグルーピング処理を行うことが可能となる。
特に、本実施の形態のグルーピング処理では、上記のように、処理対象のデータをONビットの位置で示すマスタマスクを使用し、そのマスタマスクにより初期化されたマスクデータに対し、データの各ビット位置をMSBからLSBに向かって、降順ソートの場合はAND演算を行い、昇順ソートの場合はANDNot演算を行う。そして、この演算の途中で、マスクデータが0になる場合は、単純にその回の演算結果は捨てて、演算前のマスクデータを引き継ぐだけでよい。これにより、特許文献1及び2、非特許文献1及び2のような関連する技術と比べて、大幅に処理ステップ数を減らすことができる。そもそも、関連する技術には、グルーピング処理に関する記載もないため、本実施の形態のようにグルーピング処理に適用することはできない。
また、特許文献1及び2のような関連する技術では、各ビット位置が2のn乗に相当する値を持つことを前提としている。このため、BCD(2進化10進)コードを使用するような形態では処理が行えるが、BCDコードに変換できない浮動小数点のようなデータに対しては、同じ形で処理を行うことができない。例えば、浮動小数点数値(IEEE754形式)は、符号ビット、指数部、仮数部から構成されているため、関連する技術のロジックで使われている、特定のビットが2のn乗に相当するという理論は成立しない。しかしながら、浮動小数点数値では、符号ビットを除いた他のビットの配置は、より上位のビットが立っている数値は、ビットが立っていない数値に対して大きい値になるように設計されている。従って、スキャンダウンを使った本実施の形態の方式では論理に矛盾が生じることはなく、浮動小数点の最大、最小についても検出が可能になる。同様に、辞書式の文字列に対しても適用が可能になる。
さらに、本実施の形態でメモリに格納されるデータの横方向(1ワード)のビットサイズは、例えばIntel(登録商標)の最近のCPU(Central Processing Unit)を利用する場合であれば、一般のInt系のデータの8ビット、16ビット、32ビット、64ビットとすることができる。また、AVXと呼ぶSIMD(Single Instruction/Multiple Data)命令で利用できる256ビットや512ビットとすることもでき、Arm(登録商標)であればNeonと呼ぶSIMDで利用できる128ビットとすることも可能である。また、特許文献1及び2のDBPを利用する場合は、さらに大きなビット幅を使って処理することができる。加えて、最近利用が広まっているGPGPU(General-purpose computing on graphics processing units)についても、数千のコアに対しビット演算系の命令を使って処理を行うことで、GPGPUの並列処理の特性を生かした処理を行うことが可能である。一方、Java(登録商標)のような中間コードを経由して実行するような言語の場合は、SIMDを有効に使うVectorAPIなどの手段を使うことで、実施が可能になる。さらに、既存のハードウェア上でソフトウェアによる演算ロジックとして動作が可能なことから、その内容をFPGA(Field Programmable Gate Array)に組み込んで、ハードウェア的な回路として実施することも可能である。従って、本実施の形態は、モバイルを含む組み込み系から、大規模なクラスターを構成するクラウドシステムまで、ほぼ全てのコンピュータシステムに適用可能である。特にクラスター構成では、グルーピング結果がソート済みの状態で逐次出力されるため、上位の集約ノードでは、下位ノードのグルーピング結果を、単純なマージ処理によってまとめるだけで、全体のグルーピング結果についても、逐次出力を行うことが出来る。
(実施の形態2)
次に、実施の形態2について説明する。本実施の形態では、実施の形態1のデータ処理装置において、さらにデータ処理を中断及び再開する例について説明する。
次に、実施の形態2について説明する。本実施の形態では、実施の形態1のデータ処理装置において、さらにデータ処理を中断及び再開する例について説明する。
<データ処理装置の構成>
図8は、本実施の形態に係るデータ処理装置の構成例を示している。図8に示すように、本実施の形態に係るデータ処理装置100は、実施の形態1の構成に加えて、マスク退避部131を備えている。マスク退避部131は、スキャンダウン処理の中断時、マスク保持部130のマスタマスクを退避する。例えば、スキャンダウン処理結果により任意の数(指定件数)のデータが得られたときに、マスタマスクを退避して、処理を中断し、結果を出力してもよい。また、スキャンダウン処理の再開時、マスク退避部131に退避されたマスタマスクをマスク保持部130に回復し、回復したマスタマスクを用いて、スキャンダウン処理を行う。
図8は、本実施の形態に係るデータ処理装置の構成例を示している。図8に示すように、本実施の形態に係るデータ処理装置100は、実施の形態1の構成に加えて、マスク退避部131を備えている。マスク退避部131は、スキャンダウン処理の中断時、マスク保持部130のマスタマスクを退避する。例えば、スキャンダウン処理結果により任意の数(指定件数)のデータが得られたときに、マスタマスクを退避して、処理を中断し、結果を出力してもよい。また、スキャンダウン処理の再開時、マスク退避部131に退避されたマスタマスクをマスク保持部130に回復し、回復したマスタマスクを用いて、スキャンダウン処理を行う。
<昇順のソート処理の動作例>
図9A及び図9Bは、本実施の形態に係るデータ処理の動作例を示している。図9A及び図9Bは、実施の形態1と同様にスキャンダウンによる基本グルーピングソート処理を昇順に行う際に、処理を中断し、その後、処理を再開する場合の例である。なお、ここではデータが単純にソートされる例を示すが、これに限らず、実施の形態1と同様にグルーピングソートすることが可能である。なお、以降の説明では、前記で示してきた、ビットスキャンの結果がすべて0に成る場合は、マスクの更新は行わず、直前の有効なマスクを引き継いだ上で、次のビットスキャン処理を行うという処理は、処理中に含まれているものとして説明する。
図9A及び図9Bは、本実施の形態に係るデータ処理の動作例を示している。図9A及び図9Bは、実施の形態1と同様にスキャンダウンによる基本グルーピングソート処理を昇順に行う際に、処理を中断し、その後、処理を再開する場合の例である。なお、ここではデータが単純にソートされる例を示すが、これに限らず、実施の形態1と同様にグルーピングソートすることが可能である。なお、以降の説明では、前記で示してきた、ビットスキャンの結果がすべて0に成る場合は、マスクの更新は行わず、直前の有効なマスクを引き継いだ上で、次のビットスキャン処理を行うという処理は、処理中に含まれているものとして説明する。
図9A及び図9Bの例では、レコード番号0~3の4レコードのデータが入力される。レコード番号0のデータ値が0、レコード番号1のデータ値が5、レコード番号2のデータ値が10、レコード番号3のデータ値が3である。各データはビット列[0]~[3]の4ビットデータであり、スキャンデータ及びマスクデータも4ビットである。
図9Aに示すように、実施の形態1と同様、マスタマスク“1111”により、1回目のスキャンダウンを行う(S401)。ビット列[3]のスキャンデータのマスク結果は“1101”となり(S402)、ビット列[2]のスキャンデータのマスク結果は“1001”となり(S403)、ビット列[1]のスキャンデータのマスク結果は“1000”となり(S404)、ビット列[0]のスキャンデータのマスク結果は“1000”となる(S405)。
1回目のスキャンダウン処理の結果は、ビット列[0]のマスク結果“1000”となる(S406)。すなわち、“1000”のONビットのレコード番号0が最小値のデータとして出力される。また、現在のマスタマスク“1111”と1回目のスキャンダウン処理結果をNOT演算した結果“0111”を使いマスクすることにより、次の2回目のスキャンダウン用の新しいマスタマスクを“0111”とする(S407)。
次に、2回目のスキャンダウン処理では、新しいマスタマスク“0111”を用いて(S411)、レコード番号1、2、3のデータをソート対象として、1回目のスキャンダウン処理と同様にビットスキャン処理を行う。ビット列[3]のスキャンデータのマスク結果は“0101”となり(S412)、ビット列[2]のスキャンデータのマスク結果は“0001”となり(S413)、ビット列[1]のスキャンデータのマスク結果はオール0(“0000”)となり(S414)、ビット列[0]のスキャンデータのマスク結果はオール0となる(S415)。
2回目のスキャンダウン処理の結果は、ビット列[0]及び[1]のマスク結果が0であるため、ビット列[2]のマスク結果“0001”となる(S416)。すなわち、“0001”のオンビットのレコード番号3が2番目に小さいデータとして出力される。また、現在のマスタマスク“0111”と2回目のスキャンダウン処理結果をNOT演算した結果“1110”とのマスクにより、次の3回目のスキャンダウン用の新しいマスタマスクを“0110”とする(S417)。スキャンダウン処理を中断する場合、この時点のマスタマスク“0110”をマスク退避部131に退避する(S418)。この例は、2個のデータが得られた場合に処理を中断する例であり、中断時のソート処理の結果は、個数=2、レコード番号=(0),(3)となる。
その後、スキャンダウン処理を再開する場合、マスク退避部131からマスタマスク“0110”を回復する(S420)。次に、3回目のスキャンダウン処理では、回復したマスタマスク“0110”を用いて(S421)、レコード番号1、2のデータをソート対象として、1回目のスキャンダウン処理と同様にビットスキャン処理を行う。ビット列[3]のスキャンデータのマスク結果は“0100”となり(S422)、ビット列[2]のスキャンデータのマスク結果はオール0となり(S423)、ビット列[1]のスキャンデータのマスク結果は“0100”となり(S424)、ビット列[0]のスキャンデータのマスク結果はオール0となる(S425)。
3回目のスキャンダウン処理の結果は、ビット列[0]のマスク結果が0であるため、ビット位置[1]のマスク結果“0100”となる(S426)。すなわち、“0100”のONビットのレコード番号1が3番目に小さいデータとして出力される。また、現在のマスタマスク“0110”と3回目のスキャンダウン処理結果をNOT演算した結果“1011”とのマスクにより、次の4回目のスキャンダウン用の新しいマスタマスクを“0010”とする(S427)。
次に、4回目のスキャンダウン処理を行う。4回目のスキャンダウン処理では、新しいマスタマスク“0010”を用いて(S431)、レコード番号2のデータをソート対象として、1回目のスキャンダウン処理と同様にビットスキャン処理を行う。ビット列[3]のスキャンデータのマスク結果はオール0となり(S432)、ビット列[2]のスキャンデータのマスク結果は“0010”となり(S433)、ビット列[1]のスキャンデータのマスク結果はオール0となり(S434)、ビット列[0]のスキャンデータのマスク結果は“0010”となる(S435)。
4回目のスキャンダウン処理の結果は、ビット列[0]のマスク結果“0010”となる(S436)。すなわち、“0010”のONビットのレコード番号2が4番目に小さいデータとして出力される。また、現在のマスタマスク“0010”と4回目のスキャンダウン処理結果をNOT演算した結果“1101”とのマスク結果が“0000”となり、全ビットがOFFのため、処理を終了する(S437)。再開後のソート処理の結果は、個数=2、レコード番号=(1),(2)となる。
<本実施の形態の効果>
以上のように、本実施の形態では、スキャンダウンによるグルーピングソート処理において、グルーピングにより任意の数のデータを取得した時点で、一旦マスタマスクを退避しておくことで、グルーピングソート処理を中断し、それまでのグルーピングソート結果を出力することができる。これにより、特定のグルーピングキーにランキング評価値が格納されているような場合、この値の上位、もしくは下位から指定件数だけを、効率よく取得することが可能になる。
以上のように、本実施の形態では、スキャンダウンによるグルーピングソート処理において、グルーピングにより任意の数のデータを取得した時点で、一旦マスタマスクを退避しておくことで、グルーピングソート処理を中断し、それまでのグルーピングソート結果を出力することができる。これにより、特定のグルーピングキーにランキング評価値が格納されているような場合、この値の上位、もしくは下位から指定件数だけを、効率よく取得することが可能になる。
さらに、退避しておいたマスタマスクを回復し、スキャンダウン処理を再開することで、中断前の状態からの継続(インクリメンタル)としてのグルーピングソート結果を取得し、中断位置から処理を再開することができる。グルーピングソート結果は必ず昇順または降順で先頭から順番に出力されるため、先頭から10件や100件などの件数のデータのみを取得することも可能で、その場合の処理コストは取得する件数に比例する。なお、マスタマスクは処理対象を絞り込む機能を持つため、何らかの事前絞り込み処理の結果によりマスタマスクを設定(対象レコードのビットのみON)してもよい。
(実施の形態3)
次に、実施の形態3について説明する。本実施の形態では、実施の形態1、2のデータ処理装置において、ビットスキャン処理の開始前に処理対象のデータを絞り込むことでポジショナルグルーピング処理を行う例について説明する。
次に、実施の形態3について説明する。本実施の形態では、実施の形態1、2のデータ処理装置において、ビットスキャン処理の開始前に処理対象のデータを絞り込むことでポジショナルグルーピング処理を行う例について説明する。
<データ処理装置の構成>
図10は、本実施の形態に係るデータ処理装置の構成例を示している。図10に示すように、本実施の形態に係るデータ処理装置100は、実施の形態1の構成に加えて、絞り込み部132を備えている。
図10は、本実施の形態に係るデータ処理装置の構成例を示している。図10に示すように、本実施の形態に係るデータ処理装置100は、実施の形態1の構成に加えて、絞り込み部132を備えている。
絞り込み部132は、グルーピングソート処理を行う前に、グルーピングソート処理の対象となるデータを所定の範囲に絞り込む。絞り込み部132は、入力データからソート対象のデータを絞り込み、絞り込み結果に応じてマスク保持部130のマスタマスクを更新する。絞り込み部132は、N個のスキャンデータに対しビット列順にビットスキャン処理(すなわち、スキャンダウン処理)を行うことで、入力データから所定の範囲のデータを抽出する。例えば、昇順にソートする場合、絞り込みの基準値を示す絞り込み開始データよりも大きい(または基準値以上の)データを抽出し、降順にソートする場合、絞り込み開始データよりも小さい(または基準値以下の)データを抽出する。これにより、絞り込み開始データの位置からグルーピングソートを開始するポジショナルグルーピング処理を行うことができる。
<昇順のポジショナルグルーピングソート処理の処理フロー>
図11は、本実施の形態に係るデータ処理方法のフローチャートを示している。図11は、昇順のポジショナルグルーピング処理の例であり、絞り込み開始データよりも大きいデータに絞り込み(大なり検索し)、絞り込んだデータをグルーピングソートする例である。例えば、以下の処理は主に絞り込み部132により実行されるが、これに限られない。
図11は、本実施の形態に係るデータ処理方法のフローチャートを示している。図11は、昇順のポジショナルグルーピング処理の例であり、絞り込み開始データよりも大きいデータに絞り込み(大なり検索し)、絞り込んだデータをグルーピングソートする例である。例えば、以下の処理は主に絞り込み部132により実行されるが、これに限られない。
図11に示すように、まず、データ処理装置100は、絞り込み処理の初期設定として、スタートマスク(Start_mask)を0に初期化し、変数PにMSB位置を設定する(S501)。スタートマスクは、絞り込み結果により、グルーピングソート処理の開始位置を設定するためのマスクデータである。変数Pは、実施の形態1と同様に、取得するスキャンデータのビット列を示す。
次に、データ処理装置100は、絞り込み開始データのPビット列のビットが0(OFF)か否か判定する(S502)。絞り込み開始データは、データを所定範囲に絞り込む基準値であり、昇順ソートの場合、抽出(検索)するデータの最小値を示し、降順ソートの場合、抽出するデータの最大値を示す。
S502で絞り込み開始データのPビット列のビットが0の場合、データ処理装置100は、テンポラリ変数(Tmp)にマスタマスク(Mask)を設定し、Pビット列のスキャンデータのNOT演算結果とマスタマスクとをAND演算した結果によりマスタマスクを更新し、続けてテンポラリ変数とマスタマスクとをXOR演算し、さらにそのXOR演算結果とスタートマスクとをOR(論理和)演算した結果によりスタートマスクを更新する(S503)。また、S502で絞り込み開始データのPビット列のビットが0以外の場合、データ処理装置100は、Pビット列のスキャンデータとマスタマスクとをAND演算した結果によりマスタマスクを更新する(S504)。
S503またはS504の後、データ処理装置100は、処理中のビット列である変数PがLSBか否か、すなわち、全ビットのスキャンが終了したか否か判定する(S505)。S505で変数PがLSB以外の場合、すなわち、全ビットのスキャンが終了していない場合、データ処理装置100は、次のスキャンのために、変数PをLSB側に一つ移動し(S506)、S502以降で次のビット列に対するビットスキャン処理(絞り込み処理)を繰り返す。また、S505で変数PがLSBである場合、すなわち、全ビットのスキャンが終了した場合、データ処理装置100は、絞り込み開始データよりも大きいデータの検索結果(大なり検索結果)としてスタートマスクをマスタマスクに設定する(S507)。なお、絞り込み開始データ以上の検索結果(大なりイコール検索結果)とする場合、求めたスタートマスクと現在のマスタマスクをOR演算した結果をマスタマスクに設定する。その後、実施の形態1で示した昇順のグルーピングソート処理を行う(S508)。
<大なり検索処理の動作例>
図12は、本実施の形態に係るデータ処理の動作例を示している。図12は、昇順のポジショナルグルーピングソート処理のための絞り込み処理の例であり、比較値よりも大きいデータを検索する大なり検索の例である。
図12は、本実施の形態に係るデータ処理の動作例を示している。図12は、昇順のポジショナルグルーピングソート処理のための絞り込み処理の例であり、比較値よりも大きいデータを検索する大なり検索の例である。
図12の例では、大なり検索のための比較値(絞り込み開始データ)は5であり、レコード番号0~3の4レコードのデータが入力される。レコード番号0のデータ値が3、レコード番号1のデータ値が7、レコード番号2のデータ値が5、レコード番号3のデータ値が15である。各データはビット列[0]~[3]の4ビットのデータあり、スキャンデータ及びマスクデータは4ビットである。
図12に示すように、マスタマスク(ExistMask)の初期値は“1111”であり(S601)、スタートマスク(GreaterMask)の初期値は“0000”である(S602)。
まず、比較値のビット列[3]が0であるため、ビット列[3]のスキャンデータに対しビットスキャン処理及びスタートマスク更新処理を行う。具体的には、マスタマスク“1111”をマスクデータとして、ビット列[3]のスキャンデータ“0001”をNOT演算した結果“1110”をマスクにかけ、マスク結果が“1110”となる(S603)。さらに、マスクデータ“1111”とマスク結果“1110”をXOR演算し、XOR結果“0001”とスタートマスク“0000”をOR演算し、その結果によりスタートマスクを“0001”とする(S604)。
次に、比較値のビット列[2]が1であるため、ビット列[2]のスキャンデータに対しビットスキャン処理を行う。具体的には、ビット列[3]のマスク結果“1110”をマスクデータとして、ビット列[2]のスキャンデータ“0111”をマスクにかけ、マスク結果が“0110”となる(S605)。
次に、比較値のビット列[1]が0であるため、ビット列[1]のスキャンデータに対しビットスキャン処理及びスタートマスク更新処理を行う。具体的には、ビット列[2]のマスク結果“0110”をマスクデータとして、ビット列[1]のスキャンデータ“1101”をNOT演算した結果“0010”をマスクにかけ、マスク結果が“0010”となる(S606)。さらに、マスクデータ“0110”とマスク結果“0010”をXOR演算し、XOR結果“0100”とスタートマスク“0001”をOR演算し、その結果によりスタートマスクを“0101”とする(S607)。
次に、比較値のビット列[0]が1であるため、ビット列[0]のスキャンデータに対しビットスキャン処理を行う。具体的には、ビット列[1]のマスク結果“0010”をマスクデータとして、ビット列[0]のスキャンデータ“1111”にマスクをかけ、マスク結果が“0010”となる(S608)。
これにより、ビット列[0]のマスク結果“0010”が同値検索の結果となる(S609)。すなわち、“0010”のONビットのレコード番号2が比較値5と同値のデータとなる。また、ビット列[1]で更新されたスタートマスク“0101”が大なり検索の結果となる(S610)。すなわち、“0101”のONビットのレコード番号1、3が比較値5よりも大きいデータとなる。さらに、大なりイコールの検索結果とする場合は、同値の結果“0010”とスタートマスク“0101”をOR演算することにより、“0111”が得られ、これが大なりイコールの検索結果となる。
このように、スタートマスク(GreaterMask)を用意し、このスタートマスクに、比較値のビットがOFFのビット列について、検索先のデータビットがONの箇所を論理和(OR)していくことにより、比較値よりも大きいデータを検索する大なり検索の結果が得られる。本実施の形態では、この検索処理により得られるスタートマスクをグルーピングソート(昇順)開始時のマスクデータとする。また、大なりイコール(比較値以上)のデータを検索する場合は、大なり検索結果と同値結果を論理和演算した結果をマスクデータとする。なお、図12において、ビットスキャン処理でマスク結果が0となった場合、未処理データが無いと判断して、検索処理を早期終了してもよい。
<降順のポジショナルグルーピングソート処理の処理フロー>
図13は、本実施の形態に係るデータ処理方法のフローチャートの他の例を示している。図13は、降順のポジショナルグルーピング処理の例であり、絞り込み開始データよりも小さいデータに絞り込み(小なり検索)し、絞り込んだデータをグルーピングソートする例である。図13では、図11の昇順のフローチャートに対し、S502a、S503a、S504a、S508aが異なる。
図13は、本実施の形態に係るデータ処理方法のフローチャートの他の例を示している。図13は、降順のポジショナルグルーピング処理の例であり、絞り込み開始データよりも小さいデータに絞り込み(小なり検索)し、絞り込んだデータをグルーピングソートする例である。図13では、図11の昇順のフローチャートに対し、S502a、S503a、S504a、S508aが異なる。
すなわち、降順の場合、S501の後、データ処理装置100は、絞り込み開始データのPビット列のビットが1(ON)か否か判定する(S502a)。S502aで絞り込み開始データのPビット列のビットが1の場合、データ処理装置100は、テンポラリ変数(Tmp)にマスタマスク(Mask)を設定し、続けてPビット列のスキャンデータとマスタマスクとをAND演算した結果によりマスタマスクを更新し、さらにテンポラリ変数とマスタマスクとをXOR演算し、そのXOR演算結果とスタートマスクとをOR演算した結果によりスタートマスクを更新する(S503a)。また、絞り込み開始データのPビット列のビットが1以外の場合、データ処理装置100は、Pビット列のスキャンデータのNOT演算結果とマスタマスクとをAND演算した結果によりマスタマスクを更新する(S504a)。さらに、S507のマスタマスクの更新後、実施の形態1で示した降順のグルーピングソート処理を行う(S508a)。
<小なり検索処理の動作例>
図14は、本実施の形態に係るデータ処理の他の動作例を示している。図14は、降順のポジショナルグルーピングソート処理のための絞り込み処理の例であり、比較値よりも小さいデータを検索する小なり検索の例である。図14の例では、小なり検索のための比較値(絞り込み開始データ)及び入力されるデータは図12と同じである。
図14は、本実施の形態に係るデータ処理の他の動作例を示している。図14は、降順のポジショナルグルーピングソート処理のための絞り込み処理の例であり、比較値よりも小さいデータを検索する小なり検索の例である。図14の例では、小なり検索のための比較値(絞り込み開始データ)及び入力されるデータは図12と同じである。
図14に示すように、マスタマスク(ExistMask)の初期値は“1111”であり(S701)、スタートマスク(LessMask)の初期値は“0000”である(S702)。
まず、比較値のビット列[0]が0であるため、ビット列[3]のスキャンデータに対しビットスキャン処理を行う。具体的には、マスタマスク“1111”をマスクデータとして、ビット列[3]のスキャンデータ“0001”をNOT演算した結果“1110”をマスクにかけ、マスク結果が“1110”となる(S703)。
次に、比較値のビット列[2]が1であるため、ビット列[2]のスキャンデータに対しビットスキャン処理及びスタートマスク更新処理を行う。具体的には、ビット列[3]のマスク結果“1110”をマスクデータとして、ビット列[2]のスキャンデータ“0111”をマスクにかけ、マスク結果が“0110”となる(S704)。さらに、マスクデータ“1110”とマスク結果“0110”をXOR演算し、XOR結果“1000”とスタートマスク“0000”をOR演算し、その結果によりスタートマスクを“1000”とする(S705)。
次に、比較値のビット列[1]が0であるため、ビット列[1]のスキャンデータに対しビットスキャン処理を行う。具体的には、ビット列[2]のマスク結果“0110”をマスクデータとして、ビット列[1]のスキャンデータ“1101”をNOT演算した結果“0010”をマスクにかけ、マスク結果が“0010”となる(S706)。
次に、比較値のビット列[0]が1であるため、ビット列[0]のスキャンデータに対しビットスキャン処理及びスタートマスク更新処理を行う。具体的には、ビット列[1]のマスク結果“0010”をマスクデータとして、ビット列[0]のスキャンデータ“1111”をマスクにかけ、マスク結果が“0010”となる(S707)。さらに、マスクデータ“0010”とマスク結果“0010”をXOR演算し、XOR結果“0000”とスタートマスク“1000”をOR演算し、その結果によりスタートマスクを“1000”とする(S708)。
これにより、ビット列[0]のマスク結果“0010”が同値検索の結果となる(S709)。すなわち、“0010”のONビットのレコード番号2が比較値5と同値のデータとなる。また、ビット列[0]で更新されたスタートマスク“1000”が小なり検索の結果となる(S710)。すなわち、“1000”のONビットのレコード番号0が比較値5よりも小さいデータとなる。小なりイコール検索の場合は、同値の結果“0010”とスタートマスク“1000”をORすることにより、“1010”が得られ、これが小なりイコールの検索結果となる。
このように、スタートマスク(LessMask)を用意し、このスタートマスクに、比較値のビットがONのビット列について、検索先のデータビットがOFFの箇所を論理和(OR)していくことにより、比較値よりも小さいデータを検索する小なり検索の結果が得られる。本実施の形態では、この検索処理により得られるスタートマスクをグルーピングソート(降順)開始時のマスクデータとする。また、小なりイコール(比較値以下)データを検索する場合は、小なり検索結果と同値結果を論理和演算した結果をマスクデータとする。なお、図14において、ビットスキャン処理でマスク結果が0となった場合、未処理データが無いと判断して、検索処理を早期終了してもよい。
<本実施の形態の効果>
以上のように、本実施の形態では、スキャンダウン処理によるグルーピングソート処理において、処理の開始時に、絞り込み開始データを使用して絞り込み処理を行い、その処理結果と連動してグルーピングソート処理を行うことで、絞り込み開始データで指定した任意の位置からグルーピングした結果を得ることができる。例えば、実施の形態2のような取得件数指定と本実施の形態を組み合わせることで、任意の値を開始値とした、任意の件数のグルーピングソートの結果を、取得することが出来る。また、これを応用し、直前のグルーピング結果の最終値を、次のポジショナルグルーピングの開始位置に指定することで、関連する技術を使ったグルーピング処理方式では難しかった、グルーピング結果の部分取得とスクロール動作が可能になる。さらに、ポジショナルグルーピングの開始位置を任意の値に設定することで、ジャンプスクロールの動作にも応用できる。加えて、絞り込み処理をする前のマスタマスクと、絞り込み結果のスタートマスクをXORすることで、絞り込みによって外れるデータのマスクを得ることも出来るため、この部分の件数の取得や、該当するレコードの特定の要素(データ値)を加算して合計を求めることも出来る。
以上のように、本実施の形態では、スキャンダウン処理によるグルーピングソート処理において、処理の開始時に、絞り込み開始データを使用して絞り込み処理を行い、その処理結果と連動してグルーピングソート処理を行うことで、絞り込み開始データで指定した任意の位置からグルーピングした結果を得ることができる。例えば、実施の形態2のような取得件数指定と本実施の形態を組み合わせることで、任意の値を開始値とした、任意の件数のグルーピングソートの結果を、取得することが出来る。また、これを応用し、直前のグルーピング結果の最終値を、次のポジショナルグルーピングの開始位置に指定することで、関連する技術を使ったグルーピング処理方式では難しかった、グルーピング結果の部分取得とスクロール動作が可能になる。さらに、ポジショナルグルーピングの開始位置を任意の値に設定することで、ジャンプスクロールの動作にも応用できる。加えて、絞り込み処理をする前のマスタマスクと、絞り込み結果のスタートマスクをXORすることで、絞り込みによって外れるデータのマスクを得ることも出来るため、この部分の件数の取得や、該当するレコードの特定の要素(データ値)を加算して合計を求めることも出来る。
なお、昇順、降順いずれのポジショナルグルーピング処理においても、後続のグルーピングソート処理を省略することで、大なり、もしくは小なりのデータ検索処理とすることが出来る。同様に、大なりイコール、小なりイコールの検索結果とする場合は、これに加えて、同値のマスクを単純にORすれば良い。
(実施の形態3の変形例)
実施の形態3の変形例として、絞り込み部132において、絞り込みと同時に、最初のグルーピングソート結果を出力してもよい。
実施の形態3の変形例として、絞り込み部132において、絞り込みと同時に、最初のグルーピングソート結果を出力してもよい。
<昇順のポジショナルグルーピングソート処理の処理フロー>
図15は、本変形例のフローチャートであり、図11に示した、昇順のポジショナルグルーピング処理の変形例を示している。
図15は、本変形例のフローチャートであり、図11に示した、昇順のポジショナルグルーピング処理の変形例を示している。
図15に示すように、まず、データ処理装置100は、スタートマスク(Start_mask)と変数Pの初期設定に加えて、ファーストマスク(First_mask)を0に初期化するする(S511)。ファーストマスクは、最も絞り込み開始データに近い最初の抽出データ(グルーピング結果)を示す。
次に、データ処理装置100は、絞り込み開始データのPビット列のビットが0か否か判定し(S512)、絞り込み開始データのPビット列のビットが0の場合、テンポラリ変数(Tmp)にマスタマスク(Mask)を設定し、Pビット列のスキャンデータのNOT演算結果とマスタマスクとをAND演算した結果によりマスタマスクを更新し、続けて、テンポラリ変数とマスタマスクとをXOR演算した結果で、テンポラリ変数を更新する(S513)。
次に、データ処理装置100は、テンポラリ変数が0か否かを判定する(S514)。S514でテンポラリ変数が0以外の場合、すなわち、ビットスキャンにより新たに絞り込み開始データより大きく、より絞り込み開始データに近いデータが抽出された場合、データ処理装置100は、テンポラリ変数の内容をファーストマスク(最初のグルーピング結果)に設定し、さらにテンポラリ変数とスタートマスクをOR(論理和)演算した結果によりスタートマスクを更新する(S515)。
また、S512で絞り込み開始データのPビット列のビットが0以外の場合、データ処理装置100は、Pビット列のスキャンデータとマスタマスクとをAND演算した結果によりマスタマスクを更新する(S516)。その後、データ処理装置100は、S514でテンポラリ変数が0だった場合も含め、Pビット列のスキャンデータのNOT演算結果とファーストマスクをAND演算した結果をテンポラリ変数に設定する(S517)。その後、データ処理装置100は、テンポラリ変数が0か否かを判定する(S518)。S518でテンポラリ変数が0以外の場合、すなわち、S517のビットスキャンにより行われた、小さな値への絞り込みが有効だった場合、データ処理装置100は、テンポラリ変数の内容をファーストマスクに設定し、最初のグルーピング結果を更新する(S519)。
S515、またはS519の後、あるいはS518でテンポラリ変数が0の場合、データ処理装置100は、処理中のビット列である変数PがLSBか否か、すなわち、全ビットのスキャンが終了したか否か判定する(S520)。S520で変数PがLSB以外の場合、すなわち、全ビットのスキャンが終了していない場合、データ処理装置100は、次のスキャンのために、変数PをLSB側に一つ移動し(S521)、S512以降で次のビット列に対するビットスキャン処理(絞り込み処理)を繰り返す。
また、S520で変数PがLSBである場合、すなわち、全ビットのスキャンが終了した場合、データ処理装置100は、最初のグルーピング結果として、ファーストマスクの内容を出力する(S522)。続いて、データ処理装置100は、ファーストマスクのNOT演算結果と絞り込み開始データよりも大きいデータの検索結果(大なり検索結果)であるスタートマスクをAND演算した結果をマスタマスクに設定する(S523)。その後、このマスタマスクを使い、実施の形態1で示した昇順のグルーピングソートを使って後続のグルーピングソート処理を行う(S524)。なお、絞り込み開始データ以上の検索結果(大なりイコール検索結果)とする場合は、S522の前に、その時点のマスタマスク(同値結果)が0か否かを判定し、0以外なら(同値があれば)、マスタマスクをファーストマスクに設定する。
なお、図13と同様、昇順の処理の一部を変更することで、降順のポジショナルグルーピングソート処理を行うことができる。具体的には、降順の場合、図15の昇順のフローチャートに対し、S512、S513、S516、S517、S524の処理を変更する。すなわち、S512では、絞り込み開始データのPビット列のビットが1(ON)か否か判定する。S513では、絞り込み開始データのPビット列のビットが1の場合に、テンポラリ変数(Tmp)にマスタマスク(Mask)を設定し、Pビット列のスキャンデータとマスタマスクとをAND演算した結果によりマスタマスクを更新し、続けて、テンポラリ変数とマスタマスクとをXOR演算した結果で、テンポラリ変数を更新する。S516では、絞り込み開始データのPビット列のビットが1以外の場合に、Pビット列のスキャンデータのNOT演算結果とマスタマスクとをAND演算した結果によりマスタマスクを更新する。S517では、S514でテンポラリ変数が0だった場合も含め、Pビット列のスキャンデータとファーストマスクをAND演算することで、大きな値への絞り込みを行った結果をテンポラリ変数に設定する。S524では、S523のマスタマスクの更新後に、実施の形態1で示した降順のグルーピングソート処理を行う。
<大なり検索処理の動作例>
図16A及び図16Bは、本変形例の動作例であり、図12に示した、昇順のポジショナルグルーピングソートにおける大なり検索処理の動作例の変形例である。
図16A及び図16Bは、本変形例の動作例であり、図12に示した、昇順のポジショナルグルーピングソートにおける大なり検索処理の動作例の変形例である。
図16A及び図16Bの例では、大なり検索のための比較値(絞り込み開始データ)は5であり、レコード番号0~5の6レコードのデータが入力される。レコード番号0のデータ値が3、レコード番号1のデータ値が7、レコード番号2のデータ値が5、レコード番号3のデータ値が15、レコード番号4のデータ値が6、レコード番号5のデータ値が10である。各データはビット列[0]~[3]の4ビットのデータあり、スキャンデータ及びマスクデータは6ビットである。
図16A及び図16Bに示すように、マスタマスク(ExistMask)の初期値は“111111”であり(S611)、ファーストマスク(FirstMask)の初期値は“000000”であり(S612)、スタートマスク(GreaterMask)の初期値は“000000”である(S613)。
まず、比較値のビット列[3]が0であるため、ビット列[3]のスキャンデータに対しビットスキャン処理及びファーストマスクとスタートマスクの更新処理を行う。具体的には、マスタマスク“111111”をマスクデータとして、ビット列[3]のスキャンデータ“000101”をNOT演算した結果“111010”をマスクにかけ、マスク結果が“111010”となる(S614)。さらに、マスクデータ“111111”とマスク結果“111010”をXOR演算した結果“000101”でファーストマスクを更新し、続けてファーストマスクとスタートマスク“000000”をOR演算し、その結果によりスタートマスクを“000101”とする(S615)。
次に、比較値のビット列[2]が1であるため、ビット列[2]のスキャンデータに対しビットスキャン処理とファーストマスクの更新処理を行う。具体的には、ビット列[3]のマスク結果“111010”をマスクデータとして、ビット列[2]のスキャンデータ“011110”をマスクにかけ、マスク結果が“011010”となる(S616)。さらに、ビット列[3]で更新したファーストマスク“000101”に対し、ビット列[2]のスキャンデータ“011110”をNOT演算した結果“100001”をAND演算し、その結果でファーストマスクを“000001”とする(S617)。
次に、比較値のビット列[1]が0であるため、ビット列[1]のスキャンデータに対しビットスキャン処理及びファーストマスクとスタートマスクの更新処理を行う。具体的には、ビット列[2]のマスク結果“011010”をマスクデータとして、ビット列[1]のスキャンデータ“110111”をNOT演算した結果“001000”をマスクにかけ、マスク結果が“001000”となる(S618)。さらに、マスクデータ“011010”とマスク結果“001000”をXOR演算した結果“010010”でファーストマスクを更新し、続けてファーストマスクとスタートマスク“000101”をOR演算し、その結果により、スタートマスクを“010111”とする(S619)。
次に、比較値のビット列[0]が1であるため、ビット列[0]のスキャンデータに対しビットスキャン処理とファーストマスクの更新処理を行う。具体的には、ビット列[1]のマスク結果“001000”をマスクデータとして、ビット列[0]のスキャンデータ“111100”をマスクにかけ、マスク結果が“001000”となる(S620)。さらに、ビット列[1]で更新したファーストマスク“010010”に対し、ビット列[0]のスキャンデータ“111100”をNOT演算した結果“000011”をAND演算し、その結果でファーストマスクを“000010”とする(S621)。
これにより、ビット列[0]のマスク結果“001000”が同値検索の結果となる(S622)。すなわち、“001000”のONビットのレコード番号2が比較値5と同値のデータとなる。また、ビット列[1]で更新されたスタートマスク“010111”が大なり検索の結果となる(S623)。すなわち、“010111”のONビットのレコード番号1、3、4,5が比較値5よりも大きいデータとなる。さらに、ビット列[0]で設定したファーストマスク“000010”が、最初のポジショナルグルーピング結果となる(S624)。すなわち、“000010”のONビットのレコード番号4が、大なり検索で比較値5に最も近いポジショナルグルーピングデータとなる。
なお、後続のグルーピング処理は、ファーストマスク“ 000010”をNOT演算した結果“111101”と、S623で得た大なり検索のマスク“010111”をAND演算した結果である“010101”をマスタマスクとして、基本グルーピングソート(昇順)を行うことで実施する(S625)。また、大なりイコールに対応する場合は、同値の結果“001000”を最初のポジショナルグルーピング結果とし、S623で得た大なり検索のマスク“010111”を基本グルーピングソート(昇順)のマスタマスクに引き継ぐことで処理を行う。
このように、本変形例では、スタートマスク(GreaterMask)に加えてファーストマスク(FirstMask)を用意し、このファーストマスクに、比較値のビットがOFFのビット列について、検索先のデータビットがONの箇所を設定し、同時に、ファーストマスクをスタートマスクに論理和(OR)していくことにより、比較値よりも大きく、比較値により近いデータと、大なり検索の結果が得られる。その後は、ファーストマスクを昇順のグルーピング処理と同じく、最小値に向かってスキャンダウンしていくことで、一回のスキャンダウン処理で最初のグルーピング結果と、大なり検索の結果を同時に得られる。本変形例では、この処理により得られるファーストマスクを最初のポジショナルグルーピングの結果とし、以降のグルーピングはスタートマスクからファーストマスクを外したマスク結果を基本グルーピングソート(昇順)開始時のマスクデータとして実施する。また、大なりイコール(比較値以上)のデータを検索する場合は、同値結果を最初のグルーピング結果とし、スタートマスクを基本グルーピングソート(昇順)開始時のマスクデータとする。
<小なり検索処理の動作例>
図17A及び図17Bは、本変形例の他の動作例であり、図14に示した、降順のポジショナルグルーピングソートにおける小なり検索処理の動作例の変形例である。図17A及び図17Bの例では、小なり検索のための比較値(絞り込み開始データ)及び入力されるデータは図16A及び図16Bと同じである。
図17A及び図17Bは、本変形例の他の動作例であり、図14に示した、降順のポジショナルグルーピングソートにおける小なり検索処理の動作例の変形例である。図17A及び図17Bの例では、小なり検索のための比較値(絞り込み開始データ)及び入力されるデータは図16A及び図16Bと同じである。
図17A及び図17Bに示すように、マスタマスク(ExistMask)の初期値は“111111”であり(S711)、ファーストマスク(FirstMask)の初期値は”000000”であり(S712)、スタートマスク(LessMask)の初期値は“000000”である(S713)。
まず、比較値のビット列[3]が0であるため、ビット列[3]のスキャンデータに対しビットスキャン処理とファーストマスクの更新処理を行う。具体的には、マスタマスク“111111”をマスクデータとして、ビット列[3]のスキャンデータ“000101”をNOT演算した結果“111010”をマスクにかけ、マスク結果が“111010”となる(S714)。さらに、初期値であるファーストマスク“000000”に対し、ビット列[3]のスキャンデータ“000101”をAND演算し、その結果がオール0(“000000”)となるため、ファーストマスクの更新は行わない(S715)。
次に、比較値のビット列[2]が1であるため、ビット列[2]のスキャンデータに対しビットスキャン処理及びファーストマスクとスタートマスクの更新処理を行う。具体的には、ビット列[3]のマスク結果“111010”をマスクデータとして、ビット列[2]のスキャンデータ“011110”をマスクにかけ、マスク結果が“011010”となる(S716)。さらに、マスクデータ“111010”とマスク結果“011010”をXOR演算した結果“100000”でファーストマスクを更新し、続けてファーストマスクとスタートマスク“000000”をOR演算し、その結果によりスタートマスクを“100000”とする(S717)。
次に、比較値のビット列[1]が0であるため、ビット列[1]のスキャンデータに対しビットスキャン処理とファーストマスクの更新処理を行う。具体的には、ビット列[2]のマスク結果“011010”をマスクデータとして、ビット列[1]のスキャンデータ“110111”をNOT演算した結果“001000”をマスクにかけ、マスク結果が“001000”となる(S718)。さらに、ビット列[2]で更新したファーストマスク“100000”に対し、ビット列[1]のスキャンデータ“110111”をAND演算し、その結果でファーストマスクを“100000”とする(S719)。
次に、比較値のビット列[0]が1であるため、ビット列[0]のスキャンデータに対しビットスキャン処理とファーストマスクの更新処理を行う。具体的には、ビット列[1]のマスク結果“001000”をマスクデータとして、ビット列[0]のスキャンデータ“111100”をマスクにかけ、マスク結果が“001000”となる(S720)。さらに、マスクデータ“001000”とマスク結果“001000”をXOR演算するが、この結果はオール0(“000000”)のため、ビット列[1]で更新したファーストマスク“100000”に対し、ビット列[0]のスキャンデータ“111100”をAND演算し、その結果でファーストマスクを“100000”とする(S721)。
これにより、ビット列[0]のマスク結果“001000”が同値検索の結果となる(S722)。すなわち、“001000”のONビットのレコード番号2が比較値5と同値のデータとなる。また、ビット列[2]で更新されたスタートマスク“100000”が小なり検索の結果となる(S723)。すなわち、“100000”のONビットのレコード番号0が比較値5よりも小さいデータとなる。さらに、ビット列[0]で設定したファーストマスク“100000”が、最初のポジショナルグルーピング結果となる(S724)。すなわち、“100000”のONビットのレコード番号0が、小なり検索で比較値5に最も近い、ポジショナルグルーピングデータとなる。
なお、この例では、ファーストマスク“100000”をNOT演算した結果“011111”と、S723で得た小なり検索のマスク“100000”をAND演算すると結果がオール0(“000000”)となるため、後続の基本グルーピングソート(降順)で処理するデータは無いことを示す(S725)。また、小なりイコールに対応する場合は、同値の結果“001000” を最初のポジショナルグルーピング結果とし、S723で得た小なり検索のマスク“100000”を基本グルーピングソート(降順)のマスタマスクに引き継ぐことで処理を行う。
このように、本変形例では、スタートマスク(LessMask)に加えてファーストマスク(FirstMask)を用意し、このファーストマスクに、比較値のビットがONのビット列について、検索先のデータビットがOFFの箇所を設定し、同時に、ファーストマスクをスタートマスクに論理和(OR)していくことにより、比較値よりも小さく、比較値により近いデータと、小なり検索の結果が得られる。その後は、ファーストマスクを降順のグルーピング処理と同じく、最大値に向かってスキャンダウンしていくことで、一回のスキャンダウン処理で最初のグルーピング結果と、小なり検索の結果を同時に得られる。本変形例では、この処理により得られるファーストマスクを最初のポジショナルグルーピングの結果とし、以降のグルーピングはスタートマスクからファーストマスクを外したマスク結果を基本グルーピングソート(降順)開始時のマスクデータとして実施する。また、小なりイコール(比較値以下)データを検索する場合は、同値結果を最初のグルーピング結果とし、スタートマスクを基本グルーピングソート(降順)開始時のマスクデータとする。
(実施の形態4)
次に、実施の形態4について説明する。本実施の形態では、実施の形態1~3のデータ処理装置において、スキャンデータを分割し、分割したスキャンデータを並列に処理する例について説明する。
次に、実施の形態4について説明する。本実施の形態では、実施の形態1~3のデータ処理装置において、スキャンデータを分割し、分割したスキャンデータを並列に処理する例について説明する。
<データ処理装置の構成>
図18は、本実施の形態に係るデータ処理装置の構成例を示している。図18に示すように、本実施の形態に係るデータ処理装置100は、実施の形態1の構成に加えて、分割部121を備えており、また、2つのスキャンダウン部140a及び140bを備えている。
図18は、本実施の形態に係るデータ処理装置の構成例を示している。図18に示すように、本実施の形態に係るデータ処理装置100は、実施の形態1の構成に加えて、分割部121を備えており、また、2つのスキャンダウン部140a及び140bを備えている。
分割部121は、取得部120が取得したスキャンデータをスキャンダウン部140a及び140bが処理できるように2つの分割スキャンデータに分割する。例えば、システムの処理単位(ワード単位)毎にデータを分割してもよい。スキャンダウン部140aは、分割部121が分割した一方の分割スキャンデータに対しスキャンダウン処理を行う。スキャンダウン部140bは、分割部121が分割した他方の分割スキャンデータに対しスキャンダウン処理を行う。例えば、1つのスキャンダウン部において、2つのスキャンダウン処理を並列に実行してもよい。なお、スキャンデータを複数の分割スキャンデータに分割し、分割スキャンデータ毎に複数の処理を並列に実行してもよい。
<分割スキャンデータによる昇順の基本グルーピングソート処理の動作例>
図19A及び図19Bは、本実施の形態に係るデータ処理方法によるデータ処理の動作例を示している。図19A及び図19Bは、スキャンデータを分割した分割スキャンデータを用いて、基本グルーピングソート処理を昇順に行う場合の例である。
図19A及び図19Bは、本実施の形態に係るデータ処理方法によるデータ処理の動作例を示している。図19A及び図19Bは、スキャンデータを分割した分割スキャンデータを用いて、基本グルーピングソート処理を昇順に行う場合の例である。
なお、分割スキャンデータ毎のスキャンダウン処理は、基本的に実施の形態1と同様であるが、マスク結果の0判定の処理(図3のS103)のみが異なる。すなわち、分割スキャンデータ毎にビットスキャン処理を行い、全ての分割スキャンデータのマスク結果が0の場合にそのマスク結果を無効とし、以前に有効だったマスク結果を使用して処理を行う(以下のS814,S815参照)。逆に、複数の分割データのマスク結果が0の場合でも、いずれかの分割データのマスク結果が0でない場合(いずれかのマスク結果にONビットがある場合)は、そのマスク結果は有効として処理する(以下のS804,S805参照)。
図19A及び図19Bの例では、レコード番号0~6の7レコードのデータが入力される。レコード番号0のデータ値が0、レコード番号1のデータ値が5、レコード番号2のデータ値が10、レコード番号3のデータ値が3、レコード番号4のデータ値が10、レコード番号5のデータ値が5、レコード番号6のデータ値が3である。各データはビット列[0]~[3]の4ビットのデータである。
スキャンデータは7ビットであり、2つに分割したデータを分割スキャンデータとする。第1分割スキャンデータをレコード0~3のビットに対応する4ビットとし、第2分割スキャンデータをレコード4~6のビットに1ビット加えた4ビットとする。マスクデータは、2つの分割スキャンデータに対応して、4ビットの第1マスクデータ及び4ビットの第2マスクデータとする。
図19Aに示すように、1回目のスキャンダウン処理において、第1マスタマスクの初期値は、全ビットをONとした“1111”であり、第2マスタマスクの初期値は、最下位ビット(レコード番号7に該当するビット)をOFF、他のビットをONとした“1110”である(S801)。
ビット列[3]のビットスキャン処理では、第1マスクデータを“1111”として、第1分割スキャンデータ“0010”をNOT演算した結果“1101”を使ってマスクをかけ、第1マスク結果が“1101”となり、第2マスクデータを“1110”として、第2分割スキャンデータ“100”に最下位ビット(値は0)を加えてNOT演算した“0111”を使ってマスクをかけ、第2マスク結果が“0110”となる(S802)。
ビット列[2]のビットスキャン処理では、ビット列[3]の第1マスク結果“1101”をマスクデータとして、第1分割スキャンデータ“0100”をNOT演算した結果“1011”を使ってマスクをかけ、第1マスク結果が“1001”となり、ビット列[3]の第2マスク結果“0110”をマスクデータとして、第2分割スキャンデータ“010”に最下位ビットを加えてNOT演算した“1011”を使ってマスクをかけ、第2マスク結果が“0010”となる(S803)。
ビット列[1]のビットスキャン処理では、ビット列[2]の第1マスク結果“1001”をマスクデータとして、第1分割スキャンデータ“0011”をNOT演算した結果“1100”を使ってマスクをかけ、第1マスク結果が“1000”となり、ビット列[2]の第2マスク結果“0010”をマスクデータとして、第2分割スキャンデータ“101”に最下位ビットを加えてNOT演算した“0101”を使ってマスクをかけ、第2マスク結果がオール0(“0000”)となる(S804)。なお、この時点で第2マスク結果が0であるが、第1マスク結果が0以外のため、絞り込みは成功と判断され、ここでのマスク結果をそのまま次のマスクデータとして引き継ぐ。
ビット列[0]のビットスキャン処理では、ビット列[1]の第1マスク結果“1000”をマスクデータとして、第1分割スキャンデータ“0101”をNOT演算した結果“1010”を使ってマスクをかけ、第1マスク結果が“1000”となり、ビット列[1]の第2マスク結果“0000”をマスクデータとして、第2分割スキャンデータ“011”に最下位ビットを加えてNOT演算した“1001”を使ってマスクをかけ、第2マスク結果がオール0となる(S805)。なお、ここでも第2マスク結果が0であるが、第1マスク結果が0以外のため、絞り込みは成功と判断され、ここでのマスク結果をそのまま次のマスクデータとして引き継ぐ。
1回目のスキャンダウン処理の結果は、ビット列[0]の第1マスク結果“1000”とビット列[0]の第2マスク結果“0000”とを結合した結果となる(S806)。すなわち、“10000000”のONビットのレコード番号0が最小値のデータとして出力される。
また、現在の第1マスタマスク“1111”と第1マスタマスクに対応する1回目のスキャンダウン処理結果をNOT演算した結果“0111”とのマスクにより、2回目のスキャンダウン用の新しい第1マスタマスクを“0111”とし、現在の第2マスタマスク“1110”と第2マスタマスクに対応する1回目のスキャンダウン処理結果をNOT演算した結果“1111”とのマスクにより、2回目のスキャンダウン用の新しい第2マスタマスクを“1110”とする(S807)。
次に、2回目のスキャンダウン処理では、新しい第1マスタマスク“0111”、第2マスタマスク“1110”を用いて(S811)、レコード番号1~6のデータをソート対象として、1回目のスキャンダウン処理と同様にビットスキャン処理を行う。
ビット列[3]のビットスキャン処理では、第1分割スキャンデータの第1マスク結果は“0101”となり、第2分割スキャンデータの第2マスク結果は“0110”となる(S812)。ビット列[2]のビットスキャン処理では、第1分割スキャンデータの第1マスク結果は“0001”となり、第2分割スキャンデータの第2マスク結果は“0010”となる(S813)。ビット列[1]のビットスキャン処理では、第1分割スキャンデータの第1マスク結果はオール0となり、第2分割スキャンデータの第2マスク結果はオール0となる(S814)。両方のマスク結果がすべて0に成るため、この場合は絞り込みが成立せず、この絞り込み動作は無効と判断される。
ビット列[0]のビットスキャン処理では、ビット列[1]の第1マスク結果及び第2マスク結果の両方が0であり、無効となるため、ビット列[2]の第1マスク結果及び第2マスク結果を使用する。すなわち、ビット列[2]の第1マスク結果“0001”をマスクデータとして、第1分割スキャンデータのマスク結果がオール0となり、ビット列[2]の第2マスク結果“0010”をマスクデータとして、第2分割スキャンデータのマスク結果がオール0となる(S815)。この結果も、両方のマスク結果がすべて0に成るため、S814同様絞り込み動作は無効と判断される。
2回目のスキャンダウン処理の結果は、ビット列[0]の第1マスク結果及び第2マスク結果が0であり、ビット列[1]の第1マスク結果及び第2マスク結果も0であり、いずれも無効となるため、ビット列[2]の第1マスク結果“0001”とビット列[2]の第2マスク結果“0010”とを結合した結果となる(S816)。すなわち、“00010010”のONビットのレコード番号3、6が2番目に小さいデータとして出力される。
また、現在の第1マスタマスク“0111”と第1マスタマスクに対応する2回目のスキャンダウン処理結果をNOT演算した結果“1110”とのマスクにより、3回目のスキャンダウン用の新しい第1マスタマスクを“0110”とし、現在の第2マスタマスク“1110”と第2マスタマスクに対応する2回目のスキャンダウン処理結果をNOT演算した結果“1101”とのマスクにより、3回目のスキャンダウン用の新しい第2マスタマスクを“1100”とする(S817)。3回目以降、1回目及び2回目と同様、スキャンダウン処理が繰り返される。
<本実施の形態の効果>
以上のように、本実施の形態では、スキャンダウンによるグルーピングソート処理において、スキャンデータを分割し、分割したデータに対し並列にグルーピングソート処理を行う。入力データのレコードの格納数が多く、一つの操作幅ではビットの横幅が不足するような場合、すなわち、スキャンデータのビット幅が処理単位に収まらない場合、複数のデータに分けて、データ毎にスキャンダウン処理を行うことで、レコード数(横幅)を必要な個数まで拡張することができる。
以上のように、本実施の形態では、スキャンダウンによるグルーピングソート処理において、スキャンデータを分割し、分割したデータに対し並列にグルーピングソート処理を行う。入力データのレコードの格納数が多く、一つの操作幅ではビットの横幅が不足するような場合、すなわち、スキャンデータのビット幅が処理単位に収まらない場合、複数のデータに分けて、データ毎にスキャンダウン処理を行うことで、レコード数(横幅)を必要な個数まで拡張することができる。
(実施の形態5)
次に、実施の形態5について説明する。本実施の形態では、実施の形態1~4のデータ処理装置において、昇順ソート処理と降順ソート処理を同時に行う例について説明する。
次に、実施の形態5について説明する。本実施の形態では、実施の形態1~4のデータ処理装置において、昇順ソート処理と降順ソート処理を同時に行う例について説明する。
<データ処理装置の構成>
図20は、本実施の形態に係るデータ処理装置の構成例を示している。図20に示すように、本実施の形態では、スキャンダウン部140が昇順処理部141と降順処理部142を含んでいる。昇順処理部141は、取得部120が取得したスキャンデータに対し、入力データを昇順にソートするスキャンダウン処理を行う。降順処理部142は、取得部120が取得したスキャンデータに対し、入力データを降順にソートするスキャンダウン処理を行う。
図20は、本実施の形態に係るデータ処理装置の構成例を示している。図20に示すように、本実施の形態では、スキャンダウン部140が昇順処理部141と降順処理部142を含んでいる。昇順処理部141は、取得部120が取得したスキャンデータに対し、入力データを昇順にソートするスキャンダウン処理を行う。降順処理部142は、取得部120が取得したスキャンデータに対し、入力データを降順にソートするスキャンダウン処理を行う。
<デュアルスキャン方式のグルーピングソート処理の動作例>
図21A及び図21Bは、本実施の形態に係るデータ処理の動作例を示している。図21A及び図21Bは、昇順ソートと降順ソートを同時に行うデュアルスキャン方式のグルーピングソート処理の例である。昇順ソートと降順ソートの処理は、基本的に実施の形態1と同様である。図21A及び図21Bの例では、図9A及び図9Bと同じ4レコードのデータが入力される。また、スキャンデータ、昇順及び降順のマスクデータは4ビットである。
図21A及び図21Bは、本実施の形態に係るデータ処理の動作例を示している。図21A及び図21Bは、昇順ソートと降順ソートを同時に行うデュアルスキャン方式のグルーピングソート処理の例である。昇順ソートと降順ソートの処理は、基本的に実施の形態1と同様である。図21A及び図21Bの例では、図9A及び図9Bと同じ4レコードのデータが入力される。また、スキャンデータ、昇順及び降順のマスクデータは4ビットである。
図21Aに示すように、1回目のスキャンダウン処理において、マスタマスクの初期値は“1111”であり(S801)、同じマスタマスクで昇順ソート及び降順ソートを行う。ビット列[3]のビットスキャン処理では、昇順ソートのマスク結果が“1101”となり(S802a)、降順ソートのマスク結果が“0010”となる(S802b)。ビット列[2]のビットスキャン処理では、昇順ソートのマスク結果が“1001”となり(S803a)、降順ソートのマスク結果がオール0(“0000”)となる(S803b)。ビット列[1]のビットスキャン処理では、昇順ソートのマスク結果が“1000”となり(S804a)、降順ソートのマスク結果が“0010”となる(S804b)。ビット列[0]のビットスキャン処理では、昇順ソートのマスク結果が“1000”となり(S805a)、降順ソートのマスク結果がオール0となる(S805b)。
1回目のスキャンダウン処理では、昇順ソートの結果は、ビット列[0]のマスク結果“1000”となり(S806a)、降順ソートの結果は、ビット列[1]のマスク結果“0010”となる(S806b)。すなわち、“1000”のONビットのレコード番号0が最小値のデータとして出力され、“0010”のONビットのレコード番号2が最大値のデータとして出力される。
また、現在のマスタマスク“1111”と1回目の昇順ソート結果をNOT演算した結果“0111”とをマスクし、そのマスク結果“0111”と1回目の降順ソート結果をNOT演算した結果“1101”とをマスクし、そのマスク結果“0101”を、次の2回目のスキャンダウン用の新しいマスタマスクとする(S807)。
次に、2回目のスキャンダウン処理では、新しいマスタマスク“0101”を用いて(S811)、レコード番号1、3のデータをソート対象として、1回目のスキャンダウン処理と同様にビットスキャン処理を行う。ビット列[3]のビットスキャン処理では、昇順ソートのマスク結果は“0101”となり(S812a)、降順ソートのマスク結果はオール0となる(S812b)。ビット列[2]のビットスキャン処理では、昇順ソートのマスク結果は“0001”となり(S813a)、降順ソートのマスク結果は“0100”となる(S813b)。ビット列[1]のビットスキャン処理では、昇順ソートのマスク結果はオール0となり(S814a)、降順ソートのマスク結果はオール0となる(S814b)。ビット列[0]のビットスキャン処理では、昇順ソートのマスク結果はオール0となり(S815a)、降順ソートのマスク結果は“0100”となる(S815b)。
2回目のスキャンダウン処理では、昇順ソートの結果は、ビット列[2]のマスク結果“0001”となり(S816a)、降順ソートの結果は、ビット列[0]のスキャンデータのマスク結果“0100”となる(S816b)。すなわち、“0001”のONビットのレコード番号3が2番目に小さいデータとして出力され、“0100”のONビットのレコード番号1が2番目に大きいデータとして出力される。
また、現在のマスタマスク“0101”と2回目の昇順ソート結果をNOT演算した結果“1110”とをマスクし、そのマスク結果“0100”と2回目の降順ソート結果をNOT演算した結果“1011”とをマスクし、そのマスク結果が“0000”となり、全ビットがオフのため、処理を終了する(S817)。
図21A及び図21Bの例では、1回目のソート処理の結果は、昇順及び降順ソート個数=2、昇順ソートレコード番号=(0)、降順ソートレコード番号=(2)となり、2回目のソート処理の結果は、昇順及び降順ソート個数=2、昇順ソートレコード番号=(3)、降順ソートレコード番号=(1)となり、最終的なソート処理結果は、昇順及び降順ソート個数=4、昇順ソートレコード番号=(0),(3)、降順ソートレコード番号=(2),(1)となる。なお、昇順ソートと降順ソートのループ回数が奇数で終わる場合、最後の処理結果で昇順と降順に同じ値が得られるため、この場合はいずれか一方を採用する。
<本実施の形態の効果>
以上のように、本実施の形態では、スキャンダウンによるグルーピングソート処理において、昇順のグルーピングソートと降順のグルーピングソートを同時に行う。マスタマスクを昇順ソートと降順ソートの2系統で使用しスキャンすることで、昇順ソートのスキャン結果と降順ソートのスキャン結果を一回のスキャンダウンで同時に求めることができる。昇順ソートと降順ソートの2つの処理を同時に行うため、単純にグルーピングを行う処理ループの回数を半分に減らすことができる。
以上のように、本実施の形態では、スキャンダウンによるグルーピングソート処理において、昇順のグルーピングソートと降順のグルーピングソートを同時に行う。マスタマスクを昇順ソートと降順ソートの2系統で使用しスキャンすることで、昇順ソートのスキャン結果と降順ソートのスキャン結果を一回のスキャンダウンで同時に求めることができる。昇順ソートと降順ソートの2つの処理を同時に行うため、単純にグルーピングを行う処理ループの回数を半分に減らすことができる。
(実施の形態6)
次に、実施の形態6について説明する。本実施の形態では、実施の形態1~5のデータ処理装置において、マスク結果をスタックする例について説明する。
次に、実施の形態6について説明する。本実施の形態では、実施の形態1~5のデータ処理装置において、マスク結果をスタックする例について説明する。
<データ処理装置の構成>
図22は、本実施の形態に係るデータ処理装置の構成例を示している。図22に示すように、本実施の形態に係るデータ処理装置100は、実施の形態1の構成に加えて、スタック部133を備えている。スタック部133は、スキャンダウン部140におけるビットスキャン処理のマスク結果とスキャン位置をスタックする。また、スキャンダウン部140は、スタックされたマスク結果に対応するスキャン位置からスキャンダウン処理を開始する。
図22は、本実施の形態に係るデータ処理装置の構成例を示している。図22に示すように、本実施の形態に係るデータ処理装置100は、実施の形態1の構成に加えて、スタック部133を備えている。スタック部133は、スキャンダウン部140におけるビットスキャン処理のマスク結果とスキャン位置をスタックする。また、スキャンダウン部140は、スタックされたマスク結果に対応するスキャン位置からスキャンダウン処理を開始する。
<スタック方式の昇順のグルーピングソート処理の処理フロー>
図23は、本実施の形態に係るデータ処理方法のフローチャートを示している。図23は、マスク結果をスタックするスタック方式のグルーピングソート処理を昇順に行う場合の例である。
図23は、本実施の形態に係るデータ処理方法のフローチャートを示している。図23は、マスク結果をスタックするスタック方式のグルーピングソート処理を昇順に行う場合の例である。
図23に示すように、まず、データ処理装置100は、初期化処理として、スタックレベル変数(StackLevel)を0に初期化し、スタックの先頭であるレベル0のスタックマスク値にマスタマスク(Mask)を、スタックスキャン位置にMSB位置を設定する(S901)。なお、この例では、スタックにはスタックマスク値(Stack[].mask)とスタックスキャン位置(Stack[].pos)の2つの項目が含まれるものとして説明する。
次に、データ処理装置100は、スキャンダウン処理を開始するため、マスクデータである変数Aにスタックレベルのスタックマスク値を設定し、変数Pに同じスタックのスタックスキャン位置を設定する(S902)。次にデータ処理装置100は、変数PがLSB以上であるかを判定する(S903)。すなわち、スキャン動作がLSBに到達していない場合はS904に進み、LSBまで処理を終えた場合はS910に進む。
次に、データ処理装置100は、昇順ソートのマスク処理として、Pビット列のスキャンデータのNOT演算結果とマスクデータである変数AとをAND演算し、その演算結果をマスク結果である変数Bに設定する(S904)。
次に、データ処理装置100は、スキャン位置である変数Pをデクリメントする。すなわち、スキャン位置をLSB側に移動する。(S905)
次に、データ処理装置100は、スキャン位置である変数Pをデクリメントする。すなわち、スキャン位置をLSB側に移動する。(S905)
次に、データ処理装置100は、マスク処理結果である変数Bが0か否か、すなわち、絞り込みが成功したか、もしくは、変数Bが変数Aと同じか否か、すなわち、ビットスキャンによりマスクが変化したか否かを判定する(S906)。
S906でマスク処理結果である変数Bが0以外、かつ変数Bが変数Aと異なる場合、すなわち、絞り込みが成功し、マスクの変化が起こった場合、データ処理装置100は、スタックレベルのスタックマスク値に変数Aを設定し、同じスタックのスタックスキャン位置に変数Pを設定する(S907)。その後、スタックレベル変数をインクリメントする(S908)。さらに、マスクデータである変数Aをマスク結果である変数Bにより更新し(S909)、S903以降で次のビット列に対するビットスキャン処理を繰り返す。
また、S903で変数Pが0より下になった場合、すなわち、全ビットのスキャンが終了した場合、データ処理装置100は、S909で更新されたマスクデータである変数Aを結果として出力する(S910)。次に、データ処理装置100は、マスタマスクとマスクデータである変数AのNOTの結果をAND演算し、その演算結果によりマスタマスクを更新する(S911)。
次に、データ処理装置100は、更新したマスタマスクが0か否か、すなわち、全データ処理が終了したか否か判定する(S912)。S912でマスタマスクが0以外の場合、すなわち、全データ処理が終了していない場合、データ処理装置100は、スタックレベル変数をデクリメントし(S913)、そのスタックレベルのスタックマスク値とマスタマスクとをAND演算し、その結果で同じスタックマスクを更新する(S914)。その後、S902以降で、スタックされたスタックマスク値とスタックスキャン位置を用いて、スキャンダウン処理を繰り返す。また、S912でマスタマスクが0の場合、すなわち、全データ処理が終了した場合、処理を終了する。
以上のように、本実施の形態では、前記に示したビットスキャンによるスキャンダウンの途中経過をスタックに蓄積していくことにより、次の回のスキャンダウン開始位置を、MSB位置でなく、変化が生じる最も低いビット列の位置から開始することが出来る。
なお、実施の形態1の図4と同様に、処理結果の早期検出を行ってもよい。すなわち、S909の後、変数AのONビットが一つのみか否か判定し、変数AのONビットが一つのみではない場合はS903に進み、変数AのONビットが一つのみの場合はS910に進んでもよい。また、実施の形態1の図6と同様に、降順ソートを行う場合、S904において、Pビット列のスキャンデータと変数AとをAND演算し、そのAND演算の結果を変数Bに設定してもよい。
<スタック方式の昇順のグルーピングソート処理の動作例>
図24A及び図24Bは、本実施の形態に係るデータ処理の動作例を示している。図24A及び図24Bは、図23に示したようにスタック方式のグルーピングソート処理を昇順に行う場合の例である。図24A及び図24Bの例では、レコード番号0~3の4レコードのデータが入力される。レコード番号0のデータ値が15、レコード番号1のデータ値が2、レコード番号2のデータ値が14、レコード番号3のデータ値が5である。各データはビット列[0]~[3]の4ビットデータであり、スキャンデータ及びマスクデータも4ビットである。
図24A及び図24Bは、本実施の形態に係るデータ処理の動作例を示している。図24A及び図24Bは、図23に示したようにスタック方式のグルーピングソート処理を昇順に行う場合の例である。図24A及び図24Bの例では、レコード番号0~3の4レコードのデータが入力される。レコード番号0のデータ値が15、レコード番号1のデータ値が2、レコード番号2のデータ値が14、レコード番号3のデータ値が5である。各データはビット列[0]~[3]の4ビットデータであり、スキャンデータ及びマスクデータも4ビットである。
図24Aに示すように、最初に、処理の開始に伴うスタックの初期化を行う。具体的には、スタックレベルを“0”に設定し、スタック[0]のスタックマスク値にマスタマスクである“1111”を設定し、スタックスキャン位置にMSB位置である“3”を設定する(S1001)。
スキャンダウン処理では、まず、スタックレベル“0”の位置に当たるスタック[0]からスタックスキャン位置の“3”と、スタックマスクである“1111”を取得し、各々スキャン位置とマスクデータに設定する(S1002)。
次に、取得した“1111”をマスクデータとして、スキャン位置“3”に当たるビット列[3]をビットスキャンすることで、マスク結果が“0101”となり、スキャン位置はデクリメントすることで“2”となる(S1003)。この処理により、マスク結果が0ではなく、かつ、マスクデータの“1111”とも同じではないため、現在のスタックレベルである“0”の指すスタック[0]のスタックマスクにマスクデータ“1111”を設定し、スタックスキャン位置に、現在のスキャン位置である“2”を設定する。つまり、この時点で、S1001でスタック[0]に設定した初期値を、上書きにより更新する。その後、スタックレベルをカウントアップして“1”にし、マスクデータをマスク結果である“0101”に更新する(S1004)。
次に、“0101”をマスクデータとして、スキャン位置“2”に当たるビット列[2]をビットスキャンすることで、マスク結果が“0100”となり、スキャン位置はデクリメントすることで“1”となる(S1005)。この処理により、マスク結果が0ではなく、かつ、マスクデータの“0101”とも同じではないため、現在のスタックレベルである“1”の指すスタック[1]のスタックマスクとしてマスクデータ“0101”を設定し、スタックスキャン位置に現在のスキャン位置である“1”を設定する。その後、スタックレベルをカウントアップして“2”にし、マスクデータをマスク結果である“0100”に更新する(S1006)。
次に、“0100”をマスクデータとして、スキャン位置“1”に当たるビット列[1]をビットスキャンすることで、マスク結果がオール0(“0000”)となり、スキャン位置はデクリメントすることで“0”となる。このとき、マスク結果が0のため、スタック処理と、マスクデータの更新は行わず次のビットスキャン処理に移る(S1007)。
次のビットスキャンでは、引き継いだ“0100”をマスクデータとして、スキャン位置“0”に当たるビット列[0]をビットスキャンすることで、マスク結果が“0100”となり、スキャン位置はデクリメントすることで“-1”となる。このとき、マスク結果が0ではないが、マスクデータと同じであるため、スタック処理と、マスクデータの更新は行わず次の処理に移る(S1008)。
1回目のスキャンダウン処理の結果は、最終的なマスクデータである“0100”となる(S1009)。すなわち、“0100”のONビットのレコード番号1が最小値のデータとして出力される。また、現在のマスタマスク“1111”と1回目のスキャンダウン処理の結果をNOT演算した“1011”とのマスクにより、次の2回目のスキャンダウン用の新しいマスタマスクを“1011”とする(S1010)。さらに、スタックレベルを一つ戻して“1”とし、新しいマスタマスク“1011”と、戻したスタックレベル“1”の指すスタック[1]のスタックマスク“0101”とをANDし、その演算結果“0001”によって同スタックマスクの値を更新する(S1011)。
次に、2回目のスキャンダウン処理は、現在のスタックレベル“1”の指すスタック[1]に格納されているスタックスキャン位置“1”をスキャン位置とし、スタックマスク“0001”をマスクデータとして開始する(S1016)。最初のビット列[1]に対するマスク結果は“0001”となり、このとき、マスク結果が0ではないが、マスクデータ“0001”と同じため、スタック処理はされず、マスクデータの更新もされない(S1017)。
次に、ビット列[0]のビットスキャン処理では、引き継いだマスクデータ“0001”をマスクデータとして、マスク結果がオール0となり、マスク結果が0であるため、スタック処理はされず、マスクデータの更新もされない(S1018)。
2回目のスキャンダウン処理の結果は、最終的に引き継いだマスクデータである“0001”となる(S1019)。すなわち、“0001”のONビットのレコード番号3が2番目に小さいデータとして出力される。また、現在のマスタマスク“1011”と2回目のスキャンダウン処理結果をNOT演算した結果“1110”とのマスクにより、次の3回目のスキャンダウン用の新しいマスタマスクを“1010”とする(S1020)。さらに、スタックレベルを一つ戻して“0”とし、新しいマスタマスク“1010”と戻したスタックレベル“0”の指すスタック[0]のスタックマスク“1111”とをANDし、そのマスク結果“1010”によって同スタックマスクの値を更新する(S1021)。
次に、3回目のスキャンダウン処理は、現在のスタックレベル“0”の指すスタック[0]に格納されているスタックスキャン位置“2”をスキャン位置とし、スタックマスク“1010”をマスクデータとして開始する(S1024)。最初のビット列[2]に対するマスク結果はオール0となり、マスク結果が0のため、スタック処理はされず、マスクデータの更新もされない(S1025)。
次に、ビット列[1]のビットスキャン処理では、引き継いだマスクデータ“1010”をマスクデータとして、マスク結果がオール0となり、マスク結果が0であるため、スタック処理はされず、マスクデータの更新もされない(S1026)。
次に、ビット列[0]のビットスキャン処理では、引き継いだマスクデータ“1010”をマスクデータとして、マスク結果が“0010”となる(S1027)。このとき、マスク結果が0ではなく、かつ、マスクデータの“1010”とも同じではないため、現在のスタックレベルである“0”の位置に当たる、スタック[0]のスタックマスクとしてマスクデータ“1010”を設定し、スタックスキャン位置に現在のスキャン位置(今回のビット列[0]のスキャン後デクリメントしたため-1に成っている。)である“-1”を設定する。つまり、この時点で、S1021でスタック[0]に設定した値を、上書きにより更新する。その後、スタックレベルをカウントアップして“1”にし、マスクデータをマスク結果である“0010”に更新する(S1028)。
3回目のスキャンダウン処理の結果は、最終的なマスクデータである“0010”となる(S1029)。すなわち、“0010”のONビットのレコード番号2が3番目に小さいデータとして出力される。また、現在のマスタマスク“1010”と3回目のスキャンダウン処理結果をNOT演算した結果“1101”とをマスクし、次の4回目のスキャンダウン用の新しいマスタマスクを“1000”とする(S1030)。さらに、スタックレベルを一つ戻して“0”とし、新しいマスタマスク“1000”と、戻したスタックレベル“0”の指すスタック[0]のスタックマスク“1010”とをANDし、そのマスク結果“1000”によって同スタックマスクの値を更新する(S1031)。
次に、4回目のスキャンダウンは、現在のスタックレベル“0”の指すスタック[0]に格納されているスタックスキャン位置“-1”をスキャン位置とし、スタックマスク“1000”をマスクデータとして開始する。ここでは、スキャン位置が既に-1であり、LSBより下の位置を指しているため、ビットスキャンは行われず、マスクデータがそのまま結果となる(S1038)。
4回目のスキャンダウン処理の結果は、最終的なマスクデータ“1000”となる(S1039)。すなわち、“1000”のONビットのレコード番号0が4番目に小さいデータとして出力される。また、現在のマスタマスク“1000”と4回目のスキャンダウンの結果をNOT演算した結果“0111”をマスクすると、マスク結果が“0000”となり、全ビットがオフのため、処理を終了する(S1040)。図24A及び図24Bの例では、昇順のグルーピングソート処理の結果は、個数=4、レコード番号=(1),(3),(2)、(0)となる。
<本実施の形態の効果>
以上のように、本実施の形態では、スキャンダウンによるグルーピングソート処理において、スキャンダウンの際にマスクが変化した位置をスタックして行くことで、次のスキャンダウン開始位置を、直前のマスク変化位置から開始することができ、効率よく処理を行うことが可能となる。
以上のように、本実施の形態では、スキャンダウンによるグルーピングソート処理において、スキャンダウンの際にマスクが変化した位置をスタックして行くことで、次のスキャンダウン開始位置を、直前のマスク変化位置から開始することができ、効率よく処理を行うことが可能となる。
すなわち、マスク結果とスキャン位置を積むスタックを用意し、スキャンダウン処理で全ビットが0以外、かつ、前のマスクと変化があった場合に、変化前のマスクとスキャン位置をスタックに積んでいく。処理をLSBまで終えた場合は、スタックを一つ戻し、そこに格納されているマスクと、マスタマスクのANDを取ったものを新たなマスクとし、スタックに格納されているスキャン位置から次のスキャンダウンを開始する。これにより、最上位からスキャンダウンを開始する必要が無く、処理シーケンススキップ部分の処理量を減らすことができる(図24Aの2回目のビット列[3]及びビット列[2]、図24Bの3回目のビット列[3]、同4回目のビット列全ての処理)。特に全体ビット桁数に比べ、有効ビット桁数が少ない場合に有効である。
図25A及び図25Bは、実施の形態1における基本グルーピングソート方式と本実施の形態におけるスタック方式の処理の比較を示している。基本グルーピングソート方式のソートでは、値が例に示す(2,5,14,15)だった場合、図25Aのように各スキャンダウン(P1~P4)で先頭ビット(MSB)から最下位ビット(LSB)までのスキャンが必要になる。この例では、各スキャンダウンで5回の処理(ビットスキャン処理)となるため、全データをソートするためには20回の処理が必要になる。これに対し、スタック方式の場合は、図25Bのように直前の分岐位置からスキャンダウンを行うため、MSBからLSBまで全ビットをスキャンする必要がない。そうすると、この例では、スキャンダウン順に、P1=5回、P2=3回、P3=4回、P4=0回の処理となり、全データのソートを12回の処理で行うことができる。例えば、全体のビット数に比べ有効ビットが少ない場合や、絞り込みの結果、データに偏りが生じた場合などに効率よく処理することができる。なお、処理結果の早期検出を行う場合、さらに処理回数を減らすことができ、図25Bでは、P1のビット列[1]及びビット列[0]、P2のビット列[1]及びビット列[0]のスキャンダウン自体も不要になる。
(実施の形態7)
次に、実施の形態7について説明する。本実施の形態では、実施の形態1~5のデータ処理装置において、グルーピング結果に対し、ビットカウントにより積算を行う例について説明する。
次に、実施の形態7について説明する。本実施の形態では、実施の形態1~5のデータ処理装置において、グルーピング結果に対し、ビットカウントにより積算を行う例について説明する。
<データ処理装置の構成>
図26は、本実施の形態に係るデータ処理装置の構成例を示している。図26に示すように、本実施の形態に係るデータ処理装置100は、実施の形態1の構成に加えて、ビットカウント部160、積算部161を備えている。
図26は、本実施の形態に係るデータ処理装置の構成例を示している。図26に示すように、本実施の形態に係るデータ処理装置100は、実施の形態1の構成に加えて、ビットカウント部160、積算部161を備えている。
ビットカウント部160は、グルーピング処理結果のONビットをカウント(ビットカウント)するビットカウント処理を行う。また、グルーピング結果と複数のスキャンデータとをマスクした結果のビットをビットカウントする。例えば、処理結果マスクが“11011110”の場合、ビットカウント処理では、この結果マスクのONビットをカウントし、ビットカウント結果は6となる。
積算部161は、ビットカウント結果を用いて、グルーピングされたデータの積算処理を行う。積算部161は、マスク結果のビットカウント値に応じた値を積算する。具体的には、ビットカウント値をスキャンデータのビット位置に応じてビットシフトし、ビットシフトした値を合計する。なお、データ処理装置100は、少なくとも、ビットカウント部160と積算部161を備え、入力される複数のデータに対しビットカウント処理と積算処理を行ってもよい。
<ビットカウントによる積算処理の処理フロー>
図27は、本実施の形態に係るデータ処理方法のフローチャートを示している。図27は、ビットカウントを使った積算処理の例である。例えば、以下の処理は主に積算部161により実行され、ビットカウントの処理がビットカウント部160により実行されるが、これに限られない。
図27は、本実施の形態に係るデータ処理方法のフローチャートを示している。図27は、ビットカウントを使った積算処理の例である。例えば、以下の処理は主に積算部161により実行され、ビットカウントの処理がビットカウント部160により実行されるが、これに限られない。
図27に示すように、まず、データ処理装置100は、積算処理の初期設定として、積算結果を0に初期化し、変数PにMSB位置を設定する(S1101)。次に、データ処理装置100は、積算結果を左に1ビットシフトする(S1102)。
次に、データ処理装置100は、マスタマスク(Mask)とPビット列の積算ビットデータとをAND演算し、そのAND演算の結果を変数Bに設定する(S1103)。積算ビットデータは、積算対象のデータの各ビット列データ(スキャンデータ)である。
次に、データ処理装置100は、マスク結果である変数Bをビットカウントし、そのビットカウント結果を積算結果に加算し、その加算結果により積算結果を更新する(S1104)。次に、データ処理装置100は、処理中のビット列である変数PがLSBか否か、すなわち、全ビットのスキャンが終了したか否か判定する(S1105)。
S1105で変数PがLSB以外の場合、すなわち、全ビットのスキャンが終了していない場合、データ処理装置100は、次のスキャンのために、変数PをLSB側に一つ移動し(S1106)、S1102以降の処理を繰り返す。また、S1105で変数PがLSBである場合、すなわち、全ビットのスキャンが終了した場合、データ処理装置100は、積算結果を出力する(S1107)。
<ビットカウントによる積算処理の動作例>
図28は、本実施の形態に係るデータ処理の動作例を示している。図28は、図27のようにビットカウントを使って積算処理を行う例である。
図28は、本実施の形態に係るデータ処理の動作例を示している。図28は、図27のようにビットカウントを使って積算処理を行う例である。
図28の例では、レコード番号0~7の8レコードのデータが入力される。レコード番号0のデータ値が0、レコード番号1のデータ値が5、レコード番号2のデータ値が10、レコード番号3のデータ値が3、レコード番号4のデータ値が2、レコード番号5のデータ値が6、レコード番号6のデータ値が8、レコード番号7のデータ値が9である。
例えば、図14で示した小なりイコールの検索処理と同様に、ビット列[3]~[0]をスキャンし、8以下のデータを検索すると、処理結果マスク“11011110”が得られる(S1200)。
まず、積算結果の初期値は0であり、左に1ビットシフトしても0である(S1201)。また、ビット列[3]のスキャンデータ“00100011”を処理結果マスクによりマスクすると、マスク結果が“00000010”となり、このマスク結果をビットカウントすると1となる(S1202)。このビットカウント結果を積算結果に加えると、“00001”(=1)となる(S1203)。
次に、現在の積算結果を1ビット左にシフトすると、“00010”(=2)となる(S1204)。また、ビット列[2]のスキャンデータ“01000100”を処理結果マスクによりマスクすると、マスク結果が“01000100”となり、このマスク結果をビットカウントすると2となる(S1205)。このビットカウント結果を積算結果に加えると、“00100”(=4)となる(S1206)。
次に、現在の積算結果を1ビット左にシフトすると、“01000”(=8)となる(S1207)。また、ビット列[1]のスキャンデータ“00111100”を処理結果マスクによりマスクすると、マスク結果が“00011100”となり、このマスク結果をビットカウントすると3となる(S1208)。このビットカウント結果を積算結果に加えると、“01011”(=11)となる(S1209)。
次に、現在の積算結果を1ビット左にシフトすると、“10110”(=22)となる(S1210)。また、ビット列[0]のスキャンデータ“01010001”を処理結果マスクによりマスクすると、マスク結果が“01010000”となり、このマスク結果をビットカウントすると2となる(S1211)。このビットカウント結果を積算結果に加えると、最終的な積算結果は“11000”(=24)となる(S1212)。
図29は、本実施の形態に係るデータ処理の他の動作例を示している。図29は、各ビット列でビットカウントを行い、最後に積算する例である。入力されるデータ及び処理結果マスクは図25と同じである。
まず、図28と同様に、ビット列[3]のスキャンデータを処理結果マスクによりマスクし、そのマスク結果をビットカウントすると1となる(S1202)。この積算方法では、ビット位置に応じてビットカウント値を左にシフトする。このときビット列[3]のため、このビットカウント結果“1”を3ビット左にシフトすると、“0001000”(=8)となる(S1221)。
次に、ビット列[2]のスキャンデータを処理結果マスクによりマスクし、そのマスク結果をビットカウントすると2となる(S1205)。このときビット列[2]のため、このビットカウント結果“2”を2ビット左にシフトすると、“0001000”(=8)となる(S1222)。
次に、ビット列[1]のスキャンデータを処理結果マスクによりマスクし、そのマスク結果をビットカウントすると3となる(S1208)。このときビット列[1]のため、このビットカウント結果“3”を1ビット左にシフトすると、“0000110”(=6)となる(S1223)。
次に、ビット列[0]のスキャンデータを処理結果マスクによりマスクし、そのマスク結果をビットカウントすると2となる(S1211)。このときビット列[0]のため、このビットカウント結果“2”を0ビット左にシフトすると(シフトしないのと同じ)、“0000010”(=2)となる(S1224)。
次に、ビット列[3]のビットカウント値のシフト結果“8”、ビット列[2]のビットカウント値のシフト結果“8”、ビット列[1]のビットカウント値のシフト結果“6”、ビット列[0]のビットカウント値のシフト結果“2”を合計すると、積算結果“24”となる(S1225)。本処理を使用しない一般的な積算方法では、0+5+3+2+6+8=24となるのに対し、本処理では、8+8+6+2により同じ結果を得ることができる。
<本実施の形態の効果>
以上のように、本実施の形態では、ビットカウントを使用して積算処理を行い、縦展開されたデータに対し高速な演算処理を可能とする。この方式では、各データの、横方向のビット列に対して、ビットカウントを求め、その結果をシフトしながら加算することで、積算を行う。この方式の計算量は、O(n/ビットカウント幅*データビットサイズ)となる。大量データに対し、ビットカウントを行う幅が広くなる、もしくは、有効データビットサイズが小さくなるに従い、計算は高速化される。
以上のように、本実施の形態では、ビットカウントを使用して積算処理を行い、縦展開されたデータに対し高速な演算処理を可能とする。この方式では、各データの、横方向のビット列に対して、ビットカウントを求め、その結果をシフトしながら加算することで、積算を行う。この方式の計算量は、O(n/ビットカウント幅*データビットサイズ)となる。大量データに対し、ビットカウントを行う幅が広くなる、もしくは、有効データビットサイズが小さくなるに従い、計算は高速化される。
例えば、8ビットサイズ×256データに対し積算を行う場合、本方式を使用しない通常加算では256回の加算が必要となるが、本方式の256ビットのビットカウント型積算では、AND操作×8回+ビットカウント×8回+シフト×8回+加算×8回=32回の演算で完了する。
実施の形態1~6のようにグルーピングを行う際には、そのグループに属するデータのレコード数ならびに、そのグループの特定のフィールドの積算(Sum)値を同時に取得することが多い。上記のように、グループに属するレコード数のカウント処理は、単純にビットカウントにより結果マスクのONビット数(1のビットの数)を数えることによって得られる。本実施の形態の積算処理をグルーピングの演算結果に適用することで、効率よく積算結果を求めることができる。例えば、実施の形態1のグルーピングソート処理において積算を行う場合、図3のS107の後に、図27の積算処理を行う。
なお、レコード数のカウント処理と積算処理は結果マスクと積算を行うフィールドが決まれば実施することができるため、グルーピングの結果に限らず、全件積算や通常の絞り込み(検索)の結果に対しても適用できる。また、積算値とレコード数が求められれば、(積算値÷レコード数)を求めることで、平均値も容易に求めることができる。従って、平均値を使う分散や標準偏差などの計算にもこの処理を活用することができる。
(実施の形態8)
次に、実施の形態8について説明する。本実施の形態では、実施の形態1~7のデータ処理装置において、複数のテーブルのデータに対しJOIN処理を行う例について説明する。
次に、実施の形態8について説明する。本実施の形態では、実施の形態1~7のデータ処理装置において、複数のテーブルのデータに対しJOIN処理を行う例について説明する。
<データ処理装置の構成>
図30は、本実施の形態に係るデータ処理装置の構成例を示している。図30に示すように、本実施の形態に係るデータ処理装置100は、実施の形態1の構成に加えて、JOIN処理部170を備えている。なお、データ処理装置100は、少なくとも、JOIN処理部170を備え、JOIN処理のみを行ってもよい。
図30は、本実施の形態に係るデータ処理装置の構成例を示している。図30に示すように、本実施の形態に係るデータ処理装置100は、実施の形態1の構成に加えて、JOIN処理部170を備えている。なお、データ処理装置100は、少なくとも、JOIN処理部170を備え、JOIN処理のみを行ってもよい。
JOIN処理部170は、2つのテーブルに対しJOIN処理を行う。JOIN処理とは、2つのデータ集合を特定のキーを使って結合し、双方のレコードの対応を取る処理である。JOIN処理には、FullOuter-JOIN、LeftOuter-JOIN、RightOuter-JOIN、Inner-JOINが含まれる。
FullOuter-Joinの場合、2つのテーブルのJOINキーを合わせて、グルーピング動作を行うことにより、2つのテーブルの全てのレコードを出力する。この際、双方のJOINキーの同一のレコードは、一つのグループ(JOINされた状態)として出力する。
LeftOuter-Joinの場合、左側(一方)のテーブルでグルーピング動作を行い、その結果出力された、データのJOINキーを使い、右側(他方)のテーブルを検索する。検索の結果、右側のテーブルに同じJOINキーのデータが存在すれば、左側のテーブルのグルーピング結果に、該当レコードを追加(JOINされた状態)して出力する。RightOuter-Joinの場合、LeftOuter-Joinの左と右のテーブルの操作が逆になる。
Inner-Joinの場合、最初に、左右のテーブル各々に対し、各々グルーピングする。左右のテーブルのグルーピングキーの値が異なる場合は、小さいキーを出力したテーブルに対し、大きいほうのグルーピングキーをポジショナルグルーピングの「以上」の絞り込み値に指定してポジショナルグルーピングを行う。両方のテーブルのグルーピングキーに同じ値が得られた場合は、その両方を合わせて(JOINされた状態)出力し、左右のテーブル各々に対し、各々次のグルーピングを得る。この動作を、いずれかのテーブルのデータが無くなるまで繰り返す。
<Inner-Joinの処理フロー>
図31は、本実施の形態に係るデータ処理に含まれるInnerーJOIN処理のフローチャートを示している。この例では、テーブルAとテーブルBに対しJOIN処理を行う。
図31は、本実施の形態に係るデータ処理に含まれるInnerーJOIN処理のフローチャートを示している。この例では、テーブルAとテーブルBに対しJOIN処理を行う。
図31に示すように、まず、データ処理装置100は、テーブルAとテーブルBの各々の基本グルーピング結果を取得(昇順、取得件数=1)する(S1301)。例えば、実施の形態2のように、昇順の基本グルーピングソートにより、各テーブルのデータをグルーピングし、指定された件数(1件)のデータを取得する。
次に、データ処理装置100は、両方のテーブルのグルーピング値が求まっているか(グルーピング結果があるか)否か判定する(S1302)。S1302で両方のテーブルのグルーピング値が求まっていない場合、データ処理装置100は処理を終了する。また、S1302で両方のテーブルのグルーピング値が求まっている場合、データ処理装置100は、両方のテーブルのグルーピング値が同じか否か判定する(S1303)。
S1303で両方のテーブルのグルーピング値が同じ場合、データ処理装置100は、両方のテーブルのグルーピング結果を合わせて出力(Join結果出力)する(S1304)。次に、データ処理装置100は、テーブルAとテーブルBの各々の次の基本グルーピング結果を取得(昇順、取得件数=1)し(S1305)、その後、S1302以降を繰り返す。
また、S1303で両方のテーブルのグルーピング値が異なる場合、データ処理装置100は、テーブルAのグルーピング値がテーブルBのグルーピング値より小さいか否か判定する(S1306)。S1306でテーブルAのグルーピング値がテーブルBのグルーピング値より小さい場合、データ処理装置100は、テーブルBのグルーピング値によりテーブルAをポジショナルグルーピングする(S1307)。すなわち、テーブルBのグルーピング値を絞り込み開始データに指定し、テーブルAを「以上(大なりイコール)」の条件でポジショナルグルーピング(昇順、取得件数=1)し、その後、S1302以降を繰り返す。ポジショナルグルーピングは、実施の形態3のように、グルーピングの最初に、絞り込み動作(昇順の場合は、より大きいもしくは以下、降順の場合は、より小さいもしくは以下)を加えた、任意の位置を開始点とするグルーピング処理である。
また、S1306でテーブルAのグルーピング値がテーブルBのグルーピング値以上の場合、データ処理装置100は、テーブルAのグルーピング値によりテーブルBをポジショナルグルーピングする(S1308)。すなわち、テーブルAのグルーピング値を絞り込み開始データに指定し、テーブルBを「以上(大なりイコール)」の条件でポジショナルグルーピング(昇順、取得件数=1)し、その後、S1302以降を繰り返す。
<JOIN処理の動作例>
図32は、本実施の形態に係るデータ処理であるJOIN処理の動作例を示している。図29の例では、テーブルAには、1(A1),2(A2),4(A4),5(A5),6(A6)のデータが格納され、テーブルBには、2(B2),3(B3),6(B6)のデータが格納されている。なお、説明の簡略化のため、各テーブルに各値のデータが一つしか含まれていないが、同値のデータが複数ある場合は、グルーピング動作により同値のデータが同時検出される。
図32は、本実施の形態に係るデータ処理であるJOIN処理の動作例を示している。図29の例では、テーブルAには、1(A1),2(A2),4(A4),5(A5),6(A6)のデータが格納され、テーブルBには、2(B2),3(B3),6(B6)のデータが格納されている。なお、説明の簡略化のため、各テーブルに各値のデータが一つしか含まれていないが、同値のデータが複数ある場合は、グルーピング動作により同値のデータが同時検出される。
図32(a)に示すように、FullOuter-JOINの場合、テーブルAとテーブルBのJoinカラムを同一位置に配置し、全体を対象に基本グルーピングを行う。FullOuter-JOINの結果は、JOIN個数=6、JOINデータ=(A1)、(A2,B2)、(B3)、(A4)、(A5)、(A6,B6)となる。
図32(b)に示すように、LeftOuter-JOINの場合、テーブルAでまず基本グルーピングを行い、テーブルAのグルーピング結果を使って、テーブルBを同値検索する。LeftOuter-JOINの結果は、JOIN個数=5、JOINデータ=(A1)、(A2,B2)、(A4)、(A5)、(A6,B6)となる。
図32(c)に示すように、RightOuter-JOINの場合、テーブルBでまず基本グルーピングを行い、テーブルBのグルーピング結果を使って、テーブルAを同値検索する。RightOuter-JOINの結果は、JOIN個数=3、JOINデータ=(A2,B2)、(B3)、(A6,B6)となる。
図32(d)に示すように、Inner-JOINの場合、テーブルAとテーブルBでポジショナルグルーピングを行い、同値がある箇所のみ結果を出力する。
まず、テーブルAとテーブルBを各々基本グルーピングし、テーブルAの結果が1、テーブルBの結果が2となる(S1401)。次に、S1401の結果ではテーブルAの値(1)の方が小さいため、テーブルBの値(2)以上でテーブルAをポジショナルグルーピングすると、テーブルAの結果が2となる(S1402)。
次に、S1402の結果ではテーブルAとテーブルBに同じ値(2)が現れるため、グルーピング結果(A2,B2)を出力し、さらに両テーブルを各々基本グルーピングする(S1403)。次に、S1403の結果ではテーブルBの値(3)の方が小さいため、テーブルAの値(4)以上でテーブルBをポジショナルグルーピングすると、テーブルBの結果が6となる(S1404)。
次に、S1404の結果ではテーブルAの値(4)の方が小さいため、テーブルBの値(6)以上でテーブルAをポジショナルグルーピングすると、テーブルAの結果が6となる(S1405)。次に、S1405の結果ではテーブルAとテーブルBに同じ値(6)が現れるため、グルーピング結果(A6、B6)を出力し、さらに両テーブルを各々基本グルーピングする(S1406)。S1406で新たなグルーピングデータ無しとなり処理を終了する(S1407)。
<本実施の形態の効果>
通常、JOIN処理を高速に行うためにはインデックスの作成を避けては通れない。しかしながら、一般に使われるB-Treeやハッシュインデックスの作成や更新は、序列(SORT順)の維持や、生成されるハッシュ値の変化による格納位置の変更などの処理を伴うため、生成や更新の処理負荷が大きい。一方、本実施の形態に係るJOIN処理では、上記実施の形態におけるグルーピング処理を使用することで、インデックスの作成を前提とせずに、任意のデータ集合をJOINすることができ、効率よくJOIN処理を行うことができる。
通常、JOIN処理を高速に行うためにはインデックスの作成を避けては通れない。しかしながら、一般に使われるB-Treeやハッシュインデックスの作成や更新は、序列(SORT順)の維持や、生成されるハッシュ値の変化による格納位置の変更などの処理を伴うため、生成や更新の処理負荷が大きい。一方、本実施の形態に係るJOIN処理では、上記実施の形態におけるグルーピング処理を使用することで、インデックスの作成を前提とせずに、任意のデータ集合をJOINすることができ、効率よくJOIN処理を行うことができる。
なお、本発明は上記実施の形態に限られたものではなく、趣旨を逸脱しない範囲で適宜変更することが可能である。
上述の実施形態における各構成は、ハードウェア又はソフトウェア、もしくはその両方によって構成され、1つのハードウェア又はソフトウェアから構成してもよいし、複数のハードウェア又はソフトウェアから構成してもよい。各装置の機能(処理)を、CPUやメモリ等を有するコンピュータにより実現してもよい。例えば、記憶装置に実施形態における方法を行うためのプログラムを格納し、各機能を、記憶装置に格納されたプログラムをCPUで実行することにより実現してもよい。
これらのプログラムは、コンピュータに読み込まれた場合に、実施形態で説明された1又はそれ以上の機能をコンピュータに行わせるための命令群(又はソフトウェアコード)を含む。プログラムは、非一時的なコンピュータ可読媒体又は実体のある記憶媒体に格納されてもよい。限定ではなく例として、コンピュータ可読媒体又は実体のある記憶媒体は、random-access memory(RAM)、read-only memory(ROM)、フラッシュメモリ、solid-state drive(SSD)又はその他のメモリ技術、CD-ROM、digital versatile disc(DVD)、Blu-ray(登録商標)ディスク又はその他の光ディスクストレージ、磁気カセット、磁気テープ、磁気ディスクストレージ又はその他の磁気ストレージデバイスを含む。プログラムは、一時的なコンピュータ可読媒体又は通信媒体上で送信されてもよい。限定ではなく例として、一時的なコンピュータ可読媒体又は通信媒体は、電気的、光学的、音響的、またはその他の形式の伝搬信号を含む。
この出願は、2021年9月22日に出願された日本出願特願2021-154550を基礎とする優先権を主張し、その開示の全てをここに取り込む。
本発明は、データベースのデータを処理するデータ処理装置に好適に適用することができる。
100 データ処理装置
110 記憶部
120 取得部
121 分割部
130 マスク保持部
131 マスク退避部
132 絞り込み部
133 スタック部
140、140a、140b スキャンダウン部
141 昇順処理部
142 降順処理部
150 出力部
160 ビットカウント部
161 積算部
170 JOIN処理部
110 記憶部
120 取得部
121 分割部
130 マスク保持部
131 マスク退避部
132 絞り込み部
133 スタック部
140、140a、140b スキャンダウン部
141 昇順処理部
142 降順処理部
150 出力部
160 ビットカウント部
161 積算部
170 JOIN処理部
Claims (15)
- 複数のNビットの入力データにおける同じビット位置のビットデータを含むスキャンデータを、ビット位置順に取得する取得部と、
前記取得されるスキャンデータを用いてマスクデータにマスクをかけるマスク処理と前記マスク処理の結果に応じた前記マスクデータの更新処理とを含むビットスキャン処理を行い、前記第1のビット位置のスキャンデータから前記第Nのビット位置のスキャンデータまで前記ビットスキャン処理を繰り返すスキャンダウン処理を行うスキャンダウン部と、
前記スキャンダウン処理ごとに得られる同値の前記入力データをソート順に逐次出力する出力部と、
を備えるデータ処理装置。 - 前記ビットスキャン処理では、前記マスク処理の結果が0の場合、前記マスクデータの更新処理をスキップする、
請求項1に記載のデータ処理装置。 - 前記マスク処理では、前記入力データを昇順にソートする場合、前記マスクデータに対し前記スキャンデータの反転データを使ってマスクをかけ、前記入力データを降順にソートする場合、前記マスクデータに対し前記スキャンデータをそのまま使ってマスクをかける、
請求項1または2に記載のデータ処理装置。 - 前記複数の入力データのうちソート対象のデータに対応するマスタマスクを保持する保持部をさらに備え、
前記スキャンダウン部は、前記マスタマスクを前記マスクデータの初期値として、第1のビット位置のスキャンデータから第Nのビット位置のスキャンデータに対し前記スキャンダウン処理を開始し、前記スキャンダウン処理を繰り返す、
請求項1乃至3のいずれか一項に記載のデータ処理装置。 - 前記スキャンダウン部は、前記スキャンダウン処理の終了ごとに、処理結果に応じて前記マスタマスクを更新する、
請求項4に記載のデータ処理装置。 - 前記マスタマスクの更新では、前記マスタマスクと前記スキャンダウン処理の結果の反転データとを論理積演算した結果により、前記マスタマスクを更新する、
請求項5に記載のデータ処理装置。 - 前記入力データからソート対象のデータを絞り込み、前記絞り込み結果に応じて前記マスタマスクを更新する絞り込み部を備える、
請求項4乃至6のいずれか一項に記載のデータ処理装置。 - 前記絞り込み部は、前記複数のスキャンデータに対し前記ビットスキャン処理を行うことで、前記入力データから所定の範囲のデータを抽出する、
請求項7に記載のデータ処理装置。 - 前記マスク処理の結果をスタックするスタック部をさらに備え、
前記スキャンダウン部は、前記スタックされたマスク結果に対応するビット位置から前記スキャンダウン処理を開始する、
請求項4乃至8のいずれか一項に記載のデータ処理装置。 - 前記取得されたスキャンデータを複数の分割スキャンデータに分割する分割部をさらに備え、
前記スキャンダウン部は、前記分割スキャンデータごとに前記スキャンダウン処理を行う、
請求項1乃至9のいずれか一項に記載のデータ処理装置。 - 前記スキャンダウン部は、前記入力データを昇順にソートするスキャンダウン処理と、前記入力データを降順にソートするスキャンダウン処理とを並列に行う、
請求項1乃至10のいずれか一項に記載のデータ処理装置。 - 前記スキャンダウン処理の結果と前記複数のスキャンデータとをマスクした結果のビットをビットカウントするビットカウント部と、
前記ビットカウントの結果に応じた値を積算する積算部と、をさらに備える、
請求項1乃至11のいずれか一項に記載のデータ処理装置。 - 前記スキャンダウン部は、複数のテーブルから取得されるスキャンデータに対しスキャンダウン処理を行い、
前記スキャンダウン処理によるソート結果に基づいて、前記複数のテーブルのJOIN処理を行うJOIN処理部をさらに備える、
請求項1乃至12のいずれか一項に記載のデータ処理装置。 - データ処理装置がデータを処理する方法であって、
複数のNビットの入力データにおける同じビット位置のビットデータを含むスキャンデータを、ビット位置順に取得し、
前記取得されるスキャンデータを用いてマスクデータにマスクをかけるマスク処理と前記マスク処理の結果に応じた前記マスクデータの更新処理とを含むビットスキャン処理を行い、前記第1のビット位置のスキャンデータから前記第Nのビット位置のスキャンデータまで前記ビットスキャン処理を繰り返すスキャンダウン処理を行い、
前記スキャンダウン処理ごとに得られる同値の前記入力データをソート順に逐次出力する、
データ処理方法。 - 複数のNビットの入力データにおける同じビット位置のビットデータを含むスキャンデータを、ビット位置順に取得し、
前記取得されるスキャンデータを用いてマスクデータにマスクをかけるマスク処理と前記マスク処理の結果に応じた前記マスクデータの更新処理とを含むビットスキャン処理を行い、前記第1のビット位置のスキャンデータから前記第Nのビット位置のスキャンデータまで前記ビットスキャン処理を繰り返すスキャンダウン処理を行い、
前記スキャンダウン処理ごとに得られる同値の前記入力データをソート順に逐次出力する、
処理をコンピュータに実行させるためのプログラム。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2021154550A JP6986309B1 (ja) | 2021-09-22 | 2021-09-22 | データ処理装置、データ処理方法、及びプログラム |
JP2021-154550 | 2021-09-22 |
Publications (1)
Publication Number | Publication Date |
---|---|
WO2023047934A1 true WO2023047934A1 (ja) | 2023-03-30 |
Family
ID=79193192
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
PCT/JP2022/033333 WO2023047934A1 (ja) | 2021-09-22 | 2022-09-05 | データ処理装置、データ処理方法、及びプログラム |
Country Status (2)
Country | Link |
---|---|
JP (1) | JP6986309B1 (ja) |
WO (1) | WO2023047934A1 (ja) |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH0895753A (ja) * | 1994-09-26 | 1996-04-12 | Canon Inc | 情報処理装置 |
JP2005085125A (ja) * | 2003-09-10 | 2005-03-31 | Oki Electric Ind Co Ltd | データ並び替え方法 |
US20090177657A1 (en) * | 2008-01-08 | 2009-07-09 | Dennis James Carroll | In-place sorting using node specific mask width |
JP2017016668A (ja) * | 2013-12-23 | 2017-01-19 | 井上 克己 | 情報検索機能を備えたメモリ、その利用方法、装置、情報処理方法。 |
JP2018139017A (ja) * | 2015-06-08 | 2018-09-06 | 井上 克己 | メモリ型プロセッサ、メモリ型プロセッサを含んだ装置、その使用方法。 |
-
2021
- 2021-09-22 JP JP2021154550A patent/JP6986309B1/ja active Active
-
2022
- 2022-09-05 WO PCT/JP2022/033333 patent/WO2023047934A1/ja active Application Filing
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH0895753A (ja) * | 1994-09-26 | 1996-04-12 | Canon Inc | 情報処理装置 |
JP2005085125A (ja) * | 2003-09-10 | 2005-03-31 | Oki Electric Ind Co Ltd | データ並び替え方法 |
US20090177657A1 (en) * | 2008-01-08 | 2009-07-09 | Dennis James Carroll | In-place sorting using node specific mask width |
JP2017016668A (ja) * | 2013-12-23 | 2017-01-19 | 井上 克己 | 情報検索機能を備えたメモリ、その利用方法、装置、情報処理方法。 |
JP2018139017A (ja) * | 2015-06-08 | 2018-09-06 | 井上 克己 | メモリ型プロセッサ、メモリ型プロセッサを含んだ装置、その使用方法。 |
Also Published As
Publication number | Publication date |
---|---|
JP6986309B1 (ja) | 2021-12-22 |
JP2023045929A (ja) | 2023-04-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103229147B (zh) | 用于去重存储系统内的合成备份的方法和系统 | |
CN107391554B (zh) | 高效分布式局部敏感哈希方法 | |
JP2790466B2 (ja) | 文字列検索方法及び装置 | |
CN109299086B (zh) | 最优排序键压缩和索引重建 | |
Peng et al. | Paris+: Data series indexing on multi-core architectures | |
JP6160259B2 (ja) | 文字列探索方法、文字列探索装置および文字列探索プログラム | |
Li et al. | Optimal in-place suffix sorting | |
JPWO2006061899A1 (ja) | 文字列照合装置および文字列照合プログラム | |
JP6434162B2 (ja) | データ管理システム、データ管理方法およびプログラム | |
Kärkkäinen et al. | Engineering a lightweight external memory suffix array construction algorithm | |
US20230367781A1 (en) | Systems and methods for processing timeseries data | |
Jenkins et al. | ALACRITY: Analytics-driven lossless data compression for rapid in-situ indexing, storing, and querying | |
Patel et al. | New Approach for K-mean and K-medoids Algorithm | |
US20110246451A1 (en) | Storage device having full-text search function | |
US10049164B2 (en) | Multidimensional-range search apparatus and multidimensional-range search method | |
JP4491480B2 (ja) | インデクス構築方法、文書検索装置及びインデクス構築プログラム | |
Kempa et al. | LZ-End parsing in linear time | |
WO2023047934A1 (ja) | データ処理装置、データ処理方法、及びプログラム | |
Martayan et al. | Conway–Bromage–Lyndon (CBL): an exact, dynamic representation of k-mer sets | |
CN113742332B (zh) | 数据存储方法、装置、设备及存储介质 | |
CN113407693A (zh) | 一种用于全媒体审读的文本相似度比对方法及装置 | |
JP2010225156A (ja) | 文字列照合装置および文字列照合プログラム | |
JPWO2009147794A1 (ja) | 有限オートマトン生成システム | |
Petri et al. | Efficient indexing algorithms for approximate pattern matching in text | |
Wangikar et al. | Study and Implementation of Record De-duplication Algorithms |
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: 22872690 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: 22872690 Country of ref document: EP Kind code of ref document: A1 |