KR20130062352A - 벡터 리딩 0, 벡터 트레일링 0, 벡터 오퍼랜드 1 카운트 및 벡터 패리티 계산을 위한 기능 유닛 - Google Patents
벡터 리딩 0, 벡터 트레일링 0, 벡터 오퍼랜드 1 카운트 및 벡터 패리티 계산을 위한 기능 유닛 Download PDFInfo
- Publication number
- KR20130062352A KR20130062352A KR1020137008221A KR20137008221A KR20130062352A KR 20130062352 A KR20130062352 A KR 20130062352A KR 1020137008221 A KR1020137008221 A KR 1020137008221A KR 20137008221 A KR20137008221 A KR 20137008221A KR 20130062352 A KR20130062352 A KR 20130062352A
- Authority
- KR
- South Korea
- Prior art keywords
- vector
- instruction
- operand
- logic
- leading
- Prior art date
Links
- 239000013598 vector Substances 0.000 title claims abstract description 131
- 238000000034 method Methods 0.000 claims abstract description 19
- 239000004065 semiconductor Substances 0.000 claims abstract description 13
- XDDAORKBJWWYJS-UHFFFAOYSA-N glyphosate Chemical compound OC(=O)CNCP(O)(O)=O XDDAORKBJWWYJS-UHFFFAOYSA-N 0.000 description 12
- 238000012545 processing Methods 0.000 description 9
- 238000010586 diagram Methods 0.000 description 4
- 230000006870 function Effects 0.000 description 4
- 238000013459 approach Methods 0.000 description 3
- 238000001514 detection method Methods 0.000 description 3
- 230000009467 reduction Effects 0.000 description 3
- 230000007423 decrease Effects 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 230000000873 masking effect Effects 0.000 description 2
- XUIMIQQOPSSXEZ-UHFFFAOYSA-N Silicon Chemical compound [Si] XUIMIQQOPSSXEZ-UHFFFAOYSA-N 0.000 description 1
- 230000003466 anti-cipated effect Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 230000000052 comparative effect Effects 0.000 description 1
- 230000002860 competitive effect Effects 0.000 description 1
- 230000003247 decreasing effect Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000010606 normalization Methods 0.000 description 1
- 230000008569 process Effects 0.000 description 1
- 238000011084 recovery Methods 0.000 description 1
- 229910052710 silicon Inorganic materials 0.000 description 1
- 239000010703 silicon Substances 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
Images
Classifications
-
- 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
- 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
-
- 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
- G06F9/30014—Arithmetic instructions with variable precision
-
- 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/30018—Bit or string instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30036—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Mathematical Physics (AREA)
- Computational Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Complex Calculations (AREA)
- Executing Machine-Instructions (AREA)
- Detection And Correction Of Errors (AREA)
- Advance Control (AREA)
Abstract
반도체 상에서 벡터 연산을 수행하는 방법이 설명된다. 방법은 반도체 칩 상에서 실행되는 벡터 기능 유닛으로 첫 번째 벡터 명령어를 수행하고 벡터 기능 유닛으로 두 번째 벡터 명령어를 수행하는 것을 포함한다. 첫 번째 벡터 명령어는 벡터 곱셈 덧셈 명령어(a vector multiply add instruction)이다. 두 번째 벡터 명령어는 벡터 리딩 0 카운트 명령어(a vector leading zeors count instruction)이다.
Description
본 발명은 일반적으로 컴퓨터 시스템과 관련되며, 보다 구체적으로, 벡터 곱셈 덧셈 결과를 계산하는데 사용되는 로직 블록을 이용하는 벡터 곱셈 덧셈 명령어 및 기타 명령어를 수행하는 프로세서 아키텍처에 관한 것이다.
컴퓨터 과학 분야에서 널리 알려진 프로세서 아키텍처의 2가지 종류는 "스칼라"와 "벡터"가 있다. 스칼라 프로세서는 단일 데이터 세트에 대한 작동을 수행하는 명령어를 실행하고자 설계되는 반면, 벡터 프로세서는 복수의 데이터 세트에 대한 작동을 수행하는 명령어를 실행하고자 설계된다. 도 1A 및 1B는 스칼라 프로세서와 벡터 프로세서 사이의 기본적인 차이점을 나타낸 비교적인 예시를 나타낸다.
도 1a는 단일 오퍼랜드 세트인 A 와 B가 단일(또는 "스칼라") 결과 C(즉, AB = C)를 생성하도록 AND 연산 되는 스칼라 AND 명령어에 관한 예시를 보여준다. 이와 대조적으로, 도 1B는 두 개의 오퍼랜드 세트 A/B 및 D/E가 동시에 벡터 결과 C, F(즉, A.AND.B =C, D.AND.E=F)를 생성하도록 동시에 각각 AND 연산 되는 벡터 AND 명령어에 대한 예시를 보여준다.
관련 분야에서 잘 알려진 바와 같이, 입력 오퍼랜드 및 출력 결과 양자 모두는 전용 레지스터(dedicated registers)에 저장된다. 예를 들어, 많은 명령어들이 두 개의 입력 오퍼랜드를 가질 것이다. 그러므로 두 개의 구별되는 입력 레지스터는 일시적으로 제각기의 입력 오퍼랜드를 저장하도록 사용될 것이다. 더욱이, 이들 동일한 명령어는 제 3(결과) 레지스터에 일시적으로 저장될 출력값을 생성할 것이다. 각각의 입력 (101a, b 와 102a,b) 및 결과 레지스터(103a, b)는 도 1a 및 b에 도시되어 있다. 특히, "스칼라" 대 "벡터" 특징은 쉽게 인식할 수 있다.
다시 말해, 도 1a의 스칼라 설계의 입력 레지스터(101a 및 102a)는 오직 스칼라값(A 및 B. 각각)만을 갖는다. 비슷하게, 도 1a의 스칼라 설계의 결과 레지스터(103a) 또한 스칼라값(C)만을 갖는다. 이와 대조적으로, 도 1b 벡터 시스템의 입력 레지스터(101b 및 102b)는 벡터값(레지스터 101b에서 A, D 및 레지스터 102b에서 B, E)을 갖는다. 비슷하게, 도 1b 벡터 시스템의 결과 레지스터(103b) 또한 벡터값(C, F)을 갖는다. 용어의 문제로서, 도 1b의 벡터 시스템의 각 레지스터(101b, 102b 및 103b)의 컨텐츠는 전체적으로(globally) "벡터"라 언급되고, 벡터 내 각각의 스칼라값은 "요소(element)"라고 언급될 수 있다. 그러므로, 예를 들어 레지스터(101b)는 "요소" A 및 "요소" D로 구성된 "벡터" A, D를 저장하는 것으로 도시된다.
스칼라 또는 SIMD 곱셈 연산만이 단일 프로세서 명령어로서 반도체 칩 프로세서 내에서 실제 구현되어 온 것으로 알려져 있다. 반도체 칩 프로세서 내에서 구현되는 것으로 알려진 스칼라 또는 SIMD 곱셈 명령어는 두 개의 정수 입력 오퍼랜드 곱의 하위 비트를 제공하는 "곱셈" 명령어(MUL: "multiply" instruction) 및 스칼라 정수 곱셈 연산의 상위 비트를 제공하는 "상위 곱셈" 명령어(MULH: "multiply high" instruction)를 포함한다.
스칼라 또는 SIMD 명령어로서 반도체 프로세서 칩에서 구현되어 온 것으로 알려진 다른 명령어는 카운드 리딩 제로(CLZ:count leading zero) 명령어, 카운트 트레일링 제로 명령어(CTZ:count trailing zero), 및 카운드 명령어(CNT:count)를 포함한다. 스칼라 CLZ 명령어는 스칼라 입력 A를 받고, A에 있는 최상위 1보다 앞에 있는 A 내의 0의 개수를 반환(예를 들어, 만약 A=1000이면, CLZ의 결과=0; 만약 A=0100인 경우, CLZ의 결과=1; 만약 A=0010인 경우, CLZ의 결과=2 등)한다. 스칼라 CTZ 명령어는 스칼라 입력 A를 받고, A에 있는 최하위 1 뒤에 따르는 A 내 0의 개수를 반환(예를 들어, 만약 A=1000이면, CTZ의 결과=3; 만약 A=0100인 경우, CTZ의 결과=2; 만약 A=0010인 경우, CTZ의 결과=1 등)한다. 스칼라 CNT 명령어는 입력 A를 받고, A에 내 1의 개수를 반환(예를 들어, 만약 A=1011이면, CTZ의 결과=3; 만약 A=1001인 경우, CTZ의 결과=2; 만약 A=0010인 경우, CTZ의 결과=1 등)한다.
본 발명은 예시의 방법으로 개략적으로 설명되고 첨부된 도면의 특징에 제한되지 않으며 도면 내 참조번호는 비슷한 요소를 나타낸다:
도 1은 스칼라 및 벡터 논리 연산을 도시한다.
도 2는 벡터 곱셈 덧셈 기능 유닛을 도시한다.
도 3은 도 2의 기능 유닛 200_N을 통하여 각각의 기능 유닛 200_1에 사용될 수 있는 전자 기능 유닛의 실시예를 도시한다.
도 4는 벡터 부동 소수점 곱셈 덧셈 연산을 도시한다.
도 5는 리딩 0, 트레일링 0, 오퍼랜드 1 카운트 및 패리티 명령어를 수행하는 확장된 로직을 가진 도 3의 기능 유닛의 실시예를 도시한다.
도 6a에서 6d는 명령어(리딩 제로 결정, 트레일링 제로 결정, 오퍼랜드 1 카운트 및 오퍼랜드 패리티 결정)의 실행을 각각 도시한다.
도 7은 반도체 프로세서에 대한 다이어그램을 도시한다.
도 8은 컴퓨팅 시스템에 대한 다이어그램을 도시한다.
도 1은 스칼라 및 벡터 논리 연산을 도시한다.
도 2는 벡터 곱셈 덧셈 기능 유닛을 도시한다.
도 3은 도 2의 기능 유닛 200_N을 통하여 각각의 기능 유닛 200_1에 사용될 수 있는 전자 기능 유닛의 실시예를 도시한다.
도 4는 벡터 부동 소수점 곱셈 덧셈 연산을 도시한다.
도 5는 리딩 0, 트레일링 0, 오퍼랜드 1 카운트 및 패리티 명령어를 수행하는 확장된 로직을 가진 도 3의 기능 유닛의 실시예를 도시한다.
도 6a에서 6d는 명령어(리딩 제로 결정, 트레일링 제로 결정, 오퍼랜드 1 카운트 및 오퍼랜드 패리티 결정)의 실행을 각각 도시한다.
도 7은 반도체 프로세서에 대한 다이어그램을 도시한다.
도 8은 컴퓨팅 시스템에 대한 다이어그램을 도시한다.
일부 컴퓨터 시스템들은 "곱셈 덧셈" 연산("multiply add" operation)을 요구할 수도 있다. 곱셈 덧셈 연산은 각각의 A, B 및 C가 입력 오퍼랜드인 (A*B)+C 계산을 실행한다. 도 2는 벡터 곱셈 덧셈(VMADD:vector multiply add) 명령어를 수행할 수 있는 벡터 프로세싱 기능 유닛(200)의 상위 레벨 아키텍처 도면이다. 도 2에 나타나는 것과 같이, 기능 유닛은 제각기의 입력 벡터 각각의 요소에 대해 스칼라 곱셈 덧셈 연산을 수행하는 200_1에서 200_N까지의 N개의 스칼라 로직 유닛을 포함한다. 여기서, 입력 레지스터(203)는 입력 벡터 A=A_1, A_2, ... A=N을 갖고; 입력 레지스터(204)는 B=B_1, B_2, ... B=N을 갖고; 입력 레지스터(205)는 C=C_1, C_2, ... C_N을 갖는다. 스칼라 연산 유닛 200_1은 ((A_1)*(B_1))+C_1 계산을 수행하고; 스칼라 연산 유닛 200_2는 ((A_2)*(B_2))+C_2 계산을 수행하고; 스칼라 연산 유닛 200_N은 ((A_N)*(B_N))+C_N 계산을 수행한다. 일 실시예에서, 각각의 스칼라 연산 유닛은 32 비트 오퍼랜드 연산 모드 및 64 비트 오퍼랜드 연산 모드를 지원한다. 로직 유닛 200_1에서 200_N에 의해 생성된 202_1에서 202_N 개개의 결과는 출력 레지스터에 저장된 벡터 기능 유닛(200)에 의해 제공되는 출력 벡터 개개의 요소와 대응(correspond)한다.
도 2는 또한 SIMD 연산이 아닌 벡터 연산을 행하기 위해 마스킹 층이 출력 회로(206)에 통합될 수 있음을 도시한다. 입력 오퍼랜드의 차수가 벡터 머신에 대하여 변하는 반면 SIMD 머신에 대하여는 고정되어 있다는 점에서, 벡터 연산은 SIMD 연산과는 다른 것처럼 비추어 질 수 있다. 도 2의 벡터 머신 내 요소(element) 개수를 달리할 수 있는 능력은 출력(206)에서 수행될 수 있는 마스킹 방법에 의해 제시된다. 구체적으로, 각각의 출력 요소는 각각 고유의 기록 로직 회로(도시되지 않음)와 함께 기록될 수도 있다. 일 실시예에서, 기록 로직 회로는 어느 출력 요소 위치에라도 기록할 수 있다. 기록 로직 회로가 유효 벡터 오퍼랜드 요소와 대응하는 요소에 대하여만 가능하도록 함으로써, 가변 길이 벡터가 처리될 수 있다. 이것은 유효 벡터 요소에 대응하는 200_1에서 200_N까지의 스칼라 기능 유닛의 요소에만 근본적으로 연산 가능하도록 하는 효과를 가진다. 더욱이, 마스크는 사용되지 않는 요소에 대한 예외(exception)가 나타나는 것을 억제하면서 유효 요소에 대하여 검출된 어떤 산술 연산 예외는 표현될 수 있도록 한다.
이하 더 상세히 설명되는 것과 같이, 벡터 곱셈 덧셈 명령어를 계산하는 것 외에 기능 유닛(200)은 또한 다음 중 하나 이상의 다수의 추가 벡터 명령어를 계산할 수 있다. 즉, ⅰ) 벡터 곱셈 덧셈 계산의 상위 비트를 제공하는 정수 오퍼랜드에 대한 벡터 곱셈 덧셈 상위 명령어(VMADDH: vector multiply add high instruction); ⅱ) 벡터 곱셈 덧셈 계산의 하위 비트를 제공하는 정수 오퍼랜드에 대한 벡터 곱셈 덧셈(VMADDL); ⅲ) 입력 벡터 C를 받고, 그 결과로 입력 벡터 C 요소의 리딩 0 카운트와 제각기 대응하는 요소를 갖는 출력 벡터를 제공하는 벡터 카운트 리딩 0 명령어(VCLZ); ⅳ) 입력 벡터 C를 받고, 그 결과로 입력 벡터 C 요소의 트레일링 0 카운트와 제각기 대응하는 요소를 갖는 출력 벡터를 제공하는 벡터 카운트 트레일링 0 명령어(VCTZ); ⅴ) 입력 벡터 C를 받고, 그 결과로 입력 벡터 C의 개별 요소(individual elements) 안에 있는 1의 카운트와 제각기 대응하는 개별 요소를 갖는 출력 벡터를 제공하는 벡터 카운트 명령어(VCNT); 및 ⅵ) 입력 벡터 C받고, 그 결과로 입력 벡터 C의 개별 요소의 패리티 상태(짝수 또는 홀수)와 제각기 대응하는 개별 요소를 갖는 출력 벡터를 제공하는 벡터 패리티 명령어(VPAR) 중 하나 이상의 명령어를 계산할 수도 있다. VMADD 명령어처럼, 상기에 열거된 각각의 명령어는 벡터 입력 A, B, 및 C의 제각기의 입력 오퍼랜드 요소의 스칼라 실행에 의해 성취된다. 다른 실시예에서, 이하 더 상세히 다시 설명되는 것처럼, 기능 유닛(200)에 의해 실행되는 임의의/모든 명령어는 정수 오퍼랜드뿐 만 아니라 부동소수점 상에서도 실행가능하다.
도 3은 도 2의 스칼라 연산 유닛 중 하나의 실시예를 도시한다. 현재 설명된 바와 같이, 스칼라 연산 유닛은 앞서 언급된 VMADD, VMADDH, VMADDL, VCLZ, VTLZ, VCNT 및 VPAR 명령어 중 임의의 것을 지원하여, 입력 벡터 A, B, 및 C의 제각기의 요소에 대해 스칼라 연산을 수행할 수 있다.
입력 벡터 A, B, C 및 출력 벡터 R의 요소가 부동소수점 형식으로 명시되는 경우의 VMADD 명령어 연산이 지금 설명된다. 본 기술 분야에서 알려진 대로, 부동소수점 내 수치값의 표현(articulation)은 (부호)*(가수)*(지수)의 형식을 취한다. 부호는 수치값이 양수 인지 음수 인지를 나타내고, 가수값은 그 값의 "수(nember)"를 지정하고, 지수값은 값의 차수를 지정한다. VMADD 명령어는 ((A_sgn)(B_sgn)(A_mantissa)(B_mantissa)(A_exponent+B_exponent))+(C_sgn)(C_mantissa)(C_exponent)와 같이 지정될 수 있다.
도 3을 살펴보면, 곱셈기(301)는 (A_부호)(B_부호)(A_가수)(B_가수)항을 최소한 (A_가수)(B_가수)의 명시적 계산으로 계산한다. 부호의 곱은 ⅰ) A_부호와 B_부호가 동일 값인 경우 양수; 또는 ⅱ) A_부호와 B_부호가 다른 값인 경우 음수로 쉽게 계산된다. 지수 곱 블록(product exponent block)(302)은 ⅰ) (A_지수+B_지수); ⅱ) C_지수 중 더 큰 값을 취함으로써 최종 결과를 위한 지수의 초기 계산을 결정한다. 즉, 만약 C 값이 A와 B의 곱보다 훨씬 크다면, C의 차수가 최종 결과의 차수를 제어할 것이다. 유사하게, AB가 C보다 더 크다면 AB의 차수가 최종 결과의 차수를 제어할 것이다.
덧셈기(305)는 AB + C 계산의 덧셈을 수행한다. 하지만, 덧셈이 부동 소수점 형식으로 수행될 수 있기 전에, 일 실시예에서, AB 항의 지수(즉, 곱셈기(301)의 출력과 관련된 지수)는 C항의 지수와 동일하도록 만들어진다. 지수 차이 블록(exponent difference block)(303) 및 시프터(304)는 이러한 프로세스를 위하여 사용된다. 특히, 지수 차이 블록(303)은 AB항 지수 및 C항 지수 사이의 차이[즉, ⅰ)(A_지수+B_지수);와 ⅱ) C_지수 사이의 차이]를 취한다. 두 항 중 더 작은 것이 또한 식별(예를 들어, 지수 곱 블록(302)의 출력을 분석함으로써)된다. 두 항 중 작은 항의 가수의 2진점 위치(binary point position), 즉, AB 곱 항 또는 C 항 중 더 작은 지수 항을 가지는 항의 가수의 2진점 위치 차이 블록(303)에 의해 결정된 두 항 사이의 지수 차이와 동일한 수의 비트 위치만큼 왼쪽으로 이동(shift)된다. 이동된 항 및 다른, 이동되지 않은 항은 덧셈기(305)로 전달된다.
일 실시예에서, AB곱 항이 5.5555E8과 동일하고 C항이 2.2222E6과 동일하다면, C항 가수의 2진 소수점(2.2222)은 시프터(304)에 의해 왼쪽으로 두 자리(0.02222) 이동되어 덧셈기(305)가 동일한 지수값을 가진 두 개 수의 가수를 적절히 더할 수 있도록 한다. 이러한 예에서, 덧셈기(305)는 5.5555E8 및 0.02222E8을 적절히 더할 것이다. 그러므로, 본 실시예에서 A항과 C항 중 하나의 가수에 대한 2진 소수점에 적용되는 적절한 이동량을 결정하도록 시프터(304)는 차이 블록(303)의 출력에 연결된다. 다른 실시예로, AB항 및 C항 중 하나의 가수의 2진 소수점은 다른 하나가 이동되지 않는 동안 이동된다. 그리고 나서 이동된 가수값 및 이동되지 않은 가수값은 덧셈기(305)에 제공된다. 물론, 차이 블록(303)이 AB항과 C항의 지수가 동일하다고 결정하는 경우, 이동은 수행되지 않으며 AB항 및 C항의 가수는 이동되지 않은 상태로 뎃셈기(305)로 전달된다.
실시예에서, 예를 들어 C항의 부호가 음수인 경우 효과적인 뺄셈 AB-C가 적절히 수행될 수 있도록 AB항 및 C항의 부호값이 또한 덧셈기(305)에 전달된다. 두 항 사이의 유효 뺄셈(즉, AB항의 부호가 C 항의 부호와 다른 경우)이면서 두 항의 절대값이 거의 같은 경우, 덧셈기(305)의 출력은 제로에 가까운 수가 될 수도 있다. 이런 이유로, 덧셈기(305) 출력에서의 가수는 첫 번째 1이 발견되기 전에 일련의 리딩 0을 가질 수도 있다. 이런 경우, 더 정밀한 결과를 생성하기 위해, 덧셈기(305) 출력 가수값의 2진 소수점은 첫 번째 값으로 정수를 가지는 가수를 생성하도록 이동되어야 한다.
예를 들어, 덧셈기에 AB 가수 및 부호항 -5.555566... 그리고 C 가수 및 부호항 +5.555555...이 제공되면, 덧셈기(305)는 -0.000011의 출력을 생성할 것이다. 최종 결과의 정밀도를 높이기 위해, 덧셈기(305) 결과의 2진 소수점은 1.111111...의 형식을 취하도록 오른쪽으로 5자리 이동되어야 한다. 2진 소수점이 오른쪽으로 이동함은 지수값 변화를 의미하므로, 지수값 또한 변할 필요가 있다. 이러한 특정 실시예에서, 오른쪽 5자리로 가수 2진 소수점을 이동시키는 것은 지수값을 5까지 감소시키는 것과 같다. 그러므로 덧셈기(305) 출력에서 제공된 가수항이 리딩 0을 가지는 경우, 2진 소수점은 오른쪽으로 이동되어야 할 뿐만 아니라 지수곱 블록(303)의 출력의 지수항 또한 감소해야 한다. 여기서, 리딩 1 안티시페이터 블록(leading 1 anticipator block)(306), 정규 시프터(normalization shifter)(307) 및 지수 덧셈기(308)는 이러한 과업을 달성하는데 사용된다.
구체적으로 말하면, 리딩 1 안티시페이터(306)는 덧셈기 출력 내 첫 번째 1(가장 왼쪽의)의 위치를 표시하고, 정규 시프터(307)에 덧셈기 출력에서 2진 소수점이 얼마나 많이 오른쪽으로 이동되어야 하는지를 표시하고, 지수 블록(302)으로부터 얼마나 많은 지수값이 감소되어야 하는지를 지수 덧셈기(308)에 표시한다. 하나의 실시예로, 덧셈기 출력의 2진 소수점이 오른쪽으로 움직이는 것은 실제로 덧셈기 출력의 숫자 컨텐츠(numerical content)를 왼쪽으로 움직임으로써 달성된다. 동일한 또는 다른 실시예로, 덧셈기(308)는 리딩 1 안티시페이터(306)로부터 도착한 값이 지수곱(302) 출력 값에서 감산될 것임을 이해한다.
일 실시예에서, 리딩 1 안티시페이터는 하기와 같이 동작한다. 덧셈기(305)로 제공된 두 개의 입력 오퍼랜드(즉, AB 항의 가수 및 C항의 가수)에 관하여, 리딩 1 안티시페이터는 두 개의 항 각각에서 리딩 1의 위치를 결정하고 리딩 1 위치에 관한 페어(pair) 중 가장 왼쪽에 있는 비트 위치를 표시한다. 예를 들어, AB항의 가수가 0001100101...이고, C항의 가수가 0000100000...이면, 두 개의 오퍼랜드 중 네 번째 비트 위치(AB 가수 항의)가 가장 왼쪽에(또는 상위) 있는 리딩 1이기 때문에 리딩 1 안티시페이터(306)는 네 번째 비트 위치를 표시할 것이다. 그리고 나서 이러한 결정이 덧셈기(305) 출력의 리딩 1 위치가 된다고 가정된다. 많은 경우 이러한 가정은 정확하고 정규 시프터(307)에 의해 수행된 덧셈기 출력 이동량 및 덧셈기(308)에 의해 수행된 지수 감소량을 결정하는데 사용된다.
일부 경우의 가정은 정확하지 않다. 상기의 예시에서 제공된 두 개의 오퍼랜드는 덧셈기 출력 0010000101...을 생성하도록 덧셈기에 의해 더해질 것이다. 가정이 정확하지 않은 경우에 있어, 현재 실시예와 같이, 두 개의 오퍼랜드에 관한 덧셈은 리딩 1 안티시페이터에 의해 식별된 비트 위치에서 올림(carry)항을 발생(즉, 리딩 1 안티시페이터에 의해 식별된 덧셈기 출력의 비트 위치가 0임)시키므로 리딩 1 안티시페이터에 의해 식별된 위치의 1비트 왼쪽 비트 위치가 1이다. 이와 같이, 일 실시예에서, 리딩 1 인디페이터(306)에 의해 표시되는 가정값을 덧셈기 출력이 이동되어야되는(또한 그의 지수가 감소해야 하는) 양(amount)으로서 릴리즈(release)하기 전에 로직 회로는 이하 중 하나 또는 둘 모두를 "체크"한다: ⅰ) 리딩 1 인디케이터에 의해 식별된 덧셈기(305) 출력 위치가 0인지를 확인; ⅱ) 리딩 1 인디케이터에 의해 식별된 위치 왼쪽에 있는 덧셈기(305) 출력 위치가 1인지 확인. 만약 이러한 상태 중 하나가 참이라면 정확한 답은 리딩 1 인디케이터(306)에 의해 표시된 비트 위치가 아니라 리딩 1 인디케이터(306)에 의해 표시된 비트 위치의 한 비트 왼쪽에 있는 비트 위치이다. 이러한 경우, 리딩 1 인디케이터(306)는 본질적으로 가정을 수정하고 시프터(307) 및 덧셈기(308)에 정확한 정보를 제공할 것이다.
이 시점에서, 리딩 1 안티시페이터가 이용되는 이유는 리딩 1 위치를 결정하는 프로세서가 다소 포괄적이고, 하나 이상의 클록 사이클을 소비할 수도 있기 때문이라는 것을 유의할 필요가 있다. 이와 비슷하게, 덧셈기(305)에 의해 수행되는 덧셈 또한 다소 포괄적이고 하나 이상의 클록 사이클을 소비할 수도 있다. 만약 리딩 1 결정이 덧셈기(305)에 이어서 행해지도록 구성되었다면, AB + C의 합산과 합산의 리딩 1 위치를 결정하는데 두 개 이상의 클록 사이클이 소비될 것이다. 하지만, 도 3의 아키텍처라면 덧셈기(305)의 합산 및 안티시페이터(306)의 리딩 1 결정은 대개 동시에 이루어짐으로써 순차적 접근에 비해 총 소비된 클록 사이클 시간을 감소시킨다. 더욱이, 리딩 1 안티시페이터(306)의 결과가 잘못된 것으로 체크 될지라도, 위에 설명한 "체크" 연산은 비교적 간단하고 이것을 실행하는데 사용되는 로직은 비교적 짧은 단대단(end-to-end)이어서, 체크 동작의 타임 패널티가 수락 가능하고 따라서 전체적으로는 더 좋은 솔루션이랄 수 있다.
일단 시프터(307)가 덧셈기(305)의 결과를 이동시키고 덧셈기(308)가 지수값을 감소(만약 임의의 그러한 이동 및 지수 감소가 허용된다면)시키면, FMADD 명령어(AB + C)의 답은 본질적으로 결정된다. 최종 프로세싱은 원하는 정밀도 및 적절한 형식으로 답을 분명히 표현한다. 이러한 프로세싱 중 일부분은 가수값을 라운딩(rounding)하는 것을 포함한다. 실시예에서, 명령어는 두 가지 정밀도 레벨(단정도 또는 배정도) 중 하나를 명시할 수 있다. 다른 실시예로, 배정도 값은 단정도값이 표현되는 비트 수의 2배(또는 거의 2배)로 표현된다. 또 다른 실시예로, 단정도 형식은 부호에 대하여 1 비트, 가수에 대하여 23비트 그리고 지수에 대하여 8비트로 구성된 32비트이며, 배정도 형식은 부호에 대하여 1비트, 가수에 대하여 52비트 그리고 지수에 대하여 11비트로 구성된 64비트이다. 또 다른 실시예로, 기능 유닛(300) 내부에서, 가수는 정밀도의 128비트까지 계산될 수 있다. 여기서, 곱셈기(301)의 출력폭은 두 개의 64비트 정수값에 관한 정수 곱셈을 다루도록 128비트로 이어진다. 이와 비슷하게, 덧셈기(305) 출력 및 시프터(307) 출력 또한 128비트이다.
이와 같이, 다양한 실시예에서 결과의 가수에 대하여 기능 유닛(300) 내부에서 계산된 비트 수는 실제 최종 결과의 가수로 표현되는 비트 수를 초과할 수 있다. 그러므로, 라운딩 연산은 최종적으로 제공된 가수 아래 비트 중 임의의 비트가 1인지를 확인한다 - 이것은 스티키 비트(sticky bit)로 언급된다. 도 3의 아키텍처에서, 트레일링 0 로직 블록(309)은 시프터(307) 출력 내 트레일링 0의 수를 결정한다. 이러한 수는 기능 유닛(300)에 의한 계산에서 추가 비트 수와 비교되어 최종적으로 제시된 가수 아래의 비트에 1이 있는지를 표시한다. 만약 최하단(bottom)에서 0을 이동시키면서 리딩 0을 제거하기 위해 가수가 왼쪽으로 이동되면서, 리딩 1 블록(306)에 의해 계산된 왼쪽 이동량과 동일한 개수의 추가 트레일링 0이 고려되어야 한다. 여기서, 시프터(307) 출력 내 트레일링 0 개수를 정확히 계산하기 위해서, 트레일링 0 검출기(309)는 리딩 1 안티시페이터(306)에 의해 부과된 임의의 시프트를 인식하고 있어야 하기 때문에 트레일링 0 검출기(309)는 리딩 1 안티시페이터(306)로부터의 입력을 수신하는 것으로 도시된다.
최하위(가장 오른쪽) 비트 위치로부터 시작하여 한 비트씩 왼쪽으로 각각의 차상위 비트로 이동하는 0의 수는 최하위(가장 오른쪽) 1의 위치까지 결정된다. 만약 트레일링 0의 수가 주어진 정밀도를 위해 가수의 최하위(가장 오른쪽) 비트 위치까지 또는 이상(왼쪽으로) 확장한다면, 최하위 비트 위치는 현재값(즉, 라운드업 연산은 적용 안 함)으로 유지된다. 그렇지 않다면, 즉, 라운드업이 발생하는 경우에는, 수락 가능한 정밀도를 위해 가수의 최하위 비트 위치는 ⅰ) 0에서 1로 또는 ⅱ) 1에서 0으로 증가하고 올림(carry)항은 차상위 비트 위치까지 리플을 발생시킨다.
라운드업 덧셈기(310)는 적용 가능한 정밀도를 위해 시프터(307) 내 결과 가수의 최하위 비트 위치에 1 값을 더하는 데 사용된다. 덧셈기(310)의 출력은 원하는 정밀도에 따른 최종 가수값으로 취해진다. 일 실시예에서, 덧셈기(310)의 출력은 원하는 정밀도에 따른 최종 가수값으로 항상 취해지되, 여기서 라운드업이 발생하지 않는 경우 시프터(307) 출력에 효과적으로 0이 더해지고 라운드업이 발생하는 경우 주어진 정밀도를 위해 시프터(307) 출력 가장 오른쪽 위치에 1 값이 더해진다. 도 3에 나타나듯이, 스티키 비트 계산 로직(311)은 트레일링 0 검출 로직(309)의 출력 및 원하는 정밀도에 근거하여 라운드업이 필요한지 아닌지를 결정하고, 라운드업 제어 로직(312)은 스티키 비트 결정에 따라 원하는 정밀도를 위한 최하위 비트 위치에 덧셈기(310)로 0 또는 1(만약 라운드업이 없으면 0이 취해지고, 라운드업이 발생하면 1이 더해짐)을 제공한다.
도 3의 실시예에서, 트레일링 0 검출 로직(309)은 덧셈기(305)에 제공되는 오퍼랜드에 대해 연산하여 리딩 1 안티시페이터(306)처럼 덧셈기(305)와 동시에 연산할 수 있도록 한다는 것을 유의한다. 다른 실시예에서, 트레일링 0 검출기는 각각의 오퍼랜드 내 최하위(가장 오른쪽) 비트 값을 식별하고, 덧셈기(305) 출력의 트레일링 0 개수를 결정하기 위한 근거로서 두 개의 오퍼랜드 중 최하위 비트 위치를 표시한다. 리딩 1 안티시페이터에 의해 발생한 임의의 이동(shifting)은 또한 트레일링 0 검출기(309)에 의해 계수(accounted)된다. 다시 말해, 주어진 정밀도를 위해 덧셈기(305) 결과의 임의의 이동은 시프터(307) 출력의 최하위 비트까지 또는 이상까지 확장 여부를 결정하기 전에 얼마나 많은 0이 검출될 필요가 있는지에 영향을 미칠 것이다. 트레일링 0 검출을 위한 이러한 접근은 (수학적으로 말하자면) 오류 가능성이 없기 때문에 어떠한 "체크"(리딩 1 안티시페이터에서 처럼)도 요구되지 않는다.
상기의 설명은 VMADD 명령어의 부동소수점 계산의 관점에서 작성되었다. 정수 VMADD 명령어의 경우, 정수 오퍼랜드가 곱셈기(301) 입력으로 단순히 제공된다. 여기서, 53b 배정도 부동소수점 가수 계산을 지원하는 실시예에 있어, 곱셈기는 64 b 정수 곱셈을 다루도록 설계된다. 이처럼, 곱셈기 출력은 128비트 폭이다. 64 비트 정수 연산의 경우, 실시예에서, C항의 최하위 비트가 곱셈기(301) 출력의 최하위 비트와 정렬되도록 하기 위해 C항은 왼쪽에 64개의 0이 추가(padding)된다. 즉, 덧셈기(305)에 제공된 C항 오퍼랜드는 왼쪽 절반에 64비트의 0을 갖고 오른쪽 절반에 64 비트의 C 입력 오퍼랜드를 갖는다. 실시예가 한 개의 배정도 또는 64 비트 정수 및 두 개의 단정도 또는 두 개의 32 비트 정수 연산에 관한 계산을 지원하기 때문에, 32b의 정수에 대하여 64b 폭을 만들고자 두 개의 C 항(각각 32b) 각각의 상위 절반에 0이 추가된다. 32비트 정수 연산의 경우, C항은 적절히 추가된다. 실시예에서, 0 추가는 시프터(304)에 의해 C항을 오른쪽으로 이동시킴으로써 효과적으로 달성된다. 추가의 실시예에서, 정수 연산을 위해 지수 차이 블록(303)은 정수 연산을 위한 정밀도에 따라 이동량을 지정하는데 사용된다. 즉, 예를 들어, 64비트 정수연산의 경우, 시프터(304)로 하여금 C항을 64비트 오른쪽으로 이동시키도록 지수 차이 블록(303)은 시프터(304)에 입력신호를 송신하도록 구성되고, 32 비트 연산의 경우, 시프터(304)로 하여금 C항을 96비트 오른쪽으로 이동시키도록 지수 차이 블록(303)은 시프터(304)로 입력 신호를 송신하도록 구성된다.
덧셈기(305)는 AB + C의 정수값을 결정하기 위해 곱셈기 출력과 이동되고 정렬된 C항 값을 더한다. AB + C의 정수값 사이즈가 최종 결과의 허용가능한 비트폭을 초과할 수도 있기 때문에, 일 실시예에서는 덧셈기(305)의 출력 중 상위 절반 또는 하위 절반이 시프터(307)에 의해 최종 결과로서 전해진다. 예를 들어, 덧셈기(305)의 출력이 128 비트 폭이고 64 비트 정수 연산이 적용되는 실시예에 있어서, 명령어의 결과는 단지 64 비트 폭이 될 수도 있으며, 그럼에도 불구하고 내부 기능 유닛은 128 비트 정수 값을 계산할 수 있다. 이처럼, 정수 연산을 위한 두 개의 다른 VMADD 명령어(VMADDH 및 VMADDL)가 존재한다. VMADDH는 128 비트 덧셈기 출력 중 최상위 64비트를 표현하고, VMADDL은 128 비트 덧셈기 출력 중 최하위 64비트를 표현한다. 정수 VMADD 연산의 경우, 지수곱(302), 리딩 1 안티시페이터(307), 지수 덧셈기(308), 트레일링 0 검출기(309), 스티키 비트 로직(311) 및 라운드업 제어 로직(312)은 아마도 덧셈기(310)에 중요하지 않는 0을 더하는 것 외에는 사용되지 않는다.
도 4a는 상기에 설명된 기능 유닛의 부동 소수점 VMADD 연산의 실시예를 도시하고, 도 4b는 상기 설명된 기능 유닛의 정수 VMADDL/H 연산의 실시예를 도시한다. 도 4a를 살펴보면, 오퍼랜드 A 및 B에 대한 각각의 가수 값이 곱해진다(401). 거의 동시에, AB항과 C항의 지수값 사이의 차이가 결정되고(402) AB항 지수와 C항 지수의 최대값이 결과에 대한 초기 지수로서 결정된다(403). AB항 및 C항의 지수 사이에서 결정된 차이에 근거하여, 큰 지수를 가진 항의 가수와 정렬하기 위해 작은 지수를 가진 항의 가수가 이동된다(404). AB항 및 C항의 정렬된 가수들은 더해진다(405). 거의 동시에, 덧셈기 결과의 리딩 1이 예상(anticipate)된다(406). 리딩 1에 대한 예상은 AB + C의 덧셈기 결과에 대하여 체크된다(407). 리딩 1 결정에 근거하여, AB + C의 가수 합산 결과는 정수값으로 시작하도록 이동(408)되고 명령어의 지수 결과는 조정(409)된다. 필요한 경우 라운드 업이 수행(410)되고 가수 값은 명시된 정밀도에 근거하여 표시된다.
도 4b를 살펴보면, 정수 A 및 B항이 곱셈되고(411) C항이 AB 곱과 정렬되도록 추가(412)된다. AB 및 C 정수항은 더해(413)진다. 만약 명령어가 상위 부분을 명시하면 AB + C의 상위 부분이 표현되고, 만약 명령어가 하위 부분을 명시하면 AB + C의 하위 부분이 표현된다. VMADDL과 함께 연속하여 VMADDH를 실행하는 것 및 분리된 장소에 결과를 저장하는 것은 시스템이 AB + C에 대한 전체 결과를 유지하도록 한다는 점을 유의한다.
기능 유닛(300)에 관한 상기의 설명이 벡터 기능 유닛 내에서 여러 번 실시(instantiate)되어 벡터 곱셈 덧셈 명령어(VMADD)가 수행되도록 할 수 있는 기능 유닛에 대한 설명이라는 사실을 반복하는 것은 가치가 있다.
도 3의 기능 유닛(300)은 또한 하기의 명령어 중 임의의 하나 이상의 스칼라 요소를 수행하도록 향상될 수 있다: ⅰ) 벡터 카운트 리딩 0 명령어(VCLZ)는 입력 벡터 C를 받고 입력 벡터 C의 요소에 대한 리딩 0 카운트와 제각기 대응하는 요소(elements)를 갖는 출력 벡터를 결과로 제공한다; ⅱ) 벡터 카운트 트레일링 0 명령어(VCTZ)는 입력 벡터 C를 받고 입력 벡터 C의 요소의 트레일링 0 카운트와 제각기 대응하는 요소를 갖는 출력 벡터를 결과로 제공한다; ⅲ) 벡터 카운트 명령어(VCNT)는 입력 벡터 C를 받고 입력 벡터 C의 개별 요소 내 1의 총 개수와 제각기 대응하는 개별 요소를 갖는 출력 벡터를 결과로 제공한다; ⅳ)벡터 패리티 명령어(VPAR)는 입력 벡터 C를 받고 입력 벡터의 개별 요소의 패리티 상태(짝수 또는 홀수)에 제각기 대응하는 개별 요소를 갖는 출력 벡터를 결과로 제공한다.
도 5는 VCLZ. VCTZ, VCNT 및 VPAR 명령어의 스칼라 구성요소를 수행하기 위한 추가 로직 및 로직 위의 배선 및 도 3에 나타나는 배선을 포함하는 강화된 기능 유닛(500)이다. 일 실시예에서, 이들 명령어에 대해, 도 5의 기능 유닛(500)에 의해 처리되는 벡터의 요소는 AB + C 명령어의 C 오퍼랜드가 수신되는 데이터 경로를 따라 수신된다. 이것은 단지 하나의 방안이라는 것과 VCLZ, VCTZ, VCNT 및 VPAR 명령어 중 임의의 것에 대한 오퍼랜드는 설계자 선택상 AB + C의 A, B 및 C 오퍼랜드 중 어느 하나에 관한 데이터 경로를 따라 수신될 수도 있다는 것이 강조되어야 한다. 편의를 위해 VMADD 명령어를 실행하는 여러 로직 블록 사이의 상호연결은 도시되지 않는다. 그러한 상호연결이 존재한다(예를 들어, 도 3에 나타나는 것처럼)는 것은 이해되어야 한다. 물론, 도 3 및 도 5 모두에서 나타나는 블록 중 어떤 것은 반도체 로직 회로와 함께 구현될 수도 있다.
도 5의 특정 실시예에 따르면, VCLZ, VCTZ, VCNT 및 VPAR 명령어 중 임의의 것에 대한 오퍼랜드는 C 오퍼랜드의 데이터 경로를 따라 수신되기 때문에, 오퍼랜드는 정렬 시프터(504)에 의해 수신된다("시프터" 중 어떤 것은 시프터 레지스터로서 구현될 수 있음을 유의). 명령어가 VMADD 명령어가 아닌 VCLZ, VCTZ, VCNT 및 VPAR 명령어 중 임의의 것을 특정할 때 정렬 시프터는 지수 차이 유닛(503)으로부터의 임의의 입력을 무시하고 제각기의 명령어에 해당하는 최소한의 로직에 C 오퍼랜드를 단순히 제공한다. 즉, VCLZ 명령어에 대한 로직(506), VCTZ 명령어에 대한 로직(509), 및 VCNT 명령어에 대한 로직(530)이다. 더욱이 정렬 시프터(504)는 VMADD 명령어에 대하여 AB 항의 가수를 이동시키는 0의 시작 값을 데이터 경로 상에 표시한다.
표시된 오퍼랜드에 대한 리딩 0 카운트를 표시하는 VCTZ 명령어에 관하여, 도 5를 도 3과 비교하면 로직(506)이 리딩 1 및 리딩 0 안티시페이터 로직 회로로서 구현된다는 것을 유의한다(도 3의 리딩 1 안티시페이터 로직 회로(307)와 반대로). 여기서, 오퍼랜드 내 리딩 0의 개수는 오퍼랜드 내 리딩 1의 위치와 관련된다는 점을 유의한다. 구체적으로, 알려진 비트 폭 오퍼랜드에 대하여, 리딩 0의 개수는 오퍼랜드 폭과 오퍼랜드 내 리딩 1의 비트 위치 사이의 차이와 대응한다. 일 실시예에서 리딩 1 안티시페이터(306)는 VMADD 명령어에 대하여 AB 및 C 가수 항 모두에서 리딩 1 위치를 결정하고, 두 항 중 가장 상위의 리딩 1(가장 왼쪽)의 위치를 표시하였음을 상기하기 바란다. 여기서 정렬 시프터(504)는 VLCZ 명령어에 대하여 AB항의 0 값을 제공하도록 구성되기 때문에, C항(VLCZ 명령어에 대한 오퍼랜드)의 리딩 1 위치만이 표시될 것이다. 이것으로부터, 오퍼랜드의 리딩 0의 개수는 결정될 수 있다. 상이한 오퍼랜드 비트 길이는 해당 비트 길이가 명시되거나 달리 알려진다면 쉽게 처리(예를 들어, 32 비트 또는 64비트)될 수 있음을 유의하기 바란다.
특정 환경에서 초기 답이 부정확할 수 있기 때문에, 도 3의 리딩 1 안티시페이터(306)는 "안티시페이터"로 여겨졌음을 상기하기 바란다. 구체적으로, 덧셈기(305)의 출력은 체크되어야 한다. 하지만, VCLZ 명령어의 경우, 덧셈기(305)가 사용되지 않기 때문에 문제가 발생하지 않는다. 이와 같이, 로직(506)으로부터의 "답"은 정확하고 확인될 필요가 없다. 리딩 0 카운트는 명령어에 대한 적절한 형식으로 답을 표시하기 위해 포맷 로직(513)에 결국 보내진다. 실시예에서, 리딩 0 카운드(VMADD 명령어에 대한 리딩 1 카운트와 같은)는 포맷 로직(513)으로 전달하는 지수 조정 덧셈기(508)에 보내진다.
입력 오퍼랜드의 트레일링 0 카운드를 표현하는 VCTZ 명령어에 관하여, 오퍼랜드 C는 트레일링 0 결정 로직(509)으로 전달된다. 트레일링 0 결정 로직(309)은 각각의 오퍼랜드(AB 및 C)에 있는 1의 최하위(가장 오른쪽) 비트 값을 식별하고 두 개의 오퍼랜드 중 최하위 비트 위치를 덧셈기(305)의 출력에 있는 트레일링 0 개수를 결정하는 근거로서 표시한다는 도 3의 설명을 상기하기 바란다. 동일한 연산이 VCTZ 명령어의 연산에 관하여 적용되되 다만 부가적으로 C항(VCTZ 명령어에 대한 오퍼랜드)만이 로직(509)에 의해 제공되는 최종 답을 제어하도록 하기 위해 AB항이 0으로 설정된다는 것에 유의한다. 답은 궁극적으로 명령어에 대한 답을 표시하는 포맷 로직(513)으로 전달된다(답은 지수 조정 덧셈기(508)와 같은 또 다른 블록에 의해 사전에 처리될 수도 있다).
VCNT 명령어에 관하여, 1 카운트 로직(520)은 C 오퍼랜드에 존재하는 1의 개수를 세고, 답은 궁극적으로 포맷 로직(513)으로 전달된다. VPAR 명령어에 관하여, 패리티 로직(530)은 C 오퍼랜드에 대한 패리티 값을 결정(예를 들어, 오퍼랜드 내 1의 짝수나 홀수 개수)하고 답은 궁극적으로 명령어에 대한 답을 표시하는 포맷 로직(513)으로 전달된다.
도 6a에서 도 6d는 도 5의 기능 유닛(500)에 관하여 상기에 설명된 연산이 벡터 연산의 효과를 나타내기 위해 동시에 N번 수행될 때의 도 2 기능 유닛(200)의 연산을 보여준다. VCLZ 명령어에 대하여, 도 6a를 참고하면, 입력 벡터의 오퍼랜드/요소가 수신되고(601a), 각각의 오퍼랜드의 리딩 0의 카운트가 결정되고(602a), 각 오퍼랜드에 대하여 리딩 0 카운트를 가진 출력 벡터가 제공된다(603a). VCTZ 명령어에 대하여, 도 6b 참조하면, 오퍼랜드/요소에 관한 입력 벡터가 수신되고(601b), 각 오퍼랜드의 트레일링 0의 카운트가 결정되고(602b) 각 오퍼랜드에 대한 트레일링 0 카운트를 가진 출력 벡터가 제공된다(603b). VCNT 명령어에 대하여, 도 6C를 참조하면, 오퍼랜드/요소의 입력 벡터가 수락되고(601c), 각 오퍼랜드 내 1의 카운트가 결정되고(602c), 각 오퍼랜드에 대한 1의 카운트를 가진 출력 오퍼랜드가 제공된다(603c). VPAR 명령어에 대하여, 도 6d를 참조하면, 오퍼랜드/요소의 입력 벡터가 수신되고(601b), 각 오퍼랜드에 관한 패리티가 결정되고(602d), 각 오퍼랜드에 대한 패리티를 가진 출력 벡터가 제공된다(603d).
앞서 논의된 것과 같이, 위에 설명된 기능 유닛은 반도체 프로세서의 명령어 실행 유닛 내에 구현될 수도 있다.
도 7은 복합 명령어 집합(CISC:complex instruction set), 축소 명령 집합(RISC: reduced instruction set) 및 매우 긴 명령어(VLIW:very long instruction word)와 같은 프로세싱 코어 아키텍처의 많은 다른 종류를 설명하는 포괄적인 프로세싱 코어(700)를 보여준다. 도 7의 포괄적인 프로세싱 코어(700)는 1) 명령어를 불러오는 패치 유닛(703)(예를 들어, 캐시 및/또는 메모리로부터); 2) 명령어를 해독하는 디코드 유닛(704); 3) 실행 유닛(706)으로 명령어 발생 시간 및 순서를 결정하는 스케줄 유닛(705)(스케줄러는 선택적임에 유희); 4) 명령어를 실행하는 실행 유닛(706)(전형적인 명령어 실행 유닛은 브랜치 실행 유닛, 정수 산술 실행 유닛(예를 들어, ALUs), 부동 소수점 산술 실행 유닛(예를 들어, FPUs) 및 메모리 접근 실행 유닛을 포함함); 5) 명령어의 성공적인 완료를 의미하는 회수(retirement) 유닛(707)을 포함한다. 특히, 프로세싱 코어(700)는 마이크로코드(708)를 이용하거나 이용하지 않을 수도 있다.
위에 설명된 기능 유닛이 배선 데이터 경로 단대단(hardwired data paths end-to-end)을 나타내지 않더라도, 위에 설명된/모든 프로세싱은 전용 로직이 아닌 마이크로코드로 구현될 수도 있다. 마이크로 코드화된 프로세서의 경우, 마이크로 옵스(micro-ops)는 일반적으로 프로세서가 구축되는 반도체 칩 내의 비휘발성 기계 판독 가능 매체(ROM과 같은)에 저장되어 프로세서 내 실행 유닛으로 하여금 명령어에 의해 호출된 원하는 기능을 수행하도록 한다.
위에 설명된 기능성을 가진 프로세서는 또한 다양한 컴퓨팅 시스템 내에 구현될 수 있다. 도 8은 컴퓨팅 시스템(예를 들어, 컴퓨터)의 실시예를 보여준다. 도 8의 예시의 컴퓨팅 시스템은 1) 벡터 로직 축소 명령어를 포함하도록 설계될 수도 있는 하나 이상의 프로세서(801); 2) 메모리 제어 허브(MCH)(802); 3) 시스템 메모리(803)(DDR RAM,EDO RAM등과 같이 서로 다른 종류가 존재함); 4) 캐시(804); 5) I/O 제어 허브(ICH)(805); 6) 그래픽 프로세서(806); 7)디스플레이/스크린(807)(CRT, 평판패널, TFT, LCD, DPL 등과 같이 서로 다른 종류가 존재함), 하나 이상의 I/O 장치(808)를 포함한다.
하나 이상의 프로세서(801)는 컴퓨팅 시스템이 구현하는 소프트웨어 루틴을 수행하기 위해 명령어를 실행한다. 명령어는 데이터에 대해 수행되는 어떤 종류의 연산을 흔히 포함한다. 데이터와 명령어 모두 시스템 메모리(803) 및 캐시(804)에 저장된다. 캐시(804)는 일반적으로 시스템 메모리(803)보다 더 짧은 대기 시간을 갖도록 설계된다. 예를 들어, 프로세서와 동일한 실리콘 칩에 집적될 수도 있고/있거나 시스템 메모리(803)가 느린 DRAM 셀과 함께 구성되는 반면, 캐시(804)는 빠른 SRAM 셀과 함께 구성될 수도 있다. 더 자주 사용된 명령어 및 데이터를 시스템 메모리가 아닌 캐시(804)에 저장함에 의해 컴퓨팅 시스템의 전체 수행 효율이 개선된다.
시스템 메모리(803)는 의도적으로 컴퓨팅 시스템 내의 다른 요소에 이용가능하도록 만들어진다. 예를 들어, 여러 인터페이스에서 컴퓨팅 시스템으로 수신된 데이터(예를 들어, 키보드 및 마우스, 프린터 포트, LAN 포트, 모뎀 포트 등) 또는 컴퓨팅 시스템의 내부 저장 요소(예를 들어, 하드 디스크 드라이브)로부터 검색된 데이터는 소프트웨어 프로그램의 실행에서 하나 이상의 프로세서(801)에 의해 실행되기 전에 시스템 메모리(803)에 가끔 일시적으로 대기 된다. 비슷하게, 소프트웨어 프로그램이 결정한 데이터는 하나의 컴퓨팅 시스템 인터페이스를 통해 컴퓨팅 시스템에서 외부 독립체로 송신되어야 하거나, 내부 저장 요소에 저장되어야 하거나, 송신 또는 저장되기 이전에 시스템 메모리(903)에 가끔 일시적으로 대기 된다.
ICH(805)는 그러한 데이터가 시스템 메모리(803) 및 적절한 응답 컴퓨팅 시스템 인터페이스(그리고 컴퓨팅 시스템이 설계된 경우에는 내부 저장 장치) 사이에 적절히 지나가도록 보장하는 것을 담당한다. MCH(802)는 프로세서(801), 인터페이스 및 내부 저장 요소 사이에서 서로 근접한 시간에 발생할 수 있는 시스템 메모리(803) 접근을 위한 경쟁적인 요청을 관리한다.
하나 이상의 I/O 장치(808)는 또한 일반적인 컴퓨팅 시스템에서 구현된다. I/O 장치는 일반적으로 컴퓨팅 시스템으로 및/또는 시스템으로부터 데이터 전송 및 컴퓨팅 시스템 내 대규모 비휘발성 저장(예를 들어, 하드 디스크 드라이브)을 담당한다. ICH(805)는 ICH와 발견된 I/O 장치(808) 사이에서 쌍방향 지점간 링크를 가진다.
앞서 언급한 명세서에서, 본 발명은 구체적인 실시예를 참조하여 설명되었다. 하지만, 첨부된 청구항에 설명된 것처럼 본 발명의 넓은 사상 및 범주를 벗어나지 않으면서 행해지는 다양한 수정 및 변경은 명백해질 것이다. 따라서, 본 명세서 및 도면은 제한적 의미보다는 예시적인 의미로 여겨진다.
101a, 101b, 102a, 102b, 203, 204, 205: 입력 레지스터
103a, 103b: 결과 레지스터
200: 벡터 기능 유닛
206: 출력 회로
301: 곱셈기
302: 지수곱 블록
303: 지수 차이 블록
304, 504: 정렬 시프터 블록
305: 덧셈기
306: 리딩 1 안티시페이터
307: 정규 시프터
308, 508: 지수 정렬 덧셈기
309, 509: 트레일링 0 검출기
310: 라운드업 덧셈기
311: 스티키 비트 계산기
312: 라운드업 제어 블록
313, 513: 포맷 로직 블록
506: 리딩 1 및 리딩 0 안티시페이터
520: 1 카운트 블록
530: 패리티 로직 블록
700: 프로세싱 코어
703: 패치 유닛
704: 디코드 유닛
705: 스케줄 유닛
706: 실행 유닛
707: 회수 유닛
708: 마이크로 코드
801: 프로세서
802: 메모리 제어 허브(MCH)
803: 시스템 메모리
804: 캐시
805: I/O 제어 허브(ICH)
806: 그래픽 프로세서
807: 디스플레이
808: I/O 장치
103a, 103b: 결과 레지스터
200: 벡터 기능 유닛
206: 출력 회로
301: 곱셈기
302: 지수곱 블록
303: 지수 차이 블록
304, 504: 정렬 시프터 블록
305: 덧셈기
306: 리딩 1 안티시페이터
307: 정규 시프터
308, 508: 지수 정렬 덧셈기
309, 509: 트레일링 0 검출기
310: 라운드업 덧셈기
311: 스티키 비트 계산기
312: 라운드업 제어 블록
313, 513: 포맷 로직 블록
506: 리딩 1 및 리딩 0 안티시페이터
520: 1 카운트 블록
530: 패리티 로직 블록
700: 프로세싱 코어
703: 패치 유닛
704: 디코드 유닛
705: 스케줄 유닛
706: 실행 유닛
707: 회수 유닛
708: 마이크로 코드
801: 프로세서
802: 메모리 제어 허브(MCH)
803: 시스템 메모리
804: 캐시
805: I/O 제어 허브(ICH)
806: 그래픽 프로세서
807: 디스플레이
808: I/O 장치
Claims (18)
- N차 벡터 연산을 수행하기 위해 반도체 상에서 구현되는 벡터 기능 유닛(a vector functional unit)에 있어서,
N개 기능 유닛을 포함하되, 각각의 상기 N개 기능 유닛은 제각기 A, B 및 C 오퍼랜드(respective A, B and C operand) 상에 곱셈 덧셈 명령어(multiply add instruction) 및 첫 번째 제각기의 오퍼랜드(a first respective operand) 상에 리딩 0 명령어(a leading zeros instruction)를 수행하는 로직 회로를 포함하는
벡터 기능 유닛.
- 제 1 항에 있어서,
각각의 상기 N개 기능 유닛은 두 번째 제각기의 오퍼랜드 상에 트레일링 0 명령어를 수행하는 로직 회로를 더 포함하는
벡터 기능 유닛.
- 제 2 항에 있어서,
각각의 상기 N개 기능 유닛은 세 번째 제각기의 오퍼랜드 상에 패리티 명령어를 수행하는 로직 회로를 더 포함하는
벡터 기능 유닛.
- 제 3 항에 있어서,
각각의 상기 N개 기능 유닛은 네 번째 제각기의 오퍼랜드의 1 카운트 명령어를 수행하는 로직 회로를 더 포함하는
벡터 기능 유닛.
- 제 1 항에 있어서,
각각의 상기 N개 기능 유닛은 마이크로 코드화(micro-coded)된
벡터 기능 유닛.
- 제 1 항에 있어서,
상기 곱셈 덧셈 명령어에 대한 로직 계산을 수행하는 상기 로직 회로는 상기 리딩 제로 명령어에 대한 로직 계산을 또한 수행하는
벡터 기능 유닛.
- 반도체 칩 상에서 구현되는 벡터 기능 유닛과 함께 첫 번째 벡터 명령어를 수행하고 상기 벡터 기능 유닛과 함께 두 번째 벡터 명령어를 수행하는 것을 포함하여 상기 반도체 칩 상에서 벡터 연산을 수행하되, 상기 첫 번째 벡터 명령어는 벡터 곱셈 덧셈 명령어(a vector multiply add instruction)이고, 상기 두 번째 벡터 명령어는 벡터 리딩 0 카운트 명령어(a vector leading zeros count instruction)인
방법.
- 제 7 항에 있어서,
상기 기능 유닛과 함께 세 번째 벡터 명령어를 수행하는 것을 더 포함하되, 상기 세 번째 벡터 명령어는 벡터 트레일링 0 카운트 명령어(a vector trailing zeros count instruction)인
방법.
- 제 8 항에 있어서,
상기 기능 유닛으로 네 번째 벡터 명령어를 수행하는 것을 더 포함하되, 상기 네 번째 벡터 명령어는 벡터 패리티 명령어(a vector parity instruction)인
방법.
- 제 8 항에 있어서,
상기 기능 유닛으로 네 번째 벡터 명령어를 수행하는 것을 더 포함하되, 상기 네 번째 명령어는 1 카운트 명령어인
방법.
- 제 7 항에 있어서,
상기 두 번째 벡터 명령어에 대한 로직 계산을 수행하는 동일한 로직 회로로 상기 첫 번째 벡터 명령어에 대한 로직 계산을 더 수행하는
방법.
- 제 7 항에 있어서,
상기 첫 번째 벡터 명령어에 대한 상기 로직 계산은 리딩 1 결정(a leading 1s determination)을 포함하는
방법.
- 컴퓨팅 시스템에 있어서,
평판 디스플레이와,
반도체 칩 상에서 실행되는 프로세서를 포함하되,
상기 프로세서는 N차 벡터 연산을 수행하는 벡터 기능 유닛을 포함하고,
상기 벡터 기능 유닛은 N개 기능 유닛을 포함하고, 상기 각각의 N개 기능 유닛은
각각의 A, B 및 C 오퍼랜드 상에 곱셈 덧셈 명령어; 및
각각의 첫 번째 오퍼렌드 상에 리딩 0 명렁어를 수행하는 로직 회로를 포함하는
컴퓨팅 시스템.
- 제 13 항에 있어서,
상기 각각의 N개 기능 유닛은
각각의 세 번째 오퍼랜드 상에 트레일링 0 명령어를 수행하는 로직 회로를 더 포함하는
컴퓨팅 시스템.
- 제 14 항에 있어서,
상기 각각의 N개 기능 유닛은
각각의 세 번째 오퍼랜드 상에 패리티 명령어를 수행하는 로직 회로를 더 포함하는
컴퓨팅 시스템.
- 제 15 항에 있어서,
상기 각각의 N개 기능 유닛은
각각의 네 번째 오퍼랜드 상에 1 카운트 명령어를 수행하는 로직 회로를 더 포함하는
컴퓨팅 시스템.
- 제 13 항에 있어서,
상기 각각의 N개 기능 유닛은 마이크로 코드화(micro-coded)된
컴퓨팅 시스템.
- 제 13 항에 있어서,
상기 곱셈 덧셈 명령어에 대한 로직 계산(logic calculation)을 수행하는 로직 회로는 상기 리딩 제로 명령어에 대한 로직 계산 또한 수행하는
컴퓨팅 시스템.
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US12/890,457 | 2010-09-24 | ||
US12/890,457 US9092213B2 (en) | 2010-09-24 | 2010-09-24 | Functional unit for vector leading zeroes, vector trailing zeroes, vector operand 1s count and vector parity calculation |
PCT/US2011/052889 WO2012040539A2 (en) | 2010-09-24 | 2011-09-23 | Functional unit for vector leading zeroes, vector trailing zeroes, vector operand 1s count and vector parity calculation |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20130062352A true KR20130062352A (ko) | 2013-06-12 |
KR101517762B1 KR101517762B1 (ko) | 2015-05-06 |
Family
ID=45871878
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020137008221A KR101517762B1 (ko) | 2010-09-24 | 2011-09-23 | 벡터 리딩 0, 벡터 트레일링 0, 벡터 오퍼랜드 1 카운트 및 벡터 패리티 계산을 위한 기능 유닛 |
Country Status (9)
Country | Link |
---|---|
US (1) | US9092213B2 (ko) |
JP (1) | JP5636110B2 (ko) |
KR (1) | KR101517762B1 (ko) |
CN (2) | CN106126194A (ko) |
BR (1) | BR112013008616A2 (ko) |
DE (1) | DE112011103195T5 (ko) |
GB (1) | GB2497455B (ko) |
TW (1) | TWI547868B (ko) |
WO (1) | WO2012040539A2 (ko) |
Families Citing this family (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8667042B2 (en) * | 2010-09-24 | 2014-03-04 | Intel Corporation | Functional unit for vector integer multiply add instruction |
EP2695054B1 (en) | 2011-04-01 | 2018-08-15 | Intel Corporation | Vector friendly instruction format and execution thereof |
US10157061B2 (en) | 2011-12-22 | 2018-12-18 | Intel Corporation | Instructions for storing in general purpose registers one of two scalar constants based on the contents of vector write masks |
US9372692B2 (en) * | 2012-12-29 | 2016-06-21 | Intel Corporation | Methods, apparatus, instructions, and logic to provide permute controls with leading zero count functionality |
US9323531B2 (en) * | 2013-03-15 | 2016-04-26 | Intel Corporation | Systems, apparatuses, and methods for determining a trailing least significant masking bit of a writemask register |
US11544214B2 (en) | 2015-02-02 | 2023-01-03 | Optimum Semiconductor Technologies, Inc. | Monolithic vector processor configured to operate on variable length vectors using a vector length register |
US10387150B2 (en) * | 2015-06-24 | 2019-08-20 | International Business Machines Corporation | Instructions to count contiguous register elements having a specific value in a selected location |
JP6616608B2 (ja) * | 2015-07-16 | 2019-12-04 | ルネサスエレクトロニクス株式会社 | 半導体装置 |
GB2553783B (en) | 2016-09-13 | 2020-11-04 | Advanced Risc Mach Ltd | Vector multiply-add instruction |
WO2019005165A1 (en) | 2017-06-30 | 2019-01-03 | Intel Corporation | METHOD AND APPARATUS FOR VECTORIZING INDIRECT UPDATING BUCKLES |
US10628295B2 (en) | 2017-12-26 | 2020-04-21 | Samsung Electronics Co., Ltd. | Computing mechanisms using lookup tables stored on memory |
JP6540841B1 (ja) | 2018-02-27 | 2019-07-10 | 富士通株式会社 | 演算処理装置、情報処理装置、情報処理方法、およびプログラム |
WO2020067908A1 (en) * | 2018-09-27 | 2020-04-02 | Intel Corporation | Apparatuses and methods to accelerate matrix multiplication |
CN110221808B (zh) * | 2019-06-03 | 2020-10-09 | 深圳芯英科技有限公司 | 向量乘加运算的预处理方法、乘加器及计算机可读介质 |
Family Cites Families (49)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4852048A (en) * | 1985-12-12 | 1989-07-25 | Itt Corporation | Single instruction multiple data (SIMD) cellular array processing apparatus employing a common bus where a first number of bits manifest a first bus portion and a second number of bits manifest a second bus portion |
US4849923A (en) | 1986-06-27 | 1989-07-18 | Digital Equipment Corporation | Apparatus and method for execution of floating point operations |
US4852039A (en) | 1987-06-19 | 1989-07-25 | Digital Equipment Corporation | Apparatus and method for accelerating floating point addition and subtraction operations by accelerating the effective subtraction procedure |
US5341319A (en) * | 1993-02-10 | 1994-08-23 | Digital Equipment Corporation | Method and apparatus for controlling a rounding operation in a floating point multiplier circuit |
US5317527A (en) | 1993-02-10 | 1994-05-31 | Digital Equipment Corporation | Leading one/zero bit detector for floating point operation |
US5784305A (en) | 1995-05-01 | 1998-07-21 | Nec Corporation | Multiply-adder unit |
US6058465A (en) | 1996-08-19 | 2000-05-02 | Nguyen; Le Trong | Single-instruction-multiple-data processing in a multimedia signal processor |
KR100291383B1 (ko) | 1996-11-18 | 2001-09-17 | 윤종용 | 디지털신호처리를위한명령을지원하는모듈계산장치및방법 |
US5928316A (en) | 1996-11-18 | 1999-07-27 | Samsung Electronics Co., Ltd. | Fused floating-point multiply-and-accumulate unit with carry correction |
US5993051A (en) * | 1996-11-18 | 1999-11-30 | Samsung Electronics Co., Ltd. | Combined leading one and leading zero anticipator |
US6401194B1 (en) | 1997-01-28 | 2002-06-04 | Samsung Electronics Co., Ltd. | Execution unit for processing a data stream independently and in parallel |
US5991531A (en) | 1997-02-24 | 1999-11-23 | Samsung Electronics Co., Ltd. | Scalable width vector processor architecture for efficient emulation |
US6256655B1 (en) * | 1998-09-14 | 2001-07-03 | Silicon Graphics, Inc. | Method and system for performing floating point operations in unnormalized format using a floating point accumulator |
US6578059B1 (en) | 1998-10-10 | 2003-06-10 | Institute For The Development Of Emerging Architectures, L.L.C. | Methods and apparatus for controlling exponent range in floating-point calculations |
US6378067B1 (en) | 1998-10-12 | 2002-04-23 | Idea Corporation | Exception reporting architecture for SIMD-FP instructions |
US6292886B1 (en) | 1998-10-12 | 2001-09-18 | Intel Corporation | Scalar hardware for performing SIMD operations |
US6321327B1 (en) | 1998-12-30 | 2001-11-20 | Intel Corporation | Method for setting a bit associated with each component of packed floating-pint operand that is normalized in SIMD operations |
US6480872B1 (en) | 1999-01-21 | 2002-11-12 | Sandcraft, Inc. | Floating-point and integer multiply-add and multiply-accumulate |
US6732135B1 (en) | 1999-02-01 | 2004-05-04 | Hewlett-Packard Development Company, L.P. | Method and apparatus for accumulating partial quotients in a digital processor |
US6360241B1 (en) | 1999-02-01 | 2002-03-19 | Compaq Information Technologies Goup, L.P. | Computer method and apparatus for division and square root operations using signed digit |
US6366942B1 (en) | 1999-02-01 | 2002-04-02 | Compaq Information Technologies Group Lp | Method and apparatus for rounding floating point results in a digital processing system |
US6324638B1 (en) | 1999-03-31 | 2001-11-27 | International Business Machines Corporation | Processor having vector processing capability and method for executing a vector instruction in a processor |
US7127483B2 (en) | 2001-12-26 | 2006-10-24 | Hewlett-Packard Development Company, L.P. | Method and system of a microprocessor subtraction-division floating point divider |
US8090928B2 (en) | 2002-06-28 | 2012-01-03 | Intellectual Ventures I Llc | Methods and apparatus for processing scalar and vector instructions |
US7831804B2 (en) | 2004-06-22 | 2010-11-09 | St Microelectronics S.R.L. | Multidimensional processor architecture |
CN101023585B (zh) * | 2004-09-15 | 2010-06-16 | 皇家飞利浦电子股份有限公司 | 用于编码具有r=2的rmtr约束条件的代码的编码器和方法 |
US7225323B2 (en) | 2004-11-10 | 2007-05-29 | Nvidia Corporation | Multi-purpose floating point and integer multiply-add functional unit with multiplication-comparison test addition and exponent pipelines |
US7543119B2 (en) | 2005-02-10 | 2009-06-02 | Richard Edward Hessel | Vector processor |
US20060179092A1 (en) * | 2005-02-10 | 2006-08-10 | Schmookler Martin S | System and method for executing fixed point divide operations using a floating point multiply-add pipeline |
JP2006227939A (ja) | 2005-02-17 | 2006-08-31 | Matsushita Electric Ind Co Ltd | 演算装置 |
US7584233B2 (en) * | 2005-06-28 | 2009-09-01 | Qualcomm Incorporated | System and method of counting leading zeros and counting leading ones in a digital signal processor |
US20070198815A1 (en) | 2005-08-11 | 2007-08-23 | Coresonic Ab | Programmable digital signal processor having a clustered SIMD microarchitecture including a complex short multiplier and an independent vector load unit |
US20070074008A1 (en) * | 2005-09-28 | 2007-03-29 | Donofrio David D | Mixed mode floating-point pipeline with extended functions |
US7912887B2 (en) * | 2006-05-10 | 2011-03-22 | Qualcomm Incorporated | Mode-based multiply-add recoding for denormal operands |
US20090063608A1 (en) | 2007-09-04 | 2009-03-05 | Eric Oliver Mejdrich | Full Vector Width Cross Product Using Recirculation for Area Optimization |
US20090106526A1 (en) | 2007-10-22 | 2009-04-23 | David Arnold Luick | Scalar Float Register Overlay on Vector Register File for Efficient Register Allocation and Scalar Float and Vector Register Sharing |
US7809925B2 (en) | 2007-12-07 | 2010-10-05 | International Business Machines Corporation | Processing unit incorporating vectorizable execution unit |
US7945764B2 (en) | 2008-01-11 | 2011-05-17 | International Business Machines Corporation | Processing unit incorporating multirate execution unit |
US8356160B2 (en) | 2008-01-15 | 2013-01-15 | International Business Machines Corporation | Pipelined multiple operand minimum and maximum function |
US8046399B1 (en) * | 2008-01-25 | 2011-10-25 | Oracle America, Inc. | Fused multiply-add rounding and unfused multiply-add rounding in a single multiply-add module |
US8139061B2 (en) | 2008-08-01 | 2012-03-20 | International Business Machines Corporation | Floating point execution unit for calculating a one minus dot product value in a single pass |
US8244783B2 (en) * | 2008-09-11 | 2012-08-14 | International Business Machines Corporation | Normalizer shift prediction for log estimate instructions |
US8281111B2 (en) * | 2008-09-23 | 2012-10-02 | Qualcomm Incorporated | System and method to execute a linear feedback-shift instruction |
US8326904B2 (en) * | 2009-01-27 | 2012-12-04 | International Business Machines Corporation | Trigonometric summation vector execution unit |
US8555034B2 (en) | 2009-12-15 | 2013-10-08 | Oracle America, Inc. | Execution of variable width vector processing instructions |
US8606840B2 (en) | 2010-03-17 | 2013-12-10 | Oracle International Corporation | Apparatus and method for floating-point fused multiply add |
US8629867B2 (en) | 2010-06-04 | 2014-01-14 | International Business Machines Corporation | Performing vector multiplication |
US20110320765A1 (en) | 2010-06-28 | 2011-12-29 | International Business Machines Corporation | Variable width vector instruction processor |
US8676871B2 (en) | 2010-09-24 | 2014-03-18 | Intel Corporation | Functional unit capable of executing approximations of functions |
-
2010
- 2010-09-24 US US12/890,457 patent/US9092213B2/en not_active Expired - Fee Related
-
2011
- 2011-09-21 TW TW100133946A patent/TWI547868B/zh not_active IP Right Cessation
- 2011-09-23 DE DE112011103195T patent/DE112011103195T5/de not_active Withdrawn
- 2011-09-23 WO PCT/US2011/052889 patent/WO2012040539A2/en active Application Filing
- 2011-09-23 BR BR112013008616A patent/BR112013008616A2/pt not_active IP Right Cessation
- 2011-09-23 JP JP2013530340A patent/JP5636110B2/ja active Active
- 2011-09-23 KR KR1020137008221A patent/KR101517762B1/ko active IP Right Grant
- 2011-09-23 CN CN201610423937.9A patent/CN106126194A/zh active Pending
- 2011-09-23 GB GB1303912.8A patent/GB2497455B/en active Active
- 2011-09-23 CN CN201180045389.6A patent/CN103119578B/zh not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
GB2497455B (en) | 2017-08-09 |
TW201229888A (en) | 2012-07-16 |
GB201303912D0 (en) | 2013-04-17 |
WO2012040539A3 (en) | 2012-07-05 |
JP5636110B2 (ja) | 2014-12-03 |
GB2497455A (en) | 2013-06-12 |
US20120079253A1 (en) | 2012-03-29 |
KR101517762B1 (ko) | 2015-05-06 |
CN106126194A (zh) | 2016-11-16 |
CN103119578A (zh) | 2013-05-22 |
JP2013543173A (ja) | 2013-11-28 |
US9092213B2 (en) | 2015-07-28 |
TWI547868B (zh) | 2016-09-01 |
CN103119578B (zh) | 2016-08-03 |
BR112013008616A2 (pt) | 2016-06-14 |
DE112011103195T5 (de) | 2013-06-27 |
WO2012040539A2 (en) | 2012-03-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP6248328B2 (ja) | ベクトル機能ユニット、方法、およびコンピューティングシステム | |
KR101517762B1 (ko) | 벡터 리딩 0, 벡터 트레일링 0, 벡터 오퍼랜드 1 카운트 및 벡터 패리티 계산을 위한 기능 유닛 | |
US10649733B2 (en) | Multiply add functional unit capable of executing scale, round, getexp, round, getmant, reduce, range and class instructions | |
US7720900B2 (en) | Fused multiply add split for multiple precision arithmetic | |
US8676871B2 (en) | Functional unit capable of executing approximations of functions | |
JP4388980B2 (ja) | 浮動小数点数の除算または平方根演算を行う演算装置及び演算方法 | |
JP2000076047A (ja) | 浮動小数点乗算累算ユニット | |
US10416962B2 (en) | Decimal and binary floating point arithmetic calculations | |
CN111078292A (zh) | 算术处理设备和控制算术处理设备的方法 | |
US7523152B2 (en) | Methods for supporting extended precision integer divide macroinstructions in a processor | |
Schulte et al. | A software interface and hardware design for variable-precision interval arithmetic |
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: 20180328 Year of fee payment: 4 |
|
FPAY | Annual fee payment |
Payment date: 20190328 Year of fee payment: 5 |