diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/CMakeLists.txt | 1 | ||||
-rw-r--r-- | lib/block.cpp | 41 | ||||
-rw-r--r-- | lib/block_allocator.cpp | 2 | ||||
-rw-r--r-- | lib/block_config.cpp | 29 | ||||
-rw-r--r-- | lib/block_handlers.cpp | 12 | ||||
-rw-r--r-- | lib/gras_impl/block_data.hpp | 3 | ||||
-rw-r--r-- | lib/task_main.cpp | 2 | ||||
-rw-r--r-- | lib/top_block.cpp | 6 |
8 files changed, 52 insertions, 44 deletions
diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt index b5ed2d5..5f31731 100644 --- a/lib/CMakeLists.txt +++ b/lib/CMakeLists.txt @@ -49,6 +49,7 @@ list(APPEND GRAS_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/buffer_queue_pool.cpp ${CMAKE_CURRENT_SOURCE_DIR}/tags.cpp ${CMAKE_CURRENT_SOURCE_DIR}/block.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/block_config.cpp ${CMAKE_CURRENT_SOURCE_DIR}/block_message.cpp ${CMAKE_CURRENT_SOURCE_DIR}/block_consume.cpp ${CMAKE_CURRENT_SOURCE_DIR}/block_produce.cpp diff --git a/lib/block.cpp b/lib/block.cpp index 00238ba..7cd7392 100644 --- a/lib/block.cpp +++ b/lib/block.cpp @@ -7,23 +7,6 @@ using namespace gras; -InputPortConfig::InputPortConfig(void) -{ - item_size = 1; - reserve_items = 1; - maximum_items = 0; - inline_buffer = false; - preload_items = 0; - force_done = true; -} - -OutputPortConfig::OutputPortConfig(void) -{ - item_size = 1; - reserve_items = 1; - maximum_items = 0; -} - Block::Block(void) { //NOP @@ -43,10 +26,6 @@ Block::Block(const std::string &name): //setup some state variables (*this)->block_data->block_state = BLOCK_STATE_INIT; - - //call block methods to init stuff - this->set_interruptible_work(false); - this->set_buffer_affinity(-1); } Block::~Block(void) @@ -142,6 +121,16 @@ typename V::value_type &vector_get_resize(V &v, const size_t index) return v[index]; } +const GlobalBlockConfig &Block::global_config(void) const +{ + return (*this)->block_data->global_config; +} + +GlobalBlockConfig &Block::global_config(void) +{ + return (*this)->block_data->global_config; +} + InputPortConfig &Block::input_config(const size_t which_input) { return vector_get_resize((*this)->block_data->input_configs, which_input); @@ -202,13 +191,3 @@ void Block::set_thread_pool(const ThreadPool &thread_pool) (*this)->setup_actor(); wait_actor_idle((*this)->repr, *old_actor); } - -void Block::set_buffer_affinity(const long affinity) -{ - (*this)->block_data->buffer_affinity = affinity; -} - -void Block::set_interruptible_work(const bool enb) -{ - (*this)->block_data->interruptible_work = enb; -} diff --git a/lib/block_allocator.cpp b/lib/block_allocator.cpp index aa97405..3168bc2 100644 --- a/lib/block_allocator.cpp +++ b/lib/block_allocator.cpp @@ -74,7 +74,7 @@ void BlockActor::handle_top_alloc(const TopAllocMessage &, const Theron::Address SBufferConfig config; config.memory = NULL; config.length = bytes; - config.affinity = data->buffer_affinity; + config.affinity = data->global_config.buffer_affinity; config.token = token; BufferQueueSptr queue = data->block->output_buffer_allocator(i, config); diff --git a/lib/block_config.cpp b/lib/block_config.cpp new file mode 100644 index 0000000..04d37f1 --- /dev/null +++ b/lib/block_config.cpp @@ -0,0 +1,29 @@ +// Copyright (C) by Josh Blum. See LICENSE.txt for licensing information. + +#include <gras/block_config.hpp> + +using namespace gras; + +GlobalBlockConfig::GlobalBlockConfig(void) +{ + maximum_output_items = 0; + buffer_affinity = -1; + interruptible_work = false; +} + +InputPortConfig::InputPortConfig(void) +{ + item_size = 1; + reserve_items = 1; + maximum_items = 0; + inline_buffer = false; + preload_items = 0; + force_done = true; +} + +OutputPortConfig::OutputPortConfig(void) +{ + item_size = 1; + reserve_items = 1; + maximum_items = 0; +} diff --git a/lib/block_handlers.cpp b/lib/block_handlers.cpp index c52d974..4cb03ab 100644 --- a/lib/block_handlers.cpp +++ b/lib/block_handlers.cpp @@ -92,9 +92,15 @@ void BlockActor::handle_top_config( } //overwrite with global node affinity setting for buffers if not set - if (data->buffer_affinity == -1) + if (data->global_config.buffer_affinity == -1) { - data->buffer_affinity = message.buffer_affinity; + data->global_config.buffer_affinity = message.buffer_affinity; + } + + //overwrite with global interruptable setting for work if not set + if (data->global_config.interruptible_work == false) + { + data->global_config.interruptible_work = message.interruptible_work; } this->Send(0, from); //ACK @@ -111,7 +117,7 @@ void BlockActor::handle_top_thread_group( //spawn a new thread if this block is a source data->thread_group = message; data->interruptible_thread.reset(); //erase old one - if (data->interruptible_work) + if (data->global_config.interruptible_work) { data->interruptible_thread = boost::make_shared<InterruptibleThread>( data->thread_group, boost::bind(&BlockActor::task_work, this) diff --git a/lib/gras_impl/block_data.hpp b/lib/gras_impl/block_data.hpp index 4b6e8de..9300d9f 100644 --- a/lib/gras_impl/block_data.hpp +++ b/lib/gras_impl/block_data.hpp @@ -67,13 +67,12 @@ struct BlockData std::vector<std::vector<PMCC> > input_msgs; //interruptible thread stuff - bool interruptible_work; SharedThreadGroup thread_group; boost::shared_ptr<InterruptibleThread> interruptible_thread; //is the fg running? BlockState block_state; - long buffer_affinity; + GlobalBlockConfig global_config; std::vector<std::vector<OutputHintMessage> > output_allocation_hints; diff --git a/lib/task_main.cpp b/lib/task_main.cpp index cb3e0ee..f4f0053 100644 --- a/lib/task_main.cpp +++ b/lib/task_main.cpp @@ -47,7 +47,7 @@ void BlockActor::task_main(void) buff.unique() and data->input_configs[i].inline_buffer and output_inline_index < num_outputs and - buff.get_affinity() == data->buffer_affinity + buff.get_affinity() == data->global_config.buffer_affinity ){ data->output_queues.set_inline(output_inline_index++, buff); } diff --git a/lib/top_block.cpp b/lib/top_block.cpp index 12055f8..240f417 100644 --- a/lib/top_block.cpp +++ b/lib/top_block.cpp @@ -6,12 +6,6 @@ using namespace gras; -GlobalBlockConfig::GlobalBlockConfig(void) -{ - maximum_output_items = 0; - buffer_affinity = -1; -} - TopBlock::TopBlock(void) { //NOP |