7 const float *input,
size_t input_elements,
size_t input_stride,
8 const float *feature,
size_t feature_elements,
9 float *output,
size_t output_elements,
size_t output_stride,
10 size_t rows,
size_t input_channels,
size_t feature_channels,
11 size_t output_channels) {
13 if (!rows || !input_channels || !feature_channels ||
14 input_channels > (
size_t)INT_MAX ||
15 feature_channels > (
size_t)INT_MAX - input_channels)
return -2;
16 width = input_channels + feature_channels;
17 if (output_channels != width)
return -2;
20 input_elements < ni || feature_elements < feature_channels ||
21 output_elements < no)
return -2;
28 for (
size_t r = 0; r < rows; ++r)
30 for (
size_t r = 0; r < rows; ++r)
34 output + r * output_stride,
35 1, (
int)input_channels, (
int)feature_channels, 1);
void feature_concat(const float *main_input, const float *branch_input, float *output, int rows, int main_dim, int branch_slice_dim, int num_branch_slices)
int feature_concat_broadcast_rows_f32(const float *input, size_t input_elements, size_t input_stride, const float *feature, size_t feature_elements, float *output, size_t output_elements, size_t output_stride, size_t rows, size_t input_channels, size_t feature_channels, size_t output_channels)