Vowpal Wabbit
Public Types | Public Member Functions | Private Attributes | List of all members
dense_parameters Class Reference

#include <array_parameters_dense.h>

Public Types

typedef dense_iterator< weightiterator
 
typedef dense_iterator< const weightconst_iterator
 

Public Member Functions

 dense_parameters (size_t length, uint32_t stride_shift=0)
 
 dense_parameters ()
 
bool not_null ()
 
 dense_parameters (const dense_parameters &other)
 
 dense_parameters (dense_parameters &&)=delete
 
weightfirst ()
 
iterator begin ()
 
iterator end ()
 
const_iterator cbegin ()
 
const_iterator cend ()
 
weightoperator[] (size_t i) const
 
void shallow_copy (const dense_parameters &input)
 
weightstrided_index (size_t index)
 
template<class R , class T >
void set_default (R &info)
 
template<class T >
void set_default ()
 
void set_zero (size_t offset)
 
uint64_t mask () const
 
uint64_t seeded () const
 
uint32_t stride () const
 
uint32_t stride_shift () const
 
void stride_shift (uint32_t stride_shift)
 
void share (size_t length)
 
 ~dense_parameters ()
 

Private Attributes

weight_begin
 
uint64_t _weight_mask
 
uint32_t _stride_shift
 
bool _seeded
 

Detailed Description

Definition at line 39 of file array_parameters_dense.h.

Member Typedef Documentation

◆ const_iterator

Definition at line 49 of file array_parameters_dense.h.

◆ iterator

Definition at line 48 of file array_parameters_dense.h.

Constructor & Destructor Documentation

◆ dense_parameters() [1/4]

dense_parameters::dense_parameters ( size_t  length,
uint32_t  stride_shift = 0 
)
inline

Definition at line 50 of file array_parameters_dense.h.

51  : _begin(calloc_mergable_or_throw<weight>(length << stride_shift))
52  , _weight_mask((length << stride_shift) - 1)
54  , _seeded(false)
55  {
56  }
uint32_t stride_shift() const

◆ dense_parameters() [2/4]

dense_parameters::dense_parameters ( )
inline

Definition at line 58 of file array_parameters_dense.h.

◆ dense_parameters() [3/4]

dense_parameters::dense_parameters ( const dense_parameters other)
inline

Definition at line 62 of file array_parameters_dense.h.

62 { shallow_copy(other); }
void shallow_copy(const dense_parameters &input)

◆ dense_parameters() [4/4]

dense_parameters::dense_parameters ( dense_parameters &&  )
delete

◆ ~dense_parameters()

dense_parameters::~dense_parameters ( )
inline

Definition at line 134 of file array_parameters_dense.h.

135  {
136  if (_begin != nullptr && !_seeded) // don't free weight vector if it is shared with another instance
137  {
138  free(_begin);
139  _begin = nullptr;
140  }
141  }

Member Function Documentation

◆ begin()

iterator dense_parameters::begin ( )
inline

Definition at line 70 of file array_parameters_dense.h.

70 { return iterator(_begin, _begin, stride()); }
dense_iterator< weight > iterator
uint32_t stride() const

◆ cbegin()

const_iterator dense_parameters::cbegin ( )
inline

Definition at line 74 of file array_parameters_dense.h.

74 { return const_iterator(_begin, _begin, stride()); }
uint32_t stride() const
dense_iterator< const weight > const_iterator

◆ cend()

const_iterator dense_parameters::cend ( )
inline

Definition at line 75 of file array_parameters_dense.h.

75 { return const_iterator(_begin + _weight_mask + 1, _begin, stride()); }
uint32_t stride() const
dense_iterator< const weight > const_iterator

◆ end()

iterator dense_parameters::end ( )
inline

Definition at line 71 of file array_parameters_dense.h.

71 { return iterator(_begin + _weight_mask + 1, _begin, stride()); }
dense_iterator< weight > iterator
uint32_t stride() const

◆ first()

weight* dense_parameters::first ( )
inline

Definition at line 65 of file array_parameters_dense.h.

References dense_iterator< T >::_begin.

Referenced by accumulate_weighted_avg().

66  {
67  return _begin;
68  } // TODO: Temporary fix for allreduce.

◆ mask()

uint64_t dense_parameters::mask ( ) const
inline

Definition at line 109 of file array_parameters_dense.h.

Referenced by parameters::mask().

109 { return _weight_mask; }

◆ not_null()

bool dense_parameters::not_null ( )
inline

Definition at line 60 of file array_parameters_dense.h.

Referenced by parameters::not_null().

60 { return (_weight_mask > 0 && _begin != nullptr); }

◆ operator[]()

weight& dense_parameters::operator[] ( size_t  i) const
inline

Definition at line 77 of file array_parameters_dense.h.

77 { return _begin[i & _weight_mask]; }

◆ seeded()

uint64_t dense_parameters::seeded ( ) const
inline

Definition at line 111 of file array_parameters_dense.h.

Referenced by parameters::seeded().

111 { return _seeded; }

◆ set_default() [1/2]

template<class R , class T >
void dense_parameters::set_default ( R &  info)
inline

Definition at line 91 of file array_parameters_dense.h.

References dense_iterator< T >::index().

Referenced by save_load(), and GD::save_load().

92  {
93  iterator iter = begin();
94  for (size_t i = 0; iter != end(); ++iter, i += stride()) T::func(*iter, info, iter.index());
95  }
dense_iterator< weight > iterator
uint32_t stride() const

◆ set_default() [2/2]

template<class T >
void dense_parameters::set_default ( )
inline

Definition at line 98 of file array_parameters_dense.h.

References dense_iterator< T >::index().

99  {
100  iterator iter = begin();
101  for (size_t i = 0; iter != end(); ++iter, i += stride()) T::func(*iter, iter.index());
102  }
dense_iterator< weight > iterator
uint32_t stride() const

◆ set_zero()

void dense_parameters::set_zero ( size_t  offset)
inline

Definition at line 104 of file array_parameters_dense.h.

Referenced by parameters::set_zero().

105  {
106  for (iterator iter = begin(); iter != end(); ++iter) (&(*iter))[offset] = 0;
107  }
dense_iterator< weight > iterator

◆ shallow_copy()

void dense_parameters::shallow_copy ( const dense_parameters input)
inline

Definition at line 78 of file array_parameters_dense.h.

References _begin, _stride_shift, and _weight_mask.

Referenced by parameters::shallow_copy().

79  {
80  if (!_seeded)
81  free(_begin);
82  _begin = input._begin;
83  _weight_mask = input._weight_mask;
85  _seeded = true;
86  }

◆ share()

void dense_parameters::share ( size_t  length)
inline

Definition at line 121 of file array_parameters_dense.h.

References MAP_ANONYMOUS.

Referenced by parameters::share().

122  {
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));
128  free(_begin);
129  _begin = dest;
130  }
#define MAP_ANONYMOUS
Definition: parser.cc:309
float weight

◆ stride()

uint32_t dense_parameters::stride ( ) const
inline

Definition at line 113 of file array_parameters_dense.h.

Referenced by parameters::stride().

113 { return 1 << _stride_shift; }

◆ stride_shift() [1/2]

uint32_t dense_parameters::stride_shift ( ) const
inline

◆ stride_shift() [2/2]

void dense_parameters::stride_shift ( uint32_t  stride_shift)
inline

Definition at line 117 of file array_parameters_dense.h.

References stride_shift().

Referenced by stride_shift().

◆ strided_index()

weight& dense_parameters::strided_index ( size_t  index)
inline

Definition at line 88 of file array_parameters_dense.h.

Referenced by parameters::strided_index().

88 { return operator[](index << _stride_shift); }
weight & operator[](size_t i) const

Member Data Documentation

◆ _begin

weight* dense_parameters::_begin
private

Definition at line 42 of file array_parameters_dense.h.

Referenced by shallow_copy().

◆ _seeded

bool dense_parameters::_seeded
private

Definition at line 45 of file array_parameters_dense.h.

◆ _stride_shift

uint32_t dense_parameters::_stride_shift
private

Definition at line 44 of file array_parameters_dense.h.

Referenced by shallow_copy().

◆ _weight_mask

uint64_t dense_parameters::_weight_mask
private

Definition at line 43 of file array_parameters_dense.h.

Referenced by shallow_copy().


The documentation for this class was generated from the following file: