Ero sivun ”OpenCL” versioiden välillä
(source-tagit, jakelukohtaiset jutut "Jakelukohtaista"-otsikon alle ja ulkoasua kuntoon) |
p (nvidia) |
||
(7 välissä olevaa versiota 4 käyttäjän tekeminä ei näytetä) | |||
Rivi 1: | Rivi 1: | ||
'''OpenCL''' on avoin monen valmistajan tukema standardi GPGPU-ohjelmointiin (engl. 'General-purpose computing on graphics processing units'). Tunnetuin vaihtoehto tälle lienee vain | {{Perustietoa|en:OpenCL}} | ||
'''OpenCL''' on avoin monen valmistajan tukema standardi [[wikipedia:fi:Grafiikkasuoritin|grafiikkasuoritinten]] [[wikipedia:fi:GPGPU|GPGPU]]-ohjelmointiin (engl. 'General-purpose computing on graphics processing units'). Tunnetuin vaihtoehto tälle lienee vain [[NVIDIA]]n laitteissa käytettävä [[CUDA]]. | |||
Myös tavallisiin suorittimiin saa OpenCL-tuen, jolloin ohjelmointia voi kokeilla ilman | Myös tavallisiin suorittimiin saa OpenCL-tuen, jolloin ohjelmointia voi kokeilla ilman grafiikkasuoritinta. Toisaalta halvin OpenCL:ää tukeva grafiikkasuoritin maksoi vuoden 2014 alussa vain noin 30 euroa. | ||
==OpenCL-ympäristön toimivuuden tarkistava ohjelma== | ==OpenCL-ympäristön toimivuuden tarkistava ohjelma== | ||
Rivi 7: | Rivi 8: | ||
Seuraava ohjelma tulostaa OpenCL:ää suorittamaan pystyvät alustat. Oletetaan jatkossa tämän koodin olevan nimellä <tt>hae-alustat.c</tt> | Seuraava ohjelma tulostaa OpenCL:ää suorittamaan pystyvät alustat. Oletetaan jatkossa tämän koodin olevan nimellä <tt>hae-alustat.c</tt> | ||
< | <syntaxhighlight lang="c"> | ||
#include <stdio.h> | #include <stdio.h> | ||
#include <stdlib.h> | #include <stdlib.h> | ||
Rivi 54: | Rivi 55: | ||
printf("clGetDeviceIDs epäonnistui alustalle %i.\n", i); | printf("clGetDeviceIDs epäonnistui alustalle %i.\n", i); | ||
} | } | ||
return 0; | |||
} | } | ||
</ | </syntaxhighlight> | ||
==Jakelukohtaista== | ==Jakelukohtaista== | ||
Rivi 62: | Rivi 65: | ||
OpenCL-ohjelman kääntämiseen (mutta ei linkittämiseen valmiiksi ohjelmaksi) riittävät OpenCL-otsakkeet. Ne asentuvat komennolla | OpenCL-ohjelman kääntämiseen (mutta ei linkittämiseen valmiiksi ohjelmaksi) riittävät OpenCL-otsakkeet. Ne asentuvat komennolla | ||
yum install opencl-utils-devel | [[yum]] install opencl-utils-devel | ||
Tämän jälkeen komento | Tämän jälkeen komento | ||
gcc -I/usr/include/opencl-utils/include -c hae-alustat.c | [[gcc]] -I/usr/include/opencl-utils/include -c hae-alustat.c | ||
tuottaa tiedoston <tt>hae-alustat.o</tt> | tuottaa tiedoston <tt>hae-alustat.o</tt> | ||
Rivi 87: | Rivi 90: | ||
Alustan 0 laite 0 toimii. | Alustan 0 laite 0 toimii. | ||
OpenCL vaatii Intelin dokumentaation mukaan | OpenCL vaatii Intelin dokumentaation mukaan suorittimen, jossa on vähintään [[wikipedia:fi:SSE|SSE]]4.1-tuki; testatusti kuitenkin vasta SSE4.2 riittää. Tämän tarkistaa helpoiten komennolla | ||
fgrep sse4_2 /proc/cpuinfo | [[fgrep]] sse4_2 /proc/cpuinfo | ||
[[Virtuaalikone]]issa on huomattava, että isäntäkoneen SSE-tuki ei välttämättä näy virtuaalikoneelle. Esimerksi [[VirtualBox]]issa tämä vaatii vähintään version 4.3.8, jonka lisäksi tuki on erikseen otettava käyttöön komennoilla | |||
VBoxManage setextradata <vkoneen-nimi> VBoxInternal/CPUM/SSE4.1 1 | [[VBoxManage]] setextradata <vkoneen-nimi> VBoxInternal/CPUM/SSE4.1 1 | ||
VBoxManage setextradata <vkoneen-nimi> VBoxInternal/CPUM/SSE4.2 1 | VBoxManage setextradata <vkoneen-nimi> VBoxInternal/CPUM/SSE4.2 1 | ||
Riittävän SSE-tuen puuttuessa edelläoleva testiohjelma löytää alustan ja laitteen, mutta epäonnistuu <tt>clCreateContext</tt>-funktiossa. | Riittävän SSE-tuen puuttuessa edelläoleva testiohjelma löytää alustan ja laitteen, mutta epäonnistuu <tt>clCreateContext</tt>-funktiossa. | ||
==== | ====NVIDIAn OpenCL-ympäristö==== | ||
NVIDIAn OpenCL-tuen saat käyttöön [[RPM Fusion]] -pakettivarastosta komennolla | |||
yum install kmod-nvidia | yum install kmod-nvidia | ||
Rivi 106: | Rivi 109: | ||
Koneen uudelleenkäynnistäminen varmistaa moduulin asentumisen. | Koneen uudelleenkäynnistäminen varmistaa moduulin asentumisen. | ||
{{Ohjelmointikielet}} | |||
[[Luokka:Laitteisto]] | [[Luokka:Laitteisto]] | ||
[[Luokka:Ohjeet]] | [[Luokka:Ohjeet]] | ||
[[Luokka:X]] | [[Luokka:X]] |
Nykyinen versio 10. toukokuuta 2022 kello 15.13
OpenCL on avoin monen valmistajan tukema standardi grafiikkasuoritinten GPGPU-ohjelmointiin (engl. 'General-purpose computing on graphics processing units'). Tunnetuin vaihtoehto tälle lienee vain NVIDIAn laitteissa käytettävä CUDA.
Myös tavallisiin suorittimiin saa OpenCL-tuen, jolloin ohjelmointia voi kokeilla ilman grafiikkasuoritinta. Toisaalta halvin OpenCL:ää tukeva grafiikkasuoritin maksoi vuoden 2014 alussa vain noin 30 euroa.
OpenCL-ympäristön toimivuuden tarkistava ohjelma[muokkaa]
Seuraava ohjelma tulostaa OpenCL:ää suorittamaan pystyvät alustat. Oletetaan jatkossa tämän koodin olevan nimellä hae-alustat.c
#include <stdio.h>
#include <stdlib.h>
#include <CL/cl.h>
int main()
{
int i;
cl_int ret;
// Haetaan alustat (enintään 10).
cl_uint alusta_lkm;
cl_platform_id alusta_id[10];
ret = clGetPlatformIDs(10, alusta_id, &alusta_lkm);
if (ret != CL_SUCCESS) {
printf("clGetPlatformIDs epäonnistui.\n");
exit(1);
}
// Haetaan alustojen valmistajien nimet (max. 1000 merkkiä)
printf("clGetPlatformIDs löysi %i alustaa.\n", alusta_lkm);
for (i=0; i<alusta_lkm; i++) {
char tmp[1000];
clGetPlatformInfo(alusta_id[i], CL_PLATFORM_VENDOR, 1000, tmp, NULL);
printf("Alustan %i toimittaja on %s.\n", i, tmp);
}
// Tarkistetaan alustojen todella toimivan
cl_uint laite_lkm;
for (i=0; i<alusta_lkm; i++) {
cl_device_id laite_id[10];
ret = clGetDeviceIDs(alusta_id[i], CL_DEVICE_TYPE_ALL, 10,
laite_id, &laite_lkm);
if (ret == CL_SUCCESS) {
printf("Alustalla %i on %i laitetta.\n", i, laite_lkm);
for (j=0; j<laite_lkm; j++) {
cl_context kehys = clCreateContext(NULL,
1, laite_id+j, NULL, NULL, &ret);
if (ret == CL_SUCCESS) {
printf("Alustan %i laite %i toimii.\n", i, j);
clReleaseContext(kehys);
}
else
printf("clCreateContext epäonnistui laitteelle %i.\n", j);
}
}
else
printf("clGetDeviceIDs epäonnistui alustalle %i.\n", i);
}
return 0;
}
Jakelukohtaista[muokkaa]
OpenCL-ympäristö Fedora 20 -jakeluun[muokkaa]
OpenCL-ohjelman kääntämiseen (mutta ei linkittämiseen valmiiksi ohjelmaksi) riittävät OpenCL-otsakkeet. Ne asentuvat komennolla
yum install opencl-utils-devel
Tämän jälkeen komento
gcc -I/usr/include/opencl-utils/include -c hae-alustat.c
tuottaa tiedoston hae-alustat.o
Intelin OpenCL-ympäristö[muokkaa]
Seuraavaksi tarvitaan pari pakettia riippuvuuksien vuoksi
yum install lsb-core-amd64 libpng12
Lataa osoitteesta http://software.intel.com/en-us/vcsource/tools/opencl-sdk-xe tiedosto "64-bit SDK for Linux". Pura saamasi .tgz -tiedosto normaalisti tar xzf tiedostonnimi.tgz -komennolla. Tuloksena on hakemisto. Aja sen sisältämä install-cpu.sh-tiedosto. Nyt ohjelman kääntyy ja toimii:
gcc -I/usr/include/opencl-utils/include -o hae-alustat hae-alustat.c -lOpenCL ./hae-alustat
tulostaa esimerkiksi
clGetPlatformIDs löysi 1 alustaa. Alustan 0 toimittaja on Intel(R) Corporation. Alustan 0 laite 0 toimii.
OpenCL vaatii Intelin dokumentaation mukaan suorittimen, jossa on vähintään SSE4.1-tuki; testatusti kuitenkin vasta SSE4.2 riittää. Tämän tarkistaa helpoiten komennolla
fgrep sse4_2 /proc/cpuinfo
Virtuaalikoneissa on huomattava, että isäntäkoneen SSE-tuki ei välttämättä näy virtuaalikoneelle. Esimerksi VirtualBoxissa tämä vaatii vähintään version 4.3.8, jonka lisäksi tuki on erikseen otettava käyttöön komennoilla
VBoxManage setextradata <vkoneen-nimi> VBoxInternal/CPUM/SSE4.1 1 VBoxManage setextradata <vkoneen-nimi> VBoxInternal/CPUM/SSE4.2 1
Riittävän SSE-tuen puuttuessa edelläoleva testiohjelma löytää alustan ja laitteen, mutta epäonnistuu clCreateContext-funktiossa.
NVIDIAn OpenCL-ympäristö[muokkaa]
NVIDIAn OpenCL-tuen saat käyttöön RPM Fusion -pakettivarastosta komennolla
yum install kmod-nvidia
Koneen uudelleenkäynnistäminen varmistaa moduulin asentumisen.
Ohjelmointikielet | |
Käännettävät | Assembly | C | C++ | Go | Haxe | Haskell | Java | Pascal |
---|---|
Tulkattavat | Python | Perl | PHP | Ruby |
-skriptikielet | Lua | Bash |
GPGPU | OpenCL |
muut | GLSL |