Coprocesoare pentru efectuarea oricăror calcule foarte specializate. Coprocesor - ce este? Descrierea și recenziile lucrării. Coprocesoare din familia Intel x86

Pentru a efectua operații aritmetice în virgulă mobilă, există un procesor aritmetic special numit coprocesor. Spre deosebire de CPU, acesta nu controlează sistemul, ci așteaptă ca comanda CPU să efectueze calcule aritmetice și să genereze rezultate. Potrivit Intel, în comparație cu un procesor, coprocesorul aritmetic poate reduce timpul de execuție al operațiilor aritmetice precum înmulțirea și exponențiarea cu 80% sau mai mult. Viteza cu care se efectuează adunarea și scăderea rămâne în general neschimbată.

Coprocesorul este doar un nume comun pentru acest cip. Este pe deplin numit coprocesor matematic sau unitate de procesare numerică (NPU) sau unitate de procesare în virgulă mobilă (FPU).

Prezența unui coprocesor pe placa de bază nu este obligatorie, așa că în locul lui poate exista un slot gol pentru instalarea ulterioară a unui coprocesor. Excepție fac toate procesoarele 486DX și mai mari - aici coprocesorul este integrat direct în procesor.

Domeniul principal de aplicare a coprocesoarelor este aplicațiile științifice și tehnice asociate cu efectuarea unui număr mare de operații aritmetice. Cu toate acestea, aceasta nu este o limitare a utilizării. De obicei, NPU accelerează orice program - chiar și un program de procesare de text, deoarece lucrul cu blocuri de text și module necesită calcule complexe. De asemenea, coprocesorul accelerează semnificativ procesarea imaginilor grafice și execuția programelor CAD.

RAM

Elementele de memorie formează baza funcționării interne a oricărui sistem de calcul, deoarece cu ajutorul lor datele sunt stocate și pot fi citite din nou în timpul procesării ulterioare.

Pentru ca CPU să execute programe, acestea trebuie să fie încărcate în RAM (o zonă de memorie accesibilă programelor utilizatorului). CPU are acces direct la datele aflate în memoria cu acces aleatoriu (Random Access Memory, RAM), în timp ce procesorul lucrează cu alte memorie „periferice” sau externe (dischete și hard disk) printr-un buffer, care este un tip de RAM care este nu este disponibil pentru utilizator. Numai după ce software-ul a fost citit în RAM de pe un mediu de stocare extern, este posibilă operarea ulterioară a sistemului în ansamblu. RAM este cel mai rapid mediu de stocare dintr-un computer. Ceea ce este esențial important este că informațiile pot fi atât scrise, cât și citite.

RAM are avantajele și dezavantajele sale:

Datorită timpilor scurti de acces la memorie, viteza de procesare a datelor crește semnificativ. Dacă informațiile ar fi citite numai de pe medii externe, utilizatorul ar petrece mult timp așteptând finalizarea unei anumite operațiuni

Dezavantajul RAM este că este memorie temporară. Când alimentarea este oprită, memoria RAM este complet „ștersă” și toate datele care nu sunt scrise pe medii externe se vor pierde pentru totdeauna

RAM aparține categoriei de memorie dinamică, adică conținutul său trebuie „împrospătat” la anumite intervale în timpul funcționării.

Elementul de stocare al memoriei dinamice este un condensator, care poate fi în stare încărcată sau descărcată. Dacă condensatorul este încărcat, atunci pe celulă este scris un 1 logic. Dacă condensatorul este descărcat, atunci pe celulă este scris un 0 logic. Într-un condensator ideal, încărcarea poate fi menținută pe termen nelimitat. Într-un condensator real, există un curent de scurgere, astfel încât informațiile înregistrate în memoria dinamică se vor pierde în timp, deoarece condensatorii elementelor de stocare se vor descărca complet după câteva milisecunde. Pentru a evita pierderea de informații, există un proces de regenerare a memoriei (Refresh).

RAM este o placă (cu excepția modelelor mai vechi de PC, unde cipurile au fost instalate direct în placa de bază), de aproximativ 8 cm lungime, pe care se află cipurile DRAM (Dynamic RAM). O astfel de placă se numește modul și este instalată în sloturile corespunzătoare de pe placa de bază. Recent, modulele DIMM au devenit cele mai răspândite. Au existat și module SIP și SIMM. Modulele sunt introduse în sloturi special concepute pentru ele pe placa de bază, numite bănci.

O caracteristică importantă (pe lângă volumul) RAM este timpul de acces, care caracterizează intervalul de timp în care informațiile sunt scrise sau citite din memorie. Timpul de acces pentru mediile externe, cum ar fi floppy sau hard disk-uri, este exprimat în milisecunde, în timp ce pentru elementele de memorie este măsurat în nanosecunde.

Alocarea memoriei logice

Distribuția logică a RAM este determinată nu numai de sistemul de operare utilizat, ci și de caracteristicile implementării hardware a computerelor compatibile IBM.

Există trei zone logice cele mai importante ale RAM:

Memorie convențională Cea mai importantă zonă de memorie (primii 640 KB). Acesta găzduiește majoritatea programelor de aplicație și date.

UMA (Upper Memory Area) Acesta conține informații care sunt utilizate pentru a interfața programele de aplicație cu diferite carduri de expansiune. (384 KB situat între 640 KB și 1 MB)

XMS (Extended Memory Specification) Toată memoria de peste 1MB. Folosit de aplicațiile Windows

Coprocesor matematic - un coprocesor pentru extinderea setului de comenzi al procesorului central și furnizarea acestuia cu funcționalitatea unei unități în virgulă mobilă pentru procesoarele care nu au un modul integrat.

O unitate în virgulă mobilă (sau unitate în virgulă mobilă (FPU)) este o parte a procesorului pentru efectuarea unei game largi de operații matematice pe numere reale.

Sistemul include aproximativ 80 de comenzi. Clasificarea lor:

1) Comenzi de transmitere a datelor: - Date reale; - Date întregi; - Date zecimale.

2) Comenzi de comparare a datelor: - Date reale; - Date întregi; - Analiza; - De la zero.

3) Comenzi aritmetice: - Date reale: adunare, scădere, înmulțire, împărțire;

4) Date întregi: adunare, scădere, înmulțire, împărțire; - Comenzi aritmetice auxiliare (rădăcină pătrată, modul, schimbare de semn, exponent și mantisă).

5) Comenzi transcendentale: - Trigonometrie: sinus, cosinus, tangent, arctangent; - Calculul logaritmilor și puterilor.

6) Comenzi de control: - Inițializarea coprocesorului; - Lucrul cu mediul; - Lucrul cu stiva; - Comutarea modurilor

Coprocesor- un procesor specializat care extinde capacitățile procesorului central al unui sistem informatic, dar este conceput ca un modul funcțional separat. Din punct de vedere fizic, coprocesorul poate fi un cip separat sau poate fi încorporat în unitatea centrală de procesare (cum este cazul coprocesorului matematic din procesoarele PC începând cu Intel 486DX).

Coprocesor matematic 80x287 într-un bloc de pe placa de bază a unui computer personal.

Se disting următoarele tipuri de coprocesoare:

Coprocesoare matematice de uz general, care de obicei accelerează calculele cu virgulă mobilă,

· coprocesoare I/O (de exemplu, Intel 8089), care scutesc procesorul central de controlul operațiunilor I/O sau extind spațiul de adrese standard al procesorului,

· coprocesoare pentru efectuarea oricăror calcule foarte specializate.

Coprocesoarele pot face parte dintr-un set logic dezvoltat de o anumită companie (de exemplu, Intel a lansat coprocesoarele 8087 și 8089 împreună cu procesorul 8086) sau produse de un producător terță parte (de exemplu, Weitek 1064 pentru Motorola m68k și 1067 pentru Intel). 80286).

Chip-uri generatoare de sunet- microcircuite specializate pentru generarea sunetului. Acestea pot fi folosite pentru a reproduce efecte sonore și muzică sintetizată (vezi chiptune) în computere, sisteme de jocuri (console, aparate) și aparate electrocasnice. Denumirea engleză pentru microcircuite de acest tip este cip de sunet, în terminologia tehnică rusă există o abreviere PGZ- generator de sunet programabil. Ele pot fi toate digitale, toate analogice sau un amestec. Acestea pot include generatoare de frecvență (de obicei bazate pe împărțirea frecvenței ceasului de intrare cu un factor de divizare variabil software), controlere de anvelopă, circuite de redare a probelor, filtre și amplificatoare de semnal.

Generatoarele de sunet pot fi împărțite în două categorii principale - cele care sintetizează direct sunetul și cele care reproduc sunete pre-digitizate. Prima categorie mai poate fi împărțită după principiul de funcționare în sintetizatoare de frecvență simple (construite pe divizoare de frecvență cu componente suplimentare) și sintetizatoare care utilizează metoda modulării în frecvență (sinteza FM, bazată pe modularea reciprocă a mai multor generatoare de sunet).

În rusă, cipurile generatoare de sunet sunt adesea numite (co)procesoare de sunet. Cu toate acestea, această definiție este incorectă - cipurile generatoare de sunet nu procesează datele de sunet (funcția principală a procesorului), ele generează sunet conform unui algoritm definit de hardware, conform instrucțiunilor procesorului de sistem extern acestora. Nume procesor de sunet poate fi aplicat la procesoarele de semnal digital utilizate pentru procesarea sunetului (de exemplu, crearea unui efect de ecou controlat de software), precum și la cipurile generatoare de sunet care conțin un microprocesor.

GPU(Engleză) unitate de procesare grafică, GPU) - un dispozitiv separat pe un computer personal sau o consolă de jocuri care realizează randarea grafică. GPU-urile moderne procesează și afișează grafica computerizată foarte eficient. Datorită arhitecturii lor specializate, sunt mult mai eficienți la procesarea informațiilor grafice decât o unitate centrală de procesare tipică. Procesorul grafic din adaptoarele video moderne este folosit ca accelerator grafic 3D.

Poate fi folosit atât ca parte a unei plăci video discrete, cât și în soluții integrate (încorporate în procesorul northbridge sau hibrid).

Procesor probabilistic operează cu probabilități la nivel hardware. Aparatul matematic se bazează pe teorema lui Bayes

Într-un fel, procesorul probabilistic implementează calculul analogic folosind tehnologia CMOS. Această abordare, teoretic, face posibilă implementarea eficientă a calculelor aproximative bazate pe logica fuzzy sau rețelele neuronale

· 1 Aplicații

· 2 prototipuri

Domenii de aplicare[modifica | editați textul sursă]

Un procesor probabilistic este un procesor specializat și va fi folosit în primul rând în sistemele de recunoaștere a modelelor. De exemplu, în biometrie, pentru diagnosticarea bolilor, în diverse sisteme de monitorizare, în sisteme tehnice de viziune, sisteme de recunoaștere a vocii, filtrarea spam-ului, phishing, determinarea bonității debitorilor și multe alte sarcini. Abordarea probabilistică presupune și rezolvarea problemelor tehnice folosind metode stocastice (metode Monte Carlo), cu orice precizie de soluție necesară.

Se are în vedere ca procesorul de probabilitate să poată fi utilizat în calculatoarele moderne ca un alt coprocesor împreună cu un procesor grafic, procesor de semnal sau FPGA, oferind viteză și eficiență ridicată pentru rezolvarea unei game largi de probleme de specialitate.

Coprocesor matematic- coprocesor pentru extinderea setului de comenzi al procesorului central și dotarea acestuia cu funcționalitate unitate în virgulă mobilă, pentru procesoarele care nu au un modul integrat.

Unitate în virgulă flotantă(sau punctul de plutire; Engleză unitate în virgulă mobilă (FPU)) - parte a procesorului pentru efectuarea unei game largi de operații matematice pe numere reale.

Procesoarele simple „întregi” pentru manipularea numerelor reale și a operațiilor matematice necesită rutine de suport adecvate și timp pentru a le executa. Modulul de operații în virgulă mobilă acceptă lucrul cu ele la nivel primitiv - încărcarea, descărcarea unui număr real (în/din registrele specializate) sau o operație matematică asupra lor este efectuată printr-o singură comandă, din acest motiv o accelerare semnificativă a unor astfel de operații este realizat.

· 1 coprocesoare

o 1.1 coprocesoare din familia Intel x86

o 1.2 Coprocesoare x86 terțe

o 1.3 Alte platforme

· Dispozitiv cu 2 FPU

o 2.1 Formate de date

o 2.2 Registre

o 2.3 Sistem de comandă coprocesor

· 3 Vezi de asemenea

· 4 Note

Coprocesoare[modifica | editați textul sursă]

Articolul principal:X87

x87 este un set special de instrucțiuni pentru lucrul cu calcule matematice, care este un subset al arhitecturii procesorului x86. A primit acest nume deoarece cipurile individuale originale ale coprocesorului matematic aveau nume care se termină în 87 . Ca și alte extensii ale setului de instrucțiuni de bază al procesorului, aceste instrucțiuni nu sunt strict necesare pentru a construi un program de lucru, dar atunci când sunt implementate în hardware, ele permit îndeplinirea sarcinilor matematice comune mult mai rapid. De exemplu, într-un set de instrucțiuni x87 Există comenzi pentru calcularea valorilor sinus sau cosinus.

Coprocesoare Intel din familia x86[modifica | editați textul sursă]

Pentru familia de procesoare x86 de la 8086/8088 la 386, unitatea în virgulă mobilă a fost alocată unui cip separat numit coprocesor matematic. A fost prevăzut un conector separat pentru instalarea coprocesorului pe placa computerului.

Coprocesorul nu este un procesor cu drepturi depline, deoarece nu știe să facă multe dintre operațiunile necesare pentru aceasta (de exemplu, nu știe să lucreze cu un program și să calculeze adrese de memorie), fiind doar un anex al procesorul central.

Una dintre schemele de interacțiune între procesorul central și coprocesor, utilizată, în special, în coprocesoarele x86, este implementată după cum urmează:

· Coprocesorul este conectat la magistralele procesorului central și are, de asemenea, câteva semnale speciale pentru sincronizarea procesoarelor între ele.

· Unele dintre codurile de comandă ale procesorului central sunt rezervate coprocesorului, acesta monitorizează fluxul comenzilor, ignorând celelalte comenzi. Procesorul central, dimpotrivă, ignoră comenzile coprocesorului, calculând adresa din memorie doar dacă comanda presupune accesarea acesteia. CPU efectuează un ciclu de citire inactiv, permițând coprocesorului să citească adresa din magistrala de adrese. Dacă coprocesorul are nevoie de acces suplimentar la memorie (pentru a citi sau scrie rezultate), îl realizează prin captură de magistrală.

· După primirea comenzii și a datelor necesare, coprocesorul începe să o execute. În timp ce coprocesorul execută comanda, procesorul central continuă să execute programul, în paralel cu calculele coprocesorului. Dacă instrucțiunea următoare este și o instrucțiune de coprocesor, procesorul se oprește și așteaptă ca coprocesorul să finalizeze instrucțiunea anterioară.

· Există, de asemenea, o comandă specială de așteptare (FWAIT), care oprește forțat procesorul până când calculele sunt finalizate (dacă rezultatele acestora sunt necesare pentru a continua programul). În prezent, comanda este utilizată numai pentru a gestiona excepțiile atunci când se lucrează cu virgulă mobilă; munca procesorului și a coprocesorului este sincronizată transparent cu programatorul.

Începând cu procesorul Intel486DX, unitatea în virgulă mobilă a fost integrată în procesorul central și numită FPU. În linia Intel486SX, modulul FPU a fost dezactivat (la început, această linie includea procesoare cu un FPU defect). Pentru procesoarele Intel486SX, a fost lansat și un „coprocesor” Intel487SX, dar, de fapt, era un procesor Intel486DX și atunci când a fost instalat, procesorul Intel486SX a fost dezactivat.

În ciuda integrării, FPU-ul din procesoarele i486 este un coprocesor neschimbat, implementat pe același cip; în plus, circuitul FPU i486 este complet identic cu coprocesorul 387DX din generația anterioară până la frecvența de ceas (jumătate din frecvența procesorului central). Integrarea adevărată a FPU-ului cu procesorul central a început doar la procesoarele Pentium modelului MMX.

O parte importantă a arhitecturii microprocesorului Intel este prezența unui dispozitiv pentru procesarea datelor numerice în format virgulă mobilă, numit coprocesor matematic.Arhitectura calculatoarelor bazate pe microprocesoare s-a bazat inițial exclusiv pe aritmetica întregului. Odată cu creșterea puterii, au început să apară dispozitive pentru procesarea numerelor în virgulă mobilă. În arhitectura familiei de microprocesoare Intel 8086, un dispozitiv pentru procesarea numerelor în virgulă mobilă a apărut ca parte a unui computer bazat pe microprocesorul i8086/88 și a fost numit coprocesor matematic sau pur și simplu coprocesor. Alegerea acestui nume s-a datorat faptului că

  • în primul rând, acest dispozitiv a fost destinat să extindă capacitățile de calcul ale procesorului principal;
  • în al doilea rând, a fost implementat ca un cip separat, adică prezența sa era opțională. Cipul de coprocesor pentru microprocesorul i8086/88 a fost numit i8087.

Odată cu apariția noilor modele de microprocesoare Intel, și coprocesoarele s-au îmbunătățit, deși modelul lor software a rămas practic neschimbat. Ca dispozitive separate (și, în consecință, opționale într-o anumită configurație de computer), coprocesoarele au fost păstrate până la modelul de microprocesor i386 și au fost denumite i287 și, respectiv, i387. Începând cu modelul i486, coprocesorul este implementat în același pachet ca și microprocesorul principal și, prin urmare, este o parte integrantă a computerului.

Principalele caracteristici ale coprocesorului matematic:

  • Suport complet pentru standardele aritmetice IEEE-754 și 854 în virgulă mobilă. Aceste standarde descriu atât formatele de date cu care trebuie să lucreze coprocesorul, cât și setul de funcții pe care le implementează;
  • suport pentru algoritmi numerici pentru calcularea valorilor funcțiilor trigonometrice, logaritmi etc.;
  • procesarea numerelor zecimale cu precizie de 18 biți, ceea ce permite coprocesorului să efectueze operații aritmetice fără a rotunji numere zecimale întregi cu valori de până la 10 18;
  • procesarea numerelor reale din intervalul ±3,37x10 -4932 ...1,18x10 +4932.

Este descrisă forma de reprezentare a numerelor în virgulă mobilă.

Forma generală de reprezentare a numerelor reale sugerează posibilitatea plasării următoarelor tipuri în grila de biți.

Tip de numere Semn grad Întregul mantisa
+∞ 0 11…11 1 00…00
pozitiv
normalizat
0 00…01 — 11…10 1 00…00 — 11…11
pozitive nestandardizate 0 00…00 0 00…00 — 11…11
0 0, 1 00…00 0 00…00
negativ nestandardizat 1 00…00 0 00…00 — 11…11
negativ normalizat 1 00…01 — 11…10 1 00…00 — 11…11
-∞ 1 11…11 1 00…00
nenumărat
(NaN - Nu este un număr)
* 11…11 1 **…** ≠0

Numerele de precizie simple și dublă (float (DD) și, respectiv, dublu (DQ)) pot fi reprezentate numai în formă standardizată. În acest caz, bitul părții întregi a numărului este ascuns și implică un 1 logic. Cei 23 (52) de biți rămași stochează mantisa binară a numărului.

Numerele duble de precizie extinsă (dublu lung (DT)) pot fi reprezentate fie în formă normalizată, fie în formă nestandardizată, deoarece bitul întreg al numărului nu este ascuns și poate lua valorile 0 sau 1.

Principalul tip de date cu care operează coprocesorul matematic este datele de 10 octeți (DT).

Model software coprocesor

Modelul software al coprocesorului este un set de registre, fiecare având propriul său scop funcțional.

În modelul software coprocesor, se pot distinge trei grupuri de registre:

  • Opt registre r0...r7, care formează baza modelului software coprocesor - stiva de coprocesoare . Dimensiunea fiecărui registru este de 80 de biți. Această organizare este tipică pentru dispozitivele specializate în procesarea algoritmilor de calcul.
  • Trei registre de servicii:
    — coprocessor status register swr (Status Word Register) - reflectă informații despre starea curentă a coprocesorului;
    — registrul de control al coprocesorului cwr (Control Word Register) - controlează modurile de funcționare ale coprocesorului;
    — tag register twr (Tags Word Register) - folosit pentru a monitoriza starea fiecăruia dintre registrele stivei.
  • Două registre pointer - comenzile dpr (Registrul punctului de date) și ipr (Registrul punctului de instrucție). Acestea sunt concepute pentru a stoca informații despre adresa instrucțiunii care a cauzat excepția și adresa operandului acesteia. Acești indicatori sunt utilizați atunci când se gestionează excepții (dar nu pentru toate comenzile).

Toate registrele specificate sunt accesibile programatic. Totuși, accesul la unele dintre ele este destul de ușor; în acest scop, există comenzi speciale în sistemul de comandă al coprocesorului. Alte registre sunt mai greu de accesat deoarece nu există comenzi speciale pentru aceasta, așa că trebuie efectuate pași suplimentari.

registru de stare swr– reflectă starea curentă a coprocesorului după ce ultima comandă a fost executată. Registrul swr conține câmpuri care vă permit să determinați: care registru este vârful curent al stivei de coprocesor, ce excepții au apărut după executarea ultimei comenzi, care sunt caracteristicile execuției ultimei comenzi (un fel de analog al registrului de steaguri). a procesorului principal).

Din punct de vedere structural, registrul swr este format din:

  • 6 steaguri de excepție PE, OE, UE, ZE, DE, IE.
    Excepțiile sunt un tip de întrerupere, cu ajutorul căreia procesorul informează programul despre unele caracteristici ale execuției sale efective. Coprocesorul are și capacitatea de a ridica astfel de întreruperi atunci când apar anumite situații (nu neapărat eronate). Toate excepțiile posibile sunt reduse la 6 tipuri, fiecare dintre ele corespunzând la 1 bit în registrul swr. Programatorul nu trebuie să scrie un handler pentru a răspunde la situația care a dus la o excepție. Coprocesorul poate răspunde independent la multe dintre ele. Aceasta se numește gestionarea implicită a excepțiilor. Pentru ca un anumit tip de excepție să fie tratat în mod implicit, excepția trebuie lăsată nemascata. Această acțiune este efectuată prin setarea bitului corespunzător din registrul de control al coprocesorului cwr la 1. Tipuri de excepții capturate folosind registrul swr:
    • IE (Invalide operation Error) - cod de operare invalid;
    • DE (Denormalized operand Error) - operand nenormalizat;
    • ZE (divide by Zero Error) - eroare de împărțire la zero;
    • OE (Eroare de depășire) - eroare de depășire. Apare atunci când ordinea unui număr depășește intervalul maxim permis;
    • UE (Underflow Error) - eroare anti-depășire. Apare atunci când rezultatul este prea mic (aproape de zero);
    • PE (Eroare de precizie) - eroare de precizie. Setați când coprocesorul trebuie să rotunjească rezultatul deoarece nu poate fi reprezentat cu acuratețe. Astfel, coprocesorul nu va putea niciodată să împartă cu precizie 10 la 3.

    Când apare oricare dintre aceste șase tipuri de excepții, bitul corespunzător din registrul swr este setat la unu, indiferent dacă excepția a fost mascată în registrul cwr sau nu.

  • Bit de eroare a stivei coprocesorului SF (Stack Fault). Bitul este setat la 1 dacă apare una din cele trei situații de excepție - PE, UE sau IE. În special, instalarea sa informează despre o încercare de a scrie într-o stivă plină sau, dimpotrivă, o încercare de a citi dintr-o stivă goală. După ce valoarea acestui bit a fost analizată, acesta trebuie resetat la 0 din nou, împreună cu biții PE, UE și IE (dacă au fost setați);
  • bit din eroarea totală a coprocesorului ES (Error Summary). Bitul este setat la 1 dacă apare oricare dintre cele șase excepții enumerate mai sus;
  • patru biți c0…c3 (Cod de condiție) - cod de stare. Scopul acestor biți este similar cu steagurile din registrul EFLAGS al procesorului principal - să reflecte rezultatul execuției ultimei comenzi a coprocesorului.
  • câmp TOP pe trei biți. Câmpul conține un indicator de registru către vârful curent al stivei.
  • coprocesorul ocupat bit B.

Registrul de control coprocesor cwr– determină caracteristicile prelucrării datelor numerice. Folosind câmpurile din registrul cwr, puteți ajusta acuratețea calculelor numerice, controlați rotunjirea și măști excepțiile.

Se compune din:

  • șase măști de excepție PM, UM, OM, ZM, DM, IM;
  • Câmpuri de control al preciziei PC (Precision Control);
  • RC (Rounding Control) câmpuri de control pentru rotunjire.

Măștile de excepție sunt concepute pentru a masca excepțiile, a căror apariție este înregistrată folosind șase biți ai registrului swr. Dacă orice biți de mască de excepție din registrul cwr sunt setați la 1, atunci excepțiile corespunzătoare vor fi gestionate de coprocesorul însuși. Dacă bitul de mască de excepție corespunzător al registrului cwr conține un 0 pentru orice excepție, atunci întreruperea int 16 (10h) va fi declanșată atunci când apare o excepție de acest tip. Sistemul de operare trebuie să conțină (sau programatorul trebuie să scrie) un handler pentru această întrerupere. El trebuie să afle cauza întreruperii și apoi, dacă este necesar, să o corecteze și, de asemenea, să ia alte măsuri.

Câmpul de control de precizie de 2 biți PC este utilizat pentru a selecta lungimea mantisei. Valorile posibile în acest câmp înseamnă:

  • PC =00 - lungime mantisă 24 biți;
  • PC =10 - lungime mantisă 53 biți;
  • PC =11 - lungimea mantisei 64 de biți.

Valoarea implicită a câmpului este PC =11.

Câmpul de control al rotunjirii RC vă permite să controlați procesul de rotunjire a numerelor în timpul funcționării coprocesorului. Necesitatea unei operații de rotunjire poate apărea într-o situație în care, după executarea următoarei comenzi a coprocesorului, se obține un rezultat nereprezentabil, de exemplu, o fracție periodică. Setând una dintre valorile în câmpul RC, puteți rotunji în direcția dorită.
Valorile câmpului RC cu algoritmul de rotunjire corespunzător:

  • 00 - valoarea este rotunjită la cel mai apropiat număr care poate fi reprezentat în grila de biți a registrului coprocesorului;
  • 01 - valoarea este rotunjită în jos;
  • 10 - valoarea este rotunjită în sus;
  • 11 - partea fracționară a numărului este aruncată. Folosit pentru a reduce o valoare la o formă care poate fi utilizată în operații aritmetice cu numere întregi.

Bitul 12 din registrul cwr este fizic absent și este citit ca 0.

twr tag register– este o colecție de câmpuri pe doi biți. Fiecare câmp corespunde unui anumit registru fizic de stivă și își caracterizează starea curentă. Instrucțiunile coprocesorului folosesc acest registru, de exemplu, pentru a determina dacă valorile pot fi scrise în aceste registre. O schimbare în starea oricărui registru de stivă este reflectată în conținutul câmpului de 2 biți al registrului de etichete corespunzător acestui registru. Următoarele valori sunt posibile în câmpurile registrului de etichete:

  • 00 - registrul stivei coprocesorului este ocupat cu o valoare valabilă diferită de zero;
  • 01 - registrul stivei coprocesorului conține o valoare zero;
  • 10 - registrul stivei coprocesorului conține una dintre valorile numerice speciale, cu excepția zero;
  • 11 - registrul este gol și poate fi scris. Această valoare într-un câmp de registru de etichete de doi biți nu înseamnă că toți biții din registrul de stivă corespunzător trebuie să fie zero.
Cum funcționează coprocesorul

Stiva de registre a coprocesorului este organizată după principiul inelului. Printre cele opt registre care alcătuiesc stiva, nu există niciunul care să fie vârful stivei. Toate registrele de stivă sunt absolut identice și au drepturi egale din punct de vedere funcțional. Partea superioară a stivei de inele coprocesor plutește. Vârful curent este controlat în hardware folosind câmpul superior de 3 biți al registrului swr.


