Add inline, remove unused exception variable name, safe float computation#324
Add inline, remove unused exception variable name, safe float computation#324mnorris11 wants to merge 1 commit intointel:mainfrom
Conversation
rfsaliev
left a comment
There was a problem hiding this comment.
Thank you @mnorris11 , for the contribution.
There are some suggestions, proposals and comments
| static_cast<uint32_t>(e > 112) * ((((e - 112) << 10) & 0x7C00) | m >> 13) | | ||
| static_cast<uint32_t>((e < 113) && (e > 101)) * | ||
| ((((0x007FF000 + m) >> (125 - e)) + 1) >> 1) | | ||
| ((((0x007FF000 + m) >> (125 - safe_e)) + 1) >> 1) | |
There was a problem hiding this comment.
Hm, in case when (e < 101 || e > 113), this component is always 0:
return (b & 0x80000000) >> 16 |
... |
static_cast<uint32_t>((e < 113) && (e > 101)) *
((((0x007FF000 + m) >> (125 - safe_e)) + 1) >> 1) |
// equal to:
return (b & 0x80000000) >> 16 |
... |
static_cast<uint32_t>(e > 101 && e < 113) *
((((0x007FF000 + m) >> (125 - safe_e)) + 1) >> 1) |
// equal to:
return (b & 0x80000000) >> 16 |
... |
static_cast<uint32_t>(false) *
((((0x007FF000 + m) >> (125 - safe_e)) + 1) >> 1) |
//equal to:
return (b & 0x80000000) >> 16 |
... |
0 *
((((0x007FF000 + m) >> (125 - safe_e)) + 1) >> 1) |
There was a problem hiding this comment.
@rfsaliev please read this comment above:
Float change: acccording to AI: the shift 125 - e goes out of range for uint32_t when e is outside [102, 112]. The result is multiplied by zero so it's "dead" at runtime, but the shift itself is still UB. UBSAN catches it and 5 FP16 tests fail: WriteAndReadIndexSVSFP16, VamanaFP16TrainSaveLoadAndAdd, WriteAndReadStaticIVFFP16, WriteAndReadIndexSVSIVFFP16, IVFFP16TrainAndAdd.
| try { | ||
| unsafe_assign(fn); | ||
| } catch (const ThreadCrashedError& err) { | ||
| } catch (const ThreadCrashedError&) { |
There was a problem hiding this comment.
| } catch (const ThreadCrashedError&) { | |
| } catch (const ThreadCrashedError& SVS_UNUSED(err)) { |
| throw ANNEXCEPTION( | ||
| "Expected to get an exception from a crashed thread but no " | ||
| "exception was thrown!" | ||
| ); |
There was a problem hiding this comment.
Please, use SVS formatting rules.
| namespace svs { | ||
| namespace runtime { | ||
| namespace v0 { | ||
| inline namespace v0 { |
There was a problem hiding this comment.
IMHO, this change will negatively affect usability and maintainability for further API major versions.
Instead, a macro can be used here which value defined in version.h depending on SVS_RUNTIME_API_VERSION, e.g.:
#if (SVS_RUNTIME_API_VERSION == 0)
...
#define SVS_API_V0 inline namespace v0
...
#endif
With usage aka:
| namespace svs { | |
| namespace runtime { | |
| namespace v0 { | |
| inline namespace v0 { | |
| namespace svs { | |
| namespace runtime { | |
| SVS_API_V0 { | |
| ... | |
| } // SVS_API_V0 |
This is a patch to get it to work internally. It would be easier if things are in SVS, so next version upgrade we don't need to apply this patch.
Reason for changes: