libflame  revision_anchor
Functions
FLA_Max_elemwise_diff.c File Reference

(r)

Functions

double FLA_Max_elemwise_diff (FLA_Obj A, FLA_Obj B)
 

Function Documentation

◆ FLA_Max_elemwise_diff()

double FLA_Max_elemwise_diff ( FLA_Obj  A,
FLA_Obj  B 
)
14 {
15  FLA_Datatype datatype;
16  dim_t i, j;
17  dim_t m_A, n_A;
18  dim_t rs_A, cs_A;
19  dim_t rs_B, cs_B;
20  double diff;
21  double d_max = 0.0;
22 
23  if ( FLA_Check_error_level() >= FLA_MIN_ERROR_CHECKING )
25 
26  datatype = FLA_Obj_datatype( A );
27 
28  m_A = FLA_Obj_length( A );
29  n_A = FLA_Obj_width( A );
30  rs_A = FLA_Obj_row_stride( A );
31  cs_A = FLA_Obj_col_stride( A );
32 
33  rs_B = FLA_Obj_row_stride( B );
34  cs_B = FLA_Obj_col_stride( B );
35 
36  switch ( datatype ){
37 
38  case FLA_FLOAT:
39  {
40  float *buff_a = ( float * ) FLA_FLOAT_PTR( A );
41  float *buff_b = ( float * ) FLA_FLOAT_PTR( B );
42 
43  for( j = 0; j < n_A; j++ )
44  {
45  for( i = 0; i < m_A; i++ )
46  {
47  diff = ( double ) ( buff_a[ j*cs_A + i*rs_A ] - buff_b[ j*cs_B + i*rs_B ] );
48 
49  if( fabs(diff) > d_max )
50  d_max = fabs(diff);
51  }
52  }
53 
54  break;
55  }
56 
57  case FLA_DOUBLE:
58  {
59  double *buff_a = ( double * ) FLA_DOUBLE_PTR( A );
60  double *buff_b = ( double * ) FLA_DOUBLE_PTR( B );
61 
62  for( j = 0; j < n_A; j++ )
63  {
64  for( i = 0; i < m_A; i++ )
65  {
66  diff = ( double ) ( buff_a[ j*cs_A + i*rs_A ] - buff_b[ j*cs_B + i*rs_B ] );
67 
68  if( fabs(diff) > d_max )
69  d_max = fabs(diff);
70  }
71  }
72 
73  break;
74  }
75 
76  case FLA_COMPLEX:
77  {
78  scomplex *buff_a = ( scomplex * ) FLA_COMPLEX_PTR( A );
79  scomplex *buff_b = ( scomplex * ) FLA_COMPLEX_PTR( B );
80 
81  for( j = 0; j < n_A; j++ )
82  {
83  for( i = 0; i < m_A; i++ )
84  {
85  diff = ( double ) ( buff_a[ j*cs_A + i*rs_A ].real - buff_b[ j*cs_B + i*rs_B ].real );
86 
87  if( fabs(diff) > d_max )
88  d_max = fabs(diff);
89 
90  diff = ( double ) ( buff_a[ j*cs_A + i*rs_A ].imag - buff_b[ j*cs_B + i*rs_B ].imag );
91 
92  if( fabs(diff) > d_max )
93  d_max = fabs(diff);
94  }
95  }
96 
97  break;
98  }
99 
100  case FLA_DOUBLE_COMPLEX:
101  {
102  dcomplex *buff_a = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( A );
103  dcomplex *buff_b = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( B );
104 
105  for( j = 0; j < n_A; j++ )
106  {
107  for( i = 0; i < m_A; i++ )
108  {
109  diff = ( double ) ( buff_a[ j*cs_A + i*rs_A ].real - buff_b[ j*cs_B + i*rs_B ].real );
110 
111  if( fabs(diff) > d_max )
112  d_max = fabs(diff);
113 
114  diff = ( double ) ( buff_a[ j*cs_A + i*rs_A ].imag - buff_b[ j*cs_B + i*rs_B ].imag );
115 
116  if( fabs(diff) > d_max )
117  d_max = fabs(diff);
118  }
119  }
120 
121  break;
122  }
123 
124  }
125 
126 
127  return d_max;
128 }
FLA_Error FLA_Max_elemwise_diff_check(FLA_Obj A, FLA_Obj B)
Definition: FLA_Max_elemwise_diff_check.c:13
float real
Definition: FLA_f2c.h:30
dim_t FLA_Obj_width(FLA_Obj obj)
Definition: FLA_Query.c:123
dim_t FLA_Obj_row_stride(FLA_Obj obj)
Definition: FLA_Query.c:167
dim_t FLA_Obj_length(FLA_Obj obj)
Definition: FLA_Query.c:116
dim_t FLA_Obj_col_stride(FLA_Obj obj)
Definition: FLA_Query.c:174
unsigned int FLA_Check_error_level(void)
Definition: FLA_Check.c:18
FLA_Datatype FLA_Obj_datatype(FLA_Obj obj)
Definition: FLA_Query.c:13
int FLA_Datatype
Definition: FLA_type_defs.h:49
unsigned long dim_t
Definition: FLA_type_defs.h:71
int i
Definition: bl1_axmyv2.c:145
rho_c imag
Definition: bl1_axpyv2bdotaxpy.c:483
Definition: blis_type_defs.h:138
Definition: blis_type_defs.h:133

References FLA_Check_error_level(), FLA_Max_elemwise_diff_check(), FLA_Obj_col_stride(), FLA_Obj_datatype(), FLA_Obj_length(), FLA_Obj_row_stride(), FLA_Obj_width(), i, and imag.

Referenced by FLASH_Max_elemwise_diff().