From 3e37c6d201b66b9cf45a2469ab41932281087f6e Mon Sep 17 00:00:00 2001 From: Joerg Henrichs Date: Sun, 8 Dec 2024 22:37:32 +1100 Subject: [PATCH 1/7] #2773 Added first version of library and added it to an gocean example. --- examples/gocean/eg5/profile/Makefile | 13 +++ lib/profiling/vernier/Makefile | 70 ++++++++++++ lib/profiling/vernier/README.md | 154 ++++++++++++++++++++++++++ lib/profiling/vernier/vernier_psy.f90 | 146 ++++++++++++++++++++++++ 4 files changed, 383 insertions(+) create mode 100644 lib/profiling/vernier/Makefile create mode 100644 lib/profiling/vernier/README.md create mode 100644 lib/profiling/vernier/vernier_psy.f90 diff --git a/examples/gocean/eg5/profile/Makefile b/examples/gocean/eg5/profile/Makefile index 923282f227..53f6149d30 100644 --- a/examples/gocean/eg5/profile/Makefile +++ b/examples/gocean/eg5/profile/Makefile @@ -87,6 +87,16 @@ drhook: PROFILE_LINK="-L $(DRHOOK_DIR)/build/lib -ldrhook" \ drhook_lib $(NAME).drhook +# Needs to additionally link with the Vernier library +# As default assume Vernier is installed 'next' to PSyclone +VERNIER_DIR?=$(ROOT_DIR)/../vernier +vernier: + $(MAKE) WRAPPER_DIR="$(PROFILE_DIR)/vernier" \ + WRAPPER_NAME="vernier_psy" \ + PROFILE_LINK="-L $(VERNIER_DIR)/local/lib \ + -lvernier_f -lvernier_c -lvernier" \ + $(NAME).vernier + TAU_DIR?=$(ROOT_DIR)/../tau # By adding the dependency to INF_LIB here, we will be invoking the original # compiler, not tau_f90.sh (since we don't want to instrument the whole @@ -146,6 +156,9 @@ $(INF_LIB): drhook_lib : $(MAKE) DRHOOK_ROOT=$(DRHOOK_DIR) -C $(WRAPPER_DIR) +vernier_lib : + $(MAKE) VERNIER_ROOT=$(VERNIER_DIR) -C $(WRAPPER_DIR) + tau_lib : $(MAKE) F90=tau_f90.sh TAU_ROOT=$(TAU_DIR) -C $(WRAPPER_DIR) diff --git a/lib/profiling/vernier/Makefile b/lib/profiling/vernier/Makefile new file mode 100644 index 0000000000..6ebbd9f521 --- /dev/null +++ b/lib/profiling/vernier/Makefile @@ -0,0 +1,70 @@ +# ----------------------------------------------------------------------------- +# BSD 3-Clause License +# +# Copyright (c) 2019-2024, Science and Technology Facilities Council. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. +# +# * Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# * Neither the name of the copyright holder nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# ----------------------------------------------------------------------------- +# Author J. Henrichs, Bureau of Meteorology +# Modified I. Kavcic, Met Office + +# ----------- Default "make" values, can be overwritten by the user ----------- +# Compiler and compiler flags +F90 ?= gfortran +F90FLAGS ?= +# Path to the Vernier installation. It defaults to the assumed location +# of the Vernier directory next to a clone of PSyclone repository. +# Overwrite for a custom location. +VERNIER_ROOT ?= ./../../../../vernier +# Path to the DrHook "include" files. Overwrite for a custom location. +VERNIER_INCLUDE ?= $(VERNIER_ROOT)/src/f +VERNIER_MODULES ?= $(VERNIER_ROOT)/local/include +# ----------------------------------------------------------------------------- + +F90FLAGS += -I$(VERNIER_INCLUDE) -I$(VERNIER_MODULES) + +PSYDATA_LIB_NAME = vernier_psy +PSYDATA_LIB = lib$(PSYDATA_LIB_NAME).a + +OBJS = vernier_psy.o + +default: $(PSYDATA_LIB) + +.PHONY: default clean allclean + +$(PSYDATA_LIB): $(OBJS) + ar rs $(PSYDATA_LIB) $(OBJS) + +%.o: %.f90 + $(F90) $(F90FLAGS) -c $< + +clean: + rm -f *.o *.mod $(PSYDATA_LIB) + +allclean: clean diff --git a/lib/profiling/vernier/README.md b/lib/profiling/vernier/README.md new file mode 100644 index 0000000000..b2b16d7bca --- /dev/null +++ b/lib/profiling/vernier/README.md @@ -0,0 +1,154 @@ +# PSyclone Wrapper Library for Dr Hook + +This is a wrapper library that maps the [PSyclone profiling API]( +https://psyclone.readthedocs.io/en/stable/profiling.html#profiling) +to [Vernier](https://github.com/MetOffice/Vernier). + +## Dependencies + +Vernier must be installed. + +This profiling library uses the [PSyData API]( +https://psyclone.readthedocs.io/en/stable/psy_data.html) to interface with +the application. The library is based on the [PSyData base class]( +https://psyclone-dev.readthedocs.io/en/latest/psy_data.html#psydata-base-class), +which is included in PSyclone as a Jinja template, ``psy_data_base.jinja``. +Full documentation on using this template is provided in the PSyclone +[Developer Guide]( +https://psyclone-dev.readthedocs.io/en/latest/psy_data.html#jinja). + +The library uses the ``ProfileData`` type to store Dr Hook's handle for each +region. + +## Compilation + +The library is compiled with ``make`` using the provided ``Makefile``. The +environment variables ``$F90`` and ``$F90FLAGS`` can be set to point to the +[Fortran compiler](./../../README.md#compilation) and flags to use. They +default to ``gfortran`` and the empty string. + +In the version tested here, 1.0.0, it appears that the installation target +in the Dr Hook distribution is broken, so the following instructions and +the default values assume that Dr Hook is compiled in a ``drhook`` +subdirectory called ``build`` and not installed. + +To compile the PSyclone wrapper library for Dr Hook, one of the following +two ``Makefile`` variables must be set to specify the path to the Dr Hook +installation: + +- ``DRHOOK_ROOT``, the path to the Dr Hook root directory in which + Dr Hook is compiled. It defaults to ``./../../../../drhook`` in the + ``Makefile`` (i.e., it assumes Dr Hook is installed next to a PSyclone + repository clone). This will set ``DRHOOK_INCLUDE`` to + ``.../drhook/include`` and ``DRHOOK_MODULES`` to + ``.../drhook/build/module``, so that the ``*.mod`` files created in the + build processes are found. + +- ``DRHOOK_INCLUDE`` and ``DRHOOK_MODULES``: Setting these environment + variables explicitly will allow to flexibly point to an existing + Dr Hook installation. + +**Note**, it is not known whether a proper Dr Hook installation will +install ``include`` and ``*.mod`` files in separate directories. + +For instance, compiling the wrapper library with the default compiler +flags may look something like: + +```shell +DRHOOK_ROOT= make +``` + +The compilation process will create the wrapper library ``libdrhook_psy.a``. + +### Linking the wrapper library + +In order to use the wrapper with your application, you must provide the +location of the wrapper as an ``include`` path (so that the module file is found), +and link first with the wrapper library, then the DrHook library: + +In order to use the wrapper with your application, the location of this +library must be provided as an ``include`` path (so that the module file +is found), and linked first with the wrapper library, ``drhook_psy``, +and then with the Dr Hook library: + +```shell +$(F90) -c ... -I /lib/profiling/drhook somefile.f90 +$(F90) -o a.out ... -L /lib/profiling/drhook -ldrhook_psy \ + -L -ldrhook +``` + +**Note:** + +- The name of the Dr Hook library might depend on the way it is compiled. + +- The ```` differs depending on whether the wrapper + library is compiled in a clone of PSyclone repository or in a PSyclone + [installation](./../../README.md#installation). + +## Output + +An example output of the profiling report is below: + +``` +Profiling information for program='./profile_test.drhook', proc#1: + No. of instrumented routines called : 2 + Instrumentation started : 20200929 161905 + Instrumentation ended : 20200929 161905 + Instrumentation overhead: 12.12% + Memory usage : 70 MBytes (heap), 70 MBytes (rss), 0 MBytes (stack), 0 (paging) + Wall-time is 0.00 sec on proc#1 (1 procs, 4 threads) + Thread#1: 0.00 sec (100.00%) + Thread#2: 0.00 sec (0.00%) + Thread#3: 0.00 sec (0.00%) + Thread#4: 0.00 sec (0.00%) + + # % Time Cumul Self Total # of calls Self Total Routine@ + (Size; Size/sec; Size/call; MinSize; MaxSize) + (self) (sec) (sec) (sec) ms/call ms/call + + 1 78.38 0.000 0.000 0.000 1 0.01 0.01 psy_test:invoke_0:r0@1 + 2 21.62 0.000 0.000 0.000 1 0.00 0.00 psy_test:invoke_1_update_field:update_field_code:r0@1 + +``` + + diff --git a/lib/profiling/vernier/vernier_psy.f90 b/lib/profiling/vernier/vernier_psy.f90 new file mode 100644 index 0000000000..380c3aab9e --- /dev/null +++ b/lib/profiling/vernier/vernier_psy.f90 @@ -0,0 +1,146 @@ +! ----------------------------------------------------------------------------- +! BSD 3-Clause License +! +! Copyright (c) 2024, Science and Technology Facilities Council. +! All rights reserved. +! +! Redistribution and use in source and binary forms, with or without +! modification, are permitted provided that the following conditions are met: +! +! * Redistributions of source code must retain the above copyright notice, this +! list of conditions and the following disclaimer. +! +! * Redistributions in binary form must reproduce the above copyright notice, +! this list of conditions and the following disclaimer in the documentation +! and/or other materials provided with the distribution. +! +! * Neither the name of the copyright holder nor the names of its +! contributors may be used to endorse or promote products derived from +! this software without specific prior written permission. +! +! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +! AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +! IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +! DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +! FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +! DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +! SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +! CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +! OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +! OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +! ----------------------------------------------------------------------------- +! Author J. Henrichs, Bureau of Meteorology + + +!> An implemention of the PSyData API for profiling which wraps the use of Vernier. + +module profile_psy_data_mod + + ! The DrHook handle type + use vernier_mod, only : vik + implicit none + + type :: profile_PSyDataType + ! The opaque Vernier handle for a specific region + integer (kind=vik) :: vernier_handle + ! The name of the subroutine and module to be used by DrHook + character(:), allocatable :: name + ! True if this instance of PSyDataType has the name already + ! initialised. This way the copy of subroutine name is only + ! done first time PreStart is called. + logical :: initialised = .false. + contains + ! The profiling API uses only the two following calls: + procedure :: PreStart + procedure :: PostEnd + end type profile_PSyDataType + +contains + + ! --------------------------------------------------------------------------- + !> The initialisation subroutine. It is not called directly from + !! any PSyclone created code, so a call to profile_PSyDataInit must be + !! inserted manually by the developer. In case of Dr Hook an initialisation + !! is not necessary. + + subroutine profile_PSyDataInit() + use vernier_mod, only: vernier_init + implicit none + call vernier_init(1) + end subroutine profile_PSyDataInit + + ! --------------------------------------------------------------------------- + !> Starts a profiling area. The module and region name can be used to create + !! a unique name for each region. + !! Parameters: + !! @param[in,out] this This PSyData instance. + !! @param[in] module_name Name of the module in which the region is + !! @param[in] region_name Name of the region (could be name of an invoke, or + !! subroutine name). + !! @param[in] num_pre_vars The number of variables that are declared and + !! written before the instrumented region. + !! @param[in] num_post_vars The number of variables that are also declared + !! before an instrumented region of code, but are written after + !! this region. + + subroutine PreStart(this, module_name, region_name, num_pre_vars, & + num_post_vars) + + use vernier_mod, only : vernier_start + implicit none + + class(profile_PSyDataType), intent(inout), target :: this + character(len=*), intent(in) :: module_name, region_name + integer, intent(in) :: num_pre_vars, num_post_vars + + if (.not. this%initialised) then + ! Venier only supports a single name, so we store the concatenated + ! strings to reduce runtime overhead + this%name = module_name//":"//region_name + this%initialised = .true. + endif + call vernier_start(this%vernier_handle, this%name) + + end subroutine PreStart + + ! --------------------------------------------------------------------------- + !! Ends a profiling area. It takes a PSyDataType type that corresponds to + !! to the PreStart call. + !! @param[in,out] this This PSyData instance. + ! + subroutine PostEnd(this) + + use vernier_mod, only : vernier_stop + + implicit none + + class(profile_PSyDataType), intent(inout), target :: this + + call vernier_stop(this%vernier_handle) + + end subroutine PostEnd + + ! --------------------------------------------------------------------------- + !> Called at the end of the execution of a program, usually to generate + !! all output for the profiling library. Not required in the case of Dr Hook. + subroutine profile_PSyDataShutdown() + use vernier_mod, only : vernier_finalize, vernier_write + + implicit none + call vernier_write() + call vernier_finalize() + end subroutine profile_PSyDataShutdown + + ! --------------------------------------------------------------------------- + !> Enable Vernier. + subroutine profile_PSyDataStart() + implicit none + end subroutine profile_PSyDataStart + + ! --------------------------------------------------------------------------- + !> Disable Vernier. + subroutine profile_PSyDataStop() + implicit none + end subroutine profile_PSyDataStop + +end module profile_psy_data_mod From fb4a772367d78ca91c546122f2a31d09488d9cfb Mon Sep 17 00:00:00 2001 From: Joerg Henrichs Date: Mon, 9 Dec 2024 18:46:01 +1100 Subject: [PATCH 2/7] #2773 Updated READMEs. --- examples/gocean/eg5/profile/.gitignore | 1 + lib/profiling/README.md | 26 ++++++++ lib/profiling/drhook/README.md | 4 -- lib/profiling/vernier/.gitignore | 1 + lib/profiling/vernier/Makefile | 5 +- lib/profiling/vernier/README.md | 86 ++++++++++---------------- lib/profiling/vernier/vernier_psy.f90 | 9 ++- 7 files changed, 67 insertions(+), 65 deletions(-) create mode 100644 lib/profiling/vernier/.gitignore diff --git a/examples/gocean/eg5/profile/.gitignore b/examples/gocean/eg5/profile/.gitignore index 59e6b0edc8..418b50f206 100644 --- a/examples/gocean/eg5/profile/.gitignore +++ b/examples/gocean/eg5/profile/.gitignore @@ -2,3 +2,4 @@ alg.f90 psy.f90 profile_test* timer.txt +vernier-output-* diff --git a/lib/profiling/README.md b/lib/profiling/README.md index 7c6f1b1b53..53bfe78539 100644 --- a/lib/profiling/README.md +++ b/lib/profiling/README.md @@ -86,6 +86,32 @@ Example output: ============================================================================= ``` +### [Vernier](./vernier) + +This wrapper library interfaces with UK Met Office's [Vernier library]( +https://github.com/MetOffice/Vernier). Detailed building and linking +instructions are in [``veriner/README.md``]( +./vernier/README.md). + +Note that Vernier writes the output to one file per MPI rank, called +e.g. `vernier-output-0`. Example profiling output: + +``` +$ less vernier-output-0 +Profiling on 8 thread(s). + + # % Time Cumul Self Total # of calls Self Total Routine@ + (Size; Size/sec; Size/call; MinSize; MaxSize) + (self) (sec) (sec) (sec) ms/call ms/call + + 1 100.000 1.496 1.496 1.496 1 1496.066 1496.066 skeleton_constants_mod_psy:invoke_create_de_rham_matrices-compute_derham_matrices_code-r0@0 + 2 0.425 1.502 0.006 0.006 5 1.271 1.271 lfric_xios_setup_mod_psy:invoke_1_nodal_coordinates_kernel_type-nodal_coordinates_code-r1@0 + 3 0.368 1.508 0.006 0.006 10 0.550 0.550 skeleton_alg_mod_psy:invoke_compute_divergence-matrix_vector_code-r2@0 + 4 0.318 1.513 0.005 0.005 1 4.754 4.754 lfric_xios_setup_mod_psy:invoke_0_nodal_xyz_coordinates_kernel_type-nodal_xyz_coordinates_code-r0@0 +... + +``` + ### [Dr Hook](./drhook) This wrapper library interfaces with the ECMWF Dr Hook library. This diff --git a/lib/profiling/drhook/README.md b/lib/profiling/drhook/README.md index 96b47a910a..f24bd0cacb 100644 --- a/lib/profiling/drhook/README.md +++ b/lib/profiling/drhook/README.md @@ -64,10 +64,6 @@ The compilation process will create the wrapper library ``libdrhook_psy.a``. ### Linking the wrapper library -In order to use the wrapper with your application, you must provide the -location of the wrapper as an ``include`` path (so that the module file is found), -and link first with the wrapper library, then the DrHook library: - In order to use the wrapper with your application, the location of this library must be provided as an ``include`` path (so that the module file is found), and linked first with the wrapper library, ``drhook_psy``, diff --git a/lib/profiling/vernier/.gitignore b/lib/profiling/vernier/.gitignore new file mode 100644 index 0000000000..46dc25175e --- /dev/null +++ b/lib/profiling/vernier/.gitignore @@ -0,0 +1 @@ +libdrhook_psy.a diff --git a/lib/profiling/vernier/Makefile b/lib/profiling/vernier/Makefile index 6ebbd9f521..3edd17ec17 100644 --- a/lib/profiling/vernier/Makefile +++ b/lib/profiling/vernier/Makefile @@ -42,12 +42,11 @@ F90FLAGS ?= # of the Vernier directory next to a clone of PSyclone repository. # Overwrite for a custom location. VERNIER_ROOT ?= ./../../../../vernier -# Path to the DrHook "include" files. Overwrite for a custom location. -VERNIER_INCLUDE ?= $(VERNIER_ROOT)/src/f +# Path to the Vernier "include" files. Overwrite for a custom location. VERNIER_MODULES ?= $(VERNIER_ROOT)/local/include # ----------------------------------------------------------------------------- -F90FLAGS += -I$(VERNIER_INCLUDE) -I$(VERNIER_MODULES) +F90FLAGS += -I$(VERNIER_MODULES) PSYDATA_LIB_NAME = vernier_psy PSYDATA_LIB = lib$(PSYDATA_LIB_NAME).a diff --git a/lib/profiling/vernier/README.md b/lib/profiling/vernier/README.md index b2b16d7bca..cca3c36ce1 100644 --- a/lib/profiling/vernier/README.md +++ b/lib/profiling/vernier/README.md @@ -1,4 +1,4 @@ -# PSyclone Wrapper Library for Dr Hook +# PSyclone Wrapper Library for Vernier This is a wrapper library that maps the [PSyclone profiling API]( https://psyclone.readthedocs.io/en/stable/profiling.html#profiling) @@ -17,7 +17,7 @@ Full documentation on using this template is provided in the PSyclone [Developer Guide]( https://psyclone-dev.readthedocs.io/en/latest/psy_data.html#jinja). -The library uses the ``ProfileData`` type to store Dr Hook's handle for each +The library uses the ``ProfileData`` type to store a Vernier handle for each region. ## Compilation @@ -27,87 +27,68 @@ environment variables ``$F90`` and ``$F90FLAGS`` can be set to point to the [Fortran compiler](./../../README.md#compilation) and flags to use. They default to ``gfortran`` and the empty string. -In the version tested here, 1.0.0, it appears that the installation target -in the Dr Hook distribution is broken, so the following instructions and -the default values assume that Dr Hook is compiled in a ``drhook`` -subdirectory called ``build`` and not installed. - -To compile the PSyclone wrapper library for Dr Hook, one of the following -two ``Makefile`` variables must be set to specify the path to the Dr Hook +To compile the PSyclone wrapper library for Vernier, one of the following +two ``Makefile`` variables must be set to specify the path to the Vernier installation: +VERNIER_ROOT ?= ./../../../../vernier -- ``DRHOOK_ROOT``, the path to the Dr Hook root directory in which - Dr Hook is compiled. It defaults to ``./../../../../drhook`` in the - ``Makefile`` (i.e., it assumes Dr Hook is installed next to a PSyclone - repository clone). This will set ``DRHOOK_INCLUDE`` to - ``.../drhook/include`` and ``DRHOOK_MODULES`` to - ``.../drhook/build/module``, so that the ``*.mod`` files created in the - build processes are found. +- ``VERNIER_ROOT``, the path to the Vernier root directory in which + Vernier is compiled and installed. It defaults to ``./../../../../vernier`` + in the ``Makefile`` (i.e., it assumes Vernier is installed next to a PSyclone + repository clone). This will set ``VERNIER_MODULES`` to + ``.../vernier/local/include``, so that the ``*.mod`` for Vernier + can be found. -- ``DRHOOK_INCLUDE`` and ``DRHOOK_MODULES``: Setting these environment +- ``VERNIER_MODULES``: Setting these environment variables explicitly will allow to flexibly point to an existing - Dr Hook installation. - -**Note**, it is not known whether a proper Dr Hook installation will -install ``include`` and ``*.mod`` files in separate directories. + Vernier installation. For instance, compiling the wrapper library with the default compiler flags may look something like: ```shell -DRHOOK_ROOT= make +VERNIER_ROOT= make ``` -The compilation process will create the wrapper library ``libdrhook_psy.a``. +The compilation process will create the wrapper library ``libvernier_psy.a``. ### Linking the wrapper library -In order to use the wrapper with your application, you must provide the -location of the wrapper as an ``include`` path (so that the module file is found), -and link first with the wrapper library, then the DrHook library: - In order to use the wrapper with your application, the location of this library must be provided as an ``include`` path (so that the module file -is found), and linked first with the wrapper library, ``drhook_psy``, -and then with the Dr Hook library: +is found), and linked first with the wrapper library, ``vernier_psy``, +and then with the Vernier library: ```shell -$(F90) -c ... -I /lib/profiling/drhook somefile.f90 -$(F90) -o a.out ... -L /lib/profiling/drhook -ldrhook_psy \ - -L -ldrhook +$(F90) -c ... -I /lib/profiling/vernier somefile.f90 +$(F90) -o a.out ... -L /lib/profiling/vernier -lvernier_psy \ + -L -lvernier_f -lvernier_c -lvernier ``` **Note:** -- The name of the Dr Hook library might depend on the way it is compiled. - - The ```` differs depending on whether the wrapper library is compiled in a clone of PSyclone repository or in a PSyclone [installation](./../../README.md#installation). ## Output -An example output of the profiling report is below: +An example output of the profiling report is below. Note that Vernier +writes the output into rank-specific output files, the output is not +added to stdout: ``` -Profiling information for program='./profile_test.drhook', proc#1: - No. of instrumented routines called : 2 - Instrumentation started : 20200929 161905 - Instrumentation ended : 20200929 161905 - Instrumentation overhead: 12.12% - Memory usage : 70 MBytes (heap), 70 MBytes (rss), 0 MBytes (stack), 0 (paging) - Wall-time is 0.00 sec on proc#1 (1 procs, 4 threads) - Thread#1: 0.00 sec (100.00%) - Thread#2: 0.00 sec (0.00%) - Thread#3: 0.00 sec (0.00%) - Thread#4: 0.00 sec (0.00%) - - # % Time Cumul Self Total # of calls Self Total Routine@ +Profiling on 8 thread(s). + + # % Time Cumul Self Total # of calls Self Total Routine@ (Size; Size/sec; Size/call; MinSize; MaxSize) - (self) (sec) (sec) (sec) ms/call ms/call + (self) (sec) (sec) (sec) ms/call ms/call - 1 78.38 0.000 0.000 0.000 1 0.01 0.01 psy_test:invoke_0:r0@1 - 2 21.62 0.000 0.000 0.000 1 0.00 0.00 psy_test:invoke_1_update_field:update_field_code:r0@1 + 1 100.000 1.496 1.496 1.496 1 1496.066 1496.066 skeleton_constants_mod_psy:invoke_create_de_rham_matrices-compute_derham_matrices_code-r0@0 + 2 0.425 1.502 0.006 0.006 5 1.271 1.271 lfric_xios_setup_mod_psy:invoke_1_nodal_coordinates_kernel_type-nodal_coordinates_code-r1@0 + 3 0.368 1.508 0.006 0.006 10 0.550 0.550 skeleton_alg_mod_psy:invoke_compute_divergence-matrix_vector_code-r2@0 + 4 0.318 1.513 0.005 0.005 1 4.754 4.754 lfric_xios_setup_mod_psy:invoke_0_nodal_xyz_coordinates_kernel_type-nodal_xyz_coordinates_code-r0@0 + 5 0.195 1.516 0.003 0.003 3 0.971 0.971 lfric_xios_setup_mod_psy:invoke_2_nodal_coordinates_kernel_type-nodal_coordinates_code-r2@0 ``` @@ -118,7 +99,7 @@ Profiling information for program='./profile_test.drhook', proc#1: BSD 3-Clause License -Copyright (c) 2019-2024, Science and Technology Facilities Council. +Copyright (c) 2024, Science and Technology Facilities Council. All rights reserved. Redistribution and use in source and binary forms, with or without @@ -150,5 +131,4 @@ POSSIBILITY OF SUCH DAMAGE. ------------------------------------------------------------------------------- Authors: J. Henrichs, Bureau of Meteorology, - I. Kavcic, Met Office --> diff --git a/lib/profiling/vernier/vernier_psy.f90 b/lib/profiling/vernier/vernier_psy.f90 index 380c3aab9e..26eb713190 100644 --- a/lib/profiling/vernier/vernier_psy.f90 +++ b/lib/profiling/vernier/vernier_psy.f90 @@ -36,14 +36,14 @@ module profile_psy_data_mod - ! The DrHook handle type + ! The Vernier handle type use vernier_mod, only : vik implicit none type :: profile_PSyDataType ! The opaque Vernier handle for a specific region integer (kind=vik) :: vernier_handle - ! The name of the subroutine and module to be used by DrHook + ! The name of the subroutine and module to be used by Vernier character(:), allocatable :: name ! True if this instance of PSyDataType has the name already ! initialised. This way the copy of subroutine name is only @@ -60,8 +60,7 @@ module profile_psy_data_mod ! --------------------------------------------------------------------------- !> The initialisation subroutine. It is not called directly from !! any PSyclone created code, so a call to profile_PSyDataInit must be - !! inserted manually by the developer. In case of Dr Hook an initialisation - !! is not necessary. + !! inserted manually by the developer. subroutine profile_PSyDataInit() use vernier_mod, only: vernier_init @@ -122,7 +121,7 @@ end subroutine PostEnd ! --------------------------------------------------------------------------- !> Called at the end of the execution of a program, usually to generate - !! all output for the profiling library. Not required in the case of Dr Hook. + !! all output for the profiling library. subroutine profile_PSyDataShutdown() use vernier_mod, only : vernier_finalize, vernier_write From 79d99aff0189be2f4f4885d754912dd36547f00e Mon Sep 17 00:00:00 2001 From: Joerg Henrichs Date: Mon, 9 Dec 2024 22:51:30 +1100 Subject: [PATCH 3/7] #2773 Updated Makefile to support vernier. --- doc/developer_guide/psy_data.rst | 4 ++-- doc/user_guide/profiling.rst | 22 ++++++++++++++-------- doc/user_guide/tutorials_and_examples.rst | 2 +- lib/profiling/Makefile | 14 ++++++++------ 4 files changed, 25 insertions(+), 17 deletions(-) diff --git a/doc/developer_guide/psy_data.rst b/doc/developer_guide/psy_data.rst index d13d9b80d8..1955dd822e 100644 --- a/doc/developer_guide/psy_data.rst +++ b/doc/developer_guide/psy_data.rst @@ -72,8 +72,8 @@ the same time as checking that read-only values are indeed not modified, different module names and data types must be used. PSyData divides its application into different classes. For example, -the class "profile" is used for all profiling tools (e.g. TAU, DrHook or the -NVIDIA profiling tools). This class name is used as a prefix for +the class "profile" is used for all profiling tools (e.g. TAU, Vernier, +DrHook, or the NVIDIA profiling tools). This class name is used as a prefix for the module name, the ``PSyDataType`` and functions. So if a profiling application is linked the above code will actually look like this:: diff --git a/doc/user_guide/profiling.rst b/doc/user_guide/profiling.rst index 9755d1b088..fb65a5b895 100644 --- a/doc/user_guide/profiling.rst +++ b/doc/user_guide/profiling.rst @@ -51,9 +51,9 @@ transformation within a transformation script. PSyclone can be used with a variety of existing profiling tools. -It currently supports dl_timer, TAU, Dr Hook, the NVIDIA GPU profiling -tools and it comes with a simple stand-alone timer library. The -:ref:`PSyData API ` (see also the +It currently supports dl_timer, TAU, Vernier, Dr Hook, the NVIDIA GPU +profiling tools and it comes with a simple stand-alone timer library. +The :ref:`PSyData API ` (see also the :ref:`Developer Guide `) is utilised to implement wrapper libraries that connect the PSyclone application to the profiling libraries. Certain adjustments to @@ -77,8 +77,8 @@ Interface to Third Party Profiling Tools ---------------------------------------- PSyclone comes with :ref:`wrapper libraries ` to support -usage of TAU, Dr Hook, dl_timer, NVTX (NVIDIA Tools Extension library), -and a simple non-thread-safe timing library. Support for further +usage of TAU, Vernier, Dr Hook, dl_timer, NVTX (NVIDIA Tools Extension +library), and a simple non-thread-safe timing library. Support for further profiling libraries will be added in the future. To compile the wrapper libraries, change into the directory ``lib/profiling`` of PSyclone and type ``make`` to compile all wrappers. If only @@ -107,23 +107,29 @@ libraries that come with PSyclone: ``lib/profiling/dl_timer`` This wrapper uses the apeg-dl_timer library. In order to use this wrapper, you must download and install the dl_timer library - from ``https://bitbucket.org/apeg/dl_timer``. This library has + from https://bitbucket.org/apeg/dl_timer. This library has various compile-time options and may be built with MPI or OpenMP support. Additional link options might therefore be required (e.g. enabling OpenMP, or linking with MPI). ``lib/profiling/tau`` This wrapper uses TAU profiling and tracing toolkit. It can be - downloaded from ``https://www.cs.uoregon.edu/research/tau``. + downloaded from https://www.cs.uoregon.edu/research/tau. ``lib/profiling/drhook`` This wrapper uses the Dr Hook library. You need to contact ECMWF to obtain a copy of Dr Hook. +``lib/profiling/vernier`` + This wrapper uses the UK Met Office's Vernier library. It can be + downloaded from https://github.com/MetOffice/Vernier. This + library writes its output to files ``vernier-out-``, and + will overwrite existing output files. + ``lib/profiling/nvidia`` This is a wrapper library that maps the PSyclone profiling API to the NVIDIA Tools Extension library (NVTX). This library is - available from ``https://developer.nvidia.com/cuda-toolkit``. + available from https://developer.nvidia.com/cuda-toolkit. ``lib/profiling/lfric_timer`` This profile wrapper uses the timer functionality provided by diff --git a/doc/user_guide/tutorials_and_examples.rst b/doc/user_guide/tutorials_and_examples.rst index e29c13383d..6a56b0c250 100644 --- a/doc/user_guide/tutorials_and_examples.rst +++ b/doc/user_guide/tutorials_and_examples.rst @@ -317,7 +317,7 @@ Example 5.2: Profiling This example shows how to use the profiling support in PSyclone. It instruments two invoke statements and can link in with any of the following profiling wrapper libraries: template, -simple_timer, dl_timer, TAU, and DrHook (see +simple_timer, dl_timer, TAU, Vernier, and DrHook (see :ref:`profiling_third_party_tools`). The ``README.md`` file contains detailed instructions on how to build the different executables. By default (i.e. just using ``make`` diff --git a/lib/profiling/Makefile b/lib/profiling/Makefile index 33c0eaecd5..bc9cb0ea71 100644 --- a/lib/profiling/Makefile +++ b/lib/profiling/Makefile @@ -41,11 +41,12 @@ F90 ?= gfortran F90FLAGS ?= -g # ----------------------------------------------------------------------------- -# We don't build dl_timer, drhook, nvidia, and tau since they require -# external libraries to be available. +# We don't build dl_timer, drhook, nvidia, Vernier, and tau since they +# require external libraries to be available. ALL_LIBS = lfric_timer simple_timing template -.PHONY: default all $(ALL_LIBS) clean allclean +.PHONY: default all $(ALL_LIBS) clean allclean \ + dl_timer drhook nvidia tau vernier default: all @@ -53,7 +54,7 @@ all: $(ALL_LIBS) # Invoke make in the corresponding subdirectory, and also support # the wrapper that need additional software to be installed -$(ALL_LIBS) dl_timer drhook nvidia tau: +$(ALL_LIBS) dl_timer drhook nvidia tau vernier: $(MAKE) -C $@ clean: @@ -62,7 +63,8 @@ clean: allclean: clean # These libs are not cleaned by 'clean' (since they # depend on external libraries) - $(MAKE) -C nvidia clean - $(MAKE) -C drhook clean $(MAKE) -C dl_timer clean + $(MAKE) -C drhook clean + $(MAKE) -C nvidia clean $(MAKE) -C tau clean + $(MAKE) -C vernier clean From 7ee801eb2e8944c2dbc354f710a3537726fe88ea Mon Sep 17 00:00:00 2001 From: Joerg Henrichs Date: Tue, 10 Dec 2024 09:31:04 +1100 Subject: [PATCH 4/7] #2773 Minor documentation update. --- doc/developer_guide/psy_data.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/developer_guide/psy_data.rst b/doc/developer_guide/psy_data.rst index 1955dd822e..f947fbebb8 100644 --- a/doc/developer_guide/psy_data.rst +++ b/doc/developer_guide/psy_data.rst @@ -101,7 +101,7 @@ The class prefixes supported at the moment are: Class Prefix Description ======================= ======================================================= profile All libraries related to profiling tools like TAU, - DrHook, NVIDIA's profiling tools etc. See + DrHook, NVIDIA's profiling tools, Vernier etc. See :ref:`user_guide:profiling` for details. extract For libraries used for kernel data extraction. See :ref:`user_guide:psyke` for details. @@ -970,7 +970,7 @@ by storing pointers to the profiling data to be able to print all results in a ProfileFinalise() subroutine. Some of the wrapper libraries use the PSyData base class (e.g. dl_timer, simple_timing, template), others do not (e.g. NVIDIA profiling, TAU, -DrHook wrapper). +Vernier, DrHook wrapper). .. _psyke: From 5b195af50adafc12b19abbfb0e6bf3900fd89954 Mon Sep 17 00:00:00 2001 From: Joerg Henrichs Date: Mon, 6 Jan 2025 11:53:54 +1100 Subject: [PATCH 5/7] #2773 Changed default vernier directory to be capitalised. --- examples/gocean/eg5/profile/Makefile | 2 +- examples/gocean/eg5/profile/README.md | 4 ++++ lib/profiling/vernier/Makefile | 2 +- lib/profiling/vernier/README.md | 6 +++--- 4 files changed, 9 insertions(+), 5 deletions(-) diff --git a/examples/gocean/eg5/profile/Makefile b/examples/gocean/eg5/profile/Makefile index 53f6149d30..190c94003b 100644 --- a/examples/gocean/eg5/profile/Makefile +++ b/examples/gocean/eg5/profile/Makefile @@ -89,7 +89,7 @@ drhook: # Needs to additionally link with the Vernier library # As default assume Vernier is installed 'next' to PSyclone -VERNIER_DIR?=$(ROOT_DIR)/../vernier +VERNIER_DIR?=$(ROOT_DIR)/../Vernier vernier: $(MAKE) WRAPPER_DIR="$(PROFILE_DIR)/vernier" \ WRAPPER_NAME="vernier_psy" \ diff --git a/examples/gocean/eg5/profile/README.md b/examples/gocean/eg5/profile/README.md index 929e2e20a1..3786ddfc7e 100644 --- a/examples/gocean/eg5/profile/README.md +++ b/examples/gocean/eg5/profile/README.md @@ -70,6 +70,10 @@ The location of the LFRic infrastructure library. It defaults to which is the small, stand-alone LFRic infrastructure library that is included in PSyclone. In spite of the dependence on LFRic, this profiling wrapper library can be used with with any application. +### VERNIER_DIR +The location of the Vernier library. It defaults to +``../../../../../Vernier``, i.e. it is assumed that Vernier is +installed next to PSyclone. The makefile here will invoke psyclone with the ``--profile invokes`` flag, which will add profiling around the two invokes used in the example. diff --git a/lib/profiling/vernier/Makefile b/lib/profiling/vernier/Makefile index 3edd17ec17..892b0e92a5 100644 --- a/lib/profiling/vernier/Makefile +++ b/lib/profiling/vernier/Makefile @@ -41,7 +41,7 @@ F90FLAGS ?= # Path to the Vernier installation. It defaults to the assumed location # of the Vernier directory next to a clone of PSyclone repository. # Overwrite for a custom location. -VERNIER_ROOT ?= ./../../../../vernier +VERNIER_ROOT ?= ./../../../../Vernier # Path to the Vernier "include" files. Overwrite for a custom location. VERNIER_MODULES ?= $(VERNIER_ROOT)/local/include # ----------------------------------------------------------------------------- diff --git a/lib/profiling/vernier/README.md b/lib/profiling/vernier/README.md index cca3c36ce1..85980104d3 100644 --- a/lib/profiling/vernier/README.md +++ b/lib/profiling/vernier/README.md @@ -30,13 +30,13 @@ default to ``gfortran`` and the empty string. To compile the PSyclone wrapper library for Vernier, one of the following two ``Makefile`` variables must be set to specify the path to the Vernier installation: -VERNIER_ROOT ?= ./../../../../vernier +VERNIER_ROOT ?= ./../../../../Vernier - ``VERNIER_ROOT``, the path to the Vernier root directory in which - Vernier is compiled and installed. It defaults to ``./../../../../vernier`` + Vernier is compiled and installed. It defaults to ``./../../../../Vernier`` in the ``Makefile`` (i.e., it assumes Vernier is installed next to a PSyclone repository clone). This will set ``VERNIER_MODULES`` to - ``.../vernier/local/include``, so that the ``*.mod`` for Vernier + ``.../Vernier/local/include``, so that the ``*.mod`` for Vernier can be found. - ``VERNIER_MODULES``: Setting these environment From 19cea42a054eda7af72615ba80753919df7f2506 Mon Sep 17 00:00:00 2001 From: Joerg Henrichs Date: Mon, 6 Jan 2025 11:55:00 +1100 Subject: [PATCH 6/7] #2773 Fixed other issues raised in review. --- examples/gocean/eg5/profile/README.md | 7 ++++--- lib/profiling/Makefile | 4 ++-- lib/profiling/README.md | 2 +- lib/profiling/vernier/README.md | 2 +- 4 files changed, 8 insertions(+), 7 deletions(-) diff --git a/examples/gocean/eg5/profile/README.md b/examples/gocean/eg5/profile/README.md index 3786ddfc7e..733f3cdda8 100644 --- a/examples/gocean/eg5/profile/README.md +++ b/examples/gocean/eg5/profile/README.md @@ -17,6 +17,7 @@ profile wrapper libraries: - drhook - lfric - tau +- vernier By default (``make`` without an argument) the ``template`` library will be used, which just prints the name of the regions called. @@ -43,9 +44,9 @@ it yourself, and make sure that the ``tau_f90.sh`` compiler wrapper is in your path. The Makefile will automatically call ``tau_f90.sh``, there is no need to set ``$F90`` in this case. -If you are using ``dl_timer`` or ``drhook``, you need to compile these -libraries yourself first, and modify the ``Makefile`` in this directory -to specify the required linking parameters. The ``Makefile`` +If you are using ``dl_timer``, ``vernier`` or ``drhook``, you need to +compile these libraries yourself first, and modify the ``Makefile`` in +this directory to specify the required linking parameters. The ``Makefile`` supports the following environment variables that can be defined to find the various software packages: diff --git a/lib/profiling/Makefile b/lib/profiling/Makefile index bc9cb0ea71..2daa9fbf6f 100644 --- a/lib/profiling/Makefile +++ b/lib/profiling/Makefile @@ -41,8 +41,8 @@ F90 ?= gfortran F90FLAGS ?= -g # ----------------------------------------------------------------------------- -# We don't build dl_timer, drhook, nvidia, Vernier, and tau since they -# require external libraries to be available. +# We don't build dl_timer, drhook, nvidia, Vernier, and tau by default +# since they require external libraries to be available. ALL_LIBS = lfric_timer simple_timing template .PHONY: default all $(ALL_LIBS) clean allclean \ diff --git a/lib/profiling/README.md b/lib/profiling/README.md index 53bfe78539..bba647a1b4 100644 --- a/lib/profiling/README.md +++ b/lib/profiling/README.md @@ -90,7 +90,7 @@ Example output: This wrapper library interfaces with UK Met Office's [Vernier library]( https://github.com/MetOffice/Vernier). Detailed building and linking -instructions are in [``veriner/README.md``]( +instructions are in [``vernier/README.md``]( ./vernier/README.md). Note that Vernier writes the output to one file per MPI rank, called diff --git a/lib/profiling/vernier/README.md b/lib/profiling/vernier/README.md index 85980104d3..e150f080f8 100644 --- a/lib/profiling/vernier/README.md +++ b/lib/profiling/vernier/README.md @@ -74,7 +74,7 @@ $(F90) -o a.out ... -L /lib/profiling/vernier -lvernier_psy \ ## Output An example output of the profiling report is below. Note that Vernier -writes the output into rank-specific output files, the output is not +writes the output into MPI-rank-specific output files, the output is not added to stdout: ``` From 23385fc172407d47f4b21fe07a4cc79b97f82d40 Mon Sep 17 00:00:00 2001 From: Andrew Porter Date: Tue, 7 Jan 2025 16:52:22 +0000 Subject: [PATCH 7/7] #2820 update changelog and UG --- changelog | 2 ++ psyclone.pdf | Bin 1269696 -> 1270107 bytes 2 files changed, 2 insertions(+) diff --git a/changelog b/changelog index 8867690531..a2bb3d4635 100644 --- a/changelog +++ b/changelog @@ -16,6 +16,8 @@ 5) PR #2836 for #2835. Reverts GHA to use Ubuntu 22.04 as python-3.7 not available in ubuntu-latest and linkspector is also broken. + 6) PR #2820 for #2773. Adds support for the Vernier timing library. + release 3.0.0 6th of December 2024 1) PR #2477 for #2463. Add support for Fortran Namelist statements. diff --git a/psyclone.pdf b/psyclone.pdf index 303d1c4dca47c08f75d88cb60266f0b760a95b1a..6f629ea05ce844cad23b23eb1675b268ca6a1e08 100644 GIT binary patch delta 46456 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

{@Aoc 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Ǽ@bZ{XUCd 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