KR101028428B1 - Arithmetic operating apparatus and method for performing arithmetic operation - Google Patents
Arithmetic operating apparatus and method for performing arithmetic operation Download PDFInfo
- Publication number
- KR101028428B1 KR101028428B1 KR1020090023506A KR20090023506A KR101028428B1 KR 101028428 B1 KR101028428 B1 KR 101028428B1 KR 1020090023506 A KR1020090023506 A KR 1020090023506A KR 20090023506 A KR20090023506 A KR 20090023506A KR 101028428 B1 KR101028428 B1 KR 101028428B1
- Authority
- KR
- South Korea
- Prior art keywords
- register
- instruction
- operator
- value
- simd
- Prior art date
Links
- 238000000034 method Methods 0.000 title claims abstract description 83
- 238000004364 calculation method Methods 0.000 claims description 117
- 238000010586 diagram Methods 0.000 description 26
- 230000006870 function Effects 0.000 description 17
- 239000011159 matrix material Substances 0.000 description 7
- 230000000694 effects Effects 0.000 description 5
- 229940050561 matrix product Drugs 0.000 description 3
- 230000003287 optical effect Effects 0.000 description 2
- 238000004891 communication Methods 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 230000010485 coping Effects 0.000 description 1
- 230000010365 information processing Effects 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/30181—Instruction operation extension or modification
-
- 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
- G06F15/80—Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
-
- 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
- G06F17/16—Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
-
- 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
-
- 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/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
- G06F7/4806—Computations with complex numbers
-
- 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
-
- 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/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/30145—Instruction analysis, e.g. decoding, instruction word fields
-
- 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, look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units
-
- 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, look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units
- G06F9/3887—Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
-
- 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/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
- G06F7/483—Computations with numbers represented by a non-linear combination of denominational numbers, e.g. rational numbers, logarithmic number system or floating-point numbers
-
- 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/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
- G06F7/544—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices for evaluating functions by calculation
- G06F7/5443—Sum of products
Abstract
본 발명은, 예컨대 SIMD 부동(浮動) 소수점 곱합 연산 등에 있어서의 각종 연산 조합을 적은 명령 종별 코드수로 실현한다.
연산 장치(1)가, 하나의 명령에 있어서의 하나 이상의 미사용 비트에, 상기 하나의 명령에 의해 실행되는 통상 처리와는 상이한 확장 처리의 실행 지시를 레지스터(11)와 연산기(12b, 12e) 중 적어도 한쪽에 대해 행하는 확장 지시 정보를 설정하는 설정부(20)를 갖는다.
The present invention realizes, for example, various combinations of operations in SIMD floating-point multiplication operations and the like with a small number of instruction type codes.
In the register 11 and the calculators 12b and 12e, the arithmetic unit 1 sends one or more unused bits in one instruction to execute an expansion process that is different from the normal processing executed by the one instruction. And a setting unit 20 for setting extended instruction information to be performed on at least one side.
Description
본 발명은, 예컨대 부동 소수점 곱합 연산기를 이용하여 복소수 행렬곱 연산 등의 연산을 행할 때에 이용하기에 적합한 기술에 관한 것이다. TECHNICAL FIELD This invention relates to the technique suitable for use when performing calculations, such as a complex matrix product operation using a floating-point multiplication operator, for example.
일반적으로, 복소수를 요소로 하는 행렬곱 연산은 하기와 같은 계산식(1)으로 실현된다. In general, a matrix multiplication operation using a complex number as an element is realized by the following equation (1).
X + Yi← X + Yi + (A + Bi) * (C + Di)X + Yi ← X + Yi + (A + Bi) * (C + Di)
= X + A * C - B * D + (Y + A * D + B * C)i (1)= X + A * C-B * D + (Y + A * D + B * C) i (1)
이 행렬곱 연산을, 하나의 부동 소수점 곱합 연산기를 이용하여 실행할 때에는, 하기 식(1-1)∼(1-4)에 의한 4회의 연산이 실행되게 된다. 즉, 하나의 부동 소수점 곱합 연산기를 이용하여 복소수의 행렬곱 연산을 행하는 경우, 연산기에 대해 4 명령을 발행해야 한다. When performing this matrix multiplication operation using one floating point multiplication operator, four operations by the following formulas (1-1) to (1-4) are performed. In other words, when performing a complex matrix multiplication operation using one floating point multiplication operator, four instructions must be issued to the operator.
X ← X + A * C (1-1) X ← X + A * C (1-1)
Y ← Y + A * D (1-2) Y ← Y + A * D (1-2)
X ← X - B * D (1-3) X ← X-B * D (1-3)
Y ← Y + B * C (1-4)Y ← Y + B * C (1-4)
한편, 일반적으로, 곱합 연산을 보다 적은 명령수로 효율적으로 실행하는 수법으로서, 예컨대, 하나의 명령으로 복수의 데이터 스트림을 처리하는 SIMD(Single Instruction stream Multiple Data stream) 방식에 의한 곱합 연산이 알려져 있다. 이 SIMD 방식을 채용한 연산 장치에는, 레지스터와, 이 레지스터에 저장된 데이터(레지스터값)에 기초하여 동일한 연산을 행하는 2개의 부동 소수점 곱합 연산기가 구비된다. 이들 2개의 부동 소수점 곱합 연산기는, 각각, 통상 부동 소수점 곱합 연산기(통상 연산기) 및 확장 부동 소수점 곱합 연산기(확장 연산기)라고 불린다.On the other hand, in general, a multiplication operation by the SIMD (Single Instruction stream Multiple Data stream) method, which processes a plurality of data streams with one instruction, is known as a method of efficiently performing a multiplication operation with a smaller number of instructions. . The arithmetic unit employing this SIMD system is provided with a register and two floating point multiplication operators that perform the same operation based on the data (register values) stored in this register. These two floating point multiply operators are commonly called floating point multiply operators (normal operators) and extended floating point multiply operators (extended operators), respectively.
통상 연산기에는, 레지스터 전반 영역의 지정 레지스터 번호에 있어서의 레지스터값이 연산 대상 데이터로서 입력되고, 확장 연산기에는, 레지스터 후반 영역의 지정 레지스터 번호에 있어서의 레지스터값이 연산 대상 데이터로서 입력된다. 여기서, 레지스터 후반 영역의 지정 레지스터 번호는, 레지스터 전반 영역의 지정 레지스터 번호에 소정 오프셋을 가산한 번호이다. 예컨대, 레지스터 번호의 수가 128이면, 소정 오프셋으로서 64가 설정된다. In the normal calculator, the register value in the designated register number of the register first half area is input as the calculation target data, and the register value in the designated register number in the late register region is input as the calculation target data to the expansion calculator. Here, the designated register number of the latter half of the register is a number obtained by adding a predetermined offset to the designated register number of the first half of the register. For example, if the number of register numbers is 128, 64 is set as the predetermined offset.
이와 같이 구성함으로써, 하나의 명령으로, 레지스터로부터 통상 연산기로 출력되어야 하는 레지스터값을 지정하는 레지스터 번호를 지시하는 것 만으로, 레지스터로부터 확장 연산기로 출력되어야 하는 레지스터값을 지정하는 레지스터 번호도 지시하는 것이 가능하게 된다. 즉, 하나의 명령으로 2개의 연산기에 대한 연산 처리 명령을 행할 수 있어, 종래, 4 명령으로 행하고 있었던 연산 처리를 2 명령으로 행할 수 있어, 작업 처리량을 배증시킬 수 있다. With this configuration, it is necessary to indicate a register number specifying a register value to be output from the register to the expansion operator by simply indicating a register number specifying the register value to be output from the register to the normal operator in one instruction. It becomes possible. That is, a single instruction can execute arithmetic processing instructions for two arithmetic operators, and arithmetic processing that has conventionally been performed by four instructions can be performed by two instructions, thereby doubling the throughput.
[특허 문헌 1] 일본 특허 공개 제2003-16051호 공보[Patent Document 1] Japanese Unexamined Patent Publication No. 2003-16051
그러나, 상기 식(1-1)∼(1-4)에 의한 4회의 연산(즉 4개의 명령)에 의해 실행되는 복소수 행렬곱 연산을, 그대로, 전술한 바와 같이 SIMD 방식을 채용한 연산 장치에 적용하고, 2 명령으로 실행하는 것은 할 수 없다. 이것은, 전술과 같이 통상 연산기가 레지스터 전반 영역을 사용하고 확장 연산기가 레지스터 후반 영역을 사용한다고 하는 레지스터의 제약과, 전술과 같이 통상 연산기와 확장 연산기가 동일한 연산을 행한다고 하는 연산 내용의 제약 때문이다. However, a complex matrix multiplication operation performed by four operations (that is, four instructions) according to the above formulas (1-1) to (1-4) is directly applied to the computing device employing the SIMD method as described above. Can not be applied and executed with 2 instructions. This is because of the constraints of registers in which the normal operator uses the front register area and the extended operator uses the late register area as described above, and the constraints on the operation contents that the normal operator and the extended operator perform the same operation as described above. .
본 발명의 목적의 하나는, 예컨대 SIMD 부동 소수점 곱합 연산 등에 있어서의 각종 연산 조합을 적은 명령 종별 코드수로 실현하는 것이다. One of the objects of the present invention is to realize various combinations of operations in, for example, SIMD floating-point multiplication operations and the like with a small number of instruction type codes.
또, 상기 목적에 한정되지 않고, 후술하는 발명을 실시하기 위한 최선의 형태에 나타내는 각 구성에 의해 유도되는 작용 효과로서, 종래의 기술에 의해서는 얻어지지 않는 작용 효과를 발휘하는 것도 본 발명의 다른 목적의 하나로서 위치를 부여할 수 있다. Moreover, it is not limited to the said objective, It is an effect of the action guide | induced by each structure shown by the best form for implementing the below-mentioned invention, It is another thing of this invention to show the action effect which is not obtained by the prior art. Position can be given as one of the objectives.
본 연산 장치는, 연산 대상의 데이터를 저장하는 레지스터와, 상기 레지스터로부터 판독된 데이터에 기초하는 연산을 실행하는 하나 이상의 연산기를 갖고 있다. 상기 레지스터로부터 판독되어야 하는 데이터 및 상기 연산기에 의해 실행되어야 하는 연산의 종별을 지시하는, 복수 비트로 이루어지는 하나의 명령을 받고, 상기 연산기가, 상기 하나의 명령에 의해 지시된 데이터에 기초하여, 상기 하나의 명령에 의해 지시된 종별의 연산을 실행한다. 이 연산 장치가, 상기 하나의 명령에 있어서의 하나 이상의 미사용 비트에, 상기 하나의 명령에 의해 실행되는 통상 처리와는 상이한 확장 처리의 실행 지시를 상기 레지스터 및 상기 연산기 중 적어도 한쪽에 대해 행하는 확장 지시 정보를 설정하는 설정부를 갖는다. The computing device includes a register that stores data to be calculated, and one or more calculators that perform calculations based on the data read from the registers. Receiving one instruction consisting of a plurality of bits, indicative of the data to be read from the register and the type of operation to be performed by the operator, wherein the operator is based on the data indicated by the one instruction; Perform the type operation indicated by the command. Expansion instructions in which the arithmetic unit issues, to at least one of the register and the operator, instructions for executing expansion processing different from the normal processing executed by the one instruction to one or more unused bits in the one instruction. It has a setting unit for setting information.
또한, 본 연산 방법에서는, 전술한 레지스터 및 연산기를 갖는 연산 장치에 있어서, 상기 레지스터로부터 판독되어야 하는 데이터 및 상기 연산기에 의해 실행되어야 하는 연산의 종별을 지시하는, 복수 비트로 이루어지는 하나의 명령을 받고, 상기 연산기는, 상기 하나의 명령에 의해 지시된 데이터에 기초하여, 상기 하나의 명령에 의해 지시된 종별의 연산을 실행한다. 이 연산 방법은, 상기 하나의 명령에 있어서의 하나 이상의 미사용 비트에, 상기 하나의 명령에 의해 실행되는 통상 처리와는 상이한 확장 처리의 실행 지시를 상기 레지스터 및 상기 연산기 중 적어도 한쪽에 대해 행하는 확장 지시 정보를 설정하는 설정 단계를 포함한다. In addition, in the arithmetic method having the above-described register and arithmetic unit, the arithmetic unit receives one instruction consisting of a plurality of bits instructing the type of data to be read from the register and the arithmetic operation to be executed by the arithmetic unit, The calculator executes the type of operation indicated by the one instruction based on the data indicated by the one instruction. This operation method includes an instruction for executing at least one of the registers and the operator to execute an instruction to perform an expansion process different from the normal processing executed by the one instruction to one or more unused bits in the one instruction. A setting step of setting information.
개시한 연산 장치 및 연산 방법에 따르면, 하나의 명령에 있어서의 하나 이상의 미사용 비트를 이용하여 통상 처리와는 상이한 확장 처리의 실행 지시를 행할 수 있기 때문에, 예컨대 SIMD 부동 소수점 곱합 연산 등에 있어서의 각종 연산 조합을 적은 명령 종별 코드수로 실현할 수 있다. 따라서, 예컨대, 4개의 명령에 의해 행하고 있었던 복소수 행렬곱 연산 등의 복잡한 연산을, 2개의 명령에 의해 실행하는 것이 가능하게 되어, 작업 처리량을 배증시킬 수 있다. According to the arithmetic unit and the arithmetic method disclosed above, since one or more unused bits in one instruction can be used to give an instruction to execute an extension process different from the normal process, for example, various operations in SIMD floating point multiplication and the like. The combination can be realized with fewer instruction type codes. Therefore, for example, it is possible to execute complex operations such as complex matrix product operations performed by four instructions by two instructions, thereby doubling the throughput.
이하, 도면을 참조하여 본 발명의 실시형태를 설명한다. EMBODIMENT OF THE INVENTION Hereinafter, embodiment of this invention is described with reference to drawings.
[1] 연산 장치의 구성[1] computing equipment
도 1은 본 발명의 일 실시형태로서의 연산 장치의 구성을 도시하는 블록도로, 이 도 1에 도시하는 본 실시형태의 연산 장치(1)는, 연산부(10), 명령 코드 발행부(설정부)(20) 및 생성부(30)를 갖고 있다. Fig. 1 is a block diagram showing the configuration of an arithmetic device as an embodiment of the present invention. The
연산부(10)는, 레지스터(11)와, 2조의 통상 부동 소수점 곱합 연산기(통상 연산기 혹은 단순히 연산기)(12b) 및 확장 부동 소수점 곱합 연산기(확장 연산기 혹은 단순히 연산기)(12e)를 갖고 있다. 또, 이하에서는, 「통상 부동 소수점 곱합 연산기」를 「통상 곱합 연산기」, 「통상 연산기」혹은 단순히 「연산기」라고 기재하고, 「확장 부동 소수점 곱합 연산기」를 「확장 곱합 연산기」, 「확장 연산기」혹은 단순히 「연산기」라고 기재하는 경우가 있다. The
레지스터(11)는, 2N 개(본 실시형태에서는 N= 64)의 레지스터 번호 0∼2N-1로 지정되는 레지스터값(데이터)을 유지할 수 있는 것이다. 이 레지스터(11)는, 연산 대상 데이터 및 연산기(12b, 12e)에 의한 연산 결과를 저장하는 것이다. The
본 실시형태의 연산 장치(1)에서는, 후술하는 바와 같이, 명령 종별 코드(opcode)에 의해, 하나의 명령으로 복수(본 실시형태에서는 2개)의 데이터 스트림을 처리하는 SIMD 방식의 채용/불채용(SIMD/비SIMD)을 선택하는 것이 가능하게 구성되어 있다. SIMD 방식이 채용되면, 레지스터(11)의 영역이 전반 부분(레지스터 번호 0∼N-1) 및 후반 부분(레지스터 번호 N-1∼2N-1)의 2영역으로 분할되어, 이들 2영역이, 기본적으로, 각각 통상 연산기(12b) 및 확장 연산기(12e)에 의해 사 용된다. In the
또한, 레지스터(11)는, 후술하는 생성부(30)로부터, 6개의 출력 레지스터 번호, 2개의 입력 레지스터 번호 및 입력 레지스터 기록 제어 신호가 입력된다. 6개의 출력 레지스터 번호에 의해, 레지스터(11)로부터 각 연산기(12b, 12e)로 출력되어야 하는 3개의 레지스터값(곱합 연산 대상의 데이터)이 지정된다. 2개의 입력 레지스터 번호에 의해, 각 연산기(12b, 12e)에 의한 연산 결과를 레지스터값으로서 입력·기록해야 하는 저장처[레지스터(11)의 어드레스]가 지정된다. 입력 레지스터 기록 제어 신호에 의해, 각 연산기(12b, 12e)에 의한 연산 결과를 레지스터(11)에 기록하는지의 여부가 선택·제어된다. In the
여기서, 통상 연산기(12b)에 의한 연산 결과의 저장처를 지정하는 입력 레지스터 번호로서는 7비트의 값(b_rd[6:0])이 레지스터(11)에 입력된다. 레지스터(11)로부터 통상 연산기(12b)로 출력되어야 하는 3개의 레지스터값(곱합 연산 대상의 데이터)을 지정하는 3개의 출력 레지스터 번호로서는, 각각 7비트의 값(b_rs1[6:0], b_rs2[6:0], b_rs3[6:0])이 레지스터(11)에 입력된다. Here, as an input register number for specifying the storage destination of the operation result by the
또한, 확장 연산기(12e)에 의한 연산 결과의 저장처를 지정하는 입력 레지스터 번호로서는 7비트의 값(e_rd[6:0])이 레지스터(11)에 입력된다. 레지스터(11)로부터 확장 연산기(12e)로 출력되어야 하는 3개의 레지스터값(연산 대상 데이터)을 지정하는 3개의 출력 레지스터 번호로서는, 각각 7비트의 값(e_rs1[6:0], e_rs2[6:0], e_rs3[6:0])이 레지스터(11)에 입력된다. In addition, a 7-bit value (e_rd [6: 0]) is input to the
이들 7비트의 값(b_rd[6:0], b_rs1[6:0], b_rs2[6:0], b_rs3[6:0], e_rd[6:0], e_rs1[6:0], e_rs2[6:0], e_rs3[6:0])으로서는, 0∼127의 범위의 정수가 설정되고, 연산기(12b, 12e)에 의한 곱합 연산에서 사용하는 레지스터 번호가 지정된다. 즉, 각 연산기(12b, 12e)에 대해, 곱연산 대상의 2개의 레지스터 번호, 합연산 대상의 레지스터 번호, 연산 결과 저장처의 레지스터 번호의 계 4개의 레지스터 번호가 0∼127의 범위에서 지정된다. 또, 레지스터(11)의 레지스터 번호 0∼63의 범위를 전반 영역, 레지스터(11)의 레지스터 번호 64∼127의 범위를 후반 영역이라고 부른다. These 7-bit values (b_rd [6: 0], b_rs1 [6: 0], b_rs2 [6: 0], b_rs3 [6: 0], e_rd [6: 0], e_rs1 [6: 0], e_rs2 [ 6: 0] and e_rs3 [6: 0]), an integer in the range of 0 to 127 is set, and the register number used in the multiplication operation by the
또한, 본 실시형태에서는, 레지스터 번호 n(n= 0, 1, 2, …, 127)에 있어서의 레지스터값을 %r[n]로 나타낸다. 예컨대, 레지스터 번호 n= 0, 1, …, 127에 저장된 레지스터값은, 각각, %r[0], %r[1], …, %r[127]로 나타낸다. In the present embodiment, the register value in the register number n (n = 0, 1, 2, ..., 127) is represented by% r [n]. For example, register number n = 0, 1,... , The register values stored in 127 are% r [0],% r [1],... ,% R [127].
이들 레지스터값 %r[0], %r[1], …, %r[127] 중에서, 명령에 의해 지정된 레지스터 번호의 값은 이하와 같이 나타낸다. 통상 연산기(12b)에 따르는 4개의 레지스터값을 각각 %b1, %b2, %b3, %bd로 나타내면, 예컨대 b_rs1[6:0] ← 15인 경우, %b1은 %r[15]를 나타낸다. 마찬가지로, 확장 연산기(12e)에 따르는 4개의 레지스터값을 각각 %e1, %e2, %e3, %ed로 나타내면, 예컨대 e_rs1[6:0] ← 79인 경우, %e1은 %r[79]를 나타낸다. These register values% r [0],% r [1],... In% r [127], the value of the register number specified by the instruction is expressed as follows. When four register values of the
또한, 전술한 입력 레지스터 기록 제어 신호는, b_we, e_we로 나타낸다. 제어 신호(b_we)는, 통상 연산기(12b)에 의한 곱합 연산 결과를 레지스터(11)에 기록하는지의 여부를 선택하여 제어하기 위한 1비트의 신호로, 기록하는 경우에 "1"로 설정되고, 기록하지 않는 경우에 "0"으로 설정된다. 마찬가지로, 제어 신호(e_we) 는, 확장 연산기(12e)에 의한 곱합 연산 결과를 레지스터(11)에 기록하는지의 여부를 선택하여 제어하기 위한 1비트의 신호로, 기록하는 경우에 "1"로 설정되고, 기록하지 않는 경우에 "0"으로 설정된다. In addition, the above-described input register write control signals are represented by b_we and e_we. The control signal b_we is a 1-bit signal for selecting and controlling whether or not the result of the multiplication calculation by the
한편, 연산기(12b, 12e)는, 각각, 3입력 1출력의 부동 소수점 곱합 연산기이고, 후술하는 생성부(30)로부터의 명령 세트에 포함되는 연산 종별 코드(단순히 「연산 코드」라고 부르는 경우도 있음)에 따라, 후술하는 바와 같이 연산 종별을 전환 가능하게 구성되어 있다. On the other hand, the
통상 연산기(12b)는, 레지스터(11)로부터 판독된 3개의 레지스터값(%b1, %b2, %b3)이 각각 입력값(b_i1, b_i2, b_i3)으로서 입력되고, 연산 결과인 출력값(b_o)을 레지스터값(%bd)으로서 레지스터(11)에 출력한다. 마찬가지로, 확장 연산기(12e)는, 레지스터(11)로부터 판독된 3개의 레지스터값(%e1, %e2, %e3)이 각각 입력값(e_i1, e_i2, e_i3)으로서 입력되고, 연산 결과인 출력값(e_o)을 레지스터값(%ed)으로서 레지스터(11)에 출력한다. In the
즉, 통상 연산기(12b)는, 후술하는 생성부(30)로부터의 연산 코드(b_op[1:0])와, 레지스터(11)로부터의 데이터(%b1, %b2, %b3)가 입력되어, 이들 데이터(%b1, %b2, %b3)에 기초하여, 연산 코드(b_op[1:0])에 따른 종별의 연산을 행하여, 연산 결과 데이터(%bd)를 출력한다. 마찬가지로, 확장 연산기(12e)는, 후술하는 생성부(30)로부터의 연산 코드(e_op[1:0])와, 레지스터(11)로부터의 데이터(%e1, %e2, %e3)가 입력되고, 이들 데이터(%e1, %e2, %e3)에 기초하여, 연산 코드(e_op[1:0])에 따른 종별의 연산을 행하여, 연산 결과 데이터(%ed) 를 출력한다. That is, in the
여기서, 본 실시형태의 연산기(12b, 12e)의 각각에 있어서, 2비트의 연산 코드(b_op[1:0], e_op[1:0])에 의해 지정되는 연산 내용(연산명)은, 하기 표 1과 같은 4종류이다. Here, in each of the
[표 1]TABLE 1
명령 코드 발행부(설정부)(20)는, 후술하는 생성부(30)를 통해 연산부(10)로 명령 코드를 발행하는 것으로, 후술하는 설정부로서의 기능을 갖고 있다. The command code issuing unit (setting unit) 20 issues a command code to the calculating
여기서, 명령 코드 발행부(20)에 의해 발행되는 명령 코드는, 예컨대 하기 표 2나 하기 표 3에 나타내는 바와 같이, 명령 종별 코드와 4개의 레지스터 번호 지시로 구성된다. 명령 종별 코드는, opcode[3:0]로 표기되는 4비트의 데이터로, 16가지의 종별의 명령을 지시할 수 있다. 4개의 레지스터 번호 지시는, 각각, 도 5(a), 도 8(a), 도 11(a), 도 18(a), 도 22(a)에 도시하는 바와 같이, 7비트로 구성되고, 0∼127의 레지스터 번호 중 어느 하나를 지시할 수 있다. Here, the command code issued by the command
하기 표 2는, 연산 장치(1)에 있어서, opcode[3:2]를 00에 설정하고, 도 3∼도 5를 참조하면서 후술하는 비SIMD 방식을 채용한 상태에 대응하는, 명령 종별 코드와 명령 기술과 그 명령 종별 코드에 따른 연산 내용을 나타내고 있다. 이 상태에서, 연산부(10)는, 확장 연산기(12e)를 이용하지 않고 통상 연산기(12b)만을 이 용하여 레지스터(11)의 모든 영역에서의 레지스터값을 대상으로 하는 곱합 연산을 행하고 있다. Table 2 below shows an instruction type code corresponding to a state in which the opcode [3: 2] is set to 00 in the
하기 표 3은, 연산 장치(1)에 있어서, opcode[3:2]를 01에 설정하고, 도 6∼도 8을 참조하면서 후술하는 SIMD 방식을 채용한 상태에 대응하는, 명령 종별 코드와 명령 기술과 그 명령 종별 코드에 따른 통상 연산기(12b)/확장 연산기(12e)의 연산 내용을 나타내고 있다. Table 3 below shows an instruction type code and a command corresponding to a state in which the opcode [3: 2] is set to 01 in the
이 상태에서, 연산부(10)에 있어서, 통상 연산기(12b)에는, 레지스터(11)의 전반 영역의 지정 레지스터 번호에 있어서의 레지스터값이 연산 대상 데이터로서 입력된다. 또한, 확장 연산기(12e)에는, 레지스터(11)의 후반 영역의 지정 레지스터 번호에 있어서의 레지스터값이 연산 대상 데이터로서 입력된다. 여기서, 레지스터(11)의 후반 영역의 지정 레지스터 번호는, 레지스터(11)의 전반 영역의 지정 레지스터 번호에 소정 오프셋(본 실시형태에서는 64)을 가산한 번호이다. 연산기(12b, 12e)에 의한 연산 결과의 저장처를 지정하는 레지스터 번호에 대해서도 마찬가지이다. 이 때문에, SIMD 방식을 채용한 경우, 도 8(a)에 도시하는 바와 같이, 4개의 레지스터 번호 지시의 각각은 7비트 구성(rd[6:0], rs1[6:0], rs2[6:0], rs3[6:0])이지만, 각 번호 지시에 있어서, 7비트 중의 6비트(rd[5:0], rs1[5:0], rs2[5:0], rs3[5:0])가 사용되고, 1비트(rd[6], rs1[6], rs2[6], rs3[6])는 미사용의 상태가 된다. In this state, in the calculating
[표 2]TABLE 2
[표 3][Table 3]
명령 코드 발행부(20)에 있어서의 설정부로서의 기능은, 하나의 명령(명령 세트)에 있어서의 하나 이상의 미사용 비트에, 확장 지시 정보를 설정하는 기능이다. 이 확장 지시 정보는, 해당 명령에 의해 실행되는 통상 처리와는 상이한 확장 처리의 실행 지시를 레지스터(11) 및 연산기(12b, 12e) 중 적어도 하나에 대해 행하는 것이다. The function as the setting unit in the command
미사용 비트로서는, 전술한 바와 같이, 예컨대, 연산 장치(1)에 있어서 SIMD 방식을 채용했을 때에 생기는, 미사용 비트인 레지스터 번호 지시 필드의 최상위 비트(rd[6], rs1[6], rs2[6], rs3[6])의 일부 혹은 전부가 이용된다. As the unused bits, as described above, for example, the most significant bits (rd [6], rs1 [6], rs2 [6) of the register number indicating field, which are unused bits, generated when the SIMD method is adopted in the
또, 미사용 비트를 이용하는 확장 지시 정보로서는, 하기 2종류를 들 수 있다. Moreover, the following two types can be mentioned as extended instruction information using an unused bit.
(a1) 예컨대 도 9∼도 24를 참조하면서 후술하는 바와 같이, 각 연산기(12b, 12e)로 출력되어야 하는 데이터를, 각 연산기(12b, 12e)에 대응하는 레지스터(11)의 영역 이외의 영역에서의 데이터로 전환하는 지시를 레지스터(11)에 대해 행하는 확장 지시 정보. 이러한 확장 지시 정보에 의하면, 각 연산기(12b, 12e)는, 레지스터(11)의 전반 영역의 레지스터값과 후반 영역의 레지스터를 혼재시킨 상태로 연산을 행할 수 있다. (a1) For example, as described below with reference to FIGS. 9 to 24, data to be output to each of the
(a2) 예컨대 도 20, 도 22(b), 도 23, 도 24를 참조하면서 후술하는 바와 같이, 각 연산기(12b, 12e)에 의한 연산의 종별을 전환하는 지시를 각 연산기(12b, 12e)에 대해 행하는 확장 지시 정보. 이러한 확장 지시 정보에 의하면, 연산기(12b, 12e)가 실행하는 연산 종별을 독립적으로 전환하여, 연산기(12b)와 연산기(12e)의 각각에 상이한 종별의 연산을 실행시킬 수 있다. (a2) For example, as described below with reference to FIGS. 20, 22 (b), 23, and 24, instructions for switching the type of operation by each of the
생성부(30)는, 도 4, 도 7, 도 10, 도 17, 도 21, 도 25를 참조하면서 후술하는 바와 같이, 명령 코드 발행부(설정부)(20)에 의해 설정·발행된 명령 세트(명령 코드)로부터, 연산부(10)에 입력되는 명령 세트를 생성하는 것이다. The
여기서, 명령 코드 발행부(20)에 의해 발행되는 명령 코드는 opcode[3:0], rd[6:0], rs1[6:0], rs2[6:0], rs3[6:0]의 32비트이다. 또한, 생성부(30)에 의해 생성되는 연산부(10)에 입력되는 명령 세트는, b_we, e_we, b_rd[6:0], b_rs1[6:0], b_rs2[6:0], b_rs3[6:0], e_rd[6:0], e_rs1[6:0], e_rs2[6:0], e_rs3[6:0], b_op[1:0], e_op[1:0]의 62비트이다. 즉, 명령 코드 발행부(20)로부터의 32비트의 명령 코드는, 생성부(30)에 있어서, 연산부(10)에 입력하기 위한 62비트의 명령 세트로 변환된다. Here, the command codes issued by the command
이 때, 생성부(30)는, 도 10, 도 11(d), 도 17, 도 18(d), 도 21, 도 22(b), 도 22(d), 도 25를 참조하면서 후술하는 바와 같이, 미사용 비트에 설정된 확장 지시 정보에 기초하는 명령의 생성을 행한다. 즉, 생성부(30)는, 미사용 비트에 설정된 확장 지시 정보와 미사용 비트 이외의 비트에 설정된 정보에 기초하여 확장 명령을 생성하고, 그 확장 명령을 레지스터(11) 및 연산기(12b, 12e) 중 적어도 하나에 대해 명령 세트로서 출력하는 기능도 수행한다. 여기서, 확장 명령은, 상기 항목 (a1), (a2)와 같은 확장 지시 정보에 의해 지시되는, 확장 처리의 실행 지시를 행하는 것이다. At this time, the
[2] 연산부의 기본적인 동작[2] basic operations
여기서, 도 2에 도시하는 흐름도에 따라, 도 1에 도시하는 연산 장치(1)에 있어서의 연산부(10)의 기본적인 동작(처리)에 대해 설명한다. Here, according to the flowchart shown in FIG. 2, the basic operation (process) of the calculating
또, 도 2에서는 도시하지 않지만, 연산 장치(1)에서는, 도 2에 도시하는 흐름도에 따르는 처리를 실행하기 전에는, 명령 코드 발행부(20)에 의해 명령 코드를 발행하는 단계(설정 단계를 포함함)와, 생성부(30)에 의한 생성 단계가 실행된다.In addition, although not shown in FIG. 2, in the
설정 단계에서는, 전술한 바와 같이, 명령 코드 발행부(20)에 있어서의 설정부로서의 기능에 의해, 명령 세트에 있어서의 하나 이상의 미사용 비트에, 확장 지시 정보가 설정된다. 또한, 생성 단계에서는, 생성부(30)에 의해, 명령 코드 발행부(20)로부터의 명령 코드가 연산부(10)에 입력하기 위한 명령 세트로 변환되고, 그 때, 미사용 비트에 설정된 확장 지시 정보에 기초하는 명령의 생성이 행해진다.In the setting step, as described above, the extended instruction information is set in one or more unused bits in the instruction set by the function as the setting unit in the command
전술과 같이 생성부(30)(생성 단계)에서 생성된 명령 세트(b_we, e_we, b_rd, b_rs1, b_rs2, b_rs3, e_rd, e_rs1, e_rs2, e_rs3, b_op, e_op)가, 연산부(10)에 입력되면, 우선, 레지스터 판독이 행해진다(단계 S10). 이 레지스터 판독 단계에서는, 레지스터값(%r[b_rs1], %r[b_rs2], %r[b_rs3], %r[e_rs1], %r[e_rs2], %r[e_rs3])이, 레지스터(11)로부터 연산기(12b, 12e)로, 각각 입력값(b_i1, b_i2, b_i3, e_i1, e_i2, e_i3)으로서 입력된다(단계 S11). As described above, the instruction sets b_we, e_we, b_rd, b_rs1, b_rs2, b_rs3, e_rd, e_rs1, e_rs2, e_rs3, b_op, and e_op generated by the generation unit 30 (generation step) are input to the
이 후, 단계 S10(S11)에서 판독된 레지스터값에 기초하여, 통상 연산기(12b)에 의한 연산 실행(단계 S20) 및 확장 연산기(12e)에 의한 연산 실행(단계 S30)이 실행된다. Thereafter, based on the register value read in step S10 (S11), calculation execution by the
단계 S20에서는, 우선, 연산 코드(b_op)가 연산명 fmadd의 연산 내용을 지정하는 00인지의 여부의 판정을 행한다(단계 S21). 연산 코드 b_op= 00인 경우(단계 S21의 Y 루트), b_i1 * b_i2 + b_i3이 되는 연산을 실행하여, 그 연산 결과를 출력값(b_o)으로서 출력하고(단계 S22), 단계 S30의 처리로 이행한다. In step S20, first, a determination is made as to whether or not the operation code b_op is 00 for specifying the operation content of the operation name fmadd (step S21). When the operation code b_op = 00 (Y root of step S21), an operation that results in b_i1 * b_i2 + b_i3 is executed, and the operation result is output as an output value b_o (step S22), and the process proceeds to step S30. .
연산 코드 b_op= 00이 아닌 경우(단계 S21의 N 루트), 연산 코드(b_op)가 연산명 fnmadd의 연산 내용을 지정하는 11인지의 여부의 판정을 행한다(단계 S23). 연산 코드 b_op= 11인 경우(단계 S23의 Y 루트), -b_i1 * b_i2 - b_i3이 되는 연산을 실행하여, 그 연산 결과를 출력값(b_o)으로서 출력하고(단계 S24), 단계 S30의 처리로 이행한다. If the operation code b_op is not 00 (N root of step S21), it is determined whether or not the operation code b_op is 11 specifying the operation content of the operation name fnmadd (step S23). When the operation code b_op = 11 (Y root of step S23), an operation that becomes -b_i1 * b_i2-b_i3 is executed, and the operation result is output as an output value b_o (step S24), and the process shifts to step S30. do.
연산 코드 b_op= 11이 아닌 경우(단계 S23의 N 루트), 연산 코드(b_op)가 연산명 fmsub의 연산 내용을 지정하는 01인지의 여부의 판정을 행한다(단계 S25). 연산 코드 b_op= 01인 경우(단계 S25의 Y 루트), b_i1 * b_i2 - b_i3이 되는 연산 을 실행하여, 그 연산 결과를 출력값(b_o)으로서 출력하고(단계 S26), 단계 S30의 처리로 이행한다. If the operation code b_op = 11 is not (N root of step S23), it is determined whether the operation code b_op is 01 for specifying the operation content of the operation name fmsub (step S25). If the operation code b_op = 01 (Y root of step S25), an operation that results in b_i1 * b_i2-b_i3 is executed, and the operation result is output as an output value b_o (step S26), and the processing proceeds to step S30. .
연산 코드 b_op= 01이 아닌 경우(단계 S25의 N 루트), 연산 코드(b_op)가 연산명 fnmsub의 연산 내용을 지정하는 10인지의 여부의 판정을 행한다(단계 S27). 연산 코드 b_op= 10인 경우(단계 S27의 Y 루트), -b_i1 * b_i2 + b_i3이 되는 연산을 실행하여, 그 연산 결과를 출력값(b_o)로서 출력하고(단계 S28), 단계 S30의 처리로 이행한다. 또, 연산 코드 b_op= 10이 아닌 경우(단계 S27의 N 루트)도, 단계 S30의 처리로 이행한다. If the operation code b_op is not 01 (N root of step S25), it is determined whether or not the operation code b_op is 10 specifying the operation content of the operation name fnmsub (step S27). When the operation code b_op = 10 (Y root of step S27), an operation that becomes -b_i1 * b_i2 + b_i3 is executed, and the result of the operation is output as an output value b_o (step S28), and the process proceeds to step S30. do. Also, when the operation code b_op = 10 is not (N root of step S27), the processing proceeds to step S30.
마찬가지로, 단계 S30에서는, 우선, 연산 코드(e_op)가 연산명 fmadd의 연산 내용을 지정하는 00인지의 여부의 판정을 행한다(단계 S31). 연산 코드 e_op= 00인 경우(단계 S31의 Y 루트), e_i1 * e_i2 + e_i3이 되는 연산을 실행하여, 그 연산 결과를 출력값(e_o)으로서 출력하고(단계 S32), 단계 S40의 처리로 이행한다. Similarly, in step S30, first, a determination is made as to whether or not the operation code e_op is 00 for specifying the operation content of the operation name fmadd (step S31). When the operation code e_op = 00 (Y root of step S31), an operation that results in e_i1 * e_i2 + e_i3 is executed, and the operation result is output as an output value e_o (step S32), and the process proceeds to step S40. .
연산 코드 e_op= 00이 아닌 경우(단계 S31의 N 루트), 연산 코드(e_op)가 연산명 fnmadd의 연산 내용을 지정하는 11인지의 여부의 판정을 행한다(단계 S33). 연산 코드 e_op= 11인 경우(단계 S33의 Y 루트), -e_i1 * e_i2 - e_i3이 되는 연산을 실행하여, 그 연산 결과를 출력값(e_o)으로서 출력하고(단계 S34), 단계 S40의 처리로 이행한다. If the operation code e_op is not 00 (N root of step S31), it is determined whether or not the operation code e_op is 11 specifying the operation content of the operation name fnmadd (step S33). When the operation code e_op = 11 (Y root of step S33), an operation of -e_i1 * e_i2-e_i3 is executed, and the operation result is output as an output value e_o (step S34), and the process proceeds to step S40. do.
연산 코드 e_op= 11이 아닌 경우(단계 S33의 N 루트), 연산 코드(e_op)가 연산명 fmsub의 연산 내용을 지정하는 01인지의 여부의 판정을 행한다(단계 S35). 연산 코드 e_op= 01인 경우(단계 S35의 Y 루트), e_i1 * e_i2 - e_i3이 되는 연산 을 실행하여, 그 연산 결과를 출력값(e_o)으로서 출력하고(단계 S36), 단계 S40의 처리로 이행한다. If the operation code e_op = 11 is not (N root of step S33), it is determined whether or not the operation code e_op is 01 for specifying the operation content of the operation name fmsub (step S35). If the operation code e_op = 01 (Y root of step S35), an operation of e_i1 * e_i2-e_i3 is executed, and the operation result is output as an output value e_o (step S36), and the process proceeds to step S40. .
연산 코드 e_op= 01이 아닌 경우(단계 S35의 N 루트), 연산 코드(e_op)가 연산명 fnmsub의 연산 내용을 지정하는 10인지의 여부의 판정을 행한다(단계 S37). 연산 코드 e_op= 10인 경우(단계 S37의 Y 루트), -e_i1 * e_i2 + e_i3이 되는 연산을 실행하여, 그 연산 결과를 출력값(e_o)으로서 출력하고(단계 S38), 단계 S40의 처리로 이행한다. 또, 연산 코드 e_op= 10이 아닌 경우(단계 S37의 N 루트)도, 단계 S40의 처리로 이행한다. If the operation code e_op = 01 is not (N root of step S35), it is judged whether or not the operation code e_op is 10 specifying the operation content of the operation name fnmsub (step S37). If the operation code e_op = 10 (Y root of step S37), an operation of -e_i1 * e_i2 + e_i3 is executed, and the operation result is output as an output value e_o (step S38), and the process proceeds to step S40. do. Also, when the operation code e_op = 10 is not (N root of step S37), the processing proceeds to step S40.
또, 도 2에서는, 단계 S20의 처리의 후에 단계 S30의 처리를 실행하도록 기재되어 있지만, 실제로는, 단계 S20의 처리와 단계 S30의 처리는 병렬적으로 실행된다. 또한, 단계 S21, S23, S25, S27에 의한 판정 처리나, 단계 S31, S33, S35, S37에 의한 판정 처리는, 도 2에 도시하는 순서에 한정되지 않는다. In addition, although FIG. 2 describes to perform the process of step S30 after the process of step S20, in practice, the process of step S20 and the process of step S30 are executed in parallel. In addition, the determination process by step S21, S23, S25, S27 and the determination process by step S31, S33, S35, S37 are not limited to the procedure shown in FIG.
단계 S40에서는, 제어 신호(b_we, e_we) 및 지정 레지스터 번호(b_rd, e_rd)에 기초하여, 연산기(12b, 12e)에 의한 연산 결과의 레지스터(11)에 대한 기록이 제어된다. In step S40, the recording of the
즉, 제어 신호(b_we)가 1인지의 여부의 판정을 행한다(단계 S41). 제어 신호 b_we= 1인 경우(단계 S41의 Y 루트), 연산기(12b)의 출력값(b_o)이, 레지스터값(%r[b_rd])으로서 레지스터(11)에 기록된다(단계 S42). That is, it is determined whether the control signal b_we is 1 (step S41). When the control signal b_we = 1 (Y root of step S41), the output value b_o of the
제어 신호 b_we= 0인 경우(단계 S41의 N 루트), 또는, 단계 S42에 의한 기록 처리를 끝낸 후에는, 제어 신호(e_we)가 1인지의 여부의 판정을 행한다(단계 S43). 제어 신호 e_we= 1인 경우(단계 S43의 Y 루트), 연산기(12e)의 출력값(e_o)이, 레지스터값(%r[e_rd])로서 레지스터(11)에 기록된다(단계 S44). 제어 신호 e_we= 0인 경우(단계 S43의 N 루트), 또는, 단계 S44에 의한 기록 처리를 끝낸 후에는, 연산부(10)의 연산 처리를 종료한다. When the control signal b_we = 0 (N route in step S41) or after the recording process in step S42 is finished, it is determined whether the control signal e_we is 1 (step S43). When the control signal e_we = 1 (Y root of step S43), the output value e_o of the
[3] 비SIMD 채용 시의 연산 장치의 동작[3] operation of arithmetic unit when using non-SIMD
표 2를 참조하면서 전술한 바와 같이, 연산 장치(1)에 있어서 비SIMD 방식을 채용하는 경우, 명령 코드 발행부(20)에 의해 발행되는 명령 종별 코드의 상위 2비트(opcode[3:2])에는 00이 설정된다. 이하, 도 3∼도 5를 참조하면서, 비SIMD 방식을 채용한 경우의 연산 장치(1)의 동작에 대해 설명한다. As described above with reference to Table 2, when the non-SIMD method is adopted in the
도 3은 비SIMD 채용 시의 도 1에 도시하는 연산 장치(1)에 있어서의 연산부(10)의 동작을 간단하게 설명하기 위한 도면이다. 도 4는 비SIMD 채용 시의 도 1에 도시하는 연산 장치(1)에 있어서의 명령 코드 발행부(20) 및 생성부(30)의 동작을 설명하기 위한 도면이다. 도 5(a)∼도 5(d)는, 각각, 비SIMD 채용 시의 도 1에 도시하는 연산 장치(1)에 있어서의 명령 코드, 연산 코드, 레지스터 기록 신호 및 레지스터 번호 지정(최상위 비트만)을 구체적으로 도시하는 도면이다. FIG. 3 is a diagram for briefly explaining the operation of the
도 3에 도시하는 바와 같이, 비SIMD 방식을 채용한 경우, 연산 장치(1)의 연산부(10)에서는, 확장 연산기(12e)를 이용하지 않고 통상 연산기(12b)만을 이용하여 레지스터(11)의 모든 영역에서의 레지스터값을 대상으로 하는 곱합 연산이 행해진다. 즉, 명령 종별 코드(opcode[1:0])와 레지스터(11)로부터의 입력값에 따라 통상 연산기(12b)에서 연산하여, 통상 연산기(12b)의 연산 결과를, 제어 신 호(b_we)의 값에 따라 레지스터(11)에 기록한다. As shown in FIG. 3, when the non-SIMD method is adopted, the calculating
이 때, 도 4 및 도 5(c)에 도시하는 바와 같이, 제어 신호(e_we)는 항상 0으로 설정되어 있고, 확장 연산기(12e)의 연산 결과는 레지스터(11)에 기록되지 않는다. 또한, 명령 코드 발행부(20)에 의해 발행되는 4개의 레지스터 번호 지시(rd[6:0], rs1[6:0], rs2[6:0], rs3[6:0])에서는 도 5(a)에 도시하는 바와 같이, 전부 7비트가 사용되어, 레지스터(11)의 모든 영역 중에서 4개의 레지스터값이 지시된다. At this time, as shown in Figs. 4 and 5 (c), the control signal e_we is always set to 0, and the calculation result of the
비SIMD 채용 시에는, 명령 코드 발행부(20)에 의해 발행된 명령 코드(opcode[3:0]) 및 4개의 레지스터 번호 지시(rd[6:0], rs1[6:0], rs2[6:0], rs3[6:0])가, 생성부(30)에 있어서, 도 4에 도시하는 바와 같이 변환되고, 명령 세트(b_we, e_we, b_rd[6:0], b_rs1[6:0], b_rs2[6:0], b_rs3[6:0], e_rd[6:0], e_rs1[6:0], e_rs2[6:0], e_rs3[6:0], b_op[1:0], e_op[1:0])로서 연산부(10)에 입력된다. When employing non-SIMD, the instruction code (opcode [3: 0]) issued by the instruction
여기서, 도 4 및 도 5(b)에 도시하는 바와 같이, 통상 연산기(12b)용 연산 코드(b_op[1:0])로서는, 명령 코드에 포함되는 명령 종별 코드의 하위 2비트의 값(opcode[1:0])이 이용된다. 이 때, 도 4 및 도 5(c)에 도시하는 바와 같이, 통상 연산기(12b)용의 레지스터 기록 제어 신호(b_we)로서 1이 설정되고, 통상 연산기(12b)에 의한 연산 결과가 레지스터(11)에 기록된다. 4 and 5 (b), as the operation code b_op [1: 0] for the
한편, 도 4 및 도 5(b)에 도시하는 바와 같이, 확장 연산기(12e)용 연산 코드(e_op[1:0])로서는, 00을 고정적으로 입력한다. 이 때, 도 4 및 도 5(c)에 도시 하는 바와 같이, 확장 연산기(12b)용의 레지스터 기록 제어 신호(b_we)로서 0이 설정되고, 확장 연산기(12b)에 의한 연산 결과를 레지스터(11)에 기록하지 않는다. On the other hand, as shown in FIG. 4 and FIG. 5 (b), 00 is fixedly input as the operation code e_op [1: 0] for the
또한, 도 4 및 도 5(d)에 도시하는 바와 같이, 명령 코드에 포함되는 4개의 레지스터 번호 지시의 7비트(rd[6:0], rs1[6:0], rs2[6:0], rs3[6:0])가 통상 연산기(12b)용 레지스터 번호 지시(b_rd[6:0], b_rs1[6:0], b_rs2[6:0], b_rs3[6:0])로서 입력된다. 한편, 확장 연산기(12e)용 레지스터 번호 지시(e_rd[6:0], e_rs1[6:0], e_rs2[6:0], e_rs3[6:0])로서는, 도 4 및 도 5(d)에 도시하는 바와 같이, 전부 0이 입력된다. 4 and 5 (d), 7 bits (rd [6: 0], rs1 [6: 0], rs2 [6: 0] of four register number instructions included in the instruction code. , rs3 [6: 0]) is input as a register number instruction (b_rd [6: 0], b_rs1 [6: 0], b_rs2 [6: 0], b_rs3 [6: 0]) for the
다음으로, 비SIMD 채용 시의 구체적인 동작예, 예컨대 fnmsub(%f80, %f10, %f20, %f40)의 연산을 실시하는 경우에 대해 설명한다. Next, a specific operation example when employing a non-SIMD, for example, a case where the calculation of fnmsub (% f80,% f10,% f20,% f40) is performed will be described.
그 연산 내용은, The operation content is
%f[80] ← -%f[10] * %f[20] + %f[40]% F [80] ←-% f [10] *% f [20] +% f [40]
으로서 나타낸다. It is shown as.
이 경우, 하기 표 4에 나타내는 명령 코드로 지정된 명령 종별 코드(opcode[3:0]) 및 레지스터 번호 지시(rd[6:0], rs1[6:0], rs2[6:0], rs3[6:0])의 값이, 하기 표 5에 나타내는 통상 연산기(12b)용의 입력 신호의 값, 즉 연산 코드(b_op[1:0]) 및 레지스터 번호 지시(b_rd[6:0], b_rs1[6:0], b_rs2[6:0], b_rs3[6:0])의 값으로 변환되어 입력된다. 확장 연산기(12e)용의 연산 코드(e_op[1:0]) 및 레지스터 번호 지시(e_rd[6:0], e_rs1[6:0], e_rs2[6:0], e_rs3[6:0])의 값으로서는, 하기 표 5에 나타내는 바와 같이 0이 입력된다. 통상 연산기(12b)용의 레지스터 기록 제어 신호(b_we)로서 1이 입력되고, 통상 연산기(12b)의 연산 결과가 레지스터(11)에 레지스터값(%r[80])으로서 기록된다. 확장 연산기(12e)용의 레지스터 제어 기록 신호(e_we)의 값으로서 0이 입력된다. In this case, the instruction type code (opcode [3: 0]) and the register number instruction (rd [6: 0], rs1 [6: 0], rs2 [6: 0], and rs3 specified by the instruction code shown in Table 4 below. [6: 0]) is the value of the input signal for the
[표 4][Table 4]
[표 5]TABLE 5
[4] SIMD 채용 시의 연산 장치의 동작[4] operation of arithmetic unit when using SIMD
표 3을 참조하면서 전술한 바와 같이, 연산 장치(1)에 있어서 SIMD 방식을 채용하는 경우, 명령 코드 발행부(20)에 의해 발행되는 명령 종별 코드의 상위 2비트(opcode[3:2])에는 01이 설정된다. 이하, 도 6∼도 8을 참조하면서, SIMD 방식을 채용한 경우의 연산 장치(1)의 동작에 대해 설명한다. As described above with reference to Table 3, when the SIMD method is adopted in the
도 6은 SIMD 채용 시의 도 1에 도시하는 연산 장치(1)에 있어서의 연산부(10)의 동작을 간단하게 설명하기 위한 도면이다. 도 7은 SIMD 채용 시의 도 1에 도시하는 연산 장치(1)에 있어서의 명령 코드 발행부(20) 및 생성부(30)의 동작을 설명하기 위한 도면이다. 도 8(a)∼(d)는, 각각, SIMD 채용 시의 도 1에 도시하는 연산 장치(1)에 있어서의 명령 코드, 연산 코드, 레지스터 기록 신호 및 레지스터 번호 지정(최상위 비트만)을 구체적으로 도시하는 도면이다. FIG. 6 is a diagram for briefly explaining the operation of the
도 6에 도시하는 바와 같이, SIMD를 채용한 경우, 연산 장치(1)의 연산부(10)에서는, 통상 연산기(12b)에, 레지스터(11)의 전반 영역의 지정 레지스터 번호에 있어서의 레지스터값이 연산 대상 데이터로서 입력된다. 또한, 확장 연산기(12e)에, 레지스터(11)의 후반 영역의 지정 레지스터 번호에 있어서의 레지스터값이 연산 대상 데이터로서 입력된다. 여기서, 확장 연산기(12e)용의 지정 레지스터 번호는, 통상 연산기(12b)용의 지정 레지스터 번호에 소정 오프셋 N(본 실시형태에서는 64)을 가산한 번호이다. 즉, 통상 연산기(12b)와 확장 연산기(12e)에 있어서, 명령 종별 코드(opcode[1:0])에 따른 동일 종별의 연산이, 상이한 입력값(레지스터값)에 대해 실행된다. 그리고, 통상 연산기(12b)에 의한 연산 결과 및 확장 연산기(12e)에 의한 연산 결과가, 각각 레지스터(11)의 전반 영역 및 후반 영역에 기록된다. As shown in FIG. 6, in the case where the SIMD is employed, in the
이 때, 명령 코드 발행부(20)에 의해 발행되는 4개의 레지스터 번호 지시(rd[6:0], rs1[6:0], rs2[6:0], rs3[6:0])에서는, 도 8(a)에 도시하는 바와 같이, 전체 7비트 중의 하위 6비트(rd[5:0], rs1[5:0], rs2[5:0], rs3[5:0])가 사용 된다. 이러한 일조의 명령 코드에 의해, 통상 연산기(12b)용의 레지스터 번호와 확장 연산기(12e)용의 레지스터 번호가 동시에 지시된다. 따라서, SIMD 방식을 채용한 경우, 도 8(a)에 도시하는 바와 같이, 최상위 비트(rd[6], rs1[6], rs2[6], rs3[6])는 사용되지 않는다. At this time, in the four register number instructions (rd [6: 0], rs1 [6: 0], rs2 [6: 0], rs3 [6: 0]) issued by the instruction
SIMD 채용 시에는, 명령 코드 발행부(20)에 의해 발행된 명령 코드(opcode[3:0]) 및 4개의 레지스터 번호 지시(rd[6:0], rs1[6:0], rs2[6:0], rs3[6:0])가, 생성부(30)에 있어서, 도 7에 도시하는 바와 같이 변환되어, 명령 세트(b_we, e_we, b_rd[6:0], b_rs1[6:0], b_rs2[6:0], b_rs3[6:0], e_rd[6:0], e_rs1[6:0], e_rs2[6:0], e_rs3[6:0], b_op[1:0], e_op[1:0])로서 연산부(10)에 입력된다. When employing the SIMD, the instruction code (opcode [3: 0]) issued by the instruction
여기서, 도 7 및 도 8(b)에 도시하는 바와 같이, 통상 연산기(12b)용 연산 코드(b_op[1:0]) 및 확장 연산기(12e)용 연산 코드(e_op[1:0])로서는, 명령 코드에 포함되는 명령 종별 코드의 하위 2비트의 값(opcode[1:0])이 이용된다. 통상 연산기(12b)와 확장 연산기(12e)에는 반드시 동일한 연산 코드가 입력되고, 이들 연산기(12b, 12e)는, 동일 종별의 연산을 실행한다. As shown in Figs. 7 and 8 (b), the operation codes b_op [1: 0] for the
이 때, 도 7 및 도 8(c)에 도시하는 바와 같이, 통상 연산기(12b)용의 레지스터 기록 제어 신호(b_we) 및 확장 연산기(12e)용의 레지스터 기록 제어 신호(e_we)로서는, 고정값 1이 설정된다. 이에 따라, 통상 연산기(12b) 및 확장 연산기(12e)에 의한 연산 결과는, 항상 레지스터(11)의 전반 영역 및 후반 영역에 각각 기록된다. At this time, as shown in FIG. 7 and FIG. 8C, as the register write control signal b_we for the
또한, 도 7에 도시하는 바와 같이, 명령 코드에 포함되는 4개의 레지스터 번호 지시의 하위 6비트(rd[5:0], rs1[5:0], rs2[5:0], rs3[5:0])가 통상 연산기(12b)용 레지스터 번호 지시(b_rd[5:0], b_rs1[5:0], b_rs2[5:0], b_rs3[5:0])로서 입력된다. 동시에, 동일한 rd[5:0], rs1[5:0], rs2[5:0], rs3[5:0]이 확장 연산기(12e)용 레지스터 번호 지시(e_rd[5:0], e_rs1[5:0], e_rs2[5:0], e_rs3[5:0])로서도 입력된다. In addition, as shown in Fig. 7, the lower six bits (rd [5: 0], rs1 [5: 0], rs2 [5: 0], rs3 [5 :) of the four register number instructions included in the instruction code. 0]) is input as the register number instructions b_rd [5: 0], b_rs1 [5: 0], b_rs2 [5: 0], and b_rs3 [5: 0] for the
그리고, 도 7 및 도 8(d)에 도시하는 바와 같이, 통상 연산기(12b)용 레지스터 번호 지시의 최상위 비트(b_rd[6], b_rs1[6], b_rs2[6], b_rs3[6])에는 고정값 0이 설정되고, 확장 연산기(12e)용 레지스터 번호 지시의 최상위 비트(e_rd[6], e_rs1[6], e_rs2[6], e_rs3[6])에는 고정값 1이 설정된다. 이에 의해, 통상 연산기(12b)에서는 레지스터(11)의 전반 영역(레지스터 번호 0∼63)의 레지스터값이 사용된다. 또한, 확장 연산기(12e)에서는, 통상 연산기(12b)용 레지스터 번호에 64를 가산한 레지스터 번호의 레지스터값, 즉 레지스터(11)의 후반 영역(레지스터 번호 64∼127)의 레지스터값이 사용된다. As shown in Figs. 7 and 8 (d), the most significant bits b_rd [6], b_rs1 [6], b_rs2 [6], and b_rs3 [6] in the register number instruction for the
다음으로, SIMD 채용 시의 구체적인 동작예, 예컨대 simd-fnmsub %f40, %f10, %f20, %f30의 연산을 실시하는 경우에 대해 설명한다. Next, the specific operation example at the time of employ | adopting SIMD, for example, the case where calculation of simd-fnmsub% f40,% f10,% f20,% f30 is performed is demonstrated.
이 경우, 연산부(10)의 연산기(12b, 12e)에 의해, 이하와 같은 내용의 2개의 연산이 각각 실행된다. In this case, the
통상 연산기(12b)의 연산 내용: %r[40] ← -%r[10] * %r[20] + %r[30]Calculation content of the
확장 연산기(12e)의 연산 내용: %r[104] ← -%r[74] * %r[84] + %r[94]Calculation contents of the
이 경우, 하기 표 6에 나타내는 명령 코드로 지정된 명령 종별 코드(opcode[3:0]) 및 레지스터 번호 지시(rd[6:0], rs1[6:0], rs2[6:0], rs3[6:0])의 값이, 하기 표 7에 나타내는 연산기(12b, 12e)용의 입력 신호의 값으로 변환되어 입력된다. 즉, 통상 연산기(12b)용 레지스터 번호 지시 및 확장 연산기(12e)의 레지스터 번호 지시로서는, 하위 6비트에 동일한 값(rd[5:0], rs1[5:0], rs2[5:0], rs3[5:0])이 입력되고, 최상위 비트에는 각각 고정값 0, 1이 입력된다. 또한, 통상 연산기(12b)용의 연산 코드(b_op[1:0]) 및 확장 연산기(12e)용의 연산 코드(e_op[1:0])로서는, 동일한 연산 코드 10이 입력된다. 이에 의해, 통상 연산기(12b) 및 확장 연산기(12e)에는, 각각 레지스터(11)로부터의 4개의 입력값과, 동일한 연산 코드가 입력되기 때문에, 통상 연산기(12b) 및 확장 연산기(12e)에서는, 동일 종별의 연산이, 각각 상이한 입력값에 대해 실행된다. 그리고, 레지스터 기록 제어 신호(b_we, e_we)로서 모두 1이 설정되어 있기 때문에, 통상 연산기(12b)에 의한 연산 결과는, 레지스터(11)의 전반 영역에 레지스터값 %r[40]로서 기록된다. 마찬가지로, 확장 연산기(12e)에 의한 연산 결과는, 레지스터(11)의 후반 영역에 레지스터값 %r[104]로서 기록된다. In this case, the instruction type code (opcode [3: 0]) and the register number instruction (rd [6: 0], rs1 [6: 0], rs2 [6: 0], and rs3 specified by the instruction code shown in Table 6 below. [6: 0]) is converted into the values of the input signals for the
[표 6]TABLE 6
[표 7]TABLE 7
[5] 제1 미사용 비트 이용 형태 채용 시의 연산 장치의 동작[5] Operation of arithmetic unit when employing first unused bit usage form
도 9는 제1 미사용 비트 이용 형태 채용 시의 도 1에 도시하는 연산 장치(1)에 있어서의 연산부(10)의 동작을 간단하게 설명하기 위한 도면이다. 도 10은 제1 미사용 비트 이용 형태 채용 시의 도 1에 도시하는 연산 장치(1)에 있어서의 명령 코드 발행부(설정부)(20) 및 생성부(30)의 동작을 설명하기 위한 도면이다. 도 11(a)∼ 도 11(d)는, 각각, 제1 미사용 비트 이용 형태 채용 시의 도 1에 도시하는 연산 장치(1)에 있어서의 명령 코드, 연산 코드, 레지스터 기록 신호 및 레지스터 번호 지정(최상위 비트만)을 구체적으로 도시하는 도면이다. 도 12∼도 15는 제1 미사용 비트 이용 형태 채용 시의 도 1에 도시하는 연산 장치(1)에 있어서의 연산부(10)에 의한 연산 조합의 구체예를 도시하는 도면이다. FIG. 9 is a diagram for briefly explaining the operation of the
SIMD 방식을 채용한 경우, 레지스터(11)의 전반 영역의 값을 입력값으로 하는 통상 연산기(12b)와 레지스터(11)의 후반 영역의 값을 입력값으로 하는 확장 연 산기(12e)가, 동일 종별의 연산을 동시에 실행한다. 그리고, 연산기(12b, 12e)에 의한 연산 결과가, 각각, 레지스터(11)의 전반 영역 및 후반 영역에 기록된다. 그 때문에, 전술한 SIMD 방식에서는, 하나의 연산기(12b 또는 12e)에 있어서, 레지스터(11)의 전반 영역의 값과 후반 영역의 값을 입력값으로 하여 혼재시킨 연산을 행하는 것은 불가능하다. When the SIMD method is adopted, the
본 항목에서 설명하는 실시형태에서는, 전술한 4개의 명령 세트(simd-fmadd, simd-fmsub, simd-fnmsub, simd-fnmadd)에, 4개의 명령 세트(cross-fmadd1, cross-fmadd2, cross-fmadd3, cross-fmadd4)[도 11(a) 참조]가 더 추가되어 있다. 이들 명령 세트(cross-fmadd1, …, cross-fmadd4)는, 도 9의 좌측예에 도시하는 바와 같이, 통상 연산기(12b)에의 3입력값을 레지스터(11)의 후반 영역의 값으로 하고, 확장 연산기(12e)에의 3입력값을 레지스터(11)의 전반 영역의 값으로 하도록 전환하는 명령이다. In the embodiments described in this section, the four instruction sets (simd-fmadd, simd-fmsub, simd-fnmsub, simd-fnmadd) described above have four instruction sets (cross-fmadd1, cross-fmadd2, and cross-fmadd3). cross-fmadd4) (see Fig. 11 (a)) is further added. These instruction sets (cross-fmadd1, ..., cross-fmadd4) are expanded by setting three input values to the
즉, 이들 명령을 이용함으로써 레지스터(11)의 전반 영역의 값 및 레지스터(11)의 후반 영역의 값이 크로스되어, 각각 통상 연산기(12b) 및 확장 연산기(12e)에 입력된다. 이 때, 통상 연산기(12b)와 확장 연산기(12e)에서는 상이한 종별의 연산을 실행하는 것이 가능하게 되어 있다. 이들 명령 세트(cross-fmadd1, …, cross-fmadd4)에 있어서도, SIMD 방식의 명령 코드와 동일하게, 각 레지스터 번호 지시(rd[6:0], rs1[6:0], rs2[6:0], rs3[6:0])의 전체 7비트 중, 하위 6비트(rd[5:0], rs1[5:0], rs2[5:0], rs3[5:0])가 사용되고, 최상위 비트(rd[6], rs1[6], rs2[6], rs3[6])는 사용되지 않는다. That is, by using these instructions, the value of the first half region of the
이하에 설명하는 실시형태(제1 미사용 비트 이용 형태)에서는, 명령 세트(cross-fmadd1, …, cross-fmadd4)에 있어서의 미사용 비트(rd[6], rs1[6], rs2[6], rs3[6]) 중 2개, 구체적으로는 rs1[6], rs2[6]이 이용된다. 이들 2개의 미사용 비트(rs1[6], rs2[6])에, 명령 코드 발행부(20)에 있어서의 설정부로서의 기능에 의해, 확장 지시 정보가 설정된다. 이 확장 지시 정보는, rs1[6], rs2[6]을 사용하지 않는 명령 세트(cross-fmadd1, …, cross-fmadd4)에 의한 통상 처리와는 상이한 확장 처리(예컨대 도 12∼도 15의 연산 조합 참조)의 실행 지시를 레지스터(11) 및 연산기(12b, 12e)에 대해 행하는 것이다. 그리고, 생성부(30)는, 도 10 및 도 11을 참조하면서 후술하는 바와 같이, 미사용 비트에 설정된 확장 지시 정보와 미사용 비트 이외의 비트에 설정된 정보에 기초하여, 레지스터(11) 및 연산기(12b, 12e)에 대해 상기 확장 처리의 실행 지시를 행하는 확장 명령을 생성하여 출력한다. In the embodiment (first unused bit usage form) described below, the unused bits rd [6], rs1 [6], rs2 [6], in the instruction set cross-fmadd1, ..., cross-fmadd4. Two of rs3 [6]), specifically rs1 [6] and rs2 [6], are used. The extended instruction information is set to these two unused bits rs1 [6] and rs2 [6] by the function as the setting unit in the instruction
이에 따라, 도 9의 우측예에 도시하는 바와 같이, 하나의 연산기(12b 또는 12e)에 있어서, 레지스터(11)의 전반 영역의 값과 후반 영역의 값을 입력값으로 하여 혼재시킨 연산을 실현할 수 있다. 특히, 미사용 비트(rs1[6], rs2[6])를 이용하여 확장 처리의 실행 지시를 행함으로써 각 연산기(12b, 12e)에 있어서의 곱연산 대상이 되는 2개의 입력값을, 각각 레지스터(11)의 전반 영역 및 후반 영역으로부터 입력시키는 것이 가능하게 된다. 따라서, 상기 식(1-1)∼(1-4)에 따른 4회의 연산(즉 4개의 명령)에 의해 실행되는 복소수 행렬곱 연산을, 후술하는 바와 같이, 2 명령으로 실행하는 것이 가능하게 된다. As a result, as shown in the right example of FIG. 9, in one
이 제1 미사용 비트 이용 형태를 채용하는 경우[즉 명령 세트(cross-fmadd1, …, cross-fmadd4)에 의한 처리를 채용하는 경우], 명령 코드 발행부(20)에 의해 발행되는 명령 종별 코드의 상위 2비트(opcode[3:2])에는 11이 설정된다. 이하, 도 10∼도 15를 참조하면서, 이 제1 미사용 비트 이용 형태를 채용한 경우의 연산 장치(1)의 동작에 대해 설명한다. When adopting this first unused bit usage form (i.e., employing processing by the instruction set (cross-fmadd1, ..., cross-fmadd4)), the instruction type code issued by the instruction
제1 미사용 비트 이용 형태 채용 시에는, 명령 코드 발행부(20)에 의해 발행된 명령 코드(opcode[3:0]) 및 4개의 레지스터 번호 지시(rd[6:0], rs1[6:0], rs2[6:0], rs3[6:0])가, 생성부(30)에 있어서, 도 10에 도시하는 바와 같이 변환되어, 명령 세트(b_we, e_we, b_rd[6:0], b_rs1[6:0], b_rs2[6:0], b_rs3[6:0], e_rd[6:0], e_rs1[6:0], e_rs2[6:0], e_rs3[6:0], b_op[1:0], e_op[1:0])로서 연산부(10)에 입력된다. When employing the first unused bit usage form, the instruction code (opcode [3: 0]) issued by the instruction
여기서, cross-fmadd1, …, cross-fmadd4에 있어서는, 도 10, 도 11(b) 및 하기 표 8에 나타내는 바와 같이, 명령 코드에 포함되는 명령 종별 코드의 하위 2비트의 값(opcode[1:0])에 기초하여, 통상 연산기(12b)용 연산 코드(b_op[1:0]) 및 확장 연산기(12e)용 연산 코드(e_op[1:0])가 각각 생성된다. 전술한 SIMD 방식의 경우와 상이하고, 통상 연산기(12b) 및 확장 연산기(12e)에 있어서 실행되는 연산의 종별은, 독립적으로 제어되어 전환된다. 이에 따라, 통상 연산기(12b) 및 확장 연산기(12e)는, 동일 종별의 연산을 실행하는 것도, 상이한 종별의 연산을 실행하는 것도 가능하게 되어 있다. Where cross-fmadd1,... In cross-fmadd4, as shown in FIG. 10, FIG. 11 (b) and Table 8 below, based on the lower two bits of the instruction type code included in the instruction code (opcode [1: 0]), The operation code b_op [1: 0] for the
[표 8][Table 8]
이 때, 도 10 및 도 11(c)에 도시하는 바와 같이, 통상 연산기(12b)용의 레지스터 기록 제어 신호(b_we) 및 확장 연산기(12e)용의 레지스터 기록 제어 신호(e_we)로서는, 고정값 1이 설정된다. 이에 따라, 통상 연산기(12b) 및 확장 연산기(12e)에 의한 연산 결과는, 항상 레지스터(11)의 전반 영역 및 후반 영역에 각각 기록된다. At this time, as shown in Figs. 10 and 11 (c), as the register write control signal b_we for the
또한, 도 10에 도시하는 바와 같이, 명령 코드에 포함되는 4개의 레지스터 번호 지시의 하위 6비트(rd[5:0], rs1[5:0], rs2[5:0], rs3[5:0])가 통상 연산기(12b)용 레지스터 번호 지시(b_rd[5:0], b_rs1[5:0], b_rs2[5:0], b_rs3[5:0])로서 입력된다. 동시에, 동일한 rd[5:0], rs1[5:0], rs2[5:0], rs3[5:0]이 확장 연산기(12e)용 레지스터 번호 지시(e_rd[5:0], e_rs1[5:0], e_rs2[5:0], e_rs3[5:0])로서도 입력된다. As shown in Fig. 10, the lower six bits (rd [5: 0], rs1 [5: 0], rs2 [5: 0], rs3 [5 :) of the four register number instructions included in the instruction code. 0]) is input as the register number instructions b_rd [5: 0], b_rs1 [5: 0], b_rs2 [5: 0], and b_rs3 [5: 0] for the
그리고, 도 10, 도 11(d) 및 하기 표 9에 나타내는 바와 같이, 통상 연산기(12b)용 레지스터 번호 지시의 최상위 비트(b_rd[6], b_rs3[6])에는 고정값 0이 설정되고, 확장 연산기(12e)용 레지스터 번호 지시의 최상위 비트(e_rd[6], e_rs3[6])에는 고정값 1이 설정된다. 한편, 통상 연산기(12b)용 레지스터 번호 지시의 최상위 비트(b_rs1[6], b_rs2[6]) 및 확장 연산기(12e)용 레지스터 번호 지시 의 최상위 비트(e_rs1[6], e_rs2[6])에는, 명령 종별 코드(opcode[1:0])와 레지스터 번호 지시의 최상위 비트(rs1[6], rs2[6])의 값(확장 지시 정보)에 기초하여 산출·생성된 값이 설정된다. 그 값은, 도 10, 도 11(d) 및 하기 표 9에 나타내는 바와 같이, 명령 종별 코드에 따라, 레지스터 번호 지시의 최상위 비트(rs1[6], rs2[6])의 값에 기초하여 산출된다. 이에 의해, 각 연산기(12b, 12e)에 있어서의 곱연산 대상이 되는 2개의 입력값을, 각각 레지스터(11)의 전반 영역 및 후반 영역으로부터 입력시키는 것이 가능하게 된다. 즉, 미사용 비트(rs1[6], rs2[6])에 설정한 확장 지시 정보에 의해, 레지스터(11)로부터 각 연산기(12b, 12e)에의 값을, 각 연산기(12b, 12e)에 대응하는 레지스터(11)의 영역 이외의 영역에서의 값으로 전환하는 지시가, 레지스터(11)에 대해 행해진다. 또, "~X"는 X의 반전값을 나타낸다. 10, 11 (d) and Table 9 below, the fixed
[표 9]TABLE 9
다음으로, 제1 미사용 비트 이용 형태 채용 시의 구체적인 동작예, 예컨대 cross-fmadd1 %f30, %f10, %f20, %f30의 연산을 실시하는 경우에 대해 설명한다. Next, a specific operation example when employing the first unused bit usage mode, for example, a case where the calculation of cross-fmadd1% f30,% f10,% f20, and% f30 is performed will be described.
이 경우, 연산부(10)의 연산기(12b, 12e)에 의해, 이하와 같은 내용의 2개의 연산이 각각 실행된다. In this case, the
통상 연산기(12b)의 연산 내용: %r[30] ← %r[10] * %r[20] + %r[30]Calculation content of the
확장 연산기(12e)의 연산 내용: %r[94] ← %r[10] * %r[84] + %r[94]Calculation contents of the
이들 2개의 연산은, 레지스터(11)의 전반 영역에 실수 파트의 값을, 레지스터(11)의 후반 영역에 허수 파트의 값을 유지한 경우의, 이하의 복소수 연산에 대응하고 있다. These two operations correspond to the following complex operations when the value of the real part in the first half region of the
X ← X + A * C (1-1)X ← X + A * C (1-1)
Y ← Y + A * D (1-2)Y ← Y + A * D (1-2)
이 경우, 하기 표 10에 나타내는 명령 코드로 지정된 명령 종별 코드(opcode[3:0]) 및 레지스터 번호 지시(rd[6:0], rs1[6:0], rs2[6:0], rs3[6:0])의 값이, 하기 표 11에 나타내는 연산기(12b, 12e)용의 입력 신호의 값으로 변환되어 입력된다. 즉, 하기 표 10에 나타내는 바와 같이, 명령 코드 발행부(20)에 의해 명령 종별 코드(opcode[3:0])로서 1100이 설정되고, 명령 코드 발행부(20)의 설정부로서의 기능에 의해, 미사용 비트(rs1[6], rs2[6])에 0, 0이 설정된다(후술하는 도 12의 좌측 위 예 참조). 이들 값에 따라, 생성부(30)에 의해, 도 11(d)나 표 9에 나타내는 식에 기초하여, 통상 연산기(12b)용의 레지스터 번호 지시의 최상위 비트(b_rd[6], b_rs1[6], b_rs2[6], b_rs3[6])로서 0, 0, 0, 0이 산출·설정된다(하기 표 11 참조). 또한, 마찬가지로 하여, 확장 연산기(12e)용의 레지스터 번호 지시의 최상위 비트(e_rd[6], e_rs1[6], e_rs2[6], e_rs3[6])로서 1, 0, 1, 1이 산출·설정된다(하기 표 11 참조). 또한, 통상 연산기(12b) 및 확장 연산기(12e) 에는, 도 11(b)나 위의 표 8에 나타내는 바와 같이 명령 종별 코드(opcode[1:0])에 의해 결정되는 연산 코드 00, 00이 각각 입력된다. 따라서, 이 구체예에서는, 통상 연산기(12b)와 확장 연산기(12e)는 동일 종별의 연산(fmadd)을 행하게 된다. 또, 통상 연산기(12b)용 레지스터 번호 지시 및 확장 연산기(12e)의 레지스터 번호 지시의 하위 6비트에는, 동일한 값(rd[5:0], rs1[5:0], rs2[5:0], rs3[5:0])이 입력된다. In this case, the instruction type code (opcode [3: 0]) and the register number instruction (rd [6: 0], rs1 [6: 0], rs2 [6: 0], and rs3 specified by the instruction code shown in Table 10 below [6: 0]) is converted into the values of the input signals for the
이에 따라, 도 12의 좌측 위 예와 같이, 통상 연산기(12b)는, 레지스터 번호 지시의 최상위 비트 b_rs1[6], b_rs2[6], b_rs3[6]= 0, 0, 0에 의해 선택된 레지스터 전반 영역으로부터의 3개의 값 A(%r[rs1]= %r[10]), C(%r[rs2]= %r[20]), X(%r[rs3]= %r[30])을 입력값으로 하여 상기 식(1-1)에 기초하는 연산을 행한다. 또한, 도 12의 좌측 위 예와 같이, 확장 연산기(12e)는, 레지스터 번호 지시의 최상위 비트 e_rs1[6], e_rs2[6], e_rs3[6]= 0, 1, 1에 의해 선택된 레지스터 전반 영역으로부터의 하나의 값 A(%r[rs1]= %r[10])과 레지스터 후반 영역으로부터의 2개의 값 D(%r[N+ rs2]= %r[84]), Y(%r[N+ rs3]= %r[94])를 입력값으로 하여 상기 식(1-2)에 기초하는 연산을 행한다. 따라서, 통상 연산기(12b) 및 확장 연산기(12e)로부터 상이한 입력값을 사용한 동일 종별의 연산에 의한 연산 결과가 출력된다. 또, 통상 연산기(12b)용의 레지스터 기록 제어 신호(b_we) 및 확장 연산기(12e)용의 레지스터 기록 신호에는 고정값 1이 설정되어 있다. 이 때문에, 통상 연산기(12b)에 의한 연산 결과는, 레지스터(11)의 전반 영역에 레지스터값(%r[rd]= %r[30])으로서 기록된다. 마찬가지로, 확장 연산기(12e)에 의한 연산 결 과는, 레지스터(11)의 후반 영역에 레지스터값(%r[N+ rd]= %r[94])으로서 기록된다. 즉, 상기 식(1-1), (1-2)에 의한 2종류의 연산을 하나의 명령에 의해 실행할 수 있다. 마찬가지로 하여, 상기 식(1-3), (1-4)에 대해서도 하나의 명령에 의해 실행하는 것이 가능하다. 따라서, 종래, 4개의 명령에 의해 실행되어 있던 복소수 연산을, 2개의 명령에 의해 실행할 수 있다. Accordingly, as in the upper left example of FIG. 12, the
[표 10]TABLE 10
[표 11]TABLE 11
전술한 구체적인 동작예로서는, 명령 종별 코드(opcode[3:0])에 1100이 설정되고 또한 미사용 비트(rs1[6], rs2[6])에 0, 0이 설정된 경우에 대해 설명했다. 그러나, 제1 미사용 비트 이용 형태 채용 시에는, 그 외에 15종류의 연산 조합을 실현할 수도 있다. 연산부(10)에 의한 16종류의 연산 조합에 대해, 도 12∼도 15를 참조하면서 설명한다. As a specific operation example described above, the case where 1100 is set in the instruction type code opcode [3: 0] and 0 and 0 are set in the unused bits rs1 [6] and rs2 [6] has been described. However, when employing the first unused bit use form, 15 kinds of arithmetic combinations can be realized. 16 kinds of combinations of operations by the
도 12는, 명령 종별 코드 opcode[3:0]= 1100인 경우의, 4종류의 연산 조합을 나타내고 있다. 이 때, 연산기(12b, 12e)는 동일 종별의 연산(fmadd)을 실행한다. Fig. 12 shows four types of combinations of operations when the instruction type code opcode [3: 0] = 1100. At this time, the
이 때, 미사용 비트(최상위 비트)(rs1[6], rs2[6])가 0, 0이면, 레지스터 번호 지시의 최상위 비트 b_rs1[6], b_rs2[6], b_rs3[6]= 0, 0, 0, 또한, 레지스터 번호 지시의 최상위 비트 e_rs1[6], e_rs2[6], e_rs3[6]= 0, 1, 1이 된다. 따라서, 도 12의 좌측 위 예와 같이, 통상 연산기(12b)는, 레지스터 전반 영역으로부터의 3개의 값(%r[rs1], %r[rs2], %r[rs3])을 입력값으로 하여 연산(fmadd)을 행한다. 또한, 확장 연산기(12e)는, 레지스터 전반 영역으로부터의 하나의 값(%r[rs1])과 레지스터 후반 영역으로부터의 2개의 값(%r[N+ rs2], %r[N+ rs3])을 입력값으로 하여 연산(fmadd)을 행한다. At this time, if the unused bit (most significant bit) (rs1 [6], rs2 [6]) is 0 or 0, the most significant bit b_rs1 [6], b_rs2 [6], b_rs3 [6] = 0, 0 in the register number indication. , 0, and most significant bits e_rs1 [6], e_rs2 [6], and e_rs3 [6] = 0, 1, 1 of the register number instruction. Therefore, as in the upper left example of FIG. 12, the
미사용 비트(최상위 비트)(rs1[6], rs2[6])가 0, 1이면, 레지스터 번호 지시의 최상위 비트 b_rs1[6], b_rs2[6], b_rs3[6]= 0, 1, 0, 또한, 레지스터 번호 지시의 최상위 비트 e_rs1[6], e_rs2[6], e_rs3[6]= 0, 0, 1이 된다. 따라서, 도 12의 좌측 아래 예와 같이, 통상 연산기(12b)는, 레지스터 전반 영역으로부터의 2개의 값(%r[rs1], %r[rs3])과 레지스터 후반 영역으로부터의 하나의 값(%r[N+ rs2])을 입력값으로 하여 연산(fmadd)을 행한다. 또한, 확장 연산기(12e)는, 레지스터 전반 영역으로부터의 2개의 값(%r[rs1], %r[rs2])과 레지스터 후반 영역으로부터의 하나의 값(%r[N+ rs3])을 입력값으로 하여 연산(fmadd)을 행한다. If the unused bit (highest bit) (rs1 [6], rs2 [6]) is 0, 1, the most significant bits b_rs1 [6], b_rs2 [6], b_rs3 [6] = 0, 1, 0, Further, the most significant bits e_rs1 [6], e_rs2 [6], and e_rs3 [6] = 0, 0, 1 of the register number instruction. Therefore, as in the lower left example of FIG. 12, the
미사용 비트(최상위 비트)(rs1[6], rs2[6])가 1, 0이면, 레지스터 번호 지시의 최상위 비트 b_rs1[6], b_rs2[6], b_rs3[6]= 1, 0, 0, 또한, 레지스터 번호 지시의 최상위 비트 e_rs1[6], e_rs2[6], e_rs3[6]= 1, 1, 1이 된다. 따라서, 도 12의 우측 위 예와 같이, 통상 연산기(12b)는, 레지스터 전반 영역으로부터의 2개의 값(%r[rs2], %r[rs3])과 레지스터 후반 영역으로부터의 하나의 값(%r[N+ rs1])을 입력값으로 하여 연산(fmadd)을 행한다. 또한, 확장 연산기(12e)는, 레지스터 후반 영역으로부터의 3개의 값(%r[N+ rs1], %r[N+ rs2], %r[N+ rs3])을 입력값으로 하여 연산(fmadd)을 행한다. If the unused bit (highest bit) (rs1 [6], rs2 [6]) is 1, 0, the most significant bits b_rs1 [6], b_rs2 [6], b_rs3 [6] = 1, 0, 0, Further, the most significant bits e_rs1 [6], e_rs2 [6], and e_rs3 [6] = 1, 1, 1 of the register number instruction. Thus, as in the upper right example of FIG. 12, the
미사용 비트(최상위 비트)(rs1[6], rs2[6])가 1, 1이면, 레지스터 번호 지시의 최상위 비트 b_rs1[6], b_rs2[6], b_rs3[6]= 1, 1, 0, 또한, 레지스터 번호 지시의 최상위 비트 e_rs1[6], e_rs2[6], e_rs3[6]= 1, 0, 1이 된다. 따라서, 도 12의 우측 아래 예와 같이, 통상 연산기(12b)는, 레지스터 전반 영역으로부터의 하나의 값(%r[rs3])과 레지스터 후반 영역으로부터의 2개의 값(%r[N+ rs1], %r[N+ rs2])을 입력값으로 하여 연산(fmadd)을 행한다. 또한, 확장 연산기(12e)는, 레지스터 전반 영역으로부터의 하나의 값(%r[rs2])과 레지스터 후반 영역으로부터의 2개의 값(%r[N+ rs1], %r[N+ rs3])을 입력값으로 하여 연산(fmadd)을 행한다. If the unused bit (most significant bit) (rs1 [6], rs2 [6]) is 1, 1, the most significant bits b_rs1 [6], b_rs2 [6], b_rs3 [6] = 1, 1, 0, Further, the most significant bits e_rs1 [6], e_rs2 [6], and e_rs3 [6] = 1, 0, 1 of the register number indication. Accordingly, as in the lower right example of FIG. 12, the
도 13은, 명령 종별 코드 opcode[3:0]= 1101인 경우의, 4종류의 연산 조합을 나타내고 있다. 이 때, 통상 연산기(12b)는 연산(fnmsub)을 실행하고, 확장 연산기(12e)는 연산(fmadd)을 실행한다. Fig. 13 shows four types of combinations of operations when the instruction type code opcode [3: 0] = 1101. At this time, the
이 때, 미사용 비트(최상위 비트)(rs1[6], rs2[6])가 0, 0이면, 레지스터 번 호 지시의 최상위 비트 b_rs1[6], b_rs2[6], b_rs3[6]= 1, 1, 0, 또한, 레지스터 번호 지시의 최상위 비트 e_rs1[6], e_rs2[6], e_rs3[6]= 1, 0, 1이 된다. 따라서, 도 13의 좌측 위 예와 같이, 통상 연산기(12b)는, 레지스터 전반 영역으로부터의 하나의 값(%r[rs3])과 레지스터 후반 영역으로부터의 2개의 값(%r[N+ rs1], %r[N+ rs2])을 입력값으로 하여 연산(fnmsub)을 행한다. 또한, 확장 연산기(12e)는, 레지스터 전반 영역으로부터의 하나의 값(%r[rs2])과 레지스터 후반 영역으로부터의 2개의 값(%r[N+ rs1], %r[N+ rs3])을 입력값으로 하여 연산(fmadd)을 행한다. At this time, if the unused bit (highest bit) (rs1 [6], rs2 [6]) is 0 or 0, the most significant bits b_rs1 [6], b_rs2 [6], b_rs3 [6] = 1, 1, 0, and most significant bits e_rs1 [6], e_rs2 [6], and e_rs3 [6] = 1, 0, 1 of the register number instruction. Therefore, as in the upper left example of FIG. 13, the
미사용 비트(최상위 비트)(rs1[6], rs2[6])가 0, 1이면, 레지스터 번호 지시의 최상위 비트 b_rs1[6], b_rs2[6], b_rs3[6]= 1, 0, 0, 또한, 레지스터 번호 지시의 최상위 비트 e_rs1[6], e_rs2[6], e_rs3[6]= 1, 1, 1이 된다. 따라서, 도 13의 좌측 아래 예와 같이, 통상 연산기(12b)는, 레지스터 전반 영역으로부터의 2개의 값(%r[rs2], %r[rs3])과 레지스터 후반 영역으로부터의 하나의 값(%r[N+ rs1])을 입력값으로 하여 연산(fnmsub)을 행한다. 또한, 확장 연산기(12e)는, 레지스터 후반 영역으로부터의 3개의 값(%r[N+ rs1], %r[N+ rs2], %r[N+ rs3])을 입력값으로 하여 연산(fmadd)을 행한다. If the unused bit (highest bit) (rs1 [6], rs2 [6]) is 0, 1, the most significant bits b_rs1 [6], b_rs2 [6], b_rs3 [6] = 1, 0, 0, Further, the most significant bits e_rs1 [6], e_rs2 [6], and e_rs3 [6] = 1, 1, 1 of the register number instruction. Therefore, as in the lower left example of FIG. 13, the
미사용 비트(최상위 비트)(rs1[6], rs2[6])가 1, 0이면, 레지스터 번호 지시의 최상위 비트 b_rs1[6], b_rs2[6], b_rs3[6]= 0, 1, 0, 또한, 레지스터 번호 지시의 최상위 비트 e_rs1[6], e_rs2[6], e_rs3[6]= 0, 0, 1이 된다. 따라서, 도 13의 우측 위 예와 같이, 통상 연산기(12b)는, 레지스터 전반 영역으로부터의 2개의 값(%r[rs1], %r[rs3])과 레지스터 후반 영역으로부터의 하나의 값(%r[N+ rs2])을 입력값으로 하여 연산(fnmsub)을 행한다. 또한, 확장 연산기(12e)는, 레지스터 전반 영역으로부터의 2개의 값(%r[rs1], %r[rs2])과 레지스터 후반 영역으로부터의 하나의 값(%r[N+ rs3])을 입력값으로 하여 연산(fmadd)을 행한다. If the unused bit (highest bit) (rs1 [6], rs2 [6]) is 1, 0, the most significant bits b_rs1 [6], b_rs2 [6], b_rs3 [6] = 0, 1, 0, Further, the most significant bits e_rs1 [6], e_rs2 [6], and e_rs3 [6] = 0, 0, 1 of the register number instruction. Therefore, as in the upper right example of FIG. 13, the
미사용 비트(최상위 비트)(rs1[6], rs2[6])가 1, 1이면, 레지스터 번호 지시의 최상위 비트 b_rs1[6], b_rs2[6], b_rs3[6]= 0, 0, 0, 또한, 레지스터 번호 지시의 최상위 비트 e_rs1[6], e_rs2[6], e_rs3[6]= 0, 1, 1이 된다. 따라서, 도 13의 위쪽 아래 예와 같이, 통상 연산기(12b)는, 레지스터 전반 영역으로부터의 3개의 값(%r[rs1], %r[rs2], %r[rs3])을 입력값으로 하여 연산(fnmsub)을 행한다. 또한, 확장 연산기(12e)는, 레지스터 전반 영역으로부터의 하나의 값(%r[rs1])과 레지스터 후반 영역으로부터의 2개의 값(%r[N+ rs2], %r[N+ rs3])을 입력값으로 하여 연산(fmadd)을 행한다. If the unused bit (highest bit) (rs1 [6], rs2 [6]) is 1, 1, the most significant bits b_rs1 [6], b_rs2 [6], b_rs3 [6] = 0, 0, 0, Further, the most significant bits e_rs1 [6], e_rs2 [6], and e_rs3 [6] = 0, 1, 1 of the register number instruction. Therefore, as in the upper and lower example of FIG. 13, the
도 14는, 명령 종별 코드 opcode[3:0]= 1110인 경우의, 4종류의 연산 조합을 도시하고 있다. 이 때, 통상 연산기(12b)는 연산(fmadd)을 실행하고, 확장 연산기(12e)는 연산(fnmsub)을 실행한다. Fig. 14 shows four types of combinations of operations when the instruction type code opcode [3: 0] = 1110. At this time, the
이 때, 미사용 비트(최상위 비트)(rs1[6], rs2[6])가 0, 0이면, 레지스터 번호 지시의 최상위 비트 b_rs1[6], b_rs2[6], b_rs3[6]= 1, 1, 0, 또한, 레지스터 번호 지시의 최상위 비트 e_rs1[6], e_rs2[6], e_rs3[6]= 1, 0, 1이 된다. 따라서, 도 14의 좌측 위 예와 같이, 통상 연산기(12b)는, 레지스터 전반 영역으로부터의 하나의 값(%r[rs3])과 레지스터 후반 영역으로부터의 2개의 값(%r[N+ rs1], %r[N+ rs2])을 입력값으로 하여 연산(fmadd)을 행한다. 또한, 확장 연산기(12e)는, 레지스터 전반 영역으로부터의 하나의 값(%r[rs2])과 레지스터 후반 영역으로부터의 2개의 값(%r[N+ rs1], %r[N+ rs3])을 입력값으로 하여 연산(fnmsub)을 행한다. At this time, if the unused bit (most significant bit) (rs1 [6], rs2 [6]) is 0 or 0, the most significant bit b_rs1 [6], b_rs2 [6], b_rs3 [6] = 1, 1 of the register number indication , 0, and most significant bits e_rs1 [6], e_rs2 [6], and e_rs3 [6] = 1, 0, 1 of the register number instruction. Therefore, as in the upper left example of FIG. 14, the
미사용 비트(최상위 비트)(rs1[6], rs2[6])가 0, 1이면, 레지스터 번호 지시의 최상위 비트 b_rs1[6], b_rs2[6], b_rs3[6]= 1, 0, 0, 또한, 레지스터 번호 지시의 최상위 비트 e_rs1[6], e_rs2[6], e_rs3[6]= 1, 1, 1이 된다. 따라서, 도 14의 좌측 아래 예와 같이, 통상 연산기(12b)는, 레지스터 전반 영역으로부터의 2개의 값(%r[rs2]), %r[rs3])과 레지스터 후반 영역으로부터의 하나의 값(%r[N+ rs1])을 입력값으로 하여 연산(fmadd)을 행한다. 또한, 확장 연산기(12e)는, 레지스터 후반 영역으로부터의 3개의 값(%r[N+ rs1], %r[N+ rs2], %r[N+ rs3])을 입력값으로 하여 연산(fnmsub)을 행한다. If the unused bit (highest bit) (rs1 [6], rs2 [6]) is 0, 1, the most significant bits b_rs1 [6], b_rs2 [6], b_rs3 [6] = 1, 0, 0, Further, the most significant bits e_rs1 [6], e_rs2 [6], and e_rs3 [6] = 1, 1, 1 of the register number instruction. Thus, as in the lower left example of FIG. 14, the
미사용 비트(최상위 비트)(rs1[6], rs2[6])가 1, 0이면, 레지스터 번호 지시의 최상위 비트 b_rs1[6], b_rs2[6], b_rs3[6]= 0, 1, 0, 또한, 레지스터 번호 지시의 최상위 비트 e_rs1[6], e_rs2[6], e_rs3[6]= 0, 0, 1이 된다. 따라서, 도 14의 우측 위 예와 같이, 통상 연산기(12b)는, 레지스터 전반 영역으로부터의 2개의 값(%r[rs1], %r[rs3])과 레지스터 후반 영역으로부터의 하나의 값(%r[N+ rs2])을 입력값으로 하여 연산(fmadd)을 행한다. 또한, 확장 연산기(12e)는, 레지스터 전반 영역으로부터의 2개의 값(%r[rs1], %r[rs2])과 레지스터 후반 영역으로부터의 하나의 값(%r[N+ rs3])을 입력값으로 하여 연산(fnmsub)을 행한다. If the unused bit (highest bit) (rs1 [6], rs2 [6]) is 1, 0, the most significant bits b_rs1 [6], b_rs2 [6], b_rs3 [6] = 0, 1, 0, Further, the most significant bits e_rs1 [6], e_rs2 [6], and e_rs3 [6] = 0, 0, 1 of the register number instruction. Therefore, as in the upper right example of FIG. 14, the
미사용 비트(최상위 비트)(rs1[6], rs2[6])가 1, 1이면, 레지스터 번호 지시의 최상위 비트 b_rs1[6], b_rs2[6], b_rs3[6]= 0, 0, 0, 또한, 레지스터 번호 지시의 최상위 비트 e_rs1[6], e_rs2[6], e_rs3[6]= 0, 1, 1이 된다. 따라서, 도 14의 우측 아래 예와 같이, 통상 연산기(12b)는, 레지스터 전반 영역으로부터의 3개의 값(%r[rs1], %r[rs2], %r[rs3])을 입력값으로 하여 연산(fmadd)을 행한다. 또한, 확장 연산기(12e)는, 레지스터 전반 영역으로부터의 하나의 값(%r[rs1])과 레지스터 후반 영역으로부터의 2개의 값(%r[N+ rs2], %r[N+ rs3])을 입력값으로 하여 연산(fnmsub)을 행한다. If the unused bit (highest bit) (rs1 [6], rs2 [6]) is 1, 1, the most significant bits b_rs1 [6], b_rs2 [6], b_rs3 [6] = 0, 0, 0, Further, the most significant bits e_rs1 [6], e_rs2 [6], and e_rs3 [6] = 0, 1, 1 of the register number instruction. Therefore, as in the lower right example of FIG. 14, the
도 15는, 명령 종별 코드 opcode[3:0]= 1111인 경우의, 4종류의 연산 조합을 나타내고 있다. 이 때, 연산기(12b, 12e)는 동일 종별의 연산(fnmsub)을 실행한다. Fig. 15 shows four types of combinations of operations when the instruction type code opcode [3: 0] = 1111. At this time, the
이 때, 미사용 비트(최상위 비트)(rs1[6], rs2[6])가 0, 0이면, 레지스터 번호 지시의 최상위 비트 b_rs1[6], b_rs2[6], b_rs3[6]= 1, 0, 0, 또한, 레지스터 번호 지시의 최상위 비트 e_rs1[6], e_rs2[6], e_rs3[6]= 1, 1, 1이 된다. 따라서, 도 15의 좌측 위 예와 같이, 통상 연산기(12b)는, 레지스터 전반 영역으로부터의 2개의 값(%r[rs2]), %r[rs3])과 레지스터 후반 영역으로부터의 하나의 값(%r[N+ rs1])을 입력값으로 하여 연산(fnmsub)을 행한다. 또한, 확장 연산기(12e)는, 레지스터 후반 영역으로부터의 3개의 값(%r[N+ rs1], %r[N+ rs2], %r[N+ rs3])을 입력값으로 하여 연산(fnmsub)을 행한다. At this time, if the unused bit (most significant bit) (rs1 [6], rs2 [6]) is 0 or 0, the most significant bit b_rs1 [6], b_rs2 [6], b_rs3 [6] = 1, 0 in the register number indication. , 0, and most significant bits e_rs1 [6], e_rs2 [6], and e_rs3 [6] = 1, 1, 1 of the register number indication. Therefore, as in the upper left example of FIG. 15, the
미사용 비트(최상위 비트)(rs1[6], rs2[6])가 0, 1이면, 레지스터 번호 지시 의 최상위 비트 b_rs1[6], b_rs2[6], b_rs3[6]= 1, 1, 0, 또한, 레지스터 번호 지시의 최상위 비트 e_rs1[6], e_rs2[6], e_rs3[6]= 1, 0, 1이 된다. 따라서, 도 15의 좌측 아래 예와 같이, 통상 연산기(12b)는, 레지스터 전반 영역으로부터의 하나의 값(%r[rs3])과 레지스터 후반 영역으로부터의 2개의 값(%r[N+ rs1], %r[N+ rs2])을 입력값으로 하여 연산(fnmsub)을 행한다. 또한, 확장 연산기(12e)는, 레지스터 전반 영역으로부터의 하나의 값(%r[rs2])과 레지스터 후반 영역으로부터의 2개의 값(%r[N+ rs1], %r[N+ rs3])을 입력값으로 하여 연산(fnmsub)을 행한다. If the unused bit (highest bit) (rs1 [6], rs2 [6]) is 0, 1, the most significant bits b_rs1 [6], b_rs2 [6], b_rs3 [6] = 1, 1, 0, Further, the most significant bits e_rs1 [6], e_rs2 [6], and e_rs3 [6] = 1, 0, 1 of the register number indication. Therefore, as in the lower left example of FIG. 15, the
미사용 비트(최상위 비트)(rs1[6], rs2[6])가 1, 0이면, 레지스터 번호 지시의 최상위 비트 b_rs1[6], b_rs2[6], b_rs3[6]= 0, 0, 0, 또한, 레지스터 번호 지시의 최상위 비트 e_rs1[6], e_rs2[6], e_rs3[6]= 0, 1, 1이 된다. 따라서, 도 15의 우측 위 예와 같이, 통상 연산기(12b)는, 레지스터 전반 영역으로부터의 3개의 값(%r[rs1], %r[rs2], %r[rs3])을 입력값으로 하여 연산(fnmsub)을 행한다. 또한, 확장 연산기(12e)는, 레지스터 전반 영역으로부터의 하나의 값(%r[rs1])과 레지스터 후반 영역으로부터의 2개의 값(%r[N+ rs2], %r[N+ rs3])을 입력값으로 하여 연산(fnmsub)을 행한다. If the unused bit (highest bit) (rs1 [6], rs2 [6]) is 1, 0, the most significant bits b_rs1 [6], b_rs2 [6], b_rs3 [6] = 0, 0, 0, Further, the most significant bits e_rs1 [6], e_rs2 [6], and e_rs3 [6] = 0, 1, 1 of the register number instruction. Therefore, as in the upper right example of FIG. 15, the
미사용 비트(최상위 비트)(rs1[6], rs2[6])가 1, 1이면, 레지스터 번호 지시의 최상위 비트 b_rs1[6], b_rs2[6], b_rs3[6]= 0, 1, 0, 또한, 레지스터 번호 지시의 최상위 비트 e_rs1[6], e_rs2[6], e_rs3[6]= 0, 0, 1이 된다. 따라서, 도 15의 우측 아래 예와 같이, 통상 연산기(12b)는, 레지스터 전반 영역으로부터의 2개의 값(%r[rs1], %r[rs3])과 레지스터 후반 영역으로부터의 하나의 값(%r[N+ rs2])을 입력값으로 하여 연산(fnmsub)을 행한다. 또한, 확장 연산기(12e)는, 레지스터 전반 영역으로부터의 2개의 값(%r[rs1], %r[rs2])과 레지스터 후반 영역으로부터의 하나의 값(%r[N+ rs3])을 입력값으로 하여 연산(fnmsub)을 행한다. If the unused bit (highest bit) (rs1 [6], rs2 [6]) is 1, 1, the most significant bits b_rs1 [6], b_rs2 [6], b_rs3 [6] = 0, 1, 0, Further, the most significant bits e_rs1 [6], e_rs2 [6], and e_rs3 [6] = 0, 0, 1 of the register number instruction. Therefore, as in the lower right example of FIG. 15, the
[6] 제2 미사용 비트 이용 형태 채용 시의 연산 장치의 동작[6] operation of arithmetic unit when employing second unused bit type
도 16은 제2 미사용 비트 이용 형태 채용 시의 도 1에 도시하는 연산 장치(1)에 있어서의 연산부(10)의 동작을 간단하게 설명하기 위한 도면이다. 도 17은 제2 미사용 비트 이용 형태 채용 시의 도 1에 도시하는 연산 장치(1)에 있어서의 명령 코드 발행부(설정부)(20) 및 생성부(30)의 동작을 설명하기 위한 도면이다. 도 18(a)∼도 18(d)는, 각각, 제2 미사용 비트 이용 형태 채용 시의 도 1에 도시하는 연산 장치(1)에 있어서의 명령 코드, 연산 코드, 레지스터 기록 신호 및 레지스터 번호 지정(최상위 비트만)을 구체적으로 도시하는 도면이다. FIG. 16 is a diagram for briefly explaining the operation of the
전술한 제1 미사용 비트 이용 형태에서는, 명령 세트(cross-fmadd1, …, cross-fmadd4)에 있어서의 미사용 비트(rs1[6], rs2[6])를 이용하여, 도 12∼도 15를 참조하면서 설명한 확장 처리의 실행 지시를 행하는 경우에 대해 설명했다. 여기서 설명하는 제2 미사용 비트 이용 형태에서는, 제1 이용형태에 부가하여, 도 6∼도 8을 참조하면서 설명한 SIMD 방식의 명령 세트(simd-fmadd, simd-fmsub, simd-fnmsub, simd-fnmadd)에 있어서의, 미사용 비트(rd[6], rs1[6], rs2[6], rs3[6])를 이용한다. 특히, 이들 미사용 비트(rd[6], rs1[6], rs2[6], rs3[6]) 중 2개, 구체적으로는 rs1[6], rs2[6]이 이용된다[도 18(a) 참조]. In the above-described first unused bit usage form, the unused bits rs1 [6], rs2 [6] in the instruction sets cross-fmadd1, ..., cross-fmadd4 are used to refer to Figs. The case where execution instruction of the extension processing described above is given is described. In the second unused bit use form described herein, in addition to the first use form, the SIMD instruction set (simd-fmadd, simd-fmsub, simd-fnmsub, simd-fnmadd) described above with reference to FIGS. Unused bits (rd [6], rs1 [6], rs2 [6], and rs3 [6]) are used. In particular, two of these unused bits rd [6], rs1 [6], rs2 [6], rs3 [6], specifically rs1 [6], rs2 [6], are used (Fig. 18 (a). ) Reference].
이들 2개의 미사용 비트(rs1[6], rs2[6])에, 명령 코드 발행부(20)에 있어서 의 설정부로서의 기능에 의해, 확장 지시 정보가 설정된다. 이 확장 지시 정보는, rs1[6], rs2[6]을 사용하지 않는 명령 세트(simd-fmadd, simd-fmsub, simd-fnmsub, simd-fnmadd)에 의한 통상 처리(도 16의 좌측예 참조)와는 상이한 다른 확장 처리의 실행 지시를 레지스터(11) 및 연산기(12b, 12e)에 대해 행하는 것이다. 그리고, 생성부(30)는, 도 17 및 도 18을 참조하면서 후술하는 바와 같이, 미사용 비트에 설정된 확장 지시 정보와 미사용 비트 이외의 비트에 설정된 정보에 기초하여, 레지스터(11) 및 연산기(12b, 12e)에 대해 상기 확장 처리의 실행 지시를 행하는 확장 명령을 생성하여 출력한다. The extended instruction information is set in these two unused bits rs1 [6] and rs2 [6] by the function as the setting unit in the instruction
이에 따라, 도 16의 우측예에 도시하는 바와 같이, 하나의 연산기(12b 또는 12e)에 있어서, 레지스터(11)의 전반 영역의 값과 후반 영역의 값을 입력값으로 하여 혼재시킨 연산을 실현할 수 있다. 특히, 미사용 비트(rs1[6], rs2[6])를 이용하여 확장 처리의 실행 지시를 행함으로써 각 연산기(12b, 12e)에 있어서의 곱연산 대상이 되는 2개의 입력값을, 각각 레지스터(11)의 전반 영역 및 후반 영역으로부터 입력시키는 것이 가능하게 된다. 이러한 확장 처리에 의해, SIMD 방식에 의한 연산의 레지스터 조합수를 증가시킬 수 있어, 복소수 연산만이 아니라, 여러가지의 연산에 있어서, 레지스터 전반 영역의 값과 레지스터 후반 영역의 값의 여러 가지 조합을 실현할 수 있다. As a result, as shown in the right example of FIG. 16, in one
이 제2 미사용 비트 이용 형태를 채용하는 경우[즉 명령 세트(simd-fmadd, simd-fmsub, simd-fnmsub, simd-fnmadd)에 의한 처리를 채용하는 경우, 명령 코드 발행부(20)에 의해 발행되는 명령 종별 코드의 상위 2비트(opcode[3:2])에는 01이 설정된다. 이하, 도 17 및 도 18을 참조하면서, 이 제2 미사용 비트 이용 형태를 채용한 경우의 연산 장치(1)의 동작에 대해 설명한다. Issued by the instruction
제2 미사용 비트 이용 형태의 채용 시에는, 명령 코드 발행부(20)에 의해 발행된 명령 코드(opcode[3:0]) 및 4개의 레지스터 번호 지시(rd[6:0], rs1[6:0], rs2[6:0], rs3[6:0])가, 생성부(30)에 있어서, 도 17에 도시하는 바와 같이 변환되어, 명령 세트(b_we, e_we, b_rd[6:0], b_rs1[6:0], b_rs2[6:0], b_rs3[6:0], e_rd[6:0], e_rs1[6:0], e_rs2[6:0], e_rs3[6:0], b_op[1:0], e_op[1:0])로서 연산부(10)에 입력된다. When employing the second unused bit usage form, the instruction code (opcode [3: 0]) issued by the instruction
여기서, 도 17 및 도 18(b)에 도시하는 바와 같이, 통상 연산기(12b)용 연산 코드(b_op[1:0]) 및 확장 연산기(12e)용 연산 코드(e_op[1:0])로서는, 명령 코드에 포함되는 명령 종별 코드의 하위 2비트의 값(opcode[1:0])이 이용된다. 통상 연산기(12b)와 확장 연산기(12e)에는 반드시 동일한 연산 코드가 입력되어, 이들 연산기(12b, 12e)는, 동일 종별의 연산을 실행한다. As shown in Figs. 17 and 18 (b), the operation codes b_op [1: 0] for the
이 때, 도 17 및 도 18(c)에 도시하는 바와 같이, 통상 연산기(12b)용의 레지스터 기록 제어 신호(b_we) 및 확장 연산기(12e)용의 레지스터 기록 제어 신호(e_we)로서는, 고정값 1이 설정된다. 이에 의해, 통상 연산기(12b) 및 확장 연산기(12e)에 의한 연산 결과는, 항상 레지스터(11)의 전반 영역 및 후반 영역에 각각 기록된다. At this time, as shown in Figs. 17 and 18 (c), as the register write control signal b_we for the
또한, 도 17에 도시하는 바와 같이, 명령 코드에 포함되는 4개의 레지스터 번호 지시의 하위 6비트(rd[5:0], rs1[5:0], rs2[5:0], rs3[5:0])가 통상 연산 기(12b)용 레지스터 번호 지시(b_rd[5:0], b_rs1[5:0], b_rs2[5:0], b_rs3[5:0])로서 입력된다. 동시에, 동일한 rd[5:0], rs1[5:0], rs2[5:0], rs3[5:0]이 확장 연산기(12e)용 레지스터 번호 지시(e_rd[5:0], e_rs1[5:0], e_rs2[5:0], e_rs3[5:0])로서도 입력된다. In addition, as shown in FIG. 17, the lower six bits (rd [5: 0], rs1 [5: 0], rs2 [5: 0], rs3 [5 :) of the four register number instructions included in the instruction code. 0]) is input as the register number instructions b_rd [5: 0], b_rs1 [5: 0], b_rs2 [5: 0], and b_rs3 [5: 0] for the
그리고, 도 17 및 도 18(d)에 도시하는 바와 같이, 통상 연산기(12b)용 레지스터 번호 지시의 최상위 비트(b_rd[6], b_rs3[6])에는 고정값 0이 설정되고, 확장 연산기(12e)용 레지스터 번호 지시의 최상위 비트(e_rd[6], e_rs3[6])에는 고정값 1이 설정된다. 한편, 통상 연산기(12b)용 레지스터 번호 지시의 최상위 비트(b_rs1[6], b_rs2[6])에는, rs1[6]의 값 및 rs2[6]의 값이 각각 설정된다. 또한, 확장 연산기(12e)용 레지스터 번호 지시의 최상위 비트(e_rs1[6], e_rs2[6])에는, ~rs1[6]의 값 및 ~rs2[6]의 값이 각각 설정된다. 이에 의해, 각 연산기(12b, 12e)에 있어서의 곱연산 대상이 되는 2개의 입력값을, 각각 레지스터(11)의 전반 영역 및 후반 영역으로부터 입력시키는 것이 가능하게 된다. 즉, 미사용 비트(rs1[6], rs2[6])에 설정한 확장 지시 정보에 의해, 레지스터(11)로부터 각 연산기(12b, 12e)에의 값을, 각 연산기(12b, 12e)에 대응하는 레지스터(11)의 영역 이외의 영역에 있어서의 값으로 전환하는 지시가, 레지스터(11)에 대해 행해진다. 또, "~X"는 X의 반전값을 나타낸다. As shown in Figs. 17 and 18 (d), the fixed
다음으로, 제2 미사용 비트 이용 형태 채용 시의 구체적인 동작예, 예컨대 simd-fnmsub %f40, %f10, %f80, %f30의 연산을 실시하는 경우에 대해 설명한 다. Next, a specific operation example when employing the second unused bit usage mode, for example, the calculation of simd-fnmsub% f40,% f10,% f80, and% f30 will be described.
이 경우, 연산부(10)의 연산기(12b, 12e)에 의해, 이하와 같은 내용의 2개의 연산이 각각 실행된다. In this case, the
통상 연산기(12b)의 연산 내용: %r[40] ← %r[10] * %r[80] - %r[30]Calculation content of the
확장 연산기(12e)의 연산 내용: %r[104] ← %r[74] * %r[16] - %r[94]Calculation contents of the
이 경우, 하기 표 12에 나타내는 명령 코드에서 지정된 명령 종별 코드(opcode[3:0]) 및 레지스터 번호 지시(rd[6:0], rs1[6:0], rs2[6:0], rs3[6:0])의 값이, 하기 표 13에 나타내는 연산기(12b, 12e)용의 입력 신호의 값으로 변환되어 입력된다. 즉, 하기 표 12에 나타내는 바와 같이, 명령 코드 발행부(20)에 의해 명령 종별 코드(opcode[3:0])로서 0101이 설정되고, 명령 코드 발행부(20)의 설정부로서의 기능에 의해, 미사용 비트(rs1[6], rs2[6])에 0, 1이 설정된다. 이들 값에 따라, 생성부(30)에 의해, 도 18(d)에 도시하는 식에 기초하여, 통상 연산기(12b)용의 레지스터 번호 지시의 최상위 비트(b_rd[6], b_rs1[6], b_rs2[6], b_rs3[6])로서 0, 0, 1, 0이 산출·설정된다(하기 표 13 참조). 또한, 마찬가지로 하여, 확장 연산기(12e)용의 레지스터 번호 지시의 최상위 비트(e_rd[6], e_rs1[6], e_rs2[6], e_rs3[6])로서 1, 1, 0, 1이 산출·설정된다(하기 표 13 참조). 또한, 통상 연산기(12b)용의 연산 코드(b_op[1:0]) 및 확장 연산기(12e)용의 연산 코드(e_op[1:0])로서는, 동일한 연산 코드 01이 입력된다. 여기서는, 통상 연산기(12b)와 확장 연산기(12e)는 동일 종별의 연산을 행한다. 또, 통상 연산기(12b)용 레지스터 번호 지시 및 확장 연산기(12e)의 레지스터 번호 지시의 하위 6비트에는, 동일한 값(rd[5:0], rs1[5:0], rs2[5:0], rs3[5:0])이 입력된다. In this case, the instruction type code (opcode [3: 0]) and the register number instruction (rd [6: 0], rs1 [6: 0], rs2 [6: 0], and rs3 specified in the instruction code shown in Table 12 below. [6: 0]) is converted into the values of the input signals for the
이에 의해, 통상 연산기(12b)는, 레지스터 번호 지시의 최상위 비트 b_rs1[6], b_rs2[6], b_rs3[6]= 0, 1, 0에 의해 선택된 레지스터 전반 영역으로부터의 2개의 값(%r[rs1]= %r[10], %r[rs3]= %r[30])과 레지스터 후반 영역으로부터의 하나의 값(%r[rs2]= %r[80])을 입력값으로 하여 연산(fnmsub)을 행한다. 또한, 확장 연산기(12e)는, 레지스터 번호 지시의 최상위 비트 e_rs1[6], e_rs2[6], e_rs3[6]= 1, 0, 1에 의해 선택된 레지스터 전반 영역으로부터의 하나의 값(%r[N+ rs2]= %r[16])과 레지스터 후반 영역으로부터의 2개의 값(%r[N+ rs1]= %r[74], %r[N+ rs3]= %r[94])을 입력값으로 하여 연산을 행한다. 따라서, 통상 연산기(12b) 및 확장 연산기(12e)로부터, 상이한 입력값을 사용한 동일 종별의 연산에 의한 연산 결과가 출력된다. 또, 통상 연산기(12b)용의 레지스터 기록 제어 신호(b_we) 및 확장 연산기(12e)용의 레지스터 기록 신호에는 고정값 1이 설정되어 있다. 이 때문에, 통상 연산기(12b)에 의한 연산 결과는, 레지스터(11)의 전반 영역에 레지스터값(%r[40])으로서 기록된다. 마찬가지로, 확장 연산기(12e)에 의한 연산 결과는, 레지스터(11)의 후반 영역에 레지스터값(%r[104])으로서 기록된다.As a result, the
[표 12]TABLE 12
[표 13]TABLE 13
전술한 구체적인 동작예에서는, 명령 종별 코드(opcode[3:0])에 0101이 설정되고 또한 미사용 비트(rs1[6], rs2[6])에 0, 1이 설정된 경우에 대해 설명했지만, 제2 미사용 비트 이용 형태 채용 시에는, 다른 연산 조합을 실현할 수도 있다. 여기서, opcode[1:0]에 의해 연산기(12b, 12e)에 의한 4종류의 연산 종별이 선택된다. 그리고, 각 연산 종별마다, 미사용 비트(rs1[6], rs2[6])의 값에 의해, 각 연산기(12b, 12e)에 입력되는 2개의 값(곱대상의 데이터)을 레지스터 전반 영역 혹은 레지스터 후반 영역 중 어느쪽으로부터 판독할 것인지가 지시·선택된다. In the above specific operation example, the case where 0101 is set in the instruction type code opcode [3: 0] and 0 and 1 are set in the unused bits rs1 [6] and rs2 [6] has been described. When employing two unused bit usage forms, other combinations of operations can be realized. Here, four types of operations by the
예컨대, 미사용 비트(최상위 비트)(rs1[6], rs2[6])가 0, 0이면, 레지스터 번호 지시의 최상위 비트 b_rs1[6], b_rs2[6], b_rs3[6]= 0, 0, 0, 또한, 레지스터 번호 지시의 최상위 비트 e_rs1[6], e_rs2[6], e_rs3[6]= 1, 1, 1이 된다. 따라서, 통상 연산기(12b)는, 레지스터 전반 영역으로부터의 3개의 값(%r[rs1], % r[rs2], %r[rs3])을 입력값으로 하여 연산을 행한다. 또한, 확장 연산기(12e)는, 레지스터 후반 영역으로부터의 3개의 %r[N+ rs1], %r[N+ rs2], %r[N+ rs3]를 입력값으로 하여 연산을 행한다. For example, if the unused bit (most significant bit) (rs1 [6], rs2 [6]) is 0, 0, the most significant bits b_rs1 [6], b_rs2 [6], b_rs3 [6] = 0, 0, 0, the most significant bits e_rs1 [6], e_rs2 [6], and e_rs3 [6] = 1, 1, 1 of the register number instruction. Therefore, the
미사용 비트(최상위 비트)(rs1[6], rs2[6])가 0, 1이면, 레지스터 번호 지시의 최상위 비트 b_rs1[6], b_rs2[6], b_rs3[6]= 0, 1, 0, 또한, 레지스터 번호 지시의 최상위 비트 e_rs1[6], e_rs2[6], e_rs3[6]= 1, 0, 1이 된다. 따라서, 통상 연산기(12b)는, 레지스터 전반 영역으로부터의 2개의 값(%r[rs1], %r[rs3])과 레지스터 후반 영역으로부터의 하나의 값(%r[N+ rs2])을 입력값으로 하여 연산을 행한다. 또한, 확장 연산기(12e)는, 레지스터 전반 영역으로부터의 하나의 값(%r[rs2])과 레지스터 후반 영역으로부터의 2개의 값(%r[N+ rs1], %r[N+ rs3])을 입력값으로 하여 연산을 행한다. If the unused bit (highest bit) (rs1 [6], rs2 [6]) is 0, 1, the most significant bits b_rs1 [6], b_rs2 [6], b_rs3 [6] = 0, 1, 0, Further, the most significant bits e_rs1 [6], e_rs2 [6], and e_rs3 [6] = 1, 0, 1 of the register number indication. Therefore, the
미사용 비트(최상위 비트)(rs1[6], rs2[6])가 1, 0이면, 레지스터 번호 지시의 최상위 비트 b_rs1[6], b_rs2[6], b_rs3[6]= 1, 0, 0, 또한, 레지스터 번호 지시의 최상위 비트 e_rs1[6], e_rs2[6], e_rs3[6]= 0, 1, 1이 된다. 따라서, 통상 연산기(12b)는, 레지스터 전반 영역으로부터의 2개의 값(%r[rs2], %r[rs3])과 레지스터 후반 영역으로부터의 하나의 값(%r[N+ rs1])을 입력값으로 하여 연산을 행한다. 또한, 확장 연산기(12e)는, 레지스터 전반 영역으로부터의 하나의 값(%r[rs1])과 레지스터 후반 영역으로부터의 2개의 값(%r[N+ rs2], %r[N+ rs3])을 입력값으로 하여 연산을 행한다. If the unused bit (highest bit) (rs1 [6], rs2 [6]) is 1, 0, the most significant bits b_rs1 [6], b_rs2 [6], b_rs3 [6] = 1, 0, 0, Further, the most significant bits e_rs1 [6], e_rs2 [6], and e_rs3 [6] = 0, 1, 1 of the register number instruction. Therefore, the
미사용 비트(최상위 비트)(rs1[6], rs2[6])가 1, 1이면, 레지스터 번호 지시 의 최상위 비트 b_rs1[6], b_rs2[6], b_rs3[6]= 1, 1, 0, 또한, 레지스터 번호 지시의 최상위 비트 e_rs1[6], e_rs2[6], e_rs3[6]= 0, 0, 1이 된다. 따라서, 통상 연산기(12b)는, 레지스터 전반 영역으로부터의 하나의 값(%r[rs3])과 레지스터 후반 영역으로부터의 2개의 값(%r[N+ rs1], %r[N+ rs2])을 입력값으로 하여 연산을 행한다. 또한, 확장 연산기(12e)는, 레지스터 전반 영역으로부터의 2개의 값(%r[rs1], %r[rs2])과 레지스터 후반 영역으로부터의 하나의 값(%r[N+ rs3])을 입력값으로 하여 연산을 행한다. If the unused bit (highest bit) (rs1 [6], rs2 [6]) is 1, 1, the most significant bits b_rs1 [6], b_rs2 [6], b_rs3 [6] = 1, 1, 0, Further, the most significant bits e_rs1 [6], e_rs2 [6], and e_rs3 [6] = 0, 0, 1 of the register number instruction. Therefore, the
[7] 제3 미사용 비트 이용 형태 채용 시의 연산 장치의 동작[7] Operation of arithmetic unit when employing third unused bit type
도 19 및 도 20은 제3 미사용 비트 이용 형태 채용 시의 도 1에 도시하는 연산 장치(1)에 있어서의 연산부(10)의 동작을 간단하게 설명하기 위한 도면이다. 도 21은 제2 미사용 비트 이용 형태 채용 시의 도 1에 도시하는 연산 장치(1)에 있어서의 명령 코드 발행부(설정부)(20) 및 생성부(30)의 동작을 설명하기 위한 도면이다. 도 22(a)∼도 22(d)는, 각각, 제3 미사용 비트 이용 형태 채용 시의 도 1에 도시하는 연산 장치(1)에 있어서의 명령 코드, 연산 코드, 레지스터 기록 신호 및 레지스터 번호 지정(최상위 비트만)을 구체적으로 도시하는 도면이다. 도 23 및 도 24는 제3 미사용 비트 이용 형태 채용 시의 도 1에 도시하는 연산 장치에 있어서의 연산부(10)에 의한 연산 조합의 구체예를 도시하는 도면이다. 도 25는 제3 미사용 비트 이용 형태 채용 시의 도 1에 도시하는 연산 장치(1)에 있어서의 생성부(30)의 구체적인 실현예를 도시하는 회로도이다. 19 and 20 are diagrams for briefly explaining the operation of the
여기서 설명하는 제3 미사용 비트 이용 형태에서는, 도 22(a)에 도시하는 바 와 같이, 전술한 SIMD 방식의 명령 세트(simd-fmadd, simd-fmsub, simd-fnmsub, simd-fnmadd)에 있어서의, 미사용 비트(rd[6], rs1[6], rs2[6], rs3[6])의 모두를 이용한다. 제2 이용형태에 있어서는, 미사용 비트(rs1[6], rs2[6])를 이용하여 SIMD 명령을 확장했지만, 이 제3 이용형태에서는, 미사용 비트(rs3[6], rd[6])를 이용함으로써, SIMD 명령을 더 확장한다. In the third unused bit usage form described here, as shown in Fig. 22A, the above-described SIMD instruction set (simd-fmadd, simd-fmsub, simd-fnmsub, simd-fnmadd) is used. , All of the unused bits (rd [6], rs1 [6], rs2 [6], rs3 [6]) are used. In the second usage form, the SIMD instruction is extended using the unused bits rs1 [6] and rs2 [6]. In this third usage form, the unused bits rs3 [6] and rd [6] are stored. By using this, the SIMD instruction is further extended.
여기서, 미사용 비트(rs3[6])의 값은, 확장 연산기(12e) 측의 곱입력 레지스터 번호의 선택을 위해 사용되고, 미사용 비트(rd[6])의 값은, 확장 연산기(12e)의 연산 코드(e_op[1:0])의 선택을 위해 사용된다. 이러한 확장에 의해, 도 19 및 도 20에 도시하는 바와 같이, 제1 이용형태에서 추가한 신규 명령과 동일한 연산을 SIMD 명령의 확장에 의해 실현할 수 있다. 따라서, 제3 이용형태에서는, 제1 이용형태에서 신규로 추가한 명령(cross-fmadd1, …, cross-fmadd4)은 불필요하게 된다. Here, the value of the unused bit rs3 [6] is used for the selection of the product input register number on the
이들 4개의 미사용 비트(rd[6], rs1[6], rs2[6], rs3[6])에, 명령 코드 발행부(20)에 있어서의 설정부로서의 기능에 의해, 확장 지시 정보가 설정된다. 이 확장 지시 정보는, rd[6], rs1[6], rs2[6], rs3[6]을 사용하지 않는 명령 세트(simd-fmadd, simd-fmsub, simd-fnmsub, simd-fnmadd)에 의한 통상 처리(도 19의 좌측 예 참조)와는 상이한 확장 처리(예컨대 도 23, 도 24의 연산 조합 참조)의 실행 지시를 레지스터(11) 및 연산기(12b, 12e)에 대해 행하는 것이다. 그리고, 생성부(30)는, 도 21 및 도 22를 참조하면서 후술하는 바와 같이, 미사용 비트에 설정된 확장 지시 정보와 미사용 비트 이외의 비트에 설정된 정보에 기초하여, 레지스터(11) 및 연산기(12b, 12e)에 대해 상기 확장 처리의 실행 지시를 행하는 확장 명령을 생성하여 출력한다. The extended instruction information is set in these four unused bits rd [6], rs1 [6], rs2 [6], and rs3 [6] by a function as a setting unit in the instruction
이에 따라, 도 19의 우측 예나 도 20에 도시하는 바와 같이, 하나의 연산기(12b 또는 12e)에 있어서, 레지스터(11)의 전반 영역의 값과 후반 영역의 값을 입력값으로 하여 혼재시킨 연산을 실현할 수 있다. 또한, 확장 연산기(12e)에 의한 연산의 종별을 전환하는 지시를 행하여, 연산기(12e)에 있어서의 연산 종별이 변경 제어된다. 따라서, 상기 식(1-1)∼(1-4)에 의한 4회의 연산(즉 4개의 명령)에 의해 실행되는 복소수 행렬곱 연산을, 후술하는 바와 같이, 2 명령으로 실행하는 것이 가능하게 된다. Accordingly, as shown in the right example of FIG. 19 or in FIG. 20, in one
이 제3 미사용 비트 이용 형태를 채용하는 경우, 명령 코드 발행부(20)에 의해 발행되는 명령 종별 코드의 상위 2비트(opcode[3:2])에는 01이 설정된다. 이하, 도 21∼도 25를 참조하면서, 이 제3 미사용 비트 이용 형태를 채용한 경우의 연산 장치(1)의 동작에 대해 설명한다. In the case of adopting this third unused bit use form, 01 is set in the upper two bits (opcode [3: 2]) of the instruction type code issued by the instruction
제3 미사용 비트 이용 형태 채용 시에는, 명령 코드 발행부(20)에 의해 발행된 명령 코드(opcode[3:0]) 및 4개의 레지스터 번호 지시(rd[6:0], rs1[6:0], rs2[6:0], rs3[6:0])가, 생성부(30)에 있어서, 도 21에 도시하는 바와 같이 변환되어, 명령 세트(b_we, e_we, b_rd[6:0], b_rs1[6:0], b_rs2[6:0], b_rs3[6:0], e_rd[6:0], e_rs1[6:0], e_rs2[6:0], e_rs3[6:0], b_op[1:0], e_op[1:0])로서 연산부(10)에 입력된다. When adopting the third unused bit usage form, the instruction code (opcode [3: 0]) issued by the instruction
여기서, 통상 연산기(12b)용 연산 코드(b_op[1:0])로서는, 명령 코드에 포함 되는 명령 종별 코드의 하위 2비트의 값(opcode[1:0])이 이용된다. 또한, 생성부(30)에 있어서는, 도 22(b) 및 하기 표 14에 나타내는 바와 같이, 미사용 비트(rd[6])의 값에 기초하여, 확장 연산기(12e)용 연산 코드(e_op[1:0])가 생성된다. 전술한 SIMD 방식의 경우와 상이하게, 통상 연산기(12b) 및 확장 연산기(12e)에 있어서 실행되는 연산의 종별은, 독립적으로 제어되어 전환된다. 이에 의해, 통상 연산기(12b) 및 확장 연산기(12e)는, 동일 종별의 연산을 실행하는 것도, 상이한 종별의 연산을 실행하는 것도 가능하게 되어 있다. 이와 같이, SIMD 명령과 미사용 비트(rd[6])에 설정된 값(확장 지시 정보)을 조합시킴으로써 제1 이용형태에서 추가된 명령과 동등한 수의 연산 조합을, SIMD 명령만으로 실현할 수 있다. Here, as the operation code b_op [1: 0] for the
[표 14][Table 14]
이 때, 도 21 및 도 22(c)에 도시하는 바와 같이, 통상 연산기(12b)용의 레지스터 기록 제어 신호(b_we) 및 확장 연산기(12e)용의 레지스터 기록 제어 신호(e_we)로서는, 고정값 1이 설정된다. 이에 따라, 통상 연산기(12b) 및 확장 연산기(12e)에 의한 연산 결과는, 항상 레지스터(11)의 전반 영역 및 후반 영역에 각각 기록된다. At this time, as shown in Figs. 21 and 22 (c), as the register write control signal b_we for the
또한, 도 21에 도시하는 바와 같이, 명령 코드에 포함되는 4개의 레지스터 번호 지시의 하위 6비트(rd[5:0], rs1[5:0], rs2[5:0], rs3[5:0])가 통상 연산기(12b)용 레지스터 번호 지시(b_rd[5:0], b_rs1[5:0], b_rs2[5:0], b_rs3[5:0])로서 입력된다. 동시에, 동일한 rd[5:0], rs1[5:0], rs2[5:0], rs3[5:0]이 확장 연산기(12e)용 레지스터 번호 지시(e_rd[5:0], e_rs1[5:0], e_rs2[5:0], e_rs3[5:0])로서도 입력된다. In addition, as shown in Fig. 21, the lower six bits (rd [5: 0], rs1 [5: 0], rs2 [5: 0], rs3 [5 :) of the four register number instructions included in the instruction code. 0]) is input as the register number instructions b_rd [5: 0], b_rs1 [5: 0], b_rs2 [5: 0], and b_rs3 [5: 0] for the
그리고, 도 21, 도 22(d) 및 하기 표 15에 나타내는 바와 같이, 통상 연산기(12b)용 레지스터 번호 지시의 최상위 비트(b_rd[6], b_rs3[6])에는 고정값 0이 설정되고, 확장 연산기(12e)용 레지스터 번호 지시의 최상위 비트(e_rd[6], e_rs3[6])에는 고정값 1이 설정된다. 또한, 통상 연산기(12b)용 레지스터 번호 지시의 최상위 비트(b_rs1[6], b_rs2[6])에는, rs1[6]의 값 및 rs2[6]의 값이 각각 설정된다. 한편, 확장 연산기(12e)용 레지스터 번호 지시의 최상위 비트(e_rs1[6], e_rs2[6])에는, 각각 ~rs1[6] ^ rs3[6] 및 ~rs2[6]의 값이 산출·생성되어 설정된다. 이에 의해, 각 연산기(12b, 12e)에 있어서의 곱연산 대상이 되는 2개의 입력값을, 각각 레지스터(11)의 전반 영역 및 후반 영역으로부터 입력시키는 것이 가능하게 된다. 즉, 미사용 비트(rs1[6], rs2[6], rs3[6])에 설정한 확장 지시 정보에 의해, 레지스터(11)로부터 각 연산기(12b, 12e)에의 값을, 각 연산기(12b, 12e)에 대응하는 레지스터(11)의 영역 이외의 영역에서의 값으로 전환하는 지시가, 레지스터(11)에 대해 행해진다. 또, "~X"는 X의 반전값을 나타낸다. 또 한, "A^ B"은 A와 B의 배타적 논리합(EOR: Exclusive OR)을 나타낸다. 21, 22 (d) and Table 15 below, the fixed
미사용 비트(rs1[6], rs2[6], rs3[6])에 설정된 값(확장 지시 정보)과, 그 값에 의해 최상위 비트(b_rs1[6], b_rs2[6], e_rs1[6], e_rs2[6])에 설정되는 값과의 대응 관계를 하기 표 15에 나타낸다. The value set in the unused bits (rs1 [6], rs2 [6], rs3 [6]) (extended instruction information) and the most significant bits (b_rs1 [6], b_rs2 [6], e_rs1 [6], The correspondence with the value set in e_rs2 [6]) is shown in Table 15 below.
[표 15]TABLE 15
여기서, 전술한 바와 같이 미사용 비트(rs1[6], rs2[6], rs3[6])에 각각 설정되는 값(확장 지시 정보)은, 이하와 같이 기능하는 것이 된다. As described above, the values (expansion instruction information) set in the unused bits rs1 [6], rs2 [6], and rs3 [6], respectively, function as follows.
rs1[6]: 1이 설정된 경우, 통상 연산기(12b)의 첫번째의 입력값(b_i1)을 레지스터 후반 영역으로부터 공급한다. rs1 [6]: When 1 is set, the first input value b_i1 of the
rs2[6]: 1이 설정된 경우, 통상 연산기(12b)의 2번째의 입력값(b_i2)을 레지스터 후반 영역으로부터 공급한다. rs2 [6]: When 1 is set, the second input value b_i2 of the
rs3[6]: 1이 설정된 경우, 확장 연산기(12e)의 첫번째의 입력값(b_i1)을 통상 연산기(12b)의 첫번째의 입력값(b_i1)과 동일한 레지스터 영역으로부터 공급한다(rs1 복사 플래그). rs3 [6]: When 1 is set, the first input value b_i1 of the
rd[6]: 확장 연산기(12e)의 연산 코드(e_op[1:0])를 변경한다(곱연산의 결과 에 -1을 곱셈함). rd [6]: Changes the operation code e_op [1: 0] of the
다음으로, 제1 미사용 비트 이용 형태 채용 시의 구체적인 동작예, 예컨대 simd-fmadd %f30, %f10, %f20, %f{30+ 64}의 연산을 실시하는 경우에 대해 설명한다. Next, a specific operation example when employing the first unused bit usage mode, for example, the calculation of simd-fmadd% f30,% f10,% f20, and% f {30 + 64} will be described.
이 경우, 연산부(10)의 연산기(12b, 12e)에 의해, 이하와 같은 내용의 2개의 연산이 각각 실행된다. In this case, the
통상 연산기(12b)의 연산 내용: %r[30] ← %r[10] * %r[20] + %r[30]Calculation content of the
확장 연산기(12e)의 연산 내용: %r[94] ← %r[10] * %r[84] + %r[94]Calculation contents of the
이들 2개의 연산은, 레지스터(11)의 전반 영역에 실수 파트의 값을, 레지스터(11)의 후반 영역에 허수 파트의 값을 유지한 경우의, 이하의 복소수 연산에 대응하고 있다. These two operations correspond to the following complex operations when the value of the real part in the first half region of the
X ← X + A * C (1-1) X ← X + A * C (1-1)
Y ← Y + A * D (1-2)Y ← Y + A * D (1-2)
이 경우, 하기 표 16에 나타내는 명령 코드에서 지정된 명령 종별 코드(opcode[3:0]) 및 레지스터 번호 지시(rd[6:0], rs1[6:0], rs2[6:0], rs3[6:0])의 값이, 하기 표 17에 나타내는 연산기(12b, 12e)용의 입력 신호의 값으로 변환되어 입력된다. 즉, 하기 표 16에 나타내는 바와 같이, 명령 코드 발행부(20)에 의해 명령 종별 코드(opcode[3:0])로서 0100이 설정되고, 명령 코드 발행부(20)의 설정부로서의 기능에 의해, 4개의 미사용 비트(rd[6], rs1[6], rs2[6], rs3[6])에 0, 0, 0, 1이 설정된다(후술하는 도 23의 좌측으로부터 3번째의 상단예 참조). 이들 값에 따라, 생성부(30)에 의해, 도 22(d)에 도시하는 식이나 상기 표 15에 기초하여, 통상 연산기(12b)용의 레지스터 번호 지시의 최상위 비트(b_rd[6], b_rs1[6], b_rs2[6], b_rs3[6])로서 0, 0, 0, 0이 산출·설정된다(하기 표 17 참조). 또한, 마찬가지로 하여, 확장 연산기(12e)용의 레지스터 번호 지시의 최상위 비트(e_rd[6], e_rs1[6], e_rs2[6], e_rs3[6])로서 1, 0, 1, 1이 산출·설정된다(하기 표 17 참조). 통상 연산기(12b)에는, 명령 종별 코드(opcode[1:0])에 의해 결정되는 연산 코드 00이 입력된다. 또한, 확장 연산기(12e)에는, 도 22(b)에 도시하는 식이나 상기 표 14에 나타내는 바와 같이 미사용 비트(rd[6])의 값 및 명령 종별 코드(opcode[1:0])에 의해 결정되는 연산 코드 00이 입력된다. 따라서, 이 구체예에서는, 통상 연산기(12b)와 확장 연산기(12e)는 동일 종별의 연산(fmadd)을 행하게 된다. 또, 통상 연산기(12b)용 레지스터 번호 지시 및 확장 연산기(12e)의 레지스터 번호 지시의 하위 6비트에는, 동일한 값(rd[5:0], rs1[5:0], rs2[5:0], rs3[5:0])이 입력된다. In this case, the instruction type code (opcode [3: 0]) and the register number instruction (rd [6: 0], rs1 [6: 0], rs2 [6: 0], and rs3 specified in the instruction code shown in Table 16 below. [6: 0]) is converted into the values of the input signals for the
이에 의해, 도 23의 좌측으로부터 3번째의 상단예와 같이, 통상 연산기(12b)는, 레지스터 번호 지시의 최상위 비트 b_rs1[6], b_rs2[6], b_rs3[6]= 0, 0, 0에 의해 선택된 레지스터 전반 영역으로부터의 3개의 값 A(%r[rs1]= %r[10]), C(%r[rs2]= %r[20]), X(%r[rs3]= %r[30])을 입력값으로 하여 상기 식(1-1)에 기초하는 연산을 행한다. 또한, 도 23의 좌측으로부터 3번째의 상단예와 같이, 확장 연산기(12e)는, 레지스터 번호 지시의 최상위 비트 e_rs1[6], e_rs2[6], e_rs3[6]= 0, 1, 1에 의해 선택된 레지스터 전반 영역으로부터의 하나의 값 A(%r[rs1]= % r[10])과 레지스터 후반 영역으로부터의 2개의 값 D(%r[N+ rs2]= %r[84]), Y(%r[N+ rs3]= %r[94])를 입력값으로 하여 상기 식(1-2)에 기초하는 연산을 행한다. 따라서, 통상 연산기(12b) 및 확장 연산기(12e)로부터, 상이한 입력값을 사용한 동일 종별의 연산에 의한 연산 결과가 출력된다. 또, 통상 연산기(12b)용의 레지스터 기록 제어 신호(b_we) 및 확장 연산기(12e)용의 레지스터 기록 신호에는 고정값 1이 설정되어 있다. 이 때문에, 통상 연산기(12b)에 의한 연산 결과는, 레지스터(11)의 전반 영역에 레지스터값(%r[rd]= %r[30])으로서 기록된다. 마찬가지로, 확장 연산기(12e)에 의한 연산 결과는, 레지스터(11)의 후반 영역에 레지스터값(%r[N+ rd]= %r[94])으로서 기록된다. 즉, 상기 식(1-1), (1-2)에 의한 2 종류의 연산을 하나의 명령에 의해 실행할 수 있다. 마찬가지로 하여, 상기 식(1-3), (1-4)에 대해서도 하나의 명령에 의해 실행하는 것이 가능하다. 따라서, 종래, 4개의 명령에 의해 실행되어 있던 복소수 연산을, 2개의 명령에 의해 실행할 수 있다. Thus, as in the upper third example from the left in FIG. 23, the
[표 16]TABLE 16
[표 17]TABLE 17
전술한 구체적인 동작예에서는, 명령 종별 코드(opcode[3:0])에 0100(simd-fmadd)이 설정되고 또한 4개의 미사용 비트(rd[6], rs1[6], rs2[6], rs3[6])에 0, 0, 0, 1이 설정된 경우에 대해 설명했다. 그러나, 제3 미사용 비트 이용 형태 채용 시에는, 그 외에 63종류의 연산 조합을 실현할 수도 있다. 4종류의 SIMD 명령[명령 종별 코드 opcode[3:0]= 0100(simd-fmadd), 0101(simd-fmsub), 0110(simd-fnmsub), 0111(simd-fnmadd)]의 각각에 대해 16종류의 연산 조합을 실현할 수 있다. 즉, 제3 이용형태에서는, 전부해서 64종류의 연산 조합 패턴을 실현할 수 있다. 여기서는, 4종류의 SIMD 명령 중, 명령 종별 코드 opcode[3:0]= 0100(simd-fmadd)에 대한 전부(16종류)의 연산 조합 패턴을, 도 23 및 도 24를 참조하면서 설명한다. 또, 다른 3종류의 SIMD 명령의 각각에 대해서도, 도 23 및 도 24와 같이 16종류의 연산 조합 패턴이 실현된다. In the above specific operation example, 0100 (simd-fmadd) is set in the instruction type code opcode [3: 0], and four unused bits rd [6], rs1 [6], rs2 [6], and rs3. [6]) has been described in the case where 0, 0, 0, 1 is set. However, when employing the third unused bit use form, 63 kinds of arithmetic combinations can be realized. 16 types for each of four types of SIMD instructions [command type code opcode [3: 0] = 0100 (simd-fmadd), 0101 (simd-fmsub), 0110 (simd-fnmsub), and 0111 (simd-fnmadd)] A combination of operations can be realized. That is, in the third use mode, 64 types of arithmetic combination patterns can be realized in total. Here, all (16 types) of operation combination patterns for the instruction type code opcode [3: 0] = 0100 (simd-fmadd) among the four types of SIMD instructions will be described with reference to FIGS. 23 and 24. Also, for each of the three other types of SIMD instructions, 16 types of arithmetic combination patterns are realized as shown in FIGS. 23 and 24.
도 23은, 명령 종별 코드 opcode[3:0]= 0100인 경우에서 또한 미사용 비트 rd[6]= 0인 경우의, 8종류의 연산 조합을 나타내고 있다. 이 때, 연산기(12b, 12e)는 동일 종별의 연산(fmadd)을 실행한다. FIG. 23 shows eight types of combinations of operations when the instruction type code opcode [3: 0] = 0100 and when the unused bit rd [6] = 0. FIG. At this time, the
또한, 도 23의 좌측 절반부는, 미사용 비트 rd[6]= 0 또한 미사용 비트(rs3[6]= 0)인 경우의, 4종류의 연산 조합을 나타내고 있다. In addition, the left half of FIG. 23 shows four types of arithmetic combinations when unused bits rd [6] = 0 and unused bits rs3 [6] = 0.
이 때, 미사용 비트(최상위 비트)(rs1[6], rs2[6])가 0, 0이면, 레지스터 번호 지시의 최상위 비트 b_rs1[6], b_rs2[6], b_rs3[6]= 0, 0, 0, 또한, 레지스터 번호 지시의 최상위 비트 e_rs1[6], e_rs2[6], e_rs3[6]= 1, 1, 1이 된다. 따라서, 도 23의 좌측으로부터 첫번째의 상단예와 같이, 통상 연산기(12b)는, 레지스터 전반 영역으로부터의 3개의 값(%r[rs1], %r[rs2], %r[rs3])을 입력값으로 하여 연산(fmadd)을 행한다. 또한, 확장 연산기(12e)는, 레지스터 후반 영역으로부터의 3개의 값(%r[N+ rs1], %r[N+ rs2], %r[N+ rs3])을 입력값으로 하여 연산(fmadd)을 행한다. At this time, if the unused bit (most significant bit) (rs1 [6], rs2 [6]) is 0 or 0, the most significant bit b_rs1 [6], b_rs2 [6], b_rs3 [6] = 0, 0 in the register number indication. , 0, and most significant bits e_rs1 [6], e_rs2 [6], and e_rs3 [6] = 1, 1, 1 of the register number indication. Therefore, as in the first upper example from the left in FIG. 23, the
미사용 비트(최상위 비트)(rs1[6], rs2[6])가 0, 1이면, 레지스터 번호 지시의 최상위 비트 b_rs1[6], b_rs2[6], b_rs3[6]= 0, 1, 0, 또한, 레지스터 번호 지시의 최상위 비트 e_rs1[6], e_rs2[6], e_rs3[6]= 1, 0, 1이 된다. 따라서, 도 23의 좌측으로부터 첫번째의 하단예와 같이, 통상 연산기(12b)는, 레지스터 전반 영역으로부터의 2개의 값(%r[rs1], %r[rs3])과 레지스터 후반 영역으로부터의 하나의 값(%r[N+ rs2])을 입력값으로 하여 연산(fmadd)을 행한다. 또한, 확장 연산기(12e)는, 레지스터 전반 영역으로부터의 하나의 값(%r[rs2])과 레지스터 후반 영역으로부터의 2개의 값(%r[N+ rs1], %r[N+ rs3])을 입력값으로 하여 연 산(fmadd)을 행한다. If the unused bit (highest bit) (rs1 [6], rs2 [6]) is 0, 1, the most significant bits b_rs1 [6], b_rs2 [6], b_rs3 [6] = 0, 1, 0, Further, the most significant bits e_rs1 [6], e_rs2 [6], and e_rs3 [6] = 1, 0, 1 of the register number indication. Therefore, as in the first lower example from the left in Fig. 23, the
미사용 비트(최상위 비트)(rs1[6], rs2[6])가 1, 0이면, 레지스터 번호 지시의 최상위 비트 b_rs1[6], b_rs2[6], b_rs3[6]= 1, 0, 0, 또한, 레지스터 번호 지시의 최상위 비트 e_rs1[6], e_rs2[6], e_rs3[6]= 0, 1, 1이 된다. 따라서, 도 23의 좌측으로부터 2번째의 상단예와 같이, 통상 연산기(12b)는, 레지스터 전반 영역으로부터의 2개의 값(%r[rs2], %r[rs3])과 레지스터 후반 영역으로부터의 하나의 값(%r[N+ rs1])을 입력값으로 하여 연산(fmadd)을 행한다. 또한, 확장 연산기(12e)는, 레지스터 전반 영역으로부터의 하나의 값(%r[rs1])과 레지스터 후반 영역으로부터의 2개의 값(%r[N+ rs2], %r[N+ rs3])을 입력값으로 하여 연산(fmadd)을 행한다. If the unused bit (highest bit) (rs1 [6], rs2 [6]) is 1, 0, the most significant bits b_rs1 [6], b_rs2 [6], b_rs3 [6] = 1, 0, 0, Further, the most significant bits e_rs1 [6], e_rs2 [6], and e_rs3 [6] = 0, 1, 1 of the register number instruction. Therefore, as in the second upper example from the left in FIG. 23, the
미사용 비트(최상위 비트)(rs1[6], rs2[6])가 1, 1이면, 레지스터 번호 지시의 최상위 비트 b_rs1[6], b_rs2[6], b_rs3[6]= 1, 1, 0, 또한, 레지스터 번호 지시의 최상위 비트 e_rs1[6], e_rs2[6], e_rs3[6]= 0, 0, 1이 된다. 따라서, 도 23의 좌측으로부터 2번째의 하단예와 같이, 통상 연산기(12b)는, 레지스터 전반 영역으로부터의 하나의 값(%r[rs3])과 레지스터 후반 영역으로부터의 2개의 값(%r[N+ rs1], %r[N+ rs2])을 입력값으로 하여 연산(fmadd)을 행한다. 또한, 확장 연산기(12e)는, 레지스터 전반 영역으로부터의 2개의 값(%r[rs1], %r[rs2])과 레지스터 후반 영역으로부터의 하나의 값(%r[N+ rs3])을 입력값으로 하여 연산(fmadd)을 행한다. If the unused bit (most significant bit) (rs1 [6], rs2 [6]) is 1, 1, the most significant bits b_rs1 [6], b_rs2 [6], b_rs3 [6] = 1, 1, 0, Further, the most significant bits e_rs1 [6], e_rs2 [6], and e_rs3 [6] = 0, 0, 1 of the register number instruction. Therefore, as in the second lower example from the left in FIG. 23, the
또한, 도 23의 우측 절반부는, 미사용 비트 rd[6]= 0 또한 미사용 비트 rs3[6]= 1인 경우의, 4종류의 연산 조합을 나타내고 있다. In addition, the right half of FIG. 23 shows four types of arithmetic combinations when unused bits rd [6] = 0 and unused bits rs3 [6] = 1.
이 때, 미사용 비트(최상위 비트)(rs1[6], rs2[6])가 0, 0이면, 레지스터 번호 지시의 최상위 비트 b_rs1[6], b_rs2[6], b_rs3[6]= 0, 0, 0, 또한, 레지스터 번호 지시의 최상위 비트 e_rs1[6], e_rs2[6], e_rs3[6]= 0, 1, 1이 된다. 따라서, 도 23의 좌측으로부터 3번째의 상단예와 같이, 통상 연산기(12b)는, 레지스터 전반 영역으로부터의 3개의 값(%r[rs1], %r[rs2], %r[rs3])을 입력값으로 하여 연산(fmadd)을 행한다. 또한, 확장 연산기(12e)는, 레지스터 전반 영역으로부터의 하나의 값(%r[rs1])과 레지스터 후반 영역으로부터의 2개의 값(%r[N+ rs2], %r[N+ rs3])을 입력값으로 하여 연산(fmadd)을 행한다. At this time, if the unused bit (most significant bit) (rs1 [6], rs2 [6]) is 0 or 0, the most significant bit b_rs1 [6], b_rs2 [6], b_rs3 [6] = 0, 0 in the register number indication. , 0, and most significant bits e_rs1 [6], e_rs2 [6], and e_rs3 [6] = 0, 1, 1 of the register number instruction. Accordingly, as in the upper third example from the left in FIG. 23, the
미사용 비트(최상위 비트)(rs1[6], rs2[6])가 0, 1이면, 레지스터 번호 지시의 최상위 비트 b_rs1[6], b_rs2[6], b_rs3[6]= 0, 1, 0, 또한, 레지스터 번호 지시의 최상위 비트 e_rs1[6], e_rs2[6], e_rs3[6]= 0, 0, 1이 된다. 따라서, 도 23의 좌측으로부터 3번째의 하단예와 같이, 통상 연산기(12b)는, 레지스터 전반 영역으로부터의 2개의 값(%r[rs1], %r[rs3])과 레지스터 후반 영역으로부터의 하나의 값(%r[N+ rs2])을 입력값으로 하여 연산(fmadd)을 행한다. 또한, 확장 연산기(12e)는, 레지스터 전반 영역으로부터의 2개의 값(%r[rs1], %r[rs2])과 레지스터 후반 영역으로부터의 하나의 값(%r[N+ rs3])을 입력값으로 하여 연산(fmadd)을 행한다. If the unused bit (highest bit) (rs1 [6], rs2 [6]) is 0, 1, the most significant bits b_rs1 [6], b_rs2 [6], b_rs3 [6] = 0, 1, 0, Further, the most significant bits e_rs1 [6], e_rs2 [6], and e_rs3 [6] = 0, 0, 1 of the register number instruction. Therefore, as in the lower third example from the left in FIG. 23, the
미사용 비트(최상위 비트)(rs1[6], rs2[6])가 1, 0이면, 레지스터 번호 지시의 최상위 비트 b_rs1[6], b_rs2[6], b_rs3[6]= 1, 0, 0, 또한, 레지스터 번호 지 시의 최상위 비트 e_rs1[6], e_rs2[6], e_rs3[6]= 1, 1, 1이 된다. 따라서, 도 23의 좌측으로부터 4번째의 상단예와 같이, 통상 연산기(12b)는, 레지스터 전반 영역으로부터의 2개의 값(%r[rs2], %r[rs3])과 레지스터 후반 영역으로부터의 하나의 값(%r[N+ rs1])을 입력값으로 하여 연산(fmadd)을 행한다. 또한, 확장 연산기(12e)는, 레지스터 후반 영역으로부터의 3개의 값(%r[N+ rs1], %r[N+ rs2], %r[N+ rs3])을 입력값으로 하여 연산(fmadd)을 행한다. If the unused bit (highest bit) (rs1 [6], rs2 [6]) is 1, 0, the most significant bits b_rs1 [6], b_rs2 [6], b_rs3 [6] = 1, 0, 0, In addition, the most significant bits e_rs1 [6], e_rs2 [6], and e_rs3 [6] = 1, 1, 1 of the register number instruction. Therefore, as in the fourth upper example from the left in FIG. 23, the
미사용 비트(최상위 비트)(rs1[6], rs2[6])가 1, 1이면, 레지스터 번호 지시의 최상위 비트 b_rs1[6], b_rs2[6], b_rs3[6]= 1, 1, 0, 또한, 레지스터 번호 지시의 최상위 비트 e_rs1[6], e_rs2[6], e_rs3[6]= 1, 0, 1이 된다. 따라서, 도 23의 좌측으로부터 4번째의 하단예와 같이, 통상 연산기(12b)는, 레지스터 전반 영역으로부터의 하나의 값(%r[rs3])과 레지스터 후반 영역으로부터의 2개의 값(%r[N+ rs1], %r[N+ rs2])을 입력값으로 하여 연산(fmadd)을 행한다. 또한, 확장 연산기(12e)는, 레지스터 전반 영역으로부터의 하나의 값(%r[rs2])과 레지스터 후반 영역으로부터의 2개의 값(%r[N+ rs1], %r[N+ rs3])을 입력값으로 하여 연산(fmadd)을 행한다.If the unused bit (most significant bit) (rs1 [6], rs2 [6]) is 1, 1, the most significant bits b_rs1 [6], b_rs2 [6], b_rs3 [6] = 1, 1, 0, Further, the most significant bits e_rs1 [6], e_rs2 [6], and e_rs3 [6] = 1, 0, 1 of the register number indication. Accordingly, as in the fourth lower example from the left in FIG. 23, the
도 24는 명령 종별 코드 opcode[3:0]= 0100인 경우에 또한 미사용 비트(rd[6]= 1)인 경우의, 8종류의 연산 조합을 도시하고 있다. 이 때, 통상 연산기(12b)는 연산(fmadd)을 실행하고, 확장 연산기(12e)는 연산(fnmsub)을 실행한다. 또한, 도 24의 좌측 절반부는, 미사용 비트 rd[6]= 1 또한 미사용 비트 rs3[6]= 0인 경우의, 4종류의 연산 조합을 도시하고, 도 24의 우측 절반부는, 미사용 비트 rd[6]= 1 또한 미사용 비트 rs3[6]= 1인 경우의, 4종류의 연산 조합을 나타내고 있다. 이 도 24에 도시하는 연산 조합에서는, 미사용 비트 rd[6]= 1로 함으로써 확장 연산기(12e)가 통상 연산기(12b)와는 상이한 연산(fnmsub)을 실행하도록 전환되고 있는 것 이외에는, 도 23에 도시하는 연산 조합과 동일하기 때문에, 도 24에 대한 상세한 설명은 생략한다. Fig. 24 shows eight types of combinations of operations when the instruction type code opcode [3: 0] = 0100 and when unused bits (rd [6] = 1). At this time, the
여기서, 도 25를 참조하면서, 제3 미사용 비트 이용 형태 채용 시의 도 1에 도시하는 연산 장치(1)에 있어서의 생성부(30)의 구체적인 실현예에 대해 설명한다. 도 25에 도시하는 생성부(30)는, 4개의 논리곱 회로(AND 게이트)(31, 32, 33, 34)와, 2개의 배타적 논리합 회로(EOR 게이트)(35, 36)와, 반전 회로(NOT게이트, 인버터)(31a, 32a, 34a, 36a)를 구비하여 구성되고 있다. 또, 이 생성부(30)는, 명령 종별 코드의 opcode[2]에 의해, 도 3∼도 5를 참조하면서 전술한 비SIMD 방식에도 대응 가능하게 되어 있다. 즉, opcode[2]= 1인 경우, 도 19∼도 24를 참조하면서 설명한 제3 이용형태가 채용되는 한편, opcode[2]= 0인 경우, 도 3∼도 5를 참조하면서 비SIMD 방식이 채용된다. Here, with reference to FIG. 25, the specific implementation example of the generation |
논리곱 회로(31)는, rd[6]과 opcode[2]의 반전값과의 논리곱을 산출하여, 레지스터 번호 지시(b_rd[6])로서 출력한다. 논리곱 회로(31)에 입력되는 opcode[2]의 반전값은, 반전 회로(31a)에 의해 생성·출력된다. 즉, opcode[2]= 0이고 비SIMD 방식이 채용된 경우, opcode[2]의 반전값 1이 논리곱 회로(31)에 입력되어, rd[6]의 값이 b_rd[6]로서 출력된다. 한편, opcode[2]= 1이고 제3 이용형태가 채용된 경우, opcode[2]의 반전값 0이 논리곱 회로(31)에 입력되어, b_rd[6]이 0에 고정된다. The AND
논리곱 회로(32)는, rs3[6]과 opcode[2]의 반전값과의 논리곱을 산출하여, 레지스터 번호 지시(b_rs3[6])로서 출력한다. 논리곱 회로(31)에 입력되는 opcode[2]의 반전값은, 반전 회로(32a)에 의해 산출된다. 즉, opcode[2]= 0이고 비SIMD 방식이 채용된 경우, opcode[2]의 반전값 1이 논리곱 회로(32)에 입력되며, rs6[6]의 값이 b_rs3[6]로서 출력된다. 한편, opcode[2]= 1이고 제3 이용형태가 채용된 경우, opcode[2]의 반전값 0이 논리곱 회로(31)에 입력되어, b_rs3[6]이 0에 고정된다. The
배타적 논리합 회로(36)는, rs3[6]과 rs1[6]의 반전값과의 배타적 논리합을 산출하여 출력한다. 배타적 논리합 회로(36)에 입력되는 rs1[6]의 반전값은, 반전 회로(36a)에 의해 산출된다. 이 배타적 논리합 회로(36)에 의해 산출되는 배타적 논리합은, 표 15, 도 21, 도 22(d)를 참조하면서 설명한 값(~rs1[6]^ rs3[6])이다.The exclusive OR
논리곱 회로(33)는, 배타적 논리합 회로(36)의 출력과 opcode[2]와의 논리곱을 산출하여, 레지스터 번호 지시(e_rs1[6])로서 출력한다. 즉, opcode[2]= 0이고 비SIMD 방식이 채용된 경우, e_rs1[6]이 0에 고정된다. 한편, opcode[2]= 1이고 제3 이용형태가 채용된 경우, ~rs1[6]^ rs3[6]이 e_rs1[6]로서 출력된다[도 22(d) 참조]. The AND
논리곱 회로(34)는, rs2[6]의 반전값과 opcode[2]와의 논리곱을 산출하여, 레지스터 번호 지시(e_rs2[6])로서 출력한다. rs2[6]의 반전값(~rs2[6])는, 반전 회로(34a)에 의해 산출된다. 즉, opcode[2]= 0이고 비SIMD 방식이 채용된 경우, e_rs2[6]이 0에 고정된다. 한편, opcode[2]= 1이고 제3 이용형태가 채용된 경우, ~rs2[6]이 e_rs2[6]로서 출력된다[도 22(d) 참조]. The AND
배타적 논리합 회로(35)는, rd[6]과 opcode[1]과의 배타적 논리합을 산출하여, 연산 코드(e_op[1])로서 출력한다. 또한, 도 25에 도시하는 생성부(30)는, opcode[1:0]을 연산 코드(b_op[1:0])로서 그대로 출력하고, opcode[0]를 연산 코드(e_op[0])로서 그대로 출력한다. 이에 따라, 생성부(25)는, 표 14와 같이, 연산 코드(b_op[1:0], e_op[1:0])를 출력한다. The exclusive-
그리고, 도 25에 도시하는 생성부(30)는, 레지스터 기록 제어 신호(b_we)로서 1을 고정적으로 출력하고, opcode[2]를 레지스터 기록 제어 신호(e_w) 및 레지스터 번호 지정(e_rd[6], e_rs3[6])으로서 그대로 출력한다. 또한, 생성부(30)는, rd[5:0], rs1[6:0], rs2[6:0], rs3[5:0]을 각각 레지스터 번호 지정(b_rd[5:0], b_rs1[6:0], b_rs2[6:0], b_rs3[5:0])으로서 출력하고, rd[5:0], rs1[5:0], rs2[5:0], rs3[5:0]을 각각 레지스터 번호 지정(e_rd[5:0], e_rs1[5:0], e_rs2[5:0], e_rs3[5:0])으로서 출력한다. The
이에 따라, 도 25에 도시하는 생성부(30)는, opcode[2]= 1이고 제3 이용형태가 채용된 경우, 명령 코드 발행부(20)로부터의 명령 코드(opcode[1:0], rd[6:0], rs1[6:0], rs2[6:0], rs3[6:0])를, 표 14, 표 15, 도 21, 도 22를 참조하면서 설명했던, 명령 세트(b_we, e_we, b_rd[6:0], b_rs1[6:0], b_rs2[6:0], b_rs3[6:0], e_rd[6:0], e_rs1[6:0], e_rs2[6:0], e_rs3[6:0], b_op[1:0], e_op[1:0])로 변환하여 출력한다. 또한, opcode[2]= 0이고 비SIMD 방식이 채용된 경우, 명령 코드 발행부(20)로부터의 명령 코드를, 도 4 및 도 5를 참조하면서 설명한 명령 세트로 변환하여 출력한다. Accordingly, the
[8] 본 실시형태의 효과[8] Effects of the Embodiment
이와 같이, 본 발명의 일 실시형태로서의 연산 장치(1) 및 연산 방법에 따르면, 명령 코드 발행부(설정부)(20) 및 생성부(30)의 기능을 이용함으로써 하나의 명령에 있어서의 하나 이상의 미사용 비트(rd[6], rs1[6], rs2[6], rs3[6])를 이용하여 통상 처리와는 상이한 확장 처리의 실행 지시를 행할 수 있다. 이에 의해, 예컨대 SIMD 부동 소수점 곱합 연산 등에 있어서의 각종 연산 조합을 적은 명령 종별 코드수로 실현할 수 있다. 따라서, 전술한 바와 같이, 예컨대, 4개의 명령에 의해 행하고 있었던 복소수 행렬곱 연산 등의 복잡한 연산을, 2개의 명령에 의해 실행하는 것이 가능하게 되어, 작업 처리량을 배증시킬 수 있다. As described above, according to the
또한, 연산 장치(1)에서는, 통상 연산기(12b)에 대한 연산 종별 및 입력 레지스터 번호 지시와, 확장 연산기(12e)에 대한 연산 종별 및 입력 레지스터 번호 지시를 독립적으로 입력하고 있다. 이 때문에, 통상 연산기(12b)와 확장 연산기(12e)에 있어서, 상이한 입력값(레지스터값)이나 상이한 연산 종별에 의한 연산을 실행시킬 수 있게 된다. 따라서, 연산 장치(1)에서는, 미사용 비트(rd[6], rs1[6], rs2[6], rs3[6])를 이용함으로써, 전술한 바와 같은 복소수 행렬곱 연산 뿐만 아니라, 도 12∼도 15, 도 23, 도 24를 참조하면서 설명한 각종 연산 조합 패 턴에 의한 연산을 용이하게 실행할 수 있다. In addition, the
[9] 그 외[9] others
또, 본 발명은 전술한 실시형태에 한정되지 않고, 본 발명의 취지를 일탈하지 않는 범위에서 여러 가지 변형하여 실시할 수 있다. In addition, this invention is not limited to embodiment mentioned above, It can variously deform and implement in the range which does not deviate from the meaning of this invention.
예컨대, 전술한 실시형태에서는, 연산기로서 통상 연산기와 확장 연산기의 2개를 구비한 경우에 대해 설명했지만, 본 발명은, 여기에 한정되지 않고, 3이상의 연산기를 구비한 경우에도 마찬가지로 적용되어, 전술한 실시형태와 동일한 작용 효과를 얻을 수 있다. For example, in the above-described embodiment, the case in which two calculators are normally provided as the calculator and the extended calculator is described. However, the present invention is not limited thereto, and the present invention is similarly applied to the case where three or more calculators are provided. The same effect as that of one embodiment can be obtained.
또한, 미사용 비트로서, SIMD 방식을 채용함으로써 미사용이 된 비트를 이용하고 있지만, 본 발명은, 여기에 한정되지 않고, 각종 방식의 채용 등에 의해 생긴 미사용 비트에 상기 확장 처리 정보를 설정함으로써도, 전술한 실시형태와 동일한 작용 효과를 얻을 수 있다. In addition, although the bit unused by employing the SIMD method is used as the unused bit, the present invention is not limited thereto, and the above-described information is also set by setting the extended processing information in the unused bit generated by the adoption of various methods. The same effect as that of one embodiment can be obtained.
또한, 전술한 설정부(20)(설정 단계) 및 생성부(30)(생성 단계)로서의 기능(전부 혹은 일부의 기능)은, 컴퓨터(CPU, 정보 처리 장치, 각종 단말을 포함함)가 소정의 애플리케이션 프로그램을 실행함으로써 실현된다. In addition, the functions (all or part of the functions) as the setting unit 20 (setting step) and the generation unit 30 (creation step) described above are predetermined by a computer (including a CPU, an information processing apparatus, and various terminals). This is realized by executing the application program.
그 프로그램은, 예컨대 플렉서블 디스크, CD(CD-ROM, CD-R, CD-RW 등), DVD(DVD-ROM, DVD-RAM, DVD-R, DVD-RW, DVD+ R, DVD+ RW 등) 등의 컴퓨터 판독 가능한 기록 매체에 기록된 형태로 제공된다. 이 경우, 컴퓨터는 그 기록 매체로부터 프로그램을 판독하여 내부 기억 장치 또는 외부 기억 장치에 전송하고 저장하여 이용한다. 또한, 그 프로그램을, 예컨대 자기 디스크, 광 디스크, 광자기 디스크 등의 기억 장치(기록 매체)에 기록해 두고, 그 기억 장치로부터 통신 회선을 통해 컴퓨터에 제공하도록 하여도 좋다. The program is, for example, a flexible disk, a CD (CD-ROM, CD-R, CD-RW, etc.), a DVD (DVD-ROM, DVD-RAM, DVD-R, DVD-RW, DVD + R, DVD + RW, etc.) and the like. In the form of a computer readable recording medium. In this case, the computer reads the program from the recording medium, transfers it to an internal storage device or an external storage device, and stores and uses the program. The program may be recorded in a storage device (recording medium) such as a magnetic disk, an optical disk, a magneto-optical disk, or the like, and the program may be provided to the computer from the storage device through a communication line.
여기서, 컴퓨터란, 하드웨어와 OS(Operating System)를 포함하는 개념이고, OS의 제어 하에서 동작하는 하드웨어를 의미하고 있다. 또한, OS가 불필요하고 애플리케이션 프로그램 단독으로 하드웨어를 동작시키는 경우에는, 그 하드웨어 자체가 컴퓨터에 상당한다. 하드웨어는, 적어도, CPU 등의 마이크로 프로세서와, 기록 매체에 기록된 컴퓨터 프로그램을 판독하기 위한 수단을 구비하고 있다. 상기 프로그램은, 전술한 바와 같이 컴퓨터에, 설정부(20)(설정 단계) 및 생성부(30)(생성 단계)로서의 기능을 실현시키는 프로그램 코드를 포함하고 있다. 또한, 그 기능의 일부는, 애플리케이션 프로그램이 아니라 OS에 의해 실현되어도 좋다. The computer is a concept including hardware and an operating system (OS), and refers to hardware operating under the control of the OS. In addition, when the OS is unnecessary and the hardware is operated by the application program alone, the hardware itself corresponds to the computer. The hardware includes at least a microprocessor such as a CPU and means for reading a computer program recorded on a recording medium. As described above, the program includes a program code for realizing the functions of the setting unit 20 (setting step) and the generating unit 30 (generation step) in the computer. In addition, some of the functions may be realized by the OS, not the application program.
또한, 본 실시형태에 있어서의 기록 매체로서는, 전술한 플렉서블 디스크, CD, DVD, 자기 디스크, 광 디스크, 광자기 디스크 외에, IC 카드, ROM 카트리지, 자기 테이프, 펀치 카드(punch card), 컴퓨터의 내부 기억 장치(RAM이나 ROM 등의 메모리), 외부 기억 장치 등이나, 바코드 등의 부호가 인쇄된 인쇄물 등의, 컴퓨터판독 가능한 여러 가지의 매체를 이용할 수도 있다. In addition, as the recording medium in the present embodiment, in addition to the above-described flexible disk, CD, DVD, magnetic disk, optical disk, magneto-optical disk, IC card, ROM cartridge, magnetic tape, punch card, computer Various computer-readable media, such as an internal storage device (memory such as RAM or ROM), an external storage device, or a printed matter printed with a code such as a barcode, can also be used.
[10] 부기 [10] bookkeeping
이상의 제1∼제4 실시형태를 포함하는 실시형태에 대해, 또한 이하의 부기를 개시한다. About the embodiment including the above first to fourth embodiments, the following supplementary notes are also disclosed.
(부기 1)(Book 1)
연산 대상의 데이터를 저장하는 레지스터와, 상기 레지스터로부터 판독된 데 이터에 기초하는 연산을 실행하는 하나 이상의 연산기를 가지고, 상기 레지스터로부터 판독되어야 하는 데이터 및 상기 연산기에 의해 실행되어야 하는 연산의 종별을 지시하는, 복수 비트로 이루어지는 하나의 명령을 받고, 상기 연산기는, 상기 하나의 명령에 의해 지시된 데이터에 기초하여, 상기 하나의 명령에 의해 지시된 종별의 연산을 실행하는 연산 장치로서, A register that stores data to be operated on, and one or more calculators that perform an operation based on data read from the registers, indicating a type of data to be read from the registers and an operation to be performed by the calculator. A computing device that receives a single command composed of a plurality of bits, and executes the type of operation indicated by the one command based on the data indicated by the one command,
상기 하나의 명령에 있어서의 하나 이상의 미사용 비트에, 상기 하나의 명령에 의해 실행되는 통상 처리와는 상이한 확장 처리의 실행 지시를 상기 레지스터 및 상기 연산기 중 적어도 한쪽에 대해 행하는 확장 지시 정보를 설정하는 설정부를 갖는 것을 특징으로 하는, 연산 장치. Setting to set one or more unused bits in the one instruction to execute extended instruction information for at least one of the register and the operator, the execution instruction of an extension process being different from the normal processing executed by the one instruction. An arithmetic unit characterized by having a part.
(부기 2)(Book 2)
상기 설정부에 의해 상기 미사용 비트에 설정된 상기 확장 지시 정보와 상기 하나의 명령에 있어서의 상기 미사용 비트 이외의 비트에 설정된 정보에 기초하여, 상기 레지스터 및 상기 연산기 중 적어도 한쪽에 대해 상기 확장 처리의 실행 지시를 행하는 확장 명령을 생성하여 상기 하나의 명령으로서 출력하는 생성부를 더 갖는 것을 특징으로 하는, 부기 1에 기재한 연산 장치. Execution of the expansion processing for at least one of the register and the calculator based on the expansion instruction information set in the unused bit by the setting unit and information set in bits other than the unused bit in the one instruction. The computing device according to
(부기 3)(Supplementary Note 3)
상기 미사용 비트는, 상기 레지스터의 영역을 분할하여 사용하는 둘 이상의 상기 연산기를 구비하고 상기 하나의 명령으로 복수의 데이터 스트림을 처리하는 SIMD 방식을 채용함으로써 상기 통상 처리 시에는 미사용이 된 비트인 것을 특징으로 하는, 부기 1 또는 부기 2에 기재한 연산 장치. The unused bit is a bit that is not used during the normal processing by adopting a SIMD method for processing a plurality of data streams with the one instruction and having two or more the above-mentioned operators for dividing the register area. The arithmetic unit as described in the
(부기 4)(Appendix 4)
상기 둘 이상의 연산기는, 각각, 상기 하나의 명령에 포함되는 연산 종별 코드에 따라 연산의 종별을 전환할 수 있는 다입력 일출력의 곱합 연산기이고, The two or more operators are multi-input multi-output operators that can switch the type of operation according to the operation type code included in the one instruction, respectively,
상기 미사용 비트는, 상기 하나의 명령에 포함되는, 각 곱합 연산기로 출력되어야 하는 상기 레지스터에 있어서의 각 데이터를 지시하는 레지스터 번호 지시 필드의 최상위 비트인 것을 특징으로 하는, 부기 3에 기재한 연산 장치. The unused bit is the most significant bit of the register number indicating field indicating each data in the register to be output to each multiplication operator contained in the one instruction. .
(부기 5)(Note 5)
상기 둘 이상의 연산기는, 각각, 상기 하나의 명령에 포함되는 연산 종별 코드에 따라 연산의 종별을 전환할 수 있는 다입력 일출력의 곱합 연산기이고, The two or more operators are multi-input multi-output operators that can switch the type of operation according to the operation type code included in the one instruction, respectively,
상기 미사용 비트는, 상기 하나의 명령에 포함되는, 각 곱합 연산기에 의한 연산 결과의, 상기 레지스터에 있어서의 저장처를 지시하는 레지스터 번호 지시 필드의 최상위 비트인 것을 특징으로 하는, 부기 3 또는 부기 4에 기재한 연산 장치. The unused bit is the most significant bit of the register number indicating field indicating a storage destination in the register of the result of the operation by each multiplication operator included in the one instruction. The computing device described in the above.
(부기 6)(Note 6)
상기 확장 지시 정보는, 각 곱합 연산기로 출력되어야 하는 데이터를, 각 곱합 연산기에 대응하는 상기 레지스터의 영역 이외의 영역에서의 데이터로 전환하는 지시를 상기 레지스터에 대해 행하는 것을 특징으로 하는, 부기 4 또는 부기 5에 기재한 연산 장치. The extended instruction information is an instruction for changing the data to be output to each multiplication operator to data in an area other than the area of the register corresponding to each multiplication operator. The computing device described in
(부기 7)(Appendix 7)
상기 확장 지시 정보는, 각 곱합 연산기에 의한 연산의 종별을 전환하는 지시를 각 곱합 연산기에 대해 행하는 것을 특징으로 하는, 부기 4 내지 부기 6 중 어느 하나에 기재한 연산 장치. The arithmetic unit according to any one of appendices 4 to 6, wherein the extended instruction information provides an instruction for switching the type of operation by each multiplication operator to each multiplication operator.
(부기 8)(Appendix 8)
연산 대상의 데이터를 저장하는 레지스터와, 상기 레지스터로부터 판독된 데이터에 기초하는 연산을 실행하는 하나 이상의 연산기를 갖는 연산 장치에 있어서, 상기 레지스터로부터 판독되어야 하는 데이터 및 상기 연산기에 의해 실행되어야 하는 연산의 종별을 지시하는, 복수 비트로 이루어지는 하나의 명령을 받고, 상기 연산기는, 상기 하나의 명령에 의해 지시된 데이터에 기초하여, 상기 하나의 명령에 의해 지시된 종별의 연산을 실행하는 연산 방법으로서, An arithmetic apparatus having a register for storing data of arithmetic object and at least one arithmetic operator which executes an operation based on the data read from the register, the arithmetic unit of the data to be read from the register and the arithmetic operation to be performed by the arithmetic operator. Receiving an instruction consisting of a plurality of bits indicating a type, the calculator is an operation method for performing the operation of the type indicated by the one instruction based on the data indicated by the one instruction,
상기 하나의 명령에 있어서의 하나 이상의 미사용 비트에, 상기 하나의 명령에 의해 실행되는 통상 처리와는 상이한 확장 처리의 실행 지시를 상기 레지스터 및 상기 연산기 중 적어도 한쪽에 대해 행하는 확장 지시 정보를 설정하는 설정 단계를 포함하는 것을 특징으로 하는 연산 방법. Setting to set one or more unused bits in the one instruction to execute extended instruction information for at least one of the register and the operator, the execution instruction of an extension process being different from the normal processing executed by the one instruction. And a step of computing.
(부기 9)(Appendix 9)
상기 설정 단계에 있어서 상기 미사용 비트에 설정된 상기 확장 지시 정보와 상기 하나의 명령에 있어서의 상기 미사용 비트 이외의 비트에 설정된 정보에 기초하여, 상기 레지스터 및 상기 연산기 중 적어도 한쪽에 대해 상기 확장 처리의 실행 지시를 행하는 확장 명령을 생성하여 상기 하나의 명령으로서 출력하는 생성 단계를 더 포함하는 것을 특징으로 하는, 부기 8에 기재한 연산 방법. Execution of the expansion processing for at least one of the register and the calculator based on the expansion instruction information set in the unused bit in the setting step and information set in bits other than the unused bit in the one instruction. The generation method according to
(부기 10)(Book 10)
상기 미사용 비트는, 상기 레지스터의 영역을 분할하여 사용하는 둘 이상의 상기 연산기를 구비하고 상기 하나의 명령으로 복수의 데이터스트림을 처리하는 SIMD 방식을 채용함으로써 상기 통상 처리 시에는 미사용이 된 비트인 것을 특징으로 하는 부기 8 또는 부기 9에 기재한 연산 방법. The unused bit is a bit that is not used during the normal processing by adopting a SIMD method for processing a plurality of data streams with the one instruction and having two or more the above-mentioned operators for dividing the register area. The calculation method described in
(부기 11)(Note 11)
상기 둘 이상의 연산기는, 각각, 상기 하나의 명령에 포함되는 연산 종별 코드에 따라 연산의 종별을 전환할 수 있는 다입력 일출력의 곱합 연산기이고, The two or more operators are multi-input multi-output operators that can switch the type of operation according to the operation type code included in the one instruction, respectively,
상기 미사용 비트는, 상기 하나의 명령에 포함되는, 각 곱합 연산기로 출력되어야 하는 상기 레지스터에 있어서의 각 데이터를 지시하는 레지스터 번호 지시 필드의 최상위 비트인 것을 특징으로 하는 부기 10에 기재한 연산 방법. The unused bit is the most significant bit of the register number indicating field indicating each data in the register to be output to each multiplication operator contained in the one instruction.
(부기 12)(Appendix 12)
상기 둘 이상의 연산기는, 각각, 상기 하나의 명령에 포함되는 연산 종별 코드에 따라 연산의 종별을 전환할 수 있는 다입력 일출력의 곱합 연산기이고, The two or more operators are multi-input multi-output operators that can switch the type of operation according to the operation type code included in the one instruction, respectively,
상기 미사용 비트는, 상기 하나의 명령에 포함되는, 각 곱합 연산기에 의한 연산 결과의, 상기 레지스터에 있어서의 저장처를 지시하는 레지스터 번호 지시 필드의 최상위 비트인 것을 특징으로 하는, 부기 10 또는 부기 11에 기재한 연산 방법. The unused bit is the most significant bit of the register number indicating field indicating a storage destination in the register of the result of the operation by each multiplication operator included in the one instruction. The calculation method described in.
(부기 13)(Appendix 13)
상기 확장 지시 정보는, 각 곱합 연산기로 출력되어야 하는 데이터를, 각 곱합 연산기에 대응하는 상기 레지스터의 영역 이외의 영역에서의 데이터로 전환하는 지시를 상기 레지스터에 대해 행하는 것을 특징으로 하는, 부기 11 또는 부기 12에 기재한 연산 방법. The extended instruction information is an instruction to convert the data to be output to each multiplication operator to data in an area other than the area of the register corresponding to each multiplication operator. The calculation method described in
(부기 14)(Book 14)
상기 확장 지시 정보는, 각 곱합 연산기에 의한 연산의 종별을 전환하는 지시를 각 곱합 연산기에 대해 행하는 것을 특징으로 하는, 부기 11 내지 부기 13 중 어느 하나에 기재한 연산 방법. The extended instruction information is any one of
도 1은 본 발명의 일 실시형태로서의 연산 장치의 구성을 도시하는 블록도. BRIEF DESCRIPTION OF THE DRAWINGS The block diagram which shows the structure of the arithmetic unit as one Embodiment of this invention.
도 2는 도 1에 도시하는 연산 장치에 있어서의 연산부의 기본적인 동작을 설명하기 위한 흐름도. FIG. 2 is a flowchart for explaining the basic operation of the calculation unit in the calculation device shown in FIG. 1. FIG.
도 3은 비SIMD 채용 시의 도 1에 도시하는 연산 장치에 있어서의 연산부의 동작을 간단하게 설명하기 위한 도면. FIG. 3 is a diagram for briefly explaining the operation of the computing unit in the computing device shown in FIG. 1 when employing a non-SIMD. FIG.
도 4는 비SIMD 채용 시의 도 1에 도시하는 연산 장치에 있어서의 명령 코드 발행부 및 생성부의 동작을 설명하기 위한 도면. 4 is a view for explaining the operation of an instruction code issuing unit and a generating unit in the arithmetic unit shown in FIG. 1 when employing a non-SIMD.
도 5(a)∼도 5(d)는, 각각, 비SIMD 채용 시의 도 1에 도시하는 연산 장치에 있어서의 명령 코드, 연산 코드, 레지스터 기록 신호 및 레지스터 번호 지정(최상위 비트만)을 구체적으로 도시하는 도면. 5 (a) to 5 (d) respectively specify the instruction code, operation code, register write signal, and register number designation (only the most significant bit) in the arithmetic unit shown in FIG. 1 when non-SIMD is employed. Drawings shown by.
도 6은 SIMD 채용 시의 도 1에 도시하는 연산 장치에 있어서의 연산부의 동작을 간단하게 설명하기 위한 도면. FIG. 6 is a diagram for briefly explaining the operation of the computing unit in the computing device shown in FIG. 1 when employing a SIMD. FIG.
도 7은 SIMD 채용 시의 도 1에 도시하는 연산 장치에 있어서의 명령 코드 발행부 및 생성부의 동작을 설명하기 위한 도면. FIG. 7 is a view for explaining the operation of an instruction code issuing unit and a generating unit in the arithmetic unit shown in FIG. 1 when employing a SIMD. FIG.
도 8(a)∼도 8(d)는, 각각, SIMD 채용 시의 도 1에 도시하는 연산 장치에 있어서의 명령 코드, 연산 코드, 레지스터 기록 신호 및 레지스터 번호 지정(최상위 비트만)을 구체적으로 도시하는 도면. 8A to 8D specifically show the instruction code, the operation code, the register write signal, and the register number designation (only the most significant bit) in the arithmetic unit shown in FIG. 1 when employing the SIMD, respectively. The figure which shows.
도 9는 제1 미사용 비트 이용 형태 채용 시의 도 1에 도시하는 연산 장치에 있어서의 연산부의 동작을 간단하게 설명하기 위한 도면. FIG. 9 is a diagram for briefly explaining the operation of the calculation unit in the arithmetic unit shown in FIG. 1 when the first unused bit use form is employed. FIG.
도 10은 제1 미사용 비트 이용 형태 채용 시의 도 1에 도시하는 연산 장치에 있어서의 명령 코드 발행부(설정부) 및 생성부의 동작을 설명하기 위한 도면. FIG. 10 is a view for explaining the operation of an instruction code issuing unit (setting unit) and a generating unit in the arithmetic unit shown in FIG. 1 when the first unused bit use form is employed. FIG.
도 11(a)∼도 11(d)는, 각각, 제1 미사용 비트 이용 형태 채용 시의 도 1에 도시하는 연산 장치에 있어서의 명령 코드, 연산 코드, 레지스터 기록 신호 및 레지스터 번호 지정(최상위 비트만)을 구체적으로 도시하는 도면. 11 (a) to 11 (d) designate command codes, arithmetic codes, register write signals, and register numbers in the arithmetic unit shown in FIG. 1 when employing the first unused bit usage form (highest order bits). Only).
도 12는 제1 미사용 비트 이용 형태 채용 시의 도 1에 도시하는 연산 장치에 있어서의 연산부에 의한 연산 조합의 구체예를 도시하는 도면. FIG. 12 is a diagram showing a specific example of a combination of calculations by an arithmetic unit in the arithmetic unit shown in FIG. 1 when a first unused bit use form is employed. FIG.
도 13은 제1 미사용 비트 이용 형태 채용 시의 도 1에 도시하는 연산 장치에 있어서의 연산부에 의한 연산 조합의 구체예를 도시하는 도면. Fig. 13 is a diagram showing a specific example of a combination of calculations by a calculation unit in the arithmetic unit shown in Fig. 1 when the first unused bit use form is adopted.
도 14는 제1 미사용 비트 이용 형태 채용 시의 도 1에 도시하는 연산 장치에 있어서의 연산부에 의한 연산 조합의 구체예를 도시하는 도면. FIG. 14 is a diagram showing a specific example of a combination of calculations by a calculation unit in the arithmetic unit shown in FIG. 1 when the first unused bit use mode is adopted. FIG.
도 15는 제1 미사용 비트 이용 형태 채용 시의 도 1에 도시하는 연산 장치에 있어서의 연산부에 의한 연산 조합의 구체예를 도시하는 도면. Fig. 15 is a diagram showing a specific example of the calculation combination by the calculation unit in the arithmetic unit shown in Fig. 1 when the first unused bit use form is adopted.
도 16은 제2 미사용 비트 이용 형태 채용 시의 도 1에 도시하는 연산 장치에 있어서의 연산부의 동작을 간단하게 설명하기 위한 도면. FIG. 16 is a diagram for easily explaining the operation of the calculation unit in the arithmetic unit shown in FIG. 1 when the second unused bit use form is employed. FIG.
도 17은 제2 미사용 비트 이용 형태 채용 시의 도 1에 도시하는 연산 장치에 있어서의 설정부 및 생성부의 동작을 설명하기 위한 도면. FIG. 17 is a view for explaining the operation of the setting unit and the generation unit in the arithmetic unit shown in FIG. 1 when the second unused bit use form is employed. FIG.
도 18(a)∼도 18(d)는, 각각, 제2 미사용 비트 이용 형태 채용 시의 도 1에 도시하는 연산 장치에 있어서의 명령 코드, 연산 코드, 레지스터 기록 신호 및 레지스터 번호 지정(최상위 비트만)을 구체적으로 도시하는 도면. 18A to 18D show the instruction code, the operation code, the register write signal, and the register number (highest bit) in the arithmetic unit shown in FIG. 1 when the second unused bit use form is adopted. Only).
도 19는 제3 미사용 비트 이용 형태 채용 시의 도 1에 도시하는 연산 장치에 있어서의 연산부의 동작을 간단하게 설명하기 위한 도면. FIG. 19 is a diagram for briefly explaining the operation of the calculation unit in the arithmetic unit shown in FIG. 1 when the third unused bit use form is employed. FIG.
도 20은 제3 미사용 비트 이용 형태 채용 시의 도 1에 도시하는 연산 장치에 있어서의 연산부의 동작을 간단하게 설명하기 위한 도면. FIG. 20 is a diagram for briefly explaining the operation of the calculation unit in the arithmetic unit shown in FIG. 1 when the third unused bit use form is employed. FIG.
도 21은 제2 미사용 비트 이용 형태 채용 시의 도 1에 도시하는 연산 장치에 있어서의 명령 코드 발행부(설정부) 및 생성부의 동작을 설명하기 위한 도면. FIG. 21 is a view for explaining the operation of an instruction code issuing unit (setting unit) and a generating unit in the arithmetic unit shown in FIG. 1 when the second unused bit use form is employed. FIG.
도 22(a)∼도 22(d)는, 각각, 제3 미사용 비트 이용 형태 채용 시의 도 1에 도시하는 연산 장치에 있어서의 명령 코드, 연산 코드, 레지스터 기록 신호 및 레지스터 번호 지정(최상위 비트만)을 구체적으로 도시하는 도면. 22A to 22D show an instruction code, an operation code, a register write signal, and a register number designation (highest bit) in the arithmetic unit shown in FIG. 1 when the third unused bit use form is adopted, respectively. Only).
도 23은 제3 미사용 비트 이용 형태 채용 시의 도 1에 도시하는 연산 장치에 있어서의 연산부에 의한 연산 조합의 구체예를 도시하는 도면. Fig. 23 is a diagram showing a specific example of calculation combination by the calculation unit in the arithmetic unit shown in Fig. 1 when employing the third unused bit usage form.
도 24는 제3 미사용 비트 이용 형태 채용 시의 도 1에 도시하는 연산 장치에 있어서의 연산부에 의한 연산 조합의 구체예를 도시하는 도면. Fig. 24 is a diagram showing a specific example of a combination of calculations by a calculation unit in the arithmetic unit shown in Fig. 1 when employing a third unused bit use form.
도 25는 제3 미사용 비트 이용 형태 채용 시의 도 1에 도시하는 연산 장치에 있어서의 생성부의 구체적인 실현예를 도시하는 회로도. FIG. 25 is a circuit diagram showing a concrete implementation example of a generation unit in the arithmetic unit shown in FIG. 1 when a third unused bit use form is employed. FIG.
<도면의 주요 부분에 대한 부호의 설명><Description of the symbols for the main parts of the drawings>
1: 연산 장치 10: 연산부1: arithmetic unit 10: arithmetic unit
11: 레지스터11: register
12b: 통상 부동 소수점 곱합 연산기(통상 연산기, 연산기)12b: Normal floating point multiply operators (normal operators, operators)
12e: 확장 부동 소수점 곱합 연산기(확장 연산기, 연산기)12e: Extended Floating Point Multiply Operators (Extended Operators, Operators)
20: 명령 코드 발행부(설정부) 30: 생성부20: command code issuing unit (setting unit) 30: generating unit
31, 32, 33, 34: 논리곱 회로(AND 게이트)31, 32, 33, 34: AND circuit (AND gate)
35, 36: 배타적 논리합 회로(EOR 게이트)35, 36: exclusive OR circuit (EOR gate)
31a, 32a, 34a, 36a: 반전 회로(NOT 게이트, 인버터)31a, 32a, 34a, 36a: inversion circuit (NOT gate, inverter)
Claims (10)
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2008073864A JP5481793B2 (en) | 2008-03-21 | 2008-03-21 | Arithmetic processing device and method of controlling the same |
JPJP-P-2008-073864 | 2008-03-21 |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20090101113A KR20090101113A (en) | 2009-09-24 |
KR101028428B1 true KR101028428B1 (en) | 2011-04-14 |
Family
ID=40785594
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020090023506A KR101028428B1 (en) | 2008-03-21 | 2009-03-19 | Arithmetic operating apparatus and method for performing arithmetic operation |
Country Status (5)
Country | Link |
---|---|
US (1) | US9513914B2 (en) |
EP (1) | EP2104034B1 (en) |
JP (1) | JP5481793B2 (en) |
KR (1) | KR101028428B1 (en) |
CN (1) | CN101539851B (en) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2011160353A (en) * | 2010-02-03 | 2011-08-18 | Nec Access Technica Ltd | Communication system, communication device, and communication method |
GB2486739B (en) * | 2010-12-24 | 2018-09-19 | Qualcomm Technologies Int Ltd | Instruction execution |
JP6307975B2 (en) * | 2014-03-28 | 2018-04-11 | 富士通株式会社 | Arithmetic processing device and control method of arithmetic processing device |
CN106485318B (en) * | 2015-10-08 | 2019-08-30 | 上海兆芯集成电路有限公司 | With mixing coprocessor/execution unit neural network unit processor |
CN112214244A (en) * | 2016-08-05 | 2021-01-12 | 中科寒武纪科技股份有限公司 | Arithmetic device and operation method thereof |
CN111930426A (en) * | 2020-08-14 | 2020-11-13 | 西安邮电大学 | Reconfigurable computing dual-mode instruction set architecture and application method thereof |
CN112764810B (en) * | 2021-01-20 | 2022-09-20 | 重庆邮电大学 | Register control SIMD instruction expansion method applied to processor |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH09114664A (en) * | 1995-10-18 | 1997-05-02 | Sharp Corp | Data driven information processor |
WO2000068783A2 (en) * | 1999-05-12 | 2000-11-16 | Analog Devices, Inc. | Digital signal processor computation core |
Family Cites Families (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4761755A (en) * | 1984-07-11 | 1988-08-02 | Prime Computer, Inc. | Data processing system and method having an improved arithmetic unit |
US4807124A (en) * | 1986-09-26 | 1989-02-21 | Performance Semiconductor Corporation | Register addressing system for efficient microroutine sharing and optimization |
EP0483967A3 (en) | 1990-10-29 | 1993-07-21 | Sun Microsystems, Inc. | Apparatus for increasing the number of registers available in a computer processor |
US5509129A (en) * | 1993-11-30 | 1996-04-16 | Guttag; Karl M. | Long instruction word controlling plural independent processor operations |
US6116768A (en) * | 1993-11-30 | 2000-09-12 | Texas Instruments Incorporated | Three input arithmetic logic unit with barrel rotator |
KR100325658B1 (en) | 1995-03-17 | 2002-08-08 | 가부시끼가이샤 히다치 세이사꾸쇼 | Processor |
US5764959A (en) * | 1995-12-20 | 1998-06-09 | Intel Corporation | Adaptive 128-bit floating point load and store instructions for quad-precision compatibility |
EP0798633B1 (en) * | 1996-03-29 | 2005-06-08 | Matsushita Electric Industrial Co., Ltd. | Data processor having a variable number of pipeline stages |
US6230259B1 (en) * | 1997-10-31 | 2001-05-08 | Advanced Micro Devices, Inc. | Transparent extended state save |
US6625724B1 (en) * | 2000-03-28 | 2003-09-23 | Intel Corporation | Method and apparatus to support an expanded register set |
US6877084B1 (en) * | 2000-08-09 | 2005-04-05 | Advanced Micro Devices, Inc. | Central processing unit (CPU) accessing an extended register set in an extended register mode |
JP2003016051A (en) | 2001-06-29 | 2003-01-17 | Nec Corp | Operational processor for complex vector |
US20040193837A1 (en) * | 2003-03-31 | 2004-09-30 | Patrick Devaney | CPU datapaths and local memory that executes either vector or superscalar instructions |
US20040193838A1 (en) * | 2003-03-31 | 2004-09-30 | Patrick Devaney | Vector instructions composed from scalar instructions |
JP4283131B2 (en) | 2004-02-12 | 2009-06-24 | パナソニック株式会社 | Processor and compiling method |
CN100552622C (en) * | 2005-03-31 | 2009-10-21 | 松下电器产业株式会社 | Arithmetic processing apparatus |
US7421566B2 (en) * | 2005-08-12 | 2008-09-02 | International Business Machines Corporation | Implementing instruction set architectures with non-contiguous register file specifiers |
-
2008
- 2008-03-21 JP JP2008073864A patent/JP5481793B2/en active Active
-
2009
- 2009-03-12 US US12/402,603 patent/US9513914B2/en active Active
- 2009-03-19 KR KR1020090023506A patent/KR101028428B1/en active IP Right Grant
- 2009-03-20 CN CN2009101294694A patent/CN101539851B/en active Active
- 2009-03-20 EP EP09155704.1A patent/EP2104034B1/en active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH09114664A (en) * | 1995-10-18 | 1997-05-02 | Sharp Corp | Data driven information processor |
WO2000068783A2 (en) * | 1999-05-12 | 2000-11-16 | Analog Devices, Inc. | Digital signal processor computation core |
Also Published As
Publication number | Publication date |
---|---|
KR20090101113A (en) | 2009-09-24 |
CN101539851A (en) | 2009-09-23 |
CN101539851B (en) | 2013-01-09 |
EP2104034A1 (en) | 2009-09-23 |
EP2104034B1 (en) | 2015-06-10 |
JP2009230375A (en) | 2009-10-08 |
JP5481793B2 (en) | 2014-04-23 |
US20090240926A1 (en) | 2009-09-24 |
US9513914B2 (en) | 2016-12-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR101028428B1 (en) | Arithmetic operating apparatus and method for performing arithmetic operation | |
KR20110100381A (en) | Reconfigurable processor and control method using the same | |
CN107851013B (en) | Data processing apparatus and method | |
JP6920277B2 (en) | Mixed width SIMD operation with even and odd element operations using a pair of registers for a wide data element | |
IL267998B2 (en) | Element by vector operations in a data processing apparatus | |
JPH0667851A (en) | Multiplier provided with overflow detecting function | |
KR20180063542A (en) | Vector processor and control methods thererof | |
JP3753991B2 (en) | Processor, arithmetic instruction processing method and arithmetic control method in processor | |
JP3935678B2 (en) | SIMD product-sum operation method, product-sum operation circuit, and semiconductor integrated circuit device | |
JP2001209670A (en) | High order synthesis method and recording medium used for execution of high order synthesis method | |
JP4502040B2 (en) | SIMD arithmetic unit, arithmetic method of SIMD arithmetic unit, arithmetic processing unit and compiler | |
JP4613992B2 (en) | SIMD arithmetic unit, arithmetic method of SIMD arithmetic unit, arithmetic processing unit and compiler | |
JP2001209664A (en) | High order synthesis method and recording medium used for execution of high order synthesis method | |
US8423748B2 (en) | Register control circuit and register control method | |
JP5813484B2 (en) | VLIW processor, instruction structure and instruction execution method | |
JP7140201B2 (en) | Arithmetic processing device and method of controlling arithmetic processing device | |
JP2013037613A (en) | Arithmetic circuit and arithmetic unit | |
JPS6186839A (en) | Arithmetic processor | |
JP2008003663A (en) | Data processor and processing method | |
JP2007122209A (en) | Three-dimensional graphics drawing device, method therefor and program | |
JP2013210837A (en) | Arithmetic circuit and arithmetic method | |
JPH01185732A (en) | Microprogram branching system | |
JPH01109445A (en) | Register filing device | |
GR20170200090U (en) | Element by vector operations in a data processing apparatus | |
JPH0480675A (en) | Memory ic tester |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination | ||
E902 | Notification of reason for refusal | ||
E701 | Decision to grant or registration of patent right | ||
GRNT | Written decision to grant | ||
FPAY | Annual fee payment |
Payment date: 20140319 Year of fee payment: 4 |
|
FPAY | Annual fee payment |
Payment date: 20160318 Year of fee payment: 6 |
|
FPAY | Annual fee payment |
Payment date: 20170302 Year of fee payment: 7 |