summaryrefslogtreecommitdiff
path: root/include/gras/block.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'include/gras/block.hpp')
-rw-r--r--include/gras/block.hpp150
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.