Az OpenCL programozási nyelv

Párhuzamosság

Szintaxis

Nyelvi szinten a párhuzamosság támogatása kimerül a vektor típusokon való műveletek hatékony elvégzésével. Ezek kihasználják a grafikus processzorok hatékony utasításkészletét, illetve a CPU-k SSE utasításait. További nyelvi konstrukciók hiányának oka, hogy az OpenCL programok alapvetően párhuzamos futásra készülnek, melyek vezérléséért az OpenCL API-n keresztül a gazdaprogram a felelős.

Kommunikáció

A teljesítményre való tekintettel a szálak a kommunikációhoz osztott memóriát használnak.

Erre két szinten van lehetőség:

Szinkronizáció

Szinkronizációt nyelvi szinten a munkacsoportok között, illetve API szinten a parancslistában elhelyezett parancsok között tudunk kiváltani. A kódban kiadott barrier parancs segítségével egy szinkronizációs pontot hozhatunk létre. A munkacsoporton belüli szálak futása felfüggesztődik addig, míg a munkacsoport összes tagja el nem éri ezt parancsot. Abban az esetben, ha egy szál nem jut el a barrier utasításig, akkor a többi szál blokkolódik. Ezért veszélyes a parancs használata feltéles szerkezetekben illetve ciklusokban.

Memory fence: Elrendeli töltések és tárolások végrehajtását a kernelt futtató munkaegység által. Ez azt jelenti, hogy a mem_fence() utasítást megelőző töltő és tároló utasítások végrehajtódnak mielőtt bármely töltő vagy tároló utasítás a mem_fence() után végrehajtásra kerülne.