Matemaattinen apuprosessori

Matemaattinen apuprosessori  on apuprosessori , joka laajentaa keskusprosessorin käskyjoukkoa ja tarjoaa sille liukulukuoperaatiomoduulin toiminnot prosessoreille, joissa ei ole integroitua moduulia.

Liukulukuyksikkö (tai liukulukuyksikkö ; englanninkielinen  floating point unit (FPU))  - osa prosessoria useiden matemaattisten operaatioiden suorittamiseen reaaliluvuilla .

Yksinkertaiset kokonaislukuprosessorit reaalilukujen ja matemaattisten operaatioiden käsittelyyn vaativat asianmukaisia ​​tukitoimenpiteitä ja aikaa niiden suorittamiseen. Liukulukuoperaatiomoduuli tukee niiden kanssa työskentelyä primitiivien tasolla - todellisen luvun lataaminen, purkaminen (erikoisrekistereihin / erikoisrekistereistä ) tai niille suoritetaan matemaattinen operaatio yhdellä komennolla, tästä johtuen tällaisten toimintojen merkittävä kiihtyvyys. on saavutettu.

Apuprosessorit

x87  on erityinen ohjejoukko matemaattisten laskelmien kanssa työskentelemiseen, joka on osa x86 -prosessoriarkkitehtuuria . Se sai tämän nimen, koska alkuperäisten yksittäisten matemaattisten apuprosessorisirujen nimet päättyivät numeroon 87 . Kuten muutkin prosessorin peruskäskysarjan laajennukset, nämä ohjeet eivät ole ehdottoman välttämättömiä toimivan ohjelman rakentamiseksi, mutta laitteistoon toteutettuina ne mahdollistavat tavallisten matemaattisten tehtävien suorittamisen paljon nopeammin. Esimerkiksi x87 - käskysarja sisältää ohjeet sini- tai kosiniarvojen laskemiseen .

Intel x86 -apuprosessorit

X86-perheen prosessoreissa 8086/ 8088-386 liukulukuyksikkö erotettiin erilliseksi siruksi , jota kutsutaan matemaattiseksi apuprosessoriksi . Apuprosessorin asentamiseksi tietokonelevyyn toimitettiin erillinen liitin.

Apuprosessori ei ole täysimittainen prosessori, koska se ei voi suorittaa monia tähän tarvittavia toimintoja (esimerkiksi se ei voi työskennellä ohjelman kanssa ja laskea muistiosoitteita), koska se on vain keskusprosessorin liite.

Yksi keskusprosessorin ja apuprosessorin välisistä vuorovaikutuskaavioista, jota käytetään erityisesti x86-apuprosessoreissa, toteutetaan seuraavasti:

Intel486DX -prosessorista lähtien liukulukuyksikkö integroitiin suorittimeen ja sitä kutsuttiin FPU:ksi. Intel486SX -linjassa FPU-moduuli poistettiin käytöstä ( alkuun prosessorit, joissa oli viallinen FPU, putosivat tälle riville). Intel486SX -prosessoreille julkaistiin myös Intel487SX "apuprosessori" , mutta itse asiassa se oli Intel486DX -prosessori , ja kun se asennettiin, Intel486SX- prosessori poistettiin käytöstä .

Integroinnista huolimatta i486 -prosessorien FPU on muuttumaton samalle sirulle tehty apuprosessori, lisäksi i486 FPU-piiri on täysin identtinen edellisen sukupolven 387DX-approsessorin kanssa kellotaajuuteen asti (puolet keskusprosessorin taajuudesta). FPU:n todellinen integrointi suorittimeen alkoi vasta Pentium MMX -prosessoreilla.

Kolmannen osapuolen x86-apuprosessorit

Weitekin valmistamia x86-alustan rinnakkaisprosessoreita käytettiin laajasti vastaavana ajanjaksona  - he julkaisivat 1167, 2167 piirisarjan muodossa ja sirut 3167, 4167 prosessoreille 8086 , 80286 , 80386 ja 80486 . Intelin apuprosessoreihin verrattuna ne tarjosivat 2-3 kertaa paremman suorituskyvyn, mutta niissä oli yhteensopimaton ohjelmistoliittymä, joka toteutettiin muistikartoitustekniikalla. Se kiteytyi siihen, että pääprosessorin oli kirjoitettava tietoja tietyille Weitekin apuprosessorin ohjaamille muistialueille (sillä ei ollut omaa RAM-muistia). Tietty osoite, johon tallennus tehtiin, tulkittiin tietyksi komennona. Yhteensopimattomuudesta huolimatta sekä ohjelmistokehittäjät että emolevyn valmistajat tukivat laajasti Weitekin apuprosessoreja , jotka tarjosivat pistorasioita tällaisen sirun asentamiseksi niihin.

Useat muut yritykset tuottivat myös erilaisia ​​yhteensopimattomia matemaattisia apuprosessoreita, jotka liitettiin niihin I/O-porttien tai BIOS -keskeytysten kautta , mutta niitä ei käytetty niin laajalti.

Klooniyritykset tuottivat 80287 80387 : n kanssa yhteensopivia apuprosessoreja , jotka toimivat nopeammin kuin vastaavat Intelin prosessorit. Näistä yrityksistä voidaan mainita Cyrix , AMD , Chips & Technologies (C&T) . Joskus näiden apuprosessorien käskyjoukkoa laajennettiin useilla yhteensopimattomilla, esimerkiksi C&T:n analoginen 80287 sisälsi ohjeet työskennellä neljän liukulukuarvon vektorin kanssa. Nämä laajennetut komennot eivät ole saaneet vakavaa tukea ohjelmistovalmistajilta.

Cyrixin EMC87- prosessorit voivat toimia sekä Intel 80387 -ohjelmiston yhteensopivuustilassa että omassa yhteensopimattomassa ohjelmointitilassaan. Heille tarjottiin laitteistoyhteensopivuus 80387 -apuprosessoriliittimen kanssa.

Neuvostoliitossa valmistettiin mikropiiri (KM) 1810VM87 , joka oli 8087 :n analogi .

Muut alustat

Samoin Motorola -prosessoreihin rakennetut PC - emolevyt sisälsivät matemaattisen apuprosessorin ennen kuin tämä yritys kehitti MC68040- prosessorin (johon apuprosessori oli sisäänrakennettu). FPU:na käytettiin pääsääntöisesti 68881 16 MHz tai 68882 25 MHz apuprosessoria. Lähes jokaisessa nykyaikaisessa prosessorissa on sisäänrakennettu apuprosessori.

Weitek tuotti myös matemaattisia apuprosessoreja 68000- ja MIPS-alustoille .

FPU-laite

FPU - rekisterit eivät ole järjestetty taulukoksi, kuten joissakin muissa arkkitehtuureissa, vaan rekisteripinoksi . Näin ollen FPU on pinolaskin , joka toimii käänteisen puolan merkinnän periaatteella [2] [3] . Tämä tarkoittaa, että käskyt käyttävät aina pinon ylintä arvoa toimintojen suorittamiseen, ja pääsy muihin tallennettuihin arvoihin saadaan yleensä pinon käsittelyjen seurauksena. Pinon yläosan kanssa työskennellessä voidaan kuitenkin käyttää samanaikaisesti muita pinon elementtejä, joihin pääsyä varten käytetään suoraa osoitusta pinon yläosaan nähden. Toiminnot voivat myös käyttää RAM-muistiin tallennettuja arvoja. Tavallinen toimintosarja on seuraava. Ennen toimintoa argumentit työnnetään LIFO - pinoon ; kun toiminto suoritetaan, tarvittava määrä argumentteja poistetaan pinosta. Operaation tulos sijoitetaan pinoon, jossa sitä voidaan käyttää jatkolaskuissa tai poistaa pinosta muistiin kirjoitettavaksi. Vaikka FPU:n rekisterien pinoaminen on kätevä ohjelmoijille, se tekee kääntäjien vaikeaksi rakentaa tehokasta koodia.

