From 10e1cf6b73f1598e57d24933a0949dbeffa2c8a0 Mon Sep 17 00:00:00 2001 From: Siddhesh Poyarekar Date: Fri, 11 Oct 2013 22:37:53 +0530 Subject: Add systemtap markers to math function slow paths Add systemtap probes to various slow paths in libm so that application developers may use systemtap to find out if their applications are hitting these slow paths. We have added probes for pow, exp, log, tan, atan and atan2. --- manual/probes.texi | 98 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 98 insertions(+) (limited to 'manual/probes.texi') diff --git a/manual/probes.texi b/manual/probes.texi index 1a45c69b91..5492bb79ff 100644 --- a/manual/probes.texi +++ b/manual/probes.texi @@ -16,6 +16,7 @@ arguments. @menu * Memory Allocation Probes:: Probes in the memory allocation subsystem +* Mathematical Function Probes:: Probes in mathematical functions @end menu @node Memory Allocation Probes @@ -255,3 +256,100 @@ This probe is triggered when function @code{free} decides to adjust the dynamic brk/mmap thresholds. Argument @var{$arg1} and @var{$arg2} are the adjusted mmap and trim thresholds, respectively. @end deftp + +@node Mathematical Function Probes +@section Mathematical Function Probes + +Some mathematical functions fall back to multiple precision arithmetic for +some inputs to get last bit precision for their return values. This multiple +precision fallback is much slower than the default algorithms and may have a +significant impact on application performance. The systemtap probe markers +described in this section may help you determine if your application calls +mathematical functions with inputs that may result in multiple-precision +arithmetic. + +Unless explicitly mentioned otherwise, a precision of 1 implies 24 bits of +precision in the mantissa of the multiple precision number. Hence, a precision +level of 32 implies 768 bits of precision in the mantissa. + +@deftp Probe slowexp_p6 (double @var{$arg1}, double @var{$arg2}) +This probe is hit when the @code{exp} function is called with an input that +results in multiple precision computation with precision 6. Argument +@var{$arg1} is the input value and @var{$arg2} is the computed output. +@end deftp + +@deftp Probe slowexp_p32 (double @var{$arg1}, double @var{$arg2}) +This probe is hit when the @code{exp} function is called with an input that +results in multiple precision computation with precision 32. Argument +@var{$arg1} is the input value and @var{$arg2} is the computed output. +@end deftp + +@deftp Probe slowpow_p10 (double @var{$arg1}, double @var{$arg2}, double @var{$arg3}, double @var{$arg4}) +This probe is hit when the @code{pow} function is called with inputs that +result in multiple precision computation with precision 10. Arguments +@var{$arg1} and @var{$arg2} are the input values, @code{$arg3} is the value +computed in the fast phase of the algorithm and @code{$arg4} is the final +accurate value. +@end deftp + +@deftp Probe slowpow_p32 (double @var{$arg1}, double @var{$arg2}, double @var{$arg3}, double @var{$arg4}) +This probe is hit when the @code{pow} function is called with an input that +results in multiple precision computation with precision 32. Arguments +@var{$arg1} and @var{$arg2} are the input values, @code{$arg3} is the value +computed in the fast phase of the algorithm and @code{$arg4} is the final +accurate value. +@end deftp + +@deftp Probe slowlog (int @var{$arg1}, double @var{$arg2}, double @var{$arg3}) +This probe is hit when the @code{log} function is called with an input that +results in multiple precision computation. Argument @var{$arg1} is the +precision with which the computation succeeded. Argument @var{$arg2} is the +input and @var{$arg3} is the computed output. +@end deftp + +@deftp Probe slowlog_inexact (int @var{$arg1}, double @var{$arg2}, double @var{$arg3}) +This probe is hit when the @code{log} function is called with an input that +results in multiple precision computation and none of the multiple precision +computations result in an accurate result. Argument @var{$arg1} is the maximum +precision with which computations were performed. Argument @var{$arg2} is the +input and @var{$arg3} is the computed output. +@end deftp + +@deftp Probe slowatan2 (int @var{$arg1}, double @var{$arg2}, double @var{$arg3}, double @var{$arg4}) +This probe is hit when the @code{atan2} function is called with an input that +results in multiple precision computation. Argument @var{$arg1} is the +precision with which computation succeeded. Arguments @var{$arg2} and +@var{$arg3} are inputs to the @code{atan2} function and @var{$arg4} is the +computed result. +@end deftp + +@deftp Probe slowatan2_inexact (int @var{$arg1}, double @var{$arg2}, double @var{$arg3}, double @var{$arg4}) +This probe is hit when the @code{atan} function is called with an input that +results in multiple precision computation and none of the multiple precision +computations result in an accurate result. Argument @var{$arg1} is the maximum +precision with which computations were performed. Arguments @var{$arg2} and +@var{$arg3} are inputs to the @code{atan2} function and @var{$arg4} is the +computed result. +@end deftp + +@deftp Probe slowatan (int @var{$arg1}, double @var{$arg2}, double @var{$arg3}) +This probe is hit when the @code{atan} function is called with an input that +results in multiple precision computation. Argument @var{$arg1} is the +precision with which computation succeeded. Argument @var{$arg2} is the +input to the @code{atan} function and @var{$arg3} is the computed result. +@end deftp + +@deftp Probe slowatan_inexact (int @var{$arg1}, double @var{$arg2}, double @var{$arg3}) +This probe is hit when the @code{atan} function is called with an input that +results in multiple precision computation and none of the multiple precision +computations result in an accurate result. Argument @var{$arg1} is the maximum +precision with which computations were performed. Argument @var{$arg2} is the +input to the @code{atan} function and @var{$arg3} is the computed result. +@end deftp + +@deftp Probe slowtan (double @var{$arg1}, double @var{$arg2}) +This probe is hit when the @code{tan} function is called with an input that +results in multiple precision computation with precision 32. Argument +@var{$arg1} is the input to the function and @var{$arg2} is the computed +result. +@end deftp -- cgit 1.4.1