<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Windows-1252">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Aptos;
        panose-1:2 11 0 4 2 2 2 2 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        font-size:10.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:#0563C1;
        text-decoration:underline;}
p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph
        {mso-style-priority:34;
        margin-top:0in;
        margin-right:0in;
        margin-bottom:0in;
        margin-left:.5in;
        font-size:10.0pt;
        font-family:"Calibri",sans-serif;}
span.EmailStyle19
        {mso-style-type:personal-reply;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;
        mso-ligatures:none;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
/* List Definitions */
@list l0
        {mso-list-id:390806582;
        mso-list-type:hybrid;
        mso-list-template-ids:932713928 67698703 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}
@list l0:level1
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l0:level2
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l0:level3
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        text-indent:-9.0pt;}
@list l0:level4
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l0:level5
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l0:level6
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        text-indent:-9.0pt;}
@list l0:level7
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l0:level8
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l0:level9
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        text-indent:-9.0pt;}
ol
        {margin-bottom:0in;}
ul
        {margin-bottom:0in;}
--></style>
</head>
<body lang="EN-US" link="#0563C1" vlink="#954F72" style="word-wrap:break-word">
<div class="WordSection1">
<p class="MsoNormal"><span style="font-size:11.0pt">You can attack this in a few different stages. A lot of what you’re interested in will be found at various university or national lab sites (I Googled “sbatch example” for the one below)<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<ol style="margin-top:0in" start="1" type="1">
<li class="MsoListParagraph" style="margin-left:0in;mso-list:l0 level1 lfo1"><span style="font-size:11.0pt">If you’re good with doing a “make -j” to parallelize a make compilation over multiple CPUs in a single computer to build one executable, you can adapt
 the first example from the Multi-Threaded SMP Job  section of [1], using the same number of cpus-per-task as you use for your -j flag.<o:p></o:p></span></li><li class="MsoListParagraph" style="margin-left:0in;mso-list:l0 level1 lfo1"><span style="font-size:11.0pt">Once that’s going, you can use a script similar to the one at [2] to submit an array of concurrent build jobs, and they can spread out across multiple
 computers as needed. The built-in job array support will only change an environment variable SLURM_ARRAY_TASK_ID for each job in the array, but you can use that value to select a folder to cd into, or to do other things.<o:p></o:p></span></li><li class="MsoListParagraph" style="margin-left:0in;mso-list:l0 level1 lfo1"><span style="font-size:11.0pt">For a higher-level abstraction that will submit a bunch of build jobs, wait for them all to finish, and then archive the resulting artifacts, a pipeline
 tool like Snakemake [3] can track the individual tasks, and work with batch jobs or with local programs on the submission host. Two Slurm-related profiles for Snakemake are at [4] (simpler) and [5] (more comprehensive).<o:p></o:p></span></li></ol>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">[1] <a href="https://help.rc.ufl.edu/doc/Multi-Threaded_%26_Message_Passing_Job_Scripts">
https://help.rc.ufl.edu/doc/Multi-Threaded_%26_Message_Passing_Job_Scripts</a><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">[2] <a href="https://help.rc.ufl.edu/doc/Sample_SLURM_Scripts#Array_job">
https://help.rc.ufl.edu/doc/Sample_SLURM_Scripts#Array_job</a><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">[3] <a href="https://snakemake.readthedocs.io/en/stable/">
https://snakemake.readthedocs.io/en/stable/</a><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">[4] <a href="https://github.com/jdblischak/smk-simple-slurm">
https://github.com/jdblischak/smk-simple-slurm</a><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">[5] <a href="https://github.com/Snakemake-Profiles/slurm">
https://github.com/Snakemake-Profiles/slurm</a><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<div id="mail-editor-reference-message-container">
<div>
<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal" style="margin-bottom:12.0pt"><b><span style="font-size:12.0pt;font-family:"Aptos",sans-serif;color:black">From:
</span></b><span style="font-size:12.0pt;font-family:"Aptos",sans-serif;color:black">slurm-users <slurm-users-bounces@lists.schedmd.com> on behalf of Duane Ellis <duane@duaneellis.com><br>
<b>Date: </b>Wednesday, January 3, 2024 at 2:41 PM<br>
<b>To: </b>slurm-users@lists.schedmd.com <slurm-users@lists.schedmd.com><br>
<b>Subject: </b>[slurm-users] Slurp for sw builds<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:11.0pt">External Email Warning<br>
<br>
This email originated from outside the university. Please use caution when opening attachments, clicking links, or responding to requests.<br>
<br>
________________________________<br>
<br>
In my case I would like to use a slurm cluster for a sw ci/cd like solution for building sw images<br>
<br>
My current scripted full system build  takes 3-5 hours and is done serially we could easily find places where we can choose to build things in parallel hence the idea is to spawn parallel builds on the Linux slurm cluster<br>
<br>
example: we have a list of images we iterate over in a for loop to build each thing the steps are: cd somedir then type make or run a shell script in that directory<br>
<br>
The last step after the for loop would be wait for all of the child builds to complete<br>
<br>
Once all child jobs are done we have a single job that combines or packages all the intermediate images<br>
<br>
Really want to use slurm because our FPGA team will have a giant slurm linux cluster for Xilinix FPGA builds and those nodes can do what we need for sw purposes (reusing the existing cluster is a huge win for us)<br>
<br>
My question is this:<br>
<br>
Can somebody point me to some sw build examples for or using slurm? All I can seem to find is how to install<br>
<br>
I see the srun and sbatch command man pages but no good examples<br>
<br>
Bonus would be something that integrates into a gitlab runner example or Jenkins in some way<br>
<br>
All I can seem to find is how to install and administer slurm not a how to use slurm<br>
<br>
<br>
Sent from my iPhone<o:p></o:p></span></p>
</div>
</div>
</div>
</div>
</body>
</html>