OpenMP
OpenMP is een interface voor het programmeren van toepassingen (API) die het programmeren voor meerdere processoren makkelijker maakt. De MP in OpenMP staat voor Multi Processing, Open betekent dat het een open standaard is, wat zoveel betekent dat iedereen er een implementatie van mag maken, zonder dat je daar een of andere instantie voor zou moeten betalen. OpenMP is gespecificeerd voor de talen C/C++ en Fortran.
Om een programma goed gebruik te laten maken van meerdere processoren is het essentieel dat er delen van het programma parallel uitgevoerd kunnen worden. Dit wordt meestal gedaan door meerdere threads aan te maken, en deze threads dan een bepaald deel van het programma uit te laten voeren. Als dit goed wordt gedaan kan er extreem goed parallellisme mee behaald worden. Het is echter ook een vrij pittige manier, omdat veel programma's normaal gesproken erg serieel van opzet zijn. Er zijn vaak maar erg weinig taken die volkomen los staan van eerdere taken.
OpenMP pakt het op een heel andere manier aan. In plaats van verschillende taken los van elkaar te laten lopen probeert het (delen van) één taak, die parallel zou kunnen worden uitgevoerd, tijdens runtime over verschillende threads te verdelen. Deze groep van threads heet een thread team. De programmeur van een programma dat OpenMP gebruikt moet door middel van compiler directives aangeven welke delen parallel uitgevoerd zouden kunnen worden. OpenMP bepaalt dan tijdens runtime welke threads welk deel van welke taak uit moeten voeren.
Een voorbeeld:
#pragma omp parallel for for(int i = 0;i < 100000;i++) { array[i] = array[i] * array[i]; }
In dit voorbeeld geeft de expressie #pragma omp parallel for
aan dat de inhoud van deze programmalus in principe parallel uitgevoerd kan worden. Het is bij deze lus namelijk niet belangrijk dat een eerdere iteratie al afgehandeld is. Of het dan uiteindelijk ook in parallel uitgevoerd gaat worden, en door hoeveel threads dat dan gedaan gaat worden mag OpenMP normaal gesproken zelf bepalen.