tatami_chunked
Helpers to create custom chunked tatami matrices
Loading...
Searching...
No Matches
SlabCacheStats.hpp
Go to the documentation of this file.
1#ifndef TATAMI_CHUNKED_SLAB_CACHE_STATS_HPP
2#define TATAMI_CHUNKED_SLAB_CACHE_STATS_HPP
3
4#include <algorithm>
5#include <cstddef>
6
7#include "sanisizer/sanisizer.hpp"
8
14namespace tatami_chunked {
15
25template<typename MaxSlabs_>
31
37
52 template<typename Index_, typename TargetNumSlabs_>
53 SlabCacheStats(Index_ target_length, Index_ non_target_length, TargetNumSlabs_ target_num_slabs, std::size_t cache_size_in_elements, bool require_minimum_cache) :
54 slab_size_in_elements(sanisizer::product<std::size_t>(target_length, non_target_length)),
55 max_slabs_in_cache(compute_max_slabs_in_cache(slab_size_in_elements, target_num_slabs, cache_size_in_elements, require_minimum_cache))
56 {}
57
74 template<typename Index_, typename TargetNumSlabs_>
75 SlabCacheStats(Index_ target_length, Index_ non_target_length, TargetNumSlabs_ target_num_slabs, std::size_t cache_size_in_bytes, std::size_t element_size, bool require_minimum_cache) :
76 slab_size_in_elements(sanisizer::product<std::size_t>(target_length, non_target_length)),
78 if (element_size == 0) {
79 return sanisizer::cap<MaxSlabs_>(target_num_slabs);
80 } else {
81 return compute_max_slabs_in_cache(slab_size_in_elements, target_num_slabs, cache_size_in_bytes / element_size, require_minimum_cache);
82 }
83 }())
84 {}
85
86private:
87 template<typename NumSlabs_>
88 static MaxSlabs_ compute_max_slabs_in_cache(std::size_t slab_size_in_elements, NumSlabs_ num_slabs, std::size_t cache_size_in_elements, bool require_minimum_cache) {
89 if (slab_size_in_elements == 0) {
90 return sanisizer::cap<MaxSlabs_>(num_slabs);
91 }
92
93 auto tmp = cache_size_in_elements / slab_size_in_elements;
94 if (tmp == 0 && require_minimum_cache) {
95 return 1;
96 }
97
98 if (sanisizer::is_less_than_or_equal(tmp, num_slabs)) {
99 return tmp;
100 } else {
101 return num_slabs;
102 }
103 }
104};
105
106}
107
108#endif
Methods to handle chunked tatami matrices.
Definition ChunkDimensionStats.hpp:4
Statistics for slab caching.
Definition SlabCacheStats.hpp:26
MaxSlabs_ max_slabs_in_cache
Definition SlabCacheStats.hpp:36
std::size_t slab_size_in_elements
Definition SlabCacheStats.hpp:30
SlabCacheStats(Index_ target_length, Index_ non_target_length, TargetNumSlabs_ target_num_slabs, std::size_t cache_size_in_elements, bool require_minimum_cache)
Definition SlabCacheStats.hpp:53
SlabCacheStats(Index_ target_length, Index_ non_target_length, TargetNumSlabs_ target_num_slabs, std::size_t cache_size_in_bytes, std::size_t element_size, bool require_minimum_cache)
Definition SlabCacheStats.hpp:75