From 8453fe522c0307fe8cf3d3950b0c4208359d27de Mon Sep 17 00:00:00 2001 From: stzelepi Date: Wed, 4 Dec 2024 18:24:39 +0100 Subject: [PATCH 1/2] Init commit --- hls4ml/templates/vitis/nnet_utils/nnet_pooling_stream.h | 4 +++- hls4ml/templates/vivado/nnet_utils/nnet_padding_stream.h | 1 + 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/hls4ml/templates/vitis/nnet_utils/nnet_pooling_stream.h b/hls4ml/templates/vitis/nnet_utils/nnet_pooling_stream.h index 37ff3c68bc..b3e28fccb4 100644 --- a/hls4ml/templates/vitis/nnet_utils/nnet_pooling_stream.h +++ b/hls4ml/templates/vitis/nnet_utils/nnet_pooling_stream.h @@ -105,12 +105,14 @@ void pooling2d_cl(hls::stream &data, hls::stream &res) { [CONFIG_T::n_filt]; #pragma HLS ARRAY_PARTITION variable = line_buffer complete dim = 2 + constexpr int pack_factor = data_T::size / CONFIG_T::n_filt; + ReadInputHeight: for (unsigned i_ih = 0; i_ih < CONFIG_T::in_height; i_ih++) { ReadInputWidth: for (unsigned i_iw = 0; i_iw < CONFIG_T::in_width; i_iw++) { #pragma HLS LOOP_FLATTEN - #pragma HLS PIPELINE + #pragma HLS PIPELINE II=pack_factor compute_pool_buffer_2d(data.read(), line_buffer, res); } diff --git a/hls4ml/templates/vivado/nnet_utils/nnet_padding_stream.h b/hls4ml/templates/vivado/nnet_utils/nnet_padding_stream.h index 9df5d5403b..2de4af2a3a 100644 --- a/hls4ml/templates/vivado/nnet_utils/nnet_padding_stream.h +++ b/hls4ml/templates/vivado/nnet_utils/nnet_padding_stream.h @@ -57,6 +57,7 @@ void zeropad2d_cl(hls::stream &data, hls::stream &res) { PadMain: for (int i = 0; i < CONFIG_T::in_height; i++) { + #pragma HLS PIPELINE II=1 PadLeft: for (int j = 0; j < CONFIG_T::pad_left; j++) { fill_zero(res); From 240b9015430eecb057fb2bc7be73c791f114961b Mon Sep 17 00:00:00 2001 From: stzelepi Date: Wed, 4 Dec 2024 22:29:16 +0100 Subject: [PATCH 2/2] Fix pooling pipelining factor --- hls4ml/templates/vitis/nnet_utils/nnet_pooling_stream.h | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/hls4ml/templates/vitis/nnet_utils/nnet_pooling_stream.h b/hls4ml/templates/vitis/nnet_utils/nnet_pooling_stream.h index b3e28fccb4..d46e7d917b 100644 --- a/hls4ml/templates/vitis/nnet_utils/nnet_pooling_stream.h +++ b/hls4ml/templates/vitis/nnet_utils/nnet_pooling_stream.h @@ -105,14 +105,12 @@ void pooling2d_cl(hls::stream &data, hls::stream &res) { [CONFIG_T::n_filt]; #pragma HLS ARRAY_PARTITION variable = line_buffer complete dim = 2 - constexpr int pack_factor = data_T::size / CONFIG_T::n_filt; - ReadInputHeight: for (unsigned i_ih = 0; i_ih < CONFIG_T::in_height; i_ih++) { ReadInputWidth: for (unsigned i_iw = 0; i_iw < CONFIG_T::in_width; i_iw++) { #pragma HLS LOOP_FLATTEN - #pragma HLS PIPELINE II=pack_factor + #pragma HLS PIPELINE II=CONFIG_T::reuse_factor compute_pool_buffer_2d(data.read(), line_buffer, res); }