static void exec(DstBlock& dst, SrcBlock const& src) { VBlock const& vblock = src.get_vblk(); MBlock const& mblock = src.get_mblk(); cuda::Device_memory<DstBlock> dev_dst(dst, SYNC_OUT); cuda::Device_memory<VBlock const> dev_v(vblock); cuda::Device_memory<MBlock const> dev_m(mblock); // The ct_valid check above ensures that the order taken // matches the storage order if reaches this point. if (SD == row && Type_equal<order_type, row2_type>::value) { cuda::vmmul_row( dev_v.data(), dev_m.data(), dev_dst.data(), dst.size(2, 0), // number of rows dst.size(2, 1) // length of each row ); } else if (SD == col && Type_equal<order_type, row2_type>::value) { cuda::vmmul_col( dev_v.data(), dev_m.data(), dev_dst.data(), dst.size(2, 0), // number of rows dst.size(2, 1) // length of each row ); } else if (SD == col && Type_equal<order_type, col2_type>::value) { cuda::vmmul_row( dev_v.data(), dev_m.data(), dev_dst.data(), dst.size(2, 1), // number of cols dst.size(2, 0) // length of each col ); } else // if (SD == row && Type_equal<order_type, col2_type>::value) { cuda::vmmul_col( dev_v.data(), dev_m.data(), dev_dst.data(), dst.size(2, 1), // number of cols dst.size(2, 0) // length of each col ); } }
bool alhena_module_peaklow_record_pre( void *h, alhena_data_t *p_data, int i_day, int i_end ) { peak_low_t *p_stat = (peak_low_t *)h; float f_highest, f_lowest; float f_flag_close = p_data->f_close[i_day]; int i_record = p_stat->i_records; int i, i_start = 0; i_end = MIN( i_end, i_day + p_stat->i_max_stat_days ); if( i_day >= i_end - 2 ) return false; #define RATIO1 (4.0f) for( i=1; i < i_day; i++ ) { // FIXME: 80 if( p_stat->fi[i_day-i] > avg_v( p_stat->fi, i_day - i, 80 ) + RATIO1 * dev_v( p_stat->fi, i_day - i, 80 ) ) { i_start = i_day - i; break; } } assert( i_start ); p_stat->go_days[i_record] = i_day - i_start; for( i=1; i < i_start; i++ ) { if( p_data->f_close[i_start - i] > p_data->f_close[i_start - i + 1] ) break; p_stat->up_days[i_record]++; } if( i_start + 1 == i_day ) p_stat->go_down[i_record] = (p_data->f_high[i_day] + p_data->f_low[i_day]) / 2; else p_stat->go_down[i_record] = avg_v( p_data->f_close, i_day, i_day - i_start - 1 ); p_stat->go_down[i_record] = (p_stat->go_down[i_record] - p_data->f_close[i_start]) / p_data->f_close[i_start]; /* find lowest */ f_highest = .0f; f_lowest = 8000.0f; for( i=i_day+1; i<i_end; i++ ) { if( p_data->f_high[i] > f_highest ) { f_highest = p_data->f_high[i]; p_stat->highest_day[i_record] = i - i_day; } } p_stat->highest[i_record] = (f_highest - f_flag_close) / f_flag_close; i_end = i_day + p_stat->highest_day[i_record]; for( i=i_day+1; i<=i_end; i++ ) { if( p_data->f_low[i] < f_lowest ) { f_lowest = p_data->f_low[i]; p_stat->lowest_day1[i_record] = i - i_day; } } p_stat->lowest1[i_record] = (f_lowest - f_flag_close) / f_flag_close; p_stat->day[i_record].i_day = p_data->day[i_day].i_day; p_stat->day[i_record].i_month = p_data->day[i_day].i_month; p_stat->day[i_record].i_year = p_data->day[i_day].i_year; p_stat->i_records++; return true; #undef RATIO1 }