KR20090014292A - 비정규 피연산자를 위한 모드―기반 곱셈-가산 프로세서 - Google Patents

비정규 피연산자를 위한 모드―기반 곱셈-가산 프로세서 Download PDF

Info

Publication number
KR20090014292A
KR20090014292A KR1020087030127A KR20087030127A KR20090014292A KR 20090014292 A KR20090014292 A KR 20090014292A KR 1020087030127 A KR1020087030127 A KR 1020087030127A KR 20087030127 A KR20087030127 A KR 20087030127A KR 20090014292 A KR20090014292 A KR 20090014292A
Authority
KR
South Korea
Prior art keywords
floating
point
instruction
multiply
multiplication
Prior art date
Application number
KR1020087030127A
Other languages
English (en)
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 KR20090014292A publication Critical patent/KR20090014292A/ko

Links

Images

Classifications

    • 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
    • G06F7/487Multiplying; Dividing
    • 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/499Denomination or exception handling, e.g. rounding or overflow
    • G06F7/49905Exception handling
    • G06F7/4991Overflow or underflow
    • G06F7/49915Mantissa overflow or underflow in handling 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
    • 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
    • G06F7/487Multiplying; Dividing
    • G06F7/4876Multiplying
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2207/00Indexing scheme relating to methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F2207/38Indexing scheme relating to groups G06F7/38 - G06F7/575
    • G06F2207/3804Details
    • G06F2207/386Special constructional features
    • G06F2207/3884Pipelining
    • 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)
  • General Physics & Mathematics (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Mathematical Optimization (AREA)
  • Mathematical Analysis (AREA)
  • Computing Systems (AREA)
  • Pure & Applied Mathematics (AREA)
  • Computational Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Nonlinear Science (AREA)
  • Advance Control (AREA)
  • Complex Calculations (AREA)

Abstract

비정규 지원 모드에서, 부동-소수점 가산기의 정규화 회로는 부동-소수점 곱셈기의 출력을 정규화 또는 비정규화하기 위하여 사용된다. 각각의 부동-소수점 곱셈 명령은 0으로 만들어진 가수를 사용하여 곱셈-가산 명령으로 추론적으로 변환된다. 이는 부동-소수점 가산기의 정규화 회로를 사용하여 곱을 정규화 또는 비정규화하는동안 곱의 값을 유지한다. 만일 피연산자들이 부정규(unnormal) 중간 곱 또는 비정규(denormal) 최종 곱을 생성하지 않으면, 가산 연산은 예컨대 피연산자-포워딩에 의하여 억제된다. 부가적으로, 각각의 비-퓨즈형 부동-소수점 곱셈-가산 명령은 0 가수를 가진 곱셈-가산 명령으로 대체되며, 원시 곱셈-가산 명령의 가수를 가진 부동-소수점 가산 명령은 명령 스트림에 삽입된다. 만일 부정규 중간 결과 또는 비정규 최종 결과가 발생하지 않으면, 가수는 NOP로 변환된 가산 명령 및 곱셈-가산 명령으로 복원될 수 있다.

Description

비정규 피연산자를 위한 모드―기반 곱셈-가산 프로세서{MODE-BASED MULTIPLY-ADD PROCESSOR FOR DENORMAL OPERANDS}
본 발명은 일반적으로 프로세서 분야, 특히 비정규 피연산자를 계산하기 위하여 부동-소수점 곱셈-가산 명령들에 부동-소수점 곱셈 명령들을 기록하는 모드-기반 방법에 관한 것이다.
마이크로프로세서들은 다양한 애플리케이션들에서 수치값들에 대하여 연산들을 수행한다. 고속 실행속도, 저전력 소비 및 소형은 특히 휴대용 전자장치들과 같은 내장형 애플리케이션들에서 프로세서 설계자들에게 중요한 목표이다. 기존 프로세서들은 다중 실행 단계들을 각각 가진 순차 명령들이 실행시에 중복되는 파이프라인 아키텍처를 사용한다. 파이프라인 아키텍처에서, 각각의 명령은 페치, 디코드, 및 라이트백(write back)과 같은 일련의 실행 스테이지들에서 실행되며, 실행 스테이지들의 각각은 다수의 파이프 스테이지들을 포함할 수 있다. 파이프 스테이지는 명령 실행 스테이지의 모두 또는 일부를 실행하는 로직 및 저장 엘리먼트로 구성된다. 명령들은 파이프라인을 통해 순차적으로 흐른다. 실행 스테이지는 명령에 의하여 특정된 산술, 논리 또는 메모리 액세스 동작을 수행하며, 특히 수치값들에 대하여 다양한 산술 동작들은 수행할 수 있다.
디지털 프로세서들은 고정 소수점 또는 부동-소수점 포맷으로 수치값들을 나타낸다. 부동-소수점 수는 기수(base)가 2이고 지수(exponent)가 정수인 수가 곱해진 고정 소수점 가수부(significand)(또한 가수(mantissa)로 공지됨)를 포함한다. 여기에 참조로 통합되는 IEEE 754 표준과 같은 일부의 포맷에서, 부동 소수점 표현은 부가적으로 부호 비트를 포함한다. 기수가 2이고 지수가 정수인 수를 가수부에 곱하는 것은 기수 10 체계(base 10 system)의 과학적 기수법(scientific notation)과 유사하다. 즉, 지수의 값은 비트 위치들의 수, 및 실제 수치값을 실현하기 위하여 가수부의 2진 소수점(binary point)(여기서는 부동 소수점)이 시프트되어야 하는 방향을 결정한다.
가수부가 1<=가수부<2 이고 지수가 한정된 범위내에 있을때, 부동 소수점 값은 정규수(normal number)로서 지칭된다. 정규 부동 소수점 수의 가수부는 폼 1.분수(form 1.fraction)를 따르며, 여기서 "분수"는 1보다 큰 가수부의 분수 부분을 나타내는 2진값이다. 지수의 값은 효율적으로 이진 소수점(binary point)을 좌측(음의 지수인 경우) 또는 우측(양의 지수인 경우)으로 시프트한다. IEEE 754 표준에서, 단일-정확도 부동-소수점 수(single-precision floating-point number)에 대한 지수의 값은 -126 내지 127이다. IEEE 754 단일-정확도 포맷(single-precision format)으로 수를 인코딩할때, 127의 바이어스(bias)는 모든 인코딩된 지수들이 양이도록 원시 지수(raw exponent)에 더해진다.
1보다 작은 가수부, 즉 0<가수부<1로 표현되는 부동-소수점 값은 여기에서 "부정규(unnormal)" 수로서 지칭된다. 특별한 관심대상의 부정규 부동-소수점 수들 의 하나의 부세트는 "비정규(denormal)" 수들(또한, 정규이하(subnormal) 수들로서 공지됨)이다. 비정규 부동-소수점 수들은 0<가수부<1 범위의 가수부 및 지수 -126를 이용함으로서 1.0x2-126보다 작은 값들을 나타낸다. 비정규 부동-소수점 수는 폼 0.분수(form 0.fraction)의 가수부를 가지며, 분수에서 선행하는 0들의 수는 0 내지 분수 -1의 폭의 범위를 가진다. 비정규 수는 수치값을 정확하게 표현하는데 있어서 보다 적은 비트들이 유지되기 때문에 정확도의 손실을 희생으로 126 비트 위치를 초과하는, 2진 소수점들의 "좌측 시프트(left shift)"를 달성하기 위하여 정규 가수부의 분수 부분의 비트 위치들을 효율적으로 이용한다. 비정규 수들은 0에 매우 근접한 값들을 나타내며, 결과치가 매우 작을때 정확도를 천천히 잃어버리는 계산을 허용하는 점진적 언더플로우(gradual underflow)를 구현하기 위하여 사용될 수 있다.
부동-소수점 곱셈기 회로의 경우에, 비정규 곱들은 여러 방식으로 발생할 수 있다. 승수 또는 피승수중 하나는 비정규 수일 수 있다. 이 경우에, 피연산자들의 수치값들에 따라, 중간 곱의 가수부는 보통 비정규일 것이며(예컨대, 1보다 작을 것이며) 최종 라운딩된 곱(final rounded product)은 정규 또는 비정규 수일 수 있다. 만일 승수 및 피승수가 비정규 수들이면, 최종 라운딩된 곱은 0이거나 또는 가장 작은 표현가능한 비정규 수일 것이다.
부가적으로, 2개의 정규 수들의 곱은 지수들이 작은 경우에 비정규 수일 수 있으며 -126(단일-정확도(single-precision)에 대하여)보다 작은 지수를 필요로 하 는 비정규 수를 산출할 수 있다. 이러한 경우는 곱셈의 중간값이 "비-정규" 폼이라는 것을 가정한 일반적으로 상황과 다르다는 것에 유의해야 한다. 정규 가수부는 범위 [1,2), 즉 정확하게 1로부터 거의 2까지의 범위(가상 5-비트 가수부에 대하여 1.0000 내지 1.1111의 범위)내의 임의의 값을 가정할 수 있다. 2개의 정규 가수부들의 곱은 범위 [1,4), 즉 정확하게 1로부터 거의 4까지의 범위내의 값을 가정할 수 있다. 따라서, 이러한 중간 곱 가수부는 폼 1. 분수(form 1. fraction) 또는 1x.분수를 가정할 수 있으며, 여기서 1x.분수는 2로부터 거의 4까지의 범위(10.0000 내지 11.1111의 범위)내의 값들에 관한 것이다. 부동-소수점 곱셈기들은 부동-소수점 곱의 루틴 상황(routine incident)으로서 이진 소수점(binary point)을 좌측으로 시프트하고 지수를 1만큼 증가시킴으로서 중간 결과치를 조절한다. 이러한 "비-정규" 중간 결과는 여기에서 비정규 수로서 고려되지 않으며, 본 발명에 의하여 정확하게 처리되지 않는다.
임의의 내장형 프로세서들과 같은 통상적인 프로세서 애플리케이션들에서, 비정규 수는 항상 지원될 필요가 없다. 예컨대, 비정규 값들은 정확도의 중대한 손실없이 단순히 0으로서 표현될 수 있다. 그러나, Java® 프로그래밍 언어는 비정규 수들에 대한 지원을 특정한다. 따라서, 프로세서들은 적어도 자바 실행 모드동안 비정규 부동-소수점 수들을 조절하기 위하여 자바 코드의 직접 실행을 지원한다.
비정규 부동-소수점 수들은 비정규 수를 검출할때 예외(exception)를 생성하 고 소프트웨어 루틴에서 비정규 수를 처리함으로서 소프트웨어로 지원될 수 있다. 이러한 프로세스는 느리며 큰 오버헤드를 발생시키는데, 이는 시스템 성능을 감소시키고 전력 소비를 증가시킨다.
비정규 수들은 각각의 부동-소수점 계산 엘리먼트에 비정규 검출 및 정규화 회로들을 추가함으로서 하드웨어로 지원될 수 있다. 예컨대, 비정규 수들은 정규 위치(즉, 1.분수)로 가수부를 시프트하고 -126(단일-정확도의 경우에) 보다 작은 지수의 (비표준) 값을 허용함으로서 "정규화"될 수 있다. 마찬가지로, 결과치들은 지수가 -126(단일-정확도의 경우에)이 되도록 비정규 위치(즉, 0.분수)로 가수부를 시프트함으로서 "비정규화"될 수 있다. 그러나, 이러한 부가 회로들은 실리콘 영역을 증가시키고 대기시간을 증가시키며 스루풋 지연을 유발하여, 잠재적으로 최소 사이클 시간을 증가시키고 결과적으로 최대 동작 주파수를 감소시킨다. 부가적으로, 비정규 수들은 드물게 발생되는데, 일반적인 경우를 희생하여 이러한 드문 경우에 대한 성능을 최적화하는 것은 전체 프로세서 성능을 감소시킨다.
부동-소수점 가산기들은 가수(addend)들을 정렬시키고, 합을 정규화(normalize)하고 라운딩(round)하는 회로들을 포함한다. 하나 이상의 실시예들에 따르면, 비정규 지원 모드에서, 부동-소수점 가산기의 정규화 회로는 부동-소수점 곱셈기로부터의 결과치들을 정규화 또는 비정규화하기 위하여 이용된다. 각각의 곱셈 명령은 0으로 만들어진 가수를 가진 곱셈-가산(또는 곱셈-누산으로서 공지됨) 명령으로 추론적으로(speculatively) 대체된다. 이는 곱을 정규화 또는 비정규화하기 위하여 곱셈기의 출력을 변경시키지 않고 가산기 회로를 통해 또한 가산기의 정규화 회로를 이용하여 곱셈기 출력을 제어하도록 한다. 만일 중간 곱이 비정규 수가 아니고 또한 최종 곱이 비정규 수가 아니라는 것이 결정되면, 연산중 가산 부분은 예컨대 피연산자 포워딩(operand forwarding)에 의하여 억제될 수 있다. 종종, 이러한 결정은 곱셈 명령 피연산자들의 지수들에 대하여 연산함으로서 곱셈 실행시 초기에 이루어질 수 있다.
일 실시예는 부정규(unnormal) 중간 가수부 또는 비정규(denormal) 최종 곱을 계산하기 위하여 부동-소수점 곱셈 명령을 실행하는 방법에 관한 것이다. 부동-소수점 곱셈 명령은 부동-소수점 곱셈 연산 또는 부동 소수점 가산 연산을 수행하도록 동작하는 부동-소수점 곱셈-가산 명령으로 변환되며, 부동-소수점 가산 연산에서 하나의 가수는 0으로 강제된다.
다른 실시예는 프로세서에 관한 것이다. 프로세서는 정규화 회로(normalization circuit)를 가진 부동-소수점 곱셈-누산 유닛을 구비하는 하나 이상의 명령 실행 파이프라인들을 포함한다. 프로세서는 부동-소수점 가산기의 정규화 회로를 사용하여 부동-소수점 곱셈기에 의한 부정규 중간 가수부 또는 비정규 부동-소수점 곱 출력을 정규화 또는 비정규화하도록 동작하는 파이프라인 제어기를 부가적으로 포함한다.
도 1은 프로세서의 기능 블록도이다.
도 2는 부동-소수점 곱셈기의 출력이 제공되는 부동-소수점 가산기의 기능 블록도이다.
도 3은 부동-소수점 곱셈 명령을 실행하는 방법을 기술한 흐름도이다.
도 4는 부동-소수점 곱셈-가산 명령을 실행하는 방법을 기술한 흐름도이다.
도 1은 프로세서(10)의 기능 블록도이다. 프로세서(10)는 제어 로직(14)에 따라 명령 실행 파이프라인(12)의 명령들을 실행한다. 제어 로직(14)은 다양한 동작 모드들을 한정하는 상태 레지스터(15)와 같은 하나 이상의 레지스터들을 포함한다. 파이프라인(12)은 도면부호 12a 및 12b와 같은 다중 병렬 파이프라인들을 가진 수퍼스칼라 설계일 수 있다. 각각의 파이프라인(12a, 12b)은 파이프 스테이지들로 편성된 다양한 레지스터들 또는 래치들(16) 및 하나 이상의 산술 논리 유닛(ALU)(18)을 포함한다. 파이프 스테이지 레지스터들 또는 래치들(16)과 ALU들(180)은 범용 레지스터 파일(28)의 레지스터들로부터 피연산자들을 판독하고 및/또는 상기 레지스터들로 결과치들을 기록할 수 있다.
파이프라인들(12a, 12b)은 명령 캐시(I-캐시 또는 I$)(20)로부터 명령들을 페치하며, 메모리 어드레싱 및 허가들은 명령측 번역 룩어사이드 버퍼(ITLB: Instruction-side Translation Lookaside Buffer)(22)에 의하여 관리된다. 데이터는 데이터 캐시(D-캐시 또는 D$)(24)로부터 액세스되며, 메모리 어드레싱 및 허가들은 주 번역 룩어사이드 버퍼(TLB: main Translation Lookaside Buffer)(26)에 의하여 관리된다. 다양한 실시예들에서, ITLB(22)는 TLB(26)의 일부분의 복사본(copy)을 포함할 수 있다. 선택적으로, ITLB(22) 및 TLB(26)은 집적될 수 있다. 유사하게, 프로세서(10)의 다양한 실시예들에서, I-캐시(20) 및 D-캐시(24)는 집적되거나 또는 통합될 수 있다. I-캐시(20) 및/또는 D-캐시(24)의 미스(miss)들은 메모리 인터페이스(34)의 제어하에서 주(오프-칩) 메모리(36)에 대한 액세스를 야기한다.
프로세서(10)는 다양한 주변장치들(40, 42)에 대한 액세스를 제어하는 입력/출력(I/O) 인터페이스(38)를 포함할 수 있다. 당업자는 프로세서(10)의 다수의 변형들이 가능하다는 것을 인식할 것이다. 예컨대, 프로세서(10)는 I 및 D 캐시들중 하나 또는 둘다에 대한 제 2레벨(L2) 캐시를 포함할 수 있다. 더욱이, 프로세서(10)내에 도시된 기능 블록들중 하나 이상은 특정 실시예로부터 생략될 수 있다.
하나 이상의 실시예들에서, 프로세서(10)는 예컨대 상태 레지스터(15)의 비정규 지원 비트에 의하여 지시될 수 있는 비정규 지원 모드에서 동작한다. 특히, 비정규 지원 모드는 프로세서(10)가 직접 자바 코드를 직접 실행할때마다 그리고 프로그래머들이 비정규 부동-소수점 수들을 지원하는 것을 선택하는 임의의 다른 시간들에 들어갈 수 있다.
비정규 지원 모드에서, 프로세서(10)는 0의 가수를 사용하여 각각의 부동-소수점 곱셈 명령을 곱셈-가산(또는 곱셈-누산) 명령으로 추론적으로 변환시킨다. 곱셈-가산 동작은 퓨즈(fuse) 또는 비-퓨즈형일 수 있다. 퓨즈형 곱셈-가산동작에서, 중간 곱의 최대 폭(입력 폭의 2배)은 중간 라우팅없이 가산기에 전송된다. 비-퓨즈형 곱셈-가산 동작에서, 곱셈 동작의 중간 곱은 가산 동작이 수행되기전에 (종종 입력 정확도로) 라운딩된다.
일 실시예에서, 각각의 부동-소수점 곱셈 명령은 가수가 0으로 강제된 퓨즈형 곱셈-가산 명령으로 추론적으로 대체된다. 이러한 명령 스트림 변경은 일반적으로 실행 스테이지전에 디코드 스테이지 또는 임의의 이벤트와 같은 관련 파이프라인(12a, 12b)에서 초기에 수행된다. 정규 프로세서 동작에 의하여, 퓨즈형 곱셈-가산의 실행 스테이지에서, 부동-소수점 곱셈기의 출력은 도 2에 도시된 바와같이 부동-소수점 가산기의 입력에 직접 전송될 것이다. 퓨즈형 곱셈-가산 명령을 지원하는 부동-소수점 가산기는 부동-소수점 곱셈기로부터 중간 곱을 수신하기에 충분한 입력 폭을 가진다.
도 2는 부동-소수점 가산기(52)의 입력에 전송되는 부동-소수점 곱셈기(50)의 출력을 도시한 기능 블록도이다. 부동-소수점 가산기(52)는 부동-소수점 가수들을 정렬시키는 정렬 회로(54), 부동-소수점 합을 계산하는 가산 회로(56), 합을 정규화(또는 비정규화)하는 정규화 회로(58), 및 시프트된 합을 라운딩하는 라운딩 회로(60)를 포함한다. 곱셈기(50)에 대한 승수(MR) 및 피승수(MD), 및 부동-소수점 가산기(52)에 대한 가수 입력(들)은 GPR 파일(28)에 저장된 값들과 같은 등록된 값들일 수 있다. 피가산수(37)는 정규 지원 모드에서 부동-소수점 가산기(52)를 이용하기 위하여 부동-소수점 가산기(52)로 다중화된다.
부동-소수점 곱셈기(50)의 출력의 값을 보존하기 위하여, 수를 정규화 또는 비정규화하는 동안, 부동-소수점 가산 연산의 가수는 0으로 강제된다. 이는 다양한 방식들로 실행될 수 있다. 예컨대, 0의 값은 도 2에 도시된 바와같이 정렬 회로(54)로 다중화될 수 있다. 선택적으로, 값 0은 정규 실행의 부분으로서 부동-소 수점 곱셈-가산 명령에 의하여 검색되도록 GPR 레지스터(29)에 저장될 수 있다. 또 다른 예에서, GPR 레지스터(29)의 출력은 비정규 지원 모드 비트를 포함하고 레지스터 값을 게이팅 오프(gating off)하고 비정규 모드에서 0을 제공하는 제어 로직으로 게이팅될 수 있다. 일부의 경우에, 값 0은 하나의 가수로서 부동-소수점 가산기(52)에 공급되며, 부동-소수점 곱셈기(50)의 이중-폭(double-width) 출력은 다른 가수로서 공급된다. 가산 회로(56)에서 제로의 가산은 수의 값을 변경하지 않는다. 이때, 수는 정규화 회로(58)에서 정규화/비정규화되며 라운딩 회로(60)에서 라운딩된다. 이러한 방식에서, 프로세서(10)는 부동-소수점 곱셈기(50)의 비정규 출력들 및 비정규 최종 결과들을 수용하기 위하여 부동-소수점 가산기(52)에서 기존 하드웨어를 이용한다.
예컨대 명령 세트 아키텍처가 단지 비-퓨즈형 곱셈-가산 연산들을 지원하는 또 다른 실시예에서, 각각의 부동-소수점 곱셈 명령은 비-퓨즈형 곱셈-가산 명령으로 추론적으로 대체된다. 이러한 경우에, 중간 최대-폭 곱은 라운딩없이 가산기 정규화 로직(58)에 라우팅되어야 한다. 이는 다양한 방식으로 실현될 수 있다. 예컨대, 곱은 가산 회로(56)를 바이패스(bypass)할 수 있고, 다중화기(57)에서 도시된 바와같이 정규화 로직(58)으로 직접 라우팅될 수 있다. 도시되지 않았지면, 부동-소수점 가산기(52)는 중간 레지스터들을 가진 파이프라인 유닛으로서 구현될 수 있다. 이러한 경우에, 정규화 로직으로 라우팅된 데이터는 또한 매칭되도록 파이프라이닝될 수 있다. 선택적으로, 부동-소수점 가산기 입력 로직은 중간 곱의 최대 폭을 수용하도록 수정될 수 있다. 어느 한 경우에, 가산 회로(56) 및 정규화 기(58)는 데이터를 위하여 충분한 폭을 가진다. 또한, 비-퓨즈형 곱셈-가산 연산의 경우에, 선행 0 카운트는 중간 곱의 상부 절반상에서 수행되어야 한다. 이러한 카운트는 제어를 위한 정규화 로직 및 지수 생성을 위한 지수 로직(도시안됨)에 라우팅되어야 한다.
일반적으로, 승수(MR) 및 피승수(MD)의 값들은 예컨대 실행 스테이지와 같은 파이프라인에서 한참 수행될때까지 알려지지 않는다. MR 및 MD 값들이 알려지자 마자, 이들 값들은 모두 그들이 양 정규값들인지를 결정하기 위하여 검사되며 부동-소수점 곱셈기로부터 정규화된 가수부를 생성할 것이다. 이와 병렬로, 최종 결과가 정규값인지를 결정하기 위하여 지수값들에 대하여 연산들이 수행될 수 있다. 만일 부동-소수점 곱셈기(50)의 출력이 정규값을 가지고 최종 결과가 정규 부동-소수점 수이면, 가산 연산은 억제될 수 있다. 이러한 경우에, 부동-소수점 곱셈기(50)의 출력은 경로(62)에 의하여 도 2에 도시된 바와같이 피연산자 포워딩에 의하여 부동-소수점 가산기(52)를 패스할 수 있다. 이는 데이터가 가산기를 통과하기를 기다리지 않고 결과에 종속하는 다음 명령들이 이러한 데이터를 소비하도록 한다. 결과가 거의 비정규 값이 아닐때와 같은 일부의 경우들에서, 결과가 비정규인지를 초기에 결정하는 것은 곤란하다. 이들 경우에, 가산 연산은 최종 곱이 비정규인 경우에 이 최종 곱이 비정규화되도록 수행될 것이다.
곱셈-가산 명령의 부동-소수점 곱셈 연산은 중간 곱으로서 비정규 또는 부정규 수를 유사하게 생성할 수 있다. 비정규 지원 모드에서, 비-퓨즈형 곱셈-가산 명령은 곱셈 연산의 곱에 값 0을 더하도록 변경되며, 가산 명령은 원시 곱셈-가산 명령의 가수와 함께 곱셈-가산 명령 후 명령 스트림에 삽입된다. 즉, 부동-소수점 곱셈 연산의 최대-폭 곱은 원시 가수를 사용하여 가산 연산을 수행하기전에 0에 더해진다. 곱셈-가산 명령들로 변환된 곱셈 명령들과 관련하여 앞서 기술된 바와같이, 부동-소수점 가산기는 가장 넓은 중간 곱을 수행하도록 수정되어야 하거나 또는 이러한 곱은 정규화기에 직접 전송되어야 한다. 또한, 선행 0 카운트는 정규화 회로를 제어하기 위하여 사용되는 곱의 중요 비트들에 대하여 유지되어야 한다. 이러한 방식에서, 곱-가산 명령의 가산 연산은 개별 부동-소수점 가산 명령을 통해 가산 연산을 수행하기전에 값을 변경시키지 않고 곱의 임의의 정규화(또는 비정규화)를 수행하기 위하여 사용된다. 퓨즈형 곱셈-가산 명령들을 실행하는 로직은 다음 가산 명령을 삽입할 필요성없이 부정규 또는 비정규 중간 곱을 조절할 수 있다.
도 2에 도시된 바와같이, 부동-소수점 곱셈기(50)의 출력은 부동-소수점 가산기(52)의 하나의 입력에 전송되며, 0은 부동-소수점 가산기(52)에 대한 다른 입력에서 강제된다. 가산 회로(56)는, 앞서 기술된 바와같이, 정규화 회로(58)에서 정규화/비정규화되고 라운딩 회로(60)에서 라운딩되는 중간 곱의 값을 변경하지 않는다. 이때, 정규화(또는 비정규화)된 수는 경로(64)에 의하여 지시된 바와같이 부동-소수점 가산기(52)의 한 입력에 라우팅된다. GPR 레지스터(29)에 저장된 원시 곱셈-가산 명령의 가수는 부동-소수점 가산기(52)의 다른 입력에 전송되며, 부동-소수점 가산 명령은 실행된다. 이러한 방식에서, 부동-소수점 곱셈기(50)의 출력들은 원시 비-퓨즈형 곱셈-가산 명령의 가산 연산을 수행하기전에 회로들을 이용하여 정규화/비정규화된다.
여기에서 다시, 명령 스트림내로 가산 명령의 삽입 및 0 가수를 대체하기 위한 곱셈-가산 명령의 변경은 일반적으로 디코드 스테이지와 같은 파이프라인에서 초기에 수행된다. 승수(MR) 및 피승수(MD)의 값들이 예컨대 실행 스테이지에서 알려지게 될때, 이들 값들은 검사될 수 있고, 지수들은 곱셈 연산이 중간 비정규 출력을 생성할 수 있는지의 여부 또는 최종 결과가 비정규인지를 결정하기 위하여 연산될 수 있다. 만일 그렇치 않다면, 곱셈-가산 명령의 변경은 0의 가수를 원시 가수로 대체함으로서 꺼꾸로 되거나 또는 원상태로 될 수 있다. 부가적으로, 삽입되는 부동-소수점 가산 명령은 종래의 파이프라인 최적화에 의하여 제거될 수 있는 NOP(비연산)으로 변환될 수 있다.
도 3은 비정규 지원 모드에서 부동-소수점 곱셈 명령들을 처리할때 프로세서(10)의 동작을 도시한다. 명령은 (예컨대 명령 캐시(20)로부터) 페치되고 디코딩된다(블록 70). 만일 프로세서가 비정규 지원 모드에서 동작하지 않으면(블록(72), 프로세서는 종래의 파이프라인 동작에 의하여 명령들을 처리한다(블록 86). 만일 프로세서가 비정규 지원 모드에 있으면(블록 72), 디코딩된 명령은 그것이 부동-소수점 곱셈 명령인지를 결정하기 위하여 검사된다(블록 74). 만일 그렇치 않으면, 명령은 통상적으로 실행된다(블록 86).
만일 명령이 부동-소수점 곱셈 명령이면, 프로세서(10)는 부동-소수점 곱셈 명령의 0 가수로 부동-소수점 곱셈-가산 명령을 대체한다(블록 76). 부동-소수점 곱셈 연산에 대한 피연산자들이 이용가능할때, 이들은 부동-소수점 곱셈 연산이 확실히 정규 출력을 생성하도록 하는지를 결정하기 위하여 검사된다. 만일 부동-소 수점 곱셈 연산이 비정규 중간 출력을 생성하거나 또는 최종 결과가 비정규일 수 있으면(블록 80), 대체된 곱셈-가산 명령은 앞서 기술된 바와같이 부동-소수점 가산기(52)의 비정규화 회로(58)를 사용하여 중간 곱을 정규화 또는 비정규화하는 종래의 파이프라인 동작에 의하여 처리된다(블록 86). 퓨즈형 곱셈-가산 명령의 경우에는 추가 제어가 필요치 않다. 비-퓨즈형 곱셈-가산 명령의 경우에, 가산기 회로(56)는 중간 곱을 조절하기에 충분히 넓으며, 부동-소수점 가산기(52)는 비트들을 가산기에 적절하게 라우팅하기 위하여 수정될 필요가 있다. 선택적으로, 중간 곱은 도 2에 도시된 바와같이 부동-소수점 가산기(52)의 정규화 회로(58)에 직접 라우팅되며, 잠재적으로 중재 상태(intervening state) 엘리먼트들을 포함한다.
만일 부동-소수점 곱셈 연산이 정규 중간 및 최종 결과들을 생성한다고 결정되면(블록 80), "0 가산(add to zero)" 연산은 예컨대 피연산자 포워딩에 의하여 억제될 수 있다(블록 82). 이는 부동-소수점 곱셈기(50)의 정규화/비정규화가 필요치 않은 "0 가산(add to zero)" 연산을 수행할때의 성능 문제점을 방지한다.
도 4는 비정규 지원 모드에서 부동-소수점 곱셈-가산 명령들을 처리할때 프로세서(10)의 연산을 도시한다. 명령은 (예컨대, 명령 캐시(20)로부터) 페치되며 디코딩된다(블록 90). 만일 프로세서가 비정규 지원 모드에서 동작하지 않으면(블록 92), 프로세서는 종래의 파이프라인 연산에 의하여 명령들을 처리한다(블록 106). 만일 프로세서가 비정규 지원 모드에 있으면(블록 92), 디코딩된 명령은 그것이 비-퓨즈형 부동-소수점 곱셈-가산 명령인지를 결정하기 위하여 검사된다(블록 94). 만일 명령이 부동-소수점 곱셈-가산 명령이 아니거나 또는 퓨즈형 곱셈-가산 명령이면, 명령은 통상적으로 실행된다(블록 106).
만일 명령이 비-퓨즈형 부동-소수점 곱셈-가산 명령이면(블록 94), 프로세서는 부동-소수점 가산 동작을 수행하기전에 부동-소수점 곱셈 연산의 중간 곱들을 정규화/비정규화한다. 첫째, 값 0은 부동-소수점 곱셈-가산 명령에서 가수 대신에 대체된다(블록 96). 이때, 원시 가수를 가진 부동-소수점 가산 명령은 수정된 부동-소수점 곱셈-가산 명령 이후에 명령 스트림에 삽입된다(블록 98).
부동-소수점 곱셈 연산에 대한 피연산자들이 예컨대 실행 스테이지에서 이용가능할때, 피연산자들은 부동-소수점 곱셈 연산이 확실하게 정규 중간 및 최종 결과치들을 생성하는지를 결정하기 위하여 검사된다. 만일 부동-소수점 곱셈 연산이 부정규(unnormal) 중간 또는 비정규(denormal) 최종 결과를 생성하면(블록 100), 수정된 곱셈-가산 및 부가 가산 명령들은 종래의 파이프라인 연산에 의하여 처리되어(블록 106), 부동-소수점 가산 연산을 수행하기전에 부동-소수점 가산기(52)의 정규화 회로(58)를 사용하여 곱을 정규화/비정규화한다.
만일 부동-소수점 곱셈 연산이 정규 중간 및 최종 곱을 생성한다는 것이 결정되면(블록 100), 곱 정규화는 억제된다. 원시 가수는 부동-소수점 곱-가산 명령에서 0 대신에 대체되며(블록 102), 부가 부동-소수점 가산 연산은 부동-소수점 및 명령을 NOP로 변환함으로서 억제된다(블록 104). 그 다음에, 명령 처리는 종래의 파이프라인 연산에 의하여 계속된다(블록 86).
하나 이상의 실시예에 따르면, 부동-소수점 곱셈 연산들 및 비정규 최종 결과들의 중간 부정규 출력들은 부동-소수점 가산기(52)의 정규화 회로들(58)을 사용 하여 정규화/비정규화된다. 이는 대기시간 및 지연을 추가하고, 실리콘 영역을 증가시키며 전력 소비를 증가시키는, 부동-소수점 곱셈기(50)의 출력에 정규화 회로들을 추가할 필요성을 제거한다.
비록 본 발명이 특정 특징들, 양상들 및 실시예들과 관련하여 여기에서 기술되었을지라도, 다수의 변형들, 수정들 및 다른 실시예들이 본 발명의 범위내에서 가능하며, 따라서 모든 변형들, 수정들 및 실시예들은 본 발명의 범위내에 있는 것으로 간주된다. 본 실시예들은 모든 양상들에서 예시적 및 비제한적으로 해석되어야 하며, 첨부된 청구범위 및 이의 균등 범위내의 모든 변화들은 본 발명에 포함된다.

Claims (22)

  1. 비정규(denormal) 입력들 및/또는 비정규 곱(product)을 계산하기 위하여 부동-소수점 곱셈 명령을 실행하는 방법으로서,
    부동-소수점 곱셈 연산 및 부동-소수점 가산 연산을 수행하도록 동작하는 부동-소수점 곱셈-가산 명령으로 상기 부동-소수점 곱셈 명령을 변환하는 단계; 및
    상기 부동-소수점 가산 연산의 하나의 가수(addend)를 0으로 만드는 단계를 포함하는,
    부동-소수점 곱셈 명령 실행 방법.
  2. 제 1항에 있어서, 상기 방법 단계들은 단지 비정규 지원 모드에서 수행되는, 부동-소수점 곱셈 명령 실행 방법.
  3. 제 1항에 있어서, 부동-소수점 곱셈 명령을 부동-소수점 곱셈-가산 명령으로 변환하는 상기 단계는 실행 파이프라인 스테이지전에 실행되는, 부동-소수점 곱셈 명령 실행 방법.
  4. 제 3항에 있어서, 부동-소수점 곱셈 명령을 부동-소수점 곱셈-가산 명령으로 변환하는 상기 단계는 디코드(decode) 파이프라인 스테이지에서 실행되는, 부동-소수점 곱셈 명령 실행 방법.
  5. 제 1항에 있어서, 상기 부동-소수점 곱셈-가산 명령은 비-퓨즈형(non-fuse)이며,
    상기 방법은 부동-소수점 곱셈기의 출력을 부동-소수점 가산기의 비정규화 회로에 라우팅하는 단계를 더 포함하는, 부동-소수점 곱셈 명령 실행 방법.
  6. 제 5항에 있어서, 부동-소수점 곱셈기의 출력을 부동-소수점 가산기의 정규화 회로에 라우팅하는 상기 단계는 상기 부동-소수점 곱셈기의 출력을 상기 비정규 회로에 직접 라우팅하는 단계를 포함하는, 부동-소수점 곱셈 명령 실행 방법.
  7. 제 5항에 있어서, 부동-소수점 곱셈기의 출력을 부동-소수점 가산기의 정규화 회로에 라우팅하는 상기 단계는 상기 부동-소수점 곱셈기의 출력을 하나 이상의 파이프라인 메모리 엘리먼트들을 통해 상기 비정규 회로로 라우팅하는 단계를 포함하는, 부동-소수점 곱셈 명령 실행 방법.
  8. 제 1항에 있어서, 상기 부동-소수점 곱셈 명령의 승수(multiplier) 및 피승수(multiplicand)를 검사하는 단계;
    상기 검사에 기초하여, 상기 곱셈 연산의 곱이 비정규 수가 아니고 상기 곱셈 피연산자들이 비정규가 아니라는 것을 결정하는 단계; 및
    상기 결정에 응답하여, 상기 부동-소수점 가산 연산을 억제(suppress)하는 단계를 더 포함하는, 부동-소수점 곱셈 명령 실행 방법.
  9. 제 8항에 있어서, 승수 및 피승수를 검사하는 상기 단계는 실행 파이프라인 스테이지에서 실행되는, 부동-소수점 곱셈 명령 실행 방법.
  10. 제 8항에 있어서, 상기 부동-소수점 가산 연산을 억제하는 상기 단계는 다음 명령들에 의하여 소비될 수 있도록 부동-소수점 곱셈기의 출력을 피연산자-포워딩(operand-forwarding)하는 단계를 포함하는, 부동-소수점 곱셈 명령 실행 방법.
  11. 제 1항에 있어서, 상기 부동-소수점 곱셈 명령은 비-퓨즈형 부동-소수점 곱셈-가산 명령이며,
    상기 부동-소수점 곱셈 명령을 변환하는 상기 단계는,
    상기 부동-소수점 곱셈-가산 명령의 가수(addend) 대신에 상기 값 0을 대체하는 단계; 및
    원시 부동-소수점 곱셈-가산 명령의 가수를 가진 부동-소수점 가산 명령을 상기 부동-소수점 곱셈-가산 명령 이후에 삽입하는 단계를 포함하는, 부동-소수점 곱셈 명령 실행 방법.
  12. 제 11항에 있어서, 상기 부동-소수점 곱셈-가산 명령의 승수(multiplier) 및 피승수(multiplicand)를 검사하는 단계;
    상기 검사에 기초하여, 상기 곱셈 연산의 곱이 비정규 수가 아니라는 것을 결정하는 단계;
    상기 검사에 기초하여, 상기 곱셈 연산에 대한 입력들이 비정규 수들이 아니라는 것을 결정하는 단계; 및
    상기 결정에 응답하여, 상기 원시 곱셈-가산 명령의 가수(addend)로 0 가수를 대체하는 단계 및 상기 부동 소수점 가산 명령을 NOP로 변환하는 단계를 포함하는, 부동-소수점 곱셈 명령 실행 방법.
  13. 하나 이상의 명령 실행 파이프라인들;
    부동-소수점 곱셈기;
    정규화 회로를 가진 부동-소수점 가산기; 및
    상기 부동-소수점 가산기의 정규화 회로를 사용하여 상기 부동-소수점 곱셈기에 의한 부동-소수점 곱 출력을 정규화 또는 비정규화하도록 동작하는 파이프라인 제어기를 포함하는,
    프로세서.
  14. 제 13항에 있어서, 상기 파이프라인 제어기는 단지 비정규 지원 모드에서 상기 부동-소수점 곱을 정규화 또는 비정규화하는, 프로세서.
  15. 제 13항에 있어서, 상기 파이프라인 제어기는 부동-소수점 곱셈 연산 및 부 동-소수점 가산 연산을 수행하도록 동작하는 부동-소수점 곱셈-가산 명령으로 각각의 부동-소수점 곱셈 명령을 변환하도록 상기 파이프라인을 제어함으로서 상기 부동-소수점 곱(product)을 정규화 또는 비정규화하는, 프로세서.
  16. 제 15항에 있어서, 상기 파이프라인 제어기는 실행 파이프 라인전에 각각의 부동-소수점 곱셈 명령을 부동-소수점 곱셈-가산 명령으로 변환하도록 상기 파이프라인을 제어하는, 프로세서.
  17. 제 16항에 있어서, 상기 파이프라인 제어기는 디코드 파이프 스테이지에서 각각의 부동-소수점 곱셈 명령을 부동-소수점 곱셈-가산 명령으로 변환하도록 상기 파이프라인을 제어하는, 프로세서.
  18. 제 13항에 있어서, 상기 파이프라인 제어기는 상기 부동-소수점 곱셈기가 부동-소수점 곱셈 연산을 수행하기전에 승수 및 피승수의 검사에 의하여 부정규(unnormal) 중간 곱 또는 비정규(denormal) 최종 곱을 생성할 수 있는지의 여부를 예측하도록 동작하며, 만일 생성할 수 있다면 상기 부동-소수점 곱셈기의 출력의 정규화 또는 비정규화를 억제하도록 동작하는, 프로세서.
  19. 제 18항에 있어서, 상기 파이프라인 제어기는 다음 명령들에 의하여 소비될 수 있도록 상기 곱을 피연산자-포워딩(operand-forwarding))함으로서 상기 부동-소 수점 곱셈기의 출력의 정규화 또는 비정규화를 억제하는, 프로세서.
  20. 제 13항에 있어서, 상기 파이프라인 제어기는 0의 가수(addend)를 사용하여 각각의 비-퓨즈형(non-fuse) 부동-소수점 곱셈-가산 명령을 부동-소수점 곱셈-가산 명령으로 변환하도록 그리고 원시 부동-소수점 곱셈-가산 명령의 가수를 가진 부동-소수점 가산 명령을 상기 부동-소수점 곱셈-가산 명령 이후에 삽입하도록 상기 파이프라인을 제어함으로서 상기 비정규 부동-소수점 곱을 정규화 또는 비정규화하는, 프로세서.
  21. 제 20항에 있어서, 상기 파이프라인 제어기는 상기 부동-소수점 곱셈기가 부동-소수점 곱셈 연산을 수행하기전에 승수 및 피승수의 검사에 의하여 부정규(unnormal) 중간 최종 곱 또는 비정규(denormal) 곱을 생성할 수 있는지를 예측하고, 만일 생성할 수 없으면 상기 부동-소수점 곱셈기의 출력의 비정규화를 억제하도록 동작하는, 프로세서.
  22. 제 21항에 있어서, 상기 파이프라인 제어기는 원시 곱셈-가산 명령의 가수로 0 가수를 대체하고 상기 부동-소수점 가산 명령을 NOP로 변환함으로서 상기 부동-소수점 곱셈기의 출력의 정규화 또는 비정규화를 억제하는, 프로세서.
KR1020087030127A 2006-05-10 2007-04-27 비정규 피연산자를 위한 모드―기반 곱셈-가산 프로세서 KR20090014292A (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US11/382,525 US7912887B2 (en) 2006-05-10 2006-05-10 Mode-based multiply-add recoding for denormal operands
US11/382,525 2006-05-10

Publications (1)

Publication Number Publication Date
KR20090014292A true KR20090014292A (ko) 2009-02-09

Family

ID=38461209

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020087030127A KR20090014292A (ko) 2006-05-10 2007-04-27 비정규 피연산자를 위한 모드―기반 곱셈-가산 프로세서

Country Status (6)

Country Link
US (2) US7912887B2 (ko)
EP (1) EP2024816A1 (ko)
JP (2) JP4938844B2 (ko)
KR (1) KR20090014292A (ko)
CN (2) CN101438233B (ko)
WO (1) WO2007133914A1 (ko)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20170037518A (ko) * 2015-09-25 2017-04-04 에이알엠 리미티드 부동소수점 곱셈 장치 및 방법
US11513733B2 (en) 2020-01-07 2022-11-29 SK Hynix Inc. Processing-in-memory (PIM) system and operating methods of the PIM system
US11579870B2 (en) 2020-01-07 2023-02-14 SK Hynix Inc. Multiplication and accumulation (MAC) operator
US11907680B2 (en) 2020-01-07 2024-02-20 SK Hynix Inc. Multiplication and accumulation (MAC) operator

Families Citing this family (37)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7912887B2 (en) * 2006-05-10 2011-03-22 Qualcomm Incorporated Mode-based multiply-add recoding for denormal operands
US8078660B2 (en) * 2007-04-10 2011-12-13 The Board Of Regents, University Of Texas System Bridge fused multiply-adder circuit
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
US8239440B2 (en) * 2008-03-28 2012-08-07 Oracle America, Inc. Processor which implements fused and unfused multiply-add instructions in a pipelined manner
US8239441B2 (en) * 2008-05-15 2012-08-07 Oracle America, Inc. Leading zero estimation modification for unfused rounding catastrophic cancellation
US8103858B2 (en) * 2008-06-30 2012-01-24 Intel Corporation Efficient parallel floating point exception handling in a processor
US8166091B2 (en) * 2008-11-10 2012-04-24 Crossfield Technology LLC Floating-point fused dot-product unit
US8150902B2 (en) 2009-06-19 2012-04-03 Singular Computing Llc Processing with compact arithmetic processing element
US9092213B2 (en) * 2010-09-24 2015-07-28 Intel Corporation Functional unit for vector leading zeroes, vector trailing zeroes, vector operand 1s count and vector parity calculation
US8965945B2 (en) * 2011-02-17 2015-02-24 Arm Limited Apparatus and method for performing floating point addition
US8671129B2 (en) 2011-03-08 2014-03-11 Oracle International Corporation System and method of bypassing unrounded results in a multiply-add pipeline unit
US8892622B2 (en) 2011-04-07 2014-11-18 Oracle International Corporation Pipelined divide circuit for small operand sizes
US9600278B1 (en) 2011-05-09 2017-03-21 Altera Corporation Programmable device using fixed and configurable logic to implement recursive trees
US9098332B1 (en) 2012-06-01 2015-08-04 Altera Corporation Specialized processing block with fixed- and floating-point structures
US8892619B2 (en) * 2012-07-24 2014-11-18 The Board Of Trustees Of The Leland Stanford Junior University Floating-point multiply-add unit using cascade design
US8996600B1 (en) * 2012-08-03 2015-03-31 Altera Corporation Specialized processing block for implementing floating-point multiplier with subnormal operation support
US9829956B2 (en) * 2012-11-21 2017-11-28 Nvidia Corporation Approach to power reduction in floating-point operations
US9286069B2 (en) 2012-12-21 2016-03-15 Arm Limited Dynamic write port re-arbitration
US9189200B1 (en) 2013-03-14 2015-11-17 Altera Corporation Multiple-precision processing block in a programmable integrated circuit device
US9348795B1 (en) 2013-07-03 2016-05-24 Altera Corporation Programmable device using fixed and configurable logic to implement floating-point rounding
CN103677739B (zh) * 2013-11-28 2016-08-17 中国航天科技集团公司第九研究院第七七一研究所 一种可配置的乘累加运算单元及其构成的乘累加运算阵列
US20150261542A1 (en) * 2014-03-14 2015-09-17 Arm Limited Data processing apparatus and method for performing data processing operation with a conditional processing step
US10019229B2 (en) * 2014-07-02 2018-07-10 Via Alliance Semiconductor Co., Ltd Calculation control indicator cache
US9563400B2 (en) 2014-09-18 2017-02-07 International Business Machines Corporation Optimized structure for hexadecimal and binary multiplier array
US9684488B2 (en) 2015-03-26 2017-06-20 Altera Corporation Combined adder and pre-adder for high-radix multiplier circuit
US11061672B2 (en) 2015-10-02 2021-07-13 Via Alliance Semiconductor Co., Ltd. Chained split execution of fused compound arithmetic operations
US9875084B2 (en) * 2016-04-28 2018-01-23 Vivante Corporation Calculating trigonometric functions using a four input dot product circuit
US10078512B2 (en) 2016-10-03 2018-09-18 Via Alliance Semiconductor Co., Ltd. Processing denormal numbers in FMA hardware
US10175944B2 (en) * 2017-04-12 2019-01-08 Intel Corporation Mixed-precision floating-point arithmetic circuitry in specialized processing blocks
CN117273096A (zh) 2017-05-17 2023-12-22 谷歌有限责任公司 在硬件中执行矩阵乘法
US20200097799A1 (en) * 2017-06-30 2020-03-26 Intel Corporation Heterogeneous multiplier
US10747501B2 (en) * 2017-08-31 2020-08-18 Qualcomm Incorporated Providing efficient floating-point operations using matrix processors in processor-based systems
US11256509B2 (en) 2017-12-07 2022-02-22 International Business Machines Corporation Instruction fusion after register rename
US11157280B2 (en) 2017-12-07 2021-10-26 International Business Machines Corporation Dynamic fusion based on operand size
US10901694B2 (en) * 2018-12-31 2021-01-26 Micron Technology, Inc. Binary parallel adder and multiplier
US11347511B2 (en) * 2019-05-20 2022-05-31 Arm Limited Floating-point scaling operation
CN112463112B (zh) * 2020-11-19 2022-08-16 上海壁仞智能科技有限公司 点积累加方法及装置

Family Cites Families (24)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4727508A (en) * 1984-12-14 1988-02-23 Motorola, Inc. Circuit for adding and/or subtracting numbers in logarithmic representation
US4825400A (en) 1986-01-13 1989-04-25 General Electric Company Floating point accumulator circuit
US5530663A (en) * 1994-11-14 1996-06-25 International Business Machines Corporation Floating point unit for calculating a compound instruction A+B×C in two cycles
JPH09507941A (ja) * 1995-04-18 1997-08-12 インターナシヨナル・ビジネス・マシーンズ・コーポレーシヨン multiply−add浮動小数点シーケンスにおけるウエイト・サイクルなしのブロック正規化
CN1075646C (zh) * 1996-01-19 2001-11-28 张胤微 一种高速乘法器
JP3313560B2 (ja) * 1996-01-31 2002-08-12 株式会社日立製作所 浮動小数点演算処理装置
JP3658072B2 (ja) * 1996-02-07 2005-06-08 株式会社ルネサステクノロジ データ処理装置およびデータ処理方法
US5880984A (en) * 1997-01-13 1999-03-09 International Business Machines Corporation Method and apparatus for performing high-precision multiply-add calculations using independent multiply and add instruments
US5903479A (en) 1997-09-02 1999-05-11 International Business Machines Corporation Method and system for executing denormalized numbers
JP3132436B2 (ja) * 1997-09-26 2001-02-05 日本電気株式会社 浮動小数点積和演算器
US7346643B1 (en) 1999-07-30 2008-03-18 Mips Technologies, Inc. Processor with improved accuracy for multiply-add operations
US6714957B1 (en) * 2000-01-04 2004-03-30 National Semiconductor Corporation System and method for efficient processing of denormal results as hardware exceptions
CA2327924A1 (en) * 2000-12-08 2002-06-08 Ibm Canada Limited-Ibm Canada Limitee Processor design for extended-precision arithmetic
US20020164239A1 (en) * 2001-05-07 2002-11-07 Angermeier Gregory Robert Tiltable cargo box assembly with extension ramp
US7080111B2 (en) * 2001-06-04 2006-07-18 Intel Corporation Floating point multiply accumulator
US6779013B2 (en) * 2001-06-04 2004-08-17 Intel Corporation Floating point overflow and sign detection
US6904446B2 (en) * 2001-08-24 2005-06-07 Freescale Semiconductor, Inc. Floating point multiplier/accumulator with reduced latency and method thereof
US7188133B2 (en) * 2002-06-20 2007-03-06 Matsushita Electric Industrial Co., Ltd. Floating point number storage method and floating point arithmetic device
US20050228844A1 (en) * 2004-04-08 2005-10-13 International Business Machines Corporation Fast operand formatting for a high performance multiply-add floating point-unit
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
US7451172B2 (en) * 2005-02-10 2008-11-11 International Business Machines Corporation Handling denormal floating point operands when result must be normalized
US7720900B2 (en) * 2005-09-09 2010-05-18 International Business Machines Corporation Fused multiply add split for multiple precision arithmetic
US7912887B2 (en) * 2006-05-10 2011-03-22 Qualcomm Incorporated Mode-based multiply-add recoding for denormal operands
US8078660B2 (en) * 2007-04-10 2011-12-13 The Board Of Regents, University Of Texas System Bridge fused multiply-adder circuit

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20170037518A (ko) * 2015-09-25 2017-04-04 에이알엠 리미티드 부동소수점 곱셈 장치 및 방법
US11513733B2 (en) 2020-01-07 2022-11-29 SK Hynix Inc. Processing-in-memory (PIM) system and operating methods of the PIM system
US11579870B2 (en) 2020-01-07 2023-02-14 SK Hynix Inc. Multiplication and accumulation (MAC) operator
US11586438B2 (en) 2020-01-07 2023-02-21 SK Hynix Inc. Multiplication and accumulation (MAC) operator
US11663000B2 (en) 2020-01-07 2023-05-30 SK Hynix Inc. Multiplication and accumulation(MAC) operator and processing-in-memory (PIM) device including the MAC operator
US11817884B2 (en) 2020-01-07 2023-11-14 SK Hynix Inc. Neural network system with multiplication and accumulation(MAC) operator
US11909421B2 (en) 2020-01-07 2024-02-20 SK Hynix Inc. Multiplication and accumulation (MAC) operator
US11907680B2 (en) 2020-01-07 2024-02-20 SK Hynix Inc. Multiplication and accumulation (MAC) operator

Also Published As

Publication number Publication date
CN101438233B (zh) 2013-03-06
CN101438233A (zh) 2009-05-20
JP2012150821A (ja) 2012-08-09
CN103135958A (zh) 2013-06-05
JP2009536771A (ja) 2009-10-15
US20070266071A1 (en) 2007-11-15
US20110137970A1 (en) 2011-06-09
WO2007133914A1 (en) 2007-11-22
EP2024816A1 (en) 2009-02-18
JP4938844B2 (ja) 2012-05-23
US8447800B2 (en) 2013-05-21
US7912887B2 (en) 2011-03-22

Similar Documents

Publication Publication Date Title
US7912887B2 (en) Mode-based multiply-add recoding for denormal operands
US11347511B2 (en) Floating-point scaling operation
US8577948B2 (en) Split path multiply accumulate unit
TWI515649B (zh) 響應於輸入資料値以降低在積和熔加運算(fma)單元中的功率消耗之技術
US6108772A (en) Method and apparatus for supporting multiple floating point processing models
US7698353B2 (en) Floating point normalization and denormalization
JP2006221622A (ja) 正規化および丸め処理前にフィードバックを行う浮動小数点ユニットのためのシステムおよび方法
Schwarz et al. FPU implementations with denormalized numbers
Trong et al. P6 binary floating-point unit
US8046400B2 (en) Apparatus and method for optimizing the performance of x87 floating point addition instructions in a microprocessor
US5943249A (en) Method and apparatus to perform pipelined denormalization of floating-point results
JP5719341B2 (ja) 浮動小数点ユニットにおけるオーバーシフトの高速検出のためのメカニズム
Boersma et al. The POWER7 binary floating-point unit
US5764549A (en) Fast floating point result alignment apparatus
US6701427B1 (en) Data processing apparatus and method for processing floating point instructions
US6154760A (en) Instruction to normalize redundantly encoded floating point numbers
EP0840207A1 (en) A microprocessor and method of operation thereof
EP0837390A1 (en) Improvements in or relating to microprocessor integrated circuits
US6976153B1 (en) Floating point unit with try-again reservation station and method of operation
He et al. Multiply-add fused float point unit with on-fly denormalized number processing
GB2617436A (en) Chained multiply accumulate using an unrounded product
JPH0469734A (ja) 浮動小数点加減算のアンダーフロー例外発生予測回路
Zheng et al. Floating-point unit processing denormalized numbers

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E902 Notification of reason for refusal
E601 Decision to refuse application