PageSourceSearch

https://www.bsc.es/supportkc/assets/js/05eb8bb4.ea9cd93a.js

js bsc.es collected 2026-09-24 08:42:22 UTC 15,181 bytes, 1 lines download raw bytes

1"use strict";(self.webpackChunksupportkc_new=self.webpackChunksupportkc_new||[]).push([[269],{3905:(t,e,n)=>{n.d(e,{Zo:()=>u,kt:()=>k});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 o(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 p=a.createContext({}),s=function(t){var e=a.useContext(p),n=e;return t&&(n="function"==typeof t?t(e):i(i({},e),t)),n},u=function(t){var e=s(t.components);return a.createElement(p.Provider,{value:e},t.children)},m="mdxType",d={inlineCode:"code",wrapper:function(t){var e=t.children;return a.createElement(a.Fragment,{},e)}},c=a.forwardRef((function(t,e){var n=t.components,r=t.mdxType,l=t.originalType,p=t.parentName,u=o(t,["components","mdxType","originalType","parentName"]),m=s(n),c=r,k=m["".concat(p,".").concat(c)]||m[c]||d[c]||l;return n?a.createElement(k,i(i({ref:e},u),{},{components:n})):a.createElement(k,i({ref:e},u))}));function k(t,e){var n=arguments,r=e&&e.mdxType;if("string"==typeof t||r){var l=n.length,i=new Array(l);i[0]=c;var o={};for(var p in e)hasOwnProperty.call(e,p)&&(o[p]=e[p]);o.originalType=t,o[m]="string"==typeof t?t:r,i[1]=o;for(var s=2;s<l;s++)i[s]=n[s];return a.createElement.apply(null,i)}return a.createElement.apply(null,n)}c.displayName="MDXCreateElement"},31765:(t,e,n)=>{n.r(e),n.d(e,{assets:()=>p,contentTitle:()=>i,default:()=>d,frontMatter:()=>l,metadata:()=>o,toc:()=>s});var a=n(87462),r=(n(67294),n(3905));const l={sidebar_position:1,sidebar_label:"GROMACS"},i="Accelerated Partition Applications",o={unversionedId:"MareNostrum5/Marenostrum5-Applications/ACC/GROMACS",id:"MareNostrum5/Marenostrum5-Applications/ACC/GROMACS",title:"Accelerated Partition Applications",description:"GROMACS",source:"@site/docs/MareNostrum5/Marenostrum5-Applications/ACC/GROMACS.md",sourceDirName:"MareNostrum5/Marenostrum5-Applications/ACC",slug:"/MareNostrum5/Marenostrum5-Applications/ACC/GROMACS",permalink:"/supportkc/docs/MareNostrum5/Marenostrum5-Applications/ACC/GROMACS",draft:!1,tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1,sidebar_label:"GROMACS"},sidebar:"tutorialSidebar",previous:{title:"CP2K",permalink:"/supportkc/docs/MareNostrum5/Marenostrum5-Applications/ACC/CP2K"},next:{title:"NAMD",permalink:"/supportkc/docs/MareNostrum5/Marenostrum5-Applications/ACC/NAMD"}},p={},s=[{value:"GROMACS",id:"gromacs",level:2},{value:"Overview",id:"overview",level:3},{value:"Test Datasets",id:"test-datasets",level:3},{value:"Test Case: lignocellulose-rf.tpr",id:"test-case-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:3},{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}],u={toc:s},m="wrapper";function d(t){let{components:e,...l}=t;return(0,r.kt)(m,(0,a.Z)({},u,l,{components:e,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"accelerated-partition-applications"},"Accelerated 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 the following input dataset:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(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)("h2",{id:"test-case-lignocellulose-rftpr"},"Test Case: 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=4  # Number of MPI ranks per node\n#SBATCH --cpus-per-task=20     # 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 --gres=gpu:4          # Specify the number of GPUs to be used for each node\n#SBATCH --account=xxxx        # Specify the account\n#SBATCH --partition=acc       # Running on the ACC partition\n#SBATCH --qos=xxxxx           # Define the appropriate QoS\n\n# Load required modules\nmodule purge\nmodule load nvidia-hpc-sdk fftw/3.3.10-gcc-nvhpcx gromacs/2024.2\n\n# Set environment variables\nexport SLURM_CPU_BIND=none\nexport GMX_ENABLE_DIRECT_GPU_COMM=1\n\n# Ru
1n GROMACS simulation\nmpirun --bind-to none -x OMP_NUM_THREADS=$SLURM_CPUS_PER_TASK wrapper.sh gmx_mpi mdrun -s lignocellulose-rf.tpr -pin on -noconfout -nsteps 20000 -nstlist 200 -dlb yes\n\n\n")),(0,r.kt)("h3",{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 ACC node. 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},"80"),(0,r.kt)("td",{parentName:"tr",align:null},"18.708"),(0,r.kt)("td",{parentName:"tr",align:null},"184.742"),(0,r.kt)("td",{parentName:"tr",align:null},"14778.602")),(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},"40"),(0,r.kt)("td",{parentName:"tr",align:null},"25.711"),(0,r.kt)("td",{parentName:"tr",align:null},"134.425"),(0,r.kt)("td",{parentName:"tr",align:null},"10753.609")),(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"},"4")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"20")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"43.236")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"79.937")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"6394.659"))),(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},"10"),(0,r.kt)("td",{parentName:"tr",align:null},"38.918"),(0,r.kt)("td",{parentName:"tr",align:null},"88.806"),(0,r.kt)("td",{parentName:"tr",align:null},"7104.099")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"1"),(0,r.kt)("td",{parentName:"tr",align:null},"10"),(0,r.kt)("td",{parentName:"tr",align:null},"8"),(0,r.kt)("td",{parentName:"tr",align:null},"34.651"),(0,r.kt)("td",{parentName:"tr",align:null},"99.741"),(0,r.kt)("td",{parentName:"tr",align:null},"7978.876")),(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},"5"),(0,r.kt)("td",{parentName:"tr",align:null},"32.743"),(0,r.kt)("td",{parentName:"tr",align:null},"105.554"),(0,r.kt)("td",{parentName:"tr",align:null},"8443.767")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"1"),(0,r.kt)("td",{parentName:"tr",align:null},"20"),(0,r.kt)("td",{parentName:"tr",align:null},"4"),(0,r.kt)("td",{parentName:"tr",align:null},"30.675"),(0,r.kt)("td",{parentName:"tr",align:null},"112.67"),(0,r.kt)("td",{parentName:"tr",align:null},"9012.966")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"1"),(0,r.kt)("td",{parentName:"tr",align:null},"40"),(0,r.kt)("td",{parentName:"tr",align:null},"2"),(0,r.kt)("td",{parentName:"tr",align:null},"16.206"),(0,r.kt)("td",{parentName:"tr",align:null},"212.773"),(0,r.kt)("td",{parentName:"tr",align:null},"17021.347")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"1"),(0,r.kt)("td",{parentName:"tr",align:null},"80"),(0,r.kt)("td",{parentName:"tr",align:null},"1"),(0,r.kt)("td",{parentName:"tr",align:null},"7.076"),(0,r.kt)("td",{parentName:"tr",align:null},"488.462"),(0,r.kt)("td",{parentName:"tr",align:null},"39075.878")))),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Optimal Configuration"),": 4 MPI ranks \xd7 20 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(ns) vs MPI \xd7 OpenMP - single node",src:n(3065).Z,width:"1200",height:"600"})),(0,r.kt)("h3",{id:"multi-node-scaling-results"},"Multi-Node Scaling Results"),(0,r.kt)("p",null,"Using the optimal configuration (4 MPI ranks \xd7 20 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},"4"),(0,r.kt)("td",{parentName:"tr",align:null},"4"),(0,r.kt)("td",{parentName:"tr",align:null},"20"),(0,r.kt)("td",{parentName:"tr",align:null},"43.236"),(0,r.kt)("td",{parentName:"tr",align:null},"79.937"),(0,r.kt)("td",{parentName:"tr",align:null},"6394.659"),(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},"8"),(0,r.kt)("td",{parentName:"tr",align:null},"4"),(0,r.kt)("td",{parentName:"tr",align:null},"20"),(0,r.kt)("td",{parentName:"tr",align:null},"65.909"),(0,r.kt)("td",{parentName:"tr",align:null},"52.439"),(0,r.kt)("td",{parentName:"tr",align:null},"8389.705"),(0,r.kt)("td",{parentName:"tr",align:null},"1.52")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"4"),(0,r.kt)("td",{parentName:"tr",align:null},"16"),(0,r.kt)("td",{parentName:"tr",align:null},"4"),(0,r.kt)("td",{parentName:"tr",align:null},"20"),(0,r.kt)("td",{parentName:"tr",align:null},"105.80"),(0,r.kt)("td",{parentName:"tr",align:null},"32.666"),(0,r.kt)("td",{parentName:"tr",align:null},"10452.214"),(0,r.kt)("td",{parentName:"tr",align:null},"2.45")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"8"),(0,r.kt)("td",{parentName:"tr",align:null},"32"),(0,r.kt)("td",{parentName:"tr",align:null},"4"),(0,r.kt)("td",{parentName:"tr",align:null},"20"),(0,r.kt)("td",{parentName:"tr",align:null},"181.83"),(0,r.kt)("td",{parentName:"tr",align:null},"19.007"),(0,r.kt)("td",{parentName:"tr",align:null},"12162.67"),(0,r.kt)("td",{parentName:"tr",align:null},"4.20")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"16"),(0,r.kt)("td",{parentName:"tr",align:null},"64"),(0,r.kt)("td",{parentName:"tr",align:null},"4"),(0,r.kt)("td",{parentName:"tr",align:null},"20"),(0,r.kt)("td",{parentName:"tr",align:null},"67.307"),(0,r.kt)("td",{parentName:"tr",align:null},"51.349"),(0,r.kt)("td",{parentName:"tr",align:null},"65723.351"),(0,r.kt)("td",{parentName:"tr",align:null},"1.56")))),(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:"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"Performance(ns) vs ACC no
1des",src:n(92033).Z,width:"1200",height:"600"})),(0,r.kt)("p",null,"The performance scales well up to 8 nodes, achieving a speedup of 4.2\xd7, close to ideal for this setup. However, at 16 nodes, performance drops significantly, indicating parallel inefficiency or potential resource saturation. This suggests that the application likely does not scale beyond 8 nodes under the current configuration and problem size."))}d.isMDXComponent=!0},3065:(t,e,n)=>{n.d(e,{Z:()=>a});const a=n.p+"assets/images/GROMACS_1_node_ACC-937c14b3fa8819625a708c4c56a7a45c.png"},92033:(t,e,n)=>{n.d(e,{Z:()=>a});const a=n.p+"assets/images/Gromacs_16_node_ACC-a6c68cdf8f865ab861621daa8e942866.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.