PageSourceSearch

https://www.bsc.es/supportkc/assets/js/8c5e9641.78b5a9b2.js

js bsc.es collected 2026-09-24 08:43:39 UTC 25,080 bytes, 1 lines download raw bytes

1"use strict";(self.webpackChunksupportkc_new=self.webpackChunksupportkc_new||[]).push([[2486],{3905:(t,e,n)=>{n.d(e,{Zo:()=>s,kt:()=>g});var a=n(67294);function r(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function l(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);e&&(a=a.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,a)}return n}function i(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?l(Object(n),!0).forEach((function(e){r(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):l(Object(n)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}function p(t,e){if(null==t)return{};var n,a,r=function(t,e){if(null==t)return{};var n,a,r={},l=Object.keys(t);for(a=0;a<l.length;a++)n=l[a],e.indexOf(n)>=0||(r[n]=t[n]);return r}(t,e);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(t);for(a=0;a<l.length;a++)n=l[a],e.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(t,n)&&(r[n]=t[n])}return r}var o=a.createContext({}),u=function(t){var e=a.useContext(o),n=e;return t&&(n="function"==typeof t?t(e):i(i({},e),t)),n},s=function(t){var e=u(t.components);return a.createElement(o.Provider,{value:e},t.children)},m="mdxType",d={inlineCode:"code",wrapper:function(t){var e=t.children;return a.createElement(a.Fragment,{},e)}},k=a.forwardRef((function(t,e){var n=t.components,r=t.mdxType,l=t.originalType,o=t.parentName,s=p(t,["components","mdxType","originalType","parentName"]),m=u(n),k=r,g=m["".concat(o,".").concat(k)]||m[k]||d[k]||l;return n?a.createElement(g,i(i({ref:e},s),{},{components:n})):a.createElement(g,i({ref:e},s))}));function g(t,e){var n=arguments,r=e&&e.mdxType;if("string"==typeof t||r){var l=n.length,i=new Array(l);i[0]=k;var p={};for(var o in e)hasOwnProperty.call(e,o)&&(p[o]=e[o]);p.originalType=t,p[m]="string"==typeof t?t:r,i[1]=p;for(var u=2;u<l;u++)i[u]=n[u];return a.createElement.apply(null,i)}return a.createElement.apply(null,n)}k.displayName="MDXCreateElement"},34093:(t,e,n)=>{n.r(e),n.d(e,{assets:()=>o,contentTitle:()=>i,default:()=>d,frontMatter:()=>l,metadata:()=>p,toc:()=>u});var a=n(87462),r=(n(67294),n(3905));const l={sidebar_position:2,sidebar_label:"GROMACS"},i="General-Purpose Partition Applications",p={unversionedId:"MareNostrum5/Marenostrum5-Applications/GPP/GROMACS",id:"MareNostrum5/Marenostrum5-Applications/GPP/GROMACS",title:"General-Purpose Partition Applications",description:"GROMACS",source:"@site/docs/MareNostrum5/Marenostrum5-Applications/GPP/GROMACS.md",sourceDirName:"MareNostrum5/Marenostrum5-Applications/GPP",slug:"/MareNostrum5/Marenostrum5-Applications/GPP/GROMACS",permalink:"/supportkc/docs/MareNostrum5/Marenostrum5-Applications/GPP/GROMACS",draft:!1,tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2,sidebar_label:"GROMACS"},sidebar:"tutorialSidebar",previous:{title:"CP2K",permalink:"/supportkc/docs/MareNostrum5/Marenostrum5-Applications/GPP/CP2K"},next:{title:"NAMD",permalink:"/supportkc/docs/MareNostrum5/Marenostrum5-Applications/GPP/NAMD"}},o={},u=[{value:"GROMACS",id:"gromacs",level:2},{value:"Overview",id:"overview",level:3},{value:"Test Datasets",id:"test-datasets",level:3},{value:"Test Case 1: lignocellulose-rf.tpr",id:"test-case-1-lignocellulose-rftpr",level:2},{value:"Sample Job Script",id:"sample-job-script",level:3},{value:"Single Node Performance Results",id:"single-node-performance-results",level:4},{value:"Performance Visualization",id:"performance-visualization",level:3},{value:"Multi-Node Scaling Results",id:"multi-node-scaling-results",level:3},{value:"Multi-Node Performance Visualization",id:"multi-node-performance-visualization",level:3},{value:"Test Case 2: Water_bare_hbonds",id:"test-case-2-water_bare_hbonds",level:2},{value:"Sample Job Script",id:"sample-job-script-1",level:3},{value:"Single Node Performance Results",id:"single-node-performance-results-1",level:3}
1,{value:"Performance vs MPI \xd7 OpenMP Threads",id:"performance-vs-mpi--openmp-threads",level:4},{value:"Multi-Node Scaling Results",id:"multi-node-scaling-results-1",level:3},{value:"Multi-Node Performance Visualization",id:"multi-node-performance-visualization-1",level:3}],s={toc:u},m="wrapper";function d(t){let{components:e,...l}=t;return(0,r.kt)(m,(0,a.Z)({},s,l,{components:e,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"general-purpose-partition-applications"},"General-Purpose Partition Applications"),(0,r.kt)("h2",{id:"gromacs"},"GROMACS"),(0,r.kt)("h3",{id:"overview"},"Overview"),(0,r.kt)("p",null,"GROMACS is a versatile package to perform molecular dynamics, i.e. simulate the Newtonian equations of motion for systems with hundreds to millions of particles. It is primarily designed for simulating ",(0,r.kt)("strong",{parentName:"p"},"proteins, lipids, and nucleic acids"),". "),(0,r.kt)("h3",{id:"test-datasets"},"Test Datasets"),(0,r.kt)("p",null,"In our performance evaluation, we used two standard input datasets:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("strong",{parentName:"li"},"lignocellulose-rf.tpr")," ")),(0,r.kt)("p",null,"This input file is part of the ","[Unified European Applications Benchmark Suite (UEABS)]"),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"https://repository.prace-ri.eu/git/UEABS/ueabs/-/tree/master/gromacs?ref_type=heads"},"GROMACS dataset")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Dataset characteristics:")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"cellulose and lignocellulosic biomass in an aqueous solution."),(0,r.kt)("li",{parentName:"ul"},"3.3 million atoms")),(0,r.kt)("ol",{start:2},(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("strong",{parentName:"li"},"Water_bare_hbonds"),"  ")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"water_bare_hbonds(1536)")),(0,r.kt)("h2",{id:"test-case-1-lignocellulose-rftpr"},"Test Case 1: lignocellulose-rf.tpr"),(0,r.kt)("h3",{id:"sample-job-script"},"Sample Job Script"),(0,r.kt)("p",null,"Below is a sample job script for running GROMACS with the lignocellulose-rf.tpr input file:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"#!/bin/bash\n\n#SBATCH --job-name=gromacs_run\n#SBATCH --nodes=1\n#SBATCH --ntasks-per-node=112  # Number of MPI ranks per node\n#SBATCH --cpus-per-task=1     # Number of OpenMP threads per MPI rank\n#SBATCH --time=02:00:00e\n#SBATCH --output=gromacs_out.out\n#SBATCH --error=gromacs_out.err\n#SBATCH --account=xxxx        # Specify the account\n#SBATCH --partition=gpp       # Running on the GPP partition\n#SBATCH --qos=xxxxx           # Define the appropriate QoS\n\n# Load required modules\nmodule purge\nmodule load oneapi/2024.2 gromacs/2024.2\n\n# Set environment variables\nexport SRUN_CPUS_PER_TASK=$SLURM_CPUS_PER_TASK\n\n# Run GROMACS simulation\nsrun gmx_mpi mdrun -s lignocellulose-rf.tpr -pin on -noconfout -nsteps 20000 -nstlist 200\n\n")),(0,r.kt)("h4",{id:"single-node-performance-results"},"Single Node Performance Results"),(0,r.kt)("p",null,"The table below shows performance results for different ",(0,r.kt)("strong",{parentName:"p"},"MPI rank \xd7 OpenMP thread")," configurations on a single GPP node (112 cores total). Higher values of Performance (ns/day) indicate better performance."),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Nodes"),(0,r.kt)("th",{parentName:"tr",align:null},"ntasks_per_node"),(0,r.kt)("th",{parentName:"tr",align:null},"cpus_per_task"),(0,r.kt)("th",{parentName:"tr",align:null},"Performance(ns/day)"),(0,r.kt)("th",{parentName:"tr",align:null},"WallTime_Result(s)"),(0,r.kt)("th",{parentName:"tr",align:null},"CoreTime(core-s)"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"1"),(0,r.kt)("td",{parentName:"tr",align:null},"1"),(0,r.kt)("td",{parentName:"tr",align:null},"112"),(0,r.kt)("td",{parentName:"tr",align:null},"7.048"),(0,r.kt)("td",{parentName:"tr",align:null},"490.347"),(0,r.kt)("td",{parentName:"tr",align:null},"54918.473")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"1"),(0,r.kt)("td",{parentName:"tr",align:null},"2"),(0,r.kt)("td",{parentName:"tr",align:null},"56"),(0,r.kt)("td",{parentName:"tr",align:null},"4.875"),(0,r.kt)("td",{parentName:"tr",align:null},"708.971"),(0,r.kt)("td",{parentName:"tr",align:null},"79404.608")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"1"),(0,r.kt)("td",{parentName:"tr",align:null},"4"),(0,r.kt)("td",{parentName:"tr",align:null},"28"),(0,r.kt)("td",{parentName:"tr",align:null},"5.7"),(0,r.kt)("td",{parentName:"tr",align:null},"606.359"),(0,r.kt)("td",{parentName:"tr",align:null},"67912.096")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"1"),(0,r.kt)("td",{parentName:"tr",align:null},"7"),(0,r.kt)("td",{parentName:"tr",align:null},"16"),(0,r.kt)("td",{parentName:"tr",align:null},"7.301"),(0,r.kt)("td",{parentName:"tr",align:null},"473.382"),(0,r.kt)("td",{parentName:"tr",align:null},"53018.645")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"1"),(0,r.kt)("td",{parentName:"tr",align:null},"8"),(0,r.kt)("td",{parentName:"tr",align:null},"14"),(0,r.kt)("td",{parentName:"tr",align:null},"7.722"),(0,r.kt)("td",{parentName:"tr",align:null},"447.548"),(0,r.kt)("td",{parentName:"tr",align:null},"50125.192")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"1"),(0,r.kt)("td",{parentName:"tr",align:null},"16"),(0,r.kt)("td",{parentName:"tr",align:null},"7"),(0,r.kt)("td",{parentName:"tr",align:null},"8.256"),(0,r.kt)("td",{parentName:"tr",align:null},"418.629"),(0,r.kt)("td",{parentName:"tr",align:null},"46886.351")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"1"),(0,r.kt)("td",{parentName:"tr",align:null},"28"),(0,r.kt)("td",{parentName:"tr",align:null},"4"),(0,r.kt)("td",{parentName:"tr",align:null},"8.465"),(0,r.kt)("td",{parentName:"tr",align:null},"408.285"),(0,r.kt)("td",{parentName:"tr",align:null},"45727.751")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"1"),(0,r.kt)("td",{parentName:"tr",align:null},"56"),(0,r.kt)("td",{parentName:"tr",align:null},"2"),(0,r.kt)("td",{parentName:"tr",align:null},"8.470"),(0,r.kt)("td",{parentName:"tr",align:null},"408.057"),(0,r.kt)("td",{parentName:"tr",align:null},"45702.169")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"\ud83c\udfc6",(0,r.kt)("strong",{parentName:"td"},"1")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"112")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"1")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"8.684")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"397.977")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"44573.226"))))),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Optimal Configuration"),": 112 MPI ranks \xd7 1 OpenMP thread per rank"),(0,r.kt)("h3",{id:"performance-visualization"},"Performance Visualization"),(0,r.kt)("p",null,"The chart below illustrates the performance of GROMACS with different MPI and OpenMP configurations on a single node:"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"Performance vs MPI \xd7 OpenMP with Performance (ns)",src:n(96242).Z,width:"1200",height:"600"})),(0,r.kt)("h3",{id:"multi-node-scaling-results"},"Multi-Node Scaling Results"),(0,r.kt)("p",null,"The next step is to evaluate strong scalability by running GROMACS starting from 1 node and scaling up to 16 nodes."),
1(0,r.kt)("p",null,"Using the optimal configuration (112 MPI ranks \xd7 1 OpenMP thread), we tested strong scaling from 1 to 16 nodes:"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Nodes"),(0,r.kt)("th",{parentName:"tr",align:null},"ntasks"),(0,r.kt)("th",{parentName:"tr",align:null},"ntasks_per_node"),(0,r.kt)("th",{parentName:"tr",align:null},"cpus_per_task"),(0,r.kt)("th",{parentName:"tr",align:null},"Performance(ns/day)"),(0,r.kt)("th",{parentName:"tr",align:null},"WallTime_Result(s)"),(0,r.kt)("th",{parentName:"tr",align:null},"CoreTime(core-s)"),(0,r.kt)("th",{parentName:"tr",align:null},"Speedup"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"1"),(0,r.kt)("td",{parentName:"tr",align:null},"112"),(0,r.kt)("td",{parentName:"tr",align:null},"112"),(0,r.kt)("td",{parentName:"tr",align:null},"1"),(0,r.kt)("td",{parentName:"tr",align:null},"8.684"),(0,r.kt)("td",{parentName:"tr",align:null},"397.977"),(0,r.kt)("td",{parentName:"tr",align:null},"44573.226"),(0,r.kt)("td",{parentName:"tr",align:null},"1.00")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"2"),(0,r.kt)("td",{parentName:"tr",align:null},"224"),(0,r.kt)("td",{parentName:"tr",align:null},"112"),(0,r.kt)("td",{parentName:"tr",align:null},"1"),(0,r.kt)("td",{parentName:"tr",align:null},"17.102"),(0,r.kt)("td",{parentName:"tr",align:null},"202.096"),(0,r.kt)("td",{parentName:"tr",align:null},"45268.841"),(0,r.kt)("td",{parentName:"tr",align:null},"1.97")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"4"),(0,r.kt)("td",{parentName:"tr",align:null},"448"),(0,r.kt)("td",{parentName:"tr",align:null},"112"),(0,r.kt)("td",{parentName:"tr",align:null},"1"),(0,r.kt)("td",{parentName:"tr",align:null},"33.276"),(0,r.kt)("td",{parentName:"tr",align:null},"103.86"),(0,r.kt)("td",{parentName:"tr",align:null},"46529.694"),(0,r.kt)("td",{parentName:"tr",align:null},"3.83")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"8"),(0,r.kt)("td",{parentName:"tr",align:null},"896"),(0,r.kt)("td",{parentName:"tr",align:null},"112"),(0,r.kt)("td",{parentName:"tr",align:null},"1"),(0,r.kt)("td",{parentName:"tr",align:null},"62.962"),(0,r.kt)("td",{parentName:"tr",align:null},"54.893"),(0,r.kt)("td",{parentName:"tr",align:null},"49182.398"),(0,r.kt)("td",{parentName:"tr",align:null},"7.25")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"16"),(0,r.kt)("td",{parentName:"tr",align:null},"1792"),(0,r.kt)("td",{parentName:"tr",align:null},"112"),(0,r.kt)("td",{parentName:"tr",align:null},"1"),(0,r.kt)("td",{parentName:"tr",align:null},"112.278"),(0,r.kt)("td",{parentName:"tr",align:null},"30.782"),(0,r.kt)("td",{parentName:"tr",align:null},"55157.47"),(0,r.kt)("td",{parentName:"tr",align:null},"12.93")))),(0,r.kt)("h3",{id:"multi-node-performance-visualization"},"Multi-Node Performance Visualization"),(0,r.kt)("p",null,"The chart below shows the scaling performance across multiple nodes:\n",(0,r.kt)("img",{alt:"Performance vs MPI \xd7 OpenMP with Performance (ns)",src:n(41582).Z,width:"1200",height:"600"})),(0,r.kt)("p",null,"The GROMACS benchmark on GPP shows excellent parallel scalability up to 16 nodes. Speedup closely follows the ideal curve until 8 nodes, with some efficiency drop at 16 nodes, likely due to increased communication overhead. CoreTime remains stable, indicating efficient CPU utilization across nodes."),(0,r.kt)("h2",{id:"test-case-2-water_bare_hbonds"},"Test Case 2: Water_bare_hbonds"),(0,r.kt)("h3",{id:"sample-job-script-1"},"Sample Job Script"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"#!/bin/bash\n\n#SBATCH --job-name=gromacs_run\n#SBATCH --nodes=1\n#SBATCH --ntasks-per-node=56  # Number of MPI ranks per node\n#SBATCH --cpus-per-task=2     # Number of OpenMP threads per MPI rank\n#SBATCH --time=02:00:00\n#SBATCH --output=gromacs_out.out\n#SBATCH --error=gromacs_out.err\n#SBATCH --account=xxxx        # Specify the account\n#SBATCH --partition=gpp       # Running on the GPP partition\n#SBATCH --qos=xxxxx           # Define the appropriate QoS\n\n# Load required modules\nmodule purge\nmodule load oneapi/2024.2 gromacs/2024.2\n\n# Set environment variables\nexport SRUN_CPUS_PER_TASK=$SLURM_CPUS_PER_TASK\n\n# Ru
1n GROMACS simulation\nsrun gmx_mpi mdrun -s topol.tpr -pin on -noconfout -nsteps 20000 -nstlist 200\n\n")),(0,r.kt)("h3",{id:"single-node-performance-results-1"},"Single Node Performance Results"),(0,r.kt)("p",null,"The table below shows performance results for different ",(0,r.kt)("strong",{parentName:"p"},"MPI rank \xd7 OpenMP thread")," configurations on a single GPP node with the water_bare_hbonds dataset:"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Nodes"),(0,r.kt)("th",{parentName:"tr",align:null},"ntasks_per_node"),(0,r.kt)("th",{parentName:"tr",align:null},"cpus_per_task"),(0,r.kt)("th",{parentName:"tr",align:null},"Performance(ns/day)"),(0,r.kt)("th",{parentName:"tr",align:null},"WallTime_Result(s)"),(0,r.kt)("th",{parentName:"tr",align:null},"CoreTime(core-s)"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"1"),(0,r.kt)("td",{parentName:"tr",align:null},"1"),(0,r.kt)("td",{parentName:"tr",align:null},"112"),(0,r.kt)("td",{parentName:"tr",align:null},"11.323"),(0,r.kt)("td",{parentName:"tr",align:null},"305.223"),(0,r.kt)("td",{parentName:"tr",align:null},"34184.792")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"1"),(0,r.kt)("td",{parentName:"tr",align:null},"2"),(0,r.kt)("td",{parentName:"tr",align:null},"56"),(0,r.kt)("td",{parentName:"tr",align:null},"6.926"),(0,r.kt)("td",{parentName:"tr",align:null},"499.035"),(0,r.kt)("td",{parentName:"tr",align:null},"55891.797")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"1"),(0,r.kt)("td",{parentName:"tr",align:null},"4"),(0,r.kt)("td",{parentName:"tr",align:null},"28"),(0,r.kt)("td",{parentName:"tr",align:null},"8.969"),(0,r.kt)("td",{parentName:"tr",align:null},"385.364"),(0,r.kt)("td",{parentName:"tr",align:null},"43160.643")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"1"),(0,r.kt)("td",{parentName:"tr",align:null},"7"),(0,r.kt)("td",{parentName:"tr",align:null},"16"),(0,r.kt)("td",{parentName:"tr",align:null},"9.806"),(0,r.kt)("td",{parentName:"tr",align:null},"352.448"),(0,r.kt)("td",{parentName:"tr",align:null},"39474.141")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"1"),(0,r.kt)("td",{parentName:"tr",align:null},"8"),(0,r.kt)("td",{parentName:"tr",align:null},"14"),(0,r.kt)("td",{parentName:"tr",align:null},"10.409"),(0,r.kt)("td",{parentName:"tr",align:null},"332.039"),(0,r.kt)("td",{parentName:"tr",align:null},"37188.286")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"1"),(0,r.kt)("td",{parentName:"tr",align:null},"16"),(0,r.kt)("td",{parentName:"tr",align:null},"7"),(0,r.kt)("td",{parentName:"tr",align:null},"10.581"),(0,r.kt)("td",{parentName:"tr",align:null},"326.634"),(0,r.kt)("td",{parentName:"tr",align:null},"36582.959")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"1"),(0,r.kt)("td",{parentName:"tr",align:null},"28"),(0,r.kt)("td",{parentName:"tr",align:null},"4"),(0,r.kt)("td",{parentName:"tr",align:null},"11.914"),(0,r.kt)("td",{parentName:"tr",align:null},"290.091"),(0,r.kt)("td",{parentName:"tr",align:null},"32489.942")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"\ud83c\udfc6",(0,r.kt)("strong",{parentName:"td"},"1")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"56")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"2")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"12.75")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"271.066")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"30358.923"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"1"),(0,r.kt)("td",{parentName:"tr",align:null},"112"),(0,r.kt)("td",{parentName:"tr",align:null},"1"),(0,r.kt)("td",{parentName:"tr",align:null},"12.141"),(0,r.kt)("td",{parentName:"tr",align:null},"284.678"),(0,r.kt)("td",{parentName:"tr",align:null}
1,"31883.706")))),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Optimal Configuration"),": 56 MPI ranks \xd7 2 OpenMP threads per rank"),(0,r.kt)("h4",{id:"performance-vs-mpi--openmp-threads"},"Performance vs MPI \xd7 OpenMP Threads"),(0,r.kt)("p",null,"The chart below illustrates the performance of GROMACS with different MPI and OpenMP configurations on a single node for the water_bare_hbonds:"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"Performance(ns) vs MPI \xd7 OpenMP - single node",src:n(57719).Z,width:"1200",height:"600"})),(0,r.kt)("h3",{id:"multi-node-scaling-results-1"},"Multi-Node Scaling Results"),(0,r.kt)("p",null,"Using the optimal configuration (56 MPI ranks \xd7 2 OpenMP threads), we tested strong scaling from 1 to 8 nodes:"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Nodes"),(0,r.kt)("th",{parentName:"tr",align:null},"ntasks"),(0,r.kt)("th",{parentName:"tr",align:null},"ntasks_per_node"),(0,r.kt)("th",{parentName:"tr",align:null},"cpus_per_task"),(0,r.kt)("th",{parentName:"tr",align:null},"Performance(ns/day)"),(0,r.kt)("th",{parentName:"tr",align:null},"WallTime_Result(s)"),(0,r.kt)("th",{parentName:"tr",align:null},"CoreTime(core-s)"),(0,r.kt)("th",{parentName:"tr",align:null},"Speedup"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"1"),(0,r.kt)("td",{parentName:"tr",align:null},"56"),(0,r.kt)("td",{parentName:"tr",align:null},"56"),(0,r.kt)("td",{parentName:"tr",align:null},"2"),(0,r.kt)("td",{parentName:"tr",align:null},"12.75"),(0,r.kt)("td",{parentName:"tr",align:null},"271.066"),(0,r.kt)("td",{parentName:"tr",align:null},"30358.923"),(0,r.kt)("td",{parentName:"tr",align:null},"1.00")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"2"),(0,r.kt)("td",{parentName:"tr",align:null},"112"),(0,r.kt)("td",{parentName:"tr",align:null},"56"),(0,r.kt)("td",{parentName:"tr",align:null},"2"),(0,r.kt)("td",{parentName:"tr",align:null},"23.098"),(0,r.kt)("td",{parentName:"tr",align:null},"149.632"),(0,r.kt)("td",{parentName:"tr",align:null},"33516.982"),(0,r.kt)("td",{parentName:"tr",align:null},"1.81")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"4"),(0,r.kt)("td",{parentName:"tr",align:null},"224"),(0,r.kt)("td",{parentName:"tr",align:null},"56"),(0,r.kt)("td",{parentName:"tr",align:null},"2"),(0,r.kt)("td",{parentName:"tr",align:null},"41.404"),(0,r.kt)("td",{parentName:"tr",align:null},"83.475"),(0,r.kt)("td",{parentName:"tr",align:null},"37395.313"),(0,r.kt)("td",{parentName:"tr",align:null},"3.25")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"8"),(0,r.kt)("td",{parentName:"tr",align:null},"448"),(0,r.kt)("td",{parentName:"tr",align:null},"56"),(0,r.kt)("td",{parentName:"tr",align:null},"2"),(0,r.kt)("td",{parentName:"tr",align:null},"78.088"),(0,r.kt)("td",{parentName:"tr",align:null},"44.26"),(0,r.kt)("td",{parentName:"tr",align:null},"39655.268"),(0,r.kt)("td",{parentName:"tr",align:null},"6.12")))),(0,r.kt)("h3",{id:"multi-node-performance-visualization-1"},"Multi-Node Performance Visualization"),(0,r.kt)("p",null,"The chart below shows the scaling performance across multiple nodes for the water_bare_hbonds system: "),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"Performance (ns) vs GPP nodes",src:n(20315).Z,width:"1200",height:"600"})),(0,r.kt)("p",null,"The GROMACS performance on the Water benchmark using 2 OpenMP threads per task shows good scaling up to 8 nodes. While the speedup scales reasonably well (reaching ~6.1\xd7 on 8 nodes), there is a gradual drop in parallel efficiency beyond 4 nodes. This is typical due to communication overheads, but overall the system maintains strong performance and moderate efficiency at scale."))}d.isMDXComponent=!0},96242:(t,e,n)=>{n.d(e,{Z:()=>a});const a=n.p+"assets/images/GROMACS_1_node_GPP-6d9b8d1039d0a48ee71ae09481be2696.png"},41582:(t,e,n)=>{n.d(e,{Z:()=>a});
1const a=n.p+"assets/images/Gromacs_16_node_GPP-36733a6bbb8ce4909d56d2019f817931.png"},20315:(t,e,n)=>{n.d(e,{Z:()=>a});const a=n.p+"assets/images/Gromacs_water_16_node_GPP-35c1d0fcd251538d870197c412978d6a.png"},57719:(t,e,n)=>{n.d(e,{Z:()=>a});const a=n.p+"assets/images/Gromacs_water_1_node_GPP-0f82fe2a87d2f0ad853d75a6a1bc151f.png"}}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.