From 7e626536e452f442e1da990d06b7dba101ed8663 Mon Sep 17 00:00:00 2001 From: Yaman Umuroglu <maltanar@gmail.com> Date: Wed, 19 Feb 2020 23:58:37 +0000 Subject: [PATCH] [Util] allow packing dim reversal in npy2apintstream and v.v. --- src/finn/data/cpp/npy2apintstream.hpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/finn/data/cpp/npy2apintstream.hpp b/src/finn/data/cpp/npy2apintstream.hpp index c058625e7..b1c563d1b 100644 --- a/src/finn/data/cpp/npy2apintstream.hpp +++ b/src/finn/data/cpp/npy2apintstream.hpp @@ -13,7 +13,7 @@ #endif template <typename PackedT, typename ElemT, int ElemBits, typename NpyT> -void npy2apintstream(const char * npy_path, hls::stream<PackedT> & out_stream) { +void npy2apintstream(const char * npy_path, hls::stream<PackedT> & out_stream, bool reverse_inner = true) { cnpy::NpyArray arr = cnpy::npy_load(npy_path); DEBUG_NPY2APINTSTREAM("word_size " << arr.word_size << " num_vals " << arr.num_vals) if(arr.word_size != sizeof(NpyT)) { @@ -28,7 +28,8 @@ void npy2apintstream(const char * npy_path, hls::stream<PackedT> & out_stream) { DEBUG_NPY2APINTSTREAM("n_outer " << outer_dim_elems << " n_inner " << inner_dim_elems) for(size_t outer_elem = 0; outer_elem < outer_dim_elems; outer_elem++) { PackedT packed_elem = 0; - for(size_t i = 0; i < inner_dim_elems; i++) { + for(size_t ii = 0; ii < inner_dim_elems; ii++) { + size_t i = reverse_inner ? inner_dim_elems-ii-1 : ii; NpyT loaded_elem_npyt = *loaded_data; ElemT loaded_elem = (ElemT) loaded_elem_npyt; DEBUG_NPY2APINTSTREAM("NpyT " << loaded_elem_npyt << " elem " << loaded_elem) @@ -41,7 +42,7 @@ void npy2apintstream(const char * npy_path, hls::stream<PackedT> & out_stream) { } template <typename PackedT, typename ElemT, int ElemBits, typename NpyT> -void apintstream2npy(hls::stream<PackedT> & in_stream, const std::vector<size_t> & shape, const char * npy_path) { +void apintstream2npy(hls::stream<PackedT> & in_stream, const std::vector<size_t> & shape, const char * npy_path, bool reverse_inner = true) { std::vector<NpyT> data_to_save; size_t outer_dim_elems = 1; for(size_t dim = 0; dim < shape.size()-1; dim++) { @@ -53,7 +54,8 @@ void apintstream2npy(hls::stream<PackedT> & in_stream, const std::vector<size_t> PackedT packed_elem; in_stream >> packed_elem; DEBUG_APINTSTREAM2NPY("packed hls elem " << std::hex << packed_elem << std::dec) - for(size_t i = 0; i < inner_dim_elems; i++) { + for(size_t ii = 0; ii < inner_dim_elems; ii++) { + size_t i = reverse_inner ? inner_dim_elems-ii-1 : ii; ElemT elem = packed_elem((i+1)*ElemBits-1, i*ElemBits); NpyT npyt = (NpyT) elem; DEBUG_APINTSTREAM2NPY("elem " << elem << " NpyT " << npyt) -- GitLab