15 iunie 2011

Day 1

Aici incep o serie de articole cu noutati din activitatea de practica de anul acesta; anul trecut nu am facut acest lucru si mi-a parut rau, pentru ca unele lucruri s-au cam "uitat" si intotdeauna e bine sa scrii acolo ce faci, decat sa te bazezi doar pe memorie :) De asemenea, practica de anul acesta aduce cu sine concepte noi si intr-o oarecare masura transmise pe "cale orala" - un motiv in plus ca sa consemnez cate ceva... inca un lucru pe care l-am observat de cand am deschis acest blog a fost ca orice lucru pe care l-am postat a insemnat sa imi dau interesul mai mult (pentru el) decat o faceam in mod obisnuit.

-------------------------------------- //// --------------------------------------------

In primele 3 zile se vor dezvolta notiuni teoretice, urmand ca in urmatoarele 2 saptamani sa se faca aplicatii. Tema practicii: Workflow Heterogeneous Computing - calcul heterogen (pe CPU-uri si GPU-uri), OpenCL .

Meniul de astazi se poate gasi aici, iar eu le voi lua pe rand, in 2-3 cuvinte despre fiecare:


* Description CPU. Current CPU technologies.
CPU = central processing unit;
- roluri: citire, interpretare & executie de instructiuni (operatii aritmetice, logice si de I/E)
- parametri: nr.de nuclee, frecventa, GFlops (nr de giga-floating operations), diametru, nr. tranzistori, registri si dimensiunea lor, cache-uri: L1, L2, L3, FSB (front side bus), CPU socket;
- cresterea performantei prin scaderea diametrului & cresterea frecventei;
- de la frecvente mai mari de 4GHz/procesor, eficienta scade in primul rand prin consumul ridicat de putere (costuri mari) + zgomot mai mare
- tehnologii: multicore & hyper threading. Hyper threading: sistemul de operare vede un singur procesor hyper-threaded ca 2 CPU-uri logice separate, avantajul fiind o planificare mai eficienta, nucleul este tinut ocupat cat de mult posibil.


* SISD paradigm. Singlecore vs Multicore vs Manycore.
SISD = single instruction, single data; executie secventiala, un procesor ~ o instructiune ~ un singur flux de date
- singlecore: un sistem cu un singur nucleu
- multicore: mai multe nuclee independente pe acelasi soclu, un CPU dual core va executa mai repede decat un CPU hyper-threaded; un CPU multicore poate fi si hyper-threaded
- manycore: un procesor cu zeci, sute, sau mii de nuclee


* MMX & SSE & AVX brief intro. Architecture differences (Netburst vs Core).
MMX, SSE, AVX, x86_64, 3DNow - tipuri de instructiuni
- MMX = "multimedia extension"
- SSE = "streaming SIMD extensions" (replica lui Intel la 3DNow al lui AMD) = noi instructiuni pt DSP si procesare grafica
- AVX = "advanced vector extensions"


* Architecture evolution (K8; K10.5, Prescott; Ivy Bridge)


* Benchmarking. Examples SuperPi, SySandra, Lappack, PCMark.


* Performance discussion.


* Important factors in current CPU performance


* CPU frequency vs CPU core count.
Un CPU de frecventa 4 GHz poate fi inlocuit cu 2 nuclee de 2 GHz, performanta este aproape aceeasi (putin mai buna la un singur nucleu), insa consumul este mai favorabil in cazul a 2 nuclee.


* Utilities presented : CPU-Z.


a) When singlecore / multicore ? When many core ?
- singlecore: aplicatii banale (Notepad)
- multicore: aplicatii atat de calcul cat si de preluare date de la dispozitive I/E, un browser cu mai multe tab-uri, Skype-ul (?)
- manycore: calculatoarele de top


b) Memory hierarchy. Why L1? Why L2? Why L3? Problems.
Ierarhie: registri, L1, L2, L3, RAM, HDD, cloud.....
- L1: tip SRAM, mare viteza, dimensiune mica, datele, instructiunile separat + TLB
- L2: dimensiune mai mare decat L1
- L3: optional
Probleme: cache-miss-uri, politica de inlocuire?

c) Check with CPU-Z and describe an architecture.













