OpenCL
Az
Open Computing Language
(OpenCL) egy keretrendszer heterogén számítási platformokon (cpus, gpus, dsps, fpgas, asics stb.) végrehajtott programok írására.
Áttekintés
Ennek a cikknek a célja a Gentoo implementációjával és sajátosságaival kapcsolatos kérdések kezelése, ezért az áttekintés rövid lesz. A téma elméleti aspektusainak jobb megértéséhez tekintse meg az OpenCL Wikipédia-cikket .
Az OpenCL egy egyszerű interfésszel rendelkező könyvtárként jelenik meg.
-
Szabványosított API fejlécfájlok (például
#include CL/cl.h) C és C++ programozási nyelvek számára. - Az OpenCL függvénykönyvtár (például libOpenCL.so ).
A szabvány lehetővé teszi, hogy egy rendszeren több OpenCL platform legyen jelen, és minden platform különböző eszközöket láthasson. Minden eszköz rendelkezik bizonyos számítási jellemzőkkel (például számítási egységek száma, optimális vektorméret, memóriahatárok, ...).
Az OpenCL szabvány lehetővé teszi OpenCL kernelek betöltését, amelyek C99-szerű kódrészletek, és amelyeket az OpenCL implementációk JIT-fordítanak (többségük a LLVM használatára támaszkodik), majd végrehajtják ezeket a kerneleket a célhardveren. Funkciókat biztosítanak a kernelek forráskódból történő lefordítására, betöltésére, az adatok átvitelére a céleszközökkel oda-vissza stb.
A hardvergyártók kihasználhatják ezt a szabványt azáltal, hogy OpenCL alapelemeket valósítanak meg a saját hardverükön.
Egy OpenCL implementáció telepítése azt jelenti, hogy hozzáadunk egy OpenCL API-t megvalósító könyvtárat, valamint egy hivatkozást a könyvtár elérési útvonalára az ICD (Installálható Ügyfélmeghajtó) adatbázisban, egy fájlként a /etc/OpenCL/vendors könyvtárban.
Létezik egy ICD betöltő, amelyet egy általános betöltő vagy valamelyik implementáció biztosíthat. Az OpenCL legtöbb használati esetében ezek közül egyet kell kiválasztani a eselect opencl használatával.
Az OpenCL host és eszköz API függvényhívásai, valamint a memóriarendszer szabványosítva lettek, de ez nem jelenti azt, hogy a különböző implementációkra portolható programkód minden esetben hatékony lesz mindegyiken. Gyakran a programkódot egy adott implementáción kell tesztelni a problémák kiküszöbölése érdekében. Részletek az megvalósítás érvényesítése és az implementáció finomhangolása szakaszokban.
Implementációk Linuxon
Itt vannak upstream projektek, amelyek OpenCL implementációt biztosítanak.
- A 'pocl' egy nyílt forráskódú, LLVM-alapú OpenCL implementáció a CPU számára, amely nem feltétlenül a leggyorsabb, de oktatási célokra hasznos.
- A 'mesa' egy folyamatban lévő OpenCL implementációval rendelkezik, amely néhány GPU eszközön működik.
- Az 'AMD' biztosítja az AMD APP SDK-t [1] , amely tartalmaz egy OpenCL könyvtárat.
- Az 'NVIDIA' biztosítja a CUDA eszközkészletet [2] , amely egy OpenCL könyvtárat tartalmaz.
- Az 'Intel' Linuxon rendelkezik egy implementációval CPU eszközökhöz, valamint egy másik implementációval GPU eszközökhöz ("Beignet").
Az implementációk a további alfejezetekben kerülnek kifejtésre.
ICD
A dev-libs/opencl-icd-loader szoftvercsomag egy közvetítőréteget biztosít, amely lehetővé teszi különböző OpenCL implementációk használatát, és tartalmazza az OpenCL.pc pkg-config leíró fájlt is.
Mesa (rusticl)
2023 végétől a
media-libs/mesa
szoftvercsomag
opencl
USE jelölőzászlóval történő telepítése egy OpenCL 3 telepítést biztosít a rusticl segítségével, amely a radeonsi segítségével működik. Ennek használatához exportálnia kell a
RUSTICL_ENABLE=radeonsi
környezeti változót, mielőtt egy OpenCL-t használó alkalmazást futtatna (például
RUSTICL_ENABLE=radeonsi clinfo
).
Mesa (clover)
2023 közepétől a
media-libs/mesa
szoftvercsomag
opencl
USE jelölőzászlóval történő telepítése egy OpenCL 1.1 telepítést biztosít, amely az Evergreen-től a Sea Islands AMD GPU családokig működik (a Vega és későbbi GPU családok, például a Navi, nem támogatottak). Az újabb GPU-khoz tekintse meg az
AMD
szakaszt lentebb. A funkciók teljes listáját megtalálja a
GalliumCompute Matrix
weboldalon.
A media-libs/mesa-20.3 szoftvercsomag óta támogatja az OpenCL 1.2-t .
Intel - CPU
Az Intel CPU SDK-t a dev-util/intel-ocl-sdk szoftvercsomag biztosítja, amely megtalálható a portage szoftvercsomag-kezelőben.
Intel - GPU
Intel Graphics Compute Runtime
A Broadwell processzorsorozattól kezdve az OpenCL-hez az Intel Graphics Compute Runtime-et a dev-libs/intel-compute-runtime szoftvercsomag biztosítja.
Telepítse manuális úton a virtual/opencl megjegyzés javaslata szerint (csak 64 bites verzió).
root
#
emerge --ask dev-libs/intel-compute-runtime
AMD
Az AMD legújabb OpenCL implementációja a 'ROCm' (Radeon Open Compute), amely támogatja a GFX8 és újabb GPU lapkakészleteket (Fiji, Polaris, Vega). A 'GFX7' lapkakészletek engedélyezve vannak, de hivatalosan nem támogatottak. Régebbi lapkakészletek esetén használja a 'Mesa clover' (fent) vagy az 'amdgpu-pro-opencl' (lent) implementációkat. A ROCm forráskódja elérhető a
RadeonOpenCompute/ROCm GitHubon
. A ROCm elérhető Gentoo alatt, telepítse a
dev-libs/rocm-opencl-runtime
szoftvercsomagot. A hibamentes működés érdekében szükség lehet a
media-libs/mesa
szoftvercsomag forráskódból történő újbóli lefordítására a
-opencl
USE jelölőzászlóval.
A ROCm megfelelő működéséhez az AMDGPU meghajtókkal a következő kernelforráskódban megtalálható opciókat kell beállítani:
Memory Management options --->
[*] Memory hotplug
[*] Allow for memory hot remove
[*] Device memory (pmem, HMM, etc...) hotplug support
Device Drivers --->
Graphics support --->
<M/*> AMD GPU
[*] Always enable userptr write support
<M/*> HSA kernel driver for AMD GPU devices
Létezik továbbá a dev-libs/amdgpu-pro-opencl szoftvercsomag, amely az Ubuntu AMDGPU-PRO illesztőprogram-szoftvercsomagból származó zárt forráskódú OpenCL függvénykönyvtárakat biztosítja. Ezeket a könyvtárakat általában a zárt forráskódú AMDGPU-PRO illesztőprogramokkal használják, de ez a szoftvercsomag lehetőséget biztosít a felhasználóknak arra, hogy kipróbálják, vajon használhatják-e őket a nyílt forráskódú AMDGPU illesztőprogramokkal.
A zárt forráskódú OpenCL könyvtárak és a nyílt forráskódú illesztőprogramok keverése hivatalosan semmilyen módon nem támogatott. Ennek ellenére bizonyos szinteken már voltak sikerek [1] [2] . Azok a felhasználók, akik problémákba ütköznek, kérjenek segítséget a fórumokon, és ne jelentsék be hibaként a problémát.
nVidia
Az illesztőprogramot a dev-util/nvidia-cuda-toolkit szoftvercsomag biztosítja, amely megtalálható a fő ebuild szoftvercsomag-tárolóban.
Használattal kapcsolatos megjegyzések
OpenCL információk megjelenítése
Az OpenCL rendszer képességeiről szóló információk megtekinthetőek a dev-util/clinfo szoftvercsomag használatával.
Megvalósítás érvényesítése
A megvalósítás (különösen a kísérleti) ellenőrizhető tesztelésre szánt szoftvercsomagok futtatásával, például:
- piglit : Nyílt forráskódú OpenGL/OpenCL tesztelésre szánt szoftvercsomag. Egyszerű piglit tesztek számára tekintse meg GalliumCompute oldalt.
Megvalósítás finomhangolása
A fő gyártók valamilyen fejlett dokumentációt biztosítanak a hardverük maximális kihasználása számára:
- nVidia: Az nVidia hardvert célzó fejlesztők számára az nVidia biztosít egy Legjobb gyakorlatok útmutatót .
- AMD: Az AMD hardvert célzó fejlesztők számára az AMD biztosít egy optimalizálási útmutatót .
Néhány jellemzőt nem egyszerű megtalálni. A felfedezés lehetséges módja a benchmark tesztek.
LLVM DLL pokol
Az LLVM egyre inkább központi függvénykönyvtárrá válik, és a legtöbb megvalósítás használja. Ha a felhasználó vagy a megvalósító nem elég óvatos, akkor összekapcsolási problémák léphetnek fel (szimbólumütközések, többször meghívott és nem megfelelően kezelt konstruktorok stb.). Ez sok megvalósításnál megfigyelhető.
Hivatkozások
- ↑ AMDGPU and OpenCL - Reddit
- ↑ Post 8087132 - Gentoo Forums