Calculatoare și tehnologia informației [603871]

UNIVERSITATEA TEHNICĂ „Gheorghe Asachi” din IAȘI
FACULTATEA DE AUTOMATICĂ ȘI CALCULATOARE
DOMENIUL: Calculatoare și tehnologia informației
SPECIALIZAREA:Tehnologia informației
Benchmark GPU
Student: [anonimizat], 2017

Cuprins
Introducere…………………………………………………………………………………………………………………….. 1
Capitolul 1. Descrierea aplicației ………………………………………………………………………………………. 3
1.1. Mod de utilizare…………………………………………………………………………………………………… 3
1.2. Analiza aplicațiilor existente pe piață ……………………………………………………………………… 4
Capitolul 2. Arhitectura GPU ……………………………………………………………………………………………. 6
2.1. Cum fucționează un GPU ……………………………………………………………………………………… 6
2.2. Arhitectura CUDA ……………………………………………………………………………………………….. 8
2.3. General purpose computing on GPU (GPGPU) ……………………………………………………….. 9
Capitolul 3. Implementarea aplicației ………………………………………………………………………………. 10
3.1. Design-ul aplicației …………………………………………………………………………………………….. 10
3.2. Tehnologii utilizate ……………………………………………………………………………………………… 10
3.3. Dinamic QML ……………………………………………………………………………………………………. 10
3.4. Sincronizarea view-urilor …………………………………………………………………………………….. 10
3.5. Elemente de prelucrare ale imaginilor …………………………………………………………………… 10
3.6. Lățimea de bandă. Teoretic vs Practic ……………………………………………………………………. 10
3.7. Testarea vitezei de transfer între diferite tipuri de memorie ……………………………………… 10
3.8. Interfata Web……………………………………………………………………………………………………… 10
Capitolul 4. Evaluare …………………………………………………………………………………………………….. 11
4.1. Teste………………………………………………………………………………………………………………….. 11
4.2. Rezultate……………………………………………………………………………………………………………. 11
4.3. Probleme întâmpinate și soluții de rezolvare ………………………………………………………….. 11
Concluzii……………………………………………………………………………………………………………………… 12
Bibliografie………………………………………………………………………………………………………………….. 13
Anexe………………………………………………………………………………………………………………………….. 14

Benchmark GPU
Adrian Aioanei
Rezumat
Introduceți aici un scurt rezumat al lucrării…

Introducere
Introducere
Aplicația își propune testarea și interogarea performanțelor plăcilor grafice dezvoltate de
compania Nvidia pentru a sublinia performanțele superioare pe care le oferă plăcile video acuale
în defavoarea CPU-urilor. Dezvoltarea plăcilor video a fost întotdeauna îndreptată spre
procesarea cantităților mari de date cât mai rapid și mai eficient posibil. Acest fapt a dus la o
creștere exponențiala în ceea ce privește puterea de procesare a GPU-urilor spre deosebire de
CPU-uri unde se pare că a ajuns într-un impas datorită constrângerilor fizice. Acest lucru
împreună cu posibilitatea rulării propriului cod pe GPU a dus la apariția conceptului de GPGPU
(General-Purpose computing on GPU), concept care a făcut posibilă utilizarea performanțelor
plăcilor video în domenii diverse.
Companiile care dezvoltă plăci grafice precum AMD/ATI și NVIDIA au dezvoltat
procesoare grafice capabile de procesare masivă în paralel care dispun de arhitecturi hardware
special dezvoltate în ideea procesării paralele. Utilizarea procesoarelor grafice pentru a executa
algoritmi în paralel diminuează considerabil timpul de execuție în comparație cu implementarea
clasica, secvențiala pe CPU.
Tehnologia este într-o continuă dezvoltare iar pe măsură ce știința avansează apar
aplicații tot mai complexe care tind să ofere un răspuns utilizatorului în timp real, însă de cele
mai multe ori nu este atât de simplu. Oamenii de știință s-au confruntat continuu cu nevoia de a
procesa cantități imense de date într-un timp cât mai scurt posibil, iar pentru rezolvarea acestei
probleme plăcile video vin cu o rezolvare.
În momentul de față programarea paralelă pe GPU este întâlnită în domenii diverse
începând de la cercetare, simulări fizice, procesare de semnale, rețele neuronale pana la sisteme
predicție unde viteza de procesare în cazul unor aplicații a fost crescută de 100 de ori față de
cazul general unde era folosit un procesor obișnuit.
Datorită dezvoltării spectaculoase și a promisiunilor fondate programarea și paralelizarea
aplicațiilor pe GPU câștigă teren continuu fiind atrase de performanțe sporite, o comunitate
puternică și produse performante, însă momentan cel mai frecvent plăcile video sunt folosite în
cercetare acolo unde volumul de date este impresionant și necesită capabilități hardware de care
un procesor nu dispune.
Aplicația de față este un benchmark, termen larg utilizat în multiple domenii precum
informatica, marketing-ul, financiar și în principal este un proces de măsurare a performanțelor și
1