Käyttöominaisuudet

Kaikissa Intel- ja AMD -prosessoreissa , alkaen 486DX :stä , on sisäänrakennettu matemaattinen apuprosessori , eivätkä ne tarvitse erillistä apuprosessoria (paitsi Intel486SX ). Termiä x87 käytetään kuitenkin edelleen korostamaan prosessorin käskyjen osaa, jota käytetään FPU-pinon reaalilukujen kanssa työskentelemiseen. Näiden ohjeiden erottuva piirre: niiden muistiinpanot alkavat kirjaimella f (englanniksi float ). Kääntäjät voivat käyttää näitä ohjeita tuottamaan koodia, joka on joissain tapauksissa nopeampi kuin koodi, joka käyttää kirjastokutsuja liukulukutoimintojen suorittamiseen.

x87 - ohjeet ovat IEEE-754- yhteensopivia , ts. antaa mahdollisuuden suorittaa laskelmia tämän standardin mukaisesti. Tyypillisesti x87 -käskysarja ei kuitenkaan toimi tiukasti IEEE-754- muotojen mukaisesti, koska käytössä on laajempia rekistereitä kuin yksi- ja kaksinkertaiset tarkkuusnumeromuodot. Siksi aritmeettisten operaatioiden järjestys x87 -sarjassa voi antaa hieman erilaisen tuloksen kuin prosessorilla, joka noudattaa tiukasti IEEE-754- standardia .

3DNow :n tulon jälkeen ! AMD : stä ja sitten SSE : stä alkaen Intelin Pentium III -prosessoreista , yksittäiset tarkkuuslaskelmat tulivat mahdollisiksi ilman FPU-ohjeiden apua ja parannettua suorituskykyä. SSE2 - laajennus ja myöhemmät käskysarjalaajennukset tarjosivat myös nopeat kaksinkertaiset laskelmat (katso IEEE-754- standardi ). Tässä suhteessa nykyaikaisissa tietokoneissa klassisten matemaattisten apuprosessoriohjeiden tarve on vähentynyt merkittävästi. Niitä kuitenkin tuetaan edelleen kaikissa julkaistuissa x86-prosessoreissa, jotta ne ovat yhteensopivia vanhempien sovellusten kanssa ja niiden sovellusten tarpeisiin, jotka vaativat binääri-desimaalimuunnoksia tai laajennettuja tarkkuuslaskelmia (kun kaksinkertainen tarkkuus ei riitä). Tällä hetkellä x87 -komentojen käyttö on edelleen tehokkain tapa suorittaa tällaisia ​​laskelmia.

Tietomuodot

FPU:n sisällä numerot tallennetaan 80-bittisessä liukulukumuodossa (laajennettu tarkkuus), kun taas kirjoittamista tai muistista lukemista voidaan käyttää:

FPU tukee myös erityisiä numeerisia arvoja:

Rekisterit

FPU:ssa on kolme rekisteriryhmää:

Apuprosessorin käskyjoukko

Järjestelmä sisältää noin 80 komentoa. Niiden luokittelu:

Katso myös

Muistiinpanot

  1. Intel 64- ja IA-32-arkkitehtuurien ohjelmistokehittäjän käsikirja. Volume 2A ja 2B: Ohjesarjan viite. Tilausnumerot #253666, #253667
  2. Intel 64- ja IA-32-arkkitehtuurien ohjelmistokehittäjän käsikirja. Osa 1: Perusarkkitehtuuri. Tilausnumero #253665
  3. AMD64-arkkitehtuuriohjelmoijan käsikirja. Osa 1: Sovellusohjelmointi. Julkaisunumero #24592