Cyclops Tensor Framework
parallel arithmetic on multidimensional arrays
spctr_offload.h
Go to the documentation of this file.
1 /*Copyright (c) 2011, Edgar Solomonik, all rights reserved.*/
2 
3 #ifndef __SPCTR_OFFLOAD_H__
4 #define __SPCTR_OFFLOAD_H__
5 
6 #include "../shared/offload.h"
7 #include "spctr_tsr.h"
8 
9 namespace CTF_int {
10  #ifdef OFFLOAD
11  class spctr_offload : public spctr {
12  public:
13  /* Class to be called on sub-blocks */
14  spctr * rec_ctr;
15  int iter_counter;
16  int total_iter;
17  int upload_phase_A;
18  int upload_phase_B;
19  int download_phase_C;
20  int64_t size_A; /* size of A blocks */
21  int64_t size_B; /* size of B blocks */
22  int64_t size_C; /* size of C blocks */
23  offload_arr * spr_A;
24  offload_arr * spr_B;
25  offload_arr * spr_C;
26 
30  void print();
31 
35  void run(char * A, int nblk_A, int64_t const * size_blk_A,
36  char * B, int nblk_B, int64_t const * size_blk_B,
37  char * C, int nblk_C, int64_t * size_blk_C,
38  char *& new_C);
39 
45  int64_t spmem_fp();
46 
51  int64_t mem_rec(double nnz_frac_A, double nnz_frac_B, double nnz_frac_C);
52 
57  double est_time_fp(int nlyr, double nnz_frac_A, double nnz_frac_B, double nnz_frac_C);
58 
63  double est_time_rec(int nlyr, double nnz_frac_A, double nnz_frac_B, double nnz_frac_C);
64 
65  spctr * clone();
66 
67  spctr_offload(spctr * other);
68 
72  ~spctr_offload();
73 
85  spctr_offload(contraction const * c,
86  int64_t size_A,
87  int64_t size_B,
88  int64_t size_C,
89  int total_iter,
90  int upload_phase_A,
91  int upload_phase_B,
92  int download_phase_C);
93 
94  };
95  #endif
96 
97 }
98 #endif