Câmpul de sus înregistrează numărul registrului stivei r0...r7, care este în prezent partea de sus a stivei.
Instrucțiunile coprocesorului nu operează cu numerele fizice ale registrelor de stivă r0...r7, ci cu numerele lor logice st(0)...st(7). Folosind numere logice, este implementată adresarea relativă a registrelor stivei de coprocesor. De exemplu, dacă vârful curent înainte de a scrie în stivă este registrul stivei fizice r3, atunci după scrierea în stivă, vârful curent devine registrul stivei fizice r2. Adică, pe măsură ce stiva este scrisă, indicatorul din partea de sus a stivei se deplasează către numerele inferioare ale registrelor fizice (descrește cu unu). Dacă vârful curent este r0, atunci după ce se scrie următoarea valoare în stiva coprocesorului, vârful său curent va deveni registrul fizic r7. În ceea ce privește numerele logice ale registrelor stivei st(0)...st(7), ele se deplasează odată cu modificarea vârfului curent al stivei. Partea superioară logică a stivei este întotdeauna numită st(0) .
Deoarece dezvoltatorul manipulează numere de registru de stivă relative mai degrabă decât absolute atunci când scrie un program, el poate avea dificultăți în interpretarea conținutului registrului etichetei twr cu registrele stivei fizice corespunzătoare. Ca legătură de legătură, este necesar să se utilizeze informații din câmpul superior al registrului swr. Așa este implementat principiul inelului.
Această organizare a stivei are o mare flexibilitate, în special atunci când trece parametrii unei proceduri. Pentru a crește flexibilitatea dezvoltării și utilizării procedurilor, nu este recomandabil să le legați de resurse hardware (numerele registrului fizic al coprocesorului) în ceea ce privește parametrii transmisi. Este mult mai convenabil să specificați ordinea parametrilor transmisi sub formă de numere de registru logic. O astfel de metodă de transfer ar fi lipsită de ambiguitate și nu ar cere dezvoltatorului să cunoască detalii inutile despre implementările hardware ale coprocesorului. Numerotarea logică a registrelor coprocesorului, susținută la nivel de set de instrucțiuni, implementează în mod ideal această idee. În acest caz, nu contează în ce registru fizic al stivei de coprocesoare au fost plasate datele înainte de a apela subrutinei; doar ordinea parametrilor de pe stivă determină. Din acest motiv, este important ca subrutina să cunoască doar ordinea în care parametrii trecuți sunt plasați pe stivă.

Principiul de funcționare al coprocesorului împreună cu procesorul central
Procesorul și coprocesorul au propriile lor sisteme de instrucțiuni separate și formate de date prelucrate. Deși un coprocesor este din punct de vedere arhitectural un dispozitiv de calcul separat, el nu poate exista separat de procesorul principal. Procesorul și coprocesorul, fiind două dispozitive de calcul independente, pot funcționa în paralel. Dar această paralelizare se aplică doar execuției comenzilor. Ambele procesoare sunt conectate la o magistrală comună de sistem și au acces la aceleași informații. Procesorul principal inițiază întotdeauna procesul de preluare a următoarei instrucțiuni. După eșantionare, comanda ajunge la ambele procesoare simultan. Orice comandă de coprocesor are un cod de operare, primii cinci biți având valoarea 11011. Când codul de operare începe cu acești biți, procesorul principal, pe baza conținutului ulterioar al codului de operare, determină dacă această comandă necesită acces la memorie. . Dacă acesta este cazul, atunci procesorul principal generează adresa fizică a operandului și accesează memoria, după care conținutul celulei de memorie este expus magistralei de date. Dacă nu este necesar acces la memorie, atunci procesorul principal termină de lucru la instrucțiunea dată (fără a încerca să o execute) și începe decodificarea următoarei instrucțiuni din fluxul de instrucțiuni de intrare curent. Comanda selectată intră în coprocesor simultan cu procesorul principal. Coprocesorul, după ce a determinat din primii cinci biți că următoarea comandă aparține sistemului său de instrucțiuni, începe execuția acesteia. Dacă o instrucțiune necesită operanzi din memorie, coprocesorul accesează magistrala de date pentru a citi conținutul celulei de memorie, care în acel moment este furnizat de procesorul principal.

În anumite cazuri, este necesar să se coordoneze funcționarea ambelor dispozitive. De exemplu, dacă în fluxul de intrare o comandă de la coprocesor este imediat urmată de o comandă de la procesorul principal care utilizează rezultatele comenzii anterioare, atunci coprocesorul nu va avea timp să-și execute comanda înaintea procesorului principal, după ce a omis. comanda coprocesorului, execută propria sa. În acest caz, logica programului va fi ruptă. Este posibilă și o altă situație. Dacă fluxul de comenzi de intrare conține o secvență de mai multe comenzi de coprocesor, procesorul le va trece foarte repede, dar trebuie să ofere o interfață externă coprocesorului. Acestea și alte situații, mai complexe, duc la necesitatea sincronizării muncii a două procesoare între ele. La primele modele de microprocesor, acest lucru se realiza prin inserarea unei comenzi speciale wait sau fwait înainte sau după fiecare comandă de coprocesor. Lucrarea acestei comenzi a fost de a suspenda activitatea procesorului principal până când coprocesorul a terminat de lucrat la ultima comandă. La modelele cu microprocesor (începând de la i486), o astfel de sincronizare se realizează automat. Dar pentru unele comenzi din grupul comenzilor de control coprocesor, se poate alege între comenzi cu sincronizare (în așteptare) și fără ea.

Un coprocesor matematic este un modul special pentru efectuarea de operații în virgulă mobilă care funcționează împreună cu procesorul central.
Un coprocesor matematic nu este un element obligatoriu al unui computer personal. În principiu, îl poți refuza. Acest lucru a fost făcut în trecut din motive de economie.
Cu toate acestea, la rezolvarea problemelor care necesitau un număr mare de calcule matematice, de exemplu, în calcule științifice sau de inginerie, problema creșterii performanței computerului a devenit acută.
Pentru a face acest lucru, au decis să folosească un procesor special suplimentar, care este „ajustat” pentru a efectua operații matematice și le implementează de multe ori mai rapid decât procesorul central. Astfel, a fost posibilă creșterea performanței procesorului central printr-un modul special - un coprocesor matematic.
Spre deosebire de procesorul central, coprocesorul matematic nu controlează cea mai mare parte a circuitelor computerului. În schimb, toate activitățile coprocesorului matematic sunt determinate de procesorul central, care poate trimite comenzi coprocesorului matematic pentru a executa programe și a genera rezultate. În modul normal, unitatea centrală de procesare îndeplinește toate funcțiile computerului. Și numai atunci când se întâlnește o sarcină pe care coprocesorul matematic o poate gestiona mai bine, i se oferă date și comenzi, iar procesorul central așteaptă rezultatele. Astfel de probleme includ, de exemplu, operații matematice între numere reale (operații între numere în virgulă mobilă), unde numerele sunt reprezentate printr-o mantisă și o ordonată (o putere zecimală a unui număr care determină poziția virgulei zecimale).
Dacă mai devreme, în calculatoarele din primele generații (i80386, i80486), modulul coprocesor matematic a fost instalat pe placa de bază ca un cip separat, atunci în computerele moderne nu este necesară utilizarea unui coprocesor matematic ca cip separat, deoarece este deja încorporat în procesorul central.
Beneficiile pe care le obțineți în urma utilizării unui coprocesor matematic depind de tipul de probleme pe care le rezolvați pe computer.
Potrivit INTEL, coprocesorul matematic poate reduce timpul de execuție al operațiilor matematice, cum ar fi înmulțirea, împărțirea și exponențiarea cu 80 la sută sau mai mult. Viteza operațiilor matematice simple, cum ar fi adunarea și scăderea, rămâne neschimbată.
Din punct de vedere practic, performanța unui computer personal legat de pregătirea textului și întreținerea bazei de date (funcții care nu necesită calcule matematice complexe) nu pot fi îmbunătățite de un coprocesor matematic. Cu toate acestea, veți obține o creștere vizibilă a productivității atunci când efectuați calcule științifice și de inginerie, procesați date statistice, precum și atunci când lucrați cu grafică, deoarece aceasta din urmă necesită calcule matematice intensive.

Utilizatorii obișnuiți, de obicei, nu se gândesc niciodată la ce este un coprocesor, iar marea majoritate nici măcar nu știu despre existența lui. Totul se schimbă atunci când sistemul de operare, cu o persistență de invidiat, începe să acționeze și afișează mesaje că driverul corespunzător nu a fost găsit. Ce să faci într-o astfel de situație? Există destul de multe soluții care pot fi găsite, dar fără a înțelege pe deplin ce este acest dispozitiv, niciuna dintre ele nu va rezolva pe deplin problema care a apărut.

Ce este un coprocesor: înțelegere generală

Te-ar putea interesa:

În primul rând, să ne uităm la ce este și pentru ce este. Pe baza numelui acestui dispozitiv, este ușor de concluzionat că acesta este un fel de procesor suplimentar care este instalat în sistemul computerizat împreună cu cel principal (central). La fel ca procesorul, coprocesorul este montat pe placa de baza. Cu toate acestea, este necesar să se facă distincția între principalele opțiuni pentru instalarea acestuia. În ceea ce privește dispozitivul coprocesor, acesta poate fi prezentat atât sub forma unui microcircuit separat (cip), pentru care pe placa de bază este alocată o locație specială de montare (autobuz), cât și sub forma unei componente încorporate direct în procesorul central. .