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

#include <allreduce.h>

Inheritance diagram for AllReduceThreads:
AllReduce

Public Member Functions

 AllReduceThreads (AllReduceThreads *root, const size_t ptotal, const size_t pnode, bool quiet=false)
 
 AllReduceThreads (const size_t ptotal, const size_t pnode, bool quiet=false)
 
virtual ~AllReduceThreads ()
 
template<class T , void(*)(T &, const T &) f>
void all_reduce (T *buffer, const size_t n)
 
- Public Member Functions inherited from AllReduce
 AllReduce (size_t ptotal, const size_t pnode, bool pquiet=false)
 
virtual ~AllReduce ()=default
 

Private Attributes

AllReduceSyncm_sync
 
bool m_syncOwner
 

Additional Inherited Members

- Public Attributes inherited from AllReduce
const size_t total
 
const size_t node
 
bool quiet
 

Detailed Description

Definition at line 123 of file allreduce.h.

Constructor & Destructor Documentation

◆ AllReduceThreads() [1/2]

AllReduceThreads::AllReduceThreads ( AllReduceThreads root,
const size_t  ptotal,
const size_t  pnode,
bool  quiet = false 
)

Definition at line 53 of file allreduce_threads.cc.

54  : AllReduce(ptotal, pnode, pquiet), m_sync(root->m_sync), m_syncOwner(false)
55 {
56 }
AllReduce(size_t ptotal, const size_t pnode, bool pquiet=false)
Definition: allreduce.h:84
AllReduceSync * m_sync
Definition: allreduce.h:126

◆ AllReduceThreads() [2/2]

AllReduceThreads::AllReduceThreads ( const size_t  ptotal,
const size_t  pnode,
bool  quiet = false 
)

Definition at line 58 of file allreduce_threads.cc.

59  : AllReduce(ptotal, pnode, pquiet), m_sync(new AllReduceSync(ptotal)), m_syncOwner(true)
60 {
61 }
AllReduce(size_t ptotal, const size_t pnode, bool pquiet=false)
Definition: allreduce.h:84
AllReduceSync * m_sync
Definition: allreduce.h:126

◆ ~AllReduceThreads()

AllReduceThreads::~AllReduceThreads ( )
virtual

Definition at line 63 of file allreduce_threads.cc.

References m_sync, and m_syncOwner.

64 {
65  if (m_syncOwner)
66  {
67  delete m_sync;
68  }
69 }
AllReduceSync * m_sync
Definition: allreduce.h:126

Member Function Documentation

◆ all_reduce()

template<class T , void(*)(T &, const T &) f>
void AllReduceThreads::all_reduce ( T *  buffer,
const size_t  n 
)
inline

Definition at line 137 of file allreduce.h.

References AllReduceSync::buffers, f, and AllReduceSync::waitForSynchronization().

138  { // register buffer
139  T** buffers = (T**)m_sync->buffers;
140  buffers[node] = buffer;
142 
143  size_t blockSize = n / total;
144  size_t index;
145  size_t end;
146 
147  if (blockSize == 0)
148  {
149  if (node < n)
150  {
151  index = node;
152  end = node + 1;
153  }
154  else
155  { // more threads than bytes --> don't do any work
156  index = end = 0;
157  }
158  }
159  else
160  {
161  index = node * blockSize;
162  end = node == total - 1 ? n : (node + 1) * blockSize;
163  }
164 
165  for (; index < end; index++)
166  { // Perform transposed AllReduce to help data locallity
167  T& first = buffers[0][index];
168 
169  for (size_t i = 1; i < total; i++) f(first, buffers[i][index]);
170 
171  // Broadcast back
172  for (size_t i = 1; i < total; i++) buffers[i][index] = first;
173  }
174 
176  }
const size_t total
Definition: allreduce.h:80
const size_t node
Definition: allreduce.h:81
void waitForSynchronization()
AllReduceSync * m_sync
Definition: allreduce.h:126
void ** buffers
Definition: allreduce.h:120
float f
Definition: cache.cc:40

Member Data Documentation

◆ m_sync

AllReduceSync* AllReduceThreads::m_sync
private

Definition at line 126 of file allreduce.h.

Referenced by ~AllReduceThreads().

◆ m_syncOwner

bool AllReduceThreads::m_syncOwner
private

Definition at line 127 of file allreduce.h.

Referenced by ~AllReduceThreads().


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