Célok
Ennek az anyagrésznek a célja a CUDA szálkezelés tisztázása. A programok megértse után az olvasó tisztában lesz az alapvető CUDA szálkezeléssel, és képes lesz jó minőségű nagyban párhuzamos kódokat írni GPU-ra.
Ennek az anyagrésznek a célja a CUDA szálkezelés tisztázása. A programok megértse után az olvasó tisztában lesz az alapvető CUDA szálkezeléssel, és képes lesz jó minőségű nagyban párhuzamos kódokat írni GPU-ra.
A CUDA-ban nagy számú párhuzamosan futó szálat indíthatunk el egyszerre. Ez egy sztruktúrált formában történik több szinten az által, hogy a <<<grid, block>>> indítási paraméterekben megadjuk astruktúrát.
A szálak fent megadott struktúráltsága nem véletlen. A megértéséhez szükség van a GPU felépítésének ismeretére.
A GPU-ban multiprocesszorok vannak amelyek ALU-k tömbjei. Ezek a multiprocesszorok végzik a számítást. Az elindított rács blokkjait és szálait a GPU ütemezője osztja ki a multiprocesszorokra úgy, hogy szálak a szálakat kiosztja egy-egy ALU-nak.
Fontos még, hogy a kiosztásra nincs ráhatásunk. Illetve ha egy blokk bekerült a multiprocesszorba, akkor ott is marad amíg az összes szálja le nem futott. Ha egy blokk végzett akkor az ütemező eg másik blokkot tölt a helyére. A legjobb ha a blokkok sorrendjét és kisztását véletlenszerűnek tekintjük.
Tehát egy blokk csak egy mutiprocesszorban dolgozik és ha végzett nem lehet visszatölteni. Ez az oka, hogy a programunk szálainak fóüggetlennek kell lennie. Van sorrend a szálak végrehajtása között, amire nincs ráhatásunk.
Licensed under the Creative Commons Attribution Share Alike License 4.0