Loading src/TileProcessor.cuh +67 −41 Original line number Diff line number Diff line Loading @@ -106,6 +106,8 @@ #define DBG_TILE_Y 111 // 66 #define DBG_TILE (DBG_TILE_Y * 324 + DBG_TILE_X) #undef DBG_MARK_DBG_TILE 1 //56494 // struct tp_task //#define TASK_SIZE 12 Loading Loading @@ -879,6 +881,18 @@ extern "C" __global__ void textures_accumulate( size_t texture_stride, // in floats (now 256*4 = 1024) float * gpu_texture_tiles); // (number of colors +1 + ?)*16*16 rgba texture tiles extern "C" __global__ void imclt_rbg( float * gpu_clt, // [TILESY][TILESX][NUM_COLORS][DTT_SIZE*DTT_SIZE] float * gpu_rbg, // WIDTH, 3 * HEIGHT int apply_lpf, int mono, // defines lpf filter int color, // defines location of clt data int v_offset, int h_offset, const size_t dstride); // in floats (pixels) //=========================== extern "C" __global__ void correlate2D( float ** gpu_clt, // [NUM_CAMS] ->[TILESY][TILESX][NUM_COLORS][DTT_SIZE*DTT_SIZE] Loading Loading @@ -2274,16 +2288,12 @@ __global__ void textures_accumulate( } // textures_accumulate() extern "C" __global__ void imclt_rbg( float * gpu_clt, // [TILESY][TILESX][NUM_COLORS][DTT_SIZE*DTT_SIZE] float * gpu_rbg, // WIDTH, 3 * HEIGHT int apply_lpf, int mono, int color, int v_offset, int h_offset, Loading Loading @@ -2334,13 +2344,27 @@ __global__ void imclt_rbg( clt_tile += column + thr3; // first 2 rows gpu_tile += column; // first 2 rows if (apply_lpf) { // lpf - covers 2 rows, as there there are 16 threads float *lpf0 = lpf_data[mono? 3 :color] + threadIdx.x; // lpf_data[3] - mono #pragma unroll for (int q = 0; q < 4; q++){ float *lpf = lpf0; for (int i = 0; i < DTT_SIZE/2; i++){ *clt_tile= *gpu_tile * (*lpf); clt_tile += (2 * DTT_SIZE1); gpu_tile += (2 * DTT_SIZE); lpf += (2 * DTT_SIZE); } } } else { #pragma unroll for (int i = 0; i < DTT_SIZE2; i++){ *clt_tile= *gpu_tile; clt_tile += (2 * DTT_SIZE1); gpu_tile += (2 * DTT_SIZE); } } float * mclt_top = ((float*) mclt_tiles) + tile_in_block * (DTT_SIZE2 * DTT_SIZE21) + column; float * rbg_top = color_plane + (tileY * DTT_SIZE)* dstride + (tileX * DTT_SIZE) + column; float * mclt_tile = mclt_top; Loading Loading @@ -2387,6 +2411,7 @@ __global__ void imclt_rbg( mclt_tile += DTT_SIZE21; rbg_p += dstride; // DTT_SIZE2; // FIXME } #ifdef DBG_MARK_DBG_TILE } else if ((tileX == DBG_TILE_X) && (tileY == DBG_TILE_Y)){ #pragma unroll for (int i = 0; i < DTT_SIZE2; i++){ Loading @@ -2394,6 +2419,7 @@ __global__ void imclt_rbg( mclt_tile += DTT_SIZE21; rbg_p += dstride; // DTT_SIZE2; // FIXME } #endif } else { #pragma unroll for (int i = 0; i < DTT_SIZE2; i++){ Loading src/test_tp.cu +6 −4 Original line number Diff line number Diff line Loading @@ -651,7 +651,9 @@ int main(int argc, char **argv) imclt_rbg<<<grid_imclt,threads_imclt>>>( gpu_clt_h[ncam], // float * gpu_clt, // [TILESY][TILESX][NUM_COLORS][DTT_SIZE*DTT_SIZE] gpu_corr_images_h[ncam], // float * gpu_rbg, // WIDTH, 3 * HEIGHT color, // int color, 1, // int apply_lpf, 0, // int mono, // defines lpf filter color, // int color, // defines location of clt data v_offs, // int v_offset, h_offs, // int h_offset, dstride_rslt/sizeof(float)); //const size_t dstride); // in floats (pixels) Loading Loading
src/TileProcessor.cuh +67 −41 Original line number Diff line number Diff line Loading @@ -106,6 +106,8 @@ #define DBG_TILE_Y 111 // 66 #define DBG_TILE (DBG_TILE_Y * 324 + DBG_TILE_X) #undef DBG_MARK_DBG_TILE 1 //56494 // struct tp_task //#define TASK_SIZE 12 Loading Loading @@ -879,6 +881,18 @@ extern "C" __global__ void textures_accumulate( size_t texture_stride, // in floats (now 256*4 = 1024) float * gpu_texture_tiles); // (number of colors +1 + ?)*16*16 rgba texture tiles extern "C" __global__ void imclt_rbg( float * gpu_clt, // [TILESY][TILESX][NUM_COLORS][DTT_SIZE*DTT_SIZE] float * gpu_rbg, // WIDTH, 3 * HEIGHT int apply_lpf, int mono, // defines lpf filter int color, // defines location of clt data int v_offset, int h_offset, const size_t dstride); // in floats (pixels) //=========================== extern "C" __global__ void correlate2D( float ** gpu_clt, // [NUM_CAMS] ->[TILESY][TILESX][NUM_COLORS][DTT_SIZE*DTT_SIZE] Loading Loading @@ -2274,16 +2288,12 @@ __global__ void textures_accumulate( } // textures_accumulate() extern "C" __global__ void imclt_rbg( float * gpu_clt, // [TILESY][TILESX][NUM_COLORS][DTT_SIZE*DTT_SIZE] float * gpu_rbg, // WIDTH, 3 * HEIGHT int apply_lpf, int mono, int color, int v_offset, int h_offset, Loading Loading @@ -2334,13 +2344,27 @@ __global__ void imclt_rbg( clt_tile += column + thr3; // first 2 rows gpu_tile += column; // first 2 rows if (apply_lpf) { // lpf - covers 2 rows, as there there are 16 threads float *lpf0 = lpf_data[mono? 3 :color] + threadIdx.x; // lpf_data[3] - mono #pragma unroll for (int q = 0; q < 4; q++){ float *lpf = lpf0; for (int i = 0; i < DTT_SIZE/2; i++){ *clt_tile= *gpu_tile * (*lpf); clt_tile += (2 * DTT_SIZE1); gpu_tile += (2 * DTT_SIZE); lpf += (2 * DTT_SIZE); } } } else { #pragma unroll for (int i = 0; i < DTT_SIZE2; i++){ *clt_tile= *gpu_tile; clt_tile += (2 * DTT_SIZE1); gpu_tile += (2 * DTT_SIZE); } } float * mclt_top = ((float*) mclt_tiles) + tile_in_block * (DTT_SIZE2 * DTT_SIZE21) + column; float * rbg_top = color_plane + (tileY * DTT_SIZE)* dstride + (tileX * DTT_SIZE) + column; float * mclt_tile = mclt_top; Loading Loading @@ -2387,6 +2411,7 @@ __global__ void imclt_rbg( mclt_tile += DTT_SIZE21; rbg_p += dstride; // DTT_SIZE2; // FIXME } #ifdef DBG_MARK_DBG_TILE } else if ((tileX == DBG_TILE_X) && (tileY == DBG_TILE_Y)){ #pragma unroll for (int i = 0; i < DTT_SIZE2; i++){ Loading @@ -2394,6 +2419,7 @@ __global__ void imclt_rbg( mclt_tile += DTT_SIZE21; rbg_p += dstride; // DTT_SIZE2; // FIXME } #endif } else { #pragma unroll for (int i = 0; i < DTT_SIZE2; i++){ Loading
src/test_tp.cu +6 −4 Original line number Diff line number Diff line Loading @@ -651,7 +651,9 @@ int main(int argc, char **argv) imclt_rbg<<<grid_imclt,threads_imclt>>>( gpu_clt_h[ncam], // float * gpu_clt, // [TILESY][TILESX][NUM_COLORS][DTT_SIZE*DTT_SIZE] gpu_corr_images_h[ncam], // float * gpu_rbg, // WIDTH, 3 * HEIGHT color, // int color, 1, // int apply_lpf, 0, // int mono, // defines lpf filter color, // int color, // defines location of clt data v_offs, // int v_offset, h_offs, // int h_offset, dstride_rslt/sizeof(float)); //const size_t dstride); // in floats (pixels) Loading