KR101028428B1 - 연산 장치 및 연산 방법 - Google Patents

연산 장치 및 연산 방법 Download PDF

Info

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
Application number
KR1020090023506A
Other languages
English (en)
Other versions
KR20090101113A (ko
Inventor
시게키 이토우
Original Assignee
후지쯔 가부시끼가이샤
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 후지쯔 가부시끼가이샤 filed Critical 후지쯔 가부시끼가이샤
Publication of KR20090101113A publication Critical patent/KR20090101113A/ko
Application granted granted Critical
Publication of KR101028428B1 publication Critical patent/KR101028428B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30181Instruction operation extension or modification
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/16Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods 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/4806Computations with complex numbers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3887Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods 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/483Computations with numbers represented by a non-linear combination of denominational numbers, e.g. rational numbers, logarithmic number system or floating-point numbers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods 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/544Methods 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/5443Sum of products

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Mathematical Optimization (AREA)
  • Mathematical Analysis (AREA)
  • Computational Mathematics (AREA)
  • Pure & Applied Mathematics (AREA)
  • Computing Systems (AREA)
  • Mathematical Physics (AREA)
  • Data Mining & Analysis (AREA)
  • Computer Hardware Design (AREA)
  • Algebra (AREA)
  • Databases & Information Systems (AREA)
  • Executing Machine-Instructions (AREA)
  • Advance Control (AREA)
  • Complex Calculations (AREA)

Abstract

본 발명은, 예컨대 SIMD 부동(浮動) 소수점 곱합 연산 등에 있어서의 각종 연산 조합을 적은 명령 종별 코드수로 실현한다.
연산 장치(1)가, 하나의 명령에 있어서의 하나 이상의 미사용 비트에, 상기 하나의 명령에 의해 실행되는 통상 처리와는 상이한 확장 처리의 실행 지시를 레지스터(11)와 연산기(12b, 12e) 중 적어도 한쪽에 대해 행하는 확장 지시 정보를 설정하는 설정부(20)를 갖는다.

Description

연산 장치 및 연산 방법{ARITHMETIC OPERATING APPARATUS AND METHOD FOR PERFORMING ARITHMETIC OPERATION}
본 발명은, 예컨대 부동 소수점 곱합 연산기를 이용하여 복소수 행렬곱 연산 등의 연산을 행할 때에 이용하기에 적합한 기술에 관한 것이다.
일반적으로, 복소수를 요소로 하는 행렬곱 연산은 하기와 같은 계산식(1)으로 실현된다.
X + Yi← X + Yi + (A + Bi) * (C + Di)
= X + A * C - B * D + (Y + A * D + B * C)i (1)
이 행렬곱 연산을, 하나의 부동 소수점 곱합 연산기를 이용하여 실행할 때에는, 하기 식(1-1)∼(1-4)에 의한 4회의 연산이 실행되게 된다. 즉, 하나의 부동 소수점 곱합 연산기를 이용하여 복소수의 행렬곱 연산을 행하는 경우, 연산기에 대해 4 명령을 발행해야 한다.
X ← X + A * C (1-1)
Y ← Y + A * D (1-2)
X ← X - B * D (1-3)
Y ← Y + B * C (1-4)
한편, 일반적으로, 곱합 연산을 보다 적은 명령수로 효율적으로 실행하는 수법으로서, 예컨대, 하나의 명령으로 복수의 데이터 스트림을 처리하는 SIMD(Single Instruction stream Multiple Data stream) 방식에 의한 곱합 연산이 알려져 있다. 이 SIMD 방식을 채용한 연산 장치에는, 레지스터와, 이 레지스터에 저장된 데이터(레지스터값)에 기초하여 동일한 연산을 행하는 2개의 부동 소수점 곱합 연산기가 구비된다. 이들 2개의 부동 소수점 곱합 연산기는, 각각, 통상 부동 소수점 곱합 연산기(통상 연산기) 및 확장 부동 소수점 곱합 연산기(확장 연산기)라고 불린다.
통상 연산기에는, 레지스터 전반 영역의 지정 레지스터 번호에 있어서의 레지스터값이 연산 대상 데이터로서 입력되고, 확장 연산기에는, 레지스터 후반 영역의 지정 레지스터 번호에 있어서의 레지스터값이 연산 대상 데이터로서 입력된다. 여기서, 레지스터 후반 영역의 지정 레지스터 번호는, 레지스터 전반 영역의 지정 레지스터 번호에 소정 오프셋을 가산한 번호이다. 예컨대, 레지스터 번호의 수가 128이면, 소정 오프셋으로서 64가 설정된다.
이와 같이 구성함으로써, 하나의 명령으로, 레지스터로부터 통상 연산기로 출력되어야 하는 레지스터값을 지정하는 레지스터 번호를 지시하는 것 만으로, 레지스터로부터 확장 연산기로 출력되어야 하는 레지스터값을 지정하는 레지스터 번호도 지시하는 것이 가능하게 된다. 즉, 하나의 명령으로 2개의 연산기에 대한 연산 처리 명령을 행할 수 있어, 종래, 4 명령으로 행하고 있었던 연산 처리를 2 명령으로 행할 수 있어, 작업 처리량을 배증시킬 수 있다.
[특허 문헌 1] 일본 특허 공개 제2003-16051호 공보
그러나, 상기 식(1-1)∼(1-4)에 의한 4회의 연산(즉 4개의 명령)에 의해 실행되는 복소수 행렬곱 연산을, 그대로, 전술한 바와 같이 SIMD 방식을 채용한 연산 장치에 적용하고, 2 명령으로 실행하는 것은 할 수 없다. 이것은, 전술과 같이 통상 연산기가 레지스터 전반 영역을 사용하고 확장 연산기가 레지스터 후반 영역을 사용한다고 하는 레지스터의 제약과, 전술과 같이 통상 연산기와 확장 연산기가 동일한 연산을 행한다고 하는 연산 내용의 제약 때문이다.
본 발명의 목적의 하나는, 예컨대 SIMD 부동 소수점 곱합 연산 등에 있어서의 각종 연산 조합을 적은 명령 종별 코드수로 실현하는 것이다.
또, 상기 목적에 한정되지 않고, 후술하는 발명을 실시하기 위한 최선의 형태에 나타내는 각 구성에 의해 유도되는 작용 효과로서, 종래의 기술에 의해서는 얻어지지 않는 작용 효과를 발휘하는 것도 본 발명의 다른 목적의 하나로서 위치를 부여할 수 있다.
본 연산 장치는, 연산 대상의 데이터를 저장하는 레지스터와, 상기 레지스터로부터 판독된 데이터에 기초하는 연산을 실행하는 하나 이상의 연산기를 갖고 있다. 상기 레지스터로부터 판독되어야 하는 데이터 및 상기 연산기에 의해 실행되어야 하는 연산의 종별을 지시하는, 복수 비트로 이루어지는 하나의 명령을 받고, 상기 연산기가, 상기 하나의 명령에 의해 지시된 데이터에 기초하여, 상기 하나의 명령에 의해 지시된 종별의 연산을 실행한다. 이 연산 장치가, 상기 하나의 명령에 있어서의 하나 이상의 미사용 비트에, 상기 하나의 명령에 의해 실행되는 통상 처리와는 상이한 확장 처리의 실행 지시를 상기 레지스터 및 상기 연산기 중 적어도 한쪽에 대해 행하는 확장 지시 정보를 설정하는 설정부를 갖는다.
또한, 본 연산 방법에서는, 전술한 레지스터 및 연산기를 갖는 연산 장치에 있어서, 상기 레지스터로부터 판독되어야 하는 데이터 및 상기 연산기에 의해 실행되어야 하는 연산의 종별을 지시하는, 복수 비트로 이루어지는 하나의 명령을 받고, 상기 연산기는, 상기 하나의 명령에 의해 지시된 데이터에 기초하여, 상기 하나의 명령에 의해 지시된 종별의 연산을 실행한다. 이 연산 방법은, 상기 하나의 명령에 있어서의 하나 이상의 미사용 비트에, 상기 하나의 명령에 의해 실행되는 통상 처리와는 상이한 확장 처리의 실행 지시를 상기 레지스터 및 상기 연산기 중 적어도 한쪽에 대해 행하는 확장 지시 정보를 설정하는 설정 단계를 포함한다.
개시한 연산 장치 및 연산 방법에 따르면, 하나의 명령에 있어서의 하나 이상의 미사용 비트를 이용하여 통상 처리와는 상이한 확장 처리의 실행 지시를 행할 수 있기 때문에, 예컨대 SIMD 부동 소수점 곱합 연산 등에 있어서의 각종 연산 조합을 적은 명령 종별 코드수로 실현할 수 있다. 따라서, 예컨대, 4개의 명령에 의해 행하고 있었던 복소수 행렬곱 연산 등의 복잡한 연산을, 2개의 명령에 의해 실행하는 것이 가능하게 되어, 작업 처리량을 배증시킬 수 있다.
이하, 도면을 참조하여 본 발명의 실시형태를 설명한다.
[1] 연산 장치의 구성
도 1은 본 발명의 일 실시형태로서의 연산 장치의 구성을 도시하는 블록도로, 이 도 1에 도시하는 본 실시형태의 연산 장치(1)는, 연산부(10), 명령 코드 발행부(설정부)(20) 및 생성부(30)를 갖고 있다.
연산부(10)는, 레지스터(11)와, 2조의 통상 부동 소수점 곱합 연산기(통상 연산기 혹은 단순히 연산기)(12b) 및 확장 부동 소수점 곱합 연산기(확장 연산기 혹은 단순히 연산기)(12e)를 갖고 있다. 또, 이하에서는, 「통상 부동 소수점 곱합 연산기」를 「통상 곱합 연산기」, 「통상 연산기」혹은 단순히 「연산기」라고 기재하고, 「확장 부동 소수점 곱합 연산기」를 「확장 곱합 연산기」, 「확장 연산기」혹은 단순히 「연산기」라고 기재하는 경우가 있다.
레지스터(11)는, 2N 개(본 실시형태에서는 N= 64)의 레지스터 번호 0∼2N-1로 지정되는 레지스터값(데이터)을 유지할 수 있는 것이다. 이 레지스터(11)는, 연산 대상 데이터 및 연산기(12b, 12e)에 의한 연산 결과를 저장하는 것이다.
본 실시형태의 연산 장치(1)에서는, 후술하는 바와 같이, 명령 종별 코드(opcode)에 의해, 하나의 명령으로 복수(본 실시형태에서는 2개)의 데이터 스트림을 처리하는 SIMD 방식의 채용/불채용(SIMD/비SIMD)을 선택하는 것이 가능하게 구성되어 있다. SIMD 방식이 채용되면, 레지스터(11)의 영역이 전반 부분(레지스터 번호 0∼N-1) 및 후반 부분(레지스터 번호 N-1∼2N-1)의 2영역으로 분할되어, 이들 2영역이, 기본적으로, 각각 통상 연산기(12b) 및 확장 연산기(12e)에 의해 사 용된다.
또한, 레지스터(11)는, 후술하는 생성부(30)로부터, 6개의 출력 레지스터 번호, 2개의 입력 레지스터 번호 및 입력 레지스터 기록 제어 신호가 입력된다. 6개의 출력 레지스터 번호에 의해, 레지스터(11)로부터 각 연산기(12b, 12e)로 출력되어야 하는 3개의 레지스터값(곱합 연산 대상의 데이터)이 지정된다. 2개의 입력 레지스터 번호에 의해, 각 연산기(12b, 12e)에 의한 연산 결과를 레지스터값으로서 입력·기록해야 하는 저장처[레지스터(11)의 어드레스]가 지정된다. 입력 레지스터 기록 제어 신호에 의해, 각 연산기(12b, 12e)에 의한 연산 결과를 레지스터(11)에 기록하는지의 여부가 선택·제어된다.
여기서, 통상 연산기(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)에 입력된다.
또한, 확장 연산기(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)에 입력된다.
이들 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의 범위를 후반 영역이라고 부른다.
또한, 본 실시형태에서는, 레지스터 번호 n(n= 0, 1, 2, …, 127)에 있어서의 레지스터값을 %r[n]로 나타낸다. 예컨대, 레지스터 번호 n= 0, 1, …, 127에 저장된 레지스터값은, 각각, %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]를 나타낸다.
또한, 전술한 입력 레지스터 기록 제어 신호는, b_we, e_we로 나타낸다. 제어 신호(b_we)는, 통상 연산기(12b)에 의한 곱합 연산 결과를 레지스터(11)에 기록하는지의 여부를 선택하여 제어하기 위한 1비트의 신호로, 기록하는 경우에 "1"로 설정되고, 기록하지 않는 경우에 "0"으로 설정된다. 마찬가지로, 제어 신호(e_we) 는, 확장 연산기(12e)에 의한 곱합 연산 결과를 레지스터(11)에 기록하는지의 여부를 선택하여 제어하기 위한 1비트의 신호로, 기록하는 경우에 "1"로 설정되고, 기록하지 않는 경우에 "0"으로 설정된다.
한편, 연산기(12b, 12e)는, 각각, 3입력 1출력의 부동 소수점 곱합 연산기이고, 후술하는 생성부(30)로부터의 명령 세트에 포함되는 연산 종별 코드(단순히 「연산 코드」라고 부르는 경우도 있음)에 따라, 후술하는 바와 같이 연산 종별을 전환 가능하게 구성되어 있다.
통상 연산기(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)에 출력한다.
즉, 통상 연산기(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) 를 출력한다.
여기서, 본 실시형태의 연산기(12b, 12e)의 각각에 있어서, 2비트의 연산 코드(b_op[1:0], e_op[1:0])에 의해 지정되는 연산 내용(연산명)은, 하기 표 1과 같은 4종류이다.
[표 1]
Figure 112009016639198-pat00001
명령 코드 발행부(설정부)(20)는, 후술하는 생성부(30)를 통해 연산부(10)로 명령 코드를 발행하는 것으로, 후술하는 설정부로서의 기능을 갖고 있다.
여기서, 명령 코드 발행부(20)에 의해 발행되는 명령 코드는, 예컨대 하기 표 2나 하기 표 3에 나타내는 바와 같이, 명령 종별 코드와 4개의 레지스터 번호 지시로 구성된다. 명령 종별 코드는, opcode[3:0]로 표기되는 4비트의 데이터로, 16가지의 종별의 명령을 지시할 수 있다. 4개의 레지스터 번호 지시는, 각각, 도 5(a), 도 8(a), 도 11(a), 도 18(a), 도 22(a)에 도시하는 바와 같이, 7비트로 구성되고, 0∼127의 레지스터 번호 중 어느 하나를 지시할 수 있다.
하기 표 2는, 연산 장치(1)에 있어서, opcode[3:2]를 00에 설정하고, 도 3∼도 5를 참조하면서 후술하는 비SIMD 방식을 채용한 상태에 대응하는, 명령 종별 코드와 명령 기술과 그 명령 종별 코드에 따른 연산 내용을 나타내고 있다. 이 상태에서, 연산부(10)는, 확장 연산기(12e)를 이용하지 않고 통상 연산기(12b)만을 이 용하여 레지스터(11)의 모든 영역에서의 레지스터값을 대상으로 하는 곱합 연산을 행하고 있다.
하기 표 3은, 연산 장치(1)에 있어서, opcode[3:2]를 01에 설정하고, 도 6∼도 8을 참조하면서 후술하는 SIMD 방식을 채용한 상태에 대응하는, 명령 종별 코드와 명령 기술과 그 명령 종별 코드에 따른 통상 연산기(12b)/확장 연산기(12e)의 연산 내용을 나타내고 있다.
이 상태에서, 연산부(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])는 미사용의 상태가 된다.
[표 2]
Figure 112009016639198-pat00002
[표 3]
Figure 112009016639198-pat00003
명령 코드 발행부(20)에 있어서의 설정부로서의 기능은, 하나의 명령(명령 세트)에 있어서의 하나 이상의 미사용 비트에, 확장 지시 정보를 설정하는 기능이다. 이 확장 지시 정보는, 해당 명령에 의해 실행되는 통상 처리와는 상이한 확장 처리의 실행 지시를 레지스터(11) 및 연산기(12b, 12e) 중 적어도 하나에 대해 행하는 것이다.
미사용 비트로서는, 전술한 바와 같이, 예컨대, 연산 장치(1)에 있어서 SIMD 방식을 채용했을 때에 생기는, 미사용 비트인 레지스터 번호 지시 필드의 최상위 비트(rd[6], rs1[6], rs2[6], rs3[6])의 일부 혹은 전부가 이용된다.
또, 미사용 비트를 이용하는 확장 지시 정보로서는, 하기 2종류를 들 수 있다.
(a1) 예컨대 도 9∼도 24를 참조하면서 후술하는 바와 같이, 각 연산기(12b, 12e)로 출력되어야 하는 데이터를, 각 연산기(12b, 12e)에 대응하는 레지스터(11)의 영역 이외의 영역에서의 데이터로 전환하는 지시를 레지스터(11)에 대해 행하는 확장 지시 정보. 이러한 확장 지시 정보에 의하면, 각 연산기(12b, 12e)는, 레지스터(11)의 전반 영역의 레지스터값과 후반 영역의 레지스터를 혼재시킨 상태로 연산을 행할 수 있다.
(a2) 예컨대 도 20, 도 22(b), 도 23, 도 24를 참조하면서 후술하는 바와 같이, 각 연산기(12b, 12e)에 의한 연산의 종별을 전환하는 지시를 각 연산기(12b, 12e)에 대해 행하는 확장 지시 정보. 이러한 확장 지시 정보에 의하면, 연산기(12b, 12e)가 실행하는 연산 종별을 독립적으로 전환하여, 연산기(12b)와 연산기(12e)의 각각에 상이한 종별의 연산을 실행시킬 수 있다.
생성부(30)는, 도 4, 도 7, 도 10, 도 17, 도 21, 도 25를 참조하면서 후술하는 바와 같이, 명령 코드 발행부(설정부)(20)에 의해 설정·발행된 명령 세트(명령 코드)로부터, 연산부(10)에 입력되는 명령 세트를 생성하는 것이다.
여기서, 명령 코드 발행부(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비트의 명령 세트로 변환된다.
이 때, 생성부(30)는, 도 10, 도 11(d), 도 17, 도 18(d), 도 21, 도 22(b), 도 22(d), 도 25를 참조하면서 후술하는 바와 같이, 미사용 비트에 설정된 확장 지시 정보에 기초하는 명령의 생성을 행한다. 즉, 생성부(30)는, 미사용 비트에 설정된 확장 지시 정보와 미사용 비트 이외의 비트에 설정된 정보에 기초하여 확장 명령을 생성하고, 그 확장 명령을 레지스터(11) 및 연산기(12b, 12e) 중 적어도 하나에 대해 명령 세트로서 출력하는 기능도 수행한다. 여기서, 확장 명령은, 상기 항목 (a1), (a2)와 같은 확장 지시 정보에 의해 지시되는, 확장 처리의 실행 지시를 행하는 것이다.
[2] 연산부의 기본적인 동작
여기서, 도 2에 도시하는 흐름도에 따라, 도 1에 도시하는 연산 장치(1)에 있어서의 연산부(10)의 기본적인 동작(처리)에 대해 설명한다.
또, 도 2에서는 도시하지 않지만, 연산 장치(1)에서는, 도 2에 도시하는 흐름도에 따르는 처리를 실행하기 전에는, 명령 코드 발행부(20)에 의해 명령 코드를 발행하는 단계(설정 단계를 포함함)와, 생성부(30)에 의한 생성 단계가 실행된다.
설정 단계에서는, 전술한 바와 같이, 명령 코드 발행부(20)에 있어서의 설정부로서의 기능에 의해, 명령 세트에 있어서의 하나 이상의 미사용 비트에, 확장 지시 정보가 설정된다. 또한, 생성 단계에서는, 생성부(30)에 의해, 명령 코드 발행부(20)로부터의 명령 코드가 연산부(10)에 입력하기 위한 명령 세트로 변환되고, 그 때, 미사용 비트에 설정된 확장 지시 정보에 기초하는 명령의 생성이 행해진다.
전술과 같이 생성부(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).
이 후, 단계 S10(S11)에서 판독된 레지스터값에 기초하여, 통상 연산기(12b)에 의한 연산 실행(단계 S20) 및 확장 연산기(12e)에 의한 연산 실행(단계 S30)이 실행된다.
단계 S20에서는, 우선, 연산 코드(b_op)가 연산명 fmadd의 연산 내용을 지정하는 00인지의 여부의 판정을 행한다(단계 S21). 연산 코드 b_op= 00인 경우(단계 S21의 Y 루트), b_i1 * b_i2 + b_i3이 되는 연산을 실행하여, 그 연산 결과를 출력값(b_o)으로서 출력하고(단계 S22), 단계 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의 처리로 이행한다.
연산 코드 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의 처리로 이행한다.
연산 코드 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의 처리로 이행한다.
마찬가지로, 단계 S30에서는, 우선, 연산 코드(e_op)가 연산명 fmadd의 연산 내용을 지정하는 00인지의 여부의 판정을 행한다(단계 S31). 연산 코드 e_op= 00인 경우(단계 S31의 Y 루트), e_i1 * e_i2 + e_i3이 되는 연산을 실행하여, 그 연산 결과를 출력값(e_o)으로서 출력하고(단계 S32), 단계 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의 처리로 이행한다.
연산 코드 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의 처리로 이행한다.
연산 코드 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의 처리로 이행한다.
또, 도 2에서는, 단계 S20의 처리의 후에 단계 S30의 처리를 실행하도록 기재되어 있지만, 실제로는, 단계 S20의 처리와 단계 S30의 처리는 병렬적으로 실행된다. 또한, 단계 S21, S23, S25, S27에 의한 판정 처리나, 단계 S31, S33, S35, S37에 의한 판정 처리는, 도 2에 도시하는 순서에 한정되지 않는다.
단계 S40에서는, 제어 신호(b_we, e_we) 및 지정 레지스터 번호(b_rd, e_rd)에 기초하여, 연산기(12b, 12e)에 의한 연산 결과의 레지스터(11)에 대한 기록이 제어된다.
즉, 제어 신호(b_we)가 1인지의 여부의 판정을 행한다(단계 S41). 제어 신호 b_we= 1인 경우(단계 S41의 Y 루트), 연산기(12b)의 출력값(b_o)이, 레지스터값(%r[b_rd])으로서 레지스터(11)에 기록된다(단계 S42).
제어 신호 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)의 연산 처리를 종료한다.
[3] 비SIMD 채용 시의 연산 장치의 동작
표 2를 참조하면서 전술한 바와 같이, 연산 장치(1)에 있어서 비SIMD 방식을 채용하는 경우, 명령 코드 발행부(20)에 의해 발행되는 명령 종별 코드의 상위 2비트(opcode[3:2])에는 00이 설정된다. 이하, 도 3∼도 5를 참조하면서, 비SIMD 방식을 채용한 경우의 연산 장치(1)의 동작에 대해 설명한다.
도 3은 비SIMD 채용 시의 도 1에 도시하는 연산 장치(1)에 있어서의 연산부(10)의 동작을 간단하게 설명하기 위한 도면이다. 도 4는 비SIMD 채용 시의 도 1에 도시하는 연산 장치(1)에 있어서의 명령 코드 발행부(20) 및 생성부(30)의 동작을 설명하기 위한 도면이다. 도 5(a)∼도 5(d)는, 각각, 비SIMD 채용 시의 도 1에 도시하는 연산 장치(1)에 있어서의 명령 코드, 연산 코드, 레지스터 기록 신호 및 레지스터 번호 지정(최상위 비트만)을 구체적으로 도시하는 도면이다.
도 3에 도시하는 바와 같이, 비SIMD 방식을 채용한 경우, 연산 장치(1)의 연산부(10)에서는, 확장 연산기(12e)를 이용하지 않고 통상 연산기(12b)만을 이용하여 레지스터(11)의 모든 영역에서의 레지스터값을 대상으로 하는 곱합 연산이 행해진다. 즉, 명령 종별 코드(opcode[1:0])와 레지스터(11)로부터의 입력값에 따라 통상 연산기(12b)에서 연산하여, 통상 연산기(12b)의 연산 결과를, 제어 신 호(b_we)의 값에 따라 레지스터(11)에 기록한다.
이 때, 도 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개의 레지스터값이 지시된다.
비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)에 입력된다.
여기서, 도 4 및 도 5(b)에 도시하는 바와 같이, 통상 연산기(12b)용 연산 코드(b_op[1:0])로서는, 명령 코드에 포함되는 명령 종별 코드의 하위 2비트의 값(opcode[1:0])이 이용된다. 이 때, 도 4 및 도 5(c)에 도시하는 바와 같이, 통상 연산기(12b)용의 레지스터 기록 제어 신호(b_we)로서 1이 설정되고, 통상 연산기(12b)에 의한 연산 결과가 레지스터(11)에 기록된다.
한편, 도 4 및 도 5(b)에 도시하는 바와 같이, 확장 연산기(12e)용 연산 코드(e_op[1:0])로서는, 00을 고정적으로 입력한다. 이 때, 도 4 및 도 5(c)에 도시 하는 바와 같이, 확장 연산기(12b)용의 레지스터 기록 제어 신호(b_we)로서 0이 설정되고, 확장 연산기(12b)에 의한 연산 결과를 레지스터(11)에 기록하지 않는다.
또한, 도 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이 입력된다.
다음으로, 비SIMD 채용 시의 구체적인 동작예, 예컨대 fnmsub(%f80, %f10, %f20, %f40)의 연산을 실시하는 경우에 대해 설명한다.
그 연산 내용은,
%f[80] ← -%f[10] * %f[20] + %f[40]
으로서 나타낸다.
이 경우, 하기 표 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이 입력된다.
[표 4]
Figure 112009016639198-pat00004
[표 5]
Figure 112009016639198-pat00005
[4] SIMD 채용 시의 연산 장치의 동작
표 3을 참조하면서 전술한 바와 같이, 연산 장치(1)에 있어서 SIMD 방식을 채용하는 경우, 명령 코드 발행부(20)에 의해 발행되는 명령 종별 코드의 상위 2비트(opcode[3:2])에는 01이 설정된다. 이하, 도 6∼도 8을 참조하면서, SIMD 방식을 채용한 경우의 연산 장치(1)의 동작에 대해 설명한다.
도 6은 SIMD 채용 시의 도 1에 도시하는 연산 장치(1)에 있어서의 연산부(10)의 동작을 간단하게 설명하기 위한 도면이다. 도 7은 SIMD 채용 시의 도 1에 도시하는 연산 장치(1)에 있어서의 명령 코드 발행부(20) 및 생성부(30)의 동작을 설명하기 위한 도면이다. 도 8(a)∼(d)는, 각각, SIMD 채용 시의 도 1에 도시하는 연산 장치(1)에 있어서의 명령 코드, 연산 코드, 레지스터 기록 신호 및 레지스터 번호 지정(최상위 비트만)을 구체적으로 도시하는 도면이다.
도 6에 도시하는 바와 같이, SIMD를 채용한 경우, 연산 장치(1)의 연산부(10)에서는, 통상 연산기(12b)에, 레지스터(11)의 전반 영역의 지정 레지스터 번호에 있어서의 레지스터값이 연산 대상 데이터로서 입력된다. 또한, 확장 연산기(12e)에, 레지스터(11)의 후반 영역의 지정 레지스터 번호에 있어서의 레지스터값이 연산 대상 데이터로서 입력된다. 여기서, 확장 연산기(12e)용의 지정 레지스터 번호는, 통상 연산기(12b)용의 지정 레지스터 번호에 소정 오프셋 N(본 실시형태에서는 64)을 가산한 번호이다. 즉, 통상 연산기(12b)와 확장 연산기(12e)에 있어서, 명령 종별 코드(opcode[1:0])에 따른 동일 종별의 연산이, 상이한 입력값(레지스터값)에 대해 실행된다. 그리고, 통상 연산기(12b)에 의한 연산 결과 및 확장 연산기(12e)에 의한 연산 결과가, 각각 레지스터(11)의 전반 영역 및 후반 영역에 기록된다.
이 때, 명령 코드 발행부(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])는 사용되지 않는다.
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)에 입력된다.
여기서, 도 7 및 도 8(b)에 도시하는 바와 같이, 통상 연산기(12b)용 연산 코드(b_op[1:0]) 및 확장 연산기(12e)용 연산 코드(e_op[1:0])로서는, 명령 코드에 포함되는 명령 종별 코드의 하위 2비트의 값(opcode[1:0])이 이용된다. 통상 연산기(12b)와 확장 연산기(12e)에는 반드시 동일한 연산 코드가 입력되고, 이들 연산기(12b, 12e)는, 동일 종별의 연산을 실행한다.
이 때, 도 7 및 도 8(c)에 도시하는 바와 같이, 통상 연산기(12b)용의 레지스터 기록 제어 신호(b_we) 및 확장 연산기(12e)용의 레지스터 기록 제어 신호(e_we)로서는, 고정값 1이 설정된다. 이에 따라, 통상 연산기(12b) 및 확장 연산기(12e)에 의한 연산 결과는, 항상 레지스터(11)의 전반 영역 및 후반 영역에 각각 기록된다.
또한, 도 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])로서도 입력된다.
그리고, 도 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)의 레지스터값이 사용된다.
다음으로, SIMD 채용 시의 구체적인 동작예, 예컨대 simd-fnmsub %f40, %f10, %f20, %f30의 연산을 실시하는 경우에 대해 설명한다.
이 경우, 연산부(10)의 연산기(12b, 12e)에 의해, 이하와 같은 내용의 2개의 연산이 각각 실행된다.
통상 연산기(12b)의 연산 내용: %r[40] ← -%r[10] * %r[20] + %r[30]
확장 연산기(12e)의 연산 내용: %r[104] ← -%r[74] * %r[84] + %r[94]
이 경우, 하기 표 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]로서 기록된다.
[표 6]
Figure 112009016639198-pat00006
[표 7]
Figure 112009016639198-pat00007
[5] 제1 미사용 비트 이용 형태 채용 시의 연산 장치의 동작
도 9는 제1 미사용 비트 이용 형태 채용 시의 도 1에 도시하는 연산 장치(1)에 있어서의 연산부(10)의 동작을 간단하게 설명하기 위한 도면이다. 도 10은 제1 미사용 비트 이용 형태 채용 시의 도 1에 도시하는 연산 장치(1)에 있어서의 명령 코드 발행부(설정부)(20) 및 생성부(30)의 동작을 설명하기 위한 도면이다. 도 11(a)∼ 도 11(d)는, 각각, 제1 미사용 비트 이용 형태 채용 시의 도 1에 도시하는 연산 장치(1)에 있어서의 명령 코드, 연산 코드, 레지스터 기록 신호 및 레지스터 번호 지정(최상위 비트만)을 구체적으로 도시하는 도면이다. 도 12∼도 15는 제1 미사용 비트 이용 형태 채용 시의 도 1에 도시하는 연산 장치(1)에 있어서의 연산부(10)에 의한 연산 조합의 구체예를 도시하는 도면이다.
SIMD 방식을 채용한 경우, 레지스터(11)의 전반 영역의 값을 입력값으로 하는 통상 연산기(12b)와 레지스터(11)의 후반 영역의 값을 입력값으로 하는 확장 연 산기(12e)가, 동일 종별의 연산을 동시에 실행한다. 그리고, 연산기(12b, 12e)에 의한 연산 결과가, 각각, 레지스터(11)의 전반 영역 및 후반 영역에 기록된다. 그 때문에, 전술한 SIMD 방식에서는, 하나의 연산기(12b 또는 12e)에 있어서, 레지스터(11)의 전반 영역의 값과 후반 영역의 값을 입력값으로 하여 혼재시킨 연산을 행하는 것은 불가능하다.
본 항목에서 설명하는 실시형태에서는, 전술한 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)의 전반 영역의 값으로 하도록 전환하는 명령이다.
즉, 이들 명령을 이용함으로써 레지스터(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])는 사용되지 않는다.
이하에 설명하는 실시형태(제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)에 대해 상기 확장 처리의 실행 지시를 행하는 확장 명령을 생성하여 출력한다.
이에 따라, 도 9의 우측예에 도시하는 바와 같이, 하나의 연산기(12b 또는 12e)에 있어서, 레지스터(11)의 전반 영역의 값과 후반 영역의 값을 입력값으로 하여 혼재시킨 연산을 실현할 수 있다. 특히, 미사용 비트(rs1[6], rs2[6])를 이용하여 확장 처리의 실행 지시를 행함으로써 각 연산기(12b, 12e)에 있어서의 곱연산 대상이 되는 2개의 입력값을, 각각 레지스터(11)의 전반 영역 및 후반 영역으로부터 입력시키는 것이 가능하게 된다. 따라서, 상기 식(1-1)∼(1-4)에 따른 4회의 연산(즉 4개의 명령)에 의해 실행되는 복소수 행렬곱 연산을, 후술하는 바와 같이, 2 명령으로 실행하는 것이 가능하게 된다.
이 제1 미사용 비트 이용 형태를 채용하는 경우[즉 명령 세트(cross-fmadd1, …, cross-fmadd4)에 의한 처리를 채용하는 경우], 명령 코드 발행부(20)에 의해 발행되는 명령 종별 코드의 상위 2비트(opcode[3:2])에는 11이 설정된다. 이하, 도 10∼도 15를 참조하면서, 이 제1 미사용 비트 이용 형태를 채용한 경우의 연산 장치(1)의 동작에 대해 설명한다.
제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)에 입력된다.
여기서, 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)는, 동일 종별의 연산을 실행하는 것도, 상이한 종별의 연산을 실행하는 것도 가능하게 되어 있다.
[표 8]
Figure 112009016639198-pat00008
이 때, 도 10 및 도 11(c)에 도시하는 바와 같이, 통상 연산기(12b)용의 레지스터 기록 제어 신호(b_we) 및 확장 연산기(12e)용의 레지스터 기록 제어 신호(e_we)로서는, 고정값 1이 설정된다. 이에 따라, 통상 연산기(12b) 및 확장 연산기(12e)에 의한 연산 결과는, 항상 레지스터(11)의 전반 영역 및 후반 영역에 각각 기록된다.
또한, 도 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])로서도 입력된다.
그리고, 도 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의 반전값을 나타낸다.
[표 9]
Figure 112009016639198-pat00009
다음으로, 제1 미사용 비트 이용 형태 채용 시의 구체적인 동작예, 예컨대 cross-fmadd1 %f30, %f10, %f20, %f30의 연산을 실시하는 경우에 대해 설명한다.
이 경우, 연산부(10)의 연산기(12b, 12e)에 의해, 이하와 같은 내용의 2개의 연산이 각각 실행된다.
통상 연산기(12b)의 연산 내용: %r[30] ← %r[10] * %r[20] + %r[30]
확장 연산기(12e)의 연산 내용: %r[94] ← %r[10] * %r[84] + %r[94]
이들 2개의 연산은, 레지스터(11)의 전반 영역에 실수 파트의 값을, 레지스터(11)의 후반 영역에 허수 파트의 값을 유지한 경우의, 이하의 복소수 연산에 대응하고 있다.
X ← X + A * C (1-1)
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])이 입력된다.
이에 따라, 도 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개의 명령에 의해 실행할 수 있다.
[표 10]
Figure 112009016639198-pat00010
[표 11]
Figure 112009016639198-pat00011
전술한 구체적인 동작예로서는, 명령 종별 코드(opcode[3:0])에 1100이 설정되고 또한 미사용 비트(rs1[6], rs2[6])에 0, 0이 설정된 경우에 대해 설명했다. 그러나, 제1 미사용 비트 이용 형태 채용 시에는, 그 외에 15종류의 연산 조합을 실현할 수도 있다. 연산부(10)에 의한 16종류의 연산 조합에 대해, 도 12∼도 15를 참조하면서 설명한다.
도 12는, 명령 종별 코드 opcode[3:0]= 1100인 경우의, 4종류의 연산 조합을 나타내고 있다. 이 때, 연산기(12b, 12e)는 동일 종별의 연산(fmadd)을 실행한다.
이 때, 미사용 비트(최상위 비트)(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)을 행한다.
미사용 비트(최상위 비트)(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)을 행한다.
미사용 비트(최상위 비트)(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)을 행한다.
미사용 비트(최상위 비트)(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)을 행한다.
도 13은, 명령 종별 코드 opcode[3:0]= 1101인 경우의, 4종류의 연산 조합을 나타내고 있다. 이 때, 통상 연산기(12b)는 연산(fnmsub)을 실행하고, 확장 연산기(12e)는 연산(fmadd)을 실행한다.
이 때, 미사용 비트(최상위 비트)(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)을 행한다.
미사용 비트(최상위 비트)(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)을 행한다.
미사용 비트(최상위 비트)(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)을 행한다.
미사용 비트(최상위 비트)(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)을 행한다.
도 14는, 명령 종별 코드 opcode[3:0]= 1110인 경우의, 4종류의 연산 조합을 도시하고 있다. 이 때, 통상 연산기(12b)는 연산(fmadd)을 실행하고, 확장 연산기(12e)는 연산(fnmsub)을 실행한다.
이 때, 미사용 비트(최상위 비트)(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)을 행한다.
미사용 비트(최상위 비트)(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)을 행한다.
미사용 비트(최상위 비트)(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)을 행한다.
미사용 비트(최상위 비트)(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)을 행한다.
도 15는, 명령 종별 코드 opcode[3:0]= 1111인 경우의, 4종류의 연산 조합을 나타내고 있다. 이 때, 연산기(12b, 12e)는 동일 종별의 연산(fnmsub)을 실행한다.
이 때, 미사용 비트(최상위 비트)(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)을 행한다.
미사용 비트(최상위 비트)(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)을 행한다.
미사용 비트(최상위 비트)(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)을 행한다.
미사용 비트(최상위 비트)(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)을 행한다.
[6] 제2 미사용 비트 이용 형태 채용 시의 연산 장치의 동작
도 16은 제2 미사용 비트 이용 형태 채용 시의 도 1에 도시하는 연산 장치(1)에 있어서의 연산부(10)의 동작을 간단하게 설명하기 위한 도면이다. 도 17은 제2 미사용 비트 이용 형태 채용 시의 도 1에 도시하는 연산 장치(1)에 있어서의 명령 코드 발행부(설정부)(20) 및 생성부(30)의 동작을 설명하기 위한 도면이다. 도 18(a)∼도 18(d)는, 각각, 제2 미사용 비트 이용 형태 채용 시의 도 1에 도시하는 연산 장치(1)에 있어서의 명령 코드, 연산 코드, 레지스터 기록 신호 및 레지스터 번호 지정(최상위 비트만)을 구체적으로 도시하는 도면이다.
전술한 제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) 참조].
이들 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)에 대해 상기 확장 처리의 실행 지시를 행하는 확장 명령을 생성하여 출력한다.
이에 따라, 도 16의 우측예에 도시하는 바와 같이, 하나의 연산기(12b 또는 12e)에 있어서, 레지스터(11)의 전반 영역의 값과 후반 영역의 값을 입력값으로 하여 혼재시킨 연산을 실현할 수 있다. 특히, 미사용 비트(rs1[6], rs2[6])를 이용하여 확장 처리의 실행 지시를 행함으로써 각 연산기(12b, 12e)에 있어서의 곱연산 대상이 되는 2개의 입력값을, 각각 레지스터(11)의 전반 영역 및 후반 영역으로부터 입력시키는 것이 가능하게 된다. 이러한 확장 처리에 의해, SIMD 방식에 의한 연산의 레지스터 조합수를 증가시킬 수 있어, 복소수 연산만이 아니라, 여러가지의 연산에 있어서, 레지스터 전반 영역의 값과 레지스터 후반 영역의 값의 여러 가지 조합을 실현할 수 있다.
이 제2 미사용 비트 이용 형태를 채용하는 경우[즉 명령 세트(simd-fmadd, simd-fmsub, simd-fnmsub, simd-fnmadd)에 의한 처리를 채용하는 경우, 명령 코드 발행부(20)에 의해 발행되는 명령 종별 코드의 상위 2비트(opcode[3:2])에는 01이 설정된다. 이하, 도 17 및 도 18을 참조하면서, 이 제2 미사용 비트 이용 형태를 채용한 경우의 연산 장치(1)의 동작에 대해 설명한다.
제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)에 입력된다.
여기서, 도 17 및 도 18(b)에 도시하는 바와 같이, 통상 연산기(12b)용 연산 코드(b_op[1:0]) 및 확장 연산기(12e)용 연산 코드(e_op[1:0])로서는, 명령 코드에 포함되는 명령 종별 코드의 하위 2비트의 값(opcode[1:0])이 이용된다. 통상 연산기(12b)와 확장 연산기(12e)에는 반드시 동일한 연산 코드가 입력되어, 이들 연산기(12b, 12e)는, 동일 종별의 연산을 실행한다.
이 때, 도 17 및 도 18(c)에 도시하는 바와 같이, 통상 연산기(12b)용의 레지스터 기록 제어 신호(b_we) 및 확장 연산기(12e)용의 레지스터 기록 제어 신호(e_we)로서는, 고정값 1이 설정된다. 이에 의해, 통상 연산기(12b) 및 확장 연산기(12e)에 의한 연산 결과는, 항상 레지스터(11)의 전반 영역 및 후반 영역에 각각 기록된다.
또한, 도 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])로서도 입력된다.
그리고, 도 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의 반전값을 나타낸다.
다음으로, 제2 미사용 비트 이용 형태 채용 시의 구체적인 동작예, 예컨대 simd-fnmsub %f40, %f10, %f80, %f30의 연산을 실시하는 경우에 대해 설명한 다.
이 경우, 연산부(10)의 연산기(12b, 12e)에 의해, 이하와 같은 내용의 2개의 연산이 각각 실행된다.
통상 연산기(12b)의 연산 내용: %r[40] ← %r[10] * %r[80] - %r[30]
확장 연산기(12e)의 연산 내용: %r[104] ← %r[74] * %r[16] - %r[94]
이 경우, 하기 표 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])이 입력된다.
이에 의해, 통상 연산기(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])으로서 기록된다.
[표 12]
Figure 112009016639198-pat00012
[표 13]
Figure 112009016639198-pat00013
전술한 구체적인 동작예에서는, 명령 종별 코드(opcode[3:0])에 0101이 설정되고 또한 미사용 비트(rs1[6], rs2[6])에 0, 1이 설정된 경우에 대해 설명했지만, 제2 미사용 비트 이용 형태 채용 시에는, 다른 연산 조합을 실현할 수도 있다. 여기서, opcode[1:0]에 의해 연산기(12b, 12e)에 의한 4종류의 연산 종별이 선택된다. 그리고, 각 연산 종별마다, 미사용 비트(rs1[6], rs2[6])의 값에 의해, 각 연산기(12b, 12e)에 입력되는 2개의 값(곱대상의 데이터)을 레지스터 전반 영역 혹은 레지스터 후반 영역 중 어느쪽으로부터 판독할 것인지가 지시·선택된다.
예컨대, 미사용 비트(최상위 비트)(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]를 입력값으로 하여 연산을 행한다.
미사용 비트(최상위 비트)(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])을 입력값으로 하여 연산을 행한다.
미사용 비트(최상위 비트)(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])을 입력값으로 하여 연산을 행한다.
미사용 비트(최상위 비트)(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])을 입력값으로 하여 연산을 행한다.
[7] 제3 미사용 비트 이용 형태 채용 시의 연산 장치의 동작
도 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)의 구체적인 실현예를 도시하는 회로도이다.
여기서 설명하는 제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 명령을 더 확장한다.
여기서, 미사용 비트(rs3[6])의 값은, 확장 연산기(12e) 측의 곱입력 레지스터 번호의 선택을 위해 사용되고, 미사용 비트(rd[6])의 값은, 확장 연산기(12e)의 연산 코드(e_op[1:0])의 선택을 위해 사용된다. 이러한 확장에 의해, 도 19 및 도 20에 도시하는 바와 같이, 제1 이용형태에서 추가한 신규 명령과 동일한 연산을 SIMD 명령의 확장에 의해 실현할 수 있다. 따라서, 제3 이용형태에서는, 제1 이용형태에서 신규로 추가한 명령(cross-fmadd1, …, cross-fmadd4)은 불필요하게 된다.
이들 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)에 대해 상기 확장 처리의 실행 지시를 행하는 확장 명령을 생성하여 출력한다.
이에 따라, 도 19의 우측 예나 도 20에 도시하는 바와 같이, 하나의 연산기(12b 또는 12e)에 있어서, 레지스터(11)의 전반 영역의 값과 후반 영역의 값을 입력값으로 하여 혼재시킨 연산을 실현할 수 있다. 또한, 확장 연산기(12e)에 의한 연산의 종별을 전환하는 지시를 행하여, 연산기(12e)에 있어서의 연산 종별이 변경 제어된다. 따라서, 상기 식(1-1)∼(1-4)에 의한 4회의 연산(즉 4개의 명령)에 의해 실행되는 복소수 행렬곱 연산을, 후술하는 바와 같이, 2 명령으로 실행하는 것이 가능하게 된다.
이 제3 미사용 비트 이용 형태를 채용하는 경우, 명령 코드 발행부(20)에 의해 발행되는 명령 종별 코드의 상위 2비트(opcode[3:2])에는 01이 설정된다. 이하, 도 21∼도 25를 참조하면서, 이 제3 미사용 비트 이용 형태를 채용한 경우의 연산 장치(1)의 동작에 대해 설명한다.
제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)에 입력된다.
여기서, 통상 연산기(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 명령만으로 실현할 수 있다.
[표 14]
Figure 112009016639198-pat00014
이 때, 도 21 및 도 22(c)에 도시하는 바와 같이, 통상 연산기(12b)용의 레지스터 기록 제어 신호(b_we) 및 확장 연산기(12e)용의 레지스터 기록 제어 신호(e_we)로서는, 고정값 1이 설정된다. 이에 따라, 통상 연산기(12b) 및 확장 연산기(12e)에 의한 연산 결과는, 항상 레지스터(11)의 전반 영역 및 후반 영역에 각각 기록된다.
또한, 도 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])로서도 입력된다.
그리고, 도 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)을 나타낸다.
미사용 비트(rs1[6], rs2[6], rs3[6])에 설정된 값(확장 지시 정보)과, 그 값에 의해 최상위 비트(b_rs1[6], b_rs2[6], e_rs1[6], e_rs2[6])에 설정되는 값과의 대응 관계를 하기 표 15에 나타낸다.
[표 15]
Figure 112009016639198-pat00015
여기서, 전술한 바와 같이 미사용 비트(rs1[6], rs2[6], rs3[6])에 각각 설정되는 값(확장 지시 정보)은, 이하와 같이 기능하는 것이 된다.
rs1[6]: 1이 설정된 경우, 통상 연산기(12b)의 첫번째의 입력값(b_i1)을 레지스터 후반 영역으로부터 공급한다.
rs2[6]: 1이 설정된 경우, 통상 연산기(12b)의 2번째의 입력값(b_i2)을 레지스터 후반 영역으로부터 공급한다.
rs3[6]: 1이 설정된 경우, 확장 연산기(12e)의 첫번째의 입력값(b_i1)을 통상 연산기(12b)의 첫번째의 입력값(b_i1)과 동일한 레지스터 영역으로부터 공급한다(rs1 복사 플래그).
rd[6]: 확장 연산기(12e)의 연산 코드(e_op[1:0])를 변경한다(곱연산의 결과 에 -1을 곱셈함).
다음으로, 제1 미사용 비트 이용 형태 채용 시의 구체적인 동작예, 예컨대 simd-fmadd %f30, %f10, %f20, %f{30+ 64}의 연산을 실시하는 경우에 대해 설명한다.
이 경우, 연산부(10)의 연산기(12b, 12e)에 의해, 이하와 같은 내용의 2개의 연산이 각각 실행된다.
통상 연산기(12b)의 연산 내용: %r[30] ← %r[10] * %r[20] + %r[30]
확장 연산기(12e)의 연산 내용: %r[94] ← %r[10] * %r[84] + %r[94]
이들 2개의 연산은, 레지스터(11)의 전반 영역에 실수 파트의 값을, 레지스터(11)의 후반 영역에 허수 파트의 값을 유지한 경우의, 이하의 복소수 연산에 대응하고 있다.
X ← X + A * C (1-1)
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])이 입력된다.
이에 의해, 도 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개의 명령에 의해 실행할 수 있다.
[표 16]
Figure 112009016639198-pat00016
[표 17]
Figure 112009016639198-pat00017
전술한 구체적인 동작예에서는, 명령 종별 코드(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종류의 연산 조합 패턴이 실현된다.
도 23은, 명령 종별 코드 opcode[3:0]= 0100인 경우에서 또한 미사용 비트 rd[6]= 0인 경우의, 8종류의 연산 조합을 나타내고 있다. 이 때, 연산기(12b, 12e)는 동일 종별의 연산(fmadd)을 실행한다.
또한, 도 23의 좌측 절반부는, 미사용 비트 rd[6]= 0 또한 미사용 비트(rs3[6]= 0)인 경우의, 4종류의 연산 조합을 나타내고 있다.
이 때, 미사용 비트(최상위 비트)(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)을 행한다.
미사용 비트(최상위 비트)(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)을 행한다.
미사용 비트(최상위 비트)(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)을 행한다.
미사용 비트(최상위 비트)(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)을 행한다.
또한, 도 23의 우측 절반부는, 미사용 비트 rd[6]= 0 또한 미사용 비트 rs3[6]= 1인 경우의, 4종류의 연산 조합을 나타내고 있다.
이 때, 미사용 비트(최상위 비트)(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)을 행한다.
미사용 비트(최상위 비트)(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)을 행한다.
미사용 비트(최상위 비트)(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)을 행한다.
미사용 비트(최상위 비트)(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)을 행한다.
도 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에 대한 상세한 설명은 생략한다.
여기서, 도 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 방식이 채용된다.
논리곱 회로(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에 고정된다.
논리곱 회로(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에 고정된다.
배타적 논리합 회로(36)는, rs3[6]과 rs1[6]의 반전값과의 배타적 논리합을 산출하여 출력한다. 배타적 논리합 회로(36)에 입력되는 rs1[6]의 반전값은, 반전 회로(36a)에 의해 산출된다. 이 배타적 논리합 회로(36)에 의해 산출되는 배타적 논리합은, 표 15, 도 21, 도 22(d)를 참조하면서 설명한 값(~rs1[6]^ rs3[6])이다.
논리곱 회로(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) 참조].
논리곱 회로(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) 참조].
배타적 논리합 회로(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])를 출력한다.
그리고, 도 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])으로서 출력한다.
이에 따라, 도 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를 참조하면서 설명한 명령 세트로 변환하여 출력한다.
[8] 본 실시형태의 효과
이와 같이, 본 발명의 일 실시형태로서의 연산 장치(1) 및 연산 방법에 따르면, 명령 코드 발행부(설정부)(20) 및 생성부(30)의 기능을 이용함으로써 하나의 명령에 있어서의 하나 이상의 미사용 비트(rd[6], rs1[6], rs2[6], rs3[6])를 이용하여 통상 처리와는 상이한 확장 처리의 실행 지시를 행할 수 있다. 이에 의해, 예컨대 SIMD 부동 소수점 곱합 연산 등에 있어서의 각종 연산 조합을 적은 명령 종별 코드수로 실현할 수 있다. 따라서, 전술한 바와 같이, 예컨대, 4개의 명령에 의해 행하고 있었던 복소수 행렬곱 연산 등의 복잡한 연산을, 2개의 명령에 의해 실행하는 것이 가능하게 되어, 작업 처리량을 배증시킬 수 있다.
또한, 연산 장치(1)에서는, 통상 연산기(12b)에 대한 연산 종별 및 입력 레지스터 번호 지시와, 확장 연산기(12e)에 대한 연산 종별 및 입력 레지스터 번호 지시를 독립적으로 입력하고 있다. 이 때문에, 통상 연산기(12b)와 확장 연산기(12e)에 있어서, 상이한 입력값(레지스터값)이나 상이한 연산 종별에 의한 연산을 실행시킬 수 있게 된다. 따라서, 연산 장치(1)에서는, 미사용 비트(rd[6], rs1[6], rs2[6], rs3[6])를 이용함으로써, 전술한 바와 같은 복소수 행렬곱 연산 뿐만 아니라, 도 12∼도 15, 도 23, 도 24를 참조하면서 설명한 각종 연산 조합 패 턴에 의한 연산을 용이하게 실행할 수 있다.
[9] 그 외
또, 본 발명은 전술한 실시형태에 한정되지 않고, 본 발명의 취지를 일탈하지 않는 범위에서 여러 가지 변형하여 실시할 수 있다.
예컨대, 전술한 실시형태에서는, 연산기로서 통상 연산기와 확장 연산기의 2개를 구비한 경우에 대해 설명했지만, 본 발명은, 여기에 한정되지 않고, 3이상의 연산기를 구비한 경우에도 마찬가지로 적용되어, 전술한 실시형태와 동일한 작용 효과를 얻을 수 있다.
또한, 미사용 비트로서, SIMD 방식을 채용함으로써 미사용이 된 비트를 이용하고 있지만, 본 발명은, 여기에 한정되지 않고, 각종 방식의 채용 등에 의해 생긴 미사용 비트에 상기 확장 처리 정보를 설정함으로써도, 전술한 실시형태와 동일한 작용 효과를 얻을 수 있다.
또한, 전술한 설정부(20)(설정 단계) 및 생성부(30)(생성 단계)로서의 기능(전부 혹은 일부의 기능)은, 컴퓨터(CPU, 정보 처리 장치, 각종 단말을 포함함)가 소정의 애플리케이션 프로그램을 실행함으로써 실현된다.
그 프로그램은, 예컨대 플렉서블 디스크, CD(CD-ROM, CD-R, CD-RW 등), DVD(DVD-ROM, DVD-RAM, DVD-R, DVD-RW, DVD+ R, DVD+ RW 등) 등의 컴퓨터 판독 가능한 기록 매체에 기록된 형태로 제공된다. 이 경우, 컴퓨터는 그 기록 매체로부터 프로그램을 판독하여 내부 기억 장치 또는 외부 기억 장치에 전송하고 저장하여 이용한다. 또한, 그 프로그램을, 예컨대 자기 디스크, 광 디스크, 광자기 디스크 등의 기억 장치(기록 매체)에 기록해 두고, 그 기억 장치로부터 통신 회선을 통해 컴퓨터에 제공하도록 하여도 좋다.
여기서, 컴퓨터란, 하드웨어와 OS(Operating System)를 포함하는 개념이고, OS의 제어 하에서 동작하는 하드웨어를 의미하고 있다. 또한, OS가 불필요하고 애플리케이션 프로그램 단독으로 하드웨어를 동작시키는 경우에는, 그 하드웨어 자체가 컴퓨터에 상당한다. 하드웨어는, 적어도, CPU 등의 마이크로 프로세서와, 기록 매체에 기록된 컴퓨터 프로그램을 판독하기 위한 수단을 구비하고 있다. 상기 프로그램은, 전술한 바와 같이 컴퓨터에, 설정부(20)(설정 단계) 및 생성부(30)(생성 단계)로서의 기능을 실현시키는 프로그램 코드를 포함하고 있다. 또한, 그 기능의 일부는, 애플리케이션 프로그램이 아니라 OS에 의해 실현되어도 좋다.
또한, 본 실시형태에 있어서의 기록 매체로서는, 전술한 플렉서블 디스크, CD, DVD, 자기 디스크, 광 디스크, 광자기 디스크 외에, IC 카드, ROM 카트리지, 자기 테이프, 펀치 카드(punch card), 컴퓨터의 내부 기억 장치(RAM이나 ROM 등의 메모리), 외부 기억 장치 등이나, 바코드 등의 부호가 인쇄된 인쇄물 등의, 컴퓨터판독 가능한 여러 가지의 매체를 이용할 수도 있다.
[10] 부기
이상의 제1∼제4 실시형태를 포함하는 실시형태에 대해, 또한 이하의 부기를 개시한다.
(부기 1)
연산 대상의 데이터를 저장하는 레지스터와, 상기 레지스터로부터 판독된 데 이터에 기초하는 연산을 실행하는 하나 이상의 연산기를 가지고, 상기 레지스터로부터 판독되어야 하는 데이터 및 상기 연산기에 의해 실행되어야 하는 연산의 종별을 지시하는, 복수 비트로 이루어지는 하나의 명령을 받고, 상기 연산기는, 상기 하나의 명령에 의해 지시된 데이터에 기초하여, 상기 하나의 명령에 의해 지시된 종별의 연산을 실행하는 연산 장치로서,
상기 하나의 명령에 있어서의 하나 이상의 미사용 비트에, 상기 하나의 명령에 의해 실행되는 통상 처리와는 상이한 확장 처리의 실행 지시를 상기 레지스터 및 상기 연산기 중 적어도 한쪽에 대해 행하는 확장 지시 정보를 설정하는 설정부를 갖는 것을 특징으로 하는, 연산 장치.
(부기 2)
상기 설정부에 의해 상기 미사용 비트에 설정된 상기 확장 지시 정보와 상기 하나의 명령에 있어서의 상기 미사용 비트 이외의 비트에 설정된 정보에 기초하여, 상기 레지스터 및 상기 연산기 중 적어도 한쪽에 대해 상기 확장 처리의 실행 지시를 행하는 확장 명령을 생성하여 상기 하나의 명령으로서 출력하는 생성부를 더 갖는 것을 특징으로 하는, 부기 1에 기재한 연산 장치.
(부기 3)
상기 미사용 비트는, 상기 레지스터의 영역을 분할하여 사용하는 둘 이상의 상기 연산기를 구비하고 상기 하나의 명령으로 복수의 데이터 스트림을 처리하는 SIMD 방식을 채용함으로써 상기 통상 처리 시에는 미사용이 된 비트인 것을 특징으로 하는, 부기 1 또는 부기 2에 기재한 연산 장치.
(부기 4)
상기 둘 이상의 연산기는, 각각, 상기 하나의 명령에 포함되는 연산 종별 코드에 따라 연산의 종별을 전환할 수 있는 다입력 일출력의 곱합 연산기이고,
상기 미사용 비트는, 상기 하나의 명령에 포함되는, 각 곱합 연산기로 출력되어야 하는 상기 레지스터에 있어서의 각 데이터를 지시하는 레지스터 번호 지시 필드의 최상위 비트인 것을 특징으로 하는, 부기 3에 기재한 연산 장치.
(부기 5)
상기 둘 이상의 연산기는, 각각, 상기 하나의 명령에 포함되는 연산 종별 코드에 따라 연산의 종별을 전환할 수 있는 다입력 일출력의 곱합 연산기이고,
상기 미사용 비트는, 상기 하나의 명령에 포함되는, 각 곱합 연산기에 의한 연산 결과의, 상기 레지스터에 있어서의 저장처를 지시하는 레지스터 번호 지시 필드의 최상위 비트인 것을 특징으로 하는, 부기 3 또는 부기 4에 기재한 연산 장치.
(부기 6)
상기 확장 지시 정보는, 각 곱합 연산기로 출력되어야 하는 데이터를, 각 곱합 연산기에 대응하는 상기 레지스터의 영역 이외의 영역에서의 데이터로 전환하는 지시를 상기 레지스터에 대해 행하는 것을 특징으로 하는, 부기 4 또는 부기 5에 기재한 연산 장치.
(부기 7)
상기 확장 지시 정보는, 각 곱합 연산기에 의한 연산의 종별을 전환하는 지시를 각 곱합 연산기에 대해 행하는 것을 특징으로 하는, 부기 4 내지 부기 6 중 어느 하나에 기재한 연산 장치.
(부기 8)
연산 대상의 데이터를 저장하는 레지스터와, 상기 레지스터로부터 판독된 데이터에 기초하는 연산을 실행하는 하나 이상의 연산기를 갖는 연산 장치에 있어서, 상기 레지스터로부터 판독되어야 하는 데이터 및 상기 연산기에 의해 실행되어야 하는 연산의 종별을 지시하는, 복수 비트로 이루어지는 하나의 명령을 받고, 상기 연산기는, 상기 하나의 명령에 의해 지시된 데이터에 기초하여, 상기 하나의 명령에 의해 지시된 종별의 연산을 실행하는 연산 방법으로서,
상기 하나의 명령에 있어서의 하나 이상의 미사용 비트에, 상기 하나의 명령에 의해 실행되는 통상 처리와는 상이한 확장 처리의 실행 지시를 상기 레지스터 및 상기 연산기 중 적어도 한쪽에 대해 행하는 확장 지시 정보를 설정하는 설정 단계를 포함하는 것을 특징으로 하는 연산 방법.
(부기 9)
상기 설정 단계에 있어서 상기 미사용 비트에 설정된 상기 확장 지시 정보와 상기 하나의 명령에 있어서의 상기 미사용 비트 이외의 비트에 설정된 정보에 기초하여, 상기 레지스터 및 상기 연산기 중 적어도 한쪽에 대해 상기 확장 처리의 실행 지시를 행하는 확장 명령을 생성하여 상기 하나의 명령으로서 출력하는 생성 단계를 더 포함하는 것을 특징으로 하는, 부기 8에 기재한 연산 방법.
(부기 10)
상기 미사용 비트는, 상기 레지스터의 영역을 분할하여 사용하는 둘 이상의 상기 연산기를 구비하고 상기 하나의 명령으로 복수의 데이터스트림을 처리하는 SIMD 방식을 채용함으로써 상기 통상 처리 시에는 미사용이 된 비트인 것을 특징으로 하는 부기 8 또는 부기 9에 기재한 연산 방법.
(부기 11)
상기 둘 이상의 연산기는, 각각, 상기 하나의 명령에 포함되는 연산 종별 코드에 따라 연산의 종별을 전환할 수 있는 다입력 일출력의 곱합 연산기이고,
상기 미사용 비트는, 상기 하나의 명령에 포함되는, 각 곱합 연산기로 출력되어야 하는 상기 레지스터에 있어서의 각 데이터를 지시하는 레지스터 번호 지시 필드의 최상위 비트인 것을 특징으로 하는 부기 10에 기재한 연산 방법.
(부기 12)
상기 둘 이상의 연산기는, 각각, 상기 하나의 명령에 포함되는 연산 종별 코드에 따라 연산의 종별을 전환할 수 있는 다입력 일출력의 곱합 연산기이고,
상기 미사용 비트는, 상기 하나의 명령에 포함되는, 각 곱합 연산기에 의한 연산 결과의, 상기 레지스터에 있어서의 저장처를 지시하는 레지스터 번호 지시 필드의 최상위 비트인 것을 특징으로 하는, 부기 10 또는 부기 11에 기재한 연산 방법.
(부기 13)
상기 확장 지시 정보는, 각 곱합 연산기로 출력되어야 하는 데이터를, 각 곱합 연산기에 대응하는 상기 레지스터의 영역 이외의 영역에서의 데이터로 전환하는 지시를 상기 레지스터에 대해 행하는 것을 특징으로 하는, 부기 11 또는 부기 12에 기재한 연산 방법.
(부기 14)
상기 확장 지시 정보는, 각 곱합 연산기에 의한 연산의 종별을 전환하는 지시를 각 곱합 연산기에 대해 행하는 것을 특징으로 하는, 부기 11 내지 부기 13 중 어느 하나에 기재한 연산 방법.
도 1은 본 발명의 일 실시형태로서의 연산 장치의 구성을 도시하는 블록도.
도 2는 도 1에 도시하는 연산 장치에 있어서의 연산부의 기본적인 동작을 설명하기 위한 흐름도.
도 3은 비SIMD 채용 시의 도 1에 도시하는 연산 장치에 있어서의 연산부의 동작을 간단하게 설명하기 위한 도면.
도 4는 비SIMD 채용 시의 도 1에 도시하는 연산 장치에 있어서의 명령 코드 발행부 및 생성부의 동작을 설명하기 위한 도면.
도 5(a)∼도 5(d)는, 각각, 비SIMD 채용 시의 도 1에 도시하는 연산 장치에 있어서의 명령 코드, 연산 코드, 레지스터 기록 신호 및 레지스터 번호 지정(최상위 비트만)을 구체적으로 도시하는 도면.
도 6은 SIMD 채용 시의 도 1에 도시하는 연산 장치에 있어서의 연산부의 동작을 간단하게 설명하기 위한 도면.
도 7은 SIMD 채용 시의 도 1에 도시하는 연산 장치에 있어서의 명령 코드 발행부 및 생성부의 동작을 설명하기 위한 도면.
도 8(a)∼도 8(d)는, 각각, SIMD 채용 시의 도 1에 도시하는 연산 장치에 있어서의 명령 코드, 연산 코드, 레지스터 기록 신호 및 레지스터 번호 지정(최상위 비트만)을 구체적으로 도시하는 도면.
도 9는 제1 미사용 비트 이용 형태 채용 시의 도 1에 도시하는 연산 장치에 있어서의 연산부의 동작을 간단하게 설명하기 위한 도면.
도 10은 제1 미사용 비트 이용 형태 채용 시의 도 1에 도시하는 연산 장치에 있어서의 명령 코드 발행부(설정부) 및 생성부의 동작을 설명하기 위한 도면.
도 11(a)∼도 11(d)는, 각각, 제1 미사용 비트 이용 형태 채용 시의 도 1에 도시하는 연산 장치에 있어서의 명령 코드, 연산 코드, 레지스터 기록 신호 및 레지스터 번호 지정(최상위 비트만)을 구체적으로 도시하는 도면.
도 12는 제1 미사용 비트 이용 형태 채용 시의 도 1에 도시하는 연산 장치에 있어서의 연산부에 의한 연산 조합의 구체예를 도시하는 도면.
도 13은 제1 미사용 비트 이용 형태 채용 시의 도 1에 도시하는 연산 장치에 있어서의 연산부에 의한 연산 조합의 구체예를 도시하는 도면.
도 14는 제1 미사용 비트 이용 형태 채용 시의 도 1에 도시하는 연산 장치에 있어서의 연산부에 의한 연산 조합의 구체예를 도시하는 도면.
도 15는 제1 미사용 비트 이용 형태 채용 시의 도 1에 도시하는 연산 장치에 있어서의 연산부에 의한 연산 조합의 구체예를 도시하는 도면.
도 16은 제2 미사용 비트 이용 형태 채용 시의 도 1에 도시하는 연산 장치에 있어서의 연산부의 동작을 간단하게 설명하기 위한 도면.
도 17은 제2 미사용 비트 이용 형태 채용 시의 도 1에 도시하는 연산 장치에 있어서의 설정부 및 생성부의 동작을 설명하기 위한 도면.
도 18(a)∼도 18(d)는, 각각, 제2 미사용 비트 이용 형태 채용 시의 도 1에 도시하는 연산 장치에 있어서의 명령 코드, 연산 코드, 레지스터 기록 신호 및 레지스터 번호 지정(최상위 비트만)을 구체적으로 도시하는 도면.
도 19는 제3 미사용 비트 이용 형태 채용 시의 도 1에 도시하는 연산 장치에 있어서의 연산부의 동작을 간단하게 설명하기 위한 도면.
도 20은 제3 미사용 비트 이용 형태 채용 시의 도 1에 도시하는 연산 장치에 있어서의 연산부의 동작을 간단하게 설명하기 위한 도면.
도 21은 제2 미사용 비트 이용 형태 채용 시의 도 1에 도시하는 연산 장치에 있어서의 명령 코드 발행부(설정부) 및 생성부의 동작을 설명하기 위한 도면.
도 22(a)∼도 22(d)는, 각각, 제3 미사용 비트 이용 형태 채용 시의 도 1에 도시하는 연산 장치에 있어서의 명령 코드, 연산 코드, 레지스터 기록 신호 및 레지스터 번호 지정(최상위 비트만)을 구체적으로 도시하는 도면.
도 23은 제3 미사용 비트 이용 형태 채용 시의 도 1에 도시하는 연산 장치에 있어서의 연산부에 의한 연산 조합의 구체예를 도시하는 도면.
도 24는 제3 미사용 비트 이용 형태 채용 시의 도 1에 도시하는 연산 장치에 있어서의 연산부에 의한 연산 조합의 구체예를 도시하는 도면.
도 25는 제3 미사용 비트 이용 형태 채용 시의 도 1에 도시하는 연산 장치에 있어서의 생성부의 구체적인 실현예를 도시하는 회로도.
<도면의 주요 부분에 대한 부호의 설명>
1: 연산 장치 10: 연산부
11: 레지스터
12b: 통상 부동 소수점 곱합 연산기(통상 연산기, 연산기)
12e: 확장 부동 소수점 곱합 연산기(확장 연산기, 연산기)
20: 명령 코드 발행부(설정부) 30: 생성부
31, 32, 33, 34: 논리곱 회로(AND 게이트)
35, 36: 배타적 논리합 회로(EOR 게이트)
31a, 32a, 34a, 36a: 반전 회로(NOT 게이트, 인버터)

Claims (10)

  1. 연산 대상의 데이터를 저장하는 레지스터와, 상기 레지스터로부터 판독된 데이터에 기초하는 연산을 실행하는 복수의 연산기와, 상기 복수의 연산기가 상기 레지스터의 영역을 분할하여 사용하는 것에 의해 하나의 명령으로 복수의 데이터스트림을 처리하는 SIMD(Single Instruction stream Multiple Data stream) 방식의 채용 또는 불채용을 선택하는 기능을 갖고, 상기 레지스터로부터 판독되어야 하는 데이터 및 상기 복수의 연산기에 의해 실행되어야 하는 연산의 종별을 지시하는, 복수 비트로 이루어지는 상기 하나의 명령을 받고, 상기 복수의 연산기는, 상기 하나의 명령에 의해 지시된 데이터에 기초하여, 상기 하나의 명령에 의해 지시된 종별의 연산을 실행하는 연산 장치로서,
    상기 기능에 의해 상기 SIMD 방식을 채용하는 것에 의해 상기 SIMD 방식의 불채용시에는 사용되나 상기 SIMD 방식의 채용시에는 미사용이 되는, 상기 하나의 명령에 있어서의 하나 이상의 미사용 비트에, 상기 SIMD 방식으로 실행되는 통상 처리와는 상이한 확장 처리의 실행 지시를 상기 레지스터 및 상기 연산기 중 적어도 한쪽에 대해 행하는 확장 지시 정보를 설정하는 설정부
    를 포함하는 것을 특징으로 하는 연산 장치.
  2. 제1항에 있어서,
    상기 설정부에 의해 상기 미사용 비트에 설정된 상기 확장 지시 정보와 상기 하나의 명령에 있어서의 상기 미사용 비트 이외의 비트에 설정된 정보에 기초하여, 상기 레지스터 및 상기 연산기 중 적어도 한쪽에 대해 상기 확장 처리의 실행 지시를 행하는 확장 명령을 생성하여 상기 하나의 명령으로서 출력하는 생성부를 더 포함하는 것을 특징으로 하는 연산 장치.
  3. 삭제
  4. 제1항에 있어서,
    상기 복수의 연산기는, 각각, 상기 하나의 명령에 포함되는 연산 종별 코드에 따라 연산의 종별을 전환할 수 있는 다입력 일출력의 곱합 연산기이고,
    상기 미사용 비트는, 상기 하나의 명령에 포함되는, 각 곱합 연산기로 출력되어야 하는 상기 레지스터에 있어서의 각 데이터를 지시하는 레지스터 번호 지시 필드의 최상위 비트인 것을 특징으로 하는 연산 장치.
  5. 제1항에 있어서,
    상기 복수의 연산기는, 각각, 상기 하나의 명령에 포함되는 연산 종별 코드에 따라 연산의 종별을 전환할 수 있는 다입력 일출력의 곱합 연산기이고,
    상기 미사용 비트는, 상기 하나의 명령에 포함되는, 각 곱합 연산기에 의한 연산 결과의, 상기 레지스터에 있어서의 저장처를 지시하는 레지스터 번호 지시 필드의 최상위 비트인 것을 특징으로 하는 연산 장치.
  6. 제4항에 있어서,
    상기 확장 지시 정보는, 각 곱합 연산기로 출력되어야 하는 데이터를, 각 곱합 연산기에 대응하는 상기 레지스터의 영역 이외의 영역에 있어서의 데이터로 전환하는 지시를 상기 레지스터에 대해 행하는 것을 특징으로 하는 연산 장치.
  7. 제4항에 있어서,
    상기 확장 지시 정보는, 각 곱합 연산기에 의한 연산의 종별을 전환하는 지시를 각 곱합 연산기에 대해 행하는 것을 특징으로 하는 연산 장치.
  8. 연산 대상의 데이터를 저장하는 레지스터와, 상기 레지스터로부터 판독된 데이터에 기초하는 연산을 실행하는 복수의 연산기와, 상기 복수의 연산기가 상기 레지스터 영역을 분할하여 사용하는 것에 의해 하나의 명령으로 복수의 데이터스트림을 처리하는 SIMD(Single Instruction stream Multiple Data stream) 방식의 채용 또는 불채용을 선택하는 기능을 포함하는 연산 장치에 있어서, 상기 레지스터로부터 판독되어야 하는 데이터 및 상기 복수의 연산기에 의해 실행되어야 하는 연산의 종별을 지시하는, 복수 비트로 이루어지는 상기 하나의 명령을 받고, 상기 복수의 연산기는, 상기 하나의 명령에 의해 지시된 데이터에 기초하여, 상기 하나의 명령에 의해 지시된 종별의 연산을 실행하는 연산 방법으로서,
    상기 기능에 의해 상기 SIMD 방식을 채용하는 것에 의해 상기 SIMD 방식의 불채용시에는 사용되나 상기 SIMD 방식의 채용시에는 미사용이 되는, 상기 하나의 명령에 있어서의 하나 이상의 미사용 비트에, 상기 SIMD 방식으로 실행되는 통상 처리와는 상이한 확장 처리의 실행 지시를 상기 레지스터 및 상기 연산기 중 적어도 한쪽에 대해 행하는 확장 지시 정보를 설정하는 설정 단계
    를 포함하는 것을 특징으로 하는 연산 방법.
  9. 제8항에 있어서,
    상기 설정 단계에 있어서 상기 미사용 비트에 설정된 상기 확장 지시 정보와 상기 하나의 명령에 있어서의 상기 미사용 비트 이외의 비트에 설정된 정보에 기초하여, 상기 레지스터 및 상기 연산기 중 적어도 한쪽에 대해 상기 확장 처리의 실행 지시를 행하는 확장 명령을 생성하여 상기 하나의 명령으로서 출력하는 생성 단계를 더 포함하는 것을 특징으로 하는 연산 방법.
  10. 삭제
KR1020090023506A 2008-03-21 2009-03-19 연산 장치 및 연산 방법 KR101028428B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
JP2008073864A JP5481793B2 (ja) 2008-03-21 2008-03-21 演算処理装置および同装置の制御方法
JPJP-P-2008-073864 2008-03-21

Publications (2)

Publication Number Publication Date
KR20090101113A KR20090101113A (ko) 2009-09-24
KR101028428B1 true KR101028428B1 (ko) 2011-04-14

Family

ID=40785594

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020090023506A KR101028428B1 (ko) 2008-03-21 2009-03-19 연산 장치 및 연산 방법

Country Status (5)

Country Link
US (1) US9513914B2 (ko)
EP (1) EP2104034B1 (ko)
JP (1) JP5481793B2 (ko)
KR (1) KR101028428B1 (ko)
CN (1) CN101539851B (ko)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2011160353A (ja) * 2010-02-03 2011-08-18 Nec Access Technica Ltd 通信システム、通信装置、及び通信方法
GB2486739B (en) * 2010-12-24 2018-09-19 Qualcomm Technologies Int Ltd Instruction execution
JP6307975B2 (ja) * 2014-03-28 2018-04-11 富士通株式会社 演算処理装置及び演算処理装置の制御方法
CN106485319B (zh) * 2015-10-08 2019-02-12 上海兆芯集成电路有限公司 具有神经处理单元可动态配置以执行多种数据尺寸的神经网络单元
CN107688466B (zh) * 2016-08-05 2020-11-03 中科寒武纪科技股份有限公司 一种运算装置及其操作方法
CN111930426A (zh) * 2020-08-14 2020-11-13 西安邮电大学 一种可重构计算的双模指令集架构及其应用方法
CN112764810B (zh) * 2021-01-20 2022-09-20 重庆邮电大学 一种应用于处理器的寄存器控制simd指令扩展方法

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH09114664A (ja) * 1995-10-18 1997-05-02 Sharp Corp データ駆動型情報処理装置
WO2000068783A2 (en) * 1999-05-12 2000-11-16 Analog Devices, Inc. Digital signal processor computation core

Family Cites Families (17)

* Cited by examiner, † Cited by third party
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
US6116768A (en) * 1993-11-30 2000-09-12 Texas Instruments Incorporated Three input arithmetic logic unit with barrel rotator
US5509129A (en) * 1993-11-30 1996-04-16 Guttag; Karl M. Long instruction word controlling plural independent processor operations
KR100325658B1 (ko) * 1995-03-17 2002-08-08 가부시끼가이샤 히다치 세이사꾸쇼 프로세서
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 (ja) 2001-06-29 2003-01-17 Nec Corp 複素ベクトル演算プロセッサ
US20040193838A1 (en) * 2003-03-31 2004-09-30 Patrick Devaney Vector instructions composed from scalar instructions
US20040193837A1 (en) * 2003-03-31 2004-09-30 Patrick Devaney CPU datapaths and local memory that executes either vector or superscalar instructions
JP4283131B2 (ja) * 2004-02-12 2009-06-24 パナソニック株式会社 プロセッサ及びコンパイル方法
CN100552622C (zh) * 2005-03-31 2009-10-21 松下电器产业株式会社 运算处理装置
US7421566B2 (en) * 2005-08-12 2008-09-02 International Business Machines Corporation Implementing instruction set architectures with non-contiguous register file specifiers

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH09114664A (ja) * 1995-10-18 1997-05-02 Sharp Corp データ駆動型情報処理装置
WO2000068783A2 (en) * 1999-05-12 2000-11-16 Analog Devices, Inc. Digital signal processor computation core

Also Published As

Publication number Publication date
CN101539851A (zh) 2009-09-23
CN101539851B (zh) 2013-01-09
US20090240926A1 (en) 2009-09-24
US9513914B2 (en) 2016-12-06
JP5481793B2 (ja) 2014-04-23
JP2009230375A (ja) 2009-10-08
EP2104034A1 (en) 2009-09-23
EP2104034B1 (en) 2015-06-10
KR20090101113A (ko) 2009-09-24

Similar Documents

Publication Publication Date Title
KR101028428B1 (ko) 연산 장치 및 연산 방법
KR20110100381A (ko) 재구성 가능 프로세서 및 그 제어 방법
JP2013530450A (ja) 条件付き比較命令
JP6920277B2 (ja) 広いデータ要素のためのレジスタのペアを用いた偶数要素演算および奇数要素演算を有する混合幅simd演算
CN107851013B (zh) 数据处理装置和方法
CN100422979C (zh) 用于单指令、多数据执行引擎标志寄存器的评估单元
IL267998B1 (en) Element by vector operations in a data processing device
JPH0667851A (ja) オーバーフロー検出機能付き乗算装置
KR20180063542A (ko) 벡터 프로세서 및 그 제어 방법
JP3753991B2 (ja) プロセッサ、該プロセッサにおける演算命令処理方法及び演算制御方法
JP3935678B2 (ja) Simd積和演算方法、積和演算回路、および、半導体集積回路装置
CN108463801B (zh) 标识第一和第二架构寄存器编号的编码指令
JP2001209670A (ja) 高位合成方法、および、高位合成方法の実施に使用される記録媒体
JP5763472B2 (ja) 演算回路及び演算装置
JP4502040B2 (ja) Simd演算器、simd演算器の演算方法、演算処理装置及びコンパイラ
JP4613992B2 (ja) Simd演算器、simd演算器の演算方法、演算処理装置及びコンパイラ
JP2001209664A (ja) 高位合成方法並びに高位合成方法の実施に使用される記録媒体
US8423748B2 (en) Register control circuit and register control method
JP5813484B2 (ja) Vliwプロセッサと命令構造と命令実行方法
JP7140201B2 (ja) 演算処理装置及び演算処理装置の制御方法
JPS6186839A (ja) 演算処理装置
JP2007122209A (ja) 3次元グラフィックス描画装置、その方法及びプログラム
JP2013210837A (ja) 演算回路及び演算方法
JPH01185732A (ja) マイクロプログラム分岐方式
JPH01109445A (ja) レジスタファイル装置

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