Thrill
0.1
|
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 265 of file block_scheduler.hpp.
#include <block_scheduler.hpp>
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 } |
using | external_block_type = typename SwappableBlockType::external_block_type |
using | internal_block_type = typename SwappableBlockType::internal_block_type |
using | prediction_sequence_type = std::list< prediction_sequence_element > |
using | swappable_block_identifier_type = typename std::vector< SwappableBlockType >::size_type |
Protected Types | |
using | time_type = size_t |
Protected Member Functions | |
internal_block_type * | get_free_internal_block () |
void | return_free_internal_block (internal_block_type *iblock) |
Return an internal_block to the freelist. More... | |
Protected Attributes | |
block_scheduler_algorithm< SwappableBlockType > * | algo |
block_manager * | bm |
std::stack< internal_block_type * > | free_internal_blocks |
holds free internal_blocks with attributes reset. More... | |
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. More... | |
std::stack< internal_block_type * > | internal_blocks_blocks |
Stores pointers to arrays of internal_blocks. Used to deallocate them only. More... | |
const size_t | max_internal_blocks |
size_t | remaining_internal_blocks |
std::vector< SwappableBlockType > | swappable_blocks |
temporary blocks that will not be needed after algorithm termination. More... | |
Static Protected Attributes | |
static const size_t | max_internal_blocks_alloc_at_once = 128 |
Static Private Attributes | |
static constexpr bool | debug = false |
using external_block_type = typename SwappableBlockType::external_block_type |
Definition at line 278 of file block_scheduler.hpp.
using internal_block_type = typename SwappableBlockType::internal_block_type |
Definition at line 277 of file block_scheduler.hpp.
using prediction_sequence_type = std::list<prediction_sequence_element> |
Definition at line 314 of file block_scheduler.hpp.
using swappable_block_identifier_type = typename std::vector<SwappableBlockType>::size_type |
Definition at line 279 of file block_scheduler.hpp.
|
protected |
Definition at line 274 of file block_scheduler.hpp.
Enumerator | |
---|---|
op_acquire | |
op_acquire_uninitialized | |
op_release | |
op_release_dirty | |
op_deinitialize | |
op_initialize | |
op_extract_external_block |
Definition at line 292 of file block_scheduler.hpp.
|
inlineexplicit |
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 371 of file block_scheduler.hpp.
|
delete |
non-copyable: delete copy-constructor
|
inline |
Definition at line 385 of file block_scheduler.hpp.
References TLX_LOG1.
|
inline |
Acquire the given block. Has to be in pairs with release. Pairs may be nested and interleaved.
Definition at line 417 of file block_scheduler.hpp.
References block_scheduler_algorithm< SwappableBlockType >::acquire().
|
inline |
Allocate an uninitialized swappable_block.
Definition at line 465 of file block_scheduler.hpp.
References block_scheduler_algorithm< SwappableBlockType >::swappable_blocks_resize().
|
inline |
Drop all data in the given block, freeing in- and external memory.
Definition at line 428 of file block_scheduler.hpp.
References block_scheduler_algorithm< SwappableBlockType >::deinitialize().
|
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 455 of file block_scheduler.hpp.
References block_scheduler_algorithm< SwappableBlockType >::explicit_timestep().
|
inline |
Deinitialize the swappable_block and return it's contents in an external_block.
sbid | identifier to the swappable_block |
Definition at line 444 of file block_scheduler.hpp.
References block_scheduler_algorithm< SwappableBlockType >::extract_external_block().
|
inline |
Definition at line 519 of file block_scheduler.hpp.
References swappable_block< ValueType, BlockSize >::detach_internal_block(), block_scheduler_algorithm< SwappableBlockType >::evictable_blocks_empty(), block_scheduler_algorithm< SwappableBlockType >::evictable_blocks_pop(), and CountingPtr< Type, Deleter >::valid().
|
inline |
Free given no longer used temporary swappable_block.
sbid | Temporary swappable_block to free. |
Definition at line 486 of file block_scheduler.hpp.
References swappable_block< ValueType, BlockSize >::deinitialize().
|
inline |
Return the current algorithm.
Definition at line 509 of file block_scheduler.hpp.
|
inlineprotected |
Get an internal_block from the freelist or a newly allocated one if available.
Definition at line 337 of file block_scheduler.hpp.
References min().
Referenced by block_scheduler_algorithm< SwappableBlockType >::get_free_internal_block_from_block_scheduler().
|
inline |
Get a const reference to given block's data. Block has to be already acquired.
sbid | Swappable block to access. |
Definition at line 460 of file block_scheduler.hpp.
|
inline |
Get the prediction_sequence.
Definition at line 516 of file block_scheduler.hpp.
References block_scheduler_algorithm< SwappableBlockType >::get_prediction_sequence().
|
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 437 of file block_scheduler.hpp.
References block_scheduler_algorithm< SwappableBlockType >::initialize().
|
inline |
check if the swappable_block is initialized.
sbid | identifier to the swappable_block |
Definition at line 450 of file block_scheduler.hpp.
References block_scheduler_algorithm< SwappableBlockType >::is_initialized().
|
inline |
Returns if simulation mode is on, i.e. if a prediction sequence is being recorded.
Definition at line 494 of file block_scheduler.hpp.
References block_scheduler_algorithm< SwappableBlockType >::is_simulating().
|
delete |
non-copyable: delete assignment operator
|
inline |
Release the given block. Has to be in pairs with acquire. Pairs may be nested and interleaved.
sbid | Swappable block to release. |
dirty | If the data has been changed, invalidating possible data in external storage. |
Definition at line 424 of file block_scheduler.hpp.
References block_scheduler_algorithm< SwappableBlockType >::release().
|
inlineprotected |
Return an internal_block to the freelist.
Definition at line 365 of file block_scheduler.hpp.
Referenced by block_scheduler_algorithm< SwappableBlockType >::return_free_internal_block_to_block_scheduler().
|
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 500 of file block_scheduler.hpp.
References block_scheduler_algorithm< SwappableBlockType >::bs.
|
protected |
Definition at line 333 of file block_scheduler.hpp.
Referenced by block_scheduler_algorithm< SwappableBlockType >::get_algorithm_from_block_scheduler().
|
protected |
Definition at line 332 of file block_scheduler.hpp.
|
staticprivate |
Definition at line 267 of file block_scheduler.hpp.
|
protected |
holds free internal_blocks with attributes reset.
Definition at line 326 of file block_scheduler.hpp.
|
protected |
holds indices of free swappable_blocks with attributes reset.
Definition at line 331 of file block_scheduler.hpp.
|
protected |
Stores pointers to arrays of internal_blocks. Used to deallocate them only.
Definition at line 324 of file block_scheduler.hpp.
|
protected |
Definition at line 321 of file block_scheduler.hpp.
|
staticprotected |
Definition at line 272 of file block_scheduler.hpp.
|
protected |
Definition at line 322 of file block_scheduler.hpp.
|
mutableprotected |
temporary blocks that will not be needed after algorithm termination.
Definition at line 328 of file block_scheduler.hpp.