KR100528269B1 - 부동소수점하드웨어를사용하여마이크로프로세서정수나눗셈연산들을실행하기위한방법및장치 - Google Patents

부동소수점하드웨어를사용하여마이크로프로세서정수나눗셈연산들을실행하기위한방법및장치 Download PDF

Info

Publication number
KR100528269B1
KR100528269B1 KR1019970036389A KR19970036389A KR100528269B1 KR 100528269 B1 KR100528269 B1 KR 100528269B1 KR 1019970036389 A KR1019970036389 A KR 1019970036389A KR 19970036389 A KR19970036389 A KR 19970036389A KR 100528269 B1 KR100528269 B1 KR 100528269B1
Authority
KR
South Korea
Prior art keywords
integer
floating point
approximation
molecule
denominator
Prior art date
Application number
KR1019970036389A
Other languages
English (en)
Other versions
KR980010751A (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 KR980010751A publication Critical patent/KR980010751A/ko
Application granted granted Critical
Publication of KR100528269B1 publication Critical patent/KR100528269B1/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/52Multiplying; Dividing
    • G06F7/535Dividing only
    • 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/3808Details concerning the type of numbers or the way they are handled
    • G06F2207/3812Devices capable of handling different types of numbers
    • G06F2207/3824Accepting both fixed-point and floating-point numbers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/499Denomination or exception handling, e.g. rounding or overflow
    • G06F7/49942Significance control
    • G06F7/49947Rounding

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Computing Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Complex Calculations (AREA)

Abstract

공통 정수 분모에 의해 나누어지는 정수 분자들의 다수의 정수 몫들을 효과적으로 생성하는 방법 및 장치는 정수 분모의 역수의 부동 소수점 근사값에 분자들의 부동 소수점 표현들을 곱하고, 필요에 따라 라운드 업 또는 다운하기 전에 부동 소수점 몫들을 바이어스 함으로써 달성된다. 먼저, 분모의 역수의 초기 근사값은 제약된 정밀도의 역수의 제곱근(112)을 제곱함으로써(114) 계산된다(102). 최종 역수는 유한 멱급수(104)를 사용하여 계산된다. 최종적으로, 수정된 분자들은 원래의 분자들을 바이어스 함으로써 형성되고(106), 역수배 곱해진 수정된 분자들의 곱들이 계산되며, 곱들은 필요에 따라 라운드 업 또는 다운된다(108).

Description

부동 소수점 하드웨어를 사용하여 마이크로프로세서 정수 나눗셈 연산들을 실행하기 위한 방법 및 장치
발명의 분야
본 발명은 일반적으로 마이크로프로세서 나눗셈에 관한 것으로, 특히 부동 소수점 덧셈 및 곱셈 연산들을 수행할 수 있는 하드웨어 부동 소수점 리소스들을 사용하여 정수 나눗셈 결과들을 생성시키기 위한 방법 및 장치에 관한 것이다.
발명의 배경
현대 컴퓨팅 산업에서, 컴퓨터 시스템 내의 중앙 처리 장치(CPU)를 사용하여 정수 나눗셈 연산들을 실행해야 할 필요성이 증가하고 있다. 정수 분자를 정수 분모로 나누는 것을 포함하는 정수 나눗셈 연산들은 많은 응용들에 사용된다. 통상적으로, 정수 나눗셈은 인터넷 상에서 사용하기 위한 MPEG 시퀀스들 또는 JPEG 이미지들을 포함하는 계산들에 사용된다. 정수 나눗셈은 컴퓨터 그래픽스 프로세싱, 다양한 플로팅(plotting) 알고리즘들, 3D 스크린 디스플레이들, 그래픽 유저 인터페이스들(GUIs), 및 정수 나눗셈을 이용한 스케일링(scaling) 및/또는 압축을 필요로 하는 다른 응용들에 사용된다. 선형 대수학 및 행렬 계산들에 따른 멀티미디어 응용들은 정수 나눗셈의 사용을 필요로 한다. 비디오 프로세싱, 정수 선형 프로그래밍, 다중 정밀도 산술 및 유클리드 GCD(greatest common denominator) 알고리즘의 사용은 또한 상당한 수의 정수 나눗셈들을 필요로 한다. 그러므로, 이러한 응용들이 더 널리 사용됨에 따라, 최신 컴퓨터들 및 최신 마이크로프로세서들이 더욱 더 유효하고 효과적인 방법으로 정수 나눗셈을 수행하도록 설계하는 것이 중요해진다.
현재, 정수 나눗셈은 중앙 처리 장치(CPU) 내에서 나눗셈 연산을 사용함으로써 수행된다. 이러한 정수 나눗셈은 전형적으로 겨우 32 비트의 정밀도를 갖는 CPU의 정수 실행 유닛에서 수행된다. 대부분의 나눗셈 연산들은 연산하는데 적어도 20-40 클럭 사이클들을 필요로 하며, 나눗셈 연산은 일반적으로 가장 최신의 중앙 처리 장치들(CPUs)에서 가장 시간을 많이 소비하는 수학적 연산이다. 산업에서 인지된 바와 같이, 보다 빨리 연산하는 컴퓨터는 더 가치있는 컴퓨터이기 때문에, 나눗셈 연산들의 사용이 최적은 아니다. 위에서 논의된 응용들에서, 현재 행해지고 있는 정수 나눗셈은 전형적으로 동일 정수 분모를 항상 포함하는 스케일링 연산일 수 있다. 분모가 항상 동일 값인 나눗셈 연산을 수행할 때, 각 나눗셈은 연속적으로 및 서로 독립적으로 수행되어야 하며, 병렬 연산들의 수행에 의해서, 또는 정수 분모가 동일할 때 후속되는 나눗셈 처리 속도를 증가시키기 위한 나눗셈 연산들 간의 정보 전달에 의해서는 속도 이점이 달성될 수 없다. 요약하면, 정수 유닛들 내의 정수 나눗셈 연산들의 사용은 위에서 논의된 응용들이 합리적인 효율을 갖고 합리적인 시간 주기 내에서 행해지도록 정수 디바이더 연산들을 행하기에는 비효율적인 방법이다. 정수 나눗셈을 행하는 정수 나눗셈 연산들의 사용은 일반적으로 위의 응용들에 사용하기에는 효과 없는 방법론이고, 정밀도가 부족하며, 동일 정수 분모를 포함하는 클러스터된(clustered) 스케일링에 대해 느리고, 효과가 없다. 동시에, 부동 소수점 프로세서들에 대하여 부동 소수점 숫자들의 덧셈, 뺄셈 및 곱셈 연산들의 효과적인 파이프라인화(pipelined) 처리를 제공하는 것이 일반적인 실행이다. 이들 부동 소수점 프로세서들은 또한 전형적으로 53 비트 량들을 처리할 수 있다.
그러므로, 이러한 정수 나눗셈 연산들의 실행 속도가 향상되고, 연산의 정밀도가 개선되며, 연산들의 더 많은 파이프라인화가 이루어질 뿐만 아니라, 동일 분모를 사용하여 수행되는 많은 나눗셈들이 몇 배의 효과적인 방법으로 능률적으로 되는, 부동 소수점 형태로 표시된 정수들의 정수 나눗셈 연산들을 행하기 위한 새로운 장치 및 방법이 필요하다.
바람직한 실시예의 상세한 설명
일반적으로, 본 발명은 나눗셈 하드웨어 및 알고리즘들을 사용하지 않고 중앙 처리 장치(CPU) 내의 정수 나눗셈 연산들을 행하는 것을 포함한다. 대신, 본 명세서에서 교시된 하드웨어 및 방법들은 정밀도 및 속도 모두에서 효율적인 방법으로 정수 나눗셈 연산들을 처리하기 위해 CPU 내에서 하드웨어 부동 소수점 유닛의 보다 효율적인 덧셈 및 곱셈 리소스들을 사용한다. 종래 기술에서, 수학적 나눗셈 연산들은 정수 나눗셈 기능들을 수행하기 위해 사용되었다. 나눗셈 연산들은 결과 x 를 제공하기 위해 정수 분자 a 를 정수 분모 b 로 나누는 것을 포함하며, 여기 서 x 는 어떤 정수 값에
Figure pat00017
라운딩된다.
Figure pat00018
로 표시된,
Figure pat00019
의 하한(floor)은,
Figure pat00020
보다 크지 않은 최대 정수이고,
Figure pat00021
로 표시된,
Figure pat00022
의 상한(ceiling)은,
Figure pat00023
보다 작지 않은 최소 정수이다. 여기에 교시된 방법들 및 장치에서,
Figure pat00024
의 정수 나눗셈은 b 의 역수인,
Figure pat00025
의 근사값을 생성하고, 바이어스된(biased) 분자 a' = ±(a+p) 을 계산하며,
Figure pat00026
a' 간의 곱셈을 수행하고, 곱샘의 결과를 다음의 최대 정수 또는 다음의 최소 정수로 라운딩함으로써 수행된다.
CPU에서는
Figure pat00027
의 값이 무한한 또는 완전한 정밀도로 표시될 수 없기 때문에, 이러한 방법을 사용할 때 여기에서 논의된 값 a 의 부가적인 바이어싱이 필요하다는 것을 인지하는 것은 중요하다. 예를 들면, 1/3의 값은 대부분의 CPU들에서 무한/완전 정밀도로 표시될 수 없다. 그러므로, 중앙 처리 장치(CPU)가 정수 분자 a 및 정수 분모 b 를 수신할 때, 이러한 수들은 부동 소수점 포맷으로 제공되거나, 부동 소수점 프로세싱용 부동 소수점 포맷으로 전환되고, 여기서 a
Figure pat00028
의 값의 근사에서 정밀도의 손실을 보상하기 위해 바이어스된다.
경험적으로, 정수 유닛을 사용하는 전형적인 정수 나눗셈 연산들이 32 비트 정수들에 대하여 20-40 클럭 사이클(clock cycle)들을 취할 수 있음을 알고 있다. 부동 소수점 유닛 내의 덧셈 및 곱셈에 이러한 방법을 사용하면, 1회의 50 비트 정수 나눗셈 연산은 30 클럭 사이클들이 걸린다. 나눗셈 연산들이 동일 정수 분모 b를 사용하여 수행되면, 두 번째 나눗셈은 하나의 클럭 사이클만을 부가하는 것에 의해 수행될 수 있고, 세 번째 나눗셈은 두번째 클럭 사이클을 부가하여 행해질 수 있다. 부가적인 나눗셈들은 대부분 저렴(cheap)하다. 즉, 전형적인 정수 나눗셈 유닛이 대략 60-120 클럭 사이클들에서 24/11, 101/11, 및 65/11을 계산하면, 이하로 교시되는 바와 같이 a'b -1 의 라운드된 값을 발견하는 방법이 32 클럭 사이클들에서 모든 3개의 정수 몫 결과들을 발견할 수 있다. 또한, 이러한 결과들은 보다 양호하게 파이프라인화된 부동 소수점 유닛들에서 결과들의 직접적인 사용을 더 쉽게하는 부동 소수점 포맷에서 얻어진다. 시간은 부동 소수점 유닛의 1회의 부동 소수점 나눗셈보다 더 빠르고, 다수의 부가 계산들이 정수 나눗셈 연산의 결과를 제공하는 부동 소수점 연산들로 오버랩 될 수 있다.
그러므로, 여기에 교시된 정수 나눗셈 절차 및 장치는 전형적으로 정수 하드웨어 유닛들보다 더 효과적으로 파이프라인화되는 부동 소수점 하드웨어에서 행해지는 부동 소수점 계산들을 제공한다. 나눗셈 연산의 속도는 부동 소수점 유닛의 1회의 정수 나눗셈 연산의 경우에도 상당히 향상되고, (JPEG 스케일링 등과 같은) 동일 분모 b 를 갖는 다중 나눗셈 연산들도 성능면에서 크게 향상된다. 부동 소수점 하드웨어 유닛들은 더 나은 비트 정밀도를 제공하므로, 여기에서 교시된 방법들 및 장치는 정수 유닛들에서 일반적으로 사용된 32 비트 표시들에서의 정수들보다 더 큰 정수들에 대하여 정확한 정수 나눗셈 정밀도를 제공한다. 부가적으로, 정수값들은 정수 포맷들과 부동 소수점 포맷들 사이의 전환 횟수들이 감소되도록 부동 소수점 포맷에서 유지될 수 있다. 일반적으로, 여기에 교시된 정수 나눗셈 결과들을 계산하는 방법은 멀티미디어 응용들, MPEG 응용들, JPEG 프로세싱, 그래픽 인터페이스들, 3D 그래픽들, GCD(greatest common denominator) 계산들, 선형 대수학 계산들, 매트릭스 연산들, 비디오 프로세싱, 디지털-오디오 프로세싱, 정수 선형 프로그래밍 등이 이전에 가능하지 않은 계산 속도들로 수행될 수 있도록 빠른 결과 계산을 허용한다.
본 발명은 이하에서의 이론적인 토론 부분 및 도 1 내지 10을 참조하여 보다 잘 이해될 것이다.
다양한 컴퓨터 응용들을 위한 정수 나눗셈 연산들을 수행하기 위한 특정 방법 및 장치를 설명하기 전에, 다음 이론적인 토론이 여기에서 교시된 정수 나눗셈 프로세스의 이해를 돕기 위해 제공된다.
최대값 A 보다 작은 크기들을 갖는 모든 정수들은 부동 소수점 포맷으로 표현될 수 있다. |a|〈 A A b〉0 이 CPU에 제공된 2개의 정수 값들이라 하자. 하한
Figure pat00029
및 상한
Figure pat00030
또한 (- A,A ) 범위 내의 정수들이다. 근사값
Figure pat00031
의 사용과,
Figure pat00001
및/또는
Figure pat00002
의 계산에 의해 정확한 나눗셈을 행하지 않고도 하한 또는 상한을 계산하는 것이 목적이다. 이러한 CPU 계산은 빨리 행해질 수 있고, 이전에 논의된 모든 장점들을 갖는다. 위의 계산들은 z
Figure pat00032
에 대해 충분히 정확한 근사값이어서
Figure pat00003
Figure pat00004
을 만족하게 되면 정확한 결과를 제공할 것이다.
CPU에서 z 를 계산하는 편리한 방식은 근사값 y 로 칭해진
Figure pat00033
의 초기 추정을 얻고, e=1-by 를 계산하며, 마지막으로 CPU 내의 하나 또는 그 이상의 되풀이되는 프로세싱 단계들에 의해 y 에서 z 를 계산하는 것이다. 트렁케이트된(truncated) 멱급수 근사값은 다음과 같이 주어진다.
z=y(l+e+e2+e3+e4+…+em)
이러한 트렁케이트된 멱급수 근사값이 정확하게 계산될 경우, 결과는 오차 δ= e m+l 을 제공할 것이다. 계산은 이러한 표현을 한 번 사용하거나(예를 들면, 한 번 반복), 또는 멱급수에 사용된 항들의 수에 따른 일련의 사용들(예를 들면, 다수 반복들)로 행해질 수 있다. 적당한 또는 높은 대기 시간(latency)을 갖는 파이프라인화된 프로세서에 대해, 일반적으로 m 의 보다 높은 값을 갖는 1개의 다항식을 사용하는 것이 유리하고, 낮은 대기 시간을 갖는 프로세서에서는 낮은 차수의 다항식의 반복 사용이 더 유리하다. 추가로, m 의 임의적 값들에 대해 다항식은 쉽게 인수분해될 수 있어, 다른 방법으로 예상되는 것보다 높은 차수의 단일 다항식의 더 빠른 계산을 허용한다. 하기에 기술된 바와 같이, 이러한 경우는 특히 유리해진다.
최신의 파이프라인화 마이크로프로세서들(도 8 내지 9를 참조하라)에서는, 부동 소수점 숫자의 역수에 대한 근사값을 계산하는 명령이 종종 있다. 이러한 명령이 근사값 y 로서 사용되는 8 비트 결과를 제공하는 경우, m=6 은 (직접적으로 계산된 경우) 50 비트들 이상의 정밀도를 갖는 z 를 제공하는 최소의 m 일 수 있다. 이러한 명령이 빠른 경우, 이것은 우수한 개시점일 수 있다.
이러한 명령이 느리거나 존재하지 않을 경우, 근사값은 부동 소수점 숫자의 역수 제곱근에 대한 근사값을 계산하는 명령을 사용하여 얻어질 수 있다. 이러한 실행이 5 비트들의 정밀도를 갖는
Figure pat00034
에 대한 근사값을 제공하는 경우,
Figure pat00035
에 대한 근사값 y 는 4 비트들 보다 어느 정도 작은 정밀도를 갖는 y= r 2 로서 계산될 수 있다. 이것은 이러한 결과로 작업하여 m=16 을 얻는데 이전의 단락에서 설명된 개시 근사값을 사용하는 것보다 상당히 빨라질 수 있다.
250 A 값에 대하여 적성(proper)을 유지하면서, 이러한 4 비트 미만의 정밀도의 값 y 를 사용하는 것은 번거로운 문제(daunting problem)라고 생각한다. 바람직한 접근은 m=16을 갖는 1개의 다항식을 취하는 것이다. 인수분해후, 최종 근사값은 다음과 같이 나타낼 수 있다.
z=y+ye(1+e)(1+e2)(l+e4)(1+e8)
이러한 인수분해는 산술 연산들이 수행되는 순서를 선택함으로써 많은 방식들로 계산될 수 있다. 결합된 곱셈/덧셈 명령이 사용가능해질 때 특히 빠르고 편리한 것은
z=y+(e+e2)(y+y·e)((e+e2)+(e+e2)·e4)(1+e8)
이다. z 를 계산하는데 요구되는 시간을 최소화하기 위해 순서를 선택하는 다수의 방법들이 있다. 특히 우수한 방법이 하기에 서술된다.
정확히 계산된 경우, 이러한 zδ 의 요구되는 오차 경계를 만족할 것이다. 그러나, 도시한 바와 같이 z 의 계산에는 다수의 산술 라운딩들이 반드시 존재한다. 삽입될 수 있는 최대 총 오차는 연산들이 발생하는 순서에 상세하게 의존한다. 도 7에 설명된 연산들을 특히 선택하면, 정확한 불일치 및 산술 라운딩 비정밀도들 모두를 고려하여 최종 δ A 의 주어진 선택을 위해 요구되는 값 아래로 바운드되는 것을 나타내는 것은 다소 길지만, 직접적이다(straightforward). 이 정밀도는 4개의 IEEE 산술 라운딩 모드들 중 임의의 것에 대해서 보장된다. 많은 CPU들 또는 DSP들(digital signal processors)에서 전형적으로 배선된(hardwired) 곱셈-덧셈 명령이 효율적이고 정확하게 이러한 다항식 계산을 수행하는데 매우 유용하다는 것을 인지한다. 최종 라운딩을 행하기 위해 "라운드-투-플러스 무한대(round-to-plus-infinity) 모드"에서 작업하는 것이 가능하지만, "라운드-투-0(round-to-0)" 또는 "라운드-투-네가티브-무한대(round-to-negative-infinity)" 모드들 중 하나에서 작업하는 것이 편리하다.
정수의 최종 산출은 a'z 를 큰 수 M 에 더함으로써 표준 부동 소수점 명령들을 사용하여 효율적으로 달성되고, 이것은 라운드-투-마이너스-무한대(round-to-minus-infinity) 또는 라운드-투-제로(round-to-zero) 라운딩 모드에서는 M+a'z 이하의 최대 정수를 제공할 것이고(값 M+a'z 는 정확히 정수가 되지 않을 것이다.), 라운드-투-플러스-무한대(round-to-plus-infinity) 모드에서는 M+a'z 이상의 최소 정수를 제공할 것이다(값 M+a'z 는 정확히 정수가 되지 않을 것이다.). 결과에서 M 을 빼거나, M 에서 결과를 뺌으로써, 정확한 하한 또는 상한이 얻어진다. 라운드-투-0 또는 라운드-투-마이너스-무한대 모드에서,
Figure pat00005
라운드-투-플러스-무한대 모드에서,
Figure pat00036
이 방법들로, 최신의 파이프라인화된 CPU들(도 9를 참조하라)에서는, 여기서 앞서 논의된 바와 같은 종래 기술을 넘는 모든 장점들로 250 보다 작거나 동일한 정수들 ab 의 비율들의 정확한 하한들 및 상한들을 계산할 수 있다. 동일값 z 는 동일 분모 b 를 갖는 모든 분수들을 위해 사용될 수 있음에 주의한다. 또한, 이러한 정수들에 대하여, 바이어싱 a 의 결과는 2중 정밀도로 정확히 나타날 수 있음에 주의한다. 일반적으로, 정확하게 N-비트 정수들을 사용하여 계산하는 것을 원할 경우, 작은 수의 예비 비트들이 z 의 계산시 발생하는 산술 라운딩들을 처리하기 위해 부동 소수점 산술에 필요해진다.
발명은 도 1 내지 10의 명백한 참조로 더욱 잘 이해될 수 있다.
도 1은 본 발명에 의해 제기된 문제점들 중 하나를 설명하는 수직선이다. 수직선의 눈금들은 정수 b 에 의한 정수의 정수 나눗셈의 유리수 결과의 가능한 값들을 도시한다. 이 결과들은 정수 n
Figure pat00037
의 배수를 더한 것이다. 2개의 연속 정수들 nn+1 간에, 가능한 값들은 n,
Figure pat00038
Figure pat00039
까지 이어지고 마지막으로 n+l 이다. 수직선 위에는 가능성 있는 정확한 유리수 결과들이 도시된다. 이러한 결과들을 정확한 분모로 나누는 대신에 근사값 역수로 곱하는 것과 같이, 단지 근사적으로만 계산된다면, 그들은 이러한 정확한 포인트들에 대해 어떤 분포로 전개될 것이다. 점선들 위의 짧은 선분들은 이 전개의 최대 범위를 나타낸다. 근사값 결과가 전선분들 위에서 하부 반선분들의 하나에 존재할 경우, 다음 트렁케이션(truncation)은 잘못된 하한 결과를 이끌어 낼 것이다. 예를 들면, n 직선의 왼쪽의 어떤 것은 실제 하한이 n 일지라도, n-l로 트렁케이트될 것이다. 근사값 결과가 전선분들 위에서 상부 반서분들의 하나에 존재할 경우, 다음 라운딩은 잘못된 상한 결과를 이끌어낼 것이다. 예를 들면, n 직선의 오른쪽에 대한 반선분에서, 상한은 보정 결과 n 대신에 n+l 을 제공할 것이다.
도 2는 본 발명을 설명하는 수직선이다. 수직선 상의 눈금들은 이전에서처럼, 정수 b 에 의한 정수의 정수 나눗셈의 유리수 결과의 가능한 값들을 도시한다. 수직선 위에는 정수에
Figure pat00040
을 더하여 b 로 나눈 가능성 있는 정확한 유리수 결과들이 도시되어 있다. 이러한 결과들은 도 1에 관련하여 양
Figure pat00041
에 의해 바이어스 된다. 정확히 바이어스된 해들 위의 짧은 선분들은 정확한 역수들에 대한 근사값들과 연관된 불확실성들의 전개를 설명한다. 시프트(shift)가 도시한 바와 같이 우측이고, 전개가
Figure pat00042
이하이면, 근사하여 바이어스된 결과는 항상 정확한 값
Figure pat00043
를 얻기 위해 다음 최저 정수로 라운드 다운(rounded down)될 수 있고, 시프트가 좌측이고(도시하지 않음) 전개가
Figure pat00044
이하인 경우, 근사하여 바이어스된 결과는 항상 정확한 값
Figure pat00045
를 얻기 위해 다음 정수로 라운드 업(rounded up) 될 수 있다. 그러므로, 계산이 실패할 수 있는 a의 값들은 없다. 시프트는, 충분히 정확한
Figure pat00046
의 근사값을 형성하는 효과적인 수단과 결합되면, 본 발명에 대한 열쇠들이 된다.
여기에서 도 2는 라운드 다운과 결합되어 하한 함수를 형성하는데 사용되는 시프트 업을 설명함에 주의한다. 라운드 업과 결합된 시프트 다운은 상한 함수를 생성할 것이다. [x]=-[-x]와 같은 다양한 항등원들은, 설명된 방법의 약간의 변형들을 제공하는데 사용될 수 있다.
도3은 본 발명을 설명하는 하이 레벨 흐름도이다. 먼저 y 는 단계(102)에서
Figure pat00047
의 초기 근사값으로서 생성된다. 다음에, z 는 단계(104)에서
Figure pat00048
의 최종 근사값으로서 계산된다. 그 다음, 수정된 분자들이 단계(106)에서 형성된다. 최종적으로, 수정된 분자들을 갖는 z 의 곱들이 단계(108)에서 라운드된다.
도 4는 단계(102)를 설명하는 흐름도이다. 먼저 r 은 단계(112)에서
Figure pat00049
의 근사한 역수로서 계산된다. 다음에 y 는 단계(114)에서 r 2 로 계산된다.
도 5는 단계(104)에서
Figure pat00050
에 대한 최종 근사값으로서 z 의 계산을 설명하는 흐름도이다. 도 5에서의 2개의 입력값들은 박스(120)에서는 y 이고, 박스(122)에서는 b 이다. 박스(120)에서의 y 값은 단계(114) 및 도 4에서 계산되었다. 박스(122)에서의 b 입력값은 분모이다. 값 e 는 단계(124)에서 e=1-b*y=(1-by)가 되도록 계산된다. 이러한 식 및 다음 항등식들에서, 중간 항은 수행되는 연산을 표시하고, 우측 항은 정확한 산술로 얻어질 수 있는 대수학 정확값(algebraic exact value)을 표시한다. 이 값 e 는 단계(126)에서 s=e*e=e 2 및 단계(128)에서 n=e+e*e=e(1+e) 를 계산하기 위해 사용된다.
단계(126)로부터의 값 s 는 단계(130)에서 k=y+y*s=y(l+e 2) 의 계산에 사용된다. 또한 단계(126)로부터의 s 값은 단계(132)에서 q=s*s=e 4 의 계산에 사용된다. 단계(132)로부터의 값 q 는 단계(134)에서 d=l+q*q=l+e 8 의 계산에 사용된다. 단계(132)로부터의 q 및 단계(128)로부터의 n 의 값들은 단계(136)에서 c=n+n*q=e(1+e)(1+e 4) 의 계산에 사용된다. 단계(130)로부터의 k 및 단계(134)로부터의 d의 값들은 단계(138)에서 m=k*d=y(1+e 2)(1+e 8)의 계산에 사용된다. 최종적으로 박스(120)로부터의 y, 단계(138)로부터의 m, 및 단계(136)로부터의 c 의 값들은 단계(140)에서 z=y+m*c=y+ye(1+e)(1+e 2)(1+e 4)(1+e 8) 의 계산에 사용된다. 정확한 결과는 y(1+e+e 2+…+e 16) 과 동일하고, 이것은 설명된 수행에 대해 충분히 정확하다.
도 6은 도 3에서의 단계들(106 및 108)을 설명하는 흐름도이다. 테스트는 단계(150)에서 라운딩형(하한 또는 상한 함수)에 의해 행해진다. 라운딩형이 하한 함수를 표시할 경우, R 의 값은 단계(152)에서
Figure pat00051
로 계산된다. 결과
Figure pat00052
는 단계(156)에서 R 로부터 M 을 뺌으로써 계산된다. 상한 라운딩이 단계(150)에서 표시되는 경우, R 은 단계(154)에서
Figure pat00053
가 되도록 계산된다. 결과
Figure pat00054
는 단계(158)에서 M 으로부터 R 을 뺌으로써 계산된다. 라운딩을 행하기 위해 설명된 방법은 부동 소수점 산술이 라운드-투-제로 또는 라운드-투-마이너스-무한 모드에서 행해진다고 가정한다. 두 수단은 이전에서 논의되었다.
도 7은 본 발명을 수행하는 파이프라인화된 CPU의 실행을 표시하는 명령 스케줄링 테이블이다. 테이블은 4개의 컬럼들을 갖는다. 컬럼 1은 사이클 번호를 포함한다. 컬럼 2는 연산을 포함한다. 설명된 스케줄은
Figure pat00055
,
Figure pat00056
Figure pat00057
을 계산한다. 사이클들 20, 25 및 28은
Figure pat00058
을 계산하는데만 요구된 추가 사이클들이고, 사이클 22, 26 및 29는
Figure pat00059
을 계산하는데만 요구된 추가 사이클들임에 주의한다. 제3 컬럼은 제 2 컬럼에 표시된 연산의 결과가 다음 연산들에 사용될 수 있는 사이클을 나타낸다. 스케줄링은 클럭당 1개의 항목을 행하는 것과, 모든 명령들을 위한 3 클럭의 대기 시간이 있다는 것을 가정한다. 사이클 0에서, r
Figure pat00060
가 되도록 계산된다. 이 게산의 결과는 사이클 3에서 사용가능하다. 그 후 사이클 3에서, yy=r*r 이 되도록 계산된다. 이 계산의 결과는 사이클 6에 준비되고, e=1-b*y 를 계산하는데 사용된다. 파이프라인화는 사이클 9 및 10에서 명백해지고, 값 e 는 사이클 9에서의 s의 값 및 사이클 10에서의 n 의 값을 계산하는데 사용된다. 마지막으로, 제 4 컬럼은 일부 연산들의 결과를 설명하는 주석들을 포함한다. 이 스케쥴은 도 5에 설명된 계산들을 수행한다. 결과
Figure pat00061
가 사이클 30에서 사용가능하고, 결과
Figure pat00062
는 사이클 31에서 사용가능하며, 결과
Figure pat00063
는 사이클 32에서 사용가능하다는 것에 주의한다. 32 사이클들에서의 3개의 결과들을 달성하는 것에 더하여, 추가적인 10회의 부동 소수점 연산들이 여분 시간 비용없이 초기화될 수 있고, 완료될 수 있다.
Figure pat00064
만이 계산된 경우, 16회의 추가 부동 소수점 연산들은 첫번째의 30 사이클들에서 행해지고,
Figure pat00065
Figure pat00066
가 둘 다 계산된 경우, 14회의 추가 부동 소수점 연산들은 첫번째의 31 사이클들에서 행해질 수 있다. 이 속도들은 전형적으로 이러한 프로세서에서 1회의 부동 소수점 이중 정밀도 나눗셈이 행하여지는 것보다 더 빠르다. 부가적으로, 나눗셈 연산은 다른 부동 소수점 명령들을 발하는(issue) 것을 막는 것이 보통이다.
도 8은 도 1 내지 7에 설명된 연산들을 행하는데 사용될 수 있는 주문-설계된 집적 회로를 설명한다. 도 8은 도 8에 명백하게 라벨화된 바와 같이 단계(102 내지 108)를 행하는데 사용된 하드웨어를 설명한다. 즉, 도 8의 하드웨어 블럭(102)은 도 3의 단계(102)를 행하는데 사용된다. 도 8의 하드웨어 블럭(104)은 도 3의 단계(104)를 행하는데 사용된다. 하드웨어 블럭(106)은 도 3으로부터 단계(106)를 행하는데 사용된다. 도 8의 하드웨어 부분(108)은 도 3의 단계(108)를 행하는데 사용된다.
도 8에서, 입력 정수 분자 a 및 정수 분모 b 는 전도선들(162 및 164)을 통해 제공되고, 하한 연산을 원하는지 상한 연산을 원하는지를 제어하는 신호는 전도선들(166)을 통해 제공된다.
하드웨어 부분(102)은 입력값 b 의 역수의 초기 근사값 y 를 제공하는데 사용될 수 있는 하드웨어를 표시한다. 값 b 는 부동 소수점 포맷(170)으로 나타난다. 포맷(170)은 지수 부분 e와 f high 로서 라벨된 높은 차수 비트들 및 f low 로서 라벨된 낮은 차수 바이트들을 포함하는 분수 부분을 갖는다. 지수 부분 ey 0의 지수 부분을 구성하는데 사용되고, y 0b 의 역수값의 초기 근사값이다. 포맷(170)의 분수 부분의 f high 부분은 메모리에 저장된 테이블을 액세스하는데 사용된다. 메모리에 저장된 테이블(174)는 전형적으로 ROM 메모리 또는 RAM 메모리 중 하나에 제공된다. 테이블은 y 0 의 분수 부분 f high 의 높은 차수 비트들을 제공할 것이고, 분수 부분의 하부는 도 8의 포맷(176)을 통해 설명한 바와 같이 0 으로 채워진다. 포맷(176)은 값 y 0 의 지수 및 분수 부분들을 설명하는데, 이것은 도전체들(162)을 통해 제공된 입력 b 의 역수의 초기 근사값이다. 이 y 0 의 값은 도전체(178)를 통해 하드웨어의 다음 부분에 제공된다.
y 0 값은 하드웨어 부분(104)을 통해 반복적으로 처리되거나 파이프라인화 처리되어 정해진 허용오차(tolerance)내에서 정확한
Figure pat00067
의 최종 근사값이 된다. 하드웨어 부분(104)은 도전체(178)를 통한 값 y 0 및 도전체들(162)을 통한 값 b 를 그것의 입력으로 받아들인다. 이 입력값들이 도전체들(162 및 178)에 의해 한 번 제공될 때, 단일 하드웨어 유닛은 더 정확한 역수 근사값의 누진적인 계산들을 반복적으로 행할 것이거나, 다수의 하드웨어 유닛들의 파이프라인화 세트가 값 b 의 역수의 더 정확한 근사값을 연속적인 파이프라인화 연산으로 계산할 것이다. 특히 설명된 장치는 쉽게 파이프라인화 될 수 있는 간단한 공식들을 사용한다. 스테이지들이 하드웨어를 공유하는(share) 경우, 전자들은 후자들보다 낮은 정밀도 산술을 사용할 수 있다. 스테이지들이 동일한 하드웨어를 반복적으로 사용하는 경우, 파워는 계산의 일부분만을 행함으로써 초기 스테이지들에서 감소될 수 있다.
b 의 역수의 더 정확한 근사값은 하드웨어 다이아그램(104)에서 설명된 바와 같이 구해진다. 파이프라인화의 제 1 스테이지 또는 제 1 반복 단계에서, 하드웨어(180)는 하드웨어(182)를 통해 오차항을 계산하는데 사용된다. 오차항 및 y 0 의 값을 사용하여 b 의 더 정확한 역수 근사값이 하드웨어(184)를 통해 계산된다. 다음 단계들 또는 스테이지들(180')을 통해 설명된 바와 같이 반복 프로세싱 또는 파이프라인화 프로세싱을 사용하면, 180에서 설명된 것과 유사한 연산들이 값 b 의 역수 근사값의 정밀도보다 더욱 높이 행해진다. 정해진 정밀도 오차가 달성되도록 충분한 반복 또는 하드웨어(104) 내에 배치된 파이프라인의 충분한 스테이지들이 한번 수행되면, 출력 z 는 도전체(186)를 통해 제공된다. 하드웨어 부분들(102 및 104)과 병행하여, 입력 정수 분자 값 a 는 하드웨어(106)을 통해 처리된다. 하드웨어 부분들(106 및 108)은 도전체들(166)을 통해 하한 및 상한 제어 정보를 수신한다. 라인(166) 상의 신호는 하한 연산이 행해질 것인지 상한 연산이 행해질 것인지를 제어하는데 사용된다. 단계(106)에서, 이 제어는 a 값이 어떻게 바이어스되는지(하한에 대해 (+) 및 상한에 대해 (-))를 결정하는데 사용된다. 바이어스된 값 R 은 도전체들(188)을 통해 하드웨어(108)에 제공된다. 그 다음, 하드웨어(108)는 도 전체들(186)을 통해 제공된 값 z 와 도전체들(188)을 통해 제공된 값 R 사이의 곱셈 연산을 행한다. 곱셈의 곱은 그 후 다음의 최저 정수로 라운드된다. 도전체들(166)로부터의 제어 신호는 그 정수의 신호를 변경하는지 여부(하한에 대해서는 no, 상한에 대해서는 yes)를 결정한다. 하드웨어(108)의 출력은 도전체들(168)을 통해 제공된 정수 몫 결과값이다. 도 3의 구조에 따른 도 8의 분할은 b 값이 변경되지 않으면, z 값을 유지하기 쉽게 하고, b 값이 최근에 사용된 경우에는 캐쉬로부터 z 값을 얻기 쉽게 한다. 앞서 논의한 바와 같이, 수학적인 식별자들은 실행에 대해 최소 변경들을 갖는 동일 기능성을 제공하는데 사용될 수 있다.
도 9 및 10은 여기에서 논의된 바와 같이 정수 나눗셈 연산들을 행하는데 사용될 수 있는 데이터 처리 시스템을 설명한다. 도 9 및 10은 32 비트 어드레스 버스(272) 및 64 비트 데이터 버스(274)를 통해 외부 메모리(280)에 결합된 중앙 처리 장치(CPU)부(200)를 설명한다. 중앙 처리 장치(CPU : 200)는 패치(fetch) 유닛(212)을 갖는다. 패치 유닛(212)은 명령 메모리 관리 유닛(IMMU:250)을 사용하여 128 비트 버스(258)를 통해 16 킬로비트(kilobit) (명령) 캐쉬(254)로부터의 컴퓨터 명령들을 패치하는 것을 책임진다. 패치 유닛(212)은 도 10에 도시된 바와 같이 8 명령 큐(214)를 채우는 명령들을 제공한다. 패치 유닛(212)은 큐(214)가 CPU부(200)에 의해 처리될 수 있는 명령들로 항상 채워지는 것을 보장하기 위해, 한번에 4개의 명령들을 연속하여 패치한다. 분기 예보 정보(branch prediction information)를 포함하는 분기 처리 유닛(216)은 명령들의 적당한 실행 흐름이 명령 큐(214) 내에서 유지되도록 패처(fetcher:212)를 제어하는데 사용된다. 디스패취(dispatch) 유닛(218)은 도 9 및 10의 중앙 부분에 설명된 바와 같이 명령들을 디코드하고 적절한 실행 유닛으로 그 명령을 발생시키도록 제공된다. 디스패취 유닛(218)은 도 9 및 10의 중간 부분에 설명된 실행 유닛의 4형태들 중 하나로 디코드된 명령들을 제공할 수 있다. 이 4가지 형태들은 부동 소수점 유닛(240), 로드/저장 유닛(234), 단일 사이클 정수 유닛들(228) 및 다수 사이클 정수 유닛(224)이다. 유닛들(218, 216, 214 및 212)은 모두 도 9 및 10의 많은 실행 유닛들 중 하나로 명령들의 연속적인 스트림을 제공하는 책임을 지는 더 큰 명령 유닛(210)의 부분들이다.
명령들은 도 9 및 10에서 설명된 바와 같이 128 비트 버스(220)를 통해 예약국들(222, 226, 232 및 238)에 제공된다. 예약국들(222, 226, 232 및 238)의 각각은 하나 또는 그 이상의 실행 유닛들(224, 228, 234 및 240)을 공급한다. 이 실행 유닛들(224, 228, 234 및 240)은 명령 유닛(210)에 의해 제공된 디코드된 명령들을 실행할 것이다. 명령들을 실행하는 동안, GPR(General Purpose Register) 파일 영역(230)에 저장된 다양한 범용 레지스터들 및 FPR(Floating Point Register) 파일영역(236)에 저장된 다양한 부동 소수점 레지스터들은 실행 유닛들에 의해 액세스될 수 있다. 부가적으로, 로드/저장 유닛(234)은 저장 큐들 및 마무리 로드 큐들(244), 데이터 캐쉬 태그들(262)과 관련된 D(data)캐쉬(264) 및 데이터 캐쉬 메모리 관리 유닛(260)을 액세스할 수 있다. 로드/저장 유닛(234)은 처리 유닛(200)의 내부 데이터의 통합성을 유지하기 위해 이 정보를 액세스할 수 있다.
버스 인터페이스 유닛(270)은 외부 버스들(272 및 274)로 인터페이스한다. 버스 인터페이스 유닛(270)은 명령 태그들(252)과 관련된 I(명령) 캐쉬(254)로 명령들을 배치한다 또, 데이터는 버스 인터페이스 유닛(270)을 통해 외부 메모리로 부터 판독되고, D(data) 캐쉬(264) 내에 배치된다. 또한, 명령들은 이전에 논의된 바와 같이 명령 메모리 관리 유닛(MMU : 250)을 통해 명령 패치 유닛(212)에 제공된다. 명령들이 명령 유닛을 통해 한번 제공되고 실행 유닛들(224, 228, 234 및 240)을 통해 적절하게 처리되면, 명령들은 완성 유닛(242)으로 돌아가게 된다. 완성 유닛(242)은 실행 고장 및 오예보 분기들을 보상하고, 일반적으로 프로세서(200) 내의 파이프라인화 실행 시퀀스의 끝이 된다. 32 비트 어드레스 버스(272)와 64 비트 데이터 버스(274)는 외부 메모리(280) 및 컴퓨터 판독가능 미디어(286)에 결합된다. 외부 메모리(280)는 하드웨어 유닛(200) 내의 특정 연산들을 행하는데 사용된 4개 세트들의 명령들을 포함한다. 특히, 메모리(280)는 도 3의 단계들(102, 104, 106 및 108)에 각각 대응하는 4개의 소프트웨어 프로그램 부분들(102, 104, 106 및 108)을 포함한다. 그러므로, 외부 메모리(280)를 액세스함으로써, CPU(200)는, 도 1 내지 도 7을 통해 여기에 토론한 바와 같이 정수 나눗셈 연산들을 수행할 수 있다. 메모리(280)에 저장된 소프트웨어 부분들(102, 104, 106, 108)은 전형적으로 EPROM, EEPROM, ROM, DRAM, SRAM, 자기 저장 장치, 테이프 저장 장치, 광 저장 장치, 콤팩트 디스크(CDs), 플래쉬 메모리 저장 장치, 네트워크 저장 장치, 통신들의 링크를 교차하는 다른 컴퓨터, 또는 컴퓨터 실행가능 코드나 컴퓨터 데이터를 위한 유사한 저장 디바이스와 같은 컴퓨터 판독가능 미디어(286)로부터 메모리(280)로 로드된다.
당업자는 변경들 및 변화들이 발명의 정신으로부터 위배됨이 없이 구현될 수 있다는 것을 인식할 것이다. 따라서, 본 발명은 첨부된 청구항들의 범위에 포함되는 것으로서의 모든 이러한 변화들 및 변경들을 포함한다는 것이 의도되었다.
정수 나눗셈 연산들의 실행 속도가 향상되고, 연산치 정밀도가 개선되며, 연산들의 더 많은 파이프라인화가 이루어질 뿐만 아니라, 동일 분모를 사용하여 수행되는 많은 나눗셈들이 몇 배의 효과적인 방법으로 능률적이 되는, 부동 소수점 형태로 표시된 정수들의 정수 나눗셈 연산들을 행할 수 있다.
도1은 본 발명에 의해 제기된 문제점들 중 하나를 설명하는 넘버 라인의 도면
도 2는 본 발명을 설명하는 넘버 라인의 도면.
도 3은 본 발명의 연산을 설명하는 하이 레벨 흐름도.
도들 4내지 6은 도3의 단계들을 설명하는 흐름도들.
도7은 파이프라인화 프로세서 시스템에서 본 발명의 연산을 설명하는 명령 스케쥴링 테이블.
도8은 본 발명의 주문 설계된 집적 회로 장치를 설명하는 블럭도.
도들 9 및 10은 모두 본 발명을 행하는 데이터 처리 시스템을 설명하는 블럭도.
※ 도면의 주요 부분에 대한 부호의 설명 ※
200 : 중앙 처리 장치 212 : 패치 유닛
216 : 분기 처리 유닛 218 : 디스패취 유닛
224 : 다수 사이클 정수 유닛 229 : 단일 사이클 정수 유닛
234 : 로드/저장 유닛 240 : 부동 소수점 유닛
250 : 명령 메모리 관리 유닛 254 : 16(KByte) 명령 캐쉬
258 : 128 비트 버스 272 : 32 비트 어드레스 버스
274 : 64 비트 데이터 버스 280 : 외부 메모리

Claims (5)

  1. 정수 분자(a)와 정수 분모(b)의 정수 몫을 생성하는 방법에 있어서,
    정수 나눗셈 명령과 함께 상기 정수 분자(a) 및 상기 정수 분모(b)를 중앙 처리 장치(CPU:200)에 제공하는 단계와;
    상기 중앙 처리 장치(CPU:200)를 사용하여 상기 정수 분모(b)의 역수의 초기 근사값(y)을 결정하는 단계(102)와;
    상기 정수 분모(b)의 역수의 더 정확한 근사값(z)을 얻기 위해 상기 초기 근사값(y)을 정밀화하는(refining) 단계(104)와;
    바이어스된 분자(a')를 얻기 위해 바이어스 값(p)만큼 상기 정수 분자(a)를 바이어스하는 단계(106)와;
    상기 CPU(200)내에서 발생된 제어 신호에 응답하여 상기 더 정확한 근사값(z)에 상기 바이어스된 분자(a')를 곱하고, a/b의 상기 정수 몫이 정수 값이 되는 것을 보장하기 위해 상기 CPU(200)내에서 라운딩 연산들을 행함으로써, a/b의 상기 정수 몫을 결정하는 단계(108)를 포함하는, 정수 몫 생성 방법.
  2. 파이프라인화 부동 소수점 프로세서에서 정수 나눗셈을 행하는 방법에 있어서,
    상기 파이프라인화 부동 소수점 프로세서(240)에 정수 분자(a) 및 정수 분모(b)를 제공하는 단계와;
    상기 파이프라인화 부동 소수점 프로세서(240)를 통해 y
    Figure pat00068
    1/b가 되도록 상기 정수 분모(b)의 역수의 초기 근사값(y)을 결정하는 단계(102)와;
    상기 파이프라인화 부동 소수점 프로세서(240)를 통해, e=1-b*y가 되도록 상기 초기 근사값(y)의 오차 값(e)을 발견하는 단계(124)와;
    상기 부동 소수점 프로세서(240) 내의 적어도 한번의 반복을 통해, 상기 분모(b)의 역수에 대해 더 정확한 근사값(z)을 반복적으로 결정하는 단계(140)로서, 상기 반복은 상기 더 정확한 근사값(z)이 특정한 허용 오차(error tolerance; d) 내에 존재할 때까지 행해지고, 상기 더 정확한 근사값(z)은 상기 초기 근사 값(y) 및 상기 오차 값(e) 모두의 함수인, 상기 결정 단계(140)와:
    바이어스된 분자(a')로 상기 정수 분자(a)를 바이어싱하는 단계로서, 하한 연산(floor operation)에 대해 a'=±(a+p)이고 여기서 |p|는 1.0 보다 작은 분수값이고, 상한 연산(ceiling operation)에 대해 a'=±(a-p)이고 여기서 |p|는 1.0보다 작은 분수값인, 상기 바이어싱 단계와;
    상기 정수 분자(a')에 상기 더 정확한 근사값(z)을 곱함으로써 예비 결과를 결정하는 단계(106)와;
    상기 예비 결과를 정수 값으로 라운딩하는 단계(108)를 포함하는, 정수 나눗셈을 행하는 방법.
  3. 정수 디바이더에 있어서,
    정수 분모(b)의 역수의 초기 근사값(y)를 결정(102)하기 위한 부동 소수점 수단(240)과;
    상기 정수 분모(b)의 상기 역수의 더 정확한 근사값(z)을 얻기 위해 상기 초기 근사값(y)을 정밀화(104)하기 위한 부동 소수점 수단(240)과;
    바이어스된 분자(a')를 얻기 위해 바이어스 값(p)만큼 상기 정수 분자(a)를 바이어스(106)하기 위한 부동 소수점 수단(240)과;
    상기 더 정확한 근사값(z)에 상기 바이어스된 분자(a')를 곱하고, a/b의 정수 몫이 정수값이 되는 것을 보장하기 위해 상기 CPU(200) 내에서 라운딩 연산들을 행함으로써 a/b의 상기 정수 몫을 결정(108)하기 위한 부동 소수점 수단(240)을 포함하는, 정수 디바이더.
  4. 컴퓨터 판독가능한 미디어(286)상에 저장된 정수 디바이더에 있어서, 상기 컴퓨터 판독가능한 미디어(286)는:
    정수 분모(b)의 역수의 초기 근사값(y)을 결정(102)하기 위한 적어도 하나의 컴퓨터 명령과;
    상기 정수 분모(b)의 상기 역수의 더 정확한 근사값(z)을 얻기 위해 상기 초기 근사값(y)을 정밀화(104)하기 위한 적어도 하나의 컴퓨터 명령과;
    바이어된 분자(a')를 얻기 위해 상기 정수 분자(a)를 바이어스 값(p)만큼 바이어스(106)하기 위한 적어도 하나의 컴퓨터 명령과;
    상기 더 정확한 근사값(z)을 상기 바이어스된 분자(a')에 곱하고, a/b의 정수 몫이 정수 값이 되는 것을 보장하기 위해 상기 CPU(200) 내에서 라운딩(108) 연산들을 수행함으로써 a/b의 상기 정수 몫을 결정하기 위한 적어도 하나의 컴퓨터 명령을 포함하는, 정수 디바이더.
  5. 정수 분자(a) 및 정수 분모(b)의 정수 몫을 생성하는 장치에 있어서,
    파이프라인화된 부동 소수점 수학적 회로를 포함하는 중앙 처리 장치(CPU : 200)와;
    상기 중앙 처리 장치(CPU : 200)에 결합되고 하나 또는 그 이상의 컴퓨터 명령들을 포함하는 메모리(280)로서, 상기 하나 또는 그 이상의 컴퓨터 명령들은,
    상기 파이프라인화 부동 소수점 수학적 회로(240)를 사용하여 상기 정수 분모(b)의 역수의 초기 근사값(y)을 결정하는 연산(102);
    상기 파이프라인화 부동 소수점 수학적 회로(240)를 사용하여 상기 정수 분모(b)의 역수의 더 정확한 근사값(z)을 얻기 위해 상기 초기 근사값(y)을 정밀화하는 연산(104),
    상기 파이프라인화 부동 소수점 수학적 회로(240)를 사용하여 바이어스된 분자(a')를 얻기 위해 바이어스 값(p)만큼 상기 정수 분자(a)를 바이어스하는 연산(106) ; 및
    상기 파이프라인화 부동 소수점 수학적 회로(240)를 사용하여, 상기 CPU 내에서 발행된 제어 신호에 응답하여 상기 더 정확한 근사값(z)에 상기 바이어스된 분자(a')를 곱하고, a/b의 정수 몫이 정수 값이 되는 것을 보장하기 위해 상기 CFU 내에서 라운딩 연산들을 행함으로써 a/b의 상기 정수 몫을 결정하는 연산(108)을 수행하도록 상기 CPU(200)에 의해 액세스되고 디코드되는, 상기 메모리(280)를 포함하는, 정수 몫 생성 장치.
KR1019970036389A 1996-07-25 1997-07-25 부동소수점하드웨어를사용하여마이크로프로세서정수나눗셈연산들을실행하기위한방법및장치 KR100528269B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US08/685,995 US5768170A (en) 1996-07-25 1996-07-25 Method and apparatus for performing microprocessor integer division operations using floating point hardware
US685,995 1996-07-25

Publications (2)

Publication Number Publication Date
KR980010751A KR980010751A (ko) 1998-04-30
KR100528269B1 true KR100528269B1 (ko) 2006-02-01

Family

ID=24754483

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1019970036389A KR100528269B1 (ko) 1996-07-25 1997-07-25 부동소수점하드웨어를사용하여마이크로프로세서정수나눗셈연산들을실행하기위한방법및장치

Country Status (5)

Country Link
US (1) US5768170A (ko)
EP (1) EP0821303A3 (ko)
JP (1) JPH1078863A (ko)
KR (1) KR100528269B1 (ko)
CN (1) CN1175730A (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20120053344A (ko) * 2010-11-17 2012-05-25 삼성전자주식회사 부동 소수점 데이터와 정수형 데이터 간의 변환장치 및 그 방법

Families Citing this family (35)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5973705A (en) * 1997-04-24 1999-10-26 International Business Machines Corporation Geometry pipeline implemented on a SIMD machine
JPH11242585A (ja) * 1998-02-24 1999-09-07 Sony Corp 除算回路およびグラフィック演算装置
US6266769B1 (en) 1998-04-30 2001-07-24 Intel Corporation Conversion between packed floating point data and packed 32-bit integer data in different architectural registers
US6292815B1 (en) * 1998-04-30 2001-09-18 Intel Corporation Data conversion between floating point packed format and integer scalar format
US6247116B1 (en) 1998-04-30 2001-06-12 Intel Corporation Conversion from packed floating point data to packed 16-bit integer data in different architectural registers
US6282554B1 (en) 1998-04-30 2001-08-28 Intel Corporation Method and apparatus for floating point operations and format conversion operations
US6263426B1 (en) 1998-04-30 2001-07-17 Intel Corporation Conversion from packed floating point data to packed 8-bit integer data in different architectural registers
US6175907B1 (en) * 1998-07-17 2001-01-16 Ip First, L.L.C Apparatus and method for fast square root calculation within a microprocessor
US6341300B1 (en) 1999-01-29 2002-01-22 Sun Microsystems, Inc. Parallel fixed point square root and reciprocal square root computation unit in a processor
US6384748B1 (en) 1998-12-21 2002-05-07 Base One International Corporation Method of encoding numeric data and manipulating the same
US6351760B1 (en) 1999-01-29 2002-02-26 Sun Microsystems, Inc. Division unit in a processor using a piece-wise quadratic approximation technique
US6732259B1 (en) 1999-07-30 2004-05-04 Mips Technologies, Inc. Processor having a conditional branch extension of an instruction set architecture
US7242414B1 (en) 1999-07-30 2007-07-10 Mips Technologies, Inc. Processor having a compare extension of an instruction set architecture
JP3447614B2 (ja) 1999-05-31 2003-09-16 株式会社東芝 分数演算器、グラフィック用セットアップエンジン、分数演算方法、及び機械読み出し可能な記憶媒体
US6912559B1 (en) 1999-07-30 2005-06-28 Mips Technologies, Inc. System and method for improving the accuracy of reciprocal square root operations performed by a floating-point unit
US7346643B1 (en) * 1999-07-30 2008-03-18 Mips Technologies, Inc. Processor with improved accuracy for multiply-add operations
US6697832B1 (en) 1999-07-30 2004-02-24 Mips Technologies, Inc. Floating-point processor with improved intermediate result handling
US6631392B1 (en) 1999-07-30 2003-10-07 Mips Technologies, Inc. Method and apparatus for predicting floating-point exceptions
KR100429195B1 (ko) * 2000-03-16 2004-04-28 엘지전자 주식회사 근사값을 이용한 나누기 방법
US6963895B1 (en) * 2000-05-01 2005-11-08 Raza Microelectronics, Inc. Floating point pipeline method and circuit for fast inverse square root calculations
US6996596B1 (en) 2000-05-23 2006-02-07 Mips Technologies, Inc. Floating-point processor with operating mode having improved accuracy and high performance
GB2386984B (en) * 2002-03-28 2005-07-20 David Robinson A data processing system and method for performing a mathematical operation on multi bit binary integer numbers using floating point arithmetic
CN1296816C (zh) * 2002-05-27 2007-01-24 华邦电子股份有限公司 以少位处理器作多位求方根的方法
KR100480724B1 (ko) * 2002-10-31 2005-04-07 엘지전자 주식회사 가변 스텝사이즈 적응형 역수기
US7523152B2 (en) * 2002-12-26 2009-04-21 Intel Corporation Methods for supporting extended precision integer divide macroinstructions in a processor
JP3755602B2 (ja) * 2003-03-04 2006-03-15 ソニー株式会社 信号処理装置、信用処理装置用プログラム、信号処理装置用プログラムを記録した記録媒体、及び信号処理方法
US7421139B2 (en) * 2004-10-07 2008-09-02 Infoprint Solutions Company, Llc Reducing errors in performance sensitive transformations
JP4324200B2 (ja) * 2004-10-15 2009-09-02 日本電信電話株式会社 情報符号化方法、復号化方法、共通乗数推定方法、これらの方法を利用した装置、プログラム及び記録媒体
US8015228B2 (en) * 2005-02-16 2011-09-06 Arm Limited Data processing apparatus and method for performing a reciprocal operation on an input value to produce a result value
US7747667B2 (en) * 2005-02-16 2010-06-29 Arm Limited Data processing apparatus and method for determining an initial estimate of a result value of a reciprocal operation
US7676535B2 (en) * 2005-09-28 2010-03-09 Intel Corporation Enhanced floating-point unit for extended functions
GB201117318D0 (en) 2011-10-06 2011-11-16 Imagination Tech Ltd Method and apparatus for use in the design and manufacture of integrated circuits
CN104375800A (zh) * 2014-12-09 2015-02-25 国网重庆市电力公司电力科学研究院 一种嵌入式***的浮点除法运算方法、***和嵌入式***
CN105302520B (zh) * 2015-10-16 2018-03-23 北京中科汉天下电子技术有限公司 一种倒数运算的求解方法及***
US10313118B2 (en) 2016-10-27 2019-06-04 Cisco Technology, Inc. Authenticated access to cacheable sensor information in information centric data network

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS60142738A (ja) * 1983-12-30 1985-07-27 Hitachi Ltd 内挿近似を使用する除算装置
JPS60164837A (ja) * 1984-02-07 1985-08-27 Nec Corp 除算装置
KR890012222A (ko) * 1988-01-29 1989-08-25 엔.라이스 머레트 제산 및 제곱근 계산 기능을 갖고 있는 부동 소숫점/정수 프로세서 및 제산기의 몫의 근사치 끝수 처리 방법
JPH0251732A (ja) * 1988-08-15 1990-02-21 Fujitsu Ltd 浮動小数点演算器
US5206823A (en) * 1990-12-13 1993-04-27 Micron Technology, Inc. Apparatus to perform Newton iterations for reciprocal and reciprocal square root
US5515308A (en) * 1993-05-05 1996-05-07 Hewlett-Packard Company Floating point arithmetic unit using modified Newton-Raphson technique for division and square root

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS61243532A (ja) * 1985-04-22 1986-10-29 Toshiba Corp 演算装置
US5249149A (en) * 1989-01-13 1993-09-28 International Business Machines Corporation Method and apparatus for performining floating point division
US5309353A (en) * 1992-10-02 1994-05-03 Westinghouse Electric Corp. Multiple reference frame controller for active filters and power line conditioners
US5563818A (en) * 1994-12-12 1996-10-08 International Business Machines Corporation Method and system for performing floating-point division using selected approximation values

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS60142738A (ja) * 1983-12-30 1985-07-27 Hitachi Ltd 内挿近似を使用する除算装置
JPS60164837A (ja) * 1984-02-07 1985-08-27 Nec Corp 除算装置
KR890012222A (ko) * 1988-01-29 1989-08-25 엔.라이스 머레트 제산 및 제곱근 계산 기능을 갖고 있는 부동 소숫점/정수 프로세서 및 제산기의 몫의 근사치 끝수 처리 방법
JPH0251732A (ja) * 1988-08-15 1990-02-21 Fujitsu Ltd 浮動小数点演算器
US5206823A (en) * 1990-12-13 1993-04-27 Micron Technology, Inc. Apparatus to perform Newton iterations for reciprocal and reciprocal square root
US5515308A (en) * 1993-05-05 1996-05-07 Hewlett-Packard Company Floating point arithmetic unit using modified Newton-Raphson technique for division and square root

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20120053344A (ko) * 2010-11-17 2012-05-25 삼성전자주식회사 부동 소수점 데이터와 정수형 데이터 간의 변환장치 및 그 방법
KR101718817B1 (ko) 2010-11-17 2017-03-29 삼성전자주식회사 부동 소수점 데이터와 정수형 데이터 간의 변환장치 및 그 방법

Also Published As

Publication number Publication date
JPH1078863A (ja) 1998-03-24
EP0821303A2 (en) 1998-01-28
EP0821303A3 (en) 1998-03-11
KR980010751A (ko) 1998-04-30
US5768170A (en) 1998-06-16
CN1175730A (zh) 1998-03-11

Similar Documents

Publication Publication Date Title
KR100528269B1 (ko) 부동소수점하드웨어를사용하여마이크로프로세서정수나눗셈연산들을실행하기위한방법및장치
US8176110B2 (en) Modular multiplier
Pineiro et al. High-speed function approximation using a minimax quadratic interpolator
US9753695B2 (en) Datapath circuit for digital signal processors
US5631859A (en) Floating point arithmetic unit having logic for quad precision arithmetic
US5515308A (en) Floating point arithmetic unit using modified Newton-Raphson technique for division and square root
US6256653B1 (en) Multi-function bipartite look-up table
US6223192B1 (en) Bipartite look-up table with output values having minimized absolute error
US6782405B1 (en) Method and apparatus for performing division and square root functions using a multiplier and a multipartite table
US20130185345A1 (en) Algebraic processor
US20170102942A1 (en) Variable Length Execution Pipeline
JPH07168697A (ja) 倍精度除算回路および方法
US7406589B2 (en) Processor having efficient function estimate instructions
Abel et al. Applications tuning for streaming SIMD extensions
WO1996037819A1 (en) Method for performing a 'rotate through carry' operation
EP1025485B1 (en) Multifunction bipartite look-up table
Kratz et al. A microprogrammed approach to signal processing
US6598063B1 (en) Fast calculation of (A/B)K by a parallel floating-point processor
US5831877A (en) Bit searching through 8, 16, or 32 bit operands using a 32 bit data path
US5754460A (en) Method for performing signed division
EP1504338B1 (en) "emod" a fast modulus calculation for computer systems
EP0772817A1 (en) EXECUTION UNIT ARCHITECTECTURE TO SUPPORT x86 INSTRUCTION SET AND x86 SEGMENTED ADDRESSING
US7237000B2 (en) Speed of execution of a conditional subtract instruction and increasing the range of operands over which the instruction would be performed correctly
Antelo et al. High radix cordic rotation based on selection by rounding
JP3541086B2 (ja) 除算結果、及び開平算結果に正確な丸め処理を行う方法、及び装置

Legal Events

Date Code Title Description
A201 Request for examination
N231 Notification of change of applicant
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: 20121023

Year of fee payment: 8

FPAY Annual fee payment

Payment date: 20131024

Year of fee payment: 9

LAPS Lapse due to unpaid annual fee