Switch branches/tags
Nothing to show
Find file
Fetching contributors…
Cannot retrieve contributors at this time
518 lines (357 sloc) 17.9 KB
* src/configure: Ran autoconf to generate updated configure file.
* src/components/README: Adding a component for the FreeBSD OS that
reports the value of the thermal sensors available in the Intel
Core processors. There are as many counters as cores, and the
value reported by each counter is in Kelvin degrees.
* src/freebsd.c: Implemented missing
* src/:,,, ctests/Makefile:
Fix dependency on -ldl
Now configure checks if dl* symbols are in the base system
libraries (i.e., no -ldl needed). If so, avoid adding -ldl to
shlib example.
If dl* symbols are not find in the base system libraries, then
check for -ldl, and if it exists, pass it to ctests/Makefile
through Makefile. If -ldl is not found, fail at configure time.
* src/ctests/multiattach.c: Fix to compile in FreeBSD.
* src/: freebsd-memory.c, freebsd.c: Code cleanup.
* src/: perf_events.c, perfmon.c: [PATCH 18/18] papi: make
_perfmon2_pfm_pmu_type variable static
In perf_events.c and perfmon.c the variable
_perfmon2_pfm_pmu_type is used locally only, making it static.
Signed-off-by: Robert Richter <robert.richter at>
* src/: linux-bgp.c, linux-ia64.c, perf_events.c, perfctr.c,
perfmon.c: [PATCH 17/18] papi: remove inline_static macro in
Linux only code
We better replace the macro with 'static inline'. Not sure if
this works for all compilers, so doing it for Linux only files.
Signed-off-by: Robert Richter <robert.richter at>
* src/x86_cache_info.c: [PATCH 16/18] papi: remove static inline
function declaration
By moving the static inline function cpuid() to the begin of the
file we may remove its declaration.
Signed-off-by: Robert Richter <robert.richter at>
* src/linux.h: [PATCH 15/18] papi: remove unused linux.h header
This file is included nowhere, removing it.
Signed-off-by: Robert Richter <robert.richter at>
* src/linux-ia64.c: [PATCH 14/18] papi: fix array out of bounds
Fixing the following warning:
linux-ia64.c: In function ?_ia64_init_substrate?:
linux-ia64.c:1123:22: warning: array subscript is above array
Signed-off-by: Robert Richter <robert.richter at>
* src/: configure, [PATCH 13/18] papi: remove
unnecassary checks in
The check is obsolete and covered by default.
Signed-off-by: Robert Richter <robert.richter at>
* src/: papi_pfm_events.c, perf_events.c, perfmon.c, perfmon.h:
[PATCH 12/18] papi: include perfmon header files only where
This patch includes perfmon header files only where necessary.
Declarations in perfmon/perfmon.h are never used, removing its
inclusion. Itanium header files are needed only in perfmon.c and
Signed-off-by: Robert Richter <robert.richter at>
* src/: papi_pfm_events.c, perfctr-x86.c: [PATCH 11/18] papi: make
some functions in papi_pfm_events.c static
Functions _pfm_decode_native_event() and _pfm_convert_umask() are
internally used only. Remove export declaration and make it
Signed-off-by: Robert Richter <robert.richter at>
* src/: Rules.pfm, linux-ia64-pfm.h, linux-ia64.c, pfmwrap.h:
[PATCH 10/18] papi: rename pfmwrap.h -> linux-ia64-pfm.h
pfmwrap.h actually only contains IA64 code included by
linux-ia64.c. Rename it to linux-ia64-pfm.h.
Signed-off-by: Robert Richter <robert.richter at>
* src/: linux-ia64.c, pfmwrap.h: [PATCH 09/18] papi, linux-ia64:
make inline functions static
Inline functions should be static. Fixing it.
Signed-off-by: Robert Richter <robert.richter at>
* src/: linux-ia64.c, papi_pfm_events.c: [PATCH 08/18] papi: fix
_papi_pfm_ntv_name_to_code() function interface
The function is supposed to return a PAPI error code which is an
integer. Make the function's return code an integer too.
Signed-off-by: Robert Richter <robert.richter at>
* src/perfctr-ppc64.c: [PATCH 07/18] papi: fix spelling modifer ->
Fix spelling: modifer -> modifier
Signed-off-by: Robert Richter <robert.richter at>
* src/: linux-ia64.c, papi_pfm_events.c, papi_pfm_events.h,
perf_events.c, perfctr-x86.c, perfmon.c: [PATCH 06/18] papi:
define function interface in papi_pfm_events.h
The header file should define the interface that
papi_pfm_events.c provides. Declarations used internally only in
papi_pfm_events.c are moved there. Now papi_pfm_events.h only
contains the prototype functions. Remapping of definitions is
removed too. This cleanup removes duplicate code and better
defines the interface.
Signed-off-by: Robert Richter <robert.richter at>
* src/: Rules.perfctr, Rules.perfctr-pfm, linux.c, multiplex.c,
papi_vector.c, perfctr-x86.c, perfctr.c, ctests/test_utils.c:
[PATCH 05/18] papi: rename linux.c -> perfctr.c
The name of linux.c is misleading, it only implements perfctr
functionality. Thus renaming it to perfctr.c.
Signed-off-by: Robert Richter <robert.richter at>
* src/: papi_pfm_events.c, perfctr-x86.c: [PATCH 04/18] papi: make
_papi_pfm_init() static by moving it to perfctr-x86.c
_papi_pfm_init() is only used in perfctr-x86.c but implemented in
papi_pfm_events.c. Move it to perfctr-x86.c and make it static.
Signed-off-by: Robert Richter <robert.richter at>
* src/perfmon.c: [PATCH 03/18] papi: make some functions static in
The functions are only used in perfmon.c, making it static.
Signed-off-by: Robert Richter <robert.richter at>
* src/: Rules.pfm, Rules.pfm_pe: [PATCH 02/18] papi: do not compile
libpfm examples to support cross compilation
Signed-off-by: Robert Richter <robert.richter at>
* src/Rules.pfm: To cross compile papi we need to pass the
architecture to libpfm. Otherwise it will be confused and tries
to build the host's make targets with the cross compiler ending
up in the following error:
pfmlib_amd64.c: In function ?cpuid?:
pfmlib_amd64.c:166:3: error: impossible register constraint in
pfmlib_amd64.c:172:1: error: impossible register constraint in
make[2]: *** [pfmlib_amd64.o] Error 1
Signed-off-by: Robert Richter <robert.richter at>
* src/ctests/Makefile: Temporarily back out the FreeBSD makefile
change that breaks the build so that I can properly test some
other changes.
* src/papi_events.csv: Change the Core2 L1_TCM preset to be
The current event (L2_RQSTS:SELF:MESI) returns an event
equivelent to LLC_REFERENCES on libpfm3, but in libpfm4
L2_RQSTS:SELF:MESI maps instead to L2_RQSTS:SELF:MESI:ALL which
counts prefetches too.
By moving to LLC_REFERENCES both libpfm3 and libpfm4 count the
proper value. This also makes the "tenth" benchmark pass when
using PAPI/libpfm4.
* src/configure: Update to match current
* src/ctests/Makefile: Fix the if / fi syntax of the last change.
* src/:,, freebsd-memory.c, freebsd.c,
ctests/Makefile, ctests/zero_attach.c: Changes from Harald Servat
for freebsd support. Note that configure has not been regenerated
from this version of
* papi.spec, doc/Doxyfile, doc/Doxyfile-everything,
src/, src/, src/papi.h: Change version
numbers to 4.1.2 in preparation for a release.
* src/ctests/code2name.c: The code2name test was assuming that the
native events start right at PAPI_NATIVE_MASK. We specifically
document elsewhere this might not be the case, and indeed for the
libpfm4 code this fails.
This fix changes the code to properly enunmerate the native
events for the test.
* src/: papi.c, papi_internal.c: Fix a long-standing bug where we
were walking off the end of the EventInfoArray in
This was noticed by Richard Strong when instrumenting some of the
PARSEC benchmarks.
In papi_internal.c in the remap_event_position() function we have
the loop
for ( i = 0; i <= total_events; i++ ) {
It seems weird that we are doing a <= compare, and in fact this
is why we
walk off the end of the array sometimes. But why only somtimes?
If I
change that <= to a < then many of the regression tests fail.
It turns out that the two calls to remap_event_position() in
papi_internal.c are called with ESI->NumberOfEvents being one
than it should be, as it is incremented after the
call (though the new events are added before the call). This is
<= is used.
However the call in PAPI_start() happens with
with the right value. In this case < should be used.
The fix I've come up with has a NumberOfEvents value passed in
as a
parameter to remap_event_position(). This way the value+1 can
be passed in the former cases.
* src/aix.c: Problem on POWER6 with AIX: pm_initialize() cannot be
called multiple times with PM_CURRENT. Instead, use the actual
proc type - here PM_POWER6 - and multiple invocations are no
longer a problem. Ctests/multiplex1.c passes now.
* src/ If we don't run any tests, get buildbot's
* src/aix.c: number_of_nodes var was set to zero in
_aix_get_system_info. This caused the papi utilities to report
that the number of total CPUs is zero. This also caused
ctests/hwinfo to fail on POWER6 with AIX.
* src/papi_internal.h: Slight re-ordering of the no_vararg_macro
debug statements. (I actually tested the changes with
--with-debug and without on aix)
* src/ Change the syntax on our find command to be
more posix compliant.
GNU is Not UNIX, cute acronym or massive compatibility
conspiracy. I fall back to posix, you decide!
* src/: configure, Update configure file to be aware
of the existence of AIX-Power7.
PAPI still won't build, but it gets further than before.
* src/ Make our grep invocation posix compliant.
(--invert-match == -v & --regex == -e )
* src/ctests/overflow_allcounters.c: Separate 'indent' check-in so
that the previous modifications are comprehensible :)
* src/ctests/overflow_allcounters.c: The overflow_allcounters test
failed on Power6 with AIX (pmapi) but passes on Power6 with linux
(perf_events | perfctr). Therefore detect if we're running on
AIX, print a warning, but still pass the test.
* src/ Move away from echo -n to the shell builtin
printf (echo -n is not portable)
non-argumented instances of echo are fine.
* src/run_tests_exclude.txt: Skip the non-test ctests/burn
* src/Matlab/: PAPI_Matlab.c, PAPI_Matlab.readme: Change
documentation for matlab integration to reflect the need to link
to the library and not the static one.
Also listed me and the ptools-perfapi list as points of contact
for future questions *gulp*
* src/: configure,, Clean up (purge)
references to libpfm-2.x in configure and
* src/Matlab/PAPI_Matlab.c: MATLAB fixups: Calls to PAPI('stop')
now stop counting even if we ignore the return values.
* src/Matlab/PAPI_Matlab.c: Fixup for papi matlab integration.
Calls to PAPI('stop') don't cause errors now. If you call
PAPI('stop') with out capturing its return value, it does
* src/Matlab/PAPI_Matlab.c: mex does not like c++ style comments
* src/solaris-ultra.c: Resolved a couple type cast warnings. Also
initialized a variable and enabled GET_OVERFLOW_ADDRESS code in
two places. The overflow test suite still has a number of
failures and is disabled in configure.
* src/papi_internal.h: That last commit was lacking in
creativity... By having the debug function names still a macro,
we get all the goodness of __FILE__ etc bing in the right place
and still not using variadic macros.
#define SUBDBG do{ if (_papi_hwi_debug & DEBUG_SUBSTRATE )
print_the_label; } while (0); _SUBDBG was the clever line that
eluded me yesterday.
* src/papi_internal.h: Turns out that when DEBUG and
NO_VARARG_MACRO are true, we didn't correctly implement
component-level debug functions. This change uses variable
argument lists ( man stdarg) to correctly handle this case. (
papi_internal.h defines these)
Note that debugging information is not completly useful; due to
functions which use variable argument lists not being inlinable (
the inline keyword is afterall only a sugestion), all messages
appear to come from papi_internal.h:PAPIDEBUG:525:22619 and I am
not clever enough to get around that in general right now.
Thanks to Maynard Johnson for reporting.
* src/papi_events.csv: Enable the PAPI_HW_INT event on Nehalem, as
tests show the HW_INT:RCV event is the proper one to use here.
* src/papi_events.csv: Update the preset events for Nehalem, as
contributed by Michel Brown.
* src/: perf_events.h, perf_events.c: Address problem with overflow
handler continuing to count events. Add overflow status field to
determine if an event set has any events enabled for overflow.
Use IOC_REFRESH instead of IOC_ENABLE when overflowing.
Implement IOC_REFRESH at end of overflow handler. None of this
worked. Also implemented an IOC_DISABLE at top of overflow
handler. That worked, even though it's suboptimal.
* src/utils/command_line.c: test_fail_exit() substituted for
test_fail(). This became necessary because
PAPI_event_name_to_code now returns a PAPI_EATTR error if the
base name matches but attribute names don't. This utility was
producing an error message and then running the test. Perfctr
implementations will happily add a base name with no umasks and
then generate 0 counts. This fix prevents that behavior.
* src/ctests/test_utils.c: Rewrite of test_fail_exit() to call
test_fail(). It should be noted that test_fail_exit() behaves the
way test_fail() used to behave, i.e. it exits after printing the
fail message. However, test_fail no longer exits as that was
causing problems with multi-threaded tests not freeing memory. In
those cases where an exit is desired, calls to test_fail_exit()
should be substituted for calls to test_fail().
* src/: papi.h, papi_data.c, papi_pfm_events.c, perfmon.c: Added 3
new error codes: PAPI_EATTR, PAPI_ECOUNT, and PAPI_ECOMBO. These
map onto equivalent errors in libpfm and are provided to give
more detail on failures in libpfm calls. A new error mapping
function has been added to papi_pfm_events.c to map libpfm errors
to PAPI errors, and this function is employed in the
compute_kernel_args function in perfmon.c. It could also be
deployed elsewhere, but so far is not.
* src/x86_cache_info.c: The cpuid change yesterday broke
compilation on a 32-bit Pentium 3. Fix the inline assembly to
compile properly there too.
* src/: configure, Fix configure script to properly
detect Pentium M machines.
* src/x86_cache_info.c: Add cpuid leaf4 cache detection support.
This has been available on intel processors since Late model P4s
and all Core2 and newer. It returns cache info in a different
way than the older leaf2 method.
Currently we only use leaf4 data if the leaf2 results tell us to
(apparently Westmere does that). Otherwise we use the old
It might be interesting to use more of the leaf4 info. It can
tell us things such as how many processors share a socket, how
many processors share a cache, and info on the inclusivity of a
* src/: linux.c, perfctr-x86.c: Add perfctr Westmere support.
* src/perfctr-2.6.x/: patches/aliases, usr.lib/Makefile: Fix
conflicts from perfctr merge.
with the proper dynamic kernel version number checking. This
should be the last place in our perf_events code that was using a
hard-coded rather than dynamic check for a kernel-version related
* src/perf_events.c: This patch allows PAPI to read multiple events
at a time out of the kernel when the kernel is new enough (2.6.34
or newer). The previous code required setting a #define by hand
to get this behavior, this new code picks the proper way to do
things based on the kernel version number.
The patch was supplied by Gary Mohr
* src/: linux.c, perfctr-x86.c: Replace occurrances of
former has been documented as being deprecated as of perfctr
* src/cycle.h: Change "unicos" to "CLE" since "unicos" no longer
* src/examples/locks_pthreads.c: Add a call to PAPI_thread_init(),
Thanks to Martin Schindewolf for pointing this out.
* src/: papi.c, components/lmsensors/linux-lmsensors.h: Fixup url's
that checkbot was finding in error.
* src/ctests/: multiattach.c, zero_attach.c: The zero_attach and
multiattach were forking before off children before testing
that PAPI in fact is available. Then when PAPI_init() failed
the children weren't being cleaned up properly. This was
confusing build bot. This changeset moves the fork to after the
check plus do a fail_exit() on failure.
* src/: configure, Solaris build will fail if
/usr/ccs/bin isn't in the path. Have it check there for "ar" on
Solaris systems if it can't be found by normal methods.
* src/: configure, Only run the EAR tests on itanium
* src/: configure, Pentium4-perfctr was skipping most
of the CTESTS. Make sure they are all run.