Adrian Aioanei
a celor mai bune practici specifice fiecărui domeniu în parte. Astfel termenul de benchmark
poate fi utilizat diferit în funcție de domeniul asupra căruia face referire. De exemplu în
domeniul economic termenul de benchmark reprezintă un proces continuu de căutare a celor mai
bune practici care să conducă organizația către un nivel superior de performanță. Ideea de bază a
acestui concept în informatică, este aceea de a analiza performanțele unui device anume cu
privire la capabilitățile pe care le posedă.
NVIDA în anul 2000 a lansat prima placă ce putea fi programată GeForce 3. Acum
programatorul are posibilitatea ca fiecare pixel să fie prelucrat de un „program” care să-i adauge
textură și chiar fiecare vertex poate fi procesat la rândul său de un „program”(shader). În
momentul de față există două alternative pentru programarea plăcilor video. Una este CUDA, iar
cealaltă este OpenCL care oferă și portabilitate pentru dispozitivele dezvoltate de AMD/ATI,
cealaltă alternativă CUDA fiind disponibilă doar plăcile NVIDIA.
Sunt utilizate o varietate de benchmark-uri pentru a testa diferite aspecte ale plăcilor
video cât mai corect posibil. Dacă placa video este una de consum este o idee bună să fie testată
cu scene intensive 3D pentru jocuri. Aceste benchmark-uri sunt greu de reprodus pe dispozitive
diferite însă oferă o idee asupra capabilităților. De asemenea aici s-a descoperit și o problemă în
ceea ce privește frame-ul care este randat și frame-ul care este prezentat utilizatorului, acestă
problemă fiind rezolvată cu ultimele update-uri de la Nvidia.
Un alt tip de benchmark este numit sintetic benchmark. Are multe în comun cu modul în
care se face testarea scenelor 3D pentru jocuri însă în plus oferă o reprezentare foarte exactă a
testelor în fiecare ciclu. Acest lucru permite compararea diferitelor unități de procesare grafică cu
o mare precizie și permite evaluarea capabilităților unde procesorul grafic excelează.
Al treilea tip de benchmark face referire la puterea de calcul. Aceste benchmark-uri arată
adevărata putere de prelucrare a plăcilor video și sunt utilizate în aplicații științifice. Un astfel de
exemplu ar fi interfețele GEMM și FFT. GEMM măsoară performanța plăcii video în
multiplicarea matricilor de dimensiuni marei pe când FFT este Fast Fourier Transformations.
Ambele sunt task-uri paralelizate care pot dovedi potențialul uriaș al device-ului.
O primă problemă care apare în realizarea benchmark-urilor reprezintă posibilitatea de a
reproduce exact același test,în special a scenelor intense din jocuri ce necesită randare 3D pe
device-uri diferite pentru a avea un punct de comparație comun. De cele mai multe ori acest
lucru nu este posibil deoarece în testarea unui procesor video nu intră doar capabilitățile proprii
ci și restul componentelor hardware ce compun sistemul.
2

Capitolul 1. Descrierea aplicației
Capitolul 1. Descrierea aplicației
1.1. Mod de utilizare
Proiectul a fost dezvoltată urmărind un scenariu simplu care să necesite un număr cât mai
mic de pași din partea utilizatorilor pentru a nu crea confuzie în utilizarea interfeței, astfel
aplicația dispune de două view-uri principale și două secundare.
Primul view al aplicației oferă utilizatorului două opțiuni simple și anume aceea de a
lansa în execuție testele sau de a închide aplicația. O dată ce butonul „Start Benchmark” a fost
apăsat utilizatorului îi este deschis un nou view unde îi este indicat stadiul în care se află testele
ce sunt rulate.
O dată ce procesul a fost completat cu succes view-ul curent este închis și este creeat un
nou view care prezintă utilizatorului rezultatele finale obținute centralizate în pagini. Astfel
prima pagina prezintă detalii și specificații generale despre dispozitiv, a doua pagina prezintă
detalii strict referitoare la memorie, ce-a de-a treia rezultatele pe care le-a obținut dispozitivul în
urma testelor, iar cel de-al patrulea prezintă termeni și condiții.
3
Ilustrație 1: User Interface
Ilustrație 2: Loading bar

Adrian Aioanei
1.2. Analiza aplicațiilor existente pe piață
O dată cu dezvoltarea plăcilor video și prezentarea de către dezvoltatori a configurațiilor
tot mai impresionante, a apărut și nevoie de testare practică a specificațiilor teoretice oferite de
dezvoltator în vederea obținerii unei imagini clare asupra dispozitivului.
Pentru testarea acestor performanțe au apărut soft-uri specializate care supun
dispozitivele la teste specifice precum randarea, lățimea de bandă, latența și multe altele. În
momentul de față există câteva soft-uri care par să fie mai agreate și utilizate de publicul larg.
Trei dintre acestea sunt : CUDA-Z, NovaBench, 3DMark. Aceste nu sunt singurele însă sunt cele
mai utilizate de către publicul larg deoarece au o interfață intuitivă și sunt ușor de utilizat. Mai
jos este prezentat un scurt preview al acestor aplicații.
PerformanceTest este un soft oferit de către PassMark Software ce este o firmă cu
vechime în Sydney, California fiind înființată în anul 1998. Firma oferă o gamă largă de soluții
software începând cu soluții pentru statusul și disponibilitatea rețelelor wireless din jur până la
soluții ce investighează performanțele ecranelor LCD. PerformanceTest nu se adresează doar
procesoarelor grafice, ea fiind capabilă să ruleze teste de performanța pentru CPU, disk și
memoria RAM. Aplicația dispune de o interfața modernă însă nu este foarte bine organizată
acesta fiind un prim dezavantaj al aplicației. Un alt dezavantaj îl consideră modul în care pot fi
rulate testele. Nu există nici o opțiune care să realizeze un test complet asupra unui anumit
device. Utilizatorul trebuie să își selecteze personal fiecare test pe care vrea să-l ruleze (Image
filters, Image rendering,GPU compute) iar o dată cu apariția noului rezultat, fereastra anterioară
este ștearsă neavând posibilitatea vizualizării rezultatelor cumulate. Un ultim impediment este
prețul, fiind o aplicație care necesită licență.
4
Ilustrație 3: Benchmark-uri existente

Capitolul 1. Descrierea aplicației
A două aplicație, NovaBench este o aplicație free ce este disponibila pe Windows și
MacOS. Aplicația este una desktop însă conține și o interfață web ce permite utilizatorilor ce
folosesc aplicația să-și vizualizeze rezultatele cât și nota asignată dispozitivului testat. Chiar dacă
NovaBench vine cu un element de noutate, cu aceasta interfață web, testele pe care le realizează
sunt destul de minimale deoarece într-un sigur test se încearcă un mix de operații ceea ce
conduce de cele mai multe ori la rezultate parțial eronate. Comunitatea este aproape inexistentă
iar suportul asupra aplicației este inexistent.
Ultima aplicație prezentată este CUDA-Z. Aceasta este o aplicație multiplatformă ce
poate rula pe 3 dintre cele mai importante sisteme de operare: Windows, MacOS și Linux.
Aplicația fiind disponibilă pe toate cele trei sisteme de operare uneori are un aspect
inestetic. Un alt incovenient al aplicației îl consideră gama de dispozitive pe care le poate testa.
Soft-ul este capabil să testeze device-uri ce aparțin doar companiei Nvidia deoarece la baza
aplicației stă un model de programare paralelă CUDA ce este suportat doar de arhitectura
plăcilor video dezvoltate de Nvidia. Aplicația oferă informații minimale referitoare strict la GPU
precum: lățimea de bandă, dimensiunea memoriei, versiunea de CUDA și dll și alte câteva
informații de interes general. Rezultatele afișate de aplicație pot fi salvate în orice moment într-
un format html sau txt.
5

Adrian Aioanei
Capitolul 2. Arhitectura GPU
2.1. Cum fucționează un GPU
GPU-ul a fost inventat de Nvidia în anul 1999. Inițial unitățile de procesare grafică au
fost dispozitive cu funcție fixă, ceea ce înseamnă că au fost proiectate să proceseze anumite
stadii din pipeline precum vertex shaders sau pixel shaders, însă au evoluat în procesoare
programabile din ce în ce mai flexibile.
Un GPU sau o unitate de procesare grafica este folosită în principal pentru aplicații sau
task-uri grafice. Este un procesor capabil să creeze efecte de lumină, umbră, și transformă
obiectele din contexul curent de fiecare dată când o scenă este redesenată. Acestea sunt sarcini de
ordin matematic care ar pune destul de multă presiune asupra CPU-ului, iar ridicarea acestor
sarcini eliberează cicluri procesor care pot fi utilizate pentru alte task-uri urgente.
Procesoarele moderne cum sunt și GPU-urile folosesc mii de fire de execuție pentru a
conduce sistemul către o lățime de bandă ridicată și latență cât mai mică, iar o dată cu
maturizarea device-urilor, GPU-urile au devenit cipuri programabile manycore în jurul unui șir
de procesoare paralele. Device-ul este construit dintr-un număr de Streaming Multiprocessors
(SM) fiecare dintre ele fiind capabile să suporte mii de thread-uri concurente, mai exact până la
2048 pe arhitecturile moderne.
Managementul thread-urilor incluzând crearea, programarea, sincronizarea este realizat
în totalitate de către SM. Pentru a gestiona eficient numărul mare de thred-uri fiecare SM
folosește arhitectura SIMT (Single Instruction, Multiple Thread) .
Pentru a executa intrucțiuni pe GPU se lansează funcția care se dorește a fi executată (de
obicei aceasta se numește kernel) sub forma unui grid de blocuri de thread-uri care este trimis la
device. O dată ajuns kernel-ul la GPU acesta trimite către SM (Streaming Processor) unul sau
mai multe blocuri. Fiecare SM își crează o coada de warp-uri (un warp conține de obicei 32 de
thred-uri) care este executat pe un clock. Dacă execuția warp-ului nu s-a încheiat într-un clock
acesta este adăugat din nou în coadă. Acest lucru se repetă până se termină de executat blocul
curent. Atunci când s-a terminat execuția este solicitat un nou bloc de la GPU.
Un alt aspect important al GPU-ului este pipeline-ul. Termenul de pipeline este des
întâlnit în grafica computerizată și descrie pașii pe care trebuie să îi urmeze un sistem grafic
pentru a crea o scenă 2D sau 3D, mai concret pipeline-ul este procesul de transformare a
modelului 2D sau 3D în ceea ce se afișează ca rezultat final pe display.
6

Capitolul 2. Arhitectura GPU
Deoarece pașii necesari pentru această operație depind în mare măsură de software-ul și
hardware-ul folosit și de caracteristicile de afișare dorite, nu există un pipeline universal potrivit
pentru toate cazurile. Cu toate acestea, au fost create API-uri grafice, cum ar fi Direct3D și
OpenGL, pentru a unifica pașii asemănători și pentru a controla pipeline-ul unui accelerator
hardware dat. Practic, aceste interfețe API abordează hardware-ul de bază și îl împiedică pe
programator să scrie un cod greu pentru a manipula acceleratoarele de hardware grafice
(NVIDIA / AMD / Intel etc.).
Randarea propriu zisă începe cu una sau mai multe coordonate ce servesc ca intrare
pentru programul de procesarea a coordonatelor(vertex shader) iar în total pipeline-ul cuprinde 4
etape importante precum : Vertex Shader (VS), Geometry Shader, Rasterization și Fragment
Shader (FS). Geometry Shader folosește output-ul primit de la Vertex Shader și operează la nivel
geometric (linie, triunghi). Acest shrader este programabil și poate fi modificat astfel încât sa
adauge sau să elimine puncte dintr-o primitivă. Dacă etapele inițiale se ocupau de coordonate și
geometrie acum apare nevoia randării pixelilor iar pentru acesta trebuie rasterizate primitivele
inițiale. Acest lucru se realizează împărțind primitiva inițială în fragmente individuale care în
cele din urmă v-or fi colorate de Fragment Shader, iar ulterior trasformat în pixeli într-un buffer.
Ultima etapă este cea de Fragment Shader care preia fragmentele generate în timpul procesului
de rasterizare unde se aplică un algoritm creeat de programator pentru a crea valorile finale
pentru culoare și adâncime.
7
Ilustrație 4: GPU Pipeline

Adrian Aioanei
2.2. Arhitectura CUDA
CUDA (Compute Unified Device Architecture) este o arhitectură software și hardware
pentru calculul paralel al datelor dezvoltată de către compania americană NVIDIA. CUDA este
utilizată atât în serile de procesoare grafice destinate utilizatorilor obișnuiți cât și în cele
profesionale. O serie de interfețe de calcul din arhitectura CUDA sunt similare cu cele ale
principalilor competitori: OpenCL de la Khronos Group și DirectCompute de la Microsoft.
Dezvoltatorii pot accesa prin intermediul CUDA setul de instrucțiuni și memoria
elementelor de calcul paralel din procesoarele grafice. Utilizând CUDA, cele mai recente
procesoare grafice NVIDIA pot realiza calcule specifice microprocesoarelor. Totuși, spre
deosebire de acestea, arhitectura procesoarelor video este concepută pentru execuția simultană a
numeroase fire, cu o viteză scăzută și nu a unui singur fir dar foarte rapid. Această tehnică de
rezolvare a problemelor de uz general cu ajutorul procesoarelor video este cunoscută ca GPGPU.
În industria jocurilor pe calculator, pe lângă generarea graficii, procesoarele video mai
realizează și calculele pentru interacțiunea fizică dintre obiecte (fum, foc, fluide). Un exemplu în
acest sens este tehnologia PhysX. CUDA mai este utilizată și în domeniile bioinformaticii,
criptografiei precum și în alte arii ale științei și tehnologiei.
CUDA pune la dispoziție atât un API de nivel low cât și unul de nivel înalt. Primul SDK
CUDA a fost făcut public în data de 15 februarie 2007, având versiuni pentru Microsoft
Windows și Linux. Versiunea 2.0 oferea suport și pentru Mac OS X. Toate seriile de procesoare
NVIDIA (GeForce, Quadro și Tesla) începând cu G8X sunt compatibile CUDA.
CUDA oferă o serie de avantaje față de API-urile tradiționale de prelucrare a datelor cu
ajutorul procesoarelor video:
•Citiri nesecvențiale – se pot face citiri din locații de memorie arbitrare
•Memorie partajată – CUDA pune la dispoziție o regiune cu memorie partajată de mare
viteză (până la 48KB per Multi-Procesor) care poate fi împărțită între firele de execuție.
•Descărcări rapide și recitiri spre și dinspre procesorul video
•Suport complet pentru operațiile cu întregi și pe bit.
Cu toate argumentele mai sus mentionate am putea afirma superioritatea pe care o deține
CUDA însă aici există și anumite limitări:
•CUDA (având capacitatea de calcul 1.x) suportă un subset al limbajului de programare C
și o serie de extensii simple. Lipsesc pointerii la funcții și recursivitatea. Un process ce
rulează va utiliza mai multe spații de memorie disjuncte.
8

Capitolul 2. Arhitectura GPU
•Pentru formatul în virgulă mobilă cu dublă precizie există niște abateri de la standardul
IEEE 754
•Spre deosebire de OpenCL, procesoarele compatibile CUDA sunt fabricate doar de
NVIDIA (începând cu seria GeForce 8, Quadro și Tesla)
•Pentru a se obține cea mai bună performanță, thread-urile ar trebui să ruleze cel puțin în
grupuri de câte 32, atunci când numărul total de thread-uri este de ordinul miilor.
Ramificarea execuției codului programului nu afectează semnificativ performanța dacă
fiecare din cele 32 de thread-uri urmează aceeași cale de execuție.
•Uneori codul valid C/C++ poate împiedica procesul de compilare datorită tehnicilor de
optimizare pe care compilatorul le aplică dacă este obligat să utilizeze resurse limitate.
2.3. General purpose computing on GPU (GPGPU)
General-purpose computing on graphics processing units (GPGPU, de asemenea referit
ca GPGP și mai puțin ca GP²) este tehnica de utilizare a unui GPU, care de obicei manevrează
calculul doar pentru grafica pe calculator, pentru a efectua calcul în aplicații tratate de obicei de
microprocesor. Acest lucru este posibil prin adăugarea de etape de programare și aritmetică de
mare precizie la pipeline-urile de randare, ceea ce permite dezvoltatorilor software să utilizeze
procesarea în flux asupra datelor non-grafice.
Plăcile grafice DirectX 9 suportau doar tipuri de culori întregi sau paletate. Diferite
formate sunt disponibile, fiecare conținând un element roșu, un element verde și un element
albastru. Câteodată o valoare alpha suplimentară este adăugată, pentru a fi utilizată pentru
transparență. Formatele obișnuite sunt :
•8 biți per pixel
•16 biți per pixel – de obicei alocați ca cinci biți pentru roșu, șase biți pentru verde, și cinci
biți pentru albastru.
•24 biți per pixel – opt biți pentru fiecare din roșu, verde, și albastru
•32 biți per pixel – opt biți pentru fiecare din roșu, verde, albastru, și alpha
Pentru grafica de început cu funcție fixă sau cu programabilitate limitată (adică până la și
incluzând DirectX 8.1-GPU) a fost suficientă deoarece aceasta este de asemenea reprezentarea
utilizată în afișare. Această reprezentare are totuși anumite limitări. Având putere de procesare
grafică suficientă, chiar și programatorii grafici doresc să utilizeze formate mai bune, cum ar fi
formatele de date în virgulă mobilă, pentru a obține efecte cum ar fi imagistica de gamă dinamică
extinsă. Multe aplicații GPGPU necesită precizie în virgulă mobilă, care vine cu plăcile grafice
9

