Compiling high performance recursive filters

Gaurav Chaurasia, Jonathan Ragan-Kelley, Sylvain Paris, George Drettakis, Fredo Durand
2015 Proceedings of the 7th Conference on High-Performance Graphics - HPG '15  
a) tiled single 1D scan + + + + + + intra-tile scan intra-tile scan intra-tile scan intra-tile scan intra-tile scan intra-tile scan *bdata = prev.y; if (y < c_height) *out = prev.y; swap(prev.x, prev.y); } } } else { #pragma unroll for ( int j=WS-1; j>= 0; --j, --bdata) { prev.y = *bdata*b0_2 -prev.x*c_a1 -prev.y*c_a2; if (p_fusion) *bdata = prev.y; swap(prev.x, prev.y); } } if (p_fusion) { g_pubar += n*c_carry_width + m*WS + tx; g_evhat += n*c_carry_width + m*WS + tx; float (*bdata)[WS+ 1] = (
more » ... float (*)[WS+ 1]) &s_block[ty*WS][tx]; // calculate pubar, scan left -> right float2 prev = make_float2( 0,**bdata++); #pragma unroll for ( int i= 1; i 0) { // calculate evhat, scan right -> left prev = make_float2(**--bdata, 0); --bdata; #pragma unroll for ( int i=WS-2; i>= 0; --i, --bdata) { prev.y = **bdata -prev.x*c_a1 -prev.y*c_a2; swap(prev.x, prev.y); }
doi:10.1145/2790060.2790063 dblp:conf/egh/ChaurasiaRPDD15 fatcat:jpv24bermnanlgsa27ryat22oa