C1 1
• Vasile Lungu : Procesoarele Intel. Programare
în Limbaj de Asamblare. Ediţia a II-a, Editura
Teora, Bucureşti, 450 pg., 2004.
• Vasile Lungu, Gheorghe Petrescu, Costin
Boiangiu, Programare în Limbaj de Asamblare.
Probleme de Laborator. Editura PRINTECH,
168pg., 2003.• intel.com/design/pentium4/manuals/index_new.htm• The Art of Assembly Language, University of
California: www.cs.ucr.edu\pub\pc\ibmpcdir
C1 2
De ce utilizăm limbajul de asamblare ?
• compilatoarele translatează codul sursă in limbaj (cod) maşină;
• îndepărtare de limbajul de asamblare, dar nu de renunţare la el; multe medii IDE şi compilatoare C, Pascal, Basic, Fortran, LabView etc.) prezintă facilităţi de inserare de linii scrise direct în limbaj de asamblare.
• componente ale SO, critice şi performante realizate în LA, deoarece aceste secvenţe trebuie să consume cât mai puţin timp şi, eventual, cât mai puţină memorie
C1 3
• Programe hibride: LA + LNI.• Modulele complexe sunt scrise în LNI, iar cele ce sunt critice in (LA).
• compilatorul are "cunoştinţe limitate" asupra întregului program -> set generalizat de instr. dar nu sunt optime în situaţii particulare.
• Experienţa LA -> programe mai eficiente şi în limbajele evoluate;
• Depanarea ajunge şi la depanarea codului obiect.
• LA este mult mai dificil decât un LNI, deoarece programatorul trebuie să cunoască pe lângă LA şi structura internă a calculatorului.
C1 4
Scurt istoric
• Charles Babbage, 1839, “Maşină Analitic㔕 1937, Howard Aiken, Univ. Harvard, “Calculatorul cu Secvenţă
de Comandă Automată“ (1939-1944), MARK I.• 1942, ENIAC (Electronic Numerical Integrator And Computer),
Pennsylvania, (1945-1946). El conţinea circa 18.000 tuburi electronice şi executa 5.000 adunări/sec.
• John von Neumann- EDVAC (Electronic Discrete VAriable Computer, 1952, universitatea Princeton, USA)- a stabilit cele 5 caracteristici principale ale calculatorului cu program memorat:
• mediu de intrare;• memorie;• secţiune de calcul;• mediu de ieşire
Calculatoare
C1 5
• unitate de comandă;
• - generaţia I-a ( 1946-1956), caracterizată prin: hard : relee, tuburi electronice; soft : programe cablate, cod maşină, limbaj de asamblare; capacitate memorie : 2 Kocteţi; viteză de operare : 10.000 operaţii/sec.
• - generaţia II-a (1957-1963) a fost marcată de apariţia tranzistorului:
hard : tranzistoare, memorii cu ferite, cablaj imprimat; soft: limbaje de nivel înalt (Fortran-1956, Algol-1958,
Cobol); memorie : 32 Kocteţi; viteza : 200.000 instrucţiuni/sec.
C1 6
C1 7
• - generaţia III-a (1964-1981), caracterizată prin : hard : circuite integrate (la început pe scară redusă SSI,
apoi pe scară medie, MSI şi largă, LSI – 1000 componente pe chip; scara de integrare se referă la numărul de componente electronice pe unitatea de suprafaţa), cablaje imprimate multistrat, discuri magnetice, apariţia primelor microprocesoare;
soft : limbaje de nivel foarte înalt (C-1972, care a stat la baza sistemului de operare UNIX), programare structurată, baze de date, grafică pe calculator;
memorie : 1÷2 Mocteţi; viteza : 5.000.000 instrucţiuni/sec.
C1 8
• - generaţia IV-a (1982-1989) hard : circuite integrate pe scară foarte mare (VLSI-
100.000 componente/chip), sisteme distribuite de calcul, apar microprocesoarele de 16/32 biţi;
soft : pachete de programe de largă utilizare, sisteme expert, limbaje orientate obiect, baze de date relaţionale;
memorie : 8÷10 Mocteţi; viteza : 30 mil. instr./sec.
• - generaţia V-a, în curs de dezvoltare, se doreşte a atinge următoarele performanţe:
hard : circuite integrate pe scară ultralargă ULSI (proiectare circuite integrate 3D), arhitecturi paralele, reţele de calculatoare, alte soluţii arhitecturale noi (reţele neurale etc.);
C1 9
soft : limbaje concurente, programare funcţională FP, prelucrare simbolică, baze de cunoştinţe, sisteme expert evoluate;
memorie : zeci - sute Mocteţi; viteza : 1 Ginstr./sec. - 1 Tinstr./sec.
• Procesoare• 1970, INTEL 4004, 4 biţi, calcule BCD, 60.000 op./sec. Firma
INTEL (INTegrated Electronics) a fost fondată spre sfârşitul anilor ’60 de Robert Noyce şi Gordon Moore.
• 1972, INTEL 8008, 48 de instrucţiuni, 16 Kocteţi, 30.000 instr./sec
• 1974 INTEL 8080, 72 instrucţiuni, 64 Kocteţi, 300.000 op./sec.
C1 10
• 1979, INTEL, primul microprocesor de 16 biţi (8086); 2 unităţi: EU + BIU. 8088, mag. ext. 8 biţi. Motorola 68000.
• 1980, Sinclair, Spectrum Zx80 (Z80), Basic.
• 1982, 80186, 286 - multiprelucrare/ acces, “mod protejat”, 4 unităţi, mecanisme gest. mem. virtuală, protecţie mem.
• 1983, primul mediu integrat de programare (TP, Borland).
• 1986, 386, 32 biţi, 6 unit., paginare; coprocesor îmbunătăţit
• 1989, 486 = 386+387+cache unificat 8 Ko., bandă de asamblare, RISC (Reduced Instruction Set Computer);
• 1994, Pentium, 2 benzi (u,v), cache L1 separat 8Ko date + 8Ko instr., BTB(Branch Target Buffer), mag int 128 biţi, APIC (Advanced Programmable Interrupt Controller); P6.
• 1996, Pentium Pro, superscalar pe 3 căi, execuţie dinamică (analiză flux, execuţie în orice ordine, predicţie salt, execuţie speculativă), 5 unit exec, L1 + L2 (256 Ko)
C1 11
• 1997, Pentium MMX (8 reg 64 biţi, 3 tipuri de date noi împachetate de 8-16-32 biţi), 57 instr. noi, SIMD (Single Instruction Multiple Data), L1 dublat, alg. predicţie îmb.
• 1998, Pentium II = Pro + MMX, SECC (Single Edge Contact Cartridge);
• 1999, Pentium III = II + arh. SSE (Streaming SIMD Extension), 70 instr., 4*32 biţi (virgulă mobilă, simplă precizie)= 128 biţi.
• 2001, Pentium 4, extinde SIMD, SSE 2, pt. real dublă precizie, NetBurst (MP, Hyper-Threading, superbandă-20 nivele/ faţă de 12 la PII/ PIII), L1: 8Ko date + 12 K micro-operaţii “trace cache”.
• 2001, arhitectura Itanium, extindere a execuţiei paralele, predictive şi speculative; L3 (2 sau 4 Mo), L2 (96 Ko, linie 64 oct., 6 căi).
• 2002, Itanium 2 măreşte performanţa de 1.5-2 ori.
C1 12
• Procesoare INTEL: – familia P6 (1995-1999): Pro, II, III
• bandă de asamblare superscalară (2-3 instr/ciclu);• extensia SSE, set 8 registre, XMM, pe 128 biti (real-sp) +
reg. control/stare de 32 biţi;– familia Pentium 4 (2000-2006)
• micro-arh NetBurst (viteza dubla UAL/intregi, executie dinamica avansata, imb alg predictie, expandare reg cu redenumire, dim cache 64 octeti;
• SSE2, set registre pe 128 biti (real-dp, intregi), instrucţiunile utiliz. reg. XMM, MMX şi reg. gen;
– procesoarele Xeon şi Pentium Extr Ed (2001-2007)• micro-arh NetBurst, tehnologia Hyper-Threading, 64 biţi;• instrucţiuni SSE3 (virg. mobilă, sincronizare multi-thread),
SSSE3-Supplemental Streaming SIMD Extensions (instr. accelerează prel. semnal şi MM), SSE4 cu 2 componente: SSE4.1-media, imagine, 3D şi SSE4.2-prel text/string, 128 biţi.
C1 13
• Microarhitectura Intel Core : – Execuţie dinamică largă
• fiecare nucleu (core) fetch, decod, execută 4 instr/ciclu;• Bandă asamblare 14 niveluri, 3 UAL, 4 decod, predict av;
– Cache inteligent avansat• rată mare pentru nivel 2 cache: < 4M şi asociativitate pe 16
căi;• mag internă 256 biţi pentru transferul L1-L2;
– Acces la memorie inteligentă• reduce cache-miss pentru execuţia în orice ordine;• hard prefetch ce reduce latenţa pt cache-miss la L2;• hard prefetch ce reduce latenţa pt cache-miss la L1;
– Îmb. prelucrării de date media digitale• execuţie pe singur ciclu pt. maj. instr. SIMD pe 128 biţi;• execuţia până la 8 operaţii în virgulă mobilă/ciclu
C1 14
C1 15
– Procesoarele iniţial dezvoltate ca uni-core– Procesor multi- core:
– implementează multiprocesarea– pot fi puternic sau slab cuplate:
– partajează memorie cache– comunicaţie prin mesaje sau memorie
partajată inter-core– Performanţa limitată de procentul de soft ce poate fi
paralelizat să ruleze simultan pe coruri multiple– Unele metode de paralelism la nivel instrucţiune (ILP)
precum asamblarea superscalara sunt adecvate
– Consum mai mic decât două procesoare single-core cuplate, nemaifiind necesară transmitere semnale în afara procesorului
– Procesoarele multi- core partajează aceleași circuite: cache L2, interfața cu FSB(Front Side Bus);
– Necesită ajustări atât ale SO cât și ale softului aplicațiilor curente;– Softul multi-thread mai greu de depanat, dar tehnicile de programare paralelă pot
beneficia direct de multiple core-uri.– Administrarea concurenței:
– partiționare/ descompunere problemă în taskuri,– Comunicare între taskuri,– Aglomerare versus combinare taskuri pentru a furniza un număr mai mic de taskuri,
fiecare de o dimensiune mai mare (replicare date sau calcule, pentru eficiență),– Maparea specifică unde se execută fiecare task
C1 16
C1 17
core
1
core
2
core
3
core
4
several threads
several threads
several threads
several threads
C1 18