부동 소수점 단위
Floating-point unit부동소수점 유닛(FPU, 구어로는 수학 코프로세서)은 부동소수점 [1]숫자에 대한 연산을 수행하기 위해 특별히 설계된 컴퓨터 시스템의 일부입니다.일반적인 연산은 더하기, 빼기, 곱하기, 나누기 및 제곱근입니다.일부 FPU는 지수 계산이나 삼각 계산과 같은 다양한 초월 함수를 수행할 수도 있지만 정확도가 [2][3]매우 낮을 수 있기 때문에 일부 시스템은 이러한 함수를 소프트웨어로 계산하는 것을 선호합니다.
범용 컴퓨터 아키텍처에서는 1개 이상의 FPU를 중앙처리장치 내에 실행유닛으로 통합할 수 있습니다.다만, 많은 임베디드 프로세서는 부동소수점 연산을 하드웨어로 서포트하고 있지 않습니다(단, 적어도 32비트의 FPU를 표준으로 하는 경우가 증가하고 있습니다).
CPU가 부동소수점 연산을 요구하는 프로그램을 실행하는 경우 이를 실행하는 방법은 다음 3가지입니다.
- 부동소수점 유닛에뮬레이터(부동소수점 라이브러리).
- 애드온 FPU
- 내장 FPU
역사
1954년 IBM 704는 이전 IBM 701보다 크게 개선된 기능 중 하나인 부동 소수점 산술을 표준 기능으로 사용했습니다.이것은 709년, 7090년, 7094년에 계승되었다.
1963년 Digital은 부동 소수점을 표준 기능으로 [4]하는 PDP-6를 발표했습니다.
1963년, GE-235는 부동소수점 [5]및 배정밀 계산을 위한 "보조 연산 장치"를 특징으로 했다.
이전에는 통합 유닛이 아닌 코프로세서로 부동소수를 구현한 시스템도 있었습니다(그러나 현재는 CPU 외에 CPU에 항상 내장되어 있지 않은 코프로세서인 GPU 등)는 FPU를 사용하는 것이 일반적입니다만, 제1세대 GPU에는 탑재되어 있지 않았습니다).이것은 하나의 집적회로, 회로기판 전체 또는 캐비닛일 수 있습니다.부동소수점 계산 하드웨어가 제공되지 않은 경우 부동소수점 계산은 소프트웨어로 이루어지기 때문에 프로세서 시간은 더 오래 걸리지만 추가 하드웨어 비용은 피할 수 있습니다.특정 컴퓨터 아키텍처의 경우 부동소수점 유닛 명령은 소프트웨어 기능의 라이브러리에 의해 에뮬레이트될 수 있습니다.이것에 의해, 부동소수점 하드웨어가 있는 시스템과 없는 시스템에서 같은 오브젝트 코드를 실행할 수 있습니다.에뮬레이션은 마이크로코드로서의 CPU, 운영체제 기능으로서의 CPU, 사용자 공간 코드의 어느 레벨로 실장할 수 있습니다.정수 기능만 사용할 수 있는 경우 CORDIC 부동소수점 에뮬레이션 방식이 가장 일반적으로 사용됩니다.
대부분의 현대 컴퓨터 아키텍처에서는 정수 연산과 부동소수점 연산의 몇 가지 구분이 있습니다.이 부문은 아키텍처에 따라 크게 다릅니다.일부에는 전용 부동소수점 레지스터가 있는 반면 인텔 x86과 같은 일부 부문에서는 독립된 크로킹 [6]스킴까지 채택하고 있습니다.
CORDIC 루틴은 80486[7] 마이크로프로세서 시리즈까지의 인텔 x87 코프로세서(8087,[7][8][9][10][11] 80287,[11][12] 80387[11][12]) 및 Motorola 68881[7][8] 및 68882에 구현되어 있습니다.이는 주로 FPU 서브시스템의 게이트 수(및 복잡도)를 줄이기 위한 방법입니다.
부동소수점 연산은 많은 경우 파이프라인으로 처리됩니다.일반적인 순서가 잘못된 실행이 없는 이전의 슈퍼스케일러 아키텍처에서는 부동소수점 연산이 정수 연산과 별도로 파이프라인 처리되는 경우가 있었습니다.
Buldozer 마이크로아키텍처의 모듈러 아키텍처에서는 FlexFPU라는 특수한 FPU를 사용합니다.이 FPU는 동시 멀티스레딩을 사용합니다.각 물리 정수 코어는 모듈당 2개씩 싱글 스레드화되어 있으며 인텔의 하이퍼스레딩과는 달리 2개의 가상 동시 스레드는 단일 물리 [13][14]코어의 리소스를 공유합니다.
부동소수점 라이브러리

