Nyilván mindenki túl van a teljes dokumentáció átolvasásán, a példaprogramok végignézésén és talán már 5-6 programot is írtak hiba nélkül. Én nem tartozom közéjük. A példáprogramokat megnéztem. Különösen sok időt töltöttem el egy füst animációt bemutató programnál.
A dokumentációban leírtakat nem akarom megismételni. Nézzünk néhány teljesítmény mutatót. A CUDA magok sebességéről is elég sok tesztet lehet látni, ezért inkább a memória használatot mutatnám be.
A tesztprogramunk a következő:
#include <stdio.h> #define SIZE 3000
int main(int argc, char **argv){
float *gpustuff;
cudaError_t error;
int i;
printf("Memoria foglalas GPU\n");
for(i = 0; i < SIZE * 6; i++){
error = cudaMalloc(&gpustuff, SIZE * sizeof(float));
if(error != cudaSuccess){
printf("Hiba %s\n", cudaGetErrorString(error));
return(-1);
}
error = cudaFree(gpustuff);
if(error != cudaSuccess){
printf("Hiba %s\n", cudaGetErrorString(error));
return(-1);
}
}
printf("Minden rendben\n");
return(0);
}
A teszt program egy Intel Celeron D 320-on 1 GB ram(kéretik nem hangosan felnevetni) Nvidia Quadro 600. Mivel tartottam attól, hogy a CUDA környezet inicializálása sok időt vesz igénybe, ami torzíthatja a mérést, ezért a programot többször futtattam a for ciklus méretének változtatásával. A CPU verziót nem közlöm, azt mindenki írja meg maga :-) A táblázat első oszlopa azt mutatja, hányszor futott le a for ciklus. A második oszlop a Linuxos time paranccsal mennyi időt mértem. A harmadik oszlop a CPU verzió ideje, szintén time paranccsal.
3000 1.159 0.005
6000 2.090 0.004
9000 3.215 0.004
12000 4.032 0.005
15000 6.793 0.005
18000 6.819 0.004
Ugyan ez a teszt egy másik gépen (AMD Athlon X2 4400, 4GB ram, Nvidia Geforce 8500) a következő eredményt adta:
3000 0.970 0.003
6000 1.875 0.003
9000 2.770 0.003
12000 3.688 0.002
15000 4.588 0.004
18000 5.506 0.004
Tehát a memória foglalás rendkívül költséges művelet.