{"id":13314630,"url":"https://github.com/stfc/PSycloneBench","last_synced_at":"2025-03-10T21:30:38.949Z","repository":{"id":28905397,"uuid":"119681968","full_name":"stfc/PSycloneBench","owner":"stfc","description":"Various benchmarks used to inform PSyclone optimisations","archived":false,"fork":false,"pushed_at":"2024-02-22T18:19:25.000Z","size":19569,"stargazers_count":6,"open_issues_count":27,"forks_count":5,"subscribers_count":6,"default_branch":"master","last_synced_at":"2024-07-29T19:07:45.093Z","etag":null,"topics":["benchmark","fortran","gpu-acceleration","kokkos","mpi","openacc","opencl","openmp","optimization"],"latest_commit_sha":null,"homepage":"","language":"Fortran","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/stfc.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2018-01-31T12:05:01.000Z","updated_at":"2023-11-30T12:00:41.000Z","dependencies_parsed_at":"2024-02-21T23:31:56.159Z","dependency_job_id":"95ded7b9-b6d7-43d5-a92e-81a68779dcae","html_url":"https://github.com/stfc/PSycloneBench","commit_stats":null,"previous_names":[],"tags_count":72,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stfc%2FPSycloneBench","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stfc%2FPSycloneBench/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stfc%2FPSycloneBench/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stfc%2FPSycloneBench/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/stfc","download_url":"https://codeload.github.com/stfc/PSycloneBench/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":242929979,"owners_count":20208383,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["benchmark","fortran","gpu-acceleration","kokkos","mpi","openacc","opencl","openmp","optimization"],"created_at":"2024-07-29T18:11:50.413Z","updated_at":"2025-03-10T21:30:38.926Z","avatar_url":"https://github.com/stfc.png","language":"Fortran","funding_links":[],"categories":[],"sub_categories":[],"readme":"# PSycloneBench\n\nVarious small benchmarks used to inform the development of the\n[PSyclone](https://github.com/stfc/psyclone) Domain-Specific Compiler.\n\n## Obtaining the Code ##\n\nThe benchmark codes contained in this project use the\n[dl_timer](https://bitbucket.org/apeg/dl_timer) library for execution\ntiming and the [dl_esm_inf](https://github.com/stfc/dl_esm_inf)\ninfrastructure. Some implementation also have\n[PSyclone](https://github.com/stfc/PSyclone),\n[FortCL](https://github.com/stfc/FortCL) or\n[Kokkos](https://github.com/kokkos/kokkos) as dependencies.\nAll these packages are included within the PSycloneBench\nrepository as git submodules.  As such, when cloning the repository\nyou need to use the `--recursive` flag in order to get the source code\nof that submodule, e.g.:\n\n    git clone --recursive https://github.com/stfc/PSycloneBench\n\nIf you forget to do this then your cloned repository will contain empty\n`PSycloneBench/shared/dl_timer`, `dl_esm_inf`, `kokkos`, `FortCL` and\n`PSyclone` directories. To populate them you can do:\n\n    cd PSycloneBench\n    git submodule init\n    git submodule update\n\n## Benchmarks ##\n\nAre contained in directories beneath the `benchmarks` directory.\n\n### NEMOLite2D ###\n\n`benchmarks/nemo/nemolite2d` contains various versions of the NEMOLite2D\nbenchmark which is based upon the free-surface component of the NEMO\nocean model (www.nemo-ocean.eu). This was originally constructed\nby Hedong Liu of the National Oceanography Centre, Liverpool, UK.\n\n#### Manual implementations ####\n\nThe `manual_versions` directory contains various implementations of\nNEMOLite2D where the application has been split-up into Algorithm PSy\nand Kernel layers but the PSy layer has been written manually.\nSee the [README.md](benchmarks/nemo/nemolite2d/manual_versions/README.md)\nfile in the NemoLite2D manual_versions directory for more information.\n\n(Note that the OpenACC versions are based upon work by Jeremy\nAppleyard of NVIDIA).\n\n#### PSyclone code generation ####\n\nThe `psykal` directory contains the version of NEMOLite2D that uses\nPSyclone to generate the PSy layer. Currently serial and OpenMP\nversions may be generated.\n\n### NEMO Tracer Advection ###\n\nThe `benchmarks/nemo/tracer_advection` directory contains various versions\nof a benchmark based on one of the tracer-advection routines in the NEMO\ncode base. The version in the `original` directory was supplied by Silvia\nMocavero of [CMCC](https://www.cmcc.it/).\n\n### Shallow ###\n\n`benchmarks/shallow` contains various versions of the Shallow benchmark,\noriginally developed by Paul Swarztrauber of NCAR. In summary these are:\n\n* SEQ/original - original single-file serial version in Fortran.\n* SEQ - PSyKAl version of Shallow including option to build with PSyclone.\n* OMP - manual OpenMP implementation in C.\n\nPlease see the README.md files in the individual directories for more\ninformation.\n\n## Building ##\n\nThe Makefiles for all of the various benchmarks pick-up which compiler\nto use (and associated flags) from environment variables. Bash scripts to\nset these variables for a variety of compilers are in the compiler_setup\ndirectory. When benchmarking you will need to edit the relevant file\nand ensure that the compiler flags are set appropriately. The flags that\ngive the best performance for a particular compiler can vary from benchmark\nto benchmark and even by problem size.\n\nIn order to use the settings for a particular compiler, you must source\nthe appropriate Bash script. e.g. for the Intel compiler (assuming you are\nrunning a Bash shell):\n\n    \u003e . compiler_setup/intel.sh\n\nAgain, see the README.md file included with each benchmark.\n\nA top-level Makefile is provided that has targets to build all of the\nvarious NEMOLite2D and Shallow benchmarks for CPU:\n\n * all - build all targets that do not require PSyclone\n * all_gen - build all targets that use PSyclone code generation\n * shallow_cpu - build all CPU versions of Shallow that do not require\n                 PSyclone\n * shallow_gen - build Shallow using PSyclone for code generation\n * nemolite_cpu - build all CPU versions of NEMOLite2D that do not require\n                  PSyclone\n * nemolite_gen - build NEMOLite2D using PSyclone for code generation\n\nSince the set-up for OpenACC and OpenCL is more involved, it does not\nattempt to compile the benchmarks using those languages. See the Makefiles\nin the individual benchmark folders for those cases.\n\n### LFRic Small Matrix Vector Multiplication ###\n\n`benchmarks/smallmatvec` contains multiple implementations of the\nmatrix-vector multiplication operation done in the LFRic application. \n\nCurrently it only contains one manual implementation:\n\n * openmp - Configurable implementation using OpenMP that test the\n            vectorization and threading capabilities of multiple versions\n            of the kernel and multiple parallel traversing strategies.\n\nNote that this benchmark does not use the `compiler_setup` settings yet.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstfc%2FPSycloneBench","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fstfc%2FPSycloneBench","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstfc%2FPSycloneBench/lists"}