일부 부동소수점 하드웨어는 덧셈, 뺄셈 및 곱셈과 같은 가장 간단한 연산만 지원합니다.그러나 아무리 복잡한 부동소수점 하드웨어라도 지원할 수 있는 연산 수는 한정되어 있습니다.예를 들어 임의의 정밀도 연산을 직접 지원하는 FPU는 없습니다.
CPU가 하드웨어에서 직접 지원되지 않는 부동소수점 연산을 요구하는 프로그램을 실행하는 경우 CPU는 일련의 간단한 부동소수점 연산을 사용합니다.부동소수점 하드웨어가 없는 시스템에서는 CPU는 정수 연산 로직 유닛에서 실행되는 일련의 간단한 고정소수점 산술 연산을 사용하여 에뮬레이트합니다.
부동소수점 연산을 에뮬레이트하기 위해 필요한 일련의 연산을 나열하는 소프트웨어는 대부분의 경우 부동소수점 라이브러리에 패키지되어 있습니다.
내장 FPU
경우에 따라서는 FPU가 전문화되어 단순한 부동소수점 연산(주로 덧셈과 곱셈)과 나눗셈과 같은 더 복잡한 연산으로 나뉠 수 있습니다.경우에 따라서는 하드웨어 또는 마이크로코드로 간단한 조작만 구현될 수 있으며, 보다 복잡한 조작은 소프트웨어로 구현될 수 있습니다.
현재의 아키텍처에 따라서는, FPU 기능이 SIMD 유닛과 조합되어 SIMD 연산을 실시하고 있습니다.이 예로는 최신 인텔 및 AMD 프로세서에서 사용되는 x86-64 아키텍처에서 SSE 명령 세트를 사용하여 x87 명령 세트를 증설하는 경우가 있습니다.
애드온 FPU
1980년대 IBM PC/호환 마이크로컴퓨터에서는 FPU가 CPU와 완전히 분리되어 일반적으로 옵션 애드온으로 판매되었습니다.이것은 수학 집약적인 프로그램의 속도를 높이거나 유효하게 하기 위해서 필요한 경우에만 구입할 수 있습니다.
8088 또는 8086 기반 IBM PC, XT 및 대부분의 호환기에는 옵션인 8087 코프로세서용 소켓이 있었습니다.AT 및 80286 기반 시스템은 일반적으로 80287 및 80386/80386SX 기반 시스템에 각각 소켓이 제공되었지만 80387은 아직 존재하지 않았기 때문에 초기 시스템은 80287에 소켓이 제공되었습니다.인텔 x86 시리즈용 공동 프로세서를 제조한 기업도 있습니다.여기에는 Cyrix와 Weitek가 포함되어 있습니다.Acoron Computers는 WE32206이 ARM으로 구동되는 아르키메데스 범위에 단일, 이중, 확장된[15] 정밀도를 제공하도록 선택했습니다.
코프로세서는 Motorola 68000 패밀리, 68881 및 68882에서 사용할 수 있습니다.이는 Sun-3 시리즈와 같은 Motorola 68020/68030 기반 워크스테이션에서 흔히 볼 수 있습니다.또한 Apple Macintosh와 Commodore Amiga 시리즈의 고급 모델에도 일반적으로 추가되었지만 IBM PC 호환 시스템과 달리 코프로세서를 추가하는 소켓은 로우엔드 시스템에서 일반적이지 않았습니다.
마이크로컨트롤러 유닛(MCU/μC)/싱글보드 컴퓨터(SBC)용 애드온 FPU 코프로세서 유닛도 있어 부동소수점 연산 기능을 제공합니다.이러한 애드온 FPU는 호스트 프로세서에 의존하지 않고 독자적인 프로그래밍 요건(조작, 명령어 세트 등)을 가지고 있으며, 많은 경우 독자적인 통합 개발 환경(IDE)과 함께 제공됩니다.
「 」를 참조해 주세요.
- 산술 로직 유닛(ALU)
- 주소 생성 장치(AGU)
- 로드 스토어 유닛
- CORDIC 루틴은 많은 FPU에서 기능을 구현하기 위해 사용되지만 게이트 수를 크게 늘리지 않습니다.
- 실행 단위
- IEEE 754 부동소수점 표준
- IBM 16진 부동 소수점
- 그래픽스 처리 장치
- 곱셈-누적립
레퍼런스
- ^ Anderson, Stanley F.; Earle, John G.; Goldschmidt, Robert Elliott; Powers, Don M. (January 1967). "The IBM System/360 Model 91: Floating-Point Execution Unit". IBM Journal of Research and Development. 11 (1): 34–53. doi:10.1147/rd.111.0034. ISSN 0018-8646.
- ^ Bruce Dawson (2014-10-09). "Intel Underestimates Error Bounds by 1.3 quintillion". randomascii.wordpress.com. Retrieved 2020-01-16.
- ^ "FSIN Documentation Improvements in the "Intel® 64 and IA-32 Architectures Software Developer's Manual"". intel.com. 2014-10-09. Retrieved 2020-01-16.
- ^ "PDP-6 Handbook" (PDF). www.bitsavers.org.
- ^ "GE-2xx documents". www.bitsavers.org. CPB-267_GE-235-SystemManual_1963.pdf, p. IV-4.
- ^ "Intel 80287 family". www.cpu-world.com. Retrieved 2019-01-15.
- ^ a b c Muller, Jean-Michel (2006). Elementary Functions: Algorithms and Implementation (2 ed.). Boston: Birkhäuser. p. 134. ISBN 978-0-8176-4372-0. LCCN 2005048094. Retrieved 2015-12-01.
- ^ Palmer, John F.; Morse, Stephen Paul (1984). The 8087 Primer (1 ed.). John Wiley & Sons Australia, Limited. ISBN 0471875694. 9780471875697. Retrieved 2016-01-02.
- ^ Glass, L. Brent (January 1990). "Math Coprocessors: A look at what they do, and how they do it". Byte. 15 (1): 337–348. ISSN 0360-5280.
- ^ a b c Jarvis, Pitts (1990-10-01). "Implementing CORDIC algorithms - A single compact routine for computing transcendental functions". Dr. Dobb's Journal: 152–156. Retrieved 2016-01-02.
- ^ a b Yuen, A. K. (1988). "Intel's Floating-Point Processors". Electro/88 Conference Record: 48/5/1–7.
- ^ "Archived copy". cdn3.wccftech.com. Archived from the original on 9 May 2015. Retrieved 14 March 2022.
{{cite web}}
: CS1 maint: 제목으로 아카이브된 복사(링크) - ^ "AMD unveils Flex FP". bit-tech.net. Retrieved 29 March 2018.
- ^ "Western Electric 32206 co-processor". www.cpu-world.com. Retrieved 2021-11-06.
추가 정보
- Filiatreault, Raymond (2003). "SIMPLY FPU".