* bcc508a9 src/components/perf_event/pe_libpfm4_events.c: Thanks much to Gary
Mohr for the patch: This patch fixes a problem in the perf_events component
that could cause get event info to produce incorrect results. The problem was
reported by Harold Servat and occurs when the functions
PAPI_event_name_to_code and PAPI_get_event_info are called for an event with
a mask (name:mask) and then called again for the event without a mask (name).
When this is done the second call to PAPI_get_event_info will incorrectly
return the event name and mask from the first call (name:mask). This patch
also corrects a problem found with valgrind which was causing memory on the
heap to get stranded. We were passing a char **event_string to the libpfm4
encode function and he was allocating some memory and giving us back a
pointer to the allocated space. The code in PAPI was responsible for freeing
this space but failed to do so. After looking closer at the PAPI code, it
does not need the information returned in this space so the patch changes the
code to not ask for the information so that libpfm4 no longer allocates heap
* 62e90303 src/Makefile.inc src/configure src/configure.in...: Generating
pkg-config files for papi Thanks to William Cohen for this patch (and to
Phil Mucci for the patch review). Some software makes use of pkg-config
(http://www.freedesktop.org/wiki/Software/pkg-config/) when using libraries.
pkg-config selects compiler flags and libraries for compiling user code based
on the installation location of the package. It could make it a bit easier to
build other software on papi by abstracting where the libraries are
installed. Rather than having some complicated path to the installed
library, users could use "pkg-config --libs --cflags papi" to get that
information for the compile. If there are multiple versions of papi
available on the machine, the user could get a particular one with something
like "pkg-config --libs --cflags papi-5.4.0".
* f6bc16c6 src/papi_events.csv: Add support for ARM 1176 cpus This is the
chip in the original Raspberry Pi. With the recently released Raspberry Pi
3.18.8 kernel perf_event support is finally enabled by default.
* 74801065 src/papi_events.csv: Add ARM Cortex A7 support. Tested on a
Raspberry Pi 2 board.
* 71e6e5e5 src/ctests/krentel_pthreads.c: Sync thread exit in
krental_threads.c Thanks to William Cohen for this patch and to Phil Mucci
for approving it. William Cohnen and Michael Petlan noticed that this test
can have threads dangling after the main thread is done. This patch tracks
the created threads and ensures that they are joined before the code exits.
Note: There is still some problem remaining. For example, the following test
will sometimes (maybe 1 of 10 runs) generate an error message. >
./ctests/krentel_pthreads 8 2000 10 ....  time = 8, count = 38110, iter =
20, rate = 1905500.0/Kiter PAPI Error: thread->running_eventset == NULL in
_papi_pe_dispatch_timer for fd 14!.  time = 8, count = 38161, iter = 20,
rate = 1908050.0/Kiter krentel_pthreads.c PASSED
* c0de16d8 INSTALL.txt: Added additional notes and examples for the MIC.
Specify how to use qualifiers to set exclude_guest and exclude_host bits to
0. Use micnativeloadex to run the utilites.
* 65825ef7 src/utils/native_avail.c: Change papi_native_avail to refer to
event qualifiers (qual) rather than event masks. Thanks to Gary Mohr for
this patch and the following notes. This patch file fixes one bug and
replaces the term "Unit Mask" and other names used to identify a unit mask
with the term "event qualifier". This renaming was done because the term
"Unit Mask" has a very specific meaning in the hardware. Many of the flags
and other fields we can now provide with an event to control how it is
counted have nothing to do with the unit masks defined in the manuals
provided by the hardware vendors. Summary of what changed: Removed the -d
command line argument. It controlled if units should be displayed in output.
Now we always display units if they are defined (only place I have seen them
defined is with rapl events). Fixed bug when displaying event units. It was
displaying the units information in front of the event name and description.
It now displays the units information after the description. Renamed the
-noumasks argument to -noqual. This prevents event qualifiers (previously
known as unit masks) from being displayed. Replaced headings "Unit Mask" and
"Mask Name" with "Qualifiers" and "Name" (when displaying a single event).
* 91e36312 src/ctests/Makefile.recipies src/ctests/attach_cpu.c: Test case
for attaching an eventset to a single CPU rather than a thread (attach_cpu)
Thanks to Gary Mohr for this contribution. This patch adds a test case to
demonstrate how to attach an event set to a cpu so that the event counts for
events in that event set reflect how many of those events occurred on the
attached cpu (instead of the number of events that occurred in a thread of
execution). See comments in attach_cpu.c to see how and why to probe with
specific cpus (e.g. ./attach_cpu 3).
* 1fc57875 src/components/cuda/Makefile.cuda.in src/components/cuda/README
src/components/cuda/Rules.cuda...: Updated CUDA component supporting multiple
GPUs and multiple CUDA contexts. This PAPI CUDA component uses the CUPTI
library to get information about the event counters. NOTE: To use this PAPI
CUDA component, there is a difference from standard PAPI usage. When adding
PAPI events to the CUDA component, each event needs to be added from the
correct CUDA context. To repeat, for each CUDA device, switch to that device
and add the events relevant to that device! If there is only one CUDA
device, then the default context will be used and things should work as
* 40151180 src/ftests/Makefile: Reported by Mark Maurice: On linux systems
without a fortran compiler installed we get an error when building the PAPI
fortran tests. The reason for the error is that in the Makefile in the
ftests directory the @echo lines start with spaces instead of tabs. 'make' is
fussy about tabs and spaces and gives a 'missing separator' error if a
command starts with spaces instead of a tab.
* 1dec8a9d src/components/lustre/linux-lustre.c: Thanks to Gary Mohr for the
patch:The patch provided solves the segmentation faults produced by the
lustre component.The changes done by the patch are in the
_lustre_shutdown_component() by adding lustre_native_table=NULL statement and
Later num_events=0 and table_size=32 were added in the same function to fully
solve the segmentation faults
* aba85b18 man/man1/PAPI_derived_event_files.1 man/man1/papi_avail.1
src/Makefile.inc...: User defined events: Enhance PAPI preset events allow
user defined events via a user event definition file. Thanks to Gary Mohr
for this patch and its documentation.
-------------------------------------------------------- This patch file
enhances the code that processes PAPI preset event definition files
(papi_events.csv) so that it can also now be used to process a user provided
event definition file. PAPI still looks for an environment variable
'PAPI_USER_EVENTS_FILE' and if found uses its value as the pathname of the
user event definition file to process (same behavior as before). The change
is that this is done right after processing the PAPI preset events rather
than at the end of PAPI_library_init (after all components were initialized).
An advantage of using this approach is that now user defined events, like
preset events, can define multiple versions of the same event where each
version is customized to a particular hardware platform (or pmu name). The
code which processes preset events was also enhanced in the following ways:
The papi_avail command was updated to also list user defined events in its
output. The papi_avail help and man page have been updated to include user
defined events in the descriptions. The man page was also updated to add a
"see also" reference to a new 'PAPI_derived_event_files' man page. A new
'PAPI_derived_event_files' man page to provide the user information about how
to build an event definition file has been added. This patch file contains
both the source file changes (needed by doxygen) and updated copies of the
man pages created by doxygen. The code now allows both postfix (Reverse
Polish Notation) and infix (algebraic) formulas to be entered. There is a new
derived event type 'DERIVED_INFIX' to specify that the formula is provided in
the algebraic format. The formulas will always be converted to postfix
format as part of the event definition processing so if the user does a
'papi_avail -e <eventName>' later it will always be displayed as a postfix
formula. When defining a new derived event (either preset or user defined),
it is now possible to use any already known native event, preset event or
user defined event. This means that new derived events can be created as a
relationship between other already known (their definitions had to already be
processed) derived events. When derived events are created, there is a list
of native events needed by that defined event created and optionally a
formula to compute the derived events value. If a new derived event is
created that depends on another derived event, then the new event will
inherit all the native events used by the event it depends on and the new
derived events formula will be merged with the formula from the event it
depends on (if there was one or if it had an implied formula like derived add
or sub). This means that after event definition processing completes the
event tables inside PAPI always contain the list of all native events needed
to compute the derived events results and a postfix formula that will be used
to compute the events result. So if a user does a 'papi_avail -e
<eventName>', the output will show what events PAPI is going to count and how
they will be used to generate the events final value. A new command 'EVENT'
has been added to the code which is intended to be used for user defined
events. It is identical to the existing command 'PRESET' used to define
preset events. They are interchangeable and both can be used in both preset
and user defined event definition files. The code now allows the user to
provide a short and long description for the derived event. The event
definition commands 'PRESET' and 'EVENT' now support tags of "LDESC" and
"SDESC" to identify what is found in the following string. This was done the
same way as the already supported 'NOTE' tag. These changes do not support
the ability to create #define variables that can then be used in event
definition formulas. This was supported by the old user event definition
code. These changes delete the existing papi_user_event code (two files that
are no longer needed).
* f8b722a9 src/components/perf_event/tests/event_name_lib.c: perf_event
tests: add sample haswell offcore event
* adbae8cd src/papi_events.csv: Update presets for Intel Haswell and
Haswell-EP (according to the updates of the libpfm4 event table for Intel
Haswell and Haswell-EP). These mods have not been tested due to lacking
access to an Intel Haswell system.
* ca1ba786 doc/Doxyfile-common papi.spec src/Makefile.in...: Bump master to
5.4.1, we just released out of the stable-5.4 branch.