Stxxl
1.4.0
|
Schedules swapping of blocks and provides blocks for temporary storage. More...
#include <block_scheduler.h>
Classes | |
struct | prediction_sequence_element |
Public Types | |
enum | block_scheduler_operation { op_acquire, op_acquire_uninitialized, op_release, op_release_dirty, op_deinitialize, op_initialize, op_extract_external_block } |
typedef SwappableBlockType::internal_block_type | internal_block_type |
typedef SwappableBlockType::external_block_type | external_block_type |
typedef std::vector < SwappableBlockType > ::size_type | swappable_block_identifier_type |
typedef std::deque < prediction_sequence_element > | prediction_sequence_type |
Public Member Functions | |
block_scheduler (const int_type max_internal_memory) | |
create a block_scheduler with empty prediction sequence in simple mode. | |
~block_scheduler () | |
internal_block_type & | acquire (const swappable_block_identifier_type sbid, const bool uninitialized=false) |
Acquire the given block. Has to be in pairs with release. Pairs may be nested and interleaved. | |
void | release (const swappable_block_identifier_type sbid, const bool dirty) |
Release the given block. Has to be in pairs with acquire. Pairs may be nested and interleaved. | |
void | deinitialize (const swappable_block_identifier_type sbid) |
Drop all data in the given block, freeing in- and external memory. | |
void | initialize (const swappable_block_identifier_type sbid, external_block_type eblock) |
Initialize the swappable_block with the given external_block. | |
external_block_type | extract_external_block (const swappable_block_identifier_type sbid) |
deinitialize the swappable_block and return it's contents in an external_block. | |
bool | is_initialized (const swappable_block_identifier_type sbid) const |
check if the swappable_block is initialized | |
void | explicit_timestep () |
Record a timestep in the prediction sequence to seperate consecutive acquire rsp. release-operations. Has an effect only in simulation mode. | |
internal_block_type & | get_internal_block (const swappable_block_identifier_type sbid) const |
Get a const reference to given block's data. Block has to be already acquired. | |
swappable_block_identifier_type | allocate_swappable_block () |
Allocate an uninitialized swappable_block. | |
void | free_swappable_block (const swappable_block_identifier_type sbid) |
Free given no longer used temporary swappable_block. | |
bool | is_simulating () const |
Returns if simulation mode is on, i.e. if a prediction sequence is being recorded. | |
block_scheduler_algorithm < SwappableBlockType > * | switch_algorithm_to (block_scheduler_algorithm< SwappableBlockType > *new_algo) |
Switch the used algorithm, e.g. to simulation etc.. | |
const prediction_sequence_type & | get_prediction_sequence () const |
get the prediction_sequence | |
void | flush () |
Protected Types | |
typedef int_type | time_type |
Protected Member Functions | |
internal_block_type * | get_free_internal_block () |
Get an internal_block from the freelist or a newly allocated one if available. | |
void | return_free_internal_block (internal_block_type *iblock) |
Return an internal_block to the freelist. | |
Protected Attributes | |
const int_type | max_internal_blocks |
int_type | remaining_internal_blocks |
std::stack< internal_block_type * > | internal_blocks_blocks |
Stores pointers to arrays of internal_blocks. Used to deallocate them only. | |
std::stack< internal_block_type * > | free_internal_blocks |
holds free internal_blocks with attributes reset | |
std::vector< SwappableBlockType > | swappable_blocks |
temporary blocks that will not be needed after algorithm termination | |
std::priority_queue < swappable_block_identifier_type, std::vector < swappable_block_identifier_type > , std::greater < swappable_block_identifier_type > > | free_swappable_blocks |
holds indices of free swappable_blocks with attributes reset | |
block_manager * | bm |
block_scheduler_algorithm < SwappableBlockType > * | algo |
Static Protected Attributes | |
static const int_type | max_internal_blocks_alloc_at_once = 128 |
Schedules swapping of blocks and provides blocks for temporary storage.
In simple mode, it tries to save I/Os through caching only. In simulation mode, it records access patterns into a prediction sequence. The prediction sequence can then be used for prefetching in the (offline) execute mode. This will only work for algorithms with deterministic, data oblivious access patterns. In simulation mode, no I/O is performed; the data provided is accessible but undefined. In execute mode, it does caching, prefetching, and possibly other optimizations.
SwappableBlockType | Type of swappable_blocks to manage. Can be some specialized subclass. |
Definition at line 246 of file block_scheduler.h.
typedef SwappableBlockType::external_block_type stxxl::block_scheduler< SwappableBlockType >::external_block_type |
Definition at line 257 of file block_scheduler.h.
typedef SwappableBlockType::internal_block_type stxxl::block_scheduler< SwappableBlockType >::internal_block_type |
Definition at line 256 of file block_scheduler.h.
typedef std::deque<prediction_sequence_element> stxxl::block_scheduler< SwappableBlockType >::prediction_sequence_type |
Definition at line 294 of file block_scheduler.h.
typedef std::vector<SwappableBlockType>::size_type stxxl::block_scheduler< SwappableBlockType >::swappable_block_identifier_type |
Definition at line 258 of file block_scheduler.h.
typedef int_type stxxl::block_scheduler< SwappableBlockType >::time_type [protected] |
Definition at line 253 of file block_scheduler.h.
enum stxxl::block_scheduler::block_scheduler_operation |
op_acquire | |
op_acquire_uninitialized | |
op_release | |
op_release_dirty | |
op_deinitialize | |
op_initialize | |
op_extract_external_block |
Definition at line 271 of file block_scheduler.h.
stxxl::block_scheduler< SwappableBlockType >::block_scheduler | ( | const int_type | max_internal_memory | ) | [inline, explicit] |
create a block_scheduler with empty prediction sequence in simple mode.
max_internal_memory | Amount of internal memory (in bytes) the scheduler is allowed to use for acquiring, prefetching and caching. |
Definition at line 350 of file block_scheduler.h.
stxxl::block_scheduler< SwappableBlockType >::~block_scheduler | ( | ) | [inline] |
Definition at line 357 of file block_scheduler.h.
internal_block_type& stxxl::block_scheduler< SwappableBlockType >::acquire | ( | const swappable_block_identifier_type | sbid, |
const bool | uninitialized = false |
||
) | [inline] |
Acquire the given block. Has to be in pairs with release. Pairs may be nested and interleaved.
sblock | Swappable block to acquire. |
Definition at line 384 of file block_scheduler.h.
Referenced by stxxl::matrix_operations< ValueType, BlockSideLength >::element_op_swappable_block(), stxxl::matrix_operations< ValueType, BlockSideLength >::matrix_col_vector_multiply_and_add_swappable_block(), stxxl::matrix_operations< ValueType, BlockSideLength >::matrix_from_vectors_swappable_block(), stxxl::matrix_operations< ValueType, BlockSideLength >::matrix_row_vector_multiply_and_add_swappable_block(), and stxxl::matrix_operations< ValueType, BlockSideLength >::multiply_and_add_swappable_block().
swappable_block_identifier_type stxxl::block_scheduler< SwappableBlockType >::allocate_swappable_block | ( | ) | [inline] |
Allocate an uninitialized swappable_block.
Definition at line 431 of file block_scheduler.h.
Referenced by stxxl::swappable_block_matrix< ValueType, BlockSideLength >::swappable_block_matrix().
void stxxl::block_scheduler< SwappableBlockType >::deinitialize | ( | const swappable_block_identifier_type | sbid | ) | [inline] |
Drop all data in the given block, freeing in- and external memory.
Definition at line 395 of file block_scheduler.h.
Referenced by stxxl::matrix_operations< ValueType, BlockSideLength >::element_op_swappable_block().
void stxxl::block_scheduler< SwappableBlockType >::explicit_timestep | ( | ) | [inline] |
Record a timestep in the prediction sequence to seperate consecutive acquire rsp. release-operations. Has an effect only in simulation mode.
Definition at line 421 of file block_scheduler.h.
external_block_type stxxl::block_scheduler< SwappableBlockType >::extract_external_block | ( | const swappable_block_identifier_type | sbid | ) | [inline] |
deinitialize the swappable_block and return it's contents in an external_block.
sbid | identifier to the swappable_block |
Definition at line 410 of file block_scheduler.h.
void stxxl::block_scheduler< SwappableBlockType >::flush | ( | ) | [inline] |
Definition at line 479 of file block_scheduler.h.
References stxxl::request_ptr::valid().
void stxxl::block_scheduler< SwappableBlockType >::free_swappable_block | ( | const swappable_block_identifier_type | sbid | ) | [inline] |
Free given no longer used temporary swappable_block.
sblock | Temporary swappable_block to free. |
Definition at line 452 of file block_scheduler.h.
internal_block_type* stxxl::block_scheduler< SwappableBlockType >::get_free_internal_block | ( | ) | [inline, protected] |
Get an internal_block from the freelist or a newly allocated one if available.
Definition at line 316 of file block_scheduler.h.
internal_block_type& stxxl::block_scheduler< SwappableBlockType >::get_internal_block | ( | const swappable_block_identifier_type | sbid | ) | const [inline] |
Get a const reference to given block's data. Block has to be already acquired.
sblock | Swappable block to access. |
Definition at line 426 of file block_scheduler.h.
const prediction_sequence_type& stxxl::block_scheduler< SwappableBlockType >::get_prediction_sequence | ( | ) | const [inline] |
get the prediction_sequence
Definition at line 476 of file block_scheduler.h.
References stxxl::block_scheduler_algorithm< SwappableBlockType >::get_prediction_sequence().
void stxxl::block_scheduler< SwappableBlockType >::initialize | ( | const swappable_block_identifier_type | sbid, |
external_block_type | eblock | ||
) | [inline] |
Initialize the swappable_block with the given external_block.
It will use the the external_block for swapping and take care about it's deallocation. Has to be uninitialized.
sbid | identifier to the swappable_block |
eblock | external_block a.k.a. bid |
Definition at line 403 of file block_scheduler.h.
bool stxxl::block_scheduler< SwappableBlockType >::is_initialized | ( | const swappable_block_identifier_type | sbid | ) | const [inline] |
check if the swappable_block is initialized
sbid | identifier to the swappable_block |
Definition at line 416 of file block_scheduler.h.
Referenced by stxxl::matrix_operations< ValueType, BlockSideLength >::element_op_swappable_block(), stxxl::matrix_operations< ValueType, BlockSideLength >::matrix_col_vector_multiply_and_add_swappable_block(), stxxl::matrix_operations< ValueType, BlockSideLength >::matrix_row_vector_multiply_and_add_swappable_block(), and stxxl::matrix_operations< ValueType, BlockSideLength >::multiply_and_add_swappable_block().
bool stxxl::block_scheduler< SwappableBlockType >::is_simulating | ( | ) | const [inline] |
Returns if simulation mode is on, i.e. if a prediction sequence is being recorded.
Definition at line 460 of file block_scheduler.h.
Referenced by stxxl::matrix_operations< ValueType, BlockSideLength >::element_op_swappable_block(), stxxl::matrix_operations< ValueType, BlockSideLength >::matrix_col_vector_multiply_and_add_swappable_block(), stxxl::matrix_operations< ValueType, BlockSideLength >::matrix_from_vectors_swappable_block(), stxxl::matrix_operations< ValueType, BlockSideLength >::matrix_row_vector_multiply_and_add_swappable_block(), stxxl::matrix_operations< ValueType, BlockSideLength >::multiply_and_add_swappable_block(), and stxxl::matrix< ValueType, BlockSideLength >::multiply_internal().
void stxxl::block_scheduler< SwappableBlockType >::release | ( | const swappable_block_identifier_type | sbid, |
const bool | dirty | ||
) | [inline] |
Release the given block. Has to be in pairs with acquire. Pairs may be nested and interleaved.
sblock | Swappable block to release. |
dirty | If the data has been changed, invalidating possible data in external storage. |
Definition at line 391 of file block_scheduler.h.
Referenced by stxxl::matrix_operations< ValueType, BlockSideLength >::element_op_swappable_block(), stxxl::matrix_operations< ValueType, BlockSideLength >::matrix_col_vector_multiply_and_add_swappable_block(), stxxl::matrix_operations< ValueType, BlockSideLength >::matrix_from_vectors_swappable_block(), stxxl::matrix_operations< ValueType, BlockSideLength >::matrix_row_vector_multiply_and_add_swappable_block(), and stxxl::matrix_operations< ValueType, BlockSideLength >::multiply_and_add_swappable_block().
void stxxl::block_scheduler< SwappableBlockType >::return_free_internal_block | ( | internal_block_type * | iblock | ) | [inline, protected] |
Return an internal_block to the freelist.
Definition at line 344 of file block_scheduler.h.
block_scheduler_algorithm<SwappableBlockType>* stxxl::block_scheduler< SwappableBlockType >::switch_algorithm_to | ( | block_scheduler_algorithm< SwappableBlockType > * | new_algo | ) | [inline] |
Switch the used algorithm, e.g. to simulation etc..
new_algo | Pointer to the new algorithm object. Has to be instantiated to the block scheduler (or the old algorithm object). |
Definition at line 466 of file block_scheduler.h.
References stxxl::block_scheduler_algorithm< SwappableBlockType >::bs.
block_scheduler_algorithm<SwappableBlockType>* stxxl::block_scheduler< SwappableBlockType >::algo [protected] |
Definition at line 312 of file block_scheduler.h.
block_manager* stxxl::block_scheduler< SwappableBlockType >::bm [protected] |
Definition at line 311 of file block_scheduler.h.
std::stack<internal_block_type * > stxxl::block_scheduler< SwappableBlockType >::free_internal_blocks [protected] |
holds free internal_blocks with attributes reset
Definition at line 305 of file block_scheduler.h.
std::priority_queue<swappable_block_identifier_type, std::vector<swappable_block_identifier_type>, std::greater<swappable_block_identifier_type> > stxxl::block_scheduler< SwappableBlockType >::free_swappable_blocks [protected] |
holds indices of free swappable_blocks with attributes reset
Definition at line 310 of file block_scheduler.h.
std::stack<internal_block_type *> stxxl::block_scheduler< SwappableBlockType >::internal_blocks_blocks [protected] |
Stores pointers to arrays of internal_blocks. Used to deallocate them only.
Definition at line 303 of file block_scheduler.h.
const int_type stxxl::block_scheduler< SwappableBlockType >::max_internal_blocks [protected] |
Definition at line 300 of file block_scheduler.h.
const int_type stxxl::block_scheduler< SwappableBlockType >::max_internal_blocks_alloc_at_once = 128 [static, protected] |
Definition at line 251 of file block_scheduler.h.
int_type stxxl::block_scheduler< SwappableBlockType >::remaining_internal_blocks [protected] |
Definition at line 301 of file block_scheduler.h.
std::vector<SwappableBlockType> stxxl::block_scheduler< SwappableBlockType >::swappable_blocks [mutable, protected] |
temporary blocks that will not be needed after algorithm termination
Definition at line 307 of file block_scheduler.h.