mirror of
https://github.com/KhronosGroup/OpenCL-CTS.git
synced 2026-03-23 15:39:03 +00:00
Fix testing of half-precision fma. (#1882)
Half-precision functions are generally tested against the single-precision reference. This causes double rounding: first to single precision, then from there to half precision. For the most part, it is good enough, but specifically in the case of fma, a correctly rounded result is required and is not obtained, for instance for arguments 0x1.eacp+7, 0x1.3f4p+4, 0x1.c04p+14, which produce an exact result of 0x1.065fffp+15 which should be rounded to half-prefcision 0x1.064p+15, but was previously first rounded to single-precision 0x1.066p+15, and from there to half-precision 0x1.068p+15. Testing against reference_fmal gives us sufficient precision that double rounding does not cause issues. The f_fma(..., FLUSHED) calls for FTZ testing cannot be updated the same way but do not need to be: these calls all have at least one constant operand of zero. If one operand is zero, double rounding cannot be an issue.
This commit is contained in:
@@ -75,6 +75,7 @@ extern RoundingMode gFloatToHalfRoundingMode;
|
||||
extern cl_half_rounding_mode gHalfRoundingMode;
|
||||
|
||||
#define HFF(num) cl_half_from_float(num, gHalfRoundingMode)
|
||||
#define HFD(num) cl_half_from_double(num, gHalfRoundingMode)
|
||||
#define HTF(num) cl_half_to_float(num)
|
||||
|
||||
#define LOWER_IS_BETTER 0
|
||||
|
||||
Reference in New Issue
Block a user