Adrian Aioanei
în conformitate cu specificațiile Direct9 X.
Implementările în virgulă mobilă pe GPU-urile NVidia sunt în mare majoritate conform
IEEE; totuși, acest lucru nu se întâmplă pentru toți vânzătorii. Aceasta are implicații pentru
corectitudine care este considerată importantă pentru anumite aplicații științifice. În timp ce
valorile virgulei mobile pe 64 de biți (mobilă în dublă precizie) sunt disponibile de obicei pe
microprocesoare, acestea nu sunt mereu suportate pe GPU-uri; anumite arhitecturi GPU sacrifică
conformitatea cu IEEE în timp ce altele duc lipsă de precizie dublă. Au existat eforturi de a imita
valorile virgulei mobile în dublă precizie pe GPU-uri; totuși, compromisul de viteză neagă orice
beneficiu de a scăpa de calcul pe GPU de la bun început.
Majoritatea operațiilor de pe GPU funcționează în mod vectorial: o singură operație poate
fi executată cu până la patru valori simultan. De exemplu, dacă o culoare <R1, G1, B1> trebuie
să fie modulată de culoarea <R2, G2, B2>, GPU poate determina culoarea rezultată <R1*R2,
G1*G2, B1*B2> printr-o singură operație. Această funcționalitate este utilă în grafică deoarece
aproape fiecare tip de date de bază este un vector (de 2,3, sau 4 dimensiuni). Exemplele includ
noduri, culori, vectori normali, și coordonate de textură. Multe aplicații pot gestiona acest lucru
într-un mod util, și datorită performanței sporite, instrucțiunile vector (SIMD) au fost mult timp
disponibile pe microprocesoare.
GPU-urile pot procesa doar noduri și fragmente independente, dar poate procesa multe
din ele în paralel. Acest lucru este eficient în mod deosebit atunci când programatorul dorește să
proceseze multe noduri și fragmente în același mod. În acest sens, GPU-urile sunt procesoare în
flux – procesoare care pot opera în paralel prin rularea unui singur nucleu în același timp pe mai
multe înregistrări dintr-un flux.
Un flux este un set simplu de înregistrări care necesită calcul similar. Fluxurile furnizează
paralelism de date. Nucleele (în engleză kernel) sunt funcțiile care sunt aplicate fiecărui element
din flux. În GPU-uri, nodurile și fragmentele sunt elementele din fluxuri și shaderele vertex și
fragment sunt nucleele pe care sunt rulate acestea. Deoarece GPU-urile procesează elemente
independent nu există posibilitatea de a avea date partajate sau statice. Pentru fiecare element se
poate citi de la intrare, se poate executa operații pe el, și se poate afișa la ieșire. Este permis să se
aibă intrări și ieșiri multiple, dar niciodată o parte de memorie care poate fi și citită și scrisă în
același timp.
10

Capitolul 3. Implementarea aplicației
Capitolul 3. Implementarea aplicației
3.1. Design-ul aplicației
3.2. Tehnologii utilizate
3.3. Dinamic QML
3.4. Sincronizarea view-urilor
3.5. Elemente de prelucrare ale imaginilor
3.6. Lățimea de bandă. Teoretic vs Practic
3.7. Testarea vitezei de transfer între diferite tipuri de memorie
3.8. Interfata Web
11

Adrian Aioanei
Capitolul 4. Evaluare
4.1. Teste
4.2. Rezultate
4.3. Probleme întâmpinate și soluții de rezolvare
12

Concluzii
Concluzii
13

Adrian Aioanei
Bibliografie
14

Anexe.
Anexe.
Anexa 1.
15

Similar Posts