Ubuntu Suomen keskustelualueet
Ubuntun käyttö => Ohjelmointi, palvelimet ja muu edistyneempi käyttö => Aiheen aloitti: Snufkin - 21.11.25 - klo:12.42
-
Yritin etsiä netistä listaa, jossa olisi listattuna (tai verrattuna CPU:hun) GPU:n käskykantaa esim. C-kielellä. En onnistunut. Eli osaisiko joku auttaa linkillä tai oikeilla hakusanoilla. Eli haussa yleistieto, mitä kaikkia käskyjä/operaatioita GPU-prosessorin core (SP) voi lopulta suorittaa. Siis miten monimutkaista koodia voi kirjoittaa __global__ kerneliin? Voiko siellä ajaa esim. silmukoita tai ehtolauseita vain vaan simppeleitä matemaattisia operaatioita ja ehkä bittioperaatioita? En hae vastausta mihinkään, vaan yleisason ymmärrystä. CUDA-kieli.
-
CUDA tukee suoraan C-kielen koko syntaksia kernelien kehittämisessä. Eli C-kielisessä CUDA-kernelifunktiossa toimivat kaikki ehtolauseet ja silmukat samoin kuin tavallisessa C-kielisessä funktiossa. Muiden funktioiden kutsuminen kernelin sisältä sen sijaan on rajoitettua. Muistin varaukset tehdään kernelin ulkopuolella, eikä CPU:n puolella suoritettavia funktioita voi luonnollisesti kutsua CUDA-kernelistä.
Perusteet:
https://developer.nvidia.com/blog/even-easier-introduction-cuda/
Monimutkaisempia esimerkkejä:
https://github.com/NVIDIA/cuda-samples
Katso vaikkapa Samples/5_Domain_Specific/ (https://github.com/NVIDIA/cuda-samples/tree/master/Samples/5_Domain_Specific)
Pykälää matalammalla tasolla CUDA-kerneleitä voi koodata PTX-kielellä (https://en.wikipedia.org/wiki/Parallel_Thread_Execution), joka vastaa perinteisten prosessorien symbolista konekieltä (assembly).
-
CUDA tukee suoraan C-kielen koko syntaksia kernelien kehittämisessä. Eli C-kielisessä CUDA-kernelifunktiossa toimivat kaikki ehtolauseet ja silmukat samoin kuin tavallisessa C-kielisessä funktiossa. Muiden funktioiden kutsuminen kernelin sisältä sen sijaan on rajoitettua. Muistin varaukset tehdään kernelin ulkopuolella, eikä CPU:n puolella suoritettavia funktioita voi luonnollisesti kutsua CUDA-kernelistä.
Mitä tarkoitat C-kielen syntaksilla? Sitä kielen ydintä vai ml. standardikirjastoja vastaavia?
Tuo muistinkäyttö alkaa olemaan tuttua.
-
Mitä tarkoitat C-kielen syntaksilla? Sitä kielen ydintä vai ml. standardikirjastoja vastaavia?
Tarkoitan kielen peruskomentoja ja rakennetta: aritmeettisia ja loogisia operaatioita, muuttujia, ehtolauseita, silmukoita ja muita ohjausrakenteita. Ne toimivat CUDA-kerneleissä samaan tapaan kuin muissa C-funktioissa. CUDA-koodista ei voi kutsua standardikirjaston funktioita tai muuta CPU:lla suoritettavaa koodia. Käytännössä kernelistä kutsutaan ainoastaan __device__ -tagilla merkittyjä omia funktioita tai CUDA:n tarjoamia kirjastofunktioita.
-
Tarkoitan kielen peruskomentoja ja rakennetta: aritmeettisia ja loogisia operaatioita,...
Ok, kiitos selvennyksestä!