Etikett: numerisk beräkning

  • Intel 8087 – chippet som lärde PC:n att räkna på riktigt

    När persondatorn slog igenom i början av 1980-talet var den förvånansvärt dålig på matematik. Heltalsberäkningar gick bra, men så fort man behövde arbeta med decimaltal, trigonometriska funktioner eller avancerade vetenskapliga beräkningar blev allt långsamt. Lösningen fick ett eget chip: Intel 8087, världens första flyttalsprocessor för x86-plattformen.

    Detta tillägg förvandlade PC:n från en ren kontorsmaskin till ett verktyg som kunde användas för tekniska, vetenskapliga och ingenjörsmässiga beräkningar.

    Varför behövdes en separat matematikprocessor?

    De tidiga x86-processorerna, som Intel 8086 och Intel 8088, saknade hårdvarustöd för flyttalsaritmetik. Alla beräkningar med decimaltal fick därför utföras i mjukvara, vilket ofta var hundratals gånger långsammare än motsvarande hårdvara.

    8087 konstruerades som en koprocessor som arbetade parallellt med huvudprocessorn. Den tog hand om flyttalsoperationer som addition, multiplikation, division, kvadratrötter samt mer avancerade funktioner som logaritmer och trigonometri. I många program ökade prestandan dramatiskt, i vissa fall med flera hundra procent.

    Hur samarbetade 8087 med huvudprocessorn?

    Samarbetet mellan 8087 och huvudprocessorn var ovanligt elegant för sin tid. När huvudprocessorn stötte på en särskild instruktion markerad som ett så kallat escape-opcode ignorerade den själv operationen. I stället snappade 8087 upp instruktionen direkt från databussen och utförde beräkningen.

    Under tiden kunde huvudprocessorn fortsätta exekvera annan kod. Det innebar att systemet faktiskt kunde arbeta parallellt: heltalsberäkningar i CPU:n och flyttalsberäkningar i koprocessorn samtidigt. För att undvika att 8087 fick nya instruktioner innan den var klar användes ibland WAIT-instruktionen, men trots detta var vinsten i beräkningshastighet betydande.

    Stackarkitekturen som förbryllade programmerare

    Till skillnad från vanliga x86-register använde 8087 inte ett direkt adresserbart registerset. I stället arbetade den med en stack av åtta flyttalsregister, numrerade från st0 till st7. Instruktionerna placerade värden på stacken, utförde beräkningar och tog bort resultat igen.

    Denna modell gjorde instruktionerna kraftfulla och kompakta, men den krävde noggrann hantering. Felaktig användning kunde leda till stacköver- eller underflöden, något som både programmerare och kompilatorer fick lära sig att hantera. Stackmodellen kom senare att leva vidare i hela x87-familjen.

    Grunden till IEEE:s flyttalsstandard

    Under utvecklingen av 8087 lade Intel stor vikt vid numerisk korrekthet. Avrundning, representation av mycket stora och mycket små tal samt förutsägbara resultat var centrala mål. Detta arbete blev en viktig grund för den internationella standarden IEEE 754, som än i dag definierar hur flyttal fungerar i de flesta datorer.

    8087 introducerade även ett internt 80-bitars flyttalsformat med extra precision. Detta format används fortfarande internt i x87-enheter för att minska avrundningsfel vid långa och komplexa beräkningar.

    Ett genombrott för PC-plattformen

    När IBM inkluderade en särskild koprocessorsockel på IBM PC:s moderkort ökade intresset för 8087 kraftigt. Program för CAD, teknisk simulering och vetenskapliga beräkningar kunde nu köras på en vanlig PC i stället för på dyra minidatorer.

    Detta bidrog starkt till att etablera persondatorn som ett seriöst arbetsverktyg även inom tekniska och akademiska miljöer.

    Från separat chip till integrerad funktion

    Efter 8087 följde 80287 och 80387, men med Intel 80486DX integrerades flyttalsenheten direkt i huvudprocessorn. Därmed försvann behovet av separata matematikprocessorer.

    Trots detta lever arvet kvar. Många av de principer, instruktioner och format som introducerades med 8087 finns fortfarande kvar i moderna system, om än ofta dolda bakom mer avancerade exekveringsenheter.

    Slutsats

    Intel 8087 var ett specialiserat och relativt dyrt chip, men dess betydelse kan knappast överskattas. Den gjorde avancerad matematik praktiskt möjlig på persondatorer, lade grunden för internationella standarder och förändrade hur PC-plattformen användes.

    Det var chippet som gav persondatorn förmågan att räkna på riktigt.

    Youtube innehåll om Intel 8087

    Teknisk faktaruta: Intel 8087

    Typ
    Flyttalskoprocessor (FPU) för 8086/8088
    Introducerad
    1980
    Klockfrekvens
    Ca 4–10 MHz (beroende på variant)
    Arkitektur
    x87 (tillägg till x86-16)
    Register
    8 nivåer djup flyttalsstack (st0–st7), intern 80-bitars precision
    Dataformat
    32-bit (single), 64-bit (double), 80-bit (extended) samt BCD- och heltalsformat
    Instruktioner
    Flyttalsinstruktioner (ofta med F-prefix, t.ex. FADD, FMUL); kodas via ESC/”11011”-mönster
    Samarbete med CPU
    Parallell exekvering: 8087 övervakar buss/instruktionsflöde och arbetar samtidigt som 8086/8088
    Synkronisering
    Program kan behöva vänta in coprocessorn med WAIT/FWAIT
    Antal transistorer
    Uppges ofta till runt 65 000 (källor varierar)
    Tillverkningsteknik
    HMOS, ungefär 4,5 µm (senare krympt till cirka 3 µm)
    Kapsel
    40-pin DIP (vanligtvis keramisk för bättre värmeavledning)
    Efterföljare
    80287 (senare integrerad FPU från och med 80486DX)