HMLP: High-performance Machine Learning Primitives
gsknn_ref_mrxnr.hpp
1 template<int MR, int NR, typename T>
2 struct gsknn_ref_mrxnr
3 {
4  inline void operator()
5  (
6  int k,
7  int r,
8  T *a, T *a2,
9  T *b, T *b2,
10  T *c,
11  aux_s<T, T, T, T> *aux,
12  int *bmap
13  ) const
14  {
16  T c_reg[ MR * NR ] = { 0.0 };
17 
19  for ( int p = 0; p < k; p ++ )
20  #pragma unroll
21  for ( int j = 0; j < NR; j ++ )
22  #pragma unroll
23  for ( int i = 0; i < MR; i ++ )
24  c_reg[ j * MR + i ] += a[ p * MR + i ] * b[ p * NR + j ];
25 
27  if ( aux->pc )
28  {
29  #pragma unroll
30  for ( int j = 0; j < NR; j ++ )
31  #pragma unroll
32  for ( int i = 0; i < MR; i ++ )
33  c_reg[ j * MR + i ] += c[ j * ldc + i ];
34 
36  #pragma unroll
37  for ( int j = 0; j < NR; j ++ )
38  {
39  #pragma unroll
40  for ( int i = 0; i < MR; i ++ )
41  {
42  c_reg[ j * MR + i ] *= -2.0;
43  c_reg[ j * MR + i ] += a2[ i ] + b2[ j ];
44  }
45  }
46 
47 
48 
49 
50  };
51 };
Definition: hmlp_internal.hpp:38