Floating-Point Unit — suzuvchi nuqtali sonlar ustida arifmetik amallarni bajarishga ixtisoslashgan protsessor bloki. FPU qo‘shish, ko‘paytirish, bo‘lish, kvadrat ildiz, taqqoslash va formatlar orasida o‘tkazishni IEEE 754 kabi belgilangan semantika asosida amalga oshiradi.
Son tarkibi
Floating-point qiymat ishora, exponent va significand maydonlaridan tuziladi. Normal sonlardan tashqari nol, subnormal, musbat va manfiy cheksizlik hamda NaN mavjud. FPU har amal oldidan exponentlarni moslashtiradi, significand ustida hisoblaydi, natijani normallashtiradi va tanlangan rejimda yaxlitlaydi.
Ko‘p natija haqiqiy matematik qiymatni bitlarda aynan ifodalay olmaydi. Round-to-nearest-even keng tarqalgan, lekin nolga, musbat yoki manfiy cheksizlikka yo‘naltirilgan rejimlar ham mavjud. Control word yoki alohida registr joriy rejimni saqlashi mumkin.
Istisnolar
Invalid operation, division by zero, overflow, underflow va inexact holatlari status bayroqlarini o‘rnatadi. Muhit sozlamasiga qarab trap ham yuz berishi mumkin. NaN propagation va signaling NaN xulqi arxitektura hamda til runtime’i tomonidan to‘g‘ri boshqariladi.
Subnormal sonlar nolga juda yaqin qiymatlarni asta kamayuvchi aniqlikda ifodalaydi. Ularni to‘liq apparatda ishlash qimmatroq bo‘lishi mumkin. Ayrim tezlik rejimlari subnormal kirish yoki natijani nolga aylantiradi, ammo bu IEEE semantikasini o‘zgartiradi va raqamli algoritmga ta’sir qiladi.
Quvurlangan bajarish
Qo‘shish va ko‘paytirish alohida pipeline’larda bir nechta sikl latency bilan, ammo yuqori throughputda bajariladi. Bo‘lish va ildiz iterativ bo‘lishi mumkin. Fused multiply-add a*b+cni bitta yakuniy yaxlitlash bilan hisoblaydi; u ikki alohida buyruqdan ko‘proq aniqlik, lekin bit darajasida boshqa natija beradi.
Skalyar FPU bitta qiymatga, vektor blok esa bir nechta elementga parallel amal qo‘llaydi. Ba’zi mikroarxitektura ikkalasini umumiy fizik quvurda bajaradi. ISA semantikasi ichki blok sonini belgilamaydi.
Dasturiy mazmun
Floating-point qo‘shish assotsiativ emas: (a+b)+c va a+(b+c) turli yaxlitlanishi mumkin. Kompilyatorning fast-math rejimi qayta tartiblash va maxsus qiymat taxminlariga ruxsat beradi; qat’iy rejim esa til belgilagan natija va istisnolarni saqlaydi.
Moliyaviy aniq o‘nlik hisob uchun binary floating-point har doim mos emas; decimal format yoki butun sonli kichik birlik ishlatiladi. FPU tezligi ma’lumot modelining to‘g‘ri tanlanishini almashtirmaydi.
Konversiya va taqqoslash
Integerdan floating-point’ga o‘tkazishda katta butun son significand kengligiga sig‘masa yaxlitlanadi. Teskari konversiyada kasr qismi, diapazondan tashqari qiymat va NaN uchun natija yoki istisno ISAga bog‘liq. Dasturlash tili qo‘shimcha tekshiruv kiritishi mumkin.
NaN bilan odatiy taqqoslash unordered natija beradi; hatto NaN o‘ziga teng emas. min va max buyruqlarining NaN hamda signed zero semantikasi ISA avlodlarida farq qilishi mumkin. Raqamli kutubxona bitga aniq natija talab qilsa, aynan qaysi variant kompilyator chiqarishini tekshiradi. FPU bayroqlari oqim kontekstining bir qismi sifatida saqlanadi.
FPU natijasini turli platformada taqqoslashda compiler flag, contraction, intermediate precision va kutubxona funksiyasi versiyasi qayd etiladi. Bir xil manba ifodasi barcha muhitda bitga teng chiqishi standart tomonidan har doim kafolatlanmaydi.
Virtual mashina FPU holatini mehmonlar orasida ajratadi. Register va exception bayroqlarining sizib o‘tishi maxfiy ma’lumotni ochishi mumkin, shu sabab context switch to‘liq va tekshirilgan bo‘lishi zarur.
Bog‘liq tushunchalar
IEEE 754, floating-point arithmetic, rounding mode, NaN, fused multiply-add, vector unit