Sunteți pe pagina 1din 23

Evaluarea rapidă a funcțiilor obiectiv, în vederea

optimizării eficiente a dispozitivelor


electromagntice

autor: ing. Laurențiu Duca


coordonator: prof.dr.ing.
Daniel Ioan
Cuprins
• Introducere

• Tehnici de descompunere paralelă


– Descompunerea recursivă
– Descompunerea datelor
– Descompunerea explorativă
– Descompunerea speculativă
– Descompunerea hibridă

• Funcții obiectiv optimizate


– Problema de benchmark TEAM22
– Problema directă NDET din testarea electromagnetică
nedistructivă

• Concluzii
Strategia de proiectare
a unui program paralel
Tehnici de descompunere
(1)
• Împărțirea problemei computaționale
în părți mai mici, din care toate sau o
parte pot fi executate în paralel

• Descompunerea recursivă
– Utilizând strategia împarte-și-stăpânește,
o problemă este rezolvată prin aplicarea
recursivă a unei divizii similare în
subprobleme mai mici, urmate de
combinarea rezultatelor acestora
Tehnici de descompunere
(2)
• Descompunerea datelor
– datele pe care se vor efectua calculele sunt
partiționate
– fiecărui task îi este asignată munca de calcul a
unei porțiuni
– ex: alg. pe matrici (înmultire matrice-vector,
matrice-matrice).
• Descompunerea explorativă
– utilizată pentru a descompune probleme ale
căror computații corespund unui spațiu de
căutare a soluțiilor
– task-urile neterminate pot fi terminate imediat ce
o soluție a fost găsită de unul dintre task-uri
Tehnici de descompunere
(3)
• Descompunerea speculativă
– utilizată când un program poate lua una din
multiple ramificații posibile
– scenariu similar cu evaluarea în paralel a
ramificațiilor unei instrucțiuni de tipul switch/case,
înainte ca datele de intrare ale instructiunii să fie
disponibile

• Descompunerea hibridă
– deseori, o computație este structurată din
multiple stagii și este uneori necesara aplicarea a
mai multor tipuri de descompuneri, în diferite
stagii
Problema de benchmark
TEAM22
• constă în optimizarea unui dispozitiv SMES
• configurație SMES care are doi solenoizi prin care
trec curenți de sensuri opuse

• obiective:
- energia magnetică
stocată sa fie 180 MJ
- câmpul de dispersie
(la 10 m) să fie minim
- câmpul magnetic să
satisfacă condiția ce
garantează
supraconductibilitatea
TEAM22 (2)
• restricții:   R1
[m]
R2
[m]
h1/2
[m]
h2/2
[m]
d1
[m]
d2
[m]
J1
[MA/
J2
[MA/
m 2] m 2]
min 1.0 1.8 0.1 0.1 0.1 0.1 10.0 -30.0
max 4.0 5.0 1.8 1.8 0.8 0.8 30.0 -10.0

• condiția ce asigură faptul că bobinele


nu îsi pierd supraconductibilitatea: |J| ≥
(−6.4|B|+54.0) A/mm2
• funcția obiectiv:
TEAM22 (3)
Profilul flat întors de utilitarul gprof
% cumulative self self total
time seconds seconds calls ms/call ms/call name
100.05 0.01 0.01 27892 0.00 0.00 King
0.00 0.01 0.00 189706 0.00 0.00 InterLin
0.00 0.01 0.00 116680 0.00 0.00 ASpira
0.00 0.01 0.00 23336 0.00 0.00 ABaraDepRec
0.00 0.01 0.00 3520 0.00 0.00 BSpira
0.00 0.01 0.00 2650 0.00 0.00 BzSpira
0.00 0.01 0.00 389 0.00 0.02 ABaraDep
0.00 0.01 0.00 174 0.00 0.00 BzBaraRec
0.00 0.01 0.00 48 0.00 0.00 BBaraDep
0.00 0.01 0.00 4 0.00 0.18 BzBaraApColt2
0.00 0.01 0.00 2 0.00 2.81 EnergieProprie
0.00 0.01 0.00 2 0.00 0.00
cpu_compute_elapsed_time
0.00 0.01 0.00 1 0.00 3.64 EnergieMutuala
0.00 0.01 0.00 1 0.00 10.00 GeomOF
0.00 0.01 0.00 1 0.00 10.00 evaluate
0.00 0.01 0.00 1 0.00 10.00
team22ObjectiveFunction
TEAM22 (4)
Graful de apeluri prezentat de gprof
index % time self children called
name
...
-----------------------------------------------
0.00 0.01 116680/116680
ABaraDepRec [7]
[6] 92.5 0.00 0.01 116680
ASpira [6]
0.01 0.00 25788/27892
King [1]
0.00 0.00 181784/189706
InterLin [16]
-----------------------------------------------
0.00 0.01 23336/23336
ABaraDep [8]
[7] 92.5 0.00 0.01 23336
ABaraDepRec [7]
0.00 0.01 116680/116680
TEAM22 (5)
Graful simplificat al apelurilor funcțiilor copil
team22ObjectiveFunction()->evaluate()->GeomOF()-
>EnergieMutuala(), EnergieProprie(), BBaraDep(),
BzBaraApColt2()
EnergieMutuala()->ABaraDep()
EnergieProprie()->ABaraDep()
ABaraDep()->ABaraDepRec()->ASpira()->InterLin(), King()
BzBaraApColt2()->BzBaraRec()->BzSpira()->InterLin(), King()
BBaraDep()->BSpira()->InterLin(), King()

Tabelul 5.5. Timpii de rulare a funcțiilor de interes în punctul


(RSp1= 1.366, DSp1=0.598, HSp1=1.167·2, RSp2= 1.825,
DSp2=0.291, HSp2=1.551·2)
Funcția Numărul de Timp de rulare Timp de rulare
apeluri din cod original (ms) cod paralelizat
GeomOf() (ms)
EnergieMutu 1 7.651 6.103
ala()
EnergiePropr 2 17.434 9.393
ie()
ABaraDep() 1 0.092 0.558
BBaraDep() 48 0.583 -
BzBaraApColt 4 0.450 -
TEAM22: rapid vs. original
• SPSO pe funcția obiectiv TEAM22, 128
particule 7000
Time (ms)

6000

5000

4000

3000 TEAM22-rapid
TEAM22-original

2000

1000

0
0 5 10 15 20 25

SPSO iteration
TEAM22 – EnergieProprie(1)
• for(i=0;i<=n;i++)
• {
• r0=rsp-dsp/2+i*dsp/n;
• for(j=0;j<=m;j++)
• {
• z0=zsp+j*hsp/(2*m);
• d[0]=r0-(rsp-dsp/2); d[1]=(rsp+dsp/2)-r0;
• h[0]=z0-(zsp-hsp/2); h[1]=(zsp+hsp/2)-z0;
• r0A=0;
• if(i>0)
• {
• r0A+=AbaraDep(r0,z0,r0-d[0]/2,z0-h[0]/2,d[0],h[0],DstEtalon2,interp,EI, KI, Step, From);

• if(j<m)
• r0A+=AbaraDep(r0,z0,r0-d[0]/2,z0+h[1]/2,d[0],h[1],DstEtalon2,interp,EI, KI, Step, From);
• }
• if(i<n)
• {
• r0A+=AbaraDep(r0,z0,r0+d[1]/2,z0-h[0]/2,d[1],h[0],DstEtalon2,interp,EI, KI, Step, From);
• if(j<m)
• r0A+=AbaraDep(r0,z0,r0+d[1]/2,z0+h[1]/2,d[1],h[1],DstEtalon2,interp,EI, KI, Step, From);
• }
• EP+=ArieRel(i,j,n,m)*r0A;
• }
• }
TEAM22 – EnergieProprie(2)
• // pthread_create
• int tid = 0;
• for(i=0;i<=n;i++)
• {
• r0=rsp-dsp/2+i*dsp/n;
• for(j=0;j<=m;j++)
• {
• z0=zsp+j*hsp/(2*m);
• d[0]=r0-(rsp-dsp/2); d[1]=(rsp+dsp/2)-r0;
• h[0]=z0-(zsp-hsp/2); h[1]=(zsp+hsp/2)-z0;
• //r0A=0;
• if(i>0)
• {
• tid++;
• vtid[tid] = tid;
• vabara[tid].r0=r0; vabara[tid].z0=z0; vabara[tid].rsp=r0-d[0]/2;vabara[tid].zsp=z0-h[0]/2;
vabara[tid].dsp=d[0]; vabara[tid].hsp=h[0];
• vabara[tid].dstEtalon=DstEtalon2; vabara[tid].interp=interp; vabara[tid].EI=EI;
vabara[tid].KI=KI; vabara[tid].Step=Step; vabara[tid].From=From;
• if(pthread_create(&vthreads[tid], NULL, &callABaraDep, &vtid[tid])) {
• perror("pthread_create");
• exit(1);
• }
• ...
TEAM22 – EnergieProprie(3)
• // pthread_join
• tid = 0;
• for(i=0;i<=n;i++)
• {
• r0=rsp-dsp/2+i*dsp/n;
• for(j=0;j<=m;j++)
• {
• z0=zsp+j*hsp/(2*m);
• d[0]=r0-(rsp-dsp/2); d[1]=(rsp+dsp/2)-r0;
• h[0]=z0-(zsp-hsp/2); h[1]=(zsp+hsp/2)-z0;
• r0A=0;
• if(i>0)
• {
• tid++;
• // wait for completion
• if (pthread_join(vthreads[tid], NULL))
• perror("pthread_join");
• r0A+=abararet[tid];
(modif.)
din testarea electromagnetică
•specimen: onedistructivă
placă din material
conductor, de formă paralelipipedică
40x40x1.25mm3
și conductivitate 
=106S/m, ce conține un
defect

• scanare cu frecvența de 150kHz și la o


distanță de 0.5mm de placă cu o bobină
standard (dint=1.2mm, dext=3.2mm,
h=0.8mm) cu 140 de spire
NDET (2)
• problema directă presupune analiza
perturbației câmpului electromagnetic
datorată unui defect cunoscut
• solver dezvoltat de dl. conf. Mihai
Rebican bazat metoda hibrida FEM-BEM

• problema se reduce la rezolvarea unui


sistem liniar de ecuații de forma , în
care A este o matrice plină cu
coeficienți complecși
NDET - optimizare

• timpul de rezolvare se poate îmbunătăți, dacă


în loc de utilizarea bibliotecii LAPack, se
utilizează biblioteca MAGMA ce paralelizează
rezolvarea sistemului folosind dispozitive GPU

• rezolvare în două etape: magma_zgetrf_gpu()


care realizează descompunerea LU a matricei
A și magma_zgetrs_gpu() ce rezolvă sistemul
NDET - magma vs lapack
• GPU Tesla M2070 cu arhitectură Fermi, c.c.
2.0 cu14 unități SM, fiecare cu 32 de core-
uri CUDA și memorie globala 5 GB.

• timpii de rezolvare folosind dispozitivul


GPU cu biblioteca MAGMA 1.6 au fost
comparați cu rezolvarea folosind biblioteca
LAPack, Intel MKL 11.1 ce a rulat în paralel
pe 12 fire de execuție pe un sistem Intel
Xeon X5650 @ 2.67GHz și memorie 32 GB.
NDET – magma vs lapack:
zgetrf (1)
4
Timp (s)
3.5

2.5

2
magma_zgetrf_gpu()
1.5 lapackf77_zgetrf()
1

0.5

0
0 1000 2000 3000 4000 5000 6000

Dimensiunea matricei
NDET – magma vs lapack:
zgetrf (2)
250

Timp (s)
200

150

magma_zgetrf_gpu()
100
lapackf77_zgetrf()

50

0
0 5000 10000 15000 20000

Dimensiunea matricei
NDET – magma vs lapack:
zgetrs
5
Timp (s)

4.5

3.5

2.5
magma_zgetrs_gpu()
2
lapackf77_zgetrs()
1.5

0.5

0
0 2000 4000 6000 8000 10000 12000 14000 16000

Dimensiunea matricei
Concluzii
• în acest referat au fost prezentate tehnici de
calcul de înaltă performanță folosite pentru
evaluarea rapidă a funcțiilor obiectiv

• pentru problema directă NDET din testarea


electromagnetică nedistructivă s-a obținut o
îmbunătățire de circa trei ori a timpului de
rezolvare a sistemului

• pentru problema de benchmark TEAM22 s-a


obținut o îmbunătățire a timpului de rulare a
funcției obiectiv cu cel puțin 40%.

S-ar putea să vă placă și