O arhitectură externă a procesorului sau arhitectura setului de instrucțiuni ( ISA , arhitectura engleză set de instrucțiuni ), sau doar arhitectura (procesor) este specificația funcțională a unui procesor , punctul de vedere al mașinii de limbaj programator. Arhitectura include în special datele unui set de instrucțiuni , al unui set de registre vizibile programatorului, al unei organizări a memoriei și a intrărilor și ieșirilor, modalitățile unui posibil suport multiprocesor etc.
Termenul extern folosit aici face posibilă distincția bine de microarhitectură sau arhitectură internă , care se referă la implementarea practică a comportamentului specificat de o arhitectură externă. O anumită arhitectură externă poate fi implementată sub forma mai multor microarhitecturi.
O arhitectură de procesor extern este modelul de procesor exterior, adică de programator în limbaj mașină , The compilatorul sau nucleul a sistemului de operare . Aceasta este interfața dintre hardware și software.
Această interfață poate fi implementată în diverse procesoare. Organizarea practică a acestora se numește microarhitectură sau arhitectură internă . Spre deosebire de arhitectura care corespunde modelului mașinii văzute de programator, specificitățile unei microarhitecturi sunt invizibile pentru acesta din urmă. De exemplu, microarhitectura poate specifica existența cache-urilor , redenumirea registrelor , conductelor , predicția ramurilor etc. O microarhitectură poate da naștere la una sau mai multe realizări materiale.
Pentru a rezuma, Andrew Tanenbaum distinge trei niveluri hardware într-un computer:
Exemplu (fictiv):
Pentru o anumită arhitectură, putem avea mai multe microarhitecturi, iar o anumită microarhitectură poate servi ca bază pentru mai multe realizări. De exemplu, arhitectura System 360 a IBM a fost disponibilă de la început în cinci microarhitecturi diferite, având în mod natural performanțe diferite și un cost diferit (în plus, în contextul definiției acestei arhitecturi, nomenclatura de mai sus a fost rafinată). La Intel , arhitectura IA-32 , implementată pentru prima dată în 80386 , are implementări ulterioare foarte diferite: de exemplu, Pentium a introdus o microarhitectură de tip superscalar cu linie de conductă cu predicție de ramură . În plus, arhitectura IA-32 a fost implementată de alți fondatori, în special de AMD .
Desigur, interacțiunile dintre cele trei niveluri sunt complexe. Constrângerile de construcție limitează alegerile microarhitecturale și dorința de a putea alege o anumită microarhitectură influențează definiția arhitecturii. Dacă avantajele compatibilității obligă să mențină arhitectura constantă, dorința de a avea o microarhitectură și o realizare eficientă împinge spre o evoluție, fie prin extensie compatibilă (adăugarea de instrucțiuni de exemplu), fie prin specificarea unor zone fuzzy sau chiar prin invalidarea a era permisă.
În majoritatea arhitecturilor, programele manipulează registrele de lucru . Acestea sunt, prin urmare, baza arhitecturii. Cu toate acestea, procesorul poate include alte registre, interne, care nu sunt vizibile pentru programator: acestea nu fac parte din arhitectură.
Accesul la datele din memorie se face în funcție de un anumit număr de moduri de adresare care sunt specificate la nivelul arhitecturii. În plus, acesta din urmă definește viziunea logică pe care o au programele asupra memoriei și modul în care se realizează legătura cu memoria fizică. De asemenea, sunt specificate modalitățile de acces la intrări-ieșiri : registre specializate (acest lucru este adesea cazul microcontrolerelor), spațiu de memorie particular (caz în care modurile de adresare sunt adesea mai mici decât în spațiile de memorie normale), adrese specifice în spațiu normal de memorie. Trebuie specificate tipurile de date gestionate de procesor.
Registrele, memoria și I / O sunt tratate de instrucțiunile mașinii din programe. Setul de instrucțiuni este deci o piesă semnificativă de arhitectură: specifică foarte precis comportamentul fiecărei instrucțiuni a mașinii.
O arhitectură definește modul în care sunt tratate erorile sau excepțiile.
În cazul unei arhitecturi care acceptă multiprocesorul , trebuie specificat modul în care diferitele procesoare comunică și se sincronizează.
În mod ideal, ne putem gândi că diversele cache pe care le poate integra un procesor ( memoria cache , TLB etc.) ar putea fi transparente pentru programator, deci în afara sferei arhitecturii externe. Cu toate acestea, cel mai adesea este necesar ca programele (de obicei sistemul de operare) să interacționeze cu cache-uri (de exemplu, pentru a invalida intrările TLB atunci când este necesar). Arhitectura externă descrie apoi rolul și interfața acestor cache.
O arhitectură CISC oferă multe moduri de adresare, dintre care unele sunt deseori complexe. Setul de instrucțiuni are adesea multe instrucțiuni complexe care vor fi efectuate în mai multe cicluri.
Exemple: x86 extins la IA-32 , el însuși extins la x64 ; Motorola 680x0 .
O arhitectură RISC oferă un set de instrucțiuni relativ mic. Fiecare dintre aceste instrucțiuni ar trebui să fie executată într-un singur ciclu. Modurile de adresare sunt mai simple decât într-o arhitectură CISC. Arhitectura oferă în general un număr mare de registre generale. Aceste caracteristici promovează utilizarea optimă a conductei la nivel de microarhitectură.
Exemple: SPARC , POWER , PowerPC , MIPS și ARM .
Acest concept plasează o parte din gestionarea conductei pe compilator: procesorul primește instrucțiuni lungi care grupează mai multe instrucțiuni relativ mai simple.
În timp ce instrucțiunile tradiționale ale procesorului procesează un număr (un scalar) odată, instrucțiunile procesorului vectorial pot funcționa pe vectori.
Exemple: Mașini Cray .
Pentru a îmbunătăți performanțele în calculul vectorial (legat de algebra liniară ) ale procesoarelor tradiționale, putem adăuga la arhitectura lor de bază o unitate dedicată procesării SIMD , efectuând calcule pe mai multe date într-o singură instrucțiune. Următoarele tehnologii:
Acest tip de unitate de calcul a fost o versiune low cost a procesoarelor vectoriale utilizate pe supercaclulatoare, cum ar fi Cray . Această economie a fost relevantă în anii 1990, cu toate acestea vedem reapariția, în Arhitectura RISC-V, de exemplu, a procesoarelor vectoriale. Într-un procesor vectorial, unitatea de calcul este prevăzută cu instrucțiuni care trebuie efectuate asupra datelor și un tabel de date care trebuie parcurs cu aceste instrucțiuni, acestea fiind apoi realizate într-un mod liniar.