Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
58 commits
Select commit Hold shift + click to select a range
4db74a0
Fix missing type from previous refactor
Andrew-Beggs-ECMWF Feb 19, 2026
b315c24
Add 'lib_type' to workflow
Andrew-Beggs-ECMWF Feb 19, 2026
899e4f5
Update 'ecmwf-actions/build-package@v2' -> 'ecmwf/build-package@v2'
Andrew-Beggs-ECMWF Feb 19, 2026
872d62e
Add ability to test features in the CI
Andrew-Beggs-ECMWF Feb 19, 2026
a89b324
Use nvhpc compiler name to derive version for downloads
Andrew-Beggs-ECMWF Feb 20, 2026
ed587e5
Cache nvhpc compiler download
Andrew-Beggs-ECMWF Feb 20, 2026
21c44a4
Update AUTHORS
Andrew-Beggs-ECMWF Feb 20, 2026
eb5c49b
Install papi when testing feature in CI
Andrew-Beggs-ECMWF Feb 20, 2026
9732d8e
Install rocprofiler-sdk for roctx when testing feature in CI
Andrew-Beggs-ECMWF Feb 20, 2026
ccbf72f
Add rocm requirements for rocprofiler-sdk
Andrew-Beggs-ECMWF Feb 20, 2026
ca24234
Fix changing ubuntu version
Andrew-Beggs-ECMWF Feb 20, 2026
f361830
Limit rocprofiler-sdk to only installing the required rocprofiler-sdk…
Andrew-Beggs-ECMWF Feb 20, 2026
4b5c1e5
Fix matrix exclude
Andrew-Beggs-ECMWF Feb 20, 2026
cc6c127
Fix package required for PAPI libs
Andrew-Beggs-ECMWF Feb 20, 2026
9bcd3cf
Fix linking to '${fiatlib}' instead of 'fiat'
Andrew-Beggs-ECMWF Feb 20, 2026
37d5343
Add package for nvtx libs
Andrew-Beggs-ECMWF Feb 21, 2026
ead19d2
Change to use 'nvidia-cuda-toolkit' for nvtx & only when not nvhpc co…
Andrew-Beggs-ECMWF Feb 21, 2026
a9e0e4b
Update packages for NVTX feature to include nsys
Andrew-Beggs-ECMWF Feb 21, 2026
6f68aaf
Set CUDAToolkit_ROOT for cmake
Andrew-Beggs-ECMWF Feb 21, 2026
9ab5abc
Fix CUDAToolkit_ROOT exporting
Andrew-Beggs-ECMWF Feb 21, 2026
8b7d22f
Add package for nvcc so cmake can find nvtx
Andrew-Beggs-ECMWF Feb 21, 2026
547b3d0
Update CUDA version to 12.5
Andrew-Beggs-ECMWF Feb 21, 2026
fcf5224
Revert CUDA version to 12.4 for Ubuntu 22.04
Andrew-Beggs-ECMWF Feb 21, 2026
91dc6d8
Fix typo
Andrew-Beggs-ECMWF Feb 21, 2026
f323486
Tmp debug outputs
Andrew-Beggs-ECMWF Feb 21, 2026
4b71ab8
Add nsight-systems specific bin folder to $GITHUB_PATH
Andrew-Beggs-ECMWF Feb 21, 2026
0a530fd
Fix PAPI using printf(...) vs fprintf(stderr,..)
Andrew-Beggs-ECMWF Feb 24, 2026
43cfd1c
Tmp debug outputs
Andrew-Beggs-ECMWF Feb 24, 2026
351d598
Add 'papi-tools' package for papi_avail
Andrew-Beggs-ECMWF Feb 24, 2026
7bb684d
Add DR_HOOK_PAPI on macos to list of excluded test configurations
Andrew-Beggs-ECMWF Feb 24, 2026
f469286
Tmp debug outputs
Andrew-Beggs-ECMWF Feb 24, 2026
eaee7f8
Tmp debug outputs
Andrew-Beggs-ECMWF Feb 24, 2026
5dc005d
Add hints to FindROCTX.cmake for modern ROCm structure
Andrew-Beggs-ECMWF Feb 24, 2026
e2e6dd1
Add alternative path for roctx.h for finding ROCM_PATH
Andrew-Beggs-ECMWF Feb 24, 2026
1a60bff
Refactor finding ROCM_PATH so find_package( rocprofiler-sdk-roctx ...…
Andrew-Beggs-ECMWF Feb 24, 2026
fadec7d
Update url to match AMD remote
Andrew-Beggs-ECMWF Feb 24, 2026
03aa077
Add rocprofiler-sdk package for DR_HOOK_ROCTX
Andrew-Beggs-ECMWF Feb 24, 2026
c30a52a
Add rocm/bin to PATH
Andrew-Beggs-ECMWF Feb 24, 2026
4a99a3a
Add rocm-comgr
Andrew-Beggs-ECMWF Feb 24, 2026
2f23d74
rocm-comgr -> comgr
Andrew-Beggs-ECMWF Feb 24, 2026
c5371aa
Add hsa-amd-aqlprofile package for DR_HOOK_ROCTX
Andrew-Beggs-ECMWF Feb 24, 2026
6c74927
Add 'NOPROPAGATE_SIGNALS' to fiat_test_drhook_roctx_mismatched_regions
Andrew-Beggs-ECMWF Feb 24, 2026
40eb050
Add --verbose to ctest
Andrew-Beggs-ECMWF Feb 25, 2026
564a523
Add --disable-signal-handlers to ROCTX tests that WILL_FAIL to preven…
Andrew-Beggs-ECMWF Feb 25, 2026
e625038
Add comments
Andrew-Beggs-ECMWF Feb 25, 2026
49b6061
Add NOPROPAGATE_SIGNALS
Andrew-Beggs-ECMWF Feb 25, 2026
526c576
Skip papi tests
Andrew-Beggs-ECMWF Feb 26, 2026
8259b2e
Change -E to -LE for label PAPI_BROKEN_GITHUB_CI
Andrew-Beggs-ECMWF Feb 27, 2026
ca41ec0
Only set opt_papi when DR_HOOK_HAVE_PAPI
Andrew-Beggs-ECMWF Feb 27, 2026
b18b027
Fix downstream detection of optional dependencies.
marsdeno Mar 3, 2026
94c05b9
Tidy-up left-over comments
marsdeno Mar 6, 2026
64a9c3b
Fix style
Andrew-Beggs-ECMWF Mar 10, 2026
4e4bc4e
Drop CI changes
Andrew-Beggs-ECMWF Mar 10, 2026
3b7da7a
Apply suggestion from @wdeconinck
Andrew-Beggs-ECMWF Mar 10, 2026
9a1206a
Remove ecbuild macros in Find modules
Andrew-Beggs-ECMWF Mar 10, 2026
6b2f8e1
Remove PAPI_BROKEN_GITHUB_CI label from tests
Andrew-Beggs-ECMWF Mar 10, 2026
90248cb
Install FindModules required for static linking
wdeconinck Mar 10, 2026
987be23
Remove spurious statement
wdeconinck Mar 13, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions AUTHORS
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
Authors and Contributors
========================

- A. Beggs (ECMWF)
- W. Deconinck (ECMWF)
- D. Dent (ECMWF)
- R. El Khatib (Meteo France)
Expand Down
11 changes: 11 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,17 @@ set( fiat_REQUIRES_PRIVATE_DEPENDENCIES FALSE )
get_target_property( target_build_type fiat TYPE )
if( target_build_type STREQUAL STATIC_LIBRARY OR TARGET fiat-static )
set( fiat_REQUIRES_PRIVATE_DEPENDENCIES TRUE )
# Make find_package modules available to downstream packages
foreach( find_module
FindNVTX.cmake
FindROCTX.cmake
FindPAPI.cmake )
ecbuild_warn_var(find_module)
if(NOT EXISTS "${CMAKE_CURRENT_BINARY_DIR}/${find_module}")
execute_process( COMMAND ${CMAKE_COMMAND} -E create_symlink "${CMAKE_CURRENT_SOURCE_DIR}/cmake/${find_module}" "${CMAKE_CURRENT_BINARY_DIR}/${find_module}" )
endif()
install( FILES "${CMAKE_CURRENT_SOURCE_DIR}/cmake/${find_module}" DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/fiat" )
endforeach()
endif()

ecbuild_install_project( NAME fiat )
Expand Down
25 changes: 12 additions & 13 deletions cmake/FindROCTX.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -6,22 +6,21 @@
# granted to it by virtue of its status as an intergovernmental organisation
# nor does it submit to any jurisdiction.

set( HAVE_ROCPROFILER_SDK_ROCTX 0)
set( HAVE_ROCPROFILER_SDK_ROCTX 0)
set( ROCTX_REQUIRED_VARS ROCTX_LIBRARIES )

find_package( rocprofiler-sdk-roctx CONFIG PATHS ${ROCM_PATH}/lib )
if( NOT rocprofiler-sdk-roctx_FOUND )
ecbuild_info( "rocprofiler-sdk-roctx libraries not found" )
if ( NOT DEFINED ROCM_PATH OR NOT ROCM_PATH_FOUND )
find_path(
if ( NOT DEFINED ROCM_PATH OR NOT ROCM_PATH_FOUND )
find_path(
ROCM_PATH
NAMES include/roctracer/roctx.h
NAMES include/roctracer/roctx.h include/rocprofiler-sdk-roctx/roctx.h
HINTS ENV ROCM_DIR ENV ROCM_PATH ENV HIP_PATH ENV ROCM_ROOT_DIR /opt/rocm
)
ecbuild_info( "ROCM path: ${ROCM_PATH}" )
endif()
)
endif()

find_path( ROCTX_INCLUDE_DIRS NAMES roctx.h HINTS ${ROCM_PATH}/include/roctracer/ )
find_package( rocprofiler-sdk-roctx CONFIG PATHS ${ROCM_PATH}/lib ${ROCM_PATH}/lib/cmake )
if( NOT rocprofiler-sdk-roctx_FOUND )

find_path( ROCTX_INCLUDE_DIRS NAMES roctx.h HINTS ${ROCM_PATH}/include/roctracer/ ${ROCM_PATH}/include/rocprofiler-sdk-roctx )
list( APPEND ROCTX_REQUIRED_VARS ROCTX_INCLUDE_DIRS )
find_path( ROCTX_LIBRARY_PATH NAMES libroctx64.so HINTS ${ROCM_PATH}/lib/ )

Expand All @@ -31,8 +30,8 @@ if( NOT rocprofiler-sdk-roctx_FOUND )
else()
if( TARGET ${rocprofiler-sdk-roctx_LIBRARIES} )
set( ROCTX_LIBRARIES ${rocprofiler-sdk-roctx_LIBRARIES} )
set( ROCTX_INCLUDE_DIRS ${rocprofiler-sdk-roctx_INCLUDE_DIR} )
list( APPEND ROCTX_REQUIRED_VARS ROCTX_INCLUDE_DIRS )
set( ROCTX_INCLUDE_DIRS ${rocprofiler-sdk-roctx_INCLUDE_DIR} )
list( APPEND ROCTX_REQUIRED_VARS ROCTX_INCLUDE_DIRS )
set( HAVE_ROCPROFILER_SDK_ROCTX 1 )
endif()
endif()
Expand Down
22 changes: 22 additions & 0 deletions cmake/fiat-import.cmake.in
Original file line number Diff line number Diff line change
Expand Up @@ -15,13 +15,17 @@ set( fiat_VERSION_STR @fiat_VERSION_STR@ )
set( fiat_HAVE_MPI @fiat_HAVE_MPI@ )
set( fiat_HAVE_OMP @fiat_HAVE_OMP@ )
set( fiat_HAVE_FCKIT @fiat_HAVE_FCKIT@ )
set( fiat_HAVE_DR_HOOK_NVTX @fiat_HAVE_DR_HOOK_NVTX@ )
set( fiat_HAVE_DR_HOOK_ROCTX @fiat_HAVE_DR_HOOK_ROCTX@ )
set( fiat_HAVE_DR_HOOK_PAPI @fiat_HAVE_DR_HOOK_PAPI@ )
set( fiat_HAVE_SINGLE_PRECISION @fiat_HAVE_SINGLE_PRECISION@ )
set( fiat_HAVE_DOUBLE_PRECISION @fiat_HAVE_DOUBLE_PRECISION@ )
set( fiat_HAVE_MPL_F08 @fiat_HAVE_MPL_F08@ )
set( fiat_REQUIRES_PRIVATE_DEPENDENCIES @fiat_REQUIRES_PRIVATE_DEPENDENCIES@ )

set( fiat_SOURCE_FILENAMES @fiat_SOURCE_FILENAMES@ )


if( fiat_HAVE_OMP AND NOT TARGET OpenMP::OpenMP_Fortran )
if( NOT CMAKE_Fortran_COMPILER_LOADED )
enable_language( Fortran )
Expand All @@ -39,6 +43,24 @@ if( fiat_HAVE_MPI AND NOT TARGET MPI::MPI_Fortran )
endif()
endif()

if (fiat_REQUIRES_PRIVATE_DEPENDENCIES)
set(BACKUP_CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH}")
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR})

