ConvNet  1.0
A GPU-based C++ implementation of Convolutional Neural Nets
 All Classes Namespaces Functions Variables
matrix.h
1 #ifndef MATRIX_H_
2 #define MATRIX_H_
3 #include <string>
4 #include "cudamat.cuh"
5 #include "cublas.h"
6 #include "hdf5.h"
7 #include <vector>
8 using namespace std;
9 
11 class Matrix {
12  public:
13  Matrix();
14  Matrix(const int rows, const int cols, const bool on_gpu);
15  ~Matrix();
16 
17  void Tie(Matrix &m);
18  void AllocateGPUMemory(const int rows, const int cols, const string& name);
19  void AllocateGPUMemory(const int rows, const int cols);
20  void AllocateMainMemory(const int rows, const int cols);
21  //void ClearMainMemory();
22  //void ClearGPUMemory();
23  void Set(const float val);
24  void Set(Matrix& val);
25  void GetSlice(Matrix& slice, int start, int end);
26  void FillWithRand();
27  void FillWithRandn();
28  void CopyToHost();
29  void CopyToDevice();
30  void CopyToDeviceSlice(const int start, const int end);
31  void CopyToHostSlice(const int start, const int end);
32  void CopyFromMainMemory(Matrix& mat);
33  void Reshape(const int rows, const int cols);
34  float Norm();
35  void Print();
36  void WriteToFile(FILE* file);
37  void ReadFromFile(FILE* file);
38  void WriteHDF5(hid_t file, const string& name);
39  void ReadHDF5(hid_t file, const string& name);
40  void AllocateAndReadHDF5(hid_t file, const string& name);
41  string GetShapeString();
42  cudamat* GetMat() { return &mat_; }
43  cudamat* GetMatTranspose() { return &mat_t_; }
44  float* GetHostData() { return mat_.data_host; }
45  int GetRows() const {return mat_.size[0];}
46  int GetCols() const {return mat_.size[1];}
47  int GetNumEls() const {return mat_.size[1] * mat_.size[0]; }
48  float Sum();
49  void Add(Matrix& m);
50  void SquashRelu();
51 
52  int GetGPUId() const { return gpu_id_; }
53  void SetReady();
54  void WaitTillReady();
55 
56  static void GetOnes(int rows, int cols, Matrix& ones);
57  static void RegisterTempMemory(int size);
58  static void RegisterTempMemory(int size, const string& why);
59  static void RegisterOnes(int size);
60  static void GetTemp(int rows, int cols, Matrix& temp);
61  static void InitRandom(int seed);
62  static void SetupCUDADevice(int gpu_id);
63  static void SetupCUDADevices(const vector<int>& boards);
64  static void SetDevice(int gpu_id);
65  static void SyncAllDevices();
66  static int GetDevice();
67  static int GetNumBoards() {return num_boards_;}
68 
69  static vector<Matrix> ones_, temp_;
70  static vector<rnd_struct> rnd_;
71 
72  private:
73  cudamat mat_, mat_t_;
74  cudaEvent_t ready_;
75  int gpu_id_;
76  string name_;
77  static int num_boards_;
78  static int current_gpu_id_;
79  static vector<int> boards_, temp_size_, ones_size_;
80 };
81 
82 #endif
STL namespace.
Definition: cudamat.cuh:28
A GPU matrix class.
Definition: matrix.h:11