Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Sachovnice
- - potreba pridat hlavicky #include ...
- - prejmenovat volanou funkci
- - gl ;)
- main3.cpp
- // prototyp
- void run_vzor( uchar4 *bgr_pic, int sizex, int sizey, int elem );
- // substituce
- #define RECT 20 // rozmer nejmensiho ctverce obrazku
- #define SIZEX ( RECT * 8 ) // rozmer obrazku X
- #define SIZEY ( RECT * 8 ) // rozmer obrazku Y
- ...zbytek je stejny jako v main3.cpp
- cuda3.cu
- // Kernel (synonymum vlakna)
- __global__ void kernel_vzor( uchar4 *pic, int sizex, int sizey, int elem )
- {
- // souradnice vlakna
- int y = blockDim.y * blockIdx.y + threadIdx.y;
- int x = blockDim.x * blockIdx.x + threadIdx.x;
- uchar4 bgr = { 0, 0, 0 }; // cerna
- // kratka cesta ifu :)
- // sude radky
- if ( blockIdx.x % 2 == 0 && blockIdx.y % 2 == 0 )
- bgr.x = bgr.y = bgr.z = 255;
- // liche radky
- if ( blockIdx.x % 2 != 0 && blockIdx.y % 2 != 0 )
- bgr.x = bgr.y = bgr.z = 255;
- // ulozeni bodu do obrazku
- // poradove cislo prvku je sirka_obrazku * radek + sloupec
- pic[ y * sizex + x ] = bgr;
- }
- // Funkce, ve ktere se vytvareji vlakna se zvolenym Kernelem
- void run_vzor( uchar4 *pic, int sizex, int sizey, int elem )
- {
- // alokace pameti ve videokarte
- uchar4 *cudaPic;
- cudaMalloc( &cudaPic, sizex * sizey * sizeof( uchar4 ) );
- // vytvoreni bloku s vlakny
- kernel_vzor<<< dim3( sizex/elem, sizey/elem ), dim3( elem, elem ) >>>( cudaPic, sizex, sizey, elem );
- // prenos dat z videokarty
- cudaMemcpy( pic, cudaPic, sizex * sizey * sizeof( uchar4 ), cudaMemcpyDeviceToHost );
- // uvolneni alokovane pameti ve videokarte
- cudaFree( cudaPic );
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement