Cum functioneaza un CPU?

Hai sa explicam cat mai usor de inteles si fara sa ne pierdem in jungla de termeni care mai de care mai intimidanti cum functioneaza un CPU, adica procesorul din laptopul sau PC-ul tau (valabil …

cum functioneaza un procesor cpu

Hai sa explicam cat mai usor de inteles si fara sa ne pierdem in jungla de termeni care mai de care mai intimidanti cum functioneaza un CPU, adica procesorul din laptopul sau PC-ul tau (valabil in multe cazuri si pentru alte microprocesoare din alte dispozitive).

Te poti gandi la procesorul din calculatorul sau laptopul tau ca la un super-sef de orchestra. El primeste informatii (sau instructiuni, daca vrei), le proceseaza rapid si le trimite unde trebuie pentru ca totul sa functioneze armonios.

nota: articolul asta nu este cea mai academica sau in detaliu explicatie. Dar ar trebui sa faca mai clare treburile si sa explice, in mare, cum functioneaza un procesor

1.Nucleul procesorului (core)

Un procesor poate avea unul sau mai multe nuclee. Fiecare nucleu poate procesa informatii independent de celalalte. Mai multe nuclee, inseamna mai multa putere de procesare teoretic vorbind. Numarul de nuclee nu este o caracteristica buna (sau cel putin nu doar ea) pentru a determina cat de ‘bun’ este un procesor pentru tine. (vezi capitolul legate de performanta din acest articol)

1.1 Functionarea nucleului

Fiecare nucleu de procesor poate functiona independent, avand propriul sau set de registre si adesea propriile cache-uri L2 si L2. Registrele stocheaza date temporare. Cache-urile sunt memorii rapide utilizate pentru a reduce timpul de acces la datele frecvent utilizate. Nucleele pot impartasi unele resurse, cum ar fi cache-ul L3 si controlerul de memorie.

Procesul de executie intr-un nucleu implica mai multe etape:

  1. Fetch – nucleul preia instructiunile din memoria cache sau din memoria principala
  2. Decode – intructiunile sunt decodificate intr-un format pe care nucleul il poate intelege
  3. Execute – nucleul executa instructiunile decodificate
  4. Write-back – rezultatele sunt scrise inapoi in memoria cache sau in memoria principala

1.2 Multi-Core si beneficii

Un procesor cu mai multe nuclee aduce o serie de beneficii, dar trebuie sa avem in vedere si niste consideratii tehnologice sau anumite compromisuri pe care producatorul este nevoit sa le faca pentru a acomoda multiple nuclee in cadrul aceluiasi CPU.

Beneficii multi-core:

  • Performanta imbunatatita: cu mai multe nuclee, un procesor poate gestiona mai multe sarcini simultan. Acest lucru este ideal pentru software-ul modern care este proiectat sa fie multi-threaded.
  • Eficienta energetica: procesoarele multi-core pot fi mai eficiente din punct de vedere energetic comparativ cu cresterea vitezei de ceas (clockspeed) a unui singur nucleu, deoarece pot distribui sarcina intre nuclee, care pot rula la o frecventa mai mica si mai eficienta.
  • Fiabilitate: in sisteme critice, mai multe nuclee si o eficienta energetica ridicata pot reduce sansele de supraincalzire.

Alte consideratii:

  • Scalabilitate: adaugarea de nuclee suplimentare nu inseamna intotdeauna o imbunatatire liniara a performantei. Eficienta scalarii depinde de capacitatea software-ului de a exploata aceste nuclee suplimentare. De exemplu, daca aplicatia poate utiliza pana la 8 nuclee, trecerea la 16 nuclee nu ne va ajusta considerabil situatia (presupunand ca celalalte variabile raman la fel – performanta per core, etc.).
  • Designul software-ului: aplicatiile trebuie sa fie scrise sau optimizate pentru a profita de arhitectura multi-core. Daca o aplicatie nu stie sa foloseasca mai mult de 1 nucleu, nu vom vedea cresteri de performanta in acea aplicatie daca adaugam fire de executie sau nuclee.
  • Tehnologie si spatiu pe chip: mereu exista compromisuri. Spatiul este limitat pe chip. Cache-urile si anumite componente mananca spatiu. De-asta vedem tot felul de diferente intre generatii de procesoare: se incearca maximizarea spatiului si a performantei prin arhitecturi cat mai bune si procese de manufacturare cat mai avansate.

1.3 Arhitectura

Arhitectura unui CPU defineste structura fundamentala a acestuia. Arhitectura defineste inclusiv modul in care procesorul proceseaza informatiile, executa instructiuni si interactioneaza cu alte componente hardware.

In principal avem 2 seturi de arhitecturi:

  • Arhitectura Von Neumann vs Arhitectura Harvard
  • Arhitecturi RISC (set simplificat de instructiuni) vs CISC (set complex de instructiuni)

Ca idee, procesoarele moderne de la Intel si AMD folosesc principii din ambele seturi de arhitecturi. Se utilizeaza o variatie a arhitecturii Harvard, cunoscuta ca si Arhitectura Harvard Modificata. In aceasta configuratie, procesorul are cache-uri separate pentru instructiuni si date (similar cu Harvard), dar acestea sunt alimentate dintr-o memorie comuna (similar cu Von Neumann). Aceasta permite un echilibru intre eficienta separarii datelor si instructiunilor pentru acces rapid si flexibilitatea gestionarii unei singure memorii.

Procesoarele moderne de la Intel si AMD sunt adesea vazute ca fiind bazate pe arhitectura CISC, datorita seturilor lor complexe de instructiuni care permit executarea unor operatii avansate in cateva instructiuni. Cu toate acestea, liniile dintre RISC si CISC au devenit mai putin clare datorita evolutiilor in designul microarhitectural.

1.4 Die size

Prin recenzii sau prezentari poti auzi sau citi termenul de “die size”. De exemplu, AMD Ryzen 5 3600X are un die size de 74mm2. Ce inseamna asta?

Termenul de die size se refera la suprafata fizica a cipului semiconductor, masurata in milimetri patrati. Acesta este, de fapt, cipul de siliciu individual pe care sunt gravate circuitele si tranzistorii unui procesor sau a altui tip de circuit integrat.

Dimensiunea die-ului este un factor important in designul si fabricatia semiconductorilor, influentand atat costul de productie, cat si performanta componentei.

Aceasta specificatie, die size, influenteaza:

  1. Costul de productie
    Un die mai mic permite producatorilor sa obtina mai multe cipuri functionale dintr-o singura placheta de siliciu, reducand astfel costurile de material per unitate.
    Un die mai mare este mai susceptibil la defecte, lucru care poate reduce randamentul productiei.
  2. Performanta
    Un die mai mic reduce distantele pe care semnalele trebuie sa le parcurga intre diferitele componente ale cipului, cum ar fi nucleele procesorului, cache-ul si controlerul de memorie. Acest lucru poate duce la imbunatatirea performantei si a eficientei energetice.
    Disiparea caldurii – tehnic vorbind caldura produsa este gestionata mai bine.
  3. Portabilitate
    Procesoarele cu die-uri mai mici sunt esentiale pentru dispozitive mobile precum smartphone-urile si tabletele. Spatiul este limitat intr-un astfel de dispozitiv iar eficienta energetica este cruciala pentru o durata de viata a bateriei cat mai mare.

1.5 Dimensiunea tranzistorilor

Cand vezi mentionat ceva precum 7nm sau 14nm in specificatiile unui procesor, producatorul se refera la dimensiunea fizica a tranzistorilor folositi in cip.

Termenul ‘nm’ reprezinta nanometri. Un nanometru este egal cu o miliardime dintr-un metru. Deci e mic. In lungimea semiconductorilor, aceasta indica lungimea portii fiecarui tranzistor de pe cip.

De ce conteaza dimensiunea tranzistorilor?

  1. Performanta imbunatatita: tranzistorii mai mici pot comuta mai rapid intre starile on si off, lucru care permite frecvente mai mari de ceas si, prin urmare, performante mai bune. Reducerea dimensiunii tranzistorilor reduce si latenta si poate imbunatati raspunsul la sarcinile de procesare.
  2. Densitate mai mare: cu cat tranzistorii sunt mai mici, cu atat mai multi pot fi incorporati pe un singur cip. Acest lucru inseamna ca procesoarele pot avea mai multe nuclee, cache-uri mai mari si in general mai multe functii integrate pe aceeasi suprafata de silicon. Asta duce direct la o crestere a performantei generale si a eficientei energetice.
  3. Eficienta energetica: tranzistorii mai mici consuma mai putina energie, caci necesita o tensiune mai mica pentru a opera si au o rezistenta electrica mai scazuta.

Totusi, pe masura ce dimensiunile tranzistorilor scad, producatorii se confrunta cu provocari semnificative cum ar fi:

  • Leakage currents – curentul de scurgere poate creste pe masura ce tranzistorii devin mai mici, ceea ce poate duce la pierderi de energie si cresterea caldurii generate.
  • Variabilitatea procesului – precizia in fabricarea tranzistorilor extrem de mici poate duce la variabilitati intre cipuri, ceea ce afecteaza randamentul productiei si consistenta performantei.
  • Limitari fizice – exista o limita pana la care dimensiunea tranzistorilor poate fi redusa, cunoscuta sub numele de limita de scalare. Acest lucru a determinat producatorii sa exploreze alte tehnologii cum ar fi tranzistorii 3D.

2.Cache

Memoria cache este un tip de memorie rapida, situata direct pe procesor (deci pe die).

Rolul principal al cache-ului este de a reduce timpul de acces la datele frecvent utilizate de procesor, imbunatatind astfel performanta generala a sistemului.

2.1 Tipuri de cache

Memoria cache este de obicei impartita in trei niveluri, fiecare cu diverse caracteristici si scopuri:

  1. Cache L1 (Level 1)
    Viteza:
    Este cea mai rapida forma de memorie cache.
    Dimensiune: De obicei, este relativ mica (de ordinul catorva kilobytes).
    Scop: Stocheaza instructiunile si datele la care procesorul trebuie sa acceseze cel mai rapid.
    Localizare: De obicei, fiecare nucleu de procesor are propriul sau cache L1.
  2. Cache L2 (Level 2)
    Viteza:
    Este mai lenta decat L1, dar mai rapida decat memoria principala (RAM).
    Dimensiune: Mai mare decat L1, de obicei cateva sute de kilobytes pana la cativa megabytes.
    Scop: Functioneaza ca un tampon intre cache-ul rapid L1 si memoria mai lenta L3 sau RAM.
    Localizare: Poate fi integrat in fiecare nucleu sau partajat intre un grup de nuclee.
  3. Cache L3 (Level 3)
    Viteza:
    Mai lenta decat L1 si L2, dar semnificativ mai rapida decat RAM-ul.
    Dimensiune: Cea mai mare dintre cache-uri, poate ajunge la cativa megabytes pana la zeci de megabytes.
    Scop: Reduce timpul de acces la datele utilizate frecvent de toate nucleele procesorului.
    Localizare: De obicei, este partajat intre toate nucleele procesorului.

2.2 Functionarea cache-ului

Procesul de utilizare a cache-ului este destul de simplu in teorie, dar complex in implementare.

Pasii de baza:

  1. Accesul initial: cand procesorul are nevoie de date, verifica mai intai cache-ul L1
  2. Miss-uri si Hit-uri:
    Cache Hit: daca datele sunt gasite in cache (un ‘hit’ – ca si lovitura nu ca si piesa muzicala), ele sunt livrate rapid procesorului
    Cache Miss: daca datele nu sunt in cache (un ‘miss’ – o ratare), procesorul verifica nivelurile urmatoare de cache (L2 si apoi L3). Daca datele nu sunt gasite nici in aceste niveluri, sunt aduse din memoria RAM.
  3. Actualizarea cache-ului: datele aduse din RAM sunt stocate in cache pentru accesari viitoare, inlocuind date mai putin frecvent utilizate, bazandu-se pe algoritmi de inlocuire cum ar fi Least Recently used (LRU).

2.3 Impactul asupra performantei

Utilizarea eficenta a cache-ului poate avea un impact semnificativ asupra performantei sistemului. Accesul la date este mult mai rapid decat accesul la memoria RAM, reducand astfel latenta si imbunatatind viteza de procesare a datelor.
Desi cam fortat, un exemplu ar fi Ryzen 7 5800X vs 5800X3D. X3D-ul are un Cache 3D Vertical mare. Iar dupa cum probabil stii sau ai vazut/poti vedea prin benchmark-uri, 5800X3D este net superior in aplicatiile care pot folosi cache-ul mai mare. Una din explicatii este ca implementarea cache-ului dar si folosirea sa este mai buna.

3.Clock speed

Clock speed se refera la viteza de ceas a procesorului si este masurata in gigahertz (GHz). Aceasta viteza indica numarul de cicluri pe care un procesor le poate efectua intr-o secunda. Un ciclu este, in esenta, un puls de ceas in timpul caruia procesorul poate efectua operatiuni de baza, cum ar fi citirea instructiunilor, executarea lor si scrierea rezultatelor. De exemplu, un procesor cu o viteza de ceas de 3 GHz poate efectua 3 miliarde de cicluri pe secunda.

3.1 Cum functioneaza?

Procesorul primeste un semnal de ceas de la un oscilator de cristal, care genereaza un ritm constant si precis. Acest semnal de ceas este folosit pentru a sincroniza operatiunile interne ale procesorului. Fiecare puls de ceas permite procesorului sa avanseze in executarea instructiunilor pe care le proceseaza.

3.2 Impactul vitezei de ceas asupra performantei

  • Performanta mai Buna: Cu cat viteza de ceas este mai mare, cu atat procesorul poate procesa mai multe instructiuni intr-un interval de timp mai scurt. Acest lucru se traduce prin performante mai bune, in special pentru aplicatii care depind de viteza de procesare a unui singur fir de executie (single-thread).
  • Eficienta Energetica si Caldura: Vitezele mai mari de ceas pot duce si la consum mai mare de energie si producere de caldura. Producatorii de procesoare trebuie sa gaseasca un echilibru intre viteza de ceas, consumul de energie si disiparea caldurii.
  • Diminuarea Beneficiilor: Nu toate aplicatiile beneficiaza in mod egal de o viteza de ceas mai mare. Programele care pot folosi mai multe nuclee simultan pot beneficia mai mult de un procesor cu mai multe nuclee decat de unul cu o viteza de ceas extrem de mare, dar cu mai putine nuclee si cu o productie de caldura mai mare.

3.3 Limitari

Pe masura ce tranzistorii din cipuri devin din ce in ce mai mici, devine din ce in ce mai dificil sa crestem viteza de ceas fara a creste seminificativ consumul de energie si caldura generata.

4.Pipelines

Pipelinining este un concept esential in arhitectura moderna a CPU-urilor. Pipelining-ul permite procesorului sa execute mai multe instructiuni simultan prin impartirea procesului de executie in mai multe etape. Fiecare etapa este executata de o parte diferita a procesorului, ceea ce creste eficienta generala.

4.1 Etapele tipice ale unui pipeline

Intr-un pipeline simplu, etapele pot fi:

  1. IF (Instruction Fetch): Procesorul citeste instructiunea din memoria cache sau RAM.
  2. ID (Instruction Decode): Procesorul descifreaza instructiunea pentru a determina ce operatie trebuie sa efectueze.
  3. EX (Execute): Procesorul executa operatia specificata de instructiune.
  4. MEM (Memory Access): Procesorul acceseaza memoria pentru a citi sau scrie date, daca este necesar.
  5. WB (Write Back): Rezultatele sunt scrise inapoi intr-un registru sau in memorie.

4.2 Avantajele pipeline-ului

  1. Eficienta imbunatatita – prin lucrul la mai multe instructiuni in acelasi timp, pipeline-ul creste numarul total de instructiuni pe care procesorul le poate finaliza intr-o unitate de timp.
  2. Utilizare mai buna a resurselor – fiecare componenta a procesorului poate fi utilizata continuu, fara a astepta finalizarea altor etape.

4.3 Dezavantaje si provocari

Hazards: Exista trei tipuri principale de hazards in pipeline: structural (cand hardware-ul nu suporta mai multe instructiuni simultan), data (cand instructiunile depind unele de altele), si control (cand salturile si deciziile afecteaza fluxul de instructiuni).

Complexitatea Designului: Implementarea unui pipeline eficient necesita un design sofisticat pentru a gestiona corect dependentele si hazards-urile.

Penalitati de Performanta: In cazul unui hazard de control, de exemplu, pipeline-ul poate fi nevoit sa arunce unele instructiuni procesate partial, ceea ce duce la penalitati de performanta.

5.Hyper-Threading si SMT

5.1 Hyper-Threading – Intel

Hyper-Threading este o tehnologie dezvoltata de Intel care permite unui singur nucleu fizic de procesor sa execute doua thread-uri (sau procese) de executie simultan. Acest lucru este realizat prin duplicarea anumitor sectiuni ale procesorului care stocheaza starea arhitecturala, dar nu duplicand intregul nucleu fizic.

Cum functioneaza Hyper-Threading

Fiecare nucleu fizic al procesorului are doua seturi separate de registre (mici depozite de date rapide) si stari ale procesorului. Sistemul de operare vede fiecare nucleu fizic ca doua nucleu logice. Procesorul poate comuta intre aceste doua thread-uri pe nucleu in functie de nevoile de procesare, ceea ce permite o utilizare mai eficienta a resurselor procesorului.

Cand un thread este blocat sau asteapta resurse (de exemplu, asteptand date din memoria RAM), procesorul poate trece rapid la celalalt thread pentru a continua lucrul, reducand astfel timpul de inactivitate.

5.2 Simultaneous Multithreading – AMD

Simultaneous Multithreading, implementat de AMD sub numele de “SMT”, functioneaza intr-un mod similar cu Hyper-Threading-ul Intel. Scopul este acelasi: sa permita fiecarui nucleu fizic sa execute mai multe thread-uri simultan pentru a imbunatati eficienta si performanta generala.

Diferente si Similaritati:

Ambele tehnologii isi propun sa maximizeze eficienta procesorului permitand unui singur nucleu sa gestioneze mai multe sarcini simultan.

SMT si Hyper-Threading sunt doar diferite denumiri comerciale pentru aceeasi idee fundamentala de a permite unui nucleu sa execute mai multe thread-uri simultan.

Implementarea specifica poate varia intre Intel si AMD, dar principiul de baza ramane acelasi.

5.3 Impactul asupra performantei

Utilizarea Hyper-Threading sau SMT poate duce la imbunatatiri semnificative ale performantei in scenarii multi-threaded, unde exista multe sarcini care pot fi executate in paralel. In functie de aplicatie, imbunatatirile de performanta pot varia:

  • Aplicatiile optimizate pentru multi-threading, cum ar fi editarea video si calculele stiintifice, pot beneficia semnificativ de multiple fire de executie.
  • Jocurile si aplicatiile care depind mai mult de performanta unui singur thread pot sa nu vada imbunatatiri semnificative si, in unele cazuri, pot chiar sa experimenteze o usoara scadere a performantei datorita complexitatii suplimentare in gestionarea thread-urilor si/sau ineficienta in a utiliza mai multe thread-uri.

6.TDP – Thermal Design Power

TDP reprezinta cantitatea maxima de caldura generata de procesor (se mai foloseste si la alte componente, cum ar fi placa video sau GPU-ul), pe care sistemul de racire trebuie sa o poata disipa sub sarcina standard de lucru. Este exprimat in wati (W) si este un indicator al consumului de energie si al productiei de caldura in conditii de utilizare tipice, dar atentie, nu neaparat maximale.

6.1 De ce conteaza TDP?

Proiectarea Sistemului de Racire: TDP ajuta la determinarea tipului si dimensiunii sistemului de racire necesar pentru a mentine componentele la temperaturi de operare sigure. O racire inadecvata poate duce la supraincalzire, care poate reduce performanta si durata de viata a componentelor.

Selectarea Componentelor: Cand construiesti sau upgradezi un sistem, este important sa iei in considerare TDP-ul componentelor pentru a asigura compatibilitatea cu capacitatea de racire a carcasei si a sistemului de racire.

Eficienta Energetica: TDP-ul poate oferi o idee despre eficienta energetica a unui procesor sau a unei placi grafice. Componentele cu un TDP mai mic sunt de obicei mai eficiente din punct de vedere energetic, ceea ce poate fi important pentru sistemele care ruleaza 24/7, cum ar fi serverele, sau pentru dispozitivele portabile, unde durata de viata a bateriei este critica.

De exemplu, pentru un home-lab, home-server sau nas am dori un TDP cat mai mic si o eficienta energetica cat mai mare pentru a avea costuri cat mai mici cu electricitatea.

6.2 Cum se masoara TDP?

TDP este determinat de producatorii de hardware pe baza unui scenariu de utilizare tipica, care nu neaparat include sarcina maxima posibila.

Producatorii testeaza componente sub diferite sarcini si masoara caldura generata pentru a stabili un TDP care sa reflecte eficient nevoile de racire in cele mai comune scenarii de utilizare. Din aceasta cauza de obicei dorim un sistem de racire care depaseste TDP-ul procesorului nostru ca si capacitate de racire. Mai ales pentru sisteme de gaming sau alte scenarii de lucru intens si de durata.

7.Cum ne dam seama de puterea de procesare a unui procesor?

Hai sa abordam discutia asta despre performanta in 2 feluri.

  1. IPC, caci de multe ori prin stiri vedem ca producatorul X mentioneaza ca noua generatie de procesoare are IPC cu 20% mai mare.
  2. Si apoi despre performanta ca si… performanta perceputa de noi, oamenii. Cate FPS-uri scoate un procesor in jocul X sau cate secunde ii ia sa randeze un clip anume?

IPC – Instructions Per Cycle sau instructiuni per ciclu

Cand producatori precum AMD sau Intel mentioneaza ca “IPC” a crescut cu un anumit procent de la o generatie la alta, se refera la “Instructions Per Cycle” (Instructiuni pe Ciclu). IPC este un indicator crucial de performanta in arhitectura CPU, indicand numarul mediu de instructiuni pe care un CPU le poate executa intr-un ciclu de ceas. Sa detaliem ce inseamna acest lucru si cum influenteaza performanta generala a CPU-ului.

IPC masoara eficienta cu care un CPU executa instructiuni. Este un indicator cheie al eficientei arhitecturale a unui procesor, independent de viteza sa de ceas.

Iata de ce este important IPC:

Eficienta: IPC mai mare inseamna ca procesorul poate face mai multa munca cu fiecare ciclu de ceas. Aceasta eficienta duce la o performanta mai buna, mai ales in scenarii unde viteza de ceas este similara intre CPU-uri.

Scalarea Performantei: Chiar daca viteza de ceas (GHz) nu creste, imbunatatirile in IPC pot totusi sa ofere o performanta mai buna. Acest lucru este crucial pentru obtinerea de castiguri in puterea de calcul fara a impinge limitele consumului de energie si generarii de caldura.

Moduri de imbunatatire al IPC

Producatorii obtin imbunatatiri in ceea ce priveste IPC prin imbunatatiri arhitecturale precum:

  • Cai de Executie Optimizate: Reducerea numarului de etape sau a complexitatii operatiunilor necesare pentru executarea instructiunilor.
  • Predictie Imbunatatita a Ramurilor: Prezicerea mai precisa a cailor pe care programele le vor lua, pregatind astfel CPU-ul sa proceseze cele mai probabile rezultate mai rapid.
  • Cache-uri mai mari, mai eficiente: Permit accesul mai rapid la date si instructiuni frecvent utilizate, reducand timpul in care CPU-urile asteapta.
  • Capacitati Imbunatatite de Executie in Afara Ordinii: Permite CPU-urilor sa proceseze instructiuni pe masura ce resursele sunt disponibile, mai degraba decat strict secvential.
  • Cresterea Numarului de Nuclee si Thread-uri: Desi acest lucru nu creste direct IPC, permite procesarea simultana a mai multor instructiuni, completand imbunatatirile IPC.

Cum aflu ce performanta are un procesor? Cum imi dau seama care procesor este mai bun?

Atunci cand doresti sa cumperi un procesor trebuie in primul rand sa te hotarasti la un buget si la modul in care il vei folosi.

Modul in care planuiesti sa folosesti procesorul conteaza enorm. De exemplu, daca programul/jocul pe care vrei sa il rulezi nu este optimizat pentru multiple nuclee sau pentru mai mult de x nuclee, posibil sa ai nevoie de un procesor care are nuclee individuale mai rapide, chiar daca nu are multe nuclee. Si invers.

Cel mai usor si corect poti determina performanta unui procesor cautand benchmark-uri cu el. Si comparand rezultatele cu alte procesoare sau cu procesorul pe care il detii in momentul de fata.

Da, te poti uita si la specificatii precum viteza in GHz, numarul de nuclee, TDP, procesul de fabricatie, dar in ultima instanta, benchmark-ul este indicatorul de performanta reala pe care te poti baza.

Photo of author

Sorin

Scriu, citesc si invat despre diverse lucruri - hardware, software, orice. Fiind oarecum un "Jack of all trades", pur si simplu ador sa stiu câte ceva despre orice.