Chip multiprocessor
Chip multiprocessor (CMP) (multicore, multiprocesor) reprezintă o arhitectură modernă de microprocesor, bazată pe existența unui grup de uniprocesoare integrate la nivelul unui singur chip, interconectate între ele pentru asigurarea unui comportament (funcționalitate, interfațare, procesare) identic cu cel prezent la arhitecturile convenționale single-processor. Implementarea unui sistem de tip chip multiprocessor implică un efort de proiectare relativ modest (din punct de vedere ingineresc), rezumându-se la multiplicarea unei generații de procesoare, care vor constitui familia de core-uri ale multiprocesorului, și interconectarea logică a acestora (adaptarea la cerintele de bandă și de latență). Totodată, spre deosebire de multiprocesoarele convenționale cu un singur core per chip, arhitectura CMP necesită modificări minore de la generație la generație întrucât nu implică reproiectarea unui modul core ci doar creșterea numărului de module core per chip. Diferența majoră constă în capacitățile de memorie și de bandă ale perifericelor I/O, care sunt de cele mai multe ori destul de ridicate în cazul CMP.

Performanța unui chip multiprocessor

Performanța unui chip multiprocessor  poate fi echivalată cu numărul de procesoare sau core-uri integrate, fără a fi necesară o reproiectare a fiecărui procesor în mod individual. Prin urmare, același design de procesor, cu mici modificări, poate fi folosit pe mai multe generații de produse, amortizându-se astfel costul de proiectare și verificare. 
De asemenea, scalarea performanței unui CMP nu are nevoie de o creștere a energiei consumate la nivel de instrucțiune, ci dimpotrivă, performanța CMP poate crește simultan cu reducerea energiei consumate la nivel de instrucțiune.

Prin folosirea unui design de procesor mai puțin agresiv, este posibil să se reducă fluxul de energie per instrucțiune și, în același timp utiliza mai multe procesoare care să crească performanța chipului ca ansamblu. Această abordare permite utilizarea unui număr ridicat de tranzistoare per chip pentru creșterea performanței, menținându-se limita de temperatură critică (răcire cu aer).
Trecerea la CMP ajută la reducerea efectului de întârziere de cablaj. Fiecare procesor într-un CMP este relativ mic în raport cu suprafața întregului chip, iar lungimea cablajelor este redusă. Comunicarea interprocessor necesită totuși fire lungi în ansamblu. Cu toate acestea, latența de comunicare interprocessor este mai puțin critică pentru performanța într-un sistem multi-procesor în comparație cu latența de comunicare între unități din cadrul arhitecturilor cu un singur procesor. De asemenea, în cazul cablajelor lungi se poate adopta o politică pipeline, pentru subdivizarea fiecărei instrucțiuni într-un număr de etape sau segmente, fiecare etapă fiind executată de câte o unitate funcțională separată a procesorului. În acest fel are loc o creștere a vitezei de execuție totale a procesoarelor, fără a ridica tactul.

Întrucat procesoarele independente din cadrul arhitecturii CMP sunt vizibile programatorului ca entitați distincte, modelul computațional Von Neumann a fost înlocuit cu modelul de programare paralelă (parallel programming model). Progamatorii trebuie să își dividă aplicațiile în părți semi-independente, sau thread-uri, pentru operarea simultană pe mai multe procesoare din cadrul unui sistem CMP. Odată ce procesul de threading a fost finalizat cu succes, programele vor beneficia de tehnologia  thread-level parallelism (TLP) care presupune rularea diverselor thread-uri in paralel, în plus față de ILP (instruction level parallelism).

Facilități de paralelizare CMP

Instruction (instrucțiune). Toate procesele din cadrul aplicației manifestă paralelism între instrucțiuni individuale. Acest nivel nu este prezentat în figură întrucât granularitatea se rezumă la simple instrucțiuni. Arhitecturile superscalare pot beneficia cu succes de acest tip de paralelism.

Basic Block (bloc de bază). Grupuri mici de instrucțiuni prezente pe o ramură de execuție poartă numele de blocuri de bază. Arhitecturile tradiționale nu permit exploatarea acestei abordări în sensul paralelizării într-un mod distinct față de ILP (instruction level parallelism). În esență, paralelizarea basic block permite aplicarea ILP la nivelul câtorva blocuri uzuale în mod simultan, îmbunătățind în mod substanțial potențialul arhitecturilor superscalare.

Loop Iterations (iteratii in bucla). Fiecare iterație a unei bucle utilizează date independente, și astfel devine un element independent al procesului de paralelizare. În cadrul sistemelor convenționale, singura cale pentru a beneficia de avantajele acestui tip de paralelism este utilizarea unui procesor superscalar cu un set de instrucțiuni suficient de mare pentru a determina paralelismul între instrucțiuni independente în multiple iterații din cadrul buclelor în mod simultan, sau utilizarea unui compilator suficient de evoluat care să lege instrucțiuni din diverse iterații în sensul optimizării (procedură cunoscută sub numele de software pipelining). Procedura de extragere a TLP este însa greoaie, întrucât buclele trebuie sa fie foarte mult paralelizate pentru a putea fi divizibile în elemente independente de cod suficient de mari.

Tasks. Task-urile desemnează funcții independente de mari dimensiuni, extrase din cadrul unei singure aplicații. Spre deosebire de tipurile de paralelism menționate anterior, numai arhitecturile de  procesoare symetric multiprocessor (SMP) (arhitectură alcătuită din chip microprocesoare multiple) pot beneficia de acest tip de paralelism, necesitând programare manuală pentru divizarea codului în thread-uri explicite (mecanisme software dedicate precum POSIX).

Processes (procese). Dincolo de task-urile complet independente de procesele sistemului de operare, toate aplicațiile au  propriul lor spațiu separat de adrese virtuale. Exploatarea paralelismului la acest nivel este precum exploatarea paralelismului la nivel de task, cu excepția faptului că granularitatea este mai mare.

Utilitate
Apariția CMP schimbă spectrul tehnicilor de paralelizare. Spre deosebire de convenționalele uniprocesoare, chip-urile multicore  pot utiliza TLP, și, prin urmare, pot profita de thead-uri pentru utilizarea paralelismului. În plus, datorită latențelor de comunicare mici dintre unitățile core ale procesorului, și datorită abilităților de încorporare a unor noi facilități care sa beneficieze de aceste latențe reduse, arhitectura CMP poate aborda cu succes paralelismul la nivel de buclă, task și chiar la nivelul blocurilor de bază.

Vezi și
Procesor multi-core

Referințe

Legături externe
 Embedded moves to multicore
 Multicore News blog
 IEEE: Multicore Is Bad News For Supercomputers

Bibliografie
Kunle Olukotun, Lance Hammond, James Laudon: Chip Multiprocessor Architecture: Techniques to Improve Throughput and Latency 
Alexandre Solomatnikov: POLYMORPHIC CHIP MULTIPROCESSOR ARCHITECTURE

Arhitectura calculatoarelor
Microprocesoare
Chip multiprocessor ( CMP ) ( multicore , multiprocesor ) reprezintă o arhitectură modernă de microprocesor , bazată pe existența unui grup de uniprocesoare integrate la nivelul unui singur chip , interconectate între ele pentru asigurarea unui comportament ( funcționalitate , interfațare , procesare ) identic cu cel prezent la arhitecturile convenționale single-processor . Implementarea unui sistem de tip chip multiprocessor implică un efort de proiectare relativ modest ( din punct de vedere ingineresc ) , rezumându -se la multiplicarea unei generații de procesoare , care vor constitui familia de core -uri ale multiprocesorului , și interconectarea logică a acestora ( adaptarea la cerintele de bandă și de latență ) . Totodată , spre deosebire de multiprocesoarele convenționale cu un singur core per chip , arhitectura CMP necesită modificări minore de la generație la generație întrucât nu implică reproiectarea unui modul core ci doar creșterea numărului de module core per chip . Diferența majoră constă în capacitățile de memorie și de bandă ale perifericelor I/O , care sunt de cele mai multe ori destul de ridicate în cazul CMP . Performanța unui chip multiprocessor Performanța unui chip multiprocessor poate fi echivalată cu numărul de procesoare sau core -uri integrate , fără a fi necesară o reproiectare a fiecărui procesor în mod individual . Prin urmare , același design de procesor , cu mici modificări , poate fi folosit pe mai multe generații de produse , amortizându -se astfel costul de proiectare și verificare . De asemenea , scalarea performanței unui CMP nu are nevoie de o creștere a energiei consumate la nivel de instrucțiune , ci dimpotrivă , performanța CMP poate crește simultan cu reducerea energiei consumate la nivel de instrucțiune . Prin folosirea unui design de procesor mai puțin agresiv , este posibil să se reducă fluxul de energie per instrucțiune și , în același timp utiliza mai multe procesoare care să crească performanța chipului ca ansamblu . Această abordare permite utilizarea unui număr ridicat de tranzistoare per chip pentru creșterea performanței , menținându -se limita de temperatură critică ( răcire cu aer ) . Trecerea la CMP ajută la reducerea efectului de întârziere de cablaj . Fiecare procesor într- un CMP este relativ mic în raport cu suprafața întregului chip , iar lungimea cablajelor este redusă . Comunicarea interprocessor necesită totuși fire lungi în ansamblu . Cu toate acestea , latența de comunicare interprocessor este mai puțin critică pentru performanța într-un sistem multi-procesor în comparație cu latența de comunicare între unități din cadrul arhitecturilor cu un singur procesor . De asemenea , în cazul cablajelor lungi se poate adopta o politică pipeline , pentru subdivizarea fiecărei instrucțiuni într- un număr de etape sau segmente , fiecare etapă fiind executată de câte o unitate funcțională separată a procesorului . În acest fel are loc o creștere a vitezei de execuție totale a procesoarelor , fără a ridica tactul . Întrucat procesoarele independente din cadrul arhitecturii CMP sunt vizibile programatorului ca entitați distincte , modelul computațional Von Neumann a fost înlocuit cu modelul de programare paralelă ( parallel programming model ) . Progamatorii trebuie să își dividă aplicațiile în părți semi-independente , sau thread -uri , pentru operarea simultană pe mai multe procesoare din cadrul unui sistem CMP . Odată ce procesul de threading a fost finalizat cu succes , programele vor beneficia de tehnologia thread-level parallelism ( TLP ) care presupune rularea diverselor thread -uri in paralel , în plus față de ILP ( instruction level parallelism ) . Facilități de paralelizare CMP Instruction ( instrucțiune ) . Toate procesele din cadrul aplicației manifestă paralelism între instrucțiuni individuale . Acest nivel nu este prezentat în figură întrucât granularitatea se rezumă la simple instrucțiuni . Arhitecturile superscalare pot beneficia cu succes de acest tip de paralelism . Basic Block ( bloc de bază ) . Grupuri mici de instrucțiuni prezente pe o ramură de execuție poartă numele de blocuri de bază . Arhitecturile tradiționale nu permit exploatarea acestei abordări în sensul paralelizării într- un mod distinct față de ILP ( instruction level parallelism ) . În esență , paralelizarea basic block permite aplicarea ILP la nivelul câtorva blocuri uzuale în mod simultan , îmbunătățind în mod substanțial potențialul arhitecturilor superscalare . Loop Iterations ( iteratii in bucla ) . Fiecare iterație a unei bucle utilizează date independente , și astfel devine un element independent al procesului de paralelizare . În cadrul sistemelor convenționale , singura cale pentru a beneficia de avantajele acestui tip de paralelism este utilizarea unui procesor superscalar cu un set de instrucțiuni suficient de mare pentru a determina paralelismul între instrucțiuni independente în multiple iterații din cadrul buclelor în mod simultan , sau utilizarea unui compilator suficient de evoluat care să lege instrucțiuni din diverse iterații în sensul optimizării ( procedură cunoscută sub numele de software pipelining ) . Procedura de extragere a TLP este însa greoaie , întrucât buclele trebuie sa fie foarte mult paralelizate pentru a putea fi divizibile în elemente independente de cod suficient de mari . Tasks . Task -urile desemnează funcții independente de mari dimensiuni , extrase din cadrul unei singure aplicații . Spre deosebire de tipurile de paralelism menționate anterior , numai arhitecturile de procesoare symetric multiprocessor ( SMP ) ( arhitectură alcătuită din chip microprocesoare multiple ) pot beneficia de acest tip de paralelism , necesitând programare manuală pentru divizarea codului în thread -uri explicite ( mecanisme software dedicate precum POSIX ) . Processes ( procese ) . Dincolo de task -urile complet independente de procesele sistemului de operare , toate aplicațiile au propriul lor spațiu separat de adrese virtuale . Exploatarea paralelismului la acest nivel este precum exploatarea paralelismului la nivel de task , cu excepția faptului că granularitatea este mai mare . Utilitate Apariția CMP schimbă spectrul tehnicilor de paralelizare . Spre deosebire de convenționalele uniprocesoare , chip-urile multicore pot utiliza TLP , și , prin urmare , pot profita de thead -uri pentru utilizarea paralelismului . În plus , datorită latențelor de comunicare mici dintre unitățile core ale procesorului , și datorită abilităților de încorporare a unor noi facilități care sa beneficieze de aceste latențe reduse , arhitectura CMP poate aborda cu succes paralelismul la nivel de buclă , task și chiar la nivelul blocurilor de bază . Vezi și Procesor multi-core Referințe Legături externe Embedded moves to multicore Multicore News blog IEEE : Multicore Is Bad News For Supercomputers Bibliografie Kunle Olukotun , Lance Hammond , James Laudon : Chip Multiprocessor Architecture : Techniques to Improve Throughput and Latency Alexandre Solomatnikov : POLYMORPHIC CHIP MULTIPROCESSOR ARCHITECTURE Arhitectura calculatoarelor Microprocesoare