STXXL
1.4-dev
|
Implements dynamically resizable prefetching pool.
Definition at line 29 of file prefetch_pool.h.
Classes | |
struct | bid_hash |
Public Types | |
typedef block_type::bid_type | bid_type |
typedef BlockType | block_type |
Public Member Functions | |
prefetch_pool (unsigned_type init_size=1) | |
Constructs pool. More... | |
virtual | ~prefetch_pool () |
Waits for completion of all ongoing read requests and frees memory. More... | |
void | add (block_type *&block) |
Add a new block to prefetch pool, enlarges size of pool. More... | |
unsigned_type | busy_size () const |
Returns the number of busy prefetching blocks. More... | |
request_ptr | find (bid_type bid) |
Returns the request pointer for a hinted block, or an invalid NULL request in case it was not requested due to lack of prefetch buffers. More... | |
unsigned_type | free_size () const |
Returns the number of free prefetching blocks. More... | |
bool | hint (bid_type bid) |
Gives a hint for prefetching a block, the block may or may not be read into a prefetch buffer. More... | |
bool | hint (bid_type bid, write_pool< block_type > &w_pool) |
Gives a hint for prefetching a block, the block may or may not be read into a prefetch buffer. More... | |
bool | in_prefetching (bid_type bid) |
Checks if a block is in the hinted block set. More... | |
bool | invalidate (bid_type bid) |
Cancel a hint request in case the block is no longer desired. More... | |
bool | poll (bid_type bid) |
Returns true if the blocks was hinted and the request is finished. More... | |
request_ptr | read (block_type *&block, bid_type bid) |
Reads block. More... | |
request_ptr | read (block_type *&block, bid_type bid, write_pool< block_type > &w_pool) |
unsigned_type | resize (unsigned_type new_size) |
Resizes size of the pool. More... | |
unsigned_type | size () const |
Returns number of owned blocks. More... | |
block_type * | steal () |
Take out a block from the pool, one unhinted free block must be available. More... | |
void | swap (prefetch_pool &obj) |
Protected Types | |
typedef hash_map_type::iterator | busy_blocks_iterator |
typedef std::pair< block_type *, request_ptr > | busy_entry |
typedef std::list< block_type * > ::iterator | free_blocks_iterator |
typedef compat_hash_map < bid_type, busy_entry, bid_hash >::result | hash_map_type |
Protected Attributes | |
hash_map_type | busy_blocks |
blocks that are in reading or already read but not retrieved by user More... | |
std::list< block_type * > | free_blocks |
contains free prefetch blocks More... | |
unsigned_type | free_blocks_size |
count number of free blocks, since traversing the std::list is slow. More... | |
Additional Inherited Members | |
Private Member Functions inherited from stxxl::noncopyable | |
noncopyable () | |
typedef block_type::bid_type stxxl::prefetch_pool< BlockType >::bid_type |
Definition at line 33 of file prefetch_pool.h.
typedef BlockType stxxl::prefetch_pool< BlockType >::block_type |
Definition at line 32 of file prefetch_pool.h.
|
protected |
Definition at line 60 of file prefetch_pool.h.
|
protected |
Definition at line 57 of file prefetch_pool.h.
|
protected |
Definition at line 59 of file prefetch_pool.h.
|
protected |
Definition at line 58 of file prefetch_pool.h.
|
inlineexplicit |
Constructs pool.
init_size | initial number of blocks in the pool |
Definition at line 74 of file prefetch_pool.h.
|
inlinevirtual |
Waits for completion of all ongoing read requests and frees memory.
Definition at line 90 of file prefetch_pool.h.
|
inline |
Add a new block to prefetch pool, enlarges size of pool.
Definition at line 130 of file prefetch_pool.h.
|
inline |
Returns the number of busy prefetching blocks.
Definition at line 124 of file prefetch_pool.h.
|
inline |
Returns the request pointer for a hinted block, or an invalid NULL request in case it was not requested due to lack of prefetch buffers.
Definition at line 255 of file prefetch_pool.h.
|
inline |
Returns the number of free prefetching blocks.
Definition at line 118 of file prefetch_pool.h.
|
inline |
Gives a hint for prefetching a block, the block may or may not be read into a prefetch buffer.
bid | address of a block to be prefetched |
true
if there was a free block to do prefetch and prefetching was scheduled, false
otherwiseread
method) calling hint
function has no effect Definition at line 162 of file prefetch_pool.h.
References STXXL_VERBOSE2.
|
inline |
Gives a hint for prefetching a block, the block may or may not be read into a prefetch buffer.
This variant checks if the write pool is currently writing said block.
bid | address of a block to be prefetched |
true
if there was a free block to do prefetch and prefetching was scheduled, false
otherwiseread
method) calling hint
function has no effect Definition at line 197 of file prefetch_pool.h.
References stxxl::write_pool< BlockType >::add(), stxxl::write_pool< BlockType >::has_request(), stxxl::write_pool< BlockType >::steal_request(), STXXL_VERBOSE1, and STXXL_VERBOSE2.
|
inline |
Checks if a block is in the hinted block set.
Definition at line 248 of file prefetch_pool.h.
|
inline |
Cancel a hint request in case the block is no longer desired.
Definition at line 229 of file prefetch_pool.h.
|
inline |
Returns true if the blocks was hinted and the request is finished.
Definition at line 266 of file prefetch_pool.h.
References stxxl::find(), stxxl::request_interface::poll(), and stxxl::counting_ptr< Type >::valid().
|
inline |
Reads block.
If this block is cached block is not read but passed from the cache.
block | block object, where data to be read to. If block was cached block 's ownership goes to the pool and block from cache is returned in block value. |
bid | address of the block |
block
parameter must be allocated dynamically using new
.Definition at line 286 of file prefetch_pool.h.
References STXXL_VERBOSE1.
|
inline |
Definition at line 306 of file prefetch_pool.h.
References stxxl::write_pool< BlockType >::add(), stxxl::write_pool< BlockType >::has_request(), stxxl::write_pool< BlockType >::steal_request(), and STXXL_VERBOSE1.
|
inline |
Resizes size of the pool.
new_size | desired size of the pool. If some blocks are used for prefetching, these blocks can't be freed. Only free blocks (not in prefetching) can be freed by reducing the size of the pool calling this method. |
Definition at line 344 of file prefetch_pool.h.
|
inline |
Returns number of owned blocks.
Definition at line 112 of file prefetch_pool.h.
|
inline |
Take out a block from the pool, one unhinted free block must be available.
Definition at line 140 of file prefetch_pool.h.
References STXXL_CHECK.
|
inline |
Definition at line 82 of file prefetch_pool.h.
References stxxl::prefetch_pool< BlockType >::busy_blocks, stxxl::prefetch_pool< BlockType >::free_blocks, and stxxl::prefetch_pool< BlockType >::free_blocks_size.
|
protected |
blocks that are in reading or already read but not retrieved by user
Definition at line 66 of file prefetch_pool.h.
Referenced by stxxl::prefetch_pool< BlockType >::swap().
|
protected |
contains free prefetch blocks
Definition at line 63 of file prefetch_pool.h.
Referenced by stxxl::prefetch_pool< BlockType >::swap().
|
protected |
count number of free blocks, since traversing the std::list is slow.
Definition at line 69 of file prefetch_pool.h.
Referenced by stxxl::prefetch_pool< BlockType >::swap().