diff options
author | David Sorber <david.sorber@blacklynx.tech> | 2021-07-29 11:34:37 -0400 |
---|---|---|
committer | mormj <34754695+mormj@users.noreply.github.com> | 2021-10-25 11:27:01 -0400 |
commit | f3c558d88bc68d865f823c31e7d9aa78b3feab59 (patch) | |
tree | 026d8ff5568bc2c5ab731df29d87901cf1177e00 /gnuradio-runtime/lib/io_signature.cc | |
parent | 788827ae116bef871e144abd39b1e4482208eabe (diff) |
runtime: Custom Buffer/Accelerator Device Support - Milestone 2
Completion of custom buffer/accelerator device support changes:
* Improved custom buffer interface by removing awkward memory
allocation functions from the block class
* Increased flexibility for creating custom buffers by allowing
creation of buffer_single_mapped subclasses
* Fully incorporated data movement abstraction into the custom
buffer interface and the runtime itself; accelerated blocks are no
longer directly responsible for their own data movement
* Zero copy back-to-back accelerated blocks are now supported (data
no longer needs to be moved back to the host between each block)
Signed-off-by: David Sorber <david.sorber@blacklynx.tech>
Signed-off-by: Mike Mason <mike.mason@blacklynx.tech>
Diffstat (limited to 'gnuradio-runtime/lib/io_signature.cc')
-rw-r--r-- | gnuradio-runtime/lib/io_signature.cc | 72 |
1 files changed, 50 insertions, 22 deletions
diff --git a/gnuradio-runtime/lib/io_signature.cc b/gnuradio-runtime/lib/io_signature.cc index 507268d5ce..e953c7eb5a 100644 --- a/gnuradio-runtime/lib/io_signature.cc +++ b/gnuradio-runtime/lib/io_signature.cc @@ -22,47 +22,69 @@ gr::io_signature::sptr io_signature::makev(int min_streams, int max_streams, const std::vector<int>& sizeof_stream_items) { + gr_vector_buffer_type buftypes(sizeof_stream_items.size(), + buffer_double_mapped::type); return gr::io_signature::sptr( - new io_signature(min_streams, max_streams, sizeof_stream_items)); + new io_signature(min_streams, max_streams, sizeof_stream_items, buftypes)); } -gr::io_signature::sptr -io_signature::make(int min_streams, int max_streams, int sizeof_stream_item) +gr::io_signature::sptr io_signature::makev(int min_streams, + int max_streams, + const std::vector<int>& sizeof_stream_items, + gr_vector_buffer_type buftypes) { - std::vector<int> sizeof_items(1); - sizeof_items[0] = sizeof_stream_item; - return io_signature::makev(min_streams, max_streams, sizeof_items); + return gr::io_signature::sptr( + new io_signature(min_streams, max_streams, sizeof_stream_items, buftypes)); +} + +gr::io_signature::sptr io_signature::make(int min_streams, + int max_streams, + int sizeof_stream_item, + buffer_type buftype) +{ + std::vector<int> sizeof_items{ sizeof_stream_item }; + gr_vector_buffer_type buftypes{ buftype }; + return io_signature::makev(min_streams, max_streams, sizeof_items, buftypes); } gr::io_signature::sptr io_signature::make2(int min_streams, int max_streams, int sizeof_stream_item1, - int sizeof_stream_item2) + int sizeof_stream_item2, + buffer_type buftype1, + buffer_type buftype2) { - std::vector<int> sizeof_items(2); - sizeof_items[0] = sizeof_stream_item1; - sizeof_items[1] = sizeof_stream_item2; - return io_signature::makev(min_streams, max_streams, sizeof_items); + std::vector<int> sizeof_items{ sizeof_stream_item1, sizeof_stream_item2 }; + gr_vector_buffer_type buftypes{ buftype1, buftype2 }; + return io_signature::makev(min_streams, max_streams, sizeof_items, buftypes); } gr::io_signature::sptr io_signature::make3(int min_streams, int max_streams, int sizeof_stream_item1, int sizeof_stream_item2, - int sizeof_stream_item3) + int sizeof_stream_item3, + buffer_type buftype1, + buffer_type buftype2, + buffer_type buftype3) { - std::vector<int> sizeof_items(3); - sizeof_items[0] = sizeof_stream_item1; - sizeof_items[1] = sizeof_stream_item2; - sizeof_items[2] = sizeof_stream_item3; - return io_signature::makev(min_streams, max_streams, sizeof_items); + std::vector<int> sizeof_items{ sizeof_stream_item1, + sizeof_stream_item2, + sizeof_stream_item3 }; + gr_vector_buffer_type buftypes{ buftype1, buftype2, buftype3 }; + return io_signature::makev(min_streams, max_streams, sizeof_items, buftypes); } // ------------------------------------------------------------------------ io_signature::io_signature(int min_streams, int max_streams, - const std::vector<int>& sizeof_stream_items) + const std::vector<int>& sizeof_stream_items, + gr_vector_buffer_type buftypes) + : d_min_streams(min_streams), + d_max_streams(max_streams), + d_sizeof_stream_item(sizeof_stream_items), + d_stream_buffer_type(buftypes) { if (min_streams < 0 || (max_streams != IO_INFINITE && max_streams < min_streams)) throw std::invalid_argument("gr::io_signature(1)"); @@ -75,10 +97,6 @@ io_signature::io_signature(int min_streams, if (max_streams != 0 && sizeof_stream_items[i] < 1) throw std::invalid_argument("gr::io_signature(3)"); } - - d_min_streams = min_streams; - d_max_streams = max_streams; - d_sizeof_stream_item = sizeof_stream_items; } io_signature::~io_signature() {} @@ -97,4 +115,14 @@ std::vector<int> io_signature::sizeof_stream_items() const return d_sizeof_stream_item; } +buffer_type io_signature::stream_buffer_type(size_t index) const +{ + return d_stream_buffer_type[std::min(index, d_stream_buffer_type.size() - 1)]; +} + +gr_vector_buffer_type io_signature::stream_buffer_types() const +{ + return d_stream_buffer_type; +} + } /* namespace gr */ |