From 50c760d19a2d3e2eb52879484ecd744af58d6912 Mon Sep 17 00:00:00 2001 From: Christophe Prud'homme Date: Thu, 5 Sep 2024 11:20:33 +0200 Subject: [PATCH 1/4] update Zotero references from a.cli #11 add options for zotero rest api add command update-bibtex to update references.bib automatically :) and update references.bib with a few from exa-ma eg freefem++ is is add @frederichecht @prj- --- a.cli | 128 ++++++++++++++++++++++++------ references.bib | 208 ++++++++++++++++++++++++++++++++++++------------- 2 files changed, 256 insertions(+), 80 deletions(-) diff --git a/a.cli b/a.cli index fb9b397..6b4ea3e 100644 --- a/a.cli +++ b/a.cli @@ -3,23 +3,62 @@ # Exit immediately if a command exits with a non-zero status set -e -# setup hooks -setup() { +# Default values +DEFAULT_ZOTERO_USER_ID="" +DEFAULT_ZOTERO_API_KEY="" +DEFAULT_ZOTERO_GROUP_ID="5582837" +DEFAULT_BIBTEX_FILE="references.bib" + +# Read environment variables or set defaults +ZOTERO_USER_ID=${ZOTERO_USER_ID:-$DEFAULT_ZOTERO_USER_ID} +ZOTERO_API_KEY=${ZOTERO_API_KEY:-$DEFAULT_ZOTERO_API_KEY} +ZOTERO_GROUP_ID=${ZOTERO_GROUP_ID:-$DEFAULT_ZOTERO_GROUP_ID} +BIBTEX_FILE=${BIBTEX_FILE:-$DEFAULT_BIBTEX_FILE} + +# Function to parse command-line arguments +parse_args() { + while [[ "$#" -gt 0 ]]; do + case $1 in + --zotero-user-id) ZOTERO_USER_ID="$2"; shift ;; + --zotero-api-key) ZOTERO_API_KEY="$2"; shift ;; + --zotero-group-id) ZOTERO_GROUP_ID="$2"; shift ;; + --bibtex-file) BIBTEX_FILE="$2"; shift ;; + --help) + echo "Usage: $0 [options] {setup|create|list|delete|update-bibtex} [version]" + echo "Options:" + echo " --zotero-user-id Zotero User ID" + echo " --zotero-api-key Zotero API Key" + echo " --zotero-group-id Zotero Group ID (optional, omit if using user library)" + echo " --bibtex-file Path to the BibTeX file (default: your_bibtex_file.bib)" + echo "Commands:" + echo " setup : Setup hooks for commit, checkout, and merge" + echo " create : Create a new release with the provided version" + echo " list : List all existing releases" + echo " delete : Delete the release with the provided version" + echo " update-bibtex : Fetch and update the BibTeX file from Zotero" + echo " version : Optional argument specifying the version for create and delete commands" + exit 0 ;; + esac + shift + done +} -for i in commit checkout merge; do - cp hooks/post-commit .git/hooks/post-$i - chmod +x .git/hooks/post-$i -done -echo "Hooks setup successfully." +# Function to setup hooks +setup() { + for i in commit checkout merge; do + cp hooks/post-commit .git/hooks/post-$i + chmod +x .git/hooks/post-$i + done + echo "Hooks setup successfully." -git checkout + git checkout -if ! test -f .git/gitHeadInfo.gin; then - cp .git/gitHeadInfo.gin gitHeadLocal.gin + if ! test -f .git/gitHeadInfo.gin; then + cp .git/gitHeadInfo.gin gitHeadLocal.gin - git add gitHeadLocal.gin - git commit -m "Created gitHeadLocal.gin for initial setup" -fi + git add gitHeadLocal.gin + git commit -m "Created gitHeadLocal.gin for initial setup" + fi } # Function to create a release @@ -31,26 +70,25 @@ create_release() { exit 1 fi - # check if the tag already exists + # Check if the tag already exists if git rev-parse "$VERSION" >/dev/null 2>&1; then echo "Error: Tag $VERSION already exists." exit 1 fi - # check the format of the version number + # Check the format of the version number if [[ ! "$VERSION" =~ ^v[0-9]+\.[0-9]+\.[0-9]+(-[a-z]+\.[0-9]+)?$ ]]; then echo "Error: Version number should be in the format vx.y.z or vx.y.z-pre.a." exit 1 fi - # Tag the repository with the provided version git tag -a "$VERSION" -m "Release $VERSION" # Checkout the tag to trigger post-commit hook to update gitinfo2 info file git checkout - # show the reltag line of .git/gitHeadInfo.gin + # Show the reltag line of .git/gitHeadInfo.gin grep reltag .git/gitHeadInfo.gin cp .git/gitHeadInfo.gin gitHeadLocal.gin @@ -83,12 +121,44 @@ delete_release() { git tag -d "$VERSION" # Delete the tag remotely - #git push origin --delete "$VERSION" + # git push origin --delete "$VERSION" echo "Release $VERSION deleted successfully." } +# Function to fetch and update BibTeX file from Zotero +update_bibtex() { + if [ -z "$ZOTERO_GROUP_ID" ]; then + if [ -z "$ZOTERO_USER_ID" ]; then + echo "Zotero group ID and user ID are not set, one of them is required." + echo "If Group ID is set, User ID is not required." + exit 1 + fi + fi + + if [ -z "$ZOTERO_API_KEY" ]; then + echo "Zotero API key is not set." + exit 1 + fi + + echo "Fetching BibTeX entries from Zotero..." + + # Define the URL to fetch BibTeX + if [ -z "$ZOTERO_GROUP_ID" ]; then + URL="https://api.zotero.org/users/$ZOTERO_USER_ID/items?format=bibtex" + else + URL="https://api.zotero.org/groups/$ZOTERO_GROUP_ID/items?format=bibtex" + fi + + # Fetch and save BibTeX entries + curl -s -H "Zotero-API-Key: $ZOTERO_API_KEY" "$URL" > "$BIBTEX_FILE" + + echo "BibTeX entries updated successfully in $BIBTEX_FILE." +} + # Main script logic +parse_args "$@" + case "$1" in setup) setup @@ -102,13 +172,23 @@ case "$1" in delete) delete_release "$2" ;; + update-bibtex) + update_bibtex + ;; *) - echo "Usage: $0 {setup|create|list|delete} [version]" - echo " setup : Setup hooks for commit, checkout, and merge" - echo " create : Create a new release with the provided version" - echo " list : List all existing releases" - echo " delete : Delete the release with the provided version" - echo " version : Optional argument specifying the version for create and delete commands" + echo "Usage: $0 [options] {setup|create|list|delete|update-bibtex} [version]" + echo "Options:" + echo " --zotero-user-id Zotero User ID (optional, omit if using group id given)" + echo " --zotero-api-key Zotero API Key" + echo " --zotero-group-id Zotero Group ID (optional, omit if using user id given)" + echo " --bibtex-file Path to the BibTeX file (default: your_bibtex_file.bib)" + echo "Commands:" + echo " setup : Setup hooks for commit, checkout, and merge" + echo " create : Create a new release with the provided version" + echo " list : List all existing releases" + echo " delete : Delete the release with the provided version" + echo " update-bibtex : Fetch and update the BibTeX file from Zotero" + echo " version : Optional argument specifying the version for create and delete commands" exit 1 ;; esac \ No newline at end of file diff --git a/references.bib b/references.bib index 4235a26..fcc1b36 100644 --- a/references.bib +++ b/references.bib @@ -1,60 +1,172 @@ +@article{hecht_new_2012, + title = {New development in {FreeFem}++}, + volume = {20}, + issn = {1570-2820}, + url = {https://freefem.org/}, + number = {3-4}, + journal = {Journal of Numerical Mathematics}, + author = {Hecht, F.}, + year = {2012}, + mrnumber = {3043640}, + pages = {251--265}, +} + +@techreport{adams_dakota_2022, + title = {Dakota, {A} {Multilevel} {Parallel} {Object}-{Oriented} {Framework} for {Design} {Optimization}, {Parameter} {Estimation}, {Uncertainty} {Quantification}, and {Sensitivity} {Analysis}: {Version} 6.16 {User}’s {Manual}}, + number = {SAND2022-6171}, + institution = {Sandia National Laboratories}, + author = {Adams, B. M. and Bohnhoff, W. J. and Dalbey, K. R. and Ebeida, M. S. and Eddy, J. P. and Eldred, M. S. and Hooper, R. W. and Hough, P. D. and Hu, K. T. and Jakeman, J. D. and Khalil, M. and Maupin, K. A. and Monschke, J. A. and Ridgway, E. M. and Rushdi, A. A. and Seidl, D. T. and Stephens, J. A. and Swiler, L. P. and Winokur, J. G.}, + month = may, + year = {2022}, +} + +@article{faucher_hawen_2021, + title = {hawen: time-harmonic wave modeling and inversion using hybridizable discontinuous {Galerkin} discretization}, + volume = {6}, + copyright = {http://creativecommons.org/licenses/by/4.0/}, + issn = {2475-9066}, + shorttitle = {hawen}, + url = {https://joss.theoj.org/papers/10.21105/joss.02699}, + doi = {10.21105/joss.02699}, + number = {57}, + urldate = {2024-09-05}, + journal = {Journal of Open Source Software}, + author = {Faucher, Florian}, + month = jan, + year = {2021}, + pages = {2699}, +} + +@incollection{baudin_openturns_2016, + address = {Cham}, + title = {{OpenTURNS}: {An} {Industrial} {Software} for {Uncertainty} {Quantification} in {Simulation}}, + isbn = {978-3-319-11259-6}, + url = {https://doi.org/10.1007/978-3-319-11259-6_64-1}, + booktitle = {Handbook of {Uncertainty} {Quantification}}, + publisher = {Springer International Publishing}, + author = {Baudin, Michaël and Dutfoy, Anne and Iooss, Bertrand and Popelin, Anne-Laure}, + editor = {Ghanem, Roger and Higdon, David and Owhadi, Houman}, + year = {2016}, + doi = {10.1007/978-3-319-11259-6_64-1}, + pages = {1--38}, +} + +@incollection{baudin_openturns_2016-1, + address = {Cham}, + title = {{OpenTURNS}: {An} {Industrial} {Software} for {Uncertainty} {Quantification} in {Simulation}}, + isbn = {978-3-319-11259-6}, + url = {https://doi.org/10.1007/978-3-319-11259-6_64-1}, + booktitle = {Handbook of {Uncertainty} {Quantification}}, + publisher = {Springer International Publishing}, + author = {Baudin, Michaël and Dutfoy, Anne and Iooss, Bertrand and Popelin, Anne-Laure}, + editor = {Ghanem, Roger and Higdon, David and Owhadi, Houman}, + year = {2016}, + doi = {10.1007/978-3-319-11259-6_64-1}, + pages = {1--38}, +} + +@misc{apptainer_contributors_apptainer_2024, + title = {Apptainer {User} {Documentation}}, + url = {https://apptainer.org/docs}, + author = {{Apptainer Contributors}}, + year = {2024}, +} + +@book{slurm_development_team_slurm_2024, + title = {{SLURM} {Workload} {Manager}}, + url = {https://slurm.schedmd.com/documentation.html}, + author = {{SLURM Development Team}}, + year = {2024}, +} + +@misc{karakasis_reframe-hpcreframe_2024, + title = {reframe-hpc/reframe: {ReFrame} 4.6.0}, + url = {https://doi.org/10.5281/zenodo.11002528}, + publisher = {Zenodo}, + author = {Karakasis, Vasileios and Manitaras, Theofilos and Otero, Javier and Koutsaniti, Eirini and {jgp} and {rsarm} and Bignamini, Christopher and {victorusu} and Jocksch, Andreas and {kraushm} and {lucamar} and Keller, Sebastian and Omlin, Samuel and Kliavinek, Sergei and Mendonça, Henrique and Giordano, Mosè and {MarkLTurner} and {GiuseppeLoRe} and Grassano, Davide and Boissonneault, Maxime and Leak, Steve and Paipuri, Mahendra and {jfavre} and {Vanessasaurus} and Morrison, Jack and Moors, Sam and You, Zhi-Qiang and Sandgren, Ake and {brandon-biggs}}, + month = apr, + year = {2024}, + doi = {10.5281/zenodo.11002528}, +} + +@article{ballout_nonlinear_2024, + title = {Nonlinear compressive reduced basis approximation for multi-parameter elliptic problem}, + copyright = {Creative Commons Attribution 4.0 International}, + url = {https://zenodo.org/doi/10.5281/zenodo.13336083}, + doi = {10.5281/ZENODO.13336083}, + abstract = {What's Changed + + + +add citation file by @prudhomm in https://github.com/feelpp/article.nl-c-rbm/pull/4 + + +Full Changelog: https://github.com/feelpp/article.nl-c-rbm/compare/v1.0.1...v1.1.0}, + urldate = {2024-09-04}, + author = {Ballout, Hassan and Maday, Yvon and Prud'homme, Christophe}, + month = aug, + year = {2024}, + note = {Publisher: Zenodo +Version Number: v1.1.0}, +} + @inproceedings{balay_efficient_1997, - title = {Efficient Management of Parallelism in Object Oriented Numerical Software Libraries}, - pages = {163--202}, - booktitle = {Modern Software Tools in Scientific Computing}, + title = {Efficient {Management} of {Parallelism} in {Object} {Oriented} {Numerical} {Software} {Libraries}}, + booktitle = {Modern {Software} {Tools} in {Scientific} {Computing}}, publisher = {Birkhäuser Press}, - author = {Balay, Satish and Gropp, William D. and {McInnes}, Lois Curfman and Smith, Barry F.}, + author = {Balay, Satish and Gropp, William D. and McInnes, Lois Curfman and Smith, Barry F.}, editor = {Arge, E. and Bruaset, A. M. and Langtangen, H. P.}, - date = {1997}, + year = {1997}, + pages = {163--202}, } @article{zhang_petscsf_2022, - title = {The {PetscSF} Scalable Communication Layer}, + title = {The {PetscSF} {Scalable} {Communication} {Layer}}, volume = {33}, - pages = {842--853}, number = {4}, - journaltitle = {{IEEE} Transactions on Parallel and Distributed Systems}, + journal = {IEEE Transactions on Parallel and Distributed Systems}, author = {Zhang, Junchao and Brown, Jed and Balay, Satish and Faibussowitsch, Jacob and Knepley, Matthew and Marin, Oana and Mills, Richard Tran and Munson, Todd and Smith, Barry F. and Zampini, Stefano}, - date = {2022}, + year = {2022}, + pages = {842--853}, } @article{dalcin_parallel_2011, - title = {Parallel distributed computing using Python}, + title = {Parallel distributed computing using {Python}}, volume = {34}, issn = {0309-1708}, doi = {10.1016/j.advwatres.2011.04.013}, - pages = {1124 -- 1139}, number = {9}, - journaltitle = {Advances in Water Resources}, + journal = {Advances in Water Resources}, author = {Dalcin, Lisandro D. and Paz, Rodrigo R. and Kler, Pablo A. and Cosimo, Alejandro}, - date = {2011}, + year = {2011}, + pages = {1124 -- 1139}, } -@report{balay_petsctao_2024, - title = {{PETSc}/{TAO} Users Manual}, - number = {{ANL}-21/39 - Revision 3.21}, +@techreport{balay_petsctao_2024, + title = {{PETSc}/{TAO} {Users} {Manual}}, + number = {ANL-21/39 - Revision 3.21}, institution = {Argonne National Laboratory}, - author = {Balay, Satish and Abhyankar, Shrirang and Adams, Mark F. and Benson, Steven and Brown, Jed and Brune, Peter and Buschelman, Kris and Constantinescu, Emil and Dalcin, Lisandro and Dener, Alp and Eijkhout, Victor and Faibussowitsch, Jacob and Gropp, William D. and Hapla, Václav and Isaac, Tobin and Jolivet, Pierre and Karpeev, Dmitry and Kaushik, Dinesh and Knepley, Matthew G. and Kong, Fande and Kruger, Scott and May, Dave A. and {McInnes}, Lois Curfman and Mills, Richard Tran and Mitchell, Lawrence and Munson, Todd and Roman, Jose E. and Rupp, Karl and Sanan, Patrick and Sarich, Jason and Smith, Barry F. and Zampini, Stefano and Zhang, Hong and Zhang, Hong and Zhang, Junchao}, - date = {2024}, + author = {Balay, Satish and Abhyankar, Shrirang and Adams, Mark F. and Benson, Steven and Brown, Jed and Brune, Peter and Buschelman, Kris and Constantinescu, Emil and Dalcin, Lisandro and Dener, Alp and Eijkhout, Victor and Faibussowitsch, Jacob and Gropp, William D. and Hapla, Václav and Isaac, Tobin and Jolivet, Pierre and Karpeev, Dmitry and Kaushik, Dinesh and Knepley, Matthew G. and Kong, Fande and Kruger, Scott and May, Dave A. and McInnes, Lois Curfman and Mills, Richard Tran and Mitchell, Lawrence and Munson, Todd and Roman, Jose E. and Rupp, Karl and Sanan, Patrick and Sarich, Jason and Smith, Barry F. and Zampini, Stefano and Zhang, Hong and Zhang, Hong and Zhang, Junchao}, + year = {2024}, doi = {10.2172/2205494}, } @misc{balay_petsc_2024, - title = {{PETSc} Web page}, + title = {{PETSc} {Web} page}, url = {https://petsc.org/}, - author = {Balay, Satish and Abhyankar, Shrirang and Adams, Mark F. and Benson, Steven and Brown, Jed and Brune, Peter and Buschelman, Kris and Constantinescu, Emil M. and Dalcin, Lisandro and Dener, Alp and Eijkhout, Victor and Faibussowitsch, Jacob and Gropp, William D. and Hapla, Václav and Isaac, Tobin and Jolivet, Pierre and Karpeev, Dmitry and Kaushik, Dinesh and Knepley, Matthew G. and Kong, Fande and Kruger, Scott and May, Dave A. and {McInnes}, Lois Curfman and Mills, Richard Tran and Mitchell, Lawrence and Munson, Todd and Roman, Jose E. and Rupp, Karl and Sanan, Patrick and Sarich, Jason and Smith, Barry F. and Zampini, Stefano and Zhang, Hong and Zhang, Hong and Zhang, Junchao}, - date = {2024}, + author = {Balay, Satish and Abhyankar, Shrirang and Adams, Mark F. and Benson, Steven and Brown, Jed and Brune, Peter and Buschelman, Kris and Constantinescu, Emil M. and Dalcin, Lisandro and Dener, Alp and Eijkhout, Victor and Faibussowitsch, Jacob and Gropp, William D. and Hapla, Václav and Isaac, Tobin and Jolivet, Pierre and Karpeev, Dmitry and Kaushik, Dinesh and Knepley, Matthew G. and Kong, Fande and Kruger, Scott and May, Dave A. and McInnes, Lois Curfman and Mills, Richard Tran and Mitchell, Lawrence and Munson, Todd and Roman, Jose E. and Rupp, Karl and Sanan, Patrick and Sarich, Jason and Smith, Barry F. and Zampini, Stefano and Zhang, Hong and Zhang, Hong and Zhang, Junchao}, + year = {2024}, } -@software{prudhomme_feelppfeelpp_2024, - title = {feelpp/feelpp: Feel++ Release V111 preview.10}, - rights = {Creative Commons Attribution 4.0 International, {GNU} Lesser General Public License v3.0 or later, {GNU} General Public License v3.0 or later}, - url = {https://zenodo.org/doi/10.5281/zenodo.591797}, +@misc{prudhomme_feelppfeelpp_2024, + title = {feelpp/feelpp: {Feel}++ {Release} {V111} preview.10}, + copyright = {Creative Commons Attribution 4.0 International, GNU Lesser General Public License v3.0 or later, GNU General Public License v3.0 or later}, shorttitle = {feelpp/feelpp}, + url = {https://zenodo.org/doi/10.5281/zenodo.591797}, abstract = {🎉 We're happy to share our developments as we approach the V111 release of Feel++. Following a refreshed naming strategy, we've moved to the -preview.x suffix from the conventional -alpha.x, -beta, or -rc labels. This change signifies our dedication to enhancing transparency and setting clear expectations for our pre-release versions. -Each pre-release version of Feel++ undergoes a rigorous process, encompassing detailed reviews, extensive tests across varied scenarios, and careful packaging. Our commitment to delivering a high-quality, reliable experience is reflected in our comprehensive platform support strategy. Alongside offering support for the latest two Long-Term Support ({LTS}) versions of Ubuntu and the newest {LTS} version of Debian, we're excited to announce that Feel++ is now accessible to Windows users through the Windows Subsystem for Linux ({WSL}) and to Mac users via {MacPorts}, Homebrew, Docker and now Apptainer. This expansion of platform support is a testament to our commitment to making Feel++ as accessible and versatile as possible for our diverse user base. +Each pre-release version of Feel++ undergoes a rigorous process, encompassing detailed reviews, extensive tests across varied scenarios, and careful packaging. Our commitment to delivering a high-quality, reliable experience is reflected in our comprehensive platform support strategy. Alongside offering support for the latest two Long-Term Support (LTS) versions of Ubuntu and the newest LTS version of Debian, we're excited to announce that Feel++ is now accessible to Windows users through the Windows Subsystem for Linux (WSL) and to Mac users via MacPorts, Homebrew, Docker and now Apptainer. This expansion of platform support is a testament to our commitment to making Feel++ as accessible and versatile as possible for our diverse user base. As we continue to refine and enhance Feel++, the V111 release promises to bring forward significant innovations and improvements. Stay tuned for further updates of Feel++. @@ -90,7 +202,7 @@ @software{prudhomme_feelppfeelpp_2024 resolve 2231 : Support parts configuration in exporter by @vincentchabannes in https://github.com/feelpp/feelpp/pull/2232 -resolves 1489 and 2175: enrich range object and simplify {FunctionSpace} by @prudhomm in https://github.com/feelpp/feelpp/pull/2176 +resolves 1489 and 2175: enrich range object and simplify FunctionSpace by @prudhomm in https://github.com/feelpp/feelpp/pull/2176 resolves 2191 and 2196: cleanup and python wrapper for forms and implement feelpp namespace package by @prudhomm in https://github.com/feelpp/feelpp/pull/2227 @@ -99,7 +211,7 @@ @prudhomm in resolves 2259: add script to get feelpp version and improve packaging workflow by @prudhomm in https://github.com/feelpp/feelpp/pull/2260 -{HPC} Changes +HPC Changes @@ -110,49 +222,33 @@ @vincentchabannes in -Ktirio Urban Building: A Computational Framework for City Energy Simulations Enhanced by {CI}/{CD} Innovations on {EuroHPC} Systems +Ktirio Urban Building: A Computational Framework for City Energy Simulations Enhanced by CI/CD Innovations on EuroHPC Systems Nonlinear compressive reduced basis approximation for multi-parameter elliptic problem -2D Axisymmetric Modeling of the {HTS} Insert Nougat in a Background Magnetic Field Generated by Resistive Magnet +2D Axisymmetric Modeling of the HTS Insert Nougat in a Background Magnetic Field Generated by Resistive Magnet Enjoy! Full Changelog: https://github.com/feelpp/feelpp/compare/v0.111.0-preview.9...v0.111.0-preview.10}, - version = {v0.111.0-preview.10}, + urldate = {2024-09-04}, publisher = {[object Object]}, author = {Prud'homme, Christophe and Chabannes, Vincent and Saigre, Thomas and Trophime, Christophe and Berti, Luca and Samaké, Abdoulaye and Van Landeghem, Céline and Szopos, Marcela and Giraldi, Laetitia and Bertoluzza, Silvia and Maday, Yvon}, - urldate = {2024-09-04}, - date = {2024-07-15}, + month = jul, + year = {2024}, doi = {10.5281/ZENODO.591797}, } @misc{ootomo_dgemm_2024, - title = {{DGEMM} on Integer Matrix Multiplication Unit}, + title = {{DGEMM} on {Integer} {Matrix} {Multiplication} {Unit}}, url = {http://arxiv.org/abs/2306.11975}, - abstract = {Deep learning hardware achieves high throughput and low power consumption by reducing computing precision and specializing in matrix multiplication. For machine learning inference, fixed-point value computation is commonplace, where the input and output values and the model parameters are quantized. Thus, many processors are now equipped with fast integer matrix multiplication units ({IMMU}). It is of significant interest to find a way to harness these {IMMUs} to improve the performance of {HPC} applications while maintaining accuracy. We focus on the Ozaki scheme, which computes a high-precision matrix multiplication by using lower-precision computing units, and show the advantages and disadvantages of using {IMMU}. The experiment using integer Tensor Cores shows that we can compute double-precision matrix multiplication faster than {cuBLAS} and an existing Ozaki scheme implementation on {FP}16 Tensor Cores on {NVIDIA} consumer {GPUs}. Furthermore, we demonstrate accelerating a quantum circuit simulation by up to 4.33 while maintaining the {FP}64 accuracy.}, - number = {{arXiv}:2306.11975}, - publisher = {{arXiv}}, - author = {Ootomo, Hiroyuki and Ozaki, Katsuhisa and Yokota, Rio}, + abstract = {Deep learning hardware achieves high throughput and low power consumption by reducing computing precision and specializing in matrix multiplication. For machine learning inference, fixed-point value computation is commonplace, where the input and output values and the model parameters are quantized. Thus, many processors are now equipped with fast integer matrix multiplication units (IMMU). It is of significant interest to find a way to harness these IMMUs to improve the performance of HPC applications while maintaining accuracy. We focus on the Ozaki scheme, which computes a high-precision matrix multiplication by using lower-precision computing units, and show the advantages and disadvantages of using IMMU. The experiment using integer Tensor Cores shows that we can compute double-precision matrix multiplication faster than cuBLAS and an existing Ozaki scheme implementation on FP16 Tensor Cores on NVIDIA consumer GPUs. Furthermore, we demonstrate accelerating a quantum circuit simulation by up to 4.33 while maintaining the FP64 accuracy.}, urldate = {2024-06-28}, - date = {2024-03-30}, - eprinttype = {arxiv}, - eprint = {2306.11975 [cs]}, + publisher = {arXiv}, + author = {Ootomo, Hiroyuki and Ozaki, Katsuhisa and Yokota, Rio}, + month = mar, + year = {2024}, + note = {arXiv:2306.11975 [cs]}, keywords = {Computer Science - Distributed, Parallel, and Cluster Computing}, } - -@inproceedings{haidar_harnessing_2018, - location = {Dallas, {TX}, {USA}}, - title = {Harnessing {GPU} Tensor Cores for Fast {FP}16 Arithmetic to Speed up Mixed-Precision Iterative Refinement Solvers}, - isbn = {978-1-5386-8384-2}, - url = {https://ieeexplore.ieee.org/document/8665777/}, - doi = {10.1109/SC.2018.00050}, - eventtitle = {{SC}18: International Conference for High Performance Computing, Networking, Storage and Analysis}, - pages = {603--613}, - booktitle = {{SC}18: International Conference for High Performance Computing, Networking, Storage and Analysis}, - publisher = {{IEEE}}, - author = {Haidar, Azzam and Tomov, Stanimire and Dongarra, Jack and Higham, Nicholas J.}, - urldate = {2024-06-28}, - date = {2018-11}, -} From e6b521fc318b254c9e2211fd38624ecd6846ff73 Mon Sep 17 00:00:00 2001 From: Christophe Prud'homme Date: Thu, 5 Sep 2024 22:07:13 +0200 Subject: [PATCH 2/4] add reframe section #13 --- sections/benchmarking.tex | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/sections/benchmarking.tex b/sections/benchmarking.tex index 8b0ae7a..0502427 100644 --- a/sections/benchmarking.tex +++ b/sections/benchmarking.tex @@ -99,7 +99,37 @@ \section{Regression Testing and Verification} \subsection{ReFrame} \label{sec:methodology-regression-reframe} -Explanation of the regression testing strategy to ensure long-term stability and reliability of benchmarks on EuroHPC infrastructures. + +ReFrame~\cite{karakasis_reframe-hpcreframe_2024} is a regression testing and benchmarking framework specifically designed for high-performance computing (HPC) systems. +Developed and maintained by the Swiss National Supercomputing Centre (CSCS), it is optimized for managing system tests and performance benchmarks. +ReFrame provides an abstraction layer that decouples the test logic from the specifics of the system environment, allowing seamless execution of benchmarks across multiple HPC platforms. + +\subsubsection{Key Features and Design} + +ReFrame's core functionality is centered around its modular, Python-based architecture, which provides extensive flexibility and control over test configurations and execution pipelines. The main features of ReFrame include: + +\begin{itemize} + \item \textbf{System Abstraction:} ReFrame abstracts system-specific details such as compilers, libraries, and modules, enabling users to define system-independent test logic. This abstraction simplifies portability across various HPC environments. + \item \textbf{Python-Based Test Definitions:} All test logic in ReFrame is defined in Python, allowing for high customizability and the use of standard Python libraries. Tests are implemented as Python functions, which manage the execution of benchmarks, result validation, and post-processing. + \item \textbf{Configuration and Execution Separation:} The framework separates the system configuration from the test logic. The configuration file defines system properties, including partitions, compilers, and runtime environments. The test file, on the other hand, defines the logic of the tests, including the execution stages and result handling. + \item \textbf{Pipeline Flexibility:} ReFrame supports the creation of complex test pipelines through its modular structure. It allows defining pre- and post-processing stages, intra-test dependencies, and validation steps, making it suitable for a wide range of benchmarking scenarios. +\end{itemize} + + +The proposal is to use ReFrame to benchmark the project's software and libraries on a variety of HPC systems. +The framework’s ability to provide system-independent test logic is crucial in this respect, as the project aims to deploy and benchmark on multiple heterogeneous HPC systems. +This ensures consistent benchmarking across platforms with varying architectures, compilers, and parallel frameworks. + +The test structure in ReFrame consists of the following key components: + +\begin{itemize} + \item \textbf{Configuration File:} Defines the HPC systems and their environments, including compilers, libraries, and runtime modules. A new configuration file or an extension to an existing one is required when deploying tests on a different system. + \item \textbf{Test File:} Contains the core test logic, including benchmark execution and validation stages. The test file remains system-independent, allowing the same test to be deployed on multiple platforms. + \item \textbf{Post-Processing:} ReFrame provides built-in support for result collection and validation. Benchmark results are parsed and stored in a standardized format, facilitating consistent performance reporting across different HPC environments. +\end{itemize} + +ReFrame ensures reproducibility, scalability, and portability in Exa-MA benchmarking efforts, making it thus a central tool in managing the project’s performance evaluation across various supercomputing resources. + \section{Packaging and Containerization} \label{sec:methodology-packaging} From 355d19c360b026ddc80c0db7ff36d7e4df5a2eb1 Mon Sep 17 00:00:00 2001 From: Christophe Prud'homme Date: Thu, 5 Sep 2024 22:12:56 +0200 Subject: [PATCH 3/4] add spack ref and guix-hpc refs add guix-hpc for packaging management #12 --- references.bib | 48 +++++++++++++++++++++++++++++++++++------------- 1 file changed, 35 insertions(+), 13 deletions(-) diff --git a/references.bib b/references.bib index fcc1b36..b578e4b 100644 --- a/references.bib +++ b/references.bib @@ -1,4 +1,39 @@ +@inproceedings{gamblin_spack_2015, + address = {Austin Texas}, + title = {The {Spack} package manager: bringing order to {HPC} software chaos}, + isbn = {978-1-4503-3723-6}, + shorttitle = {The {Spack} package manager}, + url = {https://dl.acm.org/doi/10.1145/2807591.2807623}, + doi = {10.1145/2807591.2807623}, + language = {en}, + urldate = {2024-09-05}, + booktitle = {Proceedings of the {International} {Conference} for {High} {Performance} {Computing}, {Networking}, {Storage} and {Analysis}}, + publisher = {ACM}, + author = {Gamblin, Todd and LeGendre, Matthew and Collette, Michael R. and Lee, Gregory L. and Moody, Adam and De Supinski, Bronis R. and Futral, Scott}, + month = nov, + year = {2015}, + pages = {1--12}, +} + +@article{vallet_toward_2022, + title = {Toward practical transparent verifiable and long-term reproducible research using {Guix}}, + volume = {9}, + issn = {2052-4463}, + url = {https://www.nature.com/articles/s41597-022-01720-9}, + doi = {10.1038/s41597-022-01720-9}, + abstract = {Abstract + Reproducibility crisis urge scientists to promote transparency which allows peers to draw same conclusions after performing identical steps from hypothesis to results. Growing resources are developed to open the access to methods, data and source codes. Still, the computational environment, an interface between data and source code running analyses, is not addressed. Environments are usually described with software and library names associated with version labels or provided as an opaque container image. This is not enough to describe the complexity of the dependencies on which they rely to operate on. We describe this issue and illustrate how open tools like Guix can be used by any scientist to share their environment and allow peers to reproduce it. Some steps of research might not be fully reproducible, but at least, transparency for computation is technically addressable. These tools should be considered by scientists willing to promote transparency and open science.}, + language = {en}, + number = {1}, + urldate = {2024-09-05}, + journal = {Scientific Data}, + author = {Vallet, Nicolas and Michonneau, David and Tournier, Simon}, + month = oct, + year = {2022}, + pages = {597}, +} + @article{hecht_new_2012, title = {New development in {FreeFem}++}, volume = {20}, @@ -239,16 +274,3 @@ @vincentchabannes in year = {2024}, doi = {10.5281/ZENODO.591797}, } - -@misc{ootomo_dgemm_2024, - title = {{DGEMM} on {Integer} {Matrix} {Multiplication} {Unit}}, - url = {http://arxiv.org/abs/2306.11975}, - abstract = {Deep learning hardware achieves high throughput and low power consumption by reducing computing precision and specializing in matrix multiplication. For machine learning inference, fixed-point value computation is commonplace, where the input and output values and the model parameters are quantized. Thus, many processors are now equipped with fast integer matrix multiplication units (IMMU). It is of significant interest to find a way to harness these IMMUs to improve the performance of HPC applications while maintaining accuracy. We focus on the Ozaki scheme, which computes a high-precision matrix multiplication by using lower-precision computing units, and show the advantages and disadvantages of using IMMU. The experiment using integer Tensor Cores shows that we can compute double-precision matrix multiplication faster than cuBLAS and an existing Ozaki scheme implementation on FP16 Tensor Cores on NVIDIA consumer GPUs. Furthermore, we demonstrate accelerating a quantum circuit simulation by up to 4.33 while maintaining the FP64 accuracy.}, - urldate = {2024-06-28}, - publisher = {arXiv}, - author = {Ootomo, Hiroyuki and Ozaki, Katsuhisa and Yokota, Rio}, - month = mar, - year = {2024}, - note = {arXiv:2306.11975 [cs]}, - keywords = {Computer Science - Distributed, Parallel, and Cluster Computing}, -} From c1d5d4fa8766b204c246b83ae26a51cb982cb1d8 Mon Sep 17 00:00:00 2001 From: Christophe Prud'homme Date: Thu, 5 Sep 2024 22:14:45 +0200 Subject: [PATCH 4/4] add basic section for guix-hpc add guix-hpc for packaging management #12 /cc @lgiraud-inria --- sections/benchmarking.tex | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/sections/benchmarking.tex b/sections/benchmarking.tex index 0502427..376c6a8 100644 --- a/sections/benchmarking.tex +++ b/sections/benchmarking.tex @@ -137,7 +137,13 @@ \section{Packaging and Containerization} \subsection{Spack} \label{sec:methodology-packaging-spack} -Spack is a flexible package management tool used to simplify the installation of complex HPC software environments. It allows users to create and manage multiple versions of software libraries and applications, ensuring compatibility across different systems. +Spack~\cite{gamblin_spack_2015} is a flexible package management tool used to simplify the installation of complex HPC software environments. It allows users to create and manage multiple versions of software libraries and applications, ensuring compatibility across different systems. + +\subsection{Guix-HPC} +\label{sec:methodology-packaging-guix-hpc} + +Guix-HPC~\cite{vallet_toward_2022}, an advanced package management system tailored for HPC environments. Guix-HPC ensures reproducibility and scalability by providing a declarative environment specification. By using Guix, we can control software dependencies and build environments across different HPC systems, ensuring that benchmarks and experiments can be replicated with exact configurations. + \subsection{Containers} \label{sec:methodology-packaging-container}