Ero sivun ”OpenCL” versioiden välillä

Siirry navigaatioon Siirry hakuun
1 407 merkkiä lisätty ,  7. maaliskuuta 2014
ei muokkausyhteenvetoa
Ei muokkausyhteenvetoa
Rivi 1: Rivi 1:
Tämä sivu on kesken.
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.


Grafiikkaprosessorien (GPU) käyttöä yleiseen laskentaan, ei välttämättä pelkkään grafiikan tuottamiseen, kutsutaan nimellä GPGPU (engl. 'General-purpose computing on graphics processing units'). GPGPU-ohjelmointiin on useita ohjelmointikieliä, joista OpenCL on avoin monen valmistajan tukema standardi. Sen tunnetuin kilpailija lienee vain NVidian laitteissa käytettävä CUDA. Myös tavallisiin suorittimiin saa OpenCL-tuen, jolloin ohjelmointia voi kokeilla myös ilman GPU:ta. Toisaalta halvin OpenCL:ää tukeva GPU maksoi vuoden 2014 alussa vain noin 30 euroa.
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.


clGetPlatformIDs löysi 1 alustaa.
== NVidian OpenCL-ympäristö ==
Alustan 0 toimittaja on Intel(R) Corporation.


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


Boottaamalla koneen voi varmistaa tämän toimivuuden.
Koneen uudelleenkäynnistäminen varmistaa moduulin asentumisen.
 
OpenCL toimii prosessorissa, jossa on vähintään SSE4.1-tuki. Tämän tarkistaa helpoiten komennolla
 
fgrep sse4_1 /proc/cpuinfo
5

muokkausta

Navigointivalikko