2015-03-02 * 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 space. * 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". 2015-02-28 * 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. 2015-02-27 * 74801065 src/papi_events.csv: Add ARM Cortex A7 support. Tested on a Raspberry Pi 2 board. 2015-02-25 * 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 .... [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!. [0] time = 8, count = 38161, iter = 20, rate = 1908050.0/Kiter krentel_pthreads.c PASSED 2015-02-20 * 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. 2015-02-11 * 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). 2015-02-10 * 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). 2015-02-02 * 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 before. * 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. 2015-01-20 * 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 2014-12-17 * 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 ' 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 ', 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). 2014-12-15 * f8b722a9 src/components/perf_event/tests/event_name_lib.c: perf_event tests: add sample haswell offcore event 2014-12-11 * 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. 2014-11-14 * 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.