KR101528340B1 - 부동 소수점 유닛에서 오버시프트의 빠른 검출을 위한 메카니즘 - Google Patents

부동 소수점 유닛에서 오버시프트의 빠른 검출을 위한 메카니즘 Download PDF

Info

Publication number
KR101528340B1
KR101528340B1 KR1020117023161A KR20117023161A KR101528340B1 KR 101528340 B1 KR101528340 B1 KR 101528340B1 KR 1020117023161 A KR1020117023161 A KR 1020117023161A KR 20117023161 A KR20117023161 A KR 20117023161A KR 101528340 B1 KR101528340 B1 KR 101528340B1
Authority
KR
South Korea
Prior art keywords
mantissa
overshift
floating point
unit
shift
Prior art date
Application number
KR1020117023161A
Other languages
English (en)
Other versions
KR20120003878A (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 KR20120003878A publication Critical patent/KR20120003878A/ko
Application granted granted Critical
Publication of KR101528340B1 publication Critical patent/KR101528340B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F5/00Methods or arrangements for data conversion without changing the order or content of the data handled
    • G06F5/01Methods or arrangements for data conversion without changing the order or content of the data handled for shifting, e.g. justifying, scaling, normalising
    • 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/485Adding; Subtracting
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F5/00Methods or arrangements for data conversion without changing the order or content of the data handled
    • G06F5/01Methods or arrangements for data conversion without changing the order or content of the data handled for shifting, e.g. justifying, scaling, normalising
    • G06F5/012Methods or arrangements for data conversion without changing the order or content of the data handled for shifting, e.g. justifying, scaling, normalising in floating-point computations

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • Mathematical Optimization (AREA)
  • Mathematical Analysis (AREA)
  • Pure & Applied Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Computational Mathematics (AREA)
  • Nonlinear Science (AREA)
  • Executing Machine-Instructions (AREA)
  • Advance Control (AREA)
  • Complex Calculations (AREA)

Abstract

부동 소수점 유닛이 그 각각이 지수부 및 가수부를 가지는 제1 부동 소수점 수와 제2 부동 소수점 수 사이에 부동 소수점 덧셈 연산을 수행하는 부동 소수점 덧셈기를 포함한다. 부동 소수점 유닛은 또한 상기 제2 지수부 값이 상기 제1 지수부 값과 동일하도록 상기 제2 가수부를 시프트할 비트 위치들의 개수에 해당하는 시프트 값을 계산할 수도 있는 정렬 시프트기를 포함한다. 상기 정렬 시프트기는 상기 시프트 값이 선택된 오버시프트 문턱값 이상으로 되는 오버시프트 상태를 검출할 수도 있다. 상기 선택된 오버시프트 문턱값은 최소 오버시프트 문턱값과 최대 오버시프트 문턱값을 포함하는 오버시프트 값들의 범위에 있는 이진수를 포함하고, 이는 최하위 비트에서 시작하여 최대 개수의 연속되는 제로 비트들을 가지는 것이다.

Description

부동 소수점 유닛에서 오버시프트의 빠른 검출을 위한 메카니즘{MECHANISM FOR FAST DETECTION OF OVERSHIFT IN A FLOATING POINT UNIT}
본 발명은 프로세서에 관한 것이며, 더욱 상세하게는 프로세서 내에서 부동소수점 계산에 관한 것이다.
컴퓨팅 시스템에 있어서, 부동 소수점 수는 유리수의 수 표현이다. 일반적으로, "부동 소수점(floating point)"이라는 어구는 기수점(radix point) 또는 소수점이 수의 유효 자리(significant digit)들과 관련하여 어디로도 이동될 수 있다는 생각을 가리키는 것이다. 위치 정보는 별개로 표시될 수 있다. 가장 널리 쓰이는 표준은 미국전기전자협회(IEEE) 754 표준에 의해 정의된 것이지만, 부동 소수점 수를 표현한 방법들은 많이 존재한다.
부동 소수점 연산은 훨씬 넓은 범위의 값들을 표현할 수 있다는 점에서 고정 소수점 연산(fixed point operations)에 비해 구별되는 장점을 제공한다. 하지만, 부동 소수점 연산은 계산에 있어 더 느릴 수 있다. 따라서, 전반적인 프로세서 성능을 고려할 때 컴퓨팅 시스템이 부동 소수점 산술 연산을 수행할 수 있는 속도의 척도가 주요한 관심사이다. 따라서, 컴퓨팅 시스템이 곱셈 및 덧셈과 같은 부동 소수점 산술 연산(FMA)을 수행할 때, 가능한 시기에 맞는 방식으로 "오버시프트(overshift)"를 검출하는 것이 중요할 수도 있다. 예를 들면, FMA를 수행할 때 가수(addend)는 유효 자리에 있어서 곱과 정렬되도록 시프트되어야 한다. 이렇게 하기 위하여, 시프트 양이 계산된다. 계산의 일부로서, 오버시프트 상태를 검출하는 것은 임계 경로(critical path)에 있다. 많은 종래의 시스템들에서, 논리 회로는 상수와 오른쪽 시프트 수 사이에 비교 연산을 수행할 수도 있다. 이 비교는 임계 타이밍 경로에 있고, 비교를 수행하는 게이트들의 개수가 클 수 있으며, 따라서 용인되는 것보다 더 큰 타이밍 경로 지연(timing path delay)을 가질 수 있다.
오버시프트 검출 메카니즘의 다양한 실시예들이 개시된다. 한 실시예에서, 프로세서 안에서 사용될 수도 있는 것과 같은 부동 소수점 유닛은 예를 들어 제1 지수부 및 제1 가수부를 가지는 제1 부동 소수점 수와 제2 지수부 및 제2 가수부를 가지는 제2 부동 소수점 수 사이에 부동 소수점 덧셈 연산을 수행하도록 구성되는 부동 소수점 덧셈기를 포함한다. 부동 소수점 유닛은 또한 상기 제2 지수부 값이 상기 제1 지수부 값과 동일하도록 상기 제2 가수부를 시프트할 비트 위치들의 개수에 해당하는 시프트 값을 계산할 수도 있는 정렬 시프트기를 포함한다. 상기 정렬 시프트기는 오버시프트 상태를 검출할 수도 있으며, 이 경우 상기 시프트 값은 선택된 오버시프트 문턱값 이상이다. 게다가, 상기 정렬 시프트기는 상기 오버시프트 상태를 검출하는 것에 응답하여 오버시프트 표시를 제공할 수도 있다. 상기 선택된 오버시프트 문턱값은 최소 오버시프트 문턱값과 최대 오버시프트 문턱값을 포함하는 오버시프트 값들의 범위에 있는 이진수(base 2 number)를 포함하고, 이는 최하위 비트에서 시작하여 최대 개수의 연속되는 제로 비트들을 가지는 것이다.
도 1은 범용 프로세서 코어의 한 실시예를 예시하는 일반화된 블록도이다.
도 2는 도 1의 부동 소수점 유닛(124c)의 실시예의 일부의 블록도이다.
도 3은 다수의 가변 길이의 가수 시프트들을 도시한 도면이다.
도 4는 오버시프트 검출 논리(logic)의 간략화한 구현예를 도시한 도면이다.
본 발명에 대해 다양한 수정들과 대체가능한 형태들이 용이할 수 있지만, 본 발명의 특정 실시예들이 상기 도면들에서 예시로서 도시되어 있으며 본 명세서에서 상세히 설명될 것이다. 하지만, 상기 도면들과 본 발명의 상세한 설명은 본 발명을 개시된 특정한 형태로 한정하고자 의도된 것이 아니라, 그와 반대로 첨부된 특허청구범위에 의해 정의된 바와 같이 본 발명의 사상과 범위에 들어오는 모든 수정들, 균등물들, 및 대체가능한 것들을 커버하고자 의도된 것이다. 유의할 점은 "할 수도 있다(may)"라는 단어는 본 출원 전반을 통해 임의적(permissive)(즉, 할 가능성이 있다(having the potential to), 할 수 있다(being able to))이라는 의미로 사용되는 것이며, 의무적(mandatory)(즉, 해야한다(must))이라는 의미로 사용되는 것이 아니다.
이제 도 1을 보면, 프로세서(10)의 한 실시예의 일반화된 블록도가 도시되어 있다. 다른 실시예들도 가능하며 예상된다. 도 1에 도시된 바와 같이, 프로세서(10)는 프리펫치(prefetch)/프리디코드(predecode) 유닛(12), 브랜치 예측 유닛(branch prediction unit)(14), 명령어 캐쉬(instruction cache)(16), 명령어 정렬 유닛(instruction alignment unit)(18), 디코드 유닛(20), 레저베이션 스테이션(reservation station)(22), 기능 유닛(functional unit)(24), 로드/스토어 유닛(load/store unit)(37), 데이터 캐쉬(data cache)(28), 레지스터 파일(register file)(30), 리오더 버퍼(reorder buffer)(32), MROM 유닛(34), 버스 인터페이스 유닛(bus interface unit)(37), 및 L2 캐쉬(39)를 포함한다. 유의할 점은 수퍼스칼라 프로세서(superscalar processsor)에서는 복수의 파이프라인(pipeline)들이 존재할 수도 있으며 각각의 파이프라인이 각각 디코드 유닛, 레저베이션 유닛, 및 기능 유닛들을 가질 수도 있기 때문에, 다양한 실시예들에서 디코드 유닛(20), 레저베이션 스테이션(22), 및 기능 유닛(24) 각각은 임의의 개수의 독립적인 유닛들을 포함할 수도 있다는 것이다. 이에 따라, 예시된 실시예에서, 기능 유닛(24)은 정수 유닛들(integer units)(124a, 124b)과 부동 소수점 유닛(FPU)(124c)을 포함한다. 하지만, 다른 실시예들에서, 다른 개수의 정수 유닛들과 FPU(124c)가 사용될 수도 있다.
프리펫치/프리디코드 유닛(12)은 버스 인터페이스 유닛(37)으로부터 명령어들을 수신하도록 연결되고, 명령어 캐쉬(16)와 브랜치 예측 유닛(14)에 또한 연결된다. 유사하게, 브랜치 예측 유닛(14)은 명령어 캐쉬(16)에 연결된다. 더 나아가, 브랜치 예측 유닛(14)은 디코드 유닛들(20)과 기능 유닛들(24)에 연결된다. 명령어 캐쉬(16)는 MROM 유닛(34)과 명령어 정렬 유닛(18)에 또한 연결된다. 명령어 정렬 유닛(18)은 다시 디코드 유닛(20)에 연결된다. 디코드 유닛(20)은 로드/스토어 유닛(26)과 레저베이션 스테이션(22)에 연결된다. 레저베이션 스테이션(22)은 또한 각각의 기능 유닛들(24)에 연결된다. 게다가, 디코드 유닛(20)과 레저베이션 스테이션(22)은 레지스터 파일(30)과 리오더 버퍼(32)에 연결된다. 기능 유닛(24)은 로드/스토어 유닛(26), 레지스터 파일(30), 및 리오더 버퍼(32)에 역시 연결된다. 데이터 캐쉬(28)는 로드/스토어 유닛(26)과 버스 인터페이스 유닛(37)에 연결된다. 버스 인터페이스 유닛(37)은 또한 L2 캐쉬(39)와 버스에 연결된다. 마지막으로, MROM 유닛(34)은 디코드 유닛(20)에 연결된다.
명령어 캐쉬(16)는 명령어들을 저장하기 위해 제공되는 고속 캐쉬 메모리이다. 명령어들은 명령어 캐쉬(16)로부터 펫치되고 디코드 유닛들(20)로 디스팻치(dispatch)된다. 한 실시예에서, 명령어 캐쉬(16)는 64 바이트 라인들을 가지는 2 웨이 세트 연관 구조(2 way set associative structure)로 64 킬로바이트까지의 명령어들을 저장하도록 구성된다(한 바이트는 8개의 이진 비트들을 포함). 대체가능한 것으로, 임의의 다른 원하는 구성과 크기가 채용될 수도 있다. 예를 들면, 유의할 점은 명령어 캐쉬(16)가 완전 연관(fully associative), 세트 연관(set associative), 직접 사상(direct mapped) 구성으로서 구현될 수도 있다는 것이다.
명령어들은 프리펫치/프리디코드 유닛(12)에 의해 명령어 캐쉬(16)로 저장된다. 명령어들 및/또는 데이터는 프리펫치 방식에 따라 명령어 캐쉬(16)나 로드/스토어 유닛(26)으로부터 그 요청에 앞서 프리펫치될 수도 있다. 디코드 유닛(20)에 의해 직접 디코드될 수도 있는 명령어들은 "빠른 경로(fast path)" 명령어들로 지칭된다. 한 실시예에 따르면, 나머지 x86 명령어들은 MROM 명령어들로 지칭된다. MROM 명령어들은 디코드 유닛들(20)에 의해 디코드하기에 너무 복잡한 것으로 판별되는 명령어들이다. MROM 명령어들은 MROM 유닛(34)을 작동시킴으로써 실행된다. 더욱 구체적으로, MROM 명령어를 만났을 때, MROM 유닛(34)은 그 명령어를 원하는 동작을 발효시키도록 정의된 빠른 경로 명령어들의 서브세트(subset)로 파싱(parse)하여 이슈(issue)한다. MROM 유닛(34)은 빠른 경로 명령어들의 서브세트를 디코드 유닛(20)으로 디스패치한다.
예시된 실시예에서, 프로세서(10)는 조건부 브랜치 명령어들(conditional branch instructions)의 다음에 오는 명령어들을 투기적으로(speculatively) 펫치하기 위하여 브랜치 예측을 채용한다. 브랜치 예측 유닛(14)은 브랜치 예측 연산들을 수행하기 위하여 포함된다. 디코드 유닛(20)과 기능 유닛(24)은 브랜치 예측 유닛(14)으로 업데이트 정보를 제공할 수도 있다. 디코드 유닛(20)은 브랜치 예측 유닛(14)에 의해 예측되지 않았던 브랜치 명령어들을 검출할 수도 있다. 기능 유닛(24)은 브랜치 명령어들을 실행하고 예측된 브랜치 방향이 잘못된 것인지를 판별한다. 브랜치 방향은 "테이큰(taken)"일 수도 있으며, 이 경우 브랜치 명령어의 목표 어드레스로부터 후속 명령어들이 펫치된다. 반대로, 브랜치 방향은 "낫테이큰(not taken)"일 수도 있으며, 이 경우 그 브랜치 명령어에 연속적인 메모리 위치들로부터 후속 명령어들이 펫치된다. 잘못 예측된(mispredicted) 브랜치 명령어가 검출된 때에는, 잘못 예측된 브랜치의 후속 명령어들은 프로세서(10)의 다양한 유닛들로부터 폐기(discard)된다. 대체가능한 구성에서, 브랜치 예측 유닛(14)은 디코드 유닛들(20)과 기능 유닛(24) 대신에 리오더 버퍼(32)에 연결될 수도 있고, 리오더 버퍼(32)로부터 브랜치 예측 오류 정보(misprediction information)를 수신할 수도 있다. 브랜치 예측 유닛(14)에 의해 다양한 적절한 브랜치 예측 알고리듬들이 채용될 수도 있다.
명령어 캐쉬(16)로부터 펫치된 명령어들은 명령어 정렬 유닛(18)으로 전달된다. 명령어들이 명령어 캐쉬(16)로부터 펫치될 때, 펫치되고 있는 명령어들에 관한 정보를 명령어 정렬 유닛(18)(및 MROM 유닛(34))으로 제공하기 위해 해당 프리디코드 데이터가 스캔(scan)된다. 명령어 정렬 유닛(18)은 디코드 유닛(20)의 각각의 유닛에 대해 명령어를 정렬하기 위해 스캔 데이터를 활용한다. 한 실시예에서, 명령어 정렬 유닛(18)은 디코드 유닛(20)에 대해 8개 명령어 바이트들의 3개 세트로부터 명령어들을 정렬한다.
디코드 유닛(20)은 명령어 정렬 유닛(18)으로부터 수신된 명령어들을 디코드하도록 구성된다. 레지스터 오퍼런드(register operand) 정보가 검출되어 레지스터 파일(30)과 리오더 버퍼(32)로 라우팅(route)된다. 게다가, 만일 명령어들이 하나 이상의 메모리 연산들이 수행될 것을 필요로 한다면, 디코드 유닛(20)은 메모리 연산들을 로드/스토어 유닛(26)으로 디스패치한다. 각각의 명령어는 기능 유닛(24)을 위한 한 세트의 제어 값들로 디코드되고, 이들 제어 값들은 그 명령어에 포함될 수도 있는 오퍼런드 어드레스 정보와 변위(displacement) 또는 즉시 데이터(immediate data)와 함께 레저베이션 스테이션(22)으로 디스패치된다. 한 특정한 실시예에서, 각각의 명령어는 2개까지의 연산들로 디코드되며, 이 연산들은 기능 유닛들(124a-124b)에 의해 별도로 실행될 수도 있다.
프로세서(10)는 비순차적 실행(out of order execution)을 지원하며, 따라서 레지스터 읽기 및 쓰기 연산들에 대한 원래의 프로그램 시퀀스를 파악하고, 레지스터 리네이밍(register renaming)을 구현하고, 투기적 명령어 실행과 브랜치 예측 오류 복구를 가능하게 하며, 정확한 예외(precise exceptions)를 용이하게 하기 위해 리오더 버퍼(32)를 채용한다.
디코드 유닛(20)의 출력들에서 제공되는 명령어 제어 값들과 즉시 또는 변위 데이터는 각각의 레저베이션 스테이션들(22)로 직접 라우팅된다. 한 실시예에서, 레저베이션 스테이션(22)의 각각의 유닛은 해당 기능 유닛으로의 이슈를 기다리는 6개까지의 펜딩 명령어들(pending instructions)에 대한 명령어 정보(즉, 명령어 제어 값들 뿐만 아니라 오퍼런드 값, 오퍼런드 태그, 및/또는 즉시 데이터)를 보유할 수 있다.
특정한 명령어의 디코드 시에, 만일 요구되는 오퍼런드가 레지스터 위치라면, 레지스터 어드레스 정보가 리오더 버퍼(32)와 레지스터 파일(30)로 동시에 라우팅된다. 당해 기술 분야의 통상의 기술자들이라면 x86 레지스터 파일이 8개의 32 비트 리얼 레지스터들(real registers)(즉, 전형적으로 EAX, EBX, ECX, EDX, EBP, ESI, EDI, ESP로 지칭됨)을 포함한다는 것을 인지할 것이다. IA-32 아키텍처로도 또한 지칭되는 x86 프로세서 아키텍처를 채용하는 프로세서(10)의 실시예들에서, 레지스터 파일(30)은 32 비트 리얼 레지스터들 각각을 위한 저장 위치들을 포함한다. MROM 유닛(34)에 의한 용도로 추가적인 저장 위치들이 레지스터 파일(30) 내에 포함될 수도 있다.
앞서 지적된 바와 같이, 레저베이션 스테이션(22)은 명령어들이 해당 기능 유닛(124a, 124b, 또는 124c)에 의해 실행될 때까지 명령어들을 저장한다. 만일 (i) 한 명령어의 오퍼런드들이 제공되었고, (ⅱ) 동일한 레저베이션 스테이션(22) 내에 있고 프로그램 순서에 있어서 상기 명령어의 앞에 있는 명령어들에 대해 오퍼런드들이 아직 제공되지 않았다면, 상기 명령어가 실행을 위해 선택된다. 유의할 점은 명령어가 기능 유닛(24) 내에 있는 유닛들 중 하나에 의해 실행될 때, 그 명령어의 결과는 리오더 버퍼(32)를 업데이트하도록 건네지는 것과 동시에 그 결과를 기다리고 있는 임의의 레저베이션 스테이션(22)으로 직접 건네진다(이 기법은 보통 "결과 포워딩(result forwading)"으로 지칭된다). 관련 결과가 포워딩되는 클록 사이클 동안에 한 명령어가 실행을 위해 선택될 수도 있고 기능 유닛(24)으로 건네질 수도 있다. 이 경우에 레저베이션 스테이션(22)은 포워딩된 결과를 기능 유닛으로 라우팅한다. 명령어들이 기능 유닛(24)에 의해 실행되는 복수의 연산들로 디코드될 수도 있는 실시예들에서, 상기 연산들은 서로에 대해 별도로 스케줄링(scehdule)될 수도 있다.
한 실시예에서, 정수 유닛들(124a, 124b) 각각은 덧셈 및 뺄셈의 정수 산술 연산들 뿐만 아니라 시프트(shift), 로테이트(rotate), 논리 연산들 및 브랜치 연산들을 수행하도록 구성된다. 연산들은 특정한 명령어에 대해 디코드 유닛(20)에 의해 디코드된 제어 값들에 응답하여 수행된다. 유의할 점은 부동 소수점 연산들을 수행하기 위해 FPU(124c)도 또한 채용될 수도 있다는 것이다. 따라서, FPU(124c)는 부동 소수점 곱셈기 덧셈기(floating point multiplier adder, FMA) 유닛(125)을 포함한다. FPU(124c)는 MROM 유닛(34)이나 리오더 버퍼(32)로부터 명령어들을 수신하고 후속으로 그 명령어들을 완료하기 위해 리오더 버퍼(32)와 통신하는 코프로세서(coprocessor)로서 동작될 수도 있다. 게다가, 정수 유닛들(124a, 124b)은 로드/스토어 유닛(26)에 의해 수행되는 로드 및 스토어 메모리 연산들을 위한 어드레스 발생을 수행하도록 구성될 수도 있다. 한 특정한 실시예에서, 정수 유닛들(124a, 124b)은 어드레스들을 발생시키기 위한 어드레스 발생 유닛(address generation unit)과 나머지 기능들을 수행하기 위한 실행 유닛(execution unit)을 포함할 수도 있다. 상기 2개의 유닛들은 한 클록 사이클 동안에 서로 다른 명령어들이나 연산들에 대해 독립적으로 동작할 수도 있다.
아래에서 더욱 상세히 설명되는 바와 같이, 한 실시예에서, FPU(124c)는 FMA 유닛(125)을 포함하며, 이 유닛은 부동 소수점 연산을 하는 동안에 종래의 부동 소수점 유닛들보다 더 빨리 오버시프트(overshift)를 검출할 수도 있는 정렬 시프트기 제어 로직(alignment shifter control logic)(210)을 포함할 수도 있다. 더욱 상세하게는, 한 실시예에서, 정렬 시프트기 제어 로직(210)은 또 다른 가수(addend)나 2개의 수들의 곱에 더해질 가수에 대한 오버시프트 값을 계산한 다음, 그 계산된 값을 선택된 오버시프트 문턱값(overshift threshold value)과 비교함으로써 오버시프트를 검출할 수도 있다. 다양한 실시예들에서, 선택된 오버시프트 문턱값은 최소 오버시프트 문턱값과 최대 오버시프트 문턱값을 포함하는 오버시프트 값들의 범위에 있는 이진수(base 2 number)이며, 이 수는 최하위 비트(least significant bit)에서 시작하여 최대 개수의 연속되는 제로(0) 비트들을 가진다. 이 선택된 오버시프트 값은 FMA 유닛(125)의 임계 타이밍 경로들 중 하나에서 가장 적은 개수의 게이트 지연들로 오버시프트 검출 논리 회로를 구현하여야 한다.
로드/스토어 유닛(26)은 기능 유닛(24)과 데이터 캐쉬(28) 사이의 인터페이스를 제공한다. 한 실시예에서, 로드/스토어 유닛(26)은 데이터 캐쉬(28)를 액세스하지 않은 펜딩 로드들이나 스토어들을 위한 데이터 및 어드레스 정보의 저장 위치들을 가지는 로드/스토어 버퍼와, 데이터 캐쉬(28)를 액세스한 로드들과 스토어들을 위한 데이터 및 어드레스 정보의 저장 위치들을 가지는 또 다른 로드/스토어 버퍼로 구성될 수도 있다.
데이터 캐쉬(28)는 로드/스토어 유닛(26)과 메인 메모리 서브시스템(main memory subsystem) 사이에 전송되고 있는 데이터를 임시적으로 저장하기 위해 제공되는 고속 캐쉬 메모리이다. 한 실시예에서, 데이터 캐쉬(28)는 세트 연관 구조일 수도 있다. 데이터 캐쉬(28)는 세트 연관 구성, 완전 연관 구성, 직접-사상 구성, 및 임의의 적합한 크기 또는 다른 구성을 포함하여 다양한 특정 메모리 구성들로 구현될 수도 있다는 것이 이해된다.
x86 프로세서 아키텍처를 채용하는 프로세서(10)의 한 특정 실시예에서, 명령어 캐쉬(16)와 데이터 캐쉬(28)는 선형으로 어드레스(linearly addressed)되고 물리적으로 태그(physically tagged)된다. 선형 어드레스는 명령어에 의해 특정되는 옵셋(offset)과, x86 어드레스 변환 메카니즘(address translation mechanism)의 세그먼트 부분(segment portion)에 의해 특정되는 베이스 어드레스(base address)로부터 형성된다. 선형 어드레스는 선택사항으로서 메인 메모리를 액세스하기 위한 물리적 어드레스로 변환될 수도 있다. 선형에서 물리적으로의 변환은 x86 어드레스 변환 메카니즘의 페이징 부분(paging portion)에 의해 특정된다. 물리적 어드레스는 히트/미스(hit/miss) 상태를 판별하기 위해 물리적 태그들과 비교된다.
버스 인터페이스 유닛(37)은 시스템 버스를 통해 프로세서(10)와 컴퓨터 시스템의 다른 컴포넌트들 사이에 통신하도록 구성될 수도 있다. 예를 들면, 버스는 Digital Equipment Corporation에 의해 개발된 EV-6 버스와 호환될 수도 있다. 대체가능한 것으로, 패킷-기반의 단방향이나 양방향 링크들 등을 포함하여 임의의 적합한 상호 연결 구조(interconnect structure)가 사용될 수도 있다. 버스 인터페이스 유닛(37)은 또한 L2 캐쉬(39)와 통신할 수도 있다.
한 구현예에서, L2 캐쉬(39)는 명령어와 데이터를 모두 저장하는 제2 레벨 캐쉬일 수도 있다. 예를 들면, L2 캐쉬(39)는 크기(size)에 있어서 256 킬로바이트, 512 킬로바이트, 또는 1 메가바이트일 수도 있다. 다른 실시예들은 더 작거나 또는 더 큰 크기를 사용할 수도 있다. L2 캐쉬(39)는 직접 사상이나 세트 연관 구성을 채용할 수도 있다.
유의할 점은 비록 도 1의 프로세서(10)가 x86 아키텍처로 구현되는 프로세서인 것으로 설명되지만, 다른 실시예들에서 프로세서(10)는 임의의 다른 아키텍처로 구현될 수도 있다는 것이 고려되어 진다는 것이다. 게다가, 프로세서(10)는 다중코어 프로세서(multicore processor)의 일부로서, 또는 주문형 반도체(application specific integrated circuit, ASIC) 내의 내장 프로세서(embedded processor) 등으로서 구현될 수도 있다.
도 2를 보면, 도 1의 FMA 유닛(125)의 한 실시예의 일부분에 대한 블록도가 도시되어 있다. 유의할 점은 간결함을 위해 다양한 컴포넌트들이 생략되었고 논의와 밀접한 관련이 있는 FMA 유닛(125)의 단지 일부분들만이 도 2에 도시되어 있다는 것이다. 비록 다른 실시예들에서는 파이프라인이 아닌 설계가 구현될 수도 있다는 것이 고려되지만, 예시된 실시예에서, FMA(125)는 측면 표제들 FX1 내지 FX6에 의해 표시된 바와 같이 파이프라인 유닛으로 도시되어 있다. 또한 유의할 점은 FMA(125)의 도시된 부분에 제공되는 데이터 경로(datapath)는 노말(normal)한 경우들을 처리하도록 구성된다는 것이다. 즉, 가수(addend)의 가수부(mantissa)의 MSB가 항상 논리값 1인 경우들을 말한다. 사실, 가수의 가수부가 모두 제로(zero)인 경우 뿐만 아니라 가수의 가수부의 MSB가 제로인 디노말(denormal)한 경우들은 하나 이상의 서로 다른 데이터 경로들과 해당 회로들에 의해 처리된다.
도시된 바와 같이, FMA(125)는 들어오는 가수 'C'와 피승수(multiplicand)들 'A'와 'B'를 저장하기 위한 다수의 레지스터들을 포함한다. 더욱 상세하게는, 'A', 'B', 'C'의 지수부(exponent)들은 지수부(201)로 지정된 레지스터 내에 저장될 수도 있는 반면, 가수 'C'와 피승수들 'A'와 'B'의 가수부들은 각각 64-비트 값들로서 레지스터들(202, 203, 204) 내에 저장될 수도 있다. 게다가, 지수부 레지스터(201)는 지수부 덧셈기와 정렬 시프트기 제어 유닛(210)에 연결될 뿐만 아니라 다음 파이프라인 스테이지 FX2의 제2 지수부 레지스터(212)에 연결된다. 지수부 레지스터(212)는 그 다음 파이프라인 스테이지 FX3의 지수부 레지스터(214)에 연결되며, 이는 다중화기(multiplexer, mux)(218)에 연결된다. 다중화기(218)의 출력은 지수부 감량기(exponent decrementer)(219), 지수부 증분기(exponent incrementer)(220), 및 다중화기(221)의 한 입력에 연결된다. 지수부 감량기(219)와 지수부 증분기(220)의 출력들은 각각 다중화기(221)의 다른 입력들에 연결된다. 다중화기(221)의 출력은 파이프라인 스테이지 FX5의 처음에 있는 지수부 레지스터(225)에 연결된다. 지수부 레지스터(225)의 출력은 파이프라인 스테이지 FX6에 있는 정규화 및 반올림 유닛(normalization and rounding unit)(250) 내에서 합의 최종 계산에 사용될 수도 있으며, 이 스테이지는 최종 결과를 생성하고 그 결과를 결과 레지스터(result register)(255)에 저장한다. 정규화 및 반올림 유닛(250)은 또한 임의의 예외들 및/또는 상태 비트들을 예외/상태 레지스터(exceptions/status register)(260) 내에 저장할 수도 있다.
다시 스테이지 FX1을 보면, 가수부 레지스터(mantissa register)(203)의 출력은 부스 인코더(booth encoder)(206)에 연결되며, 부스 인코더(206)는 곱셈기(208)의 부분 곱(partial products) 부분(207)의 한 입력에 연결된다. 가수부 레지스터(204)의 출력은 곱셈기(208)의 부분 곱 부분(207)의 다른 입력에 연결된다. 곱셈기(208)의 출력은 캐리 저장 덧셈기(carry save adder, CSA)(213)에 연결된다.
정렬 시프트기 제어(210)의 출력은 리딩 제로 예측기 유닛(leading zero anticipator unit)(223)을 사용하기 위한 "Lza 사용(Use Lza)"으로 지정된 표시(211)를 제공하도록 연결된다. 정렬 시프트기 제어(210)의 출력은 또한 오른쪽 시프트기 유닛(right shifter unit)(209)에 연결되고, 오른쪽 시프트기 유닛(209)은 다시 CSA(213)와 정렬 레지스터(215)에 연결되며, 정렬 레지스터(215)는 정렬되고 시프트된 가수 'C'를 보유하도록 구성될 수도 있다. 정렬 레지스터(215)의 출력은 증분기(222)에 연결되고 이는 194-비트 합 레지스터(sum register)(227)에 연결되며, 그 출력은 정규화 및 반올림 유닛(250)에 연결된다.
다시 스테이지 FX3를 보면, CSA(213)의 출력은 합 레지스터(216)와 캐리 레지스터(carry register)(217)에 연결되며, 둘은 모두 다시 리딩 제로 예측기(223)와 캐리 전파 덧셈기(carry propagate adder)(224)에 연결된다. 리딩 제로 예측기(223)의 출력은 정규화 제어 레지스터(normalization control register)(226)에 연결되는 반면, 캐리 전파 덧셈기(224)의 출력은 합 레지스터(227)에 연결된다.
위에서 언급된 바와 같이, 연산 중에, 'A'와 'B'의 곱(즉, 곱의 값)의 지수부들의 값과 가수 'C'의 지수부의 값에 따라, 곱의 값과 가수의 값의 지수부들이 후속 덧셈 연산에 대해 동일하도록 가수 'C'(즉, 가수의 값)의 가수부가 시프트될 필요가 있을 수도 있다. 이에 따라, 정렬 시프트기 제어(210)는 적절한 시프트 값을 계산하여 그것을 오른쪽 시프트기(209)로 제공할 수도 있다. 게다가, 도 3 및 도 4의 설명과 결합하여 아래에서 더욱 상세히 설명되는 바와 같이, 정렬 시프트기 제어(210)는 계산된 시프트 값이 언더시프트(undershift)를 발생시킬지 아니면 오버시프트를 발생시킬지 여부를 판별할 수도 있다. 나아가, 만일 오버시프트가 발생했다고 정렬 시프트기 제어(210)가 판별한다면, 정렬 시프트기 제어(210)는 스티키 비트(sticky bit)가 셋(set)되게 할 수도 있다.
도 3은 다수의 가변 길이의 가수 시프트들을 도시한 도면이다. 도 2 및 도 3을 총괄적으로 참조하면, 도 2에 도시된 실시예는 64-비트 가수부 값들을 지원한다. 이에 따라, 그 곱은 128 비트일 것이다. 도 3에 도시된 바와 같이, 곱의 왼쪽에 있는 66 비트들은 증분 영역(increment region)으로 지칭되는데, 이는 가수와 곱이 합계될 때 그 영역의 비트들에 대한 영향은 기껏해야 한 자리(one unit)를 더하는 것이기 때문이다. 곱의 오른쪽에 있는 63 비트들은 스티키 영역(sticky region)으로 지칭된다. 스티키 영역은 만일 가수가 쉬프트되어서 임의의 가수 비트들이 스티키 영역과 오버랩(overlap)된다면, 그 비트들은 반올림 연산들에서 사용될 수도 있는 스티키 비트(sticky bit)를 발생시키도록 함께 논리적으로 OR되는 영역을 가리킨다. 스티키 영역의 폭은 가수부 폭(Mw)에서 1을 뺀 것으로 정의될 수도 있다.
위에서 설명된 바와 같이, 가수를 곱에 더하기 전에, 가수는 곱의 지수부 및 가수의 지수부가 동일하도록 시프트되어야 할 수도 있다. 실제로, 시프트 양은 시프트되는 가수의 적어도 하나의 비트가 곱의 왼쪽으로(더 상위로) 정렬된 가수들을 위한 가드 밴딩(guard banding)으로서 필요한 몇 개의 비트들 및 곱과 오버랩되는 경우의 시프트들로 국한될 수도 있다. 이 예시적인 실시예에서, 가드 비트들(guard bits, Gb)은 2개로 선택된다.
이에 따라, 64-비트 가수를 128-비트 곱(예컨대, 2개의 64-비트 가수부 피승수들)에 더할 때, 제로(0) 시프트는 도 3의 가수(302)에 의해 도시된 바와 같이 그 가수의 비트들이 126:63의 범위에 있도록 할 것이다. 왼쪽 시프트되는 가수는 67-비트 시프트로 제한될 것이며, 따라서 가수의 LSB와 곱의 MSB 사이에 2개의 가드 비트들이 존재한다. 그 밖에, 도 3의 언더시프트 가수(301)에 의해 도시된 바와 같이 가수 비트들이 곱의 비트들과 전혀 정렬되지 않는 정도로 언더시프트 상태가 존재할 것이다. 실제로, 단지 하나의 방향으로만 시프트하는 것이 더 간단한 것으로 여겨진다. 언더시프트가 제로 시프트로 인코드되고 시프트기가 항상 오른쪽으로 시프트하도록 시프트 양을 바이어스(bias)하기 위해 상수가 더해질 수도 있다. 예를 들면, 가수의 지수부가 곱의 지수부와 동일한 경우에, 가수(302)는 67만큼 오른쪽 시프트가 될 것이다. 이후 시프트 양에 관한 모든 참조는 이런 바이어스된 표현을 가리킨다.
2Mw+Gb보다 많이 오른쪽으로 시프트되었지만 시프트 경계(shift boundary) 내에 있는 가수가 시프트된 가수(303)에 의해 도시되어 있으며, 이 경우 시프트된 가수(303)의 일부 비트들은 곱의 안에 있고 일부는 스티키 영역 안에 있다. 예를 들면, 시프트 경계는 3Mw+Gb-1로서 정의될 수도 있다. 이 시프트 경계는 예시적인 데이터 경로에 대해서는 193이며, 이러한 시프트는 가수의 MSB가 곱의 LSB와 정렬될 수 있게 할 것이기 때문에 최대 오른쪽 시프트이다. 유의할 점은 스티키 영역은 이 최대 오른쪽 시프트에 대하여 곱의 LSB 아래의 모든 가수부 비트들이 스티키에 포함되도록 적어도 Mw-1 비트들을 포함하여야 한다. 그 최대치보다 더 큰 오른쪽 시프트는 오버시프트로 여겨진다. 가수의 MSB는 항상 1이기 때문에, 임의의 오버시프트는 스티키가 셋되도록 만든다.
하지만, 이 구현예에서는 가수의 MSB가 항상 1이기 때문에, 그리고 제로들과 디노말한 것들은 서로 다른 데이터 경로로 처리되기 때문에, 가수의 MSB가 스티키 영역에 놓이게 하는 시프트 값들은 오버시프트 표시에 관계없이 스티키 비트를 정확히 셋할 것이며, 이는 가수의 MSB가 노말한 스티키 로직이 스티키 표시를 셋하도록 만들 것이기 때문이다. 이에 따라, 정확한 경계(최대 오른쪽 시프트보다 더 큰 시프트 양)에서 오버시프트를 계산하는 것이 아니라, 최소 및 최대 오버시프트 문턱값 사이의 임의의 곳에서 선택되는 오버시프트 문턱값을 사용하는 오버시프트 검출 회로가 만들어질 수도 있다. 최소 오버시프트 문턱값은 시프트기 폭으로서 표현될 수도 있고, 이는 이 부동 소수점 곱셈 구현예에서는 Gb+3Mw이다. 최대 오버시프트 문턱값은 4Mw+Gb-2 이거나, 또는 Gb=2에 대하여 단순히 4(Mw)이다. 유의할 점은 순수한 덧셈기에서 최소 오버시프트 문턱값은 Gb+2Mw로서 표현될 수도 있고, 최대 오버시프트 문턱값은 3Mw+Gb-2일 것이라는 것이다. 도 3의 64-비트 FMA 구현예에서, 최소 및 최대 오버시프트 문턱값은 각각 194와 256이다.
예시된 실시예에서, 오버시프트 문턱값은 오버시프트 가수(305)에 의해 도시된 바와 같이 256 이상으로 선택되는데, 이는 아래에서 더 설명되는 바와 같이 오버시프트 검출을 구현하는 로직이 더 적은 로직 레벨들과 따라서 더 적은 게이트 지연들을 가질 수도 있기 때문이다. 도시된 바와 같이 이러한 오버시프트 상태가 존재할 때, 스티키 영역에서 논리적으로 OR하도록 남겨진 가수 비트들이 존재하지 않기 때문에 스티키 비트는 강제로 셋된다.
도 4를 보면, 도 3에 도시된 시프트에 의거하여 오버시프트 검출 로직의 간략화한 구현예를 도시한 도면이 도시되어 있다. 위에서 설명된 바와 같이, 오른쪽 시프트 양(즉, 시프트 값)은 도시된 바와 같이 계산될 수도 있다. 예시된 실시예에서, 지수부들은 18-비트 부호없는 수(unsigned numbers)(예컨대, ExpA[17:0])로서 표현되지만, 시프트 값은 음수인 언더시프트 값들을 고려하므로, 시프트기는 추가적인 부호 비트(sign bit) S[18]을 포함한다. 오버시프트를 검출하기 위해, 검출 로직은 시프트 양을 오버시프트 문턱값과 비교한다. 종래의 시스템에서는, 오버시스트 문턱값이 >=194 이었다. 본 실시예에서, 오버시프트 문턱값은 >=256 이다. 도 4에 도시된 바는 오버시프트(410)에 의해 도시된 바와 같이 >=194인 시프트 값을 검출하기 위해 그리고 오버시프트(425)에 의해 도시된 바와 같이 >=256인 시프트 값을 검출하기 위해 검사되어야 하는 비트들을 예시한 것이다.
예를 들면, 2개의 수들 X와 Y가 도시된 바와 같이 정의된다. X 값은 만일 그 부호 비트가 논리값 0이었고 비트들 [17:8] 중 임의의 것이 논리값 1이었다면 참(true)으로 평가될 것이다. Y 값은 만일 부호 비트가 논리값 0이었고 비트 7과 비트 6이 모두 논리값 1이었고 비트들 [5:1] 중 적어도 하나가 논리값 1이었다면 참으로 평가될 것이다. 이에 따라, >=194의 오버시프트 상태를 검출하기 위해, X와 Y의 논리적 OR 연산이 실현되어야 한다. 하지만, >=256의 오버시프트 상태를 검출하기 위해, 단지 수 X만이 실현되면 된다. 따라서, >=256을 검출하기 위해 더 적은 비트들이 비교될 수도 있고 그것들을 비교할 로직은 더 적은 개수의 로직 레벨들과 따라서 더 적은 개수의 타이밍 경로 지연들을 가진다.
또 다른 예로서, 24-비트 데이터 경로를 지원하며 따라서 24-비트 가수부와 2개의 가드 밴드 비트들을 지원하는 시스템에서, 오버시프트 문턱값은 74 내지 96의 범위에서 선택될 수도 있는데, 74라는 수는 Gb+3Mw(예컨대, 2+3(24))로부터 산출되고 96이라는 수는 4Mw(예컨대, 4(24))로부터 산출된다. 이에 따라, 위의 기법을 이용하는 구현예에서, 오버시프트 문턱값을 >=96으로 선택하는 것이 가장 적은 로직 레벨들을 산출하고 따라서 오버시프트 검출 타이밍 경로에서 가장 작은 개수의 게이트 지연들을 산출할 수도 있다.
반대로, 53-비트 데이터 경로가 사용되는 또 다른 예에서, 최대 오버시프트 문턱값은 최적의 선택이 아닐 수도 있다. 이 예에서, 오버시프트 문턱값은 >=161과 >=212 일 것이다. 이 예에서, 오버시프트 값 212는 최적의 로직 레벨의 구현을 제공하지 않는다. 사실, LSB에서 시작하여 1을 갖는 첫 번째 비트 위치를 향해 왼쪽으로 이동할 때 192가 비트 위치들에서 더 많은 연속적인 제로들을 가지기 때문에, 그 범위의 다른 선택에 비해 >=192가 오버시프트 검출 로직의 임계 타이밍 경로에서 가장 적은 게이트 지연들을 제공할 것이다.
따라서, 최소 및 최대 오버시프트 문턱값들 사이에 있고 그 값의 LSB에서 시작하여 가장 많은 개수의 연속적인 제로 비트들을 가지는 오버시프트 문턱값이 선택될 수도 있다. 더욱 상세하게는, 최소 및 최대 오버시프트 문턱값들로서 161과 212를 이용하는 위의 예에서, 212d는 11010100b에 해당하는 반면, 192d는 11000000b에 해당한다.
유의할 점은 비록 위의 실시예들이 곱셈기 덧셈기의 맥락에서 설명되었지만, 다른 실시예들에서 상기 오버시프트 검출 로직은 임의의 부동 소수점 덧셈기에서 구현될 수도 있는 것도 고려된다는 것이다. 이러한 실시예들에서, 곱과 가수 대신에 2개의 가수들이 존재할 것이고, 위에서 언급된 바와 같이, 시프트기 폭은 Gb+2(Mw)일 것이며, 최대 오버시프트 문턱값은 3(Mw)일 것이다.
또한 유의할 점은 위에서 설명된 부동 소수점 유닛은 부동 소수점 기능들을 수행할 수 있는 임의의 유형의 처리 유닛으로 구현될 수도 있다는 것이다.
비록 위에서 실시예들이 상당히 상세히 설명되었지만, 일단 위의 개시가 완전히 인지된다면 수많은 변형과 수정들이 당해 기술분야의 통상의 기술자들에게 자명하게 될 것이다. 다음의 특허청구범위는 이러한 모든 변형과 수정들을 포함하는 것으로 해석되도록 의도하는 바이다.

Claims (20)

  1. 제1 지수부(exponent) 및 제1 가수부(mantissa)를 가지는 제1 부동 소수점 수(floating point number)와, 제2 지수부 및 제2 가수부를 가지는 제2 부동 소수점 수 사이에 부동 소수점 덧셈 연산(addition operation)을 수행하도록 구성되는 부동 소수점 덧셈기(floating point adder)와;
    상기 부동 소수점 덧셈기에 접속되며 그리고 상기 제2 지수부의 값이 상기 제1 지수부의 값과 같아지도록 상기 제2 가수부를 시프트시키는 시프트 유닛과; 그리고
    상기 시프트 유닛에 접속되며 그리고 상기 제2 가수부를 시프트할 비트 위치들의 개수에 해당하는 시프트 값을 계산하도록 구성되는 정렬 시프트기(alignment shifter)
    를 포함하며,
    상기 정렬 시프트기는 상기 시프트 값이 선택된 오버시프트 문턱값보다 크거나 같은 경우인 오버시프트 상태(overshift condition)를 검출하도록 구성되고,
    상기 정렬 시프트기는 또한 상기 오버시프트 상태를 검출하는 것에 응답하여 오버시프트 표시(overshift indication)를 제공하도록 구성되며, 그리고
    상기 선택된 오버시프트 문턱값은 최소 오버시프트 문턱값과 최대 오버시프트 문턱값을 포함하는 오버시프트 값들의 범위에 있는 이진수(base 2 number)를 포함하고, 이 수는 최하위 비트(least significant bit)에서 시작하여 최대 개수의 연속되는 제로(zero) 비트들을 가지는 것인
    부동 소수점 유닛.
  2. 제1항에 있어서,
    상기 정렬 시프트기는 상기 시프트 값에 의해 표시되는 상기 비트 위치들의 개수만큼 상기 제2 가수부를 오른쪽으로 시프트하도록 구성되는
    부동 소수점 유닛.
  3. 제1항에 있어서,
    상기 최소 오버시프트 문턱값은 상기 제2 가수부의 MSB가 상기 제1 가수부의 LSB의 오른쪽에 있도록 상기 제2 가수부가 오른쪽으로 시프트되는 것으로부터 발생하는 시프트 값에 해당하고, 이 값은 상기 제1 가수부의 데이터 경로의 비트들의 개수의 2배에 가드 밴드(guard band) 비트들의 개수를 더한 것에 해당하는
    부동 소수점 유닛.
  4. 제1항에 있어서,
    상기 제1 가수부의 최하위 비트(LSB)의 오른쪽에 있는 다수의 비트들은 스티키 영역(sticky region)에 해당하며, 상기 스티키 영역은 상기 제1 가수부의 데이터 경로의 비트들의 개수보다 1개 적은 개수의 비트들을 포함하는
    부동 소수점 유닛.
  5. 제4항에 있어서,
    상기 제2 가수부가 오른쪽으로 시프트되는 것에 응답하여 상기 제1 가수부의 LSB의 오른쪽에 있는 상기 제2 가수부의 LSB들 모두는 스티키 비트(sticky bit)를 발생시키도록 함께 논리적으로 OR되는
    부동 소수점 유닛.
  6. 제5항에 있어서,
    상기 정렬 시프트기는 또한 상기 오버시프트 상태를 검출하는 것에 응답하여 상기 스티키 비트가 셋(set)되게 하도록 구성되는
    부동 소수점 유닛.
  7. 제5항에 있어서,
    상기 최대 오버시프트 문턱값은 상기 제2 가수부의 MSB가 상기 스티키 영역의 LSB와 정렬되도록 상기 제2 가수부가 오른쪽으로 시프트되는 것으로부터 발생하는 시프트 값에 해당하는
    부동 소수점 유닛.
  8. 제1항에 있어서,
    곱의 값(product value)을 생성하도록 제3 부동 소수점 수를 제4 부동 소수점 수로 곱하고, 상기 곱의 값에 제5 부동 소수점 수를 더하도록 구성되는 부동 소수점 곱셈기/덧셈기(floating point multiplier/adder)를 더 포함하며, 상기 곱의 값은 곱의 지수부 및 곱의 가수부를 포함하고, 상기 제5 부동 소수점 수는 제3 지수부 값 및 제3 가수부를 포함하는
    부동 소수점 유닛.
  9. 제8항에 있어서,
    상기 정렬 시프트기는 또한 상기 제3 지수부 값이 상기 곱의 지수부 값과 동일하도록 상기 제3 가수부를 시프트할 비트 위치들의 개수에 해당하는 제2 시프트 값을 계산하도록 구성되는
    부동 소수점 유닛.
  10. 제9항에 있어서,
    상기 최소 오버시프트 문턱값은 상기 제3 가수부의 데이터 경로의 비트들의 개수의 3배에 가드 밴드 비트들의 개수를 더한 것에 해당하는
    부동 소수점 유닛.
  11. 제9항에 있어서,
    상기 곱의 가수부의 최하위 비트(LSB)의 오른쪽에 있는 다수의 비트들은 스티키 영역에 해당하며, 상기 스티키 영역은 상기 제3 가수부의 데이터 경로의 비트들의 개수보다 1개 적은 개수의 비트들을 포함하는
    부동 소수점 유닛.
  12. 제11항에 있어서,
    상기 제3 가수부가 오른쪽으로 시프트되는 것에 응답하여 상기 곱의 가수부의 LSB의 오른쪽에 있는 상기 제3 가수부의 LSB들 모두는 스티키 비트를 발생시키도록 함께 논리적으로 OR되는
    부동 소수점 유닛.
  13. 제11항에 있어서,
    상기 최대 오버시프트 문턱값은 상기 제3 가수부의 MSB가 상기 스티키 영역의 LSB와 정렬되도록 상기 제3 가수부가 오른쪽으로 시프트되는 것으로부터 발생하는 시프트 값에 해당하는
    부동 소수점 유닛.
  14. 제1항에 있어서,
    상기 선택된 오버시프트 문턱값은 상기 시프트 값과 상기 선택된 오버시프트 문턱값 사이의 비교를 위한 검출 임계 타이밍 경로(critical timing path)에 있어서 가장 적은 개수의 게이트 지연들을 가지는 논리 회로 구현에 해당하는
    부동 소수점 유닛.
  15. 부동 소수점 연산을 수행하도록 구성되는 부동 소수점 유닛을 포함하는 프로세서로서, 상기 부동 소수점 유닛은
    제1 지수부 및 제1 가수부를 가지는 제1 부동 소수점 수와, 제2 지수부 및 제2 가수부를 가지는 제2 부동 소수점 수 사이에 부동 소수점 덧셈 연산을 수행하도록 구성되는 부동 소수점 덧셈기와; 그리고
    상기 제2 지수부 값이 상기 제1 지수부 값과 동일하도록 상기 제2 가수부를 시프트할 비트 위치들의 개수에 해당하는 시프트 값을 계산하도록 구성되는 정렬 시프트기
    를 포함하며,
    상기 정렬 시프트기는 상기 시프트 값이 선택된 오버시프트 문턱값보다 크거나 같은 경우인 오버시프트 상태를 검출하도록 구성되고,
    상기 정렬 시프트기는 또한 상기 오버시프트 상태를 검출하는 것에 응답하여 오버시프트 표시를 제공하도록 구성되며, 그리고
    상기 선택된 오버시프트 문턱값은 최소 오버시프트 문턱값과 최대 오버시프트 문턱값을 포함하는 오버시프트 값들의 범위에 있는 이진수(base 2 number)를 포함하고, 이 수는 최하위 비트에서 시작하여 최대 개수의 연속되는 제로(zero) 비트들을 가지는 것인
    프로세서.
  16. 제15항에 있어서,
    상기 정렬 시프트기는 상기 시프트 값에 의해 표시되는 상기 비트 위치들의 개수만큼 상기 제2 가수부를 오른쪽으로 시프트하도록 구성되는
    프로세서.
  17. 제15항에 있어서,
    상기 최소 오버시프트 문턱값은 상기 제2 가수부의 MSB가 상기 제1 가수부의 LSB의 오른쪽에 있도록 상기 제2 가수부가 오른쪽으로 시프트되는 것으로부터 발생하는 시프트 값에 해당하고, 이 값은 상기 제1 가수부의 데이터 경로의 비트들의 개수의 2배에 가드 밴드 비트들의 개수를 더한 것에 해당하는
    프로세서.
  18. 제15항에 있어서,
    상기 제1 가수부의 최하위 비트(LSB)의 오른쪽에 있는 다수의 비트들은 스티키 영역에 해당하며, 상기 스티키 영역은 상기 제1 가수부의 데이터 경로의 비트들의 개수보다 1개 적은 개수의 비트들을 포함하는
    프로세서.
  19. 제18항에 있어서,
    상기 제2 가수부가 오른쪽으로 시프트되는 것에 응답하여 상기 제1 가수부의 LSB의 오른쪽에 있는 상기 제2 가수부의 LSB들 모두는 스티키 비트를 발생시키도록 함께 논리적으로 OR되는
    프로세서.
  20. 제19항에 있어서,
    상기 정렬 시프트기는 또한 상기 오버시프트 상태를 검출하는 것에 응답하여 상기 스티키 비트가 셋되게 하도록 구성되는
    프로세서.
KR1020117023161A 2009-03-16 2010-03-11 부동 소수점 유닛에서 오버시프트의 빠른 검출을 위한 메카니즘 KR101528340B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US12/404,426 US8402075B2 (en) 2009-03-16 2009-03-16 Mechanism for fast detection of overshift in a floating point unit of a processing device
US12/404,426 2009-03-16
PCT/US2010/026908 WO2010107650A1 (en) 2009-03-16 2010-03-11 Mechanism for fast detection of overshift in a floating point unit

Publications (2)

Publication Number Publication Date
KR20120003878A KR20120003878A (ko) 2012-01-11
KR101528340B1 true KR101528340B1 (ko) 2015-06-11

Family

ID=42104634

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020117023161A KR101528340B1 (ko) 2009-03-16 2010-03-11 부동 소수점 유닛에서 오버시프트의 빠른 검출을 위한 메카니즘

Country Status (6)

Country Link
US (1) US8402075B2 (ko)
EP (1) EP2409219B1 (ko)
JP (1) JP5719341B2 (ko)
KR (1) KR101528340B1 (ko)
CN (1) CN102349049B (ko)
WO (1) WO2010107650A1 (ko)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8694572B2 (en) * 2010-07-06 2014-04-08 Silminds, Llc, Egypt Decimal floating-point fused multiply-add unit
US9354875B2 (en) * 2012-12-27 2016-05-31 Intel Corporation Enhanced loop streaming detector to drive logic optimization
US20150193203A1 (en) * 2014-01-07 2015-07-09 Nvidia Corporation Efficiency in a fused floating-point multiply-add unit
US10402168B2 (en) * 2016-10-01 2019-09-03 Intel Corporation Low energy consumption mantissa multiplication for floating point multiply-add operations
US11200186B2 (en) 2018-06-30 2021-12-14 Intel Corporation Apparatuses, methods, and systems for operations in a configurable spatial accelerator
US11907713B2 (en) 2019-12-28 2024-02-20 Intel Corporation Apparatuses, methods, and systems for fused operations using sign modification in a processing element of a configurable spatial accelerator
JP7136478B2 (ja) 2020-03-13 2022-09-13 株式会社東海理機 ロータリバルブ

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR950029924A (ko) * 1994-04-29 1995-11-24 한탁돈 부동 소수점점 덧셈/뺄셈 연산기의 반올림 방법 및 장치
KR970016935A (ko) * 1995-09-29 1997-04-28 김광호 부동소숫점 덧셈기에서 스티키비트 검출방법
KR20020037278A (ko) * 2000-11-13 2002-05-18 가네꼬 히사시 축소된 회로 규모로 고정 소수점 데이터를 생성하는 회로및 방법

Family Cites Families (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5502401A (en) * 1995-04-26 1996-03-26 Texas Instruments Incorporated Controllable width or gate
US5757686A (en) * 1995-11-30 1998-05-26 Hewlett-Packard Company Method of decoupling the high order portion of the addend from the multiply result in an FMAC
JPH09204295A (ja) * 1996-01-29 1997-08-05 Kofu Nippon Denki Kk スティッキービット検出回路
US5771183A (en) * 1996-06-28 1998-06-23 Intel Corporation Apparatus and method for computation of sticky bit in a multi-stage shifter used for floating point arithmetic
US5796644A (en) * 1996-11-18 1998-08-18 Samsung Electronics Company, Ltd. Floating-point multiply-and-accumulate unit with classes for alignment and normalization
US6381624B1 (en) * 1999-04-29 2002-04-30 Hewlett-Packard Company Faster multiply/accumulator
DE10050589B4 (de) * 2000-02-18 2006-04-06 Hewlett-Packard Development Co., L.P., Houston Vorrichtung und Verfahren zur Verwendung beim Durchführen einer Gleitkomma-Multiplizier-Akkumulier-Operation
US6754688B2 (en) * 2001-02-14 2004-06-22 Intel Corporation Method and apparatus to calculate the difference of two numbers
US7080111B2 (en) * 2001-06-04 2006-07-18 Intel Corporation Floating point multiply accumulator
US7003539B1 (en) * 2001-08-08 2006-02-21 Pasternak Solutions Llc Efficiently determining a floor for a floating-point number
US6947962B2 (en) * 2002-01-24 2005-09-20 Intel Corporation Overflow prediction algorithm and logic for high speed arithmetic units
CN1265281C (zh) * 2002-07-29 2006-07-19 矽统科技股份有限公司 浮点数的对数运算方法和装置
US7290023B2 (en) * 2003-11-20 2007-10-30 International Business Machines Corporation High performance implementation of exponent adjustment in a floating point design
US8069200B2 (en) * 2005-04-28 2011-11-29 Qsigma, Inc. Apparatus and method for implementing floating point additive and shift operations
JP4571903B2 (ja) * 2005-12-02 2010-10-27 富士通株式会社 演算処理装置,情報処理装置,及び演算処理方法
JP4413198B2 (ja) * 2006-03-23 2010-02-10 富士通株式会社 浮動小数点データの総和演算処理方法及びコンピュータシステム
GB2447968B (en) * 2007-03-30 2010-07-07 Transitive Ltd Improvements in and relating to floating point operations
US8214417B2 (en) * 2008-08-14 2012-07-03 Oracle America, Inc. Subnormal number handling in floating point adder without detection of subnormal numbers before exponent subtraction

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR950029924A (ko) * 1994-04-29 1995-11-24 한탁돈 부동 소수점점 덧셈/뺄셈 연산기의 반올림 방법 및 장치
KR970016935A (ko) * 1995-09-29 1997-04-28 김광호 부동소숫점 덧셈기에서 스티키비트 검출방법
KR20020037278A (ko) * 2000-11-13 2002-05-18 가네꼬 히사시 축소된 회로 규모로 고정 소수점 데이터를 생성하는 회로및 방법

Also Published As

Publication number Publication date
US8402075B2 (en) 2013-03-19
CN102349049B (zh) 2014-07-23
EP2409219B1 (en) 2017-04-19
KR20120003878A (ko) 2012-01-11
JP5719341B2 (ja) 2015-05-20
JP2012521047A (ja) 2012-09-10
WO2010107650A1 (en) 2010-09-23
CN102349049A (zh) 2012-02-08
EP2409219A1 (en) 2012-01-25
US20100235416A1 (en) 2010-09-16

Similar Documents

Publication Publication Date Title
US6523050B1 (en) Integer to floating point conversion using one's complement with subsequent correction to eliminate two's complement in critical path
US7113969B1 (en) Formatting denormal numbers for processing in a pipelined floating point unit
US9798519B2 (en) Standard format intermediate result
US8447800B2 (en) Mode-based multiply-add recoding for denormal operands
US6490607B1 (en) Shared FP and SIMD 3D multiplier
US6397239B2 (en) Floating point addition pipeline including extreme value, comparison and accumulate functions
US8577948B2 (en) Split path multiply accumulate unit
US6415308B1 (en) Converting negative floating point numbers to integer notation without two's complement hardware
KR100239029B1 (ko) 가산기와 함께 사용하기 위한 결과 정규화기 및 결과 정규화 방법과 그를 포함하는 데이터 프로세서
KR101528340B1 (ko) 부동 소수점 유닛에서 오버시프트의 빠른 검출을 위한 메카니즘
US20070050434A1 (en) Data processing apparatus and method for normalizing a data value
US20050223055A1 (en) Method and apparatus to correct leading one prediction
Boersma et al. The POWER7 binary floating-point unit
US6405232B1 (en) Leading bit prediction with in-parallel correction
US5764549A (en) Fast floating point result alignment apparatus
KR100307980B1 (ko) 산술 또는 논리 연산의 수행과 동시에 조건 코드 비트를 발생하는 방법 및 시스템
US6965906B1 (en) Converting negative floating point numbers to integer notation without two's complement hardware
US6721772B1 (en) Rounding denormalized numbers in a pipelined floating point unit without pipeline stalls
EP0837390A1 (en) Improvements in or relating to microprocessor integrated circuits

Legal Events

Date Code Title Description
A201 Request for examination
A302 Request for accelerated examination
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20180516

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20190515

Year of fee payment: 5