23 dense_iterator(T* current, T* begin, uint32_t stride) : _current(current), _begin(begin), _stride(stride) {}
58 dense_parameters() : _begin(nullptr), _weight_mask(0), _stride_shift(0), _seeded(false) {}
60 bool not_null() {
return (_weight_mask > 0 && _begin !=
nullptr); }
70 iterator
begin() {
return iterator(_begin, _begin, stride()); }
71 iterator
end() {
return iterator(_begin + _weight_mask + 1, _begin, stride()); }
74 const_iterator
cbegin() {
return const_iterator(_begin, _begin, stride()); }
75 const_iterator
cend() {
return const_iterator(_begin + _weight_mask + 1, _begin, stride()); }
90 template <
class R,
class T>
93 iterator iter = begin();
94 for (
size_t i = 0; iter != end(); ++iter, i += stride()) T::func(*iter, info, iter.
index());
100 iterator iter = begin();
101 for (
size_t i = 0; iter != end(); ++iter, i += stride()) T::func(*iter, iter.
index());
106 for (iterator iter = begin(); iter != end(); ++iter) (&(*iter))[offset] = 0;
109 uint64_t
mask()
const {
return _weight_mask; }
111 uint64_t
seeded()
const {
return _seeded; }
113 uint32_t
stride()
const {
return 1 << _stride_shift; }
120 #ifndef DISABLE_SHARED_WEIGHTS 123 float* shared_weights = (
float*)mmap(
124 0, (length << _stride_shift) *
sizeof(float), PROT_READ | PROT_WRITE, MAP_SHARED |
MAP_ANONYMOUS, -1, 0);
125 size_t float_count = length << _stride_shift;
126 weight* dest = shared_weights;
127 memcpy(dest, _begin, float_count *
sizeof(
float));
136 if (_begin !=
nullptr && !_seeded)
dense_iterator(T *current, T *begin, uint32_t stride)
uint64_t stride_shift(const stagewise_poly &poly, uint64_t idx)
uint32_t stride_shift() const
dense_iterator< weight > iterator
bool operator!=(const dense_iterator &rhs) const
void set_default(R &info)
std::forward_iterator_tag iterator_category
weight & operator[](size_t i) const
weight & strided_index(size_t index)
void stride_shift(uint32_t stride_shift)
void share(size_t length)
std::ptrdiff_t difference_type
void set_zero(size_t offset)
#define calloc_mergable_or_throw
dense_iterator< const weight > const_iterator
bool operator==(const dense_iterator &rhs) const
dense_iterator & operator++()
dense_parameters(size_t length, uint32_t stride_shift=0)
void shallow_copy(const dense_parameters &input)
dense_parameters(const dense_parameters &other)