forked from CESM-Development/cime
-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request ESMCI#1393 from NCAR/ejh_pioperformance
First pass at building pioperformance with autotools and externally installed GPTL
- Loading branch information
Showing
6 changed files
with
302 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
# This is part of PIO. It creates the Makefile for the GPTL directory. | ||
|
||
# Ed Hartnett 4/9/19 | ||
|
||
# Turn off parallel builds in this directory. | ||
.NOTPARALLEL: | ||
|
||
# Build these uninstalled convenience libraries. | ||
noinst_LTLIBRARIES = libperf_utils.la libperf_mod.la | ||
|
||
# The convenience libraries depends on their source. | ||
libperf_utils_la_SOURCES = perf_utils.F90 | ||
libperf_mod_la_SOURCES = perf_mod.F90 f_wrappers_2.c | ||
|
||
# Each mod file depends on the .o file. | ||
perf_utils.mod: perf_utils.$(OBJEXT) | ||
perf_mod.mod: perf_mod.$(OBJEXT) | ||
|
||
# Does the user want to build fortran? | ||
#if BUILD_FORTRAN | ||
#endif | ||
|
||
EXTRA_DIST = CMakeLists.txt |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,182 @@ | ||
/* | ||
** Fortran wrappers for timing library routines | ||
*/ | ||
|
||
#include <string.h> | ||
#include <stdlib.h> | ||
#include "private.h" /* MAX_CHARS, bool */ | ||
#include "gptl.h" /* function prototypes and HAVE_MPI logic*/ | ||
|
||
#define gptlevent_name_to_code gptlevent_name_to_code_ | ||
#define gptlevent_code_to_name gptlevent_code_to_name_ | ||
#define gptlpr_set_append gptlpr_set_append_ | ||
#define gptlpr_query_append gptlpr_query_append_ | ||
#define gptlpr_set_write gptlpr_set_write_ | ||
#define gptlpr_query_write gptlpr_query_write_ | ||
|
||
/* | ||
** Local function prototypes | ||
*/ | ||
|
||
int gptlpr_set_append (void); | ||
int gptlpr_query_append (void); | ||
int gptlpr_set_write (void); | ||
int gptlpr_query_write (void); | ||
static int pr_append; | ||
|
||
#ifdef HAVE_PAPI | ||
/* int gptl_papilibraryinit (void); */ | ||
int gptlevent_name_to_code (const char *str, int *code, int nc); | ||
int gptlevent_code_to_name (int *code, char *str, int nc); | ||
|
||
/** GPTL_PAPIlibraryinit: Call PAPI_library_init if necessary | ||
** | ||
** Return value: 0 (success) or GPTLerror (failure) | ||
*/ | ||
|
||
int GPTL_PAPIlibraryinit () | ||
{ | ||
int ret; | ||
|
||
if ((ret = PAPI_is_initialized ()) == PAPI_NOT_INITED) { | ||
if ((ret = PAPI_library_init (PAPI_VER_CURRENT)) != PAPI_VER_CURRENT) { | ||
fprintf (stderr, "GPTL_PAPIlibraryinit: ret=%d PAPI_VER_CURRENT=%d\n", | ||
ret, (int) PAPI_VER_CURRENT); | ||
return GPTLerror ("GPTL_PAPIlibraryinit: PAPI_library_init failure:%s\n", | ||
PAPI_strerror (ret)); | ||
} | ||
} | ||
return 0; | ||
} | ||
|
||
#endif | ||
|
||
/* | ||
** GPTLpr_set_append: set GPTLpr_file and GPTLpr_summary_file | ||
** to use append mode | ||
*/ | ||
|
||
int GPTLpr_set_append (void) | ||
{ | ||
pr_append = true; | ||
return 0; | ||
} | ||
|
||
/* | ||
** GPTLpr_query_append: query whether GPTLpr_file and GPTLpr_summary_file | ||
** use append mode | ||
*/ | ||
|
||
int GPTLpr_query_append (void) | ||
{ | ||
if (pr_append) | ||
return 1; | ||
else | ||
return 0; | ||
} | ||
|
||
/* | ||
** GPTLpr_set_write: set GPTLpr_file and GPTLpr_summary_file | ||
** to use write mode | ||
*/ | ||
|
||
int GPTLpr_set_write (void) | ||
{ | ||
pr_append = false; | ||
return 0; | ||
} | ||
|
||
/* | ||
** GPTLpr_query_write: query whether GPTLpr_file and GPTLpr_summary_file | ||
** use write mode | ||
*/ | ||
|
||
int GPTLpr_query_write (void) | ||
{ | ||
if (pr_append) | ||
return 0; | ||
else | ||
return 1; | ||
} | ||
|
||
|
||
/* | ||
** Fortran wrapper functions start here | ||
*/ | ||
|
||
int gptlpr_set_append (void) | ||
{ | ||
return GPTLpr_set_append (); | ||
} | ||
|
||
int gptlpr_query_append (void) | ||
{ | ||
return GPTLpr_set_append (); | ||
} | ||
|
||
int gptlpr_set_write (void) | ||
{ | ||
return GPTLpr_set_append (); | ||
} | ||
|
||
int gptlpr_query_write (void) | ||
{ | ||
return GPTLpr_set_append (); | ||
} | ||
|
||
#ifdef HAVE_PAPI | ||
#include <papi.h> | ||
|
||
int gptl_papilibraryinit (void) | ||
{ | ||
return GPTL_PAPIlibraryinit (); | ||
} | ||
|
||
int gptlevent_name_to_code (const char *str, int *code, int nc) | ||
{ | ||
char cname[PAPI_MAX_STR_LEN+1]; | ||
int numchars = MIN (nc, PAPI_MAX_STR_LEN); | ||
|
||
strncpy (cname, str, numchars); | ||
cname[numchars] = '\0'; | ||
|
||
/* "code" is an int* and is an output variable */ | ||
|
||
return GPTLevent_name_to_code (cname, code); | ||
} | ||
|
||
int gptlevent_code_to_name (int *code, char *str, int nc) | ||
{ | ||
int i; | ||
|
||
if (nc < PAPI_MAX_STR_LEN) | ||
return GPTLerror ("gptl_event_code_to_name: output name must hold at least %d characters\n", | ||
PAPI_MAX_STR_LEN); | ||
|
||
if (GPTLevent_code_to_name (*code, str) == 0) { | ||
for (i = strlen(str); i < nc; ++i) | ||
str[i] = ' '; | ||
} else { | ||
return GPTLerror (""); | ||
} | ||
return 0; | ||
} | ||
|
||
#else | ||
|
||
int gptl_papilibraryinit (void) | ||
{ | ||
return 0; | ||
} | ||
|
||
int gptlevent_name_to_code (const char *str, int *code, int nc) | ||
{ | ||
return GPTLevent_name_to_code (str, code); | ||
} | ||
|
||
int gptlevent_code_to_name (const int *code, char *str, int nc) | ||
{ | ||
return GPTLevent_code_to_name (*code, str); | ||
} | ||
|
||
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
## This is the automake file for building the Fortran performance | ||
## tests for the PIO library. | ||
|
||
# Ed Hartnett 4/6/19 | ||
|
||
# Parallel builds don't currently work in this directory. | ||
.NOTPARALLEL: | ||
|
||
# Put together AM_CPPFLAGS and AM_LDFLAGS. | ||
include $(top_srcdir)/set_flags.am | ||
|
||
# Link to test util library and PIO Fortran and C libs. | ||
LDADD = $(top_builddir)/src/gptl/libperf_mod.la \ | ||
$(top_builddir)/src/gptl/libperf_utils.la \ | ||
${top_builddir}/tests/general/libpio_tutil.la \ | ||
${top_builddir}/src/flib/libpiof.la \ | ||
${top_builddir}/src/clib/libpio.la | ||
|
||
# Find perf_mod and perf_util. | ||
AM_CPPFLAGS += -I$(top_builddir)/src/gptl | ||
|
||
# Find pio_tutil.mod | ||
AM_CPPFLAGS += -I$(top_builddir)/tests/general | ||
|
||
# Build the test for make check. | ||
check_PROGRAMS = pioperformance | ||
|
||
pioperformance_SOURCES = pioperformance.F90 | ||
|
||
# Tests will run from a bash script. | ||
#TESTS = run_tests.sh | ||
|
||
EXTRA_DIST = CMakeLists.txt gensimple.pl | ||
|
||
# Clean up files produced during testing. | ||
CLEANFILES = *.nc *.log *.mod |