Módosítások

Intel Xeon Phi

870 bájt hozzáadva, 2016. május 5., 11:24
Ciklus kifejtés
====Párhuzamos szálak ütemezése====
====Ciklus kifejtés====
A technika már egy példa erejéig a vektorizációnál is látható, de ott nem került részletezésre. A megoldás lényege, hogy a kellően nagy ciklust szétdaraboljuk kisebb darabokra, amit már külön feldolgozhatóak, ezzel párhuzamosítva a folyamatokat. Az egy darab kiindulási ciklusból két darab egymásba ágyazott ciklust hozunk létre, ami ugyanazon a feladattéren dolgozik.
 
Eredeti állapot:
<pre>
for (int i = 0; i < n; i++) {...}
</pre>
 
Átírt változat:
<pre>
int STRIP=1024;
for (int ii = 0; ii < n; ii += STRIP)
for (int i = ii; i < ii+STRIP; i++) {...}
 
// ha még van maradék elem, akkor azokon is végrehajtjuk a számításokat
if (n%STRIP != 0) {
for (i=n-(n%STRIP)+1; i<n; i++) {...}
}
</pre>
 
A darabok mérete (STRIP értéke) az adott rendszer és feladat függvényében változhat, tehát ez egyfajta "tuning" paraméter.
 
====Automatikus ciklusösszevonás====
Az OpenMP támogatást nyújt több egymásba ágyazott ciklus "összevonására". Ehhez csak a '''collaps''' fordítási direktívát és az összevonandó ciklusok számát kell megadni. <br />
98
szerkesztés

Navigációs menü