Módosítások

Intel Xeon Phi

472 bájt hozzáadva, 2016. május 5., 13:54
=Szálak párhuzamosítása
Több féle mód létezik a párhuzamosításra. Korábban említettük a SIMD technikát, ami adatpárhuzamosításra való 1 processzoron belül, de létezik még processzorok közti párhuzamosítás, amit az OpenMP segítségével tudunk hatékonyan megvalósítani. Amennyiben gépek közti párhuzamosításra, üzenek küldésre van szükség, akkor az MPI-t kell segítségül hívni. Általános megoldás nem létezik minden feladatra, mert MPI is alkalmas lehet gépen belüli párhuzamosításra, nem csak az OpenMP. Amit mérlegelni kell, hogy mi az amire az alkalmazásnak szükséges van illetve mekkora kommunikációs overhead keletkezik, ha lecseréljük az OpenMP-t MPI-ra. Általában az egymástól független számításokat OpenMP-vel, míg a kommunikációt igénylő feladatokra MPI-t szoktak használni.
====Szálak párhuzamosítása====Az OpenMP-nek környezeti változók segítségével megadható a párhuzamosan futtatható szálak száma. Ezt a következő paranccsal tudjuk megtenni, ahol 5-re állítjuk.
<pre>
export OMP_NUM_THREADS=5 #pragma omp parallel for //for thread paralelizm for (int i = 0; i < n; i++) #pragma simd // Vectorization in inner loop for (int j = 0; j < m; j++) DoSomeWork(A[i][j]);
</pre>
 
Forrásban a párhuzamos szálakat a ''#pragma omp parallel'' segítségével adhatjuk meg.
<pre>
#pragma omp parallel for //külső for szálak párhuzamosítása
for (int i = 0; i < n; i++)
#pragma simd // vektorizáció a belső cikluson
for (int j = 0; j < m; j++)
My_Function(A[i][j]);
</pre>
 
A fordítási direktívák össze is vonhatóak, ilyenkor 1 ciklus is elég.
<pre>
#pragma omp parallel for simd
for (int i = 0; i < n; i++)
My_Function(A[i]);
</pre>
 
=====Változók láthatósága, megosztása=====
<pre>
98
szerkesztés

Navigációs menü