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

#include <array_parameters.h>

Public Types

typedef sparse_iterator< weightiterator
 
typedef sparse_iterator< const weightconst_iterator
 

Public Member Functions

 sparse_parameters (size_t length, uint32_t stride_shift=0)
 
 sparse_parameters ()
 
bool not_null ()
 
 sparse_parameters (const sparse_parameters &other)
 
 sparse_parameters (sparse_parameters &&)=delete
 
weightfirst ()
 
iterator begin ()
 
iterator end ()
 
const_iterator cbegin ()
 
const_iterator cend ()
 
weightoperator[] (size_t i)
 
const weightoperator[] (size_t i) const
 
weightstrided_index (size_t index)
 
void shallow_copy (const sparse_parameters &input)
 
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)
 
 ~sparse_parameters ()
 

Private Attributes

weight_map _map
 
uint64_t _weight_mask
 
uint32_t _stride_shift
 
bool _seeded
 
bool _delete
 
void * default_data
 
float * default_value
 
void(* fun )(const weight *, void *)
 

Detailed Description

Definition at line 60 of file array_parameters.h.

Member Typedef Documentation

◆ const_iterator

Definition at line 73 of file array_parameters.h.

◆ iterator

Definition at line 72 of file array_parameters.h.

Constructor & Destructor Documentation

◆ sparse_parameters() [1/4]

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

Definition at line 79 of file array_parameters.h.

80  : _map()
81  , _weight_mask((length << stride_shift) - 1)
83  , _seeded(false)
84  , _delete(false)
85  , default_data(nullptr)
86  , fun(nullptr)
87  {
88  default_value = calloc_mergable_or_throw<weight>(stride());
89  }
uint32_t stride() const
void(* fun)(const weight *, void *)
uint32_t stride_shift() const

◆ sparse_parameters() [2/4]

sparse_parameters::sparse_parameters ( )
inline

Definition at line 91 of file array_parameters.h.

92  : _map(), _weight_mask(0), _stride_shift(0), _seeded(false), _delete(false), default_data(nullptr), fun(nullptr)
93  {
94  default_value = calloc_mergable_or_throw<weight>(stride());
95  }
uint32_t stride() const
void(* fun)(const weight *, void *)

◆ sparse_parameters() [3/4]

sparse_parameters::sparse_parameters ( const sparse_parameters other)
inline

Definition at line 99 of file array_parameters.h.

99 { shallow_copy(other); }
void shallow_copy(const sparse_parameters &input)

◆ sparse_parameters() [4/4]

sparse_parameters::sparse_parameters ( sparse_parameters &&  )
delete

◆ ~sparse_parameters()

sparse_parameters::~sparse_parameters ( )
inline

Definition at line 212 of file array_parameters.h.

213  {
214  if (!_delete && !_seeded) // don't free weight vector if it is shared with another instance
215  {
216  for (auto iter = _map.begin(); iter != _map.end(); ++iter) free(iter->second);
217  _map.clear();
218  _delete = true;
219  }
220  if (default_data != nullptr)
221  free(default_data);
222  free(default_value);
223  }

Member Function Documentation

◆ begin()

iterator sparse_parameters::begin ( )
inline

Definition at line 105 of file array_parameters.h.

106  {
107  weight_map::iterator i = _map.begin();
108  return iterator(i, stride());
109  }
sparse_iterator< weight > iterator
uint32_t stride() const

◆ cbegin()

const_iterator sparse_parameters::cbegin ( )
inline

Definition at line 117 of file array_parameters.h.

118  {
119  weight_map::iterator i = _map.begin();
120  return const_iterator(i, stride());
121  }
uint32_t stride() const
sparse_iterator< const weight > const_iterator

◆ cend()

const_iterator sparse_parameters::cend ( )
inline

Definition at line 122 of file array_parameters.h.

123  {
124  weight_map::iterator i = _map.begin();
125  return const_iterator(i, stride());
126  }
uint32_t stride() const
sparse_iterator< const weight > const_iterator

◆ end()

iterator sparse_parameters::end ( )
inline

Definition at line 110 of file array_parameters.h.

111  {
112  weight_map::iterator i = _map.end();
113  return iterator(i, stride());
114  }
sparse_iterator< weight > iterator
uint32_t stride() const

◆ first()

weight* sparse_parameters::first ( )
inline

Definition at line 102 of file array_parameters.h.

References THROW_OR_RETURN.

102 { THROW_OR_RETURN("Allreduce currently not supported in sparse", nullptr); }
#define THROW_OR_RETURN(...)
Definition: vw_exception.h:208

◆ mask()

uint64_t sparse_parameters::mask ( ) const
inline

Definition at line 191 of file array_parameters.h.

Referenced by parameters::mask().

191 { return _weight_mask; }

◆ not_null()

bool sparse_parameters::not_null ( )
inline

Definition at line 97 of file array_parameters.h.

Referenced by parameters::not_null().

97 { return (_weight_mask > 0 && !_map.empty()); }

◆ operator[]() [1/2]

weight& sparse_parameters::operator[] ( size_t  i)
inline

Definition at line 128 of file array_parameters.h.

References sparse_iterator< T >::index().

129  {
130  uint64_t index = i & _weight_mask;
131  weight_map::iterator iter = _map.find(index);
132  if (iter == _map.end())
133  {
134  _map.insert(std::make_pair(index, calloc_mergable_or_throw<weight>(stride())));
135  iter = _map.find(index);
136  if (fun != nullptr)
137  fun(iter->second, default_data);
138  }
139  return *(iter->second);
140  }
uint32_t stride() const
void(* fun)(const weight *, void *)

◆ operator[]() [2/2]

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

Definition at line 142 of file array_parameters.h.

References sparse_iterator< T >::index().

143  {
144  uint64_t index = i & _weight_mask;
145  weight_map::const_iterator iter = _map.find(index);
146  if (iter == _map.end())
147  return *default_value;
148  return *(iter->second);
149  }

◆ seeded()

uint64_t sparse_parameters::seeded ( ) const
inline

Definition at line 193 of file array_parameters.h.

Referenced by parameters::seeded().

193 { return _seeded; }

◆ set_default() [1/2]

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

Definition at line 171 of file array_parameters.h.

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

172  {
173  R& new_R = calloc_or_throw<R>();
174  new_R = info;
175  default_data = &new_R;
176  fun = (void (*)(const weight*, void*))T::func;
178  }
float weight
void(* fun)(const weight *, void *)

◆ set_default() [2/2]

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

Definition at line 181 of file array_parameters.h.

182  {
183  fun = (void (*)(const weight*, void*))T::func;
184  }
float weight
void(* fun)(const weight *, void *)

◆ set_zero()

void sparse_parameters::set_zero ( size_t  offset)
inline

Definition at line 186 of file array_parameters.h.

Referenced by parameters::set_zero().

187  {
188  for (weight_map::iterator iter = _map.begin(); iter != _map.end(); ++iter) (&(*(iter->second)))[offset] = 0;
189  }

◆ shallow_copy()

void sparse_parameters::shallow_copy ( const sparse_parameters input)
inline

Definition at line 153 of file array_parameters.h.

References _map, _stride_shift, _weight_mask, default_data, and default_value.

Referenced by parameters::shallow_copy().

154  {
155  // TODO: this is level-1 copy (weight* are stilled shared)
156  if (!_seeded)
157  {
158  for (auto iter = _map.begin(); iter != _map.end(); ++iter) free(iter->second);
159  }
160  _map = input._map;
161  _weight_mask = input._weight_mask;
163  free(default_value);
164  default_value = calloc_mergable_or_throw<weight>(stride());
165  memcpy(default_value, input.default_value, stride());
166  default_data = input.default_data;
167  _seeded = true;
168  }
uint32_t stride() const

◆ share()

void sparse_parameters::share ( size_t  )
inline

Definition at line 209 of file array_parameters.h.

References THROW_OR_RETURN.

Referenced by parameters::share().

209 { THROW_OR_RETURN("Operation not supported on Windows"); }
#define THROW_OR_RETURN(...)
Definition: vw_exception.h:208

◆ stride()

uint32_t sparse_parameters::stride ( ) const
inline

Definition at line 195 of file array_parameters.h.

Referenced by parameters::stride().

195 { return 1 << _stride_shift; }

◆ stride_shift() [1/2]

uint32_t sparse_parameters::stride_shift ( ) const
inline

◆ stride_shift() [2/2]

void sparse_parameters::stride_shift ( uint32_t  stride_shift)
inline

Definition at line 199 of file array_parameters.h.

References stride_shift().

200  {
202  free(default_value);
203  default_value = calloc_mergable_or_throw<weight>(stride());
204  if (fun != nullptr)
206  }
uint32_t stride() const
void(* fun)(const weight *, void *)
uint32_t stride_shift() const

◆ strided_index()

weight& sparse_parameters::strided_index ( size_t  index)
inline

Definition at line 151 of file array_parameters.h.

Referenced by parameters::strided_index().

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

Member Data Documentation

◆ _delete

bool sparse_parameters::_delete
private

Definition at line 67 of file array_parameters.h.

◆ _map

weight_map sparse_parameters::_map
private

Definition at line 63 of file array_parameters.h.

Referenced by shallow_copy().

◆ _seeded

bool sparse_parameters::_seeded
private

Definition at line 66 of file array_parameters.h.

◆ _stride_shift

uint32_t sparse_parameters::_stride_shift
private

Definition at line 65 of file array_parameters.h.

Referenced by shallow_copy().

◆ _weight_mask

uint64_t sparse_parameters::_weight_mask
private

Definition at line 64 of file array_parameters.h.

Referenced by shallow_copy().

◆ default_data

void* sparse_parameters::default_data
private

Definition at line 68 of file array_parameters.h.

Referenced by shallow_copy().

◆ default_value

float* sparse_parameters::default_value
private

Definition at line 69 of file array_parameters.h.

Referenced by shallow_copy().

◆ fun

void(* sparse_parameters::fun) (const weight *, void *)
private

Definition at line 76 of file array_parameters.h.


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