From: Peter v. H. <p.v...@om...> - 2013-09-27 09:44:55
|
Hi John, >>> The likely cause is __float128 operations being performed as "double precision" >>> of two __float80 by the Intel math library for x86_64. Memcheck-3.8.1 implements >>> __float80 operations as __float64 (ordinary IEEE-754 'double'.) > >> Thanks for analyzing this! I assume this means that a fix will be rather >> complex? > > Nearly every user whose programs utilize 80-bit x86 floating point > is disappointed by memcheck's 64-bit implementation of 80-bit operations. > This situation is many years old. The fix requires a major effort > of design and implementation. If you don't mind me saying so, this is a pretty incomprehensible design decision. This is virtually guaranteed to change the behavior of the code, which I would think is a big no-no for a debugging tool. But I guess we need to deal with what we have now... So I see only two options: - disable the unit tests that fail when running under valgrind. - switch to gcc's libquadmath. A casual inspection suggests that this is based on gmp. It may well be slower than Intel's implementation though... I would also need to test if it is mature enough by now. > If all of your use of 80-bit operations on x86 is indirect as the result > of __float128, then perhaps you could run on s390, where memcheck has > good support for the 128-bit hardware floating point. Unfortunately I do not have access to such a platform. I am very surprised that there even is hardware support for 128-bit FP. I always thought that that would be too much of a fringe market to be profitable. Cheers, Peter. -- Peter van Hoof Royal Observatory of Belgium Ringlaan 3 1180 Brussel Belgium http://homepage.oma.be/pvh |