From 077be41a4be38b32894306ec08676db4610754e7 Mon Sep 17 00:00:00 2001 From: Ed Hartnett Date: Tue, 9 Apr 2019 11:56:31 -0600 Subject: [PATCH 1/8] clean up --- src/gptl/f_wrappers_2.c | 111 +++++++++++++++++++++------------------- 1 file changed, 57 insertions(+), 54 deletions(-) diff --git a/src/gptl/f_wrappers_2.c b/src/gptl/f_wrappers_2.c index b4e37fa0465..1096573a0b7 100644 --- a/src/gptl/f_wrappers_2.c +++ b/src/gptl/f_wrappers_2.c @@ -1,11 +1,15 @@ /* -** Fortran wrappers for timing library routines +** Fortran wrappers for timing library routines that are not in GPTL. +* Ed Hartnett 4/9/19 */ #include #include #include "private.h" /* MAX_CHARS, bool */ #include "gptl.h" /* function prototypes and HAVE_MPI logic*/ +#ifdef HAVE_PAPI +#include +#endif /* HAVE_PAPI */ #define gptlevent_name_to_code gptlevent_name_to_code_ #define gptlevent_code_to_name gptlevent_code_to_name_ @@ -30,23 +34,23 @@ 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) -*/ + ** + ** 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)); + 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; + return 0; } #endif @@ -58,8 +62,8 @@ int GPTL_PAPIlibraryinit () int GPTLpr_set_append (void) { - pr_append = true; - return 0; + pr_append = true; + return 0; } /* @@ -69,10 +73,10 @@ int GPTLpr_set_append (void) int GPTLpr_query_append (void) { - if (pr_append) - return 1; - else - return 0; + if (pr_append) + return 1; + else + return 0; } /* @@ -82,8 +86,8 @@ int GPTLpr_query_append (void) int GPTLpr_set_write (void) { - pr_append = false; - return 0; + pr_append = false; + return 0; } /* @@ -93,10 +97,10 @@ int GPTLpr_set_write (void) int GPTLpr_query_write (void) { - if (pr_append) - return 0; - else - return 1; + if (pr_append) + return 0; + else + return 1; } @@ -106,77 +110,76 @@ int GPTLpr_query_write (void) int gptlpr_set_append (void) { - return GPTLpr_set_append (); + return GPTLpr_set_append (); } int gptlpr_query_append (void) { - return GPTLpr_set_append (); + return GPTLpr_set_append (); } int gptlpr_set_write (void) { - return GPTLpr_set_append (); + return GPTLpr_set_append (); } int gptlpr_query_write (void) { - return GPTLpr_set_append (); + return GPTLpr_set_append (); } #ifdef HAVE_PAPI -#include int gptl_papilibraryinit (void) { - return GPTL_PAPIlibraryinit (); + 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); + char cname[PAPI_MAX_STR_LEN+1]; + int numchars = MIN (nc, PAPI_MAX_STR_LEN); - strncpy (cname, str, numchars); - cname[numchars] = '\0'; + strncpy (cname, str, numchars); + cname[numchars] = '\0'; - /* "code" is an int* and is an output variable */ + /* "code" is an int* and is an output variable */ - return GPTLevent_name_to_code (cname, code); + 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; + + 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) { + int i; + for (i = strlen(str); i < nc; ++i) + str[i] = ' '; + } else { + return GPTLerror (""); + } + return 0; } #else int gptl_papilibraryinit (void) { - return 0; + return 0; } int gptlevent_name_to_code (const char *str, int *code, int nc) { - return GPTLevent_name_to_code (str, code); + 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); + return GPTLevent_code_to_name (*code, str); } #endif From cd22cf404fe028dea705ecaf01f835cb4d5bfa55 Mon Sep 17 00:00:00 2001 From: Ed Hartnett Date: Tue, 9 Apr 2019 13:24:33 -0600 Subject: [PATCH 2/8] adding some documentation --- tests/performance/Makefile.am | 2 +- tests/performance/Pioperformance.md | 20 ++++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 tests/performance/Pioperformance.md diff --git a/tests/performance/Makefile.am b/tests/performance/Makefile.am index 119dbdccfc5..d5a4e36402c 100644 --- a/tests/performance/Makefile.am +++ b/tests/performance/Makefile.am @@ -30,7 +30,7 @@ pioperformance_SOURCES = pioperformance.F90 # Tests will run from a bash script. #TESTS = run_tests.sh -EXTRA_DIST = CMakeLists.txt gensimple.pl +EXTRA_DIST = CMakeLists.txt gensimple.pl Pioperformance.md # Clean up files produced during testing. CLEANFILES = *.nc *.log *.mod diff --git a/tests/performance/Pioperformance.md b/tests/performance/Pioperformance.md new file mode 100644 index 00000000000..9587c598a61 --- /dev/null +++ b/tests/performance/Pioperformance.md @@ -0,0 +1,20 @@ +To run pioperformance you need a dof input file. I have a whole repo +of them here: +https://svn-ccsm-piodecomps.cgd.ucar.edu/trunk + +You need an input namelist: + +&pioperf +decompfile= '/gpfs/fs1/work/jedwards/sandboxes/piodecomps/576/piodecomp576tasks03dims01.dat', + pio_typenames = 'pnetcdf' + rearrangers = 1,2 + nframes = 1 + nvars = 1 + niotasks = 64, 32, 16 + / + +in the namelist all of the inputs are arrays and it will test all +combinations of the inputs. You need to run it on the number of tasks +specified by the input dof There are also some options to use simple +generated dof's instead of files. + From a8905ee10215c564d88feeec4c1cc9e22616017c Mon Sep 17 00:00:00 2001 From: Ed Hartnett Date: Wed, 10 Apr 2019 07:02:51 -0600 Subject: [PATCH 3/8] more work on pioperformance --- tests/performance/Makefile.am | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/performance/Makefile.am b/tests/performance/Makefile.am index d5a4e36402c..1a4641a2f87 100644 --- a/tests/performance/Makefile.am +++ b/tests/performance/Makefile.am @@ -23,9 +23,9 @@ AM_CPPFLAGS += -I$(top_builddir)/src/gptl AM_CPPFLAGS += -I$(top_builddir)/tests/general # Build the test for make check. -check_PROGRAMS = pioperformance +check_PROGRAMS = pioperf -pioperformance_SOURCES = pioperformance.F90 +pioperf_SOURCES = pioperformance.F90 # Tests will run from a bash script. #TESTS = run_tests.sh From ca6b558b1849edd6a12d53666bf29b81587194f2 Mon Sep 17 00:00:00 2001 From: Ed Hartnett Date: Wed, 10 Apr 2019 07:22:24 -0600 Subject: [PATCH 4/8] automated test for pioperformance --- tests/performance/Makefile.am | 4 ++-- tests/performance/pioperf.nl | 8 ++++++++ tests/performance/run_tests.sh | 30 ++++++++++++++++++++++++++++++ 3 files changed, 40 insertions(+), 2 deletions(-) create mode 100644 tests/performance/pioperf.nl create mode 100755 tests/performance/run_tests.sh diff --git a/tests/performance/Makefile.am b/tests/performance/Makefile.am index 1a4641a2f87..6d5d3dd8c07 100644 --- a/tests/performance/Makefile.am +++ b/tests/performance/Makefile.am @@ -28,9 +28,9 @@ check_PROGRAMS = pioperf pioperf_SOURCES = pioperformance.F90 # Tests will run from a bash script. -#TESTS = run_tests.sh +TESTS = run_tests.sh -EXTRA_DIST = CMakeLists.txt gensimple.pl Pioperformance.md +EXTRA_DIST = CMakeLists.txt gensimple.pl Pioperformance.md pioperf.nl # Clean up files produced during testing. CLEANFILES = *.nc *.log *.mod diff --git a/tests/performance/pioperf.nl b/tests/performance/pioperf.nl new file mode 100644 index 00000000000..cfa0349b4e4 --- /dev/null +++ b/tests/performance/pioperf.nl @@ -0,0 +1,8 @@ +&pioperf +decompfile= 'BLOCK', + pio_typenames = 'pnetcdf' + rearrangers = 1,2 + nframes = 1 + nvars = 1 + niotasks = 4 + / diff --git a/tests/performance/run_tests.sh b/tests/performance/run_tests.sh new file mode 100755 index 00000000000..780ad7b791d --- /dev/null +++ b/tests/performance/run_tests.sh @@ -0,0 +1,30 @@ +#!/bin/sh +# This is a test script for PIO for tests/performance directory. +# Ed Hartnett 4/10/19 + +# Stop execution of script if error is returned. +set -e + +# Stop loop if ctrl-c is pressed. +trap exit INT TERM + +printf 'running PIO performance test...\n' + +PIO_TESTS='pioperf ' + +success1=true +for TEST in $PIO_TESTS +do + success1=false + echo "running ${TEST}" + mpiexec -n 4 ./${TEST} && success1=true + if test $success1 = false; then + break + fi +done + +# Did we succeed? +if test x$success1 = xtrue; then + exit 0 +fi +exit 1 From e207ef04cfa09b794b67116f6582b4dda1407a20 Mon Sep 17 00:00:00 2001 From: Ed Hartnett Date: Wed, 10 Apr 2019 08:14:22 -0600 Subject: [PATCH 5/8] improved pioperf documentation --- configure.ac | 6 ++--- tests/performance/Pioperformance.md | 38 +++++++++++++++++++++++------ 2 files changed, 33 insertions(+), 11 deletions(-) diff --git a/configure.ac b/configure.ac index d6b64c9b7d9..c90167874ff 100644 --- a/configure.ac +++ b/configure.ac @@ -192,9 +192,9 @@ if test "x$enable_timing" = xyes; then AC_MSG_RESULT($have_papi) # We must have papi to build pioperformance with timing. - if test "x$have_papi" = xno; then - AC_MSG_ERROR([PAPI library not found, but is required if enable-timing is used.]) - fi + dnl if test "x$have_papi" = xno; then + dnl AC_MSG_ERROR([PAPI library not found, but is required if enable-timing is used.]) + dnl fi fi AM_CONDITIONAL([HAVE_PAPI], [test "x$have_papi" = xyes]) diff --git a/tests/performance/Pioperformance.md b/tests/performance/Pioperformance.md index 9587c598a61..7b6016efc3b 100644 --- a/tests/performance/Pioperformance.md +++ b/tests/performance/Pioperformance.md @@ -1,20 +1,42 @@ +# Using pioperf to Measure Performance + To run pioperformance you need a dof input file. I have a whole repo of them here: https://svn-ccsm-piodecomps.cgd.ucar.edu/trunk You need an input namelist: -&pioperf -decompfile= '/gpfs/fs1/work/jedwards/sandboxes/piodecomps/576/piodecomp576tasks03dims01.dat', - pio_typenames = 'pnetcdf' - rearrangers = 1,2 - nframes = 1 - nvars = 1 - niotasks = 64, 32, 16 - / + &pioperf + decompfile= '/gpfs/fs1/work/jedwards/sandboxes/piodecomps/576/piodecomp576tasks03dims01.dat', + pio_typenames = 'pnetcdf' + rearrangers = 1,2 + nframes = 1 + nvars = 1 + niotasks = 64, 32, 16 + / in the namelist all of the inputs are arrays and it will test all combinations of the inputs. You need to run it on the number of tasks specified by the input dof There are also some options to use simple generated dof's instead of files. +## Testing + +For the automated test you can generate a decomp internally by setting +decompfile="ROUNDROBIN", or decompfile="BLOCK" + +They call init_ideal_dof which internally generates a dof as follows: + + if(doftype .eq. 'ROUNDROBIN') then + do i=1,varsize + compmap(i) = (i-1)*npe+mype+1 + enddo + else if(doftype .eq. 'BLOCK') then + do i=1,varsize + compmap(i) = (i+varsize*mype) + enddo + endif + +The size of the variable is npes*varsize where varsize can be set in +the namelist. + From 9b8bafb666a23f63e8cb6111217b072c2051ac4d Mon Sep 17 00:00:00 2001 From: Ed Hartnett Date: Wed, 10 Apr 2019 12:52:17 -0600 Subject: [PATCH 6/8] bumped version and also added more doc for pioperformance --- configure.ac | 6 +++--- tests/performance/Pioperformance.md | 20 ++++++++++++++++++++ 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/configure.ac b/configure.ac index c90167874ff..61b9b87aad3 100644 --- a/configure.ac +++ b/configure.ac @@ -2,19 +2,19 @@ ## Ed Hartnett 8/16/17 # Initialize autoconf and automake. -AC_INIT(pio, 2.4.1) +AC_INIT(pio, 2.4.2-development) AC_CONFIG_SRCDIR(src/clib/pio_darray.c) AM_INIT_AUTOMAKE([foreign serial-tests]) # The PIO version, again. AC_DEFINE([PIO_VERSION_MAJOR], [2], [PIO major version]) AC_DEFINE([PIO_VERSION_MINOR], [4], [PIO minor version]) -AC_DEFINE([PIO_VERSION_PATCH], [1], [PIO patch version]) +AC_DEFINE([PIO_VERSION_PATCH], [2], [PIO patch version]) # Once more for the documentation. AC_SUBST([VERSION_MAJOR], [2]) AC_SUBST([VERSION_MINOR], [4]) -AC_SUBST([VERSION_PATCH], [1]) +AC_SUBST([VERSION_PATCH], [2]) # The m4 directory holds macros for autoconf. AC_CONFIG_MACRO_DIR([m4]) diff --git a/tests/performance/Pioperformance.md b/tests/performance/Pioperformance.md index 7b6016efc3b..c6ce7f0fafc 100644 --- a/tests/performance/Pioperformance.md +++ b/tests/performance/Pioperformance.md @@ -40,3 +40,23 @@ They call init_ideal_dof which internally generates a dof as follows: The size of the variable is npes*varsize where varsize can be set in the namelist. +When this is run, output like the following will appear: + + mpiexec -n 4 ./pioperf + (t_initf) Read in prof_inparm namelist from: pioperf.nl + Testing decomp: BLOCK + iotype= 1 + pioperformance.F90 298 Frame: 1 + pioperformance.F90 301 var: 1 + RESULT: write BOX 1 4 1 0.0319221529 + RESULT: read BOX 1 4 1 0.1658564029 + pioperformance.F90 298 Frame: 1 + pioperformance.F90 301 var: 1 + RESULT: write SUBSET 1 4 1 0.0438470950 + RESULT: read SUBSET 1 4 1 0.1623275432 + +These are read and write rates in units of MB/s for Box and Subset +rearrangers - the time measured is from the call to readdof or +writedof to the completion of the close (since writes are buffered the +close needs to be included) . + From 0b2d445f0384f9574fc63b6f7b0d11cf17002ee7 Mon Sep 17 00:00:00 2001 From: Ed Hartnett Date: Wed, 10 Apr 2019 14:37:22 -0600 Subject: [PATCH 7/8] more work on getting pioperformance working on theia --- configure.ac | 34 ++++++++++++++++------------ tests/performance/Pioperformance.md | 3 ++- tests/performance/pioperf.nl | 9 ++++---- tests/performance/pioperformance.F90 | 4 ++-- 4 files changed, 28 insertions(+), 22 deletions(-) diff --git a/configure.ac b/configure.ac index 61b9b87aad3..329dcaa37d5 100644 --- a/configure.ac +++ b/configure.ac @@ -63,6 +63,13 @@ if test "x$enable_timing" = xyes; then fi AM_CONDITIONAL(USE_GPTL, [test "x$enable_timing" = xyes]) +# Does the user want to disable papi? +AC_MSG_CHECKING([whether PAPI should be enabled (if enable-timing is used)]) +AC_ARG_ENABLE([papi], [AS_HELP_STRING([--disable-papi], + [disable PAPI library use])]) +test "x$enable_papi" = xno || enable_papi=yes +AC_MSG_RESULT($enable_papi) + # Does the user want to enable Fortran library? AC_MSG_CHECKING([whether Fortran library should be build]) AC_ARG_ENABLE([fortran], @@ -92,7 +99,7 @@ AM_CONDITIONAL(BUILD_DOCS, [test "x$enable_docs" = xyes]) # Is doxygen installed? AC_CHECK_PROGS([DOXYGEN], [doxygen]) -if test -z "$DOXYGEN" -a test "x$enable_docs" = xyes; then +if test -z "$DOXYGEN" -a "x$enable_docs" = xyes; then AC_MSG_ERROR([Doxygen not found but --enable-docs used.]) fi @@ -177,24 +184,21 @@ if test "x$enable_timing" = xyes; then AC_CHECK_LIB([papi], [PAPI_library_init]) AC_MSG_CHECKING([whether system can support PAPI]) have_papi=no - if test "x$ac_cv_lib_papi_PAPI_library_init" = xyes; then - # If we have PAPI library, check /proc/sys/kernel/perf_event_paranoid - # to see if we have permissions. - if test -f /proc/sys/kernel/perf_event_paranoid; then - if test `cat /proc/sys/kernel/perf_event_paranoid` != 1; then - AC_MSG_ERROR([PAPI library found, but /proc/sys/kernel/perf_event_paranoid != 1 - try sudo sh -c 'echo 1 >/proc/sys/kernel/perf_event_paranoid']) + if test $enable_papi = yes; then + if test "x$ac_cv_lib_papi_PAPI_library_init" = xyes; then + # If we have PAPI library, check /proc/sys/kernel/perf_event_paranoid + # to see if we have permissions. + if test -f /proc/sys/kernel/perf_event_paranoid; then + if test `cat /proc/sys/kernel/perf_event_paranoid` != 1; then + AC_MSG_ERROR([PAPI library found, but /proc/sys/kernel/perf_event_paranoid != 1 + try sudo sh -c 'echo 1 >/proc/sys/kernel/perf_event_paranoid']) + fi fi + AC_DEFINE([HAVE_PAPI], [1], [PAPI library is present and usable]) + have_papi=yes fi - AC_DEFINE([HAVE_PAPI], [1], [PAPI library is present and usable]) - have_papi=yes fi AC_MSG_RESULT($have_papi) - - # We must have papi to build pioperformance with timing. - dnl if test "x$have_papi" = xno; then - dnl AC_MSG_ERROR([PAPI library not found, but is required if enable-timing is used.]) - dnl fi fi AM_CONDITIONAL([HAVE_PAPI], [test "x$have_papi" = xyes]) diff --git a/tests/performance/Pioperformance.md b/tests/performance/Pioperformance.md index c6ce7f0fafc..efe7c611045 100644 --- a/tests/performance/Pioperformance.md +++ b/tests/performance/Pioperformance.md @@ -38,7 +38,8 @@ They call init_ideal_dof which internally generates a dof as follows: endif The size of the variable is npes*varsize where varsize can be set in -the namelist. +the namelist. varsize is the variable array size per task. You can add +variables by changing nvars in the namelist. When this is run, output like the following will appear: diff --git a/tests/performance/pioperf.nl b/tests/performance/pioperf.nl index cfa0349b4e4..29314215b7d 100644 --- a/tests/performance/pioperf.nl +++ b/tests/performance/pioperf.nl @@ -1,8 +1,9 @@ &pioperf decompfile= 'BLOCK', - pio_typenames = 'pnetcdf' + pio_typenames = 'pnetcdf' 'netcdf4p' 'netcdf4c' 'netcdf' rearrangers = 1,2 - nframes = 1 - nvars = 1 + nframes = 10 + nvars = 10 niotasks = 4 - / + varsize = 10000000 +/ diff --git a/tests/performance/pioperformance.F90 b/tests/performance/pioperformance.F90 index fcccde581ca..3f2af05954a 100644 --- a/tests/performance/pioperformance.F90 +++ b/tests/performance/pioperformance.F90 @@ -295,10 +295,10 @@ subroutine pioperformancetest(filename, piotypes, mype, npe_base, & call PIO_InitDecomp(iosystem, PIO_DOUBLE, gdims, compmap, iodesc_r8, rearr=rearr) #endif endif - if(mype==0) print *,__FILE__,__LINE__,'Frame: ',recnum + !if(mype==0) print *,__FILE__,__LINE__,'Frame: ',recnum do nv=1,nvars - if(mype==0) print *,__FILE__,__LINE__,'var: ',nv + !if(mype==0) print *,__FILE__,__LINE__,'var: ',nv #ifdef VARINT call PIO_setframe(File, vari(nv), recnum) call pio_write_darray(File, vari(nv), iodesc_i4, ifld(:,nv) , ierr, fillval= PIO_FILL_INT) From 8976ba814bbf05d7bff16fd3d23d789a17e2cd35 Mon Sep 17 00:00:00 2001 From: Ed Hartnett Date: Thu, 11 Apr 2019 06:11:30 -0600 Subject: [PATCH 8/8] cleaned up docs --- configure.ac | 2 +- src/gptl/Makefile.am | 2 +- src/gptl/perf_mod.F90 | 18 +++++++++--------- tests/performance/Makefile.am | 3 ++- tests/performance/Pioperformance.md | 5 ++--- 5 files changed, 15 insertions(+), 15 deletions(-) diff --git a/configure.ac b/configure.ac index 329dcaa37d5..7ea837ac930 100644 --- a/configure.ac +++ b/configure.ac @@ -71,7 +71,7 @@ test "x$enable_papi" = xno || enable_papi=yes AC_MSG_RESULT($enable_papi) # Does the user want to enable Fortran library? -AC_MSG_CHECKING([whether Fortran library should be build]) +AC_MSG_CHECKING([whether Fortran library should be built]) AC_ARG_ENABLE([fortran], [AS_HELP_STRING([--enable-fortran], [build the PIO Fortran library.])]) diff --git a/src/gptl/Makefile.am b/src/gptl/Makefile.am index 840e07abca9..54216d4ffa9 100644 --- a/src/gptl/Makefile.am +++ b/src/gptl/Makefile.am @@ -10,7 +10,7 @@ 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 +libperf_mod_la_SOURCES = perf_mod.F90 f_wrappers_2.c private.h # Each mod file depends on the .o file. perf_utils.mod: perf_utils.$(OBJEXT) diff --git a/src/gptl/perf_mod.F90 b/src/gptl/perf_mod.F90 index e62059de98e..622d5cf2c12 100644 --- a/src/gptl/perf_mod.F90 +++ b/src/gptl/perf_mod.F90 @@ -913,12 +913,12 @@ subroutine t_prf(filename, mpicom, num_outpe, stride_outpe, & unitn = shr_file_getUnit() ! determine what the current output mode is (append or write) - if (GPTLpr_query_write() == 1) then - pr_write = .true. - ierr = GPTLpr_set_append() - else - pr_write=.false. - endif + ! if (GPTLpr_query_write() == 1) then + ! pr_write = .true. + ! ierr = GPTLpr_set_append() + ! else + pr_write=.false. + ! endif ! Determine whether to write all data to a single fie if (present(single_file)) then @@ -1100,9 +1100,9 @@ subroutine t_prf(filename, mpicom, num_outpe, stride_outpe, & call shr_file_freeUnit( unitn ) ! reset GPTL output mode - if (pr_write) then - ierr = GPTLpr_set_write() - endif + ! if (pr_write) then + ! ierr = GPTLpr_set_write() + ! endif !$OMP END MASTER call t_stopf("t_prf") diff --git a/tests/performance/Makefile.am b/tests/performance/Makefile.am index 6d5d3dd8c07..6b7bfb5ec23 100644 --- a/tests/performance/Makefile.am +++ b/tests/performance/Makefile.am @@ -30,7 +30,8 @@ pioperf_SOURCES = pioperformance.F90 # Tests will run from a bash script. TESTS = run_tests.sh -EXTRA_DIST = CMakeLists.txt gensimple.pl Pioperformance.md pioperf.nl +EXTRA_DIST = CMakeLists.txt gensimple.pl Pioperformance.md pioperf.nl \ +run_tests.sh # Clean up files produced during testing. CLEANFILES = *.nc *.log *.mod diff --git a/tests/performance/Pioperformance.md b/tests/performance/Pioperformance.md index efe7c611045..186e489e8d3 100644 --- a/tests/performance/Pioperformance.md +++ b/tests/performance/Pioperformance.md @@ -2,7 +2,7 @@ To run pioperformance you need a dof input file. I have a whole repo of them here: -https://svn-ccsm-piodecomps.cgd.ucar.edu/trunk + You need an input namelist: @@ -59,5 +59,4 @@ When this is run, output like the following will appear: These are read and write rates in units of MB/s for Box and Subset rearrangers - the time measured is from the call to readdof or writedof to the completion of the close (since writes are buffered the -close needs to be included) . - +close needs to be included). \ No newline at end of file