WO2018101607A1 - 벡터 프로세서 및 그 제어 방법 - Google Patents
벡터 프로세서 및 그 제어 방법 Download PDFInfo
- Publication number
- WO2018101607A1 WO2018101607A1 PCT/KR2017/011725 KR2017011725W WO2018101607A1 WO 2018101607 A1 WO2018101607 A1 WO 2018101607A1 KR 2017011725 W KR2017011725 W KR 2017011725W WO 2018101607 A1 WO2018101607 A1 WO 2018101607A1
- Authority
- WO
- WIPO (PCT)
- Prior art keywords
- input data
- shuffle
- register
- address
- data
- Prior art date
Links
- 239000013598 vector Substances 0.000 title claims abstract description 40
- 238000000034 method Methods 0.000 title claims description 41
- 238000004364 calculation method Methods 0.000 claims description 7
- 238000010586 diagram Methods 0.000 description 10
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 239000011159 matrix material Substances 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30032—Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/3001—Arithmetic instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30036—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/30105—Register structure
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/3012—Organisation of register space, e.g. banked or distributed register file
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
- G06F9/3887—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
Definitions
- the present invention relates to a vector processor and a method of controlling the same, and more particularly, to a vector processor and a method of controlling the same simultaneously processing a plurality of values with a single instruction.
- SIMD Single Instruction Multiple Data
- SIMD is a class of parallel operations that process multiple data through a single instruction.
- SIMD is a method in which a plurality of execution units apply the same or similar operations to a plurality of data and process them simultaneously.
- the present invention is directed to the above-described needs, and an object of the present invention is to provide a vector processor and a control method thereof for improving the processing speed of overlapping operations.
- the vector processor is provided in each of a plurality of SIMD (Single Instruction Multiple Data) lanes, each store a plurality of data, the plurality of Receive a plurality of register files for outputting the input data used for the current cycle among the data, a plurality of input data output from the plurality of register files, and the received plurality of input data corresponding to each of the plurality of SIMD lanes
- SIMD Single Instruction Multiple Data
- the plurality of Receive a plurality of register files for outputting the input data used for the current cycle among the data, a plurality of input data output from the plurality of register files, and the received plurality of input data corresponding to each of the plurality of SIMD lanes
- a shuffle unit that shuffles and outputs the data
- an instruction execution unit that receives input data output from the shuffle unit and performs parallel operation.
- the shuffle unit may include a plurality of multiplexers provided in each of the plurality of SIMD lanes, and each of the plurality of multiplexers receives a plurality of input data output from the plurality of register files, and receives the received multiplexers.
- One input data corresponding to a lane having a corresponding multiplexer among the plurality of input data may be output.
- the apparatus may further include a shuffle control unit configured to control the plurality of register files and the shuffle unit for each cycle based on an input command.
- a shuffle control unit configured to control the plurality of register files and the shuffle unit for each cycle based on an input command.
- the shuffle control unit transmits reference register addresses of each of the plurality of SIMD lanes to each of the plurality of register files, wherein the reference register address is used in the current cycle among the plurality of data stored in each register file. It may be an address of the input data.
- the shuffle control unit may transmit shuffle information about the plurality of input data to the shuffle unit, and the shuffle information may be information about input data to be output from each of the plurality of SIMD lanes.
- the shuffle control unit may include an address multiplexer that provides a reference register address for input data to be used in a current cycle in each of the plurality of register files, and a control unit that controls the address multiplexer.
- the shuffle control unit further includes at least one address register for storing a reference register address of each of the plurality of SIMD lanes, wherein the control unit comprises a plurality of references provided from the instruction decoding unit and the at least one address register.
- the address multiplexer can be controlled to provide one of the register addresses to a corresponding register file.
- the input command may include at least one of a type of operation to be processed by the command execution unit, a calculation method, and information about increments in the horizontal and vertical directions.
- the apparatus may further include a scalar register file, and the instruction execution unit may perform parallel operation on input data output from the shuffle unit using the scalar data output from the scalar register file.
- a method of controlling a vector processor includes storing a plurality of data in each of a plurality of register files included in each of a plurality of SIMD lanes, Outputting input data to be used for the current cycle among the data of the plurality of data; receiving a plurality of input data output from the plurality of register files by a shuffle unit, and converting the received plurality of input data into the plurality of SIMD lanes Shuffling and outputting the corresponding data, and receiving input data output from the shuffle unit and performing parallel operation.
- the shuffling and outputting may include receiving a plurality of input data output from the plurality of register files by each of a plurality of multiplexers provided in each of the plurality of SIMD lanes included in the shuffle unit.
- One input data corresponding to a lane provided with a corresponding multiplexer among the plurality of received input data may be output.
- the method may further include controlling the plurality of register files and the shuffle unit for each cycle based on an input command.
- the controlling may include transmitting a reference register address of each of the plurality of SIMD lanes to each of the plurality of register files, wherein the reference register address is used in the current cycle among the plurality of data stored in each register file. It may be an address of data.
- the controlling may include transmitting shuffle information about the plurality of input data to the shuffle unit, and the shuffle information may be information about input data to be output from each of the plurality of SIMD lanes.
- the controlling may include controlling an address multiplexer to provide a reference register address for input data to be used in a current cycle in each of the plurality of register files.
- the controlling may include storing reference register addresses of each of the plurality of SIMD lanes in at least one address register and corresponding one of a plurality of reference register addresses provided from the instruction decoding unit and the at least one address register. Controlling the address multiplexer to provide a register file.
- the input command may include at least one of a type of operation to be processed by the command execution unit, a calculation method, and information about increments in the horizontal and vertical directions.
- the performing of the parallel operation may perform parallel operation on the input data output from the shuffle unit using the scalar data output from the scalar register file.
- the operation method may include a plurality of SIMDs provided in each of a plurality of single instruction multiple data (SIMD) lanes. Storing a plurality of data in each of the plurality of register files, and outputting input data used for the current cycle among the plurality of data, and receiving a plurality of input data output from the plurality of register files by a shuffle unit. And shuffling the received plurality of input data to correspond to each of the plurality of SIMD lanes, and outputting the received data, and receiving the input data output from the shuffle unit and performing parallel operation.
- SIMD single instruction multiple data
- the vector processor may shuffle input data and then perform calculations without restoring to improve processing speed and energy efficiency.
- FIG. 1 is a block diagram illustrating a configuration of a vector processor according to an embodiment of the present invention.
- FIG. 2 is a block diagram illustrating in detail the configuration of the vector processor illustrated in FIG. 1 according to an exemplary embodiment. Referring to FIG.
- 3A to 3C are diagrams for describing an operation when a filter is applied according to an embodiment of the present invention.
- 4A and 4B are diagrams for describing an operation of a plurality of register files according to an embodiment of the present invention.
- 5A and 5B are diagrams for describing an operation of a shuffle unit according to an exemplary embodiment.
- FIG. 6 is a view for explaining a 2D operation according to another embodiment of the present invention.
- FIG. 7 is a view for explaining the simplification of the program code according to an embodiment of the present invention.
- FIG. 8 is a flowchart illustrating a control method of a vector processor according to an embodiment of the present invention.
- FIG. 1 is a block diagram showing the configuration of a vector processor 100 according to an embodiment of the present invention.
- the vector processor 100 includes a plurality of register files 110, a shuffle unit 120, and an instruction execution unit 130.
- the vector processor 100 refers to a processor having instructions for processing a plurality of data called vectors.
- the vector processor 100 may process a single instruction multiple data (SIMD) instruction for vector processing processing a plurality of data.
- SIMD means a method of calculating a plurality of values simultaneously with one command.
- Each of the plurality of register files 110 may be provided in each of the plurality of SIMD lanes. That is, each SIMD lane may have one register file.
- the plurality of SIMD lanes may correspond to parallel processing units. That is, the vector processor 100 may perform parallel processing at the maximum number of SIMD lanes.
- the plurality of register files 110 may be composed of a plurality of scalar register files rather than a vector register file.
- the vector register file may have a structure in which a plurality of data is stored at one address
- the scalar register file may have a structure in which one data is stored at one address. That is, the register address for outputting data stored in the plurality of register files 110 may include SIMD lane information and an address to which data is output from among scalar register files corresponding to the corresponding SIMD lanes.
- the plurality of register files 110 may store a plurality of data, respectively, and may output input data used for the current cycle among the plurality of data.
- one register file can store two data and output the input data used for the current cycle.
- the rest of the register files can store the same two data and output the input data used for the current cycle. That is, the number of data output from the plurality of register files 110 during one cycle may be the same as the number of the plurality of register files 100.
- the present invention is not limited thereto, and when the parallel processing unit is smaller than the number of register files 100, the number of data output from the plurality of register files 110 during one cycle may be the plurality of register files 100. It may be smaller than the number of.
- the shuffle unit 120 is connected to the plurality of register files 110 and may receive a plurality of input data output from the plurality of register files. That is, the shuffle unit 120 may receive one input data for each SIMD lane.
- the shuffle unit 120 may shuffle and output the plurality of received input data to correspond to each of the plurality of SIMD lanes.
- the shuffle unit 120 may receive data a, data b, data c, and data d from each of the first register file, the second register file, the third register file, and the fourth register file.
- each of the first register file, the second register file, the third register file, and the fourth register file may be provided in the first SIMD lane, the second SIMD lane, the third SIMD lane, and the fourth SIMD lane.
- the shuffle unit 120 may shuffle and output the received data a, data b, data c, and data d to be processed in the second SIMD lane, the third SIMD lane, the fourth SIMD lane, and the first SIMD lane, respectively.
- the shuffle method may be preset or input by a user according to the type of operation.
- the instruction execution unit 130 may receive input data output from the shuffle unit 120 and perform parallel operation.
- the instruction execution unit 130 may process a plurality of input data in parallel for each cycle.
- the instruction execution unit 130 may perform arithmetic operations, logical operations, and the like. However, the present invention is not limited thereto, and the command execution unit 130 may perform other operations.
- the instruction execution unit 130 may include a plurality of execution units provided in each of the plurality of SIMD lanes. Alternatively, the instruction execution unit 130 may be implemented to simultaneously process a plurality of operations as one piece of hardware.
- FIG. 2 is a block diagram illustrating in detail the configuration of the vector processor 100 illustrated in FIG. 1 according to an exemplary embodiment. Referring to FIG.
- the vector processor 100 may include a first SIMD lane 10-1, a shuffle control unit 140, and an instruction decoding unit 150 of a plurality of SIMD lanes.
- 2 illustrates only the first SIMD lane 10-1 of the plurality of SIMD lanes for convenience of description. A detailed description of components that overlap with those shown in FIG. 1 among the components shown in FIG. 2 will be omitted.
- the first SIMD lane 10-1 may include a first register file 110-1, a first shuffle data path 120-1, and an execution unit 130-1.
- the first shuffle data path 120-1 may be one component of the shuffle unit 120. That is, the shuffle unit 120 may include a plurality of shuffle data paths, and each shuffle data path may be provided in each SIMD lane.
- the shuffle unit 120 may include a plurality of multiplexers provided in each of the plurality of SIMD lanes. That is, the first shuffle data path 120-1 may be implemented as a multiplexer. Each of the plurality of multiplexers may receive a plurality of input data output from the plurality of register files 110 and may output one input data corresponding to a lane equipped with the multiplexer among the plurality of received input data.
- the first shuffle data path 120-1 may be implemented as a first multiplexer, and the first multiplexer receives input data output from the first register file 110-1 as well as other SIMDs.
- the input data output from the remaining register file included in the lane may be received. That is, the number of input ports of the multiplexer may be equal to the number of SIMD lanes.
- a second shuffle data path (not shown) included in the second SIMD lane (not shown) may be implemented as a second multiplexer, and the second multiplexer receives input data output from a second register file (not shown).
- input data output from the remaining register files included in other SIMD lanes can be received.
- each of the plurality of multiplexers may receive a plurality of input data from the plurality of register files 110.
- each register file 110 may not only provide input data through a shuffle data path included in a corresponding SIMD lane, but also provide input data through a shuffle data path included in another SIMD lane.
- the first shuffle data path 120-1 may provide input data output from the first register file 110-1 to an execution unit included in a SIMD lane other than the first SIMD lane 10-1. .
- the first shuffle data path 120-1 may provide the first execution unit 130-1 with one of a plurality of input data output from a register file other than the first register file 110-1. have.
- the present invention is not limited thereto, and the shuffle data path 120-1 may output the received plurality of input data without shuffling.
- the first shuffle data path 120-1 may provide input data output from the first register file 110-1 to the first execution unit 130-1.
- the input data output from the first register file 110-1 may be provided directly to the first execution unit 130-1 without passing through the first shuffle data path 120-1.
- the shuffle control unit 140 may control the plurality of register files 110 and the shuffle unit 120 for each cycle based on an input command. Alternatively, the shuffle control unit 140 may control the plurality of register files 110 and the shuffle unit 120 for each cycle based on an input command and a current state. In this case, the shuffle control unit 140 may store the current state. In addition, the shuffle control unit 140 may update the current state every time one cycle elapses.
- the shuffle control unit 140 may transmit a reference register address of each of the plurality of SIMD lanes to each of the plurality of register files 110.
- the reference register address may be an address of input data used in a current cycle among a plurality of data stored in each register file.
- the first register file 110-1 may store data a at register address R0 and data b at register address R1.
- the shuffle control unit 140 transmits the reference register address R1 of the first SIMD lane 10-1 to the first register file 110-1
- the first register file 110-1 is registered.
- Data b of address R1 can be output.
- the shuffle control unit 140 may transmit a reference register address corresponding to the remaining register file.
- the shuffle control unit 140 may transmit shuffle information for the plurality of input data to the shuffle unit 120. That is, the shuffle control unit 140 may transmit shuffle information about the plurality of input data to the plurality of shuffle data paths provided in the shuffle unit 120.
- the shuffle information may be information about input data to be output from each of the plurality of SIMD lanes.
- the shuffle control unit 140 may provide the first multiplexer with information about an input port to which input data to be output in a current cycle is input, from among a plurality of input data input to the plurality of input ports of the first multiplexer. have.
- the shuffle control unit 140 may provide information corresponding to each of the remaining multiplexers.
- the shuffle control unit 140 may generate shuffle information for the plurality of input data based on at least one of an input command and a current state. As described above, the plurality of register files 110 and the shuffle unit 120 shuffle. It may operate under the control of the control unit 140. Hereinafter, the configuration of the shuffle control unit 140 will be described in more detail.
- the shuffle control unit 140 may include an address multiplexer 141, an address register 142, a control unit 143, and a configuration register 144.
- the address multiplexer 141 may provide a reference register address for input data to be used in the current cycle to each of the plurality of register files 110.
- the address multiplexer 141 is illustrated as one, but is not limited thereto.
- the address multiplexer 141 may be implemented in plural to correspond to each of the plurality of register files 110.
- At least one address register 142 may store a reference register address of each of the plurality of SIMD lanes.
- the at least one address register 142 may receive and store a reference register address from the instruction decoding unit 150.
- the control unit 143 may control the address multiplexer 141 and the shuffle data path 120-1. Since the method of controlling the shuffle data path 120-1 has been described, a detailed description thereof will be omitted.
- the control unit 143 may control the address multiplexer 141 to provide one of a plurality of reference register addresses provided from the instruction decoding unit 150 and the at least one address register 142 to a corresponding register file.
- the configuration register 144 may store information included in an input command.
- configuration register 144 may store the current state.
- configuration register 144 may include a counter that stores the current state.
- the control unit 143 may control other units based on the information stored in the configuration register 144.
- the input command may include at least one of a type of operation to be processed by the command execution unit 130, a calculation method, and information about increments in the horizontal and vertical directions.
- the vector processor 100 may further include an instruction memory (not shown), an instruction fetch unit (not shown), an instruction decoding unit 150, a scalar register file (not shown), and the like.
- the instruction memory can store instructions.
- the instruction fetch unit may read the instruction to be used in the current cycle from the instruction memory based on the input instruction.
- the instruction decoding unit 150 may decode the fetched instruction to determine the type of instruction, the address of input data of the instruction, and the like.
- the scalar register file is provided separately from the plurality of register files and is a register file for storing scalar data.
- the plurality of register files are register files for storing vector data.
- the instruction execution unit 130 may perform parallel operation on the plurality of input data output from the shuffle unit 120 using the scalar data output from the scalar register file.
- scalar data output from the scalar register file may be transmitted to all of the plurality of execution units included in the instruction execution unit 130.
- the execution unit may calculate scalar data and input data input to each execution unit. That is, the plurality of execution units may perform parallel operation using one scalar data.
- the instruction execution unit 130 receives input data directly from the shuffle unit 120 instead of the plurality of register files 110, thereby improving processing speed and energy efficiency.
- the vector processor 100 receives input data directly from the shuffle unit 120 instead of the plurality of register files 110, thereby improving processing speed and energy efficiency.
- 3A to 3C are diagrams for describing an operation when a filter is applied according to an embodiment of the present invention.
- FIG. 3A illustrates an example of a filter that may be applied to an image.
- FIG. 3A illustrates a 3 ⁇ 3 matrix filter
- the present invention is not limited thereto and may be any other type of filter.
- the technique of the present application is applicable to all cases where parallel operation may be applied even if the filter is not.
- the vector processor 100 may apply a filter to the image as shown in FIG. 3B.
- the upper figure of FIG. 3B shows data for each pixel of the image, and the lower figure of FIG. 3B shows an image to which a filter is applied.
- the filter can be stored in a scalar register file.
- the processor applies each of w0, w1, ..., w8 to (0,0), (0,1), (0,2), ( Multiply by 1,0), (1,1), (1,2), (2,0), (2,1), (2,2) pixels, and add up all the multiplied values. Data of (0,0) pixels can be determined.
- the processor selects w0, w1, ..., w8 respectively from (0,1), (0,2), (0,3), (1,1), (1,2), (1) of the upper image. , 3), (2,1), (2,2), and (2,3) pixels may be applied to determine data of (0,1) pixels of the lower image of FIG. 3B.
- the processor may repeat this process for all pixels to generate the lower image of FIG. 3B.
- the vector processor 100 multiplies w0 by each of (0,0), (0,1), (0,2), and (0,3) of the upper image.
- multiplication operations of (0,0), (0,1), (0,2), and (0,3) of w0 and the upper image may be performed in each of the SIMD lanes. For example, a multiplication operation of w0 and (0,0) of the upper image is performed in the first SIMD lane, a multiplication operation of (0,1) of w0 and the upper image is performed in the second SIMD lane, and a third operation is performed.
- a multiplication operation of w0 and (0,2) of the upper image in the SIMD lane may be performed, and a multiplication operation of (0,3) of w0 and the upper image in the fourth SIMD lane may be performed.
- the above operation can be performed in the cycle of T0.
- a multiplication operation of w1 and (0,1) of the upper image is performed in the first SIMD lane, and the multiplication result is added to the multiplication result of w0 and (0,0) of the upper image.
- the same operation may be performed in the remaining SIMD lanes.
- the above operation can be performed in the cycle of T1.
- 3A and 3B separately show data required for the T0, T1, and T8 cycles.
- the vector processor 100 may perform parallel operations by performing repeated multiplication and addition operations for each SIMD lane.
- FIG. 3C operations for each cycle are shown for each SIMD lane, and the operation of each component in the vector processor 100 will be described in detail with reference to the following drawings.
- 4A and 4B are diagrams for describing an operation of a plurality of register files 110 according to an exemplary embodiment.
- the plurality of register files 110 may store a plurality of data, respectively.
- the plurality of data may be the upper image of FIG. 3B.
- the first register file lane 0 stores (0,0), (0,4)
- the first register file lane 1 stores (0,1), (0,5)
- the register file lane 2 may store (0,2) and (0,6)
- the third register file lane 3 may store (0,3) and (0,7).
- the 0th register file outputs (0,0) as input data
- the first register file outputs (0,1) as input data
- the second register file outputs (0,2)
- the third register file can output (0,3) as input data.
- the plurality of register files 110 may determine input data to be output based on a reference register address provided by the shuffle control unit 140. That is, the shuffle control unit 140 may provide a reference register address to each of the plurality of register files 110 for each cycle. For example, the shuffle control unit 140 provides the reference register address R0 in the zero register file in the T0 cycle, provides the reference register address R0 in the first register file, and provides the reference register address R0 in the second register file. And a reference register address R0 in the third register file.
- the 0th register file outputs (0,4) as input data
- the first register file outputs (0,1) as input data
- the second register The file may output (0, 2) as input data
- the third register file may output (0, 3) as input data.
- the shuffle control unit 140 provides the reference register address R1 to the 0th register file in the T1 cycle, provides the reference register address R0 to the first register file, and provides the reference register address R0 to the second register file.
- the reference register address R0 may be provided to the third register file.
- SIMD lanes are described as four parallel operations are possible, but a different number of SIMD lanes may be provided.
- data of (0,0) to (0,7) is stored in the plurality of register files 110, but is not limited thereto.
- the plurality of register files 110 may store more data.
- each of the reference register addresses may consist of 1 bit. However, when the plurality of register files 110 store more data, each of the reference register addresses may be configured with more bits. That is, the number of bits of the reference register address may be determined by the size of data stored in the plurality of register files.
- the data stored in the plurality of register files 110 may also be determined based on the number of bits of the reference register.
- 5A and 5B are diagrams for describing an operation of the shuffle unit 120 according to an exemplary embodiment.
- the leftmost multiplexer inputs (0,0), (0,1), (0,2), (0,2) output from the plurality of register files 110 in the T0 cycle. 3) can be input.
- the left-most multiplexer can output (0,0) as input data.
- the remaining multiplexers can operate similarly.
- the shuffle control unit 140 may provide information about data to be output by each multiplexer in each cycle. For example, the shuffle control unit 140 may control the leftmost multiplexer to output input data input through the first input port of the leftmost multiplexer in the T0 cycle.
- the leftmost multiplexer input data (0,0), (0,1), (0,2), (output from the plurality of register files 110 in the T1 cycle 0,3) can be input.
- the leftmost multiplexer can output (0, 1) as input data.
- the remaining multiplexers can operate similarly.
- the shuffle control unit 140 may control the left-most multiplexer to output input data input through the second input port of the left-most multiplexer in the T1 cycle.
- the shuffle unit 120 may be implemented as a plurality of multiplexers, and each multiplexer may receive a plurality of input data and output one of them. Through the above operation, the SIMD lane for each of the plurality of input data may be changed.
- the shuffle unit 120 may receive a plurality of input data and shuffle the input data, and immediately provide the shuffle unit 120 to the execution unit 130. Accordingly, power consumption for storing the shuffled data back into the register file 110 may be reduced, and operation speed may be improved. In addition, the size of the hardware can be reduced.
- FIG. 6 is a view for explaining a 2D operation according to another embodiment of the present invention.
- the 2D operation is performed.
- pixel data of (0,0), (0,1), (1,0), and (1,1) may be calculated during the TO cycle.
- the 2D operation is a known technique, and since it is almost similar to that described in FIG. 3B, a detailed description thereof will be omitted.
- At least one address register 142 may include a bottom address, a right address, and a diagonal address.
- the instruction decoding unit provides the reference multiplexer 141 with a reference register address R0 for referencing pixel data of (0,0), (0,1), (1,0), (1,1). can do.
- At least one address register 142 may include bottom address R1 and (0,2) for referring to pixel data of (2,0), (2,1), (2,2), and (2,3).
- Diagonal Address R3 for referencing the pixel data of 3) may be provided to the address multiplexer 141.
- the configuration register 144 may store input data according to the following command.
- $ bottom, $ right, and $ diagonal may be Bottom Address, Right Address, and Diagonal Address, respectively.
- num_row and num_col may be vertical maximum values and horizontal maximum values, respectively.
- row_stride and col_stride may be vertical increments and horizontal increments, respectively. That is, the configuration register 144 may receive the vertical maximum value, the horizontal maximum value, the vertical increment, and the horizontal increment as the Column Size Reg., Row Size Reg., Row Index Reg., And Column Index Reg., Respectively. have.
- Pattern Reg. Can be entered as the command itself and indicates a reference pattern.
- the reference pattern indicates the data access order.
- the reference pattern may be one of 1D increase, 2D increase and 2D zigzag.
- the control unit 143 may receive the above data to control the address multiplexer 141 and the shuffle data path 120-1.
- a status update instruction may be used after a multiplication or multiply and add (MAC) operation as follows.
- multiplicand may be an image
- multiplier may be a filter
- res is the result of multiplicand and multiplier multiplication
- acc may be the result of multiplicand and multiplier multiplication.
- FIG. 7 is a view for explaining the simplification of the program code according to an embodiment of the present invention.
- FIG. 7 shows a program code according to the prior art, and the right side of FIG. 7 shows a program code according to the present application.
- the data stored in the vector register file is shuffled and stored again in the vector register file.
- program code according to the prior art may include instructions for shuffling such as hcat and vcat.
- a data shuffle is required for every cycle, and thus, every cycle may require hcat or vcat.
- the operation may be performed immediately without storing the plurality of register files 110 again. That is, a command for shuffling such as hcat and vcat is not required separately, and only the above-described sf_set2d command is required. That is, the shuffling method is stored as the first input of the sf_set2d command, and the plurality of register files 110 shuffle and provide necessary data for each cycle.
- a command for shuffling such as hcat and vcat is not required separately, and only the above-described sf_set2d command is required. That is, the shuffling method is stored as the first input of the sf_set2d command, and the plurality of register files 110 shuffle and provide necessary data for each cycle.
- parallel operations may be performed using the aforementioned sf_mul or sf_mac without using hcat or vcat for each cycle.
- FIG. 8 is a flowchart illustrating a control method of a vector processor according to an embodiment of the present invention.
- a plurality of data is stored in each of a plurality of register files included in each of a plurality of SIMD lanes, and the input data used for the current cycle is output from each of the plurality of data (S810).
- the shuffle unit receives a plurality of input data output from the plurality of register files, shuffles the received plurality of input data so as to correspond to each of the plurality of SIMD lanes (S820).
- the input data output from the shuffle unit is received and parallel operation is performed.
- the step of shuffling and outputting receives and receives a plurality of input data output from a plurality of register files by each of a plurality of multiplexers provided in each of the plurality of SIMD lanes included in the shuffle unit.
- One input data corresponding to the lane provided with the corresponding multiplexer among the plurality of input data may be output.
- the method may further include controlling the plurality of register files and the shuffle unit for each cycle based on the input command.
- the current state can be stored. That is, when one cycle ends, the stored current state can be updated.
- the controlling may include transmitting reference register addresses of each of the plurality of SIMD lanes to each of the plurality of register files, and the reference register address may be an address of input data used in a current cycle among a plurality of data stored in each register file. .
- the controlling may include transmitting shuffle information about the plurality of input data to the shuffle unit, and the shuffle information may be information about input data to be output from each of the plurality of SIMD lanes.
- the controlling may include controlling an address multiplexer to provide a reference register address for input data to be used in the current cycle in each of the plurality of register files.
- the controlling may include storing reference register addresses of each of the plurality of SIMD lanes in at least one address register, and registering one of a plurality of reference register addresses provided from the instruction decoding unit and the at least one address register.
- the address multiplexer can be controlled to provide.
- the input command may include at least one of information about a type of operation to be processed by the command execution unit, a calculation method, and an increase in the horizontal and vertical directions.
- parallel operation may be performed on the input data output from the shuffle unit using the scalar data output from the scalar register file.
- the vector processor may shuffle input data and then perform calculations without restoring to improve processing speed and energy efficiency.
- the methods according to various embodiments of the present disclosure may be programmed and stored in various storage media. Accordingly, the methods according to the various embodiments of the present disclosure may be implemented in various types of electronic devices that execute a storage medium.
- a non-transitory computer readable medium may be provided in which a program for sequentially performing the above-described control method is stored.
- the non-transitory readable medium refers to a medium that stores data semi-permanently and is readable by a device, not a medium storing data for a short time such as a register, a cache, a memory, and the like.
- a non-transitory readable medium such as a CD, a DVD, a hard disk, a Blu-ray disk, a USB, a memory card, a ROM, or the like.
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Mathematical Physics (AREA)
- Computational Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Advance Control (AREA)
- Image Processing (AREA)
Abstract
벡터 프로세서가 개시된다. 본 벡터 프로세서는, 복수의 SIMD(Single Instruction Multiple Data) 레인(lane) 각각에 구비되며, 각각 복수의 데이터를 저장하고, 복수의 데이터 중 현재 싸이클에 이용되는 입력 데이터를 각각 출력하는 복수의 레지스터 파일, 복수의 레지스터 파일로부터 출력되는 복수의 입력 데이터를 수신하고, 수신된 복수의 입력 데이터를 복수의 SIMD 레인 각각에 대응되도록 셔플(shuffle)하여 출력하는 셔플 유닛 및 셔플 유닛으로부터 출력되는 입력 데이터를 수신하여 병렬 연산을 수행하는 명령 실행 유닛(execution unit)을 포함한다.
Description
본 발명은 벡터 프로세서 및 그 제어 방법에 대한 것으로, 더욱 상세하게는 하나의 명령어로 여러 개의 값을 동시에 처리하는 벡터 프로세서 및 그 제어 방법에 대한 것이다.
SIMD(Single Instruction Multiple Data)는 여러 개의 데이터를 하나의 명령어를 통해 처리하는 병렬 연산의 한 분류이다. 구체적으로, SIMD는 복수의 실행 유닛들이 동일하거나 유사한 연산을 복수의 데이터에 적용하여 동시에 처리하는 방식이다.
다만, 종래에는 복수의 데이터를 벡터 레지스터 파일에 저장하고, 복수의 데이터 중 현재 싸이클에서 이용될 데이터를 셔플하여 다시 벡터 레지스터 파일에 저장하였다. 즉, 벡터 레지스터 파일은 복수의 데이터 외에 복수의 데이터를 셔플한 별도의 데이터가 추가로 저장되고, 이용 후 삭제되는 과정이 반복되었다. 그에 따라, 전력 소모가 많은 문제가 있었다.
또한, 복수의 데이터를 셔플하는 경우, 각 싸이클 별로 셔플 방법에 차이가 있기 때문에 각 싸이클 별 셔플을 위한 별도의 명령어가 필요했다. 그에 따라, 프로그램 코드가 길어지는 문제가 있었다.
본 발명은 상술한 필요성에 따른 것으로, 본 발명의 목적은 중복되는 연산의 처리 속도를 향상시키기 위한 벡터 프로세서 및 그 제어 방법을 제공함에 있다.
이상과 같은 목적을 달성하기 위한 본 발명의 일 실시 예에 따르면, 벡터 프로세서는, 복수의 SIMD(Single Instruction Multiple Data) 레인(lane) 각각에 구비되며, 각각 복수의 데이터를 저장하고, 상기 복수의 데이터 중 현재 싸이클에 이용되는 입력 데이터를 각각 출력하는 복수의 레지스터 파일, 상기 복수의 레지스터 파일로부터 출력되는 복수의 입력 데이터를 수신하고, 상기 수신된 복수의 입력 데이터를 상기 복수의 SIMD 레인 각각에 대응되도록 셔플(shuffle)하여 출력하는 셔플 유닛 및 상기 셔플 유닛으로부터 출력되는 입력 데이터를 수신하여 병렬 연산을 수행하는 명령 실행 유닛(execution unit)을 포함한다.
또한, 상기 셔플 유닛은 상기 복수의 SIMD 레인 각각에 구비된 복수의 멀티플렉서(Multiplexer)를 포함하고, 상기 복수의 멀티플렉서 각각은 상기 복수의 레지스터 파일로부터 출력되는 복수의 입력 데이터를 수신하고, 상기 수신된 복수의 입력 데이터 중 해당 멀티플렉서가 구비된 레인에 대응되는 하나의 입력 데이터를 출력할 수 있다.
그리고, 입력 명령어에 기초하여 상기 복수의 레지스터 파일 및 상기 셔플 유닛을 각 싸이클 별로 제어하는 셔플 제어 유닛을 더 포함할 수 있다.
또한, 상기 셔플 제어 유닛은 상기 복수의 SIMD 레인 각각의 참조 레지스터 주소를 상기 복수의 레지스터 파일 각각으로 전송하고, 상기 참조 레지스터 주소는, 각 레지스터 파일에 저장된 상기 복수의 데이터 중 상기 현재 싸이클에서 이용되는 입력 데이터의 주소일 수 있다.
그리고, 상기 셔플 제어 유닛은 상기 복수의 입력 데이터에 대한 셔플 정보를 상기 셔플 유닛으로 전송하며, 상기 셔플 정보는 상기 복수의 SIMD 레인 각각에서 출력될 입력 데이터에 대한 정보일 수 있다.
또한, 상기 셔플 제어 유닛은 상기 복수의 레지스터 파일 각각으로 현재 싸이클에서 이용될 입력 데이터에 대한 참조 레지스터 주소를 제공하는 어드레스 멀티플렉서(Address Multiplexer) 및 상기 어드레스 멀티플렉서를 제어하는 제어 유닛을 포함할 수 있다.
그리고, 상기 셔플 제어 유닛은 상기 복수의 SIMD 레인 각각의 참조 레지스터 주소를 저장하는 적어도 하나의 어드레스 레지스터를 더 포함하고, 상기 제어 유닛은 명령어 디코딩 유닛 및 상기 적어도 하나의 어드레스 레지스터로부터 제공되는 복수의 참조 레지스터 주소 중 하나를 대응되는 레지스터 파일로 제공하도록 상기 어드레스 멀티플렉서를 제어할 수 있다.
또한, 상기 입력 명령어는 상기 명령 실행 유닛이 처리할 연산의 종류, 연산 방법 및 가로, 세로 방향의 증가분에 대한 정보 중 적어도 하나를 포함할 수 있다.
그리고, 스칼라 레지스터 파일을 더 포함하고, 상기 명령 실행 유닛은 상기 스칼라 레지스터 파일로부터 출력되는 스칼라 데이터를 이용하여, 상기 셔플 유닛으로부터 출력되는 입력 데이터를 병렬 연산할 수 있다.
한편, 본 발명의 일 실시 예에 따르면, 벡터 프로세서의 제어 방법은, 복수의 SIMD(Single Instruction Multiple Data) 레인(lane) 각각에 구비된 복수의 레지스터 파일 각각에 복수의 데이터를 저장하고, 상기 복수의 데이터 중 현재 싸이클에 이용되는 입력 데이터를 각각 출력하는 단계, 셔플 유닛에 의해, 상기 복수의 레지스터 파일로부터 출력되는 복수의 입력 데이터를 수신하고, 상기 수신된 복수의 입력 데이터를 상기 복수의 SIMD 레인 각각에 대응되도록 셔플(shuffle)하여 출력하는 단계 및 상기 셔플 유닛으로부터 출력되는 입력 데이터를 수신하여 병렬 연산을 수행하는 단계를 포함한다.
또한, 상기 셔플하여 출력하는 단계는 상기 셔플 유닛에 구비된 복수의 SIMD 레인 각각에 구비된 복수의 멀티플렉서(Multiplexer) 각각에 의해, 상기 복수의 레지스터 파일로부터 출력되는 복수의 입력 데이터를 수신하고, 상기 수신된 복수의 입력 데이터 중 해당 멀티플렉서가 구비된 레인에 대응되는 하나의 입력 데이터를 출력할 수 있다.
그리고, 입력 명령어에 기초하여 상기 복수의 레지스터 파일 및 상기 셔플 유닛을 각 싸이클 별로 제어하는 단계를 더 포함할 수 있다.
또한, 상기 제어하는 단계는 상기 복수의 SIMD 레인 각각의 참조 레지스터 주소를 상기 복수의 레지스터 파일 각각으로 전송하고, 상기 참조 레지스터 주소는 각 레지스터 파일에 저장된 상기 복수의 데이터 중 상기 현재 싸이클에서 이용되는 입력 데이터의 주소일 수 있다.
그리고, 상기 제어하는 단계는 상기 복수의 입력 데이터에 대한 셔플 정보를 상기 셔플 유닛으로 전송하며, 상기 셔플 정보는 상기 복수의 SIMD 레인 각각에서 출력될 입력 데이터에 대한 정보일 수 있다.
또한, 상기 제어하는 단계는 상기 복수의 레지스터 파일 각각으로 현재 싸이클에서 이용될 입력 데이터에 대한 참조 레지스터 주소를 제공하도록 어드레스 멀티플렉서(Address Multiplexer)를 제어할 수 있다.
그리고, 상기 제어하는 단계는 적어도 하나의 어드레스 레지스터에 상기 복수의 SIMD 레인 각각의 참조 레지스터 주소를 저장하는 단계 및 명령어 디코딩 유닛 및 상기 적어도 하나의 어드레스 레지스터로부터 제공되는 복수의 참조 레지스터 주소 중 하나를 대응되는 레지스터 파일로 제공하도록 상기 어드레스 멀티플렉서를 제어하는 단계를 포함할 수 있다.
또한, 상기 입력 명령어는 상기 명령 실행 유닛이 처리할 연산의 종류, 연산 방법 및 가로, 세로 방향의 증가분에 대한 정보 중 적어도 하나를 포함할 수 있다.
그리고, 상기 병렬 연산을 수행하는 단계는 스칼라 레지스터 파일로부터 출력되는 스칼라 데이터를 이용하여, 상기 셔플 유닛으로부터 출력되는 입력 데이터를 병렬 연산할 수 있다.
한편, 본 발명의 일 실시 예에 따르면, 벡터 프로세서의 동작 방법을 수행하기 위한 프로그램이 저장된 기록 매체에 있어서, 상기 동작 방법은 복수의 SIMD(Single Instruction Multiple Data) 레인(lane) 각각에 구비된 복수의 레지스터 파일 각각에 복수의 데이터를 저장하고, 상기 복수의 데이터 중 현재 싸이클에 이용되는 입력 데이터를 각각 출력하는 단계, 셔플 유닛에 의해, 상기 복수의 레지스터 파일로부터 출력되는 복수의 입력 데이터를 수신하고, 상기 수신된 복수의 입력 데이터를 상기 복수의 SIMD 레인 각각에 대응되도록 셔플(shuffle)하여 출력하는 단계 및 상기 셔플 유닛으로부터 출력되는 입력 데이터를 수신하여 병렬 연산을 수행하는 단계를 포함한다.
이상과 같은 본 발명의 다양한 실시 예에 따르면, 벡터 프로세서는 입력 데이터를 셔플한 후, 재저장의 과정 없이 연산을 수행하여 처리 속도 및 에너지 효율을 향상시킬 수 있다.
도 1은 본 발명의 일 실시 예에 따른 벡터 프로세서의 구성을 나타내는 블럭도이다.
도 2는 본 발명의 일 실시 예에 따른 도 1에 도시된 벡터 프로세서의 구성을 구체적으로 나타내는 블럭도이다.
도 3a 내지 도 3c는 본 발명의 일 실시 예에 따른 필터를 적용하는 경우의 동작을 설명하기 위한 도면들이다.
도 4a 및 도 4b는 본 발명의 일 실시 예에 따른 복수의 레지스터 파일의 동작을 설명하기 위한 도면들이다.
도 5a 및 도 5b는 본 발명의 일 실시 예에 따른 셔플 유닛의 동작을 설명하기 위한 도면들이다.
도 6은 본 발명의 다른 실시 예에 따른 2D 연산을 설명하기 위한 도면이다.
도 7은 본 발명의 일 실시 예에 따른 프로그램 코드의 간소화를 설명하기 위한 도면이다.
도 8은 본 발명의 일 실시 예에 따른 벡터 프로세서의 제어 방법을 설명하기 위한 흐름도이다.
-
이하에서, 첨부된 도면을 이용하여 본 발명의 다양한 실시 예들에 대하여 구체적으로 설명한다.
도 1은 본 발명의 일 실시 예에 따른 벡터 프로세서(100)의 구성을 나타내는 블럭도이다.
도 1에 도시된 바와 같이, 벡터 프로세서(100)는 복수의 레지스터 파일(110), 셔플 유닛(120) 및 명령 실행 유닛(execution unit, 130)을 포함한다.
벡터 프로세서(100)는 벡터라고 불리는 다수의 데이터를 처리하는 명령어를 가진 프로세서를 의미한다. 예를 들어, 벡터 프로세서(100)는 다수의 데이터를 처리하는 벡터 프로세싱을 위한 SIMD(Single Instruction Multiple Data) 명령어를 처리할 수 있다. 여기서, SIMD는 하나의 명령어로 여러 개의 값을 동시에 계산하는 방식을 의미한다.
복수의 레지스터 파일(110) 각각은 복수의 SIMD 레인(lane) 각각에 구비될 수 있다. 즉, 각 SIMD 레인은 하나의 레지스터 파일을 구비할 수 있다. 여기서, 복수의 SIMD 레인은 병렬 처리 단위에 대응될 수 있다. 즉, 벡터 프로세서(100)는 최대로 복수의 SIMD 레인의 개수만큼 병렬 처리를 수행할 수 있다.
복수의 레지스터 파일(110)은 벡터 레지스터 파일이 아닌 복수의 스칼라 레지스터 파일로 구성될 수 있다. 벡터 레지스터 파일은 하나의 주소에 복수의 데이터가 저장되는 구조이며, 스칼라 레지스터 파일은 하나의 주소에 하나의 데이터가 저장되는 구조일 수 있다. 즉, 복수의 레지스터 파일(110)에 저장된 데이터를 출력하기 위한 레지스터 주소는 SIMD 레인 정보 및 해당 SIMD 레인에 대응되는 스칼라 레지스터 파일 중 데이터가 출력될 주소를 포함할 수 있다.
복수의 레지스터 파일(110)은 각각 복수의 데이터를 저장하고, 복수의 데이터 중 현재 싸이클에 이용되는 입력 데이터를 각각 출력할 수 있다. 예를 들어, 하나의 레지스터 파일은 두 개의 데이터를 저장하고, 현재 싸이클에 이용되는 입력 데이터를 출력할 수 있다. 나머지 레지스터 파일도 동일하게 두 개의 데이터를 저장하고, 현재 싸이클에 이용되는 입력 데이터를 출력할 수 있다. 즉, 한 싸이클 동안 복수의 레지스터 파일(110)로부터 출력되는 데이터의 개수는 복수의 레지스터 파일(100)의 개수와 동일할 수 있다.
다만, 이에 한정되는 것은 아니며, 병렬 처리 단위가 복수의 레지스터 파일(100)의 개수보다 작은 경우에는, 한 싸이클 동안 복수의 레지스터 파일(110)로부터 출력되는 데이터의 개수는 복수의 레지스터 파일(100)의 개수보다 작을 수도 있다.
셔플 유닛(120)은 복수의 레지스터 파일(110)과 연결되며, 복수의 레지스터 파일로부터 출력되는 복수의 입력 데이터를 수신할 수 있다. 즉, 셔플 유닛(120)은 각 SIMD 레인 별로 하나의 입력 데이터를 수신할 수 있다.
셔플 유닛(120)은 수신된 복수의 입력 데이터를 복수의 SIMD 레인 각각에 대응되도록 셔플(shuffle)하여 출력할 수 있다. 예를 들어, 셔플 유닛(120)는 제1 레지스터 파일, 제2 레지스터 파일, 제3 레지스터 파일 및 제4 레지스터 파일 각각으로부터 데이터 a, 데이터 b, 데이터 c 및 데이터 d를 수신할 수 있다. 여기서, 제1 레지스터 파일, 제2 레지스터 파일, 제3 레지스터 파일 및 제4 레지스터 파일 각각은 제1 SIMD 레인, 제2 SIMD 레인, 제3 SIMD 레인 및 제4 SIMD 레인에 구비될 수 있다. 셔플 유닛(120)은 수신된 데이터 a, 데이터 b, 데이터 c 및 데이터 d가 각각 제2 SIMD 레인, 제3 SIMD 레인, 제4 SIMD 레인 및 제1 SIMD 레인에서 처리되도록 셔플하여 출력할 수 있다. 셔플 방법은 연산의 종류에 따라 기설정되어 있거나 사용자에 의해 입력될 수 있다.
명령 실행 유닛(130)은 셔플 유닛(120)으로부터 출력되는 입력 데이터를 수신하여 병렬 연산을 수행할 수 있다. 명령 실행 유닛(130)은 싸이클 별로 복수의 입력 데이터를 병렬적으로 처리할 수 있다.
명령 실행 유닛(130)은 사칙 연산, 논리 연산 등을 수행할 수 있다. 다만, 이에 한정되는 것은 아니며, 명령 실행 유닛(130)은 얼마든지 다른 연산을 수행할 수도 있다.
명령 실행 유닛(130)은 복수의 SIMD 레인 각각에 구비된 복수의 실행 유닛을 포함할 수 있다. 또는, 명령 실행 유닛(130)은 하나의 하드웨어로서 복수의 연산을 동시에 처리하도록 구현될 수도 있다.
도 2는 본 발명의 일 실시 예에 따른 도 1에 도시된 벡터 프로세서(100)의 구성을 구체적으로 나타내는 블럭도이다.
도 2에 도시된 바와 같이, 벡터 프로세서(100)는 복수의 SIMD 레인 중 제1 SIMD 레인(10-1), 셔플 제어 유닛(140) 및 명령어 디코딩 유닛(150)을 포함할 수 있다. 도 2에서는 설명의 편의를 위해 복수의 SIMD 레인 중 제1 SIMD 레인(10-1)만을 도시하였다. 도 2에 도시된 구성 중 도 1에 도시된 구성과 중복되는 구성에 대해서는 자세한 설명을 생략하도록 한다.
제1 SIMD 레인(10-1)은 제1 레지스터 파일(110-1), 제1 셔플 데이터 패스(120-1) 및 실행 유닛(130-1)을 포함할 수 있다. 제1 셔플 데이터 패스(120-1)는 셔플 유닛(120)의 일 구성일 수 있다. 즉, 셔플 유닛(120)은 복수의 셔플 데이터 패스를 포함할 수 있으며, 각 셔플 데이터 패스는 각 SIMD 레인에 하나씩 구비될 수 있다.
셔플 유닛(120)은 복수의 SIMD 레인 각각에 구비된 복수의 멀티플렉서(Multiplexer)를 포함할 수 있다. 즉, 제1 셔플 데이터 패스(120-1)는 멀티플렉서로 구현될 수 있다. 복수의 멀티플렉서 각각은 복수의 레지스터 파일(110)로부터 출력되는 복수의 입력 데이터를 수신하고, 수신된 복수의 입력 데이터 중 해당 멀티플렉서가 구비된 레인에 대응되는 하나의 입력 데이터를 출력할 수 있다.
예를 들어, 제1 셔플 데이터 패스(120-1)는 제1 멀티플렉서로 구현될 수 있고, 제1 멀티플렉서는 제1 레지스터 파일(110-1)로부터 출력되는 입력 데이터를 수신할 뿐만 아니라, 다른 SIMD 레인에 구비된 나머지 레지스터 파일로부터 출력되는 입력 데이터를 수신할 수 있다. 즉, 멀티플렉서의 입력 포트의 개수는 복수의 SIMD 레인의 개수와 동일할 수 있다.
또한, 제2 SIMD 레인(미도시)에 구비된 제2 셔플 데이터 패스(미도시)는 제2 멀티플렉서로 구현될 수 있고, 제2 멀티플렉서는 제2 레지스터 파일(미도시)로부터 출력되는 입력 데이터를 수신할 뿐만 아니라, 다른 SIMD 레인에 구비된 나머지 레지스터 파일로부터 출력되는 입력 데이터를 수신할 수 있다.
즉, 복수의 멀티플렉서 각각은 복수의 레지스터 파일(110)로부터 복수의 입력 데이터를 수신할 수 있다. 또한, 각 레지스터 파일(110)은 해당 SIMD 레인에 구비된 셔플 데이터 패스로 입력 데이터를 제공할 뿐만 아니라 다른 SIMD 레인에 구비된 셔플 데이터 패스로도 입력 데이터를 제공할 수 있다.
제1 셔플 데이터 패스(120-1)는 제1 레지스터 파일(110-1)로부터 출력된 입력 데이터를 제1 SIMD 레인(10-1)이 아닌 다른 SIMD 레인에 구비된 실행 유닛으로 제공할 수 있다. 또한, 제1 셔플 데이터 패스(120-1)는 제1 레지스터 파일(110-1)이 아닌 다른 레지스터 파일로부터 출력된 복수의 입력 데이터 중 하나를 제1 실행 유닛(130-1)으로 제공할 수 있다.
다만, 이에 한정되는 것은 아니며, 셔플 데이터 패스(120-1)는 수신된 복수의 입력 데이터를 셔플하지 않고 출력할 수도 있다. 예를 들어, 제1 셔플 데이터 패스(120-1)는 제1 레지스터 파일(110-1)로부터 출력된 입력 데이터를 제1 실행 유닛(130-1)으로 제공할 수도 있다. 또는, 제1 레지스터 파일(110-1)로부터 출력된 입력 데이터는 제1 셔플 데이터 패스(120-1)를 거치지 않고, 곧바로 제1 실행 유닛(130-1)으로 제공될 수도 있다.
셔플 제어 유닛(140)은 입력 명령어에 기초하여 복수의 레지스터 파일(110) 및 셔플 유닛(120)을 각 싸이클 별로 제어할 수 있다. 또는, 셔플 제어 유닛(140)은 입력 명령어 및 현재 상태에 기초하여 복수의 레지스터 파일(110) 및 셔플 유닛(120)을 각 싸이클 별로 제어할 수 있다. 이때, 셔플 제어 유닛(140)는 현재 상태를 저장하고 있을 수 있다. 또한, 셔플 제어 유닛(140)은 한 싸이클이 경과될 때마다 현재 상태를 업데이트할 수 있다.
셔플 제어 유닛(140)은 복수의 SIMD 레인 각각의 참조 레지스터 주소를 복수의 레지스터 파일(110) 각각으로 전송할 수 있다. 여기서, 참조 레지스터 주소는 각 레지스터 파일에 저장된 복수의 데이터 중 현재 싸이클에서 이용되는 입력 데이터의 주소일 수 있다.
예를 들어, 제1 레지스터 파일(110-1)은 레지스터 주소 R0에 데이터 a를, 레지스터 주소 R1에 데이터 b를 저장할 수 있다. 이 상태에서, 셔플 제어 유닛(140)이 제1 SIMD 레인(10-1)의 참조 레지스터 주소 R1을 제1 레지스터 파일(110-1)로 전송하면, 제1 레지스터 파일(110-1)은 레지스터 주소 R1의 데이터 b를 출력할 수 있다. 셔플 제어 유닛(140)은 나머지 레지스터 파일에 대응되는 참조 레지스터 주소를 전송할 수 있다.
셔플 제어 유닛(140)은 복수의 입력 데이터에 대한 셔플 정보를 셔플 유닛(120)으로 전송할 수 있다. 즉, 셔플 제어 유닛(140)은 복수의 입력 데이터에 대한 셔플 정보를 셔플 유닛(120)에 구비된 복수의 셔플 데이터 패스로 전송할 수 있다. 여기서, 셔플 정보는 복수의 SIMD 레인 각각에서 출력될 입력 데이터에 대한 정보일 수 있다.
예를 들어, 셔플 제어 유닛(140)은 제1 멀티플렉서의 복수의 입력 포트로 입력되는 복수의 입력 데이터 중 현재 싸이클에서 출력될 입력 데이터가 입력되는 입력 포트에 대한 정보를 제1 멀티플렉서로 제공할 수 있다. 셔플 제어 유닛(140)은 나머지 멀티플렉서에 대하여도 각각에 대응되는 정보를 제공할 수 있다.
셔플 제어 유닛(140)은 입력 명령어 및 현재 상태 중 적어도 하나에 기초하여 복수의 입력 데이터에 대한 셔플 정보를 생성할 수도 있다.이상과 같이 복수의 레지스터 파일(110) 및 셔플 유닛(120)은 셔플 제어 유닛(140)의 제어에 따라 동작할 수 있다. 이하에서는 셔플 제어 유닛(140)의 구성을 좀더 구체적으로 설명한다.
셔플 제어 유닛(140)은 어드레스 멀티플렉서(Address Multiplexer, 141), 어드레스 레지스터(142), 제어 유닛(143) 및 구성 레지스터(144)를 포함할 수 있다.
어드레스 멀티플렉서(141)는 복수의 레지스터 파일(110) 각각으로 현재 싸이클에서 이용될 입력 데이터에 대한 참조 레지스터 주소를 제공할 수 있다. 도 2에서는 어드레스 멀티플렉서(141)가 하나인 것으로 도시하였으나, 이에 한정되는 것은 아니다. 예를 들어, 어드레스 멀티플렉서(141)는 복수의 레지스터 파일(110) 각각에 대응되도록 복수로 구현될 수도 있다.
적어도 하나의 어드레스 레지스터(142)는 복수의 SIMD 레인 각각의 참조 레지스터 주소를 저장할 수 있다. 적어도 하나의 어드레스 레지스터(142)는 명령어 디코딩 유닛(150)으로부터 참조 레지스터 주소를 입력받아 저장할 수 있다.
제어 유닛(143)은 어드레스 멀티플렉서(141) 및 셔플 데이터 패스(120-1)를 제어할 수 있다. 셔플 데이터 패스(120-1)를 제어하는 방법에 대하여는 설명하였으므로 구체적인 설명은 생략한다.
제어 유닛(143)은 명령어 디코딩 유닛(150) 및 적어도 하나의 어드레스 레지스터(142)로부터 제공되는 복수의 참조 레지스터 주소 중 하나를 대응되는 레지스터 파일로 제공하도록 어드레스 멀티플렉서(141)를 제어할 수 있다.
구성 레지스터(144)는 입력 명령어에 포함된 정보를 저장할 수 있다. 또한, 구성 레지스터(144)는 현재 상태를 저장할 수 있다. 예를 들어, 구성 레지스터(144)는 현재 상태를 저장하는 카운터를 포함할 수 있다.
제어 유닛(143)은 구성 레지스터(144)에 저장된 정보에 기초하여 다른 유닛들을 제어할 수 있다. 여기서, 입력 명령어는 명령 실행 유닛(130)이 처리할 연산의 종류, 연산 방법 및 가로, 세로 방향의 증가분에 대한 정보 중 적어도 하나를 포함할 수 있다.
그 밖에 벡터 프로세서(100)는 명령어 메모리(미도시), 명령어 페치 유닛(미도시), 명령어 디코딩 유닛(150), 스칼라 레지스터 파일(미도시) 등을 더 포함할 수 있다.
명령어 메모리는 명령어들을 저장할 수 있다. 명령어 페치 유닛은 입력 명령어에 기초하여 현재 싸이클에서 이용될 명령어를 명령어 메모리로부터 독출할 수 있다. 명령어 디코딩 유닛(150)은 페치된 명령어를 디코딩하여 명령어의 종류, 해당 명령어의 입력 데이터의 주소 등을 결정할 수 있다.
스칼라 레지스터 파일은 복수의 레지스터 파일과는 별도로 구비되며, 스칼라 데이터를 저장하기 위한 레지스터 파일이다. 복수의 레지스터 파일은 벡터 데이터를 저장하기 위한 레지스터 파일이다.
명령 실행 유닛(130)은 스칼라 레지스터 파일로부터 출력되는 스칼라 데이터를 이용하여, 셔플 유닛(120)으로부터 출력되는 복수의 입력 데이터를 병렬 연산할 수 있다.
즉, 스칼라 레지스터 파일로부터 출력되는 스칼라 데이터는 명령 실행 유닛(130)에 포함된 복수의 실행 유닛 전부에 전송될 수 있다. 실행 유닛은 스칼라 데이터 및 각 실행 유닛으로 입력되는 입력 데이터를 연산할 수 있다. 즉, 복수의 실행 유닛은 하나의 스칼라 데이터를 이용하여 병렬 연산을 수행할 수 있다.
이상과 같이 명령 실행 유닛(130)은 복수의 레지스터 파일(110)이 아닌 셔플 유닛(120)으로부터 직접 입력 데이터를 수신하기 때문에 처리 속도 및 에너지 효율의 개선이 가능하다. 이하에서는 도면을 통해 벡터 프로세서(100)의 동작의 예시를 설명한다.
도 3a 내지 도 3c는 본 발명의 일 실시 예에 따른 필터를 적용하는 경우의 동작을 설명하기 위한 도면들이다.
도 3a는 이미지에 적용될 수 있는 필터의 일 예를 나타낸다. 도 3a에는 3 × 3 매트릭스 형태의 필터를 도시하였으나, 이에 한정되는 것은 아니며, 얼마든지 다른 형태의 필터일 수도 있다. 또한, 필터가 아니더라도 병렬 연산이 적용될 수 있는 모든 경우에 본원의 기술이 적용 가능하다.
벡터 프로세서(100)는 도 3b와 같은 이미지에 필터를 적용할 수 있다. 도 3b의 상측 도면은 이미지의 각 픽셀 별 데이터를 나타내고, 도 3b의 하측 도면은 필터를 적용한 이미지를 나타낸다. 필터는 스칼라 레지스터 파일에 저장될 수 있다.
설명의 편의를 위해 병렬 연산 없이 필터가 적용되는 경우를 먼저 설명한다. 도 3a의 필터를 도 3b의 상측 이미지에 적용하는 경우, 프로세서는 w0, w1, ..., w8 각각을 상측 이미지의 (0,0), (0,1), (0,2), (1,0), (1,1), (1,2), (2,0), (2,1), (2,2) 픽셀에 곱하고, 곱한 값을 모두 더해서, 도 3b의 하측 이미지의 (0,0) 픽셀의 데이터를 결정할 수 있다.
그리고, 프로세서는 w0, w1, ..., w8 각각을 상측 이미지의 (0,1), (0,2), (0,3), (1,1), (1,2), (1,3), (2,1), (2,2), (2,3) 픽셀에 적용하여 도 3b의 하측 이미지의 (0,1) 픽셀의 데이터를 결정할 수 있다. 프로세서는 이와 같은 과정을 모든 픽셀에 대하여 반복하여 도 3b의 하측 이미지를 생성할 수 있다.
병렬 연산을 수행하는 경우, 벡터 프로세서(100)는 w0를 상측 이미지의 (0,0), (0,1), (0,2), (0,3) 각각에 곱한다. 구체적으로, SIMD 레인 각각에서 w0 및 상측 이미지의 (0,0), (0,1), (0,2), (0,3) 각각의 곱셈 연산이 수행될 수 있다. 예를 들어, 제1 SIMD 레인에서 w0 및 상측 이미지의 (0,0)의 곱셈 연산이 수행되고, 제2 SIMD 레인에서 w0 및 상측 이미지의 (0,1)의 곱셈 연산이 수행되고, 제3 SIMD 레인에서 w0 및 상측 이미지의 (0,2)의 곱셈 연산이 수행되고, 제4 SIMD 레인에서 w0 및 상측 이미지의 (0,3)의 곱셈 연산이 수행될 수 있다. 이상의 연산은 T0의 싸이클에서 수행될 수 있다.
이후, 제1 SIMD 레인에서 w1 및 상측 이미지의 (0,1)의 곱셈 연산이 수행되고, 곱셈 결과가 w0 및 상측 이미지의 (0,0)의 곱셈 결과에 더해진다. 나머지 SIMD 레인에서도 동일한 연산이 수행될 수 있다. 이상의 연산은 T1의 싸이클에서 수행될 수 있다. 도 3a 및 도 3b에는 T0, T1, T8 싸이클에서 필요한 데이터를 별도로 표시하였다.
즉, 벡터 프로세서(100)는 반복되는 곱셈 연산 및 덧셈 연산을 SIMD 레인 별로 수행하여 병렬 연산을 수행할 수 있다. 도 3c에는 각 싸이클 별 연산을 SIMD 레인 별로 나타냈으며, 벡터 프로세서(100) 내부의 각 구성의 동작에 대하여는 이하의 도면을 통해 구체적으로 설명한다.
도 4a 및 도 4b는 본 발명의 일 실시 예에 따른 복수의 레지스터 파일(110)의 동작을 설명하기 위한 도면들이다.
도 4a에 도시된 바와 같이, 복수의 레지스터 파일(110)은 각각 복수의 데이터를 저장할 수 있다. 여기서, 복수의 데이터는 도 3b의 상측 이미지일 수 있다. 제0 레지스터 파일(lane 0)은 (0,0), (0,4)를 저장하고, 제1 레지스터 파일(lane 1)은 (0,1), (0,5)를 저장하고, 제2 레지스터 파일(lane 2)은 (0,2), (0,6)을 저장하고, 제3 레지스터 파일(lane 3)은 (0,3), (0,7)을 저장할 수 있다.
T0 싸이클에서 제0 레지스터 파일은 (0,0)을 입력 데이터로서 출력하고, 제1 레지스터 파일은 (0,1)을 입력 데이터로서 출력하고, 제2 레지스터 파일은 (0,2)를 입력 데이터로서 출력하고, 제3 레지스터 파일은 (0,3)을 입력 데이터로서 출력할 수 있다.
이때, 복수의 레지스터 파일(110)은 셔플 제어 유닛(140)에서 제공하는 참조 레지스터 주소에 의해 출력할 입력 데이터를 결정할 수 있다. 즉, 셔플 제어 유닛(140)은 각 싸이클 별로 복수의 레지스터 파일(110) 각각에 참조 레지스터 주소를 제공할 수 있다. 예를 들어, 셔플 제어 유닛(140)은 T0 싸이클에서 제0 레지스터 파일에 참조 레지스터 주소 R0를 제공하고, 제1 레지스터 파일에 참조 레지스터 주소 R0를 제공하고, 제2 레지스터 파일에 참조 레지스터 주소 R0를 제공하고, 제3 레지스터 파일에 참조 레지스터 주소 R0를 제공할 수 있다.
이후, 도 4b에 도시된 바와 같이, T1 싸이클에서 제0 레지스터 파일은 (0,4)를 입력 데이터로서 출력하고, 제1 레지스터 파일은 (0,1)을 입력 데이터로서 출력하고, 제2 레지스터 파일은 (0,2)를 입력 데이터로서 출력하고, 제3 레지스터 파일은 (0,3)을 입력 데이터로서 출력할 수 있다.
이때, 셔플 제어 유닛(140)은 T1 싸이클에서 제0 레지스터 파일에 참조 레지스터 주소 R1을 제공하고, 제1 레지스터 파일에 참조 레지스터 주소 R0를 제공하고, 제2 레지스터 파일에 참조 레지스터 주소 R0를 제공하고, 제3 레지스터 파일에 참조 레지스터 주소 R0를 제공할 수 있다.
도 4a 및 도 4b에서는 설명의 편의를 위해 SIMD 레인이 4개로서 4개의 병렬 연산이 가능한 것으로 설명하였으나, 얼마든지 다른 개수의 SIMD 레인이 구비될 수도 있다.
또한, 도 4a 및 도 4b에서는 복수의 레지스터 파일(110)에 (0,0)부터 (0,7)의 데이터가 저장된 것으로 도시하였으나, 이에 한정되는 것은 아니다. 예를 들어, 복수의 레지스터 파일(110)은 더 많은 데이터를 저장할 수도 있다.
복수의 레지스터 파일(110)이 (0,0)부터 (0,7)의 데이터를 저장하고 있는 경우, 참조 레지스터 주소 각각은 1비트로 구성될 수 있다. 다만, 복수의 레지스터 파일(110)이 더 많은 데이터를 저장하는 경우, 참조 레지스터 주소 각각은 더 많은 비트로 구성될 수도 있다. 즉, 참조 레지스터 주소의 비트 수는 복수의 레지스터 파일에 저장된 데이터의 크기에 의해 결정될 수 있다.
또는, 참조 레지스터 주소의 비트 수가 기설정되어 있다면, 복수의 레지스터파일(110)에 저장되는 데이터 역시 참조 레지스터의 비트 수에 기초하여 결정될 수도 있다.
도 5a 및 도 5b는 본 발명의 일 실시 예에 따른 셔플 유닛(120)의 동작을 설명하기 위한 도면들이다.
도 5a에 도시된 바와 같이, 가장 좌측에 있는 멀티플렉서는 T0 싸이클에서 복수의 레지스터 파일(110)로부터 출력되는 입력 데이터 (0,0), (0,1), (0,2), (0,3)을 입력받을 수 있다. 그리고, 가장 좌측에 있는 멀티플렉서는 (0,0)을 입력 데이터로서 출력할 수 있다. 나머지 멀티플렉서 역시 유사하게 동작할 수 있다.
이때, 셔플 제어 유닛(140)은 각 싸이클에서 각 멀티플렉서가 출력해야 하는 데이터에 대한 정보를 제공할 수 있다. 예를 들어, 셔플 제어 유닛(140)은 T0 싸이클에서 가장 좌측에 있는 멀티플렉서의 제1 입력 포트를 통해 입력되는 입력 데이터를 출력하도록 가장 좌측에 있는 멀티플렉서를 제어할 수 있다.
이후, 도 5b에 도시된 바와 같이, 가장 좌측에 있는 멀티플렉서는 T1 싸이클에서 복수의 레지스터 파일(110)로부터 출력되는 입력 데이터 (0,0), (0,1), (0,2), (0,3)을 입력받을 수 있다. 그리고, 가장 좌측에 있는 멀티플렉서는 (0,1)을 입력 데이터로서 출력할 수 있다. 나머지 멀티플렉서 역시 유사하게 동작할 수 있다.
이때, 셔플 제어 유닛(140)은 T1 싸이클에서 가장 좌측에 있는 멀티플렉서의 제2 입력 포트를 통해 입력되는 입력 데이터를 출력하도록 가장 좌측에 있는 멀티플렉서를 제어할 수 있다.
즉, 셔플 유닛(120)은 복수의 멀티플렉서로 구현될 수 있으며, 각 멀티플렉서는 복수의 입력 데이터를 입력받고, 그 중 하나를 출력할 수 있다. 이상과 같은 동작을 통해 복수의 입력 데이터 각각이 연산될 SIMD 레인을 변경할 수 있다.
또한, 셔플 유닛(120)은 복수의 입력 데이터를 입력받아 셔플한 후, 곧바로 실행 유닛(130)으로 제공할 수 있다. 그에 따라, 셔플된 데이터를 다시 레지스터 파일(110)에 저장하기 위한 전력 소모를 감소시키고, 연산 속도를 향상시킬 수 있다. 또한, 하드웨어의 크기도 축소가 가능하다.
도 6은 본 발명의 다른 실시 예에 따른 2D 연산을 설명하기 위한 도면이다. 예를 들어, 도 3b의 상측 도면에서 TO 싸이클 동안 (0,0), (0,1), (0,2), (0,3)의 픽셀 데이터가 연산이 된다면, 2D 연산을 수행하는 경우에는 도 3b의 상측 도면에서 TO 싸이클 동안 (0,0), (0,1), (1,0), (1,1)의 픽셀 데이터가 연산될 수 있다. 2D 연산은 공지된 기술이고, 도 3b에서 설명한 바와 거의 유사하므로 구체적인 설명은 생략한다.
도 6에 도시된 바와 같이, 적어도 하나의 어드레스 레지스터(142)는 Bottom Address, Right Address, Diagonal Address를 포함할 수 있다. 예를 들어, 명령어 디코딩 유닛은 (0,0), (0,1), (1,0), (1,1)의 픽셀 데이터를 참조하기 위한 참조 레지스터 주소 R0를 어드레스 멀티플렉서(141)로 제공할 수 있다. 그리고, 적어도 하나의 어드레스 레지스터(142)는 (2,0), (2,1), (2,2), (2,3)의 픽셀 데이터를 참조하기 위한 Bottom Address R1, (0,2), (0,3), (1,2), (1,3)의 픽셀 데이터를 참조하기 위한 Right Address R2 및 (2,2), (2,3), (3,2), (3,3)의 픽셀 데이터를 참조하기 위한 Diagonal Address R3를 어드레스 멀티플렉서(141)로 제공할 수 있다.
한편, 구성 레지스터(144)는 하기의 명령어에 따른 입력 데이터를 저장할 수 있다.
[명령어 1]
sf_set2d $bottom, $right, $diagonal, num_row, num_col, row_stride, col_stride
여기서, $bottom, $right, $diagonal은 각각 Bottom Address, Right Address, Diagonal Address일 수 있다. num_row, num_col은 각각 세로 방향 최대값, 가로 방향 최대값일 수 있다. row_stride, col_stride는 각각 세로 방향 증가분, 가로 방향 증가분일 수 있다. 즉, 구성 레지스터(144)는 세로 방향 최대값, 가로 방향 최대값, 세로 방향 증가분, 가로 방향 증가분을 각각 Column Size Reg., Row Size Reg., Row Index Reg., Column Index Reg.로서 입력받을 수 있다. Pattern Reg.는 명령어 자체로서 입력될 수 있으며, 참조 패턴을 나타낸다.
여기서, 참조 패턴은 데이터 접근 순서를 나타낸다. 예를 들어, 참조 패턴은 1D 증가, 2D 증가 및 2D 지그재그 중 하나일 수 있다.
제어 유닛(143)은 이상의 데이터를 입력받아 어드레스 멀티플렉서(141) 및 셔플 데이터 패스(120-1)를 제어할 수 있다.
그 밖에, 하기와 같은 곱셈 또는 MAC(multiply and add) 연산 후 상태 갱신 명령어가 이용될 수 있다.
[명령어 2]
sf_mul $res, $multiplicand, $multiplier
sf_mac $acc, $multiplicand, $multiplier
여기서, multiplicand는 이미지일 수 있고, multiplier는 필터일 수 있다. res는 multiplicand와 multiplier의 곱셈 연산 결과이며, acc는 multiplicand와 multiplier의 곱셈 연산 결과를 이전의 값에 더한 결과일 수 있다.
이상과 같이 명령어 1 및 명령어 2를 이용하는 경우 프로그램 코드의 간소화가 가능하다.
도 7은 본 발명의 일 실시 예에 따른 프로그램 코드의 간소화를 설명하기 위한 도면이다.
도 7의 좌측에는 종래 기술에 따른 프로그램 코드를 나타내고, 도 7의 우측에는 본원에 따른 프로그램 코드를 나타낸다.
종래 기술에 따르면, 벡터 레지스터 파일에 저장되어 있는 데이터를 셔플한 후, 다시 벡터 레지스터 파일로 저장한다. 그에 따라, 종래 기술에 따른 프로그램 코드는 hcat 및 vcat와 같은 셔플을 위한 명령어를 포함할 수 있다. 또한, 모든 싸이클마다 데이터 셔플이 필요하며, 그에 따라, 모든 싸이클마다 hcat 또는 vcat이 필요할 수 있다.
이에 대해, 본원에 따르면, 복수의 레지스터 파일(110)에 저장되어 있는 데이터를 셔플한 후, 다시 복수의 레지스터 파일(110)로 저장하지 않고 곧바로 연산을 수행할 수 있다. 즉, hcat 및 vcat와 같은 셔플을 위한 명령어가 별도로 필요하지 않으며, 상술한 sf_set2d 명령어만이 필요하다. 즉, sf_set2d 명령어의 최초 입력으로 셔플 방법을 저장하고 있으며, 복수의 레지스터 파일(110)은 각 싸이클 별로 필요한 데이터를 셔플하여 제공하게 된다.
그에 따라, 본원에 따르면, 싸이클 별로 hcat 또는 vcat를 이용하지 않고, 상술한 sf_mul 또는 sf_mac를 이용하여 병렬 연산을 수행할 수 있다.
도 8은 본 발명의 일 실시 예에 따른 벡터 프로세서의 제어 방법을 설명하기 위한 흐름도이다.
먼저, 복수의 SIMD(Single Instruction Multiple Data) 레인(lane) 각각에 구비된 복수의 레지스터 파일 각각에 복수의 데이터를 저장하고, 복수의 데이터 중 현재 싸이클에 이용되는 입력 데이터를 각각 출력한다(S810). 그리고, 셔플 유닛에 의해, 복수의 레지스터 파일로부터 출력되는 복수의 입력 데이터를 수신하고, 수신된 복수의 입력 데이터를 복수의 SIMD 레인 각각에 대응되도록 셔플(shuffle)하여 출력한다(S820). 그리고, 셔플 유닛으로부터 출력되는 입력 데이터를 수신하여 병렬 연산을 수행한다(S830).
여기서, 셔플하여 출력하는 단계(S820)는 셔플 유닛에 구비된 복수의 SIMD 레인 각각에 구비된 복수의 멀티플렉서(Multiplexer) 각각에 의해, 복수의 레지스터 파일로부터 출력되는 복수의 입력 데이터를 수신하고, 수신된 복수의 입력 데이터 중 해당 멀티플렉서가 구비된 레인에 대응되는 하나의 입력 데이터를 출력할 수 있다.
한편, 입력 명령어에 기초하여 복수의 레지스터 파일 및 셔플 유닛을 각 싸이클 별로 제어하는 단계를 더 포함할 수 있다. 이때, 복수의 레지스터 파일 및 셔플 유닛을 특정 싸이클 동안 제어한 후, 현재 상태를 저장할 수 있다. 즉, 한 싸이클이 종료되면, 저장되어 있는 현재 상태를 업데이트할 수 있다.
여기서, 제어하는 단계는 복수의 SIMD 레인 각각의 참조 레지스터 주소를 복수의 레지스터 파일 각각으로 전송하고, 참조 레지스터 주소는 각 레지스터 파일에 저장된 복수의 데이터 중 현재 싸이클에서 이용되는 입력 데이터의 주소일 수 있다.
또한, 제어하는 단계는 복수의 입력 데이터에 대한 셔플 정보를 셔플 유닛으로 전송하며, 셔플 정보는 복수의 SIMD 레인 각각에서 출력될 입력 데이터에 대한 정보일 수 있다.
그리고, 제어하는 단계는 복수의 레지스터 파일 각각으로 현재 싸이클에서 이용될 입력 데이터에 대한 참조 레지스터 주소를 제공하도록 어드레스 멀티플렉서(Address Multiplexer)를 제어할 수 있다.
여기서, 제어하는 단계는 적어도 하나의 어드레스 레지스터에 복수의 SIMD 레인 각각의 참조 레지스터 주소를 저장하는 단계 및 명령어 디코딩 유닛 및 적어도 하나의 어드레스 레지스터로부터 제공되는 복수의 참조 레지스터 주소 중 하나를 대응되는 레지스터 파일로 제공하도록 어드레스 멀티플렉서를 제어할 수 있다.
그리고, 입력 명령어는 명령 실행 유닛이 처리할 연산의 종류, 연산 방법 및 가로, 세로 방향의 증가분에 대한 정보 중 적어도 하나를 포함할 수 있다.
한편, 병렬 연산을 수행하는 단계(S830)는 스칼라 레지스터 파일로부터 출력되는 스칼라 데이터를 이용하여, 셔플 유닛으로부터 출력되는 입력 데이터를 병렬 연산할 수 있다.
이상과 같은 본 발명의 다양한 실시 예에 따르면, 벡터 프로세서는 입력 데이터를 셔플한 후, 재저장의 과정 없이 연산을 수행하여 처리 속도 및 에너지 효율을 향상시킬 수 있다.
한편, 이러한 다양한 실시 예에 따른 방법들은 프로그래밍되어 각종 저장 매체에 저장될 수 있다. 이에 따라, 저장 매체를 실행하는 다양한 유형의 전자 장치에서 상술한 다양한 실시 예에 따른 방법들이 구현될 수 있다.
구체적으로는, 상술한 제어 방법을 순차적으로 수행하는 프로그램이 저장된 비일시적 판독 가능 매체(non-transitory computer readable medium)가 제공될 수 있다.
비일시적 판독 가능 매체란 레지스터, 캐쉬, 메모리 등과 같이 짧은 순간 동안 데이터를 저장하는 매체가 아니라 반영구적으로 데이터를 저장하며, 기기에 의해 판독(reading)이 가능한 매체를 의미한다. 구체적으로는, 상술한 다양한 어플리케이션 또는 프로그램들은 CD, DVD, 하드 디스크, 블루레이 디스크, USB, 메모리카드, ROM 등과 같은 비일시적 판독 가능 매체에 저장되어 제공될 수 있다.
또한, 이상에서는 본 발명의 바람직한 실시 예에 대하여 도시하고 설명하였지만, 본 발명은 상술한 특정의 실시 예에 한정되지 아니하며, 청구범위에서 청구하는 본 발명의 요지를 벗어남이 없이 당해 발명이 속하는 기술분야에서 통상의 지식을 가진자에 의해 다양한 변형실시가 가능한 것은 물론이고, 이러한 변형실시들은 본 발명의 기술적 사상이나 전망으로부터 개별적으로 이해되어져서는 안될 것이다.
Claims (15)
- 복수의 SIMD(Single Instruction Multiple Data) 레인(lane) 각각에 구비되며, 각각 복수의 데이터를 저장하고, 상기 복수의 데이터 중 현재 싸이클에 이용되는 입력 데이터를 각각 출력하는 복수의 레지스터 파일;상기 복수의 레지스터 파일로부터 출력되는 복수의 입력 데이터를 수신하고, 상기 수신된 복수의 입력 데이터를 상기 복수의 SIMD 레인 각각에 대응되도록 셔플(shuffle)하여 출력하는 셔플 유닛; 및상기 셔플 유닛으로부터 출력되는 입력 데이터를 수신하여 병렬 연산을 수행하는 명령 실행 유닛(execution unit);을 포함하는 벡터 프로세서.
- 제1항에 있어서,상기 셔플 유닛은, 상기 복수의 SIMD 레인 각각에 구비된 복수의 멀티플렉서(Multiplexer);를 포함하고,상기 복수의 멀티플렉서 각각은,상기 복수의 레지스터 파일로부터 출력되는 복수의 입력 데이터를 수신하고, 상기 수신된 복수의 입력 데이터 중 해당 멀티플렉서가 구비된 레인에 대응되는 하나의 입력 데이터를 출력하는, 벡터 프로세서.
- 제1항에 있어서,입력 명령어에 기초하여 상기 복수의 레지스터 파일 및 상기 셔플 유닛을 각 싸이클 별로 제어하는 셔플 제어 유닛;을 더 포함하는, 벡터 프로세서.
- 제3항에 있어서,상기 셔플 제어 유닛은,상기 복수의 SIMD 레인 각각의 참조 레지스터 주소를 상기 복수의 레지스터 파일 각각으로 전송하고,상기 참조 레지스터 주소는, 각 레지스터 파일에 저장된 상기 복수의 데이터 중 상기 현재 싸이클에서 이용되는 입력 데이터의 주소인, 벡터 프로세서.
- 제3항에 있어서,상기 셔플 제어 유닛은,상기 복수의 입력 데이터에 대한 셔플 정보를 상기 셔플 유닛으로 전송하며,상기 셔플 정보는,상기 복수의 SIMD 레인 각각에서 출력될 입력 데이터에 대한 정보인, 벡터 프로세서.
- 제3항에 있어서,상기 셔플 제어 유닛은,상기 복수의 레지스터 파일 각각으로 현재 싸이클에서 이용될 입력 데이터에 대한 참조 레지스터 주소를 제공하는 어드레스 멀티플렉서(Address Multiplexer); 및상기 어드레스 멀티플렉서를 제어하는 제어 유닛;을 포함하는, 벡터 프로세서.
- 제6항에 있어서,상기 셔플 제어 유닛은,상기 복수의 SIMD 레인 각각의 참조 레지스터 주소를 저장하는 적어도 하나의 어드레스 레지스터;를 더 포함하고,상기 제어 유닛은,명령어 디코딩 유닛 및 상기 적어도 하나의 어드레스 레지스터로부터 제공되는 복수의 참조 레지스터 주소 중 하나를 대응되는 레지스터 파일로 제공하도록 상기 어드레스 멀티플렉서를 제어하는, 벡터 프로세서.
- 제3항에 있어서,상기 입력 명령어는,상기 명령 실행 유닛이 처리할 연산의 종류, 연산 방법 및 가로, 세로 방향의 증가분에 대한 정보 중 적어도 하나를 포함하는, 벡터 프로세서.
- 제1항에 있어서,스칼라 레지스터 파일;을 더 포함하고,상기 명령 실행 유닛은,상기 스칼라 레지스터 파일로부터 출력되는 스칼라 데이터를 이용하여, 상기 셔플 유닛으로부터 출력되는 입력 데이터를 병렬 연산하는, 벡터 프로세서.
- 벡터 프로세서의 제어 방법에 있어서,복수의 SIMD(Single Instruction Multiple Data) 레인(lane) 각각에 구비된 복수의 레지스터 파일 각각에 복수의 데이터를 저장하고, 상기 복수의 데이터 중 현재 싸이클에 이용되는 입력 데이터를 각각 출력하는 단계;셔플 유닛에 의해, 상기 복수의 레지스터 파일로부터 출력되는 복수의 입력 데이터를 수신하고, 상기 수신된 복수의 입력 데이터를 상기 복수의 SIMD 레인 각각에 대응되도록 셔플(shuffle)하여 출력하는 단계; 및상기 셔플 유닛으로부터 출력되는 입력 데이터를 수신하여 병렬 연산을 수행하는 단계;를 포함하는 제어 방법.
- 제10항에 있어서,상기 셔플하여 출력하는 단계는,상기 셔플 유닛에 구비된 복수의 SIMD 레인 각각에 구비된 복수의 멀티플렉서(Multiplexer) 각각에 의해, 상기 복수의 레지스터 파일로부터 출력되는 복수의 입력 데이터를 수신하고, 상기 수신된 복수의 입력 데이터 중 해당 멀티플렉서가 구비된 레인에 대응되는 하나의 입력 데이터를 출력하는, 제어 방법.
- 제10항에 있어서,입력 명령어에 기초하여 상기 복수의 레지스터 파일 및 상기 셔플 유닛을 각 싸이클 별로 제어하는 단계;를 더 포함하는, 제어 방법.
- 제12항에 있어서,상기 제어하는 단계는,상기 복수의 SIMD 레인 각각의 참조 레지스터 주소를 상기 복수의 레지스터 파일 각각으로 전송하고,상기 참조 레지스터 주소는, 각 레지스터 파일에 저장된 상기 복수의 데이터 중 상기 현재 싸이클에서 이용되는 입력 데이터의 주소인, 제어 방법.
- 제12항에 있어서,상기 제어하는 단계는,상기 복수의 입력 데이터에 대한 셔플 정보를 상기 셔플 유닛으로 전송하며,상기 셔플 정보는,상기 복수의 SIMD 레인 각각에서 출력될 입력 데이터에 대한 정보인, 제어 방법.
- 제12항에 있어서,상기 제어하는 단계는,상기 복수의 레지스터 파일 각각으로 현재 싸이클에서 이용될 입력 데이터에 대한 참조 레지스터 주소를 제공하도록 어드레스 멀티플렉서(Address Multiplexer)를 제어하는, 제어 방법.
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US16/462,086 US11263018B2 (en) | 2016-12-02 | 2017-10-23 | Vector processor and control method therefor |
CN201780074579.8A CN110050259B (zh) | 2016-12-02 | 2017-10-23 | 矢量处理器及其控制方法 |
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020160163399A KR102659495B1 (ko) | 2016-12-02 | 2016-12-02 | 벡터 프로세서 및 그 제어 방법 |
KR10-2016-0163399 | 2016-12-02 |
Publications (1)
Publication Number | Publication Date |
---|---|
WO2018101607A1 true WO2018101607A1 (ko) | 2018-06-07 |
Family
ID=62242214
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
PCT/KR2017/011725 WO2018101607A1 (ko) | 2016-12-02 | 2017-10-23 | 벡터 프로세서 및 그 제어 방법 |
Country Status (4)
Country | Link |
---|---|
US (1) | US11263018B2 (ko) |
KR (1) | KR102659495B1 (ko) |
CN (1) | CN110050259B (ko) |
WO (1) | WO2018101607A1 (ko) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP3942424A4 (en) * | 2019-03-18 | 2022-12-14 | Micron Technology, Inc. | VECTOR PROCESSOR WITH A VECTOR CONFIGURATION OF A FIRST AND A PLURALITY OF WAYS |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20210271425A1 (en) * | 2020-02-28 | 2021-09-02 | Kyocera Document Solutions Inc. | Data linkage system and data storage system |
CN115061731B (zh) * | 2022-06-23 | 2023-05-23 | 摩尔线程智能科技(北京)有限责任公司 | 混洗电路和方法、以及芯片和集成电路装置 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060227966A1 (en) * | 2005-04-08 | 2006-10-12 | Icera Inc. (Delaware Corporation) | Data access and permute unit |
US20130318328A1 (en) * | 2011-12-23 | 2013-11-28 | Elmoustapha Ould-Ahmed-Vall | Apparatus and method for shuffling floating point or integer values |
US20130339649A1 (en) * | 2012-06-15 | 2013-12-19 | Intel Corporation | Single instruction multiple data (simd) reconfigurable vector register file and permutation unit |
US20140181477A1 (en) * | 2012-12-21 | 2014-06-26 | Aniruddha S. Vaidya | Compressing Execution Cycles For Divergent Execution In A Single Instruction Multiple Data (SIMD) Processor |
US20160188532A1 (en) * | 2014-12-27 | 2016-06-30 | Intel Corporation | Method and apparatus for performing a vector bit shuffle |
Family Cites Families (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6115812A (en) * | 1998-04-01 | 2000-09-05 | Intel Corporation | Method and apparatus for efficient vertical SIMD computations |
US6665790B1 (en) | 2000-02-29 | 2003-12-16 | International Business Machines Corporation | Vector register file with arbitrary vector addressing |
US7818356B2 (en) | 2001-10-29 | 2010-10-19 | Intel Corporation | Bitstream buffer manipulation with a SIMD merge instruction |
US7676647B2 (en) | 2006-08-18 | 2010-03-09 | Qualcomm Incorporated | System and method of processing data using scalar/vector instructions |
US8156310B2 (en) * | 2006-09-11 | 2012-04-10 | International Business Machines Corporation | Method and apparatus for data stream alignment support |
US8078836B2 (en) * | 2007-12-30 | 2011-12-13 | Intel Corporation | Vector shuffle instructions operating on multiple lanes each having a plurality of data elements using a common set of per-lane control bits |
US9141386B2 (en) | 2010-09-24 | 2015-09-22 | Intel Corporation | Vector logical reduction operation implemented using swizzling on a semiconductor chip |
US9552206B2 (en) * | 2010-11-18 | 2017-01-24 | Texas Instruments Incorporated | Integrated circuit with control node circuitry and processing circuitry |
JP5988222B2 (ja) * | 2011-10-18 | 2016-09-07 | パナソニックIpマネジメント株式会社 | シャッフルパターン生成回路、プロセッサ、シャッフルパターン生成方法、命令 |
CN103999045B (zh) | 2011-12-15 | 2017-05-17 | 英特尔公司 | 使用混洗表和混合表经由矢量指令优化程序循环的方法 |
US9501276B2 (en) * | 2012-12-31 | 2016-11-22 | Intel Corporation | Instructions and logic to vectorize conditional loops |
US20150356054A1 (en) | 2013-01-10 | 2015-12-10 | Freescale Semiconductor, Inc. | Data processor and method for data processing |
CN104424129B (zh) * | 2013-08-19 | 2019-07-26 | 上海芯豪微电子有限公司 | 基于指令读缓冲的缓存系统和方法 |
EP3001307B1 (en) * | 2014-09-25 | 2019-11-13 | Intel Corporation | Bit shuffle processors, methods, systems, and instructions |
-
2016
- 2016-12-02 KR KR1020160163399A patent/KR102659495B1/ko active IP Right Grant
-
2017
- 2017-10-23 US US16/462,086 patent/US11263018B2/en active Active
- 2017-10-23 WO PCT/KR2017/011725 patent/WO2018101607A1/ko active Application Filing
- 2017-10-23 CN CN201780074579.8A patent/CN110050259B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060227966A1 (en) * | 2005-04-08 | 2006-10-12 | Icera Inc. (Delaware Corporation) | Data access and permute unit |
US20130318328A1 (en) * | 2011-12-23 | 2013-11-28 | Elmoustapha Ould-Ahmed-Vall | Apparatus and method for shuffling floating point or integer values |
US20130339649A1 (en) * | 2012-06-15 | 2013-12-19 | Intel Corporation | Single instruction multiple data (simd) reconfigurable vector register file and permutation unit |
US20140181477A1 (en) * | 2012-12-21 | 2014-06-26 | Aniruddha S. Vaidya | Compressing Execution Cycles For Divergent Execution In A Single Instruction Multiple Data (SIMD) Processor |
US20160188532A1 (en) * | 2014-12-27 | 2016-06-30 | Intel Corporation | Method and apparatus for performing a vector bit shuffle |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP3942424A4 (en) * | 2019-03-18 | 2022-12-14 | Micron Technology, Inc. | VECTOR PROCESSOR WITH A VECTOR CONFIGURATION OF A FIRST AND A PLURALITY OF WAYS |
Also Published As
Publication number | Publication date |
---|---|
CN110050259A (zh) | 2019-07-23 |
KR102659495B1 (ko) | 2024-04-22 |
US20200272478A1 (en) | 2020-08-27 |
KR20180063542A (ko) | 2018-06-12 |
US11263018B2 (en) | 2022-03-01 |
CN110050259B (zh) | 2023-08-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
WO2018101607A1 (ko) | 벡터 프로세서 및 그 제어 방법 | |
CN110300957B (zh) | 数据处理装置中的加宽算数 | |
WO2014014282A1 (en) | Method and apparatus for data processing using graphic processing unit | |
WO2011105860A2 (en) | Method and apparatus for generating minimum boot image | |
WO2016064158A1 (ko) | 재구성 가능 프로세서 및 그 동작 방법 | |
KR102584031B1 (ko) | 데이터 처리장치에서의 요소 바이 벡터 연산 | |
WO2017150769A1 (ko) | 애플리케이션 코드 난독화 장치 및 이를 이용한 애플리케이션 코드 난독화 방법 | |
WO2016089114A1 (en) | Method and apparatus for image blurring | |
WO2018048117A1 (en) | Display apparatus and control method thereof | |
WO2015130093A1 (en) | Method and apparatus for preventing bank conflict in memory | |
KR20200110165A (ko) | 뉴럴 네트워크의 레이어들의 처리에서 제로 값(zero value)의 연산을 처리하는 방법 및 장치 | |
WO2015099287A1 (ko) | 일회용 비밀 번호를 이용하는 사용자 인증 방법 및 그 장치 | |
WO2020027386A1 (ko) | 전력 디바이스 환경상에서 대용량 암호화 행렬 연산 최적화 처리 방법 | |
WO2015080440A1 (en) | Method and processor for executing instructions, method and apparatus for encoding instructions, and recording medium therefor | |
WO2017007044A1 (ko) | 신호 처리 장치 및 방법 | |
WO2016098943A1 (ko) | 얼굴 검출 능력 향상을 위한 이미지 처리 방법 및 시스템 | |
WO2022139101A1 (ko) | 사물 인터넷 장치, 사물 인터넷 장치 관리 시스템 및 사물 인터넷 장치를 관리하는 방법 | |
WO2017052125A1 (ko) | 비트 수를 증가시킨 sram 기반 tcam의 동작 방법 및 시스템 | |
WO2015080534A1 (ko) | 재구성 가능 프로세서의 레지스터를 제어하는 방법 및 장치와 재구성 가능 프로세서의 레지스터를 제어하는 명령어를 생성하는 방법 및 장치 | |
WO2017126715A1 (ko) | 나눗셈 연산을 처리하는 방법, 장치 및 기록매체 | |
WO2017007047A1 (ko) | 불규칙 비교를 이용하는 공간적 깊이 불균일성 보상 방법 및 장치 | |
WO2018194204A1 (ko) | 3차원 안면 정면화 시스템 및 방법 | |
WO2013115429A1 (en) | Apparatus and method for generating interleaver index | |
WO2024143647A1 (ko) | 분산 연산을 수행하는 전자 장치 및 제어 방법 | |
WO2018012704A2 (ko) | 영상 처리 장치 및 영상 처리 방법 |
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: 17877011 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: 17877011 Country of ref document: EP Kind code of ref document: A1 |