/ / Existuje limit na otvorenie lokálnej pamäte? - opencl, gpgpu, gpu-shared-memory

Existuje limit pre lokálnu pamäť OpenCL? - opencl, gpgpu, gpu-zdieľaná pamäť

Dnes som pridal ďalšie štyri __local premenných do môjho jadra na medzipamäťVýsledkom je len pridanie štyroch ďalších premenných do podpisu jadra a pridanie príslušných argumentov jadra, ktoré spôsobia, že všetky výstupy jadra budú "0" s. Žiadna z funkcií cl nevráti kód chyby.

Ďalej som sa snažil len pridať jednu z dvoch menších premenných. Ak pridám len jednu z nich, funguje to, ale ak ich pridám, tak sa rozpadne.

Mohlo by to teda toto správanie OpenCL znamenať, že som mu pridelil veľa __local Pamäť? Ako zistím, koľko __local pamäť je použiteľná pre mňa?

odpovede:

19 pre odpoveď č. 1

Množstvo lokálnej pamäte, ktoré zariadenie ponúka na každej zo svojich výpočtových jednotiek, môže byť dotazované pomocou CL_DEVICE_LOCAL_MEM_SIZE vlajku s clGetDeviceInfo funkcie:

cl_ulong size;
clGetDeviceInfo(deviceID, CL_DEVICE_LOCAL_MEM_SIZE, sizeof(cl_ulong), &size, 0);

Vrátená veľkosť je v bajtoch. Každá pracovná skupina môže vyhradiť túto veľkú pamäť presne pre seba. Všimnite si však, že ak pridelí maximum, môže to zabrániť plánovaniu ostatných pracovných súbežne na tej istej výpočtovej jednotke.


6 pre odpoveď č. 2

Samozrejme, že je, pretože miestna pamäť je fyzický radšej než virtuálne.

Používame, od práce s virtuálnou adresoupriestor na CPU, teoreticky mať toľko pamäte, ako chceme - potenciálne zlyhanie na veľmi veľké veľkosti kvôli stránkovací súbor / swap oddiel beží, alebo možno ani to, kým sme sa skutočne snažia používať príliš veľa pamäte, takže to môže " t byť mapované na fyzickú RAM a disk.

Toto nie je prípad vecí ako jadro operačného systému počítača (alebo jeho časti na nižšej úrovni), ktoré potrebujú prístup k určitým oblastiam v aktuálnej pamäti RAM.

Nie je to tiež prípad globálnej a lokálnej pamäte GPU. Nie je* stránkovania pamäte (remapping vnímaného vlákna)adresy na adresy fyzickej pamäte); a žiadna výmena. Konkrétne pokiaľ ide o lokálnu pamäť, každá výpočtová jednotka (= každý symetrický multiprocesor na GPU) má veľa pamäte RAM, ktorá sa používa ako lokálna pamäť; zelené dosky tu:

tu zadajte popis obrázku

veľkosť každej takejto dosky je to, čo dostanete

clGetDeviceInfo( · , CL_DEVICE_LOCAL_MEM_SIZE, · , ·).

Na ilustráciu, na nVIDIA Kepler GPU, veľkosť lokálnej pamäte je buď 16 KBytes alebo 48 KBytes (a doplnok na 64 KBytes sa používa na ukladanie do pamäte cache do pamäte Global). Takže dnes, Lokálna pamäť GPU je v porovnaní s globálnou pamäťou zariadenia veľmi malá.


1 - Na nUIDIA GPU počnúc architektúrou Pascal je podporované stránkovanie; ale to nie je bežný spôsob používania pamäte zariadenia.


4 pre odpoveď č. 3

"Nie som si istý, ale cítil som, že to treba vidieť."

Stačí prejsť na nasledujúce odkazy. Prečítajte si to.

Veľké čítanie: OpenCL - Pamäťové priestory.

Trochu súvisiace veci: s: