Ero sivun ”OpenCL” versioiden välillä
Siirry navigaatioon
Siirry hakuun
ei muokkausyhteenvetoa
Ei muokkausyhteenvetoa |
|||
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 NVidian laitteissa käytettävä CUDA. | |||
Myös tavallisiin suorittimiin saa OpenCL-tuen, jolloin ohjelmointia voi kokeilla ilman GPU:ta. Toisaalta halvin OpenCL:ää tukeva GPU maksoi vuoden 2014 alussa vain noin 30 euroa. | |||
= OpenCL-ympäristön toimivuuden tarkistava ohjelma = | = OpenCL-ympäristön toimivuuden tarkistava ohjelma = | ||
Rivi 30: | Rivi 30: | ||
clGetPlatformInfo(alusta_id[i], CL_PLATFORM_VENDOR, 1000, tmp, NULL); | clGetPlatformInfo(alusta_id[i], CL_PLATFORM_VENDOR, 1000, tmp, NULL); | ||
printf("Alustan %i toimittaja on %s.\n", i, tmp); | 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); | |||
} | |||
} | } | ||
Rivi 44: | Rivi 66: | ||
tuottaa tiedoston <tt>hae-alustat.o</tt> | tuottaa tiedoston <tt>hae-alustat.o</tt> | ||
== Intelin OpenCL-ympäristö == | |||
Seuraavaksi tarvitaan pari pakettia riippuvuuksien vuoksi | Seuraavaksi tarvitaan pari pakettia riippuvuuksien vuoksi | ||
Rivi 54: | Rivi 78: | ||
./hae-alustat | ./hae-alustat | ||
tulostaa | tulostaa esimerkiksi | ||
clGetPlatformIDs löysi 1 alustaa. | |||
Alustan 0 toimittaja on Intel(R) Corporation. | |||
Alustan 0 laite 0 toimii. | |||
OpenCL vaatii Intelin dokumentaation mukaan prosessorin, 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 <tt>clCreateContext</tt>-funktiossa. | |||
== NVidian OpenCL-ympäristö == | |||
NVidian OpenCL-tuen saat käyttöön [[RPM Fusion]] -pakettivarastosta komennolla | NVidian OpenCL-tuen saat käyttöön [[RPM Fusion]] -pakettivarastosta komennolla | ||
Rivi 63: | Rivi 101: | ||
yum install kmod-nvidia | yum install kmod-nvidia | ||
Koneen uudelleenkäynnistäminen varmistaa moduulin asentumisen. | |||