Here's a brief to-camera from me about the Solaris Studio 12.4 Beta programme.
Friday, April 4, 2014
Tuesday, May 22, 2012
Square roots
If you are spending significant time calling sqrt() then to improve this you should compile with -xlibmil. Here's some example code that calls both fabs() and sqrt():
#include <math.h>
#include <stdio.h>
int main()
{
double d=23.3;
printf("%f\n",fabs(d));
printf("%f\n",sqrt(d));
}
If we compile this with Studio 12.2 we will see calls to both fabs() and fsqrt():
$ cc -S -O m.c bash-3.2$ grep call m.s $ grep call m.s|grep -v printf /* 0x0018 */ call fabs ! params = %o0 %o1 ! Result = %f0 %f1 /* 0x0044 */ call sqrt ! params = %o0 %o1 ! Result = %f0 %f1
If we add -xlibmil then these calls get replaced by equivalent instructions:
$ cc -S -O -xlibmil m.c $ grep abs m.s|grep -v print; grep sqrt m.s|grep -v print /* 0x0018 7 */ fabsd %f4,%f0 /* 0x0038 */ fsqrtd %f6,%f2
The default for Studio 12.3 is to inline fabs(), but you still need to add -xlibmil for the compiler to inline fsqrt(), so it is a good idea to include the flag.
You can see the functions that are replaced by inline versions by grepping the inline template file (libm.il) for the word "inline":
$ grep inline libm.il
.inline sqrtf,1
.inline sqrt,2
.inline ceil,2
.inline ceilf,1
.inline floor,2
.inline floorf,1
.inline rint,2
.inline rintf,1
.inline min_subnormal,0
.inline min_subnormalf,0
.inline max_subnormal,0
...
The caveat with -xlibmil is documented:
However, these substitutions can cause the setting of
errno to become unreliable. If your program depends on
the value of errno, avoid this option. See the NOTES
section at the end of this man page for more informa-
tion.
An optimisation in the inline versions of these functions is that they do not set errno. Which can be a problem for some codes, but most codes don't read errno.
Thursday, September 16, 2010
Details for Oracle Open World Presentation
I'm presenting at the Develop conference in San Francisco next week. I'll be in the Nikko Ballroom I at the Hotel Nikko, at 4pm on Monday. The title of the talk is "Multicore Application Programming with Oracle Solaris Studio 12.2". The abstract is:
Writing correct and fast parallel applications is often considered a hard problem. However, it doesn't need to be that way. This session will describe how Oracle Solaris Studio can be used to produce applications that are both fast and correct. The talk will cover parallelization strategies, implementation details, and common pitfalls, as well as describing how the tools provided by Oracle Solaris Studio can identify coding errors and performance opportunities in the application.
There's three talks from the Studio team, details are:
| Date | Details | Location |
|---|---|---|
| Monday 20th 4:00pm | S317573: Multicore Application Programming with Oracle Solaris Studio Darryl Gove | Hotel Nikko, Nikko Ballroom I |
| Tuesday 21st 11:30am | S317590: Performance Measurement with Oracle Solaris Studio Performance Tools Marty Itzkowitz | Hotel Nikko, Peninsula |
| Wednesday 22nd 1:00pm | S317585: Building High-Quality C/C++ Applications Don Kretsch | Hotel Nikko, Nikko Ballroom II |
There appears to be no way to link directly to the talk details, but they are available if you search the entire programme.