5 #ifndef FML_CPU_FUTURE_SYM_H
6 #define FML_CPU_FUTURE_SYM_H
13 #include "../cpumat.hh"
18 template <
typename REAL>
19 bool is_sym(
const cpumat<REAL> &x)
24 const int blocksize = 8;
25 const len_t n = x.nrows();
27 for (len_t j=0; j<n; j+=blocksize)
29 for (len_t i=j; i<n; i+=blocksize)
31 for (len_t col=j; col<j+blocksize && col<n; ++col)
33 for (len_t row=i; row<i+blocksize && row<n; ++row)
35 const bool check = samenum(x[col + n*row], x[row + n*col]);
47 template <
typename REAL>
48 void make_sym(cpumat<REAL> &x)
51 throw std::runtime_error(
"non-square matrix");
53 const int blocksize = 8;
54 const len_t n = x.nrows();
56 REAL *x_d = x.data_ptr();
57 for (len_t j=0; j<n; j+=blocksize)
59 for (len_t i=j+1; i<n; i+=blocksize)
61 for (len_t col=j; col<j+blocksize && col<n; ++col)
63 for (len_t row=i; row<i+blocksize && row<n; ++row)
64 x_d[col + n*row] = x_d[row + n*col];