if( fiat_HAVE_DR_HOOK_NVTX )
find_dependency( NVTX )
endif()

if( fiat_HAVE_DR_HOOK_ROCTX )
find_dependency( ROCTX )
endif()

if( fiat_HAVE_DR_HOOK_PAPI )
find_dependency( PAPI )
endif()
set(CMAKE_MODULE_PATH ${BACKUP_CMAKE_MODULE_PATH})
endif()

if( fiat_HAVE_FCKIT AND NOT TARGET fckit )
find_dependency( fckit HINTS ${CMAKE_CURRENT_LIST_DIR}/../fckit @fckit_DIR@ )
endif()
Expand Down
9 changes: 7 additions & 2 deletions src/fiat/drhook/drhook.c
Original file line number Diff line number Diff line change
Expand Up @@ -2659,8 +2659,11 @@ process_options()
char* opt_name = p;
/* Assume that everything is OFF by default */
if (strequ(p,"ALL")) { /* all except profiler data */
opt_papi = opt_gethwm = opt_getstk = opt_getrss = opt_getpag = opt_walltime = opt_cputime = opt_cycles = 1;
opt_gethwm = opt_getstk = opt_getrss = opt_getpag = opt_walltime = opt_cputime = opt_cycles = 1;
opt_calls = 1;
#ifdef DR_HOOK_HAVE_PAPI
opt_papi = 1;
#endif
any_memstat++;
}
else if (strequ(p,"MEM") || strequ(p,"MEMORY")) {
Expand Down Expand Up @@ -2732,7 +2735,9 @@ process_options()
opt_cpuprof = 0; /* Note: Switches cpuprof OFF */
opt_calls = 1;
opt_cycles = 1;
#ifdef DR_HOOK_HAVE_PAPI
opt_papi = 1;
#endif
}
else if (strequ(p,"CPUPROF")) {
opt_cpuprof = 1;
Expand Down Expand Up @@ -2824,7 +2829,7 @@ process_options()

#if defined(DR_HOOK_HAVE_PAPI)
if (opt_papi) {
newline = 0;
int newline = 0;
env = getenv("DR_HOOK_PAPI_COUNTERS");
if (env) {
const char delim[] = ", \t/";
Expand Down
70 changes: 35 additions & 35 deletions src/fiat/drhook/extensions/papi/drhook_papi.c
Original file line number Diff line number Diff line change
Expand Up @@ -75,14 +75,14 @@ void drhook_papi_print(char* s, long_long* a, int header){
PAPI_event_code_to_name(papi_counter_event_codes[i], event_name);
sprintf(&msg[strlen(msg)]," %16s",event_name);
}
printf("%s\n",msg);
fprintf(stderr, "%s\n",msg);
}

sprintf(msg,"%s",s);
for (int i=0;i<drhook_papi_num_counters();i++){
sprintf(&msg[strlen(msg)]," %16lld",a[i]);
}
printf("%s\n",msg);
fprintf(stderr, "%s\n",msg);
}

/* a = b - c (b or c == NULL means use current readings) */
Expand Down Expand Up @@ -133,16 +133,16 @@ long_long drhook_papi_read(int counterId){

int drhook_papi_readAll(long_long * counterArray){
if (drhook_papi_state!=drhook_papi_running){
printf("DRHOOK:PAPI: Error reading counters, papi is not running\n");
fprintf(stderr, "DRHOOK:PAPI: Error reading counters, papi is not running\n");
exit (1);
}
if (!drhook_papi_event_set){
printf("DRHOOK:PAPI: Error reading counters, eventset\n");
fprintf(stderr, "DRHOOK:PAPI: Error reading counters, eventset\n");
exit (1);
}
int err=PAPI_read(drhook_papi_event_set[papi_safe_thread_num()],counterArray);
if (err!=PAPI_OK){
printf("DRHOOK:PAPI:PAPI_read: Error reading counters, thread=%ld es=%d %s\n",papi_safe_thread_num(),drhook_papi_event_set[papi_safe_thread_num()],PAPI_strerror(err));
fprintf(stderr, "DRHOOK:PAPI:PAPI_read: Error reading counters, thread=%ld es=%d %s\n",papi_safe_thread_num(),drhook_papi_event_set[papi_safe_thread_num()],PAPI_strerror(err));
}
#if defined(DEBUG)
drhook_papi_print("readAll:",counterArray,0);
Expand Down Expand Up @@ -173,7 +173,7 @@ int drhook_papi_init(int rank){
drhook_papi_rank=rank;

if (oml_in_parallel()) {
printf("DRHOOK:PAPI: Error, tried to initialise from a parallel region :-(\n");
fprintf(stderr, "DRHOOK:PAPI: Error, tried to initialise from a parallel region :-(\n");
return 0;
}

Expand All @@ -183,35 +183,35 @@ int drhook_papi_init(int rank){
paperr=PAPI_library_init(PAPI_VER_CURRENT);
if (paperr != PAPI_VER_CURRENT) {
snprintf(pmsg,STD_MSG_LEN,"DRHOOK:PAPI:PAPI_library_init: ret code=%d version loaded =%d ", paperr,PAPI_VER_CURRENT);
printf("%s\n",pmsg);
fprintf(stderr, "%s\n",pmsg);
if (paperr > 0) {
snprintf(pmsg,STD_MSG_LEN,"DRHOOK:PAPI: Error, library version mismatch between compilation and run!\n");
printf("%s\n",pmsg);
fprintf(stderr, "%s\n",pmsg);
return 0;
}
if (paperr == PAPI_EINVAL){
snprintf(pmsg,STD_MSG_LEN,"DRHOOK:PAPI: Error, PAPI_EINVAL\n");
printf("%s\n",pmsg);
fprintf(stderr, "%s\n",pmsg);
return 0;
}
if (paperr == PAPI_ENOMEM){
snprintf(pmsg,STD_MSG_LEN,"DRHOOK:PAPI: Error, PAPI_ENOMEM\n");
printf("%s\n",pmsg);
fprintf(stderr, "%s\n",pmsg);
return 0;
}
if (paperr == PAPI_ESBSTR){
snprintf(pmsg,STD_MSG_LEN,"DRHOOK:PAPI: Error, PAPI_ESBSTR\n");
printf("%s\n",pmsg);
fprintf(stderr, "%s\n",pmsg);
return 0;
}
if (paperr == PAPI_ESYS){
snprintf(pmsg,STD_MSG_LEN,"DRHOOK:PAPI: Error, PAPI_ESYS\n");
printf("%s\n",pmsg);
fprintf(stderr, "%s\n",pmsg);
return 0;
}
else {
snprintf(pmsg,STD_MSG_LEN,"DRHOOK:PAPI: Error, unknown error code: %d\n", paperr);
printf("%s\n",pmsg);
fprintf(stderr, "%s\n",pmsg);
return 0;
}
}
Expand All @@ -224,7 +224,7 @@ int drhook_papi_init(int rank){

if( paperr != PAPI_OK ) {
snprintf(pmsg,STD_MSG_LEN,"DRHOOK:PAPI: Error, thread init failed (%s)",PAPI_strerror(paperr));
printf("%s\n",pmsg);
fprintf(stderr, "%s\n",pmsg);
return 0;
}

Expand All @@ -235,7 +235,7 @@ int drhook_papi_init(int rank){
nthreads);

if (drhook_papi_rank==0 && !silent) {
printf("%s\n",pmsg);
fprintf(stderr, "%s\n",pmsg);
}

drhook_papi_event_set=malloc_drhook(nthreads*sizeof(int));
Expand All @@ -252,7 +252,7 @@ int drhook_papi_init(int rank){

drhook_papi_state=drhook_papi_running;
if (drhook_papi_rank==0 && !silent) {
printf("DRHOOK:PAPI: Initialisation sucess\n");
fprintf(stderr, "DRHOOK:PAPI: Initialisation sucess\n");
}
return 1;
}
Expand All @@ -266,27 +266,27 @@ int drhook_papi_start_threads(int* events){
papiErr=PAPI_create_eventset(&events[thread]);
if (papiErr != PAPI_OK){
snprintf(pmsg,STD_MSG_LEN,"DRHOOK:PAPI: Error, create event set failed (%s) \n",PAPI_strerror(papiErr));
printf("%s\n",pmsg);
fprintf(stderr, "%s\n",pmsg);
return 0;
}

if (!silent) printf("DRHOOK:PAPI: Event set %d created for thread %d\n",events[thread],thread);
if (!silent) fprintf(stderr, "DRHOOK:PAPI: Event set %d created for thread %d\n",events[thread],thread);

if (!silent && drhook_papi_rank==0 && thread==0)
printf("DRHOOK:PAPI: Attempting to add events to event set:\n");
fprintf(stderr, "DRHOOK:PAPI: Attempting to add events to event set:\n");

for (int counter=0; counter < drhook_papi_num_counters(); counter ++) {
int eventCode;

if (!silent && drhook_papi_rank==0 && thread==0) {
snprintf(pmsg,STD_MSG_LEN,"DRHOOK:PAPI: %s", papi_counter_names[counter]);
printf("%s\n",pmsg);
fprintf(stderr, "%s\n",pmsg);
}

papiErr=PAPI_event_name_to_code(papi_counter_names[counter], &eventCode);
if (papiErr != PAPI_OK){
snprintf(pmsg,STD_MSG_LEN,"DRHOOK:PAPI: Error, event name to code failed for %s (%s)", papi_counter_names[counter], PAPI_strerror(papiErr));
printf("%s\n",pmsg);
fprintf(stderr, "%s\n",pmsg);
PAPI_perror("initPapi");
return 0;
}
Expand All @@ -295,33 +295,33 @@ int drhook_papi_start_threads(int* events){
papiErr=PAPI_add_event(events[thread],eventCode);
if (papiErr!=PAPI_OK){
snprintf(pmsg,STD_MSG_LEN,"DRHOOK:PAPI: Error, add_event failed: %d (%s)",papiErr,PAPI_strerror(papiErr));
printf("%s\n",pmsg);
fprintf(stderr, "%s\n",pmsg);
if (papiErr == PAPI_EINVAL) {
printf("Invalid argument. ");
fprintf(stderr, "Invalid argument. ");
}
else if (papiErr == PAPI_ENOMEM) {
printf("Out of memory. ");
fprintf(stderr, "Out of memory. ");
}
else if (papiErr == PAPI_ENOEVST) {
printf("EventSet does not exist. ");
fprintf(stderr, "EventSet does not exist. ");
}
else if (papiErr == PAPI_EISRUN) {
printf("EventSet is running. ");
fprintf(stderr, "EventSet is running. ");
}
else if (papiErr == PAPI_ECNFLCT) {
printf("Conflict. ");
fprintf(stderr, "Conflict. ");
}
else if (papiErr == PAPI_ENOEVNT) {
printf("Preset not available. ");
fprintf(stderr, "Preset not available. ");
}
printf("This is an error within PAPI and not DrHook. DrHook is only reporting the error it received.\n");
fprintf(stderr, "This is an error within PAPI and not DrHook. DrHook is only reporting the error it received.\n");
return 0;
}
else {
#if defined(DEBUG)
snprintf(pmsg,STD_MSG_LEN,"DRHOOK:PAPI: Added code=%d to Event set %d",eventCode, events[thread]);
if (thread==0) {
printf("%s\n",pmsg);
fprintf(stderr, "%s\n",pmsg);
}
#endif
}
Expand All @@ -332,31 +332,31 @@ int drhook_papi_start_threads(int* events){
papiErr = PAPI_list_events(events[thread], checkEvents, &number);
if (papiErr != PAPI_OK){
snprintf(pmsg,STD_MSG_LEN,"DRHOOK:PAPI: Error querying events - %d=%s",papiErr,PAPI_strerror(papiErr));
printf("%s\n",pmsg);
fprintf(stderr, "%s\n",pmsg);
return 0;
}
#if defined(DEBUG)
for (int counter=0;counter<number;counter++) {
snprintf(pmsg,STD_MSG_LEN,"DRHOOK:PAPI: Ev: %d=%d",counter,events[counter]);
printf("%s\n",pmsg);
fprintf(stderr, "%s\n",pmsg);
}
#endif

if (number != drhook_papi_num_counters()) {
snprintf(pmsg,STD_MSG_LEN,"DRHOOK:PAPI: Error checking events - expected=%d got=%d",drhook_papi_num_counters(),number);
printf("%s\n",pmsg);
fprintf(stderr, "%s\n",pmsg);
}

papiErr=PAPI_start(events[thread]);

if (papiErr != PAPI_OK) {
snprintf(pmsg,STD_MSG_LEN,"DRHOOK:PAPI: Error, starting counters failed (%d=%s)",papiErr,PAPI_strerror(papiErr));
printf("%s\n",pmsg);
fprintf(stderr, "%s\n",pmsg);
return 0;
}

#if defined(DEBUG)
printf("DRHOOK:PAPI: Started counting for thread %d \n",thread);
fprintf(stderr, "DRHOOK:PAPI: Started counting for thread %d \n",thread);
#endif

return 1;
Expand Down
Loading
Loading