A matematikai koprocesszor a központi processzor utasításkészletének bővítésére szolgáló társprocesszor , amely egy lebegőpontos műveleti modul funkcionalitását biztosítja az integrált modullal nem rendelkező processzorok számára.
Lebegőpontos egység (vagy lebegőpontos egység ; angol lebegőpontos egység (FPU) - a processzor része, valós számokkal végzett matematikai műveletek széles körének végrehajtására .
Az egyszerű „ egész ” processzorok valós számokkal és matematikai műveletekkel való munkához megfelelő támogatási eljárásokat és időt igényelnek a végrehajtásukhoz. A lebegőpontos műveleti modul támogatja a velük való munkát a primitívek szintjén - egy valós szám betöltése, kirakása (speciális regiszterekbe / speciális regiszterekből ) vagy egy matematikai művelet rajtuk egy paranccsal hajtható végre, ennek köszönhetően az ilyen műveletek jelentős felgyorsítása elért.
Az x87 egy speciális utasításkészlet a matematikai számításokhoz, amely az x86 processzorarchitektúra egy részhalmaza . Ezt a nevet azért kapta, mert az eredeti egyedi matematikai társprocesszor chipek nevei 87 -re végződtek . A processzor alapvető utasításkészletének más bővítményeihez hasonlóan ezek az utasítások nem feltétlenül szükségesek egy működő program felépítéséhez, de hardverben megvalósítva a gyakori matematikai feladatok sokkal gyorsabb végrehajtását teszik lehetővé. Például az x87 utasításkészlet tartalmaz utasításokat a szinusz vagy koszinusz értékek kiszámításához .
Az x86 család 8086/8088 -tól 386 - ig terjedő processzorainál a lebegőpontos egységet egy matematikai társprocesszornak nevezett külön chipre osztották . A koprocesszornak a számítógép alaplapjára történő telepítéséhez külön csatlakozót biztosítottak.
A társprocesszor nem teljes értékű processzor, mivel az ehhez szükséges műveletek közül sok nem tud végrehajtani (például nem tud programmal dolgozni és memóriacímeket számolni), csupán a központi processzor függeléke.
A központi processzor és a társprocesszor közötti interakciós sémák egyike, amelyet különösen az x86 társprocesszorokban használnak, a következőképpen valósul meg:
Az Intel486DX processzortól kezdve a lebegőpontos egységet integrálták a CPU-ba, és FPU-nak hívták. Az Intel486SX vonalban az FPU modul le volt tiltva (eleinte a hibás FPU-val rendelkező processzorok ebbe a sorba estek). Az Intel486SX processzorokhoz egy Intel487SX "társprocesszor" is megjelent , de valójában ez egy Intel486DX processzor volt , és telepítéskor az Intel486SX processzort letiltották .
Az integráció ellenére az i486 processzorokban lévő FPU változatlan, ugyanazon a chipen készült koprocesszor, ráadásul az i486 FPU áramkör az órajel frekvenciájáig (a központi processzor frekvenciájának fele) teljesen megegyezik az előző generációs 387DX koprocesszorral. Az FPU és a CPU valódi integrációja csak a Pentium MMX processzorokkal kezdődött.
A Weitek által gyártott x86 platform társprocesszorait széles körben használták a megfelelő időszakban - kiadták a 1167, 2167 chipset és a 3167, 4167 chipeket a 8086 , 80286 , 80386 , 80486 processzorokhoz . Az Intel társprocesszoraihoz képest 2-3-szor nagyobb teljesítményt nyújtottak, de inkompatibilis szoftveres interfésszel rendelkeztek memória-leképezési technológiával. Ez odáig fajult, hogy a főprocesszornak információkat kellett írnia a Weitek társprocesszor által vezérelt memória bizonyos területeire (nem volt ott saját RAM). Az adott cím, ahol a felvétel készült, egy adott parancsként értelmezett. Az inkompatibilitás ellenére a Weitek koprocesszorokat széles körben támogatták mind a szoftverfejlesztők, mind az alaplapgyártók, amelyek aljzatokat biztosítottak egy ilyen chip telepítéséhez.
Számos más cég is gyártott különféle inkompatibilis matematikai társprocesszorokat, amelyek I/O-portokon vagy BIOS -megszakításokon keresztül kapcsoltak hozzájuk , de ezeket nem alkalmazták olyan széles körben.
A klónozó cégek a 80287 80387 - tel kompatibilis koprocesszorokat készítettek , amelyek gyorsabban működtek, mint a hasonló Intelek. Ezek közül a cégek közül említhető a Cyrix , az AMD , a Chips & Technologies (C&T) . Néha ezeknek a koprocesszoroknak az utasításkészletét több inkompatibilissel is kibővítették, például a C&T 80287 analógja tartalmazott utasításokat a négy lebegőpontos vektorral való munkavégzéshez. Ezek a kiterjesztett parancsok nem kaptak komoly támogatást a szoftvergyártóktól.
A Cyrix EMC87 processzorai Intel 80387 szoftverkompatibilitási módban és saját inkompatibilis programozási módjukban is működhetnek. Számukra biztosított volt a hardver kompatibilitás a 80387 társprocesszor foglalattal.
A Szovjetunióban egy 1810VM87 mikroáramkört (KM) gyártottak, amely a 8087 analógja volt .
Hasonlóképpen, a Motorola processzorokra épített PC - alaplapok az MC68040 processzor fejlesztése előtt (amelybe a társprocesszort beépítették) tartalmaztak matematikai társprocesszort. FPU-ként általában egy 68881 16 MHz-es vagy 68882 25 MHz-es koprocesszort használtak. Szinte minden modern processzornak van beépített társprocesszora.
A Weitek matematikai társprocesszorokat is gyártott a 68000 és MIPS platformokhoz .
Az FPU regiszterek nem tömbként vannak szervezve, mint néhány más architektúrában, hanem regiszterveremként . Így az FPU egy veremszámítógép, amely a fordított lengyel jelölés elvén működik [2] [3] . Ez azt jelenti, hogy az utasítások mindig a verem felső értékét használják a műveletek végrehajtásához, és a többi tárolt értékhez általában a veremben végzett manipulációk eredményeként hozzáférnek. Ha azonban a verem tetejével dolgozik, akkor a verem más elemei is használhatók egyidejűleg, amelyek eléréséhez a verem tetejéhez képest közvetlen címzést alkalmazunk. A műveletek a RAM-ban tárolt értékeket is használhatják. A szokásos műveletsor a következő. A művelet előtt az argumentumok a LIFO verembe kerülnek ; a művelet végrehajtásakor a szükséges számú argumentum eltávolításra kerül a veremből. A művelet eredménye a verembe kerül, ahol felhasználható a további számításokhoz, vagy eltávolítható a veremből, hogy a memóriába írjuk. Míg az FPU regiszterek halmozása kényelmes a programozók számára, megnehezíti a fordítók számára a hatékony kód felépítését.
Minden Intel és AMD processzor a 486DX -től kezdve beépített matematikai társprocesszorral rendelkezik , és nincs szükség külön társprocesszorra (az Intel486SX kivételével ). Az x87 kifejezést azonban továbbra is a processzorutasítások azon részének kiemelésére használják, amely az FPU veremben lévő valós számokkal való munkavégzésre szolgál. Ezeknek az utasításoknak egy megkülönböztető jellemzője: a mnemonikájuk f betűvel kezdődik (az angol float szóból ). A fordítók ezekkel az utasításokkal olyan kódot állíthatnak elő, amely bizonyos esetekben gyorsabb, mint a lebegőpontos műveletek végrehajtásához könyvtárhívásokat használó kód.
Az x87 utasítások IEEE-754 kompatibilisek , azaz. lehetővé teszik a számítások elvégzését a szabványnak megfelelően. Az x87 utasítássorozat azonban jellemzően nem teljesít szigorúan az IEEE-754 formátumok szerint, mivel szélesebb regisztereket használnak, mint az egyszeres és kettős precíziós számformátumok. Ezért az aritmetikai műveletek sorozata egy x87 készleten kissé eltérő eredményt adhat, mint az IEEE-754 szabványt szigorúan követő processzorokon .
A 3DNow megjelenése után! Az AMD -től , majd az SSE -től kezdve, az Intel Pentium III processzoraitól kezdve, az egyszeri precíziós számítások FPU-utasítások nélkül és megnövelt teljesítménnyel váltak lehetővé. Az SSE2 bővítmény és a későbbi utasításkészlet-kiterjesztések gyors, kétszeres pontosságú számításokat is biztosítottak (lásd az IEEE-754 szabványt ). Ebben a tekintetben a modern számítógépekben jelentősen csökkent a klasszikus matematikai koprocesszoros utasítások iránti igény. Mindazonáltal továbbra is minden kiadott x86 processzor támogatja őket a régebbi alkalmazásokkal való kompatibilitás érdekében, valamint azon alkalmazások igényeinek kielégítésére, amelyek binárisról decimálisra konvertálást vagy kiterjesztett pontosságú számításokat igényelnek (amikor a dupla pontosság nem elegendő). Jelenleg továbbra is az x87 parancsok használata a leghatékonyabb módja az ilyen számítások végrehajtásának.
Az FPU belsejében a számok 80 bites lebegőpontos formátumban vannak tárolva (kibővített pontosság), míg a memóriából írás vagy olvasás használható:
Az FPU speciális számértékeket is támogat:
Az FPU-ban három regisztercsoport van:
A rendszer körülbelül 80 parancsot tartalmaz. Besorolásuk:
processzortechnológiák | Digitális|||||||||
---|---|---|---|---|---|---|---|---|---|
Építészet | |||||||||
Instruction Set Architecture | |||||||||
gépszó | |||||||||
Párhuzamosság |
| ||||||||
Megvalósítások | |||||||||
Alkatrészek | |||||||||
Energiagazdálkodás |