--
You received this message because you are subscribed to the Google Groups "Unum Computing" group.
To unsubscribe from this group and stop receiving emails from it, send an email to unum-computin...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/unum-computing/0133bb9c-54aa-49ee-ac3d-940f679a5086%40googlegroups.com.
James, and everyone on Unum Computing,
If you go through the papers by de Dinechin et al, you discover the amazing claim that posits have to watch out for exception cases, but floats have no such burden. I am not making this up. Read the paper carefully, and you will see it. Those who have invested their technical careers in IEEE 754 floats are making desperate and disingenuous claims about the relative cost of posits and IEEE 754 float rules. The hardware complexity comparisons they are generating assume that the case of exponent saturation (all 1s or all 0s) are so rare that they can say, "Nothing to see here, folks, move along…" works to make people overlook some massive warts in the rules for processing IEEE 754 floats.
If you have a commercial investment in old-fashioned 1985-style floating-point, brace for impact. The only remaining reason for adhering to a grossly-antiquated Standard is looking more indefensible than ever.
John
To unsubscribe from this group and stop receiving emails from it, send an email to unum-co...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/unum-computing/0133bb9c-54aa-49ee-ac3d-940f679a5086%40googlegroups.com.
James, and everyone on Unum Computing,
If you go through the papers by de Dinechin et al, you discover the amazing claim that posits have to watch out for exception cases, but floats have no such burden. I am not making this up. Read the paper carefully, and you will see it. Those who have invested their technical careers in IEEE 754 floats are making desperate and disingenuous claims about the relative cost of posits and IEEE 754 float rules. The hardware complexity comparisons they are generating assume that the case of exponent saturation (all 1s or all 0s) are so rare that they can say, "Nothing to see here, folks, move along…" works to make people overlook some massive warts in the rules for processing IEEE 754 floats.
If you have a commercial investment in old-fashioned 1985-style floating-point, brace for impact. The only remaining reason for adhering to a grossly-antiquated Standard is looking more indefensible than ever.
John
To unsubscribe from this group and stop receiving emails from it, send an email to unum-co...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/unum-computing/0133bb9c-54aa-49ee-ac3d-940f679a5086%40googlegroups.com.
To unsubscribe from this group and stop receiving emails from it, send an email to unum-computin...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/unum-computing/57402dd8-f529-4da0-aac0-3944eb692a38%40googlegroups.com.
To unsubscribe from this group and stop receiving emails from it, send an email to unum-computin...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/unum-computing/631ad9a0-ea87-4f2d-92f6-45ce82d19cde%40googlegroups.com.
Florent,Welcome to the discussion! Let me see if I can change your mind about one thing: representation of infinity.Can you show me a real application where you are trying to calculate infinity? Or where infinity is a legitimate intermediate value? I am not aware of one. It would have to be a pretty silly calculation, one that does not require a computer so much as a little symbolic math.I believe you are finding value in infinites in output as a way of alerting the user or programmer that overflow has occurred. Yet, in IEEE 754 it is very easy to hit an infinity, compute with it (divide a finite value by it), and proceed to a result that looks correct in the final output. In fact, IEEE 754 even lets you bury a NaN value such that it does not propagate to the final answer! Check out the definition of hypot(x,y). If x is NaN and y is infinity, the result is infinity. So by those rules, 1 / sqrt( NaN² + ∞²) = 0. (For posits, arithmetic with a NaR always propagates to the answer, no math library exceptions.)Originally I was tempted to put into the Draft Standard the requirement that two registers, resettable to zero by the user, record the smallest magnitude and largest magnitude numbers that occur in a posit calculation. They can be output and reset to detect if the calculation has strayed into the inaccurate regions, or saturated at minpos or maxpos. I decided not to burden the hardware with that because it belongs in the debugger, not the hardware.For that matter, many dubious features of IEEE 754 belong in the debugger, or are taken care of by the language environment. The idea that the hardware should babysit a poorly-designed algorithm and be responsible for reporting when it goes awry is simply not the way computing systems (or programmers, or users) work. Exceptions like overflow are an indication that the software is not yet finished and is not ready to ship! If a calculation in C, say, attempts a square root of a negative number, the logic in the function notices and puts out an error message, not the hardware. Exceptions are supposed to be rare; when you put complicated exception-handling into a hardware standard, you burden every single operation with waste, and you cannot turn it off. You say you don't want overflow in safety-critical code to go unnoticed; I don't want safety-critical code that can overflow to be released, ever! If a computation can overflow, put in a conditional test for it in the software and then do whatever the intelligent thing is to do for that situation… don't produce an "infinity" and take comfort that someone will notice the bad answer.I once saw a life-critical application, CT medical imaging, where the application found the pixel with the maximum brightness and normalized the image to that so that image contrast would be maximized. This was decades ago, when the computation took 30 minutes, and a patient with a concussion needs a diagnosis ASAP. Well, one of the pixels was so bright that it overflowed to infinity. Dividing by that maximum made every other pixel zero, that is, black. After waiting for the image for half an hour, all the doctor got back was a black screen. Not cool. Bad programming, yes, but made worse by overflow-to-infinity rules, and by proceeding with a calculation that should have tested and handled the too-large value.Status flags are evil, because the same program with the same data can produce different results depending on something utterly invisible and changeable. Is that really what you want? This is why posits have only one rounding mode. I'm glad you mentioned the paper by David Monniaux, because it is an excellent survey of all the ways IEEE 754 rules can lead to irreproducible results. (For others on this forum, you can find the paper at https://arxiv.org/abs/cs/0701192.)Status flags are useful for letting hardware track things like integer carry, negative, zero, and so on, but notice that integer status flags are not something the programmer sets to control the behavior of an entire program. Imagine, say, an integer flag for 2's complement integers that says 10000000 means +128 instead of –128 for an 8-bit integer. Arguing, perhaps, "That way, absolute value will always work." Now you have irreproducibility in integer codes, too! So don't expect me to put such "mode of operation" flags into the Draft Posit Standard. Those aren't "warts." They're malignant tumors.John
To view this discussion on the web visit https://groups.google.com/d/msgid/unum-computing/57402dd8-f529-4da0-aac0-3944eb692a38%40googlegroups.com.
"The posit decoder used is described in Figure 1. The expensive part of this architecture comes from: the OR reduce over N–1 bits to detect NaR numbers; and the leading zero or one count (LZOC + Shift) that consumes the regime bits while aligning the significand. The +EMin aligns the exponents to simplify following operators. This decoding cannot be compared to an IEEE floating-point equivalent as no decoding is needed." (boldfacing is mine.)
To unsubscribe from this group and stop receiving emails from it, send an email to unum-computin...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/unum-computing/1851c484-8743-4802-9d5b-eeca72f89e59%40googlegroups.com.
Florent,
From reading your paper on the hardware cost of posits, and noted earlier by me on this forum, your claims of simplicity for IEEE float hardware assume that there is no exception handling needed for IEEE floats. To quote your paper verbatim:
"The posit decoder used is described in Figure 1. The expensive part of this architecture comes from: the OR reduce over N–1 bits to detect NaR numbers; and the leading zero or one count (LZOC + Shift) that consumes the regime bits while aligning the significand. The +EMin aligns the exponents to simplify following operators. This decoding cannot be compared to an IEEE floating-point equivalent as no decoding is needed." (boldfacing is mine.)
You then use this to claim that posits have "a factor 2-4 in the area*latency" compared to floats. I was baffled by your claim until I figured out that you must be assuming all exceptions, including the leading zero count needed for denormalized floats, is being handled separately. Like, with a trap to microcode or a software handler. Intel and AMD are quietly using this trick, and taking about 200 clock cycles to process denormalized floats. Setting aside the question of whether this is a good idea or not, a fair comparison of IEEE float hardware and posit hardware would include all the hardware needed for subnormal, quiet NaN, signaling NaN, and infinity exception handling. For IEEE floats, you will need LZOC + Shift to decode subnormal inputs; you will also need an OR reduce to detect all 0 or all 1 bits in the exponent, indicating a float that is not normal. And if that happens, you then need another OR reduce over the rest of the bits to determine what kind of exception case you have. It is clearly a superset of the hardware required for posit decoding. You should correct this in your paper, because it is a highly misleading, unscientific, and unfair comparison based on the false claim that IEEE float decoding only needs to handle normal floats.
The area required for the quire is a different matter; I understand that cost, and IEEE floats do not have that cost nor do they have the capabilities enabled by the quire. The feature costs something, and I have found that it frequently enables the replacement of 64-bit IEEE floats with 32-bit posits, which can save gigabytes or terabytes of storage. That seems worth spending a few hundred on-chip transistors for, don't you think? Now that processor chips have over 10 billion transistors?
I'm not sure where you get "improving accuracy from 24 to 27 bits (in the favorable cases)" from, because half of all 32-bit posits (the most commonly-used half) have 28 bits of significand, not 27. (One-fourth of all 32-bit posits have 27 bits of significand.) That raises the (wobbling) accuracy of single precision from 7.2–7.5 decimals to 8.4–8.7 decimals for most of the calculations, which I assert can sometimes allow 32-bit posits to replace 64-bit IEEE floats even without the quire. And in an honest accounting of hardware cost, they do that with less area and latency since the exception-handling is trivial for posits.
John
To view this discussion on the web visit https://groups.google.com/d/msgid/unum-computing/1851c484-8743-4802-9d5b-eeca72f89e59%40googlegroups.com.
To unsubscribe from this group and stop receiving emails from it, send an email to unum-computin...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/unum-computing/37c5acdc-56e3-4ca6-98ea-c21effda9681%40googlegroups.com.
Let's compare the relative effort to find m and n from each format. Decoding a normal float requires subtracting a bias from the exponent bits, and converting the fraction from sign-magnitude to 2's complement.
Decoding a subnormal float requires a Count Leading Zeros (CLZ) instruction that then adjusts both m and n;
since a floating-point pipeline (or SIMD instruction) requires data-independent timing, the delay and chip area must either include that worst-case cost of decoding a subnormal. (If you instead declare subnormals to be "rare" and handle them with software, then you still have to include the chip area for running that software and also state the delay for those cases.)
Posits always have a CLZ operation for the regime decoding except for the two exception values, 0 and NaR. Finding m then requires a shift and an add; finding n is a sign-extended (arithmetic) shift since the fraction is already in 2's complement. So there seems to be very little difference between the float and posit decoding costs… certainly less than a factor of two.
Instead of giving floats every shortcut possible (leaving out much of the IEEE 754 requirements) and assuming the hardware maintains m and n in decoded form, but then burdening posits with decoding and encoding everything for every operation, we need an apples-to-apples comparison. The choices to do otherwise in your paper are all in the direction of making floats look good and posits look bad, and if I were a referee for the paper, I would certainly say it needs major revision before it can be published. At the very least, please edit the paper to remove claims that your circuits support the IEEE 754 Standard, because they do not.
Dear Florent,
The hardware cost of posits vs. floats is one of the most important topics for this forum. Progress is being made on a number of fronts regarding this issue, but the question needs to be answered carefully, rigorously, and dispassionately.
I found a great many errors in your paper, not just the 28 versus 27 bits. There are numerical, conceptual, and grammatical errors that suggest it was not even edited or spell-checked before submission. And any reviewer surely would have caught the fact that you left out much of the requirements of the IEEE 754 Standard (for multiplication especially), while still labeling your circuits as IEEE.
If you handle exceptions with software, that software runs on hardware. You then need to include all of the hardware needed for that software in making a comparison with posits. Which I imagine adds quite a bit to the cost of floats, since a typical x86 now takes about 200 clock cycles to trap and handle subnormals. Actually, we don't have to imagine.
We can simply look at the complexity of Berkeley's SoftFloat, which perfectly expresses the IEEE 754 Standard using only integer operations, and the complexity of SoftPosit, which perfectly expresses the Draft Posit Standard using only integer operations. SoftPosit has considerably fewer lines of code and is actually slightly faster than SoftFloat. John Hauser has been optimizing SoftFloat for over 20 years, but Cerlane Leong only spent about six months tuning SoftPosit, please note. What we have so far provides rather compelling evidence that a full hardware implementation of IEEE 754 will require more chip area and latency than a full posit hardware implementation.
When you and your co-authors wrote "Posits: The Good, The Bad, and the Ugly," I was similarly struck by the many errors in the paper, not the least of which was that you footnoted that it had been accepted for the CoNGA 2019 conference, and you published the paper with that claim on HAL; in fact, we had not even assigned it to reviewers yet!
We were only able to accept the paper after major revision. It also was the only paper I've ever seen written about posit arithmetic that avoided (in its original version) any References to the original paper on posits, or the Draft Standard, or the extended "posit4" paper available on posithub.org.
It does not appear that you are following well-established rules for scientific publication.
To view this discussion on the web visit https://groups.google.com/d/msgid/unum-computing/37c5acdc-56e3-4ca6-98ea-c21effda9681%40googlegroups.com.
When you and your co-authors wrote "Posits: The Good, The Bad, and the Ugly," I was similarly struck by the many errors in the paper, not the least of which was that you footnoted that it had been accepted for the CoNGA 2019 conference, and you published the paper with that claim on HAL; in fact, we had not even assigned it to reviewers yet!
And again... this is false. The paper was published as a preprint, with no associated conference. This is how, in France, we deal with copyright. Please stop lying at this point.
Dear Florent and Jean-Michel,
I've been meaning to write you both because I'm delighted to see you writing about posits, and very happy that you submitted a paper or two to CoNGA. I think in the panel discussion we plan at the end of the session, the topic should be on floats vs. posits, with you being the main one to advocate for floats, though you will not be the only one. That might be almost as interesting as the debate I had with Kahan! Our Program Chair Vassil Dimitrov, who I think you know, agrees with me that we are honored to have such strong interest and detailed analysis from world-class experts in IEEE 754 such as yourselves. I do not know the third author, Y Uguen, but please feel free to share this email with him or her.
However, I was a little alarmed to get this notice from Google Scholar, minutes ago:
Begin forwarded message:
From: Google Scholar Alerts <scholarale...@google.com>
Subject: Recommended articles
Date: December 25, 2018 at 4:48:46 PM GMT+8
F De Dinechin, L Forget, JM Muller, Y Uguen - 2018Many properties of the IEEE-754 floating-point number system are taken for grantedin modern computers and are deeply embedded in compilers and low-level softareroutines such as elementary functions or BLAS. This article reviews such properties …
This alert is sent by Google Scholar. Google Scholar is a service by Google.
I opened the PDF, and it is shown as having been accepted for "CongA 2019, march 2019, Singapore". (We capitalize it as CoNGA, and March should be have an initial capital.) Since we only recently assigned reviewers, and certainly haven't completed any reviews or sent you our decision, isn't this a bit premature? I glanced through the paper and saw a number of serious technical errors that really should be addressed before the paper is made public in any way. For instance, it says the Draft Standard for posits uses 2 bits of exponent for 64-bit numbers; the correct number is 3 bits of exponent, and that affects your arguments about relative merits, the size of the exact accumulator, and on. There are several other conceptual mistakes that I'm sure the reviewers will describe and that I know you will want to correct.
You might want to use an original source for information about how posits work… instead of what others have written about them. Perhaps the best source is https://posithub.org/docs/Posits4.pdf.
Please consider taking this paper down until it can be properly refereed! Your fame in the area of computer arithmetic, like Kahan's, is such that mistakes in a pre-released paper like this will get recirculated and repeated in the community, leading to an unfair assessment of the relative merits of floats and posits. I think everyone will benefit if only a more polished, properly refereed version is eventually posted.
Thanks,John
Dear all,
Thank you for raising this.I apologize for this situation.It is the policy at our institutions that submitted papers developed using public money are published on open archives.However the mention to the conference is indeed a mistake of mine due to end-of-year rush, I shouldn't have kept the conference template. It is very wrong indeed. The web page itself mentions that it is a "preprint or work in progress" but the pdf is wrong.I sent a new version without the mention to CoNGA.It may take a few days to be validated.
Then there will be a revision of this preprint taking into account the reviewer's comments (paper accepted or not).
Please accept my apologies.
Florent de Dinechin
For example, the decoding of regime, could have been made into a function since it would be used repeatedly but I hesitated to do so since a function call would reduce performance. Consequently when I thought of a smarter way to decode regime, I had to update the code in multiple places.
--
You received this message because you are subscribed to the Google Groups "Unum Computing" group.
To unsubscribe from this group and stop receiving emails from it, send an email to unum-computin...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/unum-computing/7fc47788-e5a6-4817-a013-84098a6c2d0f%40googlegroups.com.
John
To unsubscribe from this group and stop receiving emails from it, send an email to unum-co...@googlegroups.com.