Módosítások

Intel Xeon Phi

964 bájt hozzáadva, 2016. május 4., 11:05
SIMD
====SIMD====
Az adatok hatékonyabb feldolgozására az egyik megvalósítás a SIMD (Single Instruction Multiple Data), amikor is a különálló adatokat úgy kezeli, mintha az vektorok volnának és azon végzi el a vektor-műveletet. Ezzel egy a hardver által támogatott műveletet végzünk egy lépésben egy nagyobb adatmennyiségen, ezzel párhuzamosítva a feldolgozási folyamatot. Ezzel a módszerrel nagyon jó adat szintű párhuzamosítást lehet elérni.<br />
Főbb támogatott műveletek:
* aritmetikai műveletek, bináris operátorok
* összehasonlítások
* konverziók és típus kasztolások
* bit-műveletek: NOT, AND, OR, XOR, XAND
 
Használata: '''simd''' fordítási direktívával lehetséges <br />
Például:
* egyszerű vektorizáció
<pre>
#pragma simd
for (int i = 0; i < n; i++)
A[i] += B[i];
</pre>
 
* adat párhuzamosítás OpenMP segítségével
<pre>
#pragma omp parallel for simd
for (int i = 0; i < n; i++)
DoSomWork(A[i]);
</pre>
 
====AoS -> SoA====
A kiindulás probléma az, hogy a struktúrákat tartalmazó vektort nem lehet jól vektorizálni, mivel a cache-ben tárolt adatok nagy többsége feleslegesen van bent, mivel azon adatokat csak egy későbbi ciklus futás során fogja az alkalmazás feldolgozni. Tehát ezen adatok jelenleg feleslegesen foglalják a cache területet, ahelyett, hogy hasznos adatot tárolnánk ott.
98
szerkesztés

Navigációs menü