3 ms·
Results from Zen 2: https://github.com/Const-me/SimdPrecisionTest/blob/master/vrcpps/vrcpps-Zen2.tsv https://github.com/Const-me/SimdPrecisionTest/blob/master/v
by Const-me 6y ago
Results from Zen 2:
https://github.com/Const-me/SimdPrecisionTest/blob/master/vrcpps/vrcpps-Zen2.tsv https://github.com/Const-me/SimdPrecisionTest/blob/master/vr...
Results from Skylake:
https://github.com/Const-me/SimdPrecisionTest/blob/master/vrcpps/vrcpps-Skylake.tsv https://github.com/Const-me/SimdPrecisionTest/blob/master/vr...
Total, exact, less, greater columns have total count of floats in a bucket. Sum of the “Total” gives 2^32, the total count of unique floats.
Computing max bit that’s different is too slow for the use case, neither SSE nor AVX have vector version of BSR instruction. Instead, I’m re-interpreting floats as integers and computing difference of the integers. maxLess, maxGreater, and maxAbs columns have that maximum error, measured as count of float values of the error. The value 4989 means the mantissa had like 12-13 lowest bits incorrect.
Source code is there: https://github.com/Const-me/SimdPrecisionTest/blob/master/rcppsErrorSummary.cpp https://github.com/Const-me/SimdPrecisionTest/blob/master/rc...
Not particularly readable because I’ve used AVX2 and OpenMP, however this way it takes less than a second on desktop, and maybe 1.5 seconds on a laptop to process all of these floats.
- acqq 6y agoReally fascinating, thanks!
- acqq 6y agoBased on how I understand the numbers in the tables, it looks to me like both implementations behave the same in the critical points, and AMD obviously achieves less distance from the "exact", but has some kind of truncating instead of rounding logic which changes the distribution of the approximations, and you discovered that with counting "less" and "greater." Congratulations!