En matematisk samprocessor är en samprocessor för att utöka instruktionsuppsättningen för den centrala processorn och förse den med funktionen hos en flyttalsfunktionsmodul för processorer som inte har en integrerad modul.
Flyttalsenhet (eller flyttal ; engelsk flyttalenhet (FPU) - del av processorn för att utföra ett brett utbud av matematiska operationer på reella tal .
Enkla " heltals "-processorer för att arbeta med reella tal och matematiska operationer kräver lämpliga supportprocedurer och tid för att utföra dem. Flyttalsoperationsmodulen stöder att arbeta med dem på primitiva nivå - lastning, avlastning av ett reellt tal (till / från specialiserade register ) eller en matematisk operation på dem utförs av ett kommando, på grund av detta, en betydande acceleration av sådana operationer är uppnådd.
x87 är en speciell instruktionsuppsättning för att arbeta med matematiska beräkningar, som är en delmängd av x86- processorarkitekturen . Den fick detta namn eftersom de ursprungliga individuella matematiska coprocessorchipsen hade namn som slutade på 87 . Liksom andra tillägg till processorns grundläggande instruktionsuppsättning är dessa instruktioner inte strikt nödvändiga för att bygga ett fungerande program, men när de implementeras i hårdvara tillåter de vanliga matematiska uppgifter att utföras mycket snabbare. Till exempel innehåller x87- instruktionsuppsättningen instruktioner för att beräkna sinus- eller cosinusvärden .
För x86-familjens processorer 8086/8088 till 386 separerades flyttalsenheten i ett separat chip som kallas en matematisk samprocessor . För att installera en samprocessor på datorkortet fanns en separat kontakt.
Medprocessorn är inte en fullfjädrad processor, eftersom den inte kan utföra många av de operationer som är nödvändiga för detta (till exempel kan den inte arbeta med ett program och beräkna minnesadresser), eftersom den bara är ett bihang till den centrala processorn.
Ett av interaktionsscheman mellan den centrala processorn och samprocessorn, som används i synnerhet i x86-samprocessorer, implementeras enligt följande:
Från och med Intel486DX- processorn integrerades flyttalsenheten i CPU:n och kallades FPU. I Intel486SX- linjen var FPU-modulen inaktiverad (först föll processorer med en defekt FPU in i denna linje). För Intel486SX- processorer släpptes också en Intel487SX "samprocessor" , men i själva verket var det en Intel486DX- processor , och när den installerades inaktiverades Intel486SX- processorn .
Trots integrationen är FPU:n i i486- processorerna en oförändrad coprocessor gjord på samma chip, dessutom är i486 FPU-kretsen helt identisk med föregående generations 387DX coprocessor upp till klockfrekvensen (halva frekvensen av centralprocessorn). Sann integration av FPU:n med CPU:n började först med Pentium MMX-processorerna.
Samprocessorer för x86-plattformen, tillverkade av Weitek , användes i stor utsträckning under motsvarande period - de släppte 1167, 2167 i form av en chipset och chips 3167, 4167, för processorerna 8086 , 80286 , 80386 , 80486 , respektive. Jämfört med samprocessorer från Intel gav de 2-3 gånger högre prestanda, men de hade ett inkompatibelt mjukvarugränssnitt implementerat genom minneskartläggningsteknik. Det kokade ner till att huvudprocessorn var tvungen att skriva information till vissa minnesområden som kontrollerades av Weitek-samprocessorn (det fanns inget eget RAM-minne där). Den specifika adressen där inspelningen gjordes tolkades som ett speciellt kommando. Trots inkompatibiliteten fick Weitek -samprocessorer brett stöd av både mjukvaruutvecklare och moderkortstillverkare, som gav uttag för att installera ett sådant chip på dem.
Ett antal andra företag producerade också olika inkompatibla matematiska samprocessorer, gränssnitt med dem via I/O-portar eller BIOS- avbrott , men de användes inte lika mycket.
Klonföretag producerade samprocessorer som var kompatibla med 80287 80387 , som fungerade snabbare än liknande Intel. Cyrix , AMD , Chips & Technologies (C&T) kan nämnas bland dessa företag . Ibland utökades instruktionsuppsättningen för dessa samprocessorer med flera inkompatibla, till exempel innehöll analogen 80287 från C&T instruktioner för att arbeta med en vektor med fyra flyttalsvärden. Dessa utökade kommandon har inte fått seriöst stöd från mjukvarutillverkare.
EMC87- processorer från Cyrix kunde fungera i både Intel 80387 mjukvarukompatibilitetsläge och sitt eget inkompatibla programmeringsläge. För dem tillhandahölls hårdvarukompatibilitet med 80387 coprocessor-socket.
I Sovjetunionen tillverkades en mikrokrets (KM) 1810VM87 , som var en analog av 8087 .
På samma sätt innehöll PC -moderkort byggda på Motorola-processorer , före utvecklingen av MC68040- processorn (i vilken samprocessorn var inbyggd) av detta företag, en matematisk samprocessor. Som regel användes en 68881 16 MHz eller 68882 25 MHz samprocessor som en FPU. Nästan varje modern processor har en inbyggd coprocessor.
Weitek producerade också matematiska samprocessorer för plattformarna 68000 och MIPS .
FPU- registren är inte organiserade som en array som i vissa andra arkitekturer, utan som en registerstack . Således är FPU en stack-kalkylator som fungerar på principen om omvänd polsk notation [2] [3] . Detta innebär att instruktioner alltid använder det översta värdet på stacken för att utföra operationer, och åtkomst till andra lagrade värden tillhandahålls vanligtvis som ett resultat av manipulationer på stacken. Men när man arbetar med toppen av stapeln kan andra element i stapeln användas samtidigt, för åtkomst till vilka direkt adressering används i förhållande till toppen av stapeln. Operationer kan också använda värden lagrade i RAM. Den vanliga sekvensen av åtgärder är som följer. Före operationen skjuts argumenten till LIFO- stacken ; när operationen utförs tas det nödvändiga antalet argument bort från stacken. Resultatet av operationen placeras på stacken, där det kan användas i ytterligare beräkningar eller tas bort från stacken för att skrivas till minnet. Även om FPU:s stapling av register är bekvämt för programmerare, gör det det svårt för kompilatorer att bygga effektiv kod.
Alla Intel- och AMD -processorer , som börjar med 486DX , har en inbyggd matematisk samprocessor och behöver ingen separat samprocessor (förutom Intel486SX ). Men x87- termen används fortfarande för att markera den del av processorinstruktionerna som används för att arbeta med reella tal på FPU-stacken. Ett utmärkande drag för dessa instruktioner: deras mnemonics börjar med bokstaven f (från engelska float ). Kompilatorer kan använda dessa instruktioner för att producera kod som i vissa fall är snabbare än kod som använder biblioteksanrop för att utföra flyttalsoperationer.
x87 - instruktionerna är IEEE-754- kompatibla , dvs. ge möjlighet att utföra beräkningar i enlighet med denna standard. Vanligtvis fungerar dock inte x87 -instruktionssekvensen strikt enligt IEEE-754- formaten på grund av användningen av bredare register än nummerformaten med enkel och dubbel precision. Därför kan sekvensen av aritmetiska operationer på en x87- uppsättning ge ett något annorlunda resultat än på en processor som strikt följer IEEE-754- standarden .
Efter tillkomsten av 3DNow! från AMD och sedan SSE , från och med Intels Pentium III - processorer , blev enkelprecisionsberäkningar möjliga utan hjälp av FPU-instruktioner och med ökad prestanda. SSE2 -förlängningen och senare instruktionsuppsättningar gav också snabba dubbelprecisionsberäkningar (se IEEE-754- standarden ). I detta avseende, i moderna datorer, har behovet av klassiska matematiska samprocessorinstruktioner minskat avsevärt. De stöds dock fortfarande på alla släppta x86-processorer för kompatibilitet med äldre applikationer och för behoven hos de applikationer som kräver binära-till-decimalomvandlingar eller utökade precisionsberäkningar (när dubbel precision inte räcker). För närvarande är användningen av x87- kommandon fortfarande det mest effektiva sättet att utföra sådana beräkningar.
Inuti FPU:n lagras siffror i 80-bitars flyttalsformat (utökad precision), medan skrivning eller läsning från minnet kan användas:
FPU stöder även speciella numeriska värden:
Det finns tre grupper av register i FPU:
Systemet innehåller cirka 80 kommandon. Deras klassificering:
Processor Technologies | Digital|||||||||
---|---|---|---|---|---|---|---|---|---|
Arkitektur | |||||||||
Instruktionsuppsättning arkitektur | |||||||||
maskinord | |||||||||
Parallellism |
| ||||||||
Genomföranden | |||||||||
Komponenter | |||||||||
Energihantering |