SpikeGPU  1.0.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
spmv.h
Go to the documentation of this file.
1 
5 #ifndef SPIKE_SPMV_H
6 #define SPIKE_SPMV_H
7 
8 
9 #include <cusp/multiply.h>
10 
11 #include <spike/timer.h>
12 
13 
14 namespace spike {
15 
16 
18 
24 template <typename Matrix>
25 class SpmvCusp {
26 public:
27  SpmvCusp(Matrix& A) : m_A(A), m_time(0), m_count(0) {}
28 
30  double getTime() const {return m_time;}
31 
33  double getCount() const {return m_count;}
34 
36  double getGFlops() const
37  {
38  double avgTime = m_time / m_count;
39  return 2 * m_A.num_entries / (1e6 * avgTime);
40  }
41 
43  template <typename Array>
44  void operator()(const Array& v,
45  Array& Av)
46  {
47  m_timer.Start();
48  cusp::multiply(m_A, v, Av);
49  m_timer.Stop();
50 
51  m_count++;
52  m_time += m_timer.getElapsed();
53  }
54 
55 private:
56  Matrix& m_A;
57  GPUTimer m_timer;
58  double m_time;
59  int m_count;
60 };
61 
62 } // namespace spike
63 
64 
65 #endif
virtual double getElapsed()
Definition: timer.h:62
GPU timer.
Definition: timer.h:35
CPU and GPU timer classes.
virtual void Start()
Definition: timer.h:53
void operator()(const Array &v, Array &Av)
Implementation of the SPMV functor using cusp::multiply().
Definition: spmv.h:44
Default SPMV functor class.
Definition: spmv.h:25
double getTime() const
Cummulative time for all SPMV calls (ms).
Definition: spmv.h:30
double getCount() const
Total number of calls to the SPMV functor.
Definition: spmv.h:33
SpmvCusp(Matrix &A)
Definition: spmv.h:27
virtual void Stop()
Definition: timer.h:57
double getGFlops() const
Average GFLOP/s over all SPMV calls.
Definition: spmv.h:36