diff options
Diffstat (limited to 'include/gras/block.hpp')
-rw-r--r-- | include/gras/block.hpp | 150 |
1 files changed, 16 insertions, 134 deletions
diff --git a/include/gras/block.hpp b/include/gras/block.hpp index 5a6e5e2..f2f1b2b 100644 --- a/include/gras/block.hpp +++ b/include/gras/block.hpp @@ -3,6 +3,7 @@ #ifndef INCLUDED_GRAS_BLOCK_HPP #define INCLUDED_GRAS_BLOCK_HPP +#include <gras/block_config.hpp> #include <gras/element.hpp> #include <gras/sbuffer.hpp> #include <gras/thread_pool.hpp> @@ -16,112 +17,6 @@ namespace gras { -//! Configuration parameters for an input port -struct GRAS_API InputPortConfig -{ - InputPortConfig(void); - - //! The size of an item in bytes - size_t item_size; - - /*! - * Set an input reserve requirement such that work is called - * with an input buffer at least reserve items in size. - * - * Default = 1. - */ - size_t reserve_items; - - /*! - * Constrain the input buffer allocation size: - * The scheduler may accumulate multiple buffers - * into a single larger buffer under failure conditions. - * The maximum size of this accumulated buffer - * is constrained by this maximum_items setting. - * - * Default = 0 aka disabled. - */ - size_t maximum_items; - - /*! - * Set buffer inlining for this port config. - * Inlining means that the input buffer can be used as an output buffer. - * The goal is to make better use of cache and memory bandwidth. - * - * By default, inlining is disabled on all input ports. - * The user should enable inlining on an input port - * when it is understood that the work function will read - * before writting to a particular section of the buffer. - * - * The scheduler will inline a buffer when - * * inlining is enabled on the particular input port - * * block holds the only buffer reference aka unique - * * the input buffer has the same affinity as the block - * * the input port has a buffer look-ahead of 0 - * - * Default = false. - */ - bool inline_buffer; - - /*! - * Preload the input queue with num preload items. - * All items preloaded into the buffer will be 0. - * This is used to implement zero-padding for - * things like sliding dot products/FIR filters. - * - * - Increasing the preload at runtime will - * inject more items into the input queue. - * - Decreasing the preload at runtime will - * consume random items from the input queue. - * - * Default = 0. - */ - size_t preload_items; - - /*! - * Force this block done when input port is done. - * When the upstream feeding this port declares done, - * this block will mark done once upstream notifies. - * The primary usage is to modify the done logic - * for the purposes of unit test confiruability. - * - * If the force done option is false, the block will - * not mark done when this port's upstream is done. - * However, this block will mark done when all - * input ports are done, reguardless of this setting. - * - * Default = true. - */ - bool force_done; -}; - -//! Configuration parameters for an output port -struct GRAS_API OutputPortConfig -{ - OutputPortConfig(void); - - //! The size of an item in bytes - size_t item_size; - - /*! - * Set an output reserve requirement such that work is called - * with an output buffer at least reserve items in size. - * - * Default = 1. - */ - size_t reserve_items; - - /*! - * Constrain the output buffer allocation size: - * The user might set a small maximum items - * to reduce the amount of buffered items - * waiting for processing in downstream queues. - * - * Default = 0 aka disabled. - */ - size_t maximum_items; -}; - struct GRAS_API Block : Element { //! Contruct an empty/null block @@ -133,9 +28,22 @@ struct GRAS_API Block : Element virtual ~Block(void); /******************************************************************* - * Deal with input and output port configuration + * Deal with block configuration configuration ******************************************************************/ + /*! + * Set the thread pool of this block. + * Every block is created in the default active thread pool. + * This call will migrate the block to a new specified pool. + */ + void set_thread_pool(const ThreadPool &thread_pool); + + //! Get the global block config settings + const GlobalBlockConfig &global_config(void) const; + + //! Get the global block config settings + GlobalBlockConfig &global_config(void); + //! Get the configuration rules of an input port const InputPortConfig &input_config(const size_t which_input) const; @@ -485,36 +393,10 @@ struct GRAS_API Block : Element virtual void notify_topology(const size_t num_inputs, const size_t num_outputs); /******************************************************************* - * routines related to affinity and allocation + * custom buffer queue API ******************************************************************/ /*! - * Set the thread pool of this block. - * Every block is created in the default active thread pool. - * This call will migrate the block to a new specified pool. - */ - void set_thread_pool(const ThreadPool &thread_pool); - - /*! - * Set if the work call should be interruptible by stop(). - * Some work implementations block with the expectation of - * getting a boost thread interrupt in a blocking call. - * Set set_interruptible_work(true) if this is the case. - * By default, work implementations are not interruptible. - */ - void set_interruptible_work(const bool enb); - - /*! - * Set the node affinity of this block. - * This call affects how output buffers are allocated. - * By default memory is allocated by malloc. - * When the affinity is set, virtual memory - * will be locked to a physical CPU/memory node. - * \param affinity a memory node on the system - */ - void set_buffer_affinity(const long affinity); - - /*! * The output buffer allocator method. * This method is called by the scheduler to allocate output buffers. * The user may overload this method to create a custom allocator. |