Tha patchset pushed, thanks.
> -----Original Message----- > From: Beignet [mailto:[email protected]] On Behalf Of > [email protected] > Sent: Wednesday, April 13, 2016 18:29 > To: [email protected] > Subject: [Beignet] [PATCH V2] Utest: Add result error tolerance for float data > types > > From: Grigore Lupescu <grigore.lupescu at intel.com> > > Modification affects only workgroup reduce, scan inclusive, scan exclusive, > on non integer type In some instances results may differ slightly between > CPU and GPU hence comparison is relaxed > > Signed-off-by: Grigore Lupescu <grigore.lupescu at intel.com> > --- > utests/compiler_workgroup_reduce.cpp | 27 > ++++++++++++++++++++++----- > utests/compiler_workgroup_scan_exclusive.cpp | 27 > ++++++++++++++++++++++----- > utests/compiler_workgroup_scan_inclusive.cpp | 27 > ++++++++++++++++++++++----- > 3 files changed, 66 insertions(+), 15 deletions(-) > > diff --git a/utests/compiler_workgroup_reduce.cpp > b/utests/compiler_workgroup_reduce.cpp > index f796d5c..1624947 100644 > --- a/utests/compiler_workgroup_reduce.cpp > +++ b/utests/compiler_workgroup_reduce.cpp > @@ -173,14 +173,31 @@ static void workgroup_generic(WG_FUNCTION > wg_func, > for (uint32_t i = 0; i < WG_GLOBAL_SIZE; i++) > if(((T *)buf_data[1])[i] != *(expected + i)) > { > - /* found mismatch, increment */ > - mismatches++; > + /* found mismatch on integer, increment */ > + if(numeric_limits<T>::is_integer){ > + mismatches++; > > #if DEBUG_STDOUT > - /* output mismatch */ > - cout << "Err at " << i << ", " << > - ((T *)buf_data[1])[i] << " != " << *(expected + i) << endl; > + /* output mismatch */ > + cout << "Err at " << i << ", " << > + ((T *)buf_data[1])[i] << " != " << *(expected + i) << endl; > #endif > + } > + /* float error is tolerable though */ > + else { > + float num_computed = ((T *)buf_data[1])[i]; > + float num_expected = *(expected + i); > + float num_diff = abs(num_computed - num_expected) / > abs(num_expected); > + if(num_diff > 0.01f){ > + mismatches++; > + > +#if DEBUG_STDOUT > + /* output mismatch */ > + cout << "Err at " << i << ", " << > + ((T *)buf_data[1])[i] << " != " << *(expected + i) << endl; > +#endif > + } > + } > } > > #if DEBUG_STDOUT > diff --git a/utests/compiler_workgroup_scan_exclusive.cpp > b/utests/compiler_workgroup_scan_exclusive.cpp > index c44c098..4ff5442 100644 > --- a/utests/compiler_workgroup_scan_exclusive.cpp > +++ b/utests/compiler_workgroup_scan_exclusive.cpp > @@ -157,14 +157,31 @@ static void workgroup_generic(WG_FUNCTION > wg_func, > for (uint32_t i = 0; i < WG_GLOBAL_SIZE; i++) > if(((T *)buf_data[1])[i] != *(expected + i)) > { > - /* found mismatch, increment */ > - mismatches++; > + /* found mismatch on integer, increment */ > + if(numeric_limits<T>::is_integer){ > + mismatches++; > > #if DEBUG_STDOUT > - /* output mismatch */ > - cout << "Err at " << i << ", " << > - ((T *)buf_data[1])[i] << " != " << *(expected + i) << endl; > + /* output mismatch */ > + cout << "Err at " << i << ", " << > + ((T *)buf_data[1])[i] << " != " << *(expected + i) << endl; > #endif > + } > + /* float error is tolerable though */ > + else { > + float num_computed = ((T *)buf_data[1])[i]; > + float num_expected = *(expected + i); > + float num_diff = abs(num_computed - num_expected) / > abs(num_expected); > + if(num_diff > 0.01f){ > + mismatches++; > + > +#if DEBUG_STDOUT > + /* output mismatch */ > + cout << "Err at " << i << ", " << > + ((T *)buf_data[1])[i] << " != " << *(expected + i) << endl; > +#endif > + } > + } > } > > #if DEBUG_STDOUT > diff --git a/utests/compiler_workgroup_scan_inclusive.cpp > b/utests/compiler_workgroup_scan_inclusive.cpp > index b4501b8..1a7477f 100644 > --- a/utests/compiler_workgroup_scan_inclusive.cpp > +++ b/utests/compiler_workgroup_scan_inclusive.cpp > @@ -147,14 +147,31 @@ static void workgroup_generic(WG_FUNCTION > wg_func, > for (uint32_t i = 0; i < WG_GLOBAL_SIZE; i++) > if(((T *)buf_data[1])[i] != *(expected + i)) > { > - /* found mismatch, increment */ > - mismatches++; > + /* found mismatch on integer, increment */ > + if(numeric_limits<T>::is_integer){ > + mismatches++; > > #if DEBUG_STDOUT > - /* output mismatch */ > - cout << "Err at " << i << ", " << > - ((T *)buf_data[1])[i] << " != " << *(expected + i) << endl; > + /* output mismatch */ > + cout << "Err at " << i << ", " << > + ((T *)buf_data[1])[i] << " != " << *(expected + i) << endl; > #endif > + } > + /* float error is tolerable though */ > + else { > + float num_computed = ((T *)buf_data[1])[i]; > + float num_expected = *(expected + i); > + float num_diff = abs(num_computed - num_expected) / > abs(num_expected); > + if(num_diff > 0.01f){ > + mismatches++; > + > +#if DEBUG_STDOUT > + /* output mismatch */ > + cout << "Err at " << i << ", " << > + ((T *)buf_data[1])[i] << " != " << *(expected + i) << endl; > +#endif > + } > + } > } > > #if DEBUG_STDOUT > -- > 2.5.0 > > _______________________________________________ > Beignet mailing list > [email protected] > https://lists.freedesktop.org/mailman/listinfo/beignet _______________________________________________ Beignet mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/beignet
