Ero sivun ”OpenCL” versioiden välillä
Siirry navigaatioon
Siirry hakuun
p
nvidia
(Ak: Uusi sivu: Tämä sivu on kesken. Grafiikkaprosessorien (GPU) käyttöä yleiseen laskentaan, ei välttämättä pelkkään grafiikan tuottamiseen, kutsutaan nimellä GPGPU (engl. 'General-p...) |
p (nvidia) |
||
(12 välissä olevaa versiota 6 käyttäjän tekeminä ei näytetä) | |||
Rivi 1: | Rivi 1: | ||
{{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 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== | ||
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 <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; | |||
} | |||
</syntaxhighlight> | |||
= OpenCL-ympäristö Fedora 20 -jakeluun = | ==Jakelukohtaista== | ||
===OpenCL-ympäristö Fedora 20 -jakeluun=== | |||
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> | ||
====Intelin OpenCL-ympäristö==== | |||
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 <tt>tar xzf tiedostonnimi.tgz</tt> -komennolla. Tuloksena on hakemisto. Aja sen sisältämä <tt>install-cpu.sh</tt>-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 [[wikipedia:fi:SSE|SSE]]4.1-tuki; testatusti kuitenkin vasta SSE4.2 riittää. Tämän tarkistaa helpoiten komennolla | |||
[[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.2 1 | |||
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 | ||
Koneen uudelleenkäynnistäminen varmistaa moduulin asentumisen. | |||
{{Ohjelmointikielet}} | |||
[[Luokka:Laitteisto]] | |||
[[Luokka:Ohjeet]] | |||
[[Luokka:X]] |