- nu am hyper-threading :(
- nu am instructiuni de tip AVX
- core speed este ajustat in functie de necesitatile sistemului
- 3 nuclee inseamna de fapt 4, unul fiind dezactivat din fabricatie (costa putin nucleul propriu zis, ajustarea arhitecturii este costisitoare. Motivul: o gama mai variata de preturi)


* Description GPU. Comparison with CPU
GPU = graphical processing unit
Parametri pt o placa video: producator (Nvidia, ATI), frecventa procesor, dimensiune, tip si frecventa memorie, latime magistrala (bus width), bandwidth, etc.
- CPU-ul este pentru calcule generale, iar GPU este strict specializat pe calcule ce tin de grafica, paralelism masiv
- CPU are un set de instructiuni mai bogat
- un GPU poate fi asezat in 3 locuri: pe placa de baza, pe acelasi soclu cu CPU-ul sau integrat cu CPU-ul
- GPU-ul lucreaza cu datele din memoria proprie VRAM, daca datele lipsesc, CPU-ul este cel care ii trimite datele din RAM (transfer costisitor); GPU nu poate comanda (cere) ceea ce ii lipseste;
- GPU = stream processor, 1 stream = {vertex, pixel, geometrical} ; vertex ~ modelare, pixel ~ efecte;
- frecventele GPU sunt mai mici decat cele ale CPU, deci consuma mai putina putere


* Memory hierarchy CPU vs GPU
- GPU nu are cache-uri, poate avea memorie locala pentru fiecare unitate de calcul


* Types of GPU. Discrete (PCI, AGP, PCIe) & Integrated (IGP, APU)
Discrete:
- PCI = "peripheral component interconnect", pentru placi de retea, sunet, modem, porturi USB/seriale, controllers de disc, etc. Nu prea se mai foloseste pt placi video din cauza cresterii latimii de banda, se vor folosi AGP si PCI Express.
- AGP = "accelerated graphics port" - canal de viteza inalta pt conectarea unei placi video la placa de baza.
- PCIe = "PCI Express" (2004) - inlocuieste PCI si AGP;
Integrate:
- IGP = "integrated graphics processor" - sunt de dimensiune limitata, nu pot avea cooler, nu au aceeasi performanta ca placile video, nu pot fi upgradate, solutie buna pt laptop-uri.
- APU = "accelerated processing unit" - poate include GPU-uri, FPGA-uri, etc; rata de transfer intre CPU si GPU este imbunatatita, consum redus.


* GPU evolution. Pipeline vertex/pixel; stream units
Inainte existau core-uri GPU specializate pt calcule de modelare (vertex) sau de efecte (pixel), dezavantajul era ca atunci cand se efectuau calcule de modelare, core-urile specializate pe efecte stateau degeaba; prin stream units, toata lumea face ceva la un moment dat...


* SIMD paradigm. Nvidia architecture evolution ( 5 series; fermi/kepler)
Fermi = arhitectura CUDA de la Nvidia, prima arhitectura completa pt GPU computing, pt HPC (high performance computing)


* Amd architecture evolution ( 9 series ; evergreen/southern island)


* IGP evolution. Intel IGPs, Nvidia & Amd IGPs.


* Benchmarking. 3dmark 2005/2006/vantage.


* Forceware & Catalyst drivers. Differences.
Forceware - driverul de la Nvidia
Catalyst - driverul de la ATI
Un driver Forceware nu poate face ca o placa video ATI sa fie recunoscuta, nici invers.


* Presentation. MultiGPU configurations.


* SLI vs Crossfire vs Lucid. Scalability discussion.


* Utilities presented : GPU-Z


a) When CPU ? When GPU ?


b) Inspect a GPU with GPU-Z. Describe.




















- nu suporta OpenCL, Cuda, DirectCompute...
- bus width de 32 de biti limiteaza serios performanta (chiar daca bandwidth e de 3.2 GBps)
- bus interface este PCI (un pic deprecated)

c) APU GPU vs Discrete GPU ?
In cazul APU GPU (GPU integrat), latimea de banda cu memoria RAM trebuie sa fie suficient de mare cat sa nu tina pe loc GPU-ul care este mai rapid decat un CPU. GPU are nevoie de un flux de mare de date, cat mai rapid. O mare parte din intarzieri este eliminata deoarece datele vin direct din RAM si nu trec din RAM in North Bridge si de acolo in VRAM-ul placii video (cazul Discrete GPU).

Niciun comentariu: