Opened 10 years ago
Closed 6 years ago
#673 closed defect (fixed)
Use IEEE-754 interchange format?
Reported by: | Olly Betts | Owned by: | Not currently assigned |
---|---|---|---|
Priority: | normal | Milestone: | 1.5.0 |
Component: | Backend-Remote | Version: | |
Severity: | normal | Keywords: | GoodFirstBug |
Cc: | Blocked By: | ||
Blocking: | Operating System: | All |
Description
Most current platforms use IEEE-754 floating point formats, so using IEEE-754 interchange format in the remote protocol would be very efficient for such platforms. For any other platforms, a bit more work would be needed, but probably similar to what we do to encode and decode the base-256 representation we currently use.
The downsides I can see are that we'd lose precision or range if the native precision or range was better than IEEE (currently we should convert exactly), and that the current serialisation is more compact for some values (e.g. small integers) - it is bigger if all bits of the mantissa are used though, so might actually not be much different overall. In most cases weights aren't round numbers.
One wrinkle is it seems IEEE doesn't specify the endianness, so I guess we'd have to pick one and then convert for platforms which don't use the same endianness.
Change History (5)
comment:1 by , 9 years ago
Milestone: | 1.3.x |
---|
comment:2 by , 8 years ago
Milestone: | → 1.5.0 |
---|
comment:3 by , 7 years ago
Keywords: | GoodFirstBug added |
---|---|
Owner: | changed from | to
comment:4 by , 6 years ago
A slightly more concrete plan:
- Using little-endian IEEE-754 format makes most sense as that's the dominant format for current platforms (notably used by x86, x86-64, and common configurations of arm). For these platforms we then just need to copy the bytes in the new versions of
serialise_double()
andunserialise_double()
.
- For platforms with big-endian IEEE-754 we just need to byte-swap when doing that copying. There's already a helper
do_bswap()
which handles this efficiently (by using compiler built-ins or similar where available).
- For the (currently rare) platforms using a non-IEEE-754 format we'll need a pair of utility functions to convert between the native format and little-endian IEEE-754 format. The current
serialise_double()
andunserialise_double()
should provide some hints as to how to implement those.
I'd suggest getting this working for IEEE-754 platforms first, then worrying about the others as a second step.
comment:5 by , 6 years ago
Resolution: | → fixed |
---|---|
Status: | new → closed |
Implemented on git master by [44f5a2fd44bb5a7139e8c189190101cd584122e1].
This is an incompatible remote protocol change, so not suitable for backporting to 1.4.x.
Not worth holding 1.4.0 for, let's consider for the next development cycle.