diff options
Diffstat (limited to 'include/gras/block_config.hpp')
-rw-r--r-- | include/gras/block_config.hpp | 159 |
1 files changed, 159 insertions, 0 deletions
diff --git a/include/gras/block_config.hpp b/include/gras/block_config.hpp new file mode 100644 index 0000000..c026cba --- /dev/null +++ b/include/gras/block_config.hpp @@ -0,0 +1,159 @@ +// Copyright (C) by Josh Blum. See LICENSE.txt for licensing information. + +#ifndef INCLUDED_GRAS_BLOCK_CONFIG_HPP +#define INCLUDED_GRAS_BLOCK_CONFIG_HPP + +#include <gras/gras.hpp> +#include <cstddef> + +namespace gras +{ + +//! Configuration parameters for a block +struct GRAS_API GlobalBlockConfig +{ + GlobalBlockConfig(void); + + /*! + * Constrain the maximum number of items that + * work can be called with for all output ports. + * + * Default = 0 aka disabled. + */ + size_t maximum_output_items; + + /*! + * Set the global memory node affinity. + * Blocks that have not been explicitly set, + * will take on this new buffer_affinity. + * + * This param affects how 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. + * + * Default = -1 aka no affinity. + */ + long buffer_affinity; + + /*! + * True 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. + * If this is the case, this parameter should be set true. + * By default, work implementations are not interruptible. + * + * Default = false. + */ + bool interruptible_work; +}; + +//! 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; +}; + +} //namespace gras + +#endif /*INCLUDED_GRAS_BLOCK_CONFIG_HPP*/ |