<html>
<head>
<meta content="text/html; charset=ISO-8859-1"
http-equiv="Content-Type">
</head>
<body text="#000000" bgcolor="#FFFFFF">
<div class="moz-cite-prefix">glibc's expf() function changes the FP
rounding mode on every call -- which are the fe* calls you're
seeing -- resulting in a dreadful performance (IIRC there's a
pipeline stall when rounding mode changes).<br>
<br>
Have a look at sysdeps/ieee754/flt-32/e_expf.c in the glibc
sources to verify. This is true as of glibc 2.14, at least.<br>
<br>
We had to roll our own to work around it.<br>
<br>
- ½<br>
<br>
On 13-09-05 03:33 PM, Stephen Canon wrote:<br>
</div>
<blockquote
cite="mid:894741D6-06A5-473D-883F-083548EAED9D@apple.com"
type="cite">
<meta http-equiv="Content-Type" content="text/html;
charset=ISO-8859-1">
<div>On Sep 5, 2013, at 12:20 PM, Eli Friedman <<a
moz-do-not-send="true" href="mailto:eli.friedman@gmail.com">eli.friedman@gmail.com</a>>
wrote:</div>
<div><br class="Apple-interchange-newline">
<blockquote type="cite">
<div dir="ltr">On Thu, Sep 5, 2013 at 12:15 PM, Richard
Hadsell <span dir="ltr"><<a moz-do-not-send="true"
href="mailto:hadsell@blueskystudios.com" target="_blank">hadsell@blueskystudios.com</a>></span>
wrote:<br>
<div class="gmail_extra">
<div class="gmail_quote">
<blockquote class="gmail_quote" style="margin:0px 0px
0px
0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">We
have been comparing the performance of code generated
by Clang++ 3.3 with G++ 4.5.1. The results have been
mixed.<br>
<br>
We ran a profiler to look for what could cause some
cases to run slower with Clang++ and found that some
floating-point routines were taking a lot of time:<br>
<br>
samples % image name symbol name<br>
596677 19.7935 studio++ gcopy2<br>
274870 9.1182 <a moz-do-not-send="true"
href="http://libm-2.13.so/" target="_blank">libm-2.13.so</a>
feholdexcept<br>
262358 8.7032 <a moz-do-not-send="true"
href="http://libm-2.13.so/" target="_blank">libm-2.13.so</a>
fesetenv<br>
258225 8.5661 studio++ cgi...<br>
207915 6.8971 <a moz-do-not-send="true"
href="http://libm-2.13.so/" target="_blank">libm-2.13.so</a>
fesetround<br>
193316 6.4129 studio++ dcopy2<br>
<a moz-do-not-send="true"
href="tel:126933%20%20%20%204.2107"
value="+12693342107" target="_blank">126933 4.2107</a>
<a moz-do-not-send="true" href="http://libm-2.13.so/"
target="_blank">libm-2.13.so</a> __ieee754_exp2<br>
122614 4.0675 studio++ fcopy2<br>
<br>
For g++ the top contributors were these:<br>
<br>
samples % image name symbol name<br>
466893 21.3064 studio++ gcopy2<br>
300240 13.7013 studio++ cgi...<br>
176191 8.0404 studio++ dcopy2<br>
132491 6.0462 studio++ cgi...<br>
129580 5.9133 <a moz-do-not-send="true"
href="http://libm-2.13.so/" target="_blank">libm-2.13.so</a>
__ieee754_pow<br>
<a moz-do-not-send="true"
href="tel:126938%20%20%20%205.7928"
value="+12693857928" target="_blank">126938 5.7928</a>
studio++ ecopy2<br>
119610 5.4583 studio++ fcopy2<br>
<br>
The libm floating-point routines 'fe...' only show up
with Clang++, so I suspect they account for the slower
performance.<br>
<br>
We are not purposely changing the floating-point
precision or rounding mode, so I am looking for a way
to avoid code that uses these functions unnecessarily.<br>
<br>
We are compiling with these options:<br>
<br>
-march=core2 -msse4.1 -m64 -std=c++0x -fPIC -pthread
-gcc-toolchain /opt/gcc-4.7.2
-Wno-logical-op-parentheses -Wno-shift-op-parentheses
-O2<span class=""><font color="#888888"><br>
<br>
</font></span></blockquote>
<div><br>
</div>
<div>There isn't any obvious reason why feholdexcept
etc. would be called from clang-compiled code, but not
gcc-compiled code; clang never generates calls to it
implicitly.</div>
<div><br>
</div>
<div>Can you hop into a debugger and get a stack trace
from a call to feholdexcept?</div>
</div>
</div>
</div>
</blockquote>
<br>
</div>
<div>
<div>Usually the reason these symbols show up on linux is that
you’re hitting the errno-versions of the libm entry points
(i.e. GCC is likely generating calls to a different set of
more streamlined libm entry points, while clang is hitting the
default versions).</div>
<div><br>
</div>
<div>– Steve</div>
</div>
<br>
<fieldset class="mimeAttachmentHeader"></fieldset>
<br>
<pre wrap="">_______________________________________________
cfe-dev mailing list
<a class="moz-txt-link-abbreviated" href="mailto:cfe-dev@cs.uiuc.edu">cfe-dev@cs.uiuc.edu</a>
<a class="moz-txt-link-freetext" href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev</a>
</pre>
</blockquote>
<br>
</